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,1367 @@
1
+ /****************************************************************************
2
+ * __ *
3
+ * ____ ___ ____ __ ______ ___ ____ ____/ / *
4
+ * / __ `__ \/ __ `/ |/ / __ `__ \/ __ \/ __ / *
5
+ * / / / / / / /_/ /> </ / / / / / /_/ / /_/ / *
6
+ * /_/ /_/ /_/\__,_/_/|_/_/ /_/ /_/\____/\__,_/ *
7
+ * *
8
+ * GBA Audio System *
9
+ * *
10
+ * Copyright (c) 2008, Mukunda Johnson (mukunda@maxmod.org) *
11
+ * *
12
+ * Permission to use, copy, modify, and/or distribute this software for any *
13
+ * purpose with or without fee is hereby granted, provided that the above *
14
+ * copyright notice and this permission notice appear in all copies. *
15
+ * *
16
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES *
17
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF *
18
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR *
19
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES *
20
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN *
21
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *
22
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. *
23
+ ****************************************************************************/
24
+
25
+ @ DEFINITIONS
26
+
27
+ #include "mp_macros.inc"
28
+ #include "mp_format_mas.inc"
29
+ #include "mp_defs.inc"
30
+
31
+ @ timer freq = 2^24 / mixfreq
32
+ @ mixlen ~= mixfreq * 0.01673
33
+ @ recommended mixing frequencies: 5734,7884,10512,13379,15768,18157,21024,26758,31536,36314,40137,42048
34
+ @ other mixing frequencies may cause clicks
35
+ @ mixlen must be divisible by 2
36
+
37
+ @==================================================================
38
+ @ GLOBAL SYMBOLS
39
+ @==================================================================
40
+
41
+
42
+ .global mmVBlank
43
+ .type mmVBlank STT_FUNC
44
+ .global mmMixerMix
45
+ .type mmMixerMix STT_FUNC
46
+
47
+ .global mmMixerSetSource
48
+ .type mmMixerSetSource STT_FUNC
49
+ .global mmMixerSetRead
50
+ .type mmMixerSetRead STT_FUNC
51
+ .global mmMixerSetFreq
52
+ .type mmMixerSetFreq STT_FUNC
53
+ .global mmMixerStopChannel
54
+ .type mmMixerStopChannel STT_FUNC
55
+ .global mmMixerInit
56
+ .type mmMixerInit STT_FUNC
57
+ .global mmMixerChannelActive
58
+ .type mmMixerChannelActive STT_FUNC
59
+ .global mmMixerMulFreq
60
+ .type mmMixerMulFreq STT_FUNC
61
+ .global mmMixerSetVolume
62
+ .type mmMixerSetVolume STT_FUNC
63
+ .global mmMixerSetPan
64
+ .type mmMixerSetPan STT_FUNC
65
+
66
+ // .global mm_freqscalar
67
+ .global mm_mixlen
68
+ .global mm_bpmdv
69
+ .global mp_mix_seg
70
+ .global mp_writepos
71
+ .global mm_mixchannels
72
+
73
+ @===============================================
74
+ @ more definitions
75
+ @===============================================
76
+
77
+ .EQU REG_SOUNDCNT_L, 0x4000080
78
+ .EQU REG_SOUNDCNT_H, 0x4000082
79
+ .EQU REG_SOUNDCNT_X, 0x4000084
80
+
81
+ .EQU REG_TM0CNT, 0x4000100
82
+
83
+ .EQU REG_DMA1SAD, 0x40000BC
84
+ .EQU REG_DMA1DAD, 0x40000C0
85
+ .EQU REG_DMA1CNT, 0x40000C4
86
+
87
+ .EQU REG_DMA2SAD, 0x40000C8
88
+ .EQU REG_DMA2DAD, 0x40000CC
89
+ .EQU REG_DMA2CNT, 0x40000D0
90
+
91
+ .EQU REG_DMA3SAD, 0x40000D4
92
+ .EQU REG_DMA3DAD, 0x40000D8
93
+ .EQU REG_DMA3CNT, 0x40000DC
94
+
95
+ .EQU REG_SGFIFOA, 0x40000A0
96
+ .EQU REG_SGFIFOB, 0x40000A4
97
+ .EQU REG_VCOUNT, 0x4000006
98
+
99
+ @ MIXER CHANNEL FORMAT
100
+
101
+ .equ CHN_SIZE, 24
102
+
103
+ .equ CHN_SRC,0
104
+ .equ CHN_READ,4
105
+ .equ CHN_VOL,8
106
+ .equ CHN_PAN,9
107
+ // 10
108
+ // 11
109
+ .equ CHN_FREQ,12
110
+ .equ CHN_SIZE,16
111
+
112
+ /////////////////////.equ CHN_LOOP,8
113
+ /////////////////////.equ CHN_LEN,16
114
+
115
+ @-------------------------------------
116
+
117
+ .equ FETCH_SIZE, 384
118
+ .equ FETCH_THRESHOLD, (6016)//7040 // frequency threshold (dont use fetch for high freqs!)
119
+
120
+ @======================================================================
121
+ @ MEMORY
122
+ @======================================================================
123
+
124
+ .section .bss
125
+ .align 2
126
+
127
+ mp_writepos: .space 4 @ wavebuffer write position
128
+
129
+ mm_mixbuffer: .space 4 @ dont move (see init)
130
+ mm_mixchannels: .space 4 @ dont move
131
+ mm_wavebuffer: .space 4 @ dont move
132
+ mm_mixlen: .space 4 @ dont move
133
+ mm_mixch_count: .space 4 @ dont move
134
+ mm_mixch_end: .space 4 @ dont move
135
+ mm_ratescale: .space 4 @ dont move
136
+ mm_timerfreq: .space 4 @ dont move
137
+
138
+ mm_bpmdv: .space 4
139
+
140
+ mp_mix_seg: .space 1 @ mixing segment select
141
+
142
+ .align 2
143
+
144
+ mm_fetch: .space FETCH_SIZE+16
145
+
146
+ @ 11-bit mixed sample buffer
147
+ @ data is interleaved
148
+ @ left,left,right,right,left,left,etc...
149
+
150
+ @===========================================================================
151
+ @ PROGRAM
152
+ @===========================================================================
153
+
154
+ .section .iwram, "ax", %progbits
155
+
156
+ .ARM
157
+ .ALIGN 2
158
+
159
+ mpm_nullsample:
160
+ .byte 128
161
+
162
+ .align 2
163
+ @-----------------------------------------------------------------------------------------------------
164
+ mmVBlank: @ vblank wrapper, used to reset dma...HIGH PRIORITY PLEASE!
165
+ @-----------------------------------------------------------------------------------------------------
166
+
167
+ b .mpvb_disabled @ disable until ready.. (overwrite this area with NOP)
168
+
169
+ ldr r0,=mp_mix_seg @ swap mixing segmentl
170
+ ldrsb r1, [r0]
171
+ mvns r1, r1
172
+ strb r1, [r0]
173
+ beq .mpvb_exit
174
+
175
+ ldr r1,=0x040000c6 @ dma control RESTART DMA
176
+ ldr r0,=0x0440 @ disable dma
177
+ strh r0, [r1]
178
+ strh r0, [r1,#12]
179
+ ldr r0,=0xB600 @ restart dma
180
+ strh r0, [r1]
181
+ strh r0, [r1,#12]
182
+
183
+ b .mpvb_dontreset
184
+ .mpvb_exit:
185
+ ldr r0,=mp_writepos @ restart write position
186
+ @ ldr r1,=mp_playbuffer_l @ ...
187
+ ldr r1,=mm_wavebuffer
188
+ ldr r1, [r1]
189
+ str r1, [r0] @ ...
190
+ .mpvb_dontreset:
191
+
192
+ .mpvb_disabled:
193
+ ldr r0,=0x3007FF8 @ acknowledge interrupt
194
+ ldrh r2, [r0]
195
+ orr r2, r2, #0x1
196
+ strh r2, [r0]
197
+
198
+ ldr r0,=mm_vblank_function
199
+ ldr r0, [r0]
200
+ cmp r0, #0
201
+ bxeq lr
202
+ bx r0
203
+ .pool
204
+
205
+ .align 2
206
+ @-------------------------------------------------------------------------
207
+ mmMixerMix: @ params={ samples_count }
208
+ @-------------------------------------------------------------------------
209
+
210
+ @ exit function if samples == 0
211
+ @ it will malfunction.
212
+
213
+ cmp r0, #0
214
+ bne .mp_zerocheck
215
+ bx lr
216
+
217
+ .mp_zerocheck:
218
+
219
+ @ preserve registers
220
+
221
+ stmfd sp!, {r4-r11,lr}
222
+
223
+ stmfd sp!, {r0} @ preserve mixing count
224
+
225
+ @------------------------------------------------------------------------
226
+ @ SECTOR 0, INITIALIZATION
227
+ @------------------------------------------------------------------------
228
+
229
+ @ clear mixing buffers
230
+
231
+ and r10, r0, #7
232
+ mov r2, r0, lsr#3 @ clearing samps*2*2 bytes (hword*stereo) 32 bytes at a time
233
+ ldr r0,=mm_mixbuffer
234
+ ldr r0,[r0]
235
+ mov r1, #0 @ zero variable
236
+ mov r3, r1
237
+ mov r4, r1
238
+ mov r5, r1
239
+ mov r6, r1
240
+ mov r7, r1
241
+ mov r8, r1
242
+ mov r9, r1
243
+
244
+ cmp r2, #0
245
+ beq 2f
246
+
247
+ @ clear 32 bytes/write
248
+
249
+ 1: stmia r0!, {r1,r3-r9}
250
+ subs r2, r2, #1
251
+ bne 1b
252
+ 2:
253
+
254
+ @ clear remainder
255
+ cmp r10, #0
256
+ beq 2f
257
+
258
+ 1: str r1, [r0], #4
259
+ subs r10, r10, #1
260
+ bne 1b
261
+ 2:
262
+
263
+ @----------------------------------------------------------------------------------
264
+ @ BEGIN MIXING ROUTINE
265
+ @----------------------------------------------------------------------------------
266
+
267
+ ldr r12,=mm_mixchannels
268
+ ldr r12,[r12]
269
+ mov r11, #0 @ volume addition
270
+
271
+ @--------------------
272
+ .mpm_cloop:
273
+ @--------------------
274
+
275
+ @----------------------------------------------------------------------
276
+ @ SECTOR 1, CALCULATIONS
277
+ @----------------------------------------------------------------------
278
+
279
+ @ aliases
280
+ #define rchan r12
281
+ #define rvolA r11
282
+ #define rsrc r10
283
+ #define rfreq r9
284
+ #define rmixb r8
285
+ #define rread r7
286
+ #define rvolL r5
287
+ #define rvolR r6
288
+ #define rmixc r4
289
+ #define rmixcc r3
290
+
291
+ @ read source address
292
+
293
+ ldr rsrc, [rchan, #CHN_SRC]
294
+ cmp rsrc, #0
295
+ bmi .mpm_next @ EXIT if MSB is set ------------>
296
+
297
+ @ read frequency value
298
+
299
+ ldr rfreq, [rchan, #CHN_FREQ]
300
+ cmp rfreq, #0
301
+ beq .mpm_next @ EXIT if zero ----------------=->
302
+
303
+ ldr r0,=mm_ratescale
304
+ ldr r0, [r0]
305
+ mul rfreq, r0
306
+ lsr rfreq, #14
307
+
308
+ @ load mixing buffers
309
+
310
+ ldr rmixb,=mm_mixbuffer
311
+ ldr rmixb,[rmixb]
312
+
313
+ @ get read position
314
+
315
+ ldr rread, [rchan, #CHN_READ]
316
+
317
+ @ calculate volume
318
+
319
+ ldrb rvolR,[rchan, #CHN_VOL] @ volume = 0-255
320
+ ldrb r0, [rchan, #CHN_PAN] @ pan = 0-255
321
+
322
+ rsb r0, r0, #256
323
+ mul rvolL, r0, rvolR @ (vol*pan) = right volume
324
+ mov rvolL, rvolL, lsr#8
325
+ add rvolA, rvolA, rvolL @ add to volume counter
326
+ rsb r0, r0, #256
327
+ mul rvolR, r0, rvolR @ calc left volume (256-pan)*vol
328
+ mov rvolR, rvolR, lsr#8
329
+ add rvolA, rvolA, rvolR, lsl#16
330
+
331
+ ldr rmixc, [sp] @ get mix count
332
+
333
+ @****************************************************************
334
+ .mpm_remix_test:
335
+ @****************************************************************
336
+
337
+ mov r2, #0
338
+ mul r1, rmixc, rfreq // get number of samples that will be read
339
+
340
+ cmp rfreq, #FETCH_THRESHOLD
341
+ bge 1f
342
+
343
+ cmp r1, #FETCH_SIZE<<12 // check if its > fetch size
344
+ movhi r1, #FETCH_SIZE<<12 // if so: clamp to fetch size and set flag
345
+ movhi r2, #1
346
+
347
+ 1:
348
+ // ldr r0, [rchan, #CHN_LEN] // now subtract length - read to get # samples remaining
349
+ ldr r0, [rsrc, #-C_SAMPLE_DATA+C_SAMPLE_LEN]
350
+ rsb r0, rread, r0, lsl#SAMPFRAC
351
+ // sub r0, r0, rread // in the source
352
+ cmp r1, r0 // clamp mix count
353
+ movhi r1, r0
354
+ bhi .calc_mix
355
+ cmp r2, #0
356
+ beq .mpm_mix_full
357
+
358
+ .calc_mix:
359
+
360
+
361
+ push {r1} // preserve sample count
362
+
363
+
364
+ //--------------------------------
365
+ .macro DIV_ITER shift
366
+ //--------------------------------
367
+ cmp r0, rfreq, lsl#\shift
368
+ subcs r0, rfreq, lsl#\shift
369
+ addcs r2, #1<<\shift
370
+ .endm
371
+ //--------------------------------
372
+ .macro DIVIDER shift
373
+ //--------------------------------
374
+ DIV_ITER \shift
375
+ .if \shift != 0
376
+ DIVIDER (\shift-1)
377
+ .endif
378
+ .endm
379
+ //--------------------------------
380
+
381
+ mov r0, r1 // divide samples / frequency (24bit/16bit)
382
+ mov r2, #0
383
+
384
+ 1: subs r0, rfreq, lsl#16 // divide top part
385
+ addcs r2, #1<<16
386
+ bcs 1b
387
+ add r0, rfreq, lsl#16
388
+
389
+ DIVIDER 15 // divide the rest...
390
+
391
+ cmp r0, #1 // round up result
392
+ adc r0, r2, #0
393
+
394
+ // mov r0,r1
395
+ // mov r1,rfreq
396
+ // swi 0x060000
397
+ // cmp r1, #0
398
+ // addne r0, #1
399
+
400
+ pop {r1} // restore sample count
401
+ sub rmixc, r0 // subtract from mixcount
402
+ mov rmixcc, r0
403
+ b .mpm_mix_short
404
+
405
+ @------------------------------------------------------------------------
406
+ @ SECTOR 2, MIXING
407
+ @------------------------------------------------------------------------
408
+
409
+ @-----------------------------------------
410
+ .mpm_mix_full:
411
+ @-----------------------------------------
412
+
413
+ @ mix all samples
414
+
415
+ mov rmixcc, rmixc @ <-- move mixing count
416
+ mov rmixc, #0 @ clear mixing count
417
+ .mpm_mix_short:
418
+
419
+ @------------------------------------------------------
420
+ .mpm_remix:
421
+ @------------------------------------------------------
422
+
423
+ @ mix samples...
424
+ @ preserve registers
425
+ stmfd sp!, {rmixc,rvolA,rchan}
426
+
427
+ @ zero mixing count??
428
+ cmp rmixcc, #0
429
+ beq .mpm_mix_complete @ exit -------->
430
+
431
+ cmp rfreq, #FETCH_THRESHOLD
432
+ bge .dont_use_fetch
433
+
434
+ /*
435
+ ldr r0,=mm_fetch // transfer samples from ROM to RAM
436
+ add r1, #2<<14 // add threshold for safety
437
+ ldr r2,=REG_DMA3SAD
438
+ str r0, [r2, #4]
439
+ add r0, r10, rread, lsr#12
440
+ bic r0, #0b11
441
+ str r0, [r2, #0]
442
+ mov r0, #(1<<31)+(1<<26)
443
+ add r0, r1, lsr#14
444
+ str r0, [r2, #8]
445
+ b fooo
446
+ */
447
+
448
+ // [cycle timings assume 3,1 ROM waitstates]
449
+
450
+ push {r3-r12}
451
+ // r10 is SRC!
452
+ ldr r0,=mm_fetch // destination
453
+ add r10, r10, rread, lsr#12 // add read offset to source
454
+ bic r10, #0b11 // align to 32 bits
455
+ add r1, #4<<12 // add safety threshold
456
+ subs r1, #40<<12 // subtract 36
457
+
458
+ bcc .exit_fetch // skip large fetch if negative
459
+ .fetch: ldmia r10!, {r2-r9,r11,r14} // read 40 samples [44 cycles]
460
+ stmia r0!, {r2-r9,r11,r14} // write 40 samples [11 cycles]
461
+ subs r1, #40<<12 // count [1 cycle ]
462
+ bcc .exit_fetch // exit if done [1 cycle ]
463
+ ldmia r10!, {r2-r9,r11,r14} // read 40 samples [44 cycles]
464
+ stmia r0!, {r2-r9,r11,r14} // write 40 samples [11 cycles]
465
+ subs r1, #40<<12 // count [1 cycle ]
466
+ bcc .exit_fetch // exit if done [1 cycle ]
467
+ ldmia r10!, {r2-r9,r11,r14} // read 40 samples [44 cycles]
468
+ stmia r0!, {r2-r9,r11,r14} // write 40 samples [11 cycles]
469
+ subs r1, #40<<12 // count [1 cycle ]
470
+ bcs .fetch // loop if remaining [3 cycles]
471
+ // [173 cycles/120 samples]
472
+ .exit_fetch:
473
+
474
+ adds r1, #(40<<12)-(24<<12)
475
+ bmi .end_medfetch
476
+ .medfetch:
477
+ ldmia r10!, {r2-r7} // read 24 samples [26]
478
+ stmia r0!, {r2-r7} // write 24 samples [7 ]
479
+ subs r1, #24<<12 // count [1 ]
480
+ bcc .end_medfetch // exit if done [1 ]
481
+ ldmia r10!, {r2-r7} // read 24 samples [26]
482
+ stmia r0!, {r2-r7} // write 24 samples [7 ]
483
+ subs r1, #24<<12 // count [1 ]
484
+ bcc .end_medfetch // exit if done [1 ]
485
+ ldmia r10!, {r2-r7} // read 24 samples [26]
486
+ stmia r0!, {r2-r7} // write 24 samples [7 ]
487
+ subs r1, #24<<12 // count [1 ]
488
+ bcs .medfetch // loop [3 ]
489
+ .end_medfetch: // [107]
490
+
491
+ adds r1, #24<<12 // add 24 back
492
+ bmi .end_fetch // exit if <= 0
493
+ .fetchsmall:
494
+ ldr r2, [r10], #4 // read 4 samples [8]
495
+ str r2, [r0], #4 // write 4 samples [2]
496
+ subs r1, #4<<12 // count [1]
497
+ ble .end_fetch // exit maybe [1]
498
+ ldr r2, [r10], #4 // read 4 samples [8]
499
+ str r2, [r0], #4 // write 4 samples [2]
500
+ subs r1, #4<<12 // count [1]
501
+ bgt .fetchsmall // exit maybe [3]
502
+ .end_fetch:
503
+
504
+ pop {r3-r12} // restore regs
505
+
506
+ fooo:
507
+
508
+ mov r0, rread, lsr#12 // get read integer
509
+ push {r0, rsrc} // preserve regs
510
+ bic rread, r0, lsl#12 // clear integer
511
+ and r0, #0b11 // mask low bits
512
+ ldr rsrc,=mm_fetch //
513
+ add rsrc, rsrc, r0 // offset source (fetch is word aligned!)
514
+
515
+ .dont_use_fetch:
516
+
517
+ tst rmixb, #0b11 // test alignment of work output
518
+ beq .mpm_aligned
519
+
520
+ #define rsamp1 r1
521
+ #define rsampa r0
522
+ #define rsampb r2
523
+ @ routine to WORD align mixing sector
524
+ ldrb rsampa, [rsrc, rread, lsr#SAMPFRAC] @ load sample
525
+ add rread, rread, rfreq @ add frequency
526
+ mul rsampb, rsampa, rvolL @ multiply by left volume
527
+ ldrh rsamp1, [rmixb] @ add to mixing buffer (left)
528
+ add rsamp1, rsamp1, rsampb, lsr#5
529
+ strh rsamp1, [rmixb], #4
530
+ mul rsampb, rsampa, rvolR @ multiply by right volume
531
+ ldrh rsamp1, [rmixb] @ add to mixing buffer (right)
532
+ add rsamp1, rsamp1, rsampb, lsr#5
533
+ strh rsamp1, [rmixb], #2
534
+ sub rmixcc, rmixcc, #1 @ decrement mix count
535
+
536
+ #undef rsamp1
537
+ #undef rsampa
538
+ #undef rsampb
539
+
540
+ .mpm_aligned:
541
+ // determine mixing mode
542
+ cmp rvolL, rvolR // if volume_left == volume_right then assume 'center' mixing
543
+ beq .mpm_mix_ac
544
+ cmp rvolL, #0 // if left volume is zero, do 'right' mixing
545
+ beq .mpm_mix_ar
546
+ cmp rvolR, #0 // if right volume is zero, do 'left' mixing
547
+ beq .mpm_mix_al
548
+ b mmMix_ArbPanning // otherwise do arb mixing
549
+ .mpm_mix_al:
550
+ b mmMix_HardLeft
551
+ .mpm_mix_ar:
552
+ b mmMix_HardRight
553
+
554
+ @ center mixing------------
555
+ .mpm_mix_ac:
556
+ cmp rvolL, #0 // check if volume is zero
557
+ bne mmMix_CenteredPanning // mix samples if not zero
558
+ b mmMix_Skip // skip samples if zero
559
+ .mpm_mix_complete:
560
+
561
+ cmp rfreq, #FETCH_THRESHOLD
562
+ poplt {r0, rsrc} // restore regs
563
+ addlt rread, rread, r0, lsl#12 // add old integer to read
564
+ ldmfd sp!, {rmixc,rvolA,rchan} // restore more regs
565
+
566
+ ldr r1, [rsrc, #-C_SAMPLE_DATA+C_SAMPLE_LEN]
567
+ lsl r1, #SAMPFRAC
568
+ //ldr r1, [rchan, #CHN_LEN] // check length against position
569
+ cmp r1, rread
570
+ bgt .mpm_channelfinished
571
+
572
+ // ldr r1, [rchan, #CHN_LOOP] // read channel loop
573
+
574
+ ldr r1, [rsrc, #-C_SAMPLE_DATA+C_SAMPLE_LOOP]
575
+ cmp r1, #0
576
+ // movs r1, r1, lsl#8 // mask out high byte (that is VOLUME)
577
+ bmi .mpm_channel_stop // MSB = no loop, stop channel ->
578
+
579
+
580
+ sub rread,rread,r1,lsl#(SAMPFRAC) // subtract loop length (<<SAMPFRAC) from position
581
+
582
+ cmp rmixc, #0 // mix more samples?
583
+ ble .mpm_channelfinished // no ->
584
+ b .mpm_remix_test // yes: loop
585
+
586
+ @----------------------------------------------------------------
587
+ .mpm_channel_stop:
588
+ @----------------------------------------------------------------
589
+
590
+ @ *** END OF SAMPLE
591
+ mov r1, #1<<31 // disable channel
592
+ str r1, [rchan, #CHN_SRC]
593
+
594
+ @ mix zero into the rest of the buffer
595
+ ldr rsrc,=mpm_nullsample // mix zero into the rest of the buffer
596
+ mov rfreq, #0 // zero freq
597
+ mov rread, #0 // zero freq
598
+ movs rmixcc, rmixc // mix remaining amount
599
+ ble .mpm_channelfinished // (exit if zero)
600
+ mov rmixc, #0
601
+ mov r1, #0
602
+ b .mpm_remix // mix 'zero' into the rest of the data
603
+
604
+ @---------------------------------------------------------------
605
+ .mpm_channelfinished:
606
+ @---------------------------------------------------------------
607
+
608
+ cmp rmixc, #0 // mix more samples?
609
+ bne .mpm_remix_test // yes: loop
610
+
611
+ @ *** END OF MIXING ***
612
+
613
+ str rread, [rchan, #CHN_READ] // save read position
614
+
615
+ @-----------------------
616
+ .mpm_next:
617
+ @-----------------------
618
+
619
+ add rchan, rchan, #CHN_SIZE // seek to next channel
620
+ ldr r0,=mm_mixch_end // compare with ending
621
+ ldr r0,[r0]
622
+ cmp rchan, r0
623
+ bne .mpm_cloop // loop if !=
624
+
625
+ @----------------------------------------------------------------------------------
626
+ @ SECTOR 3, POST-PROCESSING
627
+ @----------------------------------------------------------------------------------
628
+
629
+ #define prmixl r0
630
+ #define prwritel r2
631
+ #define prwriter r3
632
+ #define prcount r4
633
+ #define prvolR r12
634
+ #define prvolL r11
635
+ #define prsamp1 r6
636
+ #define prsamp2 r5
637
+ #define prsamp3 r7
638
+
639
+ ldr prmixl,=mm_mixbuffer
640
+ ldr prmixl,[prmixl]
641
+
642
+ ldr prwritel,=mp_writepos
643
+ ldr prwritel, [prwritel]
644
+ ldr prwriter,=mm_mixlen
645
+ ldr prwriter, [prwriter]
646
+ add prwriter, prwritel, prwriter, lsl#1 @#MP_MIXLEN*2
647
+ ldmfd sp!, {prcount}
648
+
649
+ @ get volume accumulators
650
+
651
+ mov prvolR, rvolA, lsr#16+1
652
+ mov prvolR, prvolR, lsl#3
653
+
654
+ mov prvolL, rvolA, lsl#16
655
+ mov prvolL, prvolL, lsr#16+1
656
+ mov prvolL, prvolL, lsl#3
657
+
658
+ subs prcount, prcount, #1
659
+ ble .mpm_copy2_end
660
+
661
+ @--------------------------------------------------
662
+ .mpm_copy2:
663
+ @--------------------------------------------------
664
+
665
+ @ ***************** LEFT OUTPUT ******************
666
+
667
+ ldr prsamp1, [prmixl], #4 @ get 2 mixed samples
668
+ sub prsamp2, prsamp1, prvolL @ convert to signed
669
+
670
+ mov prsamp2, prsamp2, lsl#16 @ mask low hword with sign extension
671
+ movs prsamp2, prsamp2, asr#16+3 @ and convert 11-bit to 8-bit
672
+
673
+ cmp prsamp2, #-128 @ clamp
674
+ movlt prsamp2, #-128 @
675
+ cmp prsamp2, #127 @
676
+ movgt prsamp2, #127 @
677
+
678
+ @ next sample...
679
+ rsbs prsamp3, prvolL, prsamp1,lsr#16 @ convert to signed
680
+ movs prsamp3, prsamp3, asr#3 @ convert 11-bit to 8-bit
681
+
682
+ cmp prsamp3, #-128 @ clamp
683
+ movlt prsamp3, #-128 @
684
+ cmp prsamp3, #127 @
685
+ movgt prsamp3, #127 @
686
+
687
+ and prsamp2, prsamp2, #255 @ write to output
688
+ orr prsamp2, prsamp3, lsl#8 @
689
+ strh prsamp2, [prwritel], #2 @
690
+
691
+ @ **************** RIGHT OUTPUT ******************
692
+
693
+ ldr prsamp1, [prmixl], #4 @ get 2 mixed samples
694
+ sub prsamp2, prsamp1, prvolR @ convert to signed
695
+
696
+ mov prsamp2, prsamp2, lsl#16 @ mask low hword and convert 11-bit to 8-bit
697
+ movs prsamp2, prsamp2, asr#16+3 @
698
+
699
+ cmp prsamp2, #-128 @ clamp value
700
+ movlt prsamp2, #-128 @
701
+ cmp prsamp2, #127 @
702
+ movgt prsamp2, #127 @
703
+
704
+ @ next sample...
705
+ rsbs prsamp3, prvolR, prsamp1,lsr#16 @ convert to signed
706
+ movs prsamp3, prsamp3, asr#3 @ convert 11-bit to 8-bit
707
+
708
+ cmp prsamp3, #-128 @ clamp value
709
+ movlt prsamp3, #-128 @
710
+ cmp prsamp3, #127 @
711
+ movgt prsamp3, #127 @
712
+
713
+ and prsamp2, prsamp2, #255 @ write to output
714
+ orr prsamp2, prsamp3, lsl#8 @
715
+ strh prsamp2, [prwriter], #2 @
716
+
717
+ subs prcount, prcount, #2 @ loop
718
+ bgt .mpm_copy2 @
719
+
720
+ @------------------------------------------------------------------
721
+
722
+ .mpm_copy2_end:
723
+ ldr r0,=mp_writepos @ store new write position
724
+ str prwritel, [r0]
725
+
726
+ @------------------------------------------------------------------
727
+
728
+ ldmfd sp!, {r4-r11,lr} // restore registers
729
+ bx lr // phew!
730
+
731
+ .pool
732
+
733
+ @================================================================================
734
+ @ MIXING ROUTINES
735
+ @================================================================================
736
+
737
+ .macro READ_AND_INCREMENT reg
738
+ ldrb \reg, [rsrc, rread, lsr#SAMPFRAC]
739
+ add rread, rread, rfreq
740
+ .endm
741
+
742
+ .macro READ_D reg, tmp
743
+ READ_AND_INCREMENT \reg
744
+ READ_AND_INCREMENT \tmp
745
+ orr \reg, \tmp, lsl#16
746
+ .endm
747
+
748
+ .macro MIX_D vol, tmp1, tmp2
749
+ READ_D \tmp1, \tmp2 // load&combine 2 samples
750
+ mul \tmp2, \tmp1, \vol // multiply by volume
751
+ bic \tmp2, \tmp2, #0x1F0000 // prepare for shift
752
+ .endm
753
+
754
+ .macro MIX_DA vol, target, tmp1, tmp2
755
+ MIX_D \vol, \tmp1, \tmp2
756
+ add \target, \target, \tmp2, lsr#5 // add 11-bit values
757
+ .endm
758
+
759
+ .macro MIX_DC vol, target_a, target_b, tmp1, tmp2
760
+ MIX_D \vol, \tmp1, \tmp2
761
+ add \target_a, \target_a, \tmp2, lsr#5 // add 11-bit values
762
+ add \target_b, \target_b, \tmp2, lsr#5
763
+ .endm
764
+
765
+ .macro MIX_DB vol_l, vol_r, target_a, target_b, tmp1, tmp2
766
+ READ_D \tmp1, \tmp2
767
+
768
+ .if \target_a != 0
769
+ mul \tmp2, \tmp1, \vol_l // multiply by volume
770
+ bic \tmp2, \tmp2, #0x1F0000 // prepare for shift
771
+ add \target_a, \target_a, \tmp2, lsr#5 // add 11-bit values
772
+ .endif
773
+ .if \target_b != 0
774
+ mul \tmp2, \tmp1, \vol_r // multiply by volume
775
+ bic \tmp2, \tmp2, #0x1F0000 // prepare for shift
776
+ add \target_b, \target_b, \tmp2, lsr#5 // add 11-bit values
777
+ .endif
778
+ .endm
779
+
780
+ @-----------------------------------------------------------------------------------
781
+ mmMix_Skip:
782
+ @-----------------------------------------------------------------------------------
783
+
784
+ @ mix nothing
785
+ mul r0, rmixcc, rfreq @ read += samples * frequency
786
+ add rread, rread, r0
787
+ b .mpm_mix_complete
788
+
789
+ @-----------------------------------------------------------------------------------
790
+ mmMix_HardLeft:
791
+ @-----------------------------------------------------------------------------------
792
+ @ mix hard panned left
793
+
794
+ bl mmMix_SingleChannel // mix left channel
795
+ bgt mmMix_Remainder // mix remaining amount
796
+ b .mpm_mix_complete // return
797
+
798
+ @-----------------------------------------------------------------------------------
799
+ mmMix_HardRight:
800
+ @-----------------------------------------------------------------------------------
801
+ @ hard panned right
802
+
803
+ mov rvolL, rvolR // move volume
804
+ add rmixb, rmixb, #4 // offset to 'right' data
805
+ bl mmMix_SingleChannel // mix routine
806
+ mov rvolL, #0 // clear left volume again
807
+ sub rmixb, rmixb, #4 // remove offet
808
+ bgt mmMix_Remainder // mix remaining count
809
+ b .mpm_mix_complete // return
810
+
811
+ @----------------------------------------
812
+ mmMix_SingleChannel:
813
+ @----------------------------------------
814
+
815
+ #define rsamp1 r1
816
+ #define rsamp2 r2
817
+ #define rsamp3 r11
818
+ #define rsamp4 r12
819
+ #define rsampa r0
820
+ #define rsampb r4
821
+
822
+ @ hard panned mixing (single channel mono)
823
+ @ interleaving really cuts this method's effectiveness :(
824
+
825
+ @ mix 8 samples/loop
826
+
827
+ subs rmixcc, rmixcc, #8
828
+ bmi .mpmah_8e
829
+ .mpmah_8:
830
+ ldmia rmixb, {rsamp1, rsamp2, rsamp3} // load data [2nd word not used]
831
+ MIX_DA rvolL, rsamp1, rsampa, rsampb // mix data
832
+ str rsamp1, [rmixb], #8 // store mixed word
833
+ MIX_DA rvolL, rsamp3, rsampa, rsampb // mix data
834
+ str rsamp3, [rmixb], #8 // store mixed word
835
+ ldmia rmixb, {rsamp1, rsamp2, rsamp3} // load data [2nd word not used]
836
+ MIX_DA rvolL, rsamp1, rsampa, rsampb // mix data
837
+ str rsamp1, [rmixb], #8 // store mixed word
838
+ MIX_DA rvolL, rsamp3, rsampa, rsampb // mix data
839
+ str rsamp3, [rmixb], #8 // store mixed word
840
+ subs rmixcc, rmixcc, #8 // decrement 8 samples
841
+ bpl .mpmah_8 // loop if >= 0
842
+ .mpmah_8e:
843
+
844
+ @ mix remainder samples
845
+
846
+ adds rmixcc, rmixcc, #8 // fix mixing count
847
+ bx lr // return
848
+
849
+ #undef rsamp1
850
+ #undef rsamp2
851
+ #undef rsamp3
852
+ #undef rsamp4
853
+ #undef rsampa
854
+ #undef rsampb
855
+
856
+ @----------------------------------------------------------
857
+ mmMix_CenteredPanning:
858
+ @----------------------------------------------------------
859
+
860
+ #define rsamp1 r1
861
+ #define rsamp2 r2
862
+ #define rsamp3 r4
863
+ #define rsamp4 r6
864
+ #define rsamp5 r11
865
+ #define rsamp6 r12
866
+ #define rsampa r0
867
+ #define rsampb lr
868
+
869
+ @ mix center panning (double channel mono)
870
+
871
+ subs rmixcc, rmixcc, #6
872
+ bmi .mpmac_6e
873
+ .mpmac_6:
874
+
875
+ ldmia rmixb, {rsamp1,rsamp2,rsamp3,rsamp4,rsamp5,rsamp6} // read words
876
+ MIX_DC rvolL, rsamp1, rsamp2, rsampa, rsampb // mix data
877
+ MIX_DC rvolL, rsamp3, rsamp4, rsampa, rsampb
878
+ MIX_DC rvolL, rsamp5, rsamp6, rsampa, rsampb
879
+ stmia rmixb!, {rsamp1,rsamp2,rsamp3,rsamp4,rsamp5,rsamp6} // write words
880
+ subs rmixcc, rmixcc, #6 // count
881
+ bpl .mpmac_6 // loop
882
+ .mpmac_6e:
883
+
884
+ mov rvolR, rvolL // restore right volume (same as left)
885
+ adds rmixcc, rmixcc, #6 // fix mix count
886
+ bgt mmMix_Remainder // mix remaining amount
887
+ b .mpm_mix_complete // finished mixing segment
888
+
889
+ #undef rsamp1
890
+ #undef rsamp2
891
+ #undef rsamp3
892
+ #undef rsamp4
893
+ #undef rsamp5
894
+ #undef rsamp6
895
+ #undef rsampa
896
+ #undef rsampb
897
+
898
+ @---------------------------------------------------
899
+ mmMix_ArbPanning: // SLOWEST!
900
+ @---------------------------------------------------
901
+
902
+ #define rsamp1 r1
903
+ #define rsamp2 r2
904
+ #define rsamp3 r4
905
+ #define rsamp4 r11
906
+ #define rsampa r0
907
+ #define rsampb r12
908
+ #define rsamp5 r14
909
+
910
+ subs r3, r3, #10
911
+ bmi .mpmaa_10e
912
+ .mpmaa_10:
913
+
914
+ ldmia rmixb, {rsamp1,rsamp2,rsamp3,rsamp4,rsamp5} // load bufferdata
915
+ MIX_DB rvolL, rvolR, rsamp1, rsamp2, rsampa, rsampb // mix
916
+ MIX_DB rvolL, rvolR, rsamp3, rsamp4, rsampa, rsampb // mix
917
+ MIX_DB rvolL, rvolR, rsamp5, 0, rsampa, rsampb // mix half
918
+ stmia rmixb!, {rsamp1,rsamp2,rsamp3,rsamp4,rsamp5} // store bufferdata
919
+ ldmia rmixb, {rsamp1,rsamp2,rsamp3,rsamp4,rsamp5} // load bufferdata
920
+ mul rsampb, rsampa, rvolR // mix other half
921
+ bic rsampb, rsampb, #0x1F0000 // ..
922
+ add rsamp1, rsamp1, rsampb, lsr#5 // ..
923
+ MIX_DB rvolL, rvolR, rsamp2, rsamp3, rsampa, rsampb // mix
924
+ MIX_DB rvolL, rvolR, rsamp4, rsamp5, rsampa, rsampb // mix
925
+ stmia rmixb!, {rsamp1,rsamp2,rsamp3,rsamp4,rsamp5} // store bufferdata
926
+ subs rmixcc, rmixcc, #10 // count
927
+ bpl .mpmaa_10 // loop
928
+ .mpmaa_10e:
929
+
930
+ adds rmixcc, rmixcc, #10
931
+ bgt mmMix_Remainder
932
+ b .mpm_mix_complete
933
+
934
+ .pool
935
+
936
+ #undef rsamp1
937
+ #undef rsamp2
938
+ #undef rsamp3
939
+ #undef rsamp4
940
+ #undef rsampa
941
+ #undef rsampb
942
+
943
+ //---------------------------------------------------------------------------
944
+ mmMix_Remainder:
945
+ //---------------------------------------------------------------------------
946
+ // (slow function to mix remaining amount of samples)
947
+ // assumes mix count isn't zero!
948
+
949
+ #define rsamp1 r1
950
+ #define rsamp2 r2
951
+ #define rvol r11
952
+ #define rsampa r0
953
+ #define rsampb r4
954
+
955
+ orr rvol, rvolL, rvolR, lsl#16
956
+
957
+ .mix_remaining:
958
+ /* ldrb rsampa, [rsrc, rread, lsr#SAMPFRAC] @ 3 load sample
959
+ add rread, rread, rfreq @ 1 add frequency
960
+ mul rsampb, rsampa, rvolL @ 2 multiply by volume
961
+ ldrh rsamp1, [rmixb] @ 3 load mix buffer entry
962
+ add rsamp1, rsamp1, rsampb, lsr#5 @ 1 add
963
+ strh rsamp1, [rmixb], #2 @ 2 store
964
+ ldrh rsamp1, [rmixb, #2] @ 3
965
+ mul rsampb, rsampa, rvolR @ 2
966
+ add rsamp1, rsamp1, rsampb, lsr#5 @ 1
967
+ strh rsamp1, [rmixb, #2] @ 2
968
+ */
969
+
970
+ ldrb rsampa, [rsrc, rread, lsr#SAMPFRAC] @ 3 load sample
971
+ add rread, rread, rfreq @ 1 add frequency
972
+ mul rsampb, rvol, rsampa @ 2 multiply by volume
973
+ ldrh rsamp1, [rmixb] @ 3 load mix buffer entry (left)
974
+ bic rsamp2, rsampb, #0xFF0000 @ 1 prep for shift
975
+ add rsamp1, rsamp1, rsamp2, lsr#5 @ 1 add
976
+ strh rsamp1, [rmixb], #2 @ 2 store (left)
977
+ ldrh rsamp1, [rmixb, #2] @ 3 load (right)
978
+ add rsamp1, rsamp1, rsampb, lsr#16+5 @ 1 add values
979
+ strh rsamp1, [rmixb, #2] @ 2 store (right)
980
+
981
+ subs rmixcc, rmixcc, #2 @ 2
982
+ blt .end_mix_remaining @ 1/exit
983
+
984
+ /* ldrb rsampa, [rsrc, rread, lsr#SAMPFRAC] @ load sample
985
+ add rread, rread, rfreq @ add frequency
986
+ mul rsampb, rsampa, rvolL @ multiply by volume
987
+ ldrh rsamp1, [rmixb] @ load mix buffer entry
988
+ add rsamp1, rsamp1, rsampb, lsr#5 @ add
989
+ strh rsamp1, [rmixb], #4 @ store
990
+ ldrh rsamp1, [rmixb]
991
+ mul rsampb, rsampa, rvolR
992
+ add rsamp1, rsamp1, rsampb, lsr#5
993
+ strh rsamp1, [rmixb], #2
994
+ */
995
+
996
+ ldrb rsampa, [rsrc, rread, lsr#SAMPFRAC] @ 3 load sample
997
+ add rread, rread, rfreq @ 1 add frequency
998
+ mul rsampb, rvol, rsampa @ 2 multiply by volume
999
+ ldrh rsamp1, [rmixb] @ 3 load mix buffer entry (left)
1000
+ bic rsamp2, rsampb, #0xFF0000 @ 1 prep for shift
1001
+ add rsamp1, rsamp1, rsamp2, lsr#5 @ 1 add
1002
+ strh rsamp1, [rmixb], #4 @ 2 store (left)
1003
+ ldrh rsamp1, [rmixb] @ 3 load (right)
1004
+ add rsamp1, rsamp1, rsampb, lsr#16+5 @ 1 add values
1005
+ strh rsamp1, [rmixb], #2 @ 2 store (right)
1006
+
1007
+ bgt .mix_remaining
1008
+ .end_mix_remaining:
1009
+
1010
+ b .mpm_mix_complete
1011
+
1012
+ #undef rsamp1
1013
+ #undef rsamp2
1014
+ #undef rvol
1015
+ #undef rsampa
1016
+ #undef rsampb
1017
+
1018
+ @============================================================================
1019
+ @ END OF MIXER
1020
+ @============================================================================
1021
+
1022
+ .TEXT
1023
+ .THUMB
1024
+ .ALIGN 2
1025
+
1026
+ /****************************************************************************
1027
+ * mmMixerSetSource( channel, p_sample )
1028
+ *
1029
+ * Set channel source
1030
+ ****************************************************************************/
1031
+ .thumb_func
1032
+ mmMixerSetSource:
1033
+
1034
+ mov r2, #CHN_SIZE // get channel pointer from index
1035
+ mul r0, r2 //
1036
+ ldr r2,=mm_mixchannels //
1037
+ ldr r2, [r2] //
1038
+ add r0, r2 //
1039
+
1040
+ add r1, #C_SAMPLE_DATA // set sample data address
1041
+ str r1, [r0, #CHN_SRC] //
1042
+
1043
+ mov r1, #0 // reset read position
1044
+ str r1, [r0, #CHN_READ] //
1045
+
1046
+ bx lr
1047
+
1048
+ /****************************************************************************
1049
+ * mmMixerSetRead( channel, value )
1050
+ *
1051
+ * Set channel read position
1052
+ ****************************************************************************/
1053
+ .thumb_func
1054
+ mmMixerSetRead:
1055
+
1056
+ mov r2, #CHN_SIZE // get channel pointer from index
1057
+ mul r0, r2 //
1058
+ ldr r2,=mm_mixchannels //
1059
+ ldr r2,[r2] //
1060
+ add r0, r2 //
1061
+
1062
+ str r1, [r0, #CHN_READ] // store new offset
1063
+ bx lr //
1064
+
1065
+ /****************************************************************************
1066
+ * mmMixerSetFreq
1067
+ *
1068
+ * Set channel mixing rate
1069
+ ****************************************************************************/
1070
+ .thumb_func
1071
+ mmMixerSetFreq:
1072
+
1073
+ // push {r3, r4} // FIXME: why would you preserve r3?
1074
+
1075
+ mov r2, #CHN_SIZE // get channel pointer from index
1076
+ mul r0, r2, r0 //
1077
+ ldr r2,=mm_mixchannels //
1078
+ ldr r2,[r2] //
1079
+ add r0, r0, r2 //
1080
+
1081
+ lsl r1, #2 // ...
1082
+
1083
+ strh r1, [r0, #CHN_FREQ]
1084
+ bx lr
1085
+
1086
+ /*
1087
+ ldr r4,=mm_freqscalar // r4=scale
1088
+ ldr r4,[r4] //
1089
+
1090
+ add r2, pc, #0 // switch to arm for a nice long multiply
1091
+ bx r2
1092
+
1093
+ .ARM
1094
+
1095
+ //------------------------------------
1096
+ // fix frequency to match mixing rate
1097
+ // a = specified frequency
1098
+ // hz = a*2y13 / pr
1099
+ //------------------------------------
1100
+
1101
+ umull r3, r2, r1, r4 // long multiply
1102
+ add r3, r3, #32768 // shift, etc..
1103
+ mov r3, r3, lsr#16 //
1104
+ orr r3, r3, r2, lsl#16 //
1105
+
1106
+ str r3, [r0, #CHN_FREQ] // set chan frequency
1107
+
1108
+ ldmfd sp!, {r3,r4} // pop registers
1109
+ bx lr // return
1110
+ */
1111
+ .THUMB
1112
+
1113
+ /****************************************************************************
1114
+ * mmMixerMulFreq( channel, value )
1115
+ *
1116
+ * Scale mixing frequency
1117
+ ****************************************************************************/
1118
+ .thumb_func
1119
+ mmMixerMulFreq:
1120
+
1121
+ mov r2, #CHN_SIZE // get channel pointer from index
1122
+ mul r0, r2 //
1123
+ ldr r2,=mm_mixchannels //
1124
+ ldr r2, [r2] //
1125
+ add r0, r2 //
1126
+
1127
+ ldr r3, [r0, #CHN_FREQ] // scale
1128
+ mul r3, r1 //
1129
+ lsr r3, #10 //
1130
+ str r3, [r0, #CHN_FREQ] //
1131
+ bx lr
1132
+
1133
+ /****************************************************************************
1134
+ * mmMixerStopChannel( channel )
1135
+ *
1136
+ * Stop mixing channel
1137
+ ****************************************************************************/
1138
+ .thumb_func
1139
+ mmMixerStopChannel:
1140
+
1141
+ mov r1, #CHN_SIZE // get channel pointer from index
1142
+ mul r0, r1 //
1143
+ ldr r1,=mm_mixchannels //
1144
+ ldr r1,[r1] //
1145
+ add r0, r1 //
1146
+
1147
+ mov r1, #1 // set MSB (disable) of source
1148
+ lsl r1, #31 //
1149
+ str r1, [r0] //
1150
+ bx lr
1151
+
1152
+ /****************************************************************************
1153
+ * mmMixerChannelActive( channel )
1154
+ *
1155
+ * Test if mixing channel is active
1156
+ ****************************************************************************/
1157
+ .thumb_func
1158
+ mmMixerChannelActive:
1159
+
1160
+ mov r1, #CHN_SIZE // get channel pointer from index
1161
+ mul r0, r1 //
1162
+ ldr r1,=mm_mixchannels //
1163
+ ldr r1,[r1] //
1164
+ add r0, r1 //
1165
+
1166
+ mp_Mixer_ChannelEnabledA:
1167
+ ldr r0, [r0, #CHN_SRC] // nonzero (-1) = enabled
1168
+ asr r0, #31 // zero = disabled
1169
+ mvn r0, r0 //
1170
+ bx lr
1171
+
1172
+ /****************************************************************************
1173
+ * mmMixerSetVolume( channel, volume )
1174
+ *
1175
+ * Set channel volume
1176
+ ****************************************************************************/
1177
+ .thumb_func
1178
+ mmMixerSetVolume:
1179
+
1180
+ mov r2, #CHN_SIZE // get channel pointer from index
1181
+ mul r0, r2 //
1182
+ ldr r2,=mm_mixchannels //
1183
+ ldr r2,[r2] //
1184
+ add r0, r2 //
1185
+
1186
+ strb r1, [r0, #CHN_VOL] // set volume
1187
+
1188
+ bx lr
1189
+
1190
+ /****************************************************************************
1191
+ * mmMixerSetPan( channel, panning )
1192
+ *
1193
+ * Set channel panning
1194
+ ****************************************************************************/
1195
+ .thumb_func
1196
+ mmMixerSetPan:
1197
+
1198
+ mov r2, #CHN_SIZE // get channel pointer from index
1199
+ mul r0, r2 //
1200
+ ldr r2,=mm_mixchannels //
1201
+ ldr r2,[r2] //
1202
+ add r0, r2 //
1203
+
1204
+ strb r1, [r0, #CHN_PAN] // set panning
1205
+ bx lr
1206
+
1207
+ /****************************************************************************
1208
+ * mmMixerInit( system )
1209
+ *
1210
+ * Initialize mixer
1211
+ ****************************************************************************/
1212
+ .thumb_func
1213
+ mmMixerInit:
1214
+
1215
+ ldr r2,=mm_mixbuffer
1216
+ ldr r1, [r0,#MM_GBA_SYSTEM_ACH_COUNT]
1217
+ str r1, [r2,#16]
1218
+
1219
+ mov r3, #CHN_SIZE
1220
+ mul r1, r3
1221
+ ldr r3, [r0,#MM_GBA_SYSTEM_MIXCH]
1222
+ str r3, [r2,#4]
1223
+ add r3, r1
1224
+ str r3, [r2,#20]
1225
+ ldr r1, [r0,#MM_GBA_SYSTEM_MIXMEM]
1226
+ str r1, [r2,#0]
1227
+ ldr r1, [r0,#MM_GBA_SYSTEM_WAVEMEM]
1228
+ str r1, [r2,#8]
1229
+ ldrb r1, [r0,#MM_GBA_SYSTEM_MODE]
1230
+ lsl r1, #1
1231
+ adr r3, mp_mixing_lengths
1232
+ ldrh r3, [r3,r1]
1233
+ str r3, [r2,#12]
1234
+ adr r3, mp_rate_scales
1235
+ ldrh r3, [r3, r1]
1236
+ str r3, [r2, #24]
1237
+ adr r3, mp_timing_sheet
1238
+ ldrh r3, [r3, r1]
1239
+ str r3, [r2, #28]
1240
+ adr r3, mp_bpm_divisors
1241
+ lsl r1, #1
1242
+ ldr r3, [r3,r1]
1243
+
1244
+ ldr r2,=mm_bpmdv
1245
+ str r3, [r2,#0]
1246
+
1247
+
1248
+ ldr r0,=mm_wavebuffer @ clear wave buffer
1249
+ ldr r0,[r0]
1250
+ ldr r1,=mm_mixlen
1251
+ ldr r1, [r1]
1252
+ mov r2, #0 @ ..
1253
+ .mpi_loop1: @ ..
1254
+ stmia r0!, {r2} @ ..
1255
+ sub r1, r1, #1 @ ..
1256
+ bne .mpi_loop1 @ ..
1257
+
1258
+ ldr r0,=mp_mix_seg @ reset mixing segment
1259
+ strb r2, [r0] @ ..
1260
+
1261
+ ldr r0,=mm_mixchannels @ disable mixing channels
1262
+ ldr r1,[r0,#12]@ nchannels
1263
+ ldr r0,[r0]
1264
+ ldr r3,=1<<31
1265
+ .mpi_loop2:
1266
+ str r3, [r0, #CHN_SRC]
1267
+ add r0, #CHN_SIZE
1268
+ sub r1, #1
1269
+ bne .mpi_loop2
1270
+
1271
+ ldr r0,=mmVBlank @ enable vblank routine
1272
+ ldr r1,=0xE1A00000 @ ..
1273
+ str r1, [r0] @ ..
1274
+
1275
+ ldr r0,=REG_SGFIFOA @ clear fifo data
1276
+ str r2, [r0] @ ..
1277
+ str r2, [r0, #4] @ ..
1278
+ ldr r0,=REG_SOUNDCNT_H @ reset direct sound
1279
+ strh r2, [r0] @ ..
1280
+ ldr r1,=0x9A0C @ setup sound [DIRECT SOUND A/B reset,timer0,A=left,B=right,volume=100%]
1281
+ strh r1, [r0] @ ..
1282
+ ldr r0,=REG_DMA1SAD @ setup DMA source addresses (playback buffers)
1283
+ ldr r1,=mm_wavebuffer
1284
+ ldr r2, [r1, #4]@mixlen
1285
+ ldr r1, [r1]
1286
+
1287
+ @ldr r1,=mp_playbuffer_l @ ..
1288
+ str r1, [r0] @ ..
1289
+
1290
+ add r1,r2
1291
+ add r1,r2
1292
+
1293
+ @ ldr r1,=mp_playbuffer_r @ ..
1294
+ str r1, [r0, #12] @ ..
1295
+
1296
+ ldr r1,=REG_SGFIFOA @ setup DMA destination (sound fifo)
1297
+ str r1, [r0, #4] @ ..
1298
+ add r1, #4 @ ..
1299
+ str r1, [r0, #16] @ ..
1300
+
1301
+ ldr r1,=0xB6000000 @ enable DMA (enable,fifo request,32-bit,repeat)
1302
+ str r1, [r0, #8] @ ..
1303
+ str r1, [r0, #20] @ ..
1304
+
1305
+ ldr r0,=REG_SOUNDCNT_X @ master sound enable
1306
+ mov r1, #0x80 @ ..
1307
+ strh r1, [r0] @ ..
1308
+
1309
+ ldr r0,=REG_VCOUNT @ wait for new frame
1310
+ .mpi_vsync: @ ..
1311
+ ldrh r1, [r0] @ skip current vblank period
1312
+ cmp r1, #160 @ ..
1313
+ bge .mpi_vsync @ ..
1314
+ .mpi_vsync2:
1315
+ ldrh r1, [r0] @ wait for new one
1316
+ cmp r1, #160 @ ..
1317
+ blt .mpi_vsync2 @ ..
1318
+
1319
+ .mpi_vsync_2: @ pass#2
1320
+ ldrh r1, [r0] @ skip current vblank period
1321
+ cmp r1, #160 @ ..
1322
+ bge .mpi_vsync_2 @ ..
1323
+ .mpi_vsync2_2:
1324
+ ldrh r1, [r0] @ wait for new one
1325
+ cmp r1, #160 @ ..
1326
+ blt .mpi_vsync2_2 @ ..
1327
+
1328
+ ldr r0,=REG_TM0CNT @ enable sampling timer
1329
+ ldr r1,=mm_timerfreq
1330
+ ldr r1,[r1]
1331
+ mov r2, #0x80
1332
+ lsl r2, #16
1333
+ orr r1, r2
1334
+ @ldr r1,=(-MP_TIMERFREQ&0xFFFF) | (0x80<<16) @ ..
1335
+ str r1, [r0] @ ..
1336
+ bx lr @ finished
1337
+
1338
+
1339
+ // round(rate / 59.737)
1340
+ .align 2
1341
+ mp_mixing_lengths:
1342
+ .hword 136, 176, 224, 264, 304, 352, 448, 528
1343
+ @ 8khz,10khz,13khz,16khz,18khz,21khz,27khz,32khz
1344
+
1345
+ .align 2
1346
+ //mp_freq_scales: @ (16khz -> real)
1347
+ // .hword 33056, 25536, 20064, 17024, 14784, 12768
1348
+
1349
+ // 15768*16384 / rate
1350
+ mp_rate_scales:
1351
+ .hword 31812, 24576, 19310, 16384, 14228, 12288, 9655, 8192
1352
+ @ 8khz, 10khz, 13khz, 16khz, 18khz, 21khz, 27khz, 32khz
1353
+ @ 8121, 10512, 13379, 15768, 18157, 21024, 26758, 31536,
1354
+
1355
+ .align 2
1356
+ // gbaclock / rate
1357
+ mp_timing_sheet:
1358
+ .hword -2066,-1596,-1254,-1064, -924, -798, -627, -532
1359
+ @ 8khz,10khz,13khz,16khz,18khz,21khz,27khz,32khz
1360
+
1361
+ .align 2
1362
+ // rate * 2.5
1363
+ mp_bpm_divisors:
1364
+ .word 20302,26280,33447,39420,45393,52560,66895,78840
1365
+
1366
+
1367
+ .end