.model tiny .data incr db 0,1,-1,1,0,0,1,0 ; inkrementy R,G,B pro 4 serie ; R: 0,1,-1,1 si=0..3 ; G: 0,0,1,0 si=4..7 ; B: 1,-1,1,0 si=1..4 .code org 100h start: mov ah,0fh int 10h cbw push ax mov al,13h int 10h mov ax,0a000h mov es,ax cbw mov dx,03c8h xor bx,bx xor cx,cx ; ch=zarazka pro al mov si,offset incr set: add ch,64 ; prvni zarazka=64, posledni=256(=0) serie: out dx,ax ; na branu 3c8 al, na 3c9 R=ah inc dx ; brana 3c9 xchg ax,bx out dx,al ; G=bl xchg ax,bx xchg ax,cx out dx,al ; B=cl xchg ax,cx dec dx inc al cmp al,ch jz dalsi ; konec serie => nemen al,bl,cl add ah,[si] add bl,[si+4] add cl,[si+1] jmp serie dalsi: inc si cmp ch,0 jnz set xor cx,cx kresli: mov dx,320 ; hlavni posun mov di,1 ; vedlejsi posun mov ax,cx ; ax=abs(x0-x1).. mov bl,199 ; bx=D push cx ; test sudost shr cl,1 pop cx jnc sude mov si,256 ; liche: dolu, hp=320, vp=1,-1, K=abs(x0-x1), D=199 sub ax,192 ; abs(x0-x1)=abs(256-(64+barva))=abs(192-barva) jnc cara ; skok pro x0>x1 - nastaveno neg di ; jinak je x0D/2 pop bx jl pokrac add si,di ; bod=bod+vp sub ax,bx ; prub=prub-D pokrac: add ax,bp dec ch jnz cyklus inc cl jnz kresli ; barva od 0 do 255, konec pri 256(=0) mov ah,8 int 21h pop ax int 10h ret end start