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,349 @@
|
|
|
1
|
+
<!-- doc-type: reference -->
|
|
2
|
+
|
|
3
|
+
# Production Planning for C64 Games and Demos
|
|
4
|
+
|
|
5
|
+
How people who shipped C64 software decided what to build first, how much
|
|
6
|
+
memory each part could have, how big the game could be, and what tools they
|
|
7
|
+
wrote. These are design patterns, not techniques: decisions taken before or
|
|
8
|
+
between the techniques, each naming the techniques and recipes here that
|
|
9
|
+
carry it out. Every fact is attributed to a person and a year; a number is
|
|
10
|
+
theirs or is shown as a sum. Nothing on this page was measured in VICE.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## build_order — Build the thing everything depends on first
|
|
15
|
+
|
|
16
|
+
**Kind:** production
|
|
17
|
+
|
|
18
|
+
**Applies to:** scrolling_platformer, horizontal_shmup, vertical_shmup, single_screen_platformer, top_down_adventure, action_puzzle, beat_em_up, racing
|
|
19
|
+
|
|
20
|
+
**Realised by:** soft_scroll_h, infinite_scroll_h, tile_map_render, tile_grid_collision, wave_director, object_pool, logic_rate_decoupling, memory_layout_plan, platformer-scaffold, simple-shmup, tile-map-render, soft-scroll-h, memory-layout
|
|
21
|
+
|
|
22
|
+
**Sources:** John and Steve Rowlands (Commodore Format, 1992 to 1993); Peter Liepa (interview transcript published by BBG Entertainment, 2022); Manfred Trenz (Recollection diskmag interview); Jeff Minter (COMPUTE!'s Gazette, August 1983); Codebase64 wiki guide to programming games (unattributed); Chris Crawford, The Art of Computer Game Design (1984, 1997 electronic edition)
|
|
23
|
+
|
|
24
|
+
**Checks:**
|
|
25
|
+
|
|
26
|
+
- Boots and scrolls the level as a runnable PRG before any enemy module is linked in.
|
|
27
|
+
- Runs the same entity positions after a fixed frame count whether the placeholder art or the final art is loaded.
|
|
28
|
+
- Builds each milestone in the plan as its own PRG that reaches a screen in VICE.
|
|
29
|
+
- Keeps a memory map file in the repository before the first full build, and the linker map agrees with it.
|
|
30
|
+
|
|
31
|
+
**Why.** The order in which parts are built decides how much rework there is.
|
|
32
|
+
The Rowlands brothers wrote in Commodore Format in December 1992 that they
|
|
33
|
+
could not start on player-to-enemy collision because there were no enemies
|
|
34
|
+
yet, and could not write the enemies until the scrolling worked, because the
|
|
35
|
+
enemies are tied to the scrolling level. Their priority list therefore put
|
|
36
|
+
the screen-handling routines first. John Rowlands spent weeks on the scroll
|
|
37
|
+
code before anything sat on top of it.
|
|
38
|
+
|
|
39
|
+
Peter Liepa's account of Boulder Dash (2022) shows the same rule applied to a
|
|
40
|
+
physics game. The first thing he worked on was making the rocks and the
|
|
41
|
+
digging behave, because the physics had to be interesting before anything
|
|
42
|
+
else mattered. At that stage dirt was drawn as squares, rocks as circles and
|
|
43
|
+
the player as a plus sign. The name came four or five months in.
|
|
44
|
+
|
|
45
|
+
Manfred Trenz (Recollection interview) said he coded small test programs to
|
|
46
|
+
see whether an approach was the right one before committing to it, and gave
|
|
47
|
+
the large sprite routines in Katakis as the example; the plan should name
|
|
48
|
+
the test program behind each risky routine, a reader's check rather than a
|
|
49
|
+
harness's. Jeff Minter, interviewed in COMPUTE!'s Gazette in August 1983,
|
|
50
|
+
described adding very small pieces one at a time as a disciplined style, and
|
|
51
|
+
said Attack of the Mutant Camels took four or five weeks.
|
|
52
|
+
|
|
53
|
+
**The shape.** Two written plans exist that an agent can follow. The
|
|
54
|
+
Codebase64 guide names eight stages, paraphrased here: plan and talk the idea
|
|
55
|
+
through; design on paper, including sketched maps and the graphics; code the
|
|
56
|
+
core routines; add sound; add the presentation screens; fix bugs; hand the
|
|
57
|
+
build to testers; compress. Chris Crawford's chapter on the design sequence
|
|
58
|
+
(1984) puts a design phase before any code, made of three structures worked
|
|
59
|
+
out together: the I/O structure (what the player sees and touches), the game
|
|
60
|
+
structure (the causal rules and obstacles) and the program structure, of
|
|
61
|
+
which he says the memory map is one of the most important elements. He then
|
|
62
|
+
asks for an evaluation pass before programming: does the design meet its
|
|
63
|
+
goals, can any value run away without bounds, is there a shortcut to victory,
|
|
64
|
+
and should the project be aborted now rather than later. He says most of his
|
|
65
|
+
own designs were aborted at that stage, and that no more than five or six
|
|
66
|
+
playtesters should ever be used.
|
|
67
|
+
|
|
68
|
+
A build order that fits both plans and the diaries:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
step deliverable proves
|
|
72
|
+
1 memory map on paper the parts fit
|
|
73
|
+
2 scrolling or playfield engine the dependency root works
|
|
74
|
+
3 player movement on placeholder art the feel
|
|
75
|
+
4 one enemy, one collision the core loop
|
|
76
|
+
5 level data from an editor content can scale
|
|
77
|
+
6 music and effects in their budget the raster and RAM plan holds
|
|
78
|
+
7 title, get-ready, game-over states the state machine is complete
|
|
79
|
+
8 tests outside the team, then pack it ships
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**What breaks when it is skipped.** Enemies built before the scroller are
|
|
83
|
+
rewritten when the scroll representation changes; final art drawn before the
|
|
84
|
+
physics is redrawn when the tile size changes; a risky routine never proved
|
|
85
|
+
in a test program is found too slow when everything already depends on it.
|
|
86
|
+
|
|
87
|
+
**Variations.** A single-screen game's dependency root is the playfield and
|
|
88
|
+
collision grid; a demo's is the loader (`../demo-design/demo-design-philosophy.md`).
|
|
89
|
+
|
|
90
|
+
Related: `./game-design-patterns.md`, `./c64-game-archetypes.md`,
|
|
91
|
+
`../toolchains/memory-layout-planning.md`.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## memory_budget_first — Music and every other part get a byte budget before the code
|
|
96
|
+
|
|
97
|
+
**Kind:** production
|
|
98
|
+
|
|
99
|
+
**Applies to:** scrolling_platformer, horizontal_shmup, vertical_shmup, single_screen_platformer, top_down_adventure, puzzle, action_puzzle, beat_em_up, racing, sports, demo_intro, dentro
|
|
100
|
+
|
|
101
|
+
**Realised by:** memory_layout_plan, sid_play_routine_pattern, sfx_engine_beside_music, exomizer_basics, multi_load_sequencing, memory-layout, sid-music-player, sfx-engine, level-rle-decoder
|
|
102
|
+
|
|
103
|
+
**Sources:** Chris Butler interviewed by Gary Penn (Zzap!64 issue 17, September 1986); Manfred Trenz (Recollection diskmag interview); Andrew Braybrook, Birth of a Paradroid (Zzap!64, 1985); Dane of Booze Design (Vandalism News issue 65)
|
|
104
|
+
|
|
105
|
+
**Checks:**
|
|
106
|
+
|
|
107
|
+
- Lists every part of the program with a byte figure in a budget file, and the figures sum to no more than the RAM the plan claims.
|
|
108
|
+
- Places the music player and tune data inside the region the budget reserves for them, as read from the linker map.
|
|
109
|
+
- Finishes the music play call inside its raster allowance on PAL and on NTSC.
|
|
110
|
+
- Leaves the amount of free RAM the budget promised after the final link, or records the overflow with a date.
|
|
111
|
+
|
|
112
|
+
**Why.** Music is the part most often squeezed out, because it arrives last
|
|
113
|
+
and needs a fixed block of RAM and a fixed slice of every frame. Chris Butler
|
|
114
|
+
told Zzap!64 in 1986 that Commando was completely finished when Rob Hubbard
|
|
115
|
+
came to add the music, said he needed about 6K, and there was no room; a
|
|
116
|
+
level was cut to make it. Manfred Trenz said he hated playing Turrican
|
|
117
|
+
without in-game music, and that there was no possibility of putting it in.
|
|
118
|
+
Dane of Booze Design said a continuous soundtrack in a C64 demo is tricky
|
|
119
|
+
precisely because the visuals and effects on screen limit the memory and
|
|
120
|
+
raster time left for it.
|
|
121
|
+
|
|
122
|
+
**The shape.** Andrew Braybrook's Paradroid diary (1985) is the worked
|
|
123
|
+
example. He set out to use the 64K of RAM plus the 4K under the I/O area,
|
|
124
|
+
which he calls a 68K plan (64 + 4 = 68). He allowed about 2K for the game's
|
|
125
|
+
text and found he needed more like 4K; a smaller patrol-route table freed the
|
|
126
|
+
space, and the text went under the I/O devices. Earlier in the same diary the
|
|
127
|
+
transfer sub-game grew to about 2K once its presentation was added, larger
|
|
128
|
+
than he had planned for, and had to be squeezed in; a week later the last
|
|
129
|
+
spare 4K went to deck data. The budget was written first, overflowed in two
|
|
130
|
+
places, and was rebalanced rather than abandoned.
|
|
131
|
+
|
|
132
|
+
A budget file an agent can keep alongside the source:
|
|
133
|
+
|
|
134
|
+
```text
|
|
135
|
+
part reserved measured note
|
|
136
|
+
game code --- ---
|
|
137
|
+
level data --- --- packed or raw, say which
|
|
138
|
+
charsets --- --- per VIC bank
|
|
139
|
+
sprites --- --- per VIC bank
|
|
140
|
+
music player --- --- player and tune together
|
|
141
|
+
sound effects --- --- tables and code
|
|
142
|
+
text --- --- Braybrook doubled his
|
|
143
|
+
free --- --- the overflow reserve
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Fill the reserved column before the first build and the measured column from
|
|
147
|
+
the linker map after each one. For demos, Dane's remark implies a budget per
|
|
148
|
+
part: each part hands the music a memory and raster allowance to write to.
|
|
149
|
+
|
|
150
|
+
**What breaks when it is skipped.** The game ships without music (Trenz), or
|
|
151
|
+
a level is cut at the end to make room (Butler), or the play call overruns
|
|
152
|
+
the frame on NTSC because it was never given a slice.
|
|
153
|
+
|
|
154
|
+
**Variations.** A multi-load game can budget per level and reload the music
|
|
155
|
+
with it; a single-load game cannot. Butler's own saving in his next game was
|
|
156
|
+
character graphics in place of sprites in Space Harrier, to save memory.
|
|
157
|
+
|
|
158
|
+
Related: `../toolchains/memory-layout-planning.md`, `../techniques/memory-banking.md`,
|
|
159
|
+
`../techniques/music-sid.md`, `../music/music-production-reference.md`.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## scope_and_region — Decide the load model, the video standard and the schedule margin at the start
|
|
164
|
+
|
|
165
|
+
**Kind:** production
|
|
166
|
+
|
|
167
|
+
**Applies to:** scrolling_platformer, horizontal_shmup, vertical_shmup, single_screen_platformer, top_down_adventure, puzzle, action_puzzle, beat_em_up, racing, sports, demo_intro, dentro, party_intro_4k
|
|
168
|
+
|
|
169
|
+
**Realised by:** pal_ntsc_detection, multi_load_sequencing, exomizer_basics, sprite_multiplex_game, logic_rate_decoupling, pal-ntsc-detect, memory-layout, sprite-multiplex-game
|
|
170
|
+
|
|
171
|
+
**Sources:** Sarah Jane Avory (development blog, 10 September 2020); Andrew Braybrook, Mental Procreation (Zzap!64, 1987); Chris Butler (Zzap!64 issue 17, 1986); Manfred Trenz (Recollection diskmag interview); psenough, Teach Yourself Demoscene in 14 Days (MIT licensed guide); Kodiak64 (Seawolves sales post, July 2025)
|
|
172
|
+
|
|
173
|
+
**Checks:**
|
|
174
|
+
|
|
175
|
+
- Reaches the first level from one file load when the plan says single-load.
|
|
176
|
+
- Runs to the end of a level under `-model ntsc` without the frame counter skipping.
|
|
177
|
+
- Stretches each PAL map section to the NTSC height the plan states, and the section count is the same on both.
|
|
178
|
+
- Takes the same number of seconds to traverse a section on PAL and on NTSC, within one frame.
|
|
179
|
+
- Keeps the on-screen sprite count at or below the limit the plan set for NTSC.
|
|
180
|
+
|
|
181
|
+
**Why.** Three decisions set the ceiling on everything else: how many loads,
|
|
182
|
+
which video standards, and how much time. Each is cheap on day one and
|
|
183
|
+
expensive on the last day.
|
|
184
|
+
|
|
185
|
+
**Load model.** Sarah Jane Avory wrote in September 2020 that she made Zeta
|
|
186
|
+
Wing a single load to keep the scope down and to avoid feature creep, and
|
|
187
|
+
that the limits this imposes are the challenge. The core of the game was the
|
|
188
|
+
engine from her earlier game Santron, with updates from Soul Force, so the
|
|
189
|
+
scope decision sat on reused code rather than on a new engine.
|
|
190
|
+
|
|
191
|
+
**Video standard.** NTSC runs at 60 frames per second to PAL's 50, so a
|
|
192
|
+
raster-synchronised game gets less CPU time per frame. Braybrook's figure in
|
|
193
|
+
the Morpheus diary (1987) is that American machines run about 16 percent
|
|
194
|
+
slower on raster-synchronised games, and his rule was that everything in the
|
|
195
|
+
European version had to leave at least 16 percent spare processor time; he
|
|
196
|
+
later capped the multiplexer at 24 sprites to safeguard the NTSC build. His
|
|
197
|
+
16 percent is a frame-rate figure (50 / 60 = 0.83). Counting cycles from the
|
|
198
|
+
constants in `../hardware/pal-ntsc-reference.md`, a PAL frame is 19,656
|
|
199
|
+
cycles and a 6567R8 NTSC frame is 17,095; 17,095 / 19,656 = 0.87, so about
|
|
200
|
+
13 percent fewer cycles per frame. Not measured here. Avory's answer to the
|
|
201
|
+
same problem is data rather than time: Zeta Wing's PAL map sections are 10
|
|
202
|
+
blocks high and are stretched to 12 for NTSC by copying the first two rows
|
|
203
|
+
again, because there is no RAM for two maps. NTSC then scrolls faster over
|
|
204
|
+
more data and a section takes the same time on both (12 / 10 = 1.2 = 60 /
|
|
205
|
+
50).
|
|
206
|
+
|
|
207
|
+
**Schedule.** Chris Butler told Zzap!64 he was given about eight weeks to
|
|
208
|
+
write Commando, that it was messy because it was his first time splitting
|
|
209
|
+
sprites, and that there were a lot of bugs, in the gameplay too, because he
|
|
210
|
+
did not have time. Trenz gave 6.5 weeks for the R-Type conversion under
|
|
211
|
+
pressure. psenough's demoscene guide advises reserving buffer time to redo
|
|
212
|
+
or scrap work, typically an extra 20 to 50 percent, and to start small and
|
|
213
|
+
build on what works. The plan should also record a delivery date and a
|
|
214
|
+
non-zero buffer; no build check sees this.
|
|
215
|
+
|
|
216
|
+
**Sales.** One modern data point, Kodiak64's own figure for Seawolves,
|
|
217
|
+
posted in July 2025: about 110 units over 15 months, 700 to 800 pounds, and the game on
|
|
218
|
+
file-sharing sites within 72 hours of release. Roughly 7 units a month
|
|
219
|
+
(110 / 15 = 7.3); one game, one channel, not a market figure.
|
|
220
|
+
|
|
221
|
+
**What breaks when it is skipped.** A PAL-only game tears or drops frames
|
|
222
|
+
on NTSC; a game designed as multi-load and then squeezed to a single file
|
|
223
|
+
loses levels late; an eight-week schedule with no buffer ships its bugs.
|
|
224
|
+
|
|
225
|
+
**Variations.** A game can detect the standard at boot and pick a map set,
|
|
226
|
+
a sprite cap or a logic rate; the Realised-by recipes do the detection. A
|
|
227
|
+
demo's equivalent is trackmo versus parts joined by a key press
|
|
228
|
+
(`../demo-design/demo-design-philosophy.md`).
|
|
229
|
+
|
|
230
|
+
Related: `../techniques/raster.md`, `../techniques/loaders-packers.md`,
|
|
231
|
+
`../toolchains/release-disk.md`.
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## tooling_and_editors — Every component gets an editor, and the level editor runs the game's own routines
|
|
236
|
+
|
|
237
|
+
**Kind:** production
|
|
238
|
+
|
|
239
|
+
**Applies to:** scrolling_platformer, horizontal_shmup, vertical_shmup, single_screen_platformer, top_down_adventure, puzzle, action_puzzle, beat_em_up, racing
|
|
240
|
+
|
|
241
|
+
**Realised by:** tile_map_render, tile_grid_collision, charset_animation, table_generation, actor_activation_window, level-rle-decoder, tile-map-render, wave-director, headless-verify
|
|
242
|
+
|
|
243
|
+
**Sources:** Manfred Trenz (Recollection diskmag interview); John and Steve Rowlands (Commodore Format, 1993); Andrew Braybrook, Birth of a Paradroid (Zzap!64, 1985)
|
|
244
|
+
|
|
245
|
+
**Checks:**
|
|
246
|
+
|
|
247
|
+
- Generates every level table in the build from an editor file, with no hand-typed hex in the source.
|
|
248
|
+
- Loads each level file both in the editor and in the game without a conversion step.
|
|
249
|
+
- Changes the matching tile in the VICE screenshot after one map cell is edited and the build is rerun.
|
|
250
|
+
- Flags duplicate and unused characters in a charset with a build-time tool rather than by eye.
|
|
251
|
+
|
|
252
|
+
**Why.** Manfred Trenz's rule was that every part of a game had to be quick
|
|
253
|
+
to make and quick to alter, which is why each of his games came with its own
|
|
254
|
+
set of editors and small tools. The cost of not having them is in
|
|
255
|
+
Braybrook's Paradroid diary: in one entry he converted the remaining twelve
|
|
256
|
+
decks to hex and keyed them in, about five hours for each of the two steps
|
|
257
|
+
by his figure, so around ten hours (5 + 5 = 10) before the next day's corrections.
|
|
258
|
+
|
|
259
|
+
**The shape.** John Rowlands wrote in Commodore Format in March 1993 that
|
|
260
|
+
the Mayhem in Monsterland map editor shared the game's own scroll and draw
|
|
261
|
+
code, so that Steve could design a level and then switch straight to the
|
|
262
|
+
game to test it. The editor was the one from Creatures with the Creatures
|
|
263
|
+
scroll code swapped for the Mayhem scroll code, and it carried a small
|
|
264
|
+
graphics editor so any part of a level's appearance could be adjusted in
|
|
265
|
+
place. The workflow he describes is: put the platforms into blocks; load the
|
|
266
|
+
blocks, the character set and the character colours into the editor; design;
|
|
267
|
+
play. Later parts of the diary add utilities that check block designs for
|
|
268
|
+
duplicate and missing characters, and an editor that converts a level's
|
|
269
|
+
happy tileset to its sad one.
|
|
270
|
+
|
|
271
|
+
The general form is one tool per data table:
|
|
272
|
+
|
|
273
|
+
```text
|
|
274
|
+
data table editor or generator checked by
|
|
275
|
+
tile blocks block editor duplicate-char scan
|
|
276
|
+
level map map editor on game scroller play from the editor
|
|
277
|
+
enemy placements same map editor, layer 2 activation window test
|
|
278
|
+
charset char editor unused-char scan
|
|
279
|
+
sprite frames sprite editor frame count vs table
|
|
280
|
+
music tracker play-call cycle count
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
On a modern host the editors run on the PC and the game's routines are
|
|
284
|
+
exercised by running the PRG headlessly; the `headless-verify` recipes and
|
|
285
|
+
`../art/asset-pipelines.md` cover the path from editor file to build bytes.
|
|
286
|
+
|
|
287
|
+
**What breaks when it is skipped.** Hand-keyed data costs hours per level
|
|
288
|
+
and hides transcription errors until play. An editor that renders with its
|
|
289
|
+
own code shows a level the game then draws differently. Steve Rowlands ran
|
|
290
|
+
out of graphic space in the landscape designer in January 1993 and had to
|
|
291
|
+
wait for John to change the editor: the editor's limits are part of the plan.
|
|
292
|
+
|
|
293
|
+
**Variations.** A puzzle or flip-screen game can use a text-file level format
|
|
294
|
+
and a build-time converter instead; `level-rle-decoder` shows the runtime half.
|
|
295
|
+
|
|
296
|
+
Related: `../art/asset-pipelines.md`, `../art/art-production-reference.md`,
|
|
297
|
+
`../techniques/scroll.md`, `../techniques/logic.md`.
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## where_the_documents_are — What survives from the period, and on what terms
|
|
302
|
+
|
|
303
|
+
**Kind:** production
|
|
304
|
+
|
|
305
|
+
**Applies to:** scrolling_platformer, horizontal_shmup, vertical_shmup, single_screen_platformer, top_down_adventure, puzzle, action_puzzle, beat_em_up, racing, sports, cracktro, demo_intro, dentro, party_intro_4k
|
|
306
|
+
|
|
307
|
+
**Realised by:** memory_layout_plan, memory-layout
|
|
308
|
+
|
|
309
|
+
**Sources:** Video Game History Foundation library announcement (30 January 2025); the diaries and interviews named on this page
|
|
310
|
+
|
|
311
|
+
**Checks:**
|
|
312
|
+
|
|
313
|
+
- Ships a sources file in the build's documentation that names an author and a year for every design fact the documentation cites.
|
|
314
|
+
|
|
315
|
+
The rest is the writer's discipline, not a build property: a person and a
|
|
316
|
+
year for every fact, no unlicensed scan linked, every number the source's or
|
|
317
|
+
arithmetic.
|
|
318
|
+
|
|
319
|
+
**Why.** An agent asked for a period design document will not find one.
|
|
320
|
+
None of the sources read for this page is an internal 1980s design memo;
|
|
321
|
+
what survives is what developers published at the time and said later.
|
|
322
|
+
|
|
323
|
+
- Developer diaries in magazines, written while the game was being made:
|
|
324
|
+
Braybrook's Paradroid and Morpheus diaries in Zzap!64 (1985, 1987) and
|
|
325
|
+
the Rowlands brothers' Mayhem in Monsterland diary in Commodore Format
|
|
326
|
+
(1992 to 1993). The text is the publisher's copyright and transcriptions
|
|
327
|
+
carry no licence of their own: take facts, name the author and the issue.
|
|
328
|
+
- Diskmag interviews, retrospective: Manfred Trenz and Dane of Booze Design
|
|
329
|
+
in Recollection and Vandalism News. No licence is stated; same rule.
|
|
330
|
+
- Modern developer blogs and posts: Sarah Jane Avory, Kodiak64, and the
|
|
331
|
+
Codebase64 wiki, which is CC BY-NC-SA and so cannot enter this
|
|
332
|
+
BSD-licensed repository beyond its facts.
|
|
333
|
+
- Books: Chris Crawford's 1984 text is online in a 1997 electronic edition
|
|
334
|
+
with his permission, the only period book found with a full design sequence.
|
|
335
|
+
|
|
336
|
+
The Video Game History Foundation's library, announced on 30 January 2025,
|
|
337
|
+
makes over 1,500 out-of-print magazines full-text searchable, the fastest
|
|
338
|
+
way to find a diary entry by phrase. The foundation states that it does not
|
|
339
|
+
own the intellectual property in the library and cannot give permission to
|
|
340
|
+
reproduce it, and that it operates under US fair-use guidelines; what a
|
|
341
|
+
reader may do with a page is the reader's own question. Museum finding aids
|
|
342
|
+
for arcade-era play-test records exist but were not readable from this
|
|
343
|
+
machine, so nothing about their contents is claimed here.
|
|
344
|
+
|
|
345
|
+
**What breaks when it is skipped.** A paraphrase of a paraphrase drifts:
|
|
346
|
+
Braybrook's 16 percent becomes a fifth, Butler's 6K a few K. Take the
|
|
347
|
+
number from the sentence the person wrote.
|
|
348
|
+
|
|
349
|
+
Related: `./game-design-patterns.md`, `../demo-design/demo-design-philosophy.md`.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<!-- doc-type: reference -->
|
|
2
|
+
|
|
3
|
+
# Reference Game Sources: what an agent may read, and what it may copy
|
|
4
|
+
|
|
5
|
+
When a mechanism is not in this knowledge base, the next best thing is a
|
|
6
|
+
complete game that does it. This page lists the public C64 game, engine,
|
|
7
|
+
loader and packer sources, what each holds, the licence each states, and
|
|
8
|
+
what this repository may do with it. The repository is BSD-3-Clause
|
|
9
|
+
(`LICENSE`), so a source's licence decides whether its code or text can
|
|
10
|
+
enter a page here.
|
|
11
|
+
|
|
12
|
+
Every licence below was read at its source on 2026-09-23: the repository's
|
|
13
|
+
`LICENSE` file, the licence section of its README, the file headers, or the
|
|
14
|
+
site footer. "No licence" means none was found in those places. Nothing on
|
|
15
|
+
this page is legal advice; it records what each source says.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## The sources
|
|
20
|
+
|
|
21
|
+
"Adapt" means code may be adapted with attribution and the licence notice
|
|
22
|
+
kept. "Facts only" means read it for mechanisms, formats, table layouts and
|
|
23
|
+
names; write original code and prose.
|
|
24
|
+
|
|
25
|
+
| Source | URL | What it holds | Licence as stated (where read) | This KB may | Already cited by |
|
|
26
|
+
|---|---|---|---|---|---|
|
|
27
|
+
| c64gameframework (Lasse Öörni, Cadaver) | https://github.com/cadaver/c64gameframework | Multidirectional scrolling game framework: scroll, 24-sprite multiplexer, sprite cache, actors, loader, level and sprite editors. A modified version runs MW ULTRA (repository description). | MIT, full text in the README "License" section, "Copyright (c) 2018-2026 Lasse Öörni". There is no `LICENSE` file, so GitHub's licence field shows none. | Adapt | `techniques/logic.md`, `raster.md`, `scroll.md`, `sprite.md`, `file-io.md`, `loaders-packers.md`, `music-sid.md`; `pitfalls/raster-and-badline.md`; `recipes/kickassembler/easyflash-save.md`, `scroll-panel-split.md`, `sprite-multiplex-game.md` |
|
|
28
|
+
| Hessian (Cadaver) | https://github.com/cadaver/hessian | A complete action adventure game. | README "Code license": program code (`.s` files excluding story and dialogue text), tool code and build scripts are MIT. README "Content license": graphics, levels, music, sound effects and story text are "All rights reserved". | Adapt the code; do not use the content | `techniques/logic.md` |
|
|
29
|
+
| Steel Ranger demo (Cadaver) | https://github.com/cadaver/steelranger-demo | Source of the free demo of Steel Ranger. | README: code, tools and build scripts MIT (2016-2018); graphics, levels, music, sound effects and text "All rights reserved". | Adapt the code; do not use the content | none |
|
|
30
|
+
| Other Covert Bitops sources: Metal Warrior 1 to 4, MW4 Dojo Preview, Escape From New York, BOFH, Advanced Action Movie Simulator, the Amiga and GBA ports | https://cadaver.github.io/games.html | Zipped game sources. Steel Ranger 2 and MW ULTRA have no source link there. | No licence. `games.html` states none; `mw4src.zip` (V1.2) holds no licence file, and its `readme.txt` and `doc/manual.txt` state none. | Facts only | none |
|
|
31
|
+
| Cadaver's articles ("rants") | https://cadaver.github.io/rants/ | Articles on multiplexing, scrolling, interpolation, sprite caches, loaders. | No licence (issue #21 records none). | Facts only | `techniques/logic.md`, `scroll.md`, `sprite.md`, `loaders-packers.md`, `text-mode-render.md`; `recipes/kickassembler/sprite-multiplex-game.md`, `recipes/oscar64/iffl-kernal-skip.md` |
|
|
32
|
+
| Bitfire (Tobias Bindhammer, Bitbreaker) | https://github.com/bboxy/bitfire | Demo loader and framework with a built-in decompressor. | BSD-3-Clause, `LICENSE` file, "Copyright (c) 2021, Tobias Bindhammer". | Adapt | `pitfalls/loader.md`, `techniques/loaders-packers.md` |
|
|
33
|
+
| Sparkle (Sparta/OMG) | https://github.com/spartaomg/SparkleCPP | IRQ loader and disk linker. | BSD-3-Clause, `LICENSE` file, "Copyright (c) 2019-2026, Sparta/OMG". | Adapt | `pitfalls/loader.md`; `techniques/loaders-packers.md`, `memory-banking.md`; `recipes/kickassembler/irq-owns-port.md` |
|
|
34
|
+
| Krill's Loader (Gunnar Ruthenberg) | `loader-v194.zip` from CSDb ("Repository Version 194"); there is no public git repository (`techniques/loaders-packers.md`) | IRQ loader, drive code, decompressors, bundled tools. | README "License" section in the v194 zip: BSD-3-Clause wording, "Copyright 2022 Gunnar Ruthenberg", with a credit request ("Loader by Krill") and a binary clause that wants that credit in the production or in documentation inside the release archive; a website credit alone does not count. Third-party tools and decompressors in the zip keep their own licences. | Adapt, with the credit in the release | `techniques/loaders-packers.md`, `input.md`; `pitfalls/loader.md`, `cia.md`; `formats/iec-disk-reference.md`, `c64-file-formats.md`; `hardware/cia-reference.md`; `toolchains/cc65-reference.md`; `c64-failure-patterns.md`; the game and demo design pages |
|
|
35
|
+
| TSCrunch (Antonio Savona) | https://github.com/tonysavon/TSCrunch | Byte-aligned LZ+RLE cruncher and three 6502 decrunchers. | Apache-2.0, `LICENSE` file. | Adapt, with the notice | `techniques/loaders-packers.md` |
|
|
36
|
+
| Exomizer (Magnus Lind) | https://bitbucket.org/magli143/exomizer | Cruncher (C) and decrunchers for several assemblers. | Current master: zlib-style headers, "for any purpose, including commercial applications" (read in `src/exo_main.c`, `src/search.c`, `exodecrs/exodecrunch.s`, `exodecrs/kick/exodecrunch.asm`). Older copies differ: the Exomizer 3.1 inside Krill's v194 zip has cruncher C files that say "non-commercial, non-profit", while its decrunchers say "any purpose". The GitHub mirror `bitshifters/exomizer` has no licence file. | Adapt a current decruncher, keeping the notice and marking changes | `techniques/loaders-packers.md`; `pitfalls/loader.md`; `art/asset-pipelines.md`; the game and demo design pages |
|
|
37
|
+
| Oscar64 (drmortalwombat) | https://github.com/drmortalwombat/oscar64 | The C compiler, its runtime library and headers, samples. | GPL-3.0, `LICENSE` file. No runtime-library exception was found in `LICENSE` or the README, and the installed `include/` files carry no notice. | Use as a tool; facts only from its source. Whether a PRG that links its runtime library is affected is not settled here. | `toolchains/oscar64-reference.md`, `oscar64-headers-reference.md`; `recipes/oscar64/attract-replay.md`, `pal-ntsc-detect.md` |
|
|
38
|
+
| drmortalwombat's Oscar64 games: Corescape, Plekthora, MetalMayhem, zombies, ballnchain, minotrace, bunkerdigger, shalldom; OscarTutorials | https://github.com/drmortalwombat | Complete games written in Oscar64 C. | GPL-3.0: `LICENSE` file read for Corescape; GitHub's licence field says GPL-3.0 for every one listed. | Facts only | Corescape: `techniques/logic.md`, `raster.md`, `sprite.md` |
|
|
39
|
+
| mwenge's disassemblies: Uridium (Braybrook), Iridis Alpha and Gridrunner (Minter) | https://github.com/mwenge/uridium, https://github.com/mwenge/iridisalpha, https://github.com/mwenge/gridrunner | Commented, buildable reverse-engineered source of commercial games (64tass). | No licence. No `LICENSE` file and no licence wording in any of the three READMEs. The READMEs make no claim over the games. | Facts only | Iridis Alpha: `techniques/logic.md` |
|
|
40
|
+
| Mark Moxon's annotated C64 Elite | https://github.com/markmoxon/elite-source-code-commodore-64 and https://elite.bbcelite.com | The 1985 Bell and Braben source, reformatted and annotated. | README, "A note on licences, copyright etc.": no licence, "intentionally no `LICENSE` file"; readers may "read and fork this repository... but that's it". Game copyright D. Braben and I. Bell 1985; commentary copyright Mark Moxon. | Facts only | `techniques/effects-vector-3d.md`, `maths.md`; `recipes/kickassembler/wireframe-ships.md` |
|
|
41
|
+
| Lode Runner reverse engineering (XekriRedmane) | https://github.com/XekriRedmane/lode_runner_reveng | Literate source of the Apple II Lode Runner (1983) that assembles to the original. | README "License": CC BY-SA 4.0. The README says nothing about the game's own rights; the game is Doug Smith's and Broderbund's. | Facts only | `techniques/logic.md` |
|
|
42
|
+
| a2-lode-runner (fschuhi) | https://github.com/fschuhi/a2-lode-runner | Research notes and a browsable site built on the repository above. | README "License and attribution": its own scripts and tests MIT (`LICENSE`); the research material and documentation CC BY-SA 4.0 (`LICENSE-CC-BY-SA-4.0.md`); "Rights in the original game ... remain with their holders." | Facts only | `techniques/logic.md` |
|
|
43
|
+
| Ultima IV Remastered (Per Olofsson, MagerValp) | https://github.com/MagerValp/u4remastered | The C64 Ultima IV rebuilt with new loaders; builds with cc65 from the original disk images, which the repository does not include. | README "License and Copyright": code Apache 2.0, "© 2006-2015 Per Olofsson"; new graphics and intro music are their artists' copyright; the original game "© 1985 Origin Systems". | Adapt Olofsson's code, with the notice; the game data is not his | none |
|
|
44
|
+
| Codebase64 wiki | https://codebase.c64.org/ | Routines and articles, including a game sources section. | Footer: "CC Attribution-Noncommercial-Share Alike 4.0 International", "Except where otherwise noted". | Facts only (non-commercial and share-alike terms do not fit a BSD repository; `game-design/production-planning.md` says the same) | `hardware/` references; `techniques/scroll.md`, `sprite.md`, `logic.md`, `memory-banking.md`, `cpu-cycle-tricks.md`, `text-mode-render.md`; `recipes/kickassembler/reu-dma.md`; the game design pages |
|
|
45
|
+
| C64-Wiki | https://www.c64-wiki.com/ | Reference articles on the machine, games and people. | Footer: "Content is available under GFDL unless otherwise noted." The version is not stated on the copyrights page. | Facts only | `hardware/` references; `pitfalls/cia.md`, `kernal-and-io.md`, `sid.md`; `techniques/scroll.md` |
|
|
46
|
+
| Microchess (Peter Jennings), on 6502.org | https://6502.org/source/games/uchess/uchess.htm | 6502 chess program, adapted for a serial terminal by Daryl Rictor. | Page: "MicroChess (c) 1996-2002 Peter Jennings"; the poster was "given permission to distribute this program"; "Please get his permission if you wish to re-distribute a modified copy". | Facts only | `techniques/logic.md` |
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Rules for this KB
|
|
51
|
+
|
|
52
|
+
- **The KB ships original code.** Every listing here is written for the page
|
|
53
|
+
and built by `npm run check:listings`. MIT, BSD, Apache and zlib code may
|
|
54
|
+
be adapted with attribution and its notice kept, but no page has done so
|
|
55
|
+
yet; keep writing original listings unless the maintainer decides
|
|
56
|
+
otherwise.
|
|
57
|
+
- **Prose is always original.** Do not paste a source's text, even from an
|
|
58
|
+
MIT repository.
|
|
59
|
+
- **Facts only** for GPL sources, sources with no licence, CC BY-NC-SA and
|
|
60
|
+
GFDL wikis, and disassemblies of commercial games. A disassembly's stated licence
|
|
61
|
+
describes the repository; the READMEs here make no claim over the games
|
|
62
|
+
themselves.
|
|
63
|
+
- **Game content is not code.** Hessian's and Steel Ranger's graphics,
|
|
64
|
+
levels, music and text are all rights reserved, even though their code is
|
|
65
|
+
MIT.
|
|
66
|
+
- **Cite by URL** in the page's Sources section, with the licence in
|
|
67
|
+
brackets and the file you read, as `techniques/logic.md` does:
|
|
68
|
+
`https://github.com/cadaver/c64gameframework (MIT): actor.s`. Say "facts
|
|
69
|
+
only" beside a source that is not open for copying.
|
|
70
|
+
- **Check the licence again before adapting.** Licences change: Exomizer's
|
|
71
|
+
cruncher moved from non-commercial terms to zlib-style ones between the
|
|
72
|
+
copy in Krill's v194 zip and the current master.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Sources
|
|
77
|
+
|
|
78
|
+
- Licence texts read with `gh api repos/<owner>/<repo>` (licence field),
|
|
79
|
+
`gh api repos/<owner>/<repo>/contents/LICENSE` and
|
|
80
|
+
`gh api repos/<owner>/<repo>/readme`, for every GitHub repository in the
|
|
81
|
+
table, 2026-09-23.
|
|
82
|
+
- https://cadaver.github.io/games.html and
|
|
83
|
+
https://cadaver.github.io/games/mw4src.zip (files listed and read).
|
|
84
|
+
- https://bitbucket.org/magli143/exomizer, raw file headers on `master`.
|
|
85
|
+
- `loader-v194.zip` (Krill's Loader, Repository Version 194): `loader/README`
|
|
86
|
+
"License", and `loader/tools/exomizer-3.1/src/*.c` and `exodecrs/`
|
|
87
|
+
headers.
|
|
88
|
+
- https://codebase.c64.org/doku.php?id=start (footer).
|
|
89
|
+
- https://www.c64-wiki.com/wiki/C64-Wiki:Copyrights (footer).
|
|
90
|
+
- https://6502.org/source/games/uchess/uchess.htm.
|