; Twoerl v4 (with vsync and different palette) ; /mic, 2008 | micol972@gmail.com | http://jiggawatt.org/badc0de ; ; Press [ESC] to exit the program. ; ; How to compile: ; nasm -o twoerl4.com twoerl4.asm ; %define delta bp %define temp bp+4 %define p1 0x300 %define p2 0x302 %define pos 0x304 [org 0x100] start: mov al,0x13 int 0x10 mov bp,0x200 mov bh,0xF0 mov cx,0x100 @@setup_sine: mov word [bp],cx fild word [bp] fmul dword [foo] fsin fmul dword [foo+2] fistp word [bx] inc bx inc bx loop @@setup_sine mov dx,0x3C8 xor ax,ax xor bx,bx out dx,al inc dx mov ch,1 @@1: mov al,bl shr al,2 out dx,al xchg al,ah out dx,al mov ax,bx cmp al,63 jna @@2 mov al,63 @@2: out dx,al inc bx loop @@1 @@mainloop: push 0xa000 pop es mov ax,[pos] mov [p2],ax shl ax,8 mov [p1],ax mov dx,0x3DA @@wait1: in ax,dx and al,8 jnz short @@wait1 @@wait2: in ax,dx and al,8 jz short @@wait2 mov si,0xF000 xor di,di mov cl,200 @@yloop: push cx movzx bx,byte [p1+1] add bx,bx mov ax,[bx+si] ; sa movzx bx,byte [p2] add bl,64 add bx,bx mov dx,[bx+si] ; ca movzx bx,byte [pos] add bx,bx mov bp,[bx+si] ; t lea ebp,[ebp+edx*8] sub bp,dx mov dx,ax sar dx,5 mov al,cl push ax mov cl,128 add cx,dx mov dx,320 sub dx,cx rep stosb mov cl,64 @@xloop: mov ax,bp sar ax,8 and ax,15 sub al,7 jns @@3 neg al @@3: shl al,3 stosb add bp,0x55 loop @@xloop sub dl,64 mov cx,dx pop ax rep stosb inc byte [p2] mov ax,[ddp] add word [p1],ax pop cx loop @@yloop inc word [pos] sar bp,1 mov [ddp],bp in al,60h dec al jnz @@mainloop ret foo: dd 0x3CC90FDB dw 0x4380 ddp: