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,614 @@
|
|
|
1
|
+
// sprite-pipeline.js — R15 cross-game sprite-lift tools.
|
|
2
|
+
//
|
|
3
|
+
// Three primitives that close the gap between extractSpriteSheet and
|
|
4
|
+
// loadSpriteSheet for cross-platform sprite imports:
|
|
5
|
+
//
|
|
6
|
+
// 1. cropSpriteSheet — slice a tile-cell region from an existing
|
|
7
|
+
// tile-grid PNG; preserves PLTE.
|
|
8
|
+
// 2. quantizePngForPlatform — quantize an RGBA PNG to the target
|
|
9
|
+
// platform's per-subpalette index limit.
|
|
10
|
+
// 3. (followup) crossPlatformSpriteImport — extract+crop+quantize+manifest
|
|
11
|
+
// in one call. Lives here when shipped.
|
|
12
|
+
//
|
|
13
|
+
|
|
14
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
15
|
+
import { PNG } from "pngjs";
|
|
16
|
+
import { jsonContent, safeTool } from "../util.js";
|
|
17
|
+
import { intentZod, resolveIntent, intentError } from "../../platforms/common/intent.js";
|
|
18
|
+
import { getDefaultPalette } from "../../platforms/common/default-palette.js";
|
|
19
|
+
|
|
20
|
+
// ── Per-platform palette/index constraints ───────────────────────────
|
|
21
|
+
// Used by quantizePngForPlatform. These are the agent-facing "how many
|
|
22
|
+
// distinct colors will fit in a tile" rules, NOT the master-palette
|
|
23
|
+
// size of the platform. For NES the on-cart hardware allows only 4
|
|
24
|
+
// indices per BG/sprite subpalette; SNES varies by BPP; Genesis is 16
|
|
25
|
+
// per palette line; etc.
|
|
26
|
+
const PLATFORM_LIMITS = {
|
|
27
|
+
nes: { maxColors: 4, reason: "NES tile attribute selects one of 4 subpalettes; each holds 4 colors (index 0 transparent for sprites)." },
|
|
28
|
+
gb: { maxColors: 4, reason: "DMG tiles are 2bpp → 4 colors per tile, fixed greyscale ramp." },
|
|
29
|
+
gbc: { maxColors: 4, reason: "GBC tile attribute selects one of 8 BG palettes; each holds 4 colors. Use loadTilemap to control palette assignment." },
|
|
30
|
+
sms: { maxColors: 16, reason: "SMS VDP is 4bpp; one 16-color palette for BG, one for sprites." },
|
|
31
|
+
gg: { maxColors: 16, reason: "Game Gear VDP is 4bpp; one 16-color palette for BG, one for sprites." },
|
|
32
|
+
genesis: { maxColors: 16, reason: "Genesis VDP is 4bpp; 4 palette lines × 16 colors each." },
|
|
33
|
+
snes: { maxColors: 16, reason: "SNES default — assumes 4bpp tiles. For 2bpp pass maxColors=4 explicitly; for 8bpp pass maxColors=256." },
|
|
34
|
+
gba: { maxColors: 16, reason: "GBA default — 4bpp tiles. Mode 4 uses 256-color tiles; pass maxColors=256 for that case." },
|
|
35
|
+
atari7800: { maxColors: 4, reason: "MARIA palette select uses 2bpp tiles by default; per-palette 4 colors." },
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Read a PNG, return an indexed view: {width, height, indexed?, palette?, rgba}.
|
|
40
|
+
* If the PNG was already indexed (PLTE present), `indexed` is a Uint8Array
|
|
41
|
+
* of length width*height of palette indices. Otherwise `indexed` is undefined
|
|
42
|
+
* and `rgba` is the unpacked RGBA pixel buffer.
|
|
43
|
+
*/
|
|
44
|
+
function readPng(buf) {
|
|
45
|
+
const png = PNG.sync.read(buf);
|
|
46
|
+
const out = {
|
|
47
|
+
width: png.width,
|
|
48
|
+
height: png.height,
|
|
49
|
+
rgba: png.data, // Uint8Array, width*height*4
|
|
50
|
+
palette: png.palette || null,
|
|
51
|
+
};
|
|
52
|
+
// pngjs decodes indexed PNGs into RGBA already; we get the palette via .palette.
|
|
53
|
+
// To preserve PLTE on crop, we round-trip RGB → nearest palette index using the
|
|
54
|
+
// existing PLTE.
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Render an indexed image back to a PNG with a PLTE. `palette` is
|
|
60
|
+
* an array of [r,g,b] (or [r,g,b,a]) tuples.
|
|
61
|
+
*/
|
|
62
|
+
function writeIndexedPng(width, height, indices, palette) {
|
|
63
|
+
// pngjs doesn't have first-class indexed output. We emit RGBA from
|
|
64
|
+
// the palette table — the result is the same pixel data even if not
|
|
65
|
+
// colortype-3. Callers that want strict PLTE can re-encode externally;
|
|
66
|
+
// for our use cases (cross-tool transport) RGBA is equivalent.
|
|
67
|
+
const out = new PNG({ width, height });
|
|
68
|
+
for (let i = 0; i < indices.length; i++) {
|
|
69
|
+
const c = palette[indices[i]] ?? [0, 0, 0, 255];
|
|
70
|
+
out.data[i * 4 + 0] = c[0];
|
|
71
|
+
out.data[i * 4 + 1] = c[1];
|
|
72
|
+
out.data[i * 4 + 2] = c[2];
|
|
73
|
+
out.data[i * 4 + 3] = c[3] ?? 255;
|
|
74
|
+
}
|
|
75
|
+
return PNG.sync.write(out);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Render an RGBA image back to a PNG. `rgba` is a Uint8Array of length width*height*4.
|
|
80
|
+
*/
|
|
81
|
+
function writeRgbaPng(width, height, rgba) {
|
|
82
|
+
const out = new PNG({ width, height });
|
|
83
|
+
out.data.set(rgba);
|
|
84
|
+
return PNG.sync.write(out);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// ── cropSpriteSheet ─────────────────────────────────────────────────
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Crop a rectangular region of tile cells from a tile-grid PNG.
|
|
91
|
+
*
|
|
92
|
+
* @param {{path:string, tileX:number, tileY:number, tileW:number, tileH:number,
|
|
93
|
+
* tileSize?:number, outputPath:string}} args
|
|
94
|
+
*/
|
|
95
|
+
async function cropSpriteSheetImpl({ path, tileX, tileY, tileW, tileH, tileSize = 8, outputPath, intent }) {
|
|
96
|
+
const d = resolveIntent(intent);
|
|
97
|
+
const buf = await readFile(path);
|
|
98
|
+
const png = readPng(buf);
|
|
99
|
+
const pxX = tileX * tileSize;
|
|
100
|
+
const pxY = tileY * tileSize;
|
|
101
|
+
const pxW = tileW * tileSize;
|
|
102
|
+
const pxH = tileH * tileSize;
|
|
103
|
+
if (pxX < 0 || pxY < 0 || pxX + pxW > png.width || pxY + pxH > png.height) {
|
|
104
|
+
throw new Error(
|
|
105
|
+
`cropSpriteSheet: region (${tileX},${tileY}) ${tileW}×${tileH} cells at ${tileSize}px ` +
|
|
106
|
+
`(= ${pxW}×${pxH}px starting at ${pxX},${pxY}) extends past image bounds ` +
|
|
107
|
+
`${png.width}×${png.height}.`
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
// Slice the RGBA pixels into a fresh buffer.
|
|
111
|
+
const cropped = new Uint8Array(pxW * pxH * 4);
|
|
112
|
+
for (let y = 0; y < pxH; y++) {
|
|
113
|
+
const srcRow = (pxY + y) * png.width + pxX;
|
|
114
|
+
const dstRow = y * pxW;
|
|
115
|
+
for (let x = 0; x < pxW; x++) {
|
|
116
|
+
const s = (srcRow + x) * 4;
|
|
117
|
+
const d = (dstRow + x) * 4;
|
|
118
|
+
cropped[d + 0] = png.rgba[s + 0];
|
|
119
|
+
cropped[d + 1] = png.rgba[s + 1];
|
|
120
|
+
cropped[d + 2] = png.rgba[s + 2];
|
|
121
|
+
cropped[d + 3] = png.rgba[s + 3];
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// If the source had a PLTE we want to preserve it on output (the loader
|
|
125
|
+
// tools look at PLTE to figure out the index→color mapping). The easiest
|
|
126
|
+
// way is to re-emit using the existing palette via nearest-match.
|
|
127
|
+
let outBuf;
|
|
128
|
+
if (png.palette) {
|
|
129
|
+
// Map each cropped pixel to the nearest entry in png.palette.
|
|
130
|
+
const indices = new Uint8Array(pxW * pxH);
|
|
131
|
+
for (let i = 0; i < indices.length; i++) {
|
|
132
|
+
const r = cropped[i * 4 + 0];
|
|
133
|
+
const g = cropped[i * 4 + 1];
|
|
134
|
+
const b = cropped[i * 4 + 2];
|
|
135
|
+
indices[i] = nearestColor(r, g, b, png.palette);
|
|
136
|
+
}
|
|
137
|
+
outBuf = writeIndexedPng(pxW, pxH, indices, png.palette);
|
|
138
|
+
} else {
|
|
139
|
+
outBuf = writeRgbaPng(pxW, pxH, cropped);
|
|
140
|
+
}
|
|
141
|
+
await writeFile(outputPath, outBuf);
|
|
142
|
+
return {
|
|
143
|
+
path: outputPath,
|
|
144
|
+
intent: d.intent,
|
|
145
|
+
width: pxW,
|
|
146
|
+
height: pxH,
|
|
147
|
+
tileWidth: tileW,
|
|
148
|
+
tileHeight: tileH,
|
|
149
|
+
tileSize,
|
|
150
|
+
paletteEntries: png.palette ? png.palette.length : null,
|
|
151
|
+
note: png.palette
|
|
152
|
+
? "Source PLTE preserved via nearest-neighbour remap."
|
|
153
|
+
: "Source was truecolor — output is also truecolor. Use quantizePngForPlatform to reduce to an indexed palette.",
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// ── quantizePngForPlatform ──────────────────────────────────────────
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Quantize an RGBA PNG down to the target platform's index limit.
|
|
161
|
+
* Modes:
|
|
162
|
+
* "frequency" — pick the N most-used colors; nearest-match the rest.
|
|
163
|
+
* "luminance" — same picking as frequency, but sort palette by luma so
|
|
164
|
+
* index 0 is the lightest color (convention: backdrop).
|
|
165
|
+
* "platform-master" — (NES only for now) snap to the NES master
|
|
166
|
+
* palette before picking N. Future platforms TBD.
|
|
167
|
+
*
|
|
168
|
+
* @param {{path:string, platform:string, outputPath:string, mode?:string, maxColors?:number}} args
|
|
169
|
+
*/
|
|
170
|
+
async function quantizePngForPlatformImpl({ path, platform, outputPath, intent, mode, maxColors }) {
|
|
171
|
+
const d = resolveIntent(intent);
|
|
172
|
+
// Mode default comes from intent if caller didn't pass one.
|
|
173
|
+
if (mode === undefined) mode = d.quantizeMode;
|
|
174
|
+
const limit = PLATFORM_LIMITS[platform];
|
|
175
|
+
if (!limit && maxColors === undefined) {
|
|
176
|
+
throw new Error(intentError(
|
|
177
|
+
`quantizePngForPlatform: unknown platform '${platform}'.`,
|
|
178
|
+
`Supported: ${Object.keys(PLATFORM_LIMITS).join(", ")}. Or pass maxColors explicitly to override.`,
|
|
179
|
+
d,
|
|
180
|
+
));
|
|
181
|
+
}
|
|
182
|
+
const targetN = maxColors ?? limit.maxColors;
|
|
183
|
+
if (targetN < 1 || targetN > 256) {
|
|
184
|
+
throw new Error(`quantizePngForPlatform: maxColors must be 1..256, got ${targetN}.`);
|
|
185
|
+
}
|
|
186
|
+
if (!["frequency", "luminance", "platform-master"].includes(mode)) {
|
|
187
|
+
throw new Error(`quantizePngForPlatform: unknown mode '${mode}'. Use frequency | luminance | platform-master.`);
|
|
188
|
+
}
|
|
189
|
+
const buf = await readFile(path);
|
|
190
|
+
const png = readPng(buf);
|
|
191
|
+
const npx = png.width * png.height;
|
|
192
|
+
|
|
193
|
+
// ── Step 1: count color frequencies (packed RGB key) ────────────
|
|
194
|
+
const counts = new Map();
|
|
195
|
+
for (let i = 0; i < npx; i++) {
|
|
196
|
+
const r = png.rgba[i * 4 + 0];
|
|
197
|
+
const g = png.rgba[i * 4 + 1];
|
|
198
|
+
const b = png.rgba[i * 4 + 2];
|
|
199
|
+
// Treat fully-transparent pixels as a special "skip" — they don't
|
|
200
|
+
// need a color slot, just an alpha=0 mark in output.
|
|
201
|
+
const key = (r << 16) | (g << 8) | b;
|
|
202
|
+
counts.set(key, (counts.get(key) ?? 0) + 1);
|
|
203
|
+
}
|
|
204
|
+
const sorted = [...counts.entries()].sort((a, b) => b[1] - a[1]);
|
|
205
|
+
let palette = sorted.slice(0, targetN).map(([k]) => [(k >> 16) & 0xFF, (k >> 8) & 0xFF, k & 0xFF, 255]);
|
|
206
|
+
|
|
207
|
+
// ── Step 2: apply mode-specific transform ────────────────────────
|
|
208
|
+
if (mode === "luminance") {
|
|
209
|
+
// Sort so index 0 = lightest. Luma = 0.299R + 0.587G + 0.114B.
|
|
210
|
+
palette.sort((a, b) => {
|
|
211
|
+
const la = 0.299 * a[0] + 0.587 * a[1] + 0.114 * a[2];
|
|
212
|
+
const lb = 0.299 * b[0] + 0.587 * b[1] + 0.114 * b[2];
|
|
213
|
+
return lb - la;
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
if (mode === "platform-master") {
|
|
217
|
+
if (platform === "nes") {
|
|
218
|
+
palette = palette.map(([r, g, b]) => snapToNesMaster(r, g, b));
|
|
219
|
+
} else {
|
|
220
|
+
// platform-master not yet implemented for non-NES platforms.
|
|
221
|
+
// Under intent:"homebrew" this is the auto-resolved default, so
|
|
222
|
+
// silently fall back to luminance (still better than frequency
|
|
223
|
+
// for the "indexed PNG with backdrop at idx 0" homebrew case).
|
|
224
|
+
// Tests against an explicit mode:"platform-master" with non-NES
|
|
225
|
+
// platforms still want this to be informational, not an error.
|
|
226
|
+
mode = "luminance";
|
|
227
|
+
palette.sort((a, b) => {
|
|
228
|
+
const la = 0.299 * a[0] + 0.587 * a[1] + 0.114 * a[2];
|
|
229
|
+
const lb = 0.299 * b[0] + 0.587 * b[1] + 0.114 * b[2];
|
|
230
|
+
return lb - la;
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// ── Step 3: map every pixel to nearest palette index ────────────
|
|
236
|
+
const indices = new Uint8Array(npx);
|
|
237
|
+
for (let i = 0; i < npx; i++) {
|
|
238
|
+
const r = png.rgba[i * 4 + 0];
|
|
239
|
+
const g = png.rgba[i * 4 + 1];
|
|
240
|
+
const b = png.rgba[i * 4 + 2];
|
|
241
|
+
indices[i] = nearestColor(r, g, b, palette);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
const outBuf = writeIndexedPng(png.width, png.height, indices, palette);
|
|
245
|
+
await writeFile(outputPath, outBuf);
|
|
246
|
+
return {
|
|
247
|
+
path: outputPath,
|
|
248
|
+
intent: d.intent,
|
|
249
|
+
width: png.width,
|
|
250
|
+
height: png.height,
|
|
251
|
+
paletteEntries: palette.length,
|
|
252
|
+
palette: palette.map(([r, g, b]) => "#" + [r, g, b].map((v) => v.toString(16).padStart(2, "0")).join("")),
|
|
253
|
+
mode,
|
|
254
|
+
inputUniqueColors: counts.size,
|
|
255
|
+
note: counts.size > targetN
|
|
256
|
+
? `Quantized ${counts.size} → ${targetN} colors. Lost colors mapped to nearest neighbour.`
|
|
257
|
+
: `Source had ${counts.size} colors, all preserved.`,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/** Find the nearest color in `palette` to (r,g,b). Returns the index. */
|
|
262
|
+
function nearestColor(r, g, b, palette) {
|
|
263
|
+
let best = 0;
|
|
264
|
+
let bestD = Infinity;
|
|
265
|
+
for (let i = 0; i < palette.length; i++) {
|
|
266
|
+
const [pr, pg, pb] = palette[i];
|
|
267
|
+
const dr = r - pr, dg = g - pg, db = b - pb;
|
|
268
|
+
const d = dr * dr + dg * dg + db * db;
|
|
269
|
+
if (d < bestD) { bestD = d; best = i; }
|
|
270
|
+
}
|
|
271
|
+
return best;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// ── NES master palette (NTSC, FCEUX defaults) ────────────────────────
|
|
275
|
+
// 64 entries; 2C02 hardware index → approximate sRGB. Used by
|
|
276
|
+
// platform-master mode to snap arbitrary colors to the hardware grid
|
|
277
|
+
// before color reduction.
|
|
278
|
+
const NES_MASTER = [
|
|
279
|
+
[0x60, 0x60, 0x60], [0x00, 0x20, 0x80], [0x00, 0x00, 0xA0], [0x40, 0x00, 0x90],
|
|
280
|
+
[0x80, 0x00, 0x60], [0xA0, 0x00, 0x30], [0xA0, 0x00, 0x00], [0x80, 0x20, 0x00],
|
|
281
|
+
[0x60, 0x40, 0x00], [0x20, 0x60, 0x00], [0x00, 0x80, 0x00], [0x00, 0x60, 0x30],
|
|
282
|
+
[0x00, 0x40, 0x60], [0x00, 0x00, 0x00], [0x00, 0x00, 0x00], [0x00, 0x00, 0x00],
|
|
283
|
+
[0xA0, 0xA0, 0xA0], [0x00, 0x60, 0xC0], [0x20, 0x40, 0xE0], [0x80, 0x00, 0xF0],
|
|
284
|
+
[0xC0, 0x00, 0xC0], [0xE0, 0x00, 0x60], [0xF0, 0x20, 0x00], [0xC0, 0x60, 0x00],
|
|
285
|
+
[0x80, 0x80, 0x00], [0x40, 0xA0, 0x00], [0x00, 0xC0, 0x00], [0x20, 0xA0, 0x60],
|
|
286
|
+
[0x00, 0x80, 0xA0], [0x00, 0x00, 0x00], [0x00, 0x00, 0x00], [0x00, 0x00, 0x00],
|
|
287
|
+
[0xF0, 0xF0, 0xF0], [0x60, 0xA0, 0xF0], [0x80, 0x80, 0xF0], [0xC0, 0x60, 0xF0],
|
|
288
|
+
[0xF0, 0x40, 0xF0], [0xF0, 0x60, 0xA0], [0xF0, 0x80, 0x60], [0xE0, 0xA0, 0x40],
|
|
289
|
+
[0xC0, 0xC0, 0x20], [0x80, 0xE0, 0x40], [0x40, 0xE0, 0x80], [0x40, 0xE0, 0xC0],
|
|
290
|
+
[0x00, 0xE0, 0xE0], [0x60, 0x60, 0x60], [0x00, 0x00, 0x00], [0x00, 0x00, 0x00],
|
|
291
|
+
[0xF0, 0xF0, 0xF0], [0xA0, 0xD0, 0xF0], [0xC0, 0xC0, 0xF0], [0xE0, 0xC0, 0xF0],
|
|
292
|
+
[0xF0, 0xC0, 0xF0], [0xF0, 0xC0, 0xE0], [0xF0, 0xC0, 0xC0], [0xF0, 0xD0, 0xA0],
|
|
293
|
+
[0xE0, 0xE0, 0x80], [0xC0, 0xE0, 0x80], [0xA0, 0xF0, 0xA0], [0xA0, 0xF0, 0xC0],
|
|
294
|
+
[0xA0, 0xF0, 0xE0], [0xA0, 0xA0, 0xA0], [0x00, 0x00, 0x00], [0x00, 0x00, 0x00],
|
|
295
|
+
];
|
|
296
|
+
|
|
297
|
+
export function snapToNesMasterPublic(r, g, b) {
|
|
298
|
+
return snapToNesMaster(r, g, b);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
function snapToNesMaster(r, g, b) {
|
|
302
|
+
let best = NES_MASTER[0];
|
|
303
|
+
let bestD = Infinity;
|
|
304
|
+
for (const [mr, mg, mb] of NES_MASTER) {
|
|
305
|
+
const dr = r - mr, dg = g - mg, db = b - mb;
|
|
306
|
+
const d = dr * dr + dg * dg + db * db;
|
|
307
|
+
if (d < bestD) { bestD = d; best = [mr, mg, mb]; }
|
|
308
|
+
}
|
|
309
|
+
return [best[0], best[1], best[2], 255];
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// ── crossPlatformSpriteImport ───────────────────────────────────────
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* One-call wrapper: extractSpriteSheet → cropSpriteSheet → quantizePngForPlatform
|
|
316
|
+
* → optional TexturePacker manifest emission. The output PNG + manifest pair is
|
|
317
|
+
* exactly what loadSpriteSheet expects.
|
|
318
|
+
*
|
|
319
|
+
* @param {{sourceRom:string, sourcePlatform:string, sourceBank?:number,
|
|
320
|
+
* sourceOffset?:number, sourceTileX:number, sourceTileY:number,
|
|
321
|
+
* sourceTileW:number, sourceTileH:number,
|
|
322
|
+
* targetPlatform:string, outputPng:string, outputManifest?:string,
|
|
323
|
+
* quantizeMode?:string, tilesPerRow?:number,
|
|
324
|
+
* namePrefix?:string,
|
|
325
|
+
* paletteIndex?:number,
|
|
326
|
+
* paletteFromEmulator?:boolean,
|
|
327
|
+
* intent?:string,
|
|
328
|
+
* sessionKey?:string}} args
|
|
329
|
+
*/
|
|
330
|
+
async function crossPlatformSpriteImportImpl(args) {
|
|
331
|
+
const {
|
|
332
|
+
sourceRom, sourcePlatform, sourceBank, sourceOffset,
|
|
333
|
+
sourceTileX, sourceTileY, sourceTileW, sourceTileH,
|
|
334
|
+
targetPlatform, outputPng, outputManifest,
|
|
335
|
+
quantizeMode, tilesPerRow = 16,
|
|
336
|
+
namePrefix = "tile",
|
|
337
|
+
paletteIndex = 0,
|
|
338
|
+
paletteFromEmulator,
|
|
339
|
+
intent,
|
|
340
|
+
sessionKey,
|
|
341
|
+
} = args;
|
|
342
|
+
const d = resolveIntent(intent);
|
|
343
|
+
// Under rom-hack, skip the auto-quantize step — preserve source bytes
|
|
344
|
+
// verbatim (just re-encode for the target platform's tile bit layout).
|
|
345
|
+
// Under homebrew, run with quantize on; default quantizeMode comes
|
|
346
|
+
// from intent if caller didn't override.
|
|
347
|
+
const resolvedQuantizeMode = quantizeMode ?? d.quantizeMode;
|
|
348
|
+
|
|
349
|
+
// Lazy imports — keep this module's top-level light.
|
|
350
|
+
const { readFile, writeFile, mkdir } = await import("node:fs/promises");
|
|
351
|
+
const path = await import("node:path");
|
|
352
|
+
const { renderTilesGrid } = await import("../../platforms/common/render-tiles.js");
|
|
353
|
+
const { TILE_SPECS } = await import("../../platforms/common/image-to-tiles.js");
|
|
354
|
+
const { bankToFileOffset } = await import("./rom-id.js");
|
|
355
|
+
|
|
356
|
+
const spec = TILE_SPECS[sourcePlatform];
|
|
357
|
+
if (!spec) {
|
|
358
|
+
throw new Error(`crossPlatformSpriteImport: source platform '${sourcePlatform}' unsupported. Supported: ${Object.keys(TILE_SPECS).join(", ")}.`);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// ── Step 1: load + slice source ROM into tileBytes ──────────────
|
|
362
|
+
const romBytes = new Uint8Array(await readFile(sourceRom));
|
|
363
|
+
let tileSourceBytes;
|
|
364
|
+
let resolvedOffset;
|
|
365
|
+
if (sourceBank !== undefined) {
|
|
366
|
+
resolvedOffset = bankToFileOffset(sourcePlatform, romBytes, sourceBank);
|
|
367
|
+
} else if (sourceOffset !== undefined) {
|
|
368
|
+
resolvedOffset = sourceOffset;
|
|
369
|
+
} else if (sourcePlatform === "nes") {
|
|
370
|
+
// Default for NES = whole CHR rom of the iNES file.
|
|
371
|
+
const { extractChrFromINes } = await import("../../rom-id/patch.js");
|
|
372
|
+
const chr = extractChrFromINes(romBytes);
|
|
373
|
+
if (!chr) {
|
|
374
|
+
throw new Error("crossPlatformSpriteImport: NES source is CHR-RAM (no graphics in the file). Pass sourceOffset against a running emulator's pattern-table dump instead.");
|
|
375
|
+
}
|
|
376
|
+
tileSourceBytes = chr;
|
|
377
|
+
} else {
|
|
378
|
+
throw new Error("crossPlatformSpriteImport: need sourceBank or sourceOffset for non-NES sources.");
|
|
379
|
+
}
|
|
380
|
+
if (!tileSourceBytes) {
|
|
381
|
+
const bytesPerTile = (8 * 8 * spec.bpp) / 8;
|
|
382
|
+
// Take enough tiles to cover the requested region (in the grid layout).
|
|
383
|
+
const needTiles = (sourceTileY + sourceTileH) * tilesPerRow;
|
|
384
|
+
const endOffset = resolvedOffset + needTiles * bytesPerTile;
|
|
385
|
+
if (endOffset > romBytes.length) {
|
|
386
|
+
throw new Error(`crossPlatformSpriteImport: requested region extends past ROM size (need 0x${endOffset.toString(16)}, have 0x${romBytes.length.toString(16)}).`);
|
|
387
|
+
}
|
|
388
|
+
tileSourceBytes = romBytes.slice(resolvedOffset, endOffset);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// ── Step 2: resolve the source palette ──────────────────────────
|
|
392
|
+
// Without this, the internal extract step would render the tile bytes
|
|
393
|
+
// using the per-platform default palette (grayscale-toned on most
|
|
394
|
+
// targets), losing the artist-facing colors that the standalone
|
|
395
|
+
// `extractSpriteSheet` would have surfaced. We mirror the same
|
|
396
|
+
// palette-resolution logic extractSpriteSheet uses (see rom-id.js):
|
|
397
|
+
// - Under intent:"homebrew" (d.colorMode === "live-or-platform"),
|
|
398
|
+
// default to reading the live emulator palette when a ROM is
|
|
399
|
+
// loaded; fall back to the per-platform default palette otherwise.
|
|
400
|
+
// - Under intent:"rom-hack", default to grayscale (no override).
|
|
401
|
+
// - Explicit paletteFromEmulator wins over the intent default.
|
|
402
|
+
// After this block, paletteOverride is either a [[r,g,b], ...] array
|
|
403
|
+
// or undefined (in which case renderTilesGrid uses its default).
|
|
404
|
+
let resolvedPaletteFromEmulator = paletteFromEmulator;
|
|
405
|
+
if (resolvedPaletteFromEmulator === undefined) {
|
|
406
|
+
resolvedPaletteFromEmulator = d.colorMode === "live-or-platform";
|
|
407
|
+
}
|
|
408
|
+
let paletteOverride;
|
|
409
|
+
let paletteSource = "default (grayscale)";
|
|
410
|
+
if (resolvedPaletteFromEmulator) {
|
|
411
|
+
try {
|
|
412
|
+
const { decodeLivePalette } = await import("./preview-tile.js");
|
|
413
|
+
const { getHostOrNull } = await import("../state.js");
|
|
414
|
+
const host = sessionKey ? getHostOrNull(sessionKey) : null;
|
|
415
|
+
if (host) {
|
|
416
|
+
paletteOverride = decodeLivePalette(host, sourcePlatform, paletteIndex, spec);
|
|
417
|
+
paletteSource = `emulator (subpalette ${paletteIndex})`;
|
|
418
|
+
} else if (paletteFromEmulator === true) {
|
|
419
|
+
// Caller EXPLICITLY asked for the emulator palette but no ROM
|
|
420
|
+
// is loaded. Surface the issue instead of silently falling back
|
|
421
|
+
// — they asked for live colors, we can't give them, that's a
|
|
422
|
+
// real error worth knowing about. Mirrors the same behavior in
|
|
423
|
+
// extractSpriteSheet (see rom-id.js).
|
|
424
|
+
throw new Error("crossPlatformSpriteImport: paletteFromEmulator:true requires a loaded ROM. Call loadMedia first.");
|
|
425
|
+
} else if (d.colorMode === "live-or-platform") {
|
|
426
|
+
// Intent default kicked in (no explicit paletteFromEmulator)
|
|
427
|
+
// and no ROM is loaded. Fall back to the per-platform default
|
|
428
|
+
// palette so the agent still gets COLOR, not grayscale —
|
|
429
|
+
// better artist experience than the ramp.
|
|
430
|
+
const { getDefaultPalette, DEFAULT_PALETTES } = await import("../../platforms/common/default-palette.js");
|
|
431
|
+
if (DEFAULT_PALETTES[sourcePlatform]) {
|
|
432
|
+
paletteOverride = getDefaultPalette(sourcePlatform);
|
|
433
|
+
paletteSource = `per-platform default (no ROM loaded; ${paletteOverride.length}-color)`;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
} catch (e) {
|
|
437
|
+
// Re-throw the explicit-flag-no-rom case; soft-fail anything else
|
|
438
|
+
// (e.g. platforms whose live-palette decode isn't wired yet) so
|
|
439
|
+
// the agent gets a working pipeline + a hint in paletteSource.
|
|
440
|
+
if (paletteFromEmulator === true) throw e;
|
|
441
|
+
paletteSource = `default (grayscale; live-palette read failed: ${e.message})`;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
// ── Step 3: render the source tile bank to a temp PNG ───────────
|
|
446
|
+
const sourceBankPng = renderTilesGrid({ platform: sourcePlatform, tileBytes: tileSourceBytes, tilesPerRow, paletteOverride });
|
|
447
|
+
// Persist to a sibling temp path so cropSpriteSheetImpl can read it.
|
|
448
|
+
await mkdir(path.dirname(outputPng), { recursive: true });
|
|
449
|
+
const bankTmp = outputPng + ".source-bank.png";
|
|
450
|
+
await writeFile(bankTmp, sourceBankPng);
|
|
451
|
+
|
|
452
|
+
// ── Step 4: crop to the requested tile region ───────────────────
|
|
453
|
+
const cropTmp = outputPng + ".crop.png";
|
|
454
|
+
await cropSpriteSheetImpl({
|
|
455
|
+
path: bankTmp,
|
|
456
|
+
tileX: sourceTileX, tileY: sourceTileY,
|
|
457
|
+
tileW: sourceTileW, tileH: sourceTileH,
|
|
458
|
+
outputPath: cropTmp,
|
|
459
|
+
intent: d.intent,
|
|
460
|
+
});
|
|
461
|
+
|
|
462
|
+
// ── Step 5: quantize to the target platform's palette ──────────
|
|
463
|
+
// Under intent:"homebrew" (d.autoQuantize=true) we re-quantize to the
|
|
464
|
+
// target platform's per-subpalette limit. Under rom-hack we copy the
|
|
465
|
+
// cropped PNG verbatim — preserves source bytes for forensic workflows
|
|
466
|
+
// where the caller is doing palette work outside the pipeline.
|
|
467
|
+
let quantResult;
|
|
468
|
+
if (d.autoQuantize) {
|
|
469
|
+
quantResult = await quantizePngForPlatformImpl({
|
|
470
|
+
path: cropTmp,
|
|
471
|
+
platform: targetPlatform,
|
|
472
|
+
outputPath: outputPng,
|
|
473
|
+
mode: resolvedQuantizeMode,
|
|
474
|
+
intent: d.intent,
|
|
475
|
+
});
|
|
476
|
+
} else {
|
|
477
|
+
// Copy the cropped PNG to the requested output path unchanged.
|
|
478
|
+
const cropBytes = await readFile(cropTmp);
|
|
479
|
+
await writeFile(outputPng, cropBytes);
|
|
480
|
+
const cropPng = readPng(cropBytes);
|
|
481
|
+
quantResult = {
|
|
482
|
+
path: outputPng,
|
|
483
|
+
intent: d.intent,
|
|
484
|
+
width: cropPng.width,
|
|
485
|
+
height: cropPng.height,
|
|
486
|
+
paletteEntries: cropPng.palette ? cropPng.palette.length : null,
|
|
487
|
+
palette: cropPng.palette
|
|
488
|
+
? cropPng.palette.map((c) => "#" + [c[0], c[1], c[2]].map((v) => v.toString(16).padStart(2, "0")).join(""))
|
|
489
|
+
: [],
|
|
490
|
+
mode: "preserved (rom-hack: no quantize)",
|
|
491
|
+
note: "intent:rom-hack — auto-quantize skipped, source bytes preserved verbatim.",
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
// ── Step 6: optional manifest. One named entry per 8×8 tile in the
|
|
496
|
+
// crop region (`namePrefix_row_col`), in row-major order.
|
|
497
|
+
let manifestInfo = null;
|
|
498
|
+
if (outputManifest) {
|
|
499
|
+
const frames = {};
|
|
500
|
+
for (let r = 0; r < sourceTileH; r++) {
|
|
501
|
+
for (let c = 0; c < sourceTileW; c++) {
|
|
502
|
+
frames[`${namePrefix}_${r}_${c}`] = {
|
|
503
|
+
frame: { x: c * 8, y: r * 8, w: 8, h: 8 },
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
const manifest = { frames, meta: { app: "romdev/crossPlatformSpriteImport", source: sourceRom } };
|
|
508
|
+
await writeFile(outputManifest, JSON.stringify(manifest, null, 2));
|
|
509
|
+
manifestInfo = { path: outputManifest, frames: Object.keys(frames).length };
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
// Cleanup intermediate files — keep the result small.
|
|
513
|
+
const { unlink } = await import("node:fs/promises");
|
|
514
|
+
await unlink(bankTmp).catch(() => {});
|
|
515
|
+
await unlink(cropTmp).catch(() => {});
|
|
516
|
+
|
|
517
|
+
return {
|
|
518
|
+
outputPng,
|
|
519
|
+
intent: d.intent,
|
|
520
|
+
width: quantResult.width,
|
|
521
|
+
height: quantResult.height,
|
|
522
|
+
palette: quantResult.palette,
|
|
523
|
+
paletteEntries: quantResult.paletteEntries,
|
|
524
|
+
quantizeMode: d.autoQuantize ? resolvedQuantizeMode : "skipped",
|
|
525
|
+
sourcePlatform,
|
|
526
|
+
targetPlatform,
|
|
527
|
+
sourceTileRegion: { x: sourceTileX, y: sourceTileY, w: sourceTileW, h: sourceTileH },
|
|
528
|
+
// R23f: surface the source palette source so the agent can verify
|
|
529
|
+
// the live-emulator read happened (vs falling back to grayscale).
|
|
530
|
+
// Matches the same field on extractSpriteSheet's response.
|
|
531
|
+
sourcePaletteSource: paletteSource,
|
|
532
|
+
manifest: manifestInfo,
|
|
533
|
+
nextStep: outputManifest
|
|
534
|
+
? `loadSpriteSheet({ pngPath:"${outputPng}", manifestPath:"${outputManifest}", platform:"${targetPlatform}", intent:"${d.intent}" }) — produces tile bytes ready to link into your ROM.`
|
|
535
|
+
: `Pass outputManifest:"..." next time to get a TexturePacker-style manifest, or hand-author one — minimal shape is {frames:{name:{frame:{x,y,w,h}}}}.`,
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
// ── Register all three tools ─────────────────────────────────────────
|
|
540
|
+
|
|
541
|
+
export function registerSpritePipelineTools(server, z, sessionKey) {
|
|
542
|
+
server.tool(
|
|
543
|
+
"cropSpriteSheet",
|
|
544
|
+
"Crop a rectangular region of tile cells out of an existing tile-grid PNG. " +
|
|
545
|
+
"Typical workflow: extractSpriteSheet emits a full CHR bank as a tile-grid PNG, " +
|
|
546
|
+
"then cropSpriteSheet pulls out just the slice that contains your sprite (e.g. the " +
|
|
547
|
+
"bike from Excitebike's bank 1). Preserves the source's PLTE (palette) if present " +
|
|
548
|
+
"via nearest-neighbour remap. Output is a smaller PNG ready to feed into " +
|
|
549
|
+
"loadSpriteSheet or quantizePngForPlatform.\n\n" +
|
|
550
|
+
"All coordinates are in TILE CELLS (default 8 px each), not pixels — matches the " +
|
|
551
|
+
"tile-grid mental model of extractSpriteSheet output.",
|
|
552
|
+
{
|
|
553
|
+
path: z.string().describe("Absolute path to the source PNG (typically from extractSpriteSheet)."),
|
|
554
|
+
tileX: z.number().int().min(0).describe("Leftmost tile column to include (0 = leftmost in source)."),
|
|
555
|
+
tileY: z.number().int().min(0).describe("Topmost tile row to include (0 = topmost in source)."),
|
|
556
|
+
tileW: z.number().int().min(1).describe("Width of the crop region in tile cells."),
|
|
557
|
+
tileH: z.number().int().min(1).describe("Height of the crop region in tile cells."),
|
|
558
|
+
tileSize: z.number().int().min(1).max(64).default(8).describe("Side length of a tile cell in pixels (8 for nearly every platform — only override for unusual cases)."),
|
|
559
|
+
outputPath: z.string().describe("Absolute path to write the cropped PNG."),
|
|
560
|
+
intent: intentZod(z),
|
|
561
|
+
},
|
|
562
|
+
safeTool(async (args) => jsonContent(await cropSpriteSheetImpl(args))),
|
|
563
|
+
);
|
|
564
|
+
|
|
565
|
+
server.tool(
|
|
566
|
+
"crossPlatformSpriteImport",
|
|
567
|
+
"Use this to lift a sprite region from one platform's ROM into another platform's tile format in ONE " +
|
|
568
|
+
"call (e.g. 'put Mario into my GBC game') — combines extractSpriteSheet + crop + quantizePngForPlatform " +
|
|
569
|
+
"+ optional manifest, feeding straight into loadSpriteSheet. Source: `sourceBank` (NES, easiest) or " +
|
|
570
|
+
"`sourceOffset` (SNES/GB/GBC/Genesis); `sourceTileX/Y/W/H` index into the rendered grid. NOTE: this is " +
|
|
571
|
+
"for a rectangular tile-grid region — for a real multi-sprite character use captureMetaSprite.",
|
|
572
|
+
{
|
|
573
|
+
sourceRom: z.string().describe("Absolute path to the source ROM file."),
|
|
574
|
+
sourcePlatform: z.string().describe("Source platform id (nes, gb, gbc, snes, sms, gg, genesis, ...)."),
|
|
575
|
+
sourceBank: z.number().int().min(0).optional().describe("NES: 4 KB CHR bank index. Conflicts with sourceOffset — use one."),
|
|
576
|
+
sourceOffset: z.number().int().min(0).optional().describe("Raw byte offset into the ROM for tile data. Required for non-NES sources unless using sourceBank."),
|
|
577
|
+
sourceTileX: z.number().int().min(0).describe("Leftmost tile column of the source region (0 = leftmost in the rendered grid)."),
|
|
578
|
+
sourceTileY: z.number().int().min(0).describe("Topmost tile row of the source region."),
|
|
579
|
+
sourceTileW: z.number().int().min(1).describe("Width of the region in tile cells."),
|
|
580
|
+
sourceTileH: z.number().int().min(1).describe("Height of the region in tile cells."),
|
|
581
|
+
targetPlatform: z.string().describe("Target platform id — the output is quantized to this platform's per-subpalette limit."),
|
|
582
|
+
outputPng: z.string().describe("Absolute path to write the quantized output PNG."),
|
|
583
|
+
outputManifest: z.string().optional().describe("Optional: absolute path to write a TexturePacker-style manifest naming each tile slot. Required if you'll feed it into loadSpriteSheet."),
|
|
584
|
+
quantizeMode: z.enum(["frequency", "luminance", "platform-master"]).optional().describe("Palette quantization strategy. See quantizePngForPlatform. Default comes from `intent` (homebrew → platform-master, rom-hack → frequency). Under intent:'rom-hack' the quantize step is SKIPPED entirely — source bytes are preserved verbatim and this arg is ignored."),
|
|
585
|
+
tilesPerRow: z.number().int().min(1).max(64).default(16).describe("Source bank layout — how the tile bytes get rendered into a grid before cropping. 16 matches extractSpriteSheet's default."),
|
|
586
|
+
namePrefix: z.string().default("tile").describe("Per-frame name prefix in the emitted manifest (default 'tile' → tile_0_0, tile_0_1, ...)."),
|
|
587
|
+
paletteFromEmulator: z.boolean().optional().describe("Color the SOURCE extract using the live emulator palette (NES/SNES/Genesis). Requires a loaded ROM matching `sourcePlatform`. Default comes from `intent`: homebrew → true (live palette when a ROM is loaded, per-platform default otherwise); rom-hack → false (grayscale). Set explicitly to override the intent default. Matches the same flag on extractSpriteSheet."),
|
|
588
|
+
paletteIndex: z.number().int().min(0).max(15).default(0).describe("Subpalette index for the source-side live-palette read (NES: 0-7, 0-3 = BG, 4-7 = sprite; SNES: 0-15; Genesis: 0-3). Only used when the source palette is read from the emulator. Matches the same arg on extractSpriteSheet."),
|
|
589
|
+
intent: intentZod(z),
|
|
590
|
+
},
|
|
591
|
+
safeTool(async (args) => jsonContent(await crossPlatformSpriteImportImpl({ ...args, sessionKey }))),
|
|
592
|
+
);
|
|
593
|
+
|
|
594
|
+
server.tool(
|
|
595
|
+
"quantizePngForPlatform",
|
|
596
|
+
"Use this to reduce an RGBA PNG to a platform's per-subpalette color limit and emit an indexed PNG " +
|
|
597
|
+
"(with a PLTE loadSpriteSheet picks up) — the bridge from 'imported with another platform's colors' to " +
|
|
598
|
+
"'lands with the right index layout.' `maxColors` defaults per platform (override for 2bpp/8bpp). " +
|
|
599
|
+
"`mode`: frequency (most-common colors), luminance (sorts so index 0 is lightest = backdrop), or " +
|
|
600
|
+
"platform-master (NES: snap to the master palette).",
|
|
601
|
+
{
|
|
602
|
+
path: z.string().describe("Absolute path to the source PNG (RGBA or already indexed; truecolor is the typical input)."),
|
|
603
|
+
platform: z.string().describe("Target platform id (nes, gb, gbc, sms, gg, snes, gba, genesis, atari7800)."),
|
|
604
|
+
outputPath: z.string().describe("Absolute path to write the quantized PNG."),
|
|
605
|
+
mode: z.enum(["frequency", "luminance", "platform-master"]).optional().describe("Quantization strategy. Default comes from `intent` (homebrew → platform-master, rom-hack → frequency)."),
|
|
606
|
+
maxColors: z.number().int().min(1).max(256).optional().describe("Override the per-platform default (e.g. SNES 2bpp = 4, SNES 8bpp = 256)."),
|
|
607
|
+
intent: intentZod(z),
|
|
608
|
+
},
|
|
609
|
+
safeTool(async (args) => jsonContent(await quantizePngForPlatformImpl(args))),
|
|
610
|
+
);
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
// Exports for tests + cross-tool reuse.
|
|
614
|
+
export { cropSpriteSheetImpl, quantizePngForPlatformImpl, crossPlatformSpriteImportImpl, PLATFORM_LIMITS };
|