Advertisement
Guest User

Untitled

a guest
Sep 15th, 2013
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.53 KB | None | 0 0
  1. ;------------------------------------
  2. ; tr1p1ea - 09/09/2013 (dd/mm/yyyy):
  3. ;------------------------------------
  4. ;---------------------------------------------------
  5. ; TI-84+CSE drawLine test
  6. ;---------------------------------------------------
  7. ;
  8. .nolist
  9. .define bcall(xxxx) rst 28h \ .dw xxxx
  10. .define userMemC $A60B
  11. .list
  12. .org userMemC-2
  13. .db $EF,$69
  14.  
  15. Main:
  16. ld hl,$001F
  17. ld (lineColour),hl ; colour
  18. ld de,310 ; x0
  19. ld bc,10 ; y0
  20. ld hl,10 ; x1
  21. ld ix,230 ; y1
  22. call drawLine
  23. bcall($495D) ; getkey
  24. ret
  25.  
  26. ; store these wherever
  27. lineColour:
  28. .dw 0
  29. xyinc:
  30. .dw 0
  31. xstart:
  32. .dw 0
  33. ystart:
  34. .dw 0
  35.  
  36. drawLine:
  37. ; de = x0, bc = y0, hl = x1, ix = y1, iy = colour
  38. ;
  39. ld a,1
  40. ld (xyinc+0),a
  41. ld (xyinc+1),a ; x/y inc
  42. ld (xstart),de ; de = x0, hl = x1
  43. ld a,h
  44. xor $80
  45. ld h,a
  46. ld a,d
  47. xor $80
  48. ld d,a
  49. or a
  50. sbc hl,de
  51. ld e,l
  52. ld d,h ; de = (x1 - x0)
  53. jr nc,$+13
  54. ld a,-1
  55. ld (xyinc+0),a ; x inc
  56. xor a
  57. sub e
  58. ld e,a
  59. sbc a,a
  60. sub d
  61. ld d,a ; de = -(x1 - x0)
  62. ld (ystart),bc ; bc = y0, ix = y1
  63. push ix
  64. pop hl
  65. ld a,h
  66. xor $80
  67. ld h,a
  68. ld a,b
  69. xor $80
  70. ld b,a
  71. or a
  72. sbc hl,bc
  73. ld c,l
  74. ld b,h ; bc = (y1 - y0)
  75. jr nc,$+13
  76. ld a,-1
  77. ld (xyinc+1),a ; y inc
  78. xor a
  79. sub c
  80. ld c,a
  81. sbc a,a
  82. sub b
  83. ld b,a ; bc = -(y1 - y0)
  84. ld l,e
  85. ld h,d
  86. push bc
  87. ld a,h
  88. xor $80
  89. ld h,a
  90. ld a,b
  91. xor $80
  92. ld b,a
  93. or a
  94. sbc hl,bc
  95. pop bc
  96. ld hl,0 ; error
  97. jp c,drawLine_y
  98. drawLine_x:
  99. push de
  100. pop ix
  101. inc ix
  102. drawLineLoop_x:
  103. push hl
  104. push de
  105. push bc
  106. ld hl,(xstart)
  107. ld de,(ystart)
  108. call drawPixel
  109. ld a,(xyinc+0)
  110. ld c,a
  111. rlca
  112. sbc a,a
  113. ld b,a
  114. add hl,bc
  115. ld (xstart),hl
  116. pop bc
  117. pop de
  118. pop hl
  119. add hl,bc
  120. or a
  121. sbc hl,de
  122. add hl,de
  123. jr c,$+23
  124. or a
  125. sbc hl,de
  126. push bc
  127. ld a,(xyinc+1)
  128. ld c,a
  129. rlca
  130. sbc a,a
  131. ld b,a
  132. push hl
  133. ld hl,(ystart)
  134. add hl,bc
  135. ld (ystart),hl
  136. pop hl
  137. pop bc
  138. dec ix
  139. ld a,ixl
  140. or ixh
  141. jr nz,drawLineLoop_x
  142. ret
  143. drawLine_y:
  144. push de
  145. ld e,c
  146. ld d,b
  147. pop bc
  148. push de
  149. pop ix
  150. inc ix
  151. drawLineLoop_y:
  152. push hl
  153. push de
  154. push bc
  155. ld hl,(xstart)
  156. ld de,(ystart)
  157. call drawPixel
  158. ld a,(xyinc+1)
  159. ld c,a
  160. rlca
  161. sbc a,a
  162. ld b,a
  163. ex de,hl
  164. add hl,bc
  165. ld (ystart),hl
  166. pop bc
  167. pop de
  168. pop hl
  169. add hl,bc
  170. or a
  171. sbc hl,de
  172. add hl,de
  173. jr c,$+23
  174. or a
  175. sbc hl,de
  176. push bc
  177. ld a,(xyinc+0)
  178. ld c,a
  179. rlca
  180. sbc a,a
  181. ld b,a
  182. push hl
  183. ld hl,(xstart)
  184. add hl,bc
  185. ld (xstart),hl
  186. pop hl
  187. pop bc
  188. dec ix
  189. ld a,ixl
  190. or ixh
  191. jr nz,drawLineLoop_y
  192. ret
  193.  
  194. drawPixel:
  195. ; hl = x, de = y, iy = colour
  196. ; needs re-writing
  197. ;
  198. bit 7,h
  199. ret nz ; return if negative
  200. bit 7,d
  201. ret nz ; return if negative
  202. ld bc,320
  203. or a
  204. sbc hl,bc
  205. add hl,bc
  206. ret nc ; return if offscreen
  207. ex de,hl
  208. ld bc,240
  209. or a
  210. sbc hl,bc
  211. add hl,bc
  212. ex de,hl
  213. ret nc ; return if offscreen
  214. push de
  215. push hl
  216. ld a,$52
  217. call setLCDRegister ; v-addr-start (x-start)
  218. ld a,$21
  219. call setLCDRegister ; x pos
  220. ld a,$53
  221. call setLCDRegister ; v-addr-end (x-end)
  222. ex de,hl
  223. ld a,$50
  224. call setLCDRegister ; h-addr-start (y-start)
  225. ld a,$20
  226. call setLCDRegister ; y pos
  227. inc hl
  228. ld a,$51
  229. call setLCDRegister ; h-addr-end (y-end)
  230. ld a,$22
  231. out ($10),a \ out ($10),a ; write data to GRAM
  232. ld a,(lineColour+1) \ out ($11),a
  233. ld a,(lineColour+0) \ out ($11),a
  234. pop hl
  235. pop de
  236. ret
  237.  
  238. setLCDRegister:
  239. ; a = register
  240. ; hl = value
  241. out ($10),a \ out ($10),a
  242. ld a,h \ out ($11),a
  243. ld a,l \ out ($11),a
  244. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement