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. WriteLines proc near
  85. pusha
  86. mov ax, 0A000h
  87. mov es, ax
  88. mov di, 0
  89. mov ax, 0000h
  90. mov cx, 200
  91. wrlp1: push cx
  92. mov cx, 160
  93. repe stosw
  94. pop cx
  95. inc ah
  96. inc al
  97. loop wrlp1
  98. popa
  99. ret
  100. endp
  101. ;/---------------
  102. ;|
  103. ;\---------------
  104. AdvPal proc near
  105. pusha
  106. mov dx, 3c7h ; Read index
  107. mov al, 0FEh
  108. out dx, al
  109. mov dx, 3c9h
  110. in al, dx
  111. mov Rlast, al
  112. in al, dx
  113. mov Glast, al
  114. in al, dx
  115. mov Blast, al
  116. ; Save last values
  117. mov cx, 0FEh
  118. ; Main cirlce
  119. adV: mov dx, 3c7h ; Read index
  120. mov al, cl
  121. dec al
  122. out dx, al
  123. mov dx, 3c9h
  124. in al, dx
  125. mov curR, al
  126. in al, dx
  127. mov curG, al
  128. in al, dx
  129. mov curB, al
  130. ; Read last value, and write it to next
  131. mov dx, 3c8h ; Write index
  132. mov al, cl
  133. out dx, al
  134. mov dx, 3c9h
  135. mov al, curR
  136. out dx, al
  137. mov al, curG
  138. out dx, al
  139. mov al, curB
  140. out dx, al
  141. dec cx
  142. cmp cx, 1
  143. jae adv
  144. mov dx, 3c8h ; Write index
  145. mov al, 1h
  146. out dx, al
  147. mov dx, 3c9h
  148. mov al, Rlast
  149. out dx, al
  150. mov al, Glast
  151. out dx, al
  152. mov al, Blast
  153. out dx, al
  154. popa
  155. ret
  156. curR db 0
  157. curG db 0
  158. curB db 0
  159. Rlast db 0
  160. Glast db 0
  161. Blast db 0
  162. endp
  163. CoolWait proc near ; CoolWait(word delay);
  164. push bp
  165. mov bp, sp
  166. push cx
  167. mov cx, word ptr [bp+4]
  168. ggg: push cx
  169. mov cx, 0
  170. loop $
  171. pop cx
  172. loop ggg
  173. pop cx
  174. pop bp
  175. ret 2
  176. endp
  177. end start