Hallo
Ik heb een stukje code gemaakt , maar het is nogal lang en ik gebruik steeds dezelfde code, maar ik weet niet goed hoe ik dit korter kan maken
ik heb hieronder de code staan (ze werkt dus wel , maar is nogal lang en altijd hetzelfde)
en ik wil dus 4 vierkanten tekenen (eerst alle 4 in centrale geheugen en dan kopieren naar videogeheugen), en voor elk van deze 4 vierkanten gebruik ik dezelfde code maar met andere waarden
posblokjes is dus een word array dat de x1,y1,x2,y2,x3,y3,x4,y4 van de linkerbovenhoek van de 4 vierkanten bevat
soort staat gedefinieerd in het data segment zodat hij een vierkantje kan tekenen in het groen met een rode rand
ik dacht er dus aan in cx 4 te zetten en dan een loop te maken (dus tot cx nul is en dan stoppen), maar dan moet de index in de array van posblokjes van deze cx afhangen en als ik bijvoorbeeld een "dw index ?" doe en deze de goede waarde geef bv "mov index,0" en ik zet deze in de code dus "mov ax,posblokjes[index]" geeft hij de fout "cannot add 2 relocatable files"
ook dacht ik eraan de code die ik steeds hergebruik in een macro te zetten, maar ik zie niet goed hoe de loop dan moet staan en hoe deze dan moet werken
Als iemand kan helpen, zou ik hem/haar zeer dankbaar zijn
Ik heb een stukje code gemaakt , maar het is nogal lang en ik gebruik steeds dezelfde code, maar ik weet niet goed hoe ik dit korter kan maken
ik heb hieronder de code staan (ze werkt dus wel , maar is nogal lang en altijd hetzelfde)
en ik wil dus 4 vierkanten tekenen (eerst alle 4 in centrale geheugen en dan kopieren naar videogeheugen), en voor elk van deze 4 vierkanten gebruik ik dezelfde code maar met andere waarden
posblokjes is dus een word array dat de x1,y1,x2,y2,x3,y3,x4,y4 van de linkerbovenhoek van de 4 vierkanten bevat
soort staat gedefinieerd in het data segment zodat hij een vierkantje kan tekenen in het groen met een rode rand
ik dacht er dus aan in cx 4 te zetten en dan een loop te maken (dus tot cx nul is en dan stoppen), maar dan moet de index in de array van posblokjes van deze cx afhangen en als ik bijvoorbeeld een "dw index ?" doe en deze de goede waarde geef bv "mov index,0" en ik zet deze in de code dus "mov ax,posblokjes[index]" geeft hij de fout "cannot add 2 relocatable files"
ook dacht ik eraan de code die ik steeds hergebruik in een macro te zetten, maar ik zie niet goed hoe de loop dan moet staan en hoe deze dan moet werken
Als iemand kan helpen, zou ik hem/haar zeer dankbaar zijn
PHP:
tekenblok macro soort
local asciimodeex1_wait1,asciimodeex1_wait2,teken_alle_lijnen,teken_alle_lijnen2,teken_alle_lijnen3,teken_alle_lijnen4
push bp
mov bp,sp
push ax
push bx
push dx
push si
mov ax,@data
mov ds,ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov si,offset soort
mov di,seg videobuffer
mov es,di
mov di,offset videobuffer
mov ax,posblokjes[2]
mov bx,schermlengte
mul bx
add ax,posblokjes[0]
mov di,ax
mov cx,zijde
teken_alle_lijnen:
push cx
mov cx,zijde
rep movsb
add di,schermlengte-zijde
pop cx
loop teken_alle_lijnen
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov si,offset soort
mov di,seg videobuffer
mov es,di
mov di,offset videobuffer
mov ax,posblokjes[6]
mov bx,schermlengte
mul bx
add ax,posblokjes[4]
mov di,ax
mov cx,zijde
teken_alle_lijnen2:
push cx
mov cx,zijde
rep movsb
add di,schermlengte-zijde
pop cx
loop teken_alle_lijnen2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov si,offset soort
mov di,seg videobuffer
mov es,di
mov di,offset videobuffer
mov ax,posblokjes[10]
mov bx,schermlengte
mul bx
add ax,posblokjes[8]
mov di,ax
mov cx,zijde
teken_alle_lijnen3:
push cx
mov cx,zijde
rep movsb
add di,schermlengte-zijde
pop cx
loop teken_alle_lijnen3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov si,offset soort
mov di,seg videobuffer
mov es,di
mov di,offset videobuffer
mov ax,posblokjes[14]
mov bx,schermlengte
mul bx
add ax,posblokjes[12]
mov di,ax
mov cx,zijde
teken_alle_lijnen4:
push cx
mov cx,zijde
rep movsb
add di,schermlengte-zijde
pop cx
loop teken_alle_lijnen4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov dx,seg videobuffer
mov ds,dx
mov si,offset videobuffer
mov dx,0A000h
mov es,dx
xor di,di
mov dx, 03dah
asciimodeex1_wait1:
in al, dx
and al, 8
jnz asciimodeex1_wait1
asciimodeex1_wait2:
in al, dx
and al, 8
jz asciimodeex1_wait2
mov cx,64000
rep movsb
pop ax
pop bx
pop dx
pop si
;restore bp
pop bp
mov ax,@data
mov ds,ax
endm