move.asm 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. .286
  2. .model small
  3. .code
  4. org 100h
  5. ;--------------------
  6. count equ 100
  7. delay equ 1
  8. startx equ 10
  9. starty equ 10
  10. sizex equ 40
  11. sizey equ 10
  12. ;--------------------
  13. start:
  14. mov ax, 13h
  15. int 10h
  16. mov curx, startx
  17. mov cury, starty
  18. mov cx, count
  19. lu:
  20. mov ah, 06h
  21. mov dl, 0ffh
  22. int 21h
  23. jnz GAMEOVER
  24. push curx
  25. push cury
  26. push offset face
  27. push sizex
  28. push sizey
  29. call WriteSprite
  30. mov ax, curx
  31. cmp ax, 0
  32. je toright
  33. b1: add ax, sizex
  34. cmp ax, 319
  35. je toleft
  36. b2: mov ax, cury
  37. cmp ax, 0
  38. je todown
  39. b3: add ax, sizey
  40. cmp ax, 199
  41. je toup
  42. jmp gx
  43. toright:mov byte ptr cs:[offset gx+2], 06h
  44. jmp b1
  45. toleft: mov byte ptr cs:[offset gx+2], 0Eh
  46. jmp b2
  47. todown: mov byte ptr cs:[offset gy+2], 06h
  48. jmp b3
  49. toup: mov byte ptr cs:[offset gy+2], 0Eh
  50. gx: dec curx
  51. gy: dec cury
  52. push delay
  53. call CoolWait
  54. jmp lu
  55. gameover:
  56. mov ax, 3h
  57. int 10h
  58. int 20h
  59. ;----------------------------------
  60. CoolWait proc near ; CoolWait(word delay);
  61. push bp
  62. mov bp, sp
  63. push cx
  64. mov cx, word ptr [bp+4]
  65. ggg: push cx
  66. mov cx, 0
  67. loop $
  68. pop cx
  69. loop ggg
  70. pop cx
  71. pop bp
  72. ret 2
  73. endp
  74. ;----------------------------------------
  75. WriteSprite proc near ;writesprite(x,y,char *sprt,razmx,razmy)
  76. push bp
  77. mov bp,sp
  78. razmy equ word ptr [bp+4]
  79. razmx equ word ptr [bp+6]
  80. sprt equ word ptr [bp+8]
  81. posy equ word ptr [bp+10]
  82. posx equ word ptr [bp+12]
  83. pusha
  84. push es
  85. mov ax, 0A000h
  86. mov es, ax
  87. mov ax, posy
  88. mov bx, ax
  89. shl ax, 8
  90. shl bx, 6
  91. add ax, bx
  92. add ax, posx
  93. mov di, ax
  94. mov ax, sprt
  95. mov si, ax
  96. mov cx, razmy
  97. ; Wait for Vsync
  98. mov dx, 03DAh
  99. wait1: in al,dx
  100. and al, 08
  101. jnz wait1
  102. wait2: in al, dx
  103. and al,08
  104. jz wait2
  105. ;
  106. lup:
  107. push cx
  108. mov cx, razmx
  109. repe movsb
  110. add di, 320
  111. sub di,razmx
  112. pop cx
  113. loop lup
  114. pop es
  115. popa
  116. pop bp
  117. ret 10
  118. endp
  119. curx dw ?
  120. cury dw ?
  121. 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
  122. 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
  123. 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
  124. 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
  125. 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
  126. 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
  127. 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
  128. 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
  129. 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
  130. 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
  131. ;face db 0,0,0,0,0,0,0,0,0,0
  132. ; db 0,2,2,2,2,2,2,2,2,0
  133. ; db 0,2,0,0,3,3,0,0,2,0
  134. ; db 0,2,0,0,3,3,0,0,2,0
  135. ; db 0,2,6,6,3,6,6,6,2,0
  136. ; db 0,2,6,6,6,3,6,6,2,0
  137. ; db 0,2,0,0,3,3,0,0,2,0
  138. ; db 0,2,0,0,3,3,0,0,2,0
  139. ; db 0,2,2,2,2,2,2,2,2,0
  140. ; db 0,0,0,0,0,0,0,0,0,0
  141. end start