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,355 @@
|
|
|
1
|
+
// Atari 2600 TIA helpers.
|
|
2
|
+
//
|
|
3
|
+
// The 2600 is unlike everything else this MCP supports: no tile-based BG,
|
|
4
|
+
// no separate framebuffer. The CPU + TIA cooperate at *scanline* scope:
|
|
5
|
+
// - TIA has 5 graphics objects: 2 players (8px each), 2 missiles, 1 ball.
|
|
6
|
+
// - Background is the 20-bit "playfield" (PF0/PF1/PF2 registers) drawn
|
|
7
|
+
// as a 20-column 1-bit pattern repeated or reflected across each line.
|
|
8
|
+
// - Color is set via 4 8-bit COLU* registers (P0/P1/PF/BK).
|
|
9
|
+
// - Each frame is composed by the CPU re-writing TIA regs every scanline
|
|
10
|
+
// (the "racing the beam" model).
|
|
11
|
+
//
|
|
12
|
+
// So "inspectSprites" for the 2600 means decoding the CURRENT TIA register
|
|
13
|
+
// snapshot, not a list of OAM entries. The kernel determines what actually
|
|
14
|
+
// renders — we report what state the TIA is in at the moment of the snapshot.
|
|
15
|
+
|
|
16
|
+
import { PNG } from "pngjs";
|
|
17
|
+
|
|
18
|
+
// ─── NTSC palette ─────────────────────────────────────────────────
|
|
19
|
+
// 128 colors arranged as 16 hues × 8 luminances. The TIA color register
|
|
20
|
+
// stores (hue << 4) | (lum << 1) — bit 0 is unused.
|
|
21
|
+
// Source: standard NTSC palette derivation (Stella's defaults).
|
|
22
|
+
|
|
23
|
+
/** Convert a TIA color register byte to an RGB triple. */
|
|
24
|
+
export function tiaColorToRgb(byte) {
|
|
25
|
+
const hue = (byte >> 4) & 0x0F;
|
|
26
|
+
const lum = (byte >> 1) & 0x07;
|
|
27
|
+
return NTSC_PALETTE[hue * 8 + lum];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// NTSC palette — 16 × 8 = 128 entries. Derived from the canonical
|
|
31
|
+
// "stella default" / "Atari Age" 2600 NTSC chart.
|
|
32
|
+
export const NTSC_PALETTE = (() => {
|
|
33
|
+
// Each hue's brightness sweeps from dark→light. We approximate Stella's
|
|
34
|
+
// values; the exact RGB doesn't matter as long as agents see consistent
|
|
35
|
+
// color identity.
|
|
36
|
+
const hues = [
|
|
37
|
+
{ r: 0x00, g: 0x00, b: 0x00 }, // 0: grayscale
|
|
38
|
+
{ r: 0x44, g: 0x44, b: 0x00 }, // 1: gold/khaki
|
|
39
|
+
{ r: 0x70, g: 0x28, b: 0x00 }, // 2: orange
|
|
40
|
+
{ r: 0x84, g: 0x18, b: 0x00 }, // 3: brick red
|
|
41
|
+
{ r: 0x88, g: 0x00, b: 0x14 }, // 4: pink/red
|
|
42
|
+
{ r: 0x78, g: 0x00, b: 0x5C }, // 5: purple
|
|
43
|
+
{ r: 0x48, g: 0x00, b: 0x78 }, // 6: violet
|
|
44
|
+
{ r: 0x14, g: 0x00, b: 0x84 }, // 7: blue
|
|
45
|
+
{ r: 0x00, g: 0x18, b: 0x88 }, // 8: blue-cyan
|
|
46
|
+
{ r: 0x00, g: 0x2C, b: 0x78 }, // 9: cyan
|
|
47
|
+
{ r: 0x00, g: 0x44, b: 0x54 }, // A: cyan-green
|
|
48
|
+
{ r: 0x00, g: 0x54, b: 0x14 }, // B: green
|
|
49
|
+
{ r: 0x14, g: 0x60, b: 0x00 }, // C: yellow-green
|
|
50
|
+
{ r: 0x40, g: 0x58, b: 0x00 }, // D: olive
|
|
51
|
+
{ r: 0x70, g: 0x48, b: 0x00 }, // E: olive-orange
|
|
52
|
+
{ r: 0x70, g: 0x30, b: 0x00 }, // F: brown/orange
|
|
53
|
+
];
|
|
54
|
+
const out = [];
|
|
55
|
+
for (let h = 0; h < 16; h++) {
|
|
56
|
+
for (let l = 0; l < 8; l++) {
|
|
57
|
+
// Lum 0 = darkest, 7 = brightest. Mix toward black or white at
|
|
58
|
+
// the extremes. The base hue is at lum 4.
|
|
59
|
+
const base = hues[h];
|
|
60
|
+
const t = l / 7; // 0..1
|
|
61
|
+
// Linear toward white as t→1; toward black as t→0; base color at midpoint.
|
|
62
|
+
const r = Math.round(base.r * 0.5 + 255 * t * 0.5);
|
|
63
|
+
const g = Math.round(base.g * 0.5 + 255 * t * 0.5);
|
|
64
|
+
const b = Math.round(base.b * 0.5 + 255 * t * 0.5);
|
|
65
|
+
out.push([r, g, b]);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
})();
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Render the full 128-color NTSC palette as a 16×8 swatch PNG.
|
|
73
|
+
* Use as the -remap target for dithering input images to the TIA's palette.
|
|
74
|
+
*/
|
|
75
|
+
export function renderNtscPalettePng() {
|
|
76
|
+
const cell = 16;
|
|
77
|
+
const w = 8 * cell;
|
|
78
|
+
const h = 16 * cell;
|
|
79
|
+
const png = new PNG({ width: w, height: h });
|
|
80
|
+
for (let i = 0; i < 128; i++) {
|
|
81
|
+
const hue = i >> 3;
|
|
82
|
+
const lum = i & 7;
|
|
83
|
+
const cx = lum * cell;
|
|
84
|
+
const cy = hue * cell;
|
|
85
|
+
const [r, g, b] = NTSC_PALETTE[i];
|
|
86
|
+
for (let y = 0; y < cell; y++) {
|
|
87
|
+
for (let x = 0; x < cell; x++) {
|
|
88
|
+
const o = ((cy + y) * w + (cx + x)) * 4;
|
|
89
|
+
png.data[o + 0] = r;
|
|
90
|
+
png.data[o + 1] = g;
|
|
91
|
+
png.data[o + 2] = b;
|
|
92
|
+
png.data[o + 3] = 0xff;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return PNG.sync.write(png);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// ─── TIA snapshot decoder ─────────────────────────────────────────
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Decode the 32-byte TIA snapshot from a2600_tia_regs (see stella2014
|
|
103
|
+
* patch — TIA::snapshot lays it out). Returns structured fields.
|
|
104
|
+
*/
|
|
105
|
+
export function decodeTiaSnapshot(b) {
|
|
106
|
+
return {
|
|
107
|
+
vsync: !!(b[0] & 0x02),
|
|
108
|
+
vblank: {
|
|
109
|
+
hex: "0x" + b[1].toString(16).toUpperCase().padStart(2, "0"),
|
|
110
|
+
disable: !!(b[1] & 0x02),
|
|
111
|
+
latch: !!(b[1] & 0x40),
|
|
112
|
+
dump: !!(b[1] & 0x80),
|
|
113
|
+
},
|
|
114
|
+
nusiz0: {
|
|
115
|
+
hex: "0x" + b[2].toString(16).toUpperCase().padStart(2, "0"),
|
|
116
|
+
missileSize: 1 << ((b[2] >> 4) & 0x03),
|
|
117
|
+
playerCopies: nusizCopiesText(b[2] & 0x07),
|
|
118
|
+
},
|
|
119
|
+
nusiz1: {
|
|
120
|
+
hex: "0x" + b[3].toString(16).toUpperCase().padStart(2, "0"),
|
|
121
|
+
missileSize: 1 << ((b[3] >> 4) & 0x03),
|
|
122
|
+
playerCopies: nusizCopiesText(b[3] & 0x07),
|
|
123
|
+
},
|
|
124
|
+
colors: {
|
|
125
|
+
p0: { byte: b[4], hex: "0x" + b[4].toString(16).toUpperCase().padStart(2, "0"), rgb: tiaColorToRgb(b[4]) },
|
|
126
|
+
p1: { byte: b[5], hex: "0x" + b[5].toString(16).toUpperCase().padStart(2, "0"), rgb: tiaColorToRgb(b[5]) },
|
|
127
|
+
pf: { byte: b[6], hex: "0x" + b[6].toString(16).toUpperCase().padStart(2, "0"), rgb: tiaColorToRgb(b[6]) },
|
|
128
|
+
bk: { byte: b[7], hex: "0x" + b[7].toString(16).toUpperCase().padStart(2, "0"), rgb: tiaColorToRgb(b[7]) },
|
|
129
|
+
},
|
|
130
|
+
ctrlpf: {
|
|
131
|
+
hex: "0x" + b[8].toString(16).toUpperCase().padStart(2, "0"),
|
|
132
|
+
reflect: !!(b[8] & 0x01),
|
|
133
|
+
score: !!(b[8] & 0x02),
|
|
134
|
+
priority: !!(b[8] & 0x04),
|
|
135
|
+
ballSize: 1 << ((b[8] >> 4) & 0x03),
|
|
136
|
+
},
|
|
137
|
+
sprites: {
|
|
138
|
+
p0: {
|
|
139
|
+
graphics: b[14],
|
|
140
|
+
graphicsBin: b[14].toString(2).padStart(8, "0"),
|
|
141
|
+
reflected: !!b[9],
|
|
142
|
+
delayedDraw: !!b[24],
|
|
143
|
+
horizMotion: signedNibble(b[19]),
|
|
144
|
+
},
|
|
145
|
+
p1: {
|
|
146
|
+
graphics: b[15],
|
|
147
|
+
graphicsBin: b[15].toString(2).padStart(8, "0"),
|
|
148
|
+
reflected: !!b[10],
|
|
149
|
+
delayedDraw: !!b[25],
|
|
150
|
+
horizMotion: signedNibble(b[20]),
|
|
151
|
+
},
|
|
152
|
+
missile0: { enabled: !!b[16], horizMotion: signedNibble(b[21]) },
|
|
153
|
+
missile1: { enabled: !!b[17], horizMotion: signedNibble(b[22]) },
|
|
154
|
+
ball: { enabled: !!b[18], horizMotion: signedNibble(b[23]), delayed: !!b[26] },
|
|
155
|
+
},
|
|
156
|
+
playfield: {
|
|
157
|
+
// PF0 is high-nibble-of-4-bits (only bits 4-7 displayed); PF1 + PF2 are full 8-bit.
|
|
158
|
+
// Width on screen: 20 columns. Bit order: PF0[7..4] left-to-right, PF1[0..7] (reversed!),
|
|
159
|
+
// PF2[7..0] (forward).
|
|
160
|
+
pf0: b[11] & 0x0F, // 4-bit
|
|
161
|
+
pf1: b[12],
|
|
162
|
+
pf2: b[13],
|
|
163
|
+
pattern20bit: ((b[11] & 0xF0) >> 4) // PF0 high nybble
|
|
164
|
+
| (reverseBits(b[12]) << 4) // PF1 reversed
|
|
165
|
+
| (b[13] << 12), // PF2 forward
|
|
166
|
+
},
|
|
167
|
+
audio: {
|
|
168
|
+
ch0: { control: b[27], frequency: b[29], volume: (b[31] >> 4) & 0x0F },
|
|
169
|
+
ch1: { control: b[28], frequency: b[30], volume: b[31] & 0x0F },
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function nusizCopiesText(n) {
|
|
175
|
+
return ({
|
|
176
|
+
0: "1 copy",
|
|
177
|
+
1: "2 copies, close",
|
|
178
|
+
2: "2 copies, medium",
|
|
179
|
+
3: "3 copies, close",
|
|
180
|
+
4: "2 copies, wide",
|
|
181
|
+
5: "double size",
|
|
182
|
+
6: "3 copies, medium",
|
|
183
|
+
7: "quad size",
|
|
184
|
+
})[n] ?? "unknown";
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function signedNibble(b) {
|
|
188
|
+
// HMP/HMM/HMBL high nibble = signed 4-bit motion (-8..+7).
|
|
189
|
+
const v = (b >> 4) & 0x0F;
|
|
190
|
+
return v >= 8 ? v - 16 : v;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function reverseBits(b) {
|
|
194
|
+
b = ((b >> 1) & 0x55) | ((b & 0x55) << 1);
|
|
195
|
+
b = ((b >> 2) & 0x33) | ((b & 0x33) << 2);
|
|
196
|
+
b = ((b >> 4) & 0x0F) | ((b & 0x0F) << 4);
|
|
197
|
+
return b & 0xFF;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// ─── Live snapshots ───────────────────────────────────────────────
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Read the live TIA snapshot from the running emulator + return generic
|
|
204
|
+
* "rendering context"-style output.
|
|
205
|
+
*/
|
|
206
|
+
export function snapshotTia(host) {
|
|
207
|
+
const bytes = host.readMemory("a26_tia_regs", 0, 32);
|
|
208
|
+
return decodeTiaSnapshot(bytes);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Render a palette PNG showing the 4 currently-active colors (P0/P1/PF/BK)
|
|
213
|
+
* + their numeric register values. Used by inspectPalette.
|
|
214
|
+
*/
|
|
215
|
+
export function snapshotPaletteSwatch(host) {
|
|
216
|
+
const tia = snapshotTia(host);
|
|
217
|
+
const colors = [
|
|
218
|
+
{ name: "P0", reg: tia.colors.p0 },
|
|
219
|
+
{ name: "P1", reg: tia.colors.p1 },
|
|
220
|
+
{ name: "PF", reg: tia.colors.pf },
|
|
221
|
+
{ name: "BK", reg: tia.colors.bk },
|
|
222
|
+
];
|
|
223
|
+
const cell = 32;
|
|
224
|
+
const png = new PNG({ width: 4 * cell, height: cell });
|
|
225
|
+
for (let i = 0; i < 4; i++) {
|
|
226
|
+
const [r, g, b] = colors[i].reg.rgb;
|
|
227
|
+
for (let y = 0; y < cell; y++) {
|
|
228
|
+
for (let x = 0; x < cell; x++) {
|
|
229
|
+
const o = (y * 4 * cell + i * cell + x) * 4;
|
|
230
|
+
png.data[o + 0] = r;
|
|
231
|
+
png.data[o + 1] = g;
|
|
232
|
+
png.data[o + 2] = b;
|
|
233
|
+
png.data[o + 3] = 0xff;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
png: PNG.sync.write(png),
|
|
239
|
+
colors: colors.map((c, i) => ({
|
|
240
|
+
index: i,
|
|
241
|
+
name: c.name,
|
|
242
|
+
r: c.reg.rgb[0],
|
|
243
|
+
g: c.reg.rgb[1],
|
|
244
|
+
b: c.reg.rgb[2],
|
|
245
|
+
rawWord: c.reg.byte,
|
|
246
|
+
})),
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Render the current sprite/playfield state as a single 160×1px PNG row
|
|
252
|
+
* showing what the kernel would draw for one scanline of the current TIA
|
|
253
|
+
* state. (More useful than a tile sheet for the 2600.)
|
|
254
|
+
*
|
|
255
|
+
* Note: this is a STATIC slice — the kernel re-writes TIA every scanline,
|
|
256
|
+
* so the actual frame composition can vary line-by-line. Pause + sample
|
|
257
|
+
* mid-frame to inspect a specific moment.
|
|
258
|
+
*/
|
|
259
|
+
export function snapshotScanline(host) {
|
|
260
|
+
const tia = snapshotTia(host);
|
|
261
|
+
const W = 160;
|
|
262
|
+
const png = new PNG({ width: W, height: 8 });
|
|
263
|
+
// Fill with BK color.
|
|
264
|
+
const [bkR, bkG, bkB] = tia.colors.bk.rgb;
|
|
265
|
+
for (let i = 0; i < png.data.length; i += 4) {
|
|
266
|
+
png.data[i + 0] = bkR;
|
|
267
|
+
png.data[i + 1] = bkG;
|
|
268
|
+
png.data[i + 2] = bkB;
|
|
269
|
+
png.data[i + 3] = 0xff;
|
|
270
|
+
}
|
|
271
|
+
// Draw playfield: 20 columns × 4 px each = 80 px (left half), then either
|
|
272
|
+
// reflected or repeated on right half depending on CTRLPF bit 0.
|
|
273
|
+
const pfBits = tia.playfield.pattern20bit;
|
|
274
|
+
const drawPf = (startX, columnWidth, mirror) => {
|
|
275
|
+
for (let col = 0; col < 20; col++) {
|
|
276
|
+
const bitIdx = mirror ? 19 - col : col;
|
|
277
|
+
if (pfBits & (1 << bitIdx)) {
|
|
278
|
+
const x0 = startX + col * columnWidth;
|
|
279
|
+
for (let y = 0; y < 8; y++) {
|
|
280
|
+
for (let dx = 0; dx < columnWidth; dx++) {
|
|
281
|
+
const x = x0 + dx;
|
|
282
|
+
if (x < 0 || x >= W) continue;
|
|
283
|
+
const o = (y * W + x) * 4;
|
|
284
|
+
png.data[o + 0] = tia.colors.pf.rgb[0];
|
|
285
|
+
png.data[o + 1] = tia.colors.pf.rgb[1];
|
|
286
|
+
png.data[o + 2] = tia.colors.pf.rgb[2];
|
|
287
|
+
png.data[o + 3] = 0xff;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
drawPf(0, 4, false);
|
|
294
|
+
drawPf(80, 4, tia.ctrlpf.reflect);
|
|
295
|
+
|
|
296
|
+
// Draw player 0/1 graphics as 8-px sprites — position is whatever
|
|
297
|
+
// the kernel set via RESP0/RESP1 (not exposed in our snapshot — the
|
|
298
|
+
// CPU has to issue these strobes). We render at default x=50/100 just
|
|
299
|
+
// to show shape.
|
|
300
|
+
const drawSprite = (gfx, reflected, x, color) => {
|
|
301
|
+
if (gfx === 0) return;
|
|
302
|
+
for (let bit = 0; bit < 8; bit++) {
|
|
303
|
+
const srcBit = reflected ? bit : 7 - bit;
|
|
304
|
+
if (gfx & (1 << srcBit)) {
|
|
305
|
+
const sx = x + bit;
|
|
306
|
+
if (sx < 0 || sx >= W) continue;
|
|
307
|
+
for (let y = 0; y < 8; y++) {
|
|
308
|
+
const o = (y * W + sx) * 4;
|
|
309
|
+
png.data[o + 0] = color[0];
|
|
310
|
+
png.data[o + 1] = color[1];
|
|
311
|
+
png.data[o + 2] = color[2];
|
|
312
|
+
png.data[o + 3] = 0xff;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
drawSprite(tia.sprites.p0.graphics, tia.sprites.p0.reflected, 40, tia.colors.p0.rgb);
|
|
318
|
+
drawSprite(tia.sprites.p1.graphics, tia.sprites.p1.reflected, 100, tia.colors.p1.rgb);
|
|
319
|
+
|
|
320
|
+
return {
|
|
321
|
+
png: PNG.sync.write(png),
|
|
322
|
+
width: W,
|
|
323
|
+
height: 8,
|
|
324
|
+
note: "One-scanline TIA composition snapshot. Real 2600 games re-write " +
|
|
325
|
+
"TIA every scanline — this shows the state at the moment of capture. " +
|
|
326
|
+
"Player positions are drawn at default x=40/100 since RESP0/RESP1 " +
|
|
327
|
+
"are strobes (no register holds the result).",
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// ─── CPU state decode (6502 / 6507) ────────────────────────────────
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Decode the 7-byte CPU snapshot from a26_cpu_regs.
|
|
335
|
+
* Layout: pc_lo, pc_hi, a, x, y, p, sp.
|
|
336
|
+
*/
|
|
337
|
+
export function decodeA26CpuState(b) {
|
|
338
|
+
const pc = b[0] | (b[1] << 8);
|
|
339
|
+
const p = b[5];
|
|
340
|
+
return {
|
|
341
|
+
pc,
|
|
342
|
+
sp: 0x100 | b[6], // 6502 SP is the low byte of $0100+SP
|
|
343
|
+
registers: { A: b[2], X: b[3], Y: b[4], P: p, SP: b[6] },
|
|
344
|
+
flags: {
|
|
345
|
+
N: !!(p & 0x80),
|
|
346
|
+
V: !!(p & 0x40),
|
|
347
|
+
B: !!(p & 0x10),
|
|
348
|
+
D: !!(p & 0x08),
|
|
349
|
+
I: !!(p & 0x04),
|
|
350
|
+
Z: !!(p & 0x02),
|
|
351
|
+
C: !!(p & 0x01),
|
|
352
|
+
raw: "0x" + p.toString(16).toUpperCase().padStart(2, "0"),
|
|
353
|
+
},
|
|
354
|
+
};
|
|
355
|
+
}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# Atari 7800 — mental model
|
|
2
|
+
|
|
3
|
+
One page. Read once before you write your first 7800 game. The
|
|
4
|
+
TROUBLESHOOTING.md alongside this file is for when something's broken;
|
|
5
|
+
this is the "what's going on" version.
|
|
6
|
+
|
|
7
|
+
The 7800 is the **outlier** of romdev's bundled platforms — its
|
|
8
|
+
architecture differs sharply from the NES / SMS / GB. If you've
|
|
9
|
+
worked on those, **forget tilemaps + sprite-attribute tables**.
|
|
10
|
+
The 7800 has neither.
|
|
11
|
+
|
|
12
|
+
## CPU memory map (6502 6502C "Sally")
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
$0000-$001F TIA-shadow registers (audio + some 2600-compatibility)
|
|
16
|
+
$0020-$003F MARIA video registers
|
|
17
|
+
$0040-$00FF zero-page RAM (general use)
|
|
18
|
+
$0140-$01FF stack
|
|
19
|
+
$0200-$021F shadow regs (RIOT)
|
|
20
|
+
$0280-$02FF RIOT (joysticks, console switches, timer)
|
|
21
|
+
$1800-$27FF work RAM (4 KB — yes, only 4 KB!)
|
|
22
|
+
$8000-$FFFF ROM (32 KB single-bank; bankswitching for larger carts)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**4 KB of RAM** is the binding constraint. Most other consoles have
|
|
26
|
+
8–128 KB. You CANNOT software-render a frame buffer; you must use
|
|
27
|
+
MARIA's display lists.
|
|
28
|
+
|
|
29
|
+
## MARIA: the unusual one
|
|
30
|
+
|
|
31
|
+
There's no PPU. There's no tile map. There's no sprite attribute
|
|
32
|
+
table. Instead, the **MARIA graphics processor** consumes a
|
|
33
|
+
**display list** describing the screen each frame.
|
|
34
|
+
|
|
35
|
+
Hierarchy:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
DPP (Display List Pointer) — fixed CPU register
|
|
39
|
+
↓ points at
|
|
40
|
+
DLL (Display List List) — variable-length list of zones
|
|
41
|
+
- each zone: how many scanlines tall + DL pointer + offset
|
|
42
|
+
↓ each zone references
|
|
43
|
+
DL (Display List) — list of objects in that zone
|
|
44
|
+
- each entry: ROM pointer + width + X position + palette
|
|
45
|
+
↓ each entry references
|
|
46
|
+
graphics data — pixel bytes in ROM (or RAM)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Each frame, MARIA walks the DLL → walks each DL → DMA-copies the
|
|
50
|
+
pixel data into the video output line by line. **You build the DL
|
|
51
|
+
and DLL; you do NOT poke pixels into a framebuffer.**
|
|
52
|
+
|
|
53
|
+
### Implications
|
|
54
|
+
|
|
55
|
+
- **A "sprite" is a DL entry.** Add a 5-byte DL header → another
|
|
56
|
+
object draws.
|
|
57
|
+
- **Per-scanline object limit ≈ 32.** Beyond that MARIA glitches
|
|
58
|
+
and (worse) burns enough cycles that the CPU stops getting time.
|
|
59
|
+
- **Y position = which zone the object lives in.** Each zone covers
|
|
60
|
+
N scanlines. To move an object up/down, you move it between
|
|
61
|
+
zones. (Or — in our scaffolds — you stamp the same sprite at
|
|
62
|
+
different row offsets within ONE zone's data block, which fakes
|
|
63
|
+
Y movement.)
|
|
64
|
+
- **Each DL header can pick a palette per object** (one of 8
|
|
65
|
+
palettes, 4 colours each — including the shared background).
|
|
66
|
+
|
|
67
|
+
### Dynamic display lists — what to rebuild per frame (READ THIS)
|
|
68
|
+
|
|
69
|
+
The single biggest 7800 footgun for a moving game: **do NOT rebuild the
|
|
70
|
+
whole DLL + every DL from scratch every frame.** MARIA may be mid-walk
|
|
71
|
+
when you do, and a full teardown/rebuild races the display DMA →
|
|
72
|
+
flicker, corruption, or a hung screen. (This is the #1 thing that makes
|
|
73
|
+
a 7800 game "work for one frame then fall apart.")
|
|
74
|
+
|
|
75
|
+
The stable pattern is **build the structure ONCE, then patch in place**:
|
|
76
|
+
|
|
77
|
+
| Thing | When to build it | Why |
|
|
78
|
+
| --- | --- | --- |
|
|
79
|
+
| **DLL** (the zone list) | **Once, at init.** | Zone count + heights + DL pointers are your screen layout. It rarely changes. Point DPPH/DPPL at it once in `maria_init`. |
|
|
80
|
+
| **DL headers' graphics pointer / palette** | **Per frame, in place.** | To animate or show/hide an object, overwrite the bytes of its EXISTING DL entry — don't relink the list. |
|
|
81
|
+
| **DL header's X position** | **Per frame, in place.** | Horizontal movement = write the X byte of the object's existing DL header. Cheap and safe. |
|
|
82
|
+
| **Moving an object vertically** | **Per frame, but carefully.** | Y = which zone. Either keep a DL entry in each zone and toggle which is "live" (set its width/graphics to a blank tile when hidden), or stamp the sprite at different row offsets inside one tall zone's data. Prefer the latter for a few objects. |
|
|
83
|
+
| **Clearing stale objects** | **Per frame, targeted.** | Don't wipe the whole DL — overwrite just the entries that changed (set a hidden object's graphics pointer to a transparent/blank tile, or zero its width). |
|
|
84
|
+
|
|
85
|
+
Practical recipe for a shmup/invaders-style game:
|
|
86
|
+
1. `maria_init` — install the DLL once (e.g. a few fixed zones: HUD band,
|
|
87
|
+
play-field band, shield band). Never touched again.
|
|
88
|
+
2. Pre-allocate a fixed set of DL entries per zone (player, N enemies,
|
|
89
|
+
shots) in RAM-backed DL data.
|
|
90
|
+
3. Each frame: write only the X / graphics-pointer / palette bytes of the
|
|
91
|
+
entries that moved or changed; set width/graphics to "blank" for slots
|
|
92
|
+
that are inactive this frame.
|
|
93
|
+
4. Never call your "build the entire display list" routine inside the
|
|
94
|
+
game loop — only the targeted byte writes.
|
|
95
|
+
|
|
96
|
+
If the screen tears or hangs once motion starts, you're almost certainly
|
|
97
|
+
rebuilding too much per frame. Pull the structural setup back into init.
|
|
98
|
+
|
|
99
|
+
## MARIA registers
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
$20 BACKGRND background colour (Atari colour byte)
|
|
103
|
+
$21 P0C1 palette 0, colour 1
|
|
104
|
+
$22 P0C2 palette 0, colour 2
|
|
105
|
+
$23 P0C3 palette 0, colour 3
|
|
106
|
+
... (P1C1..P7C3 follow same pattern)
|
|
107
|
+
$24 WSYNC write any value → CPU stalls to next scanline
|
|
108
|
+
$28 MSTAT read: bit 7 = vblank
|
|
109
|
+
$2C DPPH DLL pointer high byte
|
|
110
|
+
$30 DPPL DLL pointer low byte
|
|
111
|
+
$34 CHARBASE indirect character mode base
|
|
112
|
+
$3C CTRL MARIA control byte (see CTRL_* in maria_registers.h)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
`CTRL` matters: `0x40` = "DMA enabled, kangaroo off, border off,
|
|
116
|
+
colour-burst on". Forget `0x40` → MARIA doesn't render and the
|
|
117
|
+
screen stays whatever colour the TIA latched.
|
|
118
|
+
|
|
119
|
+
## Display list (DL) entry format
|
|
120
|
+
|
|
121
|
+
Each entry in a DL describes one object MARIA draws on that zone's
|
|
122
|
+
scanline. There are TWO entry forms — 4-byte (direct) and 5-byte
|
|
123
|
+
(extended) — and MARIA picks based on the LOW 5 BITS of the mode
|
|
124
|
+
byte at offset +1.
|
|
125
|
+
|
|
126
|
+
### Picking the form
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
mode = DL[dp + 1]
|
|
130
|
+
if (mode & 0x5F) == 0: parse loop EXITS (DL terminator)
|
|
131
|
+
elif (mode & 0x1F) != 0: 4-byte direct form
|
|
132
|
+
else: 5-byte extended form
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
The "loop continues" mask is `0x5F` (bits 0-4 + bit 6). Bit 5
|
|
136
|
+
(indirect flag) and bit 7 (write-mode) do NOT keep the loop going
|
|
137
|
+
by themselves.
|
|
138
|
+
|
|
139
|
+
### 5-byte extended form (the bundled scaffolds use this)
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
+0 pixel-data LOW byte
|
|
143
|
+
+1 bit 7 = write-mode (0 = 160A 2bpp, 1 = 320 1bpp)
|
|
144
|
+
bit 6 = MUST be 1 (or another loop-continuing bit) so MARIA
|
|
145
|
+
doesn't treat this entry as a terminator
|
|
146
|
+
bit 5 = indirect flag (0 = direct, 1 = char-mode lookup)
|
|
147
|
+
bits 0-4 = MUST be 0 to select 5-byte mode
|
|
148
|
+
+2 pixel-data HIGH byte
|
|
149
|
+
+3 bits 5-7 = palette index 0..7 (selects P0Cx..P7Cx)
|
|
150
|
+
bits 0-4 = width encoded as (32 - width_bytes), so width 4 → 28 = $1C
|
|
151
|
+
+4 X position (0..159 in MARIA cell units; one cell = 2 pixels at 320 px)
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Canonical mode byte for "5-byte direct, write-mode 0, palette 0,
|
|
155
|
+
width 4 bytes": `[0]=lo, [1]=$40, [2]=hi, [3]=$1C, [4]=X`.
|
|
156
|
+
|
|
157
|
+
### 4-byte direct form
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
+0 pixel-data LOW byte
|
|
161
|
+
+1 bits 5-7 = palette, bits 0-4 = (32 - width_bytes); must be NON-ZERO
|
|
162
|
+
+2 pixel-data HIGH byte
|
|
163
|
+
+3 X position
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### DL terminator — critical
|
|
167
|
+
|
|
168
|
+
MARIA reads the NEXT entry's mode byte at `dp + 1` AFTER advancing
|
|
169
|
+
`dp` by the entry size (4 or 5 bytes). So a 5-byte entry needs the
|
|
170
|
+
terminator at byte **6** of your array (= byte 1 of the next "entry").
|
|
171
|
+
A 4-byte entry needs it at byte **5**.
|
|
172
|
+
|
|
173
|
+
If your DL array is just barely long enough to hold the entry
|
|
174
|
+
(6 bytes for a 5-byte entry), MARIA reads RANDOM MEMORY at offset
|
|
175
|
+
6 as the mode byte — almost guaranteed to be non-zero — and walks
|
|
176
|
+
off into garbage. **Always allocate one extra byte and zero it.**
|
|
177
|
+
|
|
178
|
+
The bundled `MK_DL` macro in `templates/default.c` does this:
|
|
179
|
+
`uint8_t name[7] = { 0, 0x40, 0, 0x1C, 80, 0, 0 }` — 5 entry bytes
|
|
180
|
+
+ a "next mode" terminator at index 6 (index 5 is unused padding).
|
|
181
|
+
|
|
182
|
+
## Display List List (DLL) entry format
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
+0 bit 7 = DLI (NMI on zone end — leave 0 unless you have a handler)
|
|
186
|
+
bit 6 = H16 (holey 16K DMA — leave 0)
|
|
187
|
+
bit 5 = H8 (holey 8K DMA — leave 0)
|
|
188
|
+
bits 0-3 = offset (zone_height - 1; 0 = 1 scanline, 15 = 16 scanlines)
|
|
189
|
+
+1 DL pointer HIGH byte
|
|
190
|
+
+2 DL pointer LOW byte
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**DLL has NO terminator.** MARIA walks one entry per `offset+1`
|
|
194
|
+
scanlines for the ENTIRE display area (243 scanlines on NTSC,
|
|
195
|
+
including 10 lines of top overscan before the visible area).
|
|
196
|
+
|
|
197
|
+
If your DLL is shorter than 243 entries, MARIA reads past the end
|
|
198
|
+
into random memory and renders garbage zones. The bundled scaffold
|
|
199
|
+
allocates 243 entries × 3 bytes = 729 bytes (fits easily in 4 KB
|
|
200
|
+
internal RAM) and points every zone with no objects at a shared
|
|
201
|
+
`dl_empty[2] = {0, 0}` terminator.
|
|
202
|
+
|
|
203
|
+
## The per-scanline offset addressing quirk
|
|
204
|
+
|
|
205
|
+
Within a multi-scanline zone (offset > 0), MARIA reads sprite data
|
|
206
|
+
from `ADDR + (zone_height - 1 - line_in_zone) * 256`. So for an
|
|
207
|
+
8-row sprite in an 8-line zone, row 0 (top) reads from `ADDR + $700`,
|
|
208
|
+
row 1 from `ADDR + $600`, ..., row 7 from `ADDR + $0`.
|
|
209
|
+
|
|
210
|
+
This forces page-aligned sprite layouts (8 separate 256-byte pages
|
|
211
|
+
for an 8-row sprite) unless you pack many sprites per page.
|
|
212
|
+
|
|
213
|
+
**Easy work-around:** make every zone 1 scanline tall (offset=0)
|
|
214
|
+
and use one DL entry per sprite ROW. Then `offset` is always 0, the
|
|
215
|
+
address quirk goes away, and you can store sprite rows back-to-back.
|
|
216
|
+
The bundled scaffold uses this pattern.
|
|
217
|
+
|
|
218
|
+
The cost is more DLL entries (one per scanline), but at 3 bytes each
|
|
219
|
+
across 243 lines = 729 bytes total — trivial RAM cost. Worth it for
|
|
220
|
+
the simpler mental model on a starter scaffold.
|
|
221
|
+
|
|
222
|
+
## Colour bytes (Atari NTSC palette)
|
|
223
|
+
|
|
224
|
+
The 7800 uses the **Atari NTSC palette** — same as the 2600. A
|
|
225
|
+
colour byte is `HHHL` where:
|
|
226
|
+
|
|
227
|
+
- `HHH` = hue (0..F, 0=grey)
|
|
228
|
+
- `L` = luminance (0..7, but 7800 doubles → 0..F)
|
|
229
|
+
|
|
230
|
+
E.g. `0x46` = orange mid-brightness, `0x88` = blue dim, `0x0E` =
|
|
231
|
+
white.
|
|
232
|
+
|
|
233
|
+
## Input
|
|
234
|
+
|
|
235
|
+
Joystick port A via `SWCHA` at `$280`. Active **low** — invert the
|
|
236
|
+
read:
|
|
237
|
+
|
|
238
|
+
```c
|
|
239
|
+
uint8_t pad = ~SWCHA;
|
|
240
|
+
if (pad & JOY_UP) /* P1 up */
|
|
241
|
+
if (pad & JOY_DOWN) /* P1 down */
|
|
242
|
+
if (pad & JOY_LEFT) /* P1 left */
|
|
243
|
+
if (pad & JOY_RIGHT) /* P1 right */
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Fire button on `INPT4` at `$0C`, also active low.
|
|
247
|
+
|
|
248
|
+
Console switches (reset, select, pause, B/W, difficulty) on
|
|
249
|
+
`SWCHB` at `$282`.
|
|
250
|
+
|
|
251
|
+
## Audio
|
|
252
|
+
|
|
253
|
+
The 7800 still has the TIA audio chip from the 2600 — 2 channels,
|
|
254
|
+
4-bit volume, 5-bit frequency, 4-bit tone shape. Registers at
|
|
255
|
+
`$15-$1A`:
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
$15 AUDC0 channel 0 tone (0..15)
|
|
259
|
+
$16 AUDC1 channel 1 tone
|
|
260
|
+
$17 AUDF0 channel 0 frequency (0..31)
|
|
261
|
+
$18 AUDF1 channel 1 frequency
|
|
262
|
+
$19 AUDV0 channel 0 volume (0..15)
|
|
263
|
+
$1A AUDV1 channel 1 volume
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
There's also a POKEY chip option in some 7800 cartridges (Ballblazer,
|
|
267
|
+
Commando) for richer audio, but it's not standard — assume TIA-only
|
|
268
|
+
for portable code.
|
|
269
|
+
|
|
270
|
+
## Frame heartbeat
|
|
271
|
+
|
|
272
|
+
```c
|
|
273
|
+
for (;;) {
|
|
274
|
+
while (MSTAT & 0x80) { } // wait for vblank to END
|
|
275
|
+
while (!(MSTAT & 0x80)) { } // wait for it to START
|
|
276
|
+
/* update game state */
|
|
277
|
+
/* rebuild DL with new positions */
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
`MSTAT` bit 7 = 1 during vblank. The double-while is a standard
|
|
282
|
+
edge-detect: wait for the "currently in vblank" status to flip
|
|
283
|
+
*off* (now in active rendering), then wait for it to come *back on*
|
|
284
|
+
(vblank started fresh).
|
|
285
|
+
|
|
286
|
+
## Cartridge layout
|
|
287
|
+
|
|
288
|
+
```
|
|
289
|
+
$0080-$00FF "A78" header (32 bytes title + 32 bytes machine config)
|
|
290
|
+
$0100-$7FFF ROM (32 KB)
|
|
291
|
+
$FFFC-$FFFD reset vector
|
|
292
|
+
$FFFE-$FFFF IRQ vector (rarely used — most games poll MSTAT)
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
cc65's bundled atari7800.cfg handles the header + layout. You
|
|
296
|
+
don't write the header yourself.
|
|
297
|
+
|
|
298
|
+
## Build pipeline
|
|
299
|
+
|
|
300
|
+
When you call `buildSource({platform:"atari7800", language:"c"})`:
|
|
301
|
+
|
|
302
|
+
1. cc65 compiles your `.c` to 6502 `.s`.
|
|
303
|
+
2. ca65 assembles each `.s` to `.o`.
|
|
304
|
+
3. ld65 links + atari7800.cfg → flat `.a78` ROM.
|
|
305
|
+
|
|
306
|
+
Loadable via prosystem (`loadMedia`).
|