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,1258 @@
1
+ ;FamiTone2 v1.12
2
+ ;for ca65
3
+
4
+
5
+ .export FamiToneInit, FamiToneMusicPlay, FamiToneUpdate
6
+
7
+
8
+
9
+ ;settings, uncomment or put them into your main program; the latter makes possible updates easier
10
+
11
+ FT_BASE_ADR = $0300 ;page in the RAM used for FT2 variables, should be $xx00
12
+ FT_TEMP = $fd ;3 bytes in zeropage used by the library as a scratchpad
13
+ FT_DPCM_OFF = $fc00 ;$c000..$ffc0, 64-byte steps
14
+ FT_SFX_STREAMS = 1 ;number of sound effects played at once, 1..4
15
+
16
+ FT_DPCM_ENABLE = 0 ;undefine to exclude all DMC code (romdev: off by default — re-enable by editing this line)
17
+ FT_SFX_ENABLE = 0 ;undefine to exclude all sound effects code (romdev: off by default — re-enable by editing this line)
18
+ FT_THREAD = 1 ;undefine if you are calling sound effects from the same thread as the sound update call
19
+
20
+ FT_PAL_SUPPORT = 1 ;undefine to exclude PAL support
21
+ FT_NTSC_SUPPORT = 1 ;undefine to exclude NTSC support
22
+
23
+ .if(FT_SFX_ENABLE)
24
+ .export FamiToneSfxPlay, FamiToneSfxInit
25
+ .endif
26
+
27
+
28
+ ;internal defines
29
+
30
+ .if(FT_PAL_SUPPORT & FT_NTSC_SUPPORT)
31
+ FT_PITCH_FIX = 1 ;add PAL/NTSC pitch correction code only when both modes are enabled
32
+ .else
33
+ FT_PITCH_FIX = 0
34
+ .endif
35
+
36
+ FT_DPCM_PTR = (FT_DPCM_OFF&$3fff)>>6
37
+
38
+
39
+ ;zero page variables
40
+
41
+ FT_TEMP_PTR = FT_TEMP ;word
42
+ FT_TEMP_PTR_L = FT_TEMP_PTR+0
43
+ FT_TEMP_PTR_H = FT_TEMP_PTR+1
44
+ FT_TEMP_VAR1 = FT_TEMP+2
45
+ FT_TEMP_SIZE = 3
46
+
47
+ ;envelope structure offsets, 5 bytes per envelope, grouped by variable type
48
+
49
+ FT_ENVELOPES_ALL = 3+3+3+2 ;3 for the pulse and triangle channels, 2 for the noise channel
50
+ FT_ENV_STRUCT_SIZE = 5
51
+
52
+ FT_ENV_VALUE = FT_BASE_ADR+0*FT_ENVELOPES_ALL
53
+ FT_ENV_REPEAT = FT_BASE_ADR+1*FT_ENVELOPES_ALL
54
+ FT_ENV_ADR_L = FT_BASE_ADR+2*FT_ENVELOPES_ALL
55
+ FT_ENV_ADR_H = FT_BASE_ADR+3*FT_ENVELOPES_ALL
56
+ FT_ENV_PTR = FT_BASE_ADR+4*FT_ENVELOPES_ALL
57
+
58
+
59
+ ;channel structure offsets, 7 bytes per channel
60
+
61
+ FT_CHANNELS_ALL = 5
62
+ FT_CHN_STRUCT_SIZE = 9
63
+
64
+ FT_CHN_PTR_L = FT_BASE_ADR+0*FT_CHANNELS_ALL
65
+ FT_CHN_PTR_H = FT_BASE_ADR+1*FT_CHANNELS_ALL
66
+ FT_CHN_NOTE = FT_BASE_ADR+2*FT_CHANNELS_ALL
67
+ FT_CHN_INSTRUMENT = FT_BASE_ADR+3*FT_CHANNELS_ALL
68
+ FT_CHN_REPEAT = FT_BASE_ADR+4*FT_CHANNELS_ALL
69
+ FT_CHN_RETURN_L = FT_BASE_ADR+5*FT_CHANNELS_ALL
70
+ FT_CHN_RETURN_H = FT_BASE_ADR+6*FT_CHANNELS_ALL
71
+ FT_CHN_REF_LEN = FT_BASE_ADR+7*FT_CHANNELS_ALL
72
+ FT_CHN_DUTY = FT_BASE_ADR+8*FT_CHANNELS_ALL
73
+
74
+
75
+ ;variables and aliases
76
+
77
+ FT_ENVELOPES = FT_BASE_ADR
78
+ FT_CH1_ENVS = FT_ENVELOPES+0
79
+ FT_CH2_ENVS = FT_ENVELOPES+3
80
+ FT_CH3_ENVS = FT_ENVELOPES+6
81
+ FT_CH4_ENVS = FT_ENVELOPES+9
82
+
83
+ FT_CHANNELS = FT_ENVELOPES+FT_ENVELOPES_ALL*FT_ENV_STRUCT_SIZE
84
+ FT_CH1_VARS = FT_CHANNELS+0
85
+ FT_CH2_VARS = FT_CHANNELS+1
86
+ FT_CH3_VARS = FT_CHANNELS+2
87
+ FT_CH4_VARS = FT_CHANNELS+3
88
+ FT_CH5_VARS = FT_CHANNELS+4
89
+
90
+
91
+ FT_CH1_NOTE = FT_CH1_VARS+.lobyte(FT_CHN_NOTE)
92
+ FT_CH2_NOTE = FT_CH2_VARS+.lobyte(FT_CHN_NOTE)
93
+ FT_CH3_NOTE = FT_CH3_VARS+.lobyte(FT_CHN_NOTE)
94
+ FT_CH4_NOTE = FT_CH4_VARS+.lobyte(FT_CHN_NOTE)
95
+ FT_CH5_NOTE = FT_CH5_VARS+.lobyte(FT_CHN_NOTE)
96
+
97
+ FT_CH1_INSTRUMENT = FT_CH1_VARS+.lobyte(FT_CHN_INSTRUMENT)
98
+ FT_CH2_INSTRUMENT = FT_CH2_VARS+.lobyte(FT_CHN_INSTRUMENT)
99
+ FT_CH3_INSTRUMENT = FT_CH3_VARS+.lobyte(FT_CHN_INSTRUMENT)
100
+ FT_CH4_INSTRUMENT = FT_CH4_VARS+.lobyte(FT_CHN_INSTRUMENT)
101
+ FT_CH5_INSTRUMENT = FT_CH5_VARS+.lobyte(FT_CHN_INSTRUMENT)
102
+
103
+ FT_CH1_DUTY = FT_CH1_VARS+.lobyte(FT_CHN_DUTY)
104
+ FT_CH2_DUTY = FT_CH2_VARS+.lobyte(FT_CHN_DUTY)
105
+ FT_CH3_DUTY = FT_CH3_VARS+.lobyte(FT_CHN_DUTY)
106
+ FT_CH4_DUTY = FT_CH4_VARS+.lobyte(FT_CHN_DUTY)
107
+ FT_CH5_DUTY = FT_CH5_VARS+.lobyte(FT_CHN_DUTY)
108
+
109
+ FT_CH1_VOLUME = FT_CH1_ENVS+.lobyte(FT_ENV_VALUE)+0
110
+ FT_CH2_VOLUME = FT_CH2_ENVS+.lobyte(FT_ENV_VALUE)+0
111
+ FT_CH3_VOLUME = FT_CH3_ENVS+.lobyte(FT_ENV_VALUE)+0
112
+ FT_CH4_VOLUME = FT_CH4_ENVS+.lobyte(FT_ENV_VALUE)+0
113
+
114
+ FT_CH1_NOTE_OFF = FT_CH1_ENVS+.lobyte(FT_ENV_VALUE)+1
115
+ FT_CH2_NOTE_OFF = FT_CH2_ENVS+.lobyte(FT_ENV_VALUE)+1
116
+ FT_CH3_NOTE_OFF = FT_CH3_ENVS+.lobyte(FT_ENV_VALUE)+1
117
+ FT_CH4_NOTE_OFF = FT_CH4_ENVS+.lobyte(FT_ENV_VALUE)+1
118
+
119
+ FT_CH1_PITCH_OFF = FT_CH1_ENVS+.lobyte(FT_ENV_VALUE)+2
120
+ FT_CH2_PITCH_OFF = FT_CH2_ENVS+.lobyte(FT_ENV_VALUE)+2
121
+ FT_CH3_PITCH_OFF = FT_CH3_ENVS+.lobyte(FT_ENV_VALUE)+2
122
+
123
+
124
+ FT_VARS = FT_CHANNELS+FT_CHANNELS_ALL*FT_CHN_STRUCT_SIZE
125
+
126
+ FT_PAL_ADJUST = FT_VARS+0
127
+ FT_SONG_LIST_L = FT_VARS+1
128
+ FT_SONG_LIST_H = FT_VARS+2
129
+ FT_INSTRUMENT_L = FT_VARS+3
130
+ FT_INSTRUMENT_H = FT_VARS+4
131
+ FT_TEMPO_STEP_L = FT_VARS+5
132
+ FT_TEMPO_STEP_H = FT_VARS+6
133
+ FT_TEMPO_ACC_L = FT_VARS+7
134
+ FT_TEMPO_ACC_H = FT_VARS+8
135
+ FT_SONG_SPEED = FT_CH5_INSTRUMENT
136
+ FT_PULSE1_PREV = FT_CH3_DUTY
137
+ FT_PULSE2_PREV = FT_CH5_DUTY
138
+ FT_DPCM_LIST_L = FT_VARS+9
139
+ FT_DPCM_LIST_H = FT_VARS+10
140
+ FT_DPCM_EFFECT = FT_VARS+11
141
+ FT_OUT_BUF = FT_VARS+12 ;11 bytes
142
+
143
+
144
+ ;sound effect stream variables, 2 bytes and 15 bytes per stream
145
+ ;when sound effects are disabled, this memory is not used
146
+
147
+ FT_SFX_ADR_L = FT_VARS+23
148
+ FT_SFX_ADR_H = FT_VARS+24
149
+ FT_SFX_BASE_ADR = FT_VARS+25
150
+
151
+ FT_SFX_STRUCT_SIZE = 15
152
+ FT_SFX_REPEAT = FT_SFX_BASE_ADR+0
153
+ FT_SFX_PTR_L = FT_SFX_BASE_ADR+1
154
+ FT_SFX_PTR_H = FT_SFX_BASE_ADR+2
155
+ FT_SFX_OFF = FT_SFX_BASE_ADR+3
156
+ FT_SFX_BUF = FT_SFX_BASE_ADR+4 ;11 bytes
157
+
158
+ FT_BASE_SIZE = FT_SFX_BUF+11-FT_BASE_ADR
159
+
160
+ ;aliases for sound effect channels to use in user calls
161
+
162
+ FT_SFX_CH0 = FT_SFX_STRUCT_SIZE*0
163
+ FT_SFX_CH1 = FT_SFX_STRUCT_SIZE*1
164
+ FT_SFX_CH2 = FT_SFX_STRUCT_SIZE*2
165
+ FT_SFX_CH3 = FT_SFX_STRUCT_SIZE*3
166
+ SIZE_FT_SFX = FT_SFX_STRUCT_SIZE*FT_SFX_STREAMS
167
+
168
+
169
+ ;aliases for the APU registers
170
+
171
+ APU_PL1_VOL = $4000
172
+ APU_PL1_SWEEP = $4001
173
+ APU_PL1_LO = $4002
174
+ APU_PL1_HI = $4003
175
+ APU_PL2_VOL = $4004
176
+ APU_PL2_SWEEP = $4005
177
+ APU_PL2_LO = $4006
178
+ APU_PL2_HI = $4007
179
+ APU_TRI_LINEAR = $4008
180
+ APU_TRI_LO = $400a
181
+ APU_TRI_HI = $400b
182
+ APU_NOISE_VOL = $400c
183
+ APU_NOISE_LO = $400e
184
+ APU_NOISE_HI = $400f
185
+ APU_DMC_FREQ = $4010
186
+ APU_DMC_RAW = $4011
187
+ APU_DMC_START = $4012
188
+ APU_DMC_LEN = $4013
189
+ APU_SND_CHN = $4015
190
+
191
+
192
+ ;aliases for the APU registers in the output buffer
193
+
194
+ .if(!FT_SFX_ENABLE) ;if sound effects are disabled, write to the APU directly
195
+ FT_MR_PULSE1_V = APU_PL1_VOL
196
+ FT_MR_PULSE1_L = APU_PL1_LO
197
+ FT_MR_PULSE1_H = APU_PL1_HI
198
+ FT_MR_PULSE2_V = APU_PL2_VOL
199
+ FT_MR_PULSE2_L = APU_PL2_LO
200
+ FT_MR_PULSE2_H = APU_PL2_HI
201
+ FT_MR_TRI_V = APU_TRI_LINEAR
202
+ FT_MR_TRI_L = APU_TRI_LO
203
+ FT_MR_TRI_H = APU_TRI_HI
204
+ FT_MR_NOISE_V = APU_NOISE_VOL
205
+ FT_MR_NOISE_F = APU_NOISE_LO
206
+ .else ;otherwise write to the output buffer
207
+ FT_MR_PULSE1_V = FT_OUT_BUF
208
+ FT_MR_PULSE1_L = FT_OUT_BUF+1
209
+ FT_MR_PULSE1_H = FT_OUT_BUF+2
210
+ FT_MR_PULSE2_V = FT_OUT_BUF+3
211
+ FT_MR_PULSE2_L = FT_OUT_BUF+4
212
+ FT_MR_PULSE2_H = FT_OUT_BUF+5
213
+ FT_MR_TRI_V = FT_OUT_BUF+6
214
+ FT_MR_TRI_L = FT_OUT_BUF+7
215
+ FT_MR_TRI_H = FT_OUT_BUF+8
216
+ FT_MR_NOISE_V = FT_OUT_BUF+9
217
+ FT_MR_NOISE_F = FT_OUT_BUF+10
218
+ .endif
219
+
220
+ POST_FT = FT_SFX_BASE_ADR+SIZE_FT_SFX
221
+ LAST_FT = POST_FT-1
222
+
223
+ .out .sprintf("last FT variable at %x", LAST_FT)
224
+ .out .sprintf("safe to use at %x", POST_FT)
225
+
226
+
227
+ ;------------------------------------------------------------------------------
228
+ ; reset APU, initialize FamiTone
229
+ ; in: A 0 for PAL, not 0 for NTSC
230
+ ; X,Y pointer to music data
231
+ ;------------------------------------------------------------------------------
232
+
233
+ FamiToneInit:
234
+
235
+ stx FT_SONG_LIST_L ;store music data pointer for further use
236
+ sty FT_SONG_LIST_H
237
+ stx <FT_TEMP_PTR_L
238
+ sty <FT_TEMP_PTR_H
239
+
240
+ .if(FT_PITCH_FIX)
241
+ tax ;set SZ flags for A
242
+ beq @pal
243
+ lda #64
244
+ @pal:
245
+ .else
246
+ .if(FT_PAL_SUPPORT)
247
+ lda #0
248
+ .endif
249
+ .if(FT_NTSC_SUPPORT)
250
+ lda #64
251
+ .endif
252
+ .endif
253
+ sta FT_PAL_ADJUST
254
+
255
+ jsr FamiToneMusicStop ;initialize channels and envelopes
256
+
257
+ ldy #1
258
+ lda (FT_TEMP_PTR),y ;get instrument list address
259
+ sta FT_INSTRUMENT_L
260
+ iny
261
+ lda (FT_TEMP_PTR),y
262
+ sta FT_INSTRUMENT_H
263
+ iny
264
+ lda (FT_TEMP_PTR),y ;get sample list address
265
+ sta FT_DPCM_LIST_L
266
+ iny
267
+ lda (FT_TEMP_PTR),y
268
+ sta FT_DPCM_LIST_H
269
+
270
+ lda #$ff ;previous pulse period MSB, to not write it when not changed
271
+ sta FT_PULSE1_PREV
272
+ sta FT_PULSE2_PREV
273
+
274
+ lda #$0f ;enable channels, stop DMC
275
+ sta APU_SND_CHN
276
+ lda #$80 ;disable triangle length counter
277
+ sta APU_TRI_LINEAR
278
+ lda #$00 ;load noise length
279
+ sta APU_NOISE_HI
280
+
281
+ lda #$30 ;volumes to 0
282
+ sta APU_PL1_VOL
283
+ sta APU_PL2_VOL
284
+ sta APU_NOISE_VOL
285
+ lda #$08 ;no sweep
286
+ sta APU_PL1_SWEEP
287
+ sta APU_PL2_SWEEP
288
+
289
+ ;jmp FamiToneMusicStop
290
+
291
+
292
+ ;------------------------------------------------------------------------------
293
+ ; stop music that is currently playing, if any
294
+ ; in: none
295
+ ;------------------------------------------------------------------------------
296
+
297
+ FamiToneMusicStop:
298
+
299
+ lda #0
300
+ sta FT_SONG_SPEED ;stop music, reset pause flag
301
+ sta FT_DPCM_EFFECT ;no DPCM effect playing
302
+
303
+ ldx #.lobyte(FT_CHANNELS) ;initialize channel structures
304
+
305
+ @set_channels:
306
+
307
+ lda #0
308
+ sta FT_CHN_REPEAT,x
309
+ sta FT_CHN_INSTRUMENT,x
310
+ sta FT_CHN_NOTE,x
311
+ sta FT_CHN_REF_LEN,x
312
+ lda #$30
313
+ sta FT_CHN_DUTY,x
314
+
315
+ inx ;next channel
316
+ cpx #.lobyte(FT_CHANNELS)+FT_CHANNELS_ALL
317
+ bne @set_channels
318
+
319
+ ldx #.lobyte(FT_ENVELOPES) ;initialize all envelopes to the dummy envelope
320
+
321
+ @set_envelopes:
322
+
323
+ lda #.lobyte (_FT2DummyEnvelope)
324
+ sta FT_ENV_ADR_L,x
325
+ lda #.hibyte(_FT2DummyEnvelope)
326
+ sta FT_ENV_ADR_H,x
327
+ lda #0
328
+ sta FT_ENV_REPEAT,x
329
+ sta FT_ENV_VALUE,x
330
+ inx
331
+ cpx #.lobyte(FT_ENVELOPES)+FT_ENVELOPES_ALL
332
+
333
+ bne @set_envelopes
334
+
335
+ jmp FamiToneSampleStop
336
+
337
+
338
+ ;------------------------------------------------------------------------------
339
+ ; play music
340
+ ; in: A number of subsong
341
+ ;------------------------------------------------------------------------------
342
+
343
+ FamiToneMusicPlay:
344
+
345
+ ldx FT_SONG_LIST_L
346
+ stx <FT_TEMP_PTR_L
347
+ ldx FT_SONG_LIST_H
348
+ stx <FT_TEMP_PTR_H
349
+
350
+ ldy #0
351
+ cmp (FT_TEMP_PTR),y ;check if there is such sub song
352
+ bcs @skip
353
+
354
+ asl a ;multiply song number by 14
355
+ sta <FT_TEMP_PTR_L ;use pointer LSB as temp variable
356
+ asl a
357
+ tax
358
+ asl a
359
+ adc <FT_TEMP_PTR_L
360
+ stx <FT_TEMP_PTR_L
361
+ adc <FT_TEMP_PTR_L
362
+ adc #5 ;add offset
363
+ tay
364
+
365
+ lda FT_SONG_LIST_L ;restore pointer LSB
366
+ sta <FT_TEMP_PTR_L
367
+
368
+ jsr FamiToneMusicStop ;stop music, initialize channels and envelopes
369
+
370
+ ldx #.lobyte(FT_CHANNELS) ;initialize channel structures
371
+
372
+ @set_channels:
373
+
374
+ lda (FT_TEMP_PTR),y ;read channel pointers
375
+ sta FT_CHN_PTR_L,x
376
+ iny
377
+ lda (FT_TEMP_PTR),y
378
+ sta FT_CHN_PTR_H,x
379
+ iny
380
+
381
+ lda #0
382
+ sta FT_CHN_REPEAT,x
383
+ sta FT_CHN_INSTRUMENT,x
384
+ sta FT_CHN_NOTE,x
385
+ sta FT_CHN_REF_LEN,x
386
+ lda #$30
387
+ sta FT_CHN_DUTY,x
388
+
389
+ inx ;next channel
390
+ cpx #.lobyte(FT_CHANNELS)+FT_CHANNELS_ALL
391
+ bne @set_channels
392
+
393
+ .if(FT_PAL_SUPPORT)
394
+ lda FT_PAL_ADJUST ;read tempo for PAL or NTSC
395
+ beq @pal
396
+ .endif
397
+ iny
398
+ iny
399
+ @pal:
400
+
401
+ lda (FT_TEMP_PTR),y ;read the tempo step
402
+ sta FT_TEMPO_STEP_L
403
+ iny
404
+ lda (FT_TEMP_PTR),y
405
+ sta FT_TEMPO_STEP_H
406
+
407
+
408
+ lda #0 ;reset tempo accumulator
409
+ sta FT_TEMPO_ACC_L
410
+ lda #6 ;default speed
411
+ sta FT_TEMPO_ACC_H
412
+ sta FT_SONG_SPEED ;apply default speed, this also enables music
413
+
414
+ @skip:
415
+ rts
416
+
417
+
418
+ ;------------------------------------------------------------------------------
419
+ ; pause and unpause current music
420
+ ; in: A 0 or not 0 to play or pause
421
+ ;------------------------------------------------------------------------------
422
+
423
+ FamiToneMusicPause:
424
+
425
+ tax ;set SZ flags for A
426
+ beq @unpause
427
+
428
+ @pause:
429
+
430
+ jsr FamiToneSampleStop
431
+
432
+ lda #0 ;mute sound
433
+ sta FT_CH1_VOLUME
434
+ sta FT_CH2_VOLUME
435
+ sta FT_CH3_VOLUME
436
+ sta FT_CH4_VOLUME
437
+ lda FT_SONG_SPEED ;set pause flag
438
+ ora #$80
439
+ bne @done
440
+ @unpause:
441
+ lda FT_SONG_SPEED ;reset pause flag
442
+ and #$7f
443
+ @done:
444
+ sta FT_SONG_SPEED
445
+
446
+ rts
447
+
448
+
449
+ ;------------------------------------------------------------------------------
450
+ ; update FamiTone state, should be called every NMI
451
+ ; in: none
452
+ ;------------------------------------------------------------------------------
453
+
454
+ FamiToneUpdate:
455
+
456
+ .if(FT_THREAD)
457
+ lda FT_TEMP_PTR_L
458
+ pha
459
+ lda FT_TEMP_PTR_H
460
+ pha
461
+ .endif
462
+
463
+ lda FT_SONG_SPEED ;speed 0 means that no music is playing currently
464
+ bmi @pause ;bit 7 set is the pause flag
465
+ bne @update
466
+ @pause:
467
+ jmp @update_sound
468
+
469
+ @update:
470
+
471
+ clc ;update frame counter that considers speed, tempo, and PAL/NTSC
472
+ lda FT_TEMPO_ACC_L
473
+ adc FT_TEMPO_STEP_L
474
+ sta FT_TEMPO_ACC_L
475
+ lda FT_TEMPO_ACC_H
476
+ adc FT_TEMPO_STEP_H
477
+ cmp FT_SONG_SPEED
478
+ bcs @update_row ;overflow, row update is needed
479
+ sta FT_TEMPO_ACC_H ;no row update, skip to the envelopes update
480
+ jmp @update_envelopes
481
+
482
+ @update_row:
483
+
484
+ sec
485
+ sbc FT_SONG_SPEED
486
+ sta FT_TEMPO_ACC_H
487
+
488
+
489
+ ldx #.lobyte(FT_CH1_VARS) ;process channel 1
490
+ jsr _FT2ChannelUpdate
491
+ bcc @no_new_note1
492
+ ldx #.lobyte(FT_CH1_ENVS)
493
+ lda FT_CH1_INSTRUMENT
494
+ jsr _FT2SetInstrument
495
+ sta FT_CH1_DUTY
496
+ @no_new_note1:
497
+
498
+ ldx #.lobyte(FT_CH2_VARS) ;process channel 2
499
+ jsr _FT2ChannelUpdate
500
+ bcc @no_new_note2
501
+ ldx #.lobyte(FT_CH2_ENVS)
502
+ lda FT_CH2_INSTRUMENT
503
+ jsr _FT2SetInstrument
504
+ sta FT_CH2_DUTY
505
+ @no_new_note2:
506
+
507
+ ldx #.lobyte(FT_CH3_VARS) ;process channel 3
508
+ jsr _FT2ChannelUpdate
509
+ bcc @no_new_note3
510
+ ldx #.lobyte(FT_CH3_ENVS)
511
+ lda FT_CH3_INSTRUMENT
512
+ jsr _FT2SetInstrument
513
+ @no_new_note3:
514
+
515
+ ldx #.lobyte(FT_CH4_VARS) ;process channel 4
516
+ jsr _FT2ChannelUpdate
517
+ bcc @no_new_note4
518
+ ldx #.lobyte(FT_CH4_ENVS)
519
+ lda FT_CH4_INSTRUMENT
520
+ jsr _FT2SetInstrument
521
+ sta FT_CH4_DUTY
522
+ @no_new_note4:
523
+
524
+ .if(FT_DPCM_ENABLE)
525
+
526
+ ldx #.lobyte(FT_CH5_VARS) ;process channel 5
527
+ jsr _FT2ChannelUpdate
528
+ bcc @no_new_note5
529
+ lda FT_CH5_NOTE
530
+ bne @play_sample
531
+ jsr FamiToneSampleStop
532
+ bne @no_new_note5 ;A is non-zero after FamiToneSampleStop
533
+ @play_sample:
534
+ jsr FamiToneSamplePlayM
535
+ @no_new_note5:
536
+
537
+ .endif
538
+
539
+
540
+ @update_envelopes:
541
+
542
+ ldx #.lobyte(FT_ENVELOPES) ;process 11 envelopes
543
+
544
+ @env_process:
545
+
546
+ lda FT_ENV_REPEAT,x ;check envelope repeat counter
547
+ beq @env_read ;if it is zero, process envelope
548
+ dec FT_ENV_REPEAT,x ;otherwise decrement the counter
549
+ bne @env_next
550
+
551
+ @env_read:
552
+
553
+ lda FT_ENV_ADR_L,x ;load envelope data address into temp
554
+ sta <FT_TEMP_PTR_L
555
+ lda FT_ENV_ADR_H,x
556
+ sta <FT_TEMP_PTR_H
557
+ ldy FT_ENV_PTR,x ;load envelope pointer
558
+
559
+ @env_read_value:
560
+
561
+ lda (FT_TEMP_PTR),y ;read a byte of the envelope data
562
+ bpl @env_special ;values below 128 used as a special code, loop or repeat
563
+ clc ;values above 128 are output value+192 (output values are signed -63..64)
564
+ adc #256-192
565
+ sta FT_ENV_VALUE,x ;store the output value
566
+ iny ;advance the pointer
567
+ bne @env_next_store_ptr ;bra
568
+
569
+ @env_special:
570
+
571
+ bne @env_set_repeat ;zero is the loop point, non-zero values used for the repeat counter
572
+ iny ;advance the pointer
573
+ lda (FT_TEMP_PTR),y ;read loop position
574
+ tay ;use loop position
575
+ jmp @env_read_value ;read next byte of the envelope
576
+
577
+ @env_set_repeat:
578
+
579
+ iny
580
+ sta FT_ENV_REPEAT,x ;store the repeat counter value
581
+
582
+ @env_next_store_ptr:
583
+
584
+ tya ;store the envelope pointer
585
+ sta FT_ENV_PTR,x
586
+
587
+ @env_next:
588
+
589
+ inx ;next envelope
590
+
591
+ cpx #.lobyte(FT_ENVELOPES)+FT_ENVELOPES_ALL
592
+ bne @env_process
593
+
594
+
595
+ @update_sound:
596
+
597
+ ;convert envelope and channel output data into APU register values in the output buffer
598
+
599
+ lda FT_CH1_NOTE
600
+ beq @ch1cut
601
+ clc
602
+ adc FT_CH1_NOTE_OFF
603
+ .if(FT_PITCH_FIX)
604
+ ora FT_PAL_ADJUST
605
+ .endif
606
+ tax
607
+ lda FT_CH1_PITCH_OFF
608
+ tay
609
+ adc _FT2NoteTableLSB,x
610
+ sta FT_MR_PULSE1_L
611
+ tya ;sign extension for the pitch offset
612
+ ora #$7f
613
+ bmi @ch1sign
614
+ lda #0
615
+ @ch1sign:
616
+ adc _FT2NoteTableMSB,x
617
+
618
+ .if(!FT_SFX_ENABLE)
619
+ cmp FT_PULSE1_PREV
620
+ beq @ch1prev
621
+ sta FT_PULSE1_PREV
622
+ .endif
623
+
624
+ sta FT_MR_PULSE1_H
625
+ @ch1prev:
626
+ lda FT_CH1_VOLUME
627
+ @ch1cut:
628
+ ora FT_CH1_DUTY
629
+ sta FT_MR_PULSE1_V
630
+
631
+
632
+ lda FT_CH2_NOTE
633
+ beq @ch2cut
634
+ clc
635
+ adc FT_CH2_NOTE_OFF
636
+ .if(FT_PITCH_FIX)
637
+ ora FT_PAL_ADJUST
638
+ .endif
639
+ tax
640
+ lda FT_CH2_PITCH_OFF
641
+ tay
642
+ adc _FT2NoteTableLSB,x
643
+ sta FT_MR_PULSE2_L
644
+ tya
645
+ ora #$7f
646
+ bmi @ch2sign
647
+ lda #0
648
+ @ch2sign:
649
+ adc _FT2NoteTableMSB,x
650
+
651
+ .if(!FT_SFX_ENABLE)
652
+ cmp FT_PULSE2_PREV
653
+ beq @ch2prev
654
+ sta FT_PULSE2_PREV
655
+ .endif
656
+
657
+ sta FT_MR_PULSE2_H
658
+ @ch2prev:
659
+ lda FT_CH2_VOLUME
660
+ @ch2cut:
661
+ ora FT_CH2_DUTY
662
+ sta FT_MR_PULSE2_V
663
+
664
+
665
+ lda FT_CH3_NOTE
666
+ beq @ch3cut
667
+ clc
668
+ adc FT_CH3_NOTE_OFF
669
+ .if(FT_PITCH_FIX)
670
+ ora FT_PAL_ADJUST
671
+ .endif
672
+ tax
673
+ lda FT_CH3_PITCH_OFF
674
+ tay
675
+ adc _FT2NoteTableLSB,x
676
+ sta FT_MR_TRI_L
677
+ tya
678
+ ora #$7f
679
+ bmi @ch3sign
680
+ lda #0
681
+ @ch3sign:
682
+ adc _FT2NoteTableMSB,x
683
+ sta FT_MR_TRI_H
684
+ lda FT_CH3_VOLUME
685
+ @ch3cut:
686
+ ora #$80
687
+ sta FT_MR_TRI_V
688
+
689
+
690
+ lda FT_CH4_NOTE
691
+ beq @ch4cut
692
+ clc
693
+ adc FT_CH4_NOTE_OFF
694
+ and #$0f
695
+ eor #$0f
696
+ sta <FT_TEMP_VAR1
697
+ lda FT_CH4_DUTY
698
+ asl a
699
+ and #$80
700
+ ora <FT_TEMP_VAR1
701
+ sta FT_MR_NOISE_F
702
+ lda FT_CH4_VOLUME
703
+ @ch4cut:
704
+ ora #$f0
705
+ sta FT_MR_NOISE_V
706
+
707
+
708
+ .if(FT_SFX_ENABLE)
709
+
710
+ ;process all sound effect streams
711
+
712
+ .if FT_SFX_STREAMS>0
713
+ ldx #FT_SFX_CH0
714
+ jsr _FT2SfxUpdate
715
+ .endif
716
+ .if FT_SFX_STREAMS>1
717
+ ldx #FT_SFX_CH1
718
+ jsr _FT2SfxUpdate
719
+ .endif
720
+ .if FT_SFX_STREAMS>2
721
+ ldx #FT_SFX_CH2
722
+ jsr _FT2SfxUpdate
723
+ .endif
724
+ .if FT_SFX_STREAMS>3
725
+ ldx #FT_SFX_CH3
726
+ jsr _FT2SfxUpdate
727
+ .endif
728
+
729
+
730
+ ;send data from the output buffer to the APU
731
+
732
+ lda FT_OUT_BUF ;pulse 1 volume
733
+ sta APU_PL1_VOL
734
+ lda FT_OUT_BUF+1 ;pulse 1 period LSB
735
+ sta APU_PL1_LO
736
+ lda FT_OUT_BUF+2 ;pulse 1 period MSB, only applied when changed
737
+ cmp FT_PULSE1_PREV
738
+ beq @no_pulse1_upd
739
+ sta FT_PULSE1_PREV
740
+ sta APU_PL1_HI
741
+ @no_pulse1_upd:
742
+
743
+ lda FT_OUT_BUF+3 ;pulse 2 volume
744
+ sta APU_PL2_VOL
745
+ lda FT_OUT_BUF+4 ;pulse 2 period LSB
746
+ sta APU_PL2_LO
747
+ lda FT_OUT_BUF+5 ;pulse 2 period MSB, only applied when changed
748
+ cmp FT_PULSE2_PREV
749
+ beq @no_pulse2_upd
750
+ sta FT_PULSE2_PREV
751
+ sta APU_PL2_HI
752
+ @no_pulse2_upd:
753
+
754
+ lda FT_OUT_BUF+6 ;triangle volume (plays or not)
755
+ sta APU_TRI_LINEAR
756
+ lda FT_OUT_BUF+7 ;triangle period LSB
757
+ sta APU_TRI_LO
758
+ lda FT_OUT_BUF+8 ;triangle period MSB
759
+ sta APU_TRI_HI
760
+
761
+ lda FT_OUT_BUF+9 ;noise volume
762
+ sta APU_NOISE_VOL
763
+ lda FT_OUT_BUF+10 ;noise period
764
+ sta APU_NOISE_LO
765
+
766
+ .endif
767
+
768
+ .if(FT_THREAD)
769
+ pla
770
+ sta FT_TEMP_PTR_H
771
+ pla
772
+ sta FT_TEMP_PTR_L
773
+ .endif
774
+
775
+ rts
776
+
777
+
778
+ ;internal routine, sets up envelopes of a channel according to current instrument
779
+ ;in X envelope group offset, A instrument number
780
+
781
+ _FT2SetInstrument:
782
+ asl a ;instrument number is pre multiplied by 4
783
+ tay
784
+ lda FT_INSTRUMENT_H
785
+ adc #0 ;use carry to extend range for 64 instruments
786
+ sta <FT_TEMP_PTR_H
787
+ lda FT_INSTRUMENT_L
788
+ sta <FT_TEMP_PTR_L
789
+
790
+ lda (FT_TEMP_PTR),y ;duty cycle
791
+ sta <FT_TEMP_VAR1
792
+ iny
793
+
794
+ lda (FT_TEMP_PTR),y ;instrument pointer LSB
795
+ sta FT_ENV_ADR_L,x
796
+ iny
797
+ lda (FT_TEMP_PTR),y ;instrument pointer MSB
798
+ iny
799
+ sta FT_ENV_ADR_H,x
800
+ inx ;next envelope
801
+
802
+ lda (FT_TEMP_PTR),y ;instrument pointer LSB
803
+ sta FT_ENV_ADR_L,x
804
+ iny
805
+ lda (FT_TEMP_PTR),y ;instrument pointer MSB
806
+ sta FT_ENV_ADR_H,x
807
+
808
+ lda #0
809
+ sta FT_ENV_REPEAT-1,x ;reset env1 repeat counter
810
+ sta FT_ENV_PTR-1,x ;reset env1 pointer
811
+ sta FT_ENV_REPEAT,x ;reset env2 repeat counter
812
+ sta FT_ENV_PTR,x ;reset env2 pointer
813
+
814
+ cpx #.lobyte(FT_CH4_ENVS) ;noise channel has only two envelopes
815
+ bcs @no_pitch
816
+
817
+ inx ;next envelope
818
+ iny
819
+ sta FT_ENV_REPEAT,x ;reset env3 repeat counter
820
+ sta FT_ENV_PTR,x ;reset env3 pointer
821
+ lda (FT_TEMP_PTR),y ;instrument pointer LSB
822
+ sta FT_ENV_ADR_L,x
823
+ iny
824
+ lda (FT_TEMP_PTR),y ;instrument pointer MSB
825
+ sta FT_ENV_ADR_H,x
826
+
827
+ @no_pitch:
828
+ lda <FT_TEMP_VAR1
829
+ rts
830
+
831
+
832
+ ;internal routine, parses channel note data
833
+
834
+ _FT2ChannelUpdate:
835
+
836
+ lda FT_CHN_REPEAT,x ;check repeat counter
837
+ beq @no_repeat
838
+ dec FT_CHN_REPEAT,x ;decrease repeat counter
839
+ clc ;no new note
840
+ rts
841
+
842
+ @no_repeat:
843
+ lda FT_CHN_PTR_L,x ;load channel pointer into temp
844
+ sta <FT_TEMP_PTR_L
845
+ lda FT_CHN_PTR_H,x
846
+ sta <FT_TEMP_PTR_H
847
+ @no_repeat_r:
848
+ ldy #0
849
+
850
+ @read_byte:
851
+ lda (FT_TEMP_PTR),y ;read byte of the channel
852
+
853
+ inc <FT_TEMP_PTR_L ;advance pointer
854
+ bne @no_inc_ptr1
855
+ inc <FT_TEMP_PTR_H
856
+ @no_inc_ptr1:
857
+
858
+ ora #0
859
+ bmi @special_code ;bit 7 0=note 1=special code
860
+
861
+ lsr a ;bit 0 set means the note is followed by an empty row
862
+ bcc @no_empty_row
863
+ inc FT_CHN_REPEAT,x ;set repeat counter to 1
864
+ @no_empty_row:
865
+ sta FT_CHN_NOTE,x ;store note code
866
+ sec ;new note flag is set
867
+ bcs @done ;bra
868
+
869
+ @special_code:
870
+ and #$7f
871
+ lsr a
872
+ bcs @set_empty_rows
873
+ asl a
874
+ asl a
875
+ sta FT_CHN_INSTRUMENT,x ;store instrument number*4
876
+ bcc @read_byte ;bra
877
+
878
+ @set_empty_rows:
879
+ cmp #$3d
880
+ bcc @set_repeat
881
+ beq @set_speed
882
+ cmp #$3e
883
+ beq @set_loop
884
+
885
+ @set_reference:
886
+ clc ;remember return address+3
887
+ lda <FT_TEMP_PTR_L
888
+ adc #3
889
+ sta FT_CHN_RETURN_L,x
890
+ lda <FT_TEMP_PTR_H
891
+ adc #0
892
+ sta FT_CHN_RETURN_H,x
893
+ lda (FT_TEMP_PTR),y ;read length of the reference (how many rows)
894
+ sta FT_CHN_REF_LEN,x
895
+ iny
896
+ lda (FT_TEMP_PTR),y ;read 16-bit absolute address of the reference
897
+ sta <FT_TEMP_VAR1 ;remember in temp
898
+ iny
899
+ lda (FT_TEMP_PTR),y
900
+ sta <FT_TEMP_PTR_H
901
+ lda <FT_TEMP_VAR1
902
+ sta <FT_TEMP_PTR_L
903
+ ldy #0
904
+ jmp @read_byte
905
+
906
+ @set_speed:
907
+ lda (FT_TEMP_PTR),y
908
+ sta FT_SONG_SPEED
909
+ inc <FT_TEMP_PTR_L ;advance pointer after reading the speed value
910
+ bne @read_byte
911
+ inc <FT_TEMP_PTR_H
912
+ bne @read_byte ;bra
913
+
914
+ @set_loop:
915
+ lda (FT_TEMP_PTR),y
916
+ sta <FT_TEMP_VAR1
917
+ iny
918
+ lda (FT_TEMP_PTR),y
919
+ sta <FT_TEMP_PTR_H
920
+ lda <FT_TEMP_VAR1
921
+ sta <FT_TEMP_PTR_L
922
+ dey
923
+ jmp @read_byte
924
+
925
+ @set_repeat:
926
+ sta FT_CHN_REPEAT,x ;set up repeat counter, carry is clear, no new note
927
+
928
+ @done:
929
+ lda FT_CHN_REF_LEN,x ;check reference row counter
930
+ beq @no_ref ;if it is zero, there is no reference
931
+ dec FT_CHN_REF_LEN,x ;decrease row counter
932
+ bne @no_ref
933
+
934
+ lda FT_CHN_RETURN_L,x ;end of a reference, return to previous pointer
935
+ sta FT_CHN_PTR_L,x
936
+ lda FT_CHN_RETURN_H,x
937
+ sta FT_CHN_PTR_H,x
938
+ rts
939
+
940
+ @no_ref:
941
+ lda <FT_TEMP_PTR_L
942
+ sta FT_CHN_PTR_L,x
943
+ lda <FT_TEMP_PTR_H
944
+ sta FT_CHN_PTR_H,x
945
+ rts
946
+
947
+
948
+
949
+ ;------------------------------------------------------------------------------
950
+ ; stop DPCM sample if it plays
951
+ ;------------------------------------------------------------------------------
952
+
953
+ FamiToneSampleStop:
954
+
955
+ lda #%00001111
956
+ sta APU_SND_CHN
957
+
958
+ rts
959
+
960
+
961
+
962
+ .if(FT_DPCM_ENABLE)
963
+
964
+ ;------------------------------------------------------------------------------
965
+ ; play DPCM sample, used by music player, could be used externally
966
+ ; in: A is number of a sample, 1..63
967
+ ;------------------------------------------------------------------------------
968
+
969
+ FamiToneSamplePlayM: ;for music (low priority)
970
+
971
+ ldx FT_DPCM_EFFECT
972
+ beq _FT2SamplePlay
973
+ tax
974
+ lda APU_SND_CHN
975
+ and #16
976
+ beq @not_busy
977
+ rts
978
+
979
+ @not_busy:
980
+ sta FT_DPCM_EFFECT
981
+ txa
982
+ jmp _FT2SamplePlay
983
+
984
+ ;------------------------------------------------------------------------------
985
+ ; play DPCM sample with higher priority, for sound effects
986
+ ; in: A is number of a sample, 1..63
987
+ ;------------------------------------------------------------------------------
988
+
989
+ FamiToneSamplePlay:
990
+
991
+ ldx #1
992
+ stx FT_DPCM_EFFECT
993
+
994
+ _FT2SamplePlay:
995
+
996
+ sta <FT_TEMP ;sample number*3, offset in the sample table
997
+ asl a
998
+ clc
999
+ adc <FT_TEMP
1000
+
1001
+ adc FT_DPCM_LIST_L
1002
+ sta <FT_TEMP_PTR_L
1003
+ lda #0
1004
+ adc FT_DPCM_LIST_H
1005
+ sta <FT_TEMP_PTR_H
1006
+
1007
+ lda #%00001111 ;stop DPCM
1008
+ sta APU_SND_CHN
1009
+
1010
+ ldy #0
1011
+ lda (FT_TEMP_PTR),y ;sample offset
1012
+ sta APU_DMC_START
1013
+ iny
1014
+ lda (FT_TEMP_PTR),y ;sample length
1015
+ sta APU_DMC_LEN
1016
+ iny
1017
+ lda (FT_TEMP_PTR),y ;pitch and loop
1018
+ sta APU_DMC_FREQ
1019
+
1020
+ lda #32 ;reset DAC counter
1021
+ sta APU_DMC_RAW
1022
+ lda #%00011111 ;start DMC
1023
+ sta APU_SND_CHN
1024
+
1025
+ rts
1026
+
1027
+ .endif
1028
+
1029
+ .if(FT_SFX_ENABLE)
1030
+
1031
+ ;------------------------------------------------------------------------------
1032
+ ; init sound effects player, set pointer to data
1033
+ ; in: X,Y is address of sound effects data
1034
+ ;------------------------------------------------------------------------------
1035
+
1036
+ FamiToneSfxInit:
1037
+
1038
+ stx <FT_TEMP_PTR_L
1039
+ sty <FT_TEMP_PTR_H
1040
+
1041
+ ldy #0
1042
+
1043
+ .if(FT_PITCH_FIX)
1044
+
1045
+ lda FT_PAL_ADJUST ;add 2 to the sound list pointer for PAL
1046
+ bne @ntsc
1047
+ iny
1048
+ iny
1049
+ @ntsc:
1050
+
1051
+ .endif
1052
+
1053
+ lda (FT_TEMP_PTR),y ;read and store pointer to the effects list
1054
+ sta FT_SFX_ADR_L
1055
+ iny
1056
+ lda (FT_TEMP_PTR),y
1057
+ sta FT_SFX_ADR_H
1058
+
1059
+ ldx #FT_SFX_CH0 ;init all the streams
1060
+
1061
+ @set_channels:
1062
+ jsr _FT2SfxClearChannel
1063
+ txa
1064
+ clc
1065
+ adc #FT_SFX_STRUCT_SIZE
1066
+ tax
1067
+ cpx #FT_SFX_STRUCT_SIZE*FT_SFX_STREAMS
1068
+ bne @set_channels
1069
+
1070
+ rts
1071
+
1072
+
1073
+ ;internal routine, clears output buffer of a sound effect
1074
+ ;in: A is 0
1075
+ ; X is offset of sound effect stream
1076
+
1077
+ _FT2SfxClearChannel:
1078
+
1079
+ lda #0
1080
+ sta FT_SFX_PTR_H,x ;this stops the effect
1081
+ sta FT_SFX_REPEAT,x
1082
+ sta FT_SFX_OFF,x
1083
+ sta FT_SFX_BUF+6,x ;mute triangle
1084
+ lda #$30
1085
+ sta FT_SFX_BUF+0,x ;mute pulse1
1086
+ sta FT_SFX_BUF+3,x ;mute pulse2
1087
+ sta FT_SFX_BUF+9,x ;mute noise
1088
+
1089
+ rts
1090
+
1091
+
1092
+ ;------------------------------------------------------------------------------
1093
+ ; play sound effect
1094
+ ; in: A is a number of the sound effect 0..127
1095
+ ; X is offset of sound effect channel, should be FT_SFX_CH0..FT_SFX_CH3
1096
+ ;------------------------------------------------------------------------------
1097
+
1098
+ FamiToneSfxPlay:
1099
+
1100
+ asl a ;get offset in the effects list
1101
+ tay
1102
+
1103
+ jsr _FT2SfxClearChannel ;stops the effect if it plays
1104
+
1105
+ lda FT_SFX_ADR_L
1106
+ sta <FT_TEMP_PTR_L
1107
+ lda FT_SFX_ADR_H
1108
+ sta <FT_TEMP_PTR_H
1109
+
1110
+ lda (FT_TEMP_PTR),y ;read effect pointer from the table
1111
+ sta FT_SFX_PTR_L,x ;store it
1112
+ iny
1113
+ lda (FT_TEMP_PTR),y
1114
+ sta FT_SFX_PTR_H,x ;this write enables the effect
1115
+
1116
+ rts
1117
+
1118
+
1119
+ ;internal routine, update one sound effect stream
1120
+ ;in: X is offset of sound effect stream
1121
+
1122
+ _FT2SfxUpdate:
1123
+
1124
+ lda FT_SFX_REPEAT,x ;check if repeat counter is not zero
1125
+ beq @no_repeat
1126
+ dec FT_SFX_REPEAT,x ;decrement and return
1127
+ bne @update_buf ;just mix with output buffer
1128
+
1129
+ @no_repeat:
1130
+ lda FT_SFX_PTR_H,x ;check if MSB of the pointer is not zero
1131
+ bne @sfx_active
1132
+ rts ;return otherwise, no active effect
1133
+
1134
+ @sfx_active:
1135
+ sta <FT_TEMP_PTR_H ;load effect pointer into temp
1136
+ lda FT_SFX_PTR_L,x
1137
+ sta <FT_TEMP_PTR_L
1138
+ ldy FT_SFX_OFF,x
1139
+ clc
1140
+
1141
+ @read_byte:
1142
+ lda (FT_TEMP_PTR),y ;read byte of effect
1143
+ bmi @get_data ;if bit 7 is set, it is a register write
1144
+ beq @eof
1145
+ iny
1146
+ sta FT_SFX_REPEAT,x ;if bit 7 is reset, it is number of repeats
1147
+ tya
1148
+ sta FT_SFX_OFF,x
1149
+ jmp @update_buf
1150
+
1151
+ @get_data:
1152
+ iny
1153
+ stx <FT_TEMP_VAR1 ;it is a register write
1154
+ adc <FT_TEMP_VAR1 ;get offset in the effect output buffer
1155
+ tax
1156
+ lda (FT_TEMP_PTR),y ;read value
1157
+ iny
1158
+ sta FT_SFX_BUF-128,x ;store into output buffer
1159
+ ldx <FT_TEMP_VAR1
1160
+ jmp @read_byte ;and read next byte
1161
+
1162
+ @eof:
1163
+ sta FT_SFX_PTR_H,x ;mark channel as inactive
1164
+
1165
+ @update_buf:
1166
+
1167
+ lda FT_OUT_BUF ;compare effect output buffer with main output buffer
1168
+ and #$0f ;if volume of pulse 1 of effect is higher than that of the
1169
+ sta <FT_TEMP_VAR1 ;main buffer, overwrite the main buffer value with the new one
1170
+ lda FT_SFX_BUF+0,x
1171
+ and #$0f
1172
+ cmp <FT_TEMP_VAR1
1173
+ bcc @no_pulse1
1174
+ lda FT_SFX_BUF+0,x
1175
+ sta FT_OUT_BUF+0
1176
+ lda FT_SFX_BUF+1,x
1177
+ sta FT_OUT_BUF+1
1178
+ lda FT_SFX_BUF+2,x
1179
+ sta FT_OUT_BUF+2
1180
+ @no_pulse1:
1181
+
1182
+ lda FT_OUT_BUF+3 ;same for pulse 2
1183
+ and #$0f
1184
+ sta <FT_TEMP_VAR1
1185
+ lda FT_SFX_BUF+3,x
1186
+ and #$0f
1187
+ cmp <FT_TEMP_VAR1
1188
+ bcc @no_pulse2
1189
+ lda FT_SFX_BUF+3,x
1190
+ sta FT_OUT_BUF+3
1191
+ lda FT_SFX_BUF+4,x
1192
+ sta FT_OUT_BUF+4
1193
+ lda FT_SFX_BUF+5,x
1194
+ sta FT_OUT_BUF+5
1195
+ @no_pulse2:
1196
+
1197
+ lda FT_SFX_BUF+6,x ;overwrite triangle of main output buffer if it is active
1198
+ beq @no_triangle
1199
+ sta FT_OUT_BUF+6
1200
+ lda FT_SFX_BUF+7,x
1201
+ sta FT_OUT_BUF+7
1202
+ lda FT_SFX_BUF+8,x
1203
+ sta FT_OUT_BUF+8
1204
+ @no_triangle:
1205
+
1206
+ lda FT_OUT_BUF+9 ;same as for pulse 1 and 2, but for noise
1207
+ and #$0f
1208
+ sta <FT_TEMP_VAR1
1209
+ lda FT_SFX_BUF+9,x
1210
+ and #$0f
1211
+ cmp <FT_TEMP_VAR1
1212
+ bcc @no_noise
1213
+ lda FT_SFX_BUF+9,x
1214
+ sta FT_OUT_BUF+9
1215
+ lda FT_SFX_BUF+10,x
1216
+ sta FT_OUT_BUF+10
1217
+ @no_noise:
1218
+
1219
+ rts
1220
+
1221
+ .endif
1222
+
1223
+
1224
+ ;dummy envelope used to initialize all channels with silence
1225
+
1226
+ _FT2DummyEnvelope:
1227
+ .byte $c0,$00,$00
1228
+
1229
+ ;PAL and NTSC, 11-bit dividers
1230
+ ;rest note, then octaves 1-5, then three zeroes
1231
+ ;first 64 bytes are PAL, next 64 bytes are NTSC
1232
+
1233
+ _FT2NoteTableLSB:
1234
+ .if(FT_PAL_SUPPORT)
1235
+ .byte $00,$33,$da,$86,$36,$eb,$a5,$62,$23,$e7,$af,$7a,$48,$19,$ec,$c2
1236
+ .byte $9a,$75,$52,$30,$11,$f3,$d7,$bc,$a3,$8c,$75,$60,$4c,$3a,$28,$17
1237
+ .byte $08,$f9,$eb,$dd,$d1,$c5,$ba,$af,$a5,$9c,$93,$8b,$83,$7c,$75,$6e
1238
+ .byte $68,$62,$5c,$57,$52,$4d,$49,$45,$41,$3d,$3a,$36,$33,$30,$2d,$2b
1239
+ .endif
1240
+ .if(FT_NTSC_SUPPORT)
1241
+ .byte $00,$ad,$4d,$f2,$9d,$4c,$00,$b8,$74,$34,$f7,$be,$88,$56,$26,$f8
1242
+ .byte $ce,$a5,$7f,$5b,$39,$19,$fb,$de,$c3,$aa,$92,$7b,$66,$52,$3f,$2d
1243
+ .byte $1c,$0c,$fd,$ee,$e1,$d4,$c8,$bd,$b2,$a8,$9f,$96,$8d,$85,$7e,$76
1244
+ .byte $70,$69,$63,$5e,$58,$53,$4f,$4a,$46,$42,$3e,$3a,$37,$34,$31,$2e
1245
+ .endif
1246
+ _FT2NoteTableMSB:
1247
+ .if(FT_PAL_SUPPORT)
1248
+ .byte $00,$06,$05,$05,$05,$04,$04,$04,$04,$03,$03,$03,$03,$03,$02,$02
1249
+ .byte $02,$02,$02,$02,$02,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
1250
+ .byte $01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
1251
+ .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
1252
+ .endif
1253
+ .if(FT_NTSC_SUPPORT)
1254
+ .byte $00,$06,$06,$05,$05,$05,$05,$04,$04,$04,$03,$03,$03,$03,$03,$02
1255
+ .byte $02,$02,$02,$02,$02,$02,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
1256
+ .byte $01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
1257
+ .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
1258
+ .endif