demo.asm 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. .286
  2. .model small
  3. .code
  4. ORG 100h
  5. start:
  6. mov ax, 13h
  7. int 10h
  8. call MakePal
  9. call WriteLines
  10. lu:
  11. mov ah, 06h
  12. mov dl, 0ffh
  13. int 21h
  14. jnz GAMEOVER
  15. call AdvPal
  16. PUSH 5
  17. call Coolwait
  18. jmp lu
  19. GAMEOVER:
  20. mov ax,3
  21. int 10h
  22. int 20h
  23. ; End of main proc
  24. ;-------------------------------
  25. MakePal proc near
  26. pusha
  27. mov cx, 128
  28. colr:
  29. mov dx, 3c6h ;Mask
  30. mov al, 0FFh
  31. out dx, al
  32. mov dx, 3c8h ; Write index
  33. mov al, Col
  34. out dx, al
  35. mov dx, 3c9h ; Out data
  36. mov al, RCol ; R
  37. out dx, al
  38. mov al, GCol ; G
  39. out dx, al
  40. mov al, BCol ; B
  41. out dx, al
  42. cmp byte ptr Col, 63
  43. ja GIn1
  44. je lp1end
  45. inc RCol
  46. jmp lp1End
  47. GIn1: dec RCol
  48. inc GCol
  49. lp1End: inc Col
  50. loop colr
  51. inc RCol
  52. dec Gcol
  53. mov cx, 128
  54. colB:
  55. mov dx, 3c6h ;Mask
  56. mov al, 0FFh
  57. out dx, al
  58. mov dx, 3c8h ; Write index
  59. mov al, Col
  60. out dx, al
  61. mov dx, 3c9h
  62. mov al, RCol
  63. out dx, al
  64. mov al, GCol
  65. out dx, al
  66. mov al, BCol
  67. out dx, al
  68. cmp byte ptr Col, 0BFh
  69. ja GIn2
  70. je lp2end
  71. inc BCol
  72. dec GCol
  73. jmp lp2End
  74. GIn2: dec BCol
  75. lp2End: inc Col
  76. loop colB
  77. popa
  78. ret
  79. Col db 0
  80. RCol db 0
  81. GCol db 0
  82. Bcol db 0
  83. endp
  84. ;{--------------------------------------}
  85. WriteLines proc near
  86. pusha
  87. mov ax, 0A000h
  88. mov es, ax
  89. mov di, 0
  90. mov ax, 0000h
  91. mov cx, 200
  92. wrlp1: push cx
  93. mov cx, 160
  94. repe stosw
  95. pop cx
  96. inc ah
  97. inc al
  98. loop wrlp1
  99. popa
  100. ret
  101. endp
  102. ;/---------------
  103. ;|
  104. ;\---------------
  105. AdvPal proc near
  106. pusha
  107. mov dx, 3c7h ; Read index
  108. mov al, 0FEh
  109. out dx, al
  110. mov dx, 3c9h
  111. in al, dx
  112. mov Rlast, al
  113. in al, dx
  114. mov Glast, al
  115. in al, dx
  116. mov Blast, al
  117. ; Save last values
  118. mov cx, 0FEh
  119. ; Main cirlce
  120. adV: mov dx, 3c7h ; Read index
  121. mov al, cl
  122. dec al
  123. out dx, al
  124. mov dx, 3c9h
  125. in al, dx
  126. mov curR, al
  127. in al, dx
  128. mov curG, al
  129. in al, dx
  130. mov curB, al
  131. ; Read last value, and write it to next
  132. mov dx, 3c8h ; Write index
  133. mov al, cl
  134. out dx, al
  135. mov dx, 3c9h
  136. mov al, curR
  137. out dx, al
  138. mov al, curG
  139. out dx, al
  140. mov al, curB
  141. out dx, al
  142. dec cx
  143. cmp cx, 1
  144. jae adv
  145. mov dx, 3c8h ; Write index
  146. mov al, 1h
  147. out dx, al
  148. mov dx, 3c9h
  149. mov al, Rlast
  150. out dx, al
  151. mov al, Glast
  152. out dx, al
  153. mov al, Blast
  154. out dx, al
  155. popa
  156. ret
  157. curR db 0
  158. curG db 0
  159. curB db 0
  160. Rlast db 0
  161. Glast db 0
  162. Blast db 0
  163. endp
  164. CoolWait proc near ; CoolWait(word delay);
  165. push bp
  166. mov bp, sp
  167. push cx
  168. mov cx, word ptr [bp+4]
  169. ggg: push cx
  170. mov cx, 0
  171. loop $
  172. pop cx
  173. loop ggg
  174. pop cx
  175. pop bp
  176. ret 2
  177. endp
  178. end start