main.a65 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. #include "memmap.i65"
  2. #include "dma.i65"
  3. GAME_MAIN:
  4. sep #$20 : .as
  5. lda #$01
  6. sta $420d ; fast cpu
  7. sep #$20 : .as
  8. jsr snes_init
  9. jsr setup_gfx
  10. jsr colortest
  11. jsr setup_hdma
  12. jsr tests
  13. sep #$20 : .as
  14. lda #$00
  15. sta @AVR_CMD
  16. rep #$20 : .al
  17. lda #$0000
  18. sta @AVR_PARAM
  19. sta @AVR_PARAM+2
  20. jsr menu_init
  21. sep #$20 : .as
  22. sep #$20 : .as
  23. - lda @$C00000
  24. lda @$D00000
  25. lda @$E00000
  26. lda @$F00000
  27. lda @$400000
  28. lda @$500000
  29. lda @$600000
  30. lda @$700000
  31. ; bra -
  32. jsr menuloop
  33. cli
  34. stz $4200
  35. jmp @infloop ;infinite loop in WRAM
  36. colortest:
  37. sep #$20 : .as
  38. rep #$10 : .xl
  39. stz $2130
  40. rts
  41. setup_gfx:
  42. sep #$20 : .as
  43. rep #$10 : .xl
  44. stz $420b
  45. stz $420c
  46. ;clear tilemap buffers
  47. ldx #$0000
  48. stx $2181
  49. lda #$01
  50. sta $2183
  51. DMA0(#$08, #0, #^zero, #!zero, #$80)
  52. ;copy 2bpp font (can be used as 4-bit lores font!)
  53. ldx #$4000
  54. stx $2116
  55. DMA0(#$01, #$2000, #^font2, #!font2, #$18)
  56. ;copy 4bpp font
  57. ldx #$0000
  58. stx $2116
  59. DMA0(#$01, #$4000, #^font4, #!font4, #$18)
  60. ;clear BG1 tilemap
  61. ldx #BG1_TILE_BASE
  62. stx $2116
  63. DMA0(#$09, #$1000, #^zero, #!zero, #$18)
  64. ;clear BG2 tilemap
  65. ldx #BG2_TILE_BASE
  66. stx $2116
  67. DMA0(#$09, #$1000, #^zero, #!zero, #$18)
  68. ;clear OAM tables
  69. ldx #$0000
  70. stx $2102
  71. DMA0(#$08, #$544, #^zero, #!zero, #$04)
  72. ;copy logo tiles
  73. ldx #$2000
  74. stx $2116
  75. DMA0(#$01, #$3740, #^logo, #!logo, #$18)
  76. ;copy logo tilemap
  77. ldx #BG1_TILE_BASE
  78. stx $2116
  79. DMA0(#$01, #$280, #^logomap, #!logomap, #$18)
  80. ;copy sprites tiles
  81. ldx #OAM_TILE_BASE
  82. stx $2116
  83. DMA0(#$01, #$400, #^logospr, #!logospr, #$18)
  84. ;set OAM tables
  85. ldx #$0000
  86. stx $2102
  87. DMA0(#$00, #$5C, #^oam_data_l, #!oam_data_l, #$04)
  88. ldx #$0100
  89. stx $2102
  90. DMA0(#$00, #$08, #^oam_data_h, #!oam_data_h, #$04)
  91. ;set palette
  92. stz $2121
  93. DMA0(#$00, #$200, #^palette, #!palette, #$22)
  94. ;copy hdma tables so we can work "without" the cartridge
  95. ;palette
  96. lda #^hdma_pal
  97. ldx #!hdma_pal
  98. stx $2181
  99. sta $2183
  100. DMA0(#$00, #52, #^hdma_pal_src, #!hdma_pal_src, #$80)
  101. ;CG addr for palette
  102. lda #^hdma_cg_addr
  103. ldx #!hdma_cg_addr
  104. stx $2181
  105. sta $2183
  106. DMA0(#$00, #227, #^hdma_cg_addr_src, #!hdma_cg_addr_src, #$80)
  107. ;screen mode
  108. lda #^hdma_mode
  109. ldx #!hdma_mode
  110. stx $2181
  111. sta $2183
  112. DMA0(#$00, #5, #^hdma_mode_src, #!hdma_mode_src, #$80)
  113. ;bg scroll
  114. lda #^hdma_scroll
  115. ldx #!hdma_scroll
  116. stx $2181
  117. sta $2183
  118. DMA0(#$00, #11, #^hdma_scroll_src, #!hdma_scroll_src, #$80);
  119. ;color math
  120. lda #^hdma_math
  121. ldx #!hdma_math
  122. stx $2181
  123. sta $2183
  124. DMA0(#$00, #19, #^hdma_math_src, #!hdma_math_src, #$80);
  125. ;copy infinite loop to WRAM
  126. lda #$80
  127. sta infloop
  128. lda #$fe
  129. sta infloop+1
  130. rts
  131. tests:
  132. sep #$20 : .as ;8-bit accumulator
  133. rep #$10 : .xl ;16-bit index
  134. lda #$03 ;mode 3, mode 5 via HDMA :D
  135. sta $2105
  136. lda #$58 ;Tilemap addr 0xB000
  137. ora #$02 ;SC size 32x64
  138. sta $2107 ;for BG1
  139. lda #$50 ;Tilemap addr 0xA000
  140. ora #$02 ;SC size 32x64
  141. sta $2108 ;for BG2
  142. lda #$40 ;chr base addr:
  143. sta $210b ;BG1=0x0000, BG2=0x8000
  144. lda #$13 ;enable BG1+BG2+OBJ
  145. sta $212c ;BG Main
  146. lda #$13 ;enable BG1+BG2+OBJ
  147. sta $212d ;BG Sub
  148. jsr setup_224
  149. lda #$00
  150. sta $2130
  151. stz $2121
  152. lda #$0f
  153. sta $2100 ;screen on, full brightness
  154. lda #9
  155. sta bar_yl
  156. rts
  157. snes_init:
  158. sep #$20 : .as ;8-bit accumulator
  159. rep #$10 : .xl ;16-bit index
  160. lda #$01
  161. sta $420d ; FAAAAAST
  162. lda #$8f
  163. sta $2100 ;INIDISP: force blank
  164. lda #$03 ; 8x8+16x16; name=0; base=3
  165. sta $2101 ;
  166. stz $2102 ;
  167. stz $2103 ;
  168. ; stz $2104 ; (OAM Data?!)
  169. ; stz $2104 ; (OAM Data?!)
  170. stz $2105 ;
  171. stz $2106 ;
  172. stz $2107 ;
  173. stz $2108 ;
  174. stz $2109 ;
  175. stz $210a ;
  176. stz $210b ;
  177. stz $210c ;
  178. stz $210d ;
  179. stz $210d ;
  180. stz $210e ;
  181. stz $210e ;
  182. stz $210f ;
  183. stz $210f ;
  184. lda #$05
  185. sta $2110 ;
  186. stz $2110 ;
  187. stz $2111 ;
  188. stz $2111 ;
  189. stz $2112 ;
  190. stz $2112 ;
  191. stz $2113 ;
  192. stz $2113 ;
  193. stz $2114 ;
  194. stz $2114 ;
  195. lda #$80
  196. sta $2115 ;
  197. stz $2116 ;
  198. stz $2117 ;
  199. ; stz $2118 ;(VRAM Data?!)
  200. ; stz $2119 ;(VRAM Data?!)
  201. stz $211a ;
  202. stz $211b ;
  203. lda #$01
  204. sta $211b ;
  205. stz $211c ;
  206. stz $211c ;
  207. stz $211d ;
  208. stz $211d ;
  209. stz $211e ;
  210. sta $211e ;
  211. stz $211f ;
  212. stz $211f ;
  213. stz $2120 ;
  214. stz $2120 ;
  215. stz $2121 ;
  216. ; stz $2122 ; (CG Data?!)
  217. ; stz $2122 ; (CG Data?!)
  218. stz $2123 ;
  219. stz $2124 ;
  220. stz $2125 ;
  221. stz $2126 ;
  222. stz $2127 ;
  223. stz $2128 ;
  224. stz $2129 ;
  225. stz $212a ;
  226. stz $212b ;
  227. stz $212c ;
  228. stz $212d ;
  229. stz $212e ;
  230. lda #$30
  231. sta $2130 ;
  232. stz $2131 ;
  233. lda #$e0
  234. sta $2132 ;
  235. stz $2133 ;
  236. stz $4200 ;
  237. lda #$ff
  238. sta $4201 ;
  239. stz $4202 ;
  240. stz $4203 ;
  241. stz $4204 ;
  242. stz $4205 ;
  243. stz $4206 ;
  244. stz $4207 ;
  245. stz $4208 ;
  246. stz $4209 ;
  247. stz $420a ;
  248. stz $420b ;
  249. stz $420c ;
  250. ;clear WRAM lower page
  251. ; ldx #$0200
  252. ; stx $2181
  253. ; lda #$00
  254. ; sta $2183
  255. ; DMA0(#$08, #$FF00, #^zero, #!zero, #$80)
  256. ; ldx #$0000
  257. ; stx $2181
  258. ; lda #$00
  259. ; sta $2183
  260. ; DMA0(#$08, #$1e0, #^zero, #!zero, #$80)
  261. rts