Guest User

Untitled

a guest
Aug 13th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. # Screen: (00, 00) -> (1F, 09)
  3. #
  4. # Directions:
  5. #   00 - up
  6. #   20 - down
  7. #   40 - left
  8. #   60 - right
  9. #   80 - left up
  10. #   A0 - right up
  11. #   C0 - left down
  12. #   E0 - left up
  13. #
  14.  
  15. lxi d,0F04 # Paint
  16. lxi h,0800 # Screen start
  17.  
  18. addr: 1010
  19. # Main {{{
  20.  
  21. # Draw
  22. call 1420
  23.  
  24. # Check
  25. call 1100
  26. cc 1050
  27. call 1150
  28. cc 1050
  29.  
  30. # Clear and calculate
  31. call 1400
  32. addr: 1030
  33. call 1200
  34.  
  35. # Repeat
  36. jmp 1010
  37. #}}}
  38.  
  39. addr: 1050
  40. # Request direction {{{
  41.  
  42. # Save last coords
  43. mov b,d
  44. mov c,e
  45.  
  46. # Get direction
  47. addr: 1060
  48. mov d,b
  49. mov e,c
  50. in 08
  51.  
  52. # Write directon
  53. sta 1031
  54. sta 1071
  55.  
  56. # Refresh coords and check
  57. addr: 1070
  58. call 1200
  59. call 1100
  60. jc 1060
  61. call 1150
  62. jc 1060
  63.  
  64. # Revert back coords
  65. mov d,b
  66. mov e,c
  67. ret
  68. # }}}
  69.  
  70. addr: 1100
  71. # Check X bounds @ D {{{
  72.  
  73. # End of screen
  74. mvi a,1F
  75. stc
  76. cmc
  77. cmp d
  78. jz 1120
  79. jc 1120
  80.  
  81. # Start of screen
  82. mvi a,00
  83. stc
  84. cmc
  85. cmp d
  86. jz 1120
  87. stc
  88. cmc
  89. ret
  90.  
  91. # Set overflow flag
  92. addr: 1120
  93. stc
  94. ret
  95. # }}}
  96.  
  97. addr: 1150
  98. # Check Y bounds @ E {{{
  99.  
  100. # End of screen
  101. mvi a,09
  102. stc
  103. cmc
  104. cmp e
  105. jz 1170
  106. jc 1170
  107.  
  108. # Start of screen
  109. mvi a,00
  110. stc
  111. cmc
  112. cmp e
  113. jz 1170
  114. stc
  115. cmc
  116. ret
  117.  
  118. # Set overflow flag
  119. addr: 1170
  120. stc
  121. ret
  122. # }}}
  123.  
  124.  
  125. # Directions
  126.  
  127. addr: 1200
  128. # Up {{{
  129. dcr e
  130. ret
  131. # }}}
  132.  
  133. addr: 1220
  134. # Down {{{
  135. inr e
  136. ret
  137. # }}}
  138.  
  139. addr: 1240
  140. # Left {{{
  141. dcr d
  142. ret
  143. # }}}
  144.  
  145. addr: 1260
  146. # Right {{{
  147. inr d
  148. ret
  149. # }}}
  150.  
  151. addr: 1280
  152. # Left Up {{{
  153. dcr d
  154. dcr e
  155. ret
  156. # }}}
  157.  
  158. addr: 12A0
  159. # Right Up {{{
  160. inr d
  161. dcr e
  162. ret
  163. # }}}
  164.  
  165. addr: 12C0
  166. # Left Down{{{
  167. dcr d
  168. inr e
  169. ret
  170. # }}}
  171.  
  172. addr: 12E0
  173. # Right Down {{{
  174. inr d
  175. inr e
  176. ret
  177. # }}}
  178.  
  179. addr: 12FF
  180. # Stop {{{
  181. hlt
  182. # }}}
  183.  
  184.  
  185. # Helpers
  186.  
  187. addr: 1400
  188. # Clean pixel @ DE {{{
  189. push h
  190. push d
  191. lxi h,0800
  192. call 1440
  193. dad d
  194. mvi m,00
  195. inx h
  196. mvi m,00
  197. pop d
  198. pop h
  199. ret
  200. # }}}
  201.  
  202. addr: 1420
  203. # Fill pixel @ DE {{{
  204. push h
  205. push d
  206. lxi h,0800
  207. call 1440
  208. dad d
  209. mvi m,00
  210. inx h
  211. mvi m,40
  212. pop d
  213. pop h
  214. ret
  215. # }}}
  216.  
  217. addr: 1440
  218. # Transform coordinates @ DE{{{
  219. # Mult D x 2
  220. mov a,d
  221. stc
  222. cmc
  223. ral
  224. mov d,a
  225.  
  226. # Mult E x 2
  227. mov a,e
  228. stc
  229. cmc
  230. ral
  231. mov e,a
  232.  
  233. # Prepare mult D x 10
  234. push b
  235. push h
  236. push d
  237. lxi b,0009
  238. mov e,d
  239. mvi d,00
  240. mvi h,00
  241. mov l,e
  242.  
  243. # Start mult D x 10 in cycle
  244. addr: 1460
  245. dcr c
  246. jm 1470
  247. dad d
  248. jmp 1460
  249.  
  250. # End of mult D x 10
  251. addr: 1470
  252. pop d
  253. mvi d,00
  254. dad d
  255. mov d,h
  256. mov e,l
  257. pop h
  258. pop b
  259. ret
  260. # }}}
Add Comment
Please, Sign In to add comment