.286 .model small .code org 100h ;-------------------- count equ 100 delay equ 1 startx equ 10 starty equ 10 sizex equ 40 sizey equ 10 ;-------------------- start: mov ax, 13h int 10h mov curx, startx mov cury, starty mov cx, count lu: mov ah, 06h mov dl, 0ffh int 21h jnz GAMEOVER push curx push cury push offset face push sizex push sizey call WriteSprite mov ax, curx cmp ax, 0 je toright b1: add ax, sizex cmp ax, 319 je toleft b2: mov ax, cury cmp ax, 0 je todown b3: add ax, sizey cmp ax, 199 je toup jmp gx toright:mov byte ptr cs:[offset gx+2], 06h jmp b1 toleft: mov byte ptr cs:[offset gx+2], 0Eh jmp b2 todown: mov byte ptr cs:[offset gy+2], 06h jmp b3 toup: mov byte ptr cs:[offset gy+2], 0Eh gx: dec curx gy: dec cury push delay call CoolWait jmp lu gameover: mov ax, 3h int 10h int 20h ;---------------------------------- CoolWait proc near ; CoolWait(word delay); push bp mov bp, sp push cx mov cx, word ptr [bp+4] ggg: push cx mov cx, 0 loop $ pop cx loop ggg pop cx pop bp ret 2 endp ;---------------------------------------- WriteSprite proc near ;writesprite(x,y,char *sprt,razmx,razmy) push bp mov bp,sp razmy equ word ptr [bp+4] razmx equ word ptr [bp+6] sprt equ word ptr [bp+8] posy equ word ptr [bp+10] posx equ word ptr [bp+12] pusha push es mov ax, 0A000h mov es, ax mov ax, posy mov bx, ax shl ax, 8 shl bx, 6 add ax, bx add ax, posx mov di, ax mov ax, sprt mov si, ax mov cx, razmy ; Wait for Vsync mov dx, 03DAh wait1: in al,dx and al, 08 jnz wait1 wait2: in al, dx and al,08 jz wait2 ; lup: push cx mov cx, razmx repe movsb add di, 320 sub di,razmx pop cx loop lup pop es popa pop bp ret 10 endp curx dw ? cury dw ? face db 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0 db 0,1,1,1,1,1,1,1,1,0, 0,2,2,0,0,0,0,2,2,0, 0,0,0,3,3,3,3,3,0,0, 0,4,4,0,0,0,4,4,0,0 db 0,1,1,1,1,1,1,1,1,0, 0,2,2,0,0,0,0,2,2,0, 0,0,3,3,0,0,0,3,3,0, 0,4,4,0,0,4,4,0,0,0 db 0,1,1,0,0,0,0,0,0,0, 0,2,2,0,0,0,0,2,2,0, 0,3,3,0,0,0,0,0,0,0, 0,4,4,0,4,4,0,0,0,0 db 0,1,1,1,1,1,0,0,0,0, 0,2,2,0,0,0,0,2,2,0, 0,3,3,0,0,0,0,0,0,0, 0,4,4,4,4,0,0,0,0,0 db 0,1,1,1,1,1,0,0,0,0, 0,2,2,0,0,0,0,2,2,0, 0,3,3,0,0,0,0,0,0,0, 0,4,4,4,4,0,0,0,0,0 db 0,1,1,0,0,0,0,0,0,0, 0,2,2,0,0,0,0,2,2,0, 0,3,3,0,0,0,0,3,3,0, 0,4,4,0,4,4,0,0,0,0 db 0,1,1,0,0,0,0,0,0,0, 0,0,2,2,0,0,2,2,0,0, 0,0,3,3,0,0,3,3,0,0, 0,4,4,0,0,4,4,0,0,0 db 0,1,1,0,0,0,0,0,0,0, 0,0,0,2,2,2,2,0,0,0, 0,0,0,3,3,3,3,0,0,0, 0,4,4,0,0,0,4,4,0,0 db 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0 ;face db 0,0,0,0,0,0,0,0,0,0 ; db 0,2,2,2,2,2,2,2,2,0 ; db 0,2,0,0,3,3,0,0,2,0 ; db 0,2,0,0,3,3,0,0,2,0 ; db 0,2,6,6,3,6,6,6,2,0 ; db 0,2,6,6,6,3,6,6,2,0 ; db 0,2,0,0,3,3,0,0,2,0 ; db 0,2,0,0,3,3,0,0,2,0 ; db 0,2,2,2,2,2,2,2,2,0 ; db 0,0,0,0,0,0,0,0,0,0 end start