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,3037 @@
|
|
|
1
|
+
; eXtended Genesis Music (XGM) Z80 driver - Stephane Dallongeville @2014-2016
|
|
2
|
+
;
|
|
3
|
+
; XGM is a music format dedicated to the Sega Megadrive/Genesis system.
|
|
4
|
+
; It has been designed to minimize CPU decoding resource and keep reasonable data size (should be smaller than VGM file).
|
|
5
|
+
; It supports both FM and PSG chip and allow up to 4 PCM channels (8 bits signed at 14 Khz) to be played at once.
|
|
6
|
+
; These 4 PCM channels are obtained by software mixing in the FM DAC in replacement of the 6th FM channel (so at best you can have 5FM + 4PCM + 4PSG = 13 channels)
|
|
7
|
+
;
|
|
8
|
+
; The driver supports playing SFX in PCM format with 16 priority levels.
|
|
9
|
+
; PCM samples can be >32KB but with the restriction of having their address and size aligned on 256 bytes.
|
|
10
|
+
;
|
|
11
|
+
; we have to do 254 cycles per sample output which consist of :
|
|
12
|
+
; - bufferize 4 PCM samples from the rom and mix them in write buffer
|
|
13
|
+
; - read 1 sample from read buffer and output it to the DAC
|
|
14
|
+
; - handle loop
|
|
15
|
+
; - bufferize XGM data / parse and apply XGM command / handle extern command
|
|
16
|
+
;
|
|
17
|
+
; register usage :
|
|
18
|
+
; HL = sample source (in ROM)
|
|
19
|
+
; DE = write buffer / XGM buffer
|
|
20
|
+
; BC = counter
|
|
21
|
+
; C = $80 (used for overflow and sample unsign)
|
|
22
|
+
; IYH = temp value
|
|
23
|
+
; HL' = YMPORT1
|
|
24
|
+
; BC' = read buffer
|
|
25
|
+
|
|
26
|
+
; ########################### define ##############################
|
|
27
|
+
|
|
28
|
+
INCLUDE "z80_def.i80" ; basic definitions
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
; ########################### var ##############################
|
|
32
|
+
|
|
33
|
+
XGM_PLAY_SFT EQU 6 ; XGM music play command bit
|
|
34
|
+
XGM_RESUME_SFT EQU 5 ; XGM music resume command bit
|
|
35
|
+
XGM_PAUSE_SFT EQU 4 ; XGM music pause command bit
|
|
36
|
+
|
|
37
|
+
; COMMAND b0 = play PCM0 STATUS b0 = PCM0 playing
|
|
38
|
+
; COMMAND b1 = play PCM1 STATUS b1 = PCM1 playing
|
|
39
|
+
; COMMAND b2 = play PCM2 STATUS b2 = PCM2 playing
|
|
40
|
+
; COMMAND b3 = play PCM3 STATUS b3 = PCM3 playing
|
|
41
|
+
; COMMAND b4 = stop XGM
|
|
42
|
+
; COMMAND b5 = resume XGM
|
|
43
|
+
; COMMAND b6 = play XGM STATUS b6 = XGM playing
|
|
44
|
+
|
|
45
|
+
XGM_ARG_A EQU PARAMS+$00 ; XGM address (bit 0 --> bit 23)
|
|
46
|
+
|
|
47
|
+
PCM0_ARG_P EQU PARAMS+$04 ; priority (0 to 15)
|
|
48
|
+
PCM0_ARG_ID EQU PARAMS+$05 ; PCM id (0 to 255)
|
|
49
|
+
PCM1_ARG_P EQU PARAMS+$06 ; priority (0 to 15)
|
|
50
|
+
PCM1_ARG_ID EQU PARAMS+$07 ; PCM id (0 to 255)
|
|
51
|
+
PCM2_ARG_P EQU PARAMS+$08 ; priority (0 to 15)
|
|
52
|
+
PCM2_ARG_ID EQU PARAMS+$09 ; PCM id (0 to 255)
|
|
53
|
+
PCM3_ARG_P EQU PARAMS+$0A ; priority (0 to 15)
|
|
54
|
+
PCM3_ARG_ID EQU PARAMS+$0B ; PCM id (0 to 255)
|
|
55
|
+
|
|
56
|
+
PCM_ARG_P EQU PCM0_ARG_P
|
|
57
|
+
PCM_ARG_ID EQU PCM0_ARG_ID
|
|
58
|
+
|
|
59
|
+
LOOP_ARG EQU PARAMS+$0C ; number of loop (0 = 255 loop)
|
|
60
|
+
PROTECT_ARG EQU PARAMS+$0D ; set to 1 from 68k during DMA (in vblank period)
|
|
61
|
+
; to prevent Z80 accessing 68k BUS
|
|
62
|
+
|
|
63
|
+
MODIFYING_F EQU PARAMS+$0E ; Z80 is modifying the 'PENDING_FRM' variable
|
|
64
|
+
PENDING_FRM EQU PARAMS+$0F ; contains number of XGM frame to process
|
|
65
|
+
|
|
66
|
+
PCM0_PRIO EQU PARAMS+$10 ; PCM0 internal priority
|
|
67
|
+
PCM0_ADDR EQU PARAMS+$12 ; PCM0 internal addr (bit8 --> bit23)
|
|
68
|
+
PCM0_LEN EQU PARAMS+$14 ; PCM0 internal len (bit8 --> bit23)
|
|
69
|
+
PCM1_PRIO EQU PARAMS+$18 ; PCM1 internal priority
|
|
70
|
+
PCM1_ADDR EQU PARAMS+$1A ; PCM1 internal addr (bit8 --> bit23)
|
|
71
|
+
PCM1_LEN EQU PARAMS+$1C ; PCM1 internal len (bit8 --> bit23)
|
|
72
|
+
PCM2_PRIO EQU PARAMS+$20 ; PCM2 internal priority
|
|
73
|
+
PCM2_ADDR EQU PARAMS+$22 ; PCM2 internal addr (bit8 --> bit23)
|
|
74
|
+
PCM2_LEN EQU PARAMS+$24 ; PCM2 internal len (bit8 --> bit23)
|
|
75
|
+
PCM3_PRIO EQU PARAMS+$28 ; PCM3 internal priority
|
|
76
|
+
PCM3_ADDR EQU PARAMS+$2A ; PCM3 internal addr (bit8 --> bit23)
|
|
77
|
+
PCM3_LEN EQU PARAMS+$2C ; PCM3 internal len (bit8 --> bit23)
|
|
78
|
+
|
|
79
|
+
PCM_PRIO EQU PCM0_PRIO
|
|
80
|
+
PCM_ADDR EQU PCM0_ADDR
|
|
81
|
+
PCM_LEN EQU PCM0_LEN
|
|
82
|
+
|
|
83
|
+
XGM_ADDR EQU PARAMS+$30 ; XGM internal addr (bit0 --> bit23)
|
|
84
|
+
|
|
85
|
+
WRITEBUF EQU PARAMS+$34 ; PCM write buffer pointer (bit8 --> bit9)
|
|
86
|
+
READBUF EQU PARAMS+$36 ; PCM read buffer pointer (bit8 --> bit9)
|
|
87
|
+
|
|
88
|
+
REM_LOOP EQU PARAMS+$38 ; remaining loop (0 = 255)
|
|
89
|
+
|
|
90
|
+
YM_RR_SAV EQU PARAMS+$40 ; YM RR save (4 slots * 6 channels)
|
|
91
|
+
PSG_ENV_SAV EQU PARAMS+$58 ; PSG env save (4 channels)
|
|
92
|
+
YM_RR_OFF EQU PARAMS+$60 ; YM RR off (4 slots * 6 channels)
|
|
93
|
+
PSG_ENV_OFF EQU PARAMS+$78 ; PSG env off (4 channels)
|
|
94
|
+
|
|
95
|
+
YM_2B_SAV EQU PARAMS+$5C ; YM register $2B last write save
|
|
96
|
+
YM_2B_CNT EQU PARAMS+$5D ; YM register $2B ON expiration
|
|
97
|
+
|
|
98
|
+
IDLE_LOOP EQU PARAMS+$7C ; idle loop counter (XGM frame wait)
|
|
99
|
+
WAIT_LOOP EQU PARAMS+$7E ; wait loop counter (DMA contention wait)
|
|
100
|
+
|
|
101
|
+
DEBUG_1 EQU PARAMS+$80 ; debug
|
|
102
|
+
DEBUG_2 EQU PARAMS+$81 ; debug
|
|
103
|
+
DEBUG_3 EQU PARAMS+$82 ; debug
|
|
104
|
+
DEBUG_4 EQU PARAMS+$83 ; debug
|
|
105
|
+
DEBUG_5 EQU PARAMS+$84 ; debug
|
|
106
|
+
DEBUG_6 EQU PARAMS+$85 ; debug
|
|
107
|
+
DEBUG_7 EQU PARAMS+$86 ; debug
|
|
108
|
+
DEBUG_8 EQU PARAMS+$87 ; debug
|
|
109
|
+
DEBUG_9 EQU PARAMS+$88 ; debug
|
|
110
|
+
DEBUG_A EQU PARAMS+$89 ; debug
|
|
111
|
+
DEBUG_B EQU PARAMS+$8A ; debug
|
|
112
|
+
|
|
113
|
+
ELAPSED EQU PARAMS+$90 ; elapsed frame since beginning of music (in frames), encoded on 24 bit
|
|
114
|
+
|
|
115
|
+
JUMP_TABLE EQU $1600 ; XGM command jump table (size = $100)
|
|
116
|
+
XGM_BUFFER EQU $1700 ; XGM music data buffer (size = $100)
|
|
117
|
+
|
|
118
|
+
PCM_BUFFER0 EQU $1800 ; PCM buffer 0
|
|
119
|
+
PCM_BUFFER1 EQU $1900 ; PCM buffer 1
|
|
120
|
+
PCM_BUFFER2 EQU $1A00 ; PCM buffer 2
|
|
121
|
+
PCM_BUFFER3 EQU $1B00 ; PCM buffer 3
|
|
122
|
+
|
|
123
|
+
PCM_BUFFER EQU PCM_BUFFER0 ; PCM buffer
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
ID_TABLE EQU $1C00 ; sample id table (size = $400)
|
|
127
|
+
|
|
128
|
+
STACK EQU JUMP_TABLE ; stack pointer above buffer region ($1600 --> $15XX)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
; ########################### macro ##############################
|
|
132
|
+
|
|
133
|
+
INCLUDE "z80_mac.i80" ; basic macros
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
; handlePCMCommand
|
|
137
|
+
; ----------------
|
|
138
|
+
; ? -> HL -> ?
|
|
139
|
+
; ? -> BC -> ?
|
|
140
|
+
; ? -> SP -> ?
|
|
141
|
+
;
|
|
142
|
+
; handle PCM command for channel 'ch' (PCM id < 0x100)
|
|
143
|
+
; = 157 cycles
|
|
144
|
+
|
|
145
|
+
macro handlePCMCommand ch
|
|
146
|
+
|
|
147
|
+
LD BC, (PCM_ARG_P+(ch*2)) ; C = SFX prio, B = SFX id ' 20 |
|
|
148
|
+
LD HL, PCM_PRIO+(ch*8) ; HL point on PCM info ' 10 | (30)
|
|
149
|
+
|
|
150
|
+
LD A, C ; A = new prio ' 4 |
|
|
151
|
+
CP (HL) ; compare to old prio ' 7 | 21 (51)
|
|
152
|
+
JP NC, .play_new ; >= old prio --> play new ' 10 |
|
|
153
|
+
|
|
154
|
+
wait96 ; sync ' 96 |
|
|
155
|
+
JP .end ; ' 10 | 106 (157)
|
|
156
|
+
|
|
157
|
+
.play_new
|
|
158
|
+
LD A, B ; A = SFX id ' 4 |
|
|
159
|
+
OR A ; not a stop PCM command ? ' 4 | 18 (69)
|
|
160
|
+
JR NZ, .PCM_play ; go set new prio ' 7/12 |
|
|
161
|
+
|
|
162
|
+
LD C, 0 ; reset prio for stop ' 7 | +2
|
|
163
|
+
|
|
164
|
+
.PCM_play ; ' 69
|
|
165
|
+
LD (HL), C ; set new prio ' 7 | (76)
|
|
166
|
+
|
|
167
|
+
LD H, (ID_TABLE>>10) ; ' 7 |
|
|
168
|
+
LD L, A ; ' 4 |
|
|
169
|
+
ADD HL, HL ; ' 6 |
|
|
170
|
+
ADD HL, HL ; HL point on new PCM addr ' 6 | 29 (105)
|
|
171
|
+
LD SP, HL ; set SP to new PCM addr ' 6 |
|
|
172
|
+
|
|
173
|
+
POP HL ; copy params ' 10 |
|
|
174
|
+
LD (PCM_ADDR+(ch*8)),HL ; ' 16 |
|
|
175
|
+
POP HL ; ' 10 | 52 (157)
|
|
176
|
+
LD (PCM_LEN+(ch*8)),HL ; ' 16 |
|
|
177
|
+
|
|
178
|
+
.end
|
|
179
|
+
endm
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
; handlePCMCommandXGM
|
|
183
|
+
; -------------------
|
|
184
|
+
; XGM data -> DE -> XGM data
|
|
185
|
+
; PCM prio -> C -> ?
|
|
186
|
+
; ? -> HL -> ?
|
|
187
|
+
; ? -> SP -> ?
|
|
188
|
+
;
|
|
189
|
+
; handle PCM command for channel 'ch' for XGM music (PCM id < 0x40)
|
|
190
|
+
; = 142 cycles
|
|
191
|
+
|
|
192
|
+
macro handlePCMCommandXGM ch
|
|
193
|
+
|
|
194
|
+
LD HL, PCM_PRIO+(ch*8) ; HL point on PCM info ' 10 |
|
|
195
|
+
LD A, C ; A = new prio ' 4 |
|
|
196
|
+
CP (HL) ; compare new and old prio ' 7 | (31)
|
|
197
|
+
JP NC, .play_new ; >= old prio --> play new ' 10 |
|
|
198
|
+
|
|
199
|
+
INC E ; next XGM command ' 4 |
|
|
200
|
+
wait97 ; sync ' 97 | 111 (142)
|
|
201
|
+
JP .end ; done ' 10 |
|
|
202
|
+
|
|
203
|
+
.play_new
|
|
204
|
+
LD A, (DE) ; A = PCM id (max = $3F) ' 7 |
|
|
205
|
+
INC E ; next XGM command ' 4 |
|
|
206
|
+
OR A ; not a stop PCM command ? ' 4 | 27 (58)
|
|
207
|
+
JR NZ, .PCM_play ; go set new prio ' 7/12 |
|
|
208
|
+
|
|
209
|
+
LD C, 0 ; reset prio for stop ' 7 | +2
|
|
210
|
+
|
|
211
|
+
.PCM_play
|
|
212
|
+
LD (HL), C ; set new prio ' 7 | (65)
|
|
213
|
+
|
|
214
|
+
LD H, (ID_TABLE>>8) ; ' 7 |
|
|
215
|
+
ADD A ; ' 4 |
|
|
216
|
+
ADD A ; ' 4 | 25 (90)
|
|
217
|
+
LD L, A ; HL point on new PCM addr ' 4 |
|
|
218
|
+
LD SP, HL ; set SP to new PCM addr ' 6 |
|
|
219
|
+
|
|
220
|
+
POP HL ; copy params ' 10 |
|
|
221
|
+
LD (PCM_ADDR+(ch*8)),HL ; ' 16 |
|
|
222
|
+
POP HL ; ' 10 | 52 (142)
|
|
223
|
+
LD (PCM_LEN+(ch*8)),HL ; ' 16 |
|
|
224
|
+
|
|
225
|
+
.end ; ' 142
|
|
226
|
+
|
|
227
|
+
endm
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
; prepareChannelAlt
|
|
231
|
+
; -----------------
|
|
232
|
+
; ? -> HL -> point to the sample source (ROM)
|
|
233
|
+
; ? -> DE -> point to write buffer
|
|
234
|
+
;
|
|
235
|
+
; set bank and prepare registers to play PCM channel 'ch'
|
|
236
|
+
; = 176 cycles
|
|
237
|
+
|
|
238
|
+
macro prepareChannelAlt ch
|
|
239
|
+
|
|
240
|
+
LD HL, (PCM_ADDR+(ch*8)) ; HL = sample addr (HM) ' 16 | (16)
|
|
241
|
+
|
|
242
|
+
LD A, L ; A = bit 8-15 ' 4 |
|
|
243
|
+
RLA ; C flag = bit 15 ' 4 |
|
|
244
|
+
LD A, H ; A = bit 16-23 ' 4 | 16 (32)
|
|
245
|
+
RLA ; A = bit 15-22 ' 4 |
|
|
246
|
+
|
|
247
|
+
setBank_DE ; set bank ' 105 | (137)
|
|
248
|
+
|
|
249
|
+
LD H, L ; ' 4 |
|
|
250
|
+
SET 7, H ; HL |= 0x8000 ' 8 | 19 (156)
|
|
251
|
+
LD L, 0 ; HL = sample addr bank ' 7 |
|
|
252
|
+
|
|
253
|
+
LD DE, (WRITEBUF) ; DE = write buffer ' 20 | (176)
|
|
254
|
+
|
|
255
|
+
endm
|
|
256
|
+
|
|
257
|
+
; prepareChannel
|
|
258
|
+
; --------------
|
|
259
|
+
; ? -> SP -> point to the sample source (ROM)
|
|
260
|
+
; ? -> HL -> point to write buffer
|
|
261
|
+
;
|
|
262
|
+
; set bank and prepare registers to play PCM channel 'ch'
|
|
263
|
+
; = 178 cycles
|
|
264
|
+
|
|
265
|
+
macro prepareChannel ch
|
|
266
|
+
|
|
267
|
+
LD HL, (PCM_ADDR+(ch*8)) ; HL = sample addr (HM) ' 16 | (16)
|
|
268
|
+
|
|
269
|
+
LD A, L ; A = bit 8-15 ' 4 |
|
|
270
|
+
RLA ; C flag = bit 15 ' 4 |
|
|
271
|
+
LD A, H ; A = bit 16-23 ' 4 | 16 (32)
|
|
272
|
+
RLA ; A = bit 15-22 ' 4 |
|
|
273
|
+
|
|
274
|
+
setBank_DE ; set bank ' 105 | (137)
|
|
275
|
+
|
|
276
|
+
LD H, L ; ' 4 |
|
|
277
|
+
SET 7, H ; HL |= 0x8000 ' 8 | 25 (162)
|
|
278
|
+
LD L, 0 ; HL = sample addr bank ' 7 |
|
|
279
|
+
LD SP, HL ; SP point on sample ' 6 |
|
|
280
|
+
|
|
281
|
+
LD HL, (WRITEBUF) ; HL = write buffer ' 16 | (178)
|
|
282
|
+
|
|
283
|
+
endm
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
; stopChannel
|
|
287
|
+
; -----------
|
|
288
|
+
; ? -> HL -> STATUS
|
|
289
|
+
;
|
|
290
|
+
; set null sample play for channel 'ch'
|
|
291
|
+
; = 75 cycles
|
|
292
|
+
|
|
293
|
+
macro stopChannel ch
|
|
294
|
+
|
|
295
|
+
LD HL, (ID_TABLE+0) ; HL = null PCM addr ' 16 |
|
|
296
|
+
LD (PCM_ADDR+(ch*8)), HL ; set new PCM addr ' 16 |
|
|
297
|
+
LD HL, $0001 ; HL = null PCM len ' 10 | (58)
|
|
298
|
+
LD (PCM_LEN+(ch*8)), HL ; set new PCM addr ' 16 |
|
|
299
|
+
|
|
300
|
+
XOR A ; ' 4 |
|
|
301
|
+
LD (PCM_PRIO+(ch*8)), A ; clear prio ' 13 | 17 (75)
|
|
302
|
+
|
|
303
|
+
endm
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
; updateChannelData
|
|
307
|
+
; -----------------
|
|
308
|
+
; ? -> HL -> ?
|
|
309
|
+
;
|
|
310
|
+
; update sample address and sample lenght
|
|
311
|
+
; check if sample is done and stop it if needed
|
|
312
|
+
; = 153 cycles
|
|
313
|
+
|
|
314
|
+
macro updateChannelData ch
|
|
315
|
+
|
|
316
|
+
LD HL, (PCM_ADDR+(ch*8)) ; increment address ' 16 |
|
|
317
|
+
INC HL ; ' 6 | (38)
|
|
318
|
+
LD (PCM_ADDR+(ch*8)), HL ; ' 16 |
|
|
319
|
+
|
|
320
|
+
LD HL, (PCM_LEN+(ch*8)) ; decrement lenght ' 16 |
|
|
321
|
+
DEC HL ; ' 6 | 22 (60)
|
|
322
|
+
|
|
323
|
+
LD A, H ; ' 4 |
|
|
324
|
+
OR L ; ' 4 | 18 (78)
|
|
325
|
+
JP Z, .done ; sample done ? ' 10 |
|
|
326
|
+
|
|
327
|
+
LD (PCM_LEN+(ch*8)), HL ; set new sample len ' 16 |
|
|
328
|
+
wait49 ; ' 49 | 75 (153)
|
|
329
|
+
JP .end ; ' 10 |
|
|
330
|
+
|
|
331
|
+
.done
|
|
332
|
+
stopChannel ch ; stop channel ' 75 | (153)
|
|
333
|
+
|
|
334
|
+
.end
|
|
335
|
+
|
|
336
|
+
endm
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
; compareReadWrite
|
|
340
|
+
; ----------------
|
|
341
|
+
; read buffer -> BC'
|
|
342
|
+
; write buffer -> DE
|
|
343
|
+
; ZF -> Write == Read buffer
|
|
344
|
+
;
|
|
345
|
+
; compare read and write buffer
|
|
346
|
+
; = 16 cycles
|
|
347
|
+
|
|
348
|
+
macro compareReadWrite
|
|
349
|
+
|
|
350
|
+
EXX ; ' 4 |
|
|
351
|
+
LD A, B ; A = read buffer high ' 4 |
|
|
352
|
+
EXX ; ' 4 | 16
|
|
353
|
+
CP D ; compare write buffer high ' 4 |
|
|
354
|
+
|
|
355
|
+
endm
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
; readAndClear
|
|
359
|
+
; ------------
|
|
360
|
+
; point to sample source (ROM) -> HL -> point to sample source (ROM)
|
|
361
|
+
; point to write buffer -> DE -> point to write buffer
|
|
362
|
+
; ? -> PF -> 0=done 1=not done
|
|
363
|
+
;
|
|
364
|
+
; read 1 sample from rom and write it in output buffer
|
|
365
|
+
; = 19 cycles
|
|
366
|
+
|
|
367
|
+
macro readAndClear
|
|
368
|
+
|
|
369
|
+
LDI ; ' 16+3 | 19
|
|
370
|
+
|
|
371
|
+
endm
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
; readAndClear2
|
|
375
|
+
; -------------
|
|
376
|
+
; point to sample source (ROM) -> HL -> point to sample source (ROM)
|
|
377
|
+
; point to write buffer -> DE -> point to write buffer
|
|
378
|
+
; ? -> PF -> 0=done 1=not done
|
|
379
|
+
;
|
|
380
|
+
; read 2 samples from rom and write them in write buffer
|
|
381
|
+
; = 38 cycles
|
|
382
|
+
|
|
383
|
+
macro readAndClear2
|
|
384
|
+
|
|
385
|
+
LDI ; ' 16+3 |
|
|
386
|
+
LDI ; ' 16+3 | (38)
|
|
387
|
+
|
|
388
|
+
endm
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
; readAndMix2
|
|
392
|
+
; -----------
|
|
393
|
+
; point to sample source (ROM) -> SP -> point to sample source (ROM)
|
|
394
|
+
; point to write buffer -> HL -> point to write buffer
|
|
395
|
+
; $80 -> C
|
|
396
|
+
;
|
|
397
|
+
; read 2 samples and mix them in output buffer
|
|
398
|
+
; = 80 (+22 when overflow)
|
|
399
|
+
|
|
400
|
+
macro readAndMix2
|
|
401
|
+
|
|
402
|
+
POP DE ; read 2 samples from ROM ' 10+6 | (16)
|
|
403
|
+
|
|
404
|
+
LD A, E ; first sample ' 4 |
|
|
405
|
+
ADD (HL) ; mix with write buffer ' 7 | 21 (37)
|
|
406
|
+
JP PO, .ok ; check overflow ' 10 |
|
|
407
|
+
|
|
408
|
+
LD A, C ; fix overflow ' 4 |
|
|
409
|
+
ADC $FF ; A = $7F/$80 ' 7 | +11
|
|
410
|
+
|
|
411
|
+
.ok
|
|
412
|
+
LD (HL), A ; store it in write sample ' 7 |
|
|
413
|
+
INC L ; ' 4 | 11 (48)
|
|
414
|
+
|
|
415
|
+
LD A, D ; second sample ' 4 |
|
|
416
|
+
ADD (HL) ; mix ' 7 | 21 (69)
|
|
417
|
+
JP PO, .ok2 ; check overflow ' 10 |
|
|
418
|
+
|
|
419
|
+
LD A, C ; fix overflow ' 4 |
|
|
420
|
+
ADC $FF ; A = $7F/$80 ' 7 | +11
|
|
421
|
+
|
|
422
|
+
.ok2
|
|
423
|
+
LD (HL), A ; store it in write sample ' 7 |
|
|
424
|
+
INC L ; ' 4 | 11 (80)
|
|
425
|
+
|
|
426
|
+
endm ; ' 80 (+22)
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
; readAndMix16WhilePlay3
|
|
430
|
+
; ----------------------
|
|
431
|
+
; point to sample source (ROM) -> SP -> point to sample source (ROM)
|
|
432
|
+
; point to write buffer -> HL -> point to write buffer
|
|
433
|
+
; $80 -> C
|
|
434
|
+
;
|
|
435
|
+
; read 16 samples and mix them in output buffer
|
|
436
|
+
; = 2 samples + 240 cycles
|
|
437
|
+
|
|
438
|
+
macro readAndMix16WhilePlay3
|
|
439
|
+
|
|
440
|
+
sampleOutput ; ' 36 | (36)
|
|
441
|
+
|
|
442
|
+
readAndMix2 ; read and mix 2 samples ' 80 |
|
|
443
|
+
readAndMix2 ; read and mix 2 samples ' 80 | 160 (196)
|
|
444
|
+
|
|
445
|
+
POP DE ; read 2 samples from ROM ' 10+6 | (212)
|
|
446
|
+
|
|
447
|
+
LD A, E ; first sample ' 4 |
|
|
448
|
+
ADD (HL) ; mix with write buffer ' 7 | 21 (233)
|
|
449
|
+
JP PO, .ok ; check overflow ' 10 |
|
|
450
|
+
|
|
451
|
+
LD A, C ; fix overflow ' 4 |
|
|
452
|
+
ADC $FF ; A = $7F/$80 ' 7 | +11
|
|
453
|
+
|
|
454
|
+
.ok
|
|
455
|
+
LD (HL), A ; store it in write sample ' 7 |
|
|
456
|
+
INC L ; ' 4 | 11 (254-10)
|
|
457
|
+
|
|
458
|
+
sampleOutput ; -10 --> too soon ' 36 | (36-10)
|
|
459
|
+
|
|
460
|
+
LD A, D ; second sample ' 4 |
|
|
461
|
+
ADD (HL) ; mix ' 7 | 21 (47)
|
|
462
|
+
JP PO, .ok2 ; check overflow ' 10 |
|
|
463
|
+
|
|
464
|
+
LD A, C ; fix overflow ' 4 |
|
|
465
|
+
ADC $FF ; A = $7F/$80 ' 7 | +11
|
|
466
|
+
|
|
467
|
+
.ok2
|
|
468
|
+
LD (HL), A ; store it in write sample ' 7 |
|
|
469
|
+
INC L ; ' 4 | 11 (58)
|
|
470
|
+
|
|
471
|
+
readAndMix2 ; read and mix 2 samples ' 80 |
|
|
472
|
+
readAndMix2 ; read and mix 2 samples ' 80 | 160 (218)
|
|
473
|
+
|
|
474
|
+
POP DE ; read 2 samples from ROM ' 10+6 | (234)
|
|
475
|
+
|
|
476
|
+
LD A, E ; first sample ' 4 |
|
|
477
|
+
ADD (HL) ; mix with write buffer ' 7 | 21 (254+1)
|
|
478
|
+
JP PO, .ok3 ; check overflow ' 10 |
|
|
479
|
+
|
|
480
|
+
LD A, C ; fix overflow ' 4 |
|
|
481
|
+
ADC $FF ; A = $7F/$80 ' 7 | +11
|
|
482
|
+
|
|
483
|
+
.ok3
|
|
484
|
+
LD (HL), A ; store it in write sample ' 7 | (254+8)
|
|
485
|
+
|
|
486
|
+
sampleOutput ; +8 --> too late ' 36 | (36+8)
|
|
487
|
+
|
|
488
|
+
INC L ; ' 4 | (48)
|
|
489
|
+
|
|
490
|
+
LD A, D ; second sample ' 4 |
|
|
491
|
+
ADD (HL) ; mix ' 7 | 21 (69)
|
|
492
|
+
JP PO, .ok4 ; check overflow ' 10 |
|
|
493
|
+
|
|
494
|
+
LD A, C ; fix overflow ' 4 |
|
|
495
|
+
ADC $FF ; A = $7F/$80 ' 7 | +11
|
|
496
|
+
|
|
497
|
+
.ok4
|
|
498
|
+
LD (HL), A ; store it in write sample ' 7 |
|
|
499
|
+
INC L ; ' 4 | 11 (80)
|
|
500
|
+
|
|
501
|
+
readAndMix2 ; read and mix 2 samples ' 80 |
|
|
502
|
+
readAndMix2 ; read and mix 2 samples ' 80 | 160 (240)
|
|
503
|
+
|
|
504
|
+
endm ; ' 240
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
; readMixAndUnsign
|
|
508
|
+
; ----------------
|
|
509
|
+
; point to sample source (ROM) -> HL -> point to sample source (ROM)
|
|
510
|
+
; point to write buffer -> DE -> point to write buffer
|
|
511
|
+
; $80 -> C
|
|
512
|
+
;
|
|
513
|
+
; read 1 sample and mix it with output buffer, then unsign it
|
|
514
|
+
; = 46 (+11 when overflow)
|
|
515
|
+
|
|
516
|
+
macro readMixAndUnsign
|
|
517
|
+
|
|
518
|
+
LD A, (DE) ; read value in write buf ' 7 |
|
|
519
|
+
ADD (HL) ; mix with source sample ' 7+3 | (27)
|
|
520
|
+
JP PO, .ok ; check overflow ' 10 |
|
|
521
|
+
|
|
522
|
+
LD A, C ; fix overflow ' 4 |
|
|
523
|
+
ADC $FF ; A = $7F/$80 ' 7 | +11
|
|
524
|
+
|
|
525
|
+
.ok
|
|
526
|
+
ADD C ; unsign ' 4 |
|
|
527
|
+
LD (DE), A ; write sample in buffer ' 7 | 19 (46)
|
|
528
|
+
INC E ; ' 4 |
|
|
529
|
+
INC L ; next ' 4 |
|
|
530
|
+
|
|
531
|
+
endm ; ' 46 (+11)
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
; sampleOutput
|
|
535
|
+
; ------------
|
|
536
|
+
; YMPORT0 -> HL'
|
|
537
|
+
; YMPORT1 -> DE'
|
|
538
|
+
; read buffer -> BC' -> read buffer
|
|
539
|
+
;
|
|
540
|
+
; output a sample to the DAC
|
|
541
|
+
; = 36 cycles
|
|
542
|
+
|
|
543
|
+
macro sampleOutput
|
|
544
|
+
|
|
545
|
+
EXX ; ' 4 | 4
|
|
546
|
+
|
|
547
|
+
LD A, (BC) ; read sample from buffer ' 7 |
|
|
548
|
+
INC BC ; increment read address ' 6 |
|
|
549
|
+
RES 2, B ; read_address &= 0x03FF ' 8 | 28 (32)
|
|
550
|
+
LD (DE), A ; play sample ' 7 |
|
|
551
|
+
|
|
552
|
+
EXX ; ' 4 | (36)
|
|
553
|
+
|
|
554
|
+
endm
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
; sampleOutputSafe
|
|
558
|
+
; ----------------
|
|
559
|
+
; YMPORT0 -> HL'
|
|
560
|
+
; YMPORT1 -> DE'
|
|
561
|
+
; read buffer -> BC' -> read buffer
|
|
562
|
+
;
|
|
563
|
+
; output a sample to the DAC
|
|
564
|
+
; = 46 cycles
|
|
565
|
+
|
|
566
|
+
macro sampleOutputSafe
|
|
567
|
+
|
|
568
|
+
EXX ; ' 4 | 4
|
|
569
|
+
|
|
570
|
+
LD (HL), $2A ; prepare DAC write ' 10 |
|
|
571
|
+
LD A, (BC) ; read sample from buffer ' 7 |
|
|
572
|
+
INC BC ; increment read address ' 6 | 38 (42)
|
|
573
|
+
RES 2, B ; read_address &= 0x03FF ' 8 |
|
|
574
|
+
LD (DE), A ; play sample ' 7 |
|
|
575
|
+
|
|
576
|
+
EXX ; ' 4 | (46)
|
|
577
|
+
|
|
578
|
+
endm
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
; waitYMReadyFast
|
|
582
|
+
; ---------------
|
|
583
|
+
; YMPORT0 -> HL
|
|
584
|
+
;
|
|
585
|
+
; wait until YM ready
|
|
586
|
+
; = 22 cycles minimum (22 * X)
|
|
587
|
+
|
|
588
|
+
macro waitYMReadyFast
|
|
589
|
+
|
|
590
|
+
.wait
|
|
591
|
+
BIT 7, (HL) ; test YM ready bit ' 12 | (22)
|
|
592
|
+
JP NZ, .wait ; wait while busy ' 10 |
|
|
593
|
+
|
|
594
|
+
endm
|
|
595
|
+
|
|
596
|
+
|
|
597
|
+
; waitYMReady
|
|
598
|
+
; -----------
|
|
599
|
+
; YMPORT0 -> HL'
|
|
600
|
+
;
|
|
601
|
+
; wait until YM ready
|
|
602
|
+
; = 30 cycles minimum (8 + (22 * X))
|
|
603
|
+
|
|
604
|
+
macro waitYMReady
|
|
605
|
+
|
|
606
|
+
EXX ; ' 4 | (4)
|
|
607
|
+
|
|
608
|
+
.wait
|
|
609
|
+
BIT 7, (HL) ; test YM ready bit ' 12 | (22)
|
|
610
|
+
JP NZ, .wait ; wait while busy ' 10 |
|
|
611
|
+
|
|
612
|
+
EXX ; ' 4 | (30)
|
|
613
|
+
|
|
614
|
+
endm
|
|
615
|
+
|
|
616
|
+
|
|
617
|
+
; ########################### init ##############################
|
|
618
|
+
|
|
619
|
+
ORG $0000
|
|
620
|
+
|
|
621
|
+
init
|
|
622
|
+
DI ; disable ints
|
|
623
|
+
LD SP, STACK ; setup stack
|
|
624
|
+
IM $01 ; set int mode 1
|
|
625
|
+
XOR A
|
|
626
|
+
LD (STATUS), A ; driver not ready
|
|
627
|
+
LD (COMMAND), A ; command cleared
|
|
628
|
+
JP start ; jump to start
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
; ########################### main ##############################
|
|
632
|
+
|
|
633
|
+
BLOCK $0200-$
|
|
634
|
+
|
|
635
|
+
start
|
|
636
|
+
|
|
637
|
+
LD HL, PARAMS
|
|
638
|
+
LD A, $00
|
|
639
|
+
LD B, $40
|
|
640
|
+
|
|
641
|
+
cp_loop
|
|
642
|
+
LD (HL), A ; clear parameters
|
|
643
|
+
INC HL
|
|
644
|
+
DJNZ cp_loop
|
|
645
|
+
|
|
646
|
+
LD HL, YM_RR_OFF
|
|
647
|
+
LD A, $FF
|
|
648
|
+
LD B, (6 * 4)
|
|
649
|
+
|
|
650
|
+
off_loop
|
|
651
|
+
LD (HL), A ; clear off settings
|
|
652
|
+
INC HL
|
|
653
|
+
DJNZ off_loop
|
|
654
|
+
|
|
655
|
+
LD HL, PSG_ENV_OFF
|
|
656
|
+
|
|
657
|
+
LD (HL), $9F ; PSG channel 0 off
|
|
658
|
+
INC HL
|
|
659
|
+
LD (HL), $BF ; PSG channel 1 off
|
|
660
|
+
INC HL
|
|
661
|
+
LD (HL), $DF ; PSG channel 2 off
|
|
662
|
+
INC HL
|
|
663
|
+
LD (HL), $FF ; PSG channel 3 off
|
|
664
|
+
|
|
665
|
+
LD HL, YM_RR_OFF
|
|
666
|
+
LD DE, YM_RR_SAV
|
|
667
|
+
LD BC, (6 * 4) + 4
|
|
668
|
+
LDIR ; copy off settings to sav settings
|
|
669
|
+
|
|
670
|
+
LD HL, PCM_BUFFER
|
|
671
|
+
LD A, $80
|
|
672
|
+
LD B, $00 ; for 256 * 4 bytes to clear
|
|
673
|
+
|
|
674
|
+
cb_loop
|
|
675
|
+
LD (HL), A ; initialise buffers to silent
|
|
676
|
+
INC HL
|
|
677
|
+
LD (HL), A
|
|
678
|
+
INC HL
|
|
679
|
+
LD (HL), A
|
|
680
|
+
INC HL
|
|
681
|
+
LD (HL), A
|
|
682
|
+
INC HL
|
|
683
|
+
DJNZ cb_loop
|
|
684
|
+
|
|
685
|
+
LD A, $00
|
|
686
|
+
|
|
687
|
+
LD HL, YM_2B_SAV
|
|
688
|
+
LD (HL), A ; DAC disabled by default
|
|
689
|
+
LD HL, YM_2B_CNT
|
|
690
|
+
LD (HL), A ; DAC disabled by default
|
|
691
|
+
|
|
692
|
+
LD HL, MODIFYING_F
|
|
693
|
+
LD (HL), A ; clear modifying variable flag
|
|
694
|
+
LD HL, PENDING_FRM
|
|
695
|
+
LD (HL), A ; clear frame to process counter
|
|
696
|
+
|
|
697
|
+
CALL initDAC ; prepare DAC for output
|
|
698
|
+
|
|
699
|
+
LD HL, PCM_BUFFER0 ; initialise write and read buffer
|
|
700
|
+
LD (WRITEBUF), HL
|
|
701
|
+
LD HL, PCM_BUFFER1
|
|
702
|
+
LD (READBUF), HL
|
|
703
|
+
|
|
704
|
+
LD BC, HL ; BC' point to read buffer
|
|
705
|
+
LD HL, YMPORT0 ; HL' point to YMPORT0
|
|
706
|
+
LD DE, YMPORT1 ; DE' point to YMPORT1
|
|
707
|
+
EXX
|
|
708
|
+
|
|
709
|
+
stopChannel 0 ; stop all channels
|
|
710
|
+
stopChannel 1
|
|
711
|
+
stopChannel 2
|
|
712
|
+
stopChannel 3
|
|
713
|
+
|
|
714
|
+
LD A, STATREADY
|
|
715
|
+
LD (STATUS), A ; driver ready
|
|
716
|
+
|
|
717
|
+
main_loop
|
|
718
|
+
|
|
719
|
+
; LD A, (VCOUNTER)
|
|
720
|
+
; LD (DEBUG_1), A
|
|
721
|
+
|
|
722
|
+
|
|
723
|
+
; prepare XGM buffer
|
|
724
|
+
; ------------------
|
|
725
|
+
|
|
726
|
+
; $00
|
|
727
|
+
sampleOutput ; ' 36 | 36
|
|
728
|
+
|
|
729
|
+
LD DE, XGM_BUFFER ; DE point to XGM buf ' 10 |
|
|
730
|
+
LD A, (STATUS) ; A = STATUS ' 13 |
|
|
731
|
+
BIT XGM_PLAY_SFT, A ; is XGM playing ? ' 8 | 41 (77)
|
|
732
|
+
JP NZ, has_xgm ; go to prepare buf ' 10 |
|
|
733
|
+
|
|
734
|
+
wait146 ; sync ' 146 |
|
|
735
|
+
XOR A ; A = 0 ' 4 | 160 (237)
|
|
736
|
+
JP end_prep_xgm ; preparation done ' 10 |
|
|
737
|
+
|
|
738
|
+
has_xgm
|
|
739
|
+
LD HL, (XGM_ADDR) ; XGM addr (b0-b15) ' 16 |
|
|
740
|
+
LD A, H ; A = XGM addr (b8-b15) ' 4 |
|
|
741
|
+
RLA ; CF = XGM addr b15 ' 4 | 146 (223)
|
|
742
|
+
LD A, (XGM_ADDR+2) ; A = sample addr (H) ' 13 |
|
|
743
|
+
RLA ; sample addr (b22-b15) ' 4 |
|
|
744
|
+
setBank_BC ; setBank ' 105 |
|
|
745
|
+
|
|
746
|
+
LD A, H ; save H ' 4 |
|
|
747
|
+
SET 7, H ; HL = XGM addr bank ' 8 |
|
|
748
|
+
LD B, $0 ; B = 0 ' 7 | 30 (254-1)
|
|
749
|
+
LD C, (HL) ; BC = bytes to process ' 7 |
|
|
750
|
+
LD H, A ; restore H ' 4 |
|
|
751
|
+
|
|
752
|
+
; $00+X
|
|
753
|
+
sampleOutput ; ' 36 | (36-1)
|
|
754
|
+
|
|
755
|
+
LD A, L ; A = addr low ' 4 |
|
|
756
|
+
ADD C ; compute new addr (L) ' 4 |
|
|
757
|
+
LD (XGM_ADDR+0), A ; store new addr (L) ' 13 | 28 (63)
|
|
758
|
+
JR C, .split ; carry --> separate ' 7 |
|
|
759
|
+
|
|
760
|
+
.no_split
|
|
761
|
+
wait104 ; sync ' 104 | (167)
|
|
762
|
+
|
|
763
|
+
SET 7, H ; HL = XGM addr bank ' 8 |
|
|
764
|
+
INC HL ; HL = start frame data ' 6 |
|
|
765
|
+
XOR A ; no second part ' 4 |
|
|
766
|
+
LD IYH, A ; IYH = sec part size ' 8 | 44 (211)
|
|
767
|
+
NOP ; ' 4 |
|
|
768
|
+
DEC C ; first part size = 0 ? ' 4 |
|
|
769
|
+
JP Z, .second_part ; go to second part ' 10 |
|
|
770
|
+
|
|
771
|
+
wait12 ; sync ' 12 | 22 (233)
|
|
772
|
+
JP .first_part_pre ; start filling ' 10 |
|
|
773
|
+
|
|
774
|
+
.split
|
|
775
|
+
LD IYH, A ; IYH = sec part size ' 8 |
|
|
776
|
+
SUB C ; ' 4 |
|
|
777
|
+
NEG ; ' 8 | 34 (97)
|
|
778
|
+
DEC A ; A = (C - IYH) - 1 ' 4 |
|
|
779
|
+
JP NZ, .first_part_ok ; not zero --> do it ' 10 |
|
|
780
|
+
|
|
781
|
+
LD A, H ; A = addr med (M) ' 4 |
|
|
782
|
+
ADD $1 ; inc with CF set ' 7 |
|
|
783
|
+
LD (XGM_ADDR+1), A ; store new addr (M) ' 13 |
|
|
784
|
+
LD A, (XGM_ADDR+2) ; load sample addr (H) ' 13 |
|
|
785
|
+
ADC B ; inc ' 4 | 68 (164)
|
|
786
|
+
LD (XGM_ADDR+2), A ; store sample addr (H) ' 13 |
|
|
787
|
+
SET 7, H ; HL = XGM addr bank ' 8 |
|
|
788
|
+
INC HL ; HL = start frame data ' 6 |
|
|
789
|
+
|
|
790
|
+
wait36 ; sync ' 36 |
|
|
791
|
+
JP .second_part ; go second part ' 10 | 65 (211)
|
|
792
|
+
|
|
793
|
+
.first_part_ok
|
|
794
|
+
LD C, A ; C = first part size ' 4 |
|
|
795
|
+
LD A, H ; A = addr med (M) ' 4 |
|
|
796
|
+
ADD $1 ; inc with CF set ' 7 |
|
|
797
|
+
LD (XGM_ADDR+1), A ; store new addr (M) ' 13 |
|
|
798
|
+
LD A, (XGM_ADDR+2) ; load sample addr (H) ' 13 | 72 (169)
|
|
799
|
+
ADC B ; inc ' 4 |
|
|
800
|
+
LD (XGM_ADDR+2), A ; store sample addr (H) ' 13 |
|
|
801
|
+
SET 7, H ; HL = XGM addr bank ' 8 |
|
|
802
|
+
INC HL ; HL = start frame data ' 6 |
|
|
803
|
+
|
|
804
|
+
wait64 ; sync ' 64 | (233)
|
|
805
|
+
|
|
806
|
+
.first_part_pre ; ' 233
|
|
807
|
+
LD A, 11 ; A = block fill size ' 7 |
|
|
808
|
+
CP C ; C < block size ' 4 | 21 (254)
|
|
809
|
+
JP NC, .first_part_end ; go to last bytes ' 10 |
|
|
810
|
+
|
|
811
|
+
.first_part
|
|
812
|
+
; $00+X
|
|
813
|
+
sampleOutput ; ' 36 | 36
|
|
814
|
+
|
|
815
|
+
LDI ; fill XGM buffer ' 16+1 |
|
|
816
|
+
LDI ; 11 bytes at once ' 16+1 |
|
|
817
|
+
LDI ; ' 16+1 |
|
|
818
|
+
LDI ; ' 16+1 |
|
|
819
|
+
LDI ; ' 16+1 |
|
|
820
|
+
LDI ; ' 16+1 | 187 (223)
|
|
821
|
+
LDI ; ' 16+1 |
|
|
822
|
+
LDI ; ' 16+1 |
|
|
823
|
+
LDI ; ' 16+1 |
|
|
824
|
+
LDI ; ' 16+1 |
|
|
825
|
+
LDI ; ' 16+1 |
|
|
826
|
+
|
|
827
|
+
wait10 ; sync ' 10 |
|
|
828
|
+
LD A, 11 ; A = block fill size ' 7 |
|
|
829
|
+
CP C ; remaining > 11 ' 4 | 31 (254)
|
|
830
|
+
JP C, .first_part ; continu block fill ' 10 |
|
|
831
|
+
|
|
832
|
+
.first_part_end
|
|
833
|
+
; $00+X
|
|
834
|
+
sampleOutput ; ' 36 | 36
|
|
835
|
+
|
|
836
|
+
LDI ; fill XGM buffer ' 16+1 |
|
|
837
|
+
JP PO, .fst_part_d0 ; ' 10 | 27 (63)
|
|
838
|
+
LDI ; ' 16+1 |
|
|
839
|
+
JP PO, .fst_part_d1 ; ' 10 | 27 (90)
|
|
840
|
+
LDI ; ' 16+1 |
|
|
841
|
+
JP PO, .fst_part_d2 ; ' 10 | 27 (117)
|
|
842
|
+
LDI ; ' 16+1 |
|
|
843
|
+
JP PO, .fst_part_d3 ; ' 10 | 27 (144)
|
|
844
|
+
LDI ; ' 16+1 |
|
|
845
|
+
JP PO, .fst_part_d4 ; ' 10 | 27 (171)
|
|
846
|
+
LDI ; ' 16+1 |
|
|
847
|
+
JP PO, .fst_part_d5 ; ' 10 | 27 (198)
|
|
848
|
+
|
|
849
|
+
wait56 ; sync ' 56 | (254)
|
|
850
|
+
|
|
851
|
+
; $00+X
|
|
852
|
+
sampleOutput ; ' 36 | 36
|
|
853
|
+
|
|
854
|
+
LDI ; fill XGM buffer ' 16+1 |
|
|
855
|
+
JP PO, .fst_part_d0 ; ' 10 | 27 (63)
|
|
856
|
+
LDI ; ' 16+1 |
|
|
857
|
+
JP PO, .fst_part_d1 ; ' 10 | 27 (90)
|
|
858
|
+
LDI ; ' 16+1 |
|
|
859
|
+
JP PO, .fst_part_d2 ; ' 10 | 27 (117)
|
|
860
|
+
LDI ; ' 16+1 |
|
|
861
|
+
JP PO, .fst_part_d3 ; ' 10 | 27 (144)
|
|
862
|
+
LDI ; ' 16+1 |
|
|
863
|
+
JP PO, .fst_part_d4 ; ' 10 | 27 (171)
|
|
864
|
+
LDI ; ' 16+1 |
|
|
865
|
+
JP .fst_part_d5 ; ' 10 | 27 (198)
|
|
866
|
+
|
|
867
|
+
.fst_part_d0
|
|
868
|
+
wait27 ; sync ' 27 | (90)
|
|
869
|
+
.fst_part_d1
|
|
870
|
+
wait27 ; sync ' 27 | (117)
|
|
871
|
+
.fst_part_d2
|
|
872
|
+
wait27 ; sync ' 27 | (144)
|
|
873
|
+
.fst_part_d3
|
|
874
|
+
wait27 ; sync ' 27 | (171)
|
|
875
|
+
.fst_part_d4
|
|
876
|
+
wait27 ; sync ' 27 | (198)
|
|
877
|
+
.fst_part_d5
|
|
878
|
+
wait13 ; sync ' 13 | (211)
|
|
879
|
+
|
|
880
|
+
.second_part ; ' 211
|
|
881
|
+
NOP ; sync ' 4
|
|
882
|
+
LD A, IYH ; A = second part size ' 8 |
|
|
883
|
+
OR A ; ' 4 | 26 (237)
|
|
884
|
+
JP Z, end_prep_xgm ; done ' 10 |
|
|
885
|
+
|
|
886
|
+
wait17 ; sync ' 17 | 254
|
|
887
|
+
|
|
888
|
+
; $00+X
|
|
889
|
+
sampleOutput ; ' 36 | 36
|
|
890
|
+
|
|
891
|
+
LD HL, (XGM_ADDR) ; XGM addr (b0-b15) ' 16 |
|
|
892
|
+
LD A, H ; A = XGM addr (b8-b15) ' 4 |
|
|
893
|
+
RLA ; CF = XGM addr b15 ' 4 | 146 (182)
|
|
894
|
+
LD A, (XGM_ADDR+2) ; A = sample addr (H) ' 13 |
|
|
895
|
+
RLA ; sample addr (b22-b15) ' 4 |
|
|
896
|
+
setBank_BC ; setBank ' 105 |
|
|
897
|
+
|
|
898
|
+
SET 7, H ; HL = XGM addr bank ' 8 | 15 (197)
|
|
899
|
+
LD L, 0 ; ' 7 |
|
|
900
|
+
|
|
901
|
+
wait21 ; sync ' 21 | (218)
|
|
902
|
+
|
|
903
|
+
LD B, 0 ; B = 0 ' 7 |
|
|
904
|
+
LD C, IYH ; BC = second part size ' 8 |
|
|
905
|
+
LD A, 11 ; A = block fill size ' 7 | 36 (254)
|
|
906
|
+
CP C ; C < block size ' 4 |
|
|
907
|
+
JP NC, .sec_part_end ; go to last bytes ' 10 |
|
|
908
|
+
|
|
909
|
+
; $00+X
|
|
910
|
+
.sec_part_loop
|
|
911
|
+
sampleOutput ; ' 36 | 36
|
|
912
|
+
|
|
913
|
+
LDI ; fill XGM buffer ' 16+1 |
|
|
914
|
+
LDI ; 11 bytes at once ' 16+1 |
|
|
915
|
+
LDI ; ' 16+1 |
|
|
916
|
+
LDI ; ' 16+1 |
|
|
917
|
+
LDI ; ' 16+1 |
|
|
918
|
+
LDI ; ' 16+1 | 187 (223)
|
|
919
|
+
LDI ; ' 16+1 |
|
|
920
|
+
LDI ; ' 16+1 |
|
|
921
|
+
LDI ; ' 16+1 |
|
|
922
|
+
LDI ; ' 16+1 |
|
|
923
|
+
LDI ; ' 16+1 |
|
|
924
|
+
|
|
925
|
+
wait10 ; sync ' 10 |
|
|
926
|
+
LD A, 11 ; A = block fill size ' 7 |
|
|
927
|
+
CP C ; remaining > 11 ' 4 | 31 (254)
|
|
928
|
+
JP C, .sec_part_loop ; continu block fill ' 10 |
|
|
929
|
+
|
|
930
|
+
.sec_part_end
|
|
931
|
+
; $00+X
|
|
932
|
+
sampleOutput ; ' 36 | 36
|
|
933
|
+
|
|
934
|
+
LDI ; fill XGM buffer ' 16+1 |
|
|
935
|
+
JP PO, .sec_part_d0 ; ' 10 | 27 (63)
|
|
936
|
+
LDI ; ' 16+1 |
|
|
937
|
+
JP PO, .sec_part_d1 ; ' 10 | 27 (90)
|
|
938
|
+
LDI ; ' 16+1 |
|
|
939
|
+
JP PO, .sec_part_d2 ; ' 10 | 27 (117)
|
|
940
|
+
LDI ; ' 16+1 |
|
|
941
|
+
JP PO, .sec_part_d3 ; ' 10 | 27 (144)
|
|
942
|
+
LDI ; ' 16+1 |
|
|
943
|
+
JP PO, .sec_part_d4 ; ' 10 | 27 (171)
|
|
944
|
+
LDI ; ' 16+1 |
|
|
945
|
+
JP PO, .sec_part_d5 ; ' 10 | 27 (198)
|
|
946
|
+
|
|
947
|
+
wait56 ; sync ' 56 | (254)
|
|
948
|
+
|
|
949
|
+
; $00+X
|
|
950
|
+
sampleOutput ; ' 36 | 36
|
|
951
|
+
|
|
952
|
+
LDI ; fill XGM buffer ' 16+1 |
|
|
953
|
+
JP PO, .sec_part_d0 ; ' 10 | 27 (63)
|
|
954
|
+
LDI ; ' 16+1 |
|
|
955
|
+
JP PO, .sec_part_d1 ; ' 10 | 27 (90)
|
|
956
|
+
LDI ; ' 16+1 |
|
|
957
|
+
JP PO, .sec_part_d2 ; ' 10 | 27 (117)
|
|
958
|
+
LDI ; ' 16+1 |
|
|
959
|
+
JP PO, .sec_part_d3 ; ' 10 | 27 (144)
|
|
960
|
+
LDI ; ' 16+1 |
|
|
961
|
+
JP PO, .sec_part_d4 ; ' 10 | 27 (171)
|
|
962
|
+
LDI ; ' 16+1 |
|
|
963
|
+
JP .sec_part_d5 ; ' 10 | 27 (198)
|
|
964
|
+
|
|
965
|
+
.sec_part_d0
|
|
966
|
+
wait27 ; sync ' | (90)
|
|
967
|
+
.sec_part_d1
|
|
968
|
+
wait27 ; sync ' | (117)
|
|
969
|
+
.sec_part_d2
|
|
970
|
+
wait27 ; sync ' | (144)
|
|
971
|
+
.sec_part_d3
|
|
972
|
+
wait27 ; sync ' | (171)
|
|
973
|
+
.sec_part_d4
|
|
974
|
+
wait27 ; sync ' | (198)
|
|
975
|
+
.sec_part_d5
|
|
976
|
+
wait35 ; sync ' 35 |
|
|
977
|
+
XOR A ; A = 0 ' 4 | 39 (237)
|
|
978
|
+
|
|
979
|
+
end_prep_xgm ; ' 237
|
|
980
|
+
LD (DE), A ; XGM buf end with 0 ' 7 |
|
|
981
|
+
wait10 ; sync ' 10 | 17 (254)
|
|
982
|
+
|
|
983
|
+
|
|
984
|
+
; XGM PREP DONE
|
|
985
|
+
; -------------
|
|
986
|
+
|
|
987
|
+
; $01+x
|
|
988
|
+
sampleOutput ; ' 36 | (36)
|
|
989
|
+
|
|
990
|
+
LD A, (STATUS) ; A = STATUS ' 13 |
|
|
991
|
+
BIT XGM_PLAY_SFT, A ; XGM playing ? ' 8 | 31 (67)
|
|
992
|
+
JP NZ, .inc ; count elapsed ' 10 |
|
|
993
|
+
|
|
994
|
+
wait71 ; sync ' 71 | 81 (148)
|
|
995
|
+
JP .noinc ; preparation done ' 10 |
|
|
996
|
+
|
|
997
|
+
.inc
|
|
998
|
+
LD HL, ELAPSED ; ' 10 | (77)
|
|
999
|
+
|
|
1000
|
+
LD A, (HL) ; ' 7 |
|
|
1001
|
+
ADD A, #1 ; ' 7 |
|
|
1002
|
+
LD (HL), A ; ' 7 |
|
|
1003
|
+
INC L ; ' 4 |
|
|
1004
|
+
LD A, (HL) ; ' 7 |
|
|
1005
|
+
ADC A, #0 ; inc elapsed frame ' 7 | 71 (148)
|
|
1006
|
+
LD (HL), A ; (24 bit counter) ' 7 |
|
|
1007
|
+
INC L ; ' 4 |
|
|
1008
|
+
LD A, (HL) ; ' 7 |
|
|
1009
|
+
ADC A, #0 ; ' 7 |
|
|
1010
|
+
LD (HL), A ; ' 7 |
|
|
1011
|
+
|
|
1012
|
+
.noinc
|
|
1013
|
+
wait60 ; sync ' 60 | (208)
|
|
1014
|
+
|
|
1015
|
+
LD DE, (WRITEBUF) ; DE = write buf ' 20 |
|
|
1016
|
+
compareReadWrite ; PCM buffer full ? ' 16 | 46 (254)
|
|
1017
|
+
JP Z, sync_frame ; go to sync directly ' 10 |
|
|
1018
|
+
|
|
1019
|
+
pcm_mix
|
|
1020
|
+
|
|
1021
|
+
; PCM channel 0
|
|
1022
|
+
; -------------
|
|
1023
|
+
|
|
1024
|
+
; $02+X
|
|
1025
|
+
sampleOutput ; ' 36 |
|
|
1026
|
+
prepareChannelAlt 0 ; ' 176 |
|
|
1027
|
+
LD BC, 242 ; prepare loop counter ' 10 | 254
|
|
1028
|
+
wait32 ; sync ' 32 |
|
|
1029
|
+
|
|
1030
|
+
; $03-$18+X
|
|
1031
|
+
.loop_ch0
|
|
1032
|
+
sampleOutput ; ' 36 |
|
|
1033
|
+
readAndClear2 ; ' 38 |
|
|
1034
|
+
readAndClear2 ; process 11 samples ' 38 |
|
|
1035
|
+
readAndClear2 ; ' 38 | 254-1
|
|
1036
|
+
readAndClear2 ; ' 38 |
|
|
1037
|
+
readAndClear2 ; ' 38 |
|
|
1038
|
+
readAndClear ; ' 19 |
|
|
1039
|
+
wait8 ; sync ' 8 |
|
|
1040
|
+
|
|
1041
|
+
sampleOutput ; -1 --> a bit early ' 36 |
|
|
1042
|
+
readAndClear2 ; ' 38 |
|
|
1043
|
+
readAndClear2 ; process 11 samples ' 38 |
|
|
1044
|
+
readAndClear2 ; ' 38 | 254+1
|
|
1045
|
+
readAndClear2 ; ' 38 |
|
|
1046
|
+
readAndClear2 ; ' 38 |
|
|
1047
|
+
readAndClear ; ' 19 |
|
|
1048
|
+
JP PE, .loop_ch0 ; ' 10 |
|
|
1049
|
+
|
|
1050
|
+
; $19+X
|
|
1051
|
+
sampleOutput ; ' 36 |
|
|
1052
|
+
readAndClear2 ; ' 38 |
|
|
1053
|
+
readAndClear2 ; process 10 samples ' 38 |
|
|
1054
|
+
readAndClear2 ; ' 38 | 254+10
|
|
1055
|
+
readAndClear2 ; ' 38 |
|
|
1056
|
+
readAndClear2 ; ' 38 |
|
|
1057
|
+
readAndClear2 ; ' 38 |
|
|
1058
|
+
|
|
1059
|
+
; $1A+X
|
|
1060
|
+
sampleOutput ; +10 --> too late ' 36+10 |
|
|
1061
|
+
readAndClear2 ; ' 38 |
|
|
1062
|
+
updateChannelData 0 ; update channel data ' 153 | 254
|
|
1063
|
+
wait17 ; sync ' 17 |
|
|
1064
|
+
|
|
1065
|
+
|
|
1066
|
+
; LD A, (VCOUNTER)
|
|
1067
|
+
; LD (DEBUG_2), A
|
|
1068
|
+
|
|
1069
|
+
; PCM channel 1
|
|
1070
|
+
; -------------
|
|
1071
|
+
|
|
1072
|
+
; $1B+X
|
|
1073
|
+
sampleOutput ; ' 36 |
|
|
1074
|
+
prepareChannel 1 ; ' 178 | 254
|
|
1075
|
+
LD BC, $1080 ; prepare loop counter ' 10 |
|
|
1076
|
+
wait30 ; sync ' 30 |
|
|
1077
|
+
|
|
1078
|
+
; $1C-4B+X
|
|
1079
|
+
.loop_ch1
|
|
1080
|
+
readAndMix16WhilePlay3 ; ' 240 |
|
|
1081
|
+
DEC B ; ' 4 | 254*3
|
|
1082
|
+
JP NZ, .loop_ch1 ; ' 10 |
|
|
1083
|
+
|
|
1084
|
+
; $4C+X
|
|
1085
|
+
sampleOutput ; ' 36 |
|
|
1086
|
+
updateChannelData 1 ; update channel data ' 153 | 254
|
|
1087
|
+
wait65 ; sync ' 65 |
|
|
1088
|
+
|
|
1089
|
+
|
|
1090
|
+
; LD A, (VCOUNTER)
|
|
1091
|
+
; LD (DEBUG_3), A
|
|
1092
|
+
|
|
1093
|
+
; PCM channel 2
|
|
1094
|
+
; -------------
|
|
1095
|
+
|
|
1096
|
+
; $4D+X
|
|
1097
|
+
sampleOutput ; ' 36 |
|
|
1098
|
+
prepareChannel 2 ; ' 178 | 254
|
|
1099
|
+
LD BC, $1080 ; prepare loop counter ' 10 |
|
|
1100
|
+
wait30 ; sync ' 30 |
|
|
1101
|
+
|
|
1102
|
+
; $4E-7D+X
|
|
1103
|
+
.loop_ch2
|
|
1104
|
+
readAndMix16WhilePlay3 ; ' 240 |
|
|
1105
|
+
DEC B ; ' 4 | 254*3
|
|
1106
|
+
JP NZ, .loop_ch2 ; ' 10 |
|
|
1107
|
+
|
|
1108
|
+
; $7E+X
|
|
1109
|
+
sampleOutput ; ' 36 |
|
|
1110
|
+
updateChannelData 2 ; update channel data ' 153 | 254
|
|
1111
|
+
wait65 ; sync ' 65 |
|
|
1112
|
+
|
|
1113
|
+
|
|
1114
|
+
; LD A, (VCOUNTER)
|
|
1115
|
+
; LD (DEBUG_4), A
|
|
1116
|
+
|
|
1117
|
+
; PCM channel 3
|
|
1118
|
+
; -------------
|
|
1119
|
+
|
|
1120
|
+
; $7F+X
|
|
1121
|
+
sampleOutput ; ' 36 |
|
|
1122
|
+
prepareChannelAlt 3 ; ' 176 | 254
|
|
1123
|
+
LD BC, $1C80 ; prepare loop counter ' 10 |
|
|
1124
|
+
wait32 ; sync ' 32 |
|
|
1125
|
+
|
|
1126
|
+
; $80-$B7+X
|
|
1127
|
+
.loop_ch3
|
|
1128
|
+
sampleOutput ; ' 36 |
|
|
1129
|
+
readMixAndUnsign ; mix/unsign 9 samples ' 46 |
|
|
1130
|
+
readMixAndUnsign ; ' 46 |
|
|
1131
|
+
readMixAndUnsign ; ' 46 | 254+12
|
|
1132
|
+
readMixAndUnsign ; ' 46 |
|
|
1133
|
+
readMixAndUnsign ; ' 46 |
|
|
1134
|
+
|
|
1135
|
+
sampleOutput ; +12 --> late ' 36 |
|
|
1136
|
+
readMixAndUnsign ; ' 46 |
|
|
1137
|
+
readMixAndUnsign ; ' 46 |
|
|
1138
|
+
readMixAndUnsign ; ' 46 | 254
|
|
1139
|
+
readMixAndUnsign ; ' 46 |
|
|
1140
|
+
wait8 ; sync ' 8 |
|
|
1141
|
+
DEC B ; ' 4 |
|
|
1142
|
+
JP NZ, .loop_ch3 ; ' 10 |
|
|
1143
|
+
|
|
1144
|
+
; $B8+X
|
|
1145
|
+
sampleOutput ; ' 36 |
|
|
1146
|
+
readMixAndUnsign ; ' 46 |
|
|
1147
|
+
readMixAndUnsign ; ' 46 | 254
|
|
1148
|
+
readMixAndUnsign ; ' 46 |
|
|
1149
|
+
readMixAndUnsign ; ' 46 |
|
|
1150
|
+
wait34 ; ' 34 |
|
|
1151
|
+
|
|
1152
|
+
; $B9+X
|
|
1153
|
+
sampleOutput ; ' 36 |
|
|
1154
|
+
updateChannelData 3 ; update channel data ' 153 | 254
|
|
1155
|
+
wait65 ; sync ' 65 |
|
|
1156
|
+
|
|
1157
|
+
|
|
1158
|
+
; LD A, (VCOUNTER)
|
|
1159
|
+
; LD (DEBUG_5), A
|
|
1160
|
+
|
|
1161
|
+
; next write buffer
|
|
1162
|
+
; -----------------
|
|
1163
|
+
|
|
1164
|
+
; $BA+X
|
|
1165
|
+
next_write_buf
|
|
1166
|
+
sampleOutput ; ' 36 | 36
|
|
1167
|
+
|
|
1168
|
+
LD A, (STATUS) ; A = (STATUS) ' 13 |
|
|
1169
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
|
|
1170
|
+
LD (HL), $2B ; register = DAC enable ' 10 | 54 (90)
|
|
1171
|
+
INC L ; HL point on YM port1 ' 4 |
|
|
1172
|
+
AND $0F ; PCM is playing ? ' 7 |
|
|
1173
|
+
JP NZ, .still_pcm ; ' 10 |
|
|
1174
|
+
|
|
1175
|
+
LD A, (YM_2B_CNT) ; ' 13 |
|
|
1176
|
+
OR A ; ' 4 | 27 (117)
|
|
1177
|
+
JP Z, .no_pcm ; DAC enabled expired ? ' 10 |
|
|
1178
|
+
|
|
1179
|
+
DEC A ; decrement expiration ' 4 |
|
|
1180
|
+
LD (YM_2B_CNT), A ; ' 13 |
|
|
1181
|
+
LD A, $80 ; DAC enabled ' 7 | 34 (151)
|
|
1182
|
+
JP .set_dac ; assume still PCM ' 10 |
|
|
1183
|
+
|
|
1184
|
+
.still_pcm ; ' 90
|
|
1185
|
+
wait7 ; sync ' 7 |
|
|
1186
|
+
LD A, 3 ; set DAC ON expiration ' 7 | 27 (117)
|
|
1187
|
+
LD (YM_2B_CNT), A ; 4 frames to expire ' 13 |
|
|
1188
|
+
|
|
1189
|
+
wait17 ; sync ' 17 |
|
|
1190
|
+
LD A, $80 ; DAC enabled ' 7 | 34 (151)
|
|
1191
|
+
JP .set_dac ; assume still PCM ' 10 |
|
|
1192
|
+
|
|
1193
|
+
.no_pcm ; ' 117
|
|
1194
|
+
wait21 ; sync ' 21 |
|
|
1195
|
+
LD A, (YM_2B_SAV) ; use current DAC on ' 13 | 34 (151)
|
|
1196
|
+
|
|
1197
|
+
.set_dac ; ' 151
|
|
1198
|
+
LD (HL), A ; set DAC enabled ' 7 |
|
|
1199
|
+
DEC L ; HL point on YM port0 ' 4 | 11 (162)
|
|
1200
|
+
|
|
1201
|
+
EXX ; ' 4 |
|
|
1202
|
+
LD A, B ; A = read buffer high ' 4 |
|
|
1203
|
+
LD (READBUF+1), A ; save current read buf ' 13 | 25 (187)
|
|
1204
|
+
EXX ; ' 4 |
|
|
1205
|
+
|
|
1206
|
+
CP D ; prepare DAC write ' 4 |
|
|
1207
|
+
LD (HL), 0x2A ; write buf == read buf ' 10 | 24 (211)
|
|
1208
|
+
JP Z, .continu_pcm ; continu to fill pcm ' 10 |
|
|
1209
|
+
|
|
1210
|
+
INC D ; inc write addr ' 4 |
|
|
1211
|
+
RES 2, D ; write addr &= 0x03FF ' 8 | 42 (254-1)
|
|
1212
|
+
LD (WRITEBUF), DE ; save new write addr ' 20 |
|
|
1213
|
+
JP sync_frame ; ' 10 |
|
|
1214
|
+
|
|
1215
|
+
.continu_pcm
|
|
1216
|
+
INC D ; inc write addr ' 4 |
|
|
1217
|
+
RES 2, D ; write addr &= 0x03FF ' 8 | 42 (254-1)
|
|
1218
|
+
LD (WRITEBUF), DE ; save new write addr ' 20 |
|
|
1219
|
+
JP pcm_mix ; do pcm mix again ' 10 |
|
|
1220
|
+
|
|
1221
|
+
; sync
|
|
1222
|
+
; ----
|
|
1223
|
+
|
|
1224
|
+
; $BB+X
|
|
1225
|
+
sync_frame ; DE point on write buf
|
|
1226
|
+
|
|
1227
|
+
; LD A, (VCOUNTER)
|
|
1228
|
+
; LD (DEBUG_6), A
|
|
1229
|
+
|
|
1230
|
+
sync_frame_loop
|
|
1231
|
+
sampleOutput ; ' 36 | (36)
|
|
1232
|
+
|
|
1233
|
+
wait62 ; sync ' 62 | (98)
|
|
1234
|
+
|
|
1235
|
+
LD HL, (IDLE_LOOP) ; ' 16 |
|
|
1236
|
+
INC HL ; increment idle loop ' 6 | 38 (136)
|
|
1237
|
+
LD (IDLE_LOOP), HL ; ' 16 |
|
|
1238
|
+
|
|
1239
|
+
LD A, (PENDING_FRM) ; A = frame to process ' 13 |
|
|
1240
|
+
OR A ; something to do ? ' 4 | 27 (163)
|
|
1241
|
+
JP NZ, .do_xgm ; do the XGM frame ' 10 |
|
|
1242
|
+
|
|
1243
|
+
LD A, (PROTECT_ARG) ; get BUS protect state ' 13 |
|
|
1244
|
+
OR A ; protecting ? ' 4 | 27 (190)
|
|
1245
|
+
JP NZ, .wait_dma ; wait for it ' 10 |
|
|
1246
|
+
|
|
1247
|
+
EXX ; ' 4 |
|
|
1248
|
+
LD A, B ; A = read buffer high ' 4 |
|
|
1249
|
+
LD (READBUF+1), A ; save current read buf ' 13 | 25 (215)
|
|
1250
|
+
EXX ; ' 4 |
|
|
1251
|
+
|
|
1252
|
+
ADD $1 ; ' 7 |
|
|
1253
|
+
RES 2, A ; read pos &= 0x03FF ' 8 |
|
|
1254
|
+
CP D ; pcm buffer empty ? ' 4 | 29 (244)
|
|
1255
|
+
JP Z, .do_pcm ; fill pcm ' 10 |
|
|
1256
|
+
|
|
1257
|
+
JP sync_frame_loop ; wait for a frame ' 10 | (254)
|
|
1258
|
+
|
|
1259
|
+
.wait_dma ; ' 190
|
|
1260
|
+
LD HL, (WAIT_LOOP) ; ' 16 |
|
|
1261
|
+
INC HL ; increment wait loop ' 6 | 38 (228)
|
|
1262
|
+
LD (WAIT_LOOP), HL ; ' 16 |
|
|
1263
|
+
|
|
1264
|
+
wait16 ; sync ' 16 |
|
|
1265
|
+
JP sync_frame ; wait for a frame ' 10 | 26 (254)
|
|
1266
|
+
|
|
1267
|
+
.do_pcm ; ' 244
|
|
1268
|
+
JP pcm_mix ; do pcm mix again ' 10 | (254)
|
|
1269
|
+
|
|
1270
|
+
.do_xgm ; ' 163
|
|
1271
|
+
wait81 ; sync ' 81 |
|
|
1272
|
+
LD DE, XGM_BUFFER ; DE point to XGM buf ' 10 | 91 (254)
|
|
1273
|
+
|
|
1274
|
+
|
|
1275
|
+
; LD A, (VCOUNTER)
|
|
1276
|
+
; LD (DEBUG_7), A
|
|
1277
|
+
|
|
1278
|
+
; execute XGM command
|
|
1279
|
+
; -------------------
|
|
1280
|
+
|
|
1281
|
+
; $BC+X+Y
|
|
1282
|
+
execute_xgm
|
|
1283
|
+
sampleOutput ; ' 36 | (36)
|
|
1284
|
+
|
|
1285
|
+
LD A, (DE) ; A = command ' 7 |
|
|
1286
|
+
LD (.ld_hl_xx + 1), A ; set jump address ' 13 |
|
|
1287
|
+
INC E ; next command ' 4 | 44 (80)
|
|
1288
|
+
.ld_hl_xx ; ' |
|
|
1289
|
+
LD HL, (JUMP_TABLE) ; LD HL, (jt) ' 16 |
|
|
1290
|
+
JP (HL) ; ' 4 |
|
|
1291
|
+
|
|
1292
|
+
|
|
1293
|
+
; next frame command
|
|
1294
|
+
; ------------------
|
|
1295
|
+
|
|
1296
|
+
com_next_frame ; 00 ' 80
|
|
1297
|
+
JP xgm_done ; XGM frame done ' 10 | (90)
|
|
1298
|
+
|
|
1299
|
+
|
|
1300
|
+
; PSG command
|
|
1301
|
+
; -----------
|
|
1302
|
+
|
|
1303
|
+
com_psg_tone_w0 ; 10 ' 80
|
|
1304
|
+
wait126 ; sync ' 126 |
|
|
1305
|
+
LD HL, PSGPORT ; HL point on PSG port ' 10 | 146 (226)
|
|
1306
|
+
JP psg_tone_write0 ; ' 10 |
|
|
1307
|
+
|
|
1308
|
+
com_psg_tone_w1 ; 11 ' 80
|
|
1309
|
+
wait108 ; sync ' 108 |
|
|
1310
|
+
LD HL, PSGPORT ; HL point on PSG port ' 10 | 128 (208)
|
|
1311
|
+
JP psg_tone_write1 ; ' 10 |
|
|
1312
|
+
|
|
1313
|
+
com_psg_tone_w2 ; 12 ' 80
|
|
1314
|
+
wait90 ; sync ' 90 |
|
|
1315
|
+
LD HL, PSGPORT ; HL point on PSG port ' 10 | 110 (190)
|
|
1316
|
+
JP psg_tone_write2 ; ' 10 |
|
|
1317
|
+
|
|
1318
|
+
com_psg_tone_w3 ; 13 ' 80
|
|
1319
|
+
wait72 ; sync ' 72 |
|
|
1320
|
+
LD HL, PSGPORT ; HL point on PSG port ' 10 | 92 (172)
|
|
1321
|
+
JP psg_tone_write3 ; ' 10 |
|
|
1322
|
+
|
|
1323
|
+
com_psg_tone_w4 ; 14 ' 80
|
|
1324
|
+
wait54 ; sync ' 54 |
|
|
1325
|
+
LD HL, PSGPORT ; HL point on PSG port ' 10 | 74 (154)
|
|
1326
|
+
JP psg_tone_write4 ; ' 10 |
|
|
1327
|
+
|
|
1328
|
+
com_psg_tone_w5 ; 15 ' 80
|
|
1329
|
+
wait36 ; sync ' 36 |
|
|
1330
|
+
LD HL, PSGPORT ; HL point on PSG port ' 10 | 56 (136)
|
|
1331
|
+
JP psg_tone_write5 ; ' 10 |
|
|
1332
|
+
|
|
1333
|
+
com_psg_tone_w6 ; 16 ' 80
|
|
1334
|
+
wait18 ; sync ' 18 |
|
|
1335
|
+
LD HL, PSGPORT ; HL point on PSG port ' 10 | 38 (118)
|
|
1336
|
+
JP psg_tone_write6 ; ' 10 |
|
|
1337
|
+
|
|
1338
|
+
com_psg_tone_w7 ; 17 ' 80
|
|
1339
|
+
LD HL, PSGPORT ; HL point on PSG port ' 10 | 20 (100)
|
|
1340
|
+
JP psg_tone_write7 ; ' 10 |
|
|
1341
|
+
|
|
1342
|
+
|
|
1343
|
+
psg_tone_write7 ; ' 100
|
|
1344
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1345
|
+
INC E ; next data ' 4 | 18 (118)
|
|
1346
|
+
LD (HL), A ; write to PSG ' 7 |
|
|
1347
|
+
|
|
1348
|
+
psg_tone_write6
|
|
1349
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1350
|
+
INC E ; next data ' 4 | 18 (136)
|
|
1351
|
+
LD (HL), A ; write to PSG ' 7 |
|
|
1352
|
+
|
|
1353
|
+
psg_tone_write5
|
|
1354
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1355
|
+
INC E ; next data ' 4 | 18 (154)
|
|
1356
|
+
LD (HL), A ; write to PSG ' 7 |
|
|
1357
|
+
|
|
1358
|
+
psg_tone_write4
|
|
1359
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1360
|
+
INC E ; next data ' 4 | 18 (172)
|
|
1361
|
+
LD (HL), A ; write to PSG ' 7 |
|
|
1362
|
+
|
|
1363
|
+
psg_tone_write3
|
|
1364
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1365
|
+
INC E ; next data ' 4 | 18 (190)
|
|
1366
|
+
LD (HL), A ; write to PSG ' 7 |
|
|
1367
|
+
|
|
1368
|
+
psg_tone_write2
|
|
1369
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1370
|
+
INC E ; next data ' 4 | 18 (208)
|
|
1371
|
+
LD (HL), A ; write to PSG ' 7 |
|
|
1372
|
+
|
|
1373
|
+
psg_tone_write1
|
|
1374
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1375
|
+
INC E ; next data ' 4 | 18 (226)
|
|
1376
|
+
LD (HL), A ; write to PSG ' 7 |
|
|
1377
|
+
|
|
1378
|
+
psg_tone_write0
|
|
1379
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1380
|
+
INC E ; next data ' 4 | 18 (244)
|
|
1381
|
+
LD (HL), A ; write to PSG ' 7 |
|
|
1382
|
+
|
|
1383
|
+
JP execute_xgm ; ' 10 | (254)
|
|
1384
|
+
|
|
1385
|
+
|
|
1386
|
+
com_psg_env_w0 ; 18 ' 80
|
|
1387
|
+
wait72 ; sync ' 72 |
|
|
1388
|
+
LD HL, PSGPORT ; HL point on PSG port ' 10 | 102 (182)
|
|
1389
|
+
LD BC, PSG_ENV_SAV ; BC point on PSG save ' 10 |
|
|
1390
|
+
JP psg_env_write0 ; ' 10 |
|
|
1391
|
+
|
|
1392
|
+
com_psg_env_w1 ; 18 ' 80
|
|
1393
|
+
wait10 ; sync ' 10 |
|
|
1394
|
+
LD HL, PSGPORT ; HL point on PSG port ' 10 | 40 (120)
|
|
1395
|
+
LD BC, PSG_ENV_SAV ; BC point on PSG save ' 10 |
|
|
1396
|
+
JP psg_env_write1 ; ' 10 |
|
|
1397
|
+
|
|
1398
|
+
com_psg_env_w2 ; 18 ' 80
|
|
1399
|
+
wait154 ; sync ' 154 |
|
|
1400
|
+
LD HL, PSGPORT ; HL point on PSG port ' 10 | 174 (254)
|
|
1401
|
+
LD BC, PSG_ENV_SAV ; BC point on PSG save ' 10 |
|
|
1402
|
+
|
|
1403
|
+
sampleOutput ; ' 36 | (36)
|
|
1404
|
+
|
|
1405
|
+
wait12 ; sync ' 12 |
|
|
1406
|
+
JP psg_env_write2 ; ' 10 | 22 (58)
|
|
1407
|
+
|
|
1408
|
+
com_psg_env_w3 ; 18 ' 80
|
|
1409
|
+
wait110 ; sync ' 110 |
|
|
1410
|
+
LD HL, PSGPORT ; HL point on PSG port ' 10 | 130 (210)
|
|
1411
|
+
LD BC, PSG_ENV_SAV ; BC point on PSG save ' 10 |
|
|
1412
|
+
|
|
1413
|
+
psg_env_write3
|
|
1414
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1415
|
+
RLCA ; ' 4 |
|
|
1416
|
+
RLCA ; ' 4 |
|
|
1417
|
+
RLCA ; ' 4 |
|
|
1418
|
+
AND $3 ; A = channel number ' 7 | 41 (254-3)
|
|
1419
|
+
ADD (PSG_ENV_SAV & $FF) ; add offset ' 7 |
|
|
1420
|
+
LD C, A ; BC point on save ' 4 |
|
|
1421
|
+
wait4 ; sync ' 4 |
|
|
1422
|
+
|
|
1423
|
+
sampleOutput ; ' 36 | (36-3)
|
|
1424
|
+
|
|
1425
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1426
|
+
INC E ; next data ' 4 | 25 (58)
|
|
1427
|
+
LD (HL), A ; write to PSG ' 7 |
|
|
1428
|
+
LD (BC), A ; write to save ' 7 |
|
|
1429
|
+
|
|
1430
|
+
psg_env_write2 ; ' 58
|
|
1431
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1432
|
+
RLCA ; ' 4 |
|
|
1433
|
+
RLCA ; ' 4 |
|
|
1434
|
+
RLCA ; ' 4 |
|
|
1435
|
+
AND $3 ; A = channel number ' 7 |
|
|
1436
|
+
ADD (PSG_ENV_SAV & $FF) ; add offset ' 7 | 62 (120)
|
|
1437
|
+
LD C, A ; BC point on save ' 4 |
|
|
1438
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1439
|
+
INC E ; next data ' 4 |
|
|
1440
|
+
LD (HL), A ; write to PSG ' 7 |
|
|
1441
|
+
LD (BC), A ; write to save ' 7 |
|
|
1442
|
+
|
|
1443
|
+
psg_env_write1
|
|
1444
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1445
|
+
RLCA ; ' 4 |
|
|
1446
|
+
RLCA ; ' 4 |
|
|
1447
|
+
RLCA ; ' 4 |
|
|
1448
|
+
AND $3 ; A = channel number ' 7 |
|
|
1449
|
+
ADD (PSG_ENV_SAV & $FF) ; add offset ' 7 | 62 (182)
|
|
1450
|
+
LD C, A ; BC point on save ' 4 |
|
|
1451
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1452
|
+
INC E ; next data ' 4 |
|
|
1453
|
+
LD (HL), A ; write to PSG ' 7 |
|
|
1454
|
+
LD (BC), A ; write to save ' 7 |
|
|
1455
|
+
|
|
1456
|
+
psg_env_write0
|
|
1457
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1458
|
+
RLCA ; ' 4 |
|
|
1459
|
+
RLCA ; ' 4 |
|
|
1460
|
+
RLCA ; ' 4 |
|
|
1461
|
+
AND $3 ; A = channel number ' 7 |
|
|
1462
|
+
ADD (PSG_ENV_SAV & $FF) ; add offset ' 7 | 62 (244)
|
|
1463
|
+
LD C, A ; BC point on save ' 4 |
|
|
1464
|
+
LD A, (DE) ; A = PSG data ' 7 |
|
|
1465
|
+
INC E ; next data ' 4 |
|
|
1466
|
+
LD (HL), A ; write to PSG ' 7 |
|
|
1467
|
+
LD (BC), A ; write to save ' 7 |
|
|
1468
|
+
|
|
1469
|
+
JP execute_xgm ; ' 10 | (254)
|
|
1470
|
+
|
|
1471
|
+
|
|
1472
|
+
; YM port0 command
|
|
1473
|
+
; ----------------
|
|
1474
|
+
|
|
1475
|
+
com_ym_port0_w0 ; 20 ' 80
|
|
1476
|
+
wait36 ; sync ' 36 |
|
|
1477
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 66 (146)
|
|
1478
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
|
|
1479
|
+
JP ym_port_write0 ; ' 10 |
|
|
1480
|
+
|
|
1481
|
+
com_ym_port0_w1 ; 21 ' 80
|
|
1482
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
|
|
1483
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 | 30 (110)
|
|
1484
|
+
JP ym_port_write1 ; ' 10 |
|
|
1485
|
+
|
|
1486
|
+
com_ym_port0_w2 ; 22 ' 80
|
|
1487
|
+
wait52 ; sync ' 52 |
|
|
1488
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 82 (162)
|
|
1489
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
|
|
1490
|
+
JP ym_port_write2 ; ' 10 |
|
|
1491
|
+
|
|
1492
|
+
com_ym_port0_w3 ; 23 ' 80
|
|
1493
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
|
|
1494
|
+
LD BC, HL ; BC point on YM port0 ' 10 |
|
|
1495
|
+
INC BC ; BC point on YM port1 ' 6 | 36 (116)
|
|
1496
|
+
JP com_ym_port_w3 ; execute ' 10 |
|
|
1497
|
+
|
|
1498
|
+
com_ym_port0_w4 ; 24 ' 80
|
|
1499
|
+
wait144 ; sync ' 144 |
|
|
1500
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 178 (254+4)
|
|
1501
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
|
|
1502
|
+
EXX ; ' 4 |
|
|
1503
|
+
JP ym_port_write4 ; ' 10 |
|
|
1504
|
+
|
|
1505
|
+
com_ym_port0_w5 ; 25 ' 80
|
|
1506
|
+
wait52 ; sync ' 52 |
|
|
1507
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 82 (162)
|
|
1508
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
|
|
1509
|
+
JP ym_port_write5 ; ' 10 |
|
|
1510
|
+
|
|
1511
|
+
com_ym_port0_w6 ; 26 ' 80
|
|
1512
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
|
|
1513
|
+
LD BC, HL ; BC point on YM port0 ' 10 |
|
|
1514
|
+
INC BC ; BC point on YM port1 ' 6 | 36 (116)
|
|
1515
|
+
JP com_ym_port_w6 ; execute ' 10 |
|
|
1516
|
+
|
|
1517
|
+
com_ym_port0_w7 ; 27 ' 80
|
|
1518
|
+
wait144 ; sync ' 144 |
|
|
1519
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 178 (254+4)
|
|
1520
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
|
|
1521
|
+
EXX ; ' 4 |
|
|
1522
|
+
JP ym_port_write7 ; ' 10 |
|
|
1523
|
+
|
|
1524
|
+
com_ym_port0_w8 ; 28 ' 80
|
|
1525
|
+
wait52 ; sync ' 52 |
|
|
1526
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 82 (162)
|
|
1527
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
|
|
1528
|
+
JP ym_port_write8 ; ' 10 |
|
|
1529
|
+
|
|
1530
|
+
com_ym_port0_w9 ; 29 ' 80
|
|
1531
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
|
|
1532
|
+
LD BC, HL ; BC point on YM port0 ' 10 |
|
|
1533
|
+
INC BC ; BC point on YM port1 ' 6 | 36 (116)
|
|
1534
|
+
JP com_ym_port_w9 ; execute ' 10 |
|
|
1535
|
+
|
|
1536
|
+
com_ym_port0_wA ; 2A ' 80
|
|
1537
|
+
wait144 ; sync ' 144 |
|
|
1538
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 178 (254+4)
|
|
1539
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
|
|
1540
|
+
EXX ; ' 4 |
|
|
1541
|
+
JP ym_port_writeA ; ' 10 |
|
|
1542
|
+
|
|
1543
|
+
com_ym_port0_wB ; 2B ' 80
|
|
1544
|
+
wait52 ; sync ' 52 |
|
|
1545
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 82 (162)
|
|
1546
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
|
|
1547
|
+
JP ym_port_writeB ; ' 10 |
|
|
1548
|
+
|
|
1549
|
+
com_ym_port0_wC ; 2C ' 80
|
|
1550
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
|
|
1551
|
+
LD BC, HL ; BC point on YM port0 ' 10 |
|
|
1552
|
+
INC BC ; BC point on YM port1 ' 6 | 36 (116)
|
|
1553
|
+
JP com_ym_port_wC ; execute ' 10 |
|
|
1554
|
+
|
|
1555
|
+
com_ym_port0_wD ; 2D ' 80
|
|
1556
|
+
wait144 ; sync ' 144 |
|
|
1557
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 174 (254)
|
|
1558
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
|
|
1559
|
+
JP ym_port_writeD ; ' 10 |
|
|
1560
|
+
|
|
1561
|
+
com_ym_port0_wE ; 2E ' 80
|
|
1562
|
+
wait36 ; sync ' 36 |
|
|
1563
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 66 (146)
|
|
1564
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
|
|
1565
|
+
JP ym_port_writeE ; ' 10 |
|
|
1566
|
+
|
|
1567
|
+
com_ym_port0_wF ; 2F ' 80
|
|
1568
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
|
|
1569
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 | 30 (110)
|
|
1570
|
+
JP ym_port_writeF ; ' 10 |
|
|
1571
|
+
|
|
1572
|
+
|
|
1573
|
+
; YM port2 command
|
|
1574
|
+
; ----------------
|
|
1575
|
+
|
|
1576
|
+
com_ym_port2_w0 ; 30 ' 80
|
|
1577
|
+
wait36 ; sync ' 36 |
|
|
1578
|
+
LD HL, YMPORT2 ; HL point on YM port2 ' 10 | 66 (146)
|
|
1579
|
+
LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
|
|
1580
|
+
JP ym_port_write0 ; ' 10 |
|
|
1581
|
+
|
|
1582
|
+
com_ym_port2_w1 ; 31 ' 80
|
|
1583
|
+
LD HL, YMPORT2 ; HL point on YM port2 ' 10 |
|
|
1584
|
+
LD BC, YMPORT3 ; BC point on YM port3 ' 10 | 30 (110)
|
|
1585
|
+
JP ym_port_write1 ; ' 10 |
|
|
1586
|
+
|
|
1587
|
+
com_ym_port2_w2 ; 32 ' 80
|
|
1588
|
+
wait52 ; sync ' 52 |
|
|
1589
|
+
LD HL, YMPORT2 ; HL point on YM port2 ' 10 | 82 (162)
|
|
1590
|
+
LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
|
|
1591
|
+
JP ym_port_write2 ; ' 10 |
|
|
1592
|
+
|
|
1593
|
+
com_ym_port2_w3 ; 33 ' 80
|
|
1594
|
+
LD HL, YMPORT2 ; HL point on YM port2 ' 10 |
|
|
1595
|
+
LD BC, HL ; BC point on YM port2 ' 10 |
|
|
1596
|
+
INC BC ; BC point on YM port3 ' 6 | 36 (116)
|
|
1597
|
+
JP com_ym_port_w3 ; execute ' 10 |
|
|
1598
|
+
|
|
1599
|
+
com_ym_port2_w4 ; 34 ' 80
|
|
1600
|
+
wait144 ; sync ' 144 |
|
|
1601
|
+
LD HL, YMPORT2 ; HL point on YM port0 ' 10 | 178 (254+4)
|
|
1602
|
+
LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
|
|
1603
|
+
EXX ; ' 4 |
|
|
1604
|
+
JP ym_port_write4 ; ' 10 |
|
|
1605
|
+
|
|
1606
|
+
com_ym_port2_w5 ; 35 ' 80
|
|
1607
|
+
wait52 ; sync ' 52 |
|
|
1608
|
+
LD HL, YMPORT2 ; HL point on YM port2 ' 10 | 82 (162)
|
|
1609
|
+
LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
|
|
1610
|
+
JP ym_port_write5 ; ' 10 |
|
|
1611
|
+
|
|
1612
|
+
com_ym_port2_w6 ; 36 ' 80
|
|
1613
|
+
LD HL, YMPORT2 ; HL point on YM port2 ' 10 |
|
|
1614
|
+
LD BC, HL ; BC point on YM port2 ' 10 |
|
|
1615
|
+
INC BC ; BC point on YM port3 ' 6 | 36 (116)
|
|
1616
|
+
JP com_ym_port_w6 ; execute ' 10 |
|
|
1617
|
+
|
|
1618
|
+
com_ym_port2_w7 ; 37 ' 80
|
|
1619
|
+
wait144 ; sync ' 144 |
|
|
1620
|
+
LD HL, YMPORT2 ; HL point on YM port0 ' 10 | 178 (254+4)
|
|
1621
|
+
LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
|
|
1622
|
+
EXX ; ' 4 |
|
|
1623
|
+
JP ym_port_write7 ; ' 10 |
|
|
1624
|
+
|
|
1625
|
+
com_ym_port2_w8 ; 38 ' 80
|
|
1626
|
+
wait52 ; sync ' 52 |
|
|
1627
|
+
LD HL, YMPORT2 ; HL point on YM port2 ' 10 | 82 (162)
|
|
1628
|
+
LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
|
|
1629
|
+
JP ym_port_write8 ; ' 10 |
|
|
1630
|
+
|
|
1631
|
+
com_ym_port2_w9 ; 39 ' 80
|
|
1632
|
+
LD HL, YMPORT2 ; HL point on YM port2 ' 10 |
|
|
1633
|
+
LD BC, HL ; BC point on YM port2 ' 10 |
|
|
1634
|
+
INC BC ; BC point on YM port3 ' 6 | 36 (116)
|
|
1635
|
+
JP com_ym_port_w9 ; execute ' 10 |
|
|
1636
|
+
|
|
1637
|
+
com_ym_port2_wA ; 3A ' 80
|
|
1638
|
+
wait144 ; sync ' 144 |
|
|
1639
|
+
LD HL, YMPORT2 ; HL point on YM port0 ' 10 | 178 (254+4)
|
|
1640
|
+
LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
|
|
1641
|
+
EXX ; ' 4 |
|
|
1642
|
+
JP ym_port_writeA ; ' 10 |
|
|
1643
|
+
|
|
1644
|
+
com_ym_port2_wB ; 3B ' 80
|
|
1645
|
+
wait52 ; sync ' 52 |
|
|
1646
|
+
LD HL, YMPORT2 ; HL point on YM port2 ' 10 | 82 (162)
|
|
1647
|
+
LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
|
|
1648
|
+
JP ym_port_writeB ; ' 10 |
|
|
1649
|
+
|
|
1650
|
+
com_ym_port2_wC ; 3C ' 80
|
|
1651
|
+
LD HL, YMPORT2 ; HL point on YM port2 ' 10 |
|
|
1652
|
+
LD BC, HL ; BC point on YM port2 ' 10 |
|
|
1653
|
+
INC BC ; BC point on YM port3 ' 6 | 36 (116)
|
|
1654
|
+
JP com_ym_port_wC ; execute ' 10 |
|
|
1655
|
+
|
|
1656
|
+
com_ym_port2_wD ; 3D ' 80
|
|
1657
|
+
wait144 ; sync ' 144 |
|
|
1658
|
+
LD HL, YMPORT2 ; HL point on YM port2 ' 10 | 174 (254)
|
|
1659
|
+
LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
|
|
1660
|
+
JP ym_port_writeD ; ' 10 |
|
|
1661
|
+
|
|
1662
|
+
com_ym_port2_wE ; 3E ' 80
|
|
1663
|
+
wait36 ; sync ' 36 |
|
|
1664
|
+
LD HL, YMPORT2 ; HL point on YM port2 ' 10 | 66 (146)
|
|
1665
|
+
LD BC, YMPORT3 ; BC point on YM port3 ' 10 |
|
|
1666
|
+
JP ym_port_writeE ; ' 10 |
|
|
1667
|
+
|
|
1668
|
+
com_ym_port2_wF ; 3F ' 80
|
|
1669
|
+
LD HL, YMPORT2 ; HL point on YM port2 ' 10 |
|
|
1670
|
+
LD BC, YMPORT3 ; BC point on YM port3 ' 10 | 30 (110)
|
|
1671
|
+
JP ym_port_writeF ; ' 10 |
|
|
1672
|
+
|
|
1673
|
+
|
|
1674
|
+
com_ym_port_w3 ; ' 116
|
|
1675
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1676
|
+
LD (HL), A ; write reg num to YM ' 7 |
|
|
1677
|
+
INC E ; next data ' 4 |
|
|
1678
|
+
LD A, (DE) ; A = YM reg data ' 7 | 36 (152)
|
|
1679
|
+
INC E ; next data ' 4 |
|
|
1680
|
+
LD (BC), A ; write data to YM ' 7 |
|
|
1681
|
+
JP ym_port_write2 ; ' 10 | (162)
|
|
1682
|
+
|
|
1683
|
+
com_ym_port_w6 ; ' 116
|
|
1684
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1685
|
+
LD (HL), A ; write reg num to YM ' 7 |
|
|
1686
|
+
INC E ; next data ' 4 |
|
|
1687
|
+
LD A, (DE) ; A = YM reg data ' 7 | 36 (152)
|
|
1688
|
+
INC E ; next data ' 4 |
|
|
1689
|
+
LD (BC), A ; write data to YM ' 7 |
|
|
1690
|
+
JP ym_port_write5 ; ' 10 | (162)
|
|
1691
|
+
|
|
1692
|
+
com_ym_port_w9 ; ' 116
|
|
1693
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1694
|
+
LD (HL), A ; write reg num to YM ' 7 |
|
|
1695
|
+
INC E ; next data ' 4 |
|
|
1696
|
+
LD A, (DE) ; A = YM reg data ' 7 | 36 (152)
|
|
1697
|
+
INC E ; next data ' 4 |
|
|
1698
|
+
LD (BC), A ; write data to YM ' 7 |
|
|
1699
|
+
JP ym_port_write8 ; ' 10 | (162)
|
|
1700
|
+
|
|
1701
|
+
com_ym_port_wC ; ' 116
|
|
1702
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1703
|
+
LD (HL), A ; write reg num to YM ' 7 |
|
|
1704
|
+
INC E ; next data ' 4 |
|
|
1705
|
+
LD A, (DE) ; A = YM reg data ' 7 | 36 (152)
|
|
1706
|
+
INC E ; next data ' 4 |
|
|
1707
|
+
LD (BC), A ; write data to YM ' 7 |
|
|
1708
|
+
JP ym_port_writeB ; ' 10 | (162)
|
|
1709
|
+
|
|
1710
|
+
|
|
1711
|
+
ym_port_write1 ; ' 110
|
|
1712
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1713
|
+
LD (HL), A ; write reg num to YM ' 7 |
|
|
1714
|
+
INC E ; next data ' 4 |
|
|
1715
|
+
LD A, (DE) ; A = YM reg data ' 7 | 36 (146)
|
|
1716
|
+
INC E ; next data ' 4 |
|
|
1717
|
+
LD (BC), A ; write data to YM ' 7 |
|
|
1718
|
+
|
|
1719
|
+
ym_port_write0
|
|
1720
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1721
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1722
|
+
LD (HL), A ; write reg num to YM ' 7 | 66 (212)
|
|
1723
|
+
INC E ; next data ' 4 |
|
|
1724
|
+
LD A, (DE) ; A = YM reg data ' 7 |
|
|
1725
|
+
INC E ; next data ' 4 |
|
|
1726
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1727
|
+
|
|
1728
|
+
EXX ; switch to HL' (port0) ' 4 |
|
|
1729
|
+
.wait ; ' |
|
|
1730
|
+
BIT 7, (HL) ; test YM ready bit ' 12 |
|
|
1731
|
+
JP NZ, .wait ; wait while busy ' 10 | 40 (252)
|
|
1732
|
+
; ' |
|
|
1733
|
+
LD (HL), $2A ; restore DAC write ' 10 |
|
|
1734
|
+
EXX ; switch back ' 4 |
|
|
1735
|
+
|
|
1736
|
+
JP execute_xgm ; +8 cycles here ' 10 | (254+8)
|
|
1737
|
+
|
|
1738
|
+
ym_port_writeF ; ' 110
|
|
1739
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1740
|
+
LD (HL), A ; write reg num to YM ' 7 |
|
|
1741
|
+
INC E ; next data ' 4 |
|
|
1742
|
+
LD A, (DE) ; A = YM reg data ' 7 | 36 (146)
|
|
1743
|
+
INC E ; next data ' 4 |
|
|
1744
|
+
LD (BC), A ; write data to YM ' 7 |
|
|
1745
|
+
|
|
1746
|
+
ym_port_writeE
|
|
1747
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1748
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1749
|
+
LD (HL), A ; write reg num to YM ' 7 | 66 (212)
|
|
1750
|
+
INC E ; next data ' 4 |
|
|
1751
|
+
LD A, (DE) ; A = YM reg data ' 7 |
|
|
1752
|
+
INC E ; next data ' 4 |
|
|
1753
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1754
|
+
|
|
1755
|
+
wait12 ; sync ' 12 |
|
|
1756
|
+
waitYMReady ; wait YM to be ready ' 30 | 42 (254)
|
|
1757
|
+
|
|
1758
|
+
ym_port_writeD
|
|
1759
|
+
sampleOutputSafe ; ' 46 | (46)
|
|
1760
|
+
|
|
1761
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1762
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1763
|
+
LD (HL), A ; write reg num to YM ' 7 | 66 (112)
|
|
1764
|
+
INC E ; next data ' 4 |
|
|
1765
|
+
LD A, (DE) ; A = YM reg data ' 7 |
|
|
1766
|
+
INC E ; next data ' 4 |
|
|
1767
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1768
|
+
|
|
1769
|
+
;ym_port_writeC
|
|
1770
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1771
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1772
|
+
LD (HL), A ; write reg num to YM ' 7 | 66 (178)
|
|
1773
|
+
INC E ; next data ' 4 |
|
|
1774
|
+
LD A, (DE) ; A = YM reg data ' 7 |
|
|
1775
|
+
INC E ; next data ' 4 |
|
|
1776
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1777
|
+
|
|
1778
|
+
ym_port_writeB
|
|
1779
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1780
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1781
|
+
LD (HL), A ; write reg num to YM ' 7 | 66 (244)
|
|
1782
|
+
INC E ; next data ' 4 |
|
|
1783
|
+
LD A, (DE) ; A = YM reg data ' 7 |
|
|
1784
|
+
INC E ; next data ' 4 |
|
|
1785
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1786
|
+
|
|
1787
|
+
EXX ; switch to HL' (port0) ' 4 | (248)
|
|
1788
|
+
.wait ; ' |
|
|
1789
|
+
BIT 7, (HL) ; test YM ready bit ' 12 |
|
|
1790
|
+
JP NZ, .wait ; wait while busy ' 10 | 22 (258+14)
|
|
1791
|
+
|
|
1792
|
+
ym_port_writeA ; ' 4
|
|
1793
|
+
LD (HL), $2A ; restore DAC write ' 10 |
|
|
1794
|
+
LD A, (BC) ; ' 7 |
|
|
1795
|
+
INC BC ; play sample ' 6 | 42 (46)
|
|
1796
|
+
RES 2, B ; ' 8 |
|
|
1797
|
+
LD (DE), A ; ' 7 |
|
|
1798
|
+
EXX ; ' 4 |
|
|
1799
|
+
|
|
1800
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1801
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1802
|
+
LD (HL), A ; write reg num to YM ' 7 | 66 (112)
|
|
1803
|
+
INC E ; next data ' 4 |
|
|
1804
|
+
LD A, (DE) ; A = YM reg data ' 7 |
|
|
1805
|
+
INC E ; next data ' 4 |
|
|
1806
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1807
|
+
|
|
1808
|
+
;ym_port_write9
|
|
1809
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1810
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1811
|
+
LD (HL), A ; write reg num to YM ' 7 | 66 (178)
|
|
1812
|
+
INC E ; next data ' 4 |
|
|
1813
|
+
LD A, (DE) ; A = YM reg data ' 7 |
|
|
1814
|
+
INC E ; next data ' 4 |
|
|
1815
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1816
|
+
|
|
1817
|
+
ym_port_write8
|
|
1818
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1819
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1820
|
+
LD (HL), A ; write reg num to YM ' 7 | 66 (244)
|
|
1821
|
+
INC E ; next data ' 4 |
|
|
1822
|
+
LD A, (DE) ; A = YM reg data ' 7 |
|
|
1823
|
+
INC E ; next data ' 4 |
|
|
1824
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1825
|
+
|
|
1826
|
+
EXX ; switch to HL' (port0) ' 4 | (248)
|
|
1827
|
+
.wait ; ' |
|
|
1828
|
+
BIT 7, (HL) ; test YM ready bit ' 12 |
|
|
1829
|
+
JP NZ, .wait ; wait while busy ' 10 | 22 (258+14)
|
|
1830
|
+
|
|
1831
|
+
ym_port_write7 ; ' 4
|
|
1832
|
+
LD (HL), $2A ; restore DAC write ' 10 |
|
|
1833
|
+
LD A, (BC) ; ' 7 |
|
|
1834
|
+
INC BC ; play sample ' 6 | 42 (46)
|
|
1835
|
+
RES 2, B ; ' 8 |
|
|
1836
|
+
LD (DE), A ; ' 7 |
|
|
1837
|
+
EXX ; ' 4 |
|
|
1838
|
+
|
|
1839
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1840
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1841
|
+
LD (HL), A ; write reg num to YM ' 7 | 66 (112)
|
|
1842
|
+
INC E ; next data ' 4 |
|
|
1843
|
+
LD A, (DE) ; A = YM reg data ' 7 |
|
|
1844
|
+
INC E ; next data ' 4 |
|
|
1845
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1846
|
+
|
|
1847
|
+
;ym_port_write6
|
|
1848
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1849
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1850
|
+
LD (HL), A ; write reg num to YM ' 7 | 66 (178)
|
|
1851
|
+
INC E ; next data ' 4 |
|
|
1852
|
+
LD A, (DE) ; A = YM reg data ' 7 |
|
|
1853
|
+
INC E ; next data ' 4 |
|
|
1854
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1855
|
+
|
|
1856
|
+
ym_port_write5
|
|
1857
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1858
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1859
|
+
LD (HL), A ; write reg num to YM ' 7 | 66 (244)
|
|
1860
|
+
INC E ; next data ' 4 |
|
|
1861
|
+
LD A, (DE) ; A = YM reg data ' 7 |
|
|
1862
|
+
INC E ; next data ' 4 |
|
|
1863
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1864
|
+
|
|
1865
|
+
EXX ; switch to HL' (port0) ' 4 | (248)
|
|
1866
|
+
.wait ; ' |
|
|
1867
|
+
BIT 7, (HL) ; test YM ready bit ' 12 |
|
|
1868
|
+
JP NZ, .wait ; wait while busy ' 10 | 22 (258+14)
|
|
1869
|
+
|
|
1870
|
+
ym_port_write4 ; ' 4
|
|
1871
|
+
LD (HL), $2A ; restore DAC write ' 10 |
|
|
1872
|
+
LD A, (BC) ; ' 7 |
|
|
1873
|
+
INC BC ; play sample ' 6 | 42 (46)
|
|
1874
|
+
RES 2, B ; ' 8 |
|
|
1875
|
+
LD (DE), A ; ' 7 |
|
|
1876
|
+
EXX ; ' 4 |
|
|
1877
|
+
|
|
1878
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1879
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1880
|
+
LD (HL), A ; write reg num to YM ' 7 | 66 (112)
|
|
1881
|
+
INC E ; next data ' 4 |
|
|
1882
|
+
LD A, (DE) ; A = YM reg data ' 7 |
|
|
1883
|
+
INC E ; next data ' 4 |
|
|
1884
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1885
|
+
|
|
1886
|
+
;ym_port_write3
|
|
1887
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1888
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1889
|
+
LD (HL), A ; write reg num to YM ' 7 | 66 (178)
|
|
1890
|
+
INC E ; next data ' 4 |
|
|
1891
|
+
LD A, (DE) ; A = YM reg data ' 7 |
|
|
1892
|
+
INC E ; next data ' 4 |
|
|
1893
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1894
|
+
|
|
1895
|
+
ym_port_write2
|
|
1896
|
+
LD A, (DE) ; A = YM reg num ' 7 |
|
|
1897
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1898
|
+
LD (HL), A ; write reg num to YM ' 7 | 66 (244)
|
|
1899
|
+
INC E ; next data ' 4 |
|
|
1900
|
+
LD A, (DE) ; A = YM reg data ' 7 |
|
|
1901
|
+
INC E ; next data ' 4 |
|
|
1902
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1903
|
+
|
|
1904
|
+
EXX ; switch to HL' (port0) ' 4 | (248)
|
|
1905
|
+
.wait ; ' |
|
|
1906
|
+
BIT 7, (HL) ; test YM ready bit ' 12 |
|
|
1907
|
+
JP NZ, .wait ; wait while busy ' 10 | 22 (258+14)
|
|
1908
|
+
|
|
1909
|
+
LD (HL), $2A ; restore DAC write ' 10 |
|
|
1910
|
+
LD A, (BC) ; ' 7 |
|
|
1911
|
+
INC BC ; play sample ' 6 | 42 (46)
|
|
1912
|
+
RES 2, B ; ' 8 |
|
|
1913
|
+
LD (DE), A ; ' 7 |
|
|
1914
|
+
EXX ; ' 4 |
|
|
1915
|
+
|
|
1916
|
+
wait24 ; sync ' 24 | 54 (100)
|
|
1917
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
1918
|
+
|
|
1919
|
+
JP ym_port_write1 ; execute next ' 10 | (110)
|
|
1920
|
+
|
|
1921
|
+
|
|
1922
|
+
; YM KEY command
|
|
1923
|
+
; --------------
|
|
1924
|
+
|
|
1925
|
+
com_ym_key_w0 ; 40 ' 80
|
|
1926
|
+
wait44 ; sync ' 44 |
|
|
1927
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
|
|
1928
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 | 84 (164)
|
|
1929
|
+
LD (HL), $28 ; set reg num to YM ' 10 |
|
|
1930
|
+
JP ym_key_write0 ; ' 10 |
|
|
1931
|
+
|
|
1932
|
+
com_ym_key_w1 ; 41 ' 80
|
|
1933
|
+
wait4 ; sync ' 4 |
|
|
1934
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
|
|
1935
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 | 44 (124)
|
|
1936
|
+
LD (HL), $28 ; set reg num to YM ' 10 |
|
|
1937
|
+
JP ym_key_write1 ; ' 10 |
|
|
1938
|
+
|
|
1939
|
+
com_ym_key_w2 ; 43 ' 80
|
|
1940
|
+
wait134 ; sync ' 134 |
|
|
1941
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
|
|
1942
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
|
|
1943
|
+
LD (HL), $28 ; set reg num to YM ' 10 | 174 (254)
|
|
1944
|
+
JP ym_key_write2 ; ' 10 |
|
|
1945
|
+
|
|
1946
|
+
com_ym_key_w3 ; 44 ' 80
|
|
1947
|
+
wait64 ; sync ' 64 |
|
|
1948
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
|
|
1949
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
|
|
1950
|
+
LD (HL), $28 ; set reg num to YM ' 10 | 104 (184)
|
|
1951
|
+
JP ym_key_write3 ; ' 10 |
|
|
1952
|
+
|
|
1953
|
+
com_ym_key_w4 ; 45 ' 80
|
|
1954
|
+
wait24 ; sync ' 24 |
|
|
1955
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
|
|
1956
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
|
|
1957
|
+
LD (HL), $28 ; set reg num to YM ' 10 | 64 (144)
|
|
1958
|
+
JP ym_key_write4 ; ' 10 |
|
|
1959
|
+
|
|
1960
|
+
com_ym_key_w5 ; 46 ' 80
|
|
1961
|
+
wait154 ; sync ' 174 |
|
|
1962
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 | 174 (254)
|
|
1963
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 |
|
|
1964
|
+
|
|
1965
|
+
sampleOutputSafe ; ' 46 | (46)
|
|
1966
|
+
|
|
1967
|
+
wait16 ; sync ' 16 |
|
|
1968
|
+
waitYMReadyFast ; wait YM to be ready ' 22 |
|
|
1969
|
+
LD (HL), $28 ; set reg num to YM ' 10 | 58 (104)
|
|
1970
|
+
JP ym_key_write5 ; ' 10 |
|
|
1971
|
+
|
|
1972
|
+
|
|
1973
|
+
ym_key_write1 ; ' 124
|
|
1974
|
+
LD A, (DE) ; A = YM key data ' 7 |
|
|
1975
|
+
INC E ; next data ' 4 |
|
|
1976
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 40 (164)
|
|
1977
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1978
|
+
|
|
1979
|
+
ym_key_write0 ; ' 164
|
|
1980
|
+
LD A, (DE) ; A = YM key data ' 7 |
|
|
1981
|
+
INC E ; next data ' 4 |
|
|
1982
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 40 (204)
|
|
1983
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1984
|
+
|
|
1985
|
+
wait8 ; sync ' 8 |
|
|
1986
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 40 (244)
|
|
1987
|
+
LD (HL), $2A ; restore DAC write ' 10 |
|
|
1988
|
+
|
|
1989
|
+
JP execute_xgm ; ' 10 | (254)
|
|
1990
|
+
|
|
1991
|
+
ym_key_write5 ; ' 104
|
|
1992
|
+
LD A, (DE) ; A = YM key data ' 7 |
|
|
1993
|
+
INC E ; next data ' 4 |
|
|
1994
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 40 (144)
|
|
1995
|
+
LD (BC), A ; write to YM ' 7 |
|
|
1996
|
+
|
|
1997
|
+
ym_key_write4 ; ' 144
|
|
1998
|
+
LD A, (DE) ; A = YM key data ' 7 |
|
|
1999
|
+
INC E ; next data ' 4 |
|
|
2000
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 40 (184)
|
|
2001
|
+
LD (BC), A ; write to YM ' 7 |
|
|
2002
|
+
|
|
2003
|
+
ym_key_write3 ; ' 184
|
|
2004
|
+
LD A, (DE) ; A = YM key data ' 7 |
|
|
2005
|
+
INC E ; next data ' 4 |
|
|
2006
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 40 (224)
|
|
2007
|
+
LD (BC), A ; write to YM ' 7 |
|
|
2008
|
+
|
|
2009
|
+
wait8 ; sync ' 8 |
|
|
2010
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 30 (254)
|
|
2011
|
+
|
|
2012
|
+
ym_key_write2
|
|
2013
|
+
sampleOutputSafe ; ' 46 | (46)
|
|
2014
|
+
|
|
2015
|
+
wait8 ; sync ' 8 |
|
|
2016
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 40 (86)
|
|
2017
|
+
LD (HL), $28 ; restore write to key ' 10 |
|
|
2018
|
+
|
|
2019
|
+
LD A, (DE) ; A = YM key data ' 7 |
|
|
2020
|
+
INC DE ; next data ' 6 |
|
|
2021
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 40 (126)
|
|
2022
|
+
LD (BC), A ; write to YM ' 7 |
|
|
2023
|
+
|
|
2024
|
+
.write1
|
|
2025
|
+
LD A, (DE) ; A = YM key data ' 7 |
|
|
2026
|
+
INC E ; next data ' 4 |
|
|
2027
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 40 (166)
|
|
2028
|
+
LD (BC), A ; write to YM ' 7 |
|
|
2029
|
+
|
|
2030
|
+
.write0
|
|
2031
|
+
LD A, (DE) ; A = YM key data ' 7 |
|
|
2032
|
+
INC E ; next data ' 4 |
|
|
2033
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 40 (206)
|
|
2034
|
+
LD (BC), A ; write to YM ' 7 |
|
|
2035
|
+
|
|
2036
|
+
wait7 ; sync ' 7 |
|
|
2037
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 39 (245)
|
|
2038
|
+
LD (HL), $2A ; restore DAC write ' 10 |
|
|
2039
|
+
|
|
2040
|
+
JP execute_xgm ; ' 10 | (254+1)
|
|
2041
|
+
|
|
2042
|
+
|
|
2043
|
+
; PCM command
|
|
2044
|
+
; -----------
|
|
2045
|
+
|
|
2046
|
+
com_pcm_p0_ch0 ; 50 ' 80
|
|
2047
|
+
LD C, 0 ; C = prio ' 7 |
|
|
2048
|
+
JP com_pcm_ch0 ; execute PCM com ' 10 | 17 (97)
|
|
2049
|
+
|
|
2050
|
+
com_pcm_p1_ch0 ; 54 ' 80
|
|
2051
|
+
LD C, 1 ; C = prio ' 7 |
|
|
2052
|
+
JP com_pcm_ch0 ; execute PCM com ' 10 | 17 (97)
|
|
2053
|
+
|
|
2054
|
+
com_pcm_p2_ch0 ; 58 ' 80
|
|
2055
|
+
LD C, 2 ; C = prio ' 7 |
|
|
2056
|
+
JP com_pcm_ch0 ; execute PCM com ' 10 | 17 (97)
|
|
2057
|
+
|
|
2058
|
+
com_pcm_p3_ch0 ; 5C ' 80
|
|
2059
|
+
LD C, 3 ; C = prio ' 7 |
|
|
2060
|
+
JP com_pcm_ch0 ; execute PCM com ' 10 | 17 (97)
|
|
2061
|
+
|
|
2062
|
+
com_pcm_p0_ch1 ; 51 ' 80
|
|
2063
|
+
LD C, 0 ; C = prio ' 7 |
|
|
2064
|
+
JP com_pcm_ch1 ; execute PCM com ' 10 | 17 (97)
|
|
2065
|
+
|
|
2066
|
+
com_pcm_p1_ch1 ; 55 ' 80
|
|
2067
|
+
LD C, 1 ; C = prio ' 7 |
|
|
2068
|
+
JP com_pcm_ch1 ; execute PCM com ' 10 | 17 (97)
|
|
2069
|
+
|
|
2070
|
+
com_pcm_p2_ch1 ; 59 ' 80
|
|
2071
|
+
LD C, 2 ; C = prio ' 7 |
|
|
2072
|
+
JP com_pcm_ch1 ; execute PCM com ' 10 | (119)
|
|
2073
|
+
|
|
2074
|
+
com_pcm_p3_ch1 ; 5D ' 80
|
|
2075
|
+
LD C, 3 ; C = prio ' 7 |
|
|
2076
|
+
JP com_pcm_ch1 ; execute PCM com ' 10 | (119)
|
|
2077
|
+
|
|
2078
|
+
com_pcm_p0_ch2 ; 52 ' 80
|
|
2079
|
+
LD C, 0 ; C = prio ' 7 |
|
|
2080
|
+
JP com_pcm_ch2 ; execute PCM com ' 10 | (119)
|
|
2081
|
+
|
|
2082
|
+
com_pcm_p1_ch2 ; 56 ' 80
|
|
2083
|
+
LD C, 1 ; C = prio ' 7 |
|
|
2084
|
+
JP com_pcm_ch2 ; execute PCM com ' 10 | (119)
|
|
2085
|
+
|
|
2086
|
+
com_pcm_p2_ch2 ; 5A ' 80
|
|
2087
|
+
LD C, 2 ; C = prio ' 7 |
|
|
2088
|
+
JP com_pcm_ch2 ; execute PCM com ' 10 | (119)
|
|
2089
|
+
|
|
2090
|
+
com_pcm_p3_ch2 ; 5E ' 80
|
|
2091
|
+
LD C, 3 ; C = prio ' 7 |
|
|
2092
|
+
JP com_pcm_ch2 ; execute PCM com ' 10 | (119)
|
|
2093
|
+
|
|
2094
|
+
com_pcm_p0_ch3 ; 53 ' 80
|
|
2095
|
+
LD C, 0 ; C = prio ' 7 |
|
|
2096
|
+
JP com_pcm_ch3 ; execute PCM com ' 10 | (119)
|
|
2097
|
+
|
|
2098
|
+
com_pcm_p1_ch3 ; 57 ' 80
|
|
2099
|
+
LD C, 1 ; C = prio ' 7 |
|
|
2100
|
+
JP com_pcm_ch3 ; execute PCM com ' 10 | (119)
|
|
2101
|
+
|
|
2102
|
+
com_pcm_p2_ch3 ; 5B ' 80
|
|
2103
|
+
LD C, 2 ; C = prio ' 7 |
|
|
2104
|
+
JP com_pcm_ch3 ; execute PCM com ' 10 | (119)
|
|
2105
|
+
|
|
2106
|
+
com_pcm_p3_ch3 ; 5F ' 80
|
|
2107
|
+
LD C, 3 ; C = prio ' 7 |
|
|
2108
|
+
JP com_pcm_ch3 ; execute PCM com ' 10 | (119)
|
|
2109
|
+
|
|
2110
|
+
|
|
2111
|
+
com_pcm_ch0 ; ' 97
|
|
2112
|
+
handlePCMCommandXGM 0 ; handle command ' 142 |
|
|
2113
|
+
wait4 ; sync ' 4 | 156 (254-1)
|
|
2114
|
+
JP execute_xgm ; ' 10 |
|
|
2115
|
+
|
|
2116
|
+
com_pcm_ch1 ; ' 97
|
|
2117
|
+
handlePCMCommandXGM 1 ; handle command ' 142 |
|
|
2118
|
+
wait4 ; sync ' 4 | 156 (254-1)
|
|
2119
|
+
JP execute_xgm ; ' 10 |
|
|
2120
|
+
|
|
2121
|
+
com_pcm_ch2 ; ' 97
|
|
2122
|
+
handlePCMCommandXGM 2 ; handle command ' 142 |
|
|
2123
|
+
wait4 ; sync ' 4 | 156 (254-1)
|
|
2124
|
+
JP execute_xgm ; ' 10 |
|
|
2125
|
+
|
|
2126
|
+
com_pcm_ch3 ; ' 97
|
|
2127
|
+
handlePCMCommandXGM 3 ; handle command ' 142 |
|
|
2128
|
+
wait4 ; sync ' 4 | 156 (254-1)
|
|
2129
|
+
JP execute_xgm ; ' 10 |
|
|
2130
|
+
|
|
2131
|
+
|
|
2132
|
+
|
|
2133
|
+
; STATE command
|
|
2134
|
+
; -------------
|
|
2135
|
+
|
|
2136
|
+
com_state_w0 ; 60 ' 80
|
|
2137
|
+
wait114 ; sync ' 114 |
|
|
2138
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 131 (211)
|
|
2139
|
+
JP state_w0 ; execute ' 10 |
|
|
2140
|
+
|
|
2141
|
+
com_state_w1 ; 61 ' 80
|
|
2142
|
+
wait81 ; sync ' 81 |
|
|
2143
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 98 (178)
|
|
2144
|
+
JP state_w1 ; execute ' 10 |
|
|
2145
|
+
|
|
2146
|
+
com_state_w2 ; 62 ' 80
|
|
2147
|
+
wait48 ; sync ' 48 |
|
|
2148
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 65 (145)
|
|
2149
|
+
JP state_w2 ; execute ' 10 |
|
|
2150
|
+
|
|
2151
|
+
com_state_w3 ; 63 ' 80
|
|
2152
|
+
wait15 ; sync ' 15 |
|
|
2153
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 32 (112)
|
|
2154
|
+
JP state_w3 ; execute ' 10 |
|
|
2155
|
+
|
|
2156
|
+
com_state_w4 ; 64 ' 80
|
|
2157
|
+
wait174 ; sync ' 174 | (254)
|
|
2158
|
+
sampleOutput ; sample output ' 36 | (36)
|
|
2159
|
+
|
|
2160
|
+
wait26 ; sync ' 26 |
|
|
2161
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 43 (79)
|
|
2162
|
+
JP state_w4 ; execute ' 10 |
|
|
2163
|
+
|
|
2164
|
+
com_state_w5 ; 65 ' 80
|
|
2165
|
+
wait157 ; sync ' 157 |
|
|
2166
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 174 (254)
|
|
2167
|
+
JP state_w5 ; execute ' 10 |
|
|
2168
|
+
|
|
2169
|
+
com_state_w6 ; 66 ' 80
|
|
2170
|
+
wait124 ; sync ' 124 |
|
|
2171
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 141 (221)
|
|
2172
|
+
JP state_w6 ; execute ' 10 |
|
|
2173
|
+
|
|
2174
|
+
com_state_w7 ; 67 ' 80
|
|
2175
|
+
wait91 ; sync ' 91 |
|
|
2176
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 108 (188)
|
|
2177
|
+
JP state_w7 ; execute ' 10 |
|
|
2178
|
+
|
|
2179
|
+
com_state_w8 ; 68 ' 80
|
|
2180
|
+
wait58 ; sync ' 58 |
|
|
2181
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 75 (155)
|
|
2182
|
+
JP state_w8 ; execute ' 10 |
|
|
2183
|
+
|
|
2184
|
+
com_state_w9 ; 69 ' 80
|
|
2185
|
+
wait25 ; sync ' 25 |
|
|
2186
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 42 (122)
|
|
2187
|
+
JP state_w9 ; execute ' 10 |
|
|
2188
|
+
|
|
2189
|
+
com_state_wA ; 6A ' 80
|
|
2190
|
+
wait174 ; sync ' 174 | (254)
|
|
2191
|
+
sampleOutput ; sample output ' 36 | (36)
|
|
2192
|
+
|
|
2193
|
+
wait36 ; sync ' 36 |
|
|
2194
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 53 (89)
|
|
2195
|
+
JP state_wA ; execute ' 10 |
|
|
2196
|
+
|
|
2197
|
+
com_state_wB ; 6B ' 80
|
|
2198
|
+
wait157 ; sync ' 157 |
|
|
2199
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 174 (254)
|
|
2200
|
+
JP state_wB ; execute ' 10 |
|
|
2201
|
+
|
|
2202
|
+
com_state_wC ; 6C ' 80
|
|
2203
|
+
wait124 ; sync ' 124 |
|
|
2204
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 141 (221)
|
|
2205
|
+
JP state_wC ; execute ' 10 |
|
|
2206
|
+
|
|
2207
|
+
com_state_wD ; 6D ' 80
|
|
2208
|
+
wait91 ; sync ' 91 |
|
|
2209
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 108 (188)
|
|
2210
|
+
JP state_wD ; execute ' 10 |
|
|
2211
|
+
|
|
2212
|
+
com_state_wE ; 6E ' 80
|
|
2213
|
+
wait58 ; sync ' 58 |
|
|
2214
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 75 (155)
|
|
2215
|
+
JP state_wE ; execute ' 10 |
|
|
2216
|
+
|
|
2217
|
+
com_state_wF ; 6F ' 80
|
|
2218
|
+
wait35 ; sync ' 35 |
|
|
2219
|
+
LD H, (YM_RR_SAV >> 8) ; H point on YM save H ' 7 | 42 (122)
|
|
2220
|
+
|
|
2221
|
+
state_wF ; ' 122
|
|
2222
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2223
|
+
INC E ; next data ' 4 |
|
|
2224
|
+
LD L, A ; HL point on save ' 4 | 33 (155)
|
|
2225
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2226
|
+
INC E ; next data ' 4 |
|
|
2227
|
+
LD (HL), A ; write to save ' 7 |
|
|
2228
|
+
|
|
2229
|
+
state_wE
|
|
2230
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2231
|
+
INC E ; next data ' 4 |
|
|
2232
|
+
LD L, A ; HL point on save ' 4 | 33 (188)
|
|
2233
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2234
|
+
INC E ; next data ' 4 |
|
|
2235
|
+
LD (HL), A ; write to save ' 7 |
|
|
2236
|
+
|
|
2237
|
+
state_wD
|
|
2238
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2239
|
+
INC E ; next data ' 4 |
|
|
2240
|
+
LD L, A ; HL point on save ' 4 | 33 (221)
|
|
2241
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2242
|
+
INC E ; next data ' 4 |
|
|
2243
|
+
LD (HL), A ; write to save ' 7 |
|
|
2244
|
+
|
|
2245
|
+
state_wC
|
|
2246
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2247
|
+
INC E ; next data ' 4 |
|
|
2248
|
+
LD L, A ; HL point on save ' 4 | 33 (254)
|
|
2249
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2250
|
+
INC E ; next data ' 4 |
|
|
2251
|
+
LD (HL), A ; write to save ' 7 |
|
|
2252
|
+
|
|
2253
|
+
state_wB
|
|
2254
|
+
sampleOutput ; sample output ' 36 |
|
|
2255
|
+
wait20 ; wait ' 20 | (56)
|
|
2256
|
+
|
|
2257
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2258
|
+
INC E ; next data ' 4 |
|
|
2259
|
+
LD L, A ; HL point on save ' 4 | 33 (89)
|
|
2260
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2261
|
+
INC E ; next data ' 4 |
|
|
2262
|
+
LD (HL), A ; write to save ' 7 |
|
|
2263
|
+
|
|
2264
|
+
state_wA
|
|
2265
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2266
|
+
INC E ; next data ' 4 |
|
|
2267
|
+
LD L, A ; HL point on save ' 4 | 33 (122)
|
|
2268
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2269
|
+
INC E ; next data ' 4 |
|
|
2270
|
+
LD (HL), A ; write to save ' 7 |
|
|
2271
|
+
|
|
2272
|
+
state_w9
|
|
2273
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2274
|
+
INC E ; next data ' 4 |
|
|
2275
|
+
LD L, A ; HL point on save ' 4 | 33 (155)
|
|
2276
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2277
|
+
INC E ; next data ' 4 |
|
|
2278
|
+
LD (HL), A ; write to save ' 7 |
|
|
2279
|
+
|
|
2280
|
+
state_w8
|
|
2281
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2282
|
+
INC E ; next data ' 4 |
|
|
2283
|
+
LD L, A ; HL point on save ' 4 | 33 (188)
|
|
2284
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2285
|
+
INC E ; next data ' 4 |
|
|
2286
|
+
LD (HL), A ; write to save ' 7 |
|
|
2287
|
+
|
|
2288
|
+
state_w7
|
|
2289
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2290
|
+
INC E ; next data ' 4 |
|
|
2291
|
+
LD L, A ; HL point on save ' 4 | 33 (221)
|
|
2292
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2293
|
+
INC E ; next data ' 4 |
|
|
2294
|
+
LD (HL), A ; write to save ' 7 |
|
|
2295
|
+
|
|
2296
|
+
state_w6
|
|
2297
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2298
|
+
INC E ; next data ' 4 |
|
|
2299
|
+
LD L, A ; HL point on save ' 4 | 33 (254)
|
|
2300
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2301
|
+
INC E ; next data ' 4 |
|
|
2302
|
+
LD (HL), A ; write to save ' 7 |
|
|
2303
|
+
|
|
2304
|
+
state_w5
|
|
2305
|
+
sampleOutput ; sample output ' 36 |
|
|
2306
|
+
wait10 ; wait ' 10 | (46)
|
|
2307
|
+
|
|
2308
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2309
|
+
INC E ; next data ' 4 |
|
|
2310
|
+
LD L, A ; HL point on save ' 4 | 33 (79)
|
|
2311
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2312
|
+
INC E ; next data ' 4 |
|
|
2313
|
+
LD (HL), A ; write to save ' 7 |
|
|
2314
|
+
|
|
2315
|
+
state_w4
|
|
2316
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2317
|
+
INC E ; next data ' 4 |
|
|
2318
|
+
LD L, A ; HL point on save ' 4 | 33 (112)
|
|
2319
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2320
|
+
INC E ; next data ' 4 |
|
|
2321
|
+
LD (HL), A ; write to save ' 7 |
|
|
2322
|
+
|
|
2323
|
+
state_w3
|
|
2324
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2325
|
+
INC E ; next data ' 4 |
|
|
2326
|
+
LD L, A ; HL point on save ' 4 | 33 (145)
|
|
2327
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2328
|
+
INC E ; next data ' 4 |
|
|
2329
|
+
LD (HL), A ; write to save ' 7 |
|
|
2330
|
+
|
|
2331
|
+
state_w2
|
|
2332
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2333
|
+
INC E ; next data ' 4 |
|
|
2334
|
+
LD L, A ; HL point on save ' 4 | 33 (178)
|
|
2335
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2336
|
+
INC E ; next data ' 4 |
|
|
2337
|
+
LD (HL), A ; write to save ' 7 |
|
|
2338
|
+
|
|
2339
|
+
state_w1
|
|
2340
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2341
|
+
INC E ; next data ' 4 |
|
|
2342
|
+
LD L, A ; HL point on save ' 4 | 33 (211)
|
|
2343
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2344
|
+
INC E ; next data ' 4 |
|
|
2345
|
+
LD (HL), A ; write to save ' 7 |
|
|
2346
|
+
|
|
2347
|
+
state_w0
|
|
2348
|
+
LD A, (DE) ; A = state register ' 7 |
|
|
2349
|
+
INC E ; next data ' 4 |
|
|
2350
|
+
LD L, A ; HL point on save ' 4 | 33 (244)
|
|
2351
|
+
LD A, (DE) ; A = state value ' 7 |
|
|
2352
|
+
INC E ; next data ' 4 |
|
|
2353
|
+
LD (HL), A ; write to save ' 7 |
|
|
2354
|
+
|
|
2355
|
+
JP execute_xgm ; ' 10 | (254)
|
|
2356
|
+
|
|
2357
|
+
|
|
2358
|
+
; NULL command
|
|
2359
|
+
; ------------
|
|
2360
|
+
|
|
2361
|
+
com_null ; 01-0F / 60-7C ' 80
|
|
2362
|
+
wait164 ; sync ' 164 |
|
|
2363
|
+
JP execute_xgm ; ' 10 | 174 (254)
|
|
2364
|
+
|
|
2365
|
+
|
|
2366
|
+
; EXTRA FRAME command
|
|
2367
|
+
; -------------------
|
|
2368
|
+
|
|
2369
|
+
com_extra_frm ; 7D ' 80
|
|
2370
|
+
|
|
2371
|
+
LD A, $1 ; ' 7 |
|
|
2372
|
+
LD (MODIFYING_F), A ; we are modifying variable ' 13 | 20 (100)
|
|
2373
|
+
|
|
2374
|
+
LD A, (PENDING_FRM) ; ' 13 |
|
|
2375
|
+
INC A ; force process 1 more frame ' 4 | 30 (130)
|
|
2376
|
+
LD (PENDING_FRM), A ; ' 13 |
|
|
2377
|
+
|
|
2378
|
+
XOR A ; ' 4 |
|
|
2379
|
+
LD (MODIFYING_F), A ; no more modifying variable ' 13 | 17 (147)
|
|
2380
|
+
|
|
2381
|
+
LD HL, ELAPSED ; ' 10 | 10 (157)
|
|
2382
|
+
|
|
2383
|
+
LD A, (HL) ; ' 7 |
|
|
2384
|
+
SUB A, #1 ; ' 7 |
|
|
2385
|
+
LD (HL), A ; ' 7 |
|
|
2386
|
+
INC L ; ' 4 |
|
|
2387
|
+
LD A, (HL) ; ' 7 |
|
|
2388
|
+
SBC A, #0 ; fix elapsed frame (24 bit) ' 7 | 71 (228)
|
|
2389
|
+
LD (HL), A ; ' 7 |
|
|
2390
|
+
INC L ; ' 4 |
|
|
2391
|
+
LD A, (HL) ; ' 7 |
|
|
2392
|
+
SBC A, #0 ; ' 7 |
|
|
2393
|
+
LD (HL), A ; ' 7 |
|
|
2394
|
+
|
|
2395
|
+
wait16 ; sync ' 16 | 26 (254)
|
|
2396
|
+
JP execute_xgm ; ' 10 |
|
|
2397
|
+
|
|
2398
|
+
|
|
2399
|
+
; LOOP command
|
|
2400
|
+
; ------------
|
|
2401
|
+
|
|
2402
|
+
com_loop ; 7E ' 80
|
|
2403
|
+
|
|
2404
|
+
LD A, (REM_LOOP) ; A = remaining loop ' 13 |
|
|
2405
|
+
DEC A ; 0 mean infinite loop ' 4 |
|
|
2406
|
+
LD (REM_LOOP), A ; A = remaining loop ' 13 | 40 (120)
|
|
2407
|
+
JP NZ, .continue ; ' 10 |
|
|
2408
|
+
|
|
2409
|
+
LD HL, COMMAND ; HL = COMMAND ' 10 | 25 (145)
|
|
2410
|
+
SET XGM_PAUSE_SFT, (HL) ; request pause/end XGM ' 15 |
|
|
2411
|
+
|
|
2412
|
+
LD HL, STATUS ; HL = STATUS ' 10 | 25 (170)
|
|
2413
|
+
RES XGM_PLAY_SFT, (HL) ; clear play status ' 15 |
|
|
2414
|
+
|
|
2415
|
+
INC E ; next param ' 4 |
|
|
2416
|
+
INC E ; ' 4 | 12 (182)
|
|
2417
|
+
INC E ; ' 4 |
|
|
2418
|
+
|
|
2419
|
+
wait62 ; sync ' 62 |
|
|
2420
|
+
JP execute_xgm ; ' 10 | 72 (254)
|
|
2421
|
+
|
|
2422
|
+
.continue
|
|
2423
|
+
LD A, (DE) ; A = loop addr b7-b0 ' 7 |
|
|
2424
|
+
LD L, A ; L = loop addr b7-b0 ' 4 |
|
|
2425
|
+
INC E ; next param ' 4 |
|
|
2426
|
+
LD A, (DE) ; A = loop addr b15-b8 ' 7 | 30 (150)
|
|
2427
|
+
LD H, A ; HL = loop addr b15-b0 ' 4 |
|
|
2428
|
+
INC E ; next param ' 4 |
|
|
2429
|
+
|
|
2430
|
+
LD BC, (XGM_ARG_A+0) ; BC = XGM base addr (ML) ' 20 |
|
|
2431
|
+
ADD HL, BC ; HL = XGM base addr + loop ' 11 | 47 (197)
|
|
2432
|
+
LD (XGM_ADDR+0), HL ; set new XGM addr (ML) ' 16 |
|
|
2433
|
+
|
|
2434
|
+
LD A, (DE) ; A = loop addr b23-b16 ' 7 |
|
|
2435
|
+
LD HL, XGM_ARG_A+2 ; HL point XGM base adr H ' 10 |
|
|
2436
|
+
ADC (HL) ; A = XGM base addr + loop ' 7 | 41 (238)
|
|
2437
|
+
INC E ; next param ' 4 |
|
|
2438
|
+
LD (XGM_ADDR+2), A ; set new XGM addr (H) ' 13 |
|
|
2439
|
+
|
|
2440
|
+
XOR A ; force end frame ' 4 |
|
|
2441
|
+
LD (DE), A ; after loop taken ' 7 | 11 (249)
|
|
2442
|
+
|
|
2443
|
+
JP execute_xgm ; +5 cycles delay here.. ' 10 | (254+5)
|
|
2444
|
+
|
|
2445
|
+
|
|
2446
|
+
; END XGM command
|
|
2447
|
+
; ---------------
|
|
2448
|
+
|
|
2449
|
+
com_end ; 7F ' 80
|
|
2450
|
+
LD HL, COMMAND ; HL = COMMAND ' 10 | 25 (105)
|
|
2451
|
+
SET XGM_PAUSE_SFT, (HL) ; request pause/end XGM ' 15 |
|
|
2452
|
+
|
|
2453
|
+
LD HL, STATUS ; HL = STATUS ' 10 | 25 (130)
|
|
2454
|
+
RES XGM_PLAY_SFT, (HL) ; clear play status ' 15 |
|
|
2455
|
+
|
|
2456
|
+
wait114 ; sync ' 114 |
|
|
2457
|
+
JP execute_xgm ; ' 10 | 124 (254)
|
|
2458
|
+
|
|
2459
|
+
|
|
2460
|
+
; $BC+X+Y+Z
|
|
2461
|
+
do_xgm_again ; ' 135
|
|
2462
|
+
DEC L ; HL point on MODIFYING_F ' 4 |
|
|
2463
|
+
LD (HL), $0 ; no more modifying ' 10 | 14 (149)
|
|
2464
|
+
|
|
2465
|
+
wait95 ; sync ' 95 |
|
|
2466
|
+
JP main_loop ; restart loop (prep xgm) ' 10 | 105 (254)
|
|
2467
|
+
|
|
2468
|
+
|
|
2469
|
+
|
|
2470
|
+
xgm_stopped
|
|
2471
|
+
LD (HL), $0 ; clear PENDING_FRM ' xx
|
|
2472
|
+
JP xgm_stopped_cont ; continue ' xx
|
|
2473
|
+
|
|
2474
|
+
|
|
2475
|
+
; $BC+X+Y+Z
|
|
2476
|
+
xgm_done ; ' 90
|
|
2477
|
+
|
|
2478
|
+
; LD A, (VCOUNTER)
|
|
2479
|
+
; LD (DEBUG_8), A
|
|
2480
|
+
|
|
2481
|
+
LD HL, MODIFYING_F ; ' 10 |
|
|
2482
|
+
LD (HL), $1 ; we are modifying variable ' 10 | 24 (114)
|
|
2483
|
+
INC L ; HL point on PENDING_FRM ' 4 |
|
|
2484
|
+
|
|
2485
|
+
DEC (HL) ; still have frame to process ? ' 11 |
|
|
2486
|
+
JP M, xgm_stopped ; for safety on 68k clear ' xx
|
|
2487
|
+
JP NZ, do_xgm_again ; do XGM process again ' 10 | 21 (135)
|
|
2488
|
+
|
|
2489
|
+
xgm_stopped_cont
|
|
2490
|
+
DEC L ; HL point on MODIFYING_F ' 4 |
|
|
2491
|
+
LD (HL), $0 ; no more modifying variable ' 10 | 14 (149)
|
|
2492
|
+
|
|
2493
|
+
|
|
2494
|
+
; LD A, (VCOUNTER)
|
|
2495
|
+
; LD (DEBUG_9), A
|
|
2496
|
+
|
|
2497
|
+
; execute external command
|
|
2498
|
+
; ------------------------
|
|
2499
|
+
|
|
2500
|
+
; $BC+X+Y+Z
|
|
2501
|
+
external_com ; ' 149
|
|
2502
|
+
LD SP, STACK ; restore stack ' 10 |
|
|
2503
|
+
LD HL, COMMAND ; HL point on COMMAND ' 10 | 20 (159)
|
|
2504
|
+
|
|
2505
|
+
.chk_xgm_play
|
|
2506
|
+
BIT XGM_PLAY_SFT, (HL) ; play XGM command ? ' 12 |
|
|
2507
|
+
JP Z, .chk_xgm_resume ; ' 10 | 22 (181)
|
|
2508
|
+
|
|
2509
|
+
RES XGM_PLAY_SFT, (HL) ; clear command ' 15 |
|
|
2510
|
+
INC L ; ' 4 |
|
|
2511
|
+
INC L ; HL point on status ' 4 | 38 (219)
|
|
2512
|
+
SET XGM_PLAY_SFT, (HL) ; set play status ' 15 |
|
|
2513
|
+
|
|
2514
|
+
LD HL, (XGM_ARG_A) ; set new XGM address ' 16 |
|
|
2515
|
+
LD (XGM_ADDR), HL ; ' 16 | 58 (277)
|
|
2516
|
+
LD A, (XGM_ARG_A+2) ; ' 13 |
|
|
2517
|
+
LD (XGM_ADDR+2),A ; ' 13 |
|
|
2518
|
+
|
|
2519
|
+
LD A, (LOOP_ARG) ; set remaining loop ' 13 |
|
|
2520
|
+
LD (REM_LOOP),A ; ' 13 | 26 (303)
|
|
2521
|
+
|
|
2522
|
+
LD HL, #0000 ; clear elapsed frame ' 10 |
|
|
2523
|
+
LD (ELAPSED), HL ; (24 bit counter) ' 16 |
|
|
2524
|
+
XOR A ; ' 4 | 43 (346)
|
|
2525
|
+
LD (ELAPSED+2), A ; ' 13 |
|
|
2526
|
+
|
|
2527
|
+
LD HL, COMMAND ; restore HL ' 10 |
|
|
2528
|
+
JP external_com_pcm ; do PCM commands ' 10 | 20 (254+112)
|
|
2529
|
+
; +112 cycles here, ignore
|
|
2530
|
+
|
|
2531
|
+
.chk_xgm_resume
|
|
2532
|
+
BIT XGM_RESUME_SFT, (HL) ; play XGM command ? ' 12 |
|
|
2533
|
+
JP Z, .chk_xgm_stop ; ' 10 | 22 (203)
|
|
2534
|
+
|
|
2535
|
+
RES XGM_RESUME_SFT, (HL) ; clear command ' 15 |
|
|
2536
|
+
INC L ; ' 4 |
|
|
2537
|
+
INC L ; HL point on status ' 4 | 38 (241)
|
|
2538
|
+
SET XGM_PLAY_SFT, (HL) ; set play status ' 15 |
|
|
2539
|
+
|
|
2540
|
+
LD DE, YM_RR_SAV ; DE point on save state ' 10 |
|
|
2541
|
+
LD SP, STACK ; set STACK ' 10 | 20 (254+7)
|
|
2542
|
+
; +7 cycles here, ignore
|
|
2543
|
+
|
|
2544
|
+
CALL loadState ; load state ' 140+ | (140)
|
|
2545
|
+
|
|
2546
|
+
wait94 ; sync ' 94 |
|
|
2547
|
+
LD HL, COMMAND ; restore HL ' 10 | 114 (254)
|
|
2548
|
+
JP external_com_pcm ; do PCM commands ' 10 |
|
|
2549
|
+
|
|
2550
|
+
.chk_xgm_stop
|
|
2551
|
+
BIT XGM_PAUSE_SFT, (HL) ; pause/end XGM command ? ' 12 |
|
|
2552
|
+
JP Z, .chk_pcm0_pre ; ' 10 | 22 (225)
|
|
2553
|
+
|
|
2554
|
+
RES XGM_PAUSE_SFT, (HL) ; clear command ' 15 |
|
|
2555
|
+
INC L ; ' 4 |
|
|
2556
|
+
INC L ; HL point on status ' 4 | 38 (263)
|
|
2557
|
+
RES XGM_PLAY_SFT, (HL) ; clear play status ' 15 |
|
|
2558
|
+
|
|
2559
|
+
LD DE, YM_RR_OFF ; DE point on off state ' 10 |
|
|
2560
|
+
LD SP, STACK ; set STACK ' 10 | 20 (254+29)
|
|
2561
|
+
; +29 cycles here, ignore
|
|
2562
|
+
|
|
2563
|
+
CALL loadState ; stop music ' 140+ | (140)
|
|
2564
|
+
|
|
2565
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
|
|
2566
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 | 20 (160)
|
|
2567
|
+
|
|
2568
|
+
LD (HL), $28 ; set reg num to YM ' 10 |
|
|
2569
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 32 (192)
|
|
2570
|
+
|
|
2571
|
+
XOR A ; A = $00 ' 4 |
|
|
2572
|
+
LD (BC), A ; key off - all channel ' 7 |
|
|
2573
|
+
INC A ; A = $01 ' 4 | 37 (229)
|
|
2574
|
+
waitYMReadyFast ; wait YM to be ready ' 22 |
|
|
2575
|
+
|
|
2576
|
+
LD (BC), A ; key off - all channel ' 7 |
|
|
2577
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 29 (254+4)
|
|
2578
|
+
|
|
2579
|
+
sampleOutputSafe ; *** sample output **** ' 46 | (46+4)
|
|
2580
|
+
|
|
2581
|
+
waitYMReadyFast ; wait YM to be ready ' 22 |
|
|
2582
|
+
LD (HL), $28 ; set reg num to YM ' 10 |
|
|
2583
|
+
LD A, $02 ; A = $02 ' 7 | 61 (111)
|
|
2584
|
+
waitYMReadyFast ; wait YM to be ready ' 22 |
|
|
2585
|
+
|
|
2586
|
+
LD (BC), A ; key off - all channel ' 7 |
|
|
2587
|
+
ADD $2 ; A = $04 ' 7 | 36 (147)
|
|
2588
|
+
waitYMReadyFast ; wait YM to be ready ' 22 |
|
|
2589
|
+
|
|
2590
|
+
LD (BC), A ; key off - all channel ' 7 |
|
|
2591
|
+
INC A ; A = $05 ' 4 | 33 (180)
|
|
2592
|
+
waitYMReadyFast ; wait YM to be ready ' 22 |
|
|
2593
|
+
|
|
2594
|
+
LD (BC), A ; key off - all channel ' 7 |
|
|
2595
|
+
INC A ; A = $06 ' 4 | 33 (213)
|
|
2596
|
+
waitYMReadyFast ; wait YM to be ready ' 22 |
|
|
2597
|
+
|
|
2598
|
+
LD (BC), A ; key off - all channel ' 7 |
|
|
2599
|
+
waitYMReadyFast ; wait YM to be ready ' 22 | 39 (252)
|
|
2600
|
+
LD (HL), $2A ; restore DAC write ' 10 |
|
|
2601
|
+
|
|
2602
|
+
LD HL, COMMAND ; restore HL ' 10 |
|
|
2603
|
+
JP external_com_pcm ; continue ' 10 | 20 (254+18)
|
|
2604
|
+
; +18 cycles here, ignore
|
|
2605
|
+
|
|
2606
|
+
.chk_pcm0_pre ; ' 225
|
|
2607
|
+
LD HL, COMMAND ; restore HL ' 10 |
|
|
2608
|
+
wait19 ; sync ' 19 | 29 (254)
|
|
2609
|
+
|
|
2610
|
+
; $BD+X+Y+Z
|
|
2611
|
+
external_com_pcm
|
|
2612
|
+
sampleOutput ; *** sample output **** ' 36 | (36)
|
|
2613
|
+
|
|
2614
|
+
.chk_pcm0
|
|
2615
|
+
BIT CH0_SFT, (HL) ; play PCM0 command ? ' 12 |
|
|
2616
|
+
JP Z, .chk_pcm1 ; ' 10 | 22 (58)
|
|
2617
|
+
|
|
2618
|
+
RES CH0_SFT, (HL) ; clear command ' 15 | (73)
|
|
2619
|
+
|
|
2620
|
+
handlePCMCommand 0 ; handle play PCM command ' 157 | 167 (240)
|
|
2621
|
+
LD HL, COMMAND ; restore HL ' 10 |
|
|
2622
|
+
|
|
2623
|
+
wait14 ; sync ' 14 | (254)
|
|
2624
|
+
|
|
2625
|
+
sampleOutput ; *** sample output **** ' 36 | (36)
|
|
2626
|
+
|
|
2627
|
+
wait22 ; sync ' 22 | (58)
|
|
2628
|
+
|
|
2629
|
+
.chk_pcm1
|
|
2630
|
+
BIT CH1_SFT, (HL) ; play PCM1 command ? ' 12 |
|
|
2631
|
+
JP Z, .chk_pcm2 ; ' 10 | 22 (80)
|
|
2632
|
+
|
|
2633
|
+
RES CH1_SFT, (HL) ; clear command ' 15 | (95)
|
|
2634
|
+
|
|
2635
|
+
handlePCMCommand 1 ; handle play PCM command ' 157 | (254-2)
|
|
2636
|
+
|
|
2637
|
+
sampleOutput ; *** sample output **** ' 36 | (36-2)
|
|
2638
|
+
|
|
2639
|
+
wait36 ; sync ' 36 | 46 (80)
|
|
2640
|
+
LD HL, COMMAND ; restore HL ' 10 |
|
|
2641
|
+
|
|
2642
|
+
.chk_pcm2
|
|
2643
|
+
BIT CH2_SFT, (HL) ; play PCM2 command ? ' 12 |
|
|
2644
|
+
JP Z, .chk_pcm3 ; ' 10 | 22 (102)
|
|
2645
|
+
|
|
2646
|
+
RES CH2_SFT, (HL) ; clear command ' 15 | (117)
|
|
2647
|
+
|
|
2648
|
+
handlePCMCommand 2 ; handle play PCM command ' 157 | (254+20)
|
|
2649
|
+
|
|
2650
|
+
sampleOutput ; *** sample output **** ' 36 | (36+20)
|
|
2651
|
+
|
|
2652
|
+
wait36 ; sync ' 36 | 46 (102)
|
|
2653
|
+
LD HL, COMMAND ; restore HL ' 10 |
|
|
2654
|
+
|
|
2655
|
+
.chk_pcm3
|
|
2656
|
+
BIT CH3_SFT, (HL) ; play PCM3 command ? ' 12 |
|
|
2657
|
+
JP Z, ext_com_done ; ' 10 | 22 (124)
|
|
2658
|
+
|
|
2659
|
+
RES CH3_SFT, (HL) ; clear command ' 15 | (139)
|
|
2660
|
+
|
|
2661
|
+
handlePCMCommand 3 ; handle play PCM command ' 157 | (254+42)
|
|
2662
|
+
|
|
2663
|
+
sampleOutput ; *** sample output **** ' 36 | (36+42)
|
|
2664
|
+
|
|
2665
|
+
wait46 ; sync ' 46 | (124)
|
|
2666
|
+
|
|
2667
|
+
; $BD+X+Y+Z
|
|
2668
|
+
ext_com_done ; ' 124
|
|
2669
|
+
LD BC, STATUS ; BC point on STATUS ' 10 |
|
|
2670
|
+
LD A, (BC) ; A = STATUS ' 7 | 24 (148)
|
|
2671
|
+
AND $F0 ; clear PCM play status ' 7 |
|
|
2672
|
+
|
|
2673
|
+
LD HL, (ID_TABLE+0) ; HL = null PCM addr ' 16 |
|
|
2674
|
+
LD DE, (PCM_ADDR+(0*8)) ; DE = PCM ch0 addr ' 20 |
|
|
2675
|
+
SBC HL, DE ; HL == DE ? ' 15 | 63 (211)
|
|
2676
|
+
JR Z, .ch0_silent ; ch0 is not playing ' 12 |
|
|
2677
|
+
|
|
2678
|
+
OR A, $01 ; set play status for ch0 ' +2
|
|
2679
|
+
|
|
2680
|
+
.ch0_silent
|
|
2681
|
+
EX AF, AF' ; preserve AF ' 4 |
|
|
2682
|
+
wait35 ; sync ' 35 | 39 (254-4)
|
|
2683
|
+
|
|
2684
|
+
; $BE+X+Y+Z
|
|
2685
|
+
sampleOutput ; sample output ' 36-4 | (36)
|
|
2686
|
+
EX AF, AF' ; restore AF ' 4 |
|
|
2687
|
+
|
|
2688
|
+
LD HL, (ID_TABLE+0) ; HL = null PCM addr ' 16 |
|
|
2689
|
+
LD DE, (PCM_ADDR+(1*8)) ; DE = PCM ch1 addr ' 20 |
|
|
2690
|
+
SBC HL, DE ; HL == DE ? ' 15 | 63 (99)
|
|
2691
|
+
JR Z, .ch1_silent ; ch1 is not playing ' 12 |
|
|
2692
|
+
|
|
2693
|
+
OR A, $02 ; set play status for ch1 ' +2
|
|
2694
|
+
|
|
2695
|
+
.ch1_silent
|
|
2696
|
+
LD HL, (ID_TABLE+0) ; HL = null PCM addr ' 16 |
|
|
2697
|
+
LD DE, (PCM_ADDR+(2*8)) ; DE = PCM ch2 addr ' 20 |
|
|
2698
|
+
SBC HL, DE ; HL == DE ? ' 15 | 63 (162)
|
|
2699
|
+
JR Z, .ch2_silent ; ch2 is not playing ' 12 |
|
|
2700
|
+
|
|
2701
|
+
OR A, $04 ; set play status for ch2 ' +2
|
|
2702
|
+
|
|
2703
|
+
.ch2_silent
|
|
2704
|
+
LD HL, (ID_TABLE+0) ; HL = null PCM addr ' 16 |
|
|
2705
|
+
LD DE, (PCM_ADDR+(3*8)) ; DE = PCM ch3 addr ' 20 |
|
|
2706
|
+
SBC HL, DE ; HL == DE ? ' 15 | 63 (225)
|
|
2707
|
+
JR Z, .ch3_silent ; ch3 is not playing ' 12 |
|
|
2708
|
+
|
|
2709
|
+
OR A, $08 ; set play status for ch3 ' +2
|
|
2710
|
+
|
|
2711
|
+
.ch3_silent
|
|
2712
|
+
LD (BC), A ; set new status ' 7 | (229)
|
|
2713
|
+
|
|
2714
|
+
LD A, (PROTECT_ARG) ; get BUS protect state ' 13 |
|
|
2715
|
+
OR A ; no protecting ? ' 4 | 27 (254+2)
|
|
2716
|
+
JP Z, main_loop ; process next frame ' 10 |
|
|
2717
|
+
; +2 cycles here, ignore...
|
|
2718
|
+
|
|
2719
|
+
; frame done
|
|
2720
|
+
;
|
|
2721
|
+
; 1 frame of PCM sample (256 bytes) is ~287 lines.
|
|
2722
|
+
;
|
|
2723
|
+
; NTSC: we should be <= 0xE8 to respect frame time here and we need to update PCM buffer 0.9 time per frame
|
|
2724
|
+
; so we have a free PCM mix frame from time to time.
|
|
2725
|
+
; Median (X+Y+Z) should be < 0x2A (< 42) plus some lines from the free PCM mix
|
|
2726
|
+
;
|
|
2727
|
+
; PAL: we should be <= 0118 to respect frame time here but we need to update PCM buffer 1.1 time per frame
|
|
2728
|
+
; so we have a penalty PCM mix frame from time to time.
|
|
2729
|
+
; Median (X+Y+Z) should be < 0x5A (< 90) minus some lines for the extra PCM mix
|
|
2730
|
+
; -------------------------------------------------------------------------------------
|
|
2731
|
+
|
|
2732
|
+
|
|
2733
|
+
; LD A, (VCOUNTER)
|
|
2734
|
+
; LD (DEBUG_A), A
|
|
2735
|
+
|
|
2736
|
+
; BUS protection wait (to avoid BUS contention with DMA)
|
|
2737
|
+
;
|
|
2738
|
+
; $BF+X+Y+Z
|
|
2739
|
+
|
|
2740
|
+
bus_protect_wait
|
|
2741
|
+
sampleOutput ; *** sample output *** ' 36 | (36)
|
|
2742
|
+
|
|
2743
|
+
wait105 ; sync ' 105 | (141)
|
|
2744
|
+
|
|
2745
|
+
LD A, (PROTECT_ARG) ; get BUS protect state ' 13 |
|
|
2746
|
+
OR A ; no more protecting ? ' 4 | 27 (168)
|
|
2747
|
+
JP Z, .continue ; continue ' 10 |
|
|
2748
|
+
|
|
2749
|
+
LD HL, (IDLE_LOOP) ; ' 16 |
|
|
2750
|
+
INC HL ; increment idle loop ' 6 | 38 (206)
|
|
2751
|
+
LD (IDLE_LOOP), HL ; ' 16 |
|
|
2752
|
+
|
|
2753
|
+
LD HL, (WAIT_LOOP) ; ' 16 |
|
|
2754
|
+
INC HL ; increment wait loop ' 6 | 38 (244)
|
|
2755
|
+
LD (WAIT_LOOP), HL ; ' 16 |
|
|
2756
|
+
|
|
2757
|
+
JP bus_protect_wait ; wait until bus is ok ' 10 | (254)
|
|
2758
|
+
|
|
2759
|
+
.continue ; ' 168
|
|
2760
|
+
|
|
2761
|
+
; LD A, (VCOUNTER)
|
|
2762
|
+
; LD (DEBUG_B), A
|
|
2763
|
+
|
|
2764
|
+
wait76 ; sync ' 76 |
|
|
2765
|
+
JP main_loop ; process next frame ' 10 | 86 (254)
|
|
2766
|
+
|
|
2767
|
+
|
|
2768
|
+
|
|
2769
|
+
; ############################## functions ################################
|
|
2770
|
+
|
|
2771
|
+
INCLUDE "z80_fct.i80" ; basic functions
|
|
2772
|
+
|
|
2773
|
+
|
|
2774
|
+
; loadState
|
|
2775
|
+
; ---------
|
|
2776
|
+
; ? -> HL -> ?
|
|
2777
|
+
; ? -> BC -> ?
|
|
2778
|
+
; reg source -> DE -> ?
|
|
2779
|
+
;
|
|
2780
|
+
; load the YM and PSG state
|
|
2781
|
+
; = 8 samples + 140 cycles
|
|
2782
|
+
|
|
2783
|
+
loadState
|
|
2784
|
+
|
|
2785
|
+
sampleOutput ; *** sample output **** ' 36 | (36)
|
|
2786
|
+
|
|
2787
|
+
LD HL, YMPORT0 ; HL point on YM port0 ' 10 |
|
|
2788
|
+
LD BC, YMPORT1 ; BC point on YM port1 ' 10 | 20 (56)
|
|
2789
|
+
|
|
2790
|
+
CALL loadYMState ; load YM state ' 188+ | (244)
|
|
2791
|
+
|
|
2792
|
+
LD HL, YMPORT2 ; HL point on YM port2 ' 10 |
|
|
2793
|
+
LD BC, YMPORT3 ; BC point on YM port3 ' 10 | 20 (254+10)
|
|
2794
|
+
|
|
2795
|
+
sampleOutputSafe ; *** sample output **** ' 46 | (46+10)
|
|
2796
|
+
|
|
2797
|
+
CALL loadYMState ; load YM state ' 188+ | (244)
|
|
2798
|
+
|
|
2799
|
+
LD HL, PSGPORT ; HL point on PSG ' 10 | (254)
|
|
2800
|
+
|
|
2801
|
+
sampleOutputSafe ; *** sample output **** ' 46 | (46+10)
|
|
2802
|
+
|
|
2803
|
+
JP loadPSGState ; load PSG state ' 10+94 | (140)
|
|
2804
|
+
|
|
2805
|
+
|
|
2806
|
+
; loadYMState
|
|
2807
|
+
; -----------
|
|
2808
|
+
; YMPORT0/2 -> HL
|
|
2809
|
+
; YMPORT1/3 -> BC
|
|
2810
|
+
; reg source -> DE -> ?
|
|
2811
|
+
;
|
|
2812
|
+
; load the YM RR state
|
|
2813
|
+
; = 4 samples (244 cycles)
|
|
2814
|
+
|
|
2815
|
+
loadYMState ; ' 56
|
|
2816
|
+
|
|
2817
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
2818
|
+
LD (HL), $80 ; set reg num to YM ' 10 |
|
|
2819
|
+
LD A, (DE) ; get saved value ' 7 |
|
|
2820
|
+
INC E ; next ' 4 | 62 (118)
|
|
2821
|
+
wait4 ; wait YM to be ready ' 4 |
|
|
2822
|
+
LD (BC), A ; restore state ' 7 |
|
|
2823
|
+
|
|
2824
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
2825
|
+
LD (HL), $81 ; set reg num to YM ' 10 |
|
|
2826
|
+
LD A, (DE) ; get saved value ' 7 | 62 (180)
|
|
2827
|
+
INC E ; next ' 4 |
|
|
2828
|
+
wait4 ; wait YM to be ready ' 4 |
|
|
2829
|
+
LD (BC), A ; restore state ' 7 |
|
|
2830
|
+
|
|
2831
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
2832
|
+
LD (HL), $82 ; set reg num to YM ' 10 |
|
|
2833
|
+
LD A, (DE) ; get saved value ' 7 | 62 (242)
|
|
2834
|
+
INC E ; next ' 4 |
|
|
2835
|
+
wait4 ; wait YM to be ready ' 4 |
|
|
2836
|
+
LD (BC), A ; restore state ' 7 |
|
|
2837
|
+
|
|
2838
|
+
EXX ; ' 4 | (246)
|
|
2839
|
+
|
|
2840
|
+
.wait1
|
|
2841
|
+
BIT 7, (HL) ; test YM ready bit ' 12 |
|
|
2842
|
+
JP NZ, .wait1 ; wait while busy ' 10 | 22 (254+14)
|
|
2843
|
+
|
|
2844
|
+
LD (HL), $2A ; ' 10 |
|
|
2845
|
+
LD A, (BC) ; ' 7 |
|
|
2846
|
+
INC BC ; *** sample output **** ' 6 | 38 (52)
|
|
2847
|
+
RES 2, B ; ' 8 |
|
|
2848
|
+
LD (DE), A ; ' 7 |
|
|
2849
|
+
|
|
2850
|
+
.wait2
|
|
2851
|
+
BIT 7, (HL) ; test YM ready bit ' 12 |
|
|
2852
|
+
JP NZ, .wait2 ; wait while busy ' 10 | 22 (74)
|
|
2853
|
+
|
|
2854
|
+
EXX ; ' 4 | (78)
|
|
2855
|
+
|
|
2856
|
+
LD (HL), $84 ; set reg num to YM ' 10 |
|
|
2857
|
+
LD A, (DE) ; get saved value ' 7 |
|
|
2858
|
+
INC E ; next ' 4 | 32 (110)
|
|
2859
|
+
wait4 ; wait YM to be ready ' 4 |
|
|
2860
|
+
LD (BC), A ; restore state ' 7 |
|
|
2861
|
+
|
|
2862
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
2863
|
+
LD (HL), $85 ; set reg num to YM ' 10 |
|
|
2864
|
+
LD A, (DE) ; get saved value ' 7 | 62 (172)
|
|
2865
|
+
INC E ; next ' 4 |
|
|
2866
|
+
wait4 ; wait YM to be ready ' 4 |
|
|
2867
|
+
LD (BC), A ; restore state ' 7 |
|
|
2868
|
+
|
|
2869
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
2870
|
+
LD (HL), $86 ; set reg num to YM ' 10 |
|
|
2871
|
+
LD A, (DE) ; get saved value ' 7 | 62 (234)
|
|
2872
|
+
INC E ; next ' 4 |
|
|
2873
|
+
wait4 ; wait YM to be ready ' 4 |
|
|
2874
|
+
LD (BC), A ; restore state ' 7 |
|
|
2875
|
+
|
|
2876
|
+
EXX ; ' 4 | (238)
|
|
2877
|
+
|
|
2878
|
+
.wait3
|
|
2879
|
+
BIT 7, (HL) ; test YM ready bit ' 12 |
|
|
2880
|
+
JP NZ, .wait3 ; wait while busy ' 10 | 22 (254+6)
|
|
2881
|
+
|
|
2882
|
+
LD (HL), $2A ; ' 10 |
|
|
2883
|
+
LD A, (BC) ; ' 7 |
|
|
2884
|
+
INC BC ; *** sample output **** ' 6 | 38 (44)
|
|
2885
|
+
RES 2, B ; ' 8 |
|
|
2886
|
+
LD (DE), A ; ' 7 |
|
|
2887
|
+
|
|
2888
|
+
.wait4
|
|
2889
|
+
BIT 7, (HL) ; test YM ready bit ' 12 |
|
|
2890
|
+
JP NZ, .wait4 ; wait while busy ' 10 | 22 (66)
|
|
2891
|
+
|
|
2892
|
+
EXX ; ' 4 | (78)
|
|
2893
|
+
wait8 ; sync ' 8 |
|
|
2894
|
+
|
|
2895
|
+
LD (HL), $88 ; set reg num to YM ' 10 |
|
|
2896
|
+
LD A, (DE) ; get saved value ' 7 |
|
|
2897
|
+
INC E ; next ' 4 | 32 (110)
|
|
2898
|
+
wait4 ; wait YM to be ready ' 4 |
|
|
2899
|
+
LD (BC), A ; restore state ' 7 |
|
|
2900
|
+
|
|
2901
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
2902
|
+
LD (HL), $89 ; set reg num to YM ' 10 |
|
|
2903
|
+
LD A, (DE) ; get saved value ' 7 | 62 (172)
|
|
2904
|
+
INC E ; next ' 4 |
|
|
2905
|
+
wait4 ; wait YM to be ready ' 4 |
|
|
2906
|
+
LD (BC), A ; restore state ' 7 |
|
|
2907
|
+
|
|
2908
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
2909
|
+
LD (HL), $8A ; set reg num to YM ' 10 |
|
|
2910
|
+
LD A, (DE) ; get saved value ' 7 | 62 (234)
|
|
2911
|
+
INC E ; next ' 4 |
|
|
2912
|
+
wait4 ; wait YM to be ready ' 4 |
|
|
2913
|
+
LD (BC), A ; restore state ' 7 |
|
|
2914
|
+
|
|
2915
|
+
EXX ; ' 4 | (238)
|
|
2916
|
+
|
|
2917
|
+
.wait5
|
|
2918
|
+
BIT 7, (HL) ; test YM ready bit ' 12 |
|
|
2919
|
+
JP NZ, .wait5 ; wait while busy ' 10 | 22 (254+6)
|
|
2920
|
+
|
|
2921
|
+
LD (HL), $2A ; ' 10 |
|
|
2922
|
+
LD A, (BC) ; ' 7 |
|
|
2923
|
+
INC BC ; *** sample output **** ' 6 | 38 (44)
|
|
2924
|
+
RES 2, B ; ' 8 |
|
|
2925
|
+
LD (DE), A ; ' 7 |
|
|
2926
|
+
|
|
2927
|
+
.wait6
|
|
2928
|
+
BIT 7, (HL) ; test YM ready bit ' 12 |
|
|
2929
|
+
JP NZ, .wait6 ; wait while busy ' 10 | 22 (66)
|
|
2930
|
+
|
|
2931
|
+
EXX ; ' 4 | (78)
|
|
2932
|
+
wait8 ; sync ' 8 |
|
|
2933
|
+
|
|
2934
|
+
LD (HL), $8C ; set reg num to YM ' 10 |
|
|
2935
|
+
LD A, (DE) ; get saved value ' 7 |
|
|
2936
|
+
INC E ; next ' 4 | 32 (110)
|
|
2937
|
+
wait4 ; wait YM to be ready ' 4 |
|
|
2938
|
+
LD (BC), A ; restore state ' 7 |
|
|
2939
|
+
|
|
2940
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
2941
|
+
LD (HL), $8D ; set reg num to YM ' 10 |
|
|
2942
|
+
LD A, (DE) ; get saved value ' 7 | 62 (172)
|
|
2943
|
+
INC E ; next ' 4 |
|
|
2944
|
+
wait4 ; wait YM to be ready ' 4 |
|
|
2945
|
+
LD (BC), A ; restore state ' 7 |
|
|
2946
|
+
|
|
2947
|
+
waitYMReady ; wait YM to be ready ' 30 |
|
|
2948
|
+
LD (HL), $8E ; set reg num to YM ' 10 |
|
|
2949
|
+
LD A, (DE) ; get saved value ' 7 | 62 (234)
|
|
2950
|
+
INC E ; next ' 4 |
|
|
2951
|
+
wait4 ; wait YM to be ready ' 4 |
|
|
2952
|
+
LD (BC), A ; restore state ' 7 |
|
|
2953
|
+
|
|
2954
|
+
RET ; done ' 10 | (244)
|
|
2955
|
+
|
|
2956
|
+
|
|
2957
|
+
; loadPSGState
|
|
2958
|
+
; ------------
|
|
2959
|
+
; PSGPORT -> HL
|
|
2960
|
+
; reg source -> DE -> ?
|
|
2961
|
+
;
|
|
2962
|
+
; load the PSG env state
|
|
2963
|
+
; 94 cycles
|
|
2964
|
+
|
|
2965
|
+
loadPSGState
|
|
2966
|
+
|
|
2967
|
+
LD A, (DE) ; get saved value ' 7 |
|
|
2968
|
+
INC E ; next ' 4 | (21)
|
|
2969
|
+
LD (HL), A ; PSG restore channel 0 env ' 10 |
|
|
2970
|
+
|
|
2971
|
+
LD A, (DE) ; get saved value ' 7 |
|
|
2972
|
+
INC E ; next ' 4 | 21 (42)
|
|
2973
|
+
LD (HL), A ; PSG restore channel 1 env ' 10 |
|
|
2974
|
+
|
|
2975
|
+
LD A, (DE) ; get saved value ' 7 |
|
|
2976
|
+
INC E ; next ' 4 | 21 (63)
|
|
2977
|
+
LD (HL), A ; PSG restore channel 2 env ' 10 |
|
|
2978
|
+
|
|
2979
|
+
LD A, (DE) ; get saved value ' 7 |
|
|
2980
|
+
INC E ; next ' 4 | 21 (84)
|
|
2981
|
+
LD (HL), A ; PSG restore channel 3 env ' 10 |
|
|
2982
|
+
|
|
2983
|
+
RET ; done ' 10 | (94)
|
|
2984
|
+
|
|
2985
|
+
|
|
2986
|
+
; ############################## jump table ################################
|
|
2987
|
+
|
|
2988
|
+
BLOCK $1600-$
|
|
2989
|
+
|
|
2990
|
+
DW com_next_frame ; 00
|
|
2991
|
+
|
|
2992
|
+
DW com_null, com_null, com_null ; 01-03
|
|
2993
|
+
DW com_null, com_null, com_null, com_null ; 04-07
|
|
2994
|
+
DW com_null, com_null, com_null, com_null ; 08-0B
|
|
2995
|
+
DW com_null, com_null, com_null, com_null ; 0C-0F
|
|
2996
|
+
|
|
2997
|
+
DW com_psg_tone_w0, com_psg_tone_w1, com_psg_tone_w2, com_psg_tone_w3 ; 10-13
|
|
2998
|
+
DW com_psg_tone_w4, com_psg_tone_w5, com_psg_tone_w6, com_psg_tone_w7 ; 14-17
|
|
2999
|
+
DW com_psg_env_w0, com_psg_env_w1, com_psg_env_w2, com_psg_env_w3 ; 18-1B
|
|
3000
|
+
DW com_null, com_null, com_null, com_null ; 1C-1F
|
|
3001
|
+
|
|
3002
|
+
DW com_ym_port0_w0, com_ym_port0_w1, com_ym_port0_w2, com_ym_port0_w3 ; 20-23
|
|
3003
|
+
DW com_ym_port0_w4, com_ym_port0_w5, com_ym_port0_w6, com_ym_port0_w7 ; 24-27
|
|
3004
|
+
DW com_ym_port0_w8, com_ym_port0_w9, com_ym_port0_wA, com_ym_port0_wB ; 28-2B
|
|
3005
|
+
DW com_ym_port0_wC, com_ym_port0_wD, com_ym_port0_wE, com_ym_port0_wF ; 2C-2F
|
|
3006
|
+
|
|
3007
|
+
DW com_ym_port2_w0, com_ym_port2_w1, com_ym_port2_w2, com_ym_port2_w3 ; 30-33
|
|
3008
|
+
DW com_ym_port2_w4, com_ym_port2_w5, com_ym_port2_w6, com_ym_port2_w7 ; 34-37
|
|
3009
|
+
DW com_ym_port2_w8, com_ym_port2_w9, com_ym_port2_wA, com_ym_port2_wB ; 38-3B
|
|
3010
|
+
DW com_ym_port2_wC, com_ym_port2_wD, com_ym_port2_wE, com_ym_port2_wF ; 3C-3F
|
|
3011
|
+
|
|
3012
|
+
DW com_ym_key_w0, com_ym_key_w1, com_ym_key_w2, com_ym_key_w3 ; 40-43
|
|
3013
|
+
DW com_ym_key_w4, com_ym_key_w5, com_null, com_null ; 44-47
|
|
3014
|
+
DW com_null, com_null, com_null, com_null ; 48-4B
|
|
3015
|
+
DW com_null, com_null, com_null, com_null ; 4C-4F
|
|
3016
|
+
|
|
3017
|
+
DW com_pcm_p0_ch0, com_pcm_p0_ch1, com_pcm_p0_ch2, com_pcm_p0_ch3 ; 50-53
|
|
3018
|
+
DW com_pcm_p1_ch0, com_pcm_p1_ch1, com_pcm_p1_ch2, com_pcm_p1_ch3 ; 54-57
|
|
3019
|
+
DW com_pcm_p2_ch0, com_pcm_p2_ch1, com_pcm_p2_ch2, com_pcm_p2_ch3 ; 58-5B
|
|
3020
|
+
DW com_pcm_p3_ch0, com_pcm_p3_ch1, com_pcm_p3_ch2, com_pcm_p3_ch3 ; 5C-5F
|
|
3021
|
+
|
|
3022
|
+
DW com_state_w0, com_state_w1, com_state_w2, com_state_w3 ; 60-63
|
|
3023
|
+
DW com_state_w4, com_state_w5, com_state_w6, com_state_w7 ; 64-67
|
|
3024
|
+
DW com_state_w8, com_state_w9, com_state_wA, com_state_wB ; 68-6B
|
|
3025
|
+
DW com_state_wC, com_state_wD, com_state_wE, com_state_wF ; 6C-6F
|
|
3026
|
+
|
|
3027
|
+
DW com_null, com_null, com_null, com_null ; 70-74
|
|
3028
|
+
DW com_null, com_null, com_null, com_null ; 74-77
|
|
3029
|
+
DW com_null, com_null, com_null, com_null ; 78-7B
|
|
3030
|
+
DW com_null ; 7C
|
|
3031
|
+
|
|
3032
|
+
DW com_extra_frm ; 7D
|
|
3033
|
+
DW com_loop ; 7E
|
|
3034
|
+
DW com_end ; 7F
|
|
3035
|
+
|
|
3036
|
+
|
|
3037
|
+
END
|