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.
- package/AGENTS.md +726 -0
- package/LICENSE +45 -0
- package/NOTICE +86 -0
- package/README.md +46 -0
- package/examples/README.md +36 -0
- package/examples/art-first-workflow/README.md +205 -0
- package/examples/atari2600/main.asm +143 -0
- package/examples/atari2600/templates/default.asm +183 -0
- package/examples/atari2600/templates/mini_invaders.asm +381 -0
- package/examples/atari2600/templates/music_demo.asm +322 -0
- package/examples/atari2600/templates/paddle.asm +345 -0
- package/examples/atari2600/templates/single_screen.asm +242 -0
- package/examples/atari7800/main.c +88 -0
- package/examples/atari7800/templates/default.c +183 -0
- package/examples/atari7800/templates/hello_sprite.c +141 -0
- package/examples/atari7800/templates/music_demo.c +123 -0
- package/examples/atari7800/templates/platformer.c +159 -0
- package/examples/atari7800/templates/puzzle.c +164 -0
- package/examples/atari7800/templates/racing.c +139 -0
- package/examples/atari7800/templates/shmup.c +148 -0
- package/examples/atari7800/templates/sports.c +207 -0
- package/examples/c64/main.c +63 -0
- package/examples/c64/templates/hello_sprite.c +117 -0
- package/examples/c64/templates/music_demo.c +131 -0
- package/examples/c64/templates/platformer.c +194 -0
- package/examples/c64/templates/puzzle.c +178 -0
- package/examples/c64/templates/racing.c +140 -0
- package/examples/c64/templates/shmup.c +201 -0
- package/examples/c64/templates/sports.c +109 -0
- package/examples/c64/templates/tile_engine.c +174 -0
- package/examples/gb/main.asm +106 -0
- package/examples/gb/main.c +49 -0
- package/examples/gb/templates/default.c +58 -0
- package/examples/gb/templates/hello_sprite.c +130 -0
- package/examples/gb/templates/music_demo.c +52 -0
- package/examples/gb/templates/platformer.c +178 -0
- package/examples/gb/templates/puzzle.c +217 -0
- package/examples/gb/templates/racing.c +158 -0
- package/examples/gb/templates/shmup.c +172 -0
- package/examples/gb/templates/sports.c +136 -0
- package/examples/gb/templates/tile_engine.c +280 -0
- package/examples/gba/templates/gba_hello.c +64 -0
- package/examples/gba/templates/maxmod_demo.c +105 -0
- package/examples/gba/templates/platformer.c +215 -0
- package/examples/gba/templates/puzzle.c +237 -0
- package/examples/gba/templates/racing.c +175 -0
- package/examples/gba/templates/shmup.c +197 -0
- package/examples/gba/templates/sports.c +177 -0
- package/examples/gba/templates/tonc_hello.c +72 -0
- package/examples/gba/templates/tonc_hello_sprite.c +109 -0
- package/examples/gbc/main.asm +123 -0
- package/examples/gbc/templates/default.c +61 -0
- package/examples/gbc/templates/hello_sprite.c +140 -0
- package/examples/gbc/templates/music_demo.c +63 -0
- package/examples/gbc/templates/platformer.c +181 -0
- package/examples/gbc/templates/puzzle.c +217 -0
- package/examples/gbc/templates/racing.c +164 -0
- package/examples/gbc/templates/shmup.c +188 -0
- package/examples/gbc/templates/sports.c +142 -0
- package/examples/gbc/templates/tile_engine.c +280 -0
- package/examples/genesis/main.s +161 -0
- package/examples/genesis/templates/hello_sprite.c +75 -0
- package/examples/genesis/templates/platformer.c +166 -0
- package/examples/genesis/templates/puzzle.c +240 -0
- package/examples/genesis/templates/racing.c +170 -0
- package/examples/genesis/templates/sgdk_hello.c +41 -0
- package/examples/genesis/templates/shmup.c +188 -0
- package/examples/genesis/templates/shmup_2p.c +244 -0
- package/examples/genesis/templates/sports.c +172 -0
- package/examples/genesis/templates/tile_engine.c +135 -0
- package/examples/genesis/templates/xgm2_demo.c +53 -0
- package/examples/genesis/templates/xgm2_demo_data.s +27 -0
- package/examples/gg/main.c +10 -0
- package/examples/gg/templates/default.c +156 -0
- package/examples/gg/templates/hello_sprite.c +90 -0
- package/examples/gg/templates/music_demo.c +156 -0
- package/examples/gg/templates/platformer.c +220 -0
- package/examples/gg/templates/puzzle.c +204 -0
- package/examples/gg/templates/racing.c +161 -0
- package/examples/gg/templates/shmup.c +188 -0
- package/examples/gg/templates/sports.c +137 -0
- package/examples/gg/templates/tile_engine.c +137 -0
- package/examples/lynx/main.c +4 -0
- package/examples/lynx/templates/default.c +41 -0
- package/examples/lynx/templates/hello_sprite.c +39 -0
- package/examples/lynx/templates/music_demo.c +37 -0
- package/examples/lynx/templates/platformer.c +72 -0
- package/examples/lynx/templates/puzzle.c +142 -0
- package/examples/lynx/templates/racing.c +94 -0
- package/examples/lynx/templates/shmup.c +132 -0
- package/examples/lynx/templates/sports.c +59 -0
- package/examples/nes/main.c +143 -0
- package/examples/nes/space-shooter/README.md +68 -0
- package/examples/nes/space-shooter/main.c +441 -0
- package/examples/nes/space-shooter/nes_runtime.c +347 -0
- package/examples/nes/space-shooter/nes_runtime.h +141 -0
- package/examples/nes/templates/default.c +41 -0
- package/examples/nes/templates/hello_sprite.c +104 -0
- package/examples/nes/templates/music_demo.c +80 -0
- package/examples/nes/templates/platformer.c +171 -0
- package/examples/nes/templates/puzzle.c +232 -0
- package/examples/nes/templates/racing.c +203 -0
- package/examples/nes/templates/shmup.c +228 -0
- package/examples/nes/templates/sports.c +205 -0
- package/examples/nes/templates/tile_engine.c +224 -0
- package/examples/porting-across-platforms/README.md +59 -0
- package/examples/sms/main.c +129 -0
- package/examples/sms/templates/default.c +110 -0
- package/examples/sms/templates/hello_sprite.c +90 -0
- package/examples/sms/templates/music_demo.c +151 -0
- package/examples/sms/templates/platformer.c +215 -0
- package/examples/sms/templates/puzzle.c +204 -0
- package/examples/sms/templates/racing.c +161 -0
- package/examples/sms/templates/shmup.c +167 -0
- package/examples/sms/templates/shmup_2p.c +219 -0
- package/examples/sms/templates/sports.c +147 -0
- package/examples/sms/templates/tile_engine.c +137 -0
- package/examples/snes/main.asm +70 -0
- package/examples/snes/templates/c-hello-data.asm +28 -0
- package/examples/snes/templates/c-hello.c +71 -0
- package/examples/snes/templates/default-data.asm +36 -0
- package/examples/snes/templates/default.c +74 -0
- package/examples/snes/templates/hello_sprite-data.asm +45 -0
- package/examples/snes/templates/hello_sprite.c +76 -0
- package/examples/snes/templates/music_demo-data.asm +20 -0
- package/examples/snes/templates/music_demo.c +83 -0
- package/examples/snes/templates/platformer-data.asm +27 -0
- package/examples/snes/templates/platformer.c +142 -0
- package/examples/snes/templates/puzzle-data.asm +14 -0
- package/examples/snes/templates/puzzle.c +199 -0
- package/examples/snes/templates/racing-data.asm +33 -0
- package/examples/snes/templates/racing.c +146 -0
- package/examples/snes/templates/shmup-data.asm +61 -0
- package/examples/snes/templates/shmup.c +199 -0
- package/examples/snes/templates/sports-data.asm +28 -0
- package/examples/snes/templates/sports.c +144 -0
- package/package.json +83 -0
- package/src/cli/smoke.js +283 -0
- package/src/cores/registry.js +95 -0
- package/src/host/LibretroHost.js +502 -0
- package/src/host/callbacks.js +444 -0
- package/src/host/chafa-render.js +170 -0
- package/src/host/coreLoader.js +57 -0
- package/src/host/cpu-state.js +422 -0
- package/src/host/dsp-state.js +188 -0
- package/src/host/framebuffer.js +115 -0
- package/src/host/gpgx-state.js +309 -0
- package/src/host/index.js +4 -0
- package/src/host/retroConstants.js +72 -0
- package/src/host/snes9x-state.js +35 -0
- package/src/host/types.js +280 -0
- package/src/mcp/disclosure.js +250 -0
- package/src/mcp/log.js +87 -0
- package/src/mcp/server.js +433 -0
- package/src/mcp/state.js +83 -0
- package/src/mcp/tools/address-to-symbol.js +151 -0
- package/src/mcp/tools/art-loaders.js +740 -0
- package/src/mcp/tools/assets.js +89 -0
- package/src/mcp/tools/audio.js +173 -0
- package/src/mcp/tools/cart-parts.js +649 -0
- package/src/mcp/tools/diff-roms.js +412 -0
- package/src/mcp/tools/disasm.js +980 -0
- package/src/mcp/tools/find-references.js +361 -0
- package/src/mcp/tools/font-map.js +353 -0
- package/src/mcp/tools/frame.js +249 -0
- package/src/mcp/tools/free-space.js +95 -0
- package/src/mcp/tools/index.js +351 -0
- package/src/mcp/tools/input-layout.js +215 -0
- package/src/mcp/tools/input.js +142 -0
- package/src/mcp/tools/lifecycle.js +110 -0
- package/src/mcp/tools/lospec.js +156 -0
- package/src/mcp/tools/memory.js +169 -0
- package/src/mcp/tools/metasprite-tools.js +261 -0
- package/src/mcp/tools/platform-docs.js +102 -0
- package/src/mcp/tools/platform-tools.js +1063 -0
- package/src/mcp/tools/platforms.js +86 -0
- package/src/mcp/tools/playtest.js +280 -0
- package/src/mcp/tools/preview-tile.js +360 -0
- package/src/mcp/tools/project.js +1885 -0
- package/src/mcp/tools/record.js +131 -0
- package/src/mcp/tools/rendering-context.js +700 -0
- package/src/mcp/tools/rom-id.js +256 -0
- package/src/mcp/tools/run-until.js +173 -0
- package/src/mcp/tools/snippets.js +235 -0
- package/src/mcp/tools/splice-chr.js +215 -0
- package/src/mcp/tools/sprite-pipeline.js +614 -0
- package/src/mcp/tools/state.js +99 -0
- package/src/mcp/tools/symbols.js +277 -0
- package/src/mcp/tools/tile-inspect.js +206 -0
- package/src/mcp/tools/toolchain.js +680 -0
- package/src/mcp/tools/watch-memory.js +212 -0
- package/src/mcp/tools/which-tiles.js +193 -0
- package/src/mcp/util.js +85 -0
- package/src/observer/bus.js +127 -0
- package/src/observer/livestream.html +589 -0
- package/src/observer/server.js +66 -0
- package/src/observer/tool-wrap.js +115 -0
- package/src/platforms/atari2600/MENTAL_MODEL.md +185 -0
- package/src/platforms/atari2600/TROUBLESHOOTING.md +155 -0
- package/src/platforms/atari2600/UPSTREAM_SOURCES.md +49 -0
- package/src/platforms/atari2600/lib/README.md +67 -0
- package/src/platforms/atari2600/lib/cc65-src/crt0.s +49 -0
- package/src/platforms/atari2600/lib/cc65-src/ctype.s +5 -0
- package/src/platforms/atari2600/lib/kernel_skeleton.asm +85 -0
- package/src/platforms/atari2600/lib/player_kernel.asm +87 -0
- package/src/platforms/atari2600/lib/playfield_kernel.asm +63 -0
- package/src/platforms/atari2600/lib/read_joystick.asm +76 -0
- package/src/platforms/atari2600/lib/score_kernel.asm +141 -0
- package/src/platforms/atari2600/lib/vcs_constants.h +97 -0
- package/src/platforms/atari2600/lib/vectors.asm +16 -0
- package/src/platforms/atari2600/tia.js +355 -0
- package/src/platforms/atari7800/MENTAL_MODEL.md +306 -0
- package/src/platforms/atari7800/TROUBLESHOOTING.md +195 -0
- package/src/platforms/atari7800/UPSTREAM_SOURCES.md +43 -0
- package/src/platforms/atari7800/lib/README.md +45 -0
- package/src/platforms/atari7800/lib/c/atari7800_music.c +215 -0
- package/src/platforms/atari7800/lib/c/atari7800_music.h +33 -0
- package/src/platforms/atari7800/lib/c/atari7800_sfx.c +74 -0
- package/src/platforms/atari7800/lib/c/atari7800_sfx.h +45 -0
- package/src/platforms/atari7800/lib/cc65-src/clock.s +69 -0
- package/src/platforms/atari7800/lib/cc65-src/clocks_per_sec.s +34 -0
- package/src/platforms/atari7800/lib/cc65-src/clrscr.s +27 -0
- package/src/platforms/atari7800/lib/cc65-src/conio.s +226 -0
- package/src/platforms/atari7800/lib/cc65-src/conio_font.s +278 -0
- package/src/platforms/atari7800/lib/cc65-src/cputc.s +139 -0
- package/src/platforms/atari7800/lib/cc65-src/crt0.s +71 -0
- package/src/platforms/atari7800/lib/cc65-src/ctype.s +5 -0
- package/src/platforms/atari7800/lib/cc65-src/exehdr.s +46 -0
- package/src/platforms/atari7800/lib/cc65-src/extra/mono.s +28 -0
- package/src/platforms/atari7800/lib/cc65-src/extzp.inc +15 -0
- package/src/platforms/atari7800/lib/cc65-src/extzp.s +15 -0
- package/src/platforms/atari7800/lib/cc65-src/get_tv.s +65 -0
- package/src/platforms/atari7800/lib/cc65-src/irq.s +36 -0
- package/src/platforms/atari7800/lib/cc65-src/joy/atari7800-stdjoy.s +197 -0
- package/src/platforms/atari7800/lib/cc65-src/joy_stat_stddrv.s +14 -0
- package/src/platforms/atari7800/lib/cc65-src/libref.s +8 -0
- package/src/platforms/atari7800/lib/cc65-src/mono_clrscr.s +27 -0
- package/src/platforms/atari7800/lib/cc65-src/mono_conio.s +231 -0
- package/src/platforms/atari7800/lib/cc65-src/mono_cputc.s +102 -0
- package/src/platforms/atari7800/lib/cc65-src/mono_font.s +2065 -0
- package/src/platforms/atari7800/lib/cc65-src/mono_setcursor.s +214 -0
- package/src/platforms/atari7800/lib/cc65-src/setcursor.s +214 -0
- package/src/platforms/atari7800/lib/cc65-src/textcolor.s +53 -0
- package/src/platforms/atari7800/lib/cc65-src/wherex.s +19 -0
- package/src/platforms/atari7800/lib/cc65-src/wherey.s +19 -0
- package/src/platforms/atari7800/lib/display_list.asm +53 -0
- package/src/platforms/atari7800/lib/maria_init.asm +48 -0
- package/src/platforms/atari7800/lib/maria_registers.h +61 -0
- package/src/platforms/atari7800/lib/palette_load.asm +53 -0
- package/src/platforms/atari7800/lib/read_pad.asm +57 -0
- package/src/platforms/atari7800/lib/vblank_wait.asm +16 -0
- package/src/platforms/atari7800/maria.js +220 -0
- package/src/platforms/c64/MENTAL_MODEL.md +175 -0
- package/src/platforms/c64/TROUBLESHOOTING.md +130 -0
- package/src/platforms/c64/UPSTREAM_SOURCES.md +35 -0
- package/src/platforms/c64/image-to-tilemap.js +190 -0
- package/src/platforms/c64/lib/README.md +52 -0
- package/src/platforms/c64/lib/basic_stub.s +25 -0
- package/src/platforms/c64/lib/c/c64_music.c +248 -0
- package/src/platforms/c64/lib/c/c64_music.h +36 -0
- package/src/platforms/c64/lib/c/c64_sfx.c +94 -0
- package/src/platforms/c64/lib/c/c64_sfx.h +37 -0
- package/src/platforms/c64/lib/c64_registers.h +108 -0
- package/src/platforms/c64/lib/cc65-src/_scrsize.s +12 -0
- package/src/platforms/c64/lib/cc65-src/acc_c128_speed.s +5 -0
- package/src/platforms/c64/lib/cc65-src/acc_c64dtv_speed.s +64 -0
- package/src/platforms/c64/lib/cc65-src/acc_c65_speed.s +69 -0
- package/src/platforms/c64/lib/cc65-src/acc_chameleon_speed.s +100 -0
- package/src/platforms/c64/lib/cc65-src/acc_detect_c128.s +33 -0
- package/src/platforms/c64/lib/cc65-src/acc_detect_c64dtv.s +44 -0
- package/src/platforms/c64/lib/cc65-src/acc_detect_c65.s +55 -0
- package/src/platforms/c64/lib/cc65-src/acc_detect_chameleon.s +39 -0
- package/src/platforms/c64/lib/cc65-src/acc_detect_scpu.s +34 -0
- package/src/platforms/c64/lib/cc65-src/acc_detect_turbomaster.s +45 -0
- package/src/platforms/c64/lib/cc65-src/acc_scpu_speed.s +59 -0
- package/src/platforms/c64/lib/cc65-src/acc_turbomaster_speed.s +56 -0
- package/src/platforms/c64/lib/cc65-src/bordercolor.s +17 -0
- package/src/platforms/c64/lib/cc65-src/break.s +108 -0
- package/src/platforms/c64/lib/cc65-src/cgetc.s +62 -0
- package/src/platforms/c64/lib/cc65-src/clrscr.s +11 -0
- package/src/platforms/c64/lib/cc65-src/color.s +24 -0
- package/src/platforms/c64/lib/cc65-src/conio.s +10 -0
- package/src/platforms/c64/lib/cc65-src/cputc.s +105 -0
- package/src/platforms/c64/lib/cc65-src/crt0.s +117 -0
- package/src/platforms/c64/lib/cc65-src/devnum.s +7 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-65816.s +377 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-c256k.s +508 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-dqbb.s +447 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-georam.s +355 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-isepic.s +276 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-kerberos.s +281 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-ram.s +270 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-ramcart.s +297 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-reu.s +286 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-rrr.s +363 -0
- package/src/platforms/c64/lib/cc65-src/emd/c64-vdc.s +405 -0
- package/src/platforms/c64/lib/cc65-src/emd/dtv-himem.s +251 -0
- package/src/platforms/c64/lib/cc65-src/extra/soft80.s +71 -0
- package/src/platforms/c64/lib/cc65-src/extra/soft80mono.s +74 -0
- package/src/platforms/c64/lib/cc65-src/extra/tgimousedata.s +21 -0
- package/src/platforms/c64/lib/cc65-src/get_ostype.s +43 -0
- package/src/platforms/c64/lib/cc65-src/get_tv.s +20 -0
- package/src/platforms/c64/lib/cc65-src/gettime.s +83 -0
- package/src/platforms/c64/lib/cc65-src/irq.s +49 -0
- package/src/platforms/c64/lib/cc65-src/joy/c64-hitjoy.s +218 -0
- package/src/platforms/c64/lib/cc65-src/joy/c64-numpad.s +155 -0
- package/src/platforms/c64/lib/cc65-src/joy/c64-ptvjoy.s +146 -0
- package/src/platforms/c64/lib/cc65-src/joy/c64-stdjoy.s +111 -0
- package/src/platforms/c64/lib/cc65-src/joy_stat_stddrv.s +14 -0
- package/src/platforms/c64/lib/cc65-src/joy_stddrv.s +14 -0
- package/src/platforms/c64/lib/cc65-src/kbhit.s +23 -0
- package/src/platforms/c64/lib/cc65-src/kbrepeat.s +14 -0
- package/src/platforms/c64/lib/cc65-src/kernal.s +53 -0
- package/src/platforms/c64/lib/cc65-src/kplot.s +22 -0
- package/src/platforms/c64/lib/cc65-src/libref.s +16 -0
- package/src/platforms/c64/lib/cc65-src/mainargs.s +137 -0
- package/src/platforms/c64/lib/cc65-src/mcbdefault.s +146 -0
- package/src/platforms/c64/lib/cc65-src/mcbspritedata.s +4 -0
- package/src/platforms/c64/lib/cc65-src/mou/c64-1351.s +467 -0
- package/src/platforms/c64/lib/cc65-src/mou/c64-inkwell.s +446 -0
- package/src/platforms/c64/lib/cc65-src/mou/c64-joy.s +451 -0
- package/src/platforms/c64/lib/cc65-src/mou/c64-pot.s +409 -0
- package/src/platforms/c64/lib/cc65-src/mouse_stat_stddrv.s +14 -0
- package/src/platforms/c64/lib/cc65-src/mouse_stddrv.s +14 -0
- package/src/platforms/c64/lib/cc65-src/mouseref.s +23 -0
- package/src/platforms/c64/lib/cc65-src/pencalib.c +94 -0
- package/src/platforms/c64/lib/cc65-src/randomize.s +18 -0
- package/src/platforms/c64/lib/cc65-src/revers.s +27 -0
- package/src/platforms/c64/lib/cc65-src/ser/c64-swlink.s +484 -0
- package/src/platforms/c64/lib/cc65-src/ser_stat_stddrv.s +14 -0
- package/src/platforms/c64/lib/cc65-src/ser_stddrv.s +13 -0
- package/src/platforms/c64/lib/cc65-src/settime.s +84 -0
- package/src/platforms/c64/lib/cc65-src/soft80.inc +46 -0
- package/src/platforms/c64/lib/cc65-src/soft80_cgetc.s +85 -0
- package/src/platforms/c64/lib/cc65-src/soft80_charset.s +182 -0
- package/src/platforms/c64/lib/cc65-src/soft80_color.s +159 -0
- package/src/platforms/c64/lib/cc65-src/soft80_conio.s +157 -0
- package/src/platforms/c64/lib/cc65-src/soft80_cpeekc.s +148 -0
- package/src/platforms/c64/lib/cc65-src/soft80_cpeekcolor.s +19 -0
- package/src/platforms/c64/lib/cc65-src/soft80_cpeekrevers.s +15 -0
- package/src/platforms/c64/lib/cc65-src/soft80_cpeeks.s +71 -0
- package/src/platforms/c64/lib/cc65-src/soft80_cputc.s +521 -0
- package/src/platforms/c64/lib/cc65-src/soft80_kclrscr.s +76 -0
- package/src/platforms/c64/lib/cc65-src/soft80_kplot.s +63 -0
- package/src/platforms/c64/lib/cc65-src/soft80_scrsize.s +14 -0
- package/src/platforms/c64/lib/cc65-src/soft80mono_cgetc.s +67 -0
- package/src/platforms/c64/lib/cc65-src/soft80mono_color.s +65 -0
- package/src/platforms/c64/lib/cc65-src/soft80mono_conio.s +168 -0
- package/src/platforms/c64/lib/cc65-src/soft80mono_cpeekcolor.s +17 -0
- package/src/platforms/c64/lib/cc65-src/soft80mono_cputc.s +204 -0
- package/src/platforms/c64/lib/cc65-src/soft80mono_kclrscr.s +63 -0
- package/src/platforms/c64/lib/cc65-src/soft80mono_kplot.s +52 -0
- package/src/platforms/c64/lib/cc65-src/status.s +15 -0
- package/src/platforms/c64/lib/cc65-src/sysuname.s +37 -0
- package/src/platforms/c64/lib/cc65-src/tgi/c64-hi.s +881 -0
- package/src/platforms/c64/lib/cc65-src/tgi_stat_stddrv.s +14 -0
- package/src/platforms/c64/lib/cc65-src/tgi_stddrv.s +13 -0
- package/src/platforms/c64/lib/cc65-src/tmcommon.s +67 -0
- package/src/platforms/c64/lib/cc65-src/waitvsync.s +18 -0
- package/src/platforms/c64/lib/read_joystick.s +28 -0
- package/src/platforms/c64/lib/sid_play.s +48 -0
- package/src/platforms/c64/lib/sprite_table.s +73 -0
- package/src/platforms/c64/lib/vic_init.s +47 -0
- package/src/platforms/c64/sid.js +128 -0
- package/src/platforms/c64/vic.js +273 -0
- package/src/platforms/common/default-palette.js +139 -0
- package/src/platforms/common/image-to-tiles.js +407 -0
- package/src/platforms/common/intent.js +111 -0
- package/src/platforms/common/metasprite-adapters.js +279 -0
- package/src/platforms/common/metasprite-codegen.js +192 -0
- package/src/platforms/common/metasprite-core.js +201 -0
- package/src/platforms/common/metasprite.js +89 -0
- package/src/platforms/common/platform-palette.js +137 -0
- package/src/platforms/common/registers.js +329 -0
- package/src/platforms/common/render-tiles.js +86 -0
- package/src/platforms/common/screenshot-sprite.js +153 -0
- package/src/platforms/common/tile-decode.js +149 -0
- package/src/platforms/gb/MENTAL_MODEL.md +252 -0
- package/src/platforms/gb/TROUBLESHOOTING.md +221 -0
- package/src/platforms/gb/UPSTREAM_SOURCES.md +43 -0
- package/src/platforms/gb/image-to-tilemap.js +173 -0
- package/src/platforms/gb/lib/README.md +115 -0
- package/src/platforms/gb/lib/c/LICENSE-HUGEDRIVER +25 -0
- package/src/platforms/gb/lib/c/README.md +120 -0
- package/src/platforms/gb/lib/c/SDCC_GOTCHAS.md +189 -0
- package/src/platforms/gb/lib/c/gb_crt0.s +163 -0
- package/src/platforms/gb/lib/c/gb_hardware.h +113 -0
- package/src/platforms/gb/lib/c/gb_runtime.c +284 -0
- package/src/platforms/gb/lib/c/gb_runtime.h +145 -0
- package/src/platforms/gb/lib/c/hUGEDriver.c +191 -0
- package/src/platforms/gb/lib/c/hUGEDriver.h +95 -0
- package/src/platforms/gb/lib/c/hUGEDriver.upstream.asm +1908 -0
- package/src/platforms/gb/lib/c/lcd_init.c +19 -0
- package/src/platforms/gb/lib/c/patch-header.js +154 -0
- package/src/platforms/gb/lib/c/song_data.c +88 -0
- package/src/platforms/gb/lib/c/unroll.h +52 -0
- package/src/platforms/gb/lib/c/wait_vblank.c +14 -0
- package/src/platforms/gb/lib/dma_oam.asm +51 -0
- package/src/platforms/gb/lib/header.asm +56 -0
- package/src/platforms/gb/lib/joypad_read.asm +47 -0
- package/src/platforms/gb/lib/lcd_init.asm +44 -0
- package/src/platforms/gb/lib/load_palette.asm +25 -0
- package/src/platforms/gb/lib/load_tiles.asm +29 -0
- package/src/platforms/gb/lib/vblank_wait.asm +31 -0
- package/src/platforms/gb/ppu.js +574 -0
- package/src/platforms/gba/MENTAL_MODEL.md +203 -0
- package/src/platforms/gba/TROUBLESHOOTING.md +250 -0
- package/src/platforms/gba/UPSTREAM_SOURCES.md +41 -0
- package/src/platforms/gba/lib/arm-archives/libc.a +0 -0
- package/src/platforms/gba/lib/arm-archives/libgcc.a +0 -0
- package/src/platforms/gba/lib/arm-archives/libnosys.a +0 -0
- package/src/platforms/gba/lib/c/gba_sfx.c +81 -0
- package/src/platforms/gba/lib/c/gba_sfx.h +48 -0
- package/src/platforms/gba/lib/libgba/crtbegin.o +0 -0
- package/src/platforms/gba/lib/libgba/crtend.o +0 -0
- package/src/platforms/gba/lib/libgba/crti.o +0 -0
- package/src/platforms/gba/lib/libgba/crtn.o +0 -0
- package/src/platforms/gba/lib/libgba/gba_cart.ld +319 -0
- package/src/platforms/gba/lib/libgba/gba_crt0.s +258 -0
- package/src/platforms/gba/lib/libgba/include/BoyScout.h +128 -0
- package/src/platforms/gba/lib/libgba/include/disc.h +36 -0
- package/src/platforms/gba/lib/libgba/include/disc_io.h +64 -0
- package/src/platforms/gba/lib/libgba/include/dldi.h +112 -0
- package/src/platforms/gba/lib/libgba/include/erapi.h +195 -0
- package/src/platforms/gba/lib/libgba/include/fade.h +76 -0
- package/src/platforms/gba/lib/libgba/include/gba.h +47 -0
- package/src/platforms/gba/lib/libgba/include/gba_affine.h +83 -0
- package/src/platforms/gba/lib/libgba/include/gba_base.h +122 -0
- package/src/platforms/gba/lib/libgba/include/gba_compression.h +66 -0
- package/src/platforms/gba/lib/libgba/include/gba_console.h +55 -0
- package/src/platforms/gba/lib/libgba/include/gba_dma.h +100 -0
- package/src/platforms/gba/lib/libgba/include/gba_input.h +127 -0
- package/src/platforms/gba/lib/libgba/include/gba_interrupt.h +146 -0
- package/src/platforms/gba/lib/libgba/include/gba_multiboot.h +72 -0
- package/src/platforms/gba/lib/libgba/include/gba_sio.h +124 -0
- package/src/platforms/gba/lib/libgba/include/gba_sound.h +356 -0
- package/src/platforms/gba/lib/libgba/include/gba_sprites.h +195 -0
- package/src/platforms/gba/lib/libgba/include/gba_systemcalls.h +194 -0
- package/src/platforms/gba/lib/libgba/include/gba_timers.h +63 -0
- package/src/platforms/gba/lib/libgba/include/gba_types.h +60 -0
- package/src/platforms/gba/lib/libgba/include/gba_video.h +307 -0
- package/src/platforms/gba/lib/libgba/include/mappy.h +72 -0
- package/src/platforms/gba/lib/libgba/include/mbv2.h +90 -0
- package/src/platforms/gba/lib/libgba/include/xcomms.h +93 -0
- package/src/platforms/gba/lib/libgba/include/xcomms_cmd.h +53 -0
- package/src/platforms/gba/lib/libgba/libgba.seed.a +0 -0
- package/src/platforms/gba/lib/libgba/libgba.seed.hash +1 -0
- package/src/platforms/gba/lib/libgba/src/AffineSet.c +42 -0
- package/src/platforms/gba/lib/libgba/src/ArcTan.s +41 -0
- package/src/platforms/gba/lib/libgba/src/BoyScout/BoyScout.c +1242 -0
- package/src/platforms/gba/lib/libgba/src/BoyScout/GBASoundRegs.h +200 -0
- package/src/platforms/gba/lib/libgba/src/Compression.c +84 -0
- package/src/platforms/gba/lib/libgba/src/CpuSet.c +41 -0
- package/src/platforms/gba/lib/libgba/src/Div.s +58 -0
- package/src/platforms/gba/lib/libgba/src/DivArm.s +50 -0
- package/src/platforms/gba/lib/libgba/src/InterruptDispatcher.s +113 -0
- package/src/platforms/gba/lib/libgba/src/IntrWait.c +35 -0
- package/src/platforms/gba/lib/libgba/src/MultiBoot.s +33 -0
- package/src/platforms/gba/lib/libgba/src/Reset.s +49 -0
- package/src/platforms/gba/lib/libgba/src/Sound.s +48 -0
- package/src/platforms/gba/lib/libgba/src/Sqrt.s +34 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/disc.c +58 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/dldi.c +189 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/dldi_stub.s +78 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_cf_common.c +260 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_cf_common.h +72 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_m3_common.c +60 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_m3_common.h +48 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_m3cf.c +83 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_m3cf.h +45 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_m3sd.c +508 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_m3sd.h +45 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_mpcf.c +87 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_mpcf.h +42 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_sc_common.c +47 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_sc_common.h +43 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_sccf.c +83 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_sccf.h +45 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_scsd.c +385 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_scsd.h +48 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_scsd_s.s +139 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_sd_common.c +203 -0
- package/src/platforms/gba/lib/libgba/src/disc_io/io_sd_common.h +108 -0
- package/src/platforms/gba/lib/libgba/src/fade.c +185 -0
- package/src/platforms/gba/lib/libgba/src/input.c +127 -0
- package/src/platforms/gba/lib/libgba/src/interrupt.c +116 -0
- package/src/platforms/gba/lib/libgba/src/mappy_print.c +74 -0
- package/src/platforms/gba/lib/libgba/src/mb2print.c +69 -0
- package/src/platforms/gba/lib/libgba/src/mbv2.c +230 -0
- package/src/platforms/gba/lib/libgba/src/mbv2.txt +119 -0
- package/src/platforms/gba/lib/libgba/src/xcomms.c +203 -0
- package/src/platforms/gba/lib/libgba/src/xcomms_print.c +56 -0
- package/src/platforms/gba/lib/libgba/sysinclude/_ansi.h +82 -0
- package/src/platforms/gba/lib/libgba/sysinclude/_newlib_version.h +11 -0
- package/src/platforms/gba/lib/libgba/sysinclude/_syslist.h +41 -0
- package/src/platforms/gba/lib/libgba/sysinclude/alloca.h +21 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ar.h +65 -0
- package/src/platforms/gba/lib/libgba/sysinclude/argz.h +33 -0
- package/src/platforms/gba/lib/libgba/sysinclude/assert.h +50 -0
- package/src/platforms/gba/lib/libgba/sysinclude/complex.h +150 -0
- package/src/platforms/gba/lib/libgba/sysinclude/cpio.h +30 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ctype.h +183 -0
- package/src/platforms/gba/lib/libgba/sysinclude/devctl.h +78 -0
- package/src/platforms/gba/lib/libgba/sysinclude/dirent.h +85 -0
- package/src/platforms/gba/lib/libgba/sysinclude/elf.h +3147 -0
- package/src/platforms/gba/lib/libgba/sysinclude/envlock.h +15 -0
- package/src/platforms/gba/lib/libgba/sysinclude/envz.h +16 -0
- package/src/platforms/gba/lib/libgba/sysinclude/errno.h +11 -0
- package/src/platforms/gba/lib/libgba/sysinclude/fastmath.h +13 -0
- package/src/platforms/gba/lib/libgba/sysinclude/fcntl.h +1 -0
- package/src/platforms/gba/lib/libgba/sysinclude/fenv.h +42 -0
- package/src/platforms/gba/lib/libgba/sysinclude/float.h +631 -0
- package/src/platforms/gba/lib/libgba/sysinclude/fnmatch.h +55 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ftw.h +66 -0
- package/src/platforms/gba/lib/libgba/sysinclude/getopt.h +185 -0
- package/src/platforms/gba/lib/libgba/sysinclude/glob.h +90 -0
- package/src/platforms/gba/lib/libgba/sysinclude/grp.h +86 -0
- package/src/platforms/gba/lib/libgba/sysinclude/iconv.h +63 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ieeefp.h +295 -0
- package/src/platforms/gba/lib/libgba/sysinclude/inttypes.h +345 -0
- package/src/platforms/gba/lib/libgba/sysinclude/iso646.h +45 -0
- package/src/platforms/gba/lib/libgba/sysinclude/langinfo.h +332 -0
- package/src/platforms/gba/lib/libgba/sysinclude/libgen.h +37 -0
- package/src/platforms/gba/lib/libgba/sysinclude/limits.h +168 -0
- package/src/platforms/gba/lib/libgba/sysinclude/locale.h +96 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/_arc4random.h +1 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/_default_types.h +250 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/_endian.h +39 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/_time.h +3 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/_types.h +8 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/ansi.h +1 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/endian.h +69 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/fastmath.h +98 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/ieee.h +127 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/ieeefp.h +533 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/malloc.h +8 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/param.h +8 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/setjmp-dj.h +43 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/setjmp.h +524 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/stdlib.h +8 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/termios.h +1 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/time.h +15 -0
- package/src/platforms/gba/lib/libgba/sysinclude/machine/types.h +13 -0
- package/src/platforms/gba/lib/libgba/sysinclude/malloc.h +173 -0
- package/src/platforms/gba/lib/libgba/sysinclude/math.h +645 -0
- package/src/platforms/gba/lib/libgba/sysinclude/memory.h +4 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ndbm.h +91 -0
- package/src/platforms/gba/lib/libgba/sysinclude/newlib.h +427 -0
- package/src/platforms/gba/lib/libgba/sysinclude/paths.h +9 -0
- package/src/platforms/gba/lib/libgba/sysinclude/pthread.h +456 -0
- package/src/platforms/gba/lib/libgba/sysinclude/pwd.h +83 -0
- package/src/platforms/gba/lib/libgba/sysinclude/reent.h +190 -0
- package/src/platforms/gba/lib/libgba/sysinclude/regdef.h +7 -0
- package/src/platforms/gba/lib/libgba/sysinclude/regex.h +103 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sched.h +112 -0
- package/src/platforms/gba/lib/libgba/sysinclude/search.h +64 -0
- package/src/platforms/gba/lib/libgba/sysinclude/setjmp.h +25 -0
- package/src/platforms/gba/lib/libgba/sysinclude/signal.h +35 -0
- package/src/platforms/gba/lib/libgba/sysinclude/spawn.h +111 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ssp/ssp.h +76 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ssp/stdio.h +101 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ssp/stdlib.h +30 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ssp/string.h +115 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ssp/strings.h +55 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ssp/unistd.h +93 -0
- package/src/platforms/gba/lib/libgba/sysinclude/ssp/wchar.h +97 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stdarg.h +135 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stdatomic.h +409 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stdbool.h +51 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stddef.h +463 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stdint.h +466 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stdio.h +807 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stdio_ext.h +79 -0
- package/src/platforms/gba/lib/libgba/sysinclude/stdlib.h +345 -0
- package/src/platforms/gba/lib/libgba/sysinclude/string.h +183 -0
- package/src/platforms/gba/lib/libgba/sysinclude/strings.h +80 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_default_fcntl.h +241 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_intsup.h +199 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_locale.h +12 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_pthreadtypes.h +233 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_sigset.h +43 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_stdint.h +90 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_timespec.h +52 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_timeval.h +60 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_types.h +228 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/_tz_structs.h +24 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/cdefs.h +754 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/config.h +314 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/custom_file.h +2 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/dir.h +10 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/dirent.h +13 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/endian.h +207 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/errno.h +198 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/fcntl.h +12 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/features.h +551 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/fenv.h +90 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/file.h +2 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/iconvnls.h +77 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/iosupport.h +143 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/lock.h +75 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/param.h +35 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/queue.h +919 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/reent.h +913 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/resource.h +24 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/sched.h +69 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/select.h +94 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/signal.h +388 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/stat.h +179 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/statvfs.h +41 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/stdio.h +27 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/string.h +2 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/syslimits.h +61 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/time.h +448 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/timeb.h +40 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/times.h +32 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/timespec.h +63 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/tree.h +864 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/types.h +228 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/unistd.h +591 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/utime.h +22 -0
- package/src/platforms/gba/lib/libgba/sysinclude/sys/wait.h +44 -0
- package/src/platforms/gba/lib/libgba/sysinclude/tar.h +43 -0
- package/src/platforms/gba/lib/libgba/sysinclude/termios.h +7 -0
- package/src/platforms/gba/lib/libgba/sysinclude/tgmath.h +127 -0
- package/src/platforms/gba/lib/libgba/sysinclude/threads.h +93 -0
- package/src/platforms/gba/lib/libgba/sysinclude/time.h +313 -0
- package/src/platforms/gba/lib/libgba/sysinclude/unctrl.h +42 -0
- package/src/platforms/gba/lib/libgba/sysinclude/unistd.h +6 -0
- package/src/platforms/gba/lib/libgba/sysinclude/utime.h +12 -0
- package/src/platforms/gba/lib/libgba/sysinclude/utmp.h +8 -0
- package/src/platforms/gba/lib/libgba/sysinclude/varargs.h +7 -0
- package/src/platforms/gba/lib/libgba/sysinclude/wchar.h +339 -0
- package/src/platforms/gba/lib/libgba/sysinclude/wctype.h +74 -0
- package/src/platforms/gba/lib/libgba/sysinclude/wordexp.h +53 -0
- package/src/platforms/gba/lib/libtonc/crtbegin.o +0 -0
- package/src/platforms/gba/lib/libtonc/crtend.o +0 -0
- package/src/platforms/gba/lib/libtonc/crti.o +0 -0
- package/src/platforms/gba/lib/libtonc/crtn.o +0 -0
- package/src/platforms/gba/lib/libtonc/gba_cart.ld +319 -0
- package/src/platforms/gba/lib/libtonc/gba_crt0.s +258 -0
- package/src/platforms/gba/lib/libtonc/include/tonc.h +72 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_asminc.h +132 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_bios.h +555 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_core.h +573 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_input.h +184 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_irq.h +121 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_legacy.h +481 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_libgba.h +537 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_math.h +692 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_memdef.h +962 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_memmap.h +583 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_nocash.h +51 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_oam.h +186 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_surface.h +461 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_text.h +270 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_tte.h +748 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_types.h +376 -0
- package/src/platforms/gba/lib/libtonc/include/tonc_video.h +615 -0
- package/src/platforms/gba/lib/libtonc/libtonc.seed.a +0 -0
- package/src/platforms/gba/lib/libtonc/libtonc.seed.hash +1 -0
- package/src/platforms/gba/lib/libtonc/src/asm/clr_blend_fast.s +72 -0
- package/src/platforms/gba/lib/libtonc/src/asm/clr_fade_fast.s +74 -0
- package/src/platforms/gba/lib/libtonc/src/asm/div_lut.s +54 -0
- package/src/platforms/gba/lib/libtonc/src/asm/sin_lut.s +90 -0
- package/src/platforms/gba/lib/libtonc/src/asm/tonc_bios.s +289 -0
- package/src/platforms/gba/lib/libtonc/src/asm/tonc_bios_ex.s +97 -0
- package/src/platforms/gba/lib/libtonc/src/asm/tonc_isr_master.s +92 -0
- package/src/platforms/gba/lib/libtonc/src/asm/tonc_isr_nest.s +98 -0
- package/src/platforms/gba/lib/libtonc/src/asm/tonc_memcpy.s +126 -0
- package/src/platforms/gba/lib/libtonc/src/asm/tonc_memset.s +123 -0
- package/src/platforms/gba/lib/libtonc/src/asm/tonc_nocash.s +73 -0
- package/src/platforms/gba/lib/libtonc/src/font/sys8.png +0 -0
- package/src/platforms/gba/lib/libtonc/src/font/sys8.s +46 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana10.png +0 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana10.s +293 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9.png +0 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9.s +167 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9_b4.png +0 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9_b4.s +545 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9b.png +0 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9b.s +167 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9i.png +0 -0
- package/src/platforms/gba/lib/libtonc/src/font/verdana9i.s +167 -0
- package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_bitmap.c +289 -0
- package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text.c +81 -0
- package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text_bm.c +244 -0
- package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text_map.c +122 -0
- package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text_oam.c +113 -0
- package/src/platforms/gba/lib/libtonc/src/pre1.3/toncfont.s +43 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_bg.c +61 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_bg_affine.c +112 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_bmp16.c +240 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_bmp8.c +314 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_color.c +368 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_core.c +237 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_input.c +118 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_irq.c +271 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_math.c +54 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_oam.c +76 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_obj_affine.c +146 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_sbmp16.c +369 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_sbmp8.c +405 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_schr4c.c +588 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_schr4r.c +462 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_surface.c +105 -0
- package/src/platforms/gba/lib/libtonc/src/tonc_video.c +33 -0
- package/src/platforms/gba/lib/libtonc/src/tte/ase_drawg.c +83 -0
- package/src/platforms/gba/lib/libtonc/src/tte/bmp16_drawg.c +72 -0
- package/src/platforms/gba/lib/libtonc/src/tte/bmp16_drawg_b1cs.c +92 -0
- package/src/platforms/gba/lib/libtonc/src/tte/bmp8_drawg.c +71 -0
- package/src/platforms/gba/lib/libtonc/src/tte/bmp8_drawg_b1cs.c +104 -0
- package/src/platforms/gba/lib/libtonc/src/tte/bmp8_drawg_b1cts_fast.s +115 -0
- package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b1cts.c +76 -0
- package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b1cts_fast.s +128 -0
- package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b4cts.c +67 -0
- package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b4cts_fast.s +127 -0
- package/src/platforms/gba/lib/libtonc/src/tte/chr4r_drawg_b1cts.c +80 -0
- package/src/platforms/gba/lib/libtonc/src/tte/chr4r_drawg_b1cts_fast.s +145 -0
- package/src/platforms/gba/lib/libtonc/src/tte/obj_drawg.c +61 -0
- package/src/platforms/gba/lib/libtonc/src/tte/se_drawg.c +110 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_init_ase.c +87 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_init_bmp.c +118 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_init_chr4c.c +86 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_init_chr4r.c +87 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_init_obj.c +84 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_init_se.c +96 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_iohook.c +264 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_main.c +756 -0
- package/src/platforms/gba/lib/libtonc/src/tte/tte_types.s +119 -0
- package/src/platforms/gba/lib/maxmod/LICENSE-MAXMOD +23 -0
- package/src/platforms/gba/lib/maxmod/asm_include/mp_defs.inc +117 -0
- package/src/platforms/gba/lib/maxmod/asm_include/mp_format_mas.inc +108 -0
- package/src/platforms/gba/lib/maxmod/asm_include/mp_macros.inc +195 -0
- package/src/platforms/gba/lib/maxmod/asm_include/mp_mas.inc +40 -0
- package/src/platforms/gba/lib/maxmod/asm_include/mp_mas_structs.inc +189 -0
- package/src/platforms/gba/lib/maxmod/asm_include/mp_mixer_ds.inc +46 -0
- package/src/platforms/gba/lib/maxmod/asm_include/mp_mixer_gba.inc +42 -0
- package/src/platforms/gba/lib/maxmod/asm_include/swi_gba.inc +23 -0
- package/src/platforms/gba/lib/maxmod/include/maxmod.h +412 -0
- package/src/platforms/gba/lib/maxmod/include/mm_types.h +333 -0
- package/src/platforms/gba/lib/maxmod/maxmod.seed.a +0 -0
- package/src/platforms/gba/lib/maxmod/maxmod.seed.hash +1 -0
- package/src/platforms/gba/lib/maxmod/music/chiptune.xm +0 -0
- package/src/platforms/gba/lib/maxmod/music/chiptune_soundbank.bin +0 -0
- package/src/platforms/gba/lib/maxmod/music/chiptune_soundbank.h +4 -0
- package/src/platforms/gba/lib/maxmod/music/make_chiptune_xm.js +203 -0
- package/src/platforms/gba/lib/maxmod/source/mm_effect.s +767 -0
- package/src/platforms/gba/lib/maxmod/source/mm_main.s +115 -0
- package/src/platforms/gba/lib/maxmod/source/mm_mas.s +4990 -0
- package/src/platforms/gba/lib/maxmod/source/mm_mas_arm.s +612 -0
- package/src/platforms/gba/lib/maxmod/source_gba/mm_init_default.s +98 -0
- package/src/platforms/gba/lib/maxmod/source_gba/mm_main_gba.s +292 -0
- package/src/platforms/gba/lib/maxmod/source_gba/mm_mixer_gba.s +1367 -0
- package/src/platforms/gba/lib/sysbase/gba_iosupport.c +138 -0
- package/src/platforms/gbc/MENTAL_MODEL.md +165 -0
- package/src/platforms/gbc/TROUBLESHOOTING.md +142 -0
- package/src/platforms/gbc/UPSTREAM_SOURCES.md +60 -0
- package/src/platforms/gbc/lib/c/LICENSE-HUGEDRIVER +25 -0
- package/src/platforms/gbc/lib/c/README.md +120 -0
- package/src/platforms/gbc/lib/c/SDCC_GOTCHAS.md +189 -0
- package/src/platforms/gbc/lib/c/gb_crt0.s +163 -0
- package/src/platforms/gbc/lib/c/gb_hardware.h +113 -0
- package/src/platforms/gbc/lib/c/gb_runtime.c +284 -0
- package/src/platforms/gbc/lib/c/gb_runtime.h +145 -0
- package/src/platforms/gbc/lib/c/hUGEDriver.c +191 -0
- package/src/platforms/gbc/lib/c/hUGEDriver.h +95 -0
- package/src/platforms/gbc/lib/c/hUGEDriver.upstream.asm +1908 -0
- package/src/platforms/gbc/lib/c/lcd_init.c +19 -0
- package/src/platforms/gbc/lib/c/patch-header.js +154 -0
- package/src/platforms/gbc/lib/c/song_data.c +88 -0
- package/src/platforms/gbc/lib/c/unroll.h +52 -0
- package/src/platforms/gbc/lib/c/wait_vblank.c +14 -0
- package/src/platforms/genesis/MENTAL_MODEL.md +223 -0
- package/src/platforms/genesis/TROUBLESHOOTING.md +193 -0
- package/src/platforms/genesis/UPSTREAM_SOURCES.md +52 -0
- package/src/platforms/genesis/image-to-tilemap.js +333 -0
- package/src/platforms/genesis/lib/README.md +157 -0
- package/src/platforms/genesis/lib/c/crtbegin.o +0 -0
- package/src/platforms/genesis/lib/c/crtend.o +0 -0
- package/src/platforms/genesis/lib/c/genesis.ld +44 -0
- package/src/platforms/genesis/lib/c/genesis_sfx.c +51 -0
- package/src/platforms/genesis/lib/c/genesis_sfx.h +49 -0
- package/src/platforms/genesis/lib/c/libc.a +0 -0
- package/src/platforms/genesis/lib/c/libgcc.a +0 -0
- package/src/platforms/genesis/lib/c/libm.a +0 -0
- package/src/platforms/genesis/lib/c/sega.s +71 -0
- package/src/platforms/genesis/lib/header.s +96 -0
- package/src/platforms/genesis/lib/nmi_safe.s +79 -0
- package/src/platforms/genesis/lib/pad_read.s +104 -0
- package/src/platforms/genesis/lib/sgdk/COPYING.RUNTIME +73 -0
- package/src/platforms/genesis/lib/sgdk/LICENSE +12 -0
- package/src/platforms/genesis/lib/sgdk/include/asm.h +52 -0
- package/src/platforms/genesis/lib/sgdk/include/asm_mac.i +9 -0
- package/src/platforms/genesis/lib/sgdk/include/bmp.h +690 -0
- package/src/platforms/genesis/lib/sgdk/include/config.h +208 -0
- package/src/platforms/genesis/lib/sgdk/include/dma.h +542 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/console.h +387 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/everdrive.h +116 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/fat16.h +84 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/flash-save/flash.h +164 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/flash-save/saveman.h +177 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/link_cable.h +316 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/minimusic/minimus.h +29 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/16c550.h +221 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/comm.h +93 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/gamejolt.h +541 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/jsmn.h +471 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/json.h +122 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/lsd.h +172 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/megawifi.h +984 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/mw-msg.h +392 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/ssf_ed_pro.h +38 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/mw/ssf_ed_x7.h +73 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/serial/buffer.h +8 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/serial/serial.h +133 -0
- package/src/platforms/genesis/lib/sgdk/include/ext/stb/stb_sprintf.h +1864 -0
- package/src/platforms/genesis/lib/sgdk/include/genesis.h +92 -0
- package/src/platforms/genesis/lib/sgdk/include/joy.h +482 -0
- package/src/platforms/genesis/lib/sgdk/include/kdebug.h +21 -0
- package/src/platforms/genesis/lib/sgdk/include/map.h +409 -0
- package/src/platforms/genesis/lib/sgdk/include/mapper.h +186 -0
- package/src/platforms/genesis/lib/sgdk/include/maths.h +1071 -0
- package/src/platforms/genesis/lib/sgdk/include/maths3D.h +480 -0
- package/src/platforms/genesis/lib/sgdk/include/memory.h +346 -0
- package/src/platforms/genesis/lib/sgdk/include/memory_base.h +37 -0
- package/src/platforms/genesis/lib/sgdk/include/object.h +171 -0
- package/src/platforms/genesis/lib/sgdk/include/pal.h +500 -0
- package/src/platforms/genesis/lib/sgdk/include/pool.h +171 -0
- package/src/platforms/genesis/lib/sgdk/include/psg.h +153 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/pcm/snd_dpcm2.h +79 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/pcm/snd_pcm.h +98 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/pcm/snd_pcm4.h +125 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/pcm/tab_vol.h +6 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/smp_null.h +6 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/smp_null_dpcm.h +6 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/sound.h +70 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/xgm.h +399 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/xgm2.h +389 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/z80_def.i80 +41 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/z80_fct.i80 +83 -0
- package/src/platforms/genesis/lib/sgdk/include/snd/z80_mac.i80 +1476 -0
- package/src/platforms/genesis/lib/sgdk/include/sprite_eng.h +1095 -0
- package/src/platforms/genesis/lib/sgdk/include/sprite_eng_legacy.h +1030 -0
- package/src/platforms/genesis/lib/sgdk/include/sram.h +110 -0
- package/src/platforms/genesis/lib/sgdk/include/string.h +349 -0
- package/src/platforms/genesis/lib/sgdk/include/sys.h +511 -0
- package/src/platforms/genesis/lib/sgdk/include/tab_cnv.h +19 -0
- package/src/platforms/genesis/lib/sgdk/include/task.h +77 -0
- package/src/platforms/genesis/lib/sgdk/include/task_cst.h +33 -0
- package/src/platforms/genesis/lib/sgdk/include/timer.h +132 -0
- package/src/platforms/genesis/lib/sgdk/include/tools.h +450 -0
- package/src/platforms/genesis/lib/sgdk/include/types.h +320 -0
- package/src/platforms/genesis/lib/sgdk/include/vdp.h +1150 -0
- package/src/platforms/genesis/lib/sgdk/include/vdp_bg.h +723 -0
- package/src/platforms/genesis/lib/sgdk/include/vdp_pal.h +101 -0
- package/src/platforms/genesis/lib/sgdk/include/vdp_spr.h +448 -0
- package/src/platforms/genesis/lib/sgdk/include/vdp_tile.h +1136 -0
- package/src/platforms/genesis/lib/sgdk/include/vram.h +270 -0
- package/src/platforms/genesis/lib/sgdk/include/ym2612.h +87 -0
- package/src/platforms/genesis/lib/sgdk/include/z80_ctrl.h +420 -0
- package/src/platforms/genesis/lib/sgdk/libmd.seed.a +0 -0
- package/src/platforms/genesis/lib/sgdk/libmd.seed.hash +1 -0
- package/src/platforms/genesis/lib/sgdk/md.ld +120 -0
- package/src/platforms/genesis/lib/sgdk/music/demo.vgm +0 -0
- package/src/platforms/genesis/lib/sgdk/music/demo.xgc +0 -0
- package/src/platforms/genesis/lib/sgdk/music/demo.xgm +0 -0
- package/src/platforms/genesis/lib/sgdk/res/image/font_default.png +0 -0
- package/src/platforms/genesis/lib/sgdk/res/image/sgdk_logo.png +0 -0
- package/src/platforms/genesis/lib/sgdk/res/libres.h +10 -0
- package/src/platforms/genesis/lib/sgdk/res/libres.res +5 -0
- package/src/platforms/genesis/lib/sgdk/res/libres.s +166 -0
- package/src/platforms/genesis/lib/sgdk/res/sound/stop_xgm.bin +0 -0
- package/src/platforms/genesis/lib/sgdk/rom_header.c +33 -0
- package/src/platforms/genesis/lib/sgdk/sega.preprocessed.s +364 -0
- package/src/platforms/genesis/lib/sgdk/sega.s +365 -0
- package/src/platforms/genesis/lib/sgdk/src/bmp.c +1539 -0
- package/src/platforms/genesis/lib/sgdk/src/bmp_a.s +3477 -0
- package/src/platforms/genesis/lib/sgdk/src/boot/rom_header.c +33 -0
- package/src/platforms/genesis/lib/sgdk/src/boot/sega.s +365 -0
- package/src/platforms/genesis/lib/sgdk/src/dma.c +782 -0
- package/src/platforms/genesis/lib/sgdk/src/dma_a.s +23 -0
- package/src/platforms/genesis/lib/sgdk/src/error_a.s +376 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/console.c +490 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/everdrive.c +285 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/fat16.c +610 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/flash-save/README.md +112 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/flash-save/flash.c +300 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/flash-save/saveman.c +641 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/link_cable.c +1758 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/CHANGELOG.md +31 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/LICENSE.txt +17 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/README.md +18 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/data.z80 +148 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/define.z80 +173 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/doc/api-c.md +80 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/doc/format.md +132 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/doc/teradrive.md +33 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/fm.z80 +363 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/main.z80 +433 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/minimus.c +129 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/minimus_drv.s80 +17 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/psg.z80 +231 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/track.z80 +398 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/util.z80 +98 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/16c550.c +84 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/README.md +849 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/comm.c +141 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/gamejolt.c +758 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/json.c +153 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/lsd.c +364 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/megawifi.c +1501 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/ssf_ed_pro.c +98 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/mw/ssf_ed_x7.c +67 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/serial/buffer.c +69 -0
- package/src/platforms/genesis/lib/sgdk/src/ext/serial/serial.c +158 -0
- package/src/platforms/genesis/lib/sgdk/src/joy.c +1361 -0
- package/src/platforms/genesis/lib/sgdk/src/kdebug.s +109 -0
- package/src/platforms/genesis/lib/sgdk/src/map.c +1915 -0
- package/src/platforms/genesis/lib/sgdk/src/mapper.c +280 -0
- package/src/platforms/genesis/lib/sgdk/src/maths.c +878 -0
- package/src/platforms/genesis/lib/sgdk/src/maths3D.c +480 -0
- package/src/platforms/genesis/lib/sgdk/src/maths3D_a.s +205 -0
- package/src/platforms/genesis/lib/sgdk/src/memory.c +760 -0
- package/src/platforms/genesis/lib/sgdk/src/memory_a.s +306 -0
- package/src/platforms/genesis/lib/sgdk/src/object.c +111 -0
- package/src/platforms/genesis/lib/sgdk/src/pal.c +484 -0
- package/src/platforms/genesis/lib/sgdk/src/pool.c +234 -0
- package/src/platforms/genesis/lib/sgdk/src/psg.c +82 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/drv_null.s80 +27 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/drv_xgm.s80 +3037 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/pcm/drv_dpcm2.s80 +984 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/pcm/drv_pcm.s80 +592 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/pcm/drv_pcm4.s80 +699 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/pcm/snd_dpcm2.c +172 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/pcm/snd_pcm.c +152 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/pcm/snd_pcm4.c +213 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/pcm/tab_vol.c +277 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/smp_null.s +22 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/smp_null_dpcm.s +15 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/sound.c +33 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm.c +683 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2.s80 +993 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_fct.i80 +611 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_mac.i80 +133 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_pcm_fct.i80 +114 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_pcm_mac.i80 +1444 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_psg_fct.i80 +491 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_psg_mac.i80 +43 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_ym_fct.i80 +1664 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_ym_mac.i80 +295 -0
- package/src/platforms/genesis/lib/sgdk/src/snd/xgm2.c +1083 -0
- package/src/platforms/genesis/lib/sgdk/src/sprite_eng.c +2256 -0
- package/src/platforms/genesis/lib/sgdk/src/sprite_eng_legacy.c +2309 -0
- package/src/platforms/genesis/lib/sgdk/src/sram.c +30 -0
- package/src/platforms/genesis/lib/sgdk/src/sram_a.s +41 -0
- package/src/platforms/genesis/lib/sgdk/src/string.c +720 -0
- package/src/platforms/genesis/lib/sgdk/src/sys.c +1053 -0
- package/src/platforms/genesis/lib/sgdk/src/sys_a.s +74 -0
- package/src/platforms/genesis/lib/sgdk/src/tab_cnv.c +129 -0
- package/src/platforms/genesis/lib/sgdk/src/tab_log10.c +8201 -0
- package/src/platforms/genesis/lib/sgdk/src/tab_log2.c +8201 -0
- package/src/platforms/genesis/lib/sgdk/src/tab_sin.c +2058 -0
- package/src/platforms/genesis/lib/sgdk/src/tab_sqrt.c +8201 -0
- package/src/platforms/genesis/lib/sgdk/src/task.s +148 -0
- package/src/platforms/genesis/lib/sgdk/src/timer.c +201 -0
- package/src/platforms/genesis/lib/sgdk/src/tools.c +1299 -0
- package/src/platforms/genesis/lib/sgdk/src/tools_a.s +979 -0
- package/src/platforms/genesis/lib/sgdk/src/types.c +18 -0
- package/src/platforms/genesis/lib/sgdk/src/vdp.c +1060 -0
- package/src/platforms/genesis/lib/sgdk/src/vdp_bg.c +511 -0
- package/src/platforms/genesis/lib/sgdk/src/vdp_spr.c +322 -0
- package/src/platforms/genesis/lib/sgdk/src/vdp_tile.c +1011 -0
- package/src/platforms/genesis/lib/sgdk/src/vdp_tile_a.s +68 -0
- package/src/platforms/genesis/lib/sgdk/src/vram.c +273 -0
- package/src/platforms/genesis/lib/sgdk/src/ym2612.c +175 -0
- package/src/platforms/genesis/lib/sgdk/src/z80_ctrl.c +334 -0
- package/src/platforms/genesis/lib/sprite_table.s +129 -0
- package/src/platforms/genesis/lib/vblank_wait.s +73 -0
- package/src/platforms/genesis/lib/vdp_init.s +85 -0
- package/src/platforms/genesis/lib/wram.s +88 -0
- package/src/platforms/genesis/lib/z80_bootstrap.s +102 -0
- package/src/platforms/genesis/vdp.js +495 -0
- package/src/platforms/gg/MENTAL_MODEL.md +155 -0
- package/src/platforms/gg/TROUBLESHOOTING.md +91 -0
- package/src/platforms/gg/UPSTREAM_SOURCES.md +36 -0
- package/src/platforms/gg/lib/c/gg_crt0.s +112 -0
- package/src/platforms/gg/lib/c/gg_hw.h +62 -0
- package/src/platforms/gg/lib/c/gg_music.c +155 -0
- package/src/platforms/gg/lib/c/gg_music.h +89 -0
- package/src/platforms/gg/lib/c/gg_sfx.c +82 -0
- package/src/platforms/gg/lib/c/gg_sfx.h +40 -0
- package/src/platforms/gg/lib/c/joypad_read.c +22 -0
- package/src/platforms/gg/lib/c/load_palette.c +20 -0
- package/src/platforms/gg/lib/c/load_tiles.c +32 -0
- package/src/platforms/gg/lib/c/sprite_table.c +60 -0
- package/src/platforms/gg/lib/c/vblank_wait.c +10 -0
- package/src/platforms/gg/lib/c/vdp_init.c +58 -0
- package/src/platforms/index.js +7 -0
- package/src/platforms/lynx/MENTAL_MODEL.md +231 -0
- package/src/platforms/lynx/TROUBLESHOOTING.md +105 -0
- package/src/platforms/lynx/UPSTREAM_SOURCES.md +66 -0
- package/src/platforms/lynx/lib/c/lynx_music.c +63 -0
- package/src/platforms/lynx/lib/c/lynx_music.h +16 -0
- package/src/platforms/lynx/lib/c/lynx_sfx.c +147 -0
- package/src/platforms/lynx/lib/c/lynx_sfx.h +59 -0
- package/src/platforms/lynx/lib/cc65-src/bllhdr.s +18 -0
- package/src/platforms/lynx/lib/cc65-src/bootldr.s +195 -0
- package/src/platforms/lynx/lib/cc65-src/cgetc.s +69 -0
- package/src/platforms/lynx/lib/cc65-src/clock.s +87 -0
- package/src/platforms/lynx/lib/cc65-src/crt0.s +135 -0
- package/src/platforms/lynx/lib/cc65-src/defdir.s +29 -0
- package/src/platforms/lynx/lib/cc65-src/eeprom.s +255 -0
- package/src/platforms/lynx/lib/cc65-src/eeprom46.s +204 -0
- package/src/platforms/lynx/lib/cc65-src/eeprom66.s +227 -0
- package/src/platforms/lynx/lib/cc65-src/eeprom86.s +236 -0
- package/src/platforms/lynx/lib/cc65-src/exec.s +34 -0
- package/src/platforms/lynx/lib/cc65-src/exehdr.s +27 -0
- package/src/platforms/lynx/lib/cc65-src/extzp.inc +23 -0
- package/src/platforms/lynx/lib/cc65-src/extzp.s +30 -0
- package/src/platforms/lynx/lib/cc65-src/irq.s +45 -0
- package/src/platforms/lynx/lib/cc65-src/joy/lynx-stdjoy.s +93 -0
- package/src/platforms/lynx/lib/cc65-src/joy_stat_stddrv.s +14 -0
- package/src/platforms/lynx/lib/cc65-src/kbhit.s +56 -0
- package/src/platforms/lynx/lib/cc65-src/libref.s +9 -0
- package/src/platforms/lynx/lib/cc65-src/load.s +41 -0
- package/src/platforms/lynx/lib/cc65-src/lseek.s +58 -0
- package/src/platforms/lynx/lib/cc65-src/lynx-cart.s +98 -0
- package/src/platforms/lynx/lib/cc65-src/lynx-snd.s +1270 -0
- package/src/platforms/lynx/lib/cc65-src/mainargs.s +24 -0
- package/src/platforms/lynx/lib/cc65-src/open.s +136 -0
- package/src/platforms/lynx/lib/cc65-src/oserror.s +14 -0
- package/src/platforms/lynx/lib/cc65-src/read.s +44 -0
- package/src/platforms/lynx/lib/cc65-src/ser/lynx-comlynx.s +404 -0
- package/src/platforms/lynx/lib/cc65-src/ser_stat_stddrv.s +14 -0
- package/src/platforms/lynx/lib/cc65-src/sysuname.s +39 -0
- package/src/platforms/lynx/lib/cc65-src/tgi/lynx-160-102-16.s +1075 -0
- package/src/platforms/lynx/lib/cc65-src/tgi_colors.s +9 -0
- package/src/platforms/lynx/lib/cc65-src/tgi_irq.s +11 -0
- package/src/platforms/lynx/lib/cc65-src/tgi_stat_stddrv.s +14 -0
- package/src/platforms/lynx/lib/cc65-src/tgi_stddrv.s +13 -0
- package/src/platforms/lynx/lib/cc65-src/uploader.s +81 -0
- package/src/platforms/nes/MENTAL_MODEL.md +301 -0
- package/src/platforms/nes/TROUBLESHOOTING.md +321 -0
- package/src/platforms/nes/UPSTREAM_SOURCES.md +31 -0
- package/src/platforms/nes/image-to-chr.js +195 -0
- package/src/platforms/nes/image-to-tilemap.js +415 -0
- package/src/platforms/nes/lib/README.md +40 -0
- package/src/platforms/nes/lib/asm/LICENSE-FAMITONE +40 -0
- package/src/platforms/nes/lib/asm/chr_ram_header.s +32 -0
- package/src/platforms/nes/lib/asm/famitone2.s +1258 -0
- package/src/platforms/nes/lib/asm/famitone_bridge.s +50 -0
- package/src/platforms/nes/lib/asm/music_data.s +238 -0
- package/src/platforms/nes/lib/c/chr_ram_runtime_hello_sprite.c +81 -0
- package/src/platforms/nes/lib/c/chr_ram_runtime_hud_row.c +101 -0
- package/src/platforms/nes/lib/c/nes_runtime.c +347 -0
- package/src/platforms/nes/lib/c/nes_runtime.h +153 -0
- package/src/platforms/nes/lib/c/nmi_handler.c +51 -0
- package/src/platforms/nes/lib/c/nmi_trampoline.s +25 -0
- package/src/platforms/nes/lib/cc65-src/Makefile.inc +9 -0
- package/src/platforms/nes/lib/cc65-src/_scrsize.s +24 -0
- package/src/platforms/nes/lib/cc65-src/cclear.s +29 -0
- package/src/platforms/nes/lib/cc65-src/chline.s +31 -0
- package/src/platforms/nes/lib/cc65-src/clock.s +31 -0
- package/src/platforms/nes/lib/cc65-src/clrscr.s +72 -0
- package/src/platforms/nes/lib/cc65-src/color.s +68 -0
- package/src/platforms/nes/lib/cc65-src/cpeekc.s +37 -0
- package/src/platforms/nes/lib/cc65-src/cpeekcolor.s +8 -0
- package/src/platforms/nes/lib/cc65-src/cpeekrevers.s +37 -0
- package/src/platforms/nes/lib/cc65-src/cputc.s +95 -0
- package/src/platforms/nes/lib/cc65-src/crt0.s +180 -0
- package/src/platforms/nes/lib/cc65-src/cvline.s +31 -0
- package/src/platforms/nes/lib/cc65-src/get_tv.s +37 -0
- package/src/platforms/nes/lib/cc65-src/gotox.s +21 -0
- package/src/platforms/nes/lib/cc65-src/gotoxy.s +22 -0
- package/src/platforms/nes/lib/cc65-src/gotoy.s +22 -0
- package/src/platforms/nes/lib/cc65-src/irq.s +19 -0
- package/src/platforms/nes/lib/cc65-src/joy/nes-stdjoy.s +102 -0
- package/src/platforms/nes/lib/cc65-src/joy_stat_stddrv.s +14 -0
- package/src/platforms/nes/lib/cc65-src/libref.s +9 -0
- package/src/platforms/nes/lib/cc65-src/mainargs.s +24 -0
- package/src/platforms/nes/lib/cc65-src/neschar.s +4616 -0
- package/src/platforms/nes/lib/cc65-src/ppu.s +158 -0
- package/src/platforms/nes/lib/cc65-src/ppubuf.s +117 -0
- package/src/platforms/nes/lib/cc65-src/randomize.s +18 -0
- package/src/platforms/nes/lib/cc65-src/revers.s +27 -0
- package/src/platforms/nes/lib/cc65-src/setcursor.s +37 -0
- package/src/platforms/nes/lib/cc65-src/sysuname.s +39 -0
- package/src/platforms/nes/lib/cc65-src/tgi/nes-64-56-2.s +480 -0
- package/src/platforms/nes/lib/cc65-src/tgi_stat_stddrv.s +14 -0
- package/src/platforms/nes/lib/cc65-src/tgi_stddrv.s +13 -0
- package/src/platforms/nes/lib/cc65-src/waitvsync.s +18 -0
- package/src/platforms/nes/lib/cc65-src/wherex.s +19 -0
- package/src/platforms/nes/lib/cc65-src/wherey.s +19 -0
- package/src/platforms/nes/lib/clear_nametable.s +38 -0
- package/src/platforms/nes/lib/clear_oam.s +18 -0
- package/src/platforms/nes/lib/load_palette.s +31 -0
- package/src/platforms/nes/lib/nmi_safe.s +65 -0
- package/src/platforms/nes/lib/oam_dma.s +16 -0
- package/src/platforms/nes/lib/read_pad.s +46 -0
- package/src/platforms/nes/lib/reset.s +46 -0
- package/src/platforms/nes/lib/sprite_table_populate.s +75 -0
- package/src/platforms/nes/lib/wait_vblank.s +12 -0
- package/src/platforms/nes/palette.js +39 -0
- package/src/platforms/nes/ppu.js +372 -0
- package/src/platforms/sms/MENTAL_MODEL.md +267 -0
- package/src/platforms/sms/TROUBLESHOOTING.md +124 -0
- package/src/platforms/sms/UPSTREAM_SOURCES.md +29 -0
- package/src/platforms/sms/image-to-tilemap.js +260 -0
- package/src/platforms/sms/lib/README.md +117 -0
- package/src/platforms/sms/lib/c/joypad_read.c +33 -0
- package/src/platforms/sms/lib/c/load_palette.c +24 -0
- package/src/platforms/sms/lib/c/load_tiles.c +32 -0
- package/src/platforms/sms/lib/c/sms_crt0.s +101 -0
- package/src/platforms/sms/lib/c/sms_hw.h +53 -0
- package/src/platforms/sms/lib/c/sms_music.c +178 -0
- package/src/platforms/sms/lib/c/sms_music.h +50 -0
- package/src/platforms/sms/lib/c/sms_sfx.c +82 -0
- package/src/platforms/sms/lib/c/sms_sfx.h +40 -0
- package/src/platforms/sms/lib/c/sprite_table.c +60 -0
- package/src/platforms/sms/lib/c/vblank_wait.c +10 -0
- package/src/platforms/sms/lib/c/vdp_init.c +58 -0
- package/src/platforms/sms/lib/header.s +33 -0
- package/src/platforms/sms/lib/joypad_read.s +40 -0
- package/src/platforms/sms/lib/load_palette.s +30 -0
- package/src/platforms/sms/lib/load_tiles.s +50 -0
- package/src/platforms/sms/lib/sprite_table.s +44 -0
- package/src/platforms/sms/lib/vblank_wait.s +36 -0
- package/src/platforms/sms/lib/vdp_init.s +47 -0
- package/src/platforms/sms/vdp.js +530 -0
- package/src/platforms/snes/MENTAL_MODEL.md +275 -0
- package/src/platforms/snes/TROUBLESHOOTING.md +208 -0
- package/src/platforms/snes/UPSTREAM_SOURCES.md +50 -0
- package/src/platforms/snes/brr.js +208 -0
- package/src/platforms/snes/image-to-tilemap.js +227 -0
- package/src/platforms/snes/lib/audio/apu_blob.asm +228 -0
- package/src/platforms/snes/lib/audio/apu_blob.bin +0 -0
- package/src/platforms/snes/lib/audio/explosion.brr +0 -0
- package/src/platforms/snes/lib/audio/sample_bank.bin +0 -0
- package/src/platforms/snes/lib/audio/shoot.brr +0 -0
- package/src/platforms/snes/lib/audio/spc_driver.asm +241 -0
- package/src/platforms/snes/lib/audio_pipeline.asm +62 -0
- package/src/platforms/snes/lib/c/crt0.asm +125 -0
- package/src/platforms/snes/lib/c/hdr.asm +50 -0
- package/src/platforms/snes/lib/c/snes_sfx.c +116 -0
- package/src/platforms/snes/lib/c/snes_sfx.h +96 -0
- package/src/platforms/snes/lib/c/snes_sfx_data.asm +25 -0
- package/src/platforms/snes/lib/cgram_upload.asm +43 -0
- package/src/platforms/snes/lib/lorom_header.asm +47 -0
- package/src/platforms/snes/lib/lorom_multibank.asm +66 -0
- package/src/platforms/snes/lib/nmi_safe.asm +77 -0
- package/src/platforms/snes/lib/oam_upload.asm +45 -0
- package/src/platforms/snes/lib/pad_read.asm +64 -0
- package/src/platforms/snes/lib/pvsneslib/LICENSE +21 -0
- package/src/platforms/snes/lib/pvsneslib/include/ctype.h +6 -0
- package/src/platforms/snes/lib/pvsneslib/include/float.h +4 -0
- package/src/platforms/snes/lib/pvsneslib/include/hdr.asm +47 -0
- package/src/platforms/snes/lib/pvsneslib/include/limits.h +13 -0
- package/src/platforms/snes/lib/pvsneslib/include/math.h +10 -0
- package/src/platforms/snes/lib/pvsneslib/include/setjmp.h +4 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/background.h +396 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/console.h +188 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/dma.h +381 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/input.h +289 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/interrupt.h +264 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/libversion.h +10 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/lzss.h +43 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/map.h +113 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/object.h +234 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/pixel.h +53 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/scores.h +66 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/snestypes.h +65 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/sound.h +245 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/sprite.h +456 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes/video.h +465 -0
- package/src/platforms/snes/lib/pvsneslib/include/snes.h +190 -0
- package/src/platforms/snes/lib/pvsneslib/include/stdarg.h +28 -0
- package/src/platforms/snes/lib/pvsneslib/include/stdbool.h +53 -0
- package/src/platforms/snes/lib/pvsneslib/include/stddef.h +27 -0
- package/src/platforms/snes/lib/pvsneslib/include/stdint.h +7 -0
- package/src/platforms/snes/lib/pvsneslib/include/stdio.h +9 -0
- package/src/platforms/snes/lib/pvsneslib/include/stdlib.h +13 -0
- package/src/platforms/snes/lib/pvsneslib/include/string.h +19 -0
- package/src/platforms/snes/lib/pvsneslib/include/strings.h +5 -0
- package/src/platforms/snes/lib/pvsneslib/source/Makefile +87 -0
- package/src/platforms/snes/lib/pvsneslib/source/backgrounds.asm +834 -0
- package/src/platforms/snes/lib/pvsneslib/source/consoles.asm +1028 -0
- package/src/platforms/snes/lib/pvsneslib/source/crt0_snes.asm +329 -0
- package/src/platforms/snes/lib/pvsneslib/source/dmas.asm +1275 -0
- package/src/platforms/snes/lib/pvsneslib/source/hdr.asm +56 -0
- package/src/platforms/snes/lib/pvsneslib/source/input.asm +445 -0
- package/src/platforms/snes/lib/pvsneslib/source/libc.asm +485 -0
- package/src/platforms/snes/lib/pvsneslib/source/libc_c.c +1214 -0
- package/src/platforms/snes/lib/pvsneslib/source/libm.asm +510 -0
- package/src/platforms/snes/lib/pvsneslib/source/libtcc.asm +374 -0
- package/src/platforms/snes/lib/pvsneslib/source/lzsss.asm +256 -0
- package/src/platforms/snes/lib/pvsneslib/source/maps.asm +1078 -0
- package/src/platforms/snes/lib/pvsneslib/source/objects.asm +2881 -0
- package/src/platforms/snes/lib/pvsneslib/source/scores.asm +226 -0
- package/src/platforms/snes/lib/pvsneslib/source/sm_spc.asm +187 -0
- package/src/platforms/snes/lib/pvsneslib/source/snesmodwla.asm +1186 -0
- package/src/platforms/snes/lib/pvsneslib/source/sounds.asm +273 -0
- package/src/platforms/snes/lib/pvsneslib/source/sprites.asm +3946 -0
- package/src/platforms/snes/lib/pvsneslib/source/vblank.asm +917 -0
- package/src/platforms/snes/lib/pvsneslib/source/videos.asm +1137 -0
- package/src/platforms/snes/lib/reset_init.asm +31 -0
- package/src/platforms/snes/lib/sprite_table_populate.asm +122 -0
- package/src/platforms/snes/lib/vram_dma_upload.asm +42 -0
- package/src/platforms/snes/ppu.js +606 -0
- package/src/playtest/playtest.js +612 -0
- package/src/rom-id/identifier.js +421 -0
- package/src/rom-id/patch.js +217 -0
- package/src/toolchains/_worker/pool.js +253 -0
- package/src/toolchains/_worker/run.js +78 -0
- package/src/toolchains/_worker/wasm-worker.js +233 -0
- package/src/toolchains/arm-none-eabi-gcc/gcc.js +208 -0
- package/src/toolchains/asar/asar.js +542 -0
- package/src/toolchains/assemble-snippet.js +256 -0
- package/src/toolchains/cc65/cc65.js +395 -0
- package/src/toolchains/cc65/da65.js +119 -0
- package/src/toolchains/cc65/dbgparse.js +274 -0
- package/src/toolchains/cc65/preset-resolver.js +59 -0
- package/src/toolchains/cc65/presets/nes/chr-ram-runtime.cfg +79 -0
- package/src/toolchains/cc65/presets/nes/chr-ram-runtime.crt0.s +178 -0
- package/src/toolchains/cc65/presets/nes/chr-ram.cfg +76 -0
- package/src/toolchains/cc65/presets/nes/chr-ram.crt0.s +106 -0
- package/src/toolchains/common/ar.js +121 -0
- package/src/toolchains/common/sdk-cache.js +116 -0
- package/src/toolchains/common/symbols.js +139 -0
- package/src/toolchains/dasm/dasm.js +96 -0
- package/src/toolchains/gba-c/gba-c.js +832 -0
- package/src/toolchains/genesis-c/README.md +61 -0
- package/src/toolchains/genesis-c/genesis-c.js +598 -0
- package/src/toolchains/index.js +727 -0
- package/src/toolchains/m68k-elf-gcc/gcc.js +220 -0
- package/src/toolchains/m68kdasm.js +438 -0
- package/src/toolchains/parse-errors.js +258 -0
- package/src/toolchains/registry.js +67 -0
- package/src/toolchains/rgbds/rgbds.js +144 -0
- package/src/toolchains/sdcc/preflight-lint.js +295 -0
- package/src/toolchains/sdcc/sdcc.js +519 -0
- package/src/toolchains/sjasm/sjasm.js +85 -0
- package/src/toolchains/sm83dasm.js +194 -0
- package/src/toolchains/snes-c/snes-c.js +409 -0
- package/src/toolchains/tcc816/tcc816.js +79 -0
- package/src/toolchains/vasm68k/vasm68k.js +138 -0
- package/src/toolchains/wladx/wladx.js +120 -0
- package/src/toolchains/z80dasm.js +303 -0
|
@@ -0,0 +1,1083 @@
|
|
|
1
|
+
#include "config.h"
|
|
2
|
+
#include "types.h"
|
|
3
|
+
|
|
4
|
+
#include "z80_ctrl.h"
|
|
5
|
+
|
|
6
|
+
#include "snd/sound.h"
|
|
7
|
+
#include "snd/xgm2.h"
|
|
8
|
+
#include "src/snd/xgm2/drv_xgm2.h"
|
|
9
|
+
|
|
10
|
+
#include "sys.h"
|
|
11
|
+
#include "timer.h"
|
|
12
|
+
#include "mapper.h"
|
|
13
|
+
#include "maths.h"
|
|
14
|
+
#include "memory.h"
|
|
15
|
+
#include "vdp.h"
|
|
16
|
+
|
|
17
|
+
#include "tools.h"
|
|
18
|
+
|
|
19
|
+
// memory functions are provided in <string.h> when using newlib
|
|
20
|
+
#if (ENABLE_NEWLIB != 0)
|
|
21
|
+
#include "string.h"
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
#define Z80_DRV_VARS (Z80_RAM + 0x110)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
#define XGM2_PLAY_ARG_FM_ADDR (Z80_DRV_PARAMS + 0x00) // FM stream address (b8-b23)
|
|
30
|
+
#define XGM2_PLAY_ARG_PSG_ADDR (Z80_DRV_PARAMS + 0x02) // PSG stream address (b8-b23)
|
|
31
|
+
#define XGM2_PLAY_ARG_LOOP (Z80_DRV_PARAMS + 0x04) // number of loop (0 = no loop, 255 = infinite)
|
|
32
|
+
|
|
33
|
+
#define XGM2_PCM_ARG_BASE (Z80_DRV_PARAMS + 0x05) // PCM base args
|
|
34
|
+
|
|
35
|
+
#define XGM2_PCM0_ARG (XGM2_PCM_ARGS_BASE + 0) // PCM0: b0-b3 = priority (0 to 15); b6 = half speed; b7 = loop
|
|
36
|
+
#define XGM2_PCM1_ARG (XGM2_PCM_ARGS_BASE + 1) // PCM1: b0-b3 = priority (0 to 15); b6 = half speed; b7 = loop
|
|
37
|
+
#define XGM2_PCM2_ARG (XGM2_PCM_ARGS_BASE + 2) // PCM2: b0-b3 = priority (0 to 15); b6 = half speed; b7 = loop
|
|
38
|
+
|
|
39
|
+
#define XGM2_FM_ARG_VOLUME (Z80_DRV_PARAMS + 0x08) // FM volume: 0x00 to 0x7F where 0x00 is maximum volume and 0x7F is silent (attenuation)
|
|
40
|
+
#define XGM2_PSG_ARG_VOLUME (Z80_DRV_PARAMS + 0x09) // PSG volume: 0x0 to 0xF where 0x0 is maximum volume and 0xF is silent (attenuation)
|
|
41
|
+
|
|
42
|
+
#define XGM2_TEMPO_ARG_INC_FRAC (Z80_DRV_PARAMS + 0x0A) // tempo: frame increment at each vsync (fractional part)
|
|
43
|
+
#define XGM2_TEMPO_ARG_INC (Z80_DRV_PARAMS + 0x0B) // tempo: frame increment at each vsync
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
#define XGM2_ACCESS_CMD_SFT 0
|
|
47
|
+
#define XGM2_ACCESS_PCM_ARG_SFT 1
|
|
48
|
+
#define XGM2_ACCESS_WRITE_ELAPSED_SFT 2
|
|
49
|
+
#define XGM2_ACCESS_READ_TEMPO_SFT 3
|
|
50
|
+
|
|
51
|
+
#define XGM2_ACCESS_CMD_MSK (1 << XGM2_ACCESS_CMD_SFT)
|
|
52
|
+
#define XGM2_ACCESS_PCM_ARG_MSK (1 << XGM2_ACCESS_PCM_ARG_SFT)
|
|
53
|
+
#define XGM2_ACCESS_WRITE_ELAPSED_MSK (1 << XGM2_ACCESS_WRITE_ELAPSED_SFT)
|
|
54
|
+
#define XGM2_ACCESS_READ_TEMPO_MSK (1 << XGM2_ACCESS_READ_TEMPO_SFT)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
#define XGM2_ACCESS (Z80_DRV_VARS + 0x50) // b0 = Z80 is processing 68k commands (reading params / clearing commands / writing status)
|
|
58
|
+
// 68k should wait before issuing / modifying commands / reading status
|
|
59
|
+
// b1 = Z80 is writing ELAPSED_FRAME timestamp (multi byte write)
|
|
60
|
+
// 68k should wait before reading it
|
|
61
|
+
// b2 = Z80 is reading TEMPO parameter (multi byte param)
|
|
62
|
+
// 68k should wait before writing it
|
|
63
|
+
#define XGM2_IN_DMA (Z80_DRV_VARS + 0x51) // b0 = DMA operation in progress - read only from z80
|
|
64
|
+
// Z80 cannot access 68k BUS when the bit is set
|
|
65
|
+
|
|
66
|
+
#define XGM2_ELAPSED_FRAME (Z80_DRV_VARS + 0x55) // elapsed frames since music start play (in frames), encoded on 24 bit
|
|
67
|
+
#define XGM2_MISSED_FRAME (Z80_DRV_VARS + 0x58) // missed frames since music start play (in frames), encoded on 8 bit
|
|
68
|
+
|
|
69
|
+
#define XGM2_FM_START (Z80_DRV_VARS + 0x5C)
|
|
70
|
+
#define XGM2_FM_CUR (Z80_DRV_VARS + 0x5E)
|
|
71
|
+
#define XGM2_FM_BUF_RD (Z80_DRV_VARS + 0x62)
|
|
72
|
+
#define XGM2_FM_BUF_WR (Z80_DRV_VARS + 0x63)
|
|
73
|
+
#define XGM2_FM_WAIT_FRM (Z80_DRV_VARS + 0x64)
|
|
74
|
+
|
|
75
|
+
#define XGM2_PSG_START (Z80_DRV_VARS + 0x66)
|
|
76
|
+
#define XGM2_PSG_CUR (Z80_DRV_VARS + 0x68)
|
|
77
|
+
#define XGM2_PSG_BUF_RD (Z80_DRV_VARS + 0x6C)
|
|
78
|
+
#define XGM2_PSG_BUF_WR (Z80_DRV_VARS + 0x6D)
|
|
79
|
+
#define XGM2_PSG_WAIT_FRM (Z80_DRV_VARS + 0x6E)
|
|
80
|
+
|
|
81
|
+
#define XGM2_PCM_PARAM_BASE (Z80_DRV_VARS + 0xD0)
|
|
82
|
+
#define XGM2_PCM_PARAM_LEN 8
|
|
83
|
+
|
|
84
|
+
#define XGM2_PCM_ADDR_INT (XGM2_PCM_PARAM_BASE + 0)
|
|
85
|
+
#define XGM2_PCM_LEN_INT (XGM2_PCM_PARAM_BASE + 3)
|
|
86
|
+
#define XGM2_PCM_PRIO_EXT_INT (XGM2_PCM_PARAM_BASE + 5)
|
|
87
|
+
|
|
88
|
+
#define XGM2_IDLE_TIME (Z80_DRV_VARS + 0xEB) // idle loop counter (idle wait in number of PCM sample)
|
|
89
|
+
#define XGM2_DMA_WAIT_TIME (Z80_DRV_VARS + 0xEC) // wait loop counter (IN_DMA wait in number of PCM sample)
|
|
90
|
+
|
|
91
|
+
#define XGM2_DEBUG0 (Z80_DRV_VARS + 0x48) // first debug space (reserve 8 bytes for that)
|
|
92
|
+
#define XGM2_DEBUG1 (Z80_DRV_VARS + 0xC8) // second debug space (reserve 8 bytes for that)
|
|
93
|
+
#define XGM2_PLAYED_SAMPLES (XGM2_DEBUG0 + 1) // number of samples played on last frame
|
|
94
|
+
#define XGM2_FRAME_COUNTER (XGM2_DEBUG0 + 2) // number of elapsed frames since driver reset
|
|
95
|
+
#define XGM2_PROCESS_TIME (XGM2_DEBUG1 + 0) // last vint process time in number of frame
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
#define XGM2_PCM_BUFFER (Z80_RAM + 0x1900) // PCM ring buffer (4 x 64 bytes)
|
|
99
|
+
#define XGM2_SID_TABLE (Z80_RAM + 0x1C00) // Sample id table (size = $200)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
#define XGM2_PCM_ADDR_ARG_BASE (XGM2_SID_TABLE + 0x1F4)
|
|
103
|
+
#define XGM2_PCM_LEN_ARG_BASE (XGM2_SID_TABLE + 0x1F6)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
#define XGM2_COM_PLAY_PCM_BASE (1 << 0)
|
|
107
|
+
#define XGM2_COM_PLAY_PCM0 (XGM2_COM_PLAY_PCM_BASE << 0)
|
|
108
|
+
#define XGM2_COM_PLAY_PCM1 (XGM2_COM_PLAY_PCM_BASE << 1)
|
|
109
|
+
#define XGM2_COM_PLAY_PCM2 (XGM2_COM_PLAY_PCM_BASE << 2)
|
|
110
|
+
#define XGM2_COM_RESUME_PLAY (1 << 3)
|
|
111
|
+
#define XGM2_COM_START_PLAY (1 << 4)
|
|
112
|
+
#define XGM2_COM_PAUSE_PLAY (1 << 5)
|
|
113
|
+
#define XGM2_COM_SET_VOLUME_FM (1 << 6)
|
|
114
|
+
#define XGM2_COM_SET_VOLUME_PSG (1 << 7)
|
|
115
|
+
|
|
116
|
+
#define XGM2_STATUS_PLAYING_PCM1 (1 << 0)
|
|
117
|
+
#define XGM2_STATUS_PLAYING_PCM2 (1 << 1)
|
|
118
|
+
#define XGM2_STATUS_PLAYING_PCM3 (1 << 2)
|
|
119
|
+
#define XGM2_STATUS_PLAYING_PCM_ALL (XGM2_STATUS_PLAYING_PCM1 | XGM2_STATUS_PLAYING_PCM2 | XGM2_STATUS_PLAYING_PCM3)
|
|
120
|
+
#define XGM2_STATUS_PLAYING (1 << 4)
|
|
121
|
+
#define XGM2_STATUS_READY (1 << 7)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
#define XGM2_PAL_FLAG (1 << 0)
|
|
125
|
+
#define XGM2_MULTI_TRACK_FLAG (1 << 1)
|
|
126
|
+
#define XGM2_GD3_TAGS_FLAG (1 << 2)
|
|
127
|
+
#define XGM2_PACKED_FLAG (1 << 3)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
typedef enum
|
|
131
|
+
{
|
|
132
|
+
DO_NOTHING,
|
|
133
|
+
DO_STOP,
|
|
134
|
+
DO_PAUSE
|
|
135
|
+
} FadeEndProcess;
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
// FM volume conversion table
|
|
139
|
+
const u8 fmVolTable[100] =
|
|
140
|
+
{
|
|
141
|
+
127, 121, 115, 110, 104, 99, 95, 90, 86, 82,
|
|
142
|
+
78, 74, 71, 67, 64, 61, 58, 55, 52, 50,
|
|
143
|
+
48, 45, 43, 41, 39, 37, 35, 34, 32, 30,
|
|
144
|
+
29, 27, 26, 25, 24, 22, 21, 20, 19, 18,
|
|
145
|
+
17, 17, 16, 15, 14, 13, 13, 12, 11, 11,
|
|
146
|
+
10, 10, 9, 9, 8, 8, 7, 7, 7, 6,
|
|
147
|
+
6, 6, 5, 5, 5, 4, 4, 4, 4, 4,
|
|
148
|
+
3, 3, 3, 3, 3, 2, 2, 2, 2, 2,
|
|
149
|
+
2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
150
|
+
1, 1, 0, 0, 0, 0, 0, 0, 0, 0
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
// PSG volume conversion table
|
|
154
|
+
const u8 psgVolTable[100] =
|
|
155
|
+
{
|
|
156
|
+
15, 15, 14, 14, 13, 13, 13, 12, 12, 11,
|
|
157
|
+
11, 11, 10, 10, 10, 10, 9, 9, 9, 8,
|
|
158
|
+
8, 8, 8, 7, 7, 7, 7, 7, 6, 6,
|
|
159
|
+
6, 6, 6, 5, 5, 5, 5, 5, 5, 4,
|
|
160
|
+
4, 4, 4, 4, 4, 4, 3, 3, 3, 3,
|
|
161
|
+
3, 3, 3, 3, 3, 2, 2, 2, 2, 2,
|
|
162
|
+
2, 2, 2, 2, 2, 2, 2, 1, 1, 1,
|
|
163
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
164
|
+
1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
|
|
165
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
// allow to access it without "public" share
|
|
170
|
+
extern s16 currentDriver;
|
|
171
|
+
|
|
172
|
+
// current loaded XGM track
|
|
173
|
+
static const u8* currentXGM;
|
|
174
|
+
|
|
175
|
+
// tempo
|
|
176
|
+
static u16 xgm2Tempo;
|
|
177
|
+
|
|
178
|
+
// volume
|
|
179
|
+
static u16 fmVol;
|
|
180
|
+
static u16 psgVol;
|
|
181
|
+
static bool restoreVolume;
|
|
182
|
+
|
|
183
|
+
// fade vars
|
|
184
|
+
static f16 fadeFMVol;
|
|
185
|
+
static f16 fadePSGVol;
|
|
186
|
+
static f16 fadeFMVolStep;
|
|
187
|
+
static f16 fadePSGVolStep;
|
|
188
|
+
static u16 fadeCount;
|
|
189
|
+
static FadeEndProcess fadeEndProcess;
|
|
190
|
+
|
|
191
|
+
// Z80 cpu load calculation for XGM2 driver
|
|
192
|
+
static u8 xgm2IdleTab[8];
|
|
193
|
+
static u8 xgm2WaitTab[8];
|
|
194
|
+
static u16 xgm2IdleTabInd;
|
|
195
|
+
static u16 xgm2WaitTabInd;
|
|
196
|
+
static u16 xgm2IdleMean;
|
|
197
|
+
static u16 xgm2WaitMean;
|
|
198
|
+
|
|
199
|
+
// forward
|
|
200
|
+
static bool getAccess(const u8 flag);
|
|
201
|
+
static void releaseAccess(const bool busTaken);
|
|
202
|
+
static void initLoadCalculation(void);
|
|
203
|
+
static s16 getPCMChannel(const u8 priority);
|
|
204
|
+
static void setMusicTempo(const u16 value);
|
|
205
|
+
static void setLoopNumber(const s8 value);
|
|
206
|
+
static void setFMVolume(const u16 value);
|
|
207
|
+
static void setPSGVolume(const u16 value);
|
|
208
|
+
static void doFade(const u16 fmVolStart, const u16 fmVolEnd, const u16 psgVolStart, const u16 psgVolEnd, const u16 frame, const FadeEndProcess fep);
|
|
209
|
+
static void vintFadeProcess(void);
|
|
210
|
+
|
|
211
|
+
// we don't want to share it
|
|
212
|
+
extern void Z80_loadDriverInternal(const u8 *drv, const u16 size);
|
|
213
|
+
|
|
214
|
+
// Z80_DRIVER_XGM2
|
|
215
|
+
// XGM2 driver
|
|
216
|
+
///////////////////////////////////////////////////////////////
|
|
217
|
+
|
|
218
|
+
NO_INLINE void XGM2_loadDriver(bool waitReady)
|
|
219
|
+
{
|
|
220
|
+
// already loaded
|
|
221
|
+
if (currentDriver == Z80_DRIVER_XGM2) return;
|
|
222
|
+
|
|
223
|
+
Z80_loadDriverInternal(drv_xgm2, sizeof(drv_xgm2));
|
|
224
|
+
|
|
225
|
+
SYS_disableInts();
|
|
226
|
+
|
|
227
|
+
// wait driver for being ready
|
|
228
|
+
if (waitReady)
|
|
229
|
+
{
|
|
230
|
+
// wait driver ready
|
|
231
|
+
while(!Z80_isDriverReady())
|
|
232
|
+
waitMs(1);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// default
|
|
236
|
+
fmVol = 100;
|
|
237
|
+
psgVol = 100;
|
|
238
|
+
restoreVolume = FALSE;
|
|
239
|
+
|
|
240
|
+
// set infinite loop
|
|
241
|
+
setLoopNumber(0xFF);
|
|
242
|
+
// set default tempo
|
|
243
|
+
setMusicTempo(60);
|
|
244
|
+
// init load calculations
|
|
245
|
+
initLoadCalculation();
|
|
246
|
+
// set bus protection signal address
|
|
247
|
+
Z80_useBusProtection(XGM2_IN_DMA & 0xFFFF);
|
|
248
|
+
|
|
249
|
+
SYS_enableInts();
|
|
250
|
+
|
|
251
|
+
// driver loaded
|
|
252
|
+
currentDriver = Z80_DRIVER_XGM2;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
NO_INLINE void XGM2_unloadDriver(void)
|
|
256
|
+
{
|
|
257
|
+
// remove bus protection (signal address set to 0)
|
|
258
|
+
Z80_useBusProtection(0);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
bool XGM2_isPlaying(void)
|
|
263
|
+
{
|
|
264
|
+
// load the appropriate driver if not already done
|
|
265
|
+
XGM2_loadDriver(TRUE);
|
|
266
|
+
|
|
267
|
+
// point to Z80 status
|
|
268
|
+
vu8* pb = (vu8*) Z80_DRV_STATUS;
|
|
269
|
+
|
|
270
|
+
SYS_disableInts();
|
|
271
|
+
// request Z80 BUS
|
|
272
|
+
bool busTaken = Z80_getAndRequestBus(TRUE);
|
|
273
|
+
|
|
274
|
+
// play status
|
|
275
|
+
bool ret = (*pb & XGM2_STATUS_PLAYING)?TRUE:FALSE;
|
|
276
|
+
|
|
277
|
+
releaseAccess(busTaken);
|
|
278
|
+
|
|
279
|
+
return ret;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
NO_INLINE void XGM2_load(const u8 *song)
|
|
283
|
+
{
|
|
284
|
+
u8 ids[249*2];
|
|
285
|
+
u16 i;
|
|
286
|
+
|
|
287
|
+
// load the appropriate driver if not already done
|
|
288
|
+
XGM2_loadDriver(TRUE);
|
|
289
|
+
|
|
290
|
+
// set current XGM
|
|
291
|
+
currentXGM = song;
|
|
292
|
+
|
|
293
|
+
// sample offset
|
|
294
|
+
u32 sampleOff = (u32) song;
|
|
295
|
+
// num max sample
|
|
296
|
+
u16 maxSample;
|
|
297
|
+
|
|
298
|
+
// PAL timing ?
|
|
299
|
+
if (song[1] & XGM2_PAL_FLAG) setMusicTempo(50);
|
|
300
|
+
else setMusicTempo(60);
|
|
301
|
+
|
|
302
|
+
// multi tracks ?
|
|
303
|
+
if (song[1] & XGM2_MULTI_TRACK_FLAG)
|
|
304
|
+
{
|
|
305
|
+
sampleOff += 0x400;
|
|
306
|
+
// only 500 bytes of the SID table can be used as the last 12 bytes are used for SFX
|
|
307
|
+
maxSample = (500 / 2) - 1;
|
|
308
|
+
|
|
309
|
+
}
|
|
310
|
+
// single track
|
|
311
|
+
else
|
|
312
|
+
{
|
|
313
|
+
sampleOff += 0x100;
|
|
314
|
+
maxSample = 124;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// prepare sample id table
|
|
318
|
+
for(i = 0; i < maxSample; i++)
|
|
319
|
+
{
|
|
320
|
+
u32 addr;
|
|
321
|
+
|
|
322
|
+
// sample address in sample id table data
|
|
323
|
+
addr = song[8 + (i * 2) + 0] << 0;
|
|
324
|
+
addr |= song[8 + (i * 2) + 1] << 8;
|
|
325
|
+
|
|
326
|
+
// no more sample ? stop here
|
|
327
|
+
if (addr == 0xFFFF) break;
|
|
328
|
+
|
|
329
|
+
// adjust sample address (make it absolute)
|
|
330
|
+
addr = (addr << 8) + sampleOff;
|
|
331
|
+
|
|
332
|
+
// write adjusted addr
|
|
333
|
+
ids[(i * 2) + 0] = addr >> 8;
|
|
334
|
+
ids[(i * 2) + 1] = addr >> 16;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// upload sample id table
|
|
338
|
+
Z80_upload(XGM2_SID_TABLE & 0xFFFF, ids, i * 2);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
void XGM2_load_FAR(const u8 *song, const u32 len)
|
|
342
|
+
{
|
|
343
|
+
XGM2_load(FAR_SAFE(song, len));
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
NO_INLINE void XGM2_playTrack(const u16 track)
|
|
347
|
+
{
|
|
348
|
+
// load the appropriate driver if not already done
|
|
349
|
+
XGM2_loadDriver(TRUE);
|
|
350
|
+
|
|
351
|
+
#if (LIB_LOG_LEVEL >= LOG_LEVEL_INFO)
|
|
352
|
+
// trying to play no existing track ?
|
|
353
|
+
if (!(currentXGM[1] & XGM2_MULTI_TRACK_FLAG) && (track > 0))
|
|
354
|
+
kprintf("XGM2_playTrack() error: cannot play track %d on a single track XGM file", track);
|
|
355
|
+
#endif
|
|
356
|
+
|
|
357
|
+
u32 offset;
|
|
358
|
+
u32 sampleLen;
|
|
359
|
+
u32 fmLen;
|
|
360
|
+
|
|
361
|
+
// base offset (bypass setting + base sample id table)
|
|
362
|
+
offset = (u32) ¤tXGM[0x100];
|
|
363
|
+
// sample data len
|
|
364
|
+
sampleLen = currentXGM[2] << 8;
|
|
365
|
+
sampleLen += currentXGM[3] << 16;
|
|
366
|
+
// FM data len
|
|
367
|
+
fmLen = currentXGM[4] << 8;
|
|
368
|
+
fmLen += currentXGM[5] << 16;
|
|
369
|
+
|
|
370
|
+
u32 fmAddr;
|
|
371
|
+
u32 psgAddr;
|
|
372
|
+
|
|
373
|
+
// multi tracks ?
|
|
374
|
+
if (currentXGM[1] & XGM2_MULTI_TRACK_FLAG)
|
|
375
|
+
{
|
|
376
|
+
// bypass sample id table extension (0x100) + FM id table (0x100) + PSG id table (0x100)
|
|
377
|
+
offset += 0x300;
|
|
378
|
+
// get base offset for FM and PSG
|
|
379
|
+
fmAddr = currentXGM[0x200 + (track * 2) + 0] << 8;
|
|
380
|
+
fmAddr += currentXGM[0x200 + (track * 2) + 1] << 16;
|
|
381
|
+
psgAddr = currentXGM[0x300 + (track * 2) + 0] << 8;
|
|
382
|
+
psgAddr += currentXGM[0x300 + (track * 2) + 1] << 16;
|
|
383
|
+
}
|
|
384
|
+
else
|
|
385
|
+
{
|
|
386
|
+
fmAddr = 0;
|
|
387
|
+
psgAddr = 0;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
// compute final FM and PSG streams address
|
|
391
|
+
fmAddr += offset + sampleLen;
|
|
392
|
+
psgAddr += offset + sampleLen + fmLen;
|
|
393
|
+
|
|
394
|
+
// request Z80 bus access
|
|
395
|
+
const bool busTaken = getAccess(XGM2_ACCESS_CMD_MSK);
|
|
396
|
+
|
|
397
|
+
// point to Z80 FM stream address parameter
|
|
398
|
+
vu8* pb = (vu8*) XGM2_PLAY_ARG_FM_ADDR;
|
|
399
|
+
// set FM stream address (aligned on 256 bytes)
|
|
400
|
+
*pb++ = fmAddr >> 8;
|
|
401
|
+
*pb++ = fmAddr >> 16;
|
|
402
|
+
// set PSG stream address (aligned on 256 bytes)
|
|
403
|
+
*pb++ = psgAddr >> 8;
|
|
404
|
+
*pb++ = psgAddr >> 16;
|
|
405
|
+
|
|
406
|
+
// point to Z80 command
|
|
407
|
+
pb = (vu8*) Z80_DRV_COMMAND;
|
|
408
|
+
// set play XGM2 command (and clear pause/resume if any)
|
|
409
|
+
*pb = (*pb & ~(XGM2_COM_RESUME_PLAY | XGM2_COM_PAUSE_PLAY)) | XGM2_COM_START_PLAY;
|
|
410
|
+
|
|
411
|
+
releaseAccess(busTaken);
|
|
412
|
+
|
|
413
|
+
// need to restore FM and PSG volumes
|
|
414
|
+
if (restoreVolume)
|
|
415
|
+
{
|
|
416
|
+
setFMVolume(fmVol);
|
|
417
|
+
setPSGVolume(psgVol);
|
|
418
|
+
restoreVolume = FALSE;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
void XGM2_play(const u8* song)
|
|
423
|
+
{
|
|
424
|
+
XGM2_load(song);
|
|
425
|
+
XGM2_playTrack(0);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
void XGM2_play_FAR(const u8* song, const u32 len)
|
|
429
|
+
{
|
|
430
|
+
XGM2_load_FAR(song, len);
|
|
431
|
+
XGM2_playTrack(0);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
NO_INLINE void XGM2_stop(void)
|
|
435
|
+
{
|
|
436
|
+
// load the appropriate driver if not already done
|
|
437
|
+
XGM2_loadDriver(TRUE);
|
|
438
|
+
|
|
439
|
+
// request Z80 bus access
|
|
440
|
+
const bool busTaken = getAccess(XGM2_ACCESS_CMD_MSK);
|
|
441
|
+
|
|
442
|
+
// point to Z80 FM stream address parameter
|
|
443
|
+
vu8* pb = (vu8*) XGM2_PLAY_ARG_FM_ADDR;
|
|
444
|
+
// set FM stream address to NULL
|
|
445
|
+
*pb++ = 0;
|
|
446
|
+
*pb++ = 0;
|
|
447
|
+
// set PSG stream address to NULL
|
|
448
|
+
*pb++ = 0;
|
|
449
|
+
*pb++ = 0;
|
|
450
|
+
|
|
451
|
+
// point to Z80 command
|
|
452
|
+
pb = (vu8*) Z80_DRV_COMMAND;
|
|
453
|
+
// set play XGM2 command (and clear pause/resume if any)
|
|
454
|
+
*pb = (*pb & ~(XGM2_COM_RESUME_PLAY | XGM2_COM_PAUSE_PLAY)) | XGM2_COM_START_PLAY;
|
|
455
|
+
|
|
456
|
+
releaseAccess(busTaken);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
NO_INLINE void XGM2_pause(void)
|
|
460
|
+
{
|
|
461
|
+
// load the appropriate driver if not already done
|
|
462
|
+
XGM2_loadDriver(TRUE);
|
|
463
|
+
|
|
464
|
+
// request Z80 bus access
|
|
465
|
+
const bool busTaken = getAccess(XGM2_ACCESS_CMD_MSK);
|
|
466
|
+
|
|
467
|
+
// point to Z80 status
|
|
468
|
+
vu8* pb = (vu8*) Z80_DRV_STATUS;
|
|
469
|
+
// playing ?
|
|
470
|
+
if (*pb & XGM2_STATUS_PLAYING)
|
|
471
|
+
{
|
|
472
|
+
// point to Z80 command
|
|
473
|
+
pb = (vu8*) Z80_DRV_COMMAND;
|
|
474
|
+
// set pause XGM2 command (and clear resume/play if any)
|
|
475
|
+
*pb = (*pb & ~(XGM2_COM_RESUME_PLAY | XGM2_COM_START_PLAY)) | XGM2_COM_PAUSE_PLAY;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
releaseAccess(busTaken);
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
NO_INLINE void XGM2_resume(void)
|
|
482
|
+
{
|
|
483
|
+
// load the appropriate driver if not already done
|
|
484
|
+
XGM2_loadDriver(TRUE);
|
|
485
|
+
|
|
486
|
+
// request Z80 bus access
|
|
487
|
+
const bool busTaken = getAccess(XGM2_ACCESS_CMD_MSK);
|
|
488
|
+
|
|
489
|
+
// point to Z80 status
|
|
490
|
+
vu8* pb = (vu8*) Z80_DRV_STATUS;
|
|
491
|
+
// not playing ?
|
|
492
|
+
if (!(*pb & XGM2_STATUS_PLAYING))
|
|
493
|
+
{
|
|
494
|
+
// point to Z80 FM stream start address
|
|
495
|
+
pb = (vu8*) XGM2_FM_START;
|
|
496
|
+
// FM stream start address not NULL ?
|
|
497
|
+
if (pb[0] | pb[1])
|
|
498
|
+
{
|
|
499
|
+
// point to Z80 command
|
|
500
|
+
pb = (vu8*) Z80_DRV_COMMAND;
|
|
501
|
+
// set command only if we don't have a play command pending
|
|
502
|
+
if (!(*pb & XGM2_COM_START_PLAY))
|
|
503
|
+
// set resume XGM2 command (and clear pause if any)
|
|
504
|
+
*pb = (*pb & ~XGM2_COM_PAUSE_PLAY) | XGM2_COM_RESUME_PLAY;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
releaseAccess(busTaken);
|
|
509
|
+
|
|
510
|
+
// need to restore FM and PSG volumes
|
|
511
|
+
if (restoreVolume)
|
|
512
|
+
{
|
|
513
|
+
setFMVolume(fmVol);
|
|
514
|
+
setPSGVolume(psgVol);
|
|
515
|
+
restoreVolume = FALSE;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
u8 XGM2_isPlayingPCM(const u16 channel_mask)
|
|
520
|
+
{
|
|
521
|
+
// load the appropriate driver if not already done
|
|
522
|
+
XGM2_loadDriver(TRUE);
|
|
523
|
+
|
|
524
|
+
// point to Z80 status
|
|
525
|
+
vu8* pb = (vu8*) Z80_DRV_STATUS;
|
|
526
|
+
|
|
527
|
+
SYS_disableInts();
|
|
528
|
+
// request Z80 BUS
|
|
529
|
+
bool busTaken = Z80_getAndRequestBus(TRUE);
|
|
530
|
+
|
|
531
|
+
// play status
|
|
532
|
+
u8 ret = *pb & channel_mask;
|
|
533
|
+
|
|
534
|
+
releaseAccess(busTaken);
|
|
535
|
+
|
|
536
|
+
return ret;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
static s16 getPCMChannel(const u8 priority)
|
|
540
|
+
{
|
|
541
|
+
SYS_disableInts();
|
|
542
|
+
// request Z80 BUS
|
|
543
|
+
bool busTaken = Z80_getAndRequestBus(TRUE);
|
|
544
|
+
|
|
545
|
+
// play status
|
|
546
|
+
vu8* pb = (vu8*) Z80_DRV_STATUS;
|
|
547
|
+
u8 status = *pb & XGM2_STATUS_PLAYING_PCM_ALL;
|
|
548
|
+
u8 prios[3];
|
|
549
|
+
|
|
550
|
+
// play priorities
|
|
551
|
+
pb = (vu8*) (XGM2_PCM_PRIO_EXT_INT + (XGM2_PCM_PARAM_LEN * 0));
|
|
552
|
+
prios[0] = *pb & 0xF;
|
|
553
|
+
pb = (vu8*) (XGM2_PCM_PRIO_EXT_INT + (XGM2_PCM_PARAM_LEN * 1));
|
|
554
|
+
prios[1] = *pb & 0xF;
|
|
555
|
+
pb = (vu8*) (XGM2_PCM_PRIO_EXT_INT + (XGM2_PCM_PARAM_LEN * 2));
|
|
556
|
+
prios[2] = *pb & 0xF;
|
|
557
|
+
|
|
558
|
+
releaseAccess(busTaken);
|
|
559
|
+
|
|
560
|
+
// try channel 3 first if free (lower CPU usage)
|
|
561
|
+
if (!(status & XGM2_STATUS_PLAYING_PCM3)) return SOUND_PCM_CH3;
|
|
562
|
+
// the try channel 2 as channel 1 can be used for music
|
|
563
|
+
if (!(status & XGM2_STATUS_PLAYING_PCM2)) return SOUND_PCM_CH2;
|
|
564
|
+
|
|
565
|
+
// then compare channel 3 priority
|
|
566
|
+
if (prios[2] <= priority) return SOUND_PCM_CH3;
|
|
567
|
+
// then compare channel 2 priority
|
|
568
|
+
if (prios[1] <= priority) return SOUND_PCM_CH2;
|
|
569
|
+
|
|
570
|
+
// try channel 1 in last (can be used for music)
|
|
571
|
+
if (!(status & XGM2_STATUS_PLAYING_PCM1)) return SOUND_PCM_CH1;
|
|
572
|
+
if (prios[0] <= priority) return SOUND_PCM_CH1;
|
|
573
|
+
|
|
574
|
+
// can't play
|
|
575
|
+
return -1;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
NO_INLINE bool XGM2_playPCMEx(const u8 *sample, const u32 len, const SoundPCMChannel channel, const u8 priority, const bool halfRate, const bool loop)
|
|
579
|
+
{
|
|
580
|
+
|
|
581
|
+
// load the appropriate driver if not already done
|
|
582
|
+
XGM2_loadDriver(TRUE);
|
|
583
|
+
|
|
584
|
+
// get channel
|
|
585
|
+
const s16 ch = (channel == SOUND_PCM_CH_AUTO)?getPCMChannel(priority):channel;
|
|
586
|
+
// no available channel ? --> exit
|
|
587
|
+
if (ch == -1) return FALSE;
|
|
588
|
+
|
|
589
|
+
// request Z80 bus access
|
|
590
|
+
const bool busTaken = getAccess(XGM2_ACCESS_CMD_MSK | XGM2_ACCESS_PCM_ARG_MSK);
|
|
591
|
+
vu8* pb;
|
|
592
|
+
|
|
593
|
+
// manual channel selection ? --> test if available
|
|
594
|
+
if (channel != SOUND_PCM_CH_AUTO)
|
|
595
|
+
{
|
|
596
|
+
// get channel play status
|
|
597
|
+
pb = (vu8*) Z80_DRV_STATUS;
|
|
598
|
+
u8 playing = *pb & (1 << ch);
|
|
599
|
+
// get channel priority
|
|
600
|
+
pb = (vu8*) (XGM2_PCM_PRIO_EXT_INT + (XGM2_PCM_PARAM_LEN * ch));
|
|
601
|
+
u8 prio = *pb & 0xF;
|
|
602
|
+
|
|
603
|
+
// channel playing and prio > new prio ? --> cannot play on this channel
|
|
604
|
+
if (playing && (prio > priority))
|
|
605
|
+
{
|
|
606
|
+
releaseAccess(busTaken);
|
|
607
|
+
return FALSE;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
// get slot address in sample id table (use the 3 last slots which aren't used by music)
|
|
612
|
+
pb = (vu8*) (XGM2_PCM_ADDR_ARG_BASE + (ch * 4));
|
|
613
|
+
// write sample addr
|
|
614
|
+
*pb++ = ((u32) sample) >> 8;
|
|
615
|
+
*pb++ = ((u32) sample) >> 16;
|
|
616
|
+
// write sample len
|
|
617
|
+
if (halfRate)
|
|
618
|
+
{
|
|
619
|
+
// len x2 for half rate (as we play both sample twice)
|
|
620
|
+
*pb++ = len >> 5;
|
|
621
|
+
*pb = len >> 13;
|
|
622
|
+
}
|
|
623
|
+
else
|
|
624
|
+
{
|
|
625
|
+
*pb++ = len >> 6;
|
|
626
|
+
*pb = len >> 14;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
// point to Z80 PCM parameter
|
|
630
|
+
pb = (vu8*) (XGM2_PCM_ARG_BASE + ch);
|
|
631
|
+
// b0-b3 = priority (0 to 15); b4 = 1; b6 = half speed; b7 = loop
|
|
632
|
+
*pb = (priority & 0xF) | (halfRate?0x40:0) | (loop?0x80:0) | 0x10;
|
|
633
|
+
|
|
634
|
+
// point to Z80 command
|
|
635
|
+
pb = (vu8*) Z80_DRV_COMMAND;
|
|
636
|
+
// set play PCM channel command
|
|
637
|
+
*pb |= (XGM2_COM_PLAY_PCM_BASE << ch);
|
|
638
|
+
|
|
639
|
+
releaseAccess(busTaken);
|
|
640
|
+
|
|
641
|
+
return TRUE;
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
bool XGM2_playPCM(const u8 *sample, const u32 len, const SoundPCMChannel channel)
|
|
645
|
+
{
|
|
646
|
+
return XGM2_playPCMEx(sample, len, channel, 6, FALSE, FALSE);
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
void XGM2_stopPCM(const SoundPCMChannel channel)
|
|
650
|
+
{
|
|
651
|
+
// use play NULL PCM as stop PCM commad
|
|
652
|
+
XGM2_playPCMEx(NULL, 0, channel, 15, FALSE, FALSE);
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
static void doFade(const u16 fmVolStart, const u16 fmVolEnd, const u16 psgVolStart, const u16 psgVolEnd, const u16 frame, const FadeEndProcess fep)
|
|
657
|
+
{
|
|
658
|
+
if (frame == 0) return;
|
|
659
|
+
|
|
660
|
+
f16 fmVolStartF = FIX16(fmVolStart);
|
|
661
|
+
f16 psgVolStartF = FIX16(psgVolStart);
|
|
662
|
+
f16 fmVolEndF = FIX16(fmVolEnd);
|
|
663
|
+
f16 psgVolEndF = FIX16(psgVolEnd);
|
|
664
|
+
// we use "/ 2" as we alternate PSG and FM volume update on fading
|
|
665
|
+
f16 frameF = FIX16(frame) / 2;
|
|
666
|
+
|
|
667
|
+
// set fade process variables
|
|
668
|
+
fadeFMVol = fmVolStartF;
|
|
669
|
+
fadePSGVol = psgVolStartF;
|
|
670
|
+
fadeFMVolStep = F16_div(fmVolEndF - fmVolStartF, frameF);
|
|
671
|
+
fadePSGVolStep = F16_div(psgVolEndF - psgVolStartF, frameF);
|
|
672
|
+
fadeCount = frame;
|
|
673
|
+
fadeEndProcess = fep;
|
|
674
|
+
|
|
675
|
+
// init fade
|
|
676
|
+
setFMVolume(F16_toInt(fadeFMVol));
|
|
677
|
+
setPSGVolume(F16_toInt(fadePSGVol));
|
|
678
|
+
|
|
679
|
+
// add task for vblank process
|
|
680
|
+
Z80_setVIntCallback(&vintFadeProcess);
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
|
|
684
|
+
bool XGM2_isProcessingFade(void)
|
|
685
|
+
{
|
|
686
|
+
return (Z80_getVIntCallback() != NULL)?TRUE:FALSE;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
void XGM2_fadeIn(const u16 frame)
|
|
690
|
+
{
|
|
691
|
+
doFade(0, fmVol, 0, psgVol, frame, DO_NOTHING);
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
void XGM2_fadeOut(const u16 frame)
|
|
695
|
+
{
|
|
696
|
+
doFade(fmVol, 0, psgVol, 0, frame, DO_NOTHING);
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
void XGM2_fadeOutAndStop(const u16 frame)
|
|
700
|
+
{
|
|
701
|
+
doFade(fmVol, 0, psgVol, 0, frame, DO_STOP);
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
void XGM2_fadeOutAndPause(const u16 frame)
|
|
705
|
+
{
|
|
706
|
+
doFade(fmVol, 0, psgVol, 0, frame, DO_PAUSE);
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
void XGM2_fadeTo(const u16 toFMVolume, const u16 toPSGVolume, const u16 frame)
|
|
710
|
+
{
|
|
711
|
+
doFade(fmVol, toFMVolume, psgVol, toPSGVolume, frame, DO_NOTHING);
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
|
|
715
|
+
static NO_INLINE void setLoopNumber(const s8 value)
|
|
716
|
+
{
|
|
717
|
+
// point to Z80 play loop parameter
|
|
718
|
+
vu8* pb = (vu8*) XGM2_PLAY_ARG_LOOP;
|
|
719
|
+
|
|
720
|
+
// request Z80 bus access
|
|
721
|
+
const bool busTaken = getAccess(XGM2_ACCESS_CMD_MSK);
|
|
722
|
+
|
|
723
|
+
// set loop argument (0 = no loop, 0xFF = infinite)
|
|
724
|
+
*pb = value;
|
|
725
|
+
|
|
726
|
+
releaseAccess(busTaken);
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
void XGM2_setLoopNumber(s8 value)
|
|
730
|
+
{
|
|
731
|
+
if (Z80_getLoadedDriver() != Z80_DRIVER_XGM2) return;
|
|
732
|
+
|
|
733
|
+
setLoopNumber(value);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
u16 XGM2_getMusicTempo(void)
|
|
737
|
+
{
|
|
738
|
+
return xgm2Tempo;
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
static NO_INLINE void setMusicTempo(const u16 value)
|
|
742
|
+
{
|
|
743
|
+
xgm2Tempo = value;
|
|
744
|
+
// compute tempo
|
|
745
|
+
u16 adjTempo = divu(value << 8, IS_PAL_SYSTEM?50:60);
|
|
746
|
+
// point to Z80 tempo parameter
|
|
747
|
+
vu8* pb = (vu8*) XGM2_TEMPO_ARG_INC_FRAC;
|
|
748
|
+
|
|
749
|
+
// request Z80 bus access
|
|
750
|
+
const bool busTaken = getAccess(XGM2_ACCESS_READ_TEMPO_MSK);
|
|
751
|
+
|
|
752
|
+
// set tempo fractional part first
|
|
753
|
+
*pb++ = adjTempo & 0xFF;
|
|
754
|
+
// set tempo integer part first
|
|
755
|
+
*pb = adjTempo >> 8;
|
|
756
|
+
|
|
757
|
+
releaseAccess(busTaken);
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
void XGM2_setMusicTempo(const u16 value)
|
|
761
|
+
{
|
|
762
|
+
if (Z80_getLoadedDriver() != Z80_DRIVER_XGM2) return;
|
|
763
|
+
|
|
764
|
+
setMusicTempo(value);
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
NO_INLINE u32 XGM2_getElapsed(void)
|
|
768
|
+
{
|
|
769
|
+
if (Z80_getLoadedDriver() != Z80_DRIVER_XGM2) return 0;
|
|
770
|
+
|
|
771
|
+
u8 values[4];
|
|
772
|
+
u8 *dst = values;
|
|
773
|
+
|
|
774
|
+
// point to ELAPSED_FRAME value
|
|
775
|
+
vu8* pb = (vu8*) XGM2_ELAPSED_FRAME;
|
|
776
|
+
|
|
777
|
+
// request Z80 bus access
|
|
778
|
+
const bool busTaken = getAccess(XGM2_ACCESS_WRITE_ELAPSED_MSK);
|
|
779
|
+
|
|
780
|
+
// copy quickly elapsed time
|
|
781
|
+
*dst++ = *pb++;
|
|
782
|
+
*dst++ = *pb++;
|
|
783
|
+
*dst = *pb;
|
|
784
|
+
|
|
785
|
+
releaseAccess(busTaken);
|
|
786
|
+
|
|
787
|
+
u32 result = (values[0] << 0) | (values[1] << 8) | ((u32) values[2] << 16);
|
|
788
|
+
|
|
789
|
+
// fix possible 24 bit negative value (parsing first extra frame)
|
|
790
|
+
if (result >= 0xFFFFF0) return 0;
|
|
791
|
+
|
|
792
|
+
return result;
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
|
|
796
|
+
static NO_INLINE void setFMVolume(u16 value)
|
|
797
|
+
{
|
|
798
|
+
// request Z80 bus access
|
|
799
|
+
const bool busTaken = getAccess(XGM2_ACCESS_CMD_MSK);
|
|
800
|
+
|
|
801
|
+
// point to Z80 FM volume parameter
|
|
802
|
+
vu8* pb = (vu8*) XGM2_FM_ARG_VOLUME;
|
|
803
|
+
// set FM volume (attenuation)
|
|
804
|
+
*pb = (value >= 100)?0:fmVolTable[value];
|
|
805
|
+
|
|
806
|
+
// point to Z80 command
|
|
807
|
+
pb = (vu8*) Z80_DRV_COMMAND;
|
|
808
|
+
// set FM volume XGM2 command
|
|
809
|
+
*pb |= XGM2_COM_SET_VOLUME_FM;
|
|
810
|
+
|
|
811
|
+
releaseAccess(busTaken);
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
static NO_INLINE void setPSGVolume(u16 value)
|
|
815
|
+
{
|
|
816
|
+
// request Z80 bus access
|
|
817
|
+
const bool busTaken = getAccess(XGM2_ACCESS_CMD_MSK);
|
|
818
|
+
|
|
819
|
+
// point to Z80 FM volume parameter
|
|
820
|
+
vu8* pb = (vu8*) XGM2_PSG_ARG_VOLUME;
|
|
821
|
+
// set PSG volume (attenuation)
|
|
822
|
+
*pb = (value >= 100)?0:psgVolTable[value];
|
|
823
|
+
|
|
824
|
+
// point to Z80 command
|
|
825
|
+
pb = (vu8*) Z80_DRV_COMMAND;
|
|
826
|
+
// set PSG volume XGM2 command
|
|
827
|
+
*pb |= XGM2_COM_SET_VOLUME_PSG;
|
|
828
|
+
|
|
829
|
+
releaseAccess(busTaken);
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
void XGM2_setFMVolume(const u16 value)
|
|
833
|
+
{
|
|
834
|
+
// load the appropriate driver if not already done
|
|
835
|
+
XGM2_loadDriver(TRUE);
|
|
836
|
+
|
|
837
|
+
setFMVolume(value);
|
|
838
|
+
// store it
|
|
839
|
+
fmVol = value;
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
void XGM2_setPSGVolume(const u16 value)
|
|
843
|
+
{
|
|
844
|
+
// load the appropriate driver if not already done
|
|
845
|
+
XGM2_loadDriver(TRUE);
|
|
846
|
+
|
|
847
|
+
setPSGVolume(value);
|
|
848
|
+
// store it
|
|
849
|
+
psgVol = value;
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
|
|
853
|
+
bool XGM2_isPAL(const u8 *xgm2)
|
|
854
|
+
{
|
|
855
|
+
return (xgm2[1] & XGM2_PAL_FLAG)?TRUE:FALSE;
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
|
|
859
|
+
NO_INLINE u16 XGM2_getCPULoad(const bool mean)
|
|
860
|
+
{
|
|
861
|
+
if (Z80_getLoadedDriver() != Z80_DRIVER_XGM2) return 0;
|
|
862
|
+
|
|
863
|
+
// point to Z80 'idle time' value (in frame)
|
|
864
|
+
vu8* pb = (vu8*) XGM2_IDLE_TIME;
|
|
865
|
+
|
|
866
|
+
SYS_disableInts();
|
|
867
|
+
bool busTaken = Z80_getAndRequestBus(TRUE);
|
|
868
|
+
|
|
869
|
+
// get idle
|
|
870
|
+
u16 idle = *pb;
|
|
871
|
+
|
|
872
|
+
releaseAccess(busTaken);
|
|
873
|
+
|
|
874
|
+
if (mean)
|
|
875
|
+
{
|
|
876
|
+
// compute mean
|
|
877
|
+
u16 ind = xgm2IdleTabInd;
|
|
878
|
+
|
|
879
|
+
xgm2IdleMean -= xgm2IdleTab[ind];
|
|
880
|
+
xgm2IdleMean += idle;
|
|
881
|
+
xgm2IdleTab[ind] = idle;
|
|
882
|
+
|
|
883
|
+
xgm2IdleTabInd = (ind + 1) & 7;
|
|
884
|
+
|
|
885
|
+
// use mean value
|
|
886
|
+
idle = xgm2IdleMean >> 3;
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
const u16 samplesPerFrame = 13300 / (IS_PAL_SYSTEM?50:60);
|
|
890
|
+
return 100 - (mulu(idle, 100) / samplesPerFrame);
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
NO_INLINE u16 XGM2_getDMAWaitTime(const bool mean)
|
|
894
|
+
{
|
|
895
|
+
if (Z80_getLoadedDriver() != Z80_DRIVER_XGM2) return 0;
|
|
896
|
+
|
|
897
|
+
// point to Z80 'DMA wait time' value (in frame)
|
|
898
|
+
vu8* pb = (vu8*) XGM2_DMA_WAIT_TIME;
|
|
899
|
+
|
|
900
|
+
SYS_disableInts();
|
|
901
|
+
bool busTaken = Z80_getAndRequestBus(TRUE);
|
|
902
|
+
|
|
903
|
+
// get dma wait
|
|
904
|
+
u16 dmaWait = *pb;
|
|
905
|
+
|
|
906
|
+
releaseAccess(busTaken);
|
|
907
|
+
|
|
908
|
+
if (mean)
|
|
909
|
+
{
|
|
910
|
+
// compute mean
|
|
911
|
+
u16 ind = xgm2WaitTabInd;
|
|
912
|
+
|
|
913
|
+
xgm2WaitMean -= xgm2WaitTab[ind];
|
|
914
|
+
xgm2WaitMean += dmaWait;
|
|
915
|
+
xgm2WaitTab[ind] = dmaWait;
|
|
916
|
+
|
|
917
|
+
xgm2WaitTabInd = (ind + 1) & 7;
|
|
918
|
+
|
|
919
|
+
// use mean value
|
|
920
|
+
dmaWait = xgm2WaitMean >> 3;
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
const u16 samplesPerFrame = 13300 / (IS_PAL_SYSTEM?50:60);
|
|
924
|
+
return mulu(dmaWait, 100) / samplesPerFrame;
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
|
|
928
|
+
NO_INLINE u16 XGM2_getDebugFrameCounter(void)
|
|
929
|
+
{
|
|
930
|
+
if (Z80_getLoadedDriver() != Z80_DRIVER_XGM2) return 0;
|
|
931
|
+
|
|
932
|
+
vu8* pb = (vu8*) XGM2_FRAME_COUNTER;
|
|
933
|
+
|
|
934
|
+
SYS_disableInts();
|
|
935
|
+
bool busTaken = Z80_getAndRequestBus(TRUE);
|
|
936
|
+
|
|
937
|
+
u16 frameCounter = pb[0] | (pb[1] << 8);
|
|
938
|
+
|
|
939
|
+
releaseAccess(busTaken);
|
|
940
|
+
|
|
941
|
+
return frameCounter;
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
NO_INLINE u16 XGM2_getDebugPCMRate(void)
|
|
945
|
+
{
|
|
946
|
+
if (Z80_getLoadedDriver() != Z80_DRIVER_XGM2) return 0;
|
|
947
|
+
|
|
948
|
+
vu8* pb = (vu8*) XGM2_PLAYED_SAMPLES;
|
|
949
|
+
|
|
950
|
+
SYS_disableInts();
|
|
951
|
+
bool busTaken = Z80_getAndRequestBus(TRUE);
|
|
952
|
+
|
|
953
|
+
// the value give the number of played sample per frame
|
|
954
|
+
u8 playedSamplesPerFrame = *pb;
|
|
955
|
+
|
|
956
|
+
releaseAccess(busTaken);
|
|
957
|
+
|
|
958
|
+
// compute playback rate
|
|
959
|
+
return mulu(playedSamplesPerFrame, IS_PAL_SYSTEM?50:60);
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
NO_INLINE u8 XGM2_getDebugMissedFrames(void)
|
|
963
|
+
{
|
|
964
|
+
if (Z80_getLoadedDriver() != Z80_DRIVER_XGM2) return 0;
|
|
965
|
+
|
|
966
|
+
vu8* pb = (vu8*) XGM2_MISSED_FRAME;
|
|
967
|
+
|
|
968
|
+
SYS_disableInts();
|
|
969
|
+
// request Z80 BUS
|
|
970
|
+
bool busTaken = Z80_getAndRequestBus(TRUE);
|
|
971
|
+
|
|
972
|
+
// get missed frames (8 bit value, not really important)
|
|
973
|
+
u8 result = *pb;
|
|
974
|
+
|
|
975
|
+
releaseAccess(busTaken);
|
|
976
|
+
|
|
977
|
+
return result;
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
NO_INLINE u8 XGM2_getDebugProcessDuration(const u16 ind)
|
|
981
|
+
{
|
|
982
|
+
if (Z80_getLoadedDriver() != Z80_DRIVER_XGM2) return 0;
|
|
983
|
+
|
|
984
|
+
vu8* pb = (vu8*) (XGM2_PROCESS_TIME + ind);
|
|
985
|
+
|
|
986
|
+
SYS_disableInts();
|
|
987
|
+
bool busTaken = Z80_getAndRequestBus(TRUE);
|
|
988
|
+
|
|
989
|
+
u8 processDuration = *pb;
|
|
990
|
+
|
|
991
|
+
releaseAccess(busTaken);
|
|
992
|
+
|
|
993
|
+
return processDuration;
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
|
|
997
|
+
static bool getAccess(const u8 flag)
|
|
998
|
+
{
|
|
999
|
+
// point to Z80 access state
|
|
1000
|
+
vu8* pb = (vu8*) XGM2_ACCESS;
|
|
1001
|
+
|
|
1002
|
+
SYS_disableInts();
|
|
1003
|
+
bool busTaken = Z80_getAndRequestBus(TRUE);
|
|
1004
|
+
|
|
1005
|
+
u8 access = *pb;
|
|
1006
|
+
|
|
1007
|
+
// wait until access is granted
|
|
1008
|
+
while(access & flag)
|
|
1009
|
+
{
|
|
1010
|
+
Z80_releaseBus();
|
|
1011
|
+
SYS_enableInts();
|
|
1012
|
+
|
|
1013
|
+
// wait a bit
|
|
1014
|
+
waitSubTick(5);
|
|
1015
|
+
|
|
1016
|
+
SYS_disableInts();
|
|
1017
|
+
Z80_requestBus(TRUE);
|
|
1018
|
+
|
|
1019
|
+
access = *pb;
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
return busTaken;
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
static void releaseAccess(const bool busTaken)
|
|
1026
|
+
{
|
|
1027
|
+
if (!busTaken) Z80_releaseBus();
|
|
1028
|
+
SYS_enableInts();
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
static void initLoadCalculation(void)
|
|
1032
|
+
{
|
|
1033
|
+
memset(xgm2IdleTab, 0, 8);
|
|
1034
|
+
memset(xgm2WaitTab, 0, 8);
|
|
1035
|
+
|
|
1036
|
+
xgm2IdleTabInd = 0;
|
|
1037
|
+
xgm2WaitTabInd = 0;
|
|
1038
|
+
xgm2IdleMean = 0;
|
|
1039
|
+
xgm2WaitMean = 0;
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
static void vintFadeProcess(void)
|
|
1043
|
+
{
|
|
1044
|
+
fadeCount--;
|
|
1045
|
+
|
|
1046
|
+
// we do that to lower a bit Z80 CPU processing for volume fade effect
|
|
1047
|
+
if (fadeCount & 1)
|
|
1048
|
+
{
|
|
1049
|
+
fadeFMVol += fadeFMVolStep;
|
|
1050
|
+
setFMVolume(F16_toInt(fadeFMVol));
|
|
1051
|
+
}
|
|
1052
|
+
else
|
|
1053
|
+
{
|
|
1054
|
+
fadePSGVol += fadePSGVolStep;
|
|
1055
|
+
setPSGVolume(F16_toInt(fadePSGVol));
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
// mark volume need to be restored
|
|
1059
|
+
restoreVolume = TRUE;
|
|
1060
|
+
|
|
1061
|
+
// end of fade ?
|
|
1062
|
+
if (fadeCount == 0)
|
|
1063
|
+
{
|
|
1064
|
+
// end process to do
|
|
1065
|
+
switch(fadeEndProcess)
|
|
1066
|
+
{
|
|
1067
|
+
case DO_STOP:
|
|
1068
|
+
XGM2_stop();
|
|
1069
|
+
break;
|
|
1070
|
+
|
|
1071
|
+
case DO_PAUSE:
|
|
1072
|
+
XGM2_pause();
|
|
1073
|
+
break;
|
|
1074
|
+
|
|
1075
|
+
default:
|
|
1076
|
+
case DO_NOTHING:
|
|
1077
|
+
break;
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
// done
|
|
1081
|
+
Z80_setVIntCallback(NULL);
|
|
1082
|
+
}
|
|
1083
|
+
}
|