c64-kb 0.17.0
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/CHANGELOG.md +2082 -0
- package/LICENSE +29 -0
- package/README.md +559 -0
- package/VERSION +25 -0
- package/dist/cli/setup.js +66 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli-memorize-audit.js +97 -0
- package/dist/cli-memorize-audit.js.map +1 -0
- package/dist/cli.js +335 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.js +83 -0
- package/dist/config.js.map +1 -0
- package/dist/context.js +53 -0
- package/dist/context.js.map +1 -0
- package/dist/domain/budget-notes.js +104 -0
- package/dist/domain/budget-notes.js.map +1 -0
- package/dist/domain/budget.js +417 -0
- package/dist/domain/budget.js.map +1 -0
- package/dist/domain/game-design.js +77 -0
- package/dist/domain/game-design.js.map +1 -0
- package/dist/domain/timing.js +39 -0
- package/dist/domain/timing.js.map +1 -0
- package/dist/graph/apply.js +132 -0
- package/dist/graph/apply.js.map +1 -0
- package/dist/graph/claims.js +231 -0
- package/dist/graph/claims.js.map +1 -0
- package/dist/graph/extract/archetype.js +118 -0
- package/dist/graph/extract/archetype.js.map +1 -0
- package/dist/graph/extract/common.js +69 -0
- package/dist/graph/extract/common.js.map +1 -0
- package/dist/graph/extract/failure.js +37 -0
- package/dist/graph/extract/failure.js.map +1 -0
- package/dist/graph/extract/game-design.js +189 -0
- package/dist/graph/extract/game-design.js.map +1 -0
- package/dist/graph/extract/hardware.js +124 -0
- package/dist/graph/extract/hardware.js.map +1 -0
- package/dist/graph/extract/pitfall.js +62 -0
- package/dist/graph/extract/pitfall.js.map +1 -0
- package/dist/graph/extract/raster-band.js +56 -0
- package/dist/graph/extract/raster-band.js.map +1 -0
- package/dist/graph/extract/recipe.js +71 -0
- package/dist/graph/extract/recipe.js.map +1 -0
- package/dist/graph/extract/technique-entities.js +180 -0
- package/dist/graph/extract/technique-entities.js.map +1 -0
- package/dist/graph/extract/technique.js +179 -0
- package/dist/graph/extract/technique.js.map +1 -0
- package/dist/graph/extract/toolchain.js +67 -0
- package/dist/graph/extract/toolchain.js.map +1 -0
- package/dist/graph/extract/types.js +3 -0
- package/dist/graph/extract/types.js.map +1 -0
- package/dist/graph/extract/vocabulary.js +65 -0
- package/dist/graph/extract/vocabulary.js.map +1 -0
- package/dist/graph/extract.js +43 -0
- package/dist/graph/extract.js.map +1 -0
- package/dist/graph/kernal-clobbers.js +64 -0
- package/dist/graph/kernal-clobbers.js.map +1 -0
- package/dist/graph/machine-variants.js +208 -0
- package/dist/graph/machine-variants.js.map +1 -0
- package/dist/ingest/files.js +99 -0
- package/dist/ingest/files.js.map +1 -0
- package/dist/ingest/passes.js +104 -0
- package/dist/ingest/passes.js.map +1 -0
- package/dist/ingest/points.js +50 -0
- package/dist/ingest/points.js.map +1 -0
- package/dist/ingest/report.js +140 -0
- package/dist/ingest/report.js.map +1 -0
- package/dist/ingest/tally.js +81 -0
- package/dist/ingest/tally.js.map +1 -0
- package/dist/ingest/verified-on.js +43 -0
- package/dist/ingest/verified-on.js.map +1 -0
- package/dist/ingest.js +135 -0
- package/dist/ingest.js.map +1 -0
- package/dist/schemas/cost-basis.js +5 -0
- package/dist/schemas/cost-basis.js.map +1 -0
- package/dist/schemas/machine-variant.js +25 -0
- package/dist/schemas/machine-variant.js.map +1 -0
- package/dist/schemas/plan-budget.js +121 -0
- package/dist/schemas/plan-budget.js.map +1 -0
- package/dist/schemas/tool-outputs.js +526 -0
- package/dist/schemas/tool-outputs.js.map +1 -0
- package/dist/server/define-tool.js +52 -0
- package/dist/server/define-tool.js.map +1 -0
- package/dist/server/defined-only.js +9 -0
- package/dist/server/defined-only.js.map +1 -0
- package/dist/server/tools-briefings.js +70 -0
- package/dist/server/tools-briefings.js.map +1 -0
- package/dist/server/tools-lookup.js +180 -0
- package/dist/server/tools-lookup.js.map +1 -0
- package/dist/server/tools-maintenance.js +116 -0
- package/dist/server/tools-maintenance.js.map +1 -0
- package/dist/server/tools-pitfalls.js +89 -0
- package/dist/server/tools-pitfalls.js.map +1 -0
- package/dist/server/tools-recipes.js +296 -0
- package/dist/server/tools-recipes.js.map +1 -0
- package/dist/server/tools-runtime.js +48 -0
- package/dist/server/tools-runtime.js.map +1 -0
- package/dist/server/tools.js +43 -0
- package/dist/server/tools.js.map +1 -0
- package/dist/server.js +95 -0
- package/dist/server.js.map +1 -0
- package/dist/services/analytics/schema.js +78 -0
- package/dist/services/analytics/schema.js.map +1 -0
- package/dist/services/analytics/statements.js +99 -0
- package/dist/services/analytics/statements.js.map +1 -0
- package/dist/services/analytics.js +195 -0
- package/dist/services/analytics.js.map +1 -0
- package/dist/services/bm25.js +158 -0
- package/dist/services/bm25.js.map +1 -0
- package/dist/services/chunker.js +81 -0
- package/dist/services/chunker.js.map +1 -0
- package/dist/services/embeddings.js +58 -0
- package/dist/services/embeddings.js.map +1 -0
- package/dist/services/falkor/base.js +85 -0
- package/dist/services/falkor/base.js.map +1 -0
- package/dist/services/falkor/links.js +361 -0
- package/dist/services/falkor/links.js.map +1 -0
- package/dist/services/falkor/nodes.js +183 -0
- package/dist/services/falkor/nodes.js.map +1 -0
- package/dist/services/falkor/params.js +45 -0
- package/dist/services/falkor/params.js.map +1 -0
- package/dist/services/falkor/schema.js +77 -0
- package/dist/services/falkor/schema.js.map +1 -0
- package/dist/services/falkor.js +100 -0
- package/dist/services/falkor.js.map +1 -0
- package/dist/services/qdrant.js +238 -0
- package/dist/services/qdrant.js.map +1 -0
- package/dist/services/versions.js +73 -0
- package/dist/services/versions.js.map +1 -0
- package/dist/services/vice-bin.js +51 -0
- package/dist/services/vice-bin.js.map +1 -0
- package/dist/tools/briefings/archetype.js +174 -0
- package/dist/tools/briefings/archetype.js.map +1 -0
- package/dist/tools/briefings/budget.js +177 -0
- package/dist/tools/briefings/budget.js.map +1 -0
- package/dist/tools/briefings/build-order.js +135 -0
- package/dist/tools/briefings/build-order.js.map +1 -0
- package/dist/tools/briefings/build.js +185 -0
- package/dist/tools/briefings/build.js.map +1 -0
- package/dist/tools/briefings/discovery.js +290 -0
- package/dist/tools/briefings/discovery.js.map +1 -0
- package/dist/tools/briefings/plan-pitfalls.js +69 -0
- package/dist/tools/briefings/plan-pitfalls.js.map +1 -0
- package/dist/tools/briefings/render.js +151 -0
- package/dist/tools/briefings/render.js.map +1 -0
- package/dist/tools/briefings/rows.js +41 -0
- package/dist/tools/briefings/rows.js.map +1 -0
- package/dist/tools/briefings/toolchain.js +63 -0
- package/dist/tools/briefings/toolchain.js.map +1 -0
- package/dist/tools/briefings/why-proposed.js +69 -0
- package/dist/tools/briefings/why-proposed.js.map +1 -0
- package/dist/tools/briefings.js +44 -0
- package/dist/tools/briefings.js.map +1 -0
- package/dist/tools/feedback.js +97 -0
- package/dist/tools/feedback.js.map +1 -0
- package/dist/tools/hydrate.js +75 -0
- package/dist/tools/hydrate.js.map +1 -0
- package/dist/tools/intelligence.js +67 -0
- package/dist/tools/intelligence.js.map +1 -0
- package/dist/tools/lint/asm-decimal.js +86 -0
- package/dist/tools/lint/asm-decimal.js.map +1 -0
- package/dist/tools/lint/asm-rules.js +221 -0
- package/dist/tools/lint/asm-rules.js.map +1 -0
- package/dist/tools/lint/asm-shared.js +3 -0
- package/dist/tools/lint/asm-shared.js.map +1 -0
- package/dist/tools/lint/c-rules.js +215 -0
- package/dist/tools/lint/c-rules.js.map +1 -0
- package/dist/tools/lint/text.js +122 -0
- package/dist/tools/lint/text.js.map +1 -0
- package/dist/tools/lint/types.js +40 -0
- package/dist/tools/lint/types.js.map +1 -0
- package/dist/tools/lint.js +76 -0
- package/dist/tools/lint.js.map +1 -0
- package/dist/tools/memorization-mcp.js +111 -0
- package/dist/tools/memorization-mcp.js.map +1 -0
- package/dist/tools/pitfalls/bm25.js +53 -0
- package/dist/tools/pitfalls/bm25.js.map +1 -0
- package/dist/tools/pitfalls/format.js +58 -0
- package/dist/tools/pitfalls/format.js.map +1 -0
- package/dist/tools/pitfalls/graph.js +124 -0
- package/dist/tools/pitfalls/graph.js.map +1 -0
- package/dist/tools/pitfalls.js +134 -0
- package/dist/tools/pitfalls.js.map +1 -0
- package/dist/tools/prompts.js +81 -0
- package/dist/tools/prompts.js.map +1 -0
- package/dist/tools/query/compatibility/closure.js +62 -0
- package/dist/tools/query/compatibility/closure.js.map +1 -0
- package/dist/tools/query/compatibility/facts.js +28 -0
- package/dist/tools/query/compatibility/facts.js.map +1 -0
- package/dist/tools/query/compatibility/fetch.js +164 -0
- package/dist/tools/query/compatibility/fetch.js.map +1 -0
- package/dist/tools/query/compatibility/hard-rules.js +159 -0
- package/dist/tools/query/compatibility/hard-rules.js.map +1 -0
- package/dist/tools/query/compatibility/index.js +27 -0
- package/dist/tools/query/compatibility/index.js.map +1 -0
- package/dist/tools/query/compatibility/kernal-zp-rule.js +90 -0
- package/dist/tools/query/compatibility/kernal-zp-rule.js.map +1 -0
- package/dist/tools/query/compatibility/render.js +106 -0
- package/dist/tools/query/compatibility/render.js.map +1 -0
- package/dist/tools/query/compatibility/rules.js +337 -0
- package/dist/tools/query/compatibility/rules.js.map +1 -0
- package/dist/tools/query/compatibility/unit-rules.js +253 -0
- package/dist/tools/query/compatibility/unit-rules.js.map +1 -0
- package/dist/tools/query/game-design.js +83 -0
- package/dist/tools/query/game-design.js.map +1 -0
- package/dist/tools/query/lookups.js +220 -0
- package/dist/tools/query/lookups.js.map +1 -0
- package/dist/tools/query/plan-budget.js +266 -0
- package/dist/tools/query/plan-budget.js.map +1 -0
- package/dist/tools/query/recipes.js +214 -0
- package/dist/tools/query/recipes.js.map +1 -0
- package/dist/tools/query/retrieval.js +128 -0
- package/dist/tools/query/retrieval.js.map +1 -0
- package/dist/tools/query/shared.js +121 -0
- package/dist/tools/query/shared.js.map +1 -0
- package/dist/tools/query/techniques.js +331 -0
- package/dist/tools/query/techniques.js.map +1 -0
- package/dist/tools/query/timing.js +106 -0
- package/dist/tools/query/timing.js.map +1 -0
- package/dist/tools/query/types.js +11 -0
- package/dist/tools/query/types.js.map +1 -0
- package/dist/tools/query.js +21 -0
- package/dist/tools/query.js.map +1 -0
- package/dist/tools/resources.js +186 -0
- package/dist/tools/resources.js.map +1 -0
- package/dist/tools/run-game.js +249 -0
- package/dist/tools/run-game.js.map +1 -0
- package/dist/tools/selfimprovement.js +367 -0
- package/dist/tools/selfimprovement.js.map +1 -0
- package/docker-compose.yml +35 -0
- package/docs/ARCHITECTURE.md +164 -0
- package/docs/CONVENTIONS-archetypes.md +158 -0
- package/docs/CONVENTIONS-failures.md +46 -0
- package/docs/CONVENTIONS-game-designs.md +75 -0
- package/docs/CONVENTIONS-hardware-reference.md +184 -0
- package/docs/CONVENTIONS-pitfalls.md +91 -0
- package/docs/CONVENTIONS-recipes.md +106 -0
- package/docs/CONVENTIONS-techniques.md +309 -0
- package/docs/CONVENTIONS-toolchain-reference.md +89 -0
- package/docs/ONTOLOGY.md +655 -0
- package/docs/art/art-production-reference.md +157 -0
- package/docs/art/asset-pipelines.md +586 -0
- package/docs/c64-failure-patterns.md +693 -0
- package/docs/demo-design/demo-composition.md +349 -0
- package/docs/demo-design/demo-design-philosophy.md +320 -0
- package/docs/demo-design/intro-cracktro-patterns.md +435 -0
- package/docs/figures/ctm-spd-embed-probe.png +0 -0
- package/docs/figures/dot-flag-mid-5000000.png +0 -0
- package/docs/figures/dot-flag-no-erase-12000000.png +0 -0
- package/docs/figures/edges.json +1 -0
- package/docs/figures/fig6-architecture.png +0 -0
- package/docs/figures/fig7-ontology.png +0 -0
- package/docs/figures/screen-dissolve-mid-frame25.png +0 -0
- package/docs/figures/screen-dissolve-wipe-frame25.png +0 -0
- package/docs/figures/spindle-two-parts-part1.png +0 -0
- package/docs/figures/spindle-two-parts-part2.png +0 -0
- package/docs/figures/starters/action-puzzle.png +0 -0
- package/docs/figures/starters/adventure.png +0 -0
- package/docs/figures/starters/beat-em-up.png +0 -0
- package/docs/figures/starters/demo.png +0 -0
- package/docs/figures/starters/platformer.png +0 -0
- package/docs/figures/starters/shmup-vertical.png +0 -0
- package/docs/figures/tape-kernal-master-ntsc.png +0 -0
- package/docs/figures/tape-kernal-master-pal.png +0 -0
- package/docs/figures/tape-turbo-loader-ntsc.png +0 -0
- package/docs/figures/tape-turbo-loader-pal.png +0 -0
- package/docs/figures/tape-turbo-master-ntsc.png +0 -0
- package/docs/figures/tape-turbo-master-pal.png +0 -0
- package/docs/figures/tech-tech-pad2-12000000.png +0 -0
- package/docs/figures/tech-tech-pad4-12000000.png +0 -0
- package/docs/figures/tech-tech-seven-12000000.png +0 -0
- package/docs/figures/twister-mid-5000000.png +0 -0
- package/docs/figures/twister-straight-12000000.png +0 -0
- package/docs/figures/vector-balls-nosort-ntsc.png +0 -0
- package/docs/figures/vector-balls-nosort.png +0 -0
- package/docs/formats/c64-file-formats.md +1212 -0
- package/docs/formats/iec-disk-reference.md +754 -0
- package/docs/game-design/c64-game-archetypes.md +273 -0
- package/docs/game-design/designs/falling-blocks.md +54 -0
- package/docs/game-design/designs/platformer-scaffold.md +48 -0
- package/docs/game-design/designs/simple-shmup.md +27 -0
- package/docs/game-design/enemy-behaviour-and-difficulty.md +349 -0
- package/docs/game-design/game-design-patterns.md +1189 -0
- package/docs/game-design/game-structure.md +354 -0
- package/docs/game-design/production-planning.md +349 -0
- package/docs/game-design/reference-game-sources.md +90 -0
- package/docs/hardware/6502-illegal-opcodes.md +1353 -0
- package/docs/hardware/6510-cpu-reference.md +2112 -0
- package/docs/hardware/c64-memory-map.md +3184 -0
- package/docs/hardware/c64-registers-reference.md +996 -0
- package/docs/hardware/cia-reference.md +1281 -0
- package/docs/hardware/kernal-routines-reference.md +1836 -0
- package/docs/hardware/pal-ntsc-reference.md +813 -0
- package/docs/hardware/sid-reference.md +1137 -0
- package/docs/hardware/vic-ii-reference.md +1714 -0
- package/docs/music/music-production-reference.md +403 -0
- package/docs/pitfalls/banking.md +1067 -0
- package/docs/pitfalls/cia.md +1147 -0
- package/docs/pitfalls/cpu.md +874 -0
- package/docs/pitfalls/input.md +282 -0
- package/docs/pitfalls/kernal-and-io.md +1615 -0
- package/docs/pitfalls/loader.md +1191 -0
- package/docs/pitfalls/logic.md +94 -0
- package/docs/pitfalls/maths.md +187 -0
- package/docs/pitfalls/raster-and-badline.md +721 -0
- package/docs/pitfalls/region-timing.md +660 -0
- package/docs/pitfalls/scroll.md +207 -0
- package/docs/pitfalls/sid.md +738 -0
- package/docs/pitfalls/sprite.md +979 -0
- package/docs/pitfalls/text-mode-render.md +1172 -0
- package/docs/recipes/cc65/cartridge-8k.md +398 -0
- package/docs/recipes/cc65/hello-world-conio.md +76 -0
- package/docs/recipes/cc65/memory-layout.md +312 -0
- package/docs/recipes/cc65/screenshots/README.md +14 -0
- package/docs/recipes/cc65/screenshots/cartridge-8k-ntsc.png +0 -0
- package/docs/recipes/cc65/screenshots/cartridge-8k.png +0 -0
- package/docs/recipes/cc65/screenshots/hello-world-conio.png +0 -0
- package/docs/recipes/cc65/screenshots/memory-layout-ntsc.png +0 -0
- package/docs/recipes/cc65/screenshots/memory-layout.png +0 -0
- package/docs/recipes/kickassembler/basic-float-calls.md +578 -0
- package/docs/recipes/kickassembler/basic-wedge.md +398 -0
- package/docs/recipes/kickassembler/big-font-scroller.md +620 -0
- package/docs/recipes/kickassembler/charset-copy-rom-to-ram.md +623 -0
- package/docs/recipes/kickassembler/cia-revision-detect.md +366 -0
- package/docs/recipes/kickassembler/colour-cycling.md +343 -0
- package/docs/recipes/kickassembler/colour-fade.md +303 -0
- package/docs/recipes/kickassembler/compare-16bit-signed.md +1007 -0
- package/docs/recipes/kickassembler/cracktro-template.md +526 -0
- package/docs/recipes/kickassembler/crt-banked.md +276 -0
- package/docs/recipes/kickassembler/dos-error-codes.md +466 -0
- package/docs/recipes/kickassembler/dot-flag.md +576 -0
- package/docs/recipes/kickassembler/drive-job-queue.md +667 -0
- package/docs/recipes/kickassembler/drive-via-probe.md +690 -0
- package/docs/recipes/kickassembler/dycp-scroller.md +568 -0
- package/docs/recipes/kickassembler/dypp-sprite-scroller.md +681 -0
- package/docs/recipes/kickassembler/dysp.md +670 -0
- package/docs/recipes/kickassembler/easyflash-save.md +800 -0
- package/docs/recipes/kickassembler/eight-way-scroll.md +1484 -0
- package/docs/recipes/kickassembler/file-io-roundtrip.md +546 -0
- package/docs/recipes/kickassembler/fire-effect.md +420 -0
- package/docs/recipes/kickassembler/fld.md +414 -0
- package/docs/recipes/kickassembler/fli-image.md +336 -0
- package/docs/recipes/kickassembler/four-player-read.md +672 -0
- package/docs/recipes/kickassembler/headless-verify.md +228 -0
- package/docs/recipes/kickassembler/hello-world.md +98 -0
- package/docs/recipes/kickassembler/high-score-insert.md +660 -0
- package/docs/recipes/kickassembler/hires-plot-line.md +723 -0
- package/docs/recipes/kickassembler/irq-chain.md +316 -0
- package/docs/recipes/kickassembler/irq-owns-port.md +668 -0
- package/docs/recipes/kickassembler/isometric-room.md +1145 -0
- package/docs/recipes/kickassembler/light-pen-read.md +926 -0
- package/docs/recipes/kickassembler/logic-rate-decoupling.md +670 -0
- package/docs/recipes/kickassembler/mci-interlace.md +543 -0
- package/docs/recipes/kickassembler/memory-layout.md +277 -0
- package/docs/recipes/kickassembler/mouse-1351-read.md +801 -0
- package/docs/recipes/kickassembler/nmi-timer-tick.md +562 -0
- package/docs/recipes/kickassembler/own-keyscan.md +881 -0
- package/docs/recipes/kickassembler/paddle-read.md +751 -0
- package/docs/recipes/kickassembler/palette-cells.md +219 -0
- package/docs/recipes/kickassembler/pseudo-3d-road.md +930 -0
- package/docs/recipes/kickassembler/pwm-digi.md +463 -0
- package/docs/recipes/kickassembler/raster-bars.md +264 -0
- package/docs/recipes/kickassembler/reu-dma.md +1019 -0
- package/docs/recipes/kickassembler/runtime-relocation.md +743 -0
- package/docs/recipes/kickassembler/screen-dissolve.md +545 -0
- package/docs/recipes/kickassembler/screen-wipe.md +408 -0
- package/docs/recipes/kickassembler/screenshots/README.md +72 -0
- package/docs/recipes/kickassembler/screenshots/basic-float-calls-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/basic-float-calls.png +0 -0
- package/docs/recipes/kickassembler/screenshots/basic-wedge-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/basic-wedge.png +0 -0
- package/docs/recipes/kickassembler/screenshots/big-font-scroller-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/big-font-scroller.png +0 -0
- package/docs/recipes/kickassembler/screenshots/charset-copy-rom-to-ram-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/charset-copy-rom-to-ram.png +0 -0
- package/docs/recipes/kickassembler/screenshots/cia-revision-detect-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/cia-revision-detect.png +0 -0
- package/docs/recipes/kickassembler/screenshots/colour-cycling-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/colour-cycling.png +0 -0
- package/docs/recipes/kickassembler/screenshots/colour-fade-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/colour-fade.png +0 -0
- package/docs/recipes/kickassembler/screenshots/compare-16bit-signed-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/compare-16bit-signed.png +0 -0
- package/docs/recipes/kickassembler/screenshots/cracktro-template.png +0 -0
- package/docs/recipes/kickassembler/screenshots/crt-banked-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/crt-banked.png +0 -0
- package/docs/recipes/kickassembler/screenshots/dos-error-codes-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/dos-error-codes.png +0 -0
- package/docs/recipes/kickassembler/screenshots/dot-flag-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/dot-flag.png +0 -0
- package/docs/recipes/kickassembler/screenshots/drive-job-queue-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/drive-job-queue.png +0 -0
- package/docs/recipes/kickassembler/screenshots/drive-via-probe-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/drive-via-probe.png +0 -0
- package/docs/recipes/kickassembler/screenshots/dycp-scroller-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/dycp-scroller.png +0 -0
- package/docs/recipes/kickassembler/screenshots/dypp-sprite-scroller-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/dypp-sprite-scroller.png +0 -0
- package/docs/recipes/kickassembler/screenshots/dysp-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/dysp.png +0 -0
- package/docs/recipes/kickassembler/screenshots/easyflash-save-ntsc-run2.png +0 -0
- package/docs/recipes/kickassembler/screenshots/easyflash-save-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/easyflash-save-run2.png +0 -0
- package/docs/recipes/kickassembler/screenshots/easyflash-save.png +0 -0
- package/docs/recipes/kickassembler/screenshots/eight-way-scroll-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/eight-way-scroll.png +0 -0
- package/docs/recipes/kickassembler/screenshots/file-io-roundtrip-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/file-io-roundtrip.png +0 -0
- package/docs/recipes/kickassembler/screenshots/fire-effect-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/fire-effect.png +0 -0
- package/docs/recipes/kickassembler/screenshots/fld-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/fld.png +0 -0
- package/docs/recipes/kickassembler/screenshots/fli-image.png +0 -0
- package/docs/recipes/kickassembler/screenshots/four-player-read-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/four-player-read.png +0 -0
- package/docs/recipes/kickassembler/screenshots/headless-verify-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/headless-verify.png +0 -0
- package/docs/recipes/kickassembler/screenshots/hello-world.png +0 -0
- package/docs/recipes/kickassembler/screenshots/high-score-insert-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/high-score-insert.png +0 -0
- package/docs/recipes/kickassembler/screenshots/hires-plot-line-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/hires-plot-line.png +0 -0
- package/docs/recipes/kickassembler/screenshots/irq-chain-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/irq-chain.png +0 -0
- package/docs/recipes/kickassembler/screenshots/irq-owns-port-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/irq-owns-port.png +0 -0
- package/docs/recipes/kickassembler/screenshots/isometric-room-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/isometric-room.png +0 -0
- package/docs/recipes/kickassembler/screenshots/light-pen-read-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/light-pen-read.png +0 -0
- package/docs/recipes/kickassembler/screenshots/logic-rate-decoupling-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/logic-rate-decoupling.png +0 -0
- package/docs/recipes/kickassembler/screenshots/mci-interlace-average.png +0 -0
- package/docs/recipes/kickassembler/screenshots/mci-interlace-frame-b.png +0 -0
- package/docs/recipes/kickassembler/screenshots/mci-interlace-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/mci-interlace.png +0 -0
- package/docs/recipes/kickassembler/screenshots/memory-layout-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/memory-layout.png +0 -0
- package/docs/recipes/kickassembler/screenshots/mouse-1351-read-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/mouse-1351-read.png +0 -0
- package/docs/recipes/kickassembler/screenshots/nmi-timer-tick-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/nmi-timer-tick.png +0 -0
- package/docs/recipes/kickassembler/screenshots/own-keyscan-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/own-keyscan.png +0 -0
- package/docs/recipes/kickassembler/screenshots/paddle-read-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/paddle-read.png +0 -0
- package/docs/recipes/kickassembler/screenshots/palette-cells-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/palette-cells.png +0 -0
- package/docs/recipes/kickassembler/screenshots/pseudo-3d-road-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/pseudo-3d-road.png +0 -0
- package/docs/recipes/kickassembler/screenshots/pwm-digi-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/pwm-digi.png +0 -0
- package/docs/recipes/kickassembler/screenshots/raster-bars.png +0 -0
- package/docs/recipes/kickassembler/screenshots/reu-dma-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/reu-dma.png +0 -0
- package/docs/recipes/kickassembler/screenshots/runtime-relocation-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/runtime-relocation.png +0 -0
- package/docs/recipes/kickassembler/screenshots/screen-dissolve-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/screen-dissolve.png +0 -0
- package/docs/recipes/kickassembler/screenshots/screen-wipe-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/screen-wipe.png +0 -0
- package/docs/recipes/kickassembler/screenshots/scroll-panel-split-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/scroll-panel-split.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sfx-in-player-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sfx-in-player.png +0 -0
- package/docs/recipes/kickassembler/screenshots/shadebobs-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/shadebobs.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sideborder-open.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sine-scroller.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sine-table-runtime-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sine-table-runtime.png +0 -0
- package/docs/recipes/kickassembler/screenshots/software-sprite-preshifted-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/software-sprite-preshifted.png +0 -0
- package/docs/recipes/kickassembler/screenshots/speedcode-generator-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/speedcode-generator.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprite-border-scroller-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprite-border-scroller.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprite-cache-flip-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprite-cache-flip.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprite-multiplex-24.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprite-multiplex-game-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprite-multiplex-game.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprite-priority-classes-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprite-priority-classes.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprite-sine-chain-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprite-sine-chain.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprite-stretcher-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprite-stretcher.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprites-only-screen-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sprites-only-screen.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sqrt-atan2-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/sqrt-atan2.png +0 -0
- package/docs/recipes/kickassembler/screenshots/stable-raster-irq-control.png +0 -0
- package/docs/recipes/kickassembler/screenshots/stable-raster-irq.png +0 -0
- package/docs/recipes/kickassembler/screenshots/tech-tech-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/tech-tech.png +0 -0
- package/docs/recipes/kickassembler/screenshots/tod-alarm-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/tod-alarm.png +0 -0
- package/docs/recipes/kickassembler/screenshots/topbottom-border-open.png +0 -0
- package/docs/recipes/kickassembler/screenshots/twister-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/twister.png +0 -0
- package/docs/recipes/kickassembler/screenshots/unit-test-driver-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/unit-test-driver.png +0 -0
- package/docs/recipes/kickassembler/screenshots/vector-balls-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/vector-balls.png +0 -0
- package/docs/recipes/kickassembler/screenshots/wireframe-ships-ntsc.png +0 -0
- package/docs/recipes/kickassembler/screenshots/wireframe-ships.png +0 -0
- package/docs/recipes/kickassembler/scroll-panel-split.md +381 -0
- package/docs/recipes/kickassembler/sfx-in-player.md +907 -0
- package/docs/recipes/kickassembler/shadebobs.md +522 -0
- package/docs/recipes/kickassembler/sideborder-open.md +338 -0
- package/docs/recipes/kickassembler/sine-scroller.md +321 -0
- package/docs/recipes/kickassembler/sine-table-runtime.md +815 -0
- package/docs/recipes/kickassembler/software-sprite-preshifted.md +725 -0
- package/docs/recipes/kickassembler/speedcode-generator.md +606 -0
- package/docs/recipes/kickassembler/sprite-border-scroller.md +696 -0
- package/docs/recipes/kickassembler/sprite-cache-flip.md +1071 -0
- package/docs/recipes/kickassembler/sprite-multiplex-24.md +326 -0
- package/docs/recipes/kickassembler/sprite-multiplex-game.md +986 -0
- package/docs/recipes/kickassembler/sprite-priority-classes.md +463 -0
- package/docs/recipes/kickassembler/sprite-sine-chain.md +338 -0
- package/docs/recipes/kickassembler/sprite-stretcher.md +501 -0
- package/docs/recipes/kickassembler/sprites-only-screen.md +550 -0
- package/docs/recipes/kickassembler/sqrt-atan2.md +1014 -0
- package/docs/recipes/kickassembler/stable-raster-irq.md +360 -0
- package/docs/recipes/kickassembler/tape-turbo-loader.md +875 -0
- package/docs/recipes/kickassembler/tech-tech.md +679 -0
- package/docs/recipes/kickassembler/tod-alarm.md +754 -0
- package/docs/recipes/kickassembler/topbottom-border-open.md +407 -0
- package/docs/recipes/kickassembler/twister.md +518 -0
- package/docs/recipes/kickassembler/unit-test-driver.md +314 -0
- package/docs/recipes/kickassembler/vector-balls.md +545 -0
- package/docs/recipes/kickassembler/wireframe-ships.md +2324 -0
- package/docs/recipes/oscar64/actor-activation-window.md +807 -0
- package/docs/recipes/oscar64/adventure-engine.md +1094 -0
- package/docs/recipes/oscar64/attract-replay.md +465 -0
- package/docs/recipes/oscar64/beat-em-up-lanes.md +563 -0
- package/docs/recipes/oscar64/bfs-distance-map.md +723 -0
- package/docs/recipes/oscar64/bitmap-koala-viewer.md +355 -0
- package/docs/recipes/oscar64/car-contact.md +950 -0
- package/docs/recipes/oscar64/cave-scan.md +609 -0
- package/docs/recipes/oscar64/char-bullets.md +477 -0
- package/docs/recipes/oscar64/charset-animation.md +383 -0
- package/docs/recipes/oscar64/charset-parallax.md +401 -0
- package/docs/recipes/oscar64/destructible-terrain.md +1099 -0
- package/docs/recipes/oscar64/difficulty-tables.md +654 -0
- package/docs/recipes/oscar64/dig-and-guards.md +975 -0
- package/docs/recipes/oscar64/directory-reader.md +535 -0
- package/docs/recipes/oscar64/divide-check.md +581 -0
- package/docs/recipes/oscar64/double-buffer-nomirror.md +205 -0
- package/docs/recipes/oscar64/double-buffer.md +255 -0
- package/docs/recipes/oscar64/falling-blocks.md +874 -0
- package/docs/recipes/oscar64/fixed-point-jump-velocity.md +289 -0
- package/docs/recipes/oscar64/fixed-point-jump.md +210 -0
- package/docs/recipes/oscar64/flip-screen-rooms.md +793 -0
- package/docs/recipes/oscar64/frame-sync-loop-overrun.md +214 -0
- package/docs/recipes/oscar64/frame-sync-loop.md +254 -0
- package/docs/recipes/oscar64/game-tree-search.md +743 -0
- package/docs/recipes/oscar64/ghost-targeting.md +867 -0
- package/docs/recipes/oscar64/headless-verify.md +345 -0
- package/docs/recipes/oscar64/hello-world.md +83 -0
- package/docs/recipes/oscar64/high-score-persist.md +772 -0
- package/docs/recipes/oscar64/iffl-kernal-skip.md +421 -0
- package/docs/recipes/oscar64/joystick-input.md +358 -0
- package/docs/recipes/oscar64/lane-pursuit.md +1028 -0
- package/docs/recipes/oscar64/level-rle-decoder.md +620 -0
- package/docs/recipes/oscar64/lfsr-random-seed2.md +338 -0
- package/docs/recipes/oscar64/lfsr-random.md +403 -0
- package/docs/recipes/oscar64/load-asset-runtime.md +492 -0
- package/docs/recipes/oscar64/memory-layout.md +232 -0
- package/docs/recipes/oscar64/mixed-fighters.md +781 -0
- package/docs/recipes/oscar64/multi-sprite-object.md +533 -0
- package/docs/recipes/oscar64/nav-area-pathfinding.md +881 -0
- package/docs/recipes/oscar64/object-pool.md +572 -0
- package/docs/recipes/oscar64/pal-ntsc-detect.md +257 -0
- package/docs/recipes/oscar64/password-state.md +532 -0
- package/docs/recipes/oscar64/per-frame-hitbox.md +651 -0
- package/docs/recipes/oscar64/petscii-screen-codes.md +428 -0
- package/docs/recipes/oscar64/platformer-scaffold.md +1467 -0
- package/docs/recipes/oscar64/print-number.md +367 -0
- package/docs/recipes/oscar64/raster-bars.md +239 -0
- package/docs/recipes/oscar64/raster-profile-bars.md +404 -0
- package/docs/recipes/oscar64/rel-side-sectors.md +391 -0
- package/docs/recipes/oscar64/relative-file-records.md +378 -0
- package/docs/recipes/oscar64/save-load-seq-file.md +365 -0
- package/docs/recipes/oscar64/screenshots/README.md +99 -0
- package/docs/recipes/oscar64/screenshots/actor-activation-window-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/actor-activation-window.png +0 -0
- package/docs/recipes/oscar64/screenshots/adventure-engine-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/adventure-engine.png +0 -0
- package/docs/recipes/oscar64/screenshots/attract-replay-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/attract-replay.png +0 -0
- package/docs/recipes/oscar64/screenshots/beat-em-up-lanes-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/beat-em-up-lanes.png +0 -0
- package/docs/recipes/oscar64/screenshots/bfs-distance-map-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/bfs-distance-map.png +0 -0
- package/docs/recipes/oscar64/screenshots/bitmap-koala-viewer.png +0 -0
- package/docs/recipes/oscar64/screenshots/car-contact-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/car-contact.png +0 -0
- package/docs/recipes/oscar64/screenshots/cave-scan-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/cave-scan.png +0 -0
- package/docs/recipes/oscar64/screenshots/char-bullets-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/char-bullets.png +0 -0
- package/docs/recipes/oscar64/screenshots/charset-animation-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/charset-animation.png +0 -0
- package/docs/recipes/oscar64/screenshots/charset-parallax-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/charset-parallax.png +0 -0
- package/docs/recipes/oscar64/screenshots/destructible-terrain-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/destructible-terrain.png +0 -0
- package/docs/recipes/oscar64/screenshots/difficulty-tables-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/difficulty-tables.png +0 -0
- package/docs/recipes/oscar64/screenshots/dig-and-guards-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/dig-and-guards.png +0 -0
- package/docs/recipes/oscar64/screenshots/directory-reader-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/directory-reader.png +0 -0
- package/docs/recipes/oscar64/screenshots/divide-check-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/divide-check.png +0 -0
- package/docs/recipes/oscar64/screenshots/double-buffer-nomirror.png +0 -0
- package/docs/recipes/oscar64/screenshots/double-buffer-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/double-buffer.png +0 -0
- package/docs/recipes/oscar64/screenshots/falling-blocks-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/falling-blocks.png +0 -0
- package/docs/recipes/oscar64/screenshots/fixed-point-jump-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/fixed-point-jump-velocity-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/fixed-point-jump-velocity.png +0 -0
- package/docs/recipes/oscar64/screenshots/fixed-point-jump.png +0 -0
- package/docs/recipes/oscar64/screenshots/flip-screen-rooms-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/flip-screen-rooms.png +0 -0
- package/docs/recipes/oscar64/screenshots/frame-sync-loop-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/frame-sync-loop-overrun.png +0 -0
- package/docs/recipes/oscar64/screenshots/frame-sync-loop.png +0 -0
- package/docs/recipes/oscar64/screenshots/game-tree-search-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/game-tree-search.png +0 -0
- package/docs/recipes/oscar64/screenshots/ghost-targeting-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/ghost-targeting.png +0 -0
- package/docs/recipes/oscar64/screenshots/headless-verify-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/headless-verify.png +0 -0
- package/docs/recipes/oscar64/screenshots/hello-world.png +0 -0
- package/docs/recipes/oscar64/screenshots/high-score-persist-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/high-score-persist.png +0 -0
- package/docs/recipes/oscar64/screenshots/iffl-kernal-skip-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/iffl-kernal-skip.png +0 -0
- package/docs/recipes/oscar64/screenshots/joystick-input-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/joystick-input.png +0 -0
- package/docs/recipes/oscar64/screenshots/lane-pursuit-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/lane-pursuit.png +0 -0
- package/docs/recipes/oscar64/screenshots/level-rle-decoder-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/level-rle-decoder.png +0 -0
- package/docs/recipes/oscar64/screenshots/lfsr-random-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/lfsr-random-seed2.png +0 -0
- package/docs/recipes/oscar64/screenshots/lfsr-random.png +0 -0
- package/docs/recipes/oscar64/screenshots/load-asset-runtime-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/load-asset-runtime.png +0 -0
- package/docs/recipes/oscar64/screenshots/memory-layout-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/memory-layout.png +0 -0
- package/docs/recipes/oscar64/screenshots/mixed-fighters-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/mixed-fighters.png +0 -0
- package/docs/recipes/oscar64/screenshots/multi-sprite-object-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/multi-sprite-object.png +0 -0
- package/docs/recipes/oscar64/screenshots/nav-area-pathfinding-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/nav-area-pathfinding.png +0 -0
- package/docs/recipes/oscar64/screenshots/object-pool-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/object-pool.png +0 -0
- package/docs/recipes/oscar64/screenshots/pal-ntsc-detect-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/pal-ntsc-detect-oldntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/pal-ntsc-detect-pal.png +0 -0
- package/docs/recipes/oscar64/screenshots/password-state-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/password-state.png +0 -0
- package/docs/recipes/oscar64/screenshots/per-frame-hitbox-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/per-frame-hitbox.png +0 -0
- package/docs/recipes/oscar64/screenshots/petscii-screen-codes-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/petscii-screen-codes.png +0 -0
- package/docs/recipes/oscar64/screenshots/platformer-scaffold-d64-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/platformer-scaffold-d64.png +0 -0
- package/docs/recipes/oscar64/screenshots/platformer-scaffold-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/platformer-scaffold.png +0 -0
- package/docs/recipes/oscar64/screenshots/print-number-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/print-number.png +0 -0
- package/docs/recipes/oscar64/screenshots/raster-bars.png +0 -0
- package/docs/recipes/oscar64/screenshots/raster-profile-bars-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/raster-profile-bars.png +0 -0
- package/docs/recipes/oscar64/screenshots/rel-side-sectors-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/rel-side-sectors.png +0 -0
- package/docs/recipes/oscar64/screenshots/relative-file-records-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/relative-file-records.png +0 -0
- package/docs/recipes/oscar64/screenshots/save-load-seq-file-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/save-load-seq-file.png +0 -0
- package/docs/recipes/oscar64/screenshots/seeded-level-fill-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/seeded-level-fill.png +0 -0
- package/docs/recipes/oscar64/screenshots/sfx-engine-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/sfx-engine.png +0 -0
- package/docs/recipes/oscar64/screenshots/sid-music-player.png +0 -0
- package/docs/recipes/oscar64/screenshots/simple-shmup.png +0 -0
- package/docs/recipes/oscar64/screenshots/slope-collision-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/slope-collision.png +0 -0
- package/docs/recipes/oscar64/screenshots/soft-scroll-h.png +0 -0
- package/docs/recipes/oscar64/screenshots/sprite-animation-table-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/sprite-animation-table.png +0 -0
- package/docs/recipes/oscar64/screenshots/sprite-multiplex-8.png +0 -0
- package/docs/recipes/oscar64/screenshots/stable-raster-irq.png +0 -0
- package/docs/recipes/oscar64/screenshots/text-input-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/text-input.png +0 -0
- package/docs/recipes/oscar64/screenshots/text-overlay-playfield-gameover.png +0 -0
- package/docs/recipes/oscar64/screenshots/text-overlay-playfield-notrail-control.png +0 -0
- package/docs/recipes/oscar64/screenshots/text-overlay-playfield-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/text-overlay-playfield-ungated-control.png +0 -0
- package/docs/recipes/oscar64/screenshots/text-overlay-playfield.png +0 -0
- package/docs/recipes/oscar64/screenshots/text-window-menu-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/text-window-menu.png +0 -0
- package/docs/recipes/oscar64/screenshots/tile-grid-collision-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/tile-grid-collision.png +0 -0
- package/docs/recipes/oscar64/screenshots/tile-map-render-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/tile-map-render.png +0 -0
- package/docs/recipes/oscar64/screenshots/two-player-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/two-player.png +0 -0
- package/docs/recipes/oscar64/screenshots/two-word-parser-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/two-word-parser.png +0 -0
- package/docs/recipes/oscar64/screenshots/vehicle-control-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/vehicle-control.png +0 -0
- package/docs/recipes/oscar64/screenshots/wave-director-ntsc.png +0 -0
- package/docs/recipes/oscar64/screenshots/wave-director.png +0 -0
- package/docs/recipes/oscar64/seeded-level-fill.md +364 -0
- package/docs/recipes/oscar64/sfx-engine.md +514 -0
- package/docs/recipes/oscar64/sid-music-player.md +441 -0
- package/docs/recipes/oscar64/simple-shmup.md +1000 -0
- package/docs/recipes/oscar64/slope-collision.md +610 -0
- package/docs/recipes/oscar64/soft-scroll-h.md +261 -0
- package/docs/recipes/oscar64/sprite-animation-table.md +671 -0
- package/docs/recipes/oscar64/sprite-multiplex-8.md +314 -0
- package/docs/recipes/oscar64/stable-raster-irq.md +236 -0
- package/docs/recipes/oscar64/text-input.md +274 -0
- package/docs/recipes/oscar64/text-overlay-playfield.md +617 -0
- package/docs/recipes/oscar64/text-window-menu.md +551 -0
- package/docs/recipes/oscar64/tile-grid-collision.md +563 -0
- package/docs/recipes/oscar64/tile-map-render.md +395 -0
- package/docs/recipes/oscar64/two-player.md +528 -0
- package/docs/recipes/oscar64/two-word-parser.md +510 -0
- package/docs/recipes/oscar64/vehicle-control.md +771 -0
- package/docs/recipes/oscar64/wave-director.md +787 -0
- package/docs/recipes/runs.json +1606 -0
- package/docs/runtime/sim6502-reference.md +466 -0
- package/docs/runtime/vice-mcp-reference.md +351 -0
- package/docs/runtime/vice-reference.md +1393 -0
- package/docs/techniques/bitmap-modes.md +685 -0
- package/docs/techniques/cpu-cycle-tricks.md +1570 -0
- package/docs/techniques/effects-vector-3d.md +1431 -0
- package/docs/techniques/file-io.md +1427 -0
- package/docs/techniques/input.md +1072 -0
- package/docs/techniques/loaders-packers.md +768 -0
- package/docs/techniques/logic.md +3091 -0
- package/docs/techniques/maths.md +1524 -0
- package/docs/techniques/memory-banking.md +1686 -0
- package/docs/techniques/music-sid.md +1144 -0
- package/docs/techniques/raster.md +1543 -0
- package/docs/techniques/scroll.md +1292 -0
- package/docs/techniques/sprite.md +2566 -0
- package/docs/techniques/text-mode-render.md +717 -0
- package/docs/techniques/text.md +1095 -0
- package/docs/techniques/transitions.md +405 -0
- package/docs/toolchains/cartconv-reference.md +262 -0
- package/docs/toolchains/cc1541-reference.md +316 -0
- package/docs/toolchains/cc65-reference.md +667 -0
- package/docs/toolchains/error-sources/cc65/README.md +1 -0
- package/docs/toolchains/error-sources/cc65/missing-setcpu.s +4 -0
- package/docs/toolchains/error-sources/cc65/range-error.s +4 -0
- package/docs/toolchains/error-sources/cc65/segment-overflow.c +6 -0
- package/docs/toolchains/error-sources/cc65/unresolved-external.c +6 -0
- package/docs/toolchains/error-sources/kickassembler/README.md +1 -0
- package/docs/toolchains/error-sources/kickassembler/branch-out-of-range.asm +4 -0
- package/docs/toolchains/error-sources/kickassembler/failed-assert.asm +3 -0
- package/docs/toolchains/error-sources/kickassembler/flat-lib.asm +4 -0
- package/docs/toolchains/error-sources/kickassembler/import-source-no-namespace.asm +5 -0
- package/docs/toolchains/error-sources/kickassembler/macro-without-parentheses.asm +6 -0
- package/docs/toolchains/error-sources/kickassembler/memory-block-overlap.asm +4 -0
- package/docs/toolchains/error-sources/kickassembler/symbol-clash-lib.asm +5 -0
- package/docs/toolchains/error-sources/kickassembler/symbol-clash-main.asm +6 -0
- package/docs/toolchains/error-sources/kickassembler/unknown-symbol.asm +4 -0
- package/docs/toolchains/error-sources/oscar64/README.md +1 -0
- package/docs/toolchains/error-sources/oscar64/asm-addressing-mode.c +7 -0
- package/docs/toolchains/error-sources/oscar64/region-overflow.c +6 -0
- package/docs/toolchains/error-sources/oscar64/undefined-extern-var.c +5 -0
- package/docs/toolchains/error-sources/oscar64/undefined-extern.c +6 -0
- package/docs/toolchains/error-sources/oscar64/unknown-vic-field.c +6 -0
- package/docs/toolchains/error-sources/oscar64/void-main.c +3 -0
- package/docs/toolchains/kickassembler-reference.md +1020 -0
- package/docs/toolchains/memory-layout-planning.md +362 -0
- package/docs/toolchains/oscar64-headers-reference.md +583 -0
- package/docs/toolchains/oscar64-reference.md +892 -0
- package/docs/toolchains/petcat-reference.md +290 -0
- package/docs/toolchains/png2prg.md +188 -0
- package/docs/toolchains/release-disk.md +314 -0
- package/docs/toolchains/sidreloc.md +236 -0
- package/docs/toolchains/spindle-reference.md +487 -0
- package/docs/toolchains/tape-mastering.md +592 -0
- package/docs/toolchains/unit-testing-6502.md +281 -0
- package/docs/workflow/agent-harness.md +478 -0
- package/package.json +105 -0
- package/templates/_harness/CLAUDE.md.template +91 -0
- package/templates/_harness/PLAN.md.template +72 -0
- package/templates/_harness/check.py +442 -0
- package/templates/_harness/claude/settings.json +17 -0
- package/templates/_harness/gen-asm-header.py +96 -0
- package/templates/_harness/harness.mk +273 -0
- package/templates/_harness/hooks/plan-gate.py +185 -0
- package/templates/_harness/meter/frame_meter.asm +311 -0
- package/templates/_harness/meter/frame_meter.c +155 -0
- package/templates/_harness/meter/frame_meter.h +80 -0
- package/templates/_harness/zp-used.py +104 -0
- package/templates/action-puzzle/.claude/settings.json +17 -0
- package/templates/action-puzzle/.mcp.json +10 -0
- package/templates/action-puzzle/CLAUDE.md +120 -0
- package/templates/action-puzzle/Makefile +125 -0
- package/templates/action-puzzle/PLAN.md +388 -0
- package/templates/action-puzzle/README.md +240 -0
- package/templates/action-puzzle/expect.json +25 -0
- package/templates/action-puzzle/src/cave.c +280 -0
- package/templates/action-puzzle/src/cave.h +80 -0
- package/templates/action-puzzle/src/gen_autopilot.h +20 -0
- package/templates/action-puzzle/src/gen_caves.h +59 -0
- package/templates/action-puzzle/src/gen_notes.h +16 -0
- package/templates/action-puzzle/src/hiscore.c +152 -0
- package/templates/action-puzzle/src/hiscore.h +41 -0
- package/templates/action-puzzle/src/level.c +64 -0
- package/templates/action-puzzle/src/level.h +24 -0
- package/templates/action-puzzle/src/main.c +599 -0
- package/templates/action-puzzle/src/render.c +239 -0
- package/templates/action-puzzle/src/render.h +31 -0
- package/templates/action-puzzle/src/sound.c +158 -0
- package/templates/action-puzzle/src/sound.h +22 -0
- package/templates/action-puzzle/tools/disk_check.py +77 -0
- package/templates/action-puzzle/tools/drive.py +106 -0
- package/templates/action-puzzle/tools/gen.py +454 -0
- package/templates/action-puzzle/tools/model_check.py +49 -0
- package/templates/action-puzzle/tools/verdict_codes.py +24 -0
- package/templates/adventure/.claude/settings.json +17 -0
- package/templates/adventure/.mcp.json +10 -0
- package/templates/adventure/CLAUDE.md +118 -0
- package/templates/adventure/Makefile +113 -0
- package/templates/adventure/PLAN.md +396 -0
- package/templates/adventure/README.md +277 -0
- package/templates/adventure/expect.json +25 -0
- package/templates/adventure/src/engine.c +543 -0
- package/templates/adventure/src/engine.h +48 -0
- package/templates/adventure/src/gen_script.h +141 -0
- package/templates/adventure/src/gen_world.h +511 -0
- package/templates/adventure/src/main.c +439 -0
- package/templates/adventure/src/picture.c +83 -0
- package/templates/adventure/src/picture.h +16 -0
- package/templates/adventure/src/save.c +159 -0
- package/templates/adventure/src/save.h +25 -0
- package/templates/adventure/src/sound.c +71 -0
- package/templates/adventure/src/sound.h +16 -0
- package/templates/adventure/src/text.c +349 -0
- package/templates/adventure/src/text.h +40 -0
- package/templates/adventure/tools/disk_check.py +128 -0
- package/templates/adventure/tools/drive.py +119 -0
- package/templates/adventure/tools/gen.py +1033 -0
- package/templates/adventure/tools/world.py +356 -0
- package/templates/beat-em-up/.claude/settings.json +17 -0
- package/templates/beat-em-up/.mcp.json +10 -0
- package/templates/beat-em-up/CLAUDE.md +136 -0
- package/templates/beat-em-up/Makefile +96 -0
- package/templates/beat-em-up/PLAN.md +502 -0
- package/templates/beat-em-up/README.md +315 -0
- package/templates/beat-em-up/expect-gameover.json +8 -0
- package/templates/beat-em-up/expect.json +29 -0
- package/templates/beat-em-up/src/anim.c +70 -0
- package/templates/beat-em-up/src/art.c +344 -0
- package/templates/beat-em-up/src/autopilot.h +154 -0
- package/templates/beat-em-up/src/brute.c +273 -0
- package/templates/beat-em-up/src/enemy.c +281 -0
- package/templates/beat-em-up/src/engine.asm +512 -0
- package/templates/beat-em-up/src/fighter.c +384 -0
- package/templates/beat-em-up/src/game.h +269 -0
- package/templates/beat-em-up/src/hud.c +135 -0
- package/templates/beat-em-up/src/main.c +341 -0
- package/templates/beat-em-up/src/sound.c +44 -0
- package/templates/beat-em-up/src/street.c +93 -0
- package/templates/beat-em-up/src/verdict.h +523 -0
- package/templates/beat-em-up/src/view.c +362 -0
- package/templates/beat-em-up/tools/drive.py +105 -0
- package/templates/beat-em-up/tools/flickercheck.py +273 -0
- package/templates/demo/.claude/settings.json +17 -0
- package/templates/demo/.mcp.json +10 -0
- package/templates/demo/CLAUDE.md +129 -0
- package/templates/demo/Makefile +66 -0
- package/templates/demo/PLAN.md +401 -0
- package/templates/demo/README.md +322 -0
- package/templates/demo/expect.json +945 -0
- package/templates/demo/src/config.asm +80 -0
- package/templates/demo/src/framework.asm +390 -0
- package/templates/demo/src/main.asm +139 -0
- package/templates/demo/src/music.asm +197 -0
- package/templates/demo/src/part_main.asm +279 -0
- package/templates/demo/src/part_title.asm +79 -0
- package/templates/demo/src/parts.asm +43 -0
- package/templates/demo/src/tables.asm +73 -0
- package/templates/demo/src/verdict.asm +179 -0
- package/templates/demo/tools/audio.py +80 -0
- package/templates/demo/tools/gen_expect.py +167 -0
- package/templates/demo/tools/probe.py +95 -0
- package/templates/hello/.claude/settings.json +17 -0
- package/templates/hello/.mcp.json +10 -0
- package/templates/hello/CLAUDE.md +100 -0
- package/templates/hello/Makefile +38 -0
- package/templates/hello/PLAN.md +200 -0
- package/templates/hello/expect.json +20 -0
- package/templates/hello/src/main.c +161 -0
- package/templates/hello/src/sprite.asm +27 -0
- package/templates/hello-kick/.claude/settings.json +17 -0
- package/templates/hello-kick/.mcp.json +10 -0
- package/templates/hello-kick/CLAUDE.md +100 -0
- package/templates/hello-kick/Makefile +17 -0
- package/templates/hello-kick/PLAN.md +199 -0
- package/templates/hello-kick/expect.json +20 -0
- package/templates/hello-kick/src/main.asm +233 -0
- package/templates/platformer/.claude/settings.json +17 -0
- package/templates/platformer/.mcp.json +10 -0
- package/templates/platformer/CLAUDE.md +125 -0
- package/templates/platformer/Makefile +86 -0
- package/templates/platformer/PLAN.md +360 -0
- package/templates/platformer/README.md +277 -0
- package/templates/platformer/expect.json +32 -0
- package/templates/platformer/src/actors.c +289 -0
- package/templates/platformer/src/anim.c +51 -0
- package/templates/platformer/src/art.c +212 -0
- package/templates/platformer/src/autopilot.h +30 -0
- package/templates/platformer/src/engine.asm +253 -0
- package/templates/platformer/src/game.h +248 -0
- package/templates/platformer/src/hud.c +90 -0
- package/templates/platformer/src/level.c +184 -0
- package/templates/platformer/src/main.c +306 -0
- package/templates/platformer/src/player.c +268 -0
- package/templates/platformer/src/sound.c +42 -0
- package/templates/platformer/src/verdict.h +206 -0
- package/templates/platformer/src/view.c +331 -0
- package/templates/platformer/stage-expect.json +6 -0
- package/templates/platformer/tools/drive.py +112 -0
- package/templates/platformer/tools/tearcheck.py +229 -0
- package/templates/shmup-vertical/.claude/settings.json +17 -0
- package/templates/shmup-vertical/.mcp.json +10 -0
- package/templates/shmup-vertical/CLAUDE.md +137 -0
- package/templates/shmup-vertical/Makefile +131 -0
- package/templates/shmup-vertical/PLAN.md +569 -0
- package/templates/shmup-vertical/README.md +189 -0
- package/templates/shmup-vertical/expect.json +38 -0
- package/templates/shmup-vertical/src/bullets.c +158 -0
- package/templates/shmup-vertical/src/bullets.h +35 -0
- package/templates/shmup-vertical/src/display.c +239 -0
- package/templates/shmup-vertical/src/display.h +40 -0
- package/templates/shmup-vertical/src/game.h +85 -0
- package/templates/shmup-vertical/src/glyph.asm +358 -0
- package/templates/shmup-vertical/src/hiscore.c +141 -0
- package/templates/shmup-vertical/src/hiscore.h +16 -0
- package/templates/shmup-vertical/src/hit.asm +180 -0
- package/templates/shmup-vertical/src/hitbox.c +59 -0
- package/templates/shmup-vertical/src/hitbox.h +25 -0
- package/templates/shmup-vertical/src/kernel.asm +330 -0
- package/templates/shmup-vertical/src/level.c +174 -0
- package/templates/shmup-vertical/src/level.h +27 -0
- package/templates/shmup-vertical/src/main.c +824 -0
- package/templates/shmup-vertical/src/mux.asm +321 -0
- package/templates/shmup-vertical/src/sound.asm +255 -0
- package/templates/shmup-vertical/src/step.asm +169 -0
- package/templates/shmup-vertical/src/waves.c +195 -0
- package/templates/shmup-vertical/src/waves.h +33 -0
- package/templates/shmup-vertical/stage-expect.json +6 -0
- package/templates/shmup-vertical/tools/drive.py +152 -0
- package/templates/shmup-vertical/tools/joytest.py +159 -0
- package/templates/shmup-vertical/tools/meter.py +15 -0
- package/templates/shmup-vertical/tools/phases.py +73 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
// hit.asm: the enemies' boxes against the ship's and the bolts', imported by
|
|
2
|
+
// kernel.asm (technique per_frame_hitbox). hitbox.c writes the ship's and
|
|
3
|
+
// the bolts' boxes (hb_*, slot 0 the ship, 1-4 the bolts) where they are
|
|
4
|
+
// drawn; hit_scan reads each enemy from the multiplexer's actor table
|
|
5
|
+
// (actors 1-12: what the display showed), takes its box from its sprite
|
|
6
|
+
// frame (fb_*: an explosion's frame has none, a free enemy's Y is $FF), and
|
|
7
|
+
// tests it against every box still on. A hit is put on the list hit_e /
|
|
8
|
+
// hit_a (enemy, box slot) and that box goes off, so a bolt kills one enemy
|
|
9
|
+
// and the ship is lost once a frame. In C this scan cost 2,700-3,100 cycles
|
|
10
|
+
// on the staged heaviest frame (PROFILE build, VICE x64sc 3.10).
|
|
11
|
+
//
|
|
12
|
+
// Boxes are in half X and raster lines: four one-byte compares, no $D010.
|
|
13
|
+
// An enemy whose lines miss the lines of every box that is on is passed
|
|
14
|
+
// over before its X is worked out, and the boxes that are off are left out
|
|
15
|
+
// of the list each enemy walks: with twelve enemies flying this scan is
|
|
16
|
+
// much of the frame on NTSC.
|
|
17
|
+
|
|
18
|
+
.const HB_N = 5 // hitbox.h: BOX_ENEMY
|
|
19
|
+
.const NE = 12 // waves.h NE: actors 1-12
|
|
20
|
+
.const SPR_BLOCK = 128 // game.h
|
|
21
|
+
|
|
22
|
+
// Each sprite frame's box (display.h F_*): offset and size from the
|
|
23
|
+
// sprite's first pixel pair and first line. w = 0: no box.
|
|
24
|
+
fb_x: .byte 3, 3, 1, 2, 0, 0
|
|
25
|
+
fb_y: .byte 4, 2, 1, 2, 0, 0
|
|
26
|
+
fb_w: .byte 6, 6, 10, 8, 0, 0 // the ship: its hull only
|
|
27
|
+
fb_h: .byte 10, 8, 7, 9, 0, 0
|
|
28
|
+
|
|
29
|
+
hb_on: .fill HB_N, 0
|
|
30
|
+
hb_l: .fill HB_N, 0
|
|
31
|
+
hb_r: .fill HB_N, 0 // exclusive
|
|
32
|
+
hb_t: .fill HB_N, 0
|
|
33
|
+
hb_b: .fill HB_N, 0 // exclusive
|
|
34
|
+
|
|
35
|
+
hit_n: .byte 0
|
|
36
|
+
hit_e: .fill NE, 0
|
|
37
|
+
hit_a: .fill NE, 0
|
|
38
|
+
|
|
39
|
+
hs_e: .byte 0
|
|
40
|
+
hs_t: .byte 0
|
|
41
|
+
hs_b: .byte 0
|
|
42
|
+
hs_l: .byte 0
|
|
43
|
+
hs_r: .byte 0
|
|
44
|
+
hs_lo: .byte 0
|
|
45
|
+
hs_hi: .byte 0
|
|
46
|
+
hs_nl: .byte 0
|
|
47
|
+
hs_list: .fill HB_N, 0 // the slots on this frame, slot 0 last
|
|
48
|
+
|
|
49
|
+
// The enemies' dots against the ship's box (slot 0): dot_hit = the first
|
|
50
|
+
// dot inside it, or $FF. A dot is one pixel pair wide and two lines tall.
|
|
51
|
+
// The same test in C cost about 25 cycles a dot more.
|
|
52
|
+
dot_hit: .byte $ff
|
|
53
|
+
|
|
54
|
+
dot_scan:
|
|
55
|
+
lda #$ff
|
|
56
|
+
sta dot_hit
|
|
57
|
+
lda hb_on
|
|
58
|
+
beq ds_done
|
|
59
|
+
ldx #0
|
|
60
|
+
ds_loop:
|
|
61
|
+
lda eb_live,x
|
|
62
|
+
beq ds_next
|
|
63
|
+
lda eb_line,x // y < b
|
|
64
|
+
cmp hb_b
|
|
65
|
+
bcs ds_next
|
|
66
|
+
adc #2 // t < y + 2 (carry clear here)
|
|
67
|
+
cmp hb_t
|
|
68
|
+
beq ds_next
|
|
69
|
+
bcc ds_next
|
|
70
|
+
lda eb_hx,x // x < r
|
|
71
|
+
cmp hb_r
|
|
72
|
+
bcs ds_next
|
|
73
|
+
adc #1 // l < x + 1
|
|
74
|
+
cmp hb_l
|
|
75
|
+
beq ds_next
|
|
76
|
+
bcc ds_next
|
|
77
|
+
stx dot_hit
|
|
78
|
+
rts
|
|
79
|
+
ds_next:
|
|
80
|
+
inx
|
|
81
|
+
cpx #NEB
|
|
82
|
+
bne ds_loop
|
|
83
|
+
ds_done:
|
|
84
|
+
rts
|
|
85
|
+
|
|
86
|
+
hit_scan:
|
|
87
|
+
lda #0
|
|
88
|
+
sta hit_n
|
|
89
|
+
lda #$ff // the lines any box that is on covers:
|
|
90
|
+
sta hs_lo // hs_lo to hs_hi (exclusive); and the
|
|
91
|
+
lda #0 // boxes that are on, slot 0 last
|
|
92
|
+
sta hs_hi
|
|
93
|
+
ldx #0
|
|
94
|
+
ldy #HB_N-1
|
|
95
|
+
hs_rng: lda hb_on,y
|
|
96
|
+
beq hs_rn
|
|
97
|
+
tya
|
|
98
|
+
sta hs_list,x
|
|
99
|
+
inx
|
|
100
|
+
lda hb_t,y
|
|
101
|
+
cmp hs_lo
|
|
102
|
+
bcs !+
|
|
103
|
+
sta hs_lo
|
|
104
|
+
!: lda hb_b,y
|
|
105
|
+
cmp hs_hi
|
|
106
|
+
bcc hs_rn
|
|
107
|
+
sta hs_hi
|
|
108
|
+
hs_rn: dey
|
|
109
|
+
bpl hs_rng
|
|
110
|
+
stx hs_nl
|
|
111
|
+
txa
|
|
112
|
+
bne !+
|
|
113
|
+
rts // no box is on
|
|
114
|
+
!: ldx #1 // actor 1 = enemy 0
|
|
115
|
+
bne hs_loop
|
|
116
|
+
hs_skip:
|
|
117
|
+
jmp hs_next
|
|
118
|
+
hs_loop:
|
|
119
|
+
lda act_y,x
|
|
120
|
+
cmp #OFF_Y
|
|
121
|
+
beq hs_skip
|
|
122
|
+
ldy act_ptr,x
|
|
123
|
+
lda fb_w-SPR_BLOCK,y
|
|
124
|
+
beq hs_skip // an explosion: no box
|
|
125
|
+
lda act_y,x
|
|
126
|
+
sec // + 1: a sprite at Y starts on line Y + 1
|
|
127
|
+
adc fb_y-SPR_BLOCK,y
|
|
128
|
+
cmp hs_hi // below every box: next enemy
|
|
129
|
+
bcs hs_skip
|
|
130
|
+
sta hs_t
|
|
131
|
+
clc
|
|
132
|
+
adc fb_h-SPR_BLOCK,y
|
|
133
|
+
cmp hs_lo // above every box
|
|
134
|
+
bcc hs_skip
|
|
135
|
+
beq hs_skip
|
|
136
|
+
sta hs_b
|
|
137
|
+
lda act_hx,x
|
|
138
|
+
clc
|
|
139
|
+
adc fb_x-SPR_BLOCK,y
|
|
140
|
+
sta hs_l
|
|
141
|
+
clc
|
|
142
|
+
adc fb_w-SPR_BLOCK,y
|
|
143
|
+
sta hs_r
|
|
144
|
+
stx hs_e
|
|
145
|
+
ldx hs_nl // the boxes that were on, the ship first
|
|
146
|
+
hs_box: dex
|
|
147
|
+
bmi hs_done
|
|
148
|
+
ldy hs_list,x
|
|
149
|
+
lda hs_t // t < hb_b
|
|
150
|
+
cmp hb_b,y
|
|
151
|
+
bcs hs_box
|
|
152
|
+
lda hb_t,y // hb_t < b
|
|
153
|
+
cmp hs_b
|
|
154
|
+
bcs hs_box
|
|
155
|
+
lda hs_l // l < hb_r
|
|
156
|
+
cmp hb_r,y
|
|
157
|
+
bcs hs_box
|
|
158
|
+
lda hb_l,y // hb_l < r
|
|
159
|
+
cmp hs_r
|
|
160
|
+
bcs hs_box
|
|
161
|
+
lda hb_on,y // spent by an earlier enemy this frame
|
|
162
|
+
beq hs_box
|
|
163
|
+
lda #0 // a hit: the box is spent
|
|
164
|
+
sta hb_on,y
|
|
165
|
+
tya
|
|
166
|
+
ldy hit_n
|
|
167
|
+
sta hit_a,y
|
|
168
|
+
lda hs_e
|
|
169
|
+
sec
|
|
170
|
+
sbc #1
|
|
171
|
+
sta hit_e,y
|
|
172
|
+
inc hit_n
|
|
173
|
+
hs_done:
|
|
174
|
+
ldx hs_e
|
|
175
|
+
hs_next:
|
|
176
|
+
inx
|
|
177
|
+
cpx #NE+1
|
|
178
|
+
beq !+
|
|
179
|
+
jmp hs_loop
|
|
180
|
+
!: rts
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// hitbox.c: boxes from the animation frame, pairs from group bits, after
|
|
2
|
+
// c64-kb's oscar64/per-frame-hitbox recipe. Every box is in half X (one byte
|
|
3
|
+
// across the whole screen, 2-pixel precision) and raster lines, so the test
|
|
4
|
+
// is four one-byte compares and $D010 never enters it.
|
|
5
|
+
//
|
|
6
|
+
// The ship's box is emitted where it is drawn (actors_draw), the bolts' by
|
|
7
|
+
// glyph.asm's bb_run, into hit.asm's tables. An enemy's box comes from the
|
|
8
|
+
// multiplexer's actor table, which is what the display showed this frame,
|
|
9
|
+
// and its sprite frame's box (hit.asm fb_*): an explosion's frame has none.
|
|
10
|
+
// Enemies are tested only against the groups they can hurt (the ship and
|
|
11
|
+
// the bolts), never against each other; the enemies' dots only against the
|
|
12
|
+
// ship. hit.asm's dot_scan and hit_scan do the tests; this file turns their
|
|
13
|
+
// hits into events.
|
|
14
|
+
#include "hitbox.h"
|
|
15
|
+
#include "display.h"
|
|
16
|
+
#include "waves.h"
|
|
17
|
+
#include "bullets.h"
|
|
18
|
+
|
|
19
|
+
#define hb_on ((char *)ASM_HB_ON)
|
|
20
|
+
#define hb_l ((char *)ASM_HB_L)
|
|
21
|
+
#define hb_r ((char *)ASM_HB_R)
|
|
22
|
+
#define hb_t ((char *)ASM_HB_T)
|
|
23
|
+
#define hb_b ((char *)ASM_HB_B)
|
|
24
|
+
#define fb_x ((const char *)ASM_FB_X)
|
|
25
|
+
#define fb_y ((const char *)ASM_FB_Y)
|
|
26
|
+
#define fb_w ((const char *)ASM_FB_W)
|
|
27
|
+
#define fb_h ((const char *)ASM_FB_H)
|
|
28
|
+
|
|
29
|
+
void box_off(char slot)
|
|
30
|
+
{
|
|
31
|
+
hb_on[slot] = 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
void box_ship(char hx, char sy)
|
|
35
|
+
{
|
|
36
|
+
char l = hx + fb_x[F_SHIP], t = sy + 1 + fb_y[F_SHIP];
|
|
37
|
+
hb_l[BOX_PLAYER] = l;
|
|
38
|
+
hb_r[BOX_PLAYER] = l + fb_w[F_SHIP];
|
|
39
|
+
hb_t[BOX_PLAYER] = t;
|
|
40
|
+
hb_b[BOX_PLAYER] = t + fb_h[F_SHIP];
|
|
41
|
+
hb_on[BOX_PLAYER] = 1;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
void collide(void)
|
|
45
|
+
{
|
|
46
|
+
__asm { jsr ASM_DOT_SCAN } // the enemies' dots against the ship
|
|
47
|
+
char j = K_BYTE(ASM_DOT_HIT);
|
|
48
|
+
if (j != 0xff)
|
|
49
|
+
on_ship_shot(j); // its box goes off before the enemies' test
|
|
50
|
+
__asm { jsr ASM_HIT_SCAN }
|
|
51
|
+
char n = K_BYTE(ASM_HIT_N);
|
|
52
|
+
for (char k = 0; k < n; k++) {
|
|
53
|
+
char e = ((char *)ASM_HIT_E)[k], a = ((char *)ASM_HIT_A)[k];
|
|
54
|
+
if (a == BOX_PLAYER)
|
|
55
|
+
on_player_hit(e);
|
|
56
|
+
else
|
|
57
|
+
on_enemy_shot(e, a - BOX_SHOT);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// hitbox.h: collision boxes per animation frame, tested only for the pairs
|
|
2
|
+
// that can hurt each other (per_frame_hitbox).
|
|
3
|
+
#ifndef HITBOX_H
|
|
4
|
+
#define HITBOX_H
|
|
5
|
+
|
|
6
|
+
#include "game.h"
|
|
7
|
+
|
|
8
|
+
// Boxes that enemies can hit: the ship, then the bullets.
|
|
9
|
+
#define BOX_PLAYER 0
|
|
10
|
+
#define BOX_SHOT 1 // 1-4, bullets 0-3
|
|
11
|
+
#define BOX_ENEMY 5 // the count of the above
|
|
12
|
+
|
|
13
|
+
void box_off(char slot);
|
|
14
|
+
void box_ship(char hx, char sy); // where the ship is drawn
|
|
15
|
+
void collide(void); // enemy bullets against the ship, then enemies
|
|
16
|
+
// from the actor table against these
|
|
17
|
+
|
|
18
|
+
// What collide() reports; main.c decides what a hit does.
|
|
19
|
+
void on_enemy_shot(char e, char bullet);
|
|
20
|
+
void on_player_hit(char e); // enemy e rammed the ship
|
|
21
|
+
void on_ship_shot(char j); // enemy bullet j hit the ship
|
|
22
|
+
|
|
23
|
+
#pragma compile("hitbox.c")
|
|
24
|
+
|
|
25
|
+
#endif
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
// kernel.asm: the display and sound kernel of shmup-vertical. The harness
|
|
2
|
+
// assembles it (with mux.asm and sound.asm) to build/asm.bin, a raw blob
|
|
3
|
+
// from $0880, and writes build/asm.h so C can reach every label below as
|
|
4
|
+
// ASM_<LABEL>. C places the blob with #pragma region and calls it with jsr.
|
|
5
|
+
//
|
|
6
|
+
// It owns the raster IRQ. One chain runs every frame:
|
|
7
|
+
//
|
|
8
|
+
// line 252 frame IRQ playfield $D011/$D018/$D016/$D021, first eight
|
|
9
|
+
// sprites, frame_flag = 1 for the C main loop
|
|
10
|
+
// zones zone IRQs reuse the eight sprites further down (mux.asm)
|
|
11
|
+
// line 212 split IRQ the panel: $D011, $D018, $D016 from line 214's
|
|
12
|
+
// right border, $D021 after the panel's badline;
|
|
13
|
+
// sprites off; then the music (sound.asm)
|
|
14
|
+
//
|
|
15
|
+
// The split is c64-kb's kickassembler/scroll-panel-split recipe (technique
|
|
16
|
+
// scroll_panel_split): the panel starts on line 215 with YSCROLL 7, and the
|
|
17
|
+
// wait before the writes comes from a table indexed by the playfield's
|
|
18
|
+
// YSCROLL, short at YSCROLL 6, where line 214 is a badline. The playfield
|
|
19
|
+
// here is multicolour and 40 columns; the delays are the recipe's. Changed:
|
|
20
|
+
// $D016 is written last, not first (see split_stores), and the split has
|
|
21
|
+
// its own vector entry (see arm_split).
|
|
22
|
+
//
|
|
23
|
+
// Nothing here uses zero page: Oscar64 owns $02-$52. KERNAL and BASIC are
|
|
24
|
+
// banked out ($01 = $35), so the vectors are $FFFE and $FFFA.
|
|
25
|
+
//
|
|
26
|
+
// Frame meter: CIA2 timer B adds up the time of every IRQ that does not land
|
|
27
|
+
// inside the C main loop's own bracket (mtr_open = 0); an IRQ inside it is
|
|
28
|
+
// already in that bracket's wall time. The frame IRQ hands the sum of the
|
|
29
|
+
// frame that just ended to C (irq_cyc, irq_cnt start/stop pairs). C sets
|
|
30
|
+
// mtr_open to 1 for good in a build without the meter. The split IRQ starts
|
|
31
|
+
// timer B only after its panel writes, so its timing stays the recipe's;
|
|
32
|
+
// split_prev tells C to add those first cycles (a constant it measured).
|
|
33
|
+
|
|
34
|
+
.const PF_A = $8000 // playfield screen 0 (VIC bank 2, $8000-$BFFF)
|
|
35
|
+
.const PF_B = $8400 // playfield screen 1
|
|
36
|
+
.const PANEL = $8800 // panel screen
|
|
37
|
+
.const PTRS_A = PF_A + $3f8
|
|
38
|
+
.const PTRS_B = PF_B + $3f8
|
|
39
|
+
.const PF_D016 = $d8 // multicolour, 40 columns, XSCROLL 0
|
|
40
|
+
.const PANEL_D016 = $c8 // hires, 40 columns
|
|
41
|
+
.const PANEL_D011 = $1f // DEN, RSEL = 1, YSCROLL 7: panel badlines 215, 223, ...
|
|
42
|
+
.const PANEL_D018 = $2e // screen $8800, characters $B800
|
|
43
|
+
.const PANEL_BG = 11 // dark grey
|
|
44
|
+
.const LAST_PF = 214 // last playfield line at every YSCROLL
|
|
45
|
+
.const SPLIT_LINE = 212 // split IRQ fires here and polls for LAST_PF
|
|
46
|
+
.const BOTTOM = 252 // frame IRQ, below the panel
|
|
47
|
+
|
|
48
|
+
* = $0880 "kernel"
|
|
49
|
+
|
|
50
|
+
// ---- shared with C --------------------------------------------------------
|
|
51
|
+
pf_d011: .byte $13 // $D011 for the next frame: DEN, 24 rows, YSCROLL
|
|
52
|
+
pf_d018: .byte $0e // $D018 for the next frame: which playfield screen
|
|
53
|
+
pf_bg: .byte 6 // $D021 for the playfield
|
|
54
|
+
frame_flag: .byte 0 // the frame IRQ sets 1; the main loop clears it
|
|
55
|
+
frame_cnt: .byte 0 // frame IRQs taken (wraps)
|
|
56
|
+
cur_y: .byte 0 // the YSCROLL the frame IRQ applied
|
|
57
|
+
mtr_open: .byte 1 // 1: IRQs do not time themselves
|
|
58
|
+
mtr_on: .byte 0 // 1: a meter build (C sets it once)
|
|
59
|
+
irq_own: .byte 1
|
|
60
|
+
irq_n: .byte 0 // start/stop pairs of timer B this frame
|
|
61
|
+
irq_cnt: .byte 0 // ... of the frame that just ended
|
|
62
|
+
irq_cyc: .word 0 // timer B count of the frame that just ended
|
|
63
|
+
irq_cal: .byte 0 // timer B count of one empty start/stop pair
|
|
64
|
+
save_a: .byte 0
|
|
65
|
+
save_x: .byte 0
|
|
66
|
+
save_y: .byte 0
|
|
67
|
+
next_hnd: .word bottom_body
|
|
68
|
+
count: .byte 0
|
|
69
|
+
|
|
70
|
+
// Called once from C with interrupts off. A = 0 PAL, 1 NTSC.
|
|
71
|
+
kernel_init:
|
|
72
|
+
jsr music_init
|
|
73
|
+
lda #$7f
|
|
74
|
+
sta $dc0d // no CIA interrupts
|
|
75
|
+
sta $dd0d
|
|
76
|
+
lda $dc0d
|
|
77
|
+
lda $dd0d
|
|
78
|
+
lda #$35 // KERNAL and BASIC out, I/O in
|
|
79
|
+
sta $01
|
|
80
|
+
lda #<irq_entry
|
|
81
|
+
sta $fffe
|
|
82
|
+
lda #>irq_entry
|
|
83
|
+
sta $ffff
|
|
84
|
+
lda #<nmi
|
|
85
|
+
sta $fffa
|
|
86
|
+
lda #>nmi
|
|
87
|
+
sta $fffb
|
|
88
|
+
lda #$ff // timer B: latch $FFFF, loaded, stopped
|
|
89
|
+
sta $dd06
|
|
90
|
+
sta $dd07
|
|
91
|
+
lda #$10
|
|
92
|
+
sta $dd0f
|
|
93
|
+
lda #$01 // one empty start/stop pair, for irq_cal
|
|
94
|
+
sta $dd0f
|
|
95
|
+
lda #$00
|
|
96
|
+
sta $dd0f
|
|
97
|
+
lda #$ff
|
|
98
|
+
sec
|
|
99
|
+
sbc $dd06
|
|
100
|
+
sta irq_cal
|
|
101
|
+
lda #$10
|
|
102
|
+
sta $dd0f
|
|
103
|
+
lda #<bottom_body
|
|
104
|
+
sta next_hnd
|
|
105
|
+
lda #>bottom_body
|
|
106
|
+
sta next_hnd+1
|
|
107
|
+
lda #BOTTOM
|
|
108
|
+
sta $d012
|
|
109
|
+
lda pf_d011 // bit 7 clear: the compare line is below 256
|
|
110
|
+
sta $d011
|
|
111
|
+
lda #$01
|
|
112
|
+
sta $d01a
|
|
113
|
+
sta $d019
|
|
114
|
+
rts
|
|
115
|
+
|
|
116
|
+
// ---- IRQ entry and exit ---------------------------------------------------
|
|
117
|
+
irq_entry:
|
|
118
|
+
sta save_a
|
|
119
|
+
lda mtr_open // inside the main loop's bracket: already timed
|
|
120
|
+
sta irq_own
|
|
121
|
+
bne !+
|
|
122
|
+
lda #$01
|
|
123
|
+
sta $dd0f // timer B resumes from its count
|
|
124
|
+
inc irq_n
|
|
125
|
+
!: stx save_x
|
|
126
|
+
sty save_y
|
|
127
|
+
cld
|
|
128
|
+
dispatch:
|
|
129
|
+
jmp (next_hnd)
|
|
130
|
+
|
|
131
|
+
irq_exit:
|
|
132
|
+
lda irq_own
|
|
133
|
+
bne !+
|
|
134
|
+
lda #$00
|
|
135
|
+
sta $dd0f
|
|
136
|
+
!: ldy save_y
|
|
137
|
+
ldx save_x
|
|
138
|
+
lda save_a
|
|
139
|
+
nmi: rti
|
|
140
|
+
|
|
141
|
+
// ---- frame IRQ, line 252 --------------------------------------------------
|
|
142
|
+
bottom_body:
|
|
143
|
+
lda mtr_on // a build without the meter skips the hand-over
|
|
144
|
+
beq bb_regs // (60 cycles a frame)
|
|
145
|
+
lda #$00 // the frame ends here: hand its IRQ time to C
|
|
146
|
+
sta $dd0f
|
|
147
|
+
lda #$ff
|
|
148
|
+
sec
|
|
149
|
+
sbc $dd06
|
|
150
|
+
sta irq_cyc
|
|
151
|
+
lda #$ff
|
|
152
|
+
sbc $dd07
|
|
153
|
+
sta irq_cyc+1
|
|
154
|
+
lda irq_n
|
|
155
|
+
sta irq_cnt
|
|
156
|
+
lda split_self
|
|
157
|
+
sta split_prev
|
|
158
|
+
lda #0
|
|
159
|
+
sta split_self
|
|
160
|
+
lda #$10
|
|
161
|
+
sta $dd0f // reload $FFFF, stopped
|
|
162
|
+
lda #0
|
|
163
|
+
sta irq_n
|
|
164
|
+
lda irq_own
|
|
165
|
+
bne !+
|
|
166
|
+
lda #$01 // the rest of this IRQ counts in the new frame
|
|
167
|
+
sta $dd0f
|
|
168
|
+
inc irq_n
|
|
169
|
+
!:
|
|
170
|
+
bb_regs:
|
|
171
|
+
lda pf_d011
|
|
172
|
+
sta $d011
|
|
173
|
+
and #7
|
|
174
|
+
sta cur_y
|
|
175
|
+
lda pf_d018
|
|
176
|
+
sta $d018
|
|
177
|
+
lda #PF_D016 // whole-register store: MCM and CSEL set on purpose
|
|
178
|
+
sta $d016
|
|
179
|
+
lda pf_bg
|
|
180
|
+
sta $d021
|
|
181
|
+
jsr mux_frame
|
|
182
|
+
lda #1
|
|
183
|
+
sta frame_flag
|
|
184
|
+
inc frame_cnt
|
|
185
|
+
ldx zidx
|
|
186
|
+
cpx zlast
|
|
187
|
+
beq no_zones
|
|
188
|
+
lda #<zone_body
|
|
189
|
+
sta next_hnd
|
|
190
|
+
lda #>zone_body
|
|
191
|
+
sta next_hnd+1
|
|
192
|
+
lda zline,x
|
|
193
|
+
jmp arm
|
|
194
|
+
no_zones:
|
|
195
|
+
jsr arm_split
|
|
196
|
+
jmp on_time
|
|
197
|
+
arm: sta $d012 // next frame's lines: no late check across the wrap
|
|
198
|
+
jmp on_time
|
|
199
|
+
|
|
200
|
+
// The split has its own vector entry, so the poll starts early in line 212
|
|
201
|
+
// as in the recipe. Through irq_entry it started about 30 cycles later, and
|
|
202
|
+
// at YSCROLL 5 on PAL (line 213 a badline) the panel's writes then landed in
|
|
203
|
+
// line 215 in 4 frames of every 12, following the music's cost: the panel's
|
|
204
|
+
// first row showed playfield characters (measured in VICE, then fixed so).
|
|
205
|
+
arm_split:
|
|
206
|
+
lda #<split_irq
|
|
207
|
+
sta $fffe
|
|
208
|
+
lda #>split_irq
|
|
209
|
+
sta $ffff
|
|
210
|
+
lda #SPLIT_LINE
|
|
211
|
+
sta $d012
|
|
212
|
+
rts
|
|
213
|
+
|
|
214
|
+
// ---- split IRQ, line 212 --------------------------------------------------
|
|
215
|
+
// Poll for line 214, wait delay_tbl[YSCROLL] passes, switch to the panel.
|
|
216
|
+
split_irq:
|
|
217
|
+
sta save_a // 12 cycles, like the recipe's three pushes
|
|
218
|
+
stx save_x
|
|
219
|
+
sty save_y
|
|
220
|
+
split_body: // a late zone jumps here, registers saved
|
|
221
|
+
ldx cur_y
|
|
222
|
+
lda delay_tbl,x
|
|
223
|
+
sta count
|
|
224
|
+
ldx #PANEL_D018 // everything loaded before the poll, so after
|
|
225
|
+
ldy #PANEL_D016 // a badline stall only the stores remain
|
|
226
|
+
lda #LAST_PF-1
|
|
227
|
+
waitline:
|
|
228
|
+
cmp $d012 // until $D012 > 213: never waits a whole frame
|
|
229
|
+
bcs waitline
|
|
230
|
+
lda #PANEL_D011
|
|
231
|
+
delay: dec count // absolute: 9 cycles a pass, 8 on the way out
|
|
232
|
+
bpl delay
|
|
233
|
+
// The writes start between cycle 58 of line 214 and cycle 0 of line 215 on
|
|
234
|
+
// PAL (58 to 64 on NTSC), the poll's jitter, measured under the VICE
|
|
235
|
+
// monitor at every YSCROLL. In the recipe's order ($D016 first) the $D018
|
|
236
|
+
// write came a cycle from too late at the far end: a run with it at cycle
|
|
237
|
+
// 12 of line 215 showed playfield characters in the panel's first row.
|
|
238
|
+
// $D016 last buys four cycles; it only switches multicolour off, and the
|
|
239
|
+
// panel's first pixels are background in both modes.
|
|
240
|
+
split_stores:
|
|
241
|
+
sta $d011 // before cycle 12 of line 215, the panel's badline
|
|
242
|
+
stx $d018 // before that badline's first screen fetch
|
|
243
|
+
sty $d016 // last: the panel's first pixels are blank either way
|
|
244
|
+
lda #LAST_PF
|
|
245
|
+
waitpanel:
|
|
246
|
+
cmp $d012 // until $D012 > 214
|
|
247
|
+
bcs waitpanel
|
|
248
|
+
nop // reads across cycle 12 of line 215: the panel's
|
|
249
|
+
nop // badline holds the CPU until cycle 55 at every
|
|
250
|
+
nop // phase, which removes the poll jitter
|
|
251
|
+
nop
|
|
252
|
+
lda #PANEL_BG
|
|
253
|
+
sta $d021 // right border of line 215
|
|
254
|
+
lda #0
|
|
255
|
+
sta $d015 // no sprite under the panel
|
|
256
|
+
cld
|
|
257
|
+
lda split_late // came from a late zone: its entry started timer B
|
|
258
|
+
bne !+
|
|
259
|
+
lda mtr_open // came through the vector: time the rest, as
|
|
260
|
+
sta irq_own // irq_entry does for every other IRQ
|
|
261
|
+
bne !+
|
|
262
|
+
lda #$01
|
|
263
|
+
split_tb_on:
|
|
264
|
+
sta $dd0f
|
|
265
|
+
inc irq_n
|
|
266
|
+
inc split_self // C adds the untimed start of this IRQ
|
|
267
|
+
!: lda #0
|
|
268
|
+
sta split_late
|
|
269
|
+
jsr music_play
|
|
270
|
+
lda #<irq_entry
|
|
271
|
+
sta $fffe
|
|
272
|
+
lda #>irq_entry
|
|
273
|
+
sta $ffff
|
|
274
|
+
lda #<bottom_body
|
|
275
|
+
sta next_hnd
|
|
276
|
+
lda #>bottom_body
|
|
277
|
+
sta next_hnd+1
|
|
278
|
+
lda #BOTTOM
|
|
279
|
+
sta $d012
|
|
280
|
+
jmp on_time
|
|
281
|
+
|
|
282
|
+
split_late: .byte 0
|
|
283
|
+
split_self: .byte 0 // this frame's split started timer B late ...
|
|
284
|
+
split_prev: .byte 0 // ... and the frame that just ended
|
|
285
|
+
|
|
286
|
+
// Delay passes per playfield YSCROLL (dec abs / bpl: 9 cycles a pass).
|
|
287
|
+
delay_tbl:
|
|
288
|
+
.byte 5, 5, 5, 5, 5, 5, 0, 5
|
|
289
|
+
|
|
290
|
+
// copy_rows: three playfield rows, 120 bytes from row_src to row_dst, for
|
|
291
|
+
// level.c. C writes both addresses; the patch step points each of three
|
|
292
|
+
// load/store pairs at one row (+0, +40, +80), and the loop moves a column of
|
|
293
|
+
// three bytes a pass: 32 cycles a column, 1,280 a call, against 12.5 a byte
|
|
294
|
+
// (about 1,500) for the two-byte loop it replaces (arithmetic). The idea is
|
|
295
|
+
// the other #39 version's copy3.
|
|
296
|
+
row_src: .word 0
|
|
297
|
+
row_dst: .word 0
|
|
298
|
+
copy_rows:
|
|
299
|
+
.for (var k = 0; k < 3; k++) {
|
|
300
|
+
lda row_src
|
|
301
|
+
clc
|
|
302
|
+
adc #40 * k
|
|
303
|
+
sta cr_ld + 6 * k + 1
|
|
304
|
+
lda row_src+1
|
|
305
|
+
adc #0
|
|
306
|
+
sta cr_ld + 6 * k + 2
|
|
307
|
+
lda row_dst
|
|
308
|
+
clc
|
|
309
|
+
adc #40 * k
|
|
310
|
+
sta cr_ld + 6 * k + 4
|
|
311
|
+
lda row_dst+1
|
|
312
|
+
adc #0
|
|
313
|
+
sta cr_ld + 6 * k + 5
|
|
314
|
+
}
|
|
315
|
+
ldx #39
|
|
316
|
+
cr_loop:
|
|
317
|
+
cr_ld:
|
|
318
|
+
.for (var k = 0; k < 3; k++) {
|
|
319
|
+
lda $ffff,x // patched above
|
|
320
|
+
sta $ffff,x
|
|
321
|
+
}
|
|
322
|
+
dex
|
|
323
|
+
bpl cr_loop
|
|
324
|
+
rts
|
|
325
|
+
|
|
326
|
+
#import "mux.asm"
|
|
327
|
+
#import "sound.asm"
|
|
328
|
+
#import "glyph.asm"
|
|
329
|
+
#import "hit.asm"
|
|
330
|
+
#import "step.asm"
|