WORMGAME.ASM
Lars 17v ja asm-matopeli.
Ei mitään muistikuvaa toimiiko. .model tiny .286p .stack 256 enter_vga256 macro mov ah,0 mov al,13h int 10h endm enter_vga256 enter_text macro mov ah,0 mov al,03h int 10h endm enter_text terminate macro mov ah,4ch mov al,error int 21h endm terminate laskekerros macro push ax mov ax,0 cmp cx,12 jg poijes add ax,316 cmp cx,8 jg poijes add ax,316 cmp cx,4 jg poijes add ax,316 poijes: sub cx,ax pop ax endm laskekerros draw macro ; dx = x bx = y push ds pop es push dx ; tallennetaan dx stackiin mov ax,320 ; laitetaan ax:„„n kertomis arvo imul bx ; kerrotaan 320 x y etta saadaan oikea y kohta mov bx,ax ; laitetaan bx:„„n tulos pop dx ; palautetaan dx:„n arvo stackista add bx,dx ; lisataan x:„n arvo saatuun y:n arvoon mov ax,0a000h ; laitetaan ax:n nayttomuistin segmenttiosoite push ds ; tallennetaan datasegmentti push ax ; laitetaan ax ds:„„n pop ds ; ------------------- mov cx,16 kakka: push bx mov bx,cx mov al,byte ptr es:[mato+bx-1] pop bx push bx push cx laskekerros add bx,cx sub bx,15 mov byte ptr [bx],al ; laitetaan nayttomuistiin numero uno eli sininen pop cx pop bx loop kakka pop ds ; palautetaan datasegmentti endm draw waitforesc macro takas: in al,60h cmp al,1 je pois jmp takas pois: endm waitforesc reunat macro mov cx,319 mov bx,0a000h push ds push bx pop ds kakkaloop: mov bx,cx mov byte ptr [bx],7 loop kakkaloop pop ds mov cx,200 mov bx,0a000h push ds push bx pop ds kakiloop: mov bx,cx mov ax,320 dec bx mul bx mov bx,ax mov byte ptr [bx],7 loop kakiloop pop ds mov cx,319 mov bx,0a000h push ds push bx pop ds kikuliloop: mov bx,cx add bx,320*199 mov byte ptr [bx],8 loop kikuliloop pop ds mov cx,200 mov bx,0a000h push ds push bx pop ds kakiuloop: mov bx,cx mov ax,320 dec bx mul bx mov bx,ax add bx,319 mov byte ptr [bx],8 loop kakiuloop pop ds endm reunat tarkistareunat macro mov ax,1 cmp x,319 jge hui cmp x,0 jle hui cmp y,199 jge hui cmp y,0 jle hui jmp kuuppa hui: mov ax,0 kuuppa: endm tarkistareunat liiku macro cmp su,1 je vase cmp su,2 je oike cmp su,3 je ylo cmp su,4 je ala jmp kanalaan vase: add x,4 jmp kanalaan oike: sub x,4 jmp kanalaan ylo: sub y,3 jmp kanalaan ala: add y,3 kanalaan: endm liiku delay macro mov cx,summa kakalooppo: nop loop kakalooppo mov cx,summa kkakalooppo: nop loop kkakalooppo mov cx,summa kkkakalooppo: nop loop kkkakalooppo endm delay tarkistasuunnat macro in al,60h cmp al, 72 je ylospain cmp al, 80 je alaspain cmp al, 75 je vasepain cmp al, 77 je oikepain jmp alapain ylospain: cmp su,4 je huu mov su,3 jmp alapain alaspain: cmp su,3 je huu mov su,4 jmp alapain vasepain: cmp su,1 je huu mov su,2 jmp alapain oikepain: cmp su,2 je huu mov su,1 alapain: mov ax,1 jmp odut huu: mov ax,0 odut: endm tarkistasuunnat flush macro mov ah,0bh int 21h cmp al,0ffh je flushhaa jmp ksjfkj flushhaa: mov ah,7 int 21h mov ah,0bh int 21h cmp al,0 je ksjfkj jmp flushhaa ksjfkj: endm flush assume ds:@data,cs:@code .data mato db 3, 11,11,3 db 11,15,15,11 db 11,15,15,11 db 3, 11,11,3 x dw 100 y dw 100 su db 0 ; 1 = vase 2 = oike 3 = ylo 4 = ala initmessage db 'Data-segment purified...$' acti db 'Activating worm-game plus 0.9$' summa dw 60000 error db 0 .code mov dx,@data push dx pop ds lea dx,initmessage mov ah,9 int 21h lea dx,acti mov ah,9 int 21h enter_vga256 reunat alkuun: ; loopin alku flush mov dx,x mov bx,y draw delay tarkistareunat ; jos ax=1 kaikki ok, jos ax=0, mennaan pois cmp ax,1 je hyvin jmp pojjjes hyvin: ; tarkistaosumat ; jos ax=1 kaikki ok, jos ax=0, menaan kotiin cmp ax,1 je paremmin jmp pojjjes paremmin: tarkistasuunnat ; jos ax=1 kaikki ok, jos ax=0, menaan kotiin cmp ax,1 je hyvins jmp pojjjes hyvins: liiku in al,60h ; loopin loppu cmp al,1 je pojjjes jmp alkuun pojjjes: enter_text terminate end -- Lars |
Sivu luotu: 00:22 (GMT +2). |