don't click here

32X framebuffer questions

Discussion in 'General Sega Discussion' started by Andlabs, Mar 10, 2010.

  1. Andlabs

    Andlabs

    「いっきまーす」 Wiki Sysop
    2,175
    1
    0
    Writing my own MD/Genesis sound driver :D
    So I'm writing my own 32X program and I'm just trying to test drawing to the framebuffer SH-2 side for now before actually implementing what I want. I load up a palette of all green (excep for color 0) and use the following code to write to the framebuffer, but instead of showing me 40 lines of green I still get a black screen.

    Code (Text):
    1.     mov.l    #me_fbbase,r0
    2.     mov.l    #($1C0>>1),r1
    3.     mov.l    #40,r2
    4.     
    5. -
    6.     mov.w    r1,@r0
    7.     dt        r2
    8.     bf/s    -
    9.     add        #2,r0
    10.     
    11.     mov.l    #me_fbline,r0
    12.     mov.l    #1,r1
    13.     mov.l    #320,r2
    14.  
    15. -
    16.     mov.b    r1,@r0
    17.     dt        r2
    18.     bf/s    -
    19.     add        #1,r0
    20.  
    21.     mov.l    #me_ffb,r0
    22. MasterMain:
    23.     jsr        @r0
    24.     nop
    25.     bra        MasterMain
    26.     nop
    27.  
    28. me_fbbase:        dc.l $24000000
    29. me_fbline:        dc.l $240001C0
    30. me_initpal:        dc.l initpal
    31. me_ffb:            dc.l flipframebuf
    The code I use to initialize the VDP:

    Code (Text):
    1. initscreen:
    2.     sts.l    pr,@-r15
    3.     mov.l    #$4000,r0; 32X has priority
    4.     mov.l    #$80,r1
    5.     mov.b    r1,@r0
    6.     add        #1,r0; VInt on
    7.     mov.l    #$8,r1
    8.     mov.b    r1,@r0
    9.     mov.l    #$4101,r0; 8bpp mode
    10.     mov.l    #1,r1
    11.     mov.b    r1,@r0
    12.     rts
    13.     lds.l    @r15+,pr
    What am I doing wrong? Thanks.
     
  2. Chilly Willy

    Chilly Willy

    Tech Member
    751
    11
    18
    Doom 32X
    When you set the line table, make sure to start at $100. Up to that is the line table itself, so each entry points to AFTER the line table. In C, I do

    Code (Text):
    1.         // rewrite line table
    2. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (I=0; I<224; I++)
    3. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frameBuffer16[I] = I*160 + 0x100; /* word offset of line */
    Go to 240 is in 240 line mode.

    Also, make sure the frame buffer is finished flipping before trying to write to it, otherwise the writes won't be to the proper frame buffer.

    Here's my frame buffer init.

    Code (Text):
    1. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// init both framebuffers
    2.  
    3. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Flip the framebuffer selection bit and wait for it to take effect
    4. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MARS_VDP_FBCTL = currentFB ^ 1;
    5. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while ((MARS_VDP_FBCTL & MARS_VDP_FS) == currentFB);
    6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentFB ^= 1;
    7. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// rewrite line table
    8. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (I=0; I<224; I++)
    9. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frameBuffer16[I] = I*160 + 0x100; /* word offset of line */
    10. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// clear screen
    11. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (I=0x100; I<0x10000; I++)
    12. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frameBuffer16[I] = 0;
    13.  
    14. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Flip the framebuffer selection bit and wait for it to take effect
    15. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MARS_VDP_FBCTL = currentFB ^ 1;
    16. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while ((MARS_VDP_FBCTL & MARS_VDP_FS) == currentFB);
    17. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentFB ^= 1;
    18. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// rewrite line table
    19. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (I=0; I<224; I++)
    20. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frameBuffer16[I] = I*160 + 0x100; /* word offset of line */
    21. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// clear screen
    22. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (I=0x100; I<0x10000; I++)
    23. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frameBuffer16[I] = 0;
     
  3. Sappharad

    Sappharad

    Oldbie
    1,415
    70
    28
    I don't know SH-2 assembly, and I couldn't find a reference to the instruction set when doing a search for "SH2 instruction set" so I'm going to make an ass of myself. But I've noticed two unusual things about your code and was wondering if you have a second and maybe could explain these things.

    First unusual thing I notice is the very end of your init screen method. If the rts instruction is returning then why do you have an lds instruction right after that? Isn't it never going to run?
    The second unusual thing I notice is the line "add #1,r0" right after your second loop in the first section. You're loading #me_ffb into r0 right after that, so it seems useless as well. Was the blank line supposed to imply that you omitted some code?

    This obviously doesn't answer any questions, so I hope the previous poster did.
     
  4. MarkeyJester

    MarkeyJester

    Original, No substitute Resident Jester
    2,202
    432
    63
    Japan
    From what I've read, there's like a delay before say a branch command runs, so the command after it runs just before branching (Or something like that), again I'm not sure meself so don't take my word as the correct reason why.
     
  5. Andlabs

    Andlabs

    「いっきまーす」 Wiki Sysop
    2,175
    1
    0
    Writing my own MD/Genesis sound driver :D
    Thanks, however this time, half the time nothing shows up, and half the time CRAM is cleared. I have no idea what's going on at this point. I'm using as, and sometimes the r0 for the framebuffer pointers actually load weird values when dereferenced (for example, $00092400, which I assume is wordswapped because Gens's, and therefore Gens/GS's, 32X debugger is stupid). What's going on?

    Code (Text):
    1. &nbsp;&nbsp;&nbsp;&nbsp;CPU SH7600; true model is SH7095; but SH7000 lacks mul.l
    2. &nbsp;&nbsp;&nbsp;&nbsp;PHASE $6000000
    3. &nbsp;&nbsp;&nbsp;&nbsp;PADDING OFF
    4. &nbsp;&nbsp;&nbsp;&nbsp;SUPMODE ON
    5.  
    6. ; These are exported so the 68000 code can refer to them in the 32X header.
    7. &nbsp;&nbsp;&nbsp;&nbsp;SHARED MasterVec, SlaveVec, MasterEntry, SlaveEntry
    8.  
    9. MasterStack equ $603F000
    10. SlaveStack&nbsp;&nbsp;equ $603EF00
    11.  
    12. MasterVec:
    13. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;MasterEntry; Power on
    14. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;MasterStack
    15. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;MasterEntry; Manual reset
    16. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;MasterStack
    17. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; Illegal instruction
    18. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;; Reserved
    19. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; Invalid slot
    20. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;$20100400; Reserved
    21. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;$20100400; Reserved
    22. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; CPU address error
    23. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; DMA address error
    24. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; NMI
    25. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; User break
    26. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;; Reserved
    27. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    28. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    29. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    30. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    31. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    32. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    33. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    34. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    35. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    36. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    37. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    38. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    39. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    40. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    41. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    42. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    43. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    44. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    45. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; Traps
    46. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    47. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    48. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    49. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    50. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    51. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    52. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    53. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    54. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    55. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    56. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    57. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    58. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    59. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    60. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    61. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    62. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    63. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    64. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    65. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    66. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    67. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    68. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    69. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    70. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    71. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    72. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    73. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    74. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    75. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    76. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    77. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq&nbsp;&nbsp;&nbsp;&nbsp;; IRQ 1
    78. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq&nbsp;&nbsp;&nbsp;&nbsp;; IRQ 2/3
    79. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq&nbsp;&nbsp;&nbsp;&nbsp;; IRQ 4/5
    80. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq&nbsp;&nbsp;&nbsp;&nbsp;; PWM interrupt
    81. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq&nbsp;&nbsp;&nbsp;&nbsp;; Command interrupt
    82. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq&nbsp;&nbsp;&nbsp;&nbsp;; H blank
    83. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;vint
    84. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;MasterEntry; Soft reset
    85.  
    86. SlaveVec:
    87. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;SlaveEntry; Power on
    88. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;SlaveStack
    89. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;SlaveEntry; Manual reset
    90. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;SlaveStack
    91. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; Illegal instruction
    92. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;; Reserved
    93. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; Invalid slot
    94. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;$20100400; Reserved
    95. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;$20100400; Reserved
    96. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; CPU address error
    97. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; DMA address error
    98. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; NMI
    99. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; User break
    100. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;; Reserved
    101. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    102. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    103. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    104. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    105. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    106. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    107. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    108. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    109. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    110. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    111. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    112. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    113. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    114. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    115. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    116. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    117. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    118. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    119. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; Traps
    120. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    121. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    122. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    123. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    124. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    125. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    126. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    127. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    128. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    129. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    130. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    131. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    132. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    133. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    134. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    135. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    136. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    137. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    138. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    139. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    140. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    141. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    142. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    143. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    144. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    145. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    146. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    147. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    148. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    149. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    150. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    151. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq&nbsp;&nbsp;&nbsp;&nbsp;; IRQ 1
    152. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq&nbsp;&nbsp;&nbsp;&nbsp;; IRQ 2/3
    153. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq&nbsp;&nbsp;&nbsp;&nbsp;; IRQ 4/5
    154. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq&nbsp;&nbsp;&nbsp;&nbsp;; PWM interrupt
    155. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq&nbsp;&nbsp;&nbsp;&nbsp;; Command interrupt
    156. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq&nbsp;&nbsp;&nbsp;&nbsp;; H blank
    157. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;vint
    158. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;SlaveEntry; Soft reset
    159.  
    160. MasterEntry:
    161. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#MasterStack,r15
    162. &nbsp;&nbsp;&nbsp;&nbsp;bsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initscreen
    163. &nbsp;&nbsp;&nbsp;&nbsp;nop
    164. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#me_initpal,r0
    165. &nbsp;&nbsp;&nbsp;&nbsp;bsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadpalette
    166. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r0,r0
    167.  
    168. &nbsp;&nbsp;&nbsp;&nbsp;bsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flipframebuf
    169. &nbsp;&nbsp;&nbsp;&nbsp;nop
    170. &nbsp;&nbsp;&nbsp;&nbsp;
    171. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#me_fbline,r0
    172. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#1,r1
    173. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#320,r2
    174. &nbsp;&nbsp;&nbsp;&nbsp;shll2&nbsp;&nbsp;&nbsp;&nbsp;r2
    175.  
    176. -
    177. &nbsp;&nbsp;&nbsp;&nbsp;mov.b&nbsp;&nbsp;&nbsp;&nbsp;r1,@r0
    178. &nbsp;&nbsp;&nbsp;&nbsp;dt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2
    179. &nbsp;&nbsp;&nbsp;&nbsp;bf/s&nbsp;&nbsp;&nbsp;&nbsp;-
    180. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#1,r0
    181.  
    182. MasterMain:
    183. &nbsp;&nbsp;&nbsp;&nbsp;bra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MasterMain
    184. &nbsp;&nbsp;&nbsp;&nbsp;nop
    185.  
    186. me_initpal:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l initpal
    187. me_fbline:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l $24000100
    188. &nbsp;&nbsp;&nbsp;&nbsp;
    189. &nbsp;&nbsp;&nbsp;&nbsp;LTORG
    190.  
    191. initpal:
    192. &nbsp;&nbsp;&nbsp;&nbsp;dc.w&nbsp;&nbsp;&nbsp;&nbsp;$0000
    193. &nbsp;&nbsp;&nbsp;&nbsp;REPT 255
    194. &nbsp;&nbsp;&nbsp;&nbsp;dc.w&nbsp;&nbsp;&nbsp;&nbsp;$0B20
    195. &nbsp;&nbsp;&nbsp;&nbsp;ENDM
    196.  
    197. SlaveEntry:
    198. &nbsp;&nbsp;&nbsp;&nbsp;bra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SlaveEntry
    199. &nbsp;&nbsp;&nbsp;&nbsp;nop
    200.  
    201. error:
    202. &nbsp;&nbsp;&nbsp;&nbsp;bra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error
    203. &nbsp;&nbsp;&nbsp;&nbsp;nop
    204.  
    205. vint:
    206. &nbsp;&nbsp;&nbsp;&nbsp;rte
    207. &nbsp;&nbsp;&nbsp;&nbsp;nop
    208.  
    209. irq:
    210. &nbsp;&nbsp;&nbsp;&nbsp;rte
    211. &nbsp;&nbsp;&nbsp;&nbsp;nop
    212.  
    213. flipframebuf:
    214. &nbsp;&nbsp;&nbsp;&nbsp;sts.l&nbsp;&nbsp;&nbsp;&nbsp;pr,@-r15
    215. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r0,@-r15
    216. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r1,@-r15
    217. &nbsp;&nbsp;&nbsp;&nbsp;
    218. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#$410B,r0
    219. &nbsp;&nbsp;&nbsp;&nbsp;mov.b&nbsp;&nbsp;&nbsp;&nbsp;@r0,r1
    220. &nbsp;&nbsp;&nbsp;&nbsp;not&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,r1
    221. &nbsp;&nbsp;&nbsp;&nbsp;mov.b&nbsp;&nbsp;&nbsp;&nbsp;r1,@r0
    222. &nbsp;&nbsp;&nbsp;&nbsp;
    223. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#$410A,r0
    224. &nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,r1
    225.  
    226. -
    227. &nbsp;&nbsp;&nbsp;&nbsp;mov.b&nbsp;&nbsp;&nbsp;&nbsp;@r0,r1
    228. &nbsp;&nbsp;&nbsp;&nbsp;cmp/pl&nbsp;&nbsp;&nbsp;&nbsp;r1
    229. &nbsp;&nbsp;&nbsp;&nbsp;bt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
    230. &nbsp;&nbsp;&nbsp;&nbsp;nop
    231.  
    232. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r1
    233. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r0
    234. &nbsp;&nbsp;&nbsp;&nbsp;rts
    235. &nbsp;&nbsp;&nbsp;&nbsp;lds.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,pr
    236. &nbsp;&nbsp;&nbsp;&nbsp;
    237. initscreen:
    238. &nbsp;&nbsp;&nbsp;&nbsp;sts.l&nbsp;&nbsp;&nbsp;&nbsp;pr,@-r15
    239. &nbsp;&nbsp;&nbsp;&nbsp;
    240. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#$4000,r0; 32X has priority
    241. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#$80,r1
    242. &nbsp;&nbsp;&nbsp;&nbsp;mov.b&nbsp;&nbsp;&nbsp;&nbsp;r1,@r0
    243. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#1,r0&nbsp;&nbsp;&nbsp;&nbsp;; VInt on
    244. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#$8,r1
    245. &nbsp;&nbsp;&nbsp;&nbsp;mov.b&nbsp;&nbsp;&nbsp;&nbsp;r1,@r0
    246. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#$4101,r0; 8bpp mode
    247. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#1,r1
    248. &nbsp;&nbsp;&nbsp;&nbsp;mov.b&nbsp;&nbsp;&nbsp;&nbsp;r1,@r0
    249.  
    250. &nbsp;&nbsp;&nbsp;&nbsp;REPT 2
    251. &nbsp;&nbsp;&nbsp;&nbsp;
    252. &nbsp;&nbsp;&nbsp;&nbsp;bsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flipframebuf
    253. &nbsp;&nbsp;&nbsp;&nbsp;nop
    254. &nbsp;&nbsp;&nbsp;&nbsp;
    255. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#is_fb,r0; set up line pointers
    256. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r0,r0
    257. &nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,r1&nbsp;&nbsp;&nbsp;&nbsp;; output address
    258. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#224,r2&nbsp;&nbsp;&nbsp;&nbsp;; 224 lines
    259. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#160,r3&nbsp;&nbsp;&nbsp;&nbsp;; output = (I * 160) + 0x100
    260. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#$100,r4
    261. &nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r5,r5&nbsp;&nbsp;&nbsp;&nbsp;; I
    262.  
    263. -
    264. &nbsp;&nbsp;&nbsp;&nbsp;mul.l&nbsp;&nbsp;&nbsp;&nbsp;r5,r3
    265. &nbsp;&nbsp;&nbsp;&nbsp;sts.l&nbsp;&nbsp;&nbsp;&nbsp;macl,r1
    266. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r4,r1
    267. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;r1,@r0
    268. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#2,r0
    269. &nbsp;&nbsp;&nbsp;&nbsp;dt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2
    270. &nbsp;&nbsp;&nbsp;&nbsp;bf/s&nbsp;&nbsp;&nbsp;&nbsp;-
    271. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#1,r5
    272. &nbsp;&nbsp;&nbsp;&nbsp;
    273. &nbsp;&nbsp;&nbsp;&nbsp;ENDM
    274. &nbsp;&nbsp;&nbsp;&nbsp;
    275. &nbsp;&nbsp;&nbsp;&nbsp;rts
    276. &nbsp;&nbsp;&nbsp;&nbsp;lds.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,pr
    277.  
    278. is_fb:&nbsp;&nbsp;&nbsp;&nbsp;dc.l $24000000
    279.  
    280. loadpalette:
    281. &nbsp;&nbsp;&nbsp;&nbsp;sts.l&nbsp;&nbsp;&nbsp;&nbsp;pr,@-r15
    282. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r1,@-r15
    283. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r2,@-r15
    284. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r3,@-r15
    285. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#$4200,r1
    286. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#255,r2
    287. &nbsp;&nbsp;&nbsp;&nbsp;
    288. -
    289. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;@r0+,r3
    290. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;r3,@r1
    291. &nbsp;&nbsp;&nbsp;&nbsp;dt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2
    292. &nbsp;&nbsp;&nbsp;&nbsp;bf/s&nbsp;&nbsp;&nbsp;&nbsp;-
    293. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#2,r1
    294. &nbsp;&nbsp;&nbsp;&nbsp;
    295. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r3
    296. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r2
    297. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r1
    298. &nbsp;&nbsp;&nbsp;&nbsp;rts
    299. &nbsp;&nbsp;&nbsp;&nbsp;lds.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,pr
    300.  
    301. &nbsp;&nbsp;&nbsp;&nbsp;DEPHASE
    Thanks.

    http://www.eidolons-inn.net/tiki-list_file...hp?galleryId=10

    As MarkeyJester guessed, this is because of the delay pipeline; all jump instructions except bt and bf run the next instruction before the jump.

    Same deal. bt/s and bf/s are provided for delay slot handling.
     
  6. Chilly Willy

    Chilly Willy

    Tech Member
    751
    11
    18
    Doom 32X
    Okay, one serious problem I just noticed - all hardware needs to be accessed through the cache-through region, I.e., offset by $20000000. It's not $4100, it's $20004100. Especially when reading registers as the second time you read $4100 (or similar address), it will come from the cache, not the hardware.

    Writing the frame buffer without $20000000 is okay as the SH2 is write-through caching, so the data goes to the memory, but this floods the cache, slowing the program as you need to reload the cache for code and other data. Try to writing large buffers (like video or audio) as cache-through instead of cached for better speed.
     
  7. Andlabs

    Andlabs

    「いっきまーす」 Wiki Sysop
    2,175
    1
    0
    Writing my own MD/Genesis sound driver :D
    After fixing that, the program still doesn't work. I'm blaming as for this because of this register endian nonsense, as manually putting the value in with mov/shll16/shll8 yields the right value. So can I do something like SHARED in asmsh, where it exports the addresses of the shared labels to an include file so I can put them in the 32X header 68000 side? Thanks.
     
  8. Chilly Willy

    Chilly Willy

    Tech Member
    751
    11
    18
    Doom 32X
    Like everything but the Z80, the SH2 and 32X hardware is all big-endian. Sometimes that throws PC programmers. I never think about it since I'm used to it.

    When setting the line table, rather than multiply r5 and r3, just add r3 to r1. Not an error, just more optimal, and easy to do in assembly.

    Rather than

    Code (Text):
    1. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#is_fb,r0; set up line pointers
    2. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r0,r0
    Just do

    Code (Text):
    1. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;is_fb,r0; set up line pointers
    As long as the variable is close to the code, it's not a problem. I noticed you did a lot of similar moves that aren't necessary. You also commonly save pr and various registers when it isn't necessary.

    Your frame buffer flip also looks wrong. Read/write FBCTL as a word, and just XOR the word with 1 to flip which frame you want. Look at my C code... load the current framebuffer (a word), set another register to that XOR 1, store the new framebuffer (as a word) to FBCTL, then wait until the register (read a s a word) is no longer the same as the original value. More like this...

    Code (Text):
    1. flipframebuf:
    2. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;MARS_VDP_FBCTL,r2
    3. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;@r2,r1
    4. &nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,r0
    5. &nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#1,r0
    6. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;r0,@r2
    7. -
    8. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;@r2,r0
    9. &nbsp;&nbsp;&nbsp;&nbsp;cmp/eq&nbsp;&nbsp; r1,r0
    10. &nbsp;&nbsp;&nbsp;&nbsp;bt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -
    11. &nbsp;&nbsp;&nbsp;&nbsp;nop
    12. &nbsp;&nbsp;&nbsp;&nbsp;rts
    13. &nbsp;&nbsp;&nbsp;&nbsp;nop
    14. MARS_VDP_FBCTL:
    15. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;$2000410A
     
  9. Andlabs

    Andlabs

    「いっきまーす」 Wiki Sysop
    2,175
    1
    0
    Writing my own MD/Genesis sound driver :D
    All right, I got it all working. Thanks a lot!
     
  10. Chilly Willy

    Chilly Willy

    Tech Member
    751
    11
    18
    Doom 32X
    No problem. Be sure to ask if you run into anything else. There are not many devs out there working on the 32X, so we gotta look out for each other. :)
     
  11. Andlabs

    Andlabs

    「いっきまーす」 Wiki Sysop
    2,175
    1
    0
    Writing my own MD/Genesis sound driver :D
    Okay, I dunno what I'm doing wrong this time:

    Code (Text):
    1. &nbsp;&nbsp;&nbsp;&nbsp;CPU SH7600; true model is SH7095; but SH7000 lacks mul.l
    2. &nbsp;&nbsp;&nbsp;&nbsp;PHASE $6000000
    3. &nbsp;&nbsp;&nbsp;&nbsp;PADDING OFF
    4. &nbsp;&nbsp;&nbsp;&nbsp;SUPMODE ON
    5.  
    6. ; These are exported so the 68000 code can refer to them in the 32X header.
    7. &nbsp;&nbsp;&nbsp;&nbsp;SHARED MasterVec, SlaveVec, MasterEntry, SlaveEntry
    8.  
    9. MasterStack equ $603F000
    10. SlaveStack&nbsp;&nbsp;equ $603EF00
    11.  
    12. MasterVec:
    13. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;MasterEntry; Power on
    14. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;MasterStack
    15. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;MasterEntry; Manual reset
    16. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;MasterStack
    17. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; Illegal instruction
    18. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0; Reserved
    19. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; Invalid slot
    20. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;$20100400; Reserved
    21. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;$20100400; Reserved
    22. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; CPU address error
    23. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; DMA address error
    24. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; NMI
    25. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; User break
    26. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0; Reserved
    27. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    28. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    29. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    30. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    31. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    32. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    33. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    34. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    35. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    36. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    37. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    38. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    39. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    40. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    41. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    42. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    43. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    44. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    45. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; Traps
    46. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    47. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    48. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    49. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    50. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    51. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    52. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    53. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    54. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    55. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    56. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    57. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    58. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    59. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    60. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    61. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    62. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    63. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    64. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    65. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    66. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    67. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    68. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    69. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    70. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    71. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    72. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    73. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    74. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    75. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    76. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    77. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq; IRQ 1
    78. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq; IRQ 2/3
    79. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq; IRQ 4/5
    80. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq; PWM interrupt
    81. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq; Command interrupt
    82. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq; H blank
    83. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;vint
    84. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;MasterEntry; Soft reset
    85.  
    86. SlaveVec:
    87. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;SlaveEntry; Power on
    88. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;SlaveStack
    89. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;SlaveEntry; Manual reset
    90. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;SlaveStack
    91. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; Illegal instruction
    92. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0; Reserved
    93. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; Invalid slot
    94. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;$20100400; Reserved
    95. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;$20100400; Reserved
    96. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; CPU address error
    97. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; DMA address error
    98. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; NMI
    99. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; User break
    100. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0; Reserved
    101. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    102. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    103. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    104. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    105. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    106. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    107. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    108. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    109. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    110. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    111. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    112. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    113. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    114. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    115. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    116. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    117. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    118. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;0
    119. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error; Traps
    120. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    121. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    122. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    123. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    124. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    125. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    126. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    127. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    128. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    129. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    130. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    131. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    132. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    133. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    134. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    135. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    136. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    137. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    138. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    139. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    140. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    141. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    142. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    143. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    144. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    145. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    146. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    147. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    148. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    149. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    150. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;error
    151. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq; IRQ 1
    152. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq; IRQ 2/3
    153. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq; IRQ 4/5
    154. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq; PWM interrupt
    155. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq; Command interrupt
    156. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;irq; H blank
    157. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;vint
    158. &nbsp;&nbsp;&nbsp;&nbsp;dc.l&nbsp;&nbsp;&nbsp;&nbsp;SlaveEntry; Soft reset
    159.  
    160. MasterEntry:
    161. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#MasterStack,r15
    162. &nbsp;&nbsp;&nbsp;&nbsp;bsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initscreen
    163. &nbsp;&nbsp;&nbsp;&nbsp;nop
    164. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#me_initpal,r0
    165. &nbsp;&nbsp;&nbsp;&nbsp;bsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadpalette
    166. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r0,r0
    167.  
    168. ptc macro x,y,z
    169. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#y,r1
    170. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#z,r2
    171. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pt3topt
    172. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#x,r0
    173. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r0,@(0,r13)
    174. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r1,@(4,r13)
    175. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#8,r13
    176. &nbsp;&nbsp;&nbsp;&nbsp;endm
    177. &nbsp;&nbsp;&nbsp;&nbsp;
    178. box&nbsp;&nbsp;&nbsp;&nbsp;macro x1,y1,z1,x2,y2,z2,color
    179. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mova&nbsp;&nbsp;&nbsp;&nbsp;pbuf,r0
    180. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r0,r13
    181.  
    182. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x1,y1,z1
    183. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x2,y1,z1
    184. &nbsp;&nbsp;&nbsp;&nbsp;
    185. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x1,y1,z1
    186. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x1,y2,z1
    187.  
    188. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x1,y2,z1
    189. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x2,y2,z1
    190. &nbsp;&nbsp;&nbsp;&nbsp;
    191. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x2,y1,z1
    192. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x2,y2,z1
    193.  
    194. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x1,y1,z2
    195. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x2,y1,z2
    196. &nbsp;&nbsp;&nbsp;&nbsp;
    197. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x1,y1,z2
    198. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x1,y2,z2
    199.  
    200. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x1,y2,z2
    201. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x2,y2,z2
    202. &nbsp;&nbsp;&nbsp;&nbsp;
    203. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x2,y1,z2
    204. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc&nbsp;&nbsp;&nbsp;&nbsp;x2,y2,z2
    205. &nbsp;&nbsp;&nbsp;&nbsp;
    206. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc x1,y1,z1
    207. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc x1,y1,z2
    208.  
    209. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc x1,y2,z1
    210. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc x1,y2,z2
    211. &nbsp;&nbsp;&nbsp;&nbsp;
    212. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc x2,y1,z1
    213. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc x2,y1,z2
    214.  
    215. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc x2,y2,z1
    216. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptc x2,y2,z2
    217. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    218. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mova&nbsp;&nbsp;&nbsp;&nbsp;pbuf,r0
    219. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r0,r13
    220. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#12,r14
    221.  
    222. -
    223. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r13+,r0
    224. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r13+,r1
    225. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r13+,r2
    226. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r13+,r3
    227. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drawline
    228. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#color,r4
    229. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r14
    230. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
    231. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nop
    232.  
    233. &nbsp;&nbsp;&nbsp;&nbsp;endm
    234.  
    235. &nbsp;&nbsp;&nbsp;&nbsp;bsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flipframebuf
    236. &nbsp;&nbsp;&nbsp;&nbsp;nop
    237. &nbsp;&nbsp;&nbsp;&nbsp;
    238. &nbsp;&nbsp;&nbsp;&nbsp;box&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$20,$20,$0, $40,$40,$7F, 1
    239. &nbsp;&nbsp;&nbsp;&nbsp;box&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$20,$20,$0, $40,$40,$7F, 2
    240.  
    241. MasterMain:
    242. &nbsp;&nbsp;&nbsp;&nbsp;bra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MasterMain
    243. &nbsp;&nbsp;&nbsp;&nbsp;nop
    244.  
    245. pbuf:&nbsp;&nbsp;&nbsp;&nbsp;dc.l 0,0, 0,0; x1->x2 y1 z1
    246. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l 0,0, 0,0; x1 y1->y2 z1
    247. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l 0,0, 0,0; x1->x2 y2 z1
    248. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l 0,0, 0,0; x2 y1->y2 z1
    249. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l 0,0, 0,0; x1->x2 y1 z2
    250. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l 0,0, 0,0; x1 y1->y2 z2
    251. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l 0,0, 0,0; x1->x2 y2 z2
    252. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l 0,0, 0,0; x2 y1->y2 z2
    253. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l 0,0, 0,0; x1 y1 z1->z2
    254. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l 0,0, 0,0; x2 y1 z1->z2
    255. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l 0,0, 0,0; x1 y2 z1->z2
    256. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l 0,0, 0,0; x2 y2 z1->z2
    257.  
    258. me_fbline:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l $24000200
    259. me_initpal:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l initpal
    260.  
    261. &nbsp;&nbsp;&nbsp;&nbsp;LTORG
    262.  
    263. initpal:
    264. &nbsp;&nbsp;&nbsp;&nbsp;dc.w&nbsp;&nbsp;&nbsp;&nbsp;$0000
    265. &nbsp;&nbsp;&nbsp;&nbsp;dc.w&nbsp;&nbsp;&nbsp;&nbsp;$01B4
    266. &nbsp;&nbsp;&nbsp;&nbsp;REPT 254
    267. &nbsp;&nbsp;&nbsp;&nbsp;dc.w&nbsp;&nbsp;&nbsp;&nbsp;$0B20
    268. &nbsp;&nbsp;&nbsp;&nbsp;ENDM
    269.  
    270. SlaveEntry:
    271. &nbsp;&nbsp;&nbsp;&nbsp;bra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SlaveEntry
    272. &nbsp;&nbsp;&nbsp;&nbsp;nop
    273.  
    274. error:
    275. &nbsp;&nbsp;&nbsp;&nbsp;bra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error
    276. &nbsp;&nbsp;&nbsp;&nbsp;nop
    277.  
    278. vint:
    279. &nbsp;&nbsp;&nbsp;&nbsp;rte
    280. &nbsp;&nbsp;&nbsp;&nbsp;nop
    281.  
    282. irq:
    283. &nbsp;&nbsp;&nbsp;&nbsp;rte
    284. &nbsp;&nbsp;&nbsp;&nbsp;nop
    285. &nbsp;&nbsp;&nbsp;&nbsp;
    286. flipframebuf:
    287. &nbsp;&nbsp;&nbsp;&nbsp;sts.l&nbsp;&nbsp;&nbsp;&nbsp;pr,@-r15
    288. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r0,@-r15
    289. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r1,@-r15
    290. &nbsp;&nbsp;&nbsp;&nbsp;
    291. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;ffb_fbctl,r1
    292. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;@r1,r0
    293. &nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#1,r0
    294. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;r0,@r1
    295.  
    296. -
    297. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;@r1,r14
    298. &nbsp;&nbsp;&nbsp;&nbsp;cmp/eq&nbsp;&nbsp;&nbsp;&nbsp;r0,r14
    299. &nbsp;&nbsp;&nbsp;&nbsp;bt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
    300.  
    301. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r1
    302. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r0
    303. &nbsp;&nbsp;&nbsp;&nbsp;rts
    304. &nbsp;&nbsp;&nbsp;&nbsp;lds.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,pr
    305.  
    306. &nbsp;&nbsp;&nbsp;&nbsp;
    307. waitfb:
    308. &nbsp;&nbsp;&nbsp;&nbsp;sts.l&nbsp;&nbsp;&nbsp;&nbsp;pr,@-r15
    309. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r0,@-r15
    310. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r1,@-r15
    311. &nbsp;&nbsp;&nbsp;&nbsp;
    312. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;ffb_fbctl,r1
    313. &nbsp;&nbsp;&nbsp;&nbsp;
    314. -
    315. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;@r1,r0
    316. &nbsp;&nbsp;&nbsp;&nbsp;tst&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#2,r0
    317. &nbsp;&nbsp;&nbsp;&nbsp;bf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
    318. &nbsp;&nbsp;&nbsp;&nbsp;
    319. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r1
    320. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r0
    321. &nbsp;&nbsp;&nbsp;&nbsp;lds.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,pr
    322. &nbsp;&nbsp;&nbsp;&nbsp;rts
    323. &nbsp;&nbsp;&nbsp;&nbsp;nop
    324.  
    325. ffb_fbctl:&nbsp;&nbsp;&nbsp;&nbsp;dc.l $2000410A
    326.  
    327. &nbsp;&nbsp;&nbsp;&nbsp;LTORG
    328. &nbsp;&nbsp;&nbsp;&nbsp;
    329. initscreen:
    330. &nbsp;&nbsp;&nbsp;&nbsp;sts.l&nbsp;&nbsp;&nbsp;&nbsp;pr,@-r15
    331. &nbsp;&nbsp;&nbsp;&nbsp;
    332. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;is_r0,r0; 32X has priority
    333. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#$80,r1
    334. &nbsp;&nbsp;&nbsp;&nbsp;mov.b&nbsp;&nbsp;&nbsp;&nbsp;r1,@r0
    335. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;is_r1,r0; 8bpp mode
    336. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#81,r1
    337. &nbsp;&nbsp;&nbsp;&nbsp;mov.b&nbsp;&nbsp;&nbsp;&nbsp;r1,@r0
    338.  
    339. &nbsp;&nbsp;&nbsp;&nbsp;REPT 2
    340. &nbsp;&nbsp;&nbsp;&nbsp;
    341. &nbsp;&nbsp;&nbsp;&nbsp;bsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flipframebuf
    342. &nbsp;&nbsp;&nbsp;&nbsp;nop
    343. &nbsp;&nbsp;&nbsp;&nbsp;
    344. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;is_fb,r0; set up line pointers
    345. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#224,r2; 224 lines
    346. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#160,r3; output = (I * 160) + 0x100
    347. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#$100,r1; (160 because 320>>1==160)
    348.  
    349. -
    350. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;r1,@r0
    351. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r3,r1
    352. &nbsp;&nbsp;&nbsp;&nbsp;dt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2
    353. &nbsp;&nbsp;&nbsp;&nbsp;bf/s&nbsp;&nbsp;&nbsp;&nbsp;-
    354. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#2,r0
    355. &nbsp;&nbsp;&nbsp;&nbsp;
    356. &nbsp;&nbsp;&nbsp;&nbsp;ENDM
    357. &nbsp;&nbsp;&nbsp;&nbsp;
    358. &nbsp;&nbsp;&nbsp;&nbsp;lds.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,pr
    359. &nbsp;&nbsp;&nbsp;&nbsp;rts
    360. &nbsp;&nbsp;&nbsp;&nbsp;nop
    361.  
    362. is_r0:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l $20004000
    363. is_r1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l $20004101
    364. is_fb:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l $24000000
    365.  
    366. &nbsp;&nbsp;&nbsp;&nbsp;LTORG
    367.  
    368. loadpalette:
    369. &nbsp;&nbsp;&nbsp;&nbsp;sts.l&nbsp;&nbsp;&nbsp;&nbsp;pr,@-r15
    370. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r1,@-r15
    371. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r2,@-r15
    372. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r3,@-r15
    373. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;lp_cram,r1
    374. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#256,r2
    375.  
    376. -
    377. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;@r0+,r3
    378. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;r3,@r1
    379. &nbsp;&nbsp;&nbsp;&nbsp;dt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2
    380. &nbsp;&nbsp;&nbsp;&nbsp;bf/s&nbsp;&nbsp;&nbsp;&nbsp;-
    381. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#2,r1
    382.  
    383. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r3
    384. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r2
    385. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r1
    386. &nbsp;&nbsp;&nbsp;&nbsp;rts
    387. &nbsp;&nbsp;&nbsp;&nbsp;lds.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,pr
    388.  
    389. lp_cram:&nbsp;&nbsp;&nbsp;&nbsp;dc.l $20004200
    390.  
    391. &nbsp;&nbsp;&nbsp;&nbsp;LTORG
    392.  
    393. ; drawpoint (r0 r1 r2 --)
    394. ; draw color r2 at point (r0,r1)
    395. drawpoint:
    396. &nbsp;&nbsp;&nbsp;&nbsp;sts.l&nbsp;&nbsp;&nbsp;&nbsp;pr,@-r15
    397. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r3,@-r15
    398. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r4,@-r15
    399. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r5,@-r15
    400. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;dp_fbline,r3
    401. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#320,r4
    402. &nbsp;&nbsp;&nbsp;&nbsp;mul.l&nbsp;&nbsp;&nbsp;&nbsp;r4,r1
    403. &nbsp;&nbsp;&nbsp;&nbsp;sts.l&nbsp;&nbsp;&nbsp;&nbsp;macl,r5
    404. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,r5
    405. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r5,r3
    406. &nbsp;&nbsp;&nbsp;&nbsp;mov.b&nbsp;&nbsp;&nbsp;&nbsp;r2,@r3
    407. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r5
    408. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r4
    409. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r3
    410. &nbsp;&nbsp;&nbsp;&nbsp;lds.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,pr
    411. &nbsp;&nbsp;&nbsp;&nbsp;rts
    412. &nbsp;&nbsp;&nbsp;&nbsp;nop
    413.  
    414. dp_fbline:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l $24000200
    415.  
    416. &nbsp;&nbsp;&nbsp;&nbsp;LTORG
    417.  
    418. ; drawline (r0 r1 r2 r3 r4 -- )
    419. ; draws a line using an optimized Bresenham's algorithm from (r0,r1) to (r2,r3)
    420. ; in color r4
    421. drawline:
    422. &nbsp;&nbsp;&nbsp;&nbsp;sts.l&nbsp;&nbsp;&nbsp;&nbsp;pr,@-r15
    423. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r6,@-r15; dx
    424. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r7,@-r15; dy
    425. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r8,@-r15; error
    426. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r9,@-r15; y increment for framebuffer (either 320 or -320)
    427. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r10,@-r15; framebuffer pointer
    428. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r11,@-r15; steep; x increment
    429.  
    430. ; drawing a point?
    431. &nbsp;&nbsp;&nbsp;&nbsp;cmp/eq&nbsp;&nbsp;&nbsp;&nbsp;r0,r2
    432. &nbsp;&nbsp;&nbsp;&nbsp;bf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dl_doline
    433. &nbsp;&nbsp;&nbsp;&nbsp;cmp/eq&nbsp;&nbsp;&nbsp;&nbsp;r1,r3
    434. &nbsp;&nbsp;&nbsp;&nbsp;bf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dl_doline
    435. &nbsp;&nbsp;&nbsp;&nbsp;bra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drawpoint
    436. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r4,r2
    437.  
    438. ; STEEP
    439. dl_doline:
    440. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r2,r6; steep = abs(y1 - y0) > abs(x1 - x0)
    441. &nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,r6
    442. &nbsp;&nbsp;&nbsp;&nbsp;cmp/pz&nbsp;&nbsp;&nbsp;&nbsp;r6
    443. &nbsp;&nbsp;&nbsp;&nbsp;bt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+
    444. &nbsp;&nbsp;&nbsp;&nbsp;neg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r6,r6
    445. +
    446. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r3,r7
    447. &nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,r7
    448. &nbsp;&nbsp;&nbsp;&nbsp;cmp/pz&nbsp;&nbsp;&nbsp;&nbsp;r7
    449. &nbsp;&nbsp;&nbsp;&nbsp;bt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+
    450. &nbsp;&nbsp;&nbsp;&nbsp;neg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r7,r7
    451. +
    452. &nbsp;&nbsp;&nbsp;&nbsp;cmp/gt&nbsp;&nbsp;&nbsp;&nbsp;r6,r7
    453. &nbsp;&nbsp;&nbsp;&nbsp;movt&nbsp;&nbsp;&nbsp;&nbsp;r11
    454. &nbsp;&nbsp;&nbsp;&nbsp;bf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+; if (steep) { swap(x0, y0); swap(x1, y1); }
    455. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r0,r6
    456. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r1,r0
    457. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r6,r1
    458. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r2,r6
    459. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r3,r2
    460. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r6,r3
    461.  
    462. ; x0 > x1
    463. +
    464. &nbsp;&nbsp;&nbsp;&nbsp;cmp/gt&nbsp;&nbsp;&nbsp;&nbsp;r2,r0; if (x0 > x1) { swap(x0,x1); swap(y0,y1); }
    465. &nbsp;&nbsp;&nbsp;&nbsp;bf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+
    466. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r0,r9
    467. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r2,r0
    468. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r9,r2
    469. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r1,r9
    470. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r3,r1
    471. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r9,r3
    472.  
    473. ; VARIABLE INIT
    474. +&nbsp;&nbsp;&nbsp;&nbsp;
    475. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r2,r6; dx = x1 - x0
    476. &nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,r6
    477. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r3,r7; dy = y1 - y0
    478. &nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,r7
    479. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r6,r8; error = dx / 2
    480. &nbsp;&nbsp;&nbsp;&nbsp;shlr&nbsp;&nbsp;&nbsp;&nbsp;r8
    481. &nbsp;&nbsp;&nbsp;&nbsp;cmp/pz&nbsp;&nbsp;&nbsp;&nbsp;r7; dy = abs(dy)
    482. &nbsp;&nbsp;&nbsp;&nbsp;bt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+
    483. &nbsp;&nbsp;&nbsp;&nbsp;neg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r7,r7
    484.  
    485. ; STEEP INITIALIZE FRAMEBUFFER
    486. +
    487. &nbsp;&nbsp;&nbsp;&nbsp;tst&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r11,r11; steep?
    488. &nbsp;&nbsp;&nbsp;&nbsp;bt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dl_shallow; no, go to shallow
    489. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r0,r9; 320 * y0 == (y0 << 8) + (y0 << 6)
    490. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r0,r10
    491. &nbsp;&nbsp;&nbsp;&nbsp;shll8&nbsp;&nbsp;&nbsp;&nbsp;r9
    492. &nbsp;&nbsp;&nbsp;&nbsp;shll8&nbsp;&nbsp;&nbsp;&nbsp;r10; y0 << 6 == (y0 << 8) >> 2 (and [0,224) is small enough)
    493. &nbsp;&nbsp;&nbsp;&nbsp;shlr2&nbsp;&nbsp;&nbsp;&nbsp;r10
    494. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r10,r9
    495. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;dl_fbline,r10
    496. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r9,r10
    497. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,r10
    498. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#320,r11; x increment
    499. &nbsp;&nbsp;&nbsp;&nbsp;bra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dl_lastsetup
    500. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#1,r9
    501.  
    502. ; SHALLOW INITIALIZE FRAMEBUFFER
    503. dl_shallow:
    504. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r1,r9; 320 * y0 == (y0 << 8) + (y0 << 6)
    505. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r1,r10
    506. &nbsp;&nbsp;&nbsp;&nbsp;shll8&nbsp;&nbsp;&nbsp;&nbsp;r9
    507. &nbsp;&nbsp;&nbsp;&nbsp;shll8&nbsp;&nbsp;&nbsp;&nbsp;r10; y0 << 6 == (y0 << 8) >> 2 (and [0,224) is small enough)
    508. &nbsp;&nbsp;&nbsp;&nbsp;shlr2&nbsp;&nbsp;&nbsp;&nbsp;r10
    509. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r10,r9
    510. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;dl_fbline,r10
    511. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r9,r10
    512. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,r10
    513. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#1,r11; x increment
    514. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;#320,r9
    515.  
    516. dl_lastsetup:
    517. &nbsp;&nbsp;&nbsp;&nbsp;cmp/gt&nbsp;&nbsp;&nbsp;&nbsp;r3,r1; if (y0 > y1) ystep = -ystep
    518. &nbsp;&nbsp;&nbsp;&nbsp;bf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dl_loop
    519. &nbsp;&nbsp;&nbsp;&nbsp;neg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r9,r9
    520.  
    521. dl_loop:
    522. &nbsp;&nbsp;&nbsp;&nbsp;mov.b&nbsp;&nbsp;&nbsp;&nbsp;r4,@r10; drawpoint(x0, y0, color)
    523.  
    524. &nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r7,r8; error -= dy
    525. &nbsp;&nbsp;&nbsp;&nbsp;cmp/pz&nbsp;&nbsp;&nbsp;&nbsp;r8; if (error < 0) {
    526. &nbsp;&nbsp;&nbsp;&nbsp;bt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+
    527. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r9,r10;&nbsp;&nbsp;&nbsp;&nbsp; y0++
    528. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r6,r8;&nbsp;&nbsp;&nbsp;&nbsp; error += dx
    529. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; }
    530.  
    531. +
    532. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r11,r10; x0++
    533. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#1,r0
    534. &nbsp;&nbsp;&nbsp;&nbsp;cmp/eq&nbsp;&nbsp;&nbsp;&nbsp;r0,r2; if (x0 != x1) goto loop
    535. &nbsp;&nbsp;&nbsp;&nbsp;bf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dl_loop
    536. &nbsp;&nbsp;&nbsp;&nbsp;
    537. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r11
    538. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r10
    539. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r9
    540. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r8
    541. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r7
    542. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r6
    543. &nbsp;&nbsp;&nbsp;&nbsp;rts
    544. &nbsp;&nbsp;&nbsp;&nbsp;lds.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,pr
    545.  
    546. dl_fbline:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l $24000200
    547.  
    548. &nbsp;&nbsp;&nbsp;&nbsp;LTORG
    549. &nbsp;&nbsp;&nbsp;&nbsp;
    550.  
    551. focaldist:&nbsp;&nbsp;&nbsp;&nbsp;dc.l 600
    552.  
    553. ; pt3topt (r0 r1 r2 -- r0 r1)
    554. ; convert 3D point (r0,r1,r2) to 2D point (r0,r1)
    555. ; r2 is destroyed
    556. ; thanks to Jorge for floating point to integer migration help (it's based on old C code I wrote that used double)
    557. pt3topt:
    558. &nbsp;&nbsp;&nbsp;&nbsp;sts.l&nbsp;&nbsp;&nbsp;&nbsp;pr,@-r15
    559. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r4,@-r15
    560. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r5,@-r15
    561. &nbsp;&nbsp;&nbsp;&nbsp;
    562. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;p3_const,r4
    563. &nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r4,r2
    564. &nbsp;&nbsp;&nbsp;&nbsp;tst&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2,r2
    565. &nbsp;&nbsp;&nbsp;&nbsp;bf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+
    566. &nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#1,r2
    567.  
    568. +
    569. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;p3_fdist,r4; x = x3 * focaldist
    570. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r4,r4
    571. &nbsp;&nbsp;&nbsp;&nbsp;clrmac
    572. &nbsp;&nbsp;&nbsp;&nbsp;mul.l&nbsp;&nbsp;&nbsp;&nbsp;r0,r4
    573. &nbsp;&nbsp;&nbsp;&nbsp;sts.l&nbsp;&nbsp;&nbsp;&nbsp;macl,r0
    574. &nbsp;&nbsp;&nbsp;&nbsp;clrmac&nbsp;&nbsp;&nbsp;&nbsp;; y = y3 * focaldist
    575. &nbsp;&nbsp;&nbsp;&nbsp;mul.l&nbsp;&nbsp;&nbsp;&nbsp;r1,r4
    576. &nbsp;&nbsp;&nbsp;&nbsp;sts.l&nbsp;&nbsp;&nbsp;&nbsp;macl,r1
    577.  
    578. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;p3_div,r5
    579. &nbsp;&nbsp;&nbsp;&nbsp;
    580. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r2,@(0,r5); x /= z3
    581. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r0,@(4,r5)
    582. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@(4,r5),r0
    583.  
    584. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r2,@(0,r5); y /= z3
    585. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;r1,@(4,r5)
    586. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@(4,r5),r1
    587. &nbsp;&nbsp;&nbsp;&nbsp;
    588. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r5
    589. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,r4
    590. &nbsp;&nbsp;&nbsp;&nbsp;rts
    591. &nbsp;&nbsp;&nbsp;&nbsp;lds.l&nbsp;&nbsp;&nbsp;&nbsp;@r15+,pr
    592. &nbsp;&nbsp;&nbsp;&nbsp;nop
    593.  
    594. p3_const:&nbsp;&nbsp;&nbsp;&nbsp;dc.l 600
    595. p3_div:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.l $FFFFFF00
    596. p3_fdist:&nbsp;&nbsp;&nbsp;&nbsp;dc.l focaldist
    597.  
    598. &nbsp;&nbsp;&nbsp;&nbsp;LTORG
    599.  
    600. &nbsp;&nbsp;&nbsp;&nbsp;DEPHASE
    What I see:

    [​IMG]

    I'm expecting there to be a green cube completely overlapping the orange one. What am I doing wrong now?

    And yes I know my method might be inefficient; I'm just trying to get it to work =P
     
  12. Chilly Willy

    Chilly Willy

    Tech Member
    751
    11
    18
    Doom 32X
    You know you defined a number of macros right in the middle of the master SH2 code? You should probably move all your macros to the start of the file, or to another file altogether. Also, use 0x06040000 for the slave stack pointer, and 0x0603FFF0 for the master stack pointer. Since you don't use the slave, you don't really need (much of) a stack for it, and always put the master stack below the slave since the master sh2 will almost certainly use far more stack space than the slave, even if you eventually use the slave. I normally use 0x06040000 for the slave, and 0x0603FF00 for the master.

    As to your problem, I'm not sure how you're seeing anything at all: you flip the frame buffer, do two box macros, then wait forever WITHOUT flipping the frame buffer again! My guess is your wait for the frame buffer to finish flipping is failing, so you immediately return before the frame actually flips. You then have time to draw one box before the frame DOES flip, then the second box is drawn into the other frame buffer, which is never shown. Remember that the frame you draw into is not the visible frame. You have to flip the frame buffer after drawing to see what you just drew.
     
  13. Andlabs

    Andlabs

    「いっきまーす」 Wiki Sysop
    2,175
    1
    0
    Writing my own MD/Genesis sound driver :D
    Yes, right now I'm just trying to get my method to work; when it does work I'll change it to a regular function and get rid of the macros and separate the slave code.

    Thank you, however when I added a flipframebuf call after the box macros, I got a blank screen. If I kept flipping frame buffers constantly, I didn't get an image change. The only way I actually got the image I wanted was with this:
    Code (Text):
    1. MasterMain:
    2. &nbsp;&nbsp;&nbsp;&nbsp;box&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$20,$20,$0, $40,$40,$7F, 1
    3. &nbsp;&nbsp;&nbsp;&nbsp;box&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$20,$20,$0, $40,$40,$7F, 2
    4.  
    5. &nbsp;&nbsp;&nbsp;&nbsp;bsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flipframebuf
    6. &nbsp;&nbsp;&nbsp;&nbsp;nop
    7.  
    8. &nbsp;&nbsp;&nbsp;&nbsp;bra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MasterMain
    9. &nbsp;&nbsp;&nbsp;&nbsp;nop
    however the image now flashes, which I don't want. I tried both the flipframebuf I had and the one you posted; both have the same effect.
     
  14. Chilly Willy

    Chilly Willy

    Tech Member
    751
    11
    18
    Doom 32X
    Okay, let's see if we can't spif up that flip routine.

    Code (Text):
    1. flipframebuf:
    2. &nbsp;&nbsp;&nbsp;&nbsp;mov.l&nbsp;&nbsp;&nbsp;&nbsp;ffb_fbctl,r1
    3. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;@r1,r0
    4. &nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#1,r0
    5. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;r0,@r1
    6.  
    7. -
    8. &nbsp;&nbsp;&nbsp;&nbsp;mov.w&nbsp;&nbsp;&nbsp;&nbsp;@r1,r14
    9. &nbsp;&nbsp;&nbsp;&nbsp;cmp/eq&nbsp;&nbsp;&nbsp;&nbsp;r0,r14
    10. &nbsp;&nbsp;&nbsp;&nbsp;bt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
    Here's your first bug. cmp/eq bt means it will branch if they are the same... which won't be the case since you only JUST changed it! They will be NOT equal until the next vertical blank when the value you wrote will take affect. Remember, the read value is ALWAYS the current setting - not what you wrote last. So you write a new value, read will return the old value until the next vblank, THEN it returns the new value. So the loop there needs to be bf, not bt. That will make it wait until the page is actually flipped.

    Oh, you should also either AND off all but bit 1 and 0, or read the low byte of the reg as a byte. That way the HBLANK/VBLANK status bits don't interfere with the comparison. Come to think of it, I need to do that myself. :v:
     
  15. Andlabs

    Andlabs

    「いっきまーす」 Wiki Sysop
    2,175
    1
    0
    Writing my own MD/Genesis sound driver :D
    Ah, I see now. I also see that I was still doing the wrong compare — I was supposed to compare the value I wrote to the current register, not the old value. So yeah, thanks again.
     
  16. Chilly Willy

    Chilly Willy

    Tech Member
    751
    11
    18
    Doom 32X
    You're welcome. You're doing pretty good considering it's all assembly. :)