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,1908 @@
1
+ include "include/hardware.inc"
2
+ include "include/hUGE.inc"
3
+
4
+ MACRO add_a_to_r16
5
+ add LOW(\1)
6
+ ld LOW(\1), a
7
+ adc HIGH(\1)
8
+ sub LOW(\1)
9
+ ld HIGH(\1), a
10
+ ENDM
11
+
12
+ ;; Thanks PinoBatch!
13
+ MACRO sub_from_r16 ;; (high, low, value)
14
+ ld a, \2
15
+ sub \3
16
+ ld \2, a
17
+ sbc a ; A = -1 if borrow or 0 if not
18
+ add \1
19
+ ld \1, a
20
+ ENDM
21
+
22
+ MACRO retMute
23
+ bit \1, a
24
+ ret nz
25
+ ENDM
26
+
27
+ MACRO checkMute
28
+ ld a, [mute_channels]
29
+ bit \1, a
30
+ jr nz, \2
31
+ ENDM
32
+
33
+ ;; Maximum pattern length
34
+ DEF PATTERN_LENGTH EQU 64
35
+
36
+ SECTION "Playback variables", WRAM0
37
+ ;; Active song descriptor
38
+ order_cnt: db
39
+ _start_song_descriptor_pointers:
40
+ ;; Pointers to the song's current four orders (one per channel)
41
+ order1: dw
42
+ order2: dw
43
+ order3: dw
44
+ order4: dw
45
+
46
+ ;; Pointers to the instrument tables
47
+ duty_instruments: dw
48
+ wave_instruments: dw
49
+ noise_instruments: dw
50
+
51
+ ;; Misc. pointers
52
+ routines: dw
53
+ waves: dw
54
+ _end_song_descriptor_pointers:
55
+
56
+ ;; Pointers to the current patterns (sort of a cache)
57
+ pattern1: dw
58
+ pattern2: dw
59
+ pattern3: dw
60
+ pattern4: dw
61
+
62
+ ;; How long a row lasts in ticks (1 = one row per call to `hUGE_dosound`, etc. 0 translates to 256)
63
+ ticks_per_row: ds 4
64
+
65
+ _hUGE_current_wave::
66
+ hUGE_current_wave::
67
+ ;; ID of the wave currently loaded into wave RAM
68
+ current_wave: db
69
+ def hUGE_NO_WAVE equ 100
70
+ EXPORT hUGE_NO_WAVE
71
+
72
+ ;; Everything between this and `end_zero` is zero-initialized by `hUGE_init`
73
+ start_zero:
74
+
75
+ _hUGE_mute_mask::
76
+ mute_channels: db
77
+
78
+ counter: db
79
+ tick: db
80
+ row_break: db
81
+ next_order: db
82
+ row: db
83
+ current_order: db
84
+
85
+ IF DEF(PREVIEW_MODE)
86
+ loop_order: db
87
+ single_stepping: db
88
+ single_step_stopped: db
89
+ ENDC
90
+
91
+ channels:
92
+ ;;;;;;;;;;;
93
+ ;;Channel 1
94
+ ;;;;;;;;;;;
95
+ channel1:
96
+ channel_period1: dw
97
+ toneporta_target1: dw
98
+ channel_note1: db
99
+ highmask1: db
100
+ vibrato_tremolo_phase1: db
101
+ envelope1: db
102
+ table1: dw
103
+ table_row1: db
104
+ ds 5
105
+
106
+ ;;;;;;;;;;;
107
+ ;;Channel 2
108
+ ;;;;;;;;;;;
109
+ channel2:
110
+ channel_period2: dw
111
+ toneporta_target2: dw
112
+ channel_note2: db
113
+ highmask2: db
114
+ vibrato_tremolo_phase2: db
115
+ envelope2: db
116
+ table2: dw
117
+ table_row2: db
118
+ ds 5
119
+
120
+ ;;;;;;;;;;;
121
+ ;;Channel 3
122
+ ;;;;;;;;;;;
123
+ channel3:
124
+ channel_period3: dw
125
+ toneporta_target3: dw
126
+ channel_note3: db
127
+ highmask3: db
128
+ vibrato_tremolo_phase3: db
129
+ envelope3: db
130
+ table3: dw
131
+ table_row3: db
132
+ ds 5
133
+
134
+ ;;;;;;;;;;;
135
+ ;;Channel 4
136
+ ;;;;;;;;;;;
137
+ channel4:
138
+ channel_period4: dw
139
+ toneporta_target4: dw
140
+ channel_note4: db
141
+ highmask4: db
142
+ step_width4: db
143
+ vibrato_tremolo_phase4: db
144
+ envelope4: db
145
+ table4: dw
146
+ table_row4: db
147
+ ds 4
148
+
149
+ end_zero:
150
+
151
+ SECTION "Sound Driver", ROM0
152
+
153
+ IF DEF(GBDK)
154
+ _hUGE_init::
155
+ ld h, d
156
+ ld l, e
157
+ ENDC
158
+
159
+ ;;; Sets up hUGEDriver to play a song.
160
+ ;;; !!! BE SURE THAT `hUGE_dosound` WILL NOT BE CALLED WHILE THIS RUNS !!!
161
+ ;;; Param: HL = Pointer to the "song descriptor" you wish to load (typically exported by hUGETracker).
162
+ ;;; Destroys: AF C DE HL
163
+ hUGE_init::
164
+ ld de, ticks_per_row
165
+
166
+ REPT 4
167
+ ld a, [hl+] ; tempo
168
+ ld [de], a
169
+ inc de
170
+ ENDR
171
+
172
+ ld a, [hl+]
173
+ ld [order_cnt], a
174
+
175
+ ld c, _end_song_descriptor_pointers - (_start_song_descriptor_pointers)
176
+ ld de, order1
177
+
178
+ .copy_song_descriptor_loop:
179
+ ld a, [hl+]
180
+ ld [de], a
181
+ inc de
182
+ dec c
183
+ jr nz, .copy_song_descriptor_loop
184
+
185
+ IF !DEF(PREVIEW_MODE)
186
+ ;; Zero some ram
187
+ ld c, end_zero - start_zero
188
+ ld hl, start_zero
189
+ xor a
190
+ .fill_loop:
191
+ ld [hl+], a
192
+ dec c
193
+ jr nz, .fill_loop
194
+ ENDC
195
+
196
+ ;; These two are zero-initialized by the loop above, so these two writes must come after
197
+ ld a, %11110000
198
+ ld [envelope1], a
199
+ ld [envelope2], a
200
+
201
+ ;; Force loading the next wave
202
+ ld a, hUGE_NO_WAVE
203
+ ld [current_wave], a
204
+
205
+ ;; Preview mode needs to load the order ID from memory
206
+ IF !DEF(PREVIEW_MODE)
207
+ ld c, 0
208
+ ELSE
209
+ ld a, [current_order]
210
+ ld c, a
211
+ ENDC
212
+ ;; fallthrough (load the pattern pointers)
213
+
214
+ ;;; Sets all 4 pattern pointers from a certain index in the respective 4 orders.
215
+ ;;; Param: C = The index (in increments of 2)
216
+ ;;; Destroy: AF DE HL
217
+ load_patterns:
218
+ IF DEF(PREVIEW_MODE)
219
+ db $fc ; signal order update to tracker
220
+ ENDC
221
+
222
+ ld hl, order1
223
+ ld de, pattern1
224
+ call .load_pattern
225
+
226
+ ld hl, order2
227
+ call .load_pattern
228
+
229
+ ld hl, order3
230
+ call .load_pattern
231
+
232
+ ld hl, order4
233
+ ;; fallthrough
234
+
235
+ .load_pattern:
236
+ ld a, [hl+]
237
+ add c
238
+ ld h, [hl]
239
+ ld l, a
240
+ adc h
241
+ sub l
242
+ ld h, a
243
+
244
+ ld a, [hl+]
245
+ ld [de], a
246
+ inc de
247
+ ld a, [hl]
248
+ ld [de], a
249
+ inc de
250
+ ret
251
+
252
+ IF DEF(GBDK)
253
+ _hUGE_mute_channel::
254
+ ld b, a
255
+ ld c, e
256
+ ENDC
257
+
258
+ ;;; Sets a channel's muting status.
259
+ ;;; Muted channels are left entirely alone by the driver, so that you can repurpose them,
260
+ ;;; for example for sound effects, CH3 sample playback, etc.
261
+ ;;; If muting the channel, the note being played will be cut.
262
+ ;;; Param: B = Which channel to enable; 0 for CH1, 1 for CH2, etc.
263
+ ;;; Param: C = 0 to unmute the channel, 1 to mute it
264
+ ;;; Destroy: A C E HL
265
+ hUGE_mute_channel::
266
+ ld e, $fe
267
+ ld a, b
268
+ or a
269
+ jr z, .enable_cut
270
+ .enable_loop:
271
+ sla c
272
+ rlc e
273
+ dec a
274
+ jr nz, .enable_loop
275
+ .enable_cut:
276
+ ld a, [mute_channels]
277
+ and e
278
+ or c
279
+ ld [mute_channels], a
280
+ and c
281
+ jp nz, note_cut
282
+ ret
283
+
284
+
285
+ ;;; Reads a pattern's current row.
286
+ ;;; Param: BC = Pointer to the pattern
287
+ ;;; Param: [row] = Index of the current row
288
+ ;;; Return: A = Note ID
289
+ ;;; Return: B = Instrument (upper nibble) & effect code (lower nibble)
290
+ ;;; Return: C = Effect parameter
291
+ ;;; Destroy: HL
292
+ get_current_row:
293
+ ld a, [row]
294
+ .row_in_a:
295
+ ld h, a
296
+ ;; Multiply by 3 for the note value
297
+ add h
298
+ add h
299
+
300
+ ld h, 0
301
+ ld l, a
302
+ add hl, bc ; HL now points at the 3rd byte of the note
303
+ ld a, [hl+]
304
+ ld b, [hl]
305
+ inc hl
306
+ ld c, [hl]
307
+ ret
308
+
309
+ ;;; Gets the "period" of a pattern's current note.
310
+ ;;; Param: HL = Pointer to the pattern pointer
311
+ ;;; Param: [row] = Index of the current row
312
+ ;;; Param: DE = Location to write the note's index to, if applicable
313
+ ;;; Return: HL = Note's period
314
+ ;;; Return: CF = Set if and only if a "valid" note (i.e. not a "rest")
315
+ ;;; Return: [DE] = Note's ID, not updated if a "rest"
316
+ ;;; Return: B = Instrument (upper nibble) & effect code (lower nibble)
317
+ ;;; Return: C = Effect parameter
318
+ ;;; Destroy: AF
319
+ get_current_note:
320
+ ld a, [hl+]
321
+ ld c, a
322
+ ld b, [hl]
323
+
324
+ call get_current_row
325
+ ld hl, 0
326
+
327
+ ;; If the note we found is greater than LAST_NOTE, then it's not a valid note
328
+ ;; and nothing needs to be updated.
329
+ cp LAST_NOTE
330
+ ret nc
331
+
332
+ ;; Store the loaded note value in channel_noteX
333
+ ld [de], a
334
+
335
+ ;;; Gets a note's "period", i.e. what should be written to NRx3 and NRx4.
336
+ ;;; Param: A = Note ID
337
+ ;;; Return: HL = Note's period
338
+ ;;; Return: CF = 1
339
+ ;;; Destroy: AF
340
+ get_note_period:
341
+ add a ; double it to get index into hi/lo table
342
+ add LOW(note_table)
343
+ ld l, a
344
+ adc HIGH(note_table)
345
+ sub l
346
+ ld h, a
347
+ ld a, [hl+]
348
+ ld h, [hl]
349
+ ld l, a
350
+
351
+ scf
352
+ ret
353
+
354
+ ;;; Gets a note's "polynomial counter", i.e. what should be written to NR44.
355
+ ;;; Param: A = Note ID
356
+ ;;; Return: A = Note's poly
357
+ ;;; Destroy: F HL
358
+ get_note_poly:
359
+ ;; Invert the order of the numbers
360
+ add 192 ; (255 - 63)
361
+ cpl
362
+
363
+ ;; Thanks to RichardULZ for this formula
364
+ ;; https://docs.google.com/spreadsheets/d/1O9OTAHgLk1SUt972w88uVHp44w7HKEbS/edit#gid=75028951
365
+ ; if A > 7 then begin
366
+ ; B := (A-4) div 4;
367
+ ; C := (A mod 4)+4;
368
+ ; A := (C or (B shl 4))
369
+ ; end;
370
+
371
+ ; if A < 7 then return
372
+ cp 7
373
+ ret c
374
+
375
+ ld h, a
376
+
377
+ ; B := (A-4) div 4;
378
+ srl a
379
+ srl a
380
+ dec a
381
+ ld l, a
382
+
383
+ ; C := (A mod 4)+4;
384
+ ld a, h
385
+ and 3 ; mod 4
386
+ add 4
387
+
388
+ ; A := (C or (B shl 4))
389
+ swap l
390
+ or l
391
+ ret
392
+
393
+
394
+ ;;; Computes the pointer to a member of a channel.
395
+ ;;; Param: B = Which channel (0 = CH1, 1 = CH2, etc.)
396
+ ;;; Param: D = Offset within the channel struct
397
+ ;;; Return: HL = Pointer to the channel's member
398
+ ;;; Destroy: AF
399
+ ptr_to_channel_member:
400
+ ld a, b
401
+ swap a
402
+ add d
403
+ add LOW(channels)
404
+ ld l, a
405
+ adc HIGH(channels)
406
+ sub l
407
+ ld h, a
408
+ ret
409
+
410
+
411
+ ;; TODO: Make this take HL instead of DE
412
+
413
+ ;;; Updates a channel's frequency, and possibly restarts it.
414
+ ;;; Note that CH4 is *never* restarted by this!
415
+ ;;; Param: B = Which channel to update (0 = CH1, 1 = CH2, etc.)
416
+ ;;; Param: (for CH4) E = Note ID
417
+ ;;; Param: (otherwise) DE = Note period
418
+ ;;; Destroy: AF C
419
+ ;;; Destroy: (for CH4) HL
420
+ update_channel_freq:
421
+ ld h, 0
422
+ .nonzero_highmask:
423
+ ld c, b
424
+ ld a, [mute_channels]
425
+ dec c
426
+ jr z, .update_channel2
427
+ dec c
428
+ jr z, .update_channel3
429
+ dec c
430
+ jr z, .update_channel4
431
+
432
+ .update_channel1:
433
+ retMute 0
434
+
435
+ ld a, e
436
+ ld [channel_period1], a
437
+ ldh [rAUD1LOW], a
438
+ ld a, d
439
+ ld [channel_period1+1], a
440
+ or h
441
+ ldh [rAUD1HIGH], a
442
+ ret
443
+
444
+ .update_channel2:
445
+ retMute 1
446
+
447
+ ld a, e
448
+ ld [channel_period2], a
449
+ ldh [rAUD2LOW], a
450
+ ld a, d
451
+ ld [channel_period2+1], a
452
+ or h
453
+ ldh [rAUD2HIGH], a
454
+ ret
455
+
456
+ .update_channel3:
457
+ retMute 2
458
+
459
+ ld a, e
460
+ ld [channel_period3], a
461
+ ldh [rAUD3LOW], a
462
+ ld a, d
463
+ ld [channel_period3+1], a
464
+ or h
465
+ ldh [rAUD3HIGH], a
466
+ ret
467
+
468
+ .update_channel4:
469
+ retMute 3
470
+
471
+ ld d, h
472
+ ld a, e
473
+ call get_note_poly
474
+ ld hl, step_width4
475
+ or [hl]
476
+ ldh [rAUD4POLY], a
477
+
478
+ ld a, d
479
+ ldh [rAUD4GO], a
480
+ ret
481
+
482
+
483
+ play_note_routines:
484
+ jr play_ch1_note
485
+ jr play_ch2_note
486
+ jr play_ch3_note
487
+ jr play_ch4_note
488
+
489
+ play_ch1_note:
490
+ ld a, [mute_channels]
491
+ retMute 0
492
+
493
+ ;; Play a note on channel 1 (square wave)
494
+ ld hl, channel_period1
495
+ ld a, [hl+]
496
+ ldh [rAUD1LOW], a
497
+
498
+ ;; Get the highmask and apply it.
499
+ ld a, [highmask1]
500
+ or [hl]
501
+ ldh [rAUD1HIGH], a
502
+ ret
503
+
504
+ play_ch2_note:
505
+ ld a, [mute_channels]
506
+ retMute 1
507
+
508
+ ;; Play a note on channel 2 (square wave)
509
+ ld hl, channel_period2
510
+ ld a, [hl+]
511
+ ldh [rAUD2LOW], a
512
+
513
+ ;; Get the highmask and apply it.
514
+ ld a, [highmask2]
515
+ or [hl]
516
+ ldh [rAUD2HIGH], a
517
+ ret
518
+
519
+ play_ch3_note:
520
+ ld a, [mute_channels]
521
+ retMute 2
522
+
523
+ ;; Triggering CH3 while it's reading a byte corrupts wave RAM.
524
+ ;; To avoid this, we kill the wave channel (0 → NR30), then re-enable it.
525
+ ;; This way, CH3 will be paused when we trigger it by writing to NR34.
526
+ ;; TODO: what if `highmask3` bit 7 is not set, though?
527
+
528
+ ldh a, [rAUDTERM]
529
+ push af
530
+ and %10111011
531
+ ldh [rAUDTERM], a
532
+
533
+ xor a
534
+ ldh [rAUD3ENA], a
535
+ cpl
536
+ ldh [rAUD3ENA], a
537
+
538
+ ;; Play a note on channel 3 (waveform)
539
+ ld hl, channel_period3
540
+ ld a, [hl+]
541
+ ldh [rAUD3LOW], a
542
+
543
+ ;; Get the highmask and apply it.
544
+ ld a, [highmask3]
545
+ or [hl]
546
+ ldh [rAUD3HIGH], a
547
+
548
+ pop af
549
+ ldh [rAUDTERM], a
550
+
551
+ ret
552
+
553
+ play_ch4_note:
554
+ ld a, [mute_channels]
555
+ retMute 3
556
+
557
+ ;; Play a "note" on channel 4 (noise)
558
+ ld a, [channel_period4]
559
+ ldh [rAUD4POLY], a
560
+
561
+ ;; Get the highmask and apply it.
562
+ ld a, [highmask4]
563
+ ldh [rAUD4GO], a
564
+
565
+ ret
566
+
567
+ ;;; Executes a row of a table.
568
+ ;;; Param: BC = Pointer to which table to run
569
+ ;;; Param: [HL] = Which row the table is on
570
+ ;;; Param: E = Which channel to run the table on
571
+ do_table:
572
+ ;; Increment the current row
573
+ ld a, [hl]
574
+ inc [hl]
575
+ push hl
576
+
577
+ ;; Grab the cell values, return if no note.
578
+ ;; Save BC for doing effects.
579
+ call get_current_row.row_in_a
580
+ pop hl ; TODO: don't trash HL in the first place
581
+ push bc
582
+
583
+ ld d, a
584
+
585
+ ;; If there's a jump, change the current row
586
+ ld a, b
587
+ and $F0
588
+ bit 7, d
589
+ jr z, .no_steal
590
+ res 7, d
591
+ set 0, a
592
+ .no_steal:
593
+ swap a
594
+ jr z, .no_jump
595
+ dec a
596
+ ld [hl], a
597
+
598
+ .no_jump:
599
+ ld a, d
600
+ ;; If there's no note, don't update channel frequencies
601
+ cp NO_NOTE
602
+ jr z, .no_note2
603
+
604
+ sub 36 ; bring the number back in the range of -36, +35
605
+
606
+ ld b, e
607
+ ld e, a
608
+ ld d, 4
609
+ call ptr_to_channel_member
610
+ ld a, e
611
+ add [hl]
612
+ inc hl
613
+ ld d, [hl]
614
+
615
+ ;; A = note index
616
+ ;; B = channel
617
+ ;; D = highmask
618
+ ;; pushed = instrument/effect
619
+
620
+ ;; If ch4, don't get note period (update_channel_freq gets the poly for us)
621
+ ld e, a
622
+ inc b
623
+ bit 2, b
624
+ ld c, d
625
+ jr nz, .is_ch4
626
+
627
+ call get_note_period
628
+ ld d, h
629
+ ld e, l
630
+ .is_ch4:
631
+ ld h, c
632
+ res 7, h
633
+ dec b
634
+ call update_channel_freq.nonzero_highmask
635
+
636
+ .no_note:
637
+ ld e, b
638
+ .no_note2:
639
+ pop bc
640
+
641
+ ld d, 1
642
+ jr do_effect.no_set_offset
643
+
644
+ ;;; Performs an effect on a given channel.
645
+ ;;; Param: E = Channel ID (0 = CH1, 1 = CH2, etc.)
646
+ ;;; Param: B = Effect type (upper 4 bits ignored)
647
+ ;;; Param: C = Effect parameters (depend on FX type)
648
+ ;;; Destroy: AF BC DE HL
649
+ do_effect:
650
+ ;; Return immediately if effect is 000
651
+ ld d, 0
652
+ .no_set_offset:
653
+ ld a, b
654
+ and $0F
655
+ or c
656
+ ret z
657
+
658
+ ;; Strip the instrument bits off leaving only effect code
659
+ ld a, b
660
+ and $0F
661
+ ;; Multiply by 2 to get offset into table
662
+ add a
663
+
664
+ add LOW(.jump)
665
+ ld l, a
666
+ adc HIGH(.jump)
667
+ sub l
668
+ ld h, a
669
+
670
+ ld a, [hl+]
671
+ ld h, [hl]
672
+ ld l, a
673
+ bit 0, d
674
+ jr z, .no_offset
675
+ inc hl
676
+ .no_offset:
677
+ ld b, e
678
+ ld a, [tick]
679
+ or a ; We can return right off the bat if it's tick zero
680
+ jp hl
681
+
682
+ .jump:
683
+ ;; Jump table for effect
684
+ dw fx_arpeggio ;0xy
685
+ dw fx_porta_up ;1xy
686
+ dw fx_porta_down ;2xy
687
+ dw fx_toneporta ;3xy
688
+ dw fx_vibrato ;4xy
689
+ dw fx_set_master_volume ;5xy ; global
690
+ dw fx_call_routine ;6xy
691
+ dw fx_note_delay ;7xy
692
+ dw fx_set_pan ;8xy ; global
693
+ dw fx_set_duty ;9xy
694
+ dw fx_vol_slide ;Axy
695
+ dw fx_pos_jump ;Bxy ; global
696
+ dw fx_set_volume ;Cxy
697
+ dw fx_pattern_break ;Dxy ; global
698
+ dw fx_note_cut ;Exy
699
+ dw fx_set_speed ;Fxy ; global
700
+
701
+
702
+ ;;; Processes (global) effect 5, "set master volume".
703
+ ;;; Param: C = Value to write to NR50
704
+ ;;; Param: ZF = Set if and only if on tick 0
705
+ ;;; Destroy: A
706
+ fx_set_master_volume:
707
+ ret nz
708
+
709
+ ld a, c
710
+ ldh [rAUDVOL], a
711
+ ret
712
+
713
+
714
+ ;;; Processes effect 6, "call routine".
715
+ ;;; Param: B = Current channel ID (0 = CH1, 1 = CH2, etc.)
716
+ ;;; Param: C = Routine ID
717
+ ;;; Param: A = Current tick
718
+ ;;; Param: ZF = Set if and only if on tick 0
719
+ ;;; Destroy: Anything the routine does
720
+ fx_call_routine:
721
+ nop ; In place of `ret cc`. Allows to be used in subpatterns
722
+
723
+ ld hl, routines
724
+ ld a, $0f
725
+ and c
726
+ add a
727
+ add [hl]
728
+ ld e, a
729
+ inc hl
730
+ ld a, $0
731
+ adc [hl]
732
+ ld h, a
733
+ ld l, e
734
+
735
+ ld a, [hl+]
736
+ ld h, [hl]
737
+ ld l, a
738
+
739
+ ld d, b
740
+ ld e, c ; SDCC compatibility
741
+
742
+ ld a, [tick]
743
+ or a ; set zero flag if tick 0 for compatibility
744
+ jp hl
745
+
746
+
747
+ ;;; Processes (global) effect 8, "set pan".
748
+ ;;; Param: B = Current channel ID (0 = CH1, 1 = CH2, etc.)
749
+ ;;; Param: C = Value to write to NR51
750
+ ;;; Param: ZF = Set if and only if on tick 0
751
+ ;;; Destroy: A
752
+ fx_set_pan:
753
+ ret nz
754
+
755
+ ;; Pretty simple. The editor can create the correct value here without a bunch
756
+ ;; of bit shifting manually.
757
+ ld a, c
758
+ ldh [rAUDTERM], a
759
+ ret
760
+
761
+
762
+ ;;; Processes effect 9, "set duty cycle".
763
+ ;;; Param: B = Current channel ID (0 = CH1, anything else = CH2)
764
+ ;;; Param: C = Value to write to NRx1
765
+ ;;; Param: ZF = Set if and only if on tick 0
766
+ ;;; Destroy: AF
767
+ fx_set_duty:
768
+ ret nz
769
+
770
+ ;; $900 = 12.5%
771
+ ;; $940 = 25%
772
+ ;; $980 = 50%
773
+ ;; $9C0 = 75%
774
+
775
+ ld a, [mute_channels]
776
+ dec b
777
+ jr z, .chan2
778
+ dec b
779
+ jr z, .chan3
780
+ dec b
781
+ jr z, .chan4
782
+ .chan1:
783
+ retMute 0
784
+ ld a, c
785
+ ldh [rAUD1LEN], a
786
+ ret
787
+ .chan2:
788
+ retMute 1
789
+ ld a, c
790
+ ldh [rAUD2LEN], a
791
+ ret
792
+ .chan4:
793
+ retMute 3
794
+ ldh a, [rAUD4POLY]
795
+ res 3, a
796
+ or c
797
+ ldh [rAUD4POLY], a
798
+ ret
799
+ .chan3:
800
+ retMute 2
801
+
802
+ ld a, c
803
+ ld hl, current_wave
804
+ call update_ch3_waveform
805
+
806
+ ld b, 2
807
+ jp play_note
808
+
809
+ update_ch3_waveform:
810
+ ld [hl], a
811
+ ;; Get pointer to new wave
812
+ swap a
813
+ ld hl, waves
814
+ add [hl]
815
+ inc hl
816
+ ld h, [hl]
817
+ ld l, a
818
+ adc h
819
+ sub l
820
+ ld h, a
821
+
822
+ ldh a, [rAUDTERM]
823
+ push af
824
+ and %10111011
825
+ ldh [rAUDTERM], a
826
+
827
+ xor a
828
+ ldh [rAUD3ENA], a
829
+
830
+ FOR OFS, 16
831
+ ld a, [hl+]
832
+ ldh [_AUD3WAVERAM + OFS], a
833
+ ENDR
834
+
835
+ ld a, %10000000
836
+ ldh [rAUD3ENA], a
837
+
838
+ pop af
839
+ ldh [rAUDTERM], a
840
+
841
+ ret
842
+
843
+ ;;; Processes (global) effect F, "set speed".
844
+ ;;; Param: C = New amount of ticks per row
845
+ ;;; Param: ZF = Set if and only if on tick 0
846
+ ;;; Destroy: A
847
+ fx_set_speed:
848
+ ret nz
849
+
850
+ ld a, c
851
+ ld hl, ticks_per_row
852
+ ld [hl+], a
853
+ ld [hl+], a
854
+ ld [hl+], a
855
+ ld [hl], c
856
+ ret
857
+
858
+
859
+ IF DEF(GBDK)
860
+ _hUGE_set_position::
861
+ ld c, a
862
+ xor a
863
+ ENDC
864
+
865
+ hUGE_set_position::
866
+ ;;; Processes (global) effect B, "position jump".
867
+ ;;; Param: C = ID of the order to jump to
868
+ ;;; Destroy: A
869
+ fx_pos_jump:
870
+ ret nz
871
+
872
+ ld hl, row_break
873
+
874
+ or [hl] ; a = 0 since we know we're on tick 0
875
+ jr nz, .already_broken
876
+ ld [hl], 1
877
+ .already_broken:
878
+ inc hl
879
+ ld [hl], c
880
+ ret
881
+
882
+
883
+ ;;; Processes (global) effect D, "pattern break".
884
+ ;;; Param: C = ID of the next order's row to start on
885
+ ;;; Destroy: A
886
+ fx_pattern_break:
887
+ ret nz
888
+
889
+ ld a, c
890
+ ld [row_break], a
891
+ ret
892
+
893
+
894
+ ;;; Processes effect E, "note cut".
895
+ ;;; Param: B = Current channel ID (0 = CH1, 1 = CH2, etc.)
896
+ ;;; Param: C = Tick to cut the note on
897
+ ;;; Param: A = Current tick
898
+ ;;; Destroy: A
899
+ fx_note_cut:
900
+ cp c
901
+ ret nz
902
+
903
+ ;; check channel mute
904
+
905
+ ld a, b
906
+ ;; 0 → $01, 1 → $02, 2 → $04, 3 → $05
907
+ ;; Overall, these two instructions add 1 to the number.
908
+ ;; However, the first instruction will generate a carry for inputs of $02 and $03;
909
+ ;; the `adc` will pick the carry up, and "separate" 0 / 1 from 2 / 3 by an extra 1.
910
+ ;; Luckily, this yields correct results for 0 ($01), 1 ($02), and 2 ($03 + 1 = $04).
911
+ ;; We'll see about fixing 3 afterwards.
912
+ add -2
913
+ adc 3
914
+ ;; After being shifted left, the inputs are $02, $04, $08 and $0A; all are valid BCD,
915
+ ;; except for $0A. Since we just performed `add a`, DAA will correct the latter to $10.
916
+ ;; (This should be correctly emulated everywhere, since the inputs are identical to
917
+ ;; "regular" BCD.)
918
+ ;; When shifting the results back, we'll thus get $01, $02, $04 and $08!
919
+ add a
920
+ daa
921
+ rra
922
+ ld d, a
923
+ ld a, [mute_channels]
924
+ cpl
925
+ and d
926
+ ret z
927
+
928
+ ;; fallthrough
929
+
930
+
931
+ ;;; Cuts note on a channel.
932
+ ;;; Param: B = Current channel ID (0 = CH1, 1 = CH2, etc.)
933
+ ;;; Destroy: AF HL
934
+ note_cut:
935
+ ld a, b
936
+ add a
937
+ add a
938
+ add b ; multiply by 5
939
+ add LOW(rAUD1ENV)
940
+ ld l, a
941
+ ld h, HIGH(rAUD1ENV)
942
+ xor a
943
+ ld [hl+], a
944
+ ld a, b
945
+ cp 2
946
+ ret z ; return early if CH3-- no need to retrigger note
947
+
948
+ ;; Retrigger note
949
+ inc l ; Not `inc hl` because H stays constant (= $FF)
950
+ ld [hl], $FF
951
+ ret
952
+
953
+
954
+ ;;; Processes effect C, "set volume".
955
+ ;;; Param: B = Current channel ID (0 = CH1, 1 = CH2, etc.)
956
+ ;;; Param: C = Volume to set the channel to
957
+ ;;; Param: ZF = Set if and only if on tick 0
958
+ ;;; Destroy: AF BC
959
+ fx_set_volume:
960
+ ret nz ; Return if we're not on tick zero.
961
+
962
+ swap c
963
+ ld a, [mute_channels]
964
+ dec b
965
+ jr z, .set_chn_2_vol
966
+ dec b
967
+ jr z, .set_chn_3_vol
968
+ dec b
969
+ jr z, .set_chn_4_vol
970
+
971
+ .set_chn_1_vol:
972
+ retMute 0
973
+
974
+ ldh a, [rAUD1ENV]
975
+ and %00001111
976
+ or c
977
+ ldh [rAUD1ENV], a
978
+ jp play_ch1_note
979
+
980
+ .set_chn_2_vol:
981
+ retMute 1
982
+
983
+ ldh a, [rAUD2ENV]
984
+ and %00001111
985
+ or c
986
+ ldh [rAUD2ENV], a
987
+ jp play_ch2_note
988
+
989
+ .set_chn_3_vol:
990
+ retMute 2
991
+
992
+ ;; "Quantize" the more finely grained volume control down to one of 4 values.
993
+ ld a, c
994
+ cp 10 << 4
995
+ jr nc, .one
996
+ cp 5 << 4
997
+ jr nc, .two
998
+ or a
999
+ jr z, .done ; Zero maps to zero
1000
+ .three:
1001
+ ld a, %01100000
1002
+ jr .done
1003
+ .two:
1004
+ ld a, %01000000
1005
+ jr .done
1006
+ .one:
1007
+ ld a, %00100000
1008
+ .done:
1009
+ ldh [rAUD3LEVEL], a
1010
+ ret
1011
+
1012
+ .set_chn_4_vol:
1013
+ retMute 3
1014
+
1015
+ ld a, c
1016
+ ldh [rAUD4ENV], a
1017
+ jp play_ch4_note
1018
+
1019
+
1020
+ ;;; Processes effect 4, "vibrato".
1021
+ ;;; Param: B = Current channel ID (0 = CH1, 1 = CH2, etc.)
1022
+ ;;; Param: C = FX param
1023
+ ;;; Param: ZF = Set if and only if on tick 0
1024
+ ;;; Destroy: AF B DE HL
1025
+ fx_vibrato:
1026
+ ret z
1027
+
1028
+ ;; Extremely poor man's vibrato.
1029
+ ;; Speed values:
1030
+ ;; (0x0 = 1.0)
1031
+ ;; (0x1 = 0.5)
1032
+ ;; (0x3 = 0.25)
1033
+ ;; (0x7 = 0.125)
1034
+ ;; (0xf = 0.0625)
1035
+ ld d, 4
1036
+ call ptr_to_channel_member
1037
+
1038
+ ld a, c
1039
+ and %11110000
1040
+ swap a
1041
+ ld e, a
1042
+
1043
+ ld a, [counter]
1044
+ and e
1045
+ ld a, [hl]
1046
+ jr z, .go_up
1047
+ .restore:
1048
+ call get_note_period
1049
+ ld d, h
1050
+ ld e, l
1051
+ jr .finish_vibrato
1052
+ .go_up:
1053
+ call get_note_period
1054
+ ld a, c
1055
+ and %00001111
1056
+ add l
1057
+ ld e, a
1058
+ adc h
1059
+ sub e
1060
+ ld d, a
1061
+ .finish_vibrato:
1062
+ jp update_channel_freq
1063
+
1064
+
1065
+ ;;; Processes effect 0, "arpeggio".
1066
+ ;;; Param: B = Current channel ID (0 = CH1, 1 = CH2, etc.)
1067
+ ;;; Param: C = Offsets in semitones (each nibble)
1068
+ ;;; Param: ZF = Set if and only if on tick 0
1069
+ ;;; Destroy: AF B DE HL
1070
+ fx_arpeggio:
1071
+ nop ; In place of `ret cc`. Allows to be used in subpatterns
1072
+
1073
+ ld d, 4
1074
+ call ptr_to_channel_member
1075
+ ld d, [hl]
1076
+
1077
+ ld a, [counter]
1078
+ dec a
1079
+
1080
+ ;; TODO: A crappy modulo, because it's not a multiple of four :(
1081
+
1082
+ jr .test_greater_than_two
1083
+ .greater_than_two:
1084
+ sub 3
1085
+ .test_greater_than_two:
1086
+ cp 3
1087
+ jr nc, .greater_than_two
1088
+
1089
+ ;; Multiply by 2 to get offset into table
1090
+ add a
1091
+
1092
+ add LOW(.arp_options)
1093
+ ld l, a
1094
+ adc HIGH(.arp_options)
1095
+ sub l
1096
+ ld h, a
1097
+ jp hl
1098
+
1099
+ .arp_options:
1100
+ jr .set_arp1
1101
+ jr .set_arp2
1102
+ ;; No `jr .reset_arp`
1103
+
1104
+ .reset_arp:
1105
+ ld a, d
1106
+ jr .finish_skip_add
1107
+
1108
+ .set_arp2:
1109
+ ld a, c
1110
+ swap a
1111
+ db $FE ; cp <imm8> gobbles next byte
1112
+
1113
+ .set_arp1:
1114
+ ld a, c
1115
+ .finish_arp:
1116
+ and %00001111
1117
+ add d
1118
+ .finish_skip_add:
1119
+ call get_note_period
1120
+ ld d, h
1121
+ ld e, l
1122
+ jp update_channel_freq
1123
+
1124
+
1125
+ ;;; Processes effect 1, "portamento up".
1126
+ ;;; Param: B = Current channel ID (0 = CH1, 1 = CH2, etc.)
1127
+ ;;; Param: C = How many units to slide the pitch by per tick
1128
+ ;;; Param: ZF = Set if and only if on tick 0
1129
+ ;;; Destroy: A B DE HL
1130
+ fx_porta_up:
1131
+ ret z
1132
+
1133
+ ld d, 0
1134
+ call ptr_to_channel_member
1135
+
1136
+ ;; Add C to 16-bit value at HL
1137
+ ld a, [hl+]
1138
+ add c
1139
+ ld e, a
1140
+ adc [hl]
1141
+ sub e
1142
+ ld d, a
1143
+
1144
+ jp update_channel_freq
1145
+
1146
+
1147
+ ;;; Processes (global) effect 2, "portamento down".
1148
+ ;;; Param: B = Current channel ID (0 = CH1, 1 = CH2, etc.)
1149
+ ;;; Param: C = How many units to slide the pitch down by per tick
1150
+ ;;; Param: ZF = Set if and only if on tick 0
1151
+ ;;; Destroy: A B DE HL
1152
+ fx_porta_down:
1153
+ ret z
1154
+
1155
+ ld d, 0
1156
+ call ptr_to_channel_member
1157
+
1158
+ ;; Subtract C from 16-bit value at [HL]
1159
+ ld a, [hl+]
1160
+ sub c
1161
+ ld e, a
1162
+ sbc a
1163
+ add [hl]
1164
+ ld d, a
1165
+
1166
+ jp update_channel_freq
1167
+
1168
+
1169
+ ;;; Processes effect 2, "tone portamento".
1170
+ ;;; Param: B = Current channel ID (0 = CH1, 1 = CH2, etc.)
1171
+ ;;; Param: C = Target note
1172
+ ;;; Param: ZF = Set if and only if on tick 0
1173
+ ;;; Destroy: A B DE HL
1174
+ fx_toneporta:
1175
+ jr z, .setup
1176
+
1177
+ ld d, 0
1178
+ call ptr_to_channel_member
1179
+ push hl
1180
+
1181
+ ld a, [hl+]
1182
+ ld e, a
1183
+ ld a, [hl+]
1184
+ ld d, a
1185
+
1186
+ ld a, [hl+]
1187
+ ld h, [hl]
1188
+ ld l, a
1189
+
1190
+ ;; Comparing which direction to move the current value
1191
+ ;; TODO: Optimize this!!!!
1192
+
1193
+ ;; Compare high byte
1194
+ ld a, h
1195
+
1196
+ cp d
1197
+ jr c, .subtract ; target is less than the current period
1198
+ jr nz, .add
1199
+ .high_byte_same:
1200
+ ld a, l
1201
+ cp e
1202
+ jr c, .subtract ; the target is less than the current period
1203
+ jr z, .done ; both nibbles are the same so no portamento
1204
+ .add:
1205
+ ld a, c
1206
+ add_a_to_r16 de
1207
+
1208
+ ld a, h
1209
+ cp d
1210
+ jr c, .set_exact
1211
+ jr nz, .done
1212
+ ld a, l
1213
+ cp e
1214
+ jr c, .set_exact
1215
+
1216
+ jr .done
1217
+
1218
+ .subtract:
1219
+ sub_from_r16 d, e, c
1220
+
1221
+ bit 7, d ; check for overflow
1222
+ jr nz, .set_exact
1223
+
1224
+ ld a, d
1225
+ cp h
1226
+ jr c, .set_exact
1227
+ jr nz, .done
1228
+ ld a, e
1229
+ cp l
1230
+ jr c, .set_exact
1231
+
1232
+ jr .done
1233
+ .set_exact:
1234
+ ld d, h
1235
+ ld e, l
1236
+ .done:
1237
+
1238
+ pop hl
1239
+ ld a, e
1240
+ ld [hl+], a
1241
+ ld [hl], d
1242
+
1243
+
1244
+ ld a, 4
1245
+ add_a_to_r16 hl
1246
+
1247
+ ld a, [hl]
1248
+ res 7, [hl]
1249
+ ld h, a
1250
+ ;; B must be preserved for this
1251
+ jp update_channel_freq.nonzero_highmask
1252
+
1253
+ .setup:
1254
+ ;; We're on tick zero, so load the note period into the toneporta target.
1255
+ ld d, 4
1256
+ call ptr_to_channel_member
1257
+
1258
+ ld a, [hl-]
1259
+ ld d, h
1260
+ ld e, l
1261
+ call get_note_period
1262
+ ld a, h
1263
+ ld [de], a
1264
+ dec de
1265
+ ld a, l
1266
+ ld [de], a
1267
+
1268
+ ret_dont_play_note:
1269
+ ;; Don't call play_chX_note. This is done by popping the saved AF register and clearing
1270
+ ;; the C flag, which relies on the way the caller is implemented!!
1271
+ pop hl
1272
+ pop af
1273
+ and a ; Clear carry to avoid calling `play_chX_note`
1274
+ push af
1275
+ jp hl
1276
+
1277
+
1278
+ ;;; Processes effect A, "volume slide".
1279
+ ;;; Param: B = Current channel ID (0 = CH1, 1 = CH2, etc.)
1280
+ ;;; Param: C = FX param; either nibble should be 0, otherwise weird (unspecified) behavior may arise
1281
+ ;;; Param: ZF = Set if and only if on tick 0
1282
+ ;;; Destroy: AF C DE HL
1283
+ fx_vol_slide:
1284
+ ret nz
1285
+
1286
+ ;; This is really more of a "retrigger note with lower volume" effect and thus
1287
+ ;; isn't really that useful. Instrument envelopes should be used instead.
1288
+ ;; Might replace this effect with something different if a new effect is
1289
+ ;; ever needed.
1290
+
1291
+ ;; check channel mute
1292
+
1293
+ ld a, b
1294
+ ;; 0 → $01, 1 → $02, 2 → $04, 3 → $05
1295
+ ;; Overall, these two instructions add 1 to the number.
1296
+ ;; However, the first instruction will generate a carry for inputs of $02 and $03;
1297
+ ;; the `adc` will pick the carry up, and "separate" 0 / 1 from 2 / 3 by an extra 1.
1298
+ ;; Luckily, this yields correct results for 0 ($01), 1 ($02), and 2 ($03 + 1 = $04).
1299
+ ;; We'll see about fixing 3 afterwards.
1300
+ add -2
1301
+ adc 3
1302
+ ;; After being shifted left, the inputs are $02, $04, $08 and $0A; all are valid BCD,
1303
+ ;; except for $0A. Since we just performed `add a`, DAA will correct the latter to $10.
1304
+ ;; (This should be correctly emulated everywhere, since the inputs are identical to
1305
+ ;; "regular" BCD.)
1306
+ ;; When shifting the results back, we'll thus get $01, $02, $04 and $08!
1307
+ add a
1308
+ daa
1309
+ rra
1310
+ ld d, a
1311
+ ld a, [mute_channels]
1312
+ cpl
1313
+ and d
1314
+ ret z
1315
+
1316
+ ;; setup the up and down params
1317
+ ld a, c
1318
+ and %00001111
1319
+ ld d, a
1320
+
1321
+ ld a, c
1322
+ and %11110000
1323
+ ld e, a
1324
+ swap e
1325
+
1326
+ ; There are 5 bytes between each envelope register
1327
+ ld a, b
1328
+ add a
1329
+ add a
1330
+ add b
1331
+ add LOW(rAUD1ENV)
1332
+ ld c, a
1333
+
1334
+ ldh a, [c]
1335
+ and %11110000
1336
+ swap a
1337
+ sub d
1338
+ jr nc, .cont1
1339
+ xor a
1340
+ .cont1:
1341
+ add e
1342
+ cp $10
1343
+ jr c, .cont2
1344
+ ld a, $F
1345
+ .cont2:
1346
+ swap a
1347
+ ldh [c], a
1348
+
1349
+ ; Go to rAUDxGO, which is 2 bytes after
1350
+ inc c
1351
+ inc c
1352
+ ldh a, [c]
1353
+ or %10000000
1354
+ ldh [c], a
1355
+
1356
+ jr play_note
1357
+
1358
+
1359
+ ;;; Processes effect 7, "note delay".
1360
+ ;;; Param: B = Current channel ID (0 = CH1, 1 = CH2, etc.)
1361
+ ;;; Param: C = Amount of ticks by which to delay the note
1362
+ ;;; Caveats: 0 never plays the note, and a delay longer than a row's duration skips the note entirely
1363
+ ;;; Param: ZF = Set if and only if on tick 0
1364
+ ;;; Destroy: AF D HL
1365
+ fx_note_delay:
1366
+ jr z, ret_dont_play_note
1367
+
1368
+ cp c
1369
+ ret nz ; wait until the correct tick to play the note
1370
+
1371
+ ;; fallthrough
1372
+
1373
+
1374
+ ;;; Plays a channel's current note.
1375
+ ;;; Param: B = Which channel (0 = CH1, 1 = CH2, etc.)
1376
+ ;;; Destroy: AF D HL
1377
+ play_note:
1378
+ ld a, b
1379
+ add a
1380
+ add LOW(play_note_routines)
1381
+ ld l, a
1382
+ adc HIGH(play_note_routines)
1383
+ sub l
1384
+ ld h, a
1385
+ jp hl
1386
+
1387
+
1388
+ ;;; Computes the pointer to an instrument.
1389
+ ;;; Param: B = The instrument's ID
1390
+ ;;; Param: HL = Instrument pointer table
1391
+ ;;; Return: HL = Pointer to the instrument
1392
+ ;;; Return: ZF = Set if and only if there was no instrument (ID == 0)
1393
+ ;;; Destroy: AF
1394
+ setup_instrument_pointer:
1395
+ ld a, b
1396
+ and %11110000
1397
+ swap a
1398
+ ret z ; If there's no instrument, then return early.
1399
+
1400
+ dec a ; Instrument 0 is "no instrument"
1401
+ .finish:
1402
+ ;; Multiply by 6
1403
+ add a
1404
+ ld e, a
1405
+ add a
1406
+ add e
1407
+
1408
+ add_a_to_r16 hl
1409
+
1410
+ rla ; reset the Z flag
1411
+ ret
1412
+
1413
+ _hUGE_dosound::
1414
+ ;;; Ticks the sound engine once.
1415
+ ;;; Destroy: AF BC DE HL
1416
+ hUGE_dosound::
1417
+ IF DEF(PREVIEW_MODE)
1418
+ ld a, [single_stepping]
1419
+ ld hl, single_step_stopped
1420
+ and [hl]
1421
+ ret nz
1422
+ ENDC
1423
+
1424
+ ld a, [tick]
1425
+ or a
1426
+ jp nz, process_effects
1427
+
1428
+ ;; Note playback
1429
+ ld hl, pattern1
1430
+ ld de, channel_note1
1431
+ call get_current_note
1432
+
1433
+ push af ; Save carry for conditonally calling note
1434
+ jr nc, .do_setvol1
1435
+
1436
+ ld a, b
1437
+ and $0F
1438
+ cp 3 ; If toneporta, don't load the channel period
1439
+ jr z, .toneporta
1440
+ ld a, l
1441
+ ld [channel_period1], a
1442
+ ld a, h
1443
+ ld [channel_period1+1], a
1444
+ .toneporta:
1445
+
1446
+ ld hl, duty_instruments
1447
+ ld a, [hl+]
1448
+ ld h, [hl]
1449
+ ld l, a
1450
+ call setup_instrument_pointer
1451
+ ld a, [highmask1]
1452
+ res 7, a ; Turn off the "initial" flag
1453
+ jr z, .write_mask1
1454
+
1455
+ checkMute 0, .do_setvol1
1456
+
1457
+ ld a, [hl+]
1458
+ ldh [rAUD1SWEEP], a
1459
+ ld a, [hl+]
1460
+ ldh [rAUD1LEN], a
1461
+ ld a, [hl+]
1462
+ ldh [rAUD1ENV], a
1463
+ ld a, [hl+]
1464
+ ld [table1], a
1465
+ ld a, [hl+]
1466
+ ld [table1+1], a
1467
+ xor a
1468
+ ld [table_row1], a
1469
+
1470
+ ld a, [hl]
1471
+
1472
+ .write_mask1:
1473
+ ld [highmask1], a
1474
+
1475
+ .do_setvol1:
1476
+ ld e, 0
1477
+ call do_effect
1478
+
1479
+ pop af
1480
+ call c, play_ch1_note
1481
+
1482
+ ld a, [table1]
1483
+ ld c, a
1484
+ ld a, [table1+1]
1485
+ ld b, a
1486
+ or c
1487
+ ld hl, table_row1
1488
+ ld e, 0
1489
+ call nz, do_table
1490
+
1491
+ process_ch2:
1492
+ ;; Note playback
1493
+ ld hl, pattern2
1494
+ ld de, channel_note2
1495
+ call get_current_note
1496
+
1497
+ push af ; Save carry for conditonally calling note
1498
+ jr nc, .do_setvol2
1499
+
1500
+ ld a, b
1501
+ and $0F
1502
+ cp 3 ; If toneporta, don't load the channel period
1503
+ jr z, .toneporta
1504
+ ld a, l
1505
+ ld [channel_period2], a
1506
+ ld a, h
1507
+ ld [channel_period2+1], a
1508
+ .toneporta:
1509
+
1510
+ ld hl, duty_instruments
1511
+ ld a, [hl+]
1512
+ ld h, [hl]
1513
+ ld l, a
1514
+ call setup_instrument_pointer
1515
+ ld a, [highmask2]
1516
+ res 7, a ; Turn off the "initial" flag
1517
+ jr z, .write_mask2
1518
+
1519
+ checkMute 1, .do_setvol2
1520
+
1521
+ inc hl
1522
+
1523
+ ld a, [hl+]
1524
+ ldh [rAUD2LEN], a
1525
+ ld a, [hl+]
1526
+ ldh [rAUD2ENV], a
1527
+ ld a, [hl+]
1528
+ ld [table2], a
1529
+ ld a, [hl+]
1530
+ ld [table2+1], a
1531
+ xor a
1532
+ ld [table_row2], a
1533
+
1534
+ ld a, [hl]
1535
+
1536
+ .write_mask2:
1537
+ ld [highmask2], a
1538
+
1539
+ .do_setvol2:
1540
+ ld e, 1
1541
+ call do_effect
1542
+
1543
+ pop af
1544
+ call c, play_ch2_note
1545
+
1546
+ ld a, [table2]
1547
+ ld c, a
1548
+ ld a, [table2+1]
1549
+ ld b, a
1550
+ or c
1551
+ ld hl, table_row2
1552
+ ld e, 1
1553
+ call nz, do_table
1554
+
1555
+ process_ch3:
1556
+ ld hl, pattern3
1557
+ ld de, channel_note3
1558
+ call get_current_note
1559
+
1560
+ push af ; Save carry for conditonally calling note
1561
+ jp nc, .do_setvol3
1562
+
1563
+ ld a, b
1564
+ and $0F
1565
+ cp 3 ; If toneporta, don't load the channel period
1566
+ jr z, .toneporta
1567
+ ld a, l
1568
+ ld [channel_period3], a
1569
+ ld a, h
1570
+ ld [channel_period3+1], a
1571
+ .toneporta:
1572
+
1573
+ ld hl, wave_instruments
1574
+ ld a, [hl+]
1575
+ ld h, [hl]
1576
+ ld l, a
1577
+ call setup_instrument_pointer
1578
+ ld a, [highmask3]
1579
+ res 7, a ; Turn off the "initial" flag
1580
+ jr z, .write_mask3
1581
+
1582
+ checkMute 2, .do_setvol3
1583
+
1584
+ ld a, [hl+]
1585
+ ldh [rAUD3LEN], a
1586
+ ld a, [hl+]
1587
+ ldh [rAUD3LEVEL], a
1588
+ ld a, [hl+]
1589
+ push hl
1590
+
1591
+ ;; Check to see if we need to copy the wave
1592
+ ld hl, current_wave
1593
+ cp [hl]
1594
+ jr z, .no_wave_copy
1595
+ call update_ch3_waveform
1596
+
1597
+ .no_wave_copy:
1598
+ pop hl
1599
+ ld a, [hl+]
1600
+ ld [table3], a
1601
+ ld a, [hl+]
1602
+ ld [table3+1], a
1603
+ xor a
1604
+ ld [table_row3], a
1605
+
1606
+ ld a, [hl]
1607
+
1608
+ .write_mask3:
1609
+ ld [highmask3], a
1610
+
1611
+ .do_setvol3:
1612
+ ld e, 2
1613
+ call do_effect
1614
+
1615
+ pop af
1616
+ call c, play_ch3_note
1617
+
1618
+ ld a, [table3]
1619
+ ld c, a
1620
+ ld a, [table3+1]
1621
+ ld b, a
1622
+ or c
1623
+ ld hl, table_row3
1624
+ ld e, 2
1625
+ call nz, do_table
1626
+
1627
+ process_ch4:
1628
+ ld hl, pattern4
1629
+ ld a, [hl+]
1630
+ ld c, a
1631
+ ld b, [hl]
1632
+ call get_current_row
1633
+ cp LAST_NOTE
1634
+
1635
+ push af ; Save carry for conditonally calling note
1636
+ jr nc, .do_setvol4
1637
+
1638
+ ld [channel_note4], a
1639
+
1640
+ ;; No toneporta check because it's not supported for CH4 anyway
1641
+
1642
+ call get_note_poly
1643
+ ld [channel_period4], a
1644
+
1645
+ ld hl, noise_instruments
1646
+ ld a, [hl+]
1647
+ ld h, [hl]
1648
+ ld l, a
1649
+ call setup_instrument_pointer
1650
+
1651
+ ld a, [highmask4]
1652
+ res 7, a ; Turn off the "initial" flag
1653
+ jr z, .write_mask4
1654
+
1655
+ checkMute 3, .do_setvol4
1656
+
1657
+ ld a, [hl+]
1658
+ ldh [rAUD4ENV], a
1659
+
1660
+ ld a, [hl+]
1661
+ ld [table4], a
1662
+ ld a, [hl+]
1663
+ ld [table4+1], a
1664
+ xor a
1665
+ ld [table_row4], a
1666
+
1667
+ ld a, [hl]
1668
+ and %00111111
1669
+ ldh [rAUD4LEN], a
1670
+
1671
+ ld a, [channel_period4]
1672
+ ld d, a
1673
+ ld a, [hl]
1674
+ and %10000000
1675
+ swap a
1676
+ ld [step_width4], a
1677
+ or d
1678
+ ld [channel_period4], a
1679
+
1680
+ ld a, [hl]
1681
+ and %01000000
1682
+ or %10000000
1683
+ .write_mask4:
1684
+ ld [highmask4], a
1685
+
1686
+ .do_setvol4:
1687
+ ld e, 3
1688
+ call do_effect
1689
+
1690
+ pop af
1691
+ call c, play_ch4_note
1692
+
1693
+ ld a, [table4]
1694
+ ld c, a
1695
+ ld a, [table4+1]
1696
+ ld b, a
1697
+ or c
1698
+ ld hl, table_row4
1699
+ ld e, 3
1700
+ call nz, do_table
1701
+
1702
+ ;; finally just update the tick/order/row values
1703
+ jp tick_time
1704
+
1705
+ process_effects:
1706
+ ;; Only do effects if not on tick zero
1707
+ checkMute 0, .after_effect1
1708
+
1709
+ ld hl, pattern1
1710
+ ld a, [hl+]
1711
+ ld c, a
1712
+ ld b, [hl]
1713
+ call get_current_row
1714
+
1715
+ ld a, c
1716
+ or a
1717
+ jr z, .after_effect1
1718
+
1719
+ ld e, 0
1720
+ call do_effect ; make sure we never return with ret_dont_play_note!!
1721
+
1722
+ ;; TODO: Deduplicate this code by moving it into do_table?
1723
+ .after_effect1:
1724
+ ld a, [table1]
1725
+ ld c, a
1726
+ ld a, [table1+1]
1727
+ ld b, a
1728
+ or c
1729
+ ld hl, table_row1
1730
+ ld e, 0
1731
+ call nz, do_table
1732
+
1733
+ .process_ch2:
1734
+ checkMute 1, .after_effect2
1735
+
1736
+ ld hl, pattern2
1737
+ ld a, [hl+]
1738
+ ld c, a
1739
+ ld b, [hl]
1740
+ call get_current_row
1741
+
1742
+ ld a, c
1743
+ or a
1744
+ jr z, .after_effect2
1745
+
1746
+ ld e, 1
1747
+ call do_effect ; make sure we never return with ret_dont_play_note!!
1748
+
1749
+ .after_effect2:
1750
+ ld a, [table2]
1751
+ ld c, a
1752
+ ld a, [table2+1]
1753
+ ld b, a
1754
+ or c
1755
+ ld hl, table_row2
1756
+ ld e, 1
1757
+ call nz, do_table
1758
+
1759
+ .process_ch3:
1760
+ checkMute 2, .after_effect3
1761
+
1762
+ ld hl, pattern3
1763
+ ld a, [hl+]
1764
+ ld c, a
1765
+ ld b, [hl]
1766
+ call get_current_row
1767
+
1768
+ ld a, c
1769
+ or a
1770
+ jr z, .after_effect3
1771
+
1772
+ ld e, 2
1773
+ call do_effect ; make sure we never return with ret_dont_play_note!!
1774
+
1775
+ .after_effect3:
1776
+ ld a, [table3]
1777
+ ld c, a
1778
+ ld a, [table3+1]
1779
+ ld b, a
1780
+ or c
1781
+ ld hl, table_row3
1782
+ ld e, 2
1783
+ call nz, do_table
1784
+
1785
+ .process_ch4:
1786
+ checkMute 3, .after_effect4
1787
+
1788
+ ld hl, pattern4
1789
+ ld a, [hl+]
1790
+ ld c, a
1791
+ ld b, [hl]
1792
+ call get_current_row
1793
+
1794
+ ld a, c
1795
+ or a
1796
+ jr z, .after_effect4
1797
+
1798
+ ld e, 3
1799
+ call do_effect ; make sure we never return with ret_dont_play_note!!
1800
+
1801
+ .after_effect4:
1802
+ ld a, [table4]
1803
+ ld c, a
1804
+ ld a, [table4+1]
1805
+ ld b, a
1806
+ or c
1807
+ ld hl, table_row4
1808
+ ld e, 3
1809
+ call nz, do_table
1810
+
1811
+ tick_time:
1812
+ IF DEF(PREVIEW_MODE)
1813
+ db $f4 ; signal tick to tracker
1814
+ ENDC
1815
+
1816
+ ld a, [row]
1817
+ and 3
1818
+ ld hl, ticks_per_row
1819
+ add_a_to_r16 hl
1820
+ ld b, [hl]
1821
+
1822
+ ld hl, counter
1823
+ inc [hl]
1824
+
1825
+ assert counter + 1 == tick
1826
+ inc hl ; ld hl, tick
1827
+ inc [hl] ; Increment tick counter
1828
+
1829
+ ;; Should we switch to the next row?
1830
+ ld a, b
1831
+ sub [hl]
1832
+ ret nz ; Nope.
1833
+ ld [hl+], a ; Reset tick to 0
1834
+ ;; Below code relies on a == 0
1835
+
1836
+ assert tick + 1 == row_break
1837
+ ;; Check if we need to perform a row break or pattern break
1838
+ or [hl] ; a == 0, so this is `ld a, [hl]` that also alters flags
1839
+ jr z, .no_break
1840
+
1841
+ ;; These are offset by one so we can check to see if they've
1842
+ ;; been modified
1843
+ dec a
1844
+ ld b, a
1845
+
1846
+ xor a
1847
+ ld [hl+], a
1848
+ assert row_break + 1 == next_order
1849
+ or [hl] ; a = [next_order], zf = ([next_order] == 0)
1850
+ jr z, .neworder
1851
+ ld [hl], 0
1852
+
1853
+ dec a
1854
+ add a ; multiply order by 2 (they are words)
1855
+
1856
+ jr .update_current_order
1857
+
1858
+ .no_break:
1859
+ ;; Increment row.
1860
+ ld a, [row]
1861
+ inc a
1862
+ cp PATTERN_LENGTH
1863
+ jr nz, .noreset
1864
+
1865
+ ld b, 0
1866
+ .neworder:
1867
+ IF DEF(PREVIEW_MODE)
1868
+ ld a, [loop_order]
1869
+ and a
1870
+ jr z, .no_loop_order
1871
+ xor a
1872
+ jr .noreset
1873
+ .no_loop_order:
1874
+ ENDC
1875
+ ;; Increment order and change loaded patterns
1876
+ ld a, [order_cnt]
1877
+ ld c, a
1878
+ ld a, [current_order]
1879
+ add 2
1880
+ cp c
1881
+ jr nz, .update_current_order
1882
+ xor a
1883
+ .update_current_order:
1884
+ ;; Call with:
1885
+ ;; A: The order to load
1886
+ ;; B: The row for the order to start on
1887
+ ld [current_order], a
1888
+ ld c, a
1889
+ call load_patterns
1890
+
1891
+ ld a, b
1892
+ .noreset:
1893
+ ld [row], a
1894
+
1895
+ IF DEF(PREVIEW_MODE)
1896
+ db $fd ; signal row update to tracker
1897
+
1898
+ ld a, [single_stepping]
1899
+ or a
1900
+ ret z
1901
+
1902
+ ; a is nonzero
1903
+ ld [single_step_stopped], a
1904
+ ENDC
1905
+ ret
1906
+
1907
+ note_table:
1908
+ include "include/hUGE_note_table.inc"