romdev-mcp 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1247) hide show
  1. package/AGENTS.md +726 -0
  2. package/LICENSE +45 -0
  3. package/NOTICE +86 -0
  4. package/README.md +46 -0
  5. package/examples/README.md +36 -0
  6. package/examples/art-first-workflow/README.md +205 -0
  7. package/examples/atari2600/main.asm +143 -0
  8. package/examples/atari2600/templates/default.asm +183 -0
  9. package/examples/atari2600/templates/mini_invaders.asm +381 -0
  10. package/examples/atari2600/templates/music_demo.asm +322 -0
  11. package/examples/atari2600/templates/paddle.asm +345 -0
  12. package/examples/atari2600/templates/single_screen.asm +242 -0
  13. package/examples/atari7800/main.c +88 -0
  14. package/examples/atari7800/templates/default.c +183 -0
  15. package/examples/atari7800/templates/hello_sprite.c +141 -0
  16. package/examples/atari7800/templates/music_demo.c +123 -0
  17. package/examples/atari7800/templates/platformer.c +159 -0
  18. package/examples/atari7800/templates/puzzle.c +164 -0
  19. package/examples/atari7800/templates/racing.c +139 -0
  20. package/examples/atari7800/templates/shmup.c +148 -0
  21. package/examples/atari7800/templates/sports.c +207 -0
  22. package/examples/c64/main.c +63 -0
  23. package/examples/c64/templates/hello_sprite.c +117 -0
  24. package/examples/c64/templates/music_demo.c +131 -0
  25. package/examples/c64/templates/platformer.c +194 -0
  26. package/examples/c64/templates/puzzle.c +178 -0
  27. package/examples/c64/templates/racing.c +140 -0
  28. package/examples/c64/templates/shmup.c +201 -0
  29. package/examples/c64/templates/sports.c +109 -0
  30. package/examples/c64/templates/tile_engine.c +174 -0
  31. package/examples/gb/main.asm +106 -0
  32. package/examples/gb/main.c +49 -0
  33. package/examples/gb/templates/default.c +58 -0
  34. package/examples/gb/templates/hello_sprite.c +130 -0
  35. package/examples/gb/templates/music_demo.c +52 -0
  36. package/examples/gb/templates/platformer.c +178 -0
  37. package/examples/gb/templates/puzzle.c +217 -0
  38. package/examples/gb/templates/racing.c +158 -0
  39. package/examples/gb/templates/shmup.c +172 -0
  40. package/examples/gb/templates/sports.c +136 -0
  41. package/examples/gb/templates/tile_engine.c +280 -0
  42. package/examples/gba/templates/gba_hello.c +64 -0
  43. package/examples/gba/templates/maxmod_demo.c +105 -0
  44. package/examples/gba/templates/platformer.c +215 -0
  45. package/examples/gba/templates/puzzle.c +237 -0
  46. package/examples/gba/templates/racing.c +175 -0
  47. package/examples/gba/templates/shmup.c +197 -0
  48. package/examples/gba/templates/sports.c +177 -0
  49. package/examples/gba/templates/tonc_hello.c +72 -0
  50. package/examples/gba/templates/tonc_hello_sprite.c +109 -0
  51. package/examples/gbc/main.asm +123 -0
  52. package/examples/gbc/templates/default.c +61 -0
  53. package/examples/gbc/templates/hello_sprite.c +140 -0
  54. package/examples/gbc/templates/music_demo.c +63 -0
  55. package/examples/gbc/templates/platformer.c +181 -0
  56. package/examples/gbc/templates/puzzle.c +217 -0
  57. package/examples/gbc/templates/racing.c +164 -0
  58. package/examples/gbc/templates/shmup.c +188 -0
  59. package/examples/gbc/templates/sports.c +142 -0
  60. package/examples/gbc/templates/tile_engine.c +280 -0
  61. package/examples/genesis/main.s +161 -0
  62. package/examples/genesis/templates/hello_sprite.c +75 -0
  63. package/examples/genesis/templates/platformer.c +166 -0
  64. package/examples/genesis/templates/puzzle.c +240 -0
  65. package/examples/genesis/templates/racing.c +170 -0
  66. package/examples/genesis/templates/sgdk_hello.c +41 -0
  67. package/examples/genesis/templates/shmup.c +188 -0
  68. package/examples/genesis/templates/shmup_2p.c +244 -0
  69. package/examples/genesis/templates/sports.c +172 -0
  70. package/examples/genesis/templates/tile_engine.c +135 -0
  71. package/examples/genesis/templates/xgm2_demo.c +53 -0
  72. package/examples/genesis/templates/xgm2_demo_data.s +27 -0
  73. package/examples/gg/main.c +10 -0
  74. package/examples/gg/templates/default.c +156 -0
  75. package/examples/gg/templates/hello_sprite.c +90 -0
  76. package/examples/gg/templates/music_demo.c +156 -0
  77. package/examples/gg/templates/platformer.c +220 -0
  78. package/examples/gg/templates/puzzle.c +204 -0
  79. package/examples/gg/templates/racing.c +161 -0
  80. package/examples/gg/templates/shmup.c +188 -0
  81. package/examples/gg/templates/sports.c +137 -0
  82. package/examples/gg/templates/tile_engine.c +137 -0
  83. package/examples/lynx/main.c +4 -0
  84. package/examples/lynx/templates/default.c +41 -0
  85. package/examples/lynx/templates/hello_sprite.c +39 -0
  86. package/examples/lynx/templates/music_demo.c +37 -0
  87. package/examples/lynx/templates/platformer.c +72 -0
  88. package/examples/lynx/templates/puzzle.c +142 -0
  89. package/examples/lynx/templates/racing.c +94 -0
  90. package/examples/lynx/templates/shmup.c +132 -0
  91. package/examples/lynx/templates/sports.c +59 -0
  92. package/examples/nes/main.c +143 -0
  93. package/examples/nes/space-shooter/README.md +68 -0
  94. package/examples/nes/space-shooter/main.c +441 -0
  95. package/examples/nes/space-shooter/nes_runtime.c +347 -0
  96. package/examples/nes/space-shooter/nes_runtime.h +141 -0
  97. package/examples/nes/templates/default.c +41 -0
  98. package/examples/nes/templates/hello_sprite.c +104 -0
  99. package/examples/nes/templates/music_demo.c +80 -0
  100. package/examples/nes/templates/platformer.c +171 -0
  101. package/examples/nes/templates/puzzle.c +232 -0
  102. package/examples/nes/templates/racing.c +203 -0
  103. package/examples/nes/templates/shmup.c +228 -0
  104. package/examples/nes/templates/sports.c +205 -0
  105. package/examples/nes/templates/tile_engine.c +224 -0
  106. package/examples/porting-across-platforms/README.md +59 -0
  107. package/examples/sms/main.c +129 -0
  108. package/examples/sms/templates/default.c +110 -0
  109. package/examples/sms/templates/hello_sprite.c +90 -0
  110. package/examples/sms/templates/music_demo.c +151 -0
  111. package/examples/sms/templates/platformer.c +215 -0
  112. package/examples/sms/templates/puzzle.c +204 -0
  113. package/examples/sms/templates/racing.c +161 -0
  114. package/examples/sms/templates/shmup.c +167 -0
  115. package/examples/sms/templates/shmup_2p.c +219 -0
  116. package/examples/sms/templates/sports.c +147 -0
  117. package/examples/sms/templates/tile_engine.c +137 -0
  118. package/examples/snes/main.asm +70 -0
  119. package/examples/snes/templates/c-hello-data.asm +28 -0
  120. package/examples/snes/templates/c-hello.c +71 -0
  121. package/examples/snes/templates/default-data.asm +36 -0
  122. package/examples/snes/templates/default.c +74 -0
  123. package/examples/snes/templates/hello_sprite-data.asm +45 -0
  124. package/examples/snes/templates/hello_sprite.c +76 -0
  125. package/examples/snes/templates/music_demo-data.asm +20 -0
  126. package/examples/snes/templates/music_demo.c +83 -0
  127. package/examples/snes/templates/platformer-data.asm +27 -0
  128. package/examples/snes/templates/platformer.c +142 -0
  129. package/examples/snes/templates/puzzle-data.asm +14 -0
  130. package/examples/snes/templates/puzzle.c +199 -0
  131. package/examples/snes/templates/racing-data.asm +33 -0
  132. package/examples/snes/templates/racing.c +146 -0
  133. package/examples/snes/templates/shmup-data.asm +61 -0
  134. package/examples/snes/templates/shmup.c +199 -0
  135. package/examples/snes/templates/sports-data.asm +28 -0
  136. package/examples/snes/templates/sports.c +144 -0
  137. package/package.json +83 -0
  138. package/src/cli/smoke.js +283 -0
  139. package/src/cores/registry.js +95 -0
  140. package/src/host/LibretroHost.js +502 -0
  141. package/src/host/callbacks.js +444 -0
  142. package/src/host/chafa-render.js +170 -0
  143. package/src/host/coreLoader.js +57 -0
  144. package/src/host/cpu-state.js +422 -0
  145. package/src/host/dsp-state.js +188 -0
  146. package/src/host/framebuffer.js +115 -0
  147. package/src/host/gpgx-state.js +309 -0
  148. package/src/host/index.js +4 -0
  149. package/src/host/retroConstants.js +72 -0
  150. package/src/host/snes9x-state.js +35 -0
  151. package/src/host/types.js +280 -0
  152. package/src/mcp/disclosure.js +250 -0
  153. package/src/mcp/log.js +87 -0
  154. package/src/mcp/server.js +433 -0
  155. package/src/mcp/state.js +83 -0
  156. package/src/mcp/tools/address-to-symbol.js +151 -0
  157. package/src/mcp/tools/art-loaders.js +740 -0
  158. package/src/mcp/tools/assets.js +89 -0
  159. package/src/mcp/tools/audio.js +173 -0
  160. package/src/mcp/tools/cart-parts.js +649 -0
  161. package/src/mcp/tools/diff-roms.js +412 -0
  162. package/src/mcp/tools/disasm.js +980 -0
  163. package/src/mcp/tools/find-references.js +361 -0
  164. package/src/mcp/tools/font-map.js +353 -0
  165. package/src/mcp/tools/frame.js +249 -0
  166. package/src/mcp/tools/free-space.js +95 -0
  167. package/src/mcp/tools/index.js +351 -0
  168. package/src/mcp/tools/input-layout.js +215 -0
  169. package/src/mcp/tools/input.js +142 -0
  170. package/src/mcp/tools/lifecycle.js +110 -0
  171. package/src/mcp/tools/lospec.js +156 -0
  172. package/src/mcp/tools/memory.js +169 -0
  173. package/src/mcp/tools/metasprite-tools.js +261 -0
  174. package/src/mcp/tools/platform-docs.js +102 -0
  175. package/src/mcp/tools/platform-tools.js +1063 -0
  176. package/src/mcp/tools/platforms.js +86 -0
  177. package/src/mcp/tools/playtest.js +280 -0
  178. package/src/mcp/tools/preview-tile.js +360 -0
  179. package/src/mcp/tools/project.js +1885 -0
  180. package/src/mcp/tools/record.js +131 -0
  181. package/src/mcp/tools/rendering-context.js +700 -0
  182. package/src/mcp/tools/rom-id.js +256 -0
  183. package/src/mcp/tools/run-until.js +173 -0
  184. package/src/mcp/tools/snippets.js +235 -0
  185. package/src/mcp/tools/splice-chr.js +215 -0
  186. package/src/mcp/tools/sprite-pipeline.js +614 -0
  187. package/src/mcp/tools/state.js +99 -0
  188. package/src/mcp/tools/symbols.js +277 -0
  189. package/src/mcp/tools/tile-inspect.js +206 -0
  190. package/src/mcp/tools/toolchain.js +680 -0
  191. package/src/mcp/tools/watch-memory.js +212 -0
  192. package/src/mcp/tools/which-tiles.js +193 -0
  193. package/src/mcp/util.js +85 -0
  194. package/src/observer/bus.js +127 -0
  195. package/src/observer/livestream.html +589 -0
  196. package/src/observer/server.js +66 -0
  197. package/src/observer/tool-wrap.js +115 -0
  198. package/src/platforms/atari2600/MENTAL_MODEL.md +185 -0
  199. package/src/platforms/atari2600/TROUBLESHOOTING.md +155 -0
  200. package/src/platforms/atari2600/UPSTREAM_SOURCES.md +49 -0
  201. package/src/platforms/atari2600/lib/README.md +67 -0
  202. package/src/platforms/atari2600/lib/cc65-src/crt0.s +49 -0
  203. package/src/platforms/atari2600/lib/cc65-src/ctype.s +5 -0
  204. package/src/platforms/atari2600/lib/kernel_skeleton.asm +85 -0
  205. package/src/platforms/atari2600/lib/player_kernel.asm +87 -0
  206. package/src/platforms/atari2600/lib/playfield_kernel.asm +63 -0
  207. package/src/platforms/atari2600/lib/read_joystick.asm +76 -0
  208. package/src/platforms/atari2600/lib/score_kernel.asm +141 -0
  209. package/src/platforms/atari2600/lib/vcs_constants.h +97 -0
  210. package/src/platforms/atari2600/lib/vectors.asm +16 -0
  211. package/src/platforms/atari2600/tia.js +355 -0
  212. package/src/platforms/atari7800/MENTAL_MODEL.md +306 -0
  213. package/src/platforms/atari7800/TROUBLESHOOTING.md +195 -0
  214. package/src/platforms/atari7800/UPSTREAM_SOURCES.md +43 -0
  215. package/src/platforms/atari7800/lib/README.md +45 -0
  216. package/src/platforms/atari7800/lib/c/atari7800_music.c +215 -0
  217. package/src/platforms/atari7800/lib/c/atari7800_music.h +33 -0
  218. package/src/platforms/atari7800/lib/c/atari7800_sfx.c +74 -0
  219. package/src/platforms/atari7800/lib/c/atari7800_sfx.h +45 -0
  220. package/src/platforms/atari7800/lib/cc65-src/clock.s +69 -0
  221. package/src/platforms/atari7800/lib/cc65-src/clocks_per_sec.s +34 -0
  222. package/src/platforms/atari7800/lib/cc65-src/clrscr.s +27 -0
  223. package/src/platforms/atari7800/lib/cc65-src/conio.s +226 -0
  224. package/src/platforms/atari7800/lib/cc65-src/conio_font.s +278 -0
  225. package/src/platforms/atari7800/lib/cc65-src/cputc.s +139 -0
  226. package/src/platforms/atari7800/lib/cc65-src/crt0.s +71 -0
  227. package/src/platforms/atari7800/lib/cc65-src/ctype.s +5 -0
  228. package/src/platforms/atari7800/lib/cc65-src/exehdr.s +46 -0
  229. package/src/platforms/atari7800/lib/cc65-src/extra/mono.s +28 -0
  230. package/src/platforms/atari7800/lib/cc65-src/extzp.inc +15 -0
  231. package/src/platforms/atari7800/lib/cc65-src/extzp.s +15 -0
  232. package/src/platforms/atari7800/lib/cc65-src/get_tv.s +65 -0
  233. package/src/platforms/atari7800/lib/cc65-src/irq.s +36 -0
  234. package/src/platforms/atari7800/lib/cc65-src/joy/atari7800-stdjoy.s +197 -0
  235. package/src/platforms/atari7800/lib/cc65-src/joy_stat_stddrv.s +14 -0
  236. package/src/platforms/atari7800/lib/cc65-src/libref.s +8 -0
  237. package/src/platforms/atari7800/lib/cc65-src/mono_clrscr.s +27 -0
  238. package/src/platforms/atari7800/lib/cc65-src/mono_conio.s +231 -0
  239. package/src/platforms/atari7800/lib/cc65-src/mono_cputc.s +102 -0
  240. package/src/platforms/atari7800/lib/cc65-src/mono_font.s +2065 -0
  241. package/src/platforms/atari7800/lib/cc65-src/mono_setcursor.s +214 -0
  242. package/src/platforms/atari7800/lib/cc65-src/setcursor.s +214 -0
  243. package/src/platforms/atari7800/lib/cc65-src/textcolor.s +53 -0
  244. package/src/platforms/atari7800/lib/cc65-src/wherex.s +19 -0
  245. package/src/platforms/atari7800/lib/cc65-src/wherey.s +19 -0
  246. package/src/platforms/atari7800/lib/display_list.asm +53 -0
  247. package/src/platforms/atari7800/lib/maria_init.asm +48 -0
  248. package/src/platforms/atari7800/lib/maria_registers.h +61 -0
  249. package/src/platforms/atari7800/lib/palette_load.asm +53 -0
  250. package/src/platforms/atari7800/lib/read_pad.asm +57 -0
  251. package/src/platforms/atari7800/lib/vblank_wait.asm +16 -0
  252. package/src/platforms/atari7800/maria.js +220 -0
  253. package/src/platforms/c64/MENTAL_MODEL.md +175 -0
  254. package/src/platforms/c64/TROUBLESHOOTING.md +130 -0
  255. package/src/platforms/c64/UPSTREAM_SOURCES.md +35 -0
  256. package/src/platforms/c64/image-to-tilemap.js +190 -0
  257. package/src/platforms/c64/lib/README.md +52 -0
  258. package/src/platforms/c64/lib/basic_stub.s +25 -0
  259. package/src/platforms/c64/lib/c/c64_music.c +248 -0
  260. package/src/platforms/c64/lib/c/c64_music.h +36 -0
  261. package/src/platforms/c64/lib/c/c64_sfx.c +94 -0
  262. package/src/platforms/c64/lib/c/c64_sfx.h +37 -0
  263. package/src/platforms/c64/lib/c64_registers.h +108 -0
  264. package/src/platforms/c64/lib/cc65-src/_scrsize.s +12 -0
  265. package/src/platforms/c64/lib/cc65-src/acc_c128_speed.s +5 -0
  266. package/src/platforms/c64/lib/cc65-src/acc_c64dtv_speed.s +64 -0
  267. package/src/platforms/c64/lib/cc65-src/acc_c65_speed.s +69 -0
  268. package/src/platforms/c64/lib/cc65-src/acc_chameleon_speed.s +100 -0
  269. package/src/platforms/c64/lib/cc65-src/acc_detect_c128.s +33 -0
  270. package/src/platforms/c64/lib/cc65-src/acc_detect_c64dtv.s +44 -0
  271. package/src/platforms/c64/lib/cc65-src/acc_detect_c65.s +55 -0
  272. package/src/platforms/c64/lib/cc65-src/acc_detect_chameleon.s +39 -0
  273. package/src/platforms/c64/lib/cc65-src/acc_detect_scpu.s +34 -0
  274. package/src/platforms/c64/lib/cc65-src/acc_detect_turbomaster.s +45 -0
  275. package/src/platforms/c64/lib/cc65-src/acc_scpu_speed.s +59 -0
  276. package/src/platforms/c64/lib/cc65-src/acc_turbomaster_speed.s +56 -0
  277. package/src/platforms/c64/lib/cc65-src/bordercolor.s +17 -0
  278. package/src/platforms/c64/lib/cc65-src/break.s +108 -0
  279. package/src/platforms/c64/lib/cc65-src/cgetc.s +62 -0
  280. package/src/platforms/c64/lib/cc65-src/clrscr.s +11 -0
  281. package/src/platforms/c64/lib/cc65-src/color.s +24 -0
  282. package/src/platforms/c64/lib/cc65-src/conio.s +10 -0
  283. package/src/platforms/c64/lib/cc65-src/cputc.s +105 -0
  284. package/src/platforms/c64/lib/cc65-src/crt0.s +117 -0
  285. package/src/platforms/c64/lib/cc65-src/devnum.s +7 -0
  286. package/src/platforms/c64/lib/cc65-src/emd/c64-65816.s +377 -0
  287. package/src/platforms/c64/lib/cc65-src/emd/c64-c256k.s +508 -0
  288. package/src/platforms/c64/lib/cc65-src/emd/c64-dqbb.s +447 -0
  289. package/src/platforms/c64/lib/cc65-src/emd/c64-georam.s +355 -0
  290. package/src/platforms/c64/lib/cc65-src/emd/c64-isepic.s +276 -0
  291. package/src/platforms/c64/lib/cc65-src/emd/c64-kerberos.s +281 -0
  292. package/src/platforms/c64/lib/cc65-src/emd/c64-ram.s +270 -0
  293. package/src/platforms/c64/lib/cc65-src/emd/c64-ramcart.s +297 -0
  294. package/src/platforms/c64/lib/cc65-src/emd/c64-reu.s +286 -0
  295. package/src/platforms/c64/lib/cc65-src/emd/c64-rrr.s +363 -0
  296. package/src/platforms/c64/lib/cc65-src/emd/c64-vdc.s +405 -0
  297. package/src/platforms/c64/lib/cc65-src/emd/dtv-himem.s +251 -0
  298. package/src/platforms/c64/lib/cc65-src/extra/soft80.s +71 -0
  299. package/src/platforms/c64/lib/cc65-src/extra/soft80mono.s +74 -0
  300. package/src/platforms/c64/lib/cc65-src/extra/tgimousedata.s +21 -0
  301. package/src/platforms/c64/lib/cc65-src/get_ostype.s +43 -0
  302. package/src/platforms/c64/lib/cc65-src/get_tv.s +20 -0
  303. package/src/platforms/c64/lib/cc65-src/gettime.s +83 -0
  304. package/src/platforms/c64/lib/cc65-src/irq.s +49 -0
  305. package/src/platforms/c64/lib/cc65-src/joy/c64-hitjoy.s +218 -0
  306. package/src/platforms/c64/lib/cc65-src/joy/c64-numpad.s +155 -0
  307. package/src/platforms/c64/lib/cc65-src/joy/c64-ptvjoy.s +146 -0
  308. package/src/platforms/c64/lib/cc65-src/joy/c64-stdjoy.s +111 -0
  309. package/src/platforms/c64/lib/cc65-src/joy_stat_stddrv.s +14 -0
  310. package/src/platforms/c64/lib/cc65-src/joy_stddrv.s +14 -0
  311. package/src/platforms/c64/lib/cc65-src/kbhit.s +23 -0
  312. package/src/platforms/c64/lib/cc65-src/kbrepeat.s +14 -0
  313. package/src/platforms/c64/lib/cc65-src/kernal.s +53 -0
  314. package/src/platforms/c64/lib/cc65-src/kplot.s +22 -0
  315. package/src/platforms/c64/lib/cc65-src/libref.s +16 -0
  316. package/src/platforms/c64/lib/cc65-src/mainargs.s +137 -0
  317. package/src/platforms/c64/lib/cc65-src/mcbdefault.s +146 -0
  318. package/src/platforms/c64/lib/cc65-src/mcbspritedata.s +4 -0
  319. package/src/platforms/c64/lib/cc65-src/mou/c64-1351.s +467 -0
  320. package/src/platforms/c64/lib/cc65-src/mou/c64-inkwell.s +446 -0
  321. package/src/platforms/c64/lib/cc65-src/mou/c64-joy.s +451 -0
  322. package/src/platforms/c64/lib/cc65-src/mou/c64-pot.s +409 -0
  323. package/src/platforms/c64/lib/cc65-src/mouse_stat_stddrv.s +14 -0
  324. package/src/platforms/c64/lib/cc65-src/mouse_stddrv.s +14 -0
  325. package/src/platforms/c64/lib/cc65-src/mouseref.s +23 -0
  326. package/src/platforms/c64/lib/cc65-src/pencalib.c +94 -0
  327. package/src/platforms/c64/lib/cc65-src/randomize.s +18 -0
  328. package/src/platforms/c64/lib/cc65-src/revers.s +27 -0
  329. package/src/platforms/c64/lib/cc65-src/ser/c64-swlink.s +484 -0
  330. package/src/platforms/c64/lib/cc65-src/ser_stat_stddrv.s +14 -0
  331. package/src/platforms/c64/lib/cc65-src/ser_stddrv.s +13 -0
  332. package/src/platforms/c64/lib/cc65-src/settime.s +84 -0
  333. package/src/platforms/c64/lib/cc65-src/soft80.inc +46 -0
  334. package/src/platforms/c64/lib/cc65-src/soft80_cgetc.s +85 -0
  335. package/src/platforms/c64/lib/cc65-src/soft80_charset.s +182 -0
  336. package/src/platforms/c64/lib/cc65-src/soft80_color.s +159 -0
  337. package/src/platforms/c64/lib/cc65-src/soft80_conio.s +157 -0
  338. package/src/platforms/c64/lib/cc65-src/soft80_cpeekc.s +148 -0
  339. package/src/platforms/c64/lib/cc65-src/soft80_cpeekcolor.s +19 -0
  340. package/src/platforms/c64/lib/cc65-src/soft80_cpeekrevers.s +15 -0
  341. package/src/platforms/c64/lib/cc65-src/soft80_cpeeks.s +71 -0
  342. package/src/platforms/c64/lib/cc65-src/soft80_cputc.s +521 -0
  343. package/src/platforms/c64/lib/cc65-src/soft80_kclrscr.s +76 -0
  344. package/src/platforms/c64/lib/cc65-src/soft80_kplot.s +63 -0
  345. package/src/platforms/c64/lib/cc65-src/soft80_scrsize.s +14 -0
  346. package/src/platforms/c64/lib/cc65-src/soft80mono_cgetc.s +67 -0
  347. package/src/platforms/c64/lib/cc65-src/soft80mono_color.s +65 -0
  348. package/src/platforms/c64/lib/cc65-src/soft80mono_conio.s +168 -0
  349. package/src/platforms/c64/lib/cc65-src/soft80mono_cpeekcolor.s +17 -0
  350. package/src/platforms/c64/lib/cc65-src/soft80mono_cputc.s +204 -0
  351. package/src/platforms/c64/lib/cc65-src/soft80mono_kclrscr.s +63 -0
  352. package/src/platforms/c64/lib/cc65-src/soft80mono_kplot.s +52 -0
  353. package/src/platforms/c64/lib/cc65-src/status.s +15 -0
  354. package/src/platforms/c64/lib/cc65-src/sysuname.s +37 -0
  355. package/src/platforms/c64/lib/cc65-src/tgi/c64-hi.s +881 -0
  356. package/src/platforms/c64/lib/cc65-src/tgi_stat_stddrv.s +14 -0
  357. package/src/platforms/c64/lib/cc65-src/tgi_stddrv.s +13 -0
  358. package/src/platforms/c64/lib/cc65-src/tmcommon.s +67 -0
  359. package/src/platforms/c64/lib/cc65-src/waitvsync.s +18 -0
  360. package/src/platforms/c64/lib/read_joystick.s +28 -0
  361. package/src/platforms/c64/lib/sid_play.s +48 -0
  362. package/src/platforms/c64/lib/sprite_table.s +73 -0
  363. package/src/platforms/c64/lib/vic_init.s +47 -0
  364. package/src/platforms/c64/sid.js +128 -0
  365. package/src/platforms/c64/vic.js +273 -0
  366. package/src/platforms/common/default-palette.js +139 -0
  367. package/src/platforms/common/image-to-tiles.js +407 -0
  368. package/src/platforms/common/intent.js +111 -0
  369. package/src/platforms/common/metasprite-adapters.js +279 -0
  370. package/src/platforms/common/metasprite-codegen.js +192 -0
  371. package/src/platforms/common/metasprite-core.js +201 -0
  372. package/src/platforms/common/metasprite.js +89 -0
  373. package/src/platforms/common/platform-palette.js +137 -0
  374. package/src/platforms/common/registers.js +329 -0
  375. package/src/platforms/common/render-tiles.js +86 -0
  376. package/src/platforms/common/screenshot-sprite.js +153 -0
  377. package/src/platforms/common/tile-decode.js +149 -0
  378. package/src/platforms/gb/MENTAL_MODEL.md +252 -0
  379. package/src/platforms/gb/TROUBLESHOOTING.md +221 -0
  380. package/src/platforms/gb/UPSTREAM_SOURCES.md +43 -0
  381. package/src/platforms/gb/image-to-tilemap.js +173 -0
  382. package/src/platforms/gb/lib/README.md +115 -0
  383. package/src/platforms/gb/lib/c/LICENSE-HUGEDRIVER +25 -0
  384. package/src/platforms/gb/lib/c/README.md +120 -0
  385. package/src/platforms/gb/lib/c/SDCC_GOTCHAS.md +189 -0
  386. package/src/platforms/gb/lib/c/gb_crt0.s +163 -0
  387. package/src/platforms/gb/lib/c/gb_hardware.h +113 -0
  388. package/src/platforms/gb/lib/c/gb_runtime.c +284 -0
  389. package/src/platforms/gb/lib/c/gb_runtime.h +145 -0
  390. package/src/platforms/gb/lib/c/hUGEDriver.c +191 -0
  391. package/src/platforms/gb/lib/c/hUGEDriver.h +95 -0
  392. package/src/platforms/gb/lib/c/hUGEDriver.upstream.asm +1908 -0
  393. package/src/platforms/gb/lib/c/lcd_init.c +19 -0
  394. package/src/platforms/gb/lib/c/patch-header.js +154 -0
  395. package/src/platforms/gb/lib/c/song_data.c +88 -0
  396. package/src/platforms/gb/lib/c/unroll.h +52 -0
  397. package/src/platforms/gb/lib/c/wait_vblank.c +14 -0
  398. package/src/platforms/gb/lib/dma_oam.asm +51 -0
  399. package/src/platforms/gb/lib/header.asm +56 -0
  400. package/src/platforms/gb/lib/joypad_read.asm +47 -0
  401. package/src/platforms/gb/lib/lcd_init.asm +44 -0
  402. package/src/platforms/gb/lib/load_palette.asm +25 -0
  403. package/src/platforms/gb/lib/load_tiles.asm +29 -0
  404. package/src/platforms/gb/lib/vblank_wait.asm +31 -0
  405. package/src/platforms/gb/ppu.js +574 -0
  406. package/src/platforms/gba/MENTAL_MODEL.md +203 -0
  407. package/src/platforms/gba/TROUBLESHOOTING.md +250 -0
  408. package/src/platforms/gba/UPSTREAM_SOURCES.md +41 -0
  409. package/src/platforms/gba/lib/arm-archives/libc.a +0 -0
  410. package/src/platforms/gba/lib/arm-archives/libgcc.a +0 -0
  411. package/src/platforms/gba/lib/arm-archives/libnosys.a +0 -0
  412. package/src/platforms/gba/lib/c/gba_sfx.c +81 -0
  413. package/src/platforms/gba/lib/c/gba_sfx.h +48 -0
  414. package/src/platforms/gba/lib/libgba/crtbegin.o +0 -0
  415. package/src/platforms/gba/lib/libgba/crtend.o +0 -0
  416. package/src/platforms/gba/lib/libgba/crti.o +0 -0
  417. package/src/platforms/gba/lib/libgba/crtn.o +0 -0
  418. package/src/platforms/gba/lib/libgba/gba_cart.ld +319 -0
  419. package/src/platforms/gba/lib/libgba/gba_crt0.s +258 -0
  420. package/src/platforms/gba/lib/libgba/include/BoyScout.h +128 -0
  421. package/src/platforms/gba/lib/libgba/include/disc.h +36 -0
  422. package/src/platforms/gba/lib/libgba/include/disc_io.h +64 -0
  423. package/src/platforms/gba/lib/libgba/include/dldi.h +112 -0
  424. package/src/platforms/gba/lib/libgba/include/erapi.h +195 -0
  425. package/src/platforms/gba/lib/libgba/include/fade.h +76 -0
  426. package/src/platforms/gba/lib/libgba/include/gba.h +47 -0
  427. package/src/platforms/gba/lib/libgba/include/gba_affine.h +83 -0
  428. package/src/platforms/gba/lib/libgba/include/gba_base.h +122 -0
  429. package/src/platforms/gba/lib/libgba/include/gba_compression.h +66 -0
  430. package/src/platforms/gba/lib/libgba/include/gba_console.h +55 -0
  431. package/src/platforms/gba/lib/libgba/include/gba_dma.h +100 -0
  432. package/src/platforms/gba/lib/libgba/include/gba_input.h +127 -0
  433. package/src/platforms/gba/lib/libgba/include/gba_interrupt.h +146 -0
  434. package/src/platforms/gba/lib/libgba/include/gba_multiboot.h +72 -0
  435. package/src/platforms/gba/lib/libgba/include/gba_sio.h +124 -0
  436. package/src/platforms/gba/lib/libgba/include/gba_sound.h +356 -0
  437. package/src/platforms/gba/lib/libgba/include/gba_sprites.h +195 -0
  438. package/src/platforms/gba/lib/libgba/include/gba_systemcalls.h +194 -0
  439. package/src/platforms/gba/lib/libgba/include/gba_timers.h +63 -0
  440. package/src/platforms/gba/lib/libgba/include/gba_types.h +60 -0
  441. package/src/platforms/gba/lib/libgba/include/gba_video.h +307 -0
  442. package/src/platforms/gba/lib/libgba/include/mappy.h +72 -0
  443. package/src/platforms/gba/lib/libgba/include/mbv2.h +90 -0
  444. package/src/platforms/gba/lib/libgba/include/xcomms.h +93 -0
  445. package/src/platforms/gba/lib/libgba/include/xcomms_cmd.h +53 -0
  446. package/src/platforms/gba/lib/libgba/libgba.seed.a +0 -0
  447. package/src/platforms/gba/lib/libgba/libgba.seed.hash +1 -0
  448. package/src/platforms/gba/lib/libgba/src/AffineSet.c +42 -0
  449. package/src/platforms/gba/lib/libgba/src/ArcTan.s +41 -0
  450. package/src/platforms/gba/lib/libgba/src/BoyScout/BoyScout.c +1242 -0
  451. package/src/platforms/gba/lib/libgba/src/BoyScout/GBASoundRegs.h +200 -0
  452. package/src/platforms/gba/lib/libgba/src/Compression.c +84 -0
  453. package/src/platforms/gba/lib/libgba/src/CpuSet.c +41 -0
  454. package/src/platforms/gba/lib/libgba/src/Div.s +58 -0
  455. package/src/platforms/gba/lib/libgba/src/DivArm.s +50 -0
  456. package/src/platforms/gba/lib/libgba/src/InterruptDispatcher.s +113 -0
  457. package/src/platforms/gba/lib/libgba/src/IntrWait.c +35 -0
  458. package/src/platforms/gba/lib/libgba/src/MultiBoot.s +33 -0
  459. package/src/platforms/gba/lib/libgba/src/Reset.s +49 -0
  460. package/src/platforms/gba/lib/libgba/src/Sound.s +48 -0
  461. package/src/platforms/gba/lib/libgba/src/Sqrt.s +34 -0
  462. package/src/platforms/gba/lib/libgba/src/disc_io/disc.c +58 -0
  463. package/src/platforms/gba/lib/libgba/src/disc_io/dldi.c +189 -0
  464. package/src/platforms/gba/lib/libgba/src/disc_io/dldi_stub.s +78 -0
  465. package/src/platforms/gba/lib/libgba/src/disc_io/io_cf_common.c +260 -0
  466. package/src/platforms/gba/lib/libgba/src/disc_io/io_cf_common.h +72 -0
  467. package/src/platforms/gba/lib/libgba/src/disc_io/io_m3_common.c +60 -0
  468. package/src/platforms/gba/lib/libgba/src/disc_io/io_m3_common.h +48 -0
  469. package/src/platforms/gba/lib/libgba/src/disc_io/io_m3cf.c +83 -0
  470. package/src/platforms/gba/lib/libgba/src/disc_io/io_m3cf.h +45 -0
  471. package/src/platforms/gba/lib/libgba/src/disc_io/io_m3sd.c +508 -0
  472. package/src/platforms/gba/lib/libgba/src/disc_io/io_m3sd.h +45 -0
  473. package/src/platforms/gba/lib/libgba/src/disc_io/io_mpcf.c +87 -0
  474. package/src/platforms/gba/lib/libgba/src/disc_io/io_mpcf.h +42 -0
  475. package/src/platforms/gba/lib/libgba/src/disc_io/io_sc_common.c +47 -0
  476. package/src/platforms/gba/lib/libgba/src/disc_io/io_sc_common.h +43 -0
  477. package/src/platforms/gba/lib/libgba/src/disc_io/io_sccf.c +83 -0
  478. package/src/platforms/gba/lib/libgba/src/disc_io/io_sccf.h +45 -0
  479. package/src/platforms/gba/lib/libgba/src/disc_io/io_scsd.c +385 -0
  480. package/src/platforms/gba/lib/libgba/src/disc_io/io_scsd.h +48 -0
  481. package/src/platforms/gba/lib/libgba/src/disc_io/io_scsd_s.s +139 -0
  482. package/src/platforms/gba/lib/libgba/src/disc_io/io_sd_common.c +203 -0
  483. package/src/platforms/gba/lib/libgba/src/disc_io/io_sd_common.h +108 -0
  484. package/src/platforms/gba/lib/libgba/src/fade.c +185 -0
  485. package/src/platforms/gba/lib/libgba/src/input.c +127 -0
  486. package/src/platforms/gba/lib/libgba/src/interrupt.c +116 -0
  487. package/src/platforms/gba/lib/libgba/src/mappy_print.c +74 -0
  488. package/src/platforms/gba/lib/libgba/src/mb2print.c +69 -0
  489. package/src/platforms/gba/lib/libgba/src/mbv2.c +230 -0
  490. package/src/platforms/gba/lib/libgba/src/mbv2.txt +119 -0
  491. package/src/platforms/gba/lib/libgba/src/xcomms.c +203 -0
  492. package/src/platforms/gba/lib/libgba/src/xcomms_print.c +56 -0
  493. package/src/platforms/gba/lib/libgba/sysinclude/_ansi.h +82 -0
  494. package/src/platforms/gba/lib/libgba/sysinclude/_newlib_version.h +11 -0
  495. package/src/platforms/gba/lib/libgba/sysinclude/_syslist.h +41 -0
  496. package/src/platforms/gba/lib/libgba/sysinclude/alloca.h +21 -0
  497. package/src/platforms/gba/lib/libgba/sysinclude/ar.h +65 -0
  498. package/src/platforms/gba/lib/libgba/sysinclude/argz.h +33 -0
  499. package/src/platforms/gba/lib/libgba/sysinclude/assert.h +50 -0
  500. package/src/platforms/gba/lib/libgba/sysinclude/complex.h +150 -0
  501. package/src/platforms/gba/lib/libgba/sysinclude/cpio.h +30 -0
  502. package/src/platforms/gba/lib/libgba/sysinclude/ctype.h +183 -0
  503. package/src/platforms/gba/lib/libgba/sysinclude/devctl.h +78 -0
  504. package/src/platforms/gba/lib/libgba/sysinclude/dirent.h +85 -0
  505. package/src/platforms/gba/lib/libgba/sysinclude/elf.h +3147 -0
  506. package/src/platforms/gba/lib/libgba/sysinclude/envlock.h +15 -0
  507. package/src/platforms/gba/lib/libgba/sysinclude/envz.h +16 -0
  508. package/src/platforms/gba/lib/libgba/sysinclude/errno.h +11 -0
  509. package/src/platforms/gba/lib/libgba/sysinclude/fastmath.h +13 -0
  510. package/src/platforms/gba/lib/libgba/sysinclude/fcntl.h +1 -0
  511. package/src/platforms/gba/lib/libgba/sysinclude/fenv.h +42 -0
  512. package/src/platforms/gba/lib/libgba/sysinclude/float.h +631 -0
  513. package/src/platforms/gba/lib/libgba/sysinclude/fnmatch.h +55 -0
  514. package/src/platforms/gba/lib/libgba/sysinclude/ftw.h +66 -0
  515. package/src/platforms/gba/lib/libgba/sysinclude/getopt.h +185 -0
  516. package/src/platforms/gba/lib/libgba/sysinclude/glob.h +90 -0
  517. package/src/platforms/gba/lib/libgba/sysinclude/grp.h +86 -0
  518. package/src/platforms/gba/lib/libgba/sysinclude/iconv.h +63 -0
  519. package/src/platforms/gba/lib/libgba/sysinclude/ieeefp.h +295 -0
  520. package/src/platforms/gba/lib/libgba/sysinclude/inttypes.h +345 -0
  521. package/src/platforms/gba/lib/libgba/sysinclude/iso646.h +45 -0
  522. package/src/platforms/gba/lib/libgba/sysinclude/langinfo.h +332 -0
  523. package/src/platforms/gba/lib/libgba/sysinclude/libgen.h +37 -0
  524. package/src/platforms/gba/lib/libgba/sysinclude/limits.h +168 -0
  525. package/src/platforms/gba/lib/libgba/sysinclude/locale.h +96 -0
  526. package/src/platforms/gba/lib/libgba/sysinclude/machine/_arc4random.h +1 -0
  527. package/src/platforms/gba/lib/libgba/sysinclude/machine/_default_types.h +250 -0
  528. package/src/platforms/gba/lib/libgba/sysinclude/machine/_endian.h +39 -0
  529. package/src/platforms/gba/lib/libgba/sysinclude/machine/_time.h +3 -0
  530. package/src/platforms/gba/lib/libgba/sysinclude/machine/_types.h +8 -0
  531. package/src/platforms/gba/lib/libgba/sysinclude/machine/ansi.h +1 -0
  532. package/src/platforms/gba/lib/libgba/sysinclude/machine/endian.h +69 -0
  533. package/src/platforms/gba/lib/libgba/sysinclude/machine/fastmath.h +98 -0
  534. package/src/platforms/gba/lib/libgba/sysinclude/machine/ieee.h +127 -0
  535. package/src/platforms/gba/lib/libgba/sysinclude/machine/ieeefp.h +533 -0
  536. package/src/platforms/gba/lib/libgba/sysinclude/machine/malloc.h +8 -0
  537. package/src/platforms/gba/lib/libgba/sysinclude/machine/param.h +8 -0
  538. package/src/platforms/gba/lib/libgba/sysinclude/machine/setjmp-dj.h +43 -0
  539. package/src/platforms/gba/lib/libgba/sysinclude/machine/setjmp.h +524 -0
  540. package/src/platforms/gba/lib/libgba/sysinclude/machine/stdlib.h +8 -0
  541. package/src/platforms/gba/lib/libgba/sysinclude/machine/termios.h +1 -0
  542. package/src/platforms/gba/lib/libgba/sysinclude/machine/time.h +15 -0
  543. package/src/platforms/gba/lib/libgba/sysinclude/machine/types.h +13 -0
  544. package/src/platforms/gba/lib/libgba/sysinclude/malloc.h +173 -0
  545. package/src/platforms/gba/lib/libgba/sysinclude/math.h +645 -0
  546. package/src/platforms/gba/lib/libgba/sysinclude/memory.h +4 -0
  547. package/src/platforms/gba/lib/libgba/sysinclude/ndbm.h +91 -0
  548. package/src/platforms/gba/lib/libgba/sysinclude/newlib.h +427 -0
  549. package/src/platforms/gba/lib/libgba/sysinclude/paths.h +9 -0
  550. package/src/platforms/gba/lib/libgba/sysinclude/pthread.h +456 -0
  551. package/src/platforms/gba/lib/libgba/sysinclude/pwd.h +83 -0
  552. package/src/platforms/gba/lib/libgba/sysinclude/reent.h +190 -0
  553. package/src/platforms/gba/lib/libgba/sysinclude/regdef.h +7 -0
  554. package/src/platforms/gba/lib/libgba/sysinclude/regex.h +103 -0
  555. package/src/platforms/gba/lib/libgba/sysinclude/sched.h +112 -0
  556. package/src/platforms/gba/lib/libgba/sysinclude/search.h +64 -0
  557. package/src/platforms/gba/lib/libgba/sysinclude/setjmp.h +25 -0
  558. package/src/platforms/gba/lib/libgba/sysinclude/signal.h +35 -0
  559. package/src/platforms/gba/lib/libgba/sysinclude/spawn.h +111 -0
  560. package/src/platforms/gba/lib/libgba/sysinclude/ssp/ssp.h +76 -0
  561. package/src/platforms/gba/lib/libgba/sysinclude/ssp/stdio.h +101 -0
  562. package/src/platforms/gba/lib/libgba/sysinclude/ssp/stdlib.h +30 -0
  563. package/src/platforms/gba/lib/libgba/sysinclude/ssp/string.h +115 -0
  564. package/src/platforms/gba/lib/libgba/sysinclude/ssp/strings.h +55 -0
  565. package/src/platforms/gba/lib/libgba/sysinclude/ssp/unistd.h +93 -0
  566. package/src/platforms/gba/lib/libgba/sysinclude/ssp/wchar.h +97 -0
  567. package/src/platforms/gba/lib/libgba/sysinclude/stdarg.h +135 -0
  568. package/src/platforms/gba/lib/libgba/sysinclude/stdatomic.h +409 -0
  569. package/src/platforms/gba/lib/libgba/sysinclude/stdbool.h +51 -0
  570. package/src/platforms/gba/lib/libgba/sysinclude/stddef.h +463 -0
  571. package/src/platforms/gba/lib/libgba/sysinclude/stdint.h +466 -0
  572. package/src/platforms/gba/lib/libgba/sysinclude/stdio.h +807 -0
  573. package/src/platforms/gba/lib/libgba/sysinclude/stdio_ext.h +79 -0
  574. package/src/platforms/gba/lib/libgba/sysinclude/stdlib.h +345 -0
  575. package/src/platforms/gba/lib/libgba/sysinclude/string.h +183 -0
  576. package/src/platforms/gba/lib/libgba/sysinclude/strings.h +80 -0
  577. package/src/platforms/gba/lib/libgba/sysinclude/sys/_default_fcntl.h +241 -0
  578. package/src/platforms/gba/lib/libgba/sysinclude/sys/_intsup.h +199 -0
  579. package/src/platforms/gba/lib/libgba/sysinclude/sys/_locale.h +12 -0
  580. package/src/platforms/gba/lib/libgba/sysinclude/sys/_pthreadtypes.h +233 -0
  581. package/src/platforms/gba/lib/libgba/sysinclude/sys/_sigset.h +43 -0
  582. package/src/platforms/gba/lib/libgba/sysinclude/sys/_stdint.h +90 -0
  583. package/src/platforms/gba/lib/libgba/sysinclude/sys/_timespec.h +52 -0
  584. package/src/platforms/gba/lib/libgba/sysinclude/sys/_timeval.h +60 -0
  585. package/src/platforms/gba/lib/libgba/sysinclude/sys/_types.h +228 -0
  586. package/src/platforms/gba/lib/libgba/sysinclude/sys/_tz_structs.h +24 -0
  587. package/src/platforms/gba/lib/libgba/sysinclude/sys/cdefs.h +754 -0
  588. package/src/platforms/gba/lib/libgba/sysinclude/sys/config.h +314 -0
  589. package/src/platforms/gba/lib/libgba/sysinclude/sys/custom_file.h +2 -0
  590. package/src/platforms/gba/lib/libgba/sysinclude/sys/dir.h +10 -0
  591. package/src/platforms/gba/lib/libgba/sysinclude/sys/dirent.h +13 -0
  592. package/src/platforms/gba/lib/libgba/sysinclude/sys/endian.h +207 -0
  593. package/src/platforms/gba/lib/libgba/sysinclude/sys/errno.h +198 -0
  594. package/src/platforms/gba/lib/libgba/sysinclude/sys/fcntl.h +12 -0
  595. package/src/platforms/gba/lib/libgba/sysinclude/sys/features.h +551 -0
  596. package/src/platforms/gba/lib/libgba/sysinclude/sys/fenv.h +90 -0
  597. package/src/platforms/gba/lib/libgba/sysinclude/sys/file.h +2 -0
  598. package/src/platforms/gba/lib/libgba/sysinclude/sys/iconvnls.h +77 -0
  599. package/src/platforms/gba/lib/libgba/sysinclude/sys/iosupport.h +143 -0
  600. package/src/platforms/gba/lib/libgba/sysinclude/sys/lock.h +75 -0
  601. package/src/platforms/gba/lib/libgba/sysinclude/sys/param.h +35 -0
  602. package/src/platforms/gba/lib/libgba/sysinclude/sys/queue.h +919 -0
  603. package/src/platforms/gba/lib/libgba/sysinclude/sys/reent.h +913 -0
  604. package/src/platforms/gba/lib/libgba/sysinclude/sys/resource.h +24 -0
  605. package/src/platforms/gba/lib/libgba/sysinclude/sys/sched.h +69 -0
  606. package/src/platforms/gba/lib/libgba/sysinclude/sys/select.h +94 -0
  607. package/src/platforms/gba/lib/libgba/sysinclude/sys/signal.h +388 -0
  608. package/src/platforms/gba/lib/libgba/sysinclude/sys/stat.h +179 -0
  609. package/src/platforms/gba/lib/libgba/sysinclude/sys/statvfs.h +41 -0
  610. package/src/platforms/gba/lib/libgba/sysinclude/sys/stdio.h +27 -0
  611. package/src/platforms/gba/lib/libgba/sysinclude/sys/string.h +2 -0
  612. package/src/platforms/gba/lib/libgba/sysinclude/sys/syslimits.h +61 -0
  613. package/src/platforms/gba/lib/libgba/sysinclude/sys/time.h +448 -0
  614. package/src/platforms/gba/lib/libgba/sysinclude/sys/timeb.h +40 -0
  615. package/src/platforms/gba/lib/libgba/sysinclude/sys/times.h +32 -0
  616. package/src/platforms/gba/lib/libgba/sysinclude/sys/timespec.h +63 -0
  617. package/src/platforms/gba/lib/libgba/sysinclude/sys/tree.h +864 -0
  618. package/src/platforms/gba/lib/libgba/sysinclude/sys/types.h +228 -0
  619. package/src/platforms/gba/lib/libgba/sysinclude/sys/unistd.h +591 -0
  620. package/src/platforms/gba/lib/libgba/sysinclude/sys/utime.h +22 -0
  621. package/src/platforms/gba/lib/libgba/sysinclude/sys/wait.h +44 -0
  622. package/src/platforms/gba/lib/libgba/sysinclude/tar.h +43 -0
  623. package/src/platforms/gba/lib/libgba/sysinclude/termios.h +7 -0
  624. package/src/platforms/gba/lib/libgba/sysinclude/tgmath.h +127 -0
  625. package/src/platforms/gba/lib/libgba/sysinclude/threads.h +93 -0
  626. package/src/platforms/gba/lib/libgba/sysinclude/time.h +313 -0
  627. package/src/platforms/gba/lib/libgba/sysinclude/unctrl.h +42 -0
  628. package/src/platforms/gba/lib/libgba/sysinclude/unistd.h +6 -0
  629. package/src/platforms/gba/lib/libgba/sysinclude/utime.h +12 -0
  630. package/src/platforms/gba/lib/libgba/sysinclude/utmp.h +8 -0
  631. package/src/platforms/gba/lib/libgba/sysinclude/varargs.h +7 -0
  632. package/src/platforms/gba/lib/libgba/sysinclude/wchar.h +339 -0
  633. package/src/platforms/gba/lib/libgba/sysinclude/wctype.h +74 -0
  634. package/src/platforms/gba/lib/libgba/sysinclude/wordexp.h +53 -0
  635. package/src/platforms/gba/lib/libtonc/crtbegin.o +0 -0
  636. package/src/platforms/gba/lib/libtonc/crtend.o +0 -0
  637. package/src/platforms/gba/lib/libtonc/crti.o +0 -0
  638. package/src/platforms/gba/lib/libtonc/crtn.o +0 -0
  639. package/src/platforms/gba/lib/libtonc/gba_cart.ld +319 -0
  640. package/src/platforms/gba/lib/libtonc/gba_crt0.s +258 -0
  641. package/src/platforms/gba/lib/libtonc/include/tonc.h +72 -0
  642. package/src/platforms/gba/lib/libtonc/include/tonc_asminc.h +132 -0
  643. package/src/platforms/gba/lib/libtonc/include/tonc_bios.h +555 -0
  644. package/src/platforms/gba/lib/libtonc/include/tonc_core.h +573 -0
  645. package/src/platforms/gba/lib/libtonc/include/tonc_input.h +184 -0
  646. package/src/platforms/gba/lib/libtonc/include/tonc_irq.h +121 -0
  647. package/src/platforms/gba/lib/libtonc/include/tonc_legacy.h +481 -0
  648. package/src/platforms/gba/lib/libtonc/include/tonc_libgba.h +537 -0
  649. package/src/platforms/gba/lib/libtonc/include/tonc_math.h +692 -0
  650. package/src/platforms/gba/lib/libtonc/include/tonc_memdef.h +962 -0
  651. package/src/platforms/gba/lib/libtonc/include/tonc_memmap.h +583 -0
  652. package/src/platforms/gba/lib/libtonc/include/tonc_nocash.h +51 -0
  653. package/src/platforms/gba/lib/libtonc/include/tonc_oam.h +186 -0
  654. package/src/platforms/gba/lib/libtonc/include/tonc_surface.h +461 -0
  655. package/src/platforms/gba/lib/libtonc/include/tonc_text.h +270 -0
  656. package/src/platforms/gba/lib/libtonc/include/tonc_tte.h +748 -0
  657. package/src/platforms/gba/lib/libtonc/include/tonc_types.h +376 -0
  658. package/src/platforms/gba/lib/libtonc/include/tonc_video.h +615 -0
  659. package/src/platforms/gba/lib/libtonc/libtonc.seed.a +0 -0
  660. package/src/platforms/gba/lib/libtonc/libtonc.seed.hash +1 -0
  661. package/src/platforms/gba/lib/libtonc/src/asm/clr_blend_fast.s +72 -0
  662. package/src/platforms/gba/lib/libtonc/src/asm/clr_fade_fast.s +74 -0
  663. package/src/platforms/gba/lib/libtonc/src/asm/div_lut.s +54 -0
  664. package/src/platforms/gba/lib/libtonc/src/asm/sin_lut.s +90 -0
  665. package/src/platforms/gba/lib/libtonc/src/asm/tonc_bios.s +289 -0
  666. package/src/platforms/gba/lib/libtonc/src/asm/tonc_bios_ex.s +97 -0
  667. package/src/platforms/gba/lib/libtonc/src/asm/tonc_isr_master.s +92 -0
  668. package/src/platforms/gba/lib/libtonc/src/asm/tonc_isr_nest.s +98 -0
  669. package/src/platforms/gba/lib/libtonc/src/asm/tonc_memcpy.s +126 -0
  670. package/src/platforms/gba/lib/libtonc/src/asm/tonc_memset.s +123 -0
  671. package/src/platforms/gba/lib/libtonc/src/asm/tonc_nocash.s +73 -0
  672. package/src/platforms/gba/lib/libtonc/src/font/sys8.png +0 -0
  673. package/src/platforms/gba/lib/libtonc/src/font/sys8.s +46 -0
  674. package/src/platforms/gba/lib/libtonc/src/font/verdana10.png +0 -0
  675. package/src/platforms/gba/lib/libtonc/src/font/verdana10.s +293 -0
  676. package/src/platforms/gba/lib/libtonc/src/font/verdana9.png +0 -0
  677. package/src/platforms/gba/lib/libtonc/src/font/verdana9.s +167 -0
  678. package/src/platforms/gba/lib/libtonc/src/font/verdana9_b4.png +0 -0
  679. package/src/platforms/gba/lib/libtonc/src/font/verdana9_b4.s +545 -0
  680. package/src/platforms/gba/lib/libtonc/src/font/verdana9b.png +0 -0
  681. package/src/platforms/gba/lib/libtonc/src/font/verdana9b.s +167 -0
  682. package/src/platforms/gba/lib/libtonc/src/font/verdana9i.png +0 -0
  683. package/src/platforms/gba/lib/libtonc/src/font/verdana9i.s +167 -0
  684. package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_bitmap.c +289 -0
  685. package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text.c +81 -0
  686. package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text_bm.c +244 -0
  687. package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text_map.c +122 -0
  688. package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text_oam.c +113 -0
  689. package/src/platforms/gba/lib/libtonc/src/pre1.3/toncfont.s +43 -0
  690. package/src/platforms/gba/lib/libtonc/src/tonc_bg.c +61 -0
  691. package/src/platforms/gba/lib/libtonc/src/tonc_bg_affine.c +112 -0
  692. package/src/platforms/gba/lib/libtonc/src/tonc_bmp16.c +240 -0
  693. package/src/platforms/gba/lib/libtonc/src/tonc_bmp8.c +314 -0
  694. package/src/platforms/gba/lib/libtonc/src/tonc_color.c +368 -0
  695. package/src/platforms/gba/lib/libtonc/src/tonc_core.c +237 -0
  696. package/src/platforms/gba/lib/libtonc/src/tonc_input.c +118 -0
  697. package/src/platforms/gba/lib/libtonc/src/tonc_irq.c +271 -0
  698. package/src/platforms/gba/lib/libtonc/src/tonc_math.c +54 -0
  699. package/src/platforms/gba/lib/libtonc/src/tonc_oam.c +76 -0
  700. package/src/platforms/gba/lib/libtonc/src/tonc_obj_affine.c +146 -0
  701. package/src/platforms/gba/lib/libtonc/src/tonc_sbmp16.c +369 -0
  702. package/src/platforms/gba/lib/libtonc/src/tonc_sbmp8.c +405 -0
  703. package/src/platforms/gba/lib/libtonc/src/tonc_schr4c.c +588 -0
  704. package/src/platforms/gba/lib/libtonc/src/tonc_schr4r.c +462 -0
  705. package/src/platforms/gba/lib/libtonc/src/tonc_surface.c +105 -0
  706. package/src/platforms/gba/lib/libtonc/src/tonc_video.c +33 -0
  707. package/src/platforms/gba/lib/libtonc/src/tte/ase_drawg.c +83 -0
  708. package/src/platforms/gba/lib/libtonc/src/tte/bmp16_drawg.c +72 -0
  709. package/src/platforms/gba/lib/libtonc/src/tte/bmp16_drawg_b1cs.c +92 -0
  710. package/src/platforms/gba/lib/libtonc/src/tte/bmp8_drawg.c +71 -0
  711. package/src/platforms/gba/lib/libtonc/src/tte/bmp8_drawg_b1cs.c +104 -0
  712. package/src/platforms/gba/lib/libtonc/src/tte/bmp8_drawg_b1cts_fast.s +115 -0
  713. package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b1cts.c +76 -0
  714. package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b1cts_fast.s +128 -0
  715. package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b4cts.c +67 -0
  716. package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b4cts_fast.s +127 -0
  717. package/src/platforms/gba/lib/libtonc/src/tte/chr4r_drawg_b1cts.c +80 -0
  718. package/src/platforms/gba/lib/libtonc/src/tte/chr4r_drawg_b1cts_fast.s +145 -0
  719. package/src/platforms/gba/lib/libtonc/src/tte/obj_drawg.c +61 -0
  720. package/src/platforms/gba/lib/libtonc/src/tte/se_drawg.c +110 -0
  721. package/src/platforms/gba/lib/libtonc/src/tte/tte_init_ase.c +87 -0
  722. package/src/platforms/gba/lib/libtonc/src/tte/tte_init_bmp.c +118 -0
  723. package/src/platforms/gba/lib/libtonc/src/tte/tte_init_chr4c.c +86 -0
  724. package/src/platforms/gba/lib/libtonc/src/tte/tte_init_chr4r.c +87 -0
  725. package/src/platforms/gba/lib/libtonc/src/tte/tte_init_obj.c +84 -0
  726. package/src/platforms/gba/lib/libtonc/src/tte/tte_init_se.c +96 -0
  727. package/src/platforms/gba/lib/libtonc/src/tte/tte_iohook.c +264 -0
  728. package/src/platforms/gba/lib/libtonc/src/tte/tte_main.c +756 -0
  729. package/src/platforms/gba/lib/libtonc/src/tte/tte_types.s +119 -0
  730. package/src/platforms/gba/lib/maxmod/LICENSE-MAXMOD +23 -0
  731. package/src/platforms/gba/lib/maxmod/asm_include/mp_defs.inc +117 -0
  732. package/src/platforms/gba/lib/maxmod/asm_include/mp_format_mas.inc +108 -0
  733. package/src/platforms/gba/lib/maxmod/asm_include/mp_macros.inc +195 -0
  734. package/src/platforms/gba/lib/maxmod/asm_include/mp_mas.inc +40 -0
  735. package/src/platforms/gba/lib/maxmod/asm_include/mp_mas_structs.inc +189 -0
  736. package/src/platforms/gba/lib/maxmod/asm_include/mp_mixer_ds.inc +46 -0
  737. package/src/platforms/gba/lib/maxmod/asm_include/mp_mixer_gba.inc +42 -0
  738. package/src/platforms/gba/lib/maxmod/asm_include/swi_gba.inc +23 -0
  739. package/src/platforms/gba/lib/maxmod/include/maxmod.h +412 -0
  740. package/src/platforms/gba/lib/maxmod/include/mm_types.h +333 -0
  741. package/src/platforms/gba/lib/maxmod/maxmod.seed.a +0 -0
  742. package/src/platforms/gba/lib/maxmod/maxmod.seed.hash +1 -0
  743. package/src/platforms/gba/lib/maxmod/music/chiptune.xm +0 -0
  744. package/src/platforms/gba/lib/maxmod/music/chiptune_soundbank.bin +0 -0
  745. package/src/platforms/gba/lib/maxmod/music/chiptune_soundbank.h +4 -0
  746. package/src/platforms/gba/lib/maxmod/music/make_chiptune_xm.js +203 -0
  747. package/src/platforms/gba/lib/maxmod/source/mm_effect.s +767 -0
  748. package/src/platforms/gba/lib/maxmod/source/mm_main.s +115 -0
  749. package/src/platforms/gba/lib/maxmod/source/mm_mas.s +4990 -0
  750. package/src/platforms/gba/lib/maxmod/source/mm_mas_arm.s +612 -0
  751. package/src/platforms/gba/lib/maxmod/source_gba/mm_init_default.s +98 -0
  752. package/src/platforms/gba/lib/maxmod/source_gba/mm_main_gba.s +292 -0
  753. package/src/platforms/gba/lib/maxmod/source_gba/mm_mixer_gba.s +1367 -0
  754. package/src/platforms/gba/lib/sysbase/gba_iosupport.c +138 -0
  755. package/src/platforms/gbc/MENTAL_MODEL.md +165 -0
  756. package/src/platforms/gbc/TROUBLESHOOTING.md +142 -0
  757. package/src/platforms/gbc/UPSTREAM_SOURCES.md +60 -0
  758. package/src/platforms/gbc/lib/c/LICENSE-HUGEDRIVER +25 -0
  759. package/src/platforms/gbc/lib/c/README.md +120 -0
  760. package/src/platforms/gbc/lib/c/SDCC_GOTCHAS.md +189 -0
  761. package/src/platforms/gbc/lib/c/gb_crt0.s +163 -0
  762. package/src/platforms/gbc/lib/c/gb_hardware.h +113 -0
  763. package/src/platforms/gbc/lib/c/gb_runtime.c +284 -0
  764. package/src/platforms/gbc/lib/c/gb_runtime.h +145 -0
  765. package/src/platforms/gbc/lib/c/hUGEDriver.c +191 -0
  766. package/src/platforms/gbc/lib/c/hUGEDriver.h +95 -0
  767. package/src/platforms/gbc/lib/c/hUGEDriver.upstream.asm +1908 -0
  768. package/src/platforms/gbc/lib/c/lcd_init.c +19 -0
  769. package/src/platforms/gbc/lib/c/patch-header.js +154 -0
  770. package/src/platforms/gbc/lib/c/song_data.c +88 -0
  771. package/src/platforms/gbc/lib/c/unroll.h +52 -0
  772. package/src/platforms/gbc/lib/c/wait_vblank.c +14 -0
  773. package/src/platforms/genesis/MENTAL_MODEL.md +223 -0
  774. package/src/platforms/genesis/TROUBLESHOOTING.md +193 -0
  775. package/src/platforms/genesis/UPSTREAM_SOURCES.md +52 -0
  776. package/src/platforms/genesis/image-to-tilemap.js +333 -0
  777. package/src/platforms/genesis/lib/README.md +157 -0
  778. package/src/platforms/genesis/lib/c/crtbegin.o +0 -0
  779. package/src/platforms/genesis/lib/c/crtend.o +0 -0
  780. package/src/platforms/genesis/lib/c/genesis.ld +44 -0
  781. package/src/platforms/genesis/lib/c/genesis_sfx.c +51 -0
  782. package/src/platforms/genesis/lib/c/genesis_sfx.h +49 -0
  783. package/src/platforms/genesis/lib/c/libc.a +0 -0
  784. package/src/platforms/genesis/lib/c/libgcc.a +0 -0
  785. package/src/platforms/genesis/lib/c/libm.a +0 -0
  786. package/src/platforms/genesis/lib/c/sega.s +71 -0
  787. package/src/platforms/genesis/lib/header.s +96 -0
  788. package/src/platforms/genesis/lib/nmi_safe.s +79 -0
  789. package/src/platforms/genesis/lib/pad_read.s +104 -0
  790. package/src/platforms/genesis/lib/sgdk/COPYING.RUNTIME +73 -0
  791. package/src/platforms/genesis/lib/sgdk/LICENSE +12 -0
  792. package/src/platforms/genesis/lib/sgdk/include/asm.h +52 -0
  793. package/src/platforms/genesis/lib/sgdk/include/asm_mac.i +9 -0
  794. package/src/platforms/genesis/lib/sgdk/include/bmp.h +690 -0
  795. package/src/platforms/genesis/lib/sgdk/include/config.h +208 -0
  796. package/src/platforms/genesis/lib/sgdk/include/dma.h +542 -0
  797. package/src/platforms/genesis/lib/sgdk/include/ext/console.h +387 -0
  798. package/src/platforms/genesis/lib/sgdk/include/ext/everdrive.h +116 -0
  799. package/src/platforms/genesis/lib/sgdk/include/ext/fat16.h +84 -0
  800. package/src/platforms/genesis/lib/sgdk/include/ext/flash-save/flash.h +164 -0
  801. package/src/platforms/genesis/lib/sgdk/include/ext/flash-save/saveman.h +177 -0
  802. package/src/platforms/genesis/lib/sgdk/include/ext/link_cable.h +316 -0
  803. package/src/platforms/genesis/lib/sgdk/include/ext/minimusic/minimus.h +29 -0
  804. package/src/platforms/genesis/lib/sgdk/include/ext/mw/16c550.h +221 -0
  805. package/src/platforms/genesis/lib/sgdk/include/ext/mw/comm.h +93 -0
  806. package/src/platforms/genesis/lib/sgdk/include/ext/mw/gamejolt.h +541 -0
  807. package/src/platforms/genesis/lib/sgdk/include/ext/mw/jsmn.h +471 -0
  808. package/src/platforms/genesis/lib/sgdk/include/ext/mw/json.h +122 -0
  809. package/src/platforms/genesis/lib/sgdk/include/ext/mw/lsd.h +172 -0
  810. package/src/platforms/genesis/lib/sgdk/include/ext/mw/megawifi.h +984 -0
  811. package/src/platforms/genesis/lib/sgdk/include/ext/mw/mw-msg.h +392 -0
  812. package/src/platforms/genesis/lib/sgdk/include/ext/mw/ssf_ed_pro.h +38 -0
  813. package/src/platforms/genesis/lib/sgdk/include/ext/mw/ssf_ed_x7.h +73 -0
  814. package/src/platforms/genesis/lib/sgdk/include/ext/serial/buffer.h +8 -0
  815. package/src/platforms/genesis/lib/sgdk/include/ext/serial/serial.h +133 -0
  816. package/src/platforms/genesis/lib/sgdk/include/ext/stb/stb_sprintf.h +1864 -0
  817. package/src/platforms/genesis/lib/sgdk/include/genesis.h +92 -0
  818. package/src/platforms/genesis/lib/sgdk/include/joy.h +482 -0
  819. package/src/platforms/genesis/lib/sgdk/include/kdebug.h +21 -0
  820. package/src/platforms/genesis/lib/sgdk/include/map.h +409 -0
  821. package/src/platforms/genesis/lib/sgdk/include/mapper.h +186 -0
  822. package/src/platforms/genesis/lib/sgdk/include/maths.h +1071 -0
  823. package/src/platforms/genesis/lib/sgdk/include/maths3D.h +480 -0
  824. package/src/platforms/genesis/lib/sgdk/include/memory.h +346 -0
  825. package/src/platforms/genesis/lib/sgdk/include/memory_base.h +37 -0
  826. package/src/platforms/genesis/lib/sgdk/include/object.h +171 -0
  827. package/src/platforms/genesis/lib/sgdk/include/pal.h +500 -0
  828. package/src/platforms/genesis/lib/sgdk/include/pool.h +171 -0
  829. package/src/platforms/genesis/lib/sgdk/include/psg.h +153 -0
  830. package/src/platforms/genesis/lib/sgdk/include/snd/pcm/snd_dpcm2.h +79 -0
  831. package/src/platforms/genesis/lib/sgdk/include/snd/pcm/snd_pcm.h +98 -0
  832. package/src/platforms/genesis/lib/sgdk/include/snd/pcm/snd_pcm4.h +125 -0
  833. package/src/platforms/genesis/lib/sgdk/include/snd/pcm/tab_vol.h +6 -0
  834. package/src/platforms/genesis/lib/sgdk/include/snd/smp_null.h +6 -0
  835. package/src/platforms/genesis/lib/sgdk/include/snd/smp_null_dpcm.h +6 -0
  836. package/src/platforms/genesis/lib/sgdk/include/snd/sound.h +70 -0
  837. package/src/platforms/genesis/lib/sgdk/include/snd/xgm.h +399 -0
  838. package/src/platforms/genesis/lib/sgdk/include/snd/xgm2.h +389 -0
  839. package/src/platforms/genesis/lib/sgdk/include/snd/z80_def.i80 +41 -0
  840. package/src/platforms/genesis/lib/sgdk/include/snd/z80_fct.i80 +83 -0
  841. package/src/platforms/genesis/lib/sgdk/include/snd/z80_mac.i80 +1476 -0
  842. package/src/platforms/genesis/lib/sgdk/include/sprite_eng.h +1095 -0
  843. package/src/platforms/genesis/lib/sgdk/include/sprite_eng_legacy.h +1030 -0
  844. package/src/platforms/genesis/lib/sgdk/include/sram.h +110 -0
  845. package/src/platforms/genesis/lib/sgdk/include/string.h +349 -0
  846. package/src/platforms/genesis/lib/sgdk/include/sys.h +511 -0
  847. package/src/platforms/genesis/lib/sgdk/include/tab_cnv.h +19 -0
  848. package/src/platforms/genesis/lib/sgdk/include/task.h +77 -0
  849. package/src/platforms/genesis/lib/sgdk/include/task_cst.h +33 -0
  850. package/src/platforms/genesis/lib/sgdk/include/timer.h +132 -0
  851. package/src/platforms/genesis/lib/sgdk/include/tools.h +450 -0
  852. package/src/platforms/genesis/lib/sgdk/include/types.h +320 -0
  853. package/src/platforms/genesis/lib/sgdk/include/vdp.h +1150 -0
  854. package/src/platforms/genesis/lib/sgdk/include/vdp_bg.h +723 -0
  855. package/src/platforms/genesis/lib/sgdk/include/vdp_pal.h +101 -0
  856. package/src/platforms/genesis/lib/sgdk/include/vdp_spr.h +448 -0
  857. package/src/platforms/genesis/lib/sgdk/include/vdp_tile.h +1136 -0
  858. package/src/platforms/genesis/lib/sgdk/include/vram.h +270 -0
  859. package/src/platforms/genesis/lib/sgdk/include/ym2612.h +87 -0
  860. package/src/platforms/genesis/lib/sgdk/include/z80_ctrl.h +420 -0
  861. package/src/platforms/genesis/lib/sgdk/libmd.seed.a +0 -0
  862. package/src/platforms/genesis/lib/sgdk/libmd.seed.hash +1 -0
  863. package/src/platforms/genesis/lib/sgdk/md.ld +120 -0
  864. package/src/platforms/genesis/lib/sgdk/music/demo.vgm +0 -0
  865. package/src/platforms/genesis/lib/sgdk/music/demo.xgc +0 -0
  866. package/src/platforms/genesis/lib/sgdk/music/demo.xgm +0 -0
  867. package/src/platforms/genesis/lib/sgdk/res/image/font_default.png +0 -0
  868. package/src/platforms/genesis/lib/sgdk/res/image/sgdk_logo.png +0 -0
  869. package/src/platforms/genesis/lib/sgdk/res/libres.h +10 -0
  870. package/src/platforms/genesis/lib/sgdk/res/libres.res +5 -0
  871. package/src/platforms/genesis/lib/sgdk/res/libres.s +166 -0
  872. package/src/platforms/genesis/lib/sgdk/res/sound/stop_xgm.bin +0 -0
  873. package/src/platforms/genesis/lib/sgdk/rom_header.c +33 -0
  874. package/src/platforms/genesis/lib/sgdk/sega.preprocessed.s +364 -0
  875. package/src/platforms/genesis/lib/sgdk/sega.s +365 -0
  876. package/src/platforms/genesis/lib/sgdk/src/bmp.c +1539 -0
  877. package/src/platforms/genesis/lib/sgdk/src/bmp_a.s +3477 -0
  878. package/src/platforms/genesis/lib/sgdk/src/boot/rom_header.c +33 -0
  879. package/src/platforms/genesis/lib/sgdk/src/boot/sega.s +365 -0
  880. package/src/platforms/genesis/lib/sgdk/src/dma.c +782 -0
  881. package/src/platforms/genesis/lib/sgdk/src/dma_a.s +23 -0
  882. package/src/platforms/genesis/lib/sgdk/src/error_a.s +376 -0
  883. package/src/platforms/genesis/lib/sgdk/src/ext/console.c +490 -0
  884. package/src/platforms/genesis/lib/sgdk/src/ext/everdrive.c +285 -0
  885. package/src/platforms/genesis/lib/sgdk/src/ext/fat16.c +610 -0
  886. package/src/platforms/genesis/lib/sgdk/src/ext/flash-save/README.md +112 -0
  887. package/src/platforms/genesis/lib/sgdk/src/ext/flash-save/flash.c +300 -0
  888. package/src/platforms/genesis/lib/sgdk/src/ext/flash-save/saveman.c +641 -0
  889. package/src/platforms/genesis/lib/sgdk/src/ext/link_cable.c +1758 -0
  890. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/CHANGELOG.md +31 -0
  891. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/LICENSE.txt +17 -0
  892. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/README.md +18 -0
  893. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/data.z80 +148 -0
  894. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/define.z80 +173 -0
  895. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/doc/api-c.md +80 -0
  896. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/doc/format.md +132 -0
  897. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/doc/teradrive.md +33 -0
  898. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/fm.z80 +363 -0
  899. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/main.z80 +433 -0
  900. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/minimus.c +129 -0
  901. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/minimus_drv.s80 +17 -0
  902. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/psg.z80 +231 -0
  903. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/track.z80 +398 -0
  904. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/util.z80 +98 -0
  905. package/src/platforms/genesis/lib/sgdk/src/ext/mw/16c550.c +84 -0
  906. package/src/platforms/genesis/lib/sgdk/src/ext/mw/README.md +849 -0
  907. package/src/platforms/genesis/lib/sgdk/src/ext/mw/comm.c +141 -0
  908. package/src/platforms/genesis/lib/sgdk/src/ext/mw/gamejolt.c +758 -0
  909. package/src/platforms/genesis/lib/sgdk/src/ext/mw/json.c +153 -0
  910. package/src/platforms/genesis/lib/sgdk/src/ext/mw/lsd.c +364 -0
  911. package/src/platforms/genesis/lib/sgdk/src/ext/mw/megawifi.c +1501 -0
  912. package/src/platforms/genesis/lib/sgdk/src/ext/mw/ssf_ed_pro.c +98 -0
  913. package/src/platforms/genesis/lib/sgdk/src/ext/mw/ssf_ed_x7.c +67 -0
  914. package/src/platforms/genesis/lib/sgdk/src/ext/serial/buffer.c +69 -0
  915. package/src/platforms/genesis/lib/sgdk/src/ext/serial/serial.c +158 -0
  916. package/src/platforms/genesis/lib/sgdk/src/joy.c +1361 -0
  917. package/src/platforms/genesis/lib/sgdk/src/kdebug.s +109 -0
  918. package/src/platforms/genesis/lib/sgdk/src/map.c +1915 -0
  919. package/src/platforms/genesis/lib/sgdk/src/mapper.c +280 -0
  920. package/src/platforms/genesis/lib/sgdk/src/maths.c +878 -0
  921. package/src/platforms/genesis/lib/sgdk/src/maths3D.c +480 -0
  922. package/src/platforms/genesis/lib/sgdk/src/maths3D_a.s +205 -0
  923. package/src/platforms/genesis/lib/sgdk/src/memory.c +760 -0
  924. package/src/platforms/genesis/lib/sgdk/src/memory_a.s +306 -0
  925. package/src/platforms/genesis/lib/sgdk/src/object.c +111 -0
  926. package/src/platforms/genesis/lib/sgdk/src/pal.c +484 -0
  927. package/src/platforms/genesis/lib/sgdk/src/pool.c +234 -0
  928. package/src/platforms/genesis/lib/sgdk/src/psg.c +82 -0
  929. package/src/platforms/genesis/lib/sgdk/src/snd/drv_null.s80 +27 -0
  930. package/src/platforms/genesis/lib/sgdk/src/snd/drv_xgm.s80 +3037 -0
  931. package/src/platforms/genesis/lib/sgdk/src/snd/pcm/drv_dpcm2.s80 +984 -0
  932. package/src/platforms/genesis/lib/sgdk/src/snd/pcm/drv_pcm.s80 +592 -0
  933. package/src/platforms/genesis/lib/sgdk/src/snd/pcm/drv_pcm4.s80 +699 -0
  934. package/src/platforms/genesis/lib/sgdk/src/snd/pcm/snd_dpcm2.c +172 -0
  935. package/src/platforms/genesis/lib/sgdk/src/snd/pcm/snd_pcm.c +152 -0
  936. package/src/platforms/genesis/lib/sgdk/src/snd/pcm/snd_pcm4.c +213 -0
  937. package/src/platforms/genesis/lib/sgdk/src/snd/pcm/tab_vol.c +277 -0
  938. package/src/platforms/genesis/lib/sgdk/src/snd/smp_null.s +22 -0
  939. package/src/platforms/genesis/lib/sgdk/src/snd/smp_null_dpcm.s +15 -0
  940. package/src/platforms/genesis/lib/sgdk/src/snd/sound.c +33 -0
  941. package/src/platforms/genesis/lib/sgdk/src/snd/xgm.c +683 -0
  942. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2.s80 +993 -0
  943. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_fct.i80 +611 -0
  944. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_mac.i80 +133 -0
  945. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_pcm_fct.i80 +114 -0
  946. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_pcm_mac.i80 +1444 -0
  947. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_psg_fct.i80 +491 -0
  948. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_psg_mac.i80 +43 -0
  949. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_ym_fct.i80 +1664 -0
  950. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_ym_mac.i80 +295 -0
  951. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2.c +1083 -0
  952. package/src/platforms/genesis/lib/sgdk/src/sprite_eng.c +2256 -0
  953. package/src/platforms/genesis/lib/sgdk/src/sprite_eng_legacy.c +2309 -0
  954. package/src/platforms/genesis/lib/sgdk/src/sram.c +30 -0
  955. package/src/platforms/genesis/lib/sgdk/src/sram_a.s +41 -0
  956. package/src/platforms/genesis/lib/sgdk/src/string.c +720 -0
  957. package/src/platforms/genesis/lib/sgdk/src/sys.c +1053 -0
  958. package/src/platforms/genesis/lib/sgdk/src/sys_a.s +74 -0
  959. package/src/platforms/genesis/lib/sgdk/src/tab_cnv.c +129 -0
  960. package/src/platforms/genesis/lib/sgdk/src/tab_log10.c +8201 -0
  961. package/src/platforms/genesis/lib/sgdk/src/tab_log2.c +8201 -0
  962. package/src/platforms/genesis/lib/sgdk/src/tab_sin.c +2058 -0
  963. package/src/platforms/genesis/lib/sgdk/src/tab_sqrt.c +8201 -0
  964. package/src/platforms/genesis/lib/sgdk/src/task.s +148 -0
  965. package/src/platforms/genesis/lib/sgdk/src/timer.c +201 -0
  966. package/src/platforms/genesis/lib/sgdk/src/tools.c +1299 -0
  967. package/src/platforms/genesis/lib/sgdk/src/tools_a.s +979 -0
  968. package/src/platforms/genesis/lib/sgdk/src/types.c +18 -0
  969. package/src/platforms/genesis/lib/sgdk/src/vdp.c +1060 -0
  970. package/src/platforms/genesis/lib/sgdk/src/vdp_bg.c +511 -0
  971. package/src/platforms/genesis/lib/sgdk/src/vdp_spr.c +322 -0
  972. package/src/platforms/genesis/lib/sgdk/src/vdp_tile.c +1011 -0
  973. package/src/platforms/genesis/lib/sgdk/src/vdp_tile_a.s +68 -0
  974. package/src/platforms/genesis/lib/sgdk/src/vram.c +273 -0
  975. package/src/platforms/genesis/lib/sgdk/src/ym2612.c +175 -0
  976. package/src/platforms/genesis/lib/sgdk/src/z80_ctrl.c +334 -0
  977. package/src/platforms/genesis/lib/sprite_table.s +129 -0
  978. package/src/platforms/genesis/lib/vblank_wait.s +73 -0
  979. package/src/platforms/genesis/lib/vdp_init.s +85 -0
  980. package/src/platforms/genesis/lib/wram.s +88 -0
  981. package/src/platforms/genesis/lib/z80_bootstrap.s +102 -0
  982. package/src/platforms/genesis/vdp.js +495 -0
  983. package/src/platforms/gg/MENTAL_MODEL.md +155 -0
  984. package/src/platforms/gg/TROUBLESHOOTING.md +91 -0
  985. package/src/platforms/gg/UPSTREAM_SOURCES.md +36 -0
  986. package/src/platforms/gg/lib/c/gg_crt0.s +112 -0
  987. package/src/platforms/gg/lib/c/gg_hw.h +62 -0
  988. package/src/platforms/gg/lib/c/gg_music.c +155 -0
  989. package/src/platforms/gg/lib/c/gg_music.h +89 -0
  990. package/src/platforms/gg/lib/c/gg_sfx.c +82 -0
  991. package/src/platforms/gg/lib/c/gg_sfx.h +40 -0
  992. package/src/platforms/gg/lib/c/joypad_read.c +22 -0
  993. package/src/platforms/gg/lib/c/load_palette.c +20 -0
  994. package/src/platforms/gg/lib/c/load_tiles.c +32 -0
  995. package/src/platforms/gg/lib/c/sprite_table.c +60 -0
  996. package/src/platforms/gg/lib/c/vblank_wait.c +10 -0
  997. package/src/platforms/gg/lib/c/vdp_init.c +58 -0
  998. package/src/platforms/index.js +7 -0
  999. package/src/platforms/lynx/MENTAL_MODEL.md +231 -0
  1000. package/src/platforms/lynx/TROUBLESHOOTING.md +105 -0
  1001. package/src/platforms/lynx/UPSTREAM_SOURCES.md +66 -0
  1002. package/src/platforms/lynx/lib/c/lynx_music.c +63 -0
  1003. package/src/platforms/lynx/lib/c/lynx_music.h +16 -0
  1004. package/src/platforms/lynx/lib/c/lynx_sfx.c +147 -0
  1005. package/src/platforms/lynx/lib/c/lynx_sfx.h +59 -0
  1006. package/src/platforms/lynx/lib/cc65-src/bllhdr.s +18 -0
  1007. package/src/platforms/lynx/lib/cc65-src/bootldr.s +195 -0
  1008. package/src/platforms/lynx/lib/cc65-src/cgetc.s +69 -0
  1009. package/src/platforms/lynx/lib/cc65-src/clock.s +87 -0
  1010. package/src/platforms/lynx/lib/cc65-src/crt0.s +135 -0
  1011. package/src/platforms/lynx/lib/cc65-src/defdir.s +29 -0
  1012. package/src/platforms/lynx/lib/cc65-src/eeprom.s +255 -0
  1013. package/src/platforms/lynx/lib/cc65-src/eeprom46.s +204 -0
  1014. package/src/platforms/lynx/lib/cc65-src/eeprom66.s +227 -0
  1015. package/src/platforms/lynx/lib/cc65-src/eeprom86.s +236 -0
  1016. package/src/platforms/lynx/lib/cc65-src/exec.s +34 -0
  1017. package/src/platforms/lynx/lib/cc65-src/exehdr.s +27 -0
  1018. package/src/platforms/lynx/lib/cc65-src/extzp.inc +23 -0
  1019. package/src/platforms/lynx/lib/cc65-src/extzp.s +30 -0
  1020. package/src/platforms/lynx/lib/cc65-src/irq.s +45 -0
  1021. package/src/platforms/lynx/lib/cc65-src/joy/lynx-stdjoy.s +93 -0
  1022. package/src/platforms/lynx/lib/cc65-src/joy_stat_stddrv.s +14 -0
  1023. package/src/platforms/lynx/lib/cc65-src/kbhit.s +56 -0
  1024. package/src/platforms/lynx/lib/cc65-src/libref.s +9 -0
  1025. package/src/platforms/lynx/lib/cc65-src/load.s +41 -0
  1026. package/src/platforms/lynx/lib/cc65-src/lseek.s +58 -0
  1027. package/src/platforms/lynx/lib/cc65-src/lynx-cart.s +98 -0
  1028. package/src/platforms/lynx/lib/cc65-src/lynx-snd.s +1270 -0
  1029. package/src/platforms/lynx/lib/cc65-src/mainargs.s +24 -0
  1030. package/src/platforms/lynx/lib/cc65-src/open.s +136 -0
  1031. package/src/platforms/lynx/lib/cc65-src/oserror.s +14 -0
  1032. package/src/platforms/lynx/lib/cc65-src/read.s +44 -0
  1033. package/src/platforms/lynx/lib/cc65-src/ser/lynx-comlynx.s +404 -0
  1034. package/src/platforms/lynx/lib/cc65-src/ser_stat_stddrv.s +14 -0
  1035. package/src/platforms/lynx/lib/cc65-src/sysuname.s +39 -0
  1036. package/src/platforms/lynx/lib/cc65-src/tgi/lynx-160-102-16.s +1075 -0
  1037. package/src/platforms/lynx/lib/cc65-src/tgi_colors.s +9 -0
  1038. package/src/platforms/lynx/lib/cc65-src/tgi_irq.s +11 -0
  1039. package/src/platforms/lynx/lib/cc65-src/tgi_stat_stddrv.s +14 -0
  1040. package/src/platforms/lynx/lib/cc65-src/tgi_stddrv.s +13 -0
  1041. package/src/platforms/lynx/lib/cc65-src/uploader.s +81 -0
  1042. package/src/platforms/nes/MENTAL_MODEL.md +301 -0
  1043. package/src/platforms/nes/TROUBLESHOOTING.md +321 -0
  1044. package/src/platforms/nes/UPSTREAM_SOURCES.md +31 -0
  1045. package/src/platforms/nes/image-to-chr.js +195 -0
  1046. package/src/platforms/nes/image-to-tilemap.js +415 -0
  1047. package/src/platforms/nes/lib/README.md +40 -0
  1048. package/src/platforms/nes/lib/asm/LICENSE-FAMITONE +40 -0
  1049. package/src/platforms/nes/lib/asm/chr_ram_header.s +32 -0
  1050. package/src/platforms/nes/lib/asm/famitone2.s +1258 -0
  1051. package/src/platforms/nes/lib/asm/famitone_bridge.s +50 -0
  1052. package/src/platforms/nes/lib/asm/music_data.s +238 -0
  1053. package/src/platforms/nes/lib/c/chr_ram_runtime_hello_sprite.c +81 -0
  1054. package/src/platforms/nes/lib/c/chr_ram_runtime_hud_row.c +101 -0
  1055. package/src/platforms/nes/lib/c/nes_runtime.c +347 -0
  1056. package/src/platforms/nes/lib/c/nes_runtime.h +153 -0
  1057. package/src/platforms/nes/lib/c/nmi_handler.c +51 -0
  1058. package/src/platforms/nes/lib/c/nmi_trampoline.s +25 -0
  1059. package/src/platforms/nes/lib/cc65-src/Makefile.inc +9 -0
  1060. package/src/platforms/nes/lib/cc65-src/_scrsize.s +24 -0
  1061. package/src/platforms/nes/lib/cc65-src/cclear.s +29 -0
  1062. package/src/platforms/nes/lib/cc65-src/chline.s +31 -0
  1063. package/src/platforms/nes/lib/cc65-src/clock.s +31 -0
  1064. package/src/platforms/nes/lib/cc65-src/clrscr.s +72 -0
  1065. package/src/platforms/nes/lib/cc65-src/color.s +68 -0
  1066. package/src/platforms/nes/lib/cc65-src/cpeekc.s +37 -0
  1067. package/src/platforms/nes/lib/cc65-src/cpeekcolor.s +8 -0
  1068. package/src/platforms/nes/lib/cc65-src/cpeekrevers.s +37 -0
  1069. package/src/platforms/nes/lib/cc65-src/cputc.s +95 -0
  1070. package/src/platforms/nes/lib/cc65-src/crt0.s +180 -0
  1071. package/src/platforms/nes/lib/cc65-src/cvline.s +31 -0
  1072. package/src/platforms/nes/lib/cc65-src/get_tv.s +37 -0
  1073. package/src/platforms/nes/lib/cc65-src/gotox.s +21 -0
  1074. package/src/platforms/nes/lib/cc65-src/gotoxy.s +22 -0
  1075. package/src/platforms/nes/lib/cc65-src/gotoy.s +22 -0
  1076. package/src/platforms/nes/lib/cc65-src/irq.s +19 -0
  1077. package/src/platforms/nes/lib/cc65-src/joy/nes-stdjoy.s +102 -0
  1078. package/src/platforms/nes/lib/cc65-src/joy_stat_stddrv.s +14 -0
  1079. package/src/platforms/nes/lib/cc65-src/libref.s +9 -0
  1080. package/src/platforms/nes/lib/cc65-src/mainargs.s +24 -0
  1081. package/src/platforms/nes/lib/cc65-src/neschar.s +4616 -0
  1082. package/src/platforms/nes/lib/cc65-src/ppu.s +158 -0
  1083. package/src/platforms/nes/lib/cc65-src/ppubuf.s +117 -0
  1084. package/src/platforms/nes/lib/cc65-src/randomize.s +18 -0
  1085. package/src/platforms/nes/lib/cc65-src/revers.s +27 -0
  1086. package/src/platforms/nes/lib/cc65-src/setcursor.s +37 -0
  1087. package/src/platforms/nes/lib/cc65-src/sysuname.s +39 -0
  1088. package/src/platforms/nes/lib/cc65-src/tgi/nes-64-56-2.s +480 -0
  1089. package/src/platforms/nes/lib/cc65-src/tgi_stat_stddrv.s +14 -0
  1090. package/src/platforms/nes/lib/cc65-src/tgi_stddrv.s +13 -0
  1091. package/src/platforms/nes/lib/cc65-src/waitvsync.s +18 -0
  1092. package/src/platforms/nes/lib/cc65-src/wherex.s +19 -0
  1093. package/src/platforms/nes/lib/cc65-src/wherey.s +19 -0
  1094. package/src/platforms/nes/lib/clear_nametable.s +38 -0
  1095. package/src/platforms/nes/lib/clear_oam.s +18 -0
  1096. package/src/platforms/nes/lib/load_palette.s +31 -0
  1097. package/src/platforms/nes/lib/nmi_safe.s +65 -0
  1098. package/src/platforms/nes/lib/oam_dma.s +16 -0
  1099. package/src/platforms/nes/lib/read_pad.s +46 -0
  1100. package/src/platforms/nes/lib/reset.s +46 -0
  1101. package/src/platforms/nes/lib/sprite_table_populate.s +75 -0
  1102. package/src/platforms/nes/lib/wait_vblank.s +12 -0
  1103. package/src/platforms/nes/palette.js +39 -0
  1104. package/src/platforms/nes/ppu.js +372 -0
  1105. package/src/platforms/sms/MENTAL_MODEL.md +267 -0
  1106. package/src/platforms/sms/TROUBLESHOOTING.md +124 -0
  1107. package/src/platforms/sms/UPSTREAM_SOURCES.md +29 -0
  1108. package/src/platforms/sms/image-to-tilemap.js +260 -0
  1109. package/src/platforms/sms/lib/README.md +117 -0
  1110. package/src/platforms/sms/lib/c/joypad_read.c +33 -0
  1111. package/src/platforms/sms/lib/c/load_palette.c +24 -0
  1112. package/src/platforms/sms/lib/c/load_tiles.c +32 -0
  1113. package/src/platforms/sms/lib/c/sms_crt0.s +101 -0
  1114. package/src/platforms/sms/lib/c/sms_hw.h +53 -0
  1115. package/src/platforms/sms/lib/c/sms_music.c +178 -0
  1116. package/src/platforms/sms/lib/c/sms_music.h +50 -0
  1117. package/src/platforms/sms/lib/c/sms_sfx.c +82 -0
  1118. package/src/platforms/sms/lib/c/sms_sfx.h +40 -0
  1119. package/src/platforms/sms/lib/c/sprite_table.c +60 -0
  1120. package/src/platforms/sms/lib/c/vblank_wait.c +10 -0
  1121. package/src/platforms/sms/lib/c/vdp_init.c +58 -0
  1122. package/src/platforms/sms/lib/header.s +33 -0
  1123. package/src/platforms/sms/lib/joypad_read.s +40 -0
  1124. package/src/platforms/sms/lib/load_palette.s +30 -0
  1125. package/src/platforms/sms/lib/load_tiles.s +50 -0
  1126. package/src/platforms/sms/lib/sprite_table.s +44 -0
  1127. package/src/platforms/sms/lib/vblank_wait.s +36 -0
  1128. package/src/platforms/sms/lib/vdp_init.s +47 -0
  1129. package/src/platforms/sms/vdp.js +530 -0
  1130. package/src/platforms/snes/MENTAL_MODEL.md +275 -0
  1131. package/src/platforms/snes/TROUBLESHOOTING.md +208 -0
  1132. package/src/platforms/snes/UPSTREAM_SOURCES.md +50 -0
  1133. package/src/platforms/snes/brr.js +208 -0
  1134. package/src/platforms/snes/image-to-tilemap.js +227 -0
  1135. package/src/platforms/snes/lib/audio/apu_blob.asm +228 -0
  1136. package/src/platforms/snes/lib/audio/apu_blob.bin +0 -0
  1137. package/src/platforms/snes/lib/audio/explosion.brr +0 -0
  1138. package/src/platforms/snes/lib/audio/sample_bank.bin +0 -0
  1139. package/src/platforms/snes/lib/audio/shoot.brr +0 -0
  1140. package/src/platforms/snes/lib/audio/spc_driver.asm +241 -0
  1141. package/src/platforms/snes/lib/audio_pipeline.asm +62 -0
  1142. package/src/platforms/snes/lib/c/crt0.asm +125 -0
  1143. package/src/platforms/snes/lib/c/hdr.asm +50 -0
  1144. package/src/platforms/snes/lib/c/snes_sfx.c +116 -0
  1145. package/src/platforms/snes/lib/c/snes_sfx.h +96 -0
  1146. package/src/platforms/snes/lib/c/snes_sfx_data.asm +25 -0
  1147. package/src/platforms/snes/lib/cgram_upload.asm +43 -0
  1148. package/src/platforms/snes/lib/lorom_header.asm +47 -0
  1149. package/src/platforms/snes/lib/lorom_multibank.asm +66 -0
  1150. package/src/platforms/snes/lib/nmi_safe.asm +77 -0
  1151. package/src/platforms/snes/lib/oam_upload.asm +45 -0
  1152. package/src/platforms/snes/lib/pad_read.asm +64 -0
  1153. package/src/platforms/snes/lib/pvsneslib/LICENSE +21 -0
  1154. package/src/platforms/snes/lib/pvsneslib/include/ctype.h +6 -0
  1155. package/src/platforms/snes/lib/pvsneslib/include/float.h +4 -0
  1156. package/src/platforms/snes/lib/pvsneslib/include/hdr.asm +47 -0
  1157. package/src/platforms/snes/lib/pvsneslib/include/limits.h +13 -0
  1158. package/src/platforms/snes/lib/pvsneslib/include/math.h +10 -0
  1159. package/src/platforms/snes/lib/pvsneslib/include/setjmp.h +4 -0
  1160. package/src/platforms/snes/lib/pvsneslib/include/snes/background.h +396 -0
  1161. package/src/platforms/snes/lib/pvsneslib/include/snes/console.h +188 -0
  1162. package/src/platforms/snes/lib/pvsneslib/include/snes/dma.h +381 -0
  1163. package/src/platforms/snes/lib/pvsneslib/include/snes/input.h +289 -0
  1164. package/src/platforms/snes/lib/pvsneslib/include/snes/interrupt.h +264 -0
  1165. package/src/platforms/snes/lib/pvsneslib/include/snes/libversion.h +10 -0
  1166. package/src/platforms/snes/lib/pvsneslib/include/snes/lzss.h +43 -0
  1167. package/src/platforms/snes/lib/pvsneslib/include/snes/map.h +113 -0
  1168. package/src/platforms/snes/lib/pvsneslib/include/snes/object.h +234 -0
  1169. package/src/platforms/snes/lib/pvsneslib/include/snes/pixel.h +53 -0
  1170. package/src/platforms/snes/lib/pvsneslib/include/snes/scores.h +66 -0
  1171. package/src/platforms/snes/lib/pvsneslib/include/snes/snestypes.h +65 -0
  1172. package/src/platforms/snes/lib/pvsneslib/include/snes/sound.h +245 -0
  1173. package/src/platforms/snes/lib/pvsneslib/include/snes/sprite.h +456 -0
  1174. package/src/platforms/snes/lib/pvsneslib/include/snes/video.h +465 -0
  1175. package/src/platforms/snes/lib/pvsneslib/include/snes.h +190 -0
  1176. package/src/platforms/snes/lib/pvsneslib/include/stdarg.h +28 -0
  1177. package/src/platforms/snes/lib/pvsneslib/include/stdbool.h +53 -0
  1178. package/src/platforms/snes/lib/pvsneslib/include/stddef.h +27 -0
  1179. package/src/platforms/snes/lib/pvsneslib/include/stdint.h +7 -0
  1180. package/src/platforms/snes/lib/pvsneslib/include/stdio.h +9 -0
  1181. package/src/platforms/snes/lib/pvsneslib/include/stdlib.h +13 -0
  1182. package/src/platforms/snes/lib/pvsneslib/include/string.h +19 -0
  1183. package/src/platforms/snes/lib/pvsneslib/include/strings.h +5 -0
  1184. package/src/platforms/snes/lib/pvsneslib/source/Makefile +87 -0
  1185. package/src/platforms/snes/lib/pvsneslib/source/backgrounds.asm +834 -0
  1186. package/src/platforms/snes/lib/pvsneslib/source/consoles.asm +1028 -0
  1187. package/src/platforms/snes/lib/pvsneslib/source/crt0_snes.asm +329 -0
  1188. package/src/platforms/snes/lib/pvsneslib/source/dmas.asm +1275 -0
  1189. package/src/platforms/snes/lib/pvsneslib/source/hdr.asm +56 -0
  1190. package/src/platforms/snes/lib/pvsneslib/source/input.asm +445 -0
  1191. package/src/platforms/snes/lib/pvsneslib/source/libc.asm +485 -0
  1192. package/src/platforms/snes/lib/pvsneslib/source/libc_c.c +1214 -0
  1193. package/src/platforms/snes/lib/pvsneslib/source/libm.asm +510 -0
  1194. package/src/platforms/snes/lib/pvsneslib/source/libtcc.asm +374 -0
  1195. package/src/platforms/snes/lib/pvsneslib/source/lzsss.asm +256 -0
  1196. package/src/platforms/snes/lib/pvsneslib/source/maps.asm +1078 -0
  1197. package/src/platforms/snes/lib/pvsneslib/source/objects.asm +2881 -0
  1198. package/src/platforms/snes/lib/pvsneslib/source/scores.asm +226 -0
  1199. package/src/platforms/snes/lib/pvsneslib/source/sm_spc.asm +187 -0
  1200. package/src/platforms/snes/lib/pvsneslib/source/snesmodwla.asm +1186 -0
  1201. package/src/platforms/snes/lib/pvsneslib/source/sounds.asm +273 -0
  1202. package/src/platforms/snes/lib/pvsneslib/source/sprites.asm +3946 -0
  1203. package/src/platforms/snes/lib/pvsneslib/source/vblank.asm +917 -0
  1204. package/src/platforms/snes/lib/pvsneslib/source/videos.asm +1137 -0
  1205. package/src/platforms/snes/lib/reset_init.asm +31 -0
  1206. package/src/platforms/snes/lib/sprite_table_populate.asm +122 -0
  1207. package/src/platforms/snes/lib/vram_dma_upload.asm +42 -0
  1208. package/src/platforms/snes/ppu.js +606 -0
  1209. package/src/playtest/playtest.js +612 -0
  1210. package/src/rom-id/identifier.js +421 -0
  1211. package/src/rom-id/patch.js +217 -0
  1212. package/src/toolchains/_worker/pool.js +253 -0
  1213. package/src/toolchains/_worker/run.js +78 -0
  1214. package/src/toolchains/_worker/wasm-worker.js +233 -0
  1215. package/src/toolchains/arm-none-eabi-gcc/gcc.js +208 -0
  1216. package/src/toolchains/asar/asar.js +542 -0
  1217. package/src/toolchains/assemble-snippet.js +256 -0
  1218. package/src/toolchains/cc65/cc65.js +395 -0
  1219. package/src/toolchains/cc65/da65.js +119 -0
  1220. package/src/toolchains/cc65/dbgparse.js +274 -0
  1221. package/src/toolchains/cc65/preset-resolver.js +59 -0
  1222. package/src/toolchains/cc65/presets/nes/chr-ram-runtime.cfg +79 -0
  1223. package/src/toolchains/cc65/presets/nes/chr-ram-runtime.crt0.s +178 -0
  1224. package/src/toolchains/cc65/presets/nes/chr-ram.cfg +76 -0
  1225. package/src/toolchains/cc65/presets/nes/chr-ram.crt0.s +106 -0
  1226. package/src/toolchains/common/ar.js +121 -0
  1227. package/src/toolchains/common/sdk-cache.js +116 -0
  1228. package/src/toolchains/common/symbols.js +139 -0
  1229. package/src/toolchains/dasm/dasm.js +96 -0
  1230. package/src/toolchains/gba-c/gba-c.js +832 -0
  1231. package/src/toolchains/genesis-c/README.md +61 -0
  1232. package/src/toolchains/genesis-c/genesis-c.js +598 -0
  1233. package/src/toolchains/index.js +727 -0
  1234. package/src/toolchains/m68k-elf-gcc/gcc.js +220 -0
  1235. package/src/toolchains/m68kdasm.js +438 -0
  1236. package/src/toolchains/parse-errors.js +258 -0
  1237. package/src/toolchains/registry.js +67 -0
  1238. package/src/toolchains/rgbds/rgbds.js +144 -0
  1239. package/src/toolchains/sdcc/preflight-lint.js +295 -0
  1240. package/src/toolchains/sdcc/sdcc.js +519 -0
  1241. package/src/toolchains/sjasm/sjasm.js +85 -0
  1242. package/src/toolchains/sm83dasm.js +194 -0
  1243. package/src/toolchains/snes-c/snes-c.js +409 -0
  1244. package/src/toolchains/tcc816/tcc816.js +79 -0
  1245. package/src/toolchains/vasm68k/vasm68k.js +138 -0
  1246. package/src/toolchains/wladx/wladx.js +120 -0
  1247. package/src/toolchains/z80dasm.js +303 -0
@@ -0,0 +1,3037 @@
1
+ ; eXtended Genesis Music (XGM) Z80 driver - Stephane Dallongeville @2014-2016
2
+ ;
3
+ ; XGM is a music format dedicated to the Sega Megadrive/Genesis system.
4
+ ; It has been designed to minimize CPU decoding resource and keep reasonable data size (should be smaller than VGM file).
5
+ ; It supports both FM and PSG chip and allow up to 4 PCM channels (8 bits signed at 14 Khz) to be played at once.
6
+ ; These 4 PCM channels are obtained by software mixing in the FM DAC in replacement of the 6th FM channel (so at best you can have 5FM + 4PCM + 4PSG = 13 channels)
7
+ ;
8
+ ; The driver supports playing SFX in PCM format with 16 priority levels.
9
+ ; PCM samples can be >32KB but with the restriction of having their address and size aligned on 256 bytes.
10
+ ;
11
+ ; we have to do 254 cycles per sample output which consist of :
12
+ ; - bufferize 4 PCM samples from the rom and mix them in write buffer
13
+ ; - read 1 sample from read buffer and output it to the DAC
14
+ ; - handle loop
15
+ ; - bufferize XGM data / parse and apply XGM command / handle extern command
16
+ ;
17
+ ; register usage :
18
+ ; HL = sample source (in ROM)
19
+ ; DE = write buffer / XGM buffer
20
+ ; BC = counter
21
+ ; C = $80 (used for overflow and sample unsign)
22
+ ; IYH = temp value
23
+ ; HL' = YMPORT1
24
+ ; BC' = read buffer
25
+
26
+ ; ########################### define ##############################
27
+
28
+ INCLUDE "z80_def.i80" ; basic definitions
29
+
30
+
31
+ ; ########################### var ##############################
32
+
33
+ XGM_PLAY_SFT EQU 6 ; XGM music play command bit
34
+ XGM_RESUME_SFT EQU 5 ; XGM music resume command bit
35
+ XGM_PAUSE_SFT EQU 4 ; XGM music pause command bit
36
+
37
+ ; COMMAND b0 = play PCM0 STATUS b0 = PCM0 playing
38
+ ; COMMAND b1 = play PCM1 STATUS b1 = PCM1 playing
39
+ ; COMMAND b2 = play PCM2 STATUS b2 = PCM2 playing
40
+ ; COMMAND b3 = play PCM3 STATUS b3 = PCM3 playing
41
+ ; COMMAND b4 = stop XGM
42
+ ; COMMAND b5 = resume XGM
43
+ ; COMMAND b6 = play XGM STATUS b6 = XGM playing
44
+
45
+ XGM_ARG_A EQU PARAMS+$00 ; XGM address (bit 0 --> bit 23)
46
+
47
+ PCM0_ARG_P EQU PARAMS+$04 ; priority (0 to 15)
48
+ PCM0_ARG_ID EQU PARAMS+$05 ; PCM id (0 to 255)
49
+ PCM1_ARG_P EQU PARAMS+$06 ; priority (0 to 15)
50
+ PCM1_ARG_ID EQU PARAMS+$07 ; PCM id (0 to 255)
51
+ PCM2_ARG_P EQU PARAMS+$08 ; priority (0 to 15)
52
+ PCM2_ARG_ID EQU PARAMS+$09 ; PCM id (0 to 255)
53
+ PCM3_ARG_P EQU PARAMS+$0A ; priority (0 to 15)
54
+ PCM3_ARG_ID EQU PARAMS+$0B ; PCM id (0 to 255)
55
+
56
+ PCM_ARG_P EQU PCM0_ARG_P
57
+ PCM_ARG_ID EQU PCM0_ARG_ID
58
+
59
+ LOOP_ARG EQU PARAMS+$0C ; number of loop (0 = 255 loop)
60
+ PROTECT_ARG EQU PARAMS+$0D ; set to 1 from 68k during DMA (in vblank period)
61
+ ; to prevent Z80 accessing 68k BUS
62
+
63
+ MODIFYING_F EQU PARAMS+$0E ; Z80 is modifying the 'PENDING_FRM' variable
64
+ PENDING_FRM EQU PARAMS+$0F ; contains number of XGM frame to process
65
+
66
+ PCM0_PRIO EQU PARAMS+$10 ; PCM0 internal priority
67
+ PCM0_ADDR EQU PARAMS+$12 ; PCM0 internal addr (bit8 --> bit23)
68
+ PCM0_LEN EQU PARAMS+$14 ; PCM0 internal len (bit8 --> bit23)
69
+ PCM1_PRIO EQU PARAMS+$18 ; PCM1 internal priority
70
+ PCM1_ADDR EQU PARAMS+$1A ; PCM1 internal addr (bit8 --> bit23)
71
+ PCM1_LEN EQU PARAMS+$1C ; PCM1 internal len (bit8 --> bit23)
72
+ PCM2_PRIO EQU PARAMS+$20 ; PCM2 internal priority
73
+ PCM2_ADDR EQU PARAMS+$22 ; PCM2 internal addr (bit8 --> bit23)
74
+ PCM2_LEN EQU PARAMS+$24 ; PCM2 internal len (bit8 --> bit23)
75
+ PCM3_PRIO EQU PARAMS+$28 ; PCM3 internal priority
76
+ PCM3_ADDR EQU PARAMS+$2A ; PCM3 internal addr (bit8 --> bit23)
77
+ PCM3_LEN EQU PARAMS+$2C ; PCM3 internal len (bit8 --> bit23)
78
+
79
+ PCM_PRIO EQU PCM0_PRIO
80
+ PCM_ADDR EQU PCM0_ADDR
81
+ PCM_LEN EQU PCM0_LEN
82
+
83
+ XGM_ADDR EQU PARAMS+$30 ; XGM internal addr (bit0 --> bit23)
84
+
85
+ WRITEBUF EQU PARAMS+$34 ; PCM write buffer pointer (bit8 --> bit9)
86
+ READBUF EQU PARAMS+$36 ; PCM read buffer pointer (bit8 --> bit9)
87
+
88
+ REM_LOOP EQU PARAMS+$38 ; remaining loop (0 = 255)
89
+
90
+ YM_RR_SAV EQU PARAMS+$40 ; YM RR save (4 slots * 6 channels)
91
+ PSG_ENV_SAV EQU PARAMS+$58 ; PSG env save (4 channels)
92
+ YM_RR_OFF EQU PARAMS+$60 ; YM RR off (4 slots * 6 channels)
93
+ PSG_ENV_OFF EQU PARAMS+$78 ; PSG env off (4 channels)
94
+
95
+ YM_2B_SAV EQU PARAMS+$5C ; YM register $2B last write save
96
+ YM_2B_CNT EQU PARAMS+$5D ; YM register $2B ON expiration
97
+
98
+ IDLE_LOOP EQU PARAMS+$7C ; idle loop counter (XGM frame wait)
99
+ WAIT_LOOP EQU PARAMS+$7E ; wait loop counter (DMA contention wait)
100
+
101
+ DEBUG_1 EQU PARAMS+$80 ; debug
102
+ DEBUG_2 EQU PARAMS+$81 ; debug
103
+ DEBUG_3 EQU PARAMS+$82 ; debug
104
+ DEBUG_4 EQU PARAMS+$83 ; debug
105
+ DEBUG_5 EQU PARAMS+$84 ; debug
106
+ DEBUG_6 EQU PARAMS+$85 ; debug
107
+ DEBUG_7 EQU PARAMS+$86 ; debug
108
+ DEBUG_8 EQU PARAMS+$87 ; debug
109
+ DEBUG_9 EQU PARAMS+$88 ; debug
110
+ DEBUG_A EQU PARAMS+$89 ; debug
111
+ DEBUG_B EQU PARAMS+$8A ; debug
112
+
113
+ ELAPSED EQU PARAMS+$90 ; elapsed frame since beginning of music (in frames), encoded on 24 bit
114
+
115
+ JUMP_TABLE EQU $1600 ; XGM command jump table (size = $100)
116
+ XGM_BUFFER EQU $1700 ; XGM music data buffer (size = $100)
117
+
118
+ PCM_BUFFER0 EQU $1800 ; PCM buffer 0
119
+ PCM_BUFFER1 EQU $1900 ; PCM buffer 1
120
+ PCM_BUFFER2 EQU $1A00 ; PCM buffer 2
121
+ PCM_BUFFER3 EQU $1B00 ; PCM buffer 3
122
+
123
+ PCM_BUFFER EQU PCM_BUFFER0 ; PCM buffer
124
+
125
+
126
+ ID_TABLE EQU $1C00 ; sample id table (size = $400)
127
+
128
+ STACK EQU JUMP_TABLE ; stack pointer above buffer region ($1600 --> $15XX)
129
+
130
+
131
+ ; ########################### macro ##############################
132
+
133
+ INCLUDE "z80_mac.i80" ; basic macros
134
+
135
+
136
+ ; handlePCMCommand
137
+ ; ----------------
138
+ ; ? -> HL -> ?
139
+ ; ? -> BC -> ?
140
+ ; ? -> SP -> ?
141
+ ;
142
+ ; handle PCM command for channel 'ch' (PCM id < 0x100)
143
+ ; = 157 cycles
144
+
145
+ macro handlePCMCommand ch
146
+
147
+ LD BC, (PCM_ARG_P+(ch*2)) ; C = SFX prio, B = SFX id ' 20 |
148
+ LD HL, PCM_PRIO+(ch*8) ; HL point on PCM info ' 10 | (30)
149
+
150
+ LD A, C ; A = new prio ' 4 |
151
+ CP (HL) ; compare to old prio ' 7 | 21 (51)
152
+ JP NC, .play_new ; >= old prio --> play new ' 10 |
153
+
154
+ wait96 ; sync ' 96 |
155
+ JP .end ; ' 10 | 106 (157)
156
+
157
+ .play_new
158
+ LD A, B ; A = SFX id ' 4 |
159
+ OR A ; not a stop PCM command ? ' 4 | 18 (69)
160
+ JR NZ, .PCM_play ; go set new prio ' 7/12 |
161
+
162
+ LD C, 0 ; reset prio for stop ' 7 | +2
163
+
164
+ .PCM_play ; ' 69
165
+ LD (HL), C ; set new prio ' 7 | (76)
166
+
167
+ LD H, (ID_TABLE>>10) ; ' 7 |
168
+ LD L, A ; ' 4 |
169
+ ADD HL, HL ; ' 6 |
170
+ ADD HL, HL ; HL point on new PCM addr ' 6 | 29 (105)
171
+ LD SP, HL ; set SP to new PCM addr ' 6 |
172
+
173
+ POP HL ; copy params ' 10 |
174
+ LD (PCM_ADDR+(ch*8)),HL ; ' 16 |
175
+ POP HL ; ' 10 | 52 (157)
176
+ LD (PCM_LEN+(ch*8)),HL ; ' 16 |
177
+
178
+ .end
179
+ endm
180
+
181
+
182
+ ; handlePCMCommandXGM
183
+ ; -------------------
184
+ ; XGM data -> DE -> XGM data
185
+ ; PCM prio -> C -> ?
186
+ ; ? -> HL -> ?
187
+ ; ? -> SP -> ?
188
+ ;
189
+ ; handle PCM command for channel 'ch' for XGM music (PCM id < 0x40)
190
+ ; = 142 cycles
191
+
192
+ macro handlePCMCommandXGM ch
193
+
194
+ LD HL, PCM_PRIO+(ch*8) ; HL point on PCM info ' 10 |
195
+ LD A, C ; A = new prio ' 4 |
196
+ CP (HL) ; compare new and old prio ' 7 | (31)
197
+ JP NC, .play_new ; >= old prio --> play new ' 10 |
198
+
199
+ INC E ; next XGM command ' 4 |
200
+ wait97 ; sync ' 97 | 111 (142)
201
+ JP .end ; done ' 10 |
202
+
203
+ .play_new
204
+ LD A, (DE) ; A = PCM id (max = $3F) ' 7 |
205
+ INC E ; next XGM command ' 4 |
206
+ OR A ; not a stop PCM command ? ' 4 | 27 (58)
207
+ JR NZ, .PCM_play ; go set new prio ' 7/12 |
208
+
209
+ LD C, 0 ; reset prio for stop ' 7 | +2
210
+
211
+ .PCM_play
212
+ LD (HL), C ; set new prio ' 7 | (65)
213
+
214
+ LD H, (ID_TABLE>>8) ; ' 7 |
215
+ ADD A ; ' 4 |
216
+ ADD A ; ' 4 | 25 (90)
217
+ LD L, A ; HL point on new PCM addr ' 4 |
218
+ LD SP, HL ; set SP to new PCM addr ' 6 |
219
+
220
+ POP HL ; copy params ' 10 |
221
+ LD (PCM_ADDR+(ch*8)),HL ; ' 16 |
222
+ POP HL ; ' 10 | 52 (142)
223
+ LD (PCM_LEN+(ch*8)),HL ; ' 16 |
224
+
225
+ .end ; ' 142
226
+
227
+ endm
228
+
229
+
230
+ ; prepareChannelAlt
231
+ ; -----------------
232
+ ; ? -> HL -> point to the sample source (ROM)
233
+ ; ? -> DE -> point to write buffer
234
+ ;
235
+ ; set bank and prepare registers to play PCM channel 'ch'
236
+ ; = 176 cycles
237
+
238
+ macro prepareChannelAlt ch
239
+
240
+ LD HL, (PCM_ADDR+(ch*8)) ; HL = sample addr (HM) ' 16 | (16)
241
+
242
+ LD A, L ; A = bit 8-15 ' 4 |
243
+ RLA ; C flag = bit 15 ' 4 |
244
+ LD A, H ; A = bit 16-23 ' 4 | 16 (32)
245
+ RLA ; A = bit 15-22 ' 4 |
246
+
247
+ setBank_DE ; set bank ' 105 | (137)
248
+
249
+ LD H, L ; ' 4 |
250
+ SET 7, H ; HL |= 0x8000 ' 8 | 19 (156)
251
+ LD L, 0 ; HL = sample addr bank ' 7 |
252
+
253
+ LD DE, (WRITEBUF) ; DE = write buffer ' 20 | (176)
254
+
255
+ endm
256
+
257
+ ; prepareChannel
258
+ ; --------------
259
+ ; ? -> SP -> point to the sample source (ROM)
260
+ ; ? -> HL -> point to write buffer
261
+ ;
262
+ ; set bank and prepare registers to play PCM channel 'ch'
263
+ ; = 178 cycles
264
+
265
+ macro prepareChannel ch
266
+
267
+ LD HL, (PCM_ADDR+(ch*8)) ; HL = sample addr (HM) ' 16 | (16)
268
+
269
+ LD A, L ; A = bit 8-15 ' 4 |
270
+ RLA ; C flag = bit 15 ' 4 |
271
+ LD A, H ; A = bit 16-23 ' 4 | 16 (32)
272
+ RLA ; A = bit 15-22 ' 4 |
273
+
274
+ setBank_DE ; set bank ' 105 | (137)
275
+
276
+ LD H, L ; ' 4 |
277
+ SET 7, H ; HL |= 0x8000 ' 8 | 25 (162)
278
+ LD L, 0 ; HL = sample addr bank ' 7 |
279
+ LD SP, HL ; SP point on sample ' 6 |
280
+
281
+ LD HL, (WRITEBUF) ; HL = write buffer ' 16 | (178)
282
+
283
+ endm
284
+
285
+
286
+ ; stopChannel
287
+ ; -----------
288
+ ; ? -> HL -> STATUS
289
+ ;
290
+ ; set null sample play for channel 'ch'
291
+ ; = 75 cycles
292
+
293
+ macro stopChannel ch
294
+
295
+ LD HL, (ID_TABLE+0) ; HL = null PCM addr ' 16 |
296
+ LD (PCM_ADDR+(ch*8)), HL ; set new PCM addr ' 16 |
297
+ LD HL, $0001 ; HL = null PCM len ' 10 | (58)
298
+ LD (PCM_LEN+(ch*8)), HL ; set new PCM addr ' 16 |
299
+
300
+ XOR A ; ' 4 |
301
+ LD (PCM_PRIO+(ch*8)), A ; clear prio ' 13 | 17 (75)
302
+
303
+ endm
304
+
305
+
306
+ ; updateChannelData
307
+ ; -----------------
308
+ ; ? -> HL -> ?
309
+ ;
310
+ ; update sample address and sample lenght
311
+ ; check if sample is done and stop it if needed
312
+ ; = 153 cycles
313
+
314
+ macro updateChannelData ch
315
+
316
+ LD HL, (PCM_ADDR+(ch*8)) ; increment address ' 16 |
317
+ INC HL ; ' 6 | (38)
318
+ LD (PCM_ADDR+(ch*8)), HL ; ' 16 |
319
+
320
+ LD HL, (PCM_LEN+(ch*8)) ; decrement lenght ' 16 |
321
+ DEC HL ; ' 6 | 22 (60)
322
+
323
+ LD A, H ; ' 4 |
324
+ OR L ; ' 4 | 18 (78)
325
+ JP Z, .done ; sample done ? ' 10 |
326
+
327
+ LD (PCM_LEN+(ch*8)), HL ; set new sample len ' 16 |
328
+ wait49 ; ' 49 | 75 (153)
329
+ JP .end ; ' 10 |
330
+
331
+ .done
332
+ stopChannel ch ; stop channel ' 75 | (153)
333
+
334
+ .end
335
+
336
+ endm
337
+
338
+
339
+ ; compareReadWrite
340
+ ; ----------------
341
+ ; read buffer -> BC'
342
+ ; write buffer -> DE
343
+ ; ZF -> Write == Read buffer
344
+ ;
345
+ ; compare read and write buffer
346
+ ; = 16 cycles
347
+
348
+ macro compareReadWrite
349
+
350
+ EXX ; ' 4 |
351
+ LD A, B ; A = read buffer high ' 4 |
352
+ EXX ; ' 4 | 16
353
+ CP D ; compare write buffer high ' 4 |
354
+
355
+ endm
356
+
357
+
358
+ ; readAndClear
359
+ ; ------------
360
+ ; point to sample source (ROM) -> HL -> point to sample source (ROM)
361
+ ; point to write buffer -> DE -> point to write buffer
362
+ ; ? -> PF -> 0=done 1=not done
363
+ ;
364
+ ; read 1 sample from rom and write it in output buffer
365
+ ; = 19 cycles
366
+
367
+ macro readAndClear
368
+
369
+ LDI ; ' 16+3 | 19
370
+
371
+ endm
372
+
373
+
374
+ ; readAndClear2
375
+ ; -------------
376
+ ; point to sample source (ROM) -> HL -> point to sample source (ROM)
377
+ ; point to write buffer -> DE -> point to write buffer
378
+ ; ? -> PF -> 0=done 1=not done
379
+ ;
380
+ ; read 2 samples from rom and write them in write buffer
381
+ ; = 38 cycles
382
+
383
+ macro readAndClear2
384
+
385
+ LDI ; ' 16+3 |
386
+ LDI ; ' 16+3 | (38)
387
+
388
+ endm
389
+
390
+
391
+ ; readAndMix2
392
+ ; -----------
393
+ ; point to sample source (ROM) -> SP -> point to sample source (ROM)
394
+ ; point to write buffer -> HL -> point to write buffer
395
+ ; $80 -> C
396
+ ;
397
+ ; read 2 samples and mix them in output buffer
398
+ ; = 80 (+22 when overflow)
399
+
400
+ macro readAndMix2
401
+
402
+ POP DE ; read 2 samples from ROM ' 10+6 | (16)
403
+
404
+ LD A, E ; first sample ' 4 |
405
+ ADD (HL) ; mix with write buffer ' 7 | 21 (37)
406
+ JP PO, .ok ; check overflow ' 10 |
407
+
408
+ LD A, C ; fix overflow ' 4 |
409
+ ADC $FF ; A = $7F/$80 ' 7 | +11
410
+
411
+ .ok
412
+ LD (HL), A ; store it in write sample ' 7 |
413
+ INC L ; ' 4 | 11 (48)
414
+
415
+ LD A, D ; second sample ' 4 |
416
+ ADD (HL) ; mix ' 7 | 21 (69)
417
+ JP PO, .ok2 ; check overflow ' 10 |
418
+
419
+ LD A, C ; fix overflow ' 4 |
420
+ ADC $FF ; A = $7F/$80 ' 7 | +11
421
+
422
+ .ok2
423
+ LD (HL), A ; store it in write sample ' 7 |
424
+ INC L ; ' 4 | 11 (80)
425
+
426
+ endm ; ' 80 (+22)
427
+
428
+
429
+ ; readAndMix16WhilePlay3
430
+ ; ----------------------
431
+ ; point to sample source (ROM) -> SP -> point to sample source (ROM)
432
+ ; point to write buffer -> HL -> point to write buffer
433
+ ; $80 -> C
434
+ ;
435
+ ; read 16 samples and mix them in output buffer
436
+ ; = 2 samples + 240 cycles
437
+
438
+ macro readAndMix16WhilePlay3
439
+
440
+ sampleOutput ; ' 36 | (36)
441
+
442
+ readAndMix2 ; read and mix 2 samples ' 80 |
443
+ readAndMix2 ; read and mix 2 samples ' 80 | 160 (196)
444
+
445
+ POP DE ; read 2 samples from ROM ' 10+6 | (212)
446
+
447
+ LD A, E ; first sample ' 4 |
448
+ ADD (HL) ; mix with write buffer ' 7 | 21 (233)
449
+ JP PO, .ok ; check overflow ' 10 |
450
+
451
+ LD A, C ; fix overflow ' 4 |
452
+ ADC $FF ; A = $7F/$80 ' 7 | +11
453
+
454
+ .ok
455
+ LD (HL), A ; store it in write sample ' 7 |
456
+ INC L ; ' 4 | 11 (254-10)
457
+
458
+ sampleOutput ; -10 --> too soon ' 36 | (36-10)
459
+
460
+ LD A, D ; second sample ' 4 |
461
+ ADD (HL) ; mix ' 7 | 21 (47)
462
+ JP PO, .ok2 ; check overflow ' 10 |
463
+
464
+ LD A, C ; fix overflow ' 4 |
465
+ ADC $FF ; A = $7F/$80 ' 7 | +11
466
+
467
+ .ok2
468
+ LD (HL), A ; store it in write sample ' 7 |
469
+ INC L ; ' 4 | 11 (58)
470
+
471
+ readAndMix2 ; read and mix 2 samples ' 80 |
472
+ readAndMix2 ; read and mix 2 samples ' 80 | 160 (218)
473
+
474
+ POP DE ; read 2 samples from ROM ' 10+6 | (234)
475
+
476
+ LD A, E ; first sample ' 4 |
477
+ ADD (HL) ; mix with write buffer ' 7 | 21 (254+1)
478
+ JP PO, .ok3 ; check overflow ' 10 |
479
+
480
+ LD A, C ; fix overflow ' 4 |
481
+ ADC $FF ; A = $7F/$80 ' 7 | +11
482
+
483
+ .ok3
484
+ LD (HL), A ; store it in write sample ' 7 | (254+8)
485
+
486
+ sampleOutput ; +8 --> too late ' 36 | (36+8)
487
+
488
+ INC L ; ' 4 | (48)
489
+
490
+ LD A, D ; second sample ' 4 |
491
+ ADD (HL) ; mix ' 7 | 21 (69)
492
+ JP PO, .ok4 ; check overflow ' 10 |
493
+
494
+ LD A, C ; fix overflow ' 4 |
495
+ ADC $FF ; A = $7F/$80 ' 7 | +11
496
+
497
+ .ok4
498
+ LD (HL), A ; store it in write sample ' 7 |
499
+ INC L ; ' 4 | 11 (80)
500
+
501
+ readAndMix2 ; read and mix 2 samples ' 80 |
502
+ readAndMix2 ; read and mix 2 samples ' 80 | 160 (240)
503
+
504
+ endm ; ' 240
505
+
506
+
507
+ ; readMixAndUnsign
508
+ ; ----------------
509
+ ; point to sample source (ROM) -> HL -> point to sample source (ROM)
510
+ ; point to write buffer -> DE -> point to write buffer
511
+ ; $80 -> C
512
+ ;
513
+ ; read 1 sample and mix it with output buffer, then unsign it
514
+ ; = 46 (+11 when overflow)
515
+
516
+ macro readMixAndUnsign
517
+
518
+ LD A, (DE) ; read value in write buf ' 7 |
519
+ ADD (HL) ; mix with source sample ' 7+3 | (27)
520
+ JP PO, .ok ; check overflow ' 10 |
521
+
522
+ LD A, C ; fix overflow ' 4 |
523
+ ADC $FF ; A = $7F/$80 ' 7 | +11
524
+
525
+ .ok
526
+ ADD C ; unsign ' 4 |
527
+ LD (DE), A ; write sample in buffer ' 7 | 19 (46)
528
+ INC E ; ' 4 |
529
+ INC L ; next ' 4 |
530
+
531
+ endm ; ' 46 (+11)
532
+
533
+
534
+ ; sampleOutput
535
+ ; ------------
536
+ ; YMPORT0 -> HL'
537
+ ; YMPORT1 -> DE'
538
+ ; read buffer -> BC' -> read buffer
539
+ ;
540
+ ; output a sample to the DAC
541
+ ; = 36 cycles
542
+
543
+ macro sampleOutput
544
+
545
+ EXX ; ' 4 | 4
546
+
547
+ LD A, (BC) ; read sample from buffer ' 7 |
548
+ INC BC ; increment read address ' 6 |
549
+ RES 2, B ; read_address &= 0x03FF ' 8 | 28 (32)
550
+ LD (DE), A ; play sample ' 7 |
551
+
552
+ EXX ; ' 4 | (36)
553
+
554
+ endm
555
+
556
+
557
+ ; sampleOutputSafe
558
+ ; ----------------
559
+ ; YMPORT0 -> HL'
560
+ ; YMPORT1 -> DE'
561
+ ; read buffer -> BC' -> read buffer
562
+ ;
563
+ ; output a sample to the DAC
564
+ ; = 46 cycles
565
+
566
+ macro sampleOutputSafe
567
+
568
+ EXX ; ' 4 | 4
569
+
570
+ LD (HL), $2A ; prepare DAC write ' 10 |
571
+ LD A, (BC) ; read sample from buffer ' 7 |
572
+ INC BC ; increment read address ' 6 | 38 (42)
573
+ RES 2, B ; read_address &= 0x03FF ' 8 |
574
+ LD (DE), A ; play sample ' 7 |
575
+
576
+ EXX ; ' 4 | (46)
577
+
578
+ endm
579
+
580
+
581
+ ; waitYMReadyFast
582
+ ; ---------------
583
+ ; YMPORT0 -> HL
584
+ ;
585
+ ; wait until YM ready
586
+ ; = 22 cycles minimum (22 * X)
587
+
588
+ macro waitYMReadyFast
589
+
590
+ .wait
591
+ BIT 7, (HL) ; test YM ready bit ' 12 | (22)
592
+ JP NZ, .wait ; wait while busy ' 10 |
593
+
594
+ endm
595
+
596
+
597
+ ; waitYMReady
598
+ ; -----------
599
+ ; YMPORT0 -> HL'
600
+ ;
601
+ ; wait until YM ready
602
+ ; = 30 cycles minimum (8 + (22 * X))
603
+
604
+ macro waitYMReady
605
+
606
+ EXX ; ' 4 | (4)
607
+
608
+ .wait
609
+ BIT 7, (HL) ; test YM ready bit ' 12 | (22)
610
+ JP NZ, .wait ; wait while busy ' 10 |
611
+
612
+ EXX ; ' 4 | (30)
613
+
614
+ endm
615
+
616
+
617
+ ; ########################### init ##############################
618
+
619
+ ORG $0000
620
+
621
+ init
622
+ DI ; disable ints
623
+ LD SP, STACK ; setup stack
624
+ IM $01 ; set int mode 1
625
+ XOR A
626
+ LD (STATUS), A ; driver not ready
627
+ LD (COMMAND), A ; command cleared
628
+ JP start ; jump to start
629
+
630
+
631
+ ; ########################### main ##############################
632
+
633
+ BLOCK $0200-$
634
+
635
+ start
636
+
637
+ LD HL, PARAMS
638
+ LD A, $00
639
+ LD B, $40
640
+
641
+ cp_loop
642
+ LD (HL), A ; clear parameters
643
+ INC HL
644
+ DJNZ cp_loop
645
+
646
+ LD HL, YM_RR_OFF
647
+ LD A, $FF
648
+ LD B, (6 * 4)
649
+
650
+ off_loop
651
+ LD (HL), A ; clear off settings
652
+ INC HL
653
+ DJNZ off_loop
654
+
655
+ LD HL, PSG_ENV_OFF
656
+
657
+ LD (HL), $9F ; PSG channel 0 off
658
+ INC HL
659
+ LD (HL), $BF ; PSG channel 1 off
660
+ INC HL
661
+ LD (HL), $DF ; PSG channel 2 off
662
+ INC HL
663
+ LD (HL), $FF ; PSG channel 3 off
664
+
665
+ LD HL, YM_RR_OFF
666
+ LD DE, YM_RR_SAV
667
+ LD BC, (6 * 4) + 4
668
+ LDIR ; copy off settings to sav settings
669
+
670
+ LD HL, PCM_BUFFER
671
+ LD A, $80
672
+ LD B, $00 ; for 256 * 4 bytes to clear
673
+
674
+ cb_loop
675
+ LD (HL), A ; initialise buffers to silent
676
+ INC HL
677
+ LD (HL), A
678
+ INC HL
679
+ LD (HL), A
680
+ INC HL
681
+ LD (HL), A
682
+ INC HL
683
+ DJNZ cb_loop
684
+
685
+ LD A, $00
686
+
687
+ LD HL, YM_2B_SAV
688
+ LD (HL), A ; DAC disabled by default
689
+ LD HL, YM_2B_CNT
690
+ LD (HL), A ; DAC disabled by default
691
+
692
+ LD HL, MODIFYING_F
693
+ LD (HL), A ; clear modifying variable flag
694
+ LD HL, PENDING_FRM
695
+ LD (HL), A ; clear frame to process counter
696
+
697
+ CALL initDAC ; prepare DAC for output
698
+
699
+ LD HL, PCM_BUFFER0 ; initialise write and read buffer
700
+ LD (WRITEBUF), HL
701
+ LD HL, PCM_BUFFER1
702
+ LD (READBUF), HL
703
+
704
+ LD BC, HL ; BC' point to read buffer
705
+ LD HL, YMPORT0 ; HL' point to YMPORT0
706
+ LD DE, YMPORT1 ; DE' point to YMPORT1
707
+ EXX
708
+
709
+ stopChannel 0 ; stop all channels
710
+ stopChannel 1
711
+ stopChannel 2
712
+ stopChannel 3
713
+
714
+ LD A, STATREADY
715
+ LD (STATUS), A ; driver ready
716
+
717
+ main_loop
718
+
719
+ ; LD A, (VCOUNTER)
720
+ ; LD (DEBUG_1), A
721
+
722
+
723
+ ; prepare XGM buffer
724
+ ; ------------------
725
+
726
+ ; $00
727
+ sampleOutput ; ' 36 | 36
728
+
729
+ LD DE, XGM_BUFFER ; DE point to XGM buf ' 10 |
730
+ LD A, (STATUS) ; A = STATUS ' 13 |
731
+ BIT XGM_PLAY_SFT, A ; is XGM playing ? ' 8 | 41 (77)
732
+ JP NZ, has_xgm ; go to prepare buf ' 10 |
733
+
734
+ wait146 ; sync ' 146 |
735
+ XOR A ; A = 0 ' 4 | 160 (237)
736
+ JP end_prep_xgm ; preparation done ' 10 |
737
+
738
+ has_xgm
739
+ LD HL, (XGM_ADDR) ; XGM addr (b0-b15) ' 16 |
740
+ LD A, H ; A = XGM addr (b8-b15) ' 4 |
741
+ RLA ; CF = XGM addr b15 ' 4 | 146 (223)
742
+ LD A, (XGM_ADDR+2) ; A = sample addr (H) ' 13 |
743
+ RLA ; sample addr (b22-b15) ' 4 |
744
+ setBank_BC ; setBank ' 105 |
745
+
746
+ LD A, H ; save H ' 4 |
747
+ SET 7, H ; HL = XGM addr bank ' 8 |
748
+ LD B, $0 ; B = 0 ' 7 | 30 (254-1)
749
+ LD C, (HL) ; BC = bytes to process ' 7 |
750
+ LD H, A ; restore H ' 4 |
751
+
752
+ ; $00+X
753
+ sampleOutput ; ' 36 | (36-1)
754
+
755
+ LD A, L ; A = addr low ' 4 |
756
+ ADD C ; compute new addr (L) ' 4 |
757
+ LD (XGM_ADDR+0), A ; store new addr (L) ' 13 | 28 (63)
758
+ JR C, .split ; carry --> separate ' 7 |
759
+
760
+ .no_split
761
+ wait104 ; sync ' 104 | (167)
762
+
763
+ SET 7, H ; HL = XGM addr bank ' 8 |
764
+ INC HL ; HL = start frame data ' 6 |
765
+ XOR A ; no second part ' 4 |
766
+ LD IYH, A ; IYH = sec part size ' 8 | 44 (211)
767
+ NOP ; ' 4 |
768
+ DEC C ; first part size = 0 ? ' 4 |
769
+ JP Z, .second_part ; go to second part ' 10 |
770
+
771
+ wait12 ; sync ' 12 | 22 (233)
772
+ JP .first_part_pre ; start filling ' 10 |
773
+
774
+ .split
775
+ LD IYH, A ; IYH = sec part size ' 8 |
776
+ SUB C ; ' 4 |
777
+ NEG ; ' 8 | 34 (97)
778
+ DEC A ; A = (C - IYH) - 1 ' 4 |
779
+ JP NZ, .first_part_ok ; not zero --> do it ' 10 |
780
+
781
+ LD A, H ; A = addr med (M) ' 4 |
782
+ ADD $1 ; inc with CF set ' 7 |
783
+ LD (XGM_ADDR+1), A ; store new addr (M) ' 13 |
784
+ LD A, (XGM_ADDR+2) ; load sample addr (H) ' 13 |
785
+ ADC B ; inc ' 4 | 68 (164)
786
+ LD (XGM_ADDR+2), A ; store sample addr (H) ' 13 |
787
+ SET 7, H ; HL = XGM addr bank ' 8 |
788
+ INC HL ; HL = start frame data ' 6 |
789
+
790
+ wait36 ; sync ' 36 |
791
+ JP .second_part ; go second part ' 10 | 65 (211)
792
+
793
+ .first_part_ok
794
+ LD C, A ; C = first part size ' 4 |
795
+ LD A, H ; A = addr med (M) ' 4 |
796
+ ADD $1 ; inc with CF set ' 7 |
797
+ LD (XGM_ADDR+1), A ; store new addr (M) ' 13 |
798
+ LD A, (XGM_ADDR+2) ; load sample addr (H) ' 13 | 72 (169)
799
+ ADC B ; inc ' 4 |
800
+ LD (XGM_ADDR+2), A ; store sample addr (H) ' 13 |
801
+ SET 7, H ; HL = XGM addr bank ' 8 |
802
+ INC HL ; HL = start frame data ' 6 |
803
+
804
+ wait64 ; sync ' 64 | (233)
805
+
806
+ .first_part_pre ; ' 233
807
+ LD A, 11 ; A = block fill size ' 7 |
808
+ CP C ; C < block size ' 4 | 21 (254)
809
+ JP NC, .first_part_end ; go to last bytes ' 10 |
810
+
811
+ .first_part
812
+ ; $00+X
813
+ sampleOutput ; ' 36 | 36
814
+
815
+ LDI ; fill XGM buffer ' 16+1 |
816
+ LDI ; 11 bytes at once ' 16+1 |
817
+ LDI ; ' 16+1 |
818
+ LDI ; ' 16+1 |
819
+ LDI ; ' 16+1 |
820
+ LDI ; ' 16+1 | 187 (223)
821
+ LDI ; ' 16+1 |
822
+ LDI ; ' 16+1 |
823
+ LDI ; ' 16+1 |
824
+ LDI ; ' 16+1 |
825
+ LDI ; ' 16+1 |
826
+
827
+ wait10 ; sync ' 10 |
828
+ LD A, 11 ; A = block fill size ' 7 |
829
+ CP C ; remaining > 11 ' 4 | 31 (254)
830
+ JP C, .first_part ; continu block fill ' 10 |
831
+
832
+ .first_part_end
833
+ ; $00+X
834
+ sampleOutput ; ' 36 | 36
835
+
836
+ LDI ; fill XGM buffer ' 16+1 |
837
+ JP PO, .fst_part_d0 ; ' 10 | 27 (63)
838
+ LDI ; ' 16+1 |
839
+ JP PO, .fst_part_d1 ; ' 10 | 27 (90)
840
+ LDI ; ' 16+1 |
841
+ JP PO, .fst_part_d2 ; ' 10 | 27 (117)
842
+ LDI ; ' 16+1 |
843
+ JP PO, .fst_part_d3 ; ' 10 | 27 (144)
844
+ LDI ; ' 16+1 |
845
+ JP PO, .fst_part_d4 ; ' 10 | 27 (171)
846
+ LDI ; ' 16+1 |
847
+ JP PO, .fst_part_d5 ; ' 10 | 27 (198)
848
+
849
+ wait56 ; sync ' 56 | (254)
850
+
851
+ ; $00+X
852
+ sampleOutput ; ' 36 | 36
853
+
854
+ LDI ; fill XGM buffer ' 16+1 |
855
+ JP PO, .fst_part_d0 ; ' 10 | 27 (63)
856
+ LDI ; ' 16+1 |
857
+ JP PO, .fst_part_d1 ; ' 10 | 27 (90)
858
+ LDI ; ' 16+1 |
859
+ JP PO, .fst_part_d2 ; ' 10 | 27 (117)
860
+ LDI ; ' 16+1 |
861
+ JP PO, .fst_part_d3 ; ' 10 | 27 (144)
862
+ LDI ; ' 16+1 |
863
+ JP PO, .fst_part_d4 ; ' 10 | 27 (171)
864
+ LDI ; ' 16+1 |
865
+ JP .fst_part_d5 ; ' 10 | 27 (198)
866
+
867
+ .fst_part_d0
868
+ wait27 ; sync ' 27 | (90)
869
+ .fst_part_d1
870
+ wait27 ; sync ' 27 | (117)
871
+ .fst_part_d2
872
+ wait27 ; sync ' 27 | (144)
873
+ .fst_part_d3
874
+ wait27 ; sync ' 27 | (171)
875
+ .fst_part_d4
876
+ wait27 ; sync ' 27 | (198)
877
+ .fst_part_d5
878
+ wait13 ; sync ' 13 | (211)
879
+
880
+ .second_part ; ' 211
881
+ NOP ; sync ' 4
882
+ LD A, IYH ; A = second part size ' 8 |
883
+ OR A ; ' 4 | 26 (237)
884
+ JP Z, end_prep_xgm ; done ' 10 |
885
+
886
+ wait17 ; sync ' 17 | 254
887
+
888
+ ; $00+X
889
+ sampleOutput ; ' 36 | 36
890
+
891
+ LD HL, (XGM_ADDR) ; XGM addr (b0-b15) ' 16 |
892
+ LD A, H ; A = XGM addr (b8-b15) ' 4 |
893
+ RLA ; CF = XGM addr b15 ' 4 | 146 (182)
894
+ LD A, (XGM_ADDR+2) ; A = sample addr (H) ' 13 |
895
+ RLA ; sample addr (b22-b15) ' 4 |
896
+ setBank_BC ; setBank ' 105 |
897
+
898
+ SET 7, H ; HL = XGM addr bank ' 8 | 15 (197)
899
+ LD L, 0 ; ' 7 |
900
+
901
+ wait21 ; sync ' 21 | (218)
902
+
903
+ LD B, 0 ; B = 0 ' 7 |
904
+ LD C, IYH ; BC = second part size ' 8 |
905
+ LD A, 11 ; A = block fill size ' 7 | 36 (254)
906
+ CP C ; C < block size ' 4 |
907
+ JP NC, .sec_part_end ; go to last bytes ' 10 |
908
+
909
+ ; $00+X
910
+ .sec_part_loop
911
+ sampleOutput ; ' 36 | 36
912
+
913
+ LDI ; fill XGM buffer ' 16+1 |
914
+ LDI ; 11 bytes at once ' 16+1 |
915
+ LDI ; ' 16+1 |
916
+ LDI ; ' 16+1 |
917
+ LDI ; ' 16+1 |
918
+ LDI ; ' 16+1 | 187 (223)
919
+ LDI ; ' 16+1 |
920
+ LDI ; ' 16+1 |
921
+ LDI ; ' 16+1 |
922
+ LDI ; ' 16+1 |
923
+ LDI ; ' 16+1 |
924
+
925
+ wait10 ; sync ' 10 |
926
+ LD A, 11 ; A = block fill size ' 7 |
927
+ CP C ; remaining > 11 ' 4 | 31 (254)
928
+ JP C, .sec_part_loop ; continu block fill ' 10 |
929
+
930
+ .sec_part_end
931
+ ; $00+X
932
+ sampleOutput ; ' 36 | 36
933
+
934
+ LDI ; fill XGM buffer ' 16+1 |
935
+ JP PO, .sec_part_d0 ; ' 10 | 27 (63)
936
+ LDI ; ' 16+1 |
937
+ JP PO, .sec_part_d1 ; ' 10 | 27 (90)
938
+ LDI ; ' 16+1 |
939
+ JP PO, .sec_part_d2 ; ' 10 | 27 (117)
940
+ LDI ; ' 16+1 |
941
+ JP PO, .sec_part_d3 ; ' 10 | 27 (144)
942
+ LDI ; ' 16+1 |
943
+ JP PO, .sec_part_d4 ; ' 10 | 27 (171)
944
+ LDI ; ' 16+1 |
945
+ JP PO, .sec_part_d5 ; ' 10 | 27 (198)
946
+
947
+ wait56 ; sync ' 56 | (254)
948
+
949
+ ; $00+X
950
+ sampleOutput ; ' 36 | 36
951
+
952
+ LDI ; fill XGM buffer ' 16+1 |
953
+ JP PO, .sec_part_d0 ; ' 10 | 27 (63)
954
+ LDI ; ' 16+1 |
955
+ JP PO, .sec_part_d1 ; ' 10 | 27 (90)
956
+ LDI ; ' 16+1 |
957
+ JP PO, .sec_part_d2 ; ' 10 | 27 (117)
958
+ LDI ; ' 16+1 |
959
+ JP PO, .sec_part_d3 ; ' 10 | 27 (144)
960
+ LDI ; ' 16+1 |
961
+ JP PO, .sec_part_d4 ; ' 10 | 27 (171)
962
+ LDI ; ' 16+1 |
963
+ JP .sec_part_d5 ; ' 10 | 27 (198)
964
+
965
+ .sec_part_d0
966
+ wait27 ; sync ' | (90)
967
+ .sec_part_d1
968
+ wait27 ; sync ' | (117)
969
+ .sec_part_d2
970
+ wait27 ; sync ' | (144)
971
+ .sec_part_d3
972
+ wait27 ; sync ' | (171)
973
+ .sec_part_d4
974
+ wait27 ; sync ' | (198)
975
+ .sec_part_d5
976
+ wait35 ; sync ' 35 |
977
+ XOR A ; A = 0 ' 4 | 39 (237)
978
+
979
+ end_prep_xgm ; ' 237
980
+ LD (DE), A ; XGM buf end with 0 ' 7 |
981
+ wait10 ; sync ' 10 | 17 (254)
982
+
983
+
984
+ ; XGM PREP DONE
985
+ ; -------------
986
+
987
+ ; $01+x
988
+ sampleOutput ; ' 36 | (36)
989
+
990
+ LD A, (STATUS) ; A = STATUS ' 13 |
991
+ BIT XGM_PLAY_SFT, A ; XGM playing ? ' 8 | 31 (67)
992
+ JP NZ, .inc ; count elapsed ' 10 |
993
+
994
+ wait71 ; sync ' 71 | 81 (148)
995
+ JP .noinc ; preparation done ' 10 |
996
+
997
+ .inc
998
+ LD HL, ELAPSED ; ' 10 | (77)
999
+
1000
+ LD A, (HL) ; ' 7 |
1001
+ ADD A, #1 ; ' 7 |
1002
+ LD (HL), A ; ' 7 |
1003
+ INC L ; ' 4 |
1004
+ LD A, (HL) ; ' 7 |
1005
+ ADC A, #0 ; inc elapsed frame ' 7 | 71 (148)
1006
+ LD (HL), A ; (24 bit counter) ' 7 |
1007
+ INC L ; ' 4 |
1008
+ LD A, (HL) ; ' 7 |
1009
+ ADC A, #0 ; ' 7 |
1010
+ LD (HL), A ; ' 7 |
1011
+
1012
+ .noinc
1013
+ wait60 ; sync ' 60 | (208)
1014
+
1015
+ LD DE, (WRITEBUF) ; DE = write buf ' 20 |
1016
+ compareReadWrite ; PCM buffer full ? ' 16 | 46 (254)
1017
+ JP Z, sync_frame ; go to sync directly ' 10 |
1018
+
1019
+ pcm_mix
1020
+
1021
+ ; PCM channel 0
1022
+ ; -------------
1023
+
1024
+ ; $02+X
1025
+ sampleOutput ; ' 36 |
1026
+ prepareChannelAlt 0 ; ' 176 |
1027
+ LD BC, 242 ; prepare loop counter ' 10 | 254
1028
+ wait32 ; sync ' 32 |
1029
+
1030
+ ; $03-$18+X
1031
+ .loop_ch0
1032
+ sampleOutput ; ' 36 |
1033
+ readAndClear2 ; ' 38 |
1034
+ readAndClear2 ; process 11 samples ' 38 |
1035
+ readAndClear2 ; ' 38 | 254-1
1036
+ readAndClear2 ; ' 38 |
1037
+ readAndClear2 ; ' 38 |
1038
+ readAndClear ; ' 19 |
1039
+ wait8 ; sync ' 8 |
1040
+
1041
+ sampleOutput ; -1 --> a bit early ' 36 |
1042
+ readAndClear2 ; ' 38 |
1043
+ readAndClear2 ; process 11 samples ' 38 |
1044
+ readAndClear2 ; ' 38 | 254+1
1045
+ readAndClear2 ; ' 38 |
1046
+ readAndClear2 ; ' 38 |
1047
+ readAndClear ; ' 19 |
1048
+ JP PE, .loop_ch0 ; ' 10 |
1049
+
1050
+ ; $19+X
1051
+ sampleOutput ; ' 36 |
1052
+ readAndClear2 ; ' 38 |
1053
+ readAndClear2 ; process 10 samples ' 38 |
1054
+ readAndClear2 ; ' 38 | 254+10
1055
+ readAndClear2 ; ' 38 |
1056
+ readAndClear2 ; ' 38 |
1057
+ readAndClear2 ; ' 38 |
1058
+
1059
+ ; $1A+X
1060
+ sampleOutput ; +10 --> too late ' 36+10 |
1061
+ readAndClear2 ; ' 38 |
1062
+ updateChannelData 0 ; update channel data ' 153 | 254
1063
+ wait17 ; sync ' 17 |
1064
+
1065
+
1066
+ ; LD A, (VCOUNTER)
1067
+ ; LD (DEBUG_2), A
1068
+
1069
+ ; PCM channel 1
1070
+ ; -------------
1071
+
1072
+ ; $1B+X
1073
+ sampleOutput ; ' 36 |
1074
+ prepareChannel 1 ; ' 178 | 254
1075
+ LD BC, $1080 ; prepare loop counter ' 10 |
1076
+ wait30 ; sync ' 30 |
1077
+
1078
+ ; $1C-4B+X
1079
+ .loop_ch1
1080
+ readAndMix16WhilePlay3 ; ' 240 |
1081
+ DEC B ; ' 4 | 254*3
1082
+ JP NZ, .loop_ch1 ; ' 10 |
1083
+
1084
+ ; $4C+X
1085
+ sampleOutput ; ' 36 |
1086
+ updateChannelData 1 ; update channel data ' 153 | 254
1087
+ wait65 ; sync ' 65 |
1088
+
1089
+
1090
+ ; LD A, (VCOUNTER)
1091
+ ; LD (DEBUG_3), A
1092
+
1093
+ ; PCM channel 2
1094
+ ; -------------
1095
+
1096
+ ; $4D+X
1097
+ sampleOutput ; ' 36 |
1098
+ prepareChannel 2 ; ' 178 | 254
1099
+ LD BC, $1080 ; prepare loop counter ' 10 |
1100
+ wait30 ; sync ' 30 |
1101
+
1102
+ ; $4E-7D+X
1103
+ .loop_ch2
1104
+ readAndMix16WhilePlay3 ; ' 240 |
1105
+ DEC B ; ' 4 | 254*3
1106
+ JP NZ, .loop_ch2 ; ' 10 |
1107
+
1108
+ ; $7E+X
1109
+ sampleOutput ; ' 36 |
1110
+ updateChannelData 2 ; update channel data ' 153 | 254
1111
+ wait65 ; sync ' 65 |
1112
+
1113
+
1114
+ ; LD A, (VCOUNTER)
1115
+ ; LD (DEBUG_4), A
1116
+
1117
+ ; PCM channel 3
1118
+ ; -------------
1119
+
1120
+ ; $7F+X
1121
+ sampleOutput ; ' 36 |
1122
+ prepareChannelAlt 3 ; ' 176 | 254
1123
+ LD BC, $1C80 ; prepare loop counter ' 10 |
1124
+ wait32 ; sync ' 32 |
1125
+
1126
+ ; $80-$B7+X
1127
+ .loop_ch3
1128
+ sampleOutput ; ' 36 |
1129
+ readMixAndUnsign ; mix/unsign 9 samples ' 46 |
1130
+ readMixAndUnsign ; ' 46 |
1131
+ readMixAndUnsign ; ' 46 | 254+12
1132
+ readMixAndUnsign ; ' 46 |
1133
+ readMixAndUnsign ; ' 46 |
1134
+
1135
+ sampleOutput ; +12 --> late ' 36 |
1136
+ readMixAndUnsign ; ' 46 |
1137
+ readMixAndUnsign ; ' 46 |
1138
+ readMixAndUnsign ; ' 46 | 254
1139
+ readMixAndUnsign ; ' 46 |
1140
+ wait8 ; sync ' 8 |
1141
+ DEC B ; ' 4 |
1142
+ JP NZ, .loop_ch3 ; ' 10 |
1143
+
1144
+ ; $B8+X
1145
+ sampleOutput ; ' 36 |
1146
+ readMixAndUnsign ; ' 46 |
1147
+ readMixAndUnsign ; ' 46 | 254
1148
+ readMixAndUnsign ; ' 46 |
1149
+ readMixAndUnsign ; ' 46 |
1150
+ wait34 ; ' 34 |
1151
+
1152
+ ; $B9+X
1153
+ sampleOutput ; ' 36 |
1154
+ updateChannelData 3 ; update channel data ' 153 | 254
1155
+ wait65 ; sync ' 65 |
1156
+
1157
+
1158
+ ; LD A, (VCOUNTER)
1159
+ ; LD (DEBUG_5), A
1160
+
1161
+ ; next write buffer
1162
+ ; -----------------
1163
+
1164
+ ; $BA+X
1165
+ next_write_buf
1166
+ sampleOutput ; ' 36 | 36
1167
+
1168
+ LD A, (STATUS) ; A = (STATUS) ' 13 |
1169
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
1170
+ LD (HL), $2B ; register = DAC enable ' 10 | 54 (90)
1171
+ INC L ; HL point on YM port1 ' 4 |
1172
+ AND $0F ; PCM is playing ? ' 7 |
1173
+ JP NZ, .still_pcm ; ' 10 |
1174
+
1175
+ LD A, (YM_2B_CNT) ; ' 13 |
1176
+ OR A ; ' 4 | 27 (117)
1177
+ JP Z, .no_pcm ; DAC enabled expired ? ' 10 |
1178
+
1179
+ DEC A ; decrement expiration ' 4 |
1180
+ LD (YM_2B_CNT), A ; ' 13 |
1181
+ LD A, $80 ; DAC enabled ' 7 | 34 (151)
1182
+ JP .set_dac ; assume still PCM ' 10 |
1183
+
1184
+ .still_pcm ; ' 90
1185
+ wait7 ; sync ' 7 |
1186
+ LD A, 3 ; set DAC ON expiration ' 7 | 27 (117)
1187
+ LD (YM_2B_CNT), A ; 4 frames to expire ' 13 |
1188
+
1189
+ wait17 ; sync ' 17 |
1190
+ LD A, $80 ; DAC enabled ' 7 | 34 (151)
1191
+ JP .set_dac ; assume still PCM ' 10 |
1192
+
1193
+ .no_pcm ; ' 117
1194
+ wait21 ; sync ' 21 |
1195
+ LD A, (YM_2B_SAV) ; use current DAC on ' 13 | 34 (151)
1196
+
1197
+ .set_dac ; ' 151
1198
+ LD (HL), A ; set DAC enabled ' 7 |
1199
+ DEC L ; HL point on YM port0 ' 4 | 11 (162)
1200
+
1201
+ EXX ; ' 4 |
1202
+ LD A, B ; A = read buffer high ' 4 |
1203
+ LD (READBUF+1), A ; save current read buf ' 13 | 25 (187)
1204
+ EXX ; ' 4 |
1205
+
1206
+ CP D ; prepare DAC write ' 4 |
1207
+ LD (HL), 0x2A ; write buf == read buf ' 10 | 24 (211)
1208
+ JP Z, .continu_pcm ; continu to fill pcm ' 10 |
1209
+
1210
+ INC D ; inc write addr ' 4 |
1211
+ RES 2, D ; write addr &= 0x03FF ' 8 | 42 (254-1)
1212
+ LD (WRITEBUF), DE ; save new write addr ' 20 |
1213
+ JP sync_frame ; ' 10 |
1214
+
1215
+ .continu_pcm
1216
+ INC D ; inc write addr ' 4 |
1217
+ RES 2, D ; write addr &= 0x03FF ' 8 | 42 (254-1)
1218
+ LD (WRITEBUF), DE ; save new write addr ' 20 |
1219
+ JP pcm_mix ; do pcm mix again ' 10 |
1220
+
1221
+ ; sync
1222
+ ; ----
1223
+
1224
+ ; $BB+X
1225
+ sync_frame ; DE point on write buf
1226
+
1227
+ ; LD A, (VCOUNTER)
1228
+ ; LD (DEBUG_6), A
1229
+
1230
+ sync_frame_loop
1231
+ sampleOutput ; ' 36 | (36)
1232
+
1233
+ wait62 ; sync ' 62 | (98)
1234
+
1235
+ LD HL, (IDLE_LOOP) ; ' 16 |
1236
+ INC HL ; increment idle loop ' 6 | 38 (136)
1237
+ LD (IDLE_LOOP), HL ; ' 16 |
1238
+
1239
+ LD A, (PENDING_FRM) ; A = frame to process ' 13 |
1240
+ OR A ; something to do ? ' 4 | 27 (163)
1241
+ JP NZ, .do_xgm ; do the XGM frame ' 10 |
1242
+
1243
+ LD A, (PROTECT_ARG) ; get BUS protect state ' 13 |
1244
+ OR A ; protecting ? ' 4 | 27 (190)
1245
+ JP NZ, .wait_dma ; wait for it ' 10 |
1246
+
1247
+ EXX ; ' 4 |
1248
+ LD A, B ; A = read buffer high ' 4 |
1249
+ LD (READBUF+1), A ; save current read buf ' 13 | 25 (215)
1250
+ EXX ; ' 4 |
1251
+
1252
+ ADD $1 ; ' 7 |
1253
+ RES 2, A ; read pos &= 0x03FF ' 8 |
1254
+ CP D ; pcm buffer empty ? ' 4 | 29 (244)
1255
+ JP Z, .do_pcm ; fill pcm ' 10 |
1256
+
1257
+ JP sync_frame_loop ; wait for a frame ' 10 | (254)
1258
+
1259
+ .wait_dma ; ' 190
1260
+ LD HL, (WAIT_LOOP) ; ' 16 |
1261
+ INC HL ; increment wait loop ' 6 | 38 (228)
1262
+ LD (WAIT_LOOP), HL ; ' 16 |
1263
+
1264
+ wait16 ; sync ' 16 |
1265
+ JP sync_frame ; wait for a frame ' 10 | 26 (254)
1266
+
1267
+ .do_pcm ; ' 244
1268
+ JP pcm_mix ; do pcm mix again ' 10 | (254)
1269
+
1270
+ .do_xgm ; ' 163
1271
+ wait81 ; sync ' 81 |
1272
+ LD DE, XGM_BUFFER ; DE point to XGM buf ' 10 | 91 (254)
1273
+
1274
+
1275
+ ; LD A, (VCOUNTER)
1276
+ ; LD (DEBUG_7), A
1277
+
1278
+ ; execute XGM command
1279
+ ; -------------------
1280
+
1281
+ ; $BC+X+Y
1282
+ execute_xgm
1283
+ sampleOutput ; ' 36 | (36)
1284
+
1285
+ LD A, (DE) ; A = command ' 7 |
1286
+ LD (.ld_hl_xx + 1), A ; set jump address ' 13 |
1287
+ INC E ; next command ' 4 | 44 (80)
1288
+ .ld_hl_xx ; ' |
1289
+ LD HL, (JUMP_TABLE) ; LD HL, (jt) ' 16 |
1290
+ JP (HL) ; ' 4 |
1291
+
1292
+
1293
+ ; next frame command
1294
+ ; ------------------
1295
+
1296
+ com_next_frame ; 00 ' 80
1297
+ JP xgm_done ; XGM frame done ' 10 | (90)
1298
+
1299
+
1300
+ ; PSG command
1301
+ ; -----------
1302
+
1303
+ com_psg_tone_w0 ; 10 ' 80
1304
+ wait126 ; sync ' 126 |
1305
+ LD HL, PSGPORT ; HL point on PSG port ' 10 | 146 (226)
1306
+ JP psg_tone_write0 ; ' 10 |
1307
+
1308
+ com_psg_tone_w1 ; 11 ' 80
1309
+ wait108 ; sync ' 108 |
1310
+ LD HL, PSGPORT ; HL point on PSG port ' 10 | 128 (208)
1311
+ JP psg_tone_write1 ; ' 10 |
1312
+
1313
+ com_psg_tone_w2 ; 12 ' 80
1314
+ wait90 ; sync ' 90 |
1315
+ LD HL, PSGPORT ; HL point on PSG port ' 10 | 110 (190)
1316
+ JP psg_tone_write2 ; ' 10 |
1317
+
1318
+ com_psg_tone_w3 ; 13 ' 80
1319
+ wait72 ; sync ' 72 |
1320
+ LD HL, PSGPORT ; HL point on PSG port ' 10 | 92 (172)
1321
+ JP psg_tone_write3 ; ' 10 |
1322
+
1323
+ com_psg_tone_w4 ; 14 ' 80
1324
+ wait54 ; sync ' 54 |
1325
+ LD HL, PSGPORT ; HL point on PSG port ' 10 | 74 (154)
1326
+ JP psg_tone_write4 ; ' 10 |
1327
+
1328
+ com_psg_tone_w5 ; 15 ' 80
1329
+ wait36 ; sync ' 36 |
1330
+ LD HL, PSGPORT ; HL point on PSG port ' 10 | 56 (136)
1331
+ JP psg_tone_write5 ; ' 10 |
1332
+
1333
+ com_psg_tone_w6 ; 16 ' 80
1334
+ wait18 ; sync ' 18 |
1335
+ LD HL, PSGPORT ; HL point on PSG port ' 10 | 38 (118)
1336
+ JP psg_tone_write6 ; ' 10 |
1337
+
1338
+ com_psg_tone_w7 ; 17 ' 80
1339
+ LD HL, PSGPORT ; HL point on PSG port ' 10 | 20 (100)
1340
+ JP psg_tone_write7 ; ' 10 |
1341
+
1342
+
1343
+ psg_tone_write7 ; ' 100
1344
+ LD A, (DE) ; A = PSG data ' 7 |
1345
+ INC E ; next data ' 4 | 18 (118)
1346
+ LD (HL), A ; write to PSG ' 7 |
1347
+
1348
+ psg_tone_write6
1349
+ LD A, (DE) ; A = PSG data ' 7 |
1350
+ INC E ; next data ' 4 | 18 (136)
1351
+ LD (HL), A ; write to PSG ' 7 |
1352
+
1353
+ psg_tone_write5
1354
+ LD A, (DE) ; A = PSG data ' 7 |
1355
+ INC E ; next data ' 4 | 18 (154)
1356
+ LD (HL), A ; write to PSG ' 7 |
1357
+
1358
+ psg_tone_write4
1359
+ LD A, (DE) ; A = PSG data ' 7 |
1360
+ INC E ; next data ' 4 | 18 (172)
1361
+ LD (HL), A ; write to PSG ' 7 |
1362
+
1363
+ psg_tone_write3
1364
+ LD A, (DE) ; A = PSG data ' 7 |
1365
+ INC E ; next data ' 4 | 18 (190)
1366
+ LD (HL), A ; write to PSG ' 7 |
1367
+
1368
+ psg_tone_write2
1369
+ LD A, (DE) ; A = PSG data ' 7 |
1370
+ INC E ; next data ' 4 | 18 (208)
1371
+ LD (HL), A ; write to PSG ' 7 |
1372
+
1373
+ psg_tone_write1
1374
+ LD A, (DE) ; A = PSG data ' 7 |
1375
+ INC E ; next data ' 4 | 18 (226)
1376
+ LD (HL), A ; write to PSG ' 7 |
1377
+
1378
+ psg_tone_write0
1379
+ LD A, (DE) ; A = PSG data ' 7 |
1380
+ INC E ; next data ' 4 | 18 (244)
1381
+ LD (HL), A ; write to PSG ' 7 |
1382
+
1383
+ JP execute_xgm ; ' 10 | (254)
1384
+
1385
+
1386
+ com_psg_env_w0 ; 18 ' 80
1387
+ wait72 ; sync ' 72 |
1388
+ LD HL, PSGPORT ; HL point on PSG port ' 10 | 102 (182)
1389
+ LD BC, PSG_ENV_SAV ; BC point on PSG save ' 10 |
1390
+ JP psg_env_write0 ; ' 10 |
1391
+
1392
+ com_psg_env_w1 ; 18 ' 80
1393
+ wait10 ; sync ' 10 |
1394
+ LD HL, PSGPORT ; HL point on PSG port ' 10 | 40 (120)
1395
+ LD BC, PSG_ENV_SAV ; BC point on PSG save ' 10 |
1396
+ JP psg_env_write1 ; ' 10 |
1397
+
1398
+ com_psg_env_w2 ; 18 ' 80
1399
+ wait154 ; sync ' 154 |
1400
+ LD HL, PSGPORT ; HL point on PSG port ' 10 | 174 (254)
1401
+ LD BC, PSG_ENV_SAV ; BC point on PSG save ' 10 |
1402
+
1403
+ sampleOutput ; ' 36 | (36)
1404
+
1405
+ wait12 ; sync ' 12 |
1406
+ JP psg_env_write2 ; ' 10 | 22 (58)
1407
+
1408
+ com_psg_env_w3 ; 18 ' 80
1409
+ wait110 ; sync ' 110 |
1410
+ LD HL, PSGPORT ; HL point on PSG port ' 10 | 130 (210)
1411
+ LD BC, PSG_ENV_SAV ; BC point on PSG save ' 10 |
1412
+
1413
+ psg_env_write3
1414
+ LD A, (DE) ; A = PSG data ' 7 |
1415
+ RLCA ; ' 4 |
1416
+ RLCA ; ' 4 |
1417
+ RLCA ; ' 4 |
1418
+ AND $3 ; A = channel number ' 7 | 41 (254-3)
1419
+ ADD (PSG_ENV_SAV & $FF) ; add offset ' 7 |
1420
+ LD C, A ; BC point on save ' 4 |
1421
+ wait4 ; sync ' 4 |
1422
+
1423
+ sampleOutput ; ' 36 | (36-3)
1424
+
1425
+ LD A, (DE) ; A = PSG data ' 7 |
1426
+ INC E ; next data ' 4 | 25 (58)
1427
+ LD (HL), A ; write to PSG ' 7 |
1428
+ LD (BC), A ; write to save ' 7 |
1429
+
1430
+ psg_env_write2 ; ' 58
1431
+ LD A, (DE) ; A = PSG data ' 7 |
1432
+ RLCA ; ' 4 |
1433
+ RLCA ; ' 4 |
1434
+ RLCA ; ' 4 |
1435
+ AND $3 ; A = channel number ' 7 |
1436
+ ADD (PSG_ENV_SAV & $FF) ; add offset ' 7 | 62 (120)
1437
+ LD C, A ; BC point on save ' 4 |
1438
+ LD A, (DE) ; A = PSG data ' 7 |
1439
+ INC E ; next data ' 4 |
1440
+ LD (HL), A ; write to PSG ' 7 |
1441
+ LD (BC), A ; write to save ' 7 |
1442
+
1443
+ psg_env_write1
1444
+ LD A, (DE) ; A = PSG data ' 7 |
1445
+ RLCA ; ' 4 |
1446
+ RLCA ; ' 4 |
1447
+ RLCA ; ' 4 |
1448
+ AND $3 ; A = channel number ' 7 |
1449
+ ADD (PSG_ENV_SAV & $FF) ; add offset ' 7 | 62 (182)
1450
+ LD C, A ; BC point on save ' 4 |
1451
+ LD A, (DE) ; A = PSG data ' 7 |
1452
+ INC E ; next data ' 4 |
1453
+ LD (HL), A ; write to PSG ' 7 |
1454
+ LD (BC), A ; write to save ' 7 |
1455
+
1456
+ psg_env_write0
1457
+ LD A, (DE) ; A = PSG data ' 7 |
1458
+ RLCA ; ' 4 |
1459
+ RLCA ; ' 4 |
1460
+ RLCA ; ' 4 |
1461
+ AND $3 ; A = channel number ' 7 |
1462
+ ADD (PSG_ENV_SAV & $FF) ; add offset ' 7 | 62 (244)
1463
+ LD C, A ; BC point on save ' 4 |
1464
+ LD A, (DE) ; A = PSG data ' 7 |
1465
+ INC E ; next data ' 4 |
1466
+ LD (HL), A ; write to PSG ' 7 |
1467
+ LD (BC), A ; write to save ' 7 |
1468
+
1469
+ JP execute_xgm ; ' 10 | (254)
1470
+
1471
+
1472
+ ; YM port0 command
1473
+ ; ----------------
1474
+
1475
+ com_ym_port0_w0 ; 20 ' 80
1476
+ wait36 ; sync ' 36 |
1477
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 66 (146)
1478
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
1479
+ JP ym_port_write0 ; ' 10 |
1480
+
1481
+ com_ym_port0_w1 ; 21 ' 80
1482
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
1483
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 | 30 (110)
1484
+ JP ym_port_write1 ; ' 10 |
1485
+
1486
+ com_ym_port0_w2 ; 22 ' 80
1487
+ wait52 ; sync ' 52 |
1488
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 82 (162)
1489
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
1490
+ JP ym_port_write2 ; ' 10 |
1491
+
1492
+ com_ym_port0_w3 ; 23 ' 80
1493
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
1494
+ LD BC, HL ; BC point on YM port0 ' 10 |
1495
+ INC BC ; BC point on YM port1 ' 6 | 36 (116)
1496
+ JP com_ym_port_w3 ; execute ' 10 |
1497
+
1498
+ com_ym_port0_w4 ; 24 ' 80
1499
+ wait144 ; sync ' 144 |
1500
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 178 (254+4)
1501
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
1502
+ EXX ; ' 4 |
1503
+ JP ym_port_write4 ; ' 10 |
1504
+
1505
+ com_ym_port0_w5 ; 25 ' 80
1506
+ wait52 ; sync ' 52 |
1507
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 82 (162)
1508
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
1509
+ JP ym_port_write5 ; ' 10 |
1510
+
1511
+ com_ym_port0_w6 ; 26 ' 80
1512
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
1513
+ LD BC, HL ; BC point on YM port0 ' 10 |
1514
+ INC BC ; BC point on YM port1 ' 6 | 36 (116)
1515
+ JP com_ym_port_w6 ; execute ' 10 |
1516
+
1517
+ com_ym_port0_w7 ; 27 ' 80
1518
+ wait144 ; sync ' 144 |
1519
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 178 (254+4)
1520
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
1521
+ EXX ; ' 4 |
1522
+ JP ym_port_write7 ; ' 10 |
1523
+
1524
+ com_ym_port0_w8 ; 28 ' 80
1525
+ wait52 ; sync ' 52 |
1526
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 82 (162)
1527
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
1528
+ JP ym_port_write8 ; ' 10 |
1529
+
1530
+ com_ym_port0_w9 ; 29 ' 80
1531
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
1532
+ LD BC, HL ; BC point on YM port0 ' 10 |
1533
+ INC BC ; BC point on YM port1 ' 6 | 36 (116)
1534
+ JP com_ym_port_w9 ; execute ' 10 |
1535
+
1536
+ com_ym_port0_wA ; 2A ' 80
1537
+ wait144 ; sync ' 144 |
1538
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 178 (254+4)
1539
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
1540
+ EXX ; ' 4 |
1541
+ JP ym_port_writeA ; ' 10 |
1542
+
1543
+ com_ym_port0_wB ; 2B ' 80
1544
+ wait52 ; sync ' 52 |
1545
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 82 (162)
1546
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
1547
+ JP ym_port_writeB ; ' 10 |
1548
+
1549
+ com_ym_port0_wC ; 2C ' 80
1550
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
1551
+ LD BC, HL ; BC point on YM port0 ' 10 |
1552
+ INC BC ; BC point on YM port1 ' 6 | 36 (116)
1553
+ JP com_ym_port_wC ; execute ' 10 |
1554
+
1555
+ com_ym_port0_wD ; 2D ' 80
1556
+ wait144 ; sync ' 144 |
1557
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 174 (254)
1558
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
1559
+ JP ym_port_writeD ; ' 10 |
1560
+
1561
+ com_ym_port0_wE ; 2E ' 80
1562
+ wait36 ; sync ' 36 |
1563
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 66 (146)
1564
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
1565
+ JP ym_port_writeE ; ' 10 |
1566
+
1567
+ com_ym_port0_wF ; 2F ' 80
1568
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
1569
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 | 30 (110)
1570
+ JP ym_port_writeF ; ' 10 |
1571
+
1572
+
1573
+ ; YM port2 command
1574
+ ; ----------------
1575
+
1576
+ com_ym_port2_w0 ; 30 ' 80
1577
+ wait36 ; sync ' 36 |
1578
+ LD HL, YMPORT2 ; HL point on YM port2 ' 10 | 66 (146)
1579
+ LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
1580
+ JP ym_port_write0 ; ' 10 |
1581
+
1582
+ com_ym_port2_w1 ; 31 ' 80
1583
+ LD HL, YMPORT2 ; HL point on YM port2 ' 10 |
1584
+ LD BC, YMPORT3 ; BC point on YM port3 ' 10 | 30 (110)
1585
+ JP ym_port_write1 ; ' 10 |
1586
+
1587
+ com_ym_port2_w2 ; 32 ' 80
1588
+ wait52 ; sync ' 52 |
1589
+ LD HL, YMPORT2 ; HL point on YM port2 ' 10 | 82 (162)
1590
+ LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
1591
+ JP ym_port_write2 ; ' 10 |
1592
+
1593
+ com_ym_port2_w3 ; 33 ' 80
1594
+ LD HL, YMPORT2 ; HL point on YM port2 ' 10 |
1595
+ LD BC, HL ; BC point on YM port2 ' 10 |
1596
+ INC BC ; BC point on YM port3 ' 6 | 36 (116)
1597
+ JP com_ym_port_w3 ; execute ' 10 |
1598
+
1599
+ com_ym_port2_w4 ; 34 ' 80
1600
+ wait144 ; sync ' 144 |
1601
+ LD HL, YMPORT2 ; HL point on YM port0 ' 10 | 178 (254+4)
1602
+ LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
1603
+ EXX ; ' 4 |
1604
+ JP ym_port_write4 ; ' 10 |
1605
+
1606
+ com_ym_port2_w5 ; 35 ' 80
1607
+ wait52 ; sync ' 52 |
1608
+ LD HL, YMPORT2 ; HL point on YM port2 ' 10 | 82 (162)
1609
+ LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
1610
+ JP ym_port_write5 ; ' 10 |
1611
+
1612
+ com_ym_port2_w6 ; 36 ' 80
1613
+ LD HL, YMPORT2 ; HL point on YM port2 ' 10 |
1614
+ LD BC, HL ; BC point on YM port2 ' 10 |
1615
+ INC BC ; BC point on YM port3 ' 6 | 36 (116)
1616
+ JP com_ym_port_w6 ; execute ' 10 |
1617
+
1618
+ com_ym_port2_w7 ; 37 ' 80
1619
+ wait144 ; sync ' 144 |
1620
+ LD HL, YMPORT2 ; HL point on YM port0 ' 10 | 178 (254+4)
1621
+ LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
1622
+ EXX ; ' 4 |
1623
+ JP ym_port_write7 ; ' 10 |
1624
+
1625
+ com_ym_port2_w8 ; 38 ' 80
1626
+ wait52 ; sync ' 52 |
1627
+ LD HL, YMPORT2 ; HL point on YM port2 ' 10 | 82 (162)
1628
+ LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
1629
+ JP ym_port_write8 ; ' 10 |
1630
+
1631
+ com_ym_port2_w9 ; 39 ' 80
1632
+ LD HL, YMPORT2 ; HL point on YM port2 ' 10 |
1633
+ LD BC, HL ; BC point on YM port2 ' 10 |
1634
+ INC BC ; BC point on YM port3 ' 6 | 36 (116)
1635
+ JP com_ym_port_w9 ; execute ' 10 |
1636
+
1637
+ com_ym_port2_wA ; 3A ' 80
1638
+ wait144 ; sync ' 144 |
1639
+ LD HL, YMPORT2 ; HL point on YM port0 ' 10 | 178 (254+4)
1640
+ LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
1641
+ EXX ; ' 4 |
1642
+ JP ym_port_writeA ; ' 10 |
1643
+
1644
+ com_ym_port2_wB ; 3B ' 80
1645
+ wait52 ; sync ' 52 |
1646
+ LD HL, YMPORT2 ; HL point on YM port2 ' 10 | 82 (162)
1647
+ LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
1648
+ JP ym_port_writeB ; ' 10 |
1649
+
1650
+ com_ym_port2_wC ; 3C ' 80
1651
+ LD HL, YMPORT2 ; HL point on YM port2 ' 10 |
1652
+ LD BC, HL ; BC point on YM port2 ' 10 |
1653
+ INC BC ; BC point on YM port3 ' 6 | 36 (116)
1654
+ JP com_ym_port_wC ; execute ' 10 |
1655
+
1656
+ com_ym_port2_wD ; 3D ' 80
1657
+ wait144 ; sync ' 144 |
1658
+ LD HL, YMPORT2 ; HL point on YM port2 ' 10 | 174 (254)
1659
+ LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
1660
+ JP ym_port_writeD ; ' 10 |
1661
+
1662
+ com_ym_port2_wE ; 3E ' 80
1663
+ wait36 ; sync ' 36 |
1664
+ LD HL, YMPORT2 ; HL point on YM port2 ' 10 | 66 (146)
1665
+ LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
1666
+ JP ym_port_writeE ; ' 10 |
1667
+
1668
+ com_ym_port2_wF ; 3F ' 80
1669
+ LD HL, YMPORT2 ; HL point on YM port2 ' 10 |
1670
+ LD BC, YMPORT3 ; BC point on YM port3 ' 10 | 30 (110)
1671
+ JP ym_port_writeF ; ' 10 |
1672
+
1673
+
1674
+ com_ym_port_w3 ; ' 116
1675
+ LD A, (DE) ; A = YM reg num ' 7 |
1676
+ LD (HL), A ; write reg num to YM ' 7 |
1677
+ INC E ; next data ' 4 |
1678
+ LD A, (DE) ; A = YM reg data ' 7 | 36 (152)
1679
+ INC E ; next data ' 4 |
1680
+ LD (BC), A ; write data to YM ' 7 |
1681
+ JP ym_port_write2 ; ' 10 | (162)
1682
+
1683
+ com_ym_port_w6 ; ' 116
1684
+ LD A, (DE) ; A = YM reg num ' 7 |
1685
+ LD (HL), A ; write reg num to YM ' 7 |
1686
+ INC E ; next data ' 4 |
1687
+ LD A, (DE) ; A = YM reg data ' 7 | 36 (152)
1688
+ INC E ; next data ' 4 |
1689
+ LD (BC), A ; write data to YM ' 7 |
1690
+ JP ym_port_write5 ; ' 10 | (162)
1691
+
1692
+ com_ym_port_w9 ; ' 116
1693
+ LD A, (DE) ; A = YM reg num ' 7 |
1694
+ LD (HL), A ; write reg num to YM ' 7 |
1695
+ INC E ; next data ' 4 |
1696
+ LD A, (DE) ; A = YM reg data ' 7 | 36 (152)
1697
+ INC E ; next data ' 4 |
1698
+ LD (BC), A ; write data to YM ' 7 |
1699
+ JP ym_port_write8 ; ' 10 | (162)
1700
+
1701
+ com_ym_port_wC ; ' 116
1702
+ LD A, (DE) ; A = YM reg num ' 7 |
1703
+ LD (HL), A ; write reg num to YM ' 7 |
1704
+ INC E ; next data ' 4 |
1705
+ LD A, (DE) ; A = YM reg data ' 7 | 36 (152)
1706
+ INC E ; next data ' 4 |
1707
+ LD (BC), A ; write data to YM ' 7 |
1708
+ JP ym_port_writeB ; ' 10 | (162)
1709
+
1710
+
1711
+ ym_port_write1 ; ' 110
1712
+ LD A, (DE) ; A = YM reg num ' 7 |
1713
+ LD (HL), A ; write reg num to YM ' 7 |
1714
+ INC E ; next data ' 4 |
1715
+ LD A, (DE) ; A = YM reg data ' 7 | 36 (146)
1716
+ INC E ; next data ' 4 |
1717
+ LD (BC), A ; write data to YM ' 7 |
1718
+
1719
+ ym_port_write0
1720
+ LD A, (DE) ; A = YM reg num ' 7 |
1721
+ waitYMReady ; wait YM to be ready ' 30 |
1722
+ LD (HL), A ; write reg num to YM ' 7 | 66 (212)
1723
+ INC E ; next data ' 4 |
1724
+ LD A, (DE) ; A = YM reg data ' 7 |
1725
+ INC E ; next data ' 4 |
1726
+ LD (BC), A ; write to YM ' 7 |
1727
+
1728
+ EXX ; switch to HL' (port0) ' 4 |
1729
+ .wait ; ' |
1730
+ BIT 7, (HL) ; test YM ready bit ' 12 |
1731
+ JP NZ, .wait ; wait while busy ' 10 | 40 (252)
1732
+ ; ' |
1733
+ LD (HL), $2A ; restore DAC write ' 10 |
1734
+ EXX ; switch back ' 4 |
1735
+
1736
+ JP execute_xgm ; +8 cycles here ' 10 | (254+8)
1737
+
1738
+ ym_port_writeF ; ' 110
1739
+ LD A, (DE) ; A = YM reg num ' 7 |
1740
+ LD (HL), A ; write reg num to YM ' 7 |
1741
+ INC E ; next data ' 4 |
1742
+ LD A, (DE) ; A = YM reg data ' 7 | 36 (146)
1743
+ INC E ; next data ' 4 |
1744
+ LD (BC), A ; write data to YM ' 7 |
1745
+
1746
+ ym_port_writeE
1747
+ LD A, (DE) ; A = YM reg num ' 7 |
1748
+ waitYMReady ; wait YM to be ready ' 30 |
1749
+ LD (HL), A ; write reg num to YM ' 7 | 66 (212)
1750
+ INC E ; next data ' 4 |
1751
+ LD A, (DE) ; A = YM reg data ' 7 |
1752
+ INC E ; next data ' 4 |
1753
+ LD (BC), A ; write to YM ' 7 |
1754
+
1755
+ wait12 ; sync ' 12 |
1756
+ waitYMReady ; wait YM to be ready ' 30 | 42 (254)
1757
+
1758
+ ym_port_writeD
1759
+ sampleOutputSafe ; ' 46 | (46)
1760
+
1761
+ LD A, (DE) ; A = YM reg num ' 7 |
1762
+ waitYMReady ; wait YM to be ready ' 30 |
1763
+ LD (HL), A ; write reg num to YM ' 7 | 66 (112)
1764
+ INC E ; next data ' 4 |
1765
+ LD A, (DE) ; A = YM reg data ' 7 |
1766
+ INC E ; next data ' 4 |
1767
+ LD (BC), A ; write to YM ' 7 |
1768
+
1769
+ ;ym_port_writeC
1770
+ LD A, (DE) ; A = YM reg num ' 7 |
1771
+ waitYMReady ; wait YM to be ready ' 30 |
1772
+ LD (HL), A ; write reg num to YM ' 7 | 66 (178)
1773
+ INC E ; next data ' 4 |
1774
+ LD A, (DE) ; A = YM reg data ' 7 |
1775
+ INC E ; next data ' 4 |
1776
+ LD (BC), A ; write to YM ' 7 |
1777
+
1778
+ ym_port_writeB
1779
+ LD A, (DE) ; A = YM reg num ' 7 |
1780
+ waitYMReady ; wait YM to be ready ' 30 |
1781
+ LD (HL), A ; write reg num to YM ' 7 | 66 (244)
1782
+ INC E ; next data ' 4 |
1783
+ LD A, (DE) ; A = YM reg data ' 7 |
1784
+ INC E ; next data ' 4 |
1785
+ LD (BC), A ; write to YM ' 7 |
1786
+
1787
+ EXX ; switch to HL' (port0) ' 4 | (248)
1788
+ .wait ; ' |
1789
+ BIT 7, (HL) ; test YM ready bit ' 12 |
1790
+ JP NZ, .wait ; wait while busy ' 10 | 22 (258+14)
1791
+
1792
+ ym_port_writeA ; ' 4
1793
+ LD (HL), $2A ; restore DAC write ' 10 |
1794
+ LD A, (BC) ; ' 7 |
1795
+ INC BC ; play sample ' 6 | 42 (46)
1796
+ RES 2, B ; ' 8 |
1797
+ LD (DE), A ; ' 7 |
1798
+ EXX ; ' 4 |
1799
+
1800
+ LD A, (DE) ; A = YM reg num ' 7 |
1801
+ waitYMReady ; wait YM to be ready ' 30 |
1802
+ LD (HL), A ; write reg num to YM ' 7 | 66 (112)
1803
+ INC E ; next data ' 4 |
1804
+ LD A, (DE) ; A = YM reg data ' 7 |
1805
+ INC E ; next data ' 4 |
1806
+ LD (BC), A ; write to YM ' 7 |
1807
+
1808
+ ;ym_port_write9
1809
+ LD A, (DE) ; A = YM reg num ' 7 |
1810
+ waitYMReady ; wait YM to be ready ' 30 |
1811
+ LD (HL), A ; write reg num to YM ' 7 | 66 (178)
1812
+ INC E ; next data ' 4 |
1813
+ LD A, (DE) ; A = YM reg data ' 7 |
1814
+ INC E ; next data ' 4 |
1815
+ LD (BC), A ; write to YM ' 7 |
1816
+
1817
+ ym_port_write8
1818
+ LD A, (DE) ; A = YM reg num ' 7 |
1819
+ waitYMReady ; wait YM to be ready ' 30 |
1820
+ LD (HL), A ; write reg num to YM ' 7 | 66 (244)
1821
+ INC E ; next data ' 4 |
1822
+ LD A, (DE) ; A = YM reg data ' 7 |
1823
+ INC E ; next data ' 4 |
1824
+ LD (BC), A ; write to YM ' 7 |
1825
+
1826
+ EXX ; switch to HL' (port0) ' 4 | (248)
1827
+ .wait ; ' |
1828
+ BIT 7, (HL) ; test YM ready bit ' 12 |
1829
+ JP NZ, .wait ; wait while busy ' 10 | 22 (258+14)
1830
+
1831
+ ym_port_write7 ; ' 4
1832
+ LD (HL), $2A ; restore DAC write ' 10 |
1833
+ LD A, (BC) ; ' 7 |
1834
+ INC BC ; play sample ' 6 | 42 (46)
1835
+ RES 2, B ; ' 8 |
1836
+ LD (DE), A ; ' 7 |
1837
+ EXX ; ' 4 |
1838
+
1839
+ LD A, (DE) ; A = YM reg num ' 7 |
1840
+ waitYMReady ; wait YM to be ready ' 30 |
1841
+ LD (HL), A ; write reg num to YM ' 7 | 66 (112)
1842
+ INC E ; next data ' 4 |
1843
+ LD A, (DE) ; A = YM reg data ' 7 |
1844
+ INC E ; next data ' 4 |
1845
+ LD (BC), A ; write to YM ' 7 |
1846
+
1847
+ ;ym_port_write6
1848
+ LD A, (DE) ; A = YM reg num ' 7 |
1849
+ waitYMReady ; wait YM to be ready ' 30 |
1850
+ LD (HL), A ; write reg num to YM ' 7 | 66 (178)
1851
+ INC E ; next data ' 4 |
1852
+ LD A, (DE) ; A = YM reg data ' 7 |
1853
+ INC E ; next data ' 4 |
1854
+ LD (BC), A ; write to YM ' 7 |
1855
+
1856
+ ym_port_write5
1857
+ LD A, (DE) ; A = YM reg num ' 7 |
1858
+ waitYMReady ; wait YM to be ready ' 30 |
1859
+ LD (HL), A ; write reg num to YM ' 7 | 66 (244)
1860
+ INC E ; next data ' 4 |
1861
+ LD A, (DE) ; A = YM reg data ' 7 |
1862
+ INC E ; next data ' 4 |
1863
+ LD (BC), A ; write to YM ' 7 |
1864
+
1865
+ EXX ; switch to HL' (port0) ' 4 | (248)
1866
+ .wait ; ' |
1867
+ BIT 7, (HL) ; test YM ready bit ' 12 |
1868
+ JP NZ, .wait ; wait while busy ' 10 | 22 (258+14)
1869
+
1870
+ ym_port_write4 ; ' 4
1871
+ LD (HL), $2A ; restore DAC write ' 10 |
1872
+ LD A, (BC) ; ' 7 |
1873
+ INC BC ; play sample ' 6 | 42 (46)
1874
+ RES 2, B ; ' 8 |
1875
+ LD (DE), A ; ' 7 |
1876
+ EXX ; ' 4 |
1877
+
1878
+ LD A, (DE) ; A = YM reg num ' 7 |
1879
+ waitYMReady ; wait YM to be ready ' 30 |
1880
+ LD (HL), A ; write reg num to YM ' 7 | 66 (112)
1881
+ INC E ; next data ' 4 |
1882
+ LD A, (DE) ; A = YM reg data ' 7 |
1883
+ INC E ; next data ' 4 |
1884
+ LD (BC), A ; write to YM ' 7 |
1885
+
1886
+ ;ym_port_write3
1887
+ LD A, (DE) ; A = YM reg num ' 7 |
1888
+ waitYMReady ; wait YM to be ready ' 30 |
1889
+ LD (HL), A ; write reg num to YM ' 7 | 66 (178)
1890
+ INC E ; next data ' 4 |
1891
+ LD A, (DE) ; A = YM reg data ' 7 |
1892
+ INC E ; next data ' 4 |
1893
+ LD (BC), A ; write to YM ' 7 |
1894
+
1895
+ ym_port_write2
1896
+ LD A, (DE) ; A = YM reg num ' 7 |
1897
+ waitYMReady ; wait YM to be ready ' 30 |
1898
+ LD (HL), A ; write reg num to YM ' 7 | 66 (244)
1899
+ INC E ; next data ' 4 |
1900
+ LD A, (DE) ; A = YM reg data ' 7 |
1901
+ INC E ; next data ' 4 |
1902
+ LD (BC), A ; write to YM ' 7 |
1903
+
1904
+ EXX ; switch to HL' (port0) ' 4 | (248)
1905
+ .wait ; ' |
1906
+ BIT 7, (HL) ; test YM ready bit ' 12 |
1907
+ JP NZ, .wait ; wait while busy ' 10 | 22 (258+14)
1908
+
1909
+ LD (HL), $2A ; restore DAC write ' 10 |
1910
+ LD A, (BC) ; ' 7 |
1911
+ INC BC ; play sample ' 6 | 42 (46)
1912
+ RES 2, B ; ' 8 |
1913
+ LD (DE), A ; ' 7 |
1914
+ EXX ; ' 4 |
1915
+
1916
+ wait24 ; sync ' 24 | 54 (100)
1917
+ waitYMReady ; wait YM to be ready ' 30 |
1918
+
1919
+ JP ym_port_write1 ; execute next ' 10 | (110)
1920
+
1921
+
1922
+ ; YM KEY command
1923
+ ; --------------
1924
+
1925
+ com_ym_key_w0 ; 40 ' 80
1926
+ wait44 ; sync ' 44 |
1927
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
1928
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 | 84 (164)
1929
+ LD (HL), $28 ; set reg num to YM ' 10 |
1930
+ JP ym_key_write0 ; ' 10 |
1931
+
1932
+ com_ym_key_w1 ; 41 ' 80
1933
+ wait4 ; sync ' 4 |
1934
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
1935
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 | 44 (124)
1936
+ LD (HL), $28 ; set reg num to YM ' 10 |
1937
+ JP ym_key_write1 ; ' 10 |
1938
+
1939
+ com_ym_key_w2 ; 43 ' 80
1940
+ wait134 ; sync ' 134 |
1941
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
1942
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
1943
+ LD (HL), $28 ; set reg num to YM ' 10 | 174 (254)
1944
+ JP ym_key_write2 ; ' 10 |
1945
+
1946
+ com_ym_key_w3 ; 44 ' 80
1947
+ wait64 ; sync ' 64 |
1948
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
1949
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
1950
+ LD (HL), $28 ; set reg num to YM ' 10 | 104 (184)
1951
+ JP ym_key_write3 ; ' 10 |
1952
+
1953
+ com_ym_key_w4 ; 45 ' 80
1954
+ wait24 ; sync ' 24 |
1955
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
1956
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
1957
+ LD (HL), $28 ; set reg num to YM ' 10 | 64 (144)
1958
+ JP ym_key_write4 ; ' 10 |
1959
+
1960
+ com_ym_key_w5 ; 46 ' 80
1961
+ wait154 ; sync ' 174 |
1962
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 174 (254)
1963
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
1964
+
1965
+ sampleOutputSafe ; ' 46 | (46)
1966
+
1967
+ wait16 ; sync ' 16 |
1968
+ waitYMReadyFast ; wait YM to be ready ' 22 |
1969
+ LD (HL), $28 ; set reg num to YM ' 10 | 58 (104)
1970
+ JP ym_key_write5 ; ' 10 |
1971
+
1972
+
1973
+ ym_key_write1 ; ' 124
1974
+ LD A, (DE) ; A = YM key data ' 7 |
1975
+ INC E ; next data ' 4 |
1976
+ waitYMReadyFast ; wait YM to be ready ' 22 | 40 (164)
1977
+ LD (BC), A ; write to YM ' 7 |
1978
+
1979
+ ym_key_write0 ; ' 164
1980
+ LD A, (DE) ; A = YM key data ' 7 |
1981
+ INC E ; next data ' 4 |
1982
+ waitYMReadyFast ; wait YM to be ready ' 22 | 40 (204)
1983
+ LD (BC), A ; write to YM ' 7 |
1984
+
1985
+ wait8 ; sync ' 8 |
1986
+ waitYMReadyFast ; wait YM to be ready ' 22 | 40 (244)
1987
+ LD (HL), $2A ; restore DAC write ' 10 |
1988
+
1989
+ JP execute_xgm ; ' 10 | (254)
1990
+
1991
+ ym_key_write5 ; ' 104
1992
+ LD A, (DE) ; A = YM key data ' 7 |
1993
+ INC E ; next data ' 4 |
1994
+ waitYMReadyFast ; wait YM to be ready ' 22 | 40 (144)
1995
+ LD (BC), A ; write to YM ' 7 |
1996
+
1997
+ ym_key_write4 ; ' 144
1998
+ LD A, (DE) ; A = YM key data ' 7 |
1999
+ INC E ; next data ' 4 |
2000
+ waitYMReadyFast ; wait YM to be ready ' 22 | 40 (184)
2001
+ LD (BC), A ; write to YM ' 7 |
2002
+
2003
+ ym_key_write3 ; ' 184
2004
+ LD A, (DE) ; A = YM key data ' 7 |
2005
+ INC E ; next data ' 4 |
2006
+ waitYMReadyFast ; wait YM to be ready ' 22 | 40 (224)
2007
+ LD (BC), A ; write to YM ' 7 |
2008
+
2009
+ wait8 ; sync ' 8 |
2010
+ waitYMReadyFast ; wait YM to be ready ' 22 | 30 (254)
2011
+
2012
+ ym_key_write2
2013
+ sampleOutputSafe ; ' 46 | (46)
2014
+
2015
+ wait8 ; sync ' 8 |
2016
+ waitYMReadyFast ; wait YM to be ready ' 22 | 40 (86)
2017
+ LD (HL), $28 ; restore write to key ' 10 |
2018
+
2019
+ LD A, (DE) ; A = YM key data ' 7 |
2020
+ INC DE ; next data ' 6 |
2021
+ waitYMReadyFast ; wait YM to be ready ' 22 | 40 (126)
2022
+ LD (BC), A ; write to YM ' 7 |
2023
+
2024
+ .write1
2025
+ LD A, (DE) ; A = YM key data ' 7 |
2026
+ INC E ; next data ' 4 |
2027
+ waitYMReadyFast ; wait YM to be ready ' 22 | 40 (166)
2028
+ LD (BC), A ; write to YM ' 7 |
2029
+
2030
+ .write0
2031
+ LD A, (DE) ; A = YM key data ' 7 |
2032
+ INC E ; next data ' 4 |
2033
+ waitYMReadyFast ; wait YM to be ready ' 22 | 40 (206)
2034
+ LD (BC), A ; write to YM ' 7 |
2035
+
2036
+ wait7 ; sync ' 7 |
2037
+ waitYMReadyFast ; wait YM to be ready ' 22 | 39 (245)
2038
+ LD (HL), $2A ; restore DAC write ' 10 |
2039
+
2040
+ JP execute_xgm ; ' 10 | (254+1)
2041
+
2042
+
2043
+ ; PCM command
2044
+ ; -----------
2045
+
2046
+ com_pcm_p0_ch0 ; 50 ' 80
2047
+ LD C, 0 ; C = prio ' 7 |
2048
+ JP com_pcm_ch0 ; execute PCM com ' 10 | 17 (97)
2049
+
2050
+ com_pcm_p1_ch0 ; 54 ' 80
2051
+ LD C, 1 ; C = prio ' 7 |
2052
+ JP com_pcm_ch0 ; execute PCM com ' 10 | 17 (97)
2053
+
2054
+ com_pcm_p2_ch0 ; 58 ' 80
2055
+ LD C, 2 ; C = prio ' 7 |
2056
+ JP com_pcm_ch0 ; execute PCM com ' 10 | 17 (97)
2057
+
2058
+ com_pcm_p3_ch0 ; 5C ' 80
2059
+ LD C, 3 ; C = prio ' 7 |
2060
+ JP com_pcm_ch0 ; execute PCM com ' 10 | 17 (97)
2061
+
2062
+ com_pcm_p0_ch1 ; 51 ' 80
2063
+ LD C, 0 ; C = prio ' 7 |
2064
+ JP com_pcm_ch1 ; execute PCM com ' 10 | 17 (97)
2065
+
2066
+ com_pcm_p1_ch1 ; 55 ' 80
2067
+ LD C, 1 ; C = prio ' 7 |
2068
+ JP com_pcm_ch1 ; execute PCM com ' 10 | 17 (97)
2069
+
2070
+ com_pcm_p2_ch1 ; 59 ' 80
2071
+ LD C, 2 ; C = prio ' 7 |
2072
+ JP com_pcm_ch1 ; execute PCM com ' 10 | (119)
2073
+
2074
+ com_pcm_p3_ch1 ; 5D ' 80
2075
+ LD C, 3 ; C = prio ' 7 |
2076
+ JP com_pcm_ch1 ; execute PCM com ' 10 | (119)
2077
+
2078
+ com_pcm_p0_ch2 ; 52 ' 80
2079
+ LD C, 0 ; C = prio ' 7 |
2080
+ JP com_pcm_ch2 ; execute PCM com ' 10 | (119)
2081
+
2082
+ com_pcm_p1_ch2 ; 56 ' 80
2083
+ LD C, 1 ; C = prio ' 7 |
2084
+ JP com_pcm_ch2 ; execute PCM com ' 10 | (119)
2085
+
2086
+ com_pcm_p2_ch2 ; 5A ' 80
2087
+ LD C, 2 ; C = prio ' 7 |
2088
+ JP com_pcm_ch2 ; execute PCM com ' 10 | (119)
2089
+
2090
+ com_pcm_p3_ch2 ; 5E ' 80
2091
+ LD C, 3 ; C = prio ' 7 |
2092
+ JP com_pcm_ch2 ; execute PCM com ' 10 | (119)
2093
+
2094
+ com_pcm_p0_ch3 ; 53 ' 80
2095
+ LD C, 0 ; C = prio ' 7 |
2096
+ JP com_pcm_ch3 ; execute PCM com ' 10 | (119)
2097
+
2098
+ com_pcm_p1_ch3 ; 57 ' 80
2099
+ LD C, 1 ; C = prio ' 7 |
2100
+ JP com_pcm_ch3 ; execute PCM com ' 10 | (119)
2101
+
2102
+ com_pcm_p2_ch3 ; 5B ' 80
2103
+ LD C, 2 ; C = prio ' 7 |
2104
+ JP com_pcm_ch3 ; execute PCM com ' 10 | (119)
2105
+
2106
+ com_pcm_p3_ch3 ; 5F ' 80
2107
+ LD C, 3 ; C = prio ' 7 |
2108
+ JP com_pcm_ch3 ; execute PCM com ' 10 | (119)
2109
+
2110
+
2111
+ com_pcm_ch0 ; ' 97
2112
+ handlePCMCommandXGM 0 ; handle command ' 142 |
2113
+ wait4 ; sync ' 4 | 156 (254-1)
2114
+ JP execute_xgm ; ' 10 |
2115
+
2116
+ com_pcm_ch1 ; ' 97
2117
+ handlePCMCommandXGM 1 ; handle command ' 142 |
2118
+ wait4 ; sync ' 4 | 156 (254-1)
2119
+ JP execute_xgm ; ' 10 |
2120
+
2121
+ com_pcm_ch2 ; ' 97
2122
+ handlePCMCommandXGM 2 ; handle command ' 142 |
2123
+ wait4 ; sync ' 4 | 156 (254-1)
2124
+ JP execute_xgm ; ' 10 |
2125
+
2126
+ com_pcm_ch3 ; ' 97
2127
+ handlePCMCommandXGM 3 ; handle command ' 142 |
2128
+ wait4 ; sync ' 4 | 156 (254-1)
2129
+ JP execute_xgm ; ' 10 |
2130
+
2131
+
2132
+
2133
+ ; STATE command
2134
+ ; -------------
2135
+
2136
+ com_state_w0 ; 60 ' 80
2137
+ wait114 ; sync ' 114 |
2138
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 131 (211)
2139
+ JP state_w0 ; execute ' 10 |
2140
+
2141
+ com_state_w1 ; 61 ' 80
2142
+ wait81 ; sync ' 81 |
2143
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 98 (178)
2144
+ JP state_w1 ; execute ' 10 |
2145
+
2146
+ com_state_w2 ; 62 ' 80
2147
+ wait48 ; sync ' 48 |
2148
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 65 (145)
2149
+ JP state_w2 ; execute ' 10 |
2150
+
2151
+ com_state_w3 ; 63 ' 80
2152
+ wait15 ; sync ' 15 |
2153
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 32 (112)
2154
+ JP state_w3 ; execute ' 10 |
2155
+
2156
+ com_state_w4 ; 64 ' 80
2157
+ wait174 ; sync ' 174 | (254)
2158
+ sampleOutput ; sample output ' 36 | (36)
2159
+
2160
+ wait26 ; sync ' 26 |
2161
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 43 (79)
2162
+ JP state_w4 ; execute ' 10 |
2163
+
2164
+ com_state_w5 ; 65 ' 80
2165
+ wait157 ; sync ' 157 |
2166
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 174 (254)
2167
+ JP state_w5 ; execute ' 10 |
2168
+
2169
+ com_state_w6 ; 66 ' 80
2170
+ wait124 ; sync ' 124 |
2171
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 141 (221)
2172
+ JP state_w6 ; execute ' 10 |
2173
+
2174
+ com_state_w7 ; 67 ' 80
2175
+ wait91 ; sync ' 91 |
2176
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 108 (188)
2177
+ JP state_w7 ; execute ' 10 |
2178
+
2179
+ com_state_w8 ; 68 ' 80
2180
+ wait58 ; sync ' 58 |
2181
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 75 (155)
2182
+ JP state_w8 ; execute ' 10 |
2183
+
2184
+ com_state_w9 ; 69 ' 80
2185
+ wait25 ; sync ' 25 |
2186
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 42 (122)
2187
+ JP state_w9 ; execute ' 10 |
2188
+
2189
+ com_state_wA ; 6A ' 80
2190
+ wait174 ; sync ' 174 | (254)
2191
+ sampleOutput ; sample output ' 36 | (36)
2192
+
2193
+ wait36 ; sync ' 36 |
2194
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 53 (89)
2195
+ JP state_wA ; execute ' 10 |
2196
+
2197
+ com_state_wB ; 6B ' 80
2198
+ wait157 ; sync ' 157 |
2199
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 174 (254)
2200
+ JP state_wB ; execute ' 10 |
2201
+
2202
+ com_state_wC ; 6C ' 80
2203
+ wait124 ; sync ' 124 |
2204
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 141 (221)
2205
+ JP state_wC ; execute ' 10 |
2206
+
2207
+ com_state_wD ; 6D ' 80
2208
+ wait91 ; sync ' 91 |
2209
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 108 (188)
2210
+ JP state_wD ; execute ' 10 |
2211
+
2212
+ com_state_wE ; 6E ' 80
2213
+ wait58 ; sync ' 58 |
2214
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 75 (155)
2215
+ JP state_wE ; execute ' 10 |
2216
+
2217
+ com_state_wF ; 6F ' 80
2218
+ wait35 ; sync ' 35 |
2219
+ LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 42 (122)
2220
+
2221
+ state_wF ; ' 122
2222
+ LD A, (DE) ; A = state register ' 7 |
2223
+ INC E ; next data ' 4 |
2224
+ LD L, A ; HL point on save ' 4 | 33 (155)
2225
+ LD A, (DE) ; A = state value ' 7 |
2226
+ INC E ; next data ' 4 |
2227
+ LD (HL), A ; write to save ' 7 |
2228
+
2229
+ state_wE
2230
+ LD A, (DE) ; A = state register ' 7 |
2231
+ INC E ; next data ' 4 |
2232
+ LD L, A ; HL point on save ' 4 | 33 (188)
2233
+ LD A, (DE) ; A = state value ' 7 |
2234
+ INC E ; next data ' 4 |
2235
+ LD (HL), A ; write to save ' 7 |
2236
+
2237
+ state_wD
2238
+ LD A, (DE) ; A = state register ' 7 |
2239
+ INC E ; next data ' 4 |
2240
+ LD L, A ; HL point on save ' 4 | 33 (221)
2241
+ LD A, (DE) ; A = state value ' 7 |
2242
+ INC E ; next data ' 4 |
2243
+ LD (HL), A ; write to save ' 7 |
2244
+
2245
+ state_wC
2246
+ LD A, (DE) ; A = state register ' 7 |
2247
+ INC E ; next data ' 4 |
2248
+ LD L, A ; HL point on save ' 4 | 33 (254)
2249
+ LD A, (DE) ; A = state value ' 7 |
2250
+ INC E ; next data ' 4 |
2251
+ LD (HL), A ; write to save ' 7 |
2252
+
2253
+ state_wB
2254
+ sampleOutput ; sample output ' 36 |
2255
+ wait20 ; wait ' 20 | (56)
2256
+
2257
+ LD A, (DE) ; A = state register ' 7 |
2258
+ INC E ; next data ' 4 |
2259
+ LD L, A ; HL point on save ' 4 | 33 (89)
2260
+ LD A, (DE) ; A = state value ' 7 |
2261
+ INC E ; next data ' 4 |
2262
+ LD (HL), A ; write to save ' 7 |
2263
+
2264
+ state_wA
2265
+ LD A, (DE) ; A = state register ' 7 |
2266
+ INC E ; next data ' 4 |
2267
+ LD L, A ; HL point on save ' 4 | 33 (122)
2268
+ LD A, (DE) ; A = state value ' 7 |
2269
+ INC E ; next data ' 4 |
2270
+ LD (HL), A ; write to save ' 7 |
2271
+
2272
+ state_w9
2273
+ LD A, (DE) ; A = state register ' 7 |
2274
+ INC E ; next data ' 4 |
2275
+ LD L, A ; HL point on save ' 4 | 33 (155)
2276
+ LD A, (DE) ; A = state value ' 7 |
2277
+ INC E ; next data ' 4 |
2278
+ LD (HL), A ; write to save ' 7 |
2279
+
2280
+ state_w8
2281
+ LD A, (DE) ; A = state register ' 7 |
2282
+ INC E ; next data ' 4 |
2283
+ LD L, A ; HL point on save ' 4 | 33 (188)
2284
+ LD A, (DE) ; A = state value ' 7 |
2285
+ INC E ; next data ' 4 |
2286
+ LD (HL), A ; write to save ' 7 |
2287
+
2288
+ state_w7
2289
+ LD A, (DE) ; A = state register ' 7 |
2290
+ INC E ; next data ' 4 |
2291
+ LD L, A ; HL point on save ' 4 | 33 (221)
2292
+ LD A, (DE) ; A = state value ' 7 |
2293
+ INC E ; next data ' 4 |
2294
+ LD (HL), A ; write to save ' 7 |
2295
+
2296
+ state_w6
2297
+ LD A, (DE) ; A = state register ' 7 |
2298
+ INC E ; next data ' 4 |
2299
+ LD L, A ; HL point on save ' 4 | 33 (254)
2300
+ LD A, (DE) ; A = state value ' 7 |
2301
+ INC E ; next data ' 4 |
2302
+ LD (HL), A ; write to save ' 7 |
2303
+
2304
+ state_w5
2305
+ sampleOutput ; sample output ' 36 |
2306
+ wait10 ; wait ' 10 | (46)
2307
+
2308
+ LD A, (DE) ; A = state register ' 7 |
2309
+ INC E ; next data ' 4 |
2310
+ LD L, A ; HL point on save ' 4 | 33 (79)
2311
+ LD A, (DE) ; A = state value ' 7 |
2312
+ INC E ; next data ' 4 |
2313
+ LD (HL), A ; write to save ' 7 |
2314
+
2315
+ state_w4
2316
+ LD A, (DE) ; A = state register ' 7 |
2317
+ INC E ; next data ' 4 |
2318
+ LD L, A ; HL point on save ' 4 | 33 (112)
2319
+ LD A, (DE) ; A = state value ' 7 |
2320
+ INC E ; next data ' 4 |
2321
+ LD (HL), A ; write to save ' 7 |
2322
+
2323
+ state_w3
2324
+ LD A, (DE) ; A = state register ' 7 |
2325
+ INC E ; next data ' 4 |
2326
+ LD L, A ; HL point on save ' 4 | 33 (145)
2327
+ LD A, (DE) ; A = state value ' 7 |
2328
+ INC E ; next data ' 4 |
2329
+ LD (HL), A ; write to save ' 7 |
2330
+
2331
+ state_w2
2332
+ LD A, (DE) ; A = state register ' 7 |
2333
+ INC E ; next data ' 4 |
2334
+ LD L, A ; HL point on save ' 4 | 33 (178)
2335
+ LD A, (DE) ; A = state value ' 7 |
2336
+ INC E ; next data ' 4 |
2337
+ LD (HL), A ; write to save ' 7 |
2338
+
2339
+ state_w1
2340
+ LD A, (DE) ; A = state register ' 7 |
2341
+ INC E ; next data ' 4 |
2342
+ LD L, A ; HL point on save ' 4 | 33 (211)
2343
+ LD A, (DE) ; A = state value ' 7 |
2344
+ INC E ; next data ' 4 |
2345
+ LD (HL), A ; write to save ' 7 |
2346
+
2347
+ state_w0
2348
+ LD A, (DE) ; A = state register ' 7 |
2349
+ INC E ; next data ' 4 |
2350
+ LD L, A ; HL point on save ' 4 | 33 (244)
2351
+ LD A, (DE) ; A = state value ' 7 |
2352
+ INC E ; next data ' 4 |
2353
+ LD (HL), A ; write to save ' 7 |
2354
+
2355
+ JP execute_xgm ; ' 10 | (254)
2356
+
2357
+
2358
+ ; NULL command
2359
+ ; ------------
2360
+
2361
+ com_null ; 01-0F / 60-7C ' 80
2362
+ wait164 ; sync ' 164 |
2363
+ JP execute_xgm ; ' 10 | 174 (254)
2364
+
2365
+
2366
+ ; EXTRA FRAME command
2367
+ ; -------------------
2368
+
2369
+ com_extra_frm ; 7D ' 80
2370
+
2371
+ LD A, $1 ; ' 7 |
2372
+ LD (MODIFYING_F), A ; we are modifying variable ' 13 | 20 (100)
2373
+
2374
+ LD A, (PENDING_FRM) ; ' 13 |
2375
+ INC A ; force process 1 more frame ' 4 | 30 (130)
2376
+ LD (PENDING_FRM), A ; ' 13 |
2377
+
2378
+ XOR A ; ' 4 |
2379
+ LD (MODIFYING_F), A ; no more modifying variable ' 13 | 17 (147)
2380
+
2381
+ LD HL, ELAPSED ; ' 10 | 10 (157)
2382
+
2383
+ LD A, (HL) ; ' 7 |
2384
+ SUB A, #1 ; ' 7 |
2385
+ LD (HL), A ; ' 7 |
2386
+ INC L ; ' 4 |
2387
+ LD A, (HL) ; ' 7 |
2388
+ SBC A, #0 ; fix elapsed frame (24 bit) ' 7 | 71 (228)
2389
+ LD (HL), A ; ' 7 |
2390
+ INC L ; ' 4 |
2391
+ LD A, (HL) ; ' 7 |
2392
+ SBC A, #0 ; ' 7 |
2393
+ LD (HL), A ; ' 7 |
2394
+
2395
+ wait16 ; sync ' 16 | 26 (254)
2396
+ JP execute_xgm ; ' 10 |
2397
+
2398
+
2399
+ ; LOOP command
2400
+ ; ------------
2401
+
2402
+ com_loop ; 7E ' 80
2403
+
2404
+ LD A, (REM_LOOP) ; A = remaining loop ' 13 |
2405
+ DEC A ; 0 mean infinite loop ' 4 |
2406
+ LD (REM_LOOP), A ; A = remaining loop ' 13 | 40 (120)
2407
+ JP NZ, .continue ; ' 10 |
2408
+
2409
+ LD HL, COMMAND ; HL = COMMAND ' 10 | 25 (145)
2410
+ SET XGM_PAUSE_SFT, (HL) ; request pause/end XGM ' 15 |
2411
+
2412
+ LD HL, STATUS ; HL = STATUS ' 10 | 25 (170)
2413
+ RES XGM_PLAY_SFT, (HL) ; clear play status ' 15 |
2414
+
2415
+ INC E ; next param ' 4 |
2416
+ INC E ; ' 4 | 12 (182)
2417
+ INC E ; ' 4 |
2418
+
2419
+ wait62 ; sync ' 62 |
2420
+ JP execute_xgm ; ' 10 | 72 (254)
2421
+
2422
+ .continue
2423
+ LD A, (DE) ; A = loop addr b7-b0 ' 7 |
2424
+ LD L, A ; L = loop addr b7-b0 ' 4 |
2425
+ INC E ; next param ' 4 |
2426
+ LD A, (DE) ; A = loop addr b15-b8 ' 7 | 30 (150)
2427
+ LD H, A ; HL = loop addr b15-b0 ' 4 |
2428
+ INC E ; next param ' 4 |
2429
+
2430
+ LD BC, (XGM_ARG_A+0) ; BC = XGM base addr (ML) ' 20 |
2431
+ ADD HL, BC ; HL = XGM base addr + loop ' 11 | 47 (197)
2432
+ LD (XGM_ADDR+0), HL ; set new XGM addr (ML) ' 16 |
2433
+
2434
+ LD A, (DE) ; A = loop addr b23-b16 ' 7 |
2435
+ LD HL, XGM_ARG_A+2 ; HL point XGM base adr H ' 10 |
2436
+ ADC (HL) ; A = XGM base addr + loop ' 7 | 41 (238)
2437
+ INC E ; next param ' 4 |
2438
+ LD (XGM_ADDR+2), A ; set new XGM addr (H) ' 13 |
2439
+
2440
+ XOR A ; force end frame ' 4 |
2441
+ LD (DE), A ; after loop taken ' 7 | 11 (249)
2442
+
2443
+ JP execute_xgm ; +5 cycles delay here.. ' 10 | (254+5)
2444
+
2445
+
2446
+ ; END XGM command
2447
+ ; ---------------
2448
+
2449
+ com_end ; 7F ' 80
2450
+ LD HL, COMMAND ; HL = COMMAND ' 10 | 25 (105)
2451
+ SET XGM_PAUSE_SFT, (HL) ; request pause/end XGM ' 15 |
2452
+
2453
+ LD HL, STATUS ; HL = STATUS ' 10 | 25 (130)
2454
+ RES XGM_PLAY_SFT, (HL) ; clear play status ' 15 |
2455
+
2456
+ wait114 ; sync ' 114 |
2457
+ JP execute_xgm ; ' 10 | 124 (254)
2458
+
2459
+
2460
+ ; $BC+X+Y+Z
2461
+ do_xgm_again ; ' 135
2462
+ DEC L ; HL point on MODIFYING_F ' 4 |
2463
+ LD (HL), $0 ; no more modifying ' 10 | 14 (149)
2464
+
2465
+ wait95 ; sync ' 95 |
2466
+ JP main_loop ; restart loop (prep xgm) ' 10 | 105 (254)
2467
+
2468
+
2469
+
2470
+ xgm_stopped
2471
+ LD (HL), $0 ; clear PENDING_FRM ' xx
2472
+ JP xgm_stopped_cont ; continue ' xx
2473
+
2474
+
2475
+ ; $BC+X+Y+Z
2476
+ xgm_done ; ' 90
2477
+
2478
+ ; LD A, (VCOUNTER)
2479
+ ; LD (DEBUG_8), A
2480
+
2481
+ LD HL, MODIFYING_F ; ' 10 |
2482
+ LD (HL), $1 ; we are modifying variable ' 10 | 24 (114)
2483
+ INC L ; HL point on PENDING_FRM ' 4 |
2484
+
2485
+ DEC (HL) ; still have frame to process ? ' 11 |
2486
+ JP M, xgm_stopped ; for safety on 68k clear ' xx
2487
+ JP NZ, do_xgm_again ; do XGM process again ' 10 | 21 (135)
2488
+
2489
+ xgm_stopped_cont
2490
+ DEC L ; HL point on MODIFYING_F ' 4 |
2491
+ LD (HL), $0 ; no more modifying variable ' 10 | 14 (149)
2492
+
2493
+
2494
+ ; LD A, (VCOUNTER)
2495
+ ; LD (DEBUG_9), A
2496
+
2497
+ ; execute external command
2498
+ ; ------------------------
2499
+
2500
+ ; $BC+X+Y+Z
2501
+ external_com ; ' 149
2502
+ LD SP, STACK ; restore stack ' 10 |
2503
+ LD HL, COMMAND ; HL point on COMMAND ' 10 | 20 (159)
2504
+
2505
+ .chk_xgm_play
2506
+ BIT XGM_PLAY_SFT, (HL) ; play XGM command ? ' 12 |
2507
+ JP Z, .chk_xgm_resume ; ' 10 | 22 (181)
2508
+
2509
+ RES XGM_PLAY_SFT, (HL) ; clear command ' 15 |
2510
+ INC L ; ' 4 |
2511
+ INC L ; HL point on status ' 4 | 38 (219)
2512
+ SET XGM_PLAY_SFT, (HL) ; set play status ' 15 |
2513
+
2514
+ LD HL, (XGM_ARG_A) ; set new XGM address ' 16 |
2515
+ LD (XGM_ADDR), HL ; ' 16 | 58 (277)
2516
+ LD A, (XGM_ARG_A+2) ; ' 13 |
2517
+ LD (XGM_ADDR+2),A ; ' 13 |
2518
+
2519
+ LD A, (LOOP_ARG) ; set remaining loop ' 13 |
2520
+ LD (REM_LOOP),A ; ' 13 | 26 (303)
2521
+
2522
+ LD HL, #0000 ; clear elapsed frame ' 10 |
2523
+ LD (ELAPSED), HL ; (24 bit counter) ' 16 |
2524
+ XOR A ; ' 4 | 43 (346)
2525
+ LD (ELAPSED+2), A ; ' 13 |
2526
+
2527
+ LD HL, COMMAND ; restore HL ' 10 |
2528
+ JP external_com_pcm ; do PCM commands ' 10 | 20 (254+112)
2529
+ ; +112 cycles here, ignore
2530
+
2531
+ .chk_xgm_resume
2532
+ BIT XGM_RESUME_SFT, (HL) ; play XGM command ? ' 12 |
2533
+ JP Z, .chk_xgm_stop ; ' 10 | 22 (203)
2534
+
2535
+ RES XGM_RESUME_SFT, (HL) ; clear command ' 15 |
2536
+ INC L ; ' 4 |
2537
+ INC L ; HL point on status ' 4 | 38 (241)
2538
+ SET XGM_PLAY_SFT, (HL) ; set play status ' 15 |
2539
+
2540
+ LD DE, YM_RR_SAV ; DE point on save state ' 10 |
2541
+ LD SP, STACK ; set STACK ' 10 | 20 (254+7)
2542
+ ; +7 cycles here, ignore
2543
+
2544
+ CALL loadState ; load state ' 140+ | (140)
2545
+
2546
+ wait94 ; sync ' 94 |
2547
+ LD HL, COMMAND ; restore HL ' 10 | 114 (254)
2548
+ JP external_com_pcm ; do PCM commands ' 10 |
2549
+
2550
+ .chk_xgm_stop
2551
+ BIT XGM_PAUSE_SFT, (HL) ; pause/end XGM command ? ' 12 |
2552
+ JP Z, .chk_pcm0_pre ; ' 10 | 22 (225)
2553
+
2554
+ RES XGM_PAUSE_SFT, (HL) ; clear command ' 15 |
2555
+ INC L ; ' 4 |
2556
+ INC L ; HL point on status ' 4 | 38 (263)
2557
+ RES XGM_PLAY_SFT, (HL) ; clear play status ' 15 |
2558
+
2559
+ LD DE, YM_RR_OFF ; DE point on off state ' 10 |
2560
+ LD SP, STACK ; set STACK ' 10 | 20 (254+29)
2561
+ ; +29 cycles here, ignore
2562
+
2563
+ CALL loadState ; stop music ' 140+ | (140)
2564
+
2565
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
2566
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 | 20 (160)
2567
+
2568
+ LD (HL), $28 ; set reg num to YM ' 10 |
2569
+ waitYMReadyFast ; wait YM to be ready ' 22 | 32 (192)
2570
+
2571
+ XOR A ; A = $00 ' 4 |
2572
+ LD (BC), A ; key off - all channel ' 7 |
2573
+ INC A ; A = $01 ' 4 | 37 (229)
2574
+ waitYMReadyFast ; wait YM to be ready ' 22 |
2575
+
2576
+ LD (BC), A ; key off - all channel ' 7 |
2577
+ waitYMReadyFast ; wait YM to be ready ' 22 | 29 (254+4)
2578
+
2579
+ sampleOutputSafe ; *** sample output **** ' 46 | (46+4)
2580
+
2581
+ waitYMReadyFast ; wait YM to be ready ' 22 |
2582
+ LD (HL), $28 ; set reg num to YM ' 10 |
2583
+ LD A, $02 ; A = $02 ' 7 | 61 (111)
2584
+ waitYMReadyFast ; wait YM to be ready ' 22 |
2585
+
2586
+ LD (BC), A ; key off - all channel ' 7 |
2587
+ ADD $2 ; A = $04 ' 7 | 36 (147)
2588
+ waitYMReadyFast ; wait YM to be ready ' 22 |
2589
+
2590
+ LD (BC), A ; key off - all channel ' 7 |
2591
+ INC A ; A = $05 ' 4 | 33 (180)
2592
+ waitYMReadyFast ; wait YM to be ready ' 22 |
2593
+
2594
+ LD (BC), A ; key off - all channel ' 7 |
2595
+ INC A ; A = $06 ' 4 | 33 (213)
2596
+ waitYMReadyFast ; wait YM to be ready ' 22 |
2597
+
2598
+ LD (BC), A ; key off - all channel ' 7 |
2599
+ waitYMReadyFast ; wait YM to be ready ' 22 | 39 (252)
2600
+ LD (HL), $2A ; restore DAC write ' 10 |
2601
+
2602
+ LD HL, COMMAND ; restore HL ' 10 |
2603
+ JP external_com_pcm ; continue ' 10 | 20 (254+18)
2604
+ ; +18 cycles here, ignore
2605
+
2606
+ .chk_pcm0_pre ; ' 225
2607
+ LD HL, COMMAND ; restore HL ' 10 |
2608
+ wait19 ; sync ' 19 | 29 (254)
2609
+
2610
+ ; $BD+X+Y+Z
2611
+ external_com_pcm
2612
+ sampleOutput ; *** sample output **** ' 36 | (36)
2613
+
2614
+ .chk_pcm0
2615
+ BIT CH0_SFT, (HL) ; play PCM0 command ? ' 12 |
2616
+ JP Z, .chk_pcm1 ; ' 10 | 22 (58)
2617
+
2618
+ RES CH0_SFT, (HL) ; clear command ' 15 | (73)
2619
+
2620
+ handlePCMCommand 0 ; handle play PCM command ' 157 | 167 (240)
2621
+ LD HL, COMMAND ; restore HL ' 10 |
2622
+
2623
+ wait14 ; sync ' 14 | (254)
2624
+
2625
+ sampleOutput ; *** sample output **** ' 36 | (36)
2626
+
2627
+ wait22 ; sync ' 22 | (58)
2628
+
2629
+ .chk_pcm1
2630
+ BIT CH1_SFT, (HL) ; play PCM1 command ? ' 12 |
2631
+ JP Z, .chk_pcm2 ; ' 10 | 22 (80)
2632
+
2633
+ RES CH1_SFT, (HL) ; clear command ' 15 | (95)
2634
+
2635
+ handlePCMCommand 1 ; handle play PCM command ' 157 | (254-2)
2636
+
2637
+ sampleOutput ; *** sample output **** ' 36 | (36-2)
2638
+
2639
+ wait36 ; sync ' 36 | 46 (80)
2640
+ LD HL, COMMAND ; restore HL ' 10 |
2641
+
2642
+ .chk_pcm2
2643
+ BIT CH2_SFT, (HL) ; play PCM2 command ? ' 12 |
2644
+ JP Z, .chk_pcm3 ; ' 10 | 22 (102)
2645
+
2646
+ RES CH2_SFT, (HL) ; clear command ' 15 | (117)
2647
+
2648
+ handlePCMCommand 2 ; handle play PCM command ' 157 | (254+20)
2649
+
2650
+ sampleOutput ; *** sample output **** ' 36 | (36+20)
2651
+
2652
+ wait36 ; sync ' 36 | 46 (102)
2653
+ LD HL, COMMAND ; restore HL ' 10 |
2654
+
2655
+ .chk_pcm3
2656
+ BIT CH3_SFT, (HL) ; play PCM3 command ? ' 12 |
2657
+ JP Z, ext_com_done ; ' 10 | 22 (124)
2658
+
2659
+ RES CH3_SFT, (HL) ; clear command ' 15 | (139)
2660
+
2661
+ handlePCMCommand 3 ; handle play PCM command ' 157 | (254+42)
2662
+
2663
+ sampleOutput ; *** sample output **** ' 36 | (36+42)
2664
+
2665
+ wait46 ; sync ' 46 | (124)
2666
+
2667
+ ; $BD+X+Y+Z
2668
+ ext_com_done ; ' 124
2669
+ LD BC, STATUS ; BC point on STATUS ' 10 |
2670
+ LD A, (BC) ; A = STATUS ' 7 | 24 (148)
2671
+ AND $F0 ; clear PCM play status ' 7 |
2672
+
2673
+ LD HL, (ID_TABLE+0) ; HL = null PCM addr ' 16 |
2674
+ LD DE, (PCM_ADDR+(0*8)) ; DE = PCM ch0 addr ' 20 |
2675
+ SBC HL, DE ; HL == DE ? ' 15 | 63 (211)
2676
+ JR Z, .ch0_silent ; ch0 is not playing ' 12 |
2677
+
2678
+ OR A, $01 ; set play status for ch0 ' +2
2679
+
2680
+ .ch0_silent
2681
+ EX AF, AF' ; preserve AF ' 4 |
2682
+ wait35 ; sync ' 35 | 39 (254-4)
2683
+
2684
+ ; $BE+X+Y+Z
2685
+ sampleOutput ; sample output ' 36-4 | (36)
2686
+ EX AF, AF' ; restore AF ' 4 |
2687
+
2688
+ LD HL, (ID_TABLE+0) ; HL = null PCM addr ' 16 |
2689
+ LD DE, (PCM_ADDR+(1*8)) ; DE = PCM ch1 addr ' 20 |
2690
+ SBC HL, DE ; HL == DE ? ' 15 | 63 (99)
2691
+ JR Z, .ch1_silent ; ch1 is not playing ' 12 |
2692
+
2693
+ OR A, $02 ; set play status for ch1 ' +2
2694
+
2695
+ .ch1_silent
2696
+ LD HL, (ID_TABLE+0) ; HL = null PCM addr ' 16 |
2697
+ LD DE, (PCM_ADDR+(2*8)) ; DE = PCM ch2 addr ' 20 |
2698
+ SBC HL, DE ; HL == DE ? ' 15 | 63 (162)
2699
+ JR Z, .ch2_silent ; ch2 is not playing ' 12 |
2700
+
2701
+ OR A, $04 ; set play status for ch2 ' +2
2702
+
2703
+ .ch2_silent
2704
+ LD HL, (ID_TABLE+0) ; HL = null PCM addr ' 16 |
2705
+ LD DE, (PCM_ADDR+(3*8)) ; DE = PCM ch3 addr ' 20 |
2706
+ SBC HL, DE ; HL == DE ? ' 15 | 63 (225)
2707
+ JR Z, .ch3_silent ; ch3 is not playing ' 12 |
2708
+
2709
+ OR A, $08 ; set play status for ch3 ' +2
2710
+
2711
+ .ch3_silent
2712
+ LD (BC), A ; set new status ' 7 | (229)
2713
+
2714
+ LD A, (PROTECT_ARG) ; get BUS protect state ' 13 |
2715
+ OR A ; no protecting ? ' 4 | 27 (254+2)
2716
+ JP Z, main_loop ; process next frame ' 10 |
2717
+ ; +2 cycles here, ignore...
2718
+
2719
+ ; frame done
2720
+ ;
2721
+ ; 1 frame of PCM sample (256 bytes) is ~287 lines.
2722
+ ;
2723
+ ; NTSC: we should be <= 0xE8 to respect frame time here and we need to update PCM buffer 0.9 time per frame
2724
+ ; so we have a free PCM mix frame from time to time.
2725
+ ; Median (X+Y+Z) should be < 0x2A (< 42) plus some lines from the free PCM mix
2726
+ ;
2727
+ ; PAL: we should be <= 0118 to respect frame time here but we need to update PCM buffer 1.1 time per frame
2728
+ ; so we have a penalty PCM mix frame from time to time.
2729
+ ; Median (X+Y+Z) should be < 0x5A (< 90) minus some lines for the extra PCM mix
2730
+ ; -------------------------------------------------------------------------------------
2731
+
2732
+
2733
+ ; LD A, (VCOUNTER)
2734
+ ; LD (DEBUG_A), A
2735
+
2736
+ ; BUS protection wait (to avoid BUS contention with DMA)
2737
+ ;
2738
+ ; $BF+X+Y+Z
2739
+
2740
+ bus_protect_wait
2741
+ sampleOutput ; *** sample output *** ' 36 | (36)
2742
+
2743
+ wait105 ; sync ' 105 | (141)
2744
+
2745
+ LD A, (PROTECT_ARG) ; get BUS protect state ' 13 |
2746
+ OR A ; no more protecting ? ' 4 | 27 (168)
2747
+ JP Z, .continue ; continue ' 10 |
2748
+
2749
+ LD HL, (IDLE_LOOP) ; ' 16 |
2750
+ INC HL ; increment idle loop ' 6 | 38 (206)
2751
+ LD (IDLE_LOOP), HL ; ' 16 |
2752
+
2753
+ LD HL, (WAIT_LOOP) ; ' 16 |
2754
+ INC HL ; increment wait loop ' 6 | 38 (244)
2755
+ LD (WAIT_LOOP), HL ; ' 16 |
2756
+
2757
+ JP bus_protect_wait ; wait until bus is ok ' 10 | (254)
2758
+
2759
+ .continue ; ' 168
2760
+
2761
+ ; LD A, (VCOUNTER)
2762
+ ; LD (DEBUG_B), A
2763
+
2764
+ wait76 ; sync ' 76 |
2765
+ JP main_loop ; process next frame ' 10 | 86 (254)
2766
+
2767
+
2768
+
2769
+ ; ############################## functions ################################
2770
+
2771
+ INCLUDE "z80_fct.i80" ; basic functions
2772
+
2773
+
2774
+ ; loadState
2775
+ ; ---------
2776
+ ; ? -> HL -> ?
2777
+ ; ? -> BC -> ?
2778
+ ; reg source -> DE -> ?
2779
+ ;
2780
+ ; load the YM and PSG state
2781
+ ; = 8 samples + 140 cycles
2782
+
2783
+ loadState
2784
+
2785
+ sampleOutput ; *** sample output **** ' 36 | (36)
2786
+
2787
+ LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
2788
+ LD BC, YMPORT1 ; BC point on YM port1 ' 10 | 20 (56)
2789
+
2790
+ CALL loadYMState ; load YM state ' 188+ | (244)
2791
+
2792
+ LD HL, YMPORT2 ; HL point on YM port2 ' 10 |
2793
+ LD BC, YMPORT3 ; BC point on YM port3 ' 10 | 20 (254+10)
2794
+
2795
+ sampleOutputSafe ; *** sample output **** ' 46 | (46+10)
2796
+
2797
+ CALL loadYMState ; load YM state ' 188+ | (244)
2798
+
2799
+ LD HL, PSGPORT ; HL point on PSG ' 10 | (254)
2800
+
2801
+ sampleOutputSafe ; *** sample output **** ' 46 | (46+10)
2802
+
2803
+ JP loadPSGState ; load PSG state ' 10+94 | (140)
2804
+
2805
+
2806
+ ; loadYMState
2807
+ ; -----------
2808
+ ; YMPORT0/2 -> HL
2809
+ ; YMPORT1/3 -> BC
2810
+ ; reg source -> DE -> ?
2811
+ ;
2812
+ ; load the YM RR state
2813
+ ; = 4 samples (244 cycles)
2814
+
2815
+ loadYMState ; ' 56
2816
+
2817
+ waitYMReady ; wait YM to be ready ' 30 |
2818
+ LD (HL), $80 ; set reg num to YM ' 10 |
2819
+ LD A, (DE) ; get saved value ' 7 |
2820
+ INC E ; next ' 4 | 62 (118)
2821
+ wait4 ; wait YM to be ready ' 4 |
2822
+ LD (BC), A ; restore state ' 7 |
2823
+
2824
+ waitYMReady ; wait YM to be ready ' 30 |
2825
+ LD (HL), $81 ; set reg num to YM ' 10 |
2826
+ LD A, (DE) ; get saved value ' 7 | 62 (180)
2827
+ INC E ; next ' 4 |
2828
+ wait4 ; wait YM to be ready ' 4 |
2829
+ LD (BC), A ; restore state ' 7 |
2830
+
2831
+ waitYMReady ; wait YM to be ready ' 30 |
2832
+ LD (HL), $82 ; set reg num to YM ' 10 |
2833
+ LD A, (DE) ; get saved value ' 7 | 62 (242)
2834
+ INC E ; next ' 4 |
2835
+ wait4 ; wait YM to be ready ' 4 |
2836
+ LD (BC), A ; restore state ' 7 |
2837
+
2838
+ EXX ; ' 4 | (246)
2839
+
2840
+ .wait1
2841
+ BIT 7, (HL) ; test YM ready bit ' 12 |
2842
+ JP NZ, .wait1 ; wait while busy ' 10 | 22 (254+14)
2843
+
2844
+ LD (HL), $2A ; ' 10 |
2845
+ LD A, (BC) ; ' 7 |
2846
+ INC BC ; *** sample output **** ' 6 | 38 (52)
2847
+ RES 2, B ; ' 8 |
2848
+ LD (DE), A ; ' 7 |
2849
+
2850
+ .wait2
2851
+ BIT 7, (HL) ; test YM ready bit ' 12 |
2852
+ JP NZ, .wait2 ; wait while busy ' 10 | 22 (74)
2853
+
2854
+ EXX ; ' 4 | (78)
2855
+
2856
+ LD (HL), $84 ; set reg num to YM ' 10 |
2857
+ LD A, (DE) ; get saved value ' 7 |
2858
+ INC E ; next ' 4 | 32 (110)
2859
+ wait4 ; wait YM to be ready ' 4 |
2860
+ LD (BC), A ; restore state ' 7 |
2861
+
2862
+ waitYMReady ; wait YM to be ready ' 30 |
2863
+ LD (HL), $85 ; set reg num to YM ' 10 |
2864
+ LD A, (DE) ; get saved value ' 7 | 62 (172)
2865
+ INC E ; next ' 4 |
2866
+ wait4 ; wait YM to be ready ' 4 |
2867
+ LD (BC), A ; restore state ' 7 |
2868
+
2869
+ waitYMReady ; wait YM to be ready ' 30 |
2870
+ LD (HL), $86 ; set reg num to YM ' 10 |
2871
+ LD A, (DE) ; get saved value ' 7 | 62 (234)
2872
+ INC E ; next ' 4 |
2873
+ wait4 ; wait YM to be ready ' 4 |
2874
+ LD (BC), A ; restore state ' 7 |
2875
+
2876
+ EXX ; ' 4 | (238)
2877
+
2878
+ .wait3
2879
+ BIT 7, (HL) ; test YM ready bit ' 12 |
2880
+ JP NZ, .wait3 ; wait while busy ' 10 | 22 (254+6)
2881
+
2882
+ LD (HL), $2A ; ' 10 |
2883
+ LD A, (BC) ; ' 7 |
2884
+ INC BC ; *** sample output **** ' 6 | 38 (44)
2885
+ RES 2, B ; ' 8 |
2886
+ LD (DE), A ; ' 7 |
2887
+
2888
+ .wait4
2889
+ BIT 7, (HL) ; test YM ready bit ' 12 |
2890
+ JP NZ, .wait4 ; wait while busy ' 10 | 22 (66)
2891
+
2892
+ EXX ; ' 4 | (78)
2893
+ wait8 ; sync ' 8 |
2894
+
2895
+ LD (HL), $88 ; set reg num to YM ' 10 |
2896
+ LD A, (DE) ; get saved value ' 7 |
2897
+ INC E ; next ' 4 | 32 (110)
2898
+ wait4 ; wait YM to be ready ' 4 |
2899
+ LD (BC), A ; restore state ' 7 |
2900
+
2901
+ waitYMReady ; wait YM to be ready ' 30 |
2902
+ LD (HL), $89 ; set reg num to YM ' 10 |
2903
+ LD A, (DE) ; get saved value ' 7 | 62 (172)
2904
+ INC E ; next ' 4 |
2905
+ wait4 ; wait YM to be ready ' 4 |
2906
+ LD (BC), A ; restore state ' 7 |
2907
+
2908
+ waitYMReady ; wait YM to be ready ' 30 |
2909
+ LD (HL), $8A ; set reg num to YM ' 10 |
2910
+ LD A, (DE) ; get saved value ' 7 | 62 (234)
2911
+ INC E ; next ' 4 |
2912
+ wait4 ; wait YM to be ready ' 4 |
2913
+ LD (BC), A ; restore state ' 7 |
2914
+
2915
+ EXX ; ' 4 | (238)
2916
+
2917
+ .wait5
2918
+ BIT 7, (HL) ; test YM ready bit ' 12 |
2919
+ JP NZ, .wait5 ; wait while busy ' 10 | 22 (254+6)
2920
+
2921
+ LD (HL), $2A ; ' 10 |
2922
+ LD A, (BC) ; ' 7 |
2923
+ INC BC ; *** sample output **** ' 6 | 38 (44)
2924
+ RES 2, B ; ' 8 |
2925
+ LD (DE), A ; ' 7 |
2926
+
2927
+ .wait6
2928
+ BIT 7, (HL) ; test YM ready bit ' 12 |
2929
+ JP NZ, .wait6 ; wait while busy ' 10 | 22 (66)
2930
+
2931
+ EXX ; ' 4 | (78)
2932
+ wait8 ; sync ' 8 |
2933
+
2934
+ LD (HL), $8C ; set reg num to YM ' 10 |
2935
+ LD A, (DE) ; get saved value ' 7 |
2936
+ INC E ; next ' 4 | 32 (110)
2937
+ wait4 ; wait YM to be ready ' 4 |
2938
+ LD (BC), A ; restore state ' 7 |
2939
+
2940
+ waitYMReady ; wait YM to be ready ' 30 |
2941
+ LD (HL), $8D ; set reg num to YM ' 10 |
2942
+ LD A, (DE) ; get saved value ' 7 | 62 (172)
2943
+ INC E ; next ' 4 |
2944
+ wait4 ; wait YM to be ready ' 4 |
2945
+ LD (BC), A ; restore state ' 7 |
2946
+
2947
+ waitYMReady ; wait YM to be ready ' 30 |
2948
+ LD (HL), $8E ; set reg num to YM ' 10 |
2949
+ LD A, (DE) ; get saved value ' 7 | 62 (234)
2950
+ INC E ; next ' 4 |
2951
+ wait4 ; wait YM to be ready ' 4 |
2952
+ LD (BC), A ; restore state ' 7 |
2953
+
2954
+ RET ; done ' 10 | (244)
2955
+
2956
+
2957
+ ; loadPSGState
2958
+ ; ------------
2959
+ ; PSGPORT -> HL
2960
+ ; reg source -> DE -> ?
2961
+ ;
2962
+ ; load the PSG env state
2963
+ ; 94 cycles
2964
+
2965
+ loadPSGState
2966
+
2967
+ LD A, (DE) ; get saved value ' 7 |
2968
+ INC E ; next ' 4 | (21)
2969
+ LD (HL), A ; PSG restore channel 0 env ' 10 |
2970
+
2971
+ LD A, (DE) ; get saved value ' 7 |
2972
+ INC E ; next ' 4 | 21 (42)
2973
+ LD (HL), A ; PSG restore channel 1 env ' 10 |
2974
+
2975
+ LD A, (DE) ; get saved value ' 7 |
2976
+ INC E ; next ' 4 | 21 (63)
2977
+ LD (HL), A ; PSG restore channel 2 env ' 10 |
2978
+
2979
+ LD A, (DE) ; get saved value ' 7 |
2980
+ INC E ; next ' 4 | 21 (84)
2981
+ LD (HL), A ; PSG restore channel 3 env ' 10 |
2982
+
2983
+ RET ; done ' 10 | (94)
2984
+
2985
+
2986
+ ; ############################## jump table ################################
2987
+
2988
+ BLOCK $1600-$
2989
+
2990
+ DW com_next_frame ; 00
2991
+
2992
+ DW com_null, com_null, com_null ; 01-03
2993
+ DW com_null, com_null, com_null, com_null ; 04-07
2994
+ DW com_null, com_null, com_null, com_null ; 08-0B
2995
+ DW com_null, com_null, com_null, com_null ; 0C-0F
2996
+
2997
+ DW com_psg_tone_w0, com_psg_tone_w1, com_psg_tone_w2, com_psg_tone_w3 ; 10-13
2998
+ DW com_psg_tone_w4, com_psg_tone_w5, com_psg_tone_w6, com_psg_tone_w7 ; 14-17
2999
+ DW com_psg_env_w0, com_psg_env_w1, com_psg_env_w2, com_psg_env_w3 ; 18-1B
3000
+ DW com_null, com_null, com_null, com_null ; 1C-1F
3001
+
3002
+ DW com_ym_port0_w0, com_ym_port0_w1, com_ym_port0_w2, com_ym_port0_w3 ; 20-23
3003
+ DW com_ym_port0_w4, com_ym_port0_w5, com_ym_port0_w6, com_ym_port0_w7 ; 24-27
3004
+ DW com_ym_port0_w8, com_ym_port0_w9, com_ym_port0_wA, com_ym_port0_wB ; 28-2B
3005
+ DW com_ym_port0_wC, com_ym_port0_wD, com_ym_port0_wE, com_ym_port0_wF ; 2C-2F
3006
+
3007
+ DW com_ym_port2_w0, com_ym_port2_w1, com_ym_port2_w2, com_ym_port2_w3 ; 30-33
3008
+ DW com_ym_port2_w4, com_ym_port2_w5, com_ym_port2_w6, com_ym_port2_w7 ; 34-37
3009
+ DW com_ym_port2_w8, com_ym_port2_w9, com_ym_port2_wA, com_ym_port2_wB ; 38-3B
3010
+ DW com_ym_port2_wC, com_ym_port2_wD, com_ym_port2_wE, com_ym_port2_wF ; 3C-3F
3011
+
3012
+ DW com_ym_key_w0, com_ym_key_w1, com_ym_key_w2, com_ym_key_w3 ; 40-43
3013
+ DW com_ym_key_w4, com_ym_key_w5, com_null, com_null ; 44-47
3014
+ DW com_null, com_null, com_null, com_null ; 48-4B
3015
+ DW com_null, com_null, com_null, com_null ; 4C-4F
3016
+
3017
+ DW com_pcm_p0_ch0, com_pcm_p0_ch1, com_pcm_p0_ch2, com_pcm_p0_ch3 ; 50-53
3018
+ DW com_pcm_p1_ch0, com_pcm_p1_ch1, com_pcm_p1_ch2, com_pcm_p1_ch3 ; 54-57
3019
+ DW com_pcm_p2_ch0, com_pcm_p2_ch1, com_pcm_p2_ch2, com_pcm_p2_ch3 ; 58-5B
3020
+ DW com_pcm_p3_ch0, com_pcm_p3_ch1, com_pcm_p3_ch2, com_pcm_p3_ch3 ; 5C-5F
3021
+
3022
+ DW com_state_w0, com_state_w1, com_state_w2, com_state_w3 ; 60-63
3023
+ DW com_state_w4, com_state_w5, com_state_w6, com_state_w7 ; 64-67
3024
+ DW com_state_w8, com_state_w9, com_state_wA, com_state_wB ; 68-6B
3025
+ DW com_state_wC, com_state_wD, com_state_wE, com_state_wF ; 6C-6F
3026
+
3027
+ DW com_null, com_null, com_null, com_null ; 70-74
3028
+ DW com_null, com_null, com_null, com_null ; 74-77
3029
+ DW com_null, com_null, com_null, com_null ; 78-7B
3030
+ DW com_null ; 7C
3031
+
3032
+ DW com_extra_frm ; 7D
3033
+ DW com_loop ; 7E
3034
+ DW com_end ; 7F
3035
+
3036
+
3037
+ END