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,365 @@
|
|
|
1
|
+
---
|
|
2
|
+
recipe: save-load-seq-file
|
|
3
|
+
toolchain: oscar64
|
|
4
|
+
output_format: PRG
|
|
5
|
+
region: both
|
|
6
|
+
techniques: [kernal_file_write_seq, kernal_file_read_seq, error_channel_check]
|
|
7
|
+
file_formats: [PRG]
|
|
8
|
+
uses_registers: [DD04, DD05, DD06, DD07, DD0E, DD0F]
|
|
9
|
+
uses_kernal: [SETLFS, SETNAM, OPEN, CLOSE, CHKIN, CHKOUT, CLRCHN, CHRIN, CHROUT, READST]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
<!-- doc-type: recipe -->
|
|
13
|
+
|
|
14
|
+
# Oscar64 Save and Load a SEQ File with kernalio.h
|
|
15
|
+
|
|
16
|
+
## Synopsis
|
|
17
|
+
|
|
18
|
+
Against a freshly formatted disk in drive 8, using Oscar64's
|
|
19
|
+
`kernalio.h` wrappers: read the drive's status line and print it, write
|
|
20
|
+
a three-entry score table (18 bytes) as the sequential file `SCORES`
|
|
21
|
+
with `krnio_setnam` / `krnio_open` / `krnio_write` / `krnio_close`,
|
|
22
|
+
read it back with `krnio_read` into a buffer larger than the file,
|
|
23
|
+
compare, print `MATCH` and a 16-bit checksum of the bytes that came
|
|
24
|
+
back against the value Python computed, then open a file that is not
|
|
25
|
+
on the disk and print the drive's `62` reply. `krnio_status()` is
|
|
26
|
+
printed after every call, so the KERNAL's own ST byte can be read next
|
|
27
|
+
to the drive's reply on the same screen. Use it as the skeleton for a
|
|
28
|
+
save slot or a high-score file, and as the thing to run when a disk
|
|
29
|
+
routine misbehaves and you want to know whether the drive or your code
|
|
30
|
+
is at fault.
|
|
31
|
+
|
|
32
|
+
## Source
|
|
33
|
+
|
|
34
|
+
```c
|
|
35
|
+
// save-load-seq-file.c
|
|
36
|
+
// Against a fresh disk in drive 8: read the drive's status line, write a
|
|
37
|
+
// three-entry score table as the SEQ file SCORES through Oscar64's
|
|
38
|
+
// kernalio.h, read it back into a second buffer, compare, fold the bytes
|
|
39
|
+
// that came back into a 16-bit checksum shown with PASS or FAIL against
|
|
40
|
+
// the value Python computed, then open a file that does not exist and
|
|
41
|
+
// print the drive's reply. krnio_status() is printed after every call so
|
|
42
|
+
// the KERNAL's own ST byte can be read against the drive's reply, and
|
|
43
|
+
// CIA2's timers count the cycles each transfer took.
|
|
44
|
+
#include <stdio.h>
|
|
45
|
+
#include <c64/kernalio.h>
|
|
46
|
+
|
|
47
|
+
#define DRIVE 8
|
|
48
|
+
#define EXPECT_CHK 0xCD2A // python: same fold over the 18 bytes
|
|
49
|
+
|
|
50
|
+
typedef struct {
|
|
51
|
+
char name[4]; // three letters and a terminating zero
|
|
52
|
+
unsigned score; // 16 bits, stored low byte first
|
|
53
|
+
} Score;
|
|
54
|
+
|
|
55
|
+
typedef struct {
|
|
56
|
+
Score entry[3];
|
|
57
|
+
} Table; // 18 bytes: no padding in Oscar64
|
|
58
|
+
|
|
59
|
+
static const Table saved = {{
|
|
60
|
+
{ "ABC", 12000 },
|
|
61
|
+
{ "DEF", 9500 },
|
|
62
|
+
{ "GHI", 700 }
|
|
63
|
+
}};
|
|
64
|
+
|
|
65
|
+
static char back[32]; // bigger than the file on purpose
|
|
66
|
+
static char reply[40]; // one drive status line
|
|
67
|
+
|
|
68
|
+
// CIA2 timers A and B chained as a free-running 32-bit cycle counter.
|
|
69
|
+
// The KERNAL serial code runs with interrupts off, so the jiffy clock
|
|
70
|
+
// loses most of the time a drive transfer takes; this counter does not.
|
|
71
|
+
#define CIA2 ((volatile char *)0xdd00)
|
|
72
|
+
|
|
73
|
+
static void counter_start(void)
|
|
74
|
+
{
|
|
75
|
+
CIA2[4] = 0xff; CIA2[5] = 0xff; // timer A from $FFFF
|
|
76
|
+
CIA2[6] = 0xff; CIA2[7] = 0xff; // timer B from $FFFF
|
|
77
|
+
CIA2[15] = 0x41; // B: start, count A underflows
|
|
78
|
+
CIA2[14] = 0x01; // A: start, continuous
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
static unsigned long counter_now(void) // cycles since counter_start
|
|
82
|
+
{
|
|
83
|
+
volatile char *c = CIA2;
|
|
84
|
+
unsigned lo = c[4] | ((unsigned)c[5] << 8);
|
|
85
|
+
unsigned hi = c[6] | ((unsigned)c[7] << 8);
|
|
86
|
+
return ~(((unsigned long)hi << 16) | lo);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Two hex digits, upper case, through the KERNAL screen editor.
|
|
90
|
+
static void put_hex2(char v)
|
|
91
|
+
{
|
|
92
|
+
char d = v >> 4;
|
|
93
|
+
putchar(d < 10 ? '0' + d : 'A' + d - 10);
|
|
94
|
+
d = v & 15;
|
|
95
|
+
putchar(d < 10 ? '0' + d : 'A' + d - 10);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
static void put_hex4(unsigned v)
|
|
99
|
+
{
|
|
100
|
+
put_hex2(v >> 8);
|
|
101
|
+
put_hex2(v & 0xff);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Open the command channel, read one status line, close it again.
|
|
105
|
+
// Prints the line without its trailing CR.
|
|
106
|
+
static void drive_reply(void)
|
|
107
|
+
{
|
|
108
|
+
reply[0] = 0;
|
|
109
|
+
krnio_setnam("");
|
|
110
|
+
if (krnio_open(15, DRIVE, 15)) {
|
|
111
|
+
int n = krnio_gets(15, reply, sizeof(reply));
|
|
112
|
+
if (n > 0 && reply[n - 1] == 13)
|
|
113
|
+
reply[n - 1] = 0;
|
|
114
|
+
krnio_close(15);
|
|
115
|
+
}
|
|
116
|
+
printf("DRIVE: %s\n", reply);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// chk = ((chk ^ b) * 5 + 1) & 0xffff over n bytes
|
|
120
|
+
static unsigned fold(const char *p, int n)
|
|
121
|
+
{
|
|
122
|
+
unsigned c = 0;
|
|
123
|
+
for (int i = 0; i < n; i++)
|
|
124
|
+
c = (c ^ p[i]) * 5 + 1;
|
|
125
|
+
return c;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
int main(void)
|
|
129
|
+
{
|
|
130
|
+
unsigned long t0, tw, tr;
|
|
131
|
+
int n, i;
|
|
132
|
+
bool ok;
|
|
133
|
+
|
|
134
|
+
counter_start();
|
|
135
|
+
printf("%cSAVE/LOAD SEQ FILE (KERNALIO.H)\n", 147);
|
|
136
|
+
|
|
137
|
+
// 1. the error channel before anything else: a fresh drive says 73
|
|
138
|
+
printf("STATUS 1\n");
|
|
139
|
+
drive_reply();
|
|
140
|
+
|
|
141
|
+
// 2. write the table as SCORES,S,W on logical file 2, secondary 2
|
|
142
|
+
printf("WRITE SCORES,S,W %d BYTES\n", (int)sizeof(saved));
|
|
143
|
+
t0 = counter_now();
|
|
144
|
+
krnio_setnam("SCORES,S,W");
|
|
145
|
+
ok = krnio_open(2, DRIVE, 2);
|
|
146
|
+
printf("OPEN %d ST=", ok); put_hex2(krnio_status());
|
|
147
|
+
n = krnio_write(2, (const char *)&saved, sizeof(saved));
|
|
148
|
+
printf(" WRITE %d ST=", n); put_hex2(krnio_status());
|
|
149
|
+
krnio_close(2);
|
|
150
|
+
printf(" CLOSE ST="); put_hex2(krnio_status());
|
|
151
|
+
putchar('\n');
|
|
152
|
+
tw = counter_now() - t0;
|
|
153
|
+
drive_reply();
|
|
154
|
+
|
|
155
|
+
// 3. read it back into a bigger buffer; the read stops at EOF
|
|
156
|
+
printf("READ SCORES,S,R INTO %d BYTES\n", (int)sizeof(back));
|
|
157
|
+
t0 = counter_now();
|
|
158
|
+
krnio_setnam("SCORES,S,R");
|
|
159
|
+
ok = krnio_open(2, DRIVE, 2);
|
|
160
|
+
printf("OPEN %d ST=", ok); put_hex2(krnio_status());
|
|
161
|
+
n = krnio_read(2, back, sizeof(back));
|
|
162
|
+
printf(" READ %d ST=", n); put_hex2(krnio_pstatus[2]);
|
|
163
|
+
krnio_close(2);
|
|
164
|
+
printf(" CLOSE ST="); put_hex2(krnio_status());
|
|
165
|
+
putchar('\n');
|
|
166
|
+
tr = counter_now() - t0;
|
|
167
|
+
drive_reply();
|
|
168
|
+
|
|
169
|
+
// 4. compare length and bytes, then decode one entry from the copy
|
|
170
|
+
ok = (n == sizeof(saved));
|
|
171
|
+
for (i = 0; ok && i < n; i++)
|
|
172
|
+
if (back[i] != ((const char *)&saved)[i])
|
|
173
|
+
ok = false;
|
|
174
|
+
const Table *loaded = (const Table *)back;
|
|
175
|
+
printf("%s %s %u\n", ok ? "MATCH" : "MISMATCH",
|
|
176
|
+
loaded->entry[0].name, loaded->entry[0].score);
|
|
177
|
+
|
|
178
|
+
// 5. checksum of what came back
|
|
179
|
+
unsigned chk = fold(back, n);
|
|
180
|
+
printf("CHK ");
|
|
181
|
+
put_hex4(chk);
|
|
182
|
+
printf(chk == EXPECT_CHK ? " PASS\n" : " FAIL\n");
|
|
183
|
+
|
|
184
|
+
// 6. provoke 62: open a file that is not on the disk
|
|
185
|
+
printf("OPEN NOFILE,S,R\n");
|
|
186
|
+
krnio_setnam("NOFILE,S,R");
|
|
187
|
+
ok = krnio_open(4, DRIVE, 4);
|
|
188
|
+
printf("OPEN %d ST=", ok); put_hex2(krnio_status());
|
|
189
|
+
n = krnio_read(4, back, sizeof(back));
|
|
190
|
+
printf(" READ %d ST=", n); put_hex2(krnio_pstatus[4]);
|
|
191
|
+
krnio_close(4);
|
|
192
|
+
putchar('\n');
|
|
193
|
+
drive_reply();
|
|
194
|
+
|
|
195
|
+
printf("CYCLES WRITE $");
|
|
196
|
+
put_hex4(tw >> 16); put_hex4(tw & 0xffff);
|
|
197
|
+
printf(" READ $");
|
|
198
|
+
put_hex4(tr >> 16); put_hex4(tr & 0xffff);
|
|
199
|
+
putchar('\n');
|
|
200
|
+
return 0;
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## Build
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
oscar64 -tm=c64 -O2 -o=save-load-seq-file.prg save-load-seq-file.c
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Produces `save-load-seq-file.prg`. `kernalio.h` carries
|
|
211
|
+
`#pragma compile("kernalio.c")`, so the wrapper source is compiled in
|
|
212
|
+
without a second file on the command line. The run needs a disk in
|
|
213
|
+
drive 8:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
c1541 -format "test,01" d64 test.d64
|
|
217
|
+
x64sc -default -warp +sound +autostart-delay-random -autostartprgmode 1 \
|
|
218
|
+
-limitcycles 16000000 -8 test.d64 \
|
|
219
|
+
-exitscreenshot save-load-seq-file.png -autostart save-load-seq-file.prg
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Expected output
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
SAVE/LOAD SEQ FILE (KERNALIO.H)
|
|
226
|
+
STATUS 1
|
|
227
|
+
DRIVE: 73,CBM DOS V2.6 1541,00,00
|
|
228
|
+
WRITE SCORES,S,W 18 BYTES
|
|
229
|
+
OPEN 1 ST=00 WRITE 18 ST=00 CLOSE ST=00
|
|
230
|
+
DRIVE: 00, OK,00,00
|
|
231
|
+
READ SCORES,S,R INTO 32 BYTES
|
|
232
|
+
OPEN 1 ST=00 READ 18 ST=40 CLOSE ST=40
|
|
233
|
+
DRIVE: 00, OK,00,00
|
|
234
|
+
MATCH ABC 12000
|
|
235
|
+
CHK CD2A PASS
|
|
236
|
+
OPEN NOFILE,S,R
|
|
237
|
+
OPEN 1 ST=00 READ 0 ST=42
|
|
238
|
+
DRIVE: 62, FILE NOT FOUND,00,00
|
|
239
|
+
CYCLES WRITE $003A82B0 READ $0007CBBB
|
|
240
|
+
|
|
241
|
+
READY.
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Light blue text on blue, the ordinary power-on screen. The `CYCLES`
|
|
245
|
+
line is the run's own measurement and is the only line that differs
|
|
246
|
+
between regions: the NTSC picture shows `$003CDAB5` and `$00081929` (both regions with the emulated drive's RPM wobble switched off, as the verifier pins it; an earlier version of this page quoted a run with VICE's default wobble, which moves these figures by a few hundred cycles between runs).
|
|
247
|
+
Screenshots from the VICE runs this page describes:
|
|
248
|
+
`screenshots/save-load-seq-file.png` (PAL) and
|
|
249
|
+
`screenshots/save-load-seq-file-ntsc.png` (NTSC), both from the pinned
|
|
250
|
+
command above with a disk formatted as `TEST,01` immediately before the
|
|
251
|
+
run. A second PAL run of the same command on another fresh disk gave a
|
|
252
|
+
pixel-identical PNG.
|
|
253
|
+
|
|
254
|
+
Read the lines in pairs. `ST=` is `krnio_status()`, the KERNAL's status
|
|
255
|
+
byte (READST, `$FFB7`). `DRIVE:` is the text the 1541 itself put on its
|
|
256
|
+
command channel. They answer different questions:
|
|
257
|
+
|
|
258
|
+
- The first status line is `73`, not `00`. A 1541 answers its first
|
|
259
|
+
status read after reset with its DOS banner, and VICE's drive resets
|
|
260
|
+
with the machine; read this line once before judging the code.
|
|
261
|
+
- Write: `krnio_open` returns 1 and ST stays `00` through the write and
|
|
262
|
+
the close. `krnio_write` returns 18, the count it was asked for. Per
|
|
263
|
+
`kernalio.c` it never reads ST inside its loop, so 18 means the bytes
|
|
264
|
+
were handed to CHROUT, not that they reached the disk. The drive's
|
|
265
|
+
`00, OK` after the close is what says they did.
|
|
266
|
+
- Read into a 32-byte buffer: `krnio_read` returns 18, the file's real
|
|
267
|
+
length, and `krnio_pstatus[2]` holds `$40`. `KRNIO_EOF` is the bit
|
|
268
|
+
the last byte arrives with; `krnio_read` stores that byte and stops
|
|
269
|
+
(`kernalio.c`), and a further `krnio_read` on the same file number
|
|
270
|
+
returns 0 without touching the bus. ST still reads `$40` after the
|
|
271
|
+
close.
|
|
272
|
+
- Missing file: `krnio_open` returns 1 and ST is `00`. KERNAL OPEN's
|
|
273
|
+
carry flag reports device-not-present or too-many-files, never a DOS
|
|
274
|
+
error, so a true from `krnio_open` is not a found file. The
|
|
275
|
+
`krnio_read` that follows returns 0 with ST `$42`, EOF plus a read
|
|
276
|
+
timeout, and the drive's reply is `62, FILE NOT FOUND,00,00`. Reading
|
|
277
|
+
channel 15 is the only way to get that text.
|
|
278
|
+
|
|
279
|
+
The cycle figures come from CIA2 timers A and B chained as a 32-bit
|
|
280
|
+
counter, measured in VICE x64sc with true drive emulation, and cover
|
|
281
|
+
the open, transfer and close of each step (PAL: write 3,836,200 cycles,
|
|
282
|
+
read 511,742; NTSC: 3,989,946 and 530,736). The write costs seven times
|
|
283
|
+
the read; the likely reason is that the drive writes the data block,
|
|
284
|
+
the directory and the BAM at close, but that split was not measured
|
|
285
|
+
here. An earlier draft printed the KERNAL jiffy clock
|
|
286
|
+
instead and showed 0 and 2 jiffies: the serial routines run with
|
|
287
|
+
interrupts off, so the jiffy clock loses most of a transfer.
|
|
288
|
+
|
|
289
|
+
After the run the disk holds the file. `c1541 -attach test.d64 -list`
|
|
290
|
+
printed:
|
|
291
|
+
|
|
292
|
+
```
|
|
293
|
+
0 "test " 01 2a
|
|
294
|
+
1 "scores" seq
|
|
295
|
+
663 blocks free.
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
One SEQ entry, no `*` splat. `c1541 -attach test.d64 -read "scores,s"
|
|
299
|
+
scores.bin` followed by `xxd scores.bin` printed the table byte for
|
|
300
|
+
byte, each entry a zero-padded 4-byte name and a little-endian 16-bit
|
|
301
|
+
score:
|
|
302
|
+
|
|
303
|
+
```
|
|
304
|
+
00000000: 4142 4300 e02e 4445 4600 1c25 4748 4900 ABC...DEF..%GHI.
|
|
305
|
+
00000010: bc02 ..
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
Note the `,s` in the `-read` argument: c1541 looks for a PRG by
|
|
309
|
+
default, and `-read scores` on this disk answered `ERR = 62, FILE NOT
|
|
310
|
+
FOUND, 00, 00`. Python's fold `chk = ((chk ^ b) * 5 + 1) & 0xffff`
|
|
311
|
+
over those 18 bytes gives `0xCD2A`, the value compiled in as
|
|
312
|
+
`EXPECT_CHK` and printed with `PASS`. The same 18 bytes compared equal
|
|
313
|
+
to the struct built in Python from the three names and scores, so
|
|
314
|
+
Oscar64 laid the struct out with no padding.
|
|
315
|
+
|
|
316
|
+
Error 26 was provoked as well, in a control run that is not the pinned
|
|
317
|
+
one: the same PRG with `-attach8ro -8 test.d64` (x64sc: "Attach disk
|
|
318
|
+
image for drive #8:0 read only") printed, at the write step,
|
|
319
|
+
`OPEN 1 ST=00 WRITE 18 ST=80 CLOSE ST=80` and
|
|
320
|
+
`DRIVE: 26, WRITE PROTECT ON,18,00`; the read step then answered `62`,
|
|
321
|
+
the compare said `MISMATCH`, and the disk stayed empty (`664 blocks
|
|
322
|
+
free`). The trailing `18,00` are the reply's track and sector fields;
|
|
323
|
+
18 is the directory track, and why the drive names it was not traced
|
|
324
|
+
here. ST `$80` is `KRNIO_NODEVICE` in the header's enum, the bit the
|
|
325
|
+
KERNAL sets when the drive stops answering. So a write-protected disk
|
|
326
|
+
shows up in ST during the write, before anyone reads channel 15, while
|
|
327
|
+
a missing file does not show up in ST until the read.
|
|
328
|
+
|
|
329
|
+
## Why this works
|
|
330
|
+
|
|
331
|
+
`krnio_open(fnum, device, channel)` is SETLFS plus OPEN; on carry set
|
|
332
|
+
it closes the file and returns false, and it clears
|
|
333
|
+
`krnio_pstatus[fnum]`. `krnio_write` is CHKOUT, a CHROUT loop, CLRCHN.
|
|
334
|
+
`krnio_read` is CHKIN, then CHRIN and READST per byte until the count
|
|
335
|
+
is met or ST is non-zero; it records ST in `krnio_pstatus[fnum]`,
|
|
336
|
+
keeps the byte that arrived with `KRNIO_EOF` and drops the one that
|
|
337
|
+
arrived with any other error. `krnio_gets` is the same loop stopped at
|
|
338
|
+
CR or LF with the terminator kept and a zero appended, which is why
|
|
339
|
+
`drive_reply` strips the CR before printing. All of this is read from
|
|
340
|
+
`kernalio.c` beside the header; the KERNAL routines behind it are the
|
|
341
|
+
ones `techniques/file-io.md` describes for `kernal_file_write_seq`,
|
|
342
|
+
`kernal_file_read_seq` and `error_channel_check`.
|
|
343
|
+
|
|
344
|
+
The filename does the work `SETLFS` cannot: `SCORES,S,W` asks the DOS
|
|
345
|
+
for a sequential file opened for writing on data channel 2, and
|
|
346
|
+
`SCORES,S,R` opens the same file for reading. On a disk that already
|
|
347
|
+
holds `SCORES` the write open would be refused with `63, FILE EXISTS`,
|
|
348
|
+
and `krnio_open` would still return true; prefix the name with `@0:`
|
|
349
|
+
to replace, as the Oscar64 sample `samples/kernalio/filewrite.c` does.
|
|
350
|
+
The command channel is secondary address 15 with an empty name:
|
|
351
|
+
`krnio_setnam("")` sends a zero-length name, and `krnio_gets(15, ...)`
|
|
352
|
+
reads one reply line, which the DOS clears once it has been read.
|
|
353
|
+
|
|
354
|
+
No `P""` prefix is needed on these literals. Oscar64 string literals
|
|
355
|
+
are ASCII by default, and the KERNAL wants PETSCII, but the two
|
|
356
|
+
encodings agree on digits, punctuation and upper-case letters, so
|
|
357
|
+
`"SCORES,S,W"` is the same bytes either way. A lower-case or shifted
|
|
358
|
+
name would not be; `p"..."` (or building with `-psci`) makes the
|
|
359
|
+
literal PETSCII, per `oscar64.md`. The screen text is unchanged for
|
|
360
|
+
the same reason: `printf` goes through `putpch` in `conio.c`, which in
|
|
361
|
+
its default `IOCHM_ASCII` mode maps only `\n` to CR and passes letters
|
|
362
|
+
through, so the drive's own PETSCII reply prints correctly and the
|
|
363
|
+
program's upper-case labels print as upper case. The hex digits are
|
|
364
|
+
printed by `put_hex2` rather than `%x` so that `A` to `F` are
|
|
365
|
+
upper-case bytes the default font shows as letters.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Screenshots
|
|
2
|
+
|
|
3
|
+
One PNG per Oscar64 recipe, and every one of them is reproducible:
|
|
4
|
+
`npm run verify:recipes` compiles the listing exactly as it appears in the
|
|
5
|
+
recipe page with Oscar64 (build 2026-05-19), `-tm=c64 -O2`, runs the PRG
|
|
6
|
+
headless in VICE x64sc 3.10 with the parameters pinned in
|
|
7
|
+
`docs/recipes/runs.json`, and fails on any pixel that differs from the
|
|
8
|
+
picture here. The default pinned run is:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
x64sc -default -warp +sound -autostartprgmode 1 +autostart-delay-random \
|
|
12
|
+
-limitcycles 8000000 -exitscreenshot out.png -autostart recipe.prg
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
`-autostartprgmode 1` injects the PRG into RAM instead of loading it
|
|
16
|
+
through the drive. `+autostart-delay-random` turns off the random delay VICE
|
|
17
|
+
otherwise inserts before the autostart `RUN`; without it the frame a given
|
|
18
|
+
`-limitcycles` lands on wanders by about ten frames between runs (measured
|
|
19
|
+
on `text-overlay-playfield`: ticks 249, 238, 240 in three runs, then 250,
|
|
20
|
+
250, 250 with the switch). On macOS with Homebrew VICE, set
|
|
21
|
+
`GSETTINGS_SCHEMA_DIR=/opt/homebrew/share/glib-2.0/schemas` or the GTK
|
|
22
|
+
build aborts before it draws.
|
|
23
|
+
|
|
24
|
+
- `pal-ntsc-detect-pal.png`, `pal-ntsc-detect-ntsc.png`,
|
|
25
|
+
`pal-ntsc-detect-oldntsc.png` — the same PRG under the default model,
|
|
26
|
+
`-model ntsc` and `-model oldntsc`; the recipe page says what border and
|
|
27
|
+
digits each must show. The NTSC pictures are 384×247, not 384×272, and
|
|
28
|
+
the same colour index has different RGB values in them.
|
|
29
|
+
- `text-overlay-playfield.png` — the recipe at tick 654 (16,000,000
|
|
30
|
+
cycles, pinned in `runs.json`). `-ntsc` is the recipe under
|
|
31
|
+
`-model ntsc` at the same 16,000,000 cycles (tick 745), 384×247; an
|
|
32
|
+
earlier picture was taken at 8,000,000 cycles (tick 281) and could not
|
|
33
|
+
be reproduced by the pinned run. `-gameover` is the same program run to
|
|
34
|
+
its end state; `-notrail-control` and `-ungated-control` are the same
|
|
35
|
+
source with one thing removed, run to show the pitfall the recipe
|
|
36
|
+
avoids. The page says what was removed and what each picture measures.
|
|
37
|
+
These three are not pinned and not verified by the gate.
|
|
38
|
+
- The other pictures were adopted on 2026-09-22 after each was looked at
|
|
39
|
+
against its page's "Expected output"; before that these recipes had no
|
|
40
|
+
committed screenshot at all.
|
|
41
|
+
- `joystick-input.png` / `-ntsc.png` are at 24,000,000 cycles (pinned in
|
|
42
|
+
`runs.json`): the recipe runs two exhaustive self-checks before its live
|
|
43
|
+
loop and 8,000,000 cycles does not reach the loop. `frame-sync-loop.png`
|
|
44
|
+
/ `-ntsc.png` are the budget-bar loop at 8,000,000 cycles and
|
|
45
|
+
`frame-sync-loop-overrun.png` is the same listing built with a workload
|
|
46
|
+
that does not fit, at 8,050,000 cycles so the wrapped bar and the
|
|
47
|
+
non-zero dropped counter are both in frame. `fixed-point-jump.png` /
|
|
48
|
+
`-ntsc.png` are the jump arc at 8,000,000 cycles; the page quotes the
|
|
49
|
+
table value and the sprite Y measured from the picture at that frame.
|
|
50
|
+
- `tile-map-render.png` / `-ntsc.png` at 8,000,000 cycles: the decoded
|
|
51
|
+
metatile map, compared cell by cell (screen code and colour) against a
|
|
52
|
+
Python render of the same source data. `print-number.png` / `-ntsc.png`
|
|
53
|
+
at 400,000,000 cycles: the pinned run is long because the listing first
|
|
54
|
+
renders every value from 0 to 65535 through both decimal routes and
|
|
55
|
+
folds the digits into the checksums it prints. `lfsr-random.png` /
|
|
56
|
+
`-ntsc.png` at 20,000,000 cycles and `lfsr-random-seed2.png` (the same
|
|
57
|
+
listing with a fixed compile-time seed) show that a different seed gives
|
|
58
|
+
a different picture; the headless run seeds identically every time, so
|
|
59
|
+
the seed variation itself is stated on the page, not shown.
|
|
60
|
+
|
|
61
|
+
Geometry of the PAL captures, measured rather than assumed: 384×272; text
|
|
62
|
+
row 0 of the 25-row display window begins at PNG row 35 and column 0 at
|
|
63
|
+
x 32, so a character cell is the 8×8 block at `(32 + 8·col, 35 + 8·row)`
|
|
64
|
+
and the window occupies rows 35–234 (raster 51–250 minus 16). The border
|
|
65
|
+
pixel at (2, 100) is a safe place to read the border colour.
|
|
66
|
+
|
|
67
|
+
- `object-pool.png` / `-ntsc.png` at 8,000,000 cycles: the scripted
|
|
68
|
+
spawn, despawn and respawn scenario with its checksum and PASS line and
|
|
69
|
+
the per-call cycle figures.
|
|
70
|
+
- `double-buffer.png` / `-ntsc.png` at 8,000,000 cycles: the visible page
|
|
71
|
+
at that frame (A on PAL, B on NTSC, as the pages' frame counters
|
|
72
|
+
predict) with the sprite intact; `double-buffer-nomirror.png` is the
|
|
73
|
+
same listing without the sprite-pointer mirror and shows the corrupted
|
|
74
|
+
sprite. `save-load-seq-file.png` / `-ntsc.png` at 16,000,000 cycles on
|
|
75
|
+
a fresh `TEST,01` disk with the drive's RPM wobble off (the verifier
|
|
76
|
+
pins both), so the elapsed cycle figures on screen repeat run to run.
|
|
77
|
+
`text-input.png` / `-ntsc.png` at 8,000,000 cycles with
|
|
78
|
+
`-keybuf "abc\x14d\x0d"`: the entry loop after A, B, C, DEL, D, RETURN.
|
|
79
|
+
- `high-score-persist.png` / `-ntsc.png` at 24,000,000 cycles on a fresh
|
|
80
|
+
`TEST,01` disk: the first-run path (62, defaults written), the rewrite
|
|
81
|
+
by scratch-then-write with the scratch reply read, and the read-back,
|
|
82
|
+
all in one run because every verifier run starts from an empty disk.
|
|
83
|
+
`sfx-engine.png` / `-ntsc.png` at 8,000,000 cycles: the priority and
|
|
84
|
+
borrow counters and the register-write checksum; nobody has listened to
|
|
85
|
+
it. `memory-layout.png` / `-ntsc.png` at 8,000,000 cycles: the worked
|
|
86
|
+
layout's charset, sprite and printed addresses. `headless-verify.png` /
|
|
87
|
+
`-ntsc.png` at 8,000,000 cycles: the green (pass) case of the
|
|
88
|
+
result-byte pattern.
|
|
89
|
+
|
|
90
|
+
The pixel geometry, the palette RGB triples per model and a decode snippet
|
|
91
|
+
are in `docs/runtime/vice-reference.md`, section "Reading the exit
|
|
92
|
+
screenshot". The pictures are evidence about VICE, not about a chip on a
|
|
93
|
+
bench. The PAL pictures are VICE's default C64C model (VIC-II 8565, SID
|
|
94
|
+
8580, CIA 8521), not a 6569; `-model c64` is the 6569 machine. An earlier
|
|
95
|
+
version of this paragraph named only the 6569. Where a recipe quotes a number from a picture, the recipe text says
|
|
96
|
+
how it was measured.
|
|
97
|
+
|
|
98
|
+
A windowless build of the same VICE (`npm run vice:headless`) gives the
|
|
99
|
+
same pictures byte for byte and is what the verifier uses when present.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|