org 100h use16 mov al,13h int 10h ;---calc sin--- ; strange behaviour at oracle virtualbox ;bx=0 ;sinlp: ;;s(i)=Int(32*Sin(i*#PI/128)) ; fldpi ; fidiv [cs:const128] ; mov [cs:tmp],bx ; fimul word [cs:tmp] ; fsin ; fimul [cs:const32] ; fist word [cs:tmp] ; mov al,byte [cs:tmp] ; mov [cs:sint+bx],al ; inc bl ; jne sinlp ; call tpl mov si,128 xor di,di xor dx,dx xor cx,cx mov bl,64 slp: add dx,cx add cx,4 mov al,dh ; neg al mov [cs:sint+di],al mov [cs:sint+si+128],al neg al add al,32*2 mov [cs:sint+si],al mov [cs:sint+di+128],al dec si inc di dec bl jns slp ;------------test plot-------------- ;tpl: ;xor bx,bx ;push 0A000h ;pop es ;tplp: ; mov ax,100*0 ; add al,byte [cs:sint+bx] ; cwd ; imul ax,320 ; add ax,bx ; mov di,ax ; mov byte [es:di],15 ; inc bl ; jne tplp ;; ret mov dx,03c8h xor al,al out dx,al inc dx out_pal: out dx,al out dx,al out dx,al inc al cmp al,64 jne out_pal ;---------------- adalp: push 08000h pop es xor di,di;mov di,320*20 xor cx,cx;hl xor dh,dh;dh=y,dl=a dec dl;a-1 ;a.a=0 ;-sh.a=1 ;-de.w=85 ;-y0.a=20 ; Repeat ; a-1 ; a0.a=a ; hl.w=0 ; StartDrawing(ScreenOutput()) ; Box (0,0,256,192,RGB(0,0,255)) ylp: ; For y=0 To 191 ; a0=a+(hl>>8) ; hl+de ; x=128+((y>>sh)*s(a0))>>5 mov bl,dl add bl,ch add cx,85 call plot2 call plot2 ;; call plot ;; call plot ; Box (x,y+y0,1,1,RGB(255,255,255)) ; b.a=a0+64 ; x=128+((y>>sh)*s(b))>>5 ; Box (x,y+y0,1,1,RGB(255,255,255)) ; ; b=b+64 ; x=128+((y>>sh)*s(b))>>5 ; Box (x,y+y0,1,1,RGB(255,255,255)) ; ; b=b+64 ; x=128+((y>>sh)*s(b))>>5 ; Box (x,y+y0,1,1,RGB(255,255,255)) ; ; Next y inc dh add di,320 cmp dh,200-20-1 jne ylp push dx ;verical retrace check: mov dx, 3dah @wait1: in al, dx test al, 8 jz @wait1 @wait2: in al, dx test al, 8 jnz @wait2 ; mov dx, 3DAh ;@wait4retrace: ; in al, dx ; and al, 8 ; jz short @wait4retrace xor si,si xor di,di mov cx,64000 push es pop ds push 0A000h pop es pusha rep movsb popa push ds pop es xor ax,ax rep stosd ; draw stars mov di,bp push cx ; add bp,320 mov cx,320*3 add bp,cx star_lp: mov byte [es:di],al inc al and al,63 add di,si add di,si add si,cx sar si,1 dec cx jne star_lp ; pop cx pop dx in al, 60h dec al jnz adalp plot2: call plot plot: ; x=128+((y>>sh)*s(a0))>>5 pusha movzx ax,dh sar ax,1 cwd movsx cx,byte[cs:sint+bx] sub cx,32 imul ax,cx sar ax,5 mov bx,ax mov byte [es:di+bx+159+20*320],63;15 popa add bl,64 ret const128 dw 128 const32 dw 32 tmp dw 0 sint: