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