Advertisement
Guest User

Zniggy

a guest
Jun 5th, 2019
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Zniggy by Anonymous 2019
  2.  
  3. org $8000
  4.  
  5. Zniggy_X:
  6. DB      32
  7. Zniggy_Y:
  8. DB      32
  9. Zniggy_YI: ; I stands for Inertia
  10. DB      0
  11. ZniggyTop:
  12. DB      $10,$38,$74,$FE,$60,$38,$10,$38
  13. ZniggyBottom:
  14. DB      $7C,$FE,$7C,$38,$10,$10,$10,$1C
  15.  
  16.  
  17.  
  18. Loop:
  19.  
  20. ; Draw Zniggy
  21. LD      A, (Zniggy_Y)
  22. LD      D, A
  23. LD      A, (Zniggy_X)
  24. LD      E, A
  25. LD      HL, ZniggyTop
  26. CALL    DrawSprite
  27. LD      A, (Zniggy_Y)
  28. ADD     A, 8
  29. LD      D, A
  30. LD      A, (Zniggy_X)
  31. LD      E, A
  32. LD      HL, ZniggyBottom
  33. CALL    DrawSprite
  34.  
  35. HALT
  36.  
  37. ; Clean up after Zniggy
  38. LD      A, (Zniggy_Y)
  39. LD      D, A
  40. LD      A, (Zniggy_X)
  41. LD      E, A
  42. CALL    ClearSprite
  43. LD      A, (Zniggy_Y)
  44. ADD     A, 8
  45. LD      D, A
  46. LD      A, (Zniggy_X)
  47. LD      E, A
  48. CALL    ClearSprite
  49.  
  50. ; Gravity
  51. LD      A, (Zniggy_YI)
  52. INC     A
  53. LD      (Zniggy_YI), A
  54. LD      B, A
  55. LD      A, (Zniggy_Y)
  56. ADD     A, B
  57. LD      (Zniggy_Y), A
  58. LD      B, $80
  59. CP      B
  60. JP      M, NotOnGround
  61. LD      A, B
  62. LD      (Zniggy_Y), A
  63. XOR     A
  64. LD      (Zniggy_YI), A
  65.  
  66. KeyJump:
  67. ; Spacebar
  68. LD      A, $7F
  69. IN      A, ($FE)
  70. AND     1
  71. JR      NZ, KeyRight
  72. LD      A, -10
  73. LD      (Zniggy_YI), A
  74.  
  75. NotOnGround:
  76.  
  77. KeyRight:
  78. ; P
  79. LD      A, $DF
  80. IN      A, ($FE)
  81. AND     1
  82. JR      NZ, KeyLeft
  83. LD      A, (Zniggy_X)
  84. INC     A
  85. INC     A
  86. AND     $7F
  87. LD      (Zniggy_X), A
  88.  
  89. KeyLeft:
  90. ; O
  91. LD      A, $DF
  92. IN      A, ($FE)
  93. AND     2
  94. JR      NZ, Loop
  95. LD      A, (Zniggy_X)
  96. DEC     A
  97. DEC     A
  98. AND     $7F
  99. LD      (Zniggy_X), A
  100.  
  101. JP      Loop ; Too far for JR
  102.  
  103.  
  104.  
  105. ClearSprite:
  106. ; D = Y
  107. ; E = X
  108. LD      A, D
  109. AND     $F8
  110. LD      D, A
  111. LD      A, E
  112. AND     $F8
  113. LD      E, A
  114.  
  115. PUSH    DE
  116. CALL    ClearCell
  117.  
  118. POP     DE
  119. LD      A, D
  120. ADD     A, 8
  121. LD      D, A
  122. CALL    ClearCell
  123. RET
  124.  
  125.  
  126.  
  127. ClearCell:
  128. CALL    ConvertCoords
  129. LD      H, D
  130. LD      L, E
  131. INC     L
  132. XOR     A
  133. LD      B, 8
  134. ClearCellLine:
  135. LD      (DE), A
  136. LD      (HL), A
  137. INC     D
  138. INC     H
  139. DJNZ    ClearCellLine
  140. RET
  141.  
  142.  
  143.  
  144. DrawSprite:
  145. ; HL = Sprite
  146. ; D = Y
  147. ; E = X
  148. PUSH    DE
  149.  
  150. CALL    ConvertCoords
  151. LD      A, 8
  152. SUB     B
  153. LD      B, A
  154. CALL    DrawCell
  155.  
  156. POP     DE
  157. XOR     A
  158. OR      D
  159. AND     7
  160. RET     Z
  161.  
  162. LD      A, D
  163. ADD     A, 8
  164. LD      D, A
  165. CALL    ConvertCoords
  166. LD      A, $F8
  167. AND     D
  168. LD      D, A
  169. CALL    DrawCell
  170.  
  171. RET
  172.  
  173.  
  174.  
  175. ConvertCoords:
  176. ; Convert to this bullshit
  177. ; 0 1 0 y8 y7 y3 y2 y1   y6 y5 y4 x8 x7 x6 x5 x4
  178. LD      B, D
  179. LD      C, E
  180. ; convert X
  181. LD      A, C
  182. SRL     A
  183. SRL     A
  184. SRL     A
  185. LD      D, A
  186. LD      A, B
  187. RLA
  188. RLA
  189. LD      E, $E0
  190. AND     E
  191. OR      D
  192. LD      E, A
  193. ; convert Y
  194. LD      A, B
  195. RRA
  196. RRA
  197. RRA
  198. LD      D, $40
  199. OR      D
  200. LD      D, $58
  201. AND     D
  202. LD      D, A
  203. LD      A, 7
  204. AND     B
  205. OR      D
  206. LD      D, A
  207. ; B = Y 3 bit offset
  208. LD      A, 7
  209. AND     D
  210. LD      B, A
  211. ; C = X 3 bit offset
  212. LD      A, 7
  213. AND     C
  214. LD      C, A
  215. RET
  216.  
  217.  
  218. DrawCell:
  219. ; HL = Graphics
  220. ; DE = Cell address
  221. ; B = Number of lines to draw
  222. ; C = X 3 bit offset
  223. PUSH    BC
  224. PUSH    DE
  225. LD      D, (HL)
  226. LD      E, 0
  227. LD      B, C
  228. XOR     A
  229. OR      B
  230. JR      Z, NoShiftSprite
  231. ShiftSprite:
  232. SRL     D
  233. RR      E
  234. DJNZ    ShiftSprite
  235. NoShiftSprite:
  236. LD      B, D
  237. LD      C, E
  238. POP     DE
  239. LD      A, B
  240. LD      (DE), A
  241. ; todo check if at the edge of the screen
  242. INC     E
  243. LD      A, C
  244. LD      (DE), A
  245. DEC     E
  246. POP     BC
  247. INC     HL
  248. INC     D
  249. DJNZ    DrawCell
  250. RET
  251.  
  252. zeusemulate "48K"
  253. Zeus_PC=Loop
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement