| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- .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
|