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,993 @@
|
|
|
1
|
+
; eXtended Genesis Music v2.0 (XGM) Z80 driver - Stephane Dallongeville @2023
|
|
2
|
+
;
|
|
3
|
+
; XGM driver is a music driver developed specifically for the Sega Megadrive/Genesis system.
|
|
4
|
+
; The XGM v2 driver has be developed to replace the previous XGM v1.0 driver, mainly to reduce music data space, improve PCM latency and
|
|
5
|
+
; add important missing features as envelop support and (if possible) FM/PSG SFX.
|
|
6
|
+
;
|
|
7
|
+
; As the previous XGM driver, it runs at 100% on the Z80 CPU and left the 68000 free for others tasks.
|
|
8
|
+
; It has been designed to keep CPU decoding resource reasonnable and provide small data size (about half the size of original XGM and about 1/3 of VGM file).
|
|
9
|
+
; It supports both FM and PSG chip and allow up to 3 PCM channels (8 bits signed) with adjustable playback rate up to ~13.3 Khz.
|
|
10
|
+
; PCM samples does not have any size limitation, the only restriction is that they should have their address and size aligned to 256 bytes.
|
|
11
|
+
; These 3 PCM channels are obtained by software mixing in the FM DAC in replacement of the 6th FM channel so at best you can have 5FM + 3PCM + 4PSG = 12 channels.
|
|
12
|
+
;
|
|
13
|
+
; The PCM playback rate can be modified from ~2Khz to ~13.3Khz but it's recommended to keep the original value (13.3 Khz) as all PCM channels share the same playback rate.
|
|
14
|
+
; Example of possible playback playback rate:
|
|
15
|
+
; - 13.3 Khz
|
|
16
|
+
; - 10.65 Khz
|
|
17
|
+
; - 8.87 KHz
|
|
18
|
+
; - 7.6 KHz
|
|
19
|
+
; - 6.65 KHz
|
|
20
|
+
; - 5.9 Khz
|
|
21
|
+
; - ...
|
|
22
|
+
;
|
|
23
|
+
; Note that it's possible to enable half speed PCM playback:
|
|
24
|
+
; For instance if PCM playback rate is set to 13.3 Khz, then you can play PCM at full rate (13.3 Khz) or half rate (13.3 / 2 = 6.65 Khz)
|
|
25
|
+
; This feature allows to limit ROM usage for samples which don't need high playback rate.
|
|
26
|
+
; PCM can be 4bit ADPCM compressed or 8bit RAW, also they can be looped from a loop point (64 bytes aligned).
|
|
27
|
+
;
|
|
28
|
+
; The driver supports playing SFX through PCM channels, note that normally channel 0 is reserved for music so prefer channel 1 or channel 2 for SFX.
|
|
29
|
+
; Ideally the driver would also support FM and PSG SFX.
|
|
30
|
+
;
|
|
31
|
+
; Allowing a maximum of 13.3Khz PCM playback mean we have ~269 cycles per sample output which consist of:
|
|
32
|
+
; - handle PCM sync
|
|
33
|
+
; - read 4 samples from the rom and mix them into the write ring buffer
|
|
34
|
+
; - read 1 sample from read ring buffer and output it to the DAC
|
|
35
|
+
; - handle loop
|
|
36
|
+
; - unpack XGM data / parse and execute XGM commands / handle extern commands
|
|
37
|
+
;
|
|
38
|
+
; Z80 V-interrupt stays active for about ~229 cycles
|
|
39
|
+
;
|
|
40
|
+
; PCM output already cost a huge 79/87 cycles (100/108 cycles for fast functions) leaving only about 190/182 cycles (169/161 when function used) for others tasks :'(
|
|
41
|
+
; Also FM write can take a lot of time as YM2612 requires up to 53 Z80 cycles to acknowledge data register write.
|
|
42
|
+
; Hopefully address register write only requires 6 Z80 cycles and DAC / Timer reset writes are fast too:
|
|
43
|
+
; 17 YM cycles (8 Z80 cycles) between writing the address and data --> measured: 6 Z80 cycles seems to be enough
|
|
44
|
+
; no wait between writes to addresses $21-$2F except $28
|
|
45
|
+
; ~112 YM cycles (53 Z80 cycles) between writes to $28
|
|
46
|
+
; 83 YM cycles (39 Z80 cycles) between writes to addresses $30-$9E
|
|
47
|
+
; 47 YM cycles (22 Z80 cycles) between writes to addresses $A0-$B6
|
|
48
|
+
;
|
|
49
|
+
; BASE YM frequency:
|
|
50
|
+
; NTSC: 7670453/144 = 53267 Hz
|
|
51
|
+
; PAL: 7600489/144 = 52781 Hz
|
|
52
|
+
;
|
|
53
|
+
; Timer A is used for sample playback: PCM clock = base_FM_clock / (1024 - TimerA)
|
|
54
|
+
; By defaut we set Timer A = 1020 ($3FC)
|
|
55
|
+
; - NTSC: 53267 / (1024-1020) = 53267 / 4 = ~13317 Hz ~ 222 samples / frame
|
|
56
|
+
; - PAL: 52781 / (1024-1020) = 52781 / 4 = ~13195 Hz ~ 264 samples / frame
|
|
57
|
+
; So we assume it to be ~13300 Hz (pitch get a bit lower on PAL system but we don't care)
|
|
58
|
+
; Using 1021 for timer A would allow 17755 Hz PCM --> too high for driver playback so max is 13300 Hz.
|
|
59
|
+
; - PCM sample rate can be modified (by changing timer A setting) from ~2Khz to ~13.3Khz:
|
|
60
|
+
; 1018 = ~10650 Hz; 1017 = ~8870 Hz; 1016 = ~7600 Hz; 1015 = ~6650 Hz; 1014 = ~5900 Hz; 1013 = ~5320 Hz
|
|
61
|
+
; - allow half speed playback for PCM: 13300 Hz / 6650 Hz (copy twice on mix buffer for ~7Khz)
|
|
62
|
+
;
|
|
63
|
+
;
|
|
64
|
+
; register usage
|
|
65
|
+
; --------------
|
|
66
|
+
; HL = sample source (in ROM)
|
|
67
|
+
; DE = write buffer / XGM buffer
|
|
68
|
+
; BC = counter
|
|
69
|
+
; C = $80 (used for overflow and sample unsign)
|
|
70
|
+
; IXL = CH3 mode | 0x1F (timer A reset write)
|
|
71
|
+
; IXH = free usage
|
|
72
|
+
; IY = base YMState / free usage
|
|
73
|
+
;
|
|
74
|
+
; HL' = YMPORT0
|
|
75
|
+
; DE' = YMPORT1
|
|
76
|
+
; BC' = read buffer
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
; ########################### const / var ##############################
|
|
80
|
+
|
|
81
|
+
INCLUDE "z80_def.i80" ; basic definitions
|
|
82
|
+
|
|
83
|
+
; COMMAND EQU $0100 ; command from 68K
|
|
84
|
+
; STATUS EQU $0102 ; status from Z80
|
|
85
|
+
; PARAMS EQU $0104 ; parameters (68K and Z80)
|
|
86
|
+
; VARS EQU $0110 ; variables (Z80)
|
|
87
|
+
;
|
|
88
|
+
;
|
|
89
|
+
; COMMAND b0/b1/b2 = start PCM0/PCM1/PCM2 - STATUS b0/b1/b2 = PCM0/PCM1/PCM2 playing
|
|
90
|
+
; ----------------------------------------------------------------------------------------
|
|
91
|
+
; This command use PCMx_ARG (priority, id, half speed and loop for PCMx)
|
|
92
|
+
;
|
|
93
|
+
; if (id == 0)
|
|
94
|
+
; --> play silent sample. Set priority to 0 and set PCMx_PLAY_STAT to 0
|
|
95
|
+
; if (id != 0)
|
|
96
|
+
; if (priority < current priority)
|
|
97
|
+
; --> do nothing
|
|
98
|
+
; if (priority >= current priority)
|
|
99
|
+
; --> play sample #id. Set new priority and set PCMx_PLAY_STAT to 1
|
|
100
|
+
;
|
|
101
|
+
; COMMAND b3 = resume play
|
|
102
|
+
; ------------------------
|
|
103
|
+
; No argument, setting this command clear previous PAUSE_PLAY command.
|
|
104
|
+
;
|
|
105
|
+
; if (XGM_ADDR_ARG == 0)
|
|
106
|
+
; --> do nothing
|
|
107
|
+
; if (XGM_ADDR_ARG != 0)
|
|
108
|
+
; --> resume play, set PLAY_STAT to 1
|
|
109
|
+
;
|
|
110
|
+
; COMMAND b4 = start play XGM - STATUS b4 = XGM playing
|
|
111
|
+
; ----------------------------------------------------------
|
|
112
|
+
; This command use XGM_ADDR_ARG (XGM track addr) and XGM_ID_ARG (XGM sub track id)
|
|
113
|
+
; Setting this command clear previous PAUSE_PLAY / RESUME_PLAY commands.
|
|
114
|
+
; This command always start by doing a PAUSE_PLAY command internally to set YM/PSG to silent
|
|
115
|
+
; in case we were already playing a music.
|
|
116
|
+
;
|
|
117
|
+
; if (XGM_ADDR_ARG == 0)
|
|
118
|
+
; --> assume a STOP_PLAY command: we set XGM ADDR to 0 and only execute the PAUSE_PLAY command. Set PLAY_STAT to 0
|
|
119
|
+
; if (XGM_ADDR_ARG != 0)
|
|
120
|
+
; --> start new PLAY command: do PAUSE_PLAY, update XGM ADDR to new address. Set PLAY_STAT to 1
|
|
121
|
+
;
|
|
122
|
+
; COMMAND b5 = pause play
|
|
123
|
+
; -----------------------
|
|
124
|
+
; No argument, setting this command clear previous RESUME_PLAY command.
|
|
125
|
+
; Put YM and PSG in silent state. Set PLAY_STAT to 0
|
|
126
|
+
;
|
|
127
|
+
; COMMAND b6 = set volume FM
|
|
128
|
+
; --------------------------
|
|
129
|
+
; This command use FM_ARG_VOLUME (FM channels envelop level)
|
|
130
|
+
;
|
|
131
|
+
; COMMAND b7 = set volume PSG
|
|
132
|
+
; ---------------------------
|
|
133
|
+
; This command use PSG_ARG_VOLUME (PSG channels envelop level)
|
|
134
|
+
;
|
|
135
|
+
;
|
|
136
|
+
; COMMAND b0 = play PCM0 STATUS b0 = PCM0 playing
|
|
137
|
+
; COMMAND b1 = play PCM1 STATUS b1 = PCM1 playing
|
|
138
|
+
; COMMAND b2 = play PCM2 STATUS b2 = PCM2 playing
|
|
139
|
+
; COMMAND b3 = resume play
|
|
140
|
+
; COMMAND b4 = start play STATUS b4 = XGM FM stream playing
|
|
141
|
+
; COMMAND b5 = pause play
|
|
142
|
+
; COMMAND b6 = set volume FM
|
|
143
|
+
; COMMAND b7 = set volume PSG STATUS b7 = driver ready
|
|
144
|
+
|
|
145
|
+
YMPORT_BASE_H EQU $40 ; YM2612 port high byte
|
|
146
|
+
YMPORT_BASE_L EQU $00 ; YM2612 port default low byte
|
|
147
|
+
|
|
148
|
+
CMD_PCM_SFT EQU 0 ; base PCM play command bit
|
|
149
|
+
CMD_PCM0_SFT EQU 0 ; PCM0 play command bit
|
|
150
|
+
CMD_PCM1_SFT EQU 1 ; PCM1 play command bit
|
|
151
|
+
CMD_PCM2_SFT EQU 2 ; PCM2 play command bit
|
|
152
|
+
CMD_RESUME_SFT EQU 3 ; music resume play command bit
|
|
153
|
+
CMD_PLAY_SFT EQU 4 ; music start play command bit
|
|
154
|
+
CMD_PAUSE_SFT EQU 5 ; music pause play command bit
|
|
155
|
+
CMD_SET_VOL_FM_SFT EQU 6 ; set FM volume command bit
|
|
156
|
+
CMD_SET_VOL_PSG_SFT EQU 7 ; set PSG volume command bit
|
|
157
|
+
|
|
158
|
+
CMD_PCM0_MSK EQU 1 << CMD_PCM0_SFT
|
|
159
|
+
CMD_PCM1_MSK EQU 1 << CMD_PCM1_SFT
|
|
160
|
+
CMD_PCM2_MSK EQU 1 << CMD_PCM2_SFT
|
|
161
|
+
CMD_RESUME_MSK EQU 1 << CMD_RESUME_SFT
|
|
162
|
+
CMD_PLAY_MSK EQU 1 << CMD_PLAY_SFT
|
|
163
|
+
CMD_PAUSE_MSK EQU 1 << CMD_PAUSE_SFT
|
|
164
|
+
CMD_SET_VOL_FM_MSK EQU 1 << CMD_SET_VOL_FM_SFT
|
|
165
|
+
CMD_SET_VOL_PSG_MSK EQU 1 << CMD_SET_VOL_PSG_SFT
|
|
166
|
+
|
|
167
|
+
STAT_PCM_SFT EQU 0 ; base PCM play status bit
|
|
168
|
+
STAT_PCM0_SFT EQU 0 ; PCM0 play status bit
|
|
169
|
+
STAT_PCM1_SFT EQU 1 ; PCM1 play status bit
|
|
170
|
+
STAT_PCM2_SFT EQU 2 ; PCM2 play status bit
|
|
171
|
+
STAT_PLAY_SFT EQU 4 ; music stream play status bit
|
|
172
|
+
STAT_READY_SFT EQU 7 ; driver ready status bit
|
|
173
|
+
|
|
174
|
+
STAT_PCM0_MSK EQU 1 << STAT_PCM0_SFT
|
|
175
|
+
STAT_PCM1_MSK EQU 1 << STAT_PCM1_SFT
|
|
176
|
+
STAT_PCM2_MSK EQU 1 << STAT_PCM2_SFT
|
|
177
|
+
STAT_PLAY_MSK EQU 1 << STAT_PLAY_SFT
|
|
178
|
+
STAT_READY_MSK EQU 1 << STAT_READY_SFT
|
|
179
|
+
|
|
180
|
+
STAT_READY EQU STAT_READY_MSK
|
|
181
|
+
|
|
182
|
+
PLAY_ARG_FM_ADDR EQU PARAMS+$00 ; FM stream address (b8-b23)
|
|
183
|
+
PLAY_ARG_PSG_ADDR EQU PARAMS+$02 ; PSG stream address (b8-b23)
|
|
184
|
+
PLAY_ARG_LOOP EQU PARAMS+$04 ; number of loop (0 = no loop, 255 = infinite)
|
|
185
|
+
|
|
186
|
+
PCM_ARG EQU PARAMS+$05 ; base PCM arg: b0-b3 = priority (0 to 15); b6 = half speed; b7 = loop
|
|
187
|
+
PCM0_ARG EQU PARAMS+$05 ; PCM0 arg: b0-b3 = priority (0 to 15); b6 = half speed; b7 = loop
|
|
188
|
+
PCM1_ARG EQU PARAMS+$06 ; PCM1 arg: b0-b3 = priority (0 to 15); b6 = half speed; b7 = loop
|
|
189
|
+
PCM2_ARG EQU PARAMS+$07 ; PCM2 arg: b0-b3 = priority (0 to 15); b6 = half speed; b7 = loop
|
|
190
|
+
|
|
191
|
+
FM_ARG_VOLUME EQU PARAMS+$08 ; FM volume: 0x00 to 0x7F where 0x00 is maximum volume and 0x7F is silent (attenuation)
|
|
192
|
+
PSG_ARG_VOLUME EQU PARAMS+$09 ; PSG volume: 0x0 to 0xF where 0x0 is maximum volume and 0xF is silent (attenuation)
|
|
193
|
+
|
|
194
|
+
TEMPO_ARG_INC_FRAC EQU PARAMS+$0A ; frame increment at each vsync (fractional part)
|
|
195
|
+
TEMPO_ARG_INC EQU PARAMS+$0B ; frame increment at each vsync
|
|
196
|
+
|
|
197
|
+
VARS EQU $0110 ; PARAMS+$0C
|
|
198
|
+
|
|
199
|
+
FM0_STATE EQU VARS+$00 ; FM0 state ($48 bytes len) - addr = $110
|
|
200
|
+
FM1_STATE EQU VARS+$80 ; FM1 state ($48 bytes len) - addr = $190
|
|
201
|
+
|
|
202
|
+
FM_STATE_H EQU (FM0_STATE >> 8) ; FM register state start - high byte = $01
|
|
203
|
+
FM_STATE_L EQU (FM0_STATE & $FF) ; FM register state start - low byte = $10
|
|
204
|
+
FM0_STATE_H EQU (FM0_STATE >> 8) ; FM0 register state start - high byte = $01
|
|
205
|
+
FM0_STATE_L EQU (FM0_STATE & $FF) ; FM0 register state start - low byte = $10
|
|
206
|
+
FM1_STATE_H EQU (FM1_STATE >> 8) ; FM1 register state start - high byte = $01
|
|
207
|
+
FM1_STATE_L EQU (FM1_STATE & $FF) ; FM1 register state start - low byte = $90
|
|
208
|
+
|
|
209
|
+
FM_STATE_LEN EQU $48
|
|
210
|
+
|
|
211
|
+
FM_STATE_CH_FREQ EQU $00 ; FM channel frequency register state (4*2 bytes)
|
|
212
|
+
FM_STATE_CH2_FREQ EQU $08 ; FM channel frequency register state for CH2 special mode (4*2 bytes)
|
|
213
|
+
FM_STATE_CH_ALGO EQU $10 ; FM channel algo register state (4 bytes)
|
|
214
|
+
FM_STATE_CH_PAN EQU $14 ; FM channel pan register state (4 bytes)
|
|
215
|
+
FM_STATE_OP_TL EQU $18 ; FM slot/op TL register state (4*4 bytes organized as (op*4)+ch)
|
|
216
|
+
FM_STATE_OP_SLRR EQU $28 ; FM slot/op SL/RR register state (4*4 bytes organized as (op*4)+ch)
|
|
217
|
+
FM_STATE_OP_ATT EQU $38 ; FM slot/op attenuation level (4*4 bytes organized as (op*4)+ch)
|
|
218
|
+
|
|
219
|
+
ACCESS_CMD EQU 0
|
|
220
|
+
ACCESS_PCM_ARG EQU 1
|
|
221
|
+
ACCESS_WR_TIME EQU 2
|
|
222
|
+
ACCESS_RD_TEMPO EQU 3
|
|
223
|
+
|
|
224
|
+
ACCESS EQU VARS+$50 ; b0 = Z80 is processing 68k commands (reading params / clearing commands / writing status)
|
|
225
|
+
; 68k should wait before issuing / modifying commands / reading status
|
|
226
|
+
; b1 = Z80 is writing ELAPSED_FRAME timestamp (multi byte write)
|
|
227
|
+
; 68k should wait before reading it
|
|
228
|
+
; b2 = Z80 is reading TEMPO parameter (multi byte param)
|
|
229
|
+
; 68k should wait before writing it
|
|
230
|
+
IN_DMA EQU VARS+$51 ; b0 = DMA operation in progress - read only from z80
|
|
231
|
+
; Z80 cannot access 68k BUS when the bit is set
|
|
232
|
+
|
|
233
|
+
REMAINING_LOOP EQU VARS+$52 ; remaining loop for XGM play (255 = infinite)
|
|
234
|
+
PENDING_FRAME_FRAC EQU VARS+$53 ; contains number of XGM frame to process (fractional part)
|
|
235
|
+
PENDING_FRAME EQU VARS+$54 ; contains number of XGM frame to process
|
|
236
|
+
ELAPSED_FRAME EQU VARS+$55 ; elapsed frames since music start play (in frames), encoded on 24 bit
|
|
237
|
+
MISSED_FRAME EQU VARS+$58 ; missed frames since music start play (in frames), encoded on 16 bit
|
|
238
|
+
|
|
239
|
+
DAC_ENABLE EQU VARS+$59 ; DAC enable state
|
|
240
|
+
FM_ATT EQU VARS+$5A ; FM attenuation level ($00-$7F, default = $00)
|
|
241
|
+
PSG_ATT EQU VARS+$5B ; PSG attenuation level ($00-$0F, default = $00)
|
|
242
|
+
|
|
243
|
+
STREAM_START_ADDR EQU $00 ; music data start addr (bit8 --> bit23)
|
|
244
|
+
STREAM_CUR_ADDR EQU $02 ; music data current internal addr (bit0 --> bit23)
|
|
245
|
+
STREAM_BUF_RD_POS EQU $06 ; buffer write position (256 bytes circular buffer)
|
|
246
|
+
STREAM_BUF_WR_POS EQU $07 ; buffer read position (256 bytes circular buffer)
|
|
247
|
+
STREAM_WAIT_FRAME EQU $08 ; number of frame to wait for stream process (16 bit value)
|
|
248
|
+
|
|
249
|
+
FM_STREAM_VARS EQU VARS+$5C ; FM stream vars ($5C-$65 = 10 bytes)
|
|
250
|
+
PSG_STREAM_VARS EQU VARS+$66 ; PSG stream vars ($66-$6F = 10 bytes)
|
|
251
|
+
|
|
252
|
+
FM_START_ADDR EQU (FM_STREAM_VARS + STREAM_START_ADDR)
|
|
253
|
+
FM_CUR_ADDR EQU (FM_STREAM_VARS + STREAM_CUR_ADDR)
|
|
254
|
+
FM_BUF_RD_POS EQU (FM_STREAM_VARS + STREAM_BUF_RD_POS)
|
|
255
|
+
FM_BUF_WR_POS EQU (FM_STREAM_VARS + STREAM_BUF_WR_POS)
|
|
256
|
+
FM_WAIT_FRAME EQU (FM_STREAM_VARS + STREAM_WAIT_FRAME)
|
|
257
|
+
|
|
258
|
+
PSG_START_ADDR EQU (PSG_STREAM_VARS + STREAM_START_ADDR)
|
|
259
|
+
PSG_CUR_ADDR EQU (PSG_STREAM_VARS + STREAM_CUR_ADDR)
|
|
260
|
+
PSG_BUF_RD_POS EQU (PSG_STREAM_VARS + STREAM_BUF_RD_POS)
|
|
261
|
+
PSG_BUF_WR_POS EQU (PSG_STREAM_VARS + STREAM_BUF_WR_POS)
|
|
262
|
+
PSG_WAIT_FRAME EQU (PSG_STREAM_VARS + STREAM_WAIT_FRAME)
|
|
263
|
+
|
|
264
|
+
PSG_STATE_FREQ EQU VARS+$70 ; PSG frequency reg state (4 x 16bit)
|
|
265
|
+
PSG_STATE_ENV EQU VARS+$78 ; PSG env reg state (4 x 8bit)
|
|
266
|
+
|
|
267
|
+
PSG_MUTE_REQ_SFT EQU 0 ; PSG mute request command
|
|
268
|
+
PSG_UNMUTE_REQ_SFT EQU 1 ; PSG unmute request command
|
|
269
|
+
|
|
270
|
+
PSG_CMD_REQUEST EQU VARS+$7C ; request PSG commands: b0 = mute; b1 = unmute
|
|
271
|
+
|
|
272
|
+
PCM_VARS EQU VARS+$D0 ; PCM vars ($D0-$E7 = 8 bytes per channel * 3 = 24 bytes)
|
|
273
|
+
|
|
274
|
+
PCM_ADDR_OFF EQU $00 ; PCM internal addr - 3 bytes (b0-b23 with b0-b5 = 0)
|
|
275
|
+
PCM_LEN_OFF EQU $03 ; PCM internal len - 2 bytes (b6-b21)
|
|
276
|
+
PCM_PRIO_EXT_OFF EQU $05 ; b0-b3 = priority (0-15); b4 = params changed; b6 = half speed; b7 = loop
|
|
277
|
+
|
|
278
|
+
PCM_ADDR EQU (PCM_VARS + PCM_ADDR_OFF)
|
|
279
|
+
PCM_LEN EQU (PCM_VARS + PCM_LEN_OFF)
|
|
280
|
+
PCM_PRIO_EXT EQU (PCM_VARS + PCM_PRIO_EXT_OFF)
|
|
281
|
+
|
|
282
|
+
PCM0_VARS EQU PCM_VARS+0 ; PCM0 vars (8 bytes per channel)
|
|
283
|
+
PCM1_VARS EQU PCM_VARS+8 ; PCM1 vars (8 bytes per channel)
|
|
284
|
+
PCM2_VARS EQU PCM_VARS+16 ; PCM2 vars (8 bytes per channel)
|
|
285
|
+
|
|
286
|
+
PCM0_ADDR EQU (PCM0_VARS + PCM_ADDR_OFF)
|
|
287
|
+
PCM0_LEN EQU (PCM0_VARS + PCM_LEN_OFF)
|
|
288
|
+
PCM0_PRIO_EXT EQU (PCM0_VARS + PCM_PRIO_EXT_OFF)
|
|
289
|
+
PCM1_ADDR EQU (PCM1_VARS + PCM_ADDR_OFF)
|
|
290
|
+
PCM1_LEN EQU (PCM1_VARS + PCM_LEN_OFF)
|
|
291
|
+
PCM1_PRIO_EXT EQU (PCM1_VARS + PCM_PRIO_EXT_OFF)
|
|
292
|
+
PCM2_ADDR EQU (PCM2_VARS + PCM_ADDR_OFF)
|
|
293
|
+
PCM2_LEN EQU (PCM2_VARS + PCM_LEN_OFF)
|
|
294
|
+
PCM2_PRIO_EXT EQU (PCM2_VARS + PCM_PRIO_EXT_OFF)
|
|
295
|
+
|
|
296
|
+
PCM_WRITE_POS EQU VARS+$E8 ; PCM buffer write position (256 bytes circular buffer = 4 x 64 bytes segment)
|
|
297
|
+
DAC_ENABLED_CNT EQU VARS+$E9 ; DAC enabled counter (set to 4 when PCM is playing then decreased each PCM fill loop)
|
|
298
|
+
BANK_SAVE EQU VARS+$EA ; save for bank register value (PCM mixing)
|
|
299
|
+
|
|
300
|
+
IDLE_TIME EQU VARS+$EB ; idle time counter of last frame (idle wait in number of PCM sample)
|
|
301
|
+
DMA_WAIT_TIME EQU VARS+$EC ; wait time counter of last frame (IN_DMA wait in number of PCM sample)
|
|
302
|
+
IDLE_TIME_TMP EQU VARS+$ED ; current idle time counter
|
|
303
|
+
DMA_WAIT_TIME_TMP EQU VARS+$EE ; current wait time counter
|
|
304
|
+
|
|
305
|
+
DEBUG0 EQU FM0_STATE+$48 ; debug space 0 (reserve 8 bytes for that)
|
|
306
|
+
DEBUG1 EQU FM1_STATE+$48 ; debug space 1 (reserve 8 bytes for that)
|
|
307
|
+
|
|
308
|
+
PCM_SAMPLE_IND EQU (DEBUG0 + $00) ; sample index on current frame
|
|
309
|
+
PLAYED_SAMPLES EQU (DEBUG0 + $01) ; number of samples played on last frame
|
|
310
|
+
FRAME_COUNT EQU (DEBUG0 + $02) ; number of interrupt since driver init
|
|
311
|
+
XGM2_PROCESS_TIME EQU (DEBUG1 + $00) ; process duration profiling
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
; end of variables
|
|
315
|
+
; -----------------------------------------------------
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
PCM_BUFFER_H EQU $19 ; PCM ring buffer (4 x 64 bytes)
|
|
319
|
+
FM_COM_BUFFER_H EQU $1A ; FM ring command buffer (size = $100)
|
|
320
|
+
PSG_COM_BUFFER_H EQU $1B ; PSG ring command buffer (size = $100)
|
|
321
|
+
SID_TABLE_H EQU $1C ; Sample id table (size = $200)
|
|
322
|
+
FM_JUMP_TABLE_H EQU $1E ; FM command jump table (size = $200)
|
|
323
|
+
|
|
324
|
+
PCM_BUFFER EQU (PCM_BUFFER_H << 8)
|
|
325
|
+
FM_COM_BUFFER EQU (FM_COM_BUFFER_H << 8)
|
|
326
|
+
PSG_COM_BUFFER EQU (PSG_COM_BUFFER_H << 8)
|
|
327
|
+
SID_TABLE EQU (SID_TABLE_H << 8)
|
|
328
|
+
FM_JUMP_TABLE EQU (FM_JUMP_TABLE_H << 8)
|
|
329
|
+
|
|
330
|
+
STACK EQU $100 ; stack pointer just above vars ($100)
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
; cannot use forward reference
|
|
334
|
+
PCM_ADDR_ARG EQU SID_TABLE+$1F4 ; base PCM SFX sample address / 256
|
|
335
|
+
PCM_LEN_ARG EQU SID_TABLE+$1F6 ; base PCM SFX sample len / 64
|
|
336
|
+
PCM0_ADDR_ARG EQU SID_TABLE+$1F4 ; PCM0 SFX sample address / 256
|
|
337
|
+
PCM0_LEN_ARG EQU SID_TABLE+$1F6 ; PCM0 SFX sample len / 64
|
|
338
|
+
PCM1_ADDR_ARG EQU SID_TABLE+$1F8 ; PCM1 SFX sample address / 256
|
|
339
|
+
PCM1_LEN_ARG EQU SID_TABLE+$1FA ; PCM1 SFX sample len / 64
|
|
340
|
+
PCM2_ADDR_ARG EQU SID_TABLE+$1FC ; PCM2 SFX sample address / 256
|
|
341
|
+
PCM2_LEN_ARG EQU SID_TABLE+$1FE ; PCM2 SFX sample len / 64
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
; ############################# define #################################
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
DEFINE SAMPLE_OUTPUT_FASTCALL RST $8
|
|
348
|
+
DEFINE SAMPLE_OUTPUT_NOINT_FASTCALL RST $20
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
; ############################# macro #################################
|
|
352
|
+
|
|
353
|
+
INCLUDE "z80_mac.i80" ; basic macros
|
|
354
|
+
|
|
355
|
+
INCLUDE "drv_xgm2_mac.i80" ; driver macros
|
|
356
|
+
INCLUDE "drv_xgm2_pcm_mac.i80" ; PCM macros
|
|
357
|
+
INCLUDE "drv_xgm2_ym_mac.i80" ; FM macros
|
|
358
|
+
INCLUDE "drv_xgm2_psg_mac.i80" ; PSG macros
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
; ########################### init ##############################
|
|
362
|
+
|
|
363
|
+
ORG $0000
|
|
364
|
+
|
|
365
|
+
init
|
|
366
|
+
DI ; disable ints
|
|
367
|
+
JP start ; jump to start
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
; ########################### fastcall #1 ##############################
|
|
371
|
+
|
|
372
|
+
BLOCK $0008-$
|
|
373
|
+
|
|
374
|
+
; RST $8 - 80 cycles + 21 cycles (RST+RET) = 101 cycles
|
|
375
|
+
|
|
376
|
+
sampleOutputFunc
|
|
377
|
+
|
|
378
|
+
sampleOutput
|
|
379
|
+
|
|
380
|
+
RET
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
; ########################### fastcall #2 ##############################
|
|
384
|
+
|
|
385
|
+
BLOCK $0020-$
|
|
386
|
+
|
|
387
|
+
; RST $20 - 88 cycles + 21 cycles (RST+RET) = 109 cycles
|
|
388
|
+
|
|
389
|
+
sampleOutputNoIntFunc
|
|
390
|
+
|
|
391
|
+
sampleOutputNoInt
|
|
392
|
+
|
|
393
|
+
RET
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
; ########################### V-interrupt ##############################
|
|
397
|
+
|
|
398
|
+
BLOCK $0038-$
|
|
399
|
+
|
|
400
|
+
interrupt ; VInt process
|
|
401
|
+
|
|
402
|
+
DI
|
|
403
|
+
|
|
404
|
+
PUSH AF
|
|
405
|
+
|
|
406
|
+
SAMPLE_OUTPUT_FASTCALL ;
|
|
407
|
+
|
|
408
|
+
PUSH BC ; ' 11 |
|
|
409
|
+
PUSH DE ; ' 11 |
|
|
410
|
+
PUSH HL ; ' 11 |
|
|
411
|
+
PUSH IX ; ' 15 | (79)
|
|
412
|
+
PUSH IY ; ' 15 |
|
|
413
|
+
EX AF, AF' ; ' 4 |
|
|
414
|
+
PUSH AF ; we also need to save AF' ' 11 |
|
|
415
|
+
|
|
416
|
+
LD HL, (FRAME_COUNT) ; ' 16 |
|
|
417
|
+
INC HL ; frame counter ' 6 | 38 (117)
|
|
418
|
+
LD (FRAME_COUNT), HL ; ' 16 |
|
|
419
|
+
|
|
420
|
+
EXX ; ' 4 |
|
|
421
|
+
LD A, C ; A = curr played sample index ' 4 |
|
|
422
|
+
EXX ; ' 4 | 16 (133)
|
|
423
|
+
LD D, A ; D = curr played sample index ' 4 |
|
|
424
|
+
|
|
425
|
+
LD HL, PCM_SAMPLE_IND ; ' 10 |
|
|
426
|
+
SUB (HL) ; A = num sample played ' 7 | 37 (170)
|
|
427
|
+
LD (HL), D ; save curr played sample index ' 7 |
|
|
428
|
+
LD (PLAYED_SAMPLES), A ; save number of sample played ' 13 |
|
|
429
|
+
|
|
430
|
+
SAMPLE_OUTPUT_FASTCALL ;
|
|
431
|
+
|
|
432
|
+
XOR A ; ' 4 |
|
|
433
|
+
LD HL, DMA_WAIT_TIME_TMP ; ' 10 | (14)
|
|
434
|
+
|
|
435
|
+
LD B, (HL) ; B = dma wait of last frame ' 7 | 14 (28)
|
|
436
|
+
LD (HL), A ; reset it ' 7 |
|
|
437
|
+
|
|
438
|
+
DEC L ; ' 4 |
|
|
439
|
+
LD C, (HL) ; C = idle time of last frame ' 7 | 18 (46)
|
|
440
|
+
LD (HL), A ; reset it ' 7 |
|
|
441
|
+
|
|
442
|
+
DEC L ; ' 4 |
|
|
443
|
+
LD (HL), B ; set current DMA wait ' 7 |
|
|
444
|
+
DEC L ; ' 4 | 22 (68)
|
|
445
|
+
LD (HL), C ; set current idle time ' 7 |
|
|
446
|
+
|
|
447
|
+
LD A, (STATUS) ; ' 13 |
|
|
448
|
+
AND STAT_PLAY_MSK ; ' 7 | 30 (98)
|
|
449
|
+
JP Z, .not_playing ; not playing --> bypass ' 10 |
|
|
450
|
+
|
|
451
|
+
LD HL, ACCESS ; ' 10 |
|
|
452
|
+
SET ACCESS_RD_TEMPO, (HL) ; now reading tempo params ' 15 |
|
|
453
|
+
LD BC, (TEMPO_ARG_INC_FRAC) ; BC = tempo ' 20 | 60 (158)
|
|
454
|
+
RES ACCESS_RD_TEMPO, (HL) ; done reading tempo ' 15 |
|
|
455
|
+
|
|
456
|
+
SAMPLE_OUTPUT_FASTCALL ;
|
|
457
|
+
|
|
458
|
+
LD HL, (PENDING_FRAME_FRAC) ; HL = pending frame ' 16 |
|
|
459
|
+
ADD HL, BC ; pending frame += tempo ' 11 | (43)
|
|
460
|
+
LD (PENDING_FRAME_FRAC), HL ; store it ' 16 |
|
|
461
|
+
|
|
462
|
+
LD A, H ; A = num of frame to process ' 4 |
|
|
463
|
+
OR A ; ' 4 | 18 (61)
|
|
464
|
+
JP Z, .not_playing ; A >= 1 ? ' 10 |
|
|
465
|
+
|
|
466
|
+
isPCMLessThan 150 ; D should contain sample index ' 24 |
|
|
467
|
+
JP NC, .playing ; PCM buffer need fill ? ' 10 | 34 (95)
|
|
468
|
+
|
|
469
|
+
.cannot_play
|
|
470
|
+
LD HL, MISSED_FRAME ; ' 10 |
|
|
471
|
+
INC (HL) ; --> missed_frame++ ' 11 | 21 (116)
|
|
472
|
+
|
|
473
|
+
.not_playing
|
|
474
|
+
SAMPLE_OUTPUT_FASTCALL ;
|
|
475
|
+
|
|
476
|
+
CALL process68KCommands_noPSG ; process 68k commands (no PSG)
|
|
477
|
+
CALL waitDMA ; ' 90
|
|
478
|
+
|
|
479
|
+
SAMPLE_OUTPUT_FASTCALL
|
|
480
|
+
|
|
481
|
+
CALL process68KCommands_PSG ; just process 68k PSG commands
|
|
482
|
+
|
|
483
|
+
JP .fill_buffers ; ' (10)
|
|
484
|
+
|
|
485
|
+
.playing ; ' 95
|
|
486
|
+
SAMPLE_OUTPUT_FASTCALL
|
|
487
|
+
|
|
488
|
+
CALL FM_nextFrame ; process 1 FM frame ' 27
|
|
489
|
+
CALL process68KCommands_noPSG ; process 68k commands (no PSG)
|
|
490
|
+
|
|
491
|
+
LD HL, PENDING_FRAME ; ' 10 |
|
|
492
|
+
LD A, (HL) ; A = pending frame ' 7 |
|
|
493
|
+
DEC A ; A-- ' 4 | 31
|
|
494
|
+
JP M, .play_reset ; just got stop/start play com ' 10 |
|
|
495
|
+
|
|
496
|
+
LD (HL), A ; pending_frame-- ' 7 | (38)
|
|
497
|
+
|
|
498
|
+
.play_reset
|
|
499
|
+
EX AF, AF' ; F' = S flag ' 4 | (42)
|
|
500
|
+
|
|
501
|
+
CALL waitDMA ; ' 90 | (132)
|
|
502
|
+
|
|
503
|
+
SAMPLE_OUTPUT_FASTCALL
|
|
504
|
+
|
|
505
|
+
EX AF, AF' ; F = S flag ' 4
|
|
506
|
+
CALL P, PSG_nextFrame ; process 1 PSG frame if play ' 27
|
|
507
|
+
CALL process68KCommands_PSG ; just process 68k PSG commands
|
|
508
|
+
|
|
509
|
+
JP .fill_buffers ; ' 10
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
; we reserve $100-$1FF area for variables
|
|
513
|
+
; #######################################
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
BLOCK $0200-$
|
|
517
|
+
|
|
518
|
+
.process_music_frames
|
|
519
|
+
SAMPLE_OUTPUT_FASTCALL
|
|
520
|
+
|
|
521
|
+
CALL FM_nextFrame ; process 1 FM frame ' 27
|
|
522
|
+
CALL PSG_nextFrame ; process 1 PSG frame ' 27
|
|
523
|
+
|
|
524
|
+
.fill_buffers
|
|
525
|
+
LD A, (STATUS) ; ' 13 |
|
|
526
|
+
AND STAT_PLAY_MSK ; ' 7 | 30 (57)
|
|
527
|
+
JP Z, .done ; not playing ? --> done ' 10 |
|
|
528
|
+
|
|
529
|
+
.check_FM_buffer
|
|
530
|
+
isFMComBufferEmpty ; ' 30 |
|
|
531
|
+
JP NZ, .check_PSG_buffer ; ' 10 | 40 (97)
|
|
532
|
+
|
|
533
|
+
LD D, FM_COM_BUFFER_H ; ' 7 |
|
|
534
|
+
LD E, (HL) ; DE = FM buf dest ' 7 |
|
|
535
|
+
LD HL, (FM_CUR_ADDR) ; HL = FM buf src.ML ' 16 | 51 (148)
|
|
536
|
+
LD A, (FM_CUR_ADDR+2) ; ' 13 |
|
|
537
|
+
LD IXH, A ; IXH = FM buf src.H ' 8 |
|
|
538
|
+
|
|
539
|
+
SAMPLE_OUTPUT_FASTCALL
|
|
540
|
+
|
|
541
|
+
CALL unpackCmds ; --> fill FM buffer ' 0
|
|
542
|
+
|
|
543
|
+
LD (FM_CUR_ADDR), HL ; save updated src pos ' 16 |
|
|
544
|
+
LD A, IXH ; ' 8 |
|
|
545
|
+
LD (FM_CUR_ADDR+2), A ; ' 13 | (54)
|
|
546
|
+
LD A, E ; ' 4 |
|
|
547
|
+
LD (FM_BUF_WR_POS), A ; save new write_pos ' 13 |
|
|
548
|
+
|
|
549
|
+
.check_PSG_buffer ; ' 97
|
|
550
|
+
isPSGComBufferEmpty ; ' 30 |
|
|
551
|
+
JP NZ, .psg_buffer_ok ; ' 10 | 40 (137)
|
|
552
|
+
|
|
553
|
+
LD D, PSG_COM_BUFFER_H ; ' 7 |
|
|
554
|
+
LD E, (HL) ; DE = PSG buf dest ' 7 |
|
|
555
|
+
LD HL, (PSG_CUR_ADDR) ; HL = PSG buf src.ML ' 16 | 51 (188)
|
|
556
|
+
LD A, (PSG_CUR_ADDR+2) ; ' 13 |
|
|
557
|
+
LD IXH, A ; IXH = FM buf src.H ' 8 |
|
|
558
|
+
|
|
559
|
+
sampleOutput
|
|
560
|
+
|
|
561
|
+
CALL unpackCmds ; --> fill PSG buffer ' 0
|
|
562
|
+
|
|
563
|
+
LD (PSG_CUR_ADDR), HL ; save updated src pos ' 16 |
|
|
564
|
+
LD A, IXH ; ' 8 |
|
|
565
|
+
LD (PSG_CUR_ADDR+2), A ; ' 13 |
|
|
566
|
+
LD A, E ; ' 4 | (54)
|
|
567
|
+
LD (PSG_BUF_WR_POS), A ; save new write_pos ' 13 |
|
|
568
|
+
|
|
569
|
+
.psg_buffer_ok ; ' 137
|
|
570
|
+
EXX ; ' 4 |
|
|
571
|
+
LD A, C ; A = curr played sample index ' 4 |
|
|
572
|
+
EXX ; ' 4 | 16 (153)
|
|
573
|
+
LD D, A ; D = curr played sample index ' 4 |
|
|
574
|
+
|
|
575
|
+
SAMPLE_OUTPUT_FASTCALL
|
|
576
|
+
|
|
577
|
+
LD HL, PENDING_FRAME ; num of frame to process ' 10 |
|
|
578
|
+
DEC (HL) ; < 0 ? ' 11 | (31)
|
|
579
|
+
JP M, .done_pre ; --> we're done ' 10 |
|
|
580
|
+
|
|
581
|
+
isPCMLessThan 140 ; need PCM fill ? ' 24 |
|
|
582
|
+
JR C, .done ; --> stop here ' 7 | 31 (62)
|
|
583
|
+
|
|
584
|
+
JP .process_music_frames ; ' 10 | (72)
|
|
585
|
+
|
|
586
|
+
.done_pre ; ' 31
|
|
587
|
+
INC (HL) ; set back to 0 ' 11 | (42)
|
|
588
|
+
|
|
589
|
+
.done
|
|
590
|
+
SAMPLE_OUTPUT_FASTCALL
|
|
591
|
+
|
|
592
|
+
LD A, (BANK_SAVE) ; restore bank register ' 13 |
|
|
593
|
+
setBankFast ; ' 97 | 110
|
|
594
|
+
|
|
595
|
+
.done_fast
|
|
596
|
+
POP AF ; we also need to restore AF' ' 10 |
|
|
597
|
+
EX AF, AF' ; ' 4 |
|
|
598
|
+
POP IY ; ' 14 |
|
|
599
|
+
LD A, IXL ; ' 8 |
|
|
600
|
+
POP IX ; ' 14 | 88 (198)
|
|
601
|
+
LD IXL, A ; preserve IXL ' 8 |
|
|
602
|
+
POP HL ; ' 10 |
|
|
603
|
+
POP DE ; ' 10 |
|
|
604
|
+
POP BC ; ' 10 |
|
|
605
|
+
|
|
606
|
+
sampleOutput
|
|
607
|
+
|
|
608
|
+
POP AF
|
|
609
|
+
|
|
610
|
+
EI
|
|
611
|
+
RETI
|
|
612
|
+
|
|
613
|
+
|
|
614
|
+
; ########################### main ##############################
|
|
615
|
+
|
|
616
|
+
; BLOCK $0200-$
|
|
617
|
+
|
|
618
|
+
start
|
|
619
|
+
LD SP, STACK ; setup stack
|
|
620
|
+
IM $01 ; set int mode 1
|
|
621
|
+
|
|
622
|
+
XOR A
|
|
623
|
+
LD (STATUS), A ; driver not ready
|
|
624
|
+
LD (COMMAND), A ; command cleared
|
|
625
|
+
|
|
626
|
+
LD HL, PARAMS
|
|
627
|
+
LD A, $00
|
|
628
|
+
LD B, $200-PARAMS ; clear PARAMS up to $200
|
|
629
|
+
|
|
630
|
+
cp_loop
|
|
631
|
+
LD (HL), A ; clear parameters and variables
|
|
632
|
+
INC HL
|
|
633
|
+
DJNZ cp_loop
|
|
634
|
+
|
|
635
|
+
LD HL, PCM_BUFFER
|
|
636
|
+
LD A, $80 ; $80 = silent sample ($00-$FF = unsigned sample)
|
|
637
|
+
LD B, $00 ; 256 bytes to clear
|
|
638
|
+
|
|
639
|
+
cb_loop
|
|
640
|
+
LD (HL), A ; initialise PCM buffer to silent
|
|
641
|
+
INC HL
|
|
642
|
+
DJNZ cb_loop
|
|
643
|
+
|
|
644
|
+
XOR A ; initialise PCM buffer read / write position
|
|
645
|
+
LD (PCM_WRITE_POS), A ; write pos start on seg #0
|
|
646
|
+
LD BC, PCM_BUFFER+64 ; BC' = read pos start on seg #1
|
|
647
|
+
LD HL, YMPORT0 ; HL' point to YMPORT0
|
|
648
|
+
LD DE, YMPORT1 ; DE' point to YMPORT1
|
|
649
|
+
EXX
|
|
650
|
+
|
|
651
|
+
LD A, 64
|
|
652
|
+
LD (PCM_SAMPLE_IND), A ; start read PCM pos
|
|
653
|
+
|
|
654
|
+
LD A, $C0 ; initialise FM panning state to LR
|
|
655
|
+
LD HL, FM0_STATE+FM_STATE_CH_PAN
|
|
656
|
+
|
|
657
|
+
LD (HL), A
|
|
658
|
+
INC L
|
|
659
|
+
LD (HL), A
|
|
660
|
+
INC L
|
|
661
|
+
LD (HL), A
|
|
662
|
+
|
|
663
|
+
LD HL, FM1_STATE+FM_STATE_CH_PAN
|
|
664
|
+
|
|
665
|
+
LD (HL), A
|
|
666
|
+
INC L
|
|
667
|
+
LD (HL), A
|
|
668
|
+
INC L
|
|
669
|
+
LD (HL), A
|
|
670
|
+
|
|
671
|
+
LD A, $0F ; initialize PSG env state to silent
|
|
672
|
+
LD HL, PSG_STATE_ENV
|
|
673
|
+
|
|
674
|
+
LD (HL), A
|
|
675
|
+
INC L
|
|
676
|
+
LD (HL), A
|
|
677
|
+
INC L
|
|
678
|
+
LD (HL), A
|
|
679
|
+
INC L
|
|
680
|
+
LD (HL), A
|
|
681
|
+
|
|
682
|
+
LD DE, $24FF ; TIMER A - MSB = $FF ($FF<<2 = $3FC)
|
|
683
|
+
CALL writeYM0
|
|
684
|
+
LD DE, $2500 ; TIMER A - LSB = $00 ($3FC+0 = $3FC)
|
|
685
|
+
CALL writeYM0 ; Timer A set for ~13300 Hz
|
|
686
|
+
LD DE, $2715 ;
|
|
687
|
+
CALL writeYM0 ; Enable timer A, Reset timer A
|
|
688
|
+
|
|
689
|
+
LD IXL, $15 ; IXL = CH3 mode | 0x15 (timer A enable & reset write)
|
|
690
|
+
|
|
691
|
+
XOR A
|
|
692
|
+
LD (FM_BUF_RD_POS), A
|
|
693
|
+
LD (FM_BUF_WR_POS), A ; init FM command buffer RD/WR pointers (empty buffer)
|
|
694
|
+
LD (PSG_BUF_RD_POS), A
|
|
695
|
+
LD (PSG_BUF_WR_POS), A ; init PSG command buffer RD/WR pointers (empty buffer)
|
|
696
|
+
|
|
697
|
+
LD A, 1
|
|
698
|
+
LD (TEMPO_ARG_INC), A ; init tempo
|
|
699
|
+
|
|
700
|
+
CALL FM_mute ; mute FM
|
|
701
|
+
CALL PSG_mute ; mute PSG
|
|
702
|
+
|
|
703
|
+
LD A, STAT_READY
|
|
704
|
+
LD (STATUS), A ; driver ready :)
|
|
705
|
+
EI ; enable interrupts
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
; main loop is busy filling the PCM buffers
|
|
709
|
+
|
|
710
|
+
main_loop
|
|
711
|
+
|
|
712
|
+
CALL sampleOutputNoIntSafeFunc
|
|
713
|
+
|
|
714
|
+
; fill PCM buffer here
|
|
715
|
+
; --------------------
|
|
716
|
+
|
|
717
|
+
; #PCM0
|
|
718
|
+
; -----
|
|
719
|
+
|
|
720
|
+
pcm0
|
|
721
|
+
LD HL, PCM_WRITE_POS ; ' 10 |
|
|
722
|
+
LD D, PCM_BUFFER_H ; ' 7 | (24)
|
|
723
|
+
LD E, (HL) ; DE = PCM dest ' 7 |
|
|
724
|
+
|
|
725
|
+
LD HL, STATUS ; ' 10 |
|
|
726
|
+
BIT STAT_PCM0_SFT, (HL) ; PCM0 playing ? ' 12 | 29 (53)
|
|
727
|
+
JR NZ, .play ; ' 7 |
|
|
728
|
+
|
|
729
|
+
.silent
|
|
730
|
+
clearPCMBuffer ; just clear PCM buffer
|
|
731
|
+
JP pcm1
|
|
732
|
+
|
|
733
|
+
.play ; ' 58
|
|
734
|
+
LD A, 4 ; ' 7 |
|
|
735
|
+
LD (DAC_ENABLED_CNT), A ; reset DAC en. counter ' 13 | 20 (78)
|
|
736
|
+
|
|
737
|
+
DI ; protect PCM vars acc. ' 4 |
|
|
738
|
+
LD HL, (PCM0_ADDR+0) ; HL = PCM src.ML ' 16 |
|
|
739
|
+
LD A, (PCM0_ADDR+2) ; ' 13 | 41 (119)
|
|
740
|
+
LD IXH, A ; IXH = FM buf src.H ' 8 |
|
|
741
|
+
|
|
742
|
+
LD A, (PCM0_PRIO_EXT) ; A.b6 = half speed ' 13 |
|
|
743
|
+
EI ; ' 4 |
|
|
744
|
+
ADD A ; A.b7 = half speed ' 4 | 31 (150)
|
|
745
|
+
JP M, .play_hs ; ' 10 |
|
|
746
|
+
|
|
747
|
+
.play_norm ; 150
|
|
748
|
+
SAMPLE_OUTPUT_NOINT_FASTCALL
|
|
749
|
+
fillPCMBuffer ; 154
|
|
750
|
+
JP .done ; 164
|
|
751
|
+
|
|
752
|
+
.play_hs ; 150
|
|
753
|
+
SAMPLE_OUTPUT_NOINT_FASTCALL
|
|
754
|
+
fillPCMBufferHS ; 150
|
|
755
|
+
|
|
756
|
+
.done
|
|
757
|
+
SAMPLE_OUTPUT_NOINT_FASTCALL
|
|
758
|
+
updatePCM 0 ;
|
|
759
|
+
|
|
760
|
+
; #PCM1
|
|
761
|
+
; -----
|
|
762
|
+
|
|
763
|
+
pcm1
|
|
764
|
+
LD HL, STATUS ; ' 10 |
|
|
765
|
+
BIT STAT_PCM1_SFT, (HL) ; PCM1 not playing ? ' 12 | (32)
|
|
766
|
+
JP Z, pcm2 ; --> next ' 10 |
|
|
767
|
+
|
|
768
|
+
.play
|
|
769
|
+
LD A, E ; ' 4 |
|
|
770
|
+
SUB 64 ; ' 7 | 15 (47)
|
|
771
|
+
LD E, A ; DE = PCM dest ' 4 |
|
|
772
|
+
|
|
773
|
+
LD A, 4 ; ' 7 |
|
|
774
|
+
LD (DAC_ENABLED_CNT), A ; reset DAC en. counter ' 13 | 20 (67)
|
|
775
|
+
|
|
776
|
+
DI ; protect PCM vars acc. ' 4 |
|
|
777
|
+
LD HL, (PCM1_ADDR+0) ; HL = PCM src.ML ' 16 |
|
|
778
|
+
LD A, (PCM1_ADDR+2) ; ' 13 | 41 (108)
|
|
779
|
+
LD IXH, A ; IXH = FM buf src.H ' 8 |
|
|
780
|
+
|
|
781
|
+
LD A, (PCM1_PRIO_EXT) ; A.b6 = half speed ' 13 |
|
|
782
|
+
EI ; ' 4 |
|
|
783
|
+
ADD A ; A.b7 = half speed ' 4 | 31 (139)
|
|
784
|
+
JP M, .play_hs ; ' 10 |
|
|
785
|
+
|
|
786
|
+
.play_norm
|
|
787
|
+
mixPCMBuffer
|
|
788
|
+
JP .done
|
|
789
|
+
|
|
790
|
+
.play_hs ; ' 111
|
|
791
|
+
mixPCMBufferHS
|
|
792
|
+
|
|
793
|
+
.done
|
|
794
|
+
CALL sampleOutputNoIntSafeFunc
|
|
795
|
+
updatePCM 1 ; ' 42
|
|
796
|
+
|
|
797
|
+
; #PCM2
|
|
798
|
+
; -----
|
|
799
|
+
|
|
800
|
+
pcm2
|
|
801
|
+
LD A, E ; ' 4 |
|
|
802
|
+
SUB 64 ; ' 7 | (15)
|
|
803
|
+
LD E, A ; DE = PCM dest ' 4 |
|
|
804
|
+
|
|
805
|
+
LD HL, STATUS ; ' 10 |
|
|
806
|
+
BIT STAT_PCM2_SFT, (HL) ; PCM2 playing ? ' 12 | 29 (44)
|
|
807
|
+
JR NZ, .play ; ' 7 |
|
|
808
|
+
|
|
809
|
+
.silent
|
|
810
|
+
unsignPCMBuffer ; just unsign PCM buffer
|
|
811
|
+
JP PCM_done
|
|
812
|
+
|
|
813
|
+
.play ; ' 49
|
|
814
|
+
LD A, 4 ; ' 7 |
|
|
815
|
+
LD (DAC_ENABLED_CNT), A ; reset DAC en. counter ' 13 | 20 (69)
|
|
816
|
+
|
|
817
|
+
DI ; protect PCM vars acc. ' 4 |
|
|
818
|
+
LD HL, (PCM2_ADDR+0) ; HL = PCM src.ML ' 16 |
|
|
819
|
+
LD A, (PCM2_ADDR+2) ; ' 13 | 41 (110)
|
|
820
|
+
LD IXH, A ; IXH = FM buf src.H ' 8 |
|
|
821
|
+
|
|
822
|
+
LD A, (PCM2_PRIO_EXT) ; A.b6 = half speed ' 13 |
|
|
823
|
+
EI ; ' 4 |
|
|
824
|
+
ADD A ; A.b7 = half speed ' 4 | 31 (141)
|
|
825
|
+
JP M, .play_hs ; ' 10 |
|
|
826
|
+
|
|
827
|
+
.play_norm
|
|
828
|
+
mixUnsignPCMBuffer
|
|
829
|
+
JP .done
|
|
830
|
+
|
|
831
|
+
.play_hs ; ' 113
|
|
832
|
+
mixUnsignPCMBufferHS
|
|
833
|
+
|
|
834
|
+
.done
|
|
835
|
+
CALL sampleOutputNoIntSafeFunc
|
|
836
|
+
updatePCM 2 ; ' 42
|
|
837
|
+
|
|
838
|
+
PCM_done
|
|
839
|
+
LD HL, PCM_WRITE_POS ; ' 10 |
|
|
840
|
+
LD (HL), E ; update PCM write pos ' 7 | 17 (59)
|
|
841
|
+
|
|
842
|
+
LD A, (DAC_ENABLED_CNT) ; DAC enabled counter ' 13 |
|
|
843
|
+
OR A ; > 0 ? ' 4 | 24 (83)
|
|
844
|
+
JR NZ, .force_dac_on ; --> force DAC on ' 7 |
|
|
845
|
+
|
|
846
|
+
LD A, (DAC_ENABLE) ; A = DAC_ENABLE ' 13 |
|
|
847
|
+
JP .set_dac_enabled ; ' 10 | 23 (106)
|
|
848
|
+
|
|
849
|
+
.force_dac_on ; ' 88
|
|
850
|
+
DEC A ; decrement counter ' 4 |
|
|
851
|
+
LD (DAC_ENABLED_CNT), A ; save ' 13 | 17 (105)
|
|
852
|
+
|
|
853
|
+
LD A, $80 ; A = DAC on ' 7 | (112)
|
|
854
|
+
|
|
855
|
+
.set_dac_enabled
|
|
856
|
+
LD HL, YMPORT0 ; HL = YM port 0 ' 10 |
|
|
857
|
+
LD (HL), $2B ; DAC enabled reg ' 7 |
|
|
858
|
+
INC L ; next port ' 4 | 28 (140)
|
|
859
|
+
LD (HL), A ; write value ' 7 |
|
|
860
|
+
|
|
861
|
+
|
|
862
|
+
; IDLE LOOP
|
|
863
|
+
; ---------
|
|
864
|
+
|
|
865
|
+
idle_loop
|
|
866
|
+
CALL sampleOutputNoIntSafeFunc
|
|
867
|
+
|
|
868
|
+
DI ; ' 4 |
|
|
869
|
+
EXX ; ' 4 |
|
|
870
|
+
LD A, C ; A = curr read sample pos ' 4 | (20)
|
|
871
|
+
EXX ; ' 4 |
|
|
872
|
+
EI ; ' 4 |
|
|
873
|
+
|
|
874
|
+
LD D, A ; D = curr read sample pos ' 4 | (24)
|
|
875
|
+
|
|
876
|
+
isPCMNotFull ; PCM buffer not full ? ' 24 |
|
|
877
|
+
JP C, main_loop ; --> fill PCM buffer ' 10 | 34 (58)
|
|
878
|
+
|
|
879
|
+
LD HL, IDLE_TIME_TMP ; increment idle loop ' 10 |
|
|
880
|
+
INC (HL) ; ' 11 | 21 (79)
|
|
881
|
+
|
|
882
|
+
JP idle_loop ; ' 10 | (89)
|
|
883
|
+
|
|
884
|
+
|
|
885
|
+
; ############################## functions ################################
|
|
886
|
+
|
|
887
|
+
INCLUDE "z80_fct.i80" ; basic functions
|
|
888
|
+
|
|
889
|
+
INCLUDE "drv_xgm2_fct.i80" ; driver functions
|
|
890
|
+
INCLUDE "drv_xgm2_pcm_fct.i80" ; PCM functions
|
|
891
|
+
INCLUDE "drv_xgm2_ym_fct.i80" ; FM functions
|
|
892
|
+
INCLUDE "drv_xgm2_psg_fct.i80" ; PSG functions
|
|
893
|
+
|
|
894
|
+
|
|
895
|
+
; ############################# FM jump table ################################
|
|
896
|
+
|
|
897
|
+
BLOCK FM_JUMP_TABLE-$
|
|
898
|
+
|
|
899
|
+
DW FMCom_wait1, FMCom_wait2, FMCom_wait3, FMCom_wait4 ; 00-0E
|
|
900
|
+
DW FMCom_wait5, FMCom_wait6, FMCom_wait7, FMCom_wait8
|
|
901
|
+
DW FMCom_wait9, FMCom_wait10, FMCom_wait11, FMCom_wait12
|
|
902
|
+
DW FMCom_wait13, FMCom_wait14, FMCom_wait15
|
|
903
|
+
|
|
904
|
+
DW FMCom_waitLong ; 0F
|
|
905
|
+
|
|
906
|
+
DW FMCom_playPCM0, FMCom_playPCM1, FMCom_playPCM2, FMCom_null ; 10-1F
|
|
907
|
+
DW FMCom_playPCM0_S, FMCom_playPCM1_S, FMCom_playPCM2_S, FMCom_null
|
|
908
|
+
DW FMCom_playPCM0_P, FMCom_playPCM1_P, FMCom_playPCM2_P, FMCom_null
|
|
909
|
+
DW FMCom_playPCM0_SP, FMCom_playPCM1_SP, FMCom_playPCM2_SP, FMCom_null
|
|
910
|
+
|
|
911
|
+
DW FMCom_loadInst0_CH0, FMCom_loadInst0_CH1, FMCom_loadInst0_CH2, FMCom_null ; 20-2F
|
|
912
|
+
DW FMCom_loadInst1_CH0, FMCom_loadInst1_CH1, FMCom_loadInst1_CH2, FMCom_null
|
|
913
|
+
DW FMCom_null, FMCom_null, FMCom_null, FMCom_null
|
|
914
|
+
DW FMCom_null, FMCom_null, FMCom_null, FMCom_null
|
|
915
|
+
|
|
916
|
+
DW FMCom_setFreq0_CH0, FMCom_setFreq0_CH1, FMCom_setFreq0_CH2, FMCom_null ; 30-3F
|
|
917
|
+
DW FMCom_setFreq1_CH0, FMCom_setFreq1_CH1, FMCom_setFreq1_CH2, FMCom_null
|
|
918
|
+
DW FMCom_setFreq0_CH2_SL1, FMCom_setFreq0_CH2_SL2, FMCom_setFreq0_CH2_SL3, FMCom_null
|
|
919
|
+
DW FMCom_null, FMCom_null, FMCom_null, FMCom_null
|
|
920
|
+
|
|
921
|
+
DW FMCom_key_OFF, FMCom_key_OFF, FMCom_key_OFF, FMCom_null ; 40-4F
|
|
922
|
+
DW FMCom_key_OFF, FMCom_key_OFF, FMCom_key_OFF, FMCom_null
|
|
923
|
+
DW FMCom_key_ON, FMCom_key_ON, FMCom_key_ON, FMCom_null
|
|
924
|
+
DW FMCom_key_ON, FMCom_key_ON, FMCom_key_ON, FMCom_null
|
|
925
|
+
|
|
926
|
+
DW FMCom_keySeq_OFFON, FMCom_keySeq_OFFON, FMCom_keySeq_OFFON, FMCom_null ; 50-5F
|
|
927
|
+
DW FMCom_keySeq_OFFON, FMCom_keySeq_OFFON, FMCom_keySeq_OFFON, FMCom_null
|
|
928
|
+
DW FMCom_keySeq_ONOFF, FMCom_keySeq_ONOFF, FMCom_keySeq_ONOFF, FMCom_null
|
|
929
|
+
DW FMCom_keySeq_ONOFF, FMCom_keySeq_ONOFF, FMCom_keySeq_ONOFF, FMCom_null
|
|
930
|
+
|
|
931
|
+
DW FMCom_setPan0_CH0_OFF, FMCom_setPan0_CH1_OFF, FMCom_setPan0_CH2_OFF, FMCom_null ; 60-6F
|
|
932
|
+
DW FMCom_setPan0_CH0_R, FMCom_setPan0_CH1_R, FMCom_setPan0_CH2_R, FMCom_null
|
|
933
|
+
DW FMCom_setPan0_CH0_L, FMCom_setPan0_CH1_L, FMCom_setPan0_CH2_L, FMCom_null
|
|
934
|
+
DW FMCom_setPan0_CH0_LR, FMCom_setPan0_CH1_LR, FMCom_setPan0_CH2_LR, FMCom_null
|
|
935
|
+
|
|
936
|
+
DW FMCom_setPan1_CH0_OFF, FMCom_setPan1_CH1_OFF, FMCom_setPan1_CH2_OFF, FMCom_null ; 70-7F
|
|
937
|
+
DW FMCom_setPan1_CH0_R, FMCom_setPan1_CH1_R, FMCom_setPan1_CH2_R, FMCom_null
|
|
938
|
+
DW FMCom_setPan1_CH0_L, FMCom_setPan1_CH1_L, FMCom_setPan1_CH2_L, FMCom_null
|
|
939
|
+
DW FMCom_setPan1_CH0_LR, FMCom_setPan1_CH1_LR, FMCom_setPan1_CH2_LR, FMCom_null
|
|
940
|
+
|
|
941
|
+
DW FMCom_setFreq0_CH0_W, FMCom_setFreq0_CH1_W, FMCom_setFreq0_CH2_W, FMCom_null ; 80-8F
|
|
942
|
+
DW FMCom_setFreq1_CH0_W, FMCom_setFreq1_CH1_W, FMCom_setFreq1_CH2_W, FMCom_null
|
|
943
|
+
DW FMCom_setFreq0_CH2_SL1_W, FMCom_setFreq0_CH2_SL2_W, FMCom_setFreq0_CH2_SL3_W, FMCom_null
|
|
944
|
+
DW FMCom_null, FMCom_null, FMCom_null, FMCom_null
|
|
945
|
+
|
|
946
|
+
DW FMCom_setTL_CH0_SL0, FMCom_setTL_CH1_SL0, FMCom_setTL_CH2_SL0, FMCom_null ; 90-9F
|
|
947
|
+
DW FMCom_setTL_CH0_SL1, FMCom_setTL_CH1_SL1, FMCom_setTL_CH2_SL1, FMCom_null
|
|
948
|
+
DW FMCom_setTL_CH0_SL2, FMCom_setTL_CH1_SL2, FMCom_setTL_CH2_SL2, FMCom_null
|
|
949
|
+
DW FMCom_setTL_CH0_SL3, FMCom_setTL_CH1_SL3, FMCom_setTL_CH2_SL3, FMCom_null
|
|
950
|
+
|
|
951
|
+
DW FMCom_setFreqD0_CH0, FMCom_setFreqD0_CH1, FMCom_setFreqD0_CH2, FMCom_null ; A0-AF
|
|
952
|
+
DW FMCom_setFreqD1_CH0, FMCom_setFreqD1_CH1, FMCom_setFreqD1_CH2, FMCom_null
|
|
953
|
+
DW FMCom_setFreqD0_CH2_SL1, FMCom_setFreqD0_CH2_SL2, FMCom_setFreqD0_CH2_SL3, FMCom_null
|
|
954
|
+
DW FMCom_null, FMCom_null, FMCom_null, FMCom_null
|
|
955
|
+
|
|
956
|
+
DW FMCom_setFreqD0_CH0_W, FMCom_setFreqD0_CH1_W, FMCom_setFreqD0_CH2_W, FMCom_null ; B0-BF
|
|
957
|
+
DW FMCom_setFreqD1_CH0_W, FMCom_setFreqD1_CH1_W, FMCom_setFreqD1_CH2_W, FMCom_null
|
|
958
|
+
DW FMCom_setFreqD0_CH2_SL1_W, FMCom_setFreqD0_CH2_SL2_W, FMCom_setFreqD0_CH2_SL3_W, FMCom_null
|
|
959
|
+
DW FMCom_null, FMCom_null, FMCom_null, FMCom_null
|
|
960
|
+
|
|
961
|
+
DW FMCom_setTLD_CH0_SL0, FMCom_setTLD_CH1_SL0, FMCom_setTLD_CH2_SL0, FMCom_null ; C0-CF
|
|
962
|
+
DW FMCom_setTLD_CH0_SL1, FMCom_setTLD_CH1_SL1, FMCom_setTLD_CH2_SL1, FMCom_null
|
|
963
|
+
DW FMCom_setTLD_CH0_SL2, FMCom_setTLD_CH1_SL2, FMCom_setTLD_CH2_SL2, FMCom_null
|
|
964
|
+
DW FMCom_setTLD_CH0_SL3, FMCom_setTLD_CH1_SL3, FMCom_setTLD_CH2_SL3, FMCom_null
|
|
965
|
+
|
|
966
|
+
DW FMCom_setTLD_CH0_SL0_W, FMCom_setTLD_CH1_SL0_W, FMCom_setTLD_CH2_SL0_W, FMCom_null ; D0-DF
|
|
967
|
+
DW FMCom_setTLD_CH0_SL1_W, FMCom_setTLD_CH1_SL1_W, FMCom_setTLD_CH2_SL1_W, FMCom_null
|
|
968
|
+
DW FMCom_setTLD_CH0_SL2_W, FMCom_setTLD_CH1_SL2_W, FMCom_setTLD_CH2_SL2_W, FMCom_null
|
|
969
|
+
DW FMCom_setTLD_CH0_SL3_W, FMCom_setTLD_CH1_SL3_W, FMCom_setTLD_CH2_SL3_W, FMCom_null
|
|
970
|
+
|
|
971
|
+
DW FMCom_setRegs0_N1, FMCom_setRegs0_N2, FMCom_setRegs0_N3, FMCom_setRegs0_N4 ; E0-EF
|
|
972
|
+
DW FMCom_setRegs0_N5, FMCom_setRegs0_N6, FMCom_setRegs0_N7, FMCom_setRegs0_N8
|
|
973
|
+
DW FMCom_setRegs1_N1, FMCom_setRegs1_N2, FMCom_setRegs1_N3, FMCom_setRegs1_N4
|
|
974
|
+
DW FMCom_setRegs1_N5, FMCom_setRegs1_N6, FMCom_setRegs1_N7, FMCom_setRegs1_N8
|
|
975
|
+
|
|
976
|
+
DW FMCom_frameDelay ; F0
|
|
977
|
+
|
|
978
|
+
DW FMCom_null, FMCom_null, FMCom_null ; F1-F3
|
|
979
|
+
DW FMCom_null, FMCom_null, FMCom_null, FMCom_null ; F4-F7
|
|
980
|
+
|
|
981
|
+
DW FMCom_keyAdv ; F8
|
|
982
|
+
DW FMCom_LFO ; F9
|
|
983
|
+
DW FMCom_enableCH2SpeMode ; FA
|
|
984
|
+
DW FMCom_disableCH2SpeMode ; FB
|
|
985
|
+
DW FMCom_enableDAC ; FC
|
|
986
|
+
DW FMCom_disableDAC ; FD
|
|
987
|
+
|
|
988
|
+
DW FMCom_null ; FE
|
|
989
|
+
|
|
990
|
+
DW FMCom_loop ; FF
|
|
991
|
+
|
|
992
|
+
|
|
993
|
+
END
|