.model tiny .386 .387 .code org 100h start: ;realoknu pamet (jestli je dost na doublebuffer) mov ah,4ah mov bx,8192 int 21h jnc short real ret real: mov ax,13h int 10h cld ; vygenerovani tabulky sinu mov cx,256 mov di,offset sintab finit fild fpupom mov fpupom,128 fild fpupom mov fpupom,0 fldpi singen: fild fpupom fmul st(0),st(1) fdiv st(0),st(2) fsin fmul st(0),st(3) fistp word ptr [di] inc di inc di inc fpupom loop singen ; nastavim si paletu mov al,1 mov dx,3c8h out dx,al mov cx,60 ;mam 20 barev mov ax,1414h inc dx pall: out dx,al push ax mov al,ah out dx,al xor ax,ax out dx,al pop ax add al,2 add ah,2 loop pall ; paleta by byla ;vektor klavesnice push 0 pop fs mov eax,fs:[36] mov vec9,eax cli mov word ptr fs:[36],offset keyb mov fs:[38],cs sti mov bp,es add bp,4096 mov fs,bp main: ; vymaz shadow mov cx,16000 xor eax,eax xor di,di mov es,bp rep stosd call berle mov ax,word ptr [sproff1x] mov bx,word ptr [sproff2x] mov word ptr [sproff1x],bx push ax call berle pop ax mov word ptr [sproff1x],ax inc sproff1x add sproff1y,2 add sproff2x,2 inc sproff2y ; tady se bude cekat na paprsek cmp flsyn,0 jz short cpy syn: mov dx,3dah sya: in al,dx test al,8 jz short sya syb: in al,dx test al,8 jnz short syb ; kopirovani ze shadow do video cpy: mov cx,16000 xor di,di xor si,si mov ds,bp push 0a000h pop es rep movsd push cs pop ds paus: cmp flpause,0 jz short paus cmp flkon,1 jnz short main mov ebx,vec9 push 0 pop ds mov ds:[36],ebx mov ax,3 int 10h ret ;tisk spritu sprite: mov si,offset sprdat mov cx,vely spr0: push cx mov cx,velx spr1: lodsb and al,al jz short spr2 mov fs:[di],al spr2: inc di loop spr1 pop cx add di,300 loop spr0 ret ;berle berle: mov cx,320 xor bx,bx mov bl,sproff1y rol bx,1 add bx,offset sintab mov ax,90 add ax,[bx] mul cx add ax,150 xor bx,bx mov bl,sproff1x rol bx,1 add bx,offset sintab add ax,[bx] mov di,ax call sprite ret ;obluha keybu keyb: push ax in al,60h cmp al,81h jnz short keyb1 inc cs:[flkon] keyb1: cmp al,0b9h jnz short keyb2 not cs:[flsyn] keyb2: cmp al,1ch jnz short keyb3 not cs:[flpause] keyb3: mov al,20h out 20h,al pop ax iret velx dw 20 vely dw 20 sprdat db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,11, 0, 0, 0, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 0, 0, 0,10,11, 0, 0, 0, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 0, 0, 0,10,11, 0, 0, 0, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 0, 0, 0,10,11, 0, 0, 0, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 0, 0, 9,10,11,12, 0, 0, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 0, 0, 9,10,11,12, 0, 0, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 0, 8, 9,10,11,12,13, 0, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 7, 8, 9,10,11,12,13,14, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 5, 6, 7, 8, 9,10,11,12,13,14,15,16, 0, 0, 0, 0 db 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19, 0 db 0, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20 db 0, 0, 0, 0, 5, 6, 7, 8, 9,10,11,12,13,14,15,16, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 7, 8, 9,10,11,12,13,14, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 0, 8, 9,10,11,12,13, 0, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 0, 0, 9,10,11,12, 0, 0, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 0, 0, 9,10,11,12, 0, 0, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 0, 0, 0,10,11, 0, 0, 0, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 0, 0, 0,10,11, 0, 0, 0, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 0, 0, 0,10,11, 0, 0, 0, 0, 0, 0, 0, 0, 0 db 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 flkon db 0 flsyn db 0ffh flpause db 0 fpupom dw 40 ; amplituda sinu sproff1x db 0 sproff1y db 0 sproff2x db 128 sproff2y db 0 vec9 dd ? sintab dw 256 dup(?) end start