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.
Files changed (970) hide show
  1. package/CHANGELOG.md +2082 -0
  2. package/LICENSE +29 -0
  3. package/README.md +559 -0
  4. package/VERSION +25 -0
  5. package/dist/cli/setup.js +66 -0
  6. package/dist/cli/setup.js.map +1 -0
  7. package/dist/cli-memorize-audit.js +97 -0
  8. package/dist/cli-memorize-audit.js.map +1 -0
  9. package/dist/cli.js +335 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/config.js +83 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/context.js +53 -0
  14. package/dist/context.js.map +1 -0
  15. package/dist/domain/budget-notes.js +104 -0
  16. package/dist/domain/budget-notes.js.map +1 -0
  17. package/dist/domain/budget.js +417 -0
  18. package/dist/domain/budget.js.map +1 -0
  19. package/dist/domain/game-design.js +77 -0
  20. package/dist/domain/game-design.js.map +1 -0
  21. package/dist/domain/timing.js +39 -0
  22. package/dist/domain/timing.js.map +1 -0
  23. package/dist/graph/apply.js +132 -0
  24. package/dist/graph/apply.js.map +1 -0
  25. package/dist/graph/claims.js +231 -0
  26. package/dist/graph/claims.js.map +1 -0
  27. package/dist/graph/extract/archetype.js +118 -0
  28. package/dist/graph/extract/archetype.js.map +1 -0
  29. package/dist/graph/extract/common.js +69 -0
  30. package/dist/graph/extract/common.js.map +1 -0
  31. package/dist/graph/extract/failure.js +37 -0
  32. package/dist/graph/extract/failure.js.map +1 -0
  33. package/dist/graph/extract/game-design.js +189 -0
  34. package/dist/graph/extract/game-design.js.map +1 -0
  35. package/dist/graph/extract/hardware.js +124 -0
  36. package/dist/graph/extract/hardware.js.map +1 -0
  37. package/dist/graph/extract/pitfall.js +62 -0
  38. package/dist/graph/extract/pitfall.js.map +1 -0
  39. package/dist/graph/extract/raster-band.js +56 -0
  40. package/dist/graph/extract/raster-band.js.map +1 -0
  41. package/dist/graph/extract/recipe.js +71 -0
  42. package/dist/graph/extract/recipe.js.map +1 -0
  43. package/dist/graph/extract/technique-entities.js +180 -0
  44. package/dist/graph/extract/technique-entities.js.map +1 -0
  45. package/dist/graph/extract/technique.js +179 -0
  46. package/dist/graph/extract/technique.js.map +1 -0
  47. package/dist/graph/extract/toolchain.js +67 -0
  48. package/dist/graph/extract/toolchain.js.map +1 -0
  49. package/dist/graph/extract/types.js +3 -0
  50. package/dist/graph/extract/types.js.map +1 -0
  51. package/dist/graph/extract/vocabulary.js +65 -0
  52. package/dist/graph/extract/vocabulary.js.map +1 -0
  53. package/dist/graph/extract.js +43 -0
  54. package/dist/graph/extract.js.map +1 -0
  55. package/dist/graph/kernal-clobbers.js +64 -0
  56. package/dist/graph/kernal-clobbers.js.map +1 -0
  57. package/dist/graph/machine-variants.js +208 -0
  58. package/dist/graph/machine-variants.js.map +1 -0
  59. package/dist/ingest/files.js +99 -0
  60. package/dist/ingest/files.js.map +1 -0
  61. package/dist/ingest/passes.js +104 -0
  62. package/dist/ingest/passes.js.map +1 -0
  63. package/dist/ingest/points.js +50 -0
  64. package/dist/ingest/points.js.map +1 -0
  65. package/dist/ingest/report.js +140 -0
  66. package/dist/ingest/report.js.map +1 -0
  67. package/dist/ingest/tally.js +81 -0
  68. package/dist/ingest/tally.js.map +1 -0
  69. package/dist/ingest/verified-on.js +43 -0
  70. package/dist/ingest/verified-on.js.map +1 -0
  71. package/dist/ingest.js +135 -0
  72. package/dist/ingest.js.map +1 -0
  73. package/dist/schemas/cost-basis.js +5 -0
  74. package/dist/schemas/cost-basis.js.map +1 -0
  75. package/dist/schemas/machine-variant.js +25 -0
  76. package/dist/schemas/machine-variant.js.map +1 -0
  77. package/dist/schemas/plan-budget.js +121 -0
  78. package/dist/schemas/plan-budget.js.map +1 -0
  79. package/dist/schemas/tool-outputs.js +526 -0
  80. package/dist/schemas/tool-outputs.js.map +1 -0
  81. package/dist/server/define-tool.js +52 -0
  82. package/dist/server/define-tool.js.map +1 -0
  83. package/dist/server/defined-only.js +9 -0
  84. package/dist/server/defined-only.js.map +1 -0
  85. package/dist/server/tools-briefings.js +70 -0
  86. package/dist/server/tools-briefings.js.map +1 -0
  87. package/dist/server/tools-lookup.js +180 -0
  88. package/dist/server/tools-lookup.js.map +1 -0
  89. package/dist/server/tools-maintenance.js +116 -0
  90. package/dist/server/tools-maintenance.js.map +1 -0
  91. package/dist/server/tools-pitfalls.js +89 -0
  92. package/dist/server/tools-pitfalls.js.map +1 -0
  93. package/dist/server/tools-recipes.js +296 -0
  94. package/dist/server/tools-recipes.js.map +1 -0
  95. package/dist/server/tools-runtime.js +48 -0
  96. package/dist/server/tools-runtime.js.map +1 -0
  97. package/dist/server/tools.js +43 -0
  98. package/dist/server/tools.js.map +1 -0
  99. package/dist/server.js +95 -0
  100. package/dist/server.js.map +1 -0
  101. package/dist/services/analytics/schema.js +78 -0
  102. package/dist/services/analytics/schema.js.map +1 -0
  103. package/dist/services/analytics/statements.js +99 -0
  104. package/dist/services/analytics/statements.js.map +1 -0
  105. package/dist/services/analytics.js +195 -0
  106. package/dist/services/analytics.js.map +1 -0
  107. package/dist/services/bm25.js +158 -0
  108. package/dist/services/bm25.js.map +1 -0
  109. package/dist/services/chunker.js +81 -0
  110. package/dist/services/chunker.js.map +1 -0
  111. package/dist/services/embeddings.js +58 -0
  112. package/dist/services/embeddings.js.map +1 -0
  113. package/dist/services/falkor/base.js +85 -0
  114. package/dist/services/falkor/base.js.map +1 -0
  115. package/dist/services/falkor/links.js +361 -0
  116. package/dist/services/falkor/links.js.map +1 -0
  117. package/dist/services/falkor/nodes.js +183 -0
  118. package/dist/services/falkor/nodes.js.map +1 -0
  119. package/dist/services/falkor/params.js +45 -0
  120. package/dist/services/falkor/params.js.map +1 -0
  121. package/dist/services/falkor/schema.js +77 -0
  122. package/dist/services/falkor/schema.js.map +1 -0
  123. package/dist/services/falkor.js +100 -0
  124. package/dist/services/falkor.js.map +1 -0
  125. package/dist/services/qdrant.js +238 -0
  126. package/dist/services/qdrant.js.map +1 -0
  127. package/dist/services/versions.js +73 -0
  128. package/dist/services/versions.js.map +1 -0
  129. package/dist/services/vice-bin.js +51 -0
  130. package/dist/services/vice-bin.js.map +1 -0
  131. package/dist/tools/briefings/archetype.js +174 -0
  132. package/dist/tools/briefings/archetype.js.map +1 -0
  133. package/dist/tools/briefings/budget.js +177 -0
  134. package/dist/tools/briefings/budget.js.map +1 -0
  135. package/dist/tools/briefings/build-order.js +135 -0
  136. package/dist/tools/briefings/build-order.js.map +1 -0
  137. package/dist/tools/briefings/build.js +185 -0
  138. package/dist/tools/briefings/build.js.map +1 -0
  139. package/dist/tools/briefings/discovery.js +290 -0
  140. package/dist/tools/briefings/discovery.js.map +1 -0
  141. package/dist/tools/briefings/plan-pitfalls.js +69 -0
  142. package/dist/tools/briefings/plan-pitfalls.js.map +1 -0
  143. package/dist/tools/briefings/render.js +151 -0
  144. package/dist/tools/briefings/render.js.map +1 -0
  145. package/dist/tools/briefings/rows.js +41 -0
  146. package/dist/tools/briefings/rows.js.map +1 -0
  147. package/dist/tools/briefings/toolchain.js +63 -0
  148. package/dist/tools/briefings/toolchain.js.map +1 -0
  149. package/dist/tools/briefings/why-proposed.js +69 -0
  150. package/dist/tools/briefings/why-proposed.js.map +1 -0
  151. package/dist/tools/briefings.js +44 -0
  152. package/dist/tools/briefings.js.map +1 -0
  153. package/dist/tools/feedback.js +97 -0
  154. package/dist/tools/feedback.js.map +1 -0
  155. package/dist/tools/hydrate.js +75 -0
  156. package/dist/tools/hydrate.js.map +1 -0
  157. package/dist/tools/intelligence.js +67 -0
  158. package/dist/tools/intelligence.js.map +1 -0
  159. package/dist/tools/lint/asm-decimal.js +86 -0
  160. package/dist/tools/lint/asm-decimal.js.map +1 -0
  161. package/dist/tools/lint/asm-rules.js +221 -0
  162. package/dist/tools/lint/asm-rules.js.map +1 -0
  163. package/dist/tools/lint/asm-shared.js +3 -0
  164. package/dist/tools/lint/asm-shared.js.map +1 -0
  165. package/dist/tools/lint/c-rules.js +215 -0
  166. package/dist/tools/lint/c-rules.js.map +1 -0
  167. package/dist/tools/lint/text.js +122 -0
  168. package/dist/tools/lint/text.js.map +1 -0
  169. package/dist/tools/lint/types.js +40 -0
  170. package/dist/tools/lint/types.js.map +1 -0
  171. package/dist/tools/lint.js +76 -0
  172. package/dist/tools/lint.js.map +1 -0
  173. package/dist/tools/memorization-mcp.js +111 -0
  174. package/dist/tools/memorization-mcp.js.map +1 -0
  175. package/dist/tools/pitfalls/bm25.js +53 -0
  176. package/dist/tools/pitfalls/bm25.js.map +1 -0
  177. package/dist/tools/pitfalls/format.js +58 -0
  178. package/dist/tools/pitfalls/format.js.map +1 -0
  179. package/dist/tools/pitfalls/graph.js +124 -0
  180. package/dist/tools/pitfalls/graph.js.map +1 -0
  181. package/dist/tools/pitfalls.js +134 -0
  182. package/dist/tools/pitfalls.js.map +1 -0
  183. package/dist/tools/prompts.js +81 -0
  184. package/dist/tools/prompts.js.map +1 -0
  185. package/dist/tools/query/compatibility/closure.js +62 -0
  186. package/dist/tools/query/compatibility/closure.js.map +1 -0
  187. package/dist/tools/query/compatibility/facts.js +28 -0
  188. package/dist/tools/query/compatibility/facts.js.map +1 -0
  189. package/dist/tools/query/compatibility/fetch.js +164 -0
  190. package/dist/tools/query/compatibility/fetch.js.map +1 -0
  191. package/dist/tools/query/compatibility/hard-rules.js +159 -0
  192. package/dist/tools/query/compatibility/hard-rules.js.map +1 -0
  193. package/dist/tools/query/compatibility/index.js +27 -0
  194. package/dist/tools/query/compatibility/index.js.map +1 -0
  195. package/dist/tools/query/compatibility/kernal-zp-rule.js +90 -0
  196. package/dist/tools/query/compatibility/kernal-zp-rule.js.map +1 -0
  197. package/dist/tools/query/compatibility/render.js +106 -0
  198. package/dist/tools/query/compatibility/render.js.map +1 -0
  199. package/dist/tools/query/compatibility/rules.js +337 -0
  200. package/dist/tools/query/compatibility/rules.js.map +1 -0
  201. package/dist/tools/query/compatibility/unit-rules.js +253 -0
  202. package/dist/tools/query/compatibility/unit-rules.js.map +1 -0
  203. package/dist/tools/query/game-design.js +83 -0
  204. package/dist/tools/query/game-design.js.map +1 -0
  205. package/dist/tools/query/lookups.js +220 -0
  206. package/dist/tools/query/lookups.js.map +1 -0
  207. package/dist/tools/query/plan-budget.js +266 -0
  208. package/dist/tools/query/plan-budget.js.map +1 -0
  209. package/dist/tools/query/recipes.js +214 -0
  210. package/dist/tools/query/recipes.js.map +1 -0
  211. package/dist/tools/query/retrieval.js +128 -0
  212. package/dist/tools/query/retrieval.js.map +1 -0
  213. package/dist/tools/query/shared.js +121 -0
  214. package/dist/tools/query/shared.js.map +1 -0
  215. package/dist/tools/query/techniques.js +331 -0
  216. package/dist/tools/query/techniques.js.map +1 -0
  217. package/dist/tools/query/timing.js +106 -0
  218. package/dist/tools/query/timing.js.map +1 -0
  219. package/dist/tools/query/types.js +11 -0
  220. package/dist/tools/query/types.js.map +1 -0
  221. package/dist/tools/query.js +21 -0
  222. package/dist/tools/query.js.map +1 -0
  223. package/dist/tools/resources.js +186 -0
  224. package/dist/tools/resources.js.map +1 -0
  225. package/dist/tools/run-game.js +249 -0
  226. package/dist/tools/run-game.js.map +1 -0
  227. package/dist/tools/selfimprovement.js +367 -0
  228. package/dist/tools/selfimprovement.js.map +1 -0
  229. package/docker-compose.yml +35 -0
  230. package/docs/ARCHITECTURE.md +164 -0
  231. package/docs/CONVENTIONS-archetypes.md +158 -0
  232. package/docs/CONVENTIONS-failures.md +46 -0
  233. package/docs/CONVENTIONS-game-designs.md +75 -0
  234. package/docs/CONVENTIONS-hardware-reference.md +184 -0
  235. package/docs/CONVENTIONS-pitfalls.md +91 -0
  236. package/docs/CONVENTIONS-recipes.md +106 -0
  237. package/docs/CONVENTIONS-techniques.md +309 -0
  238. package/docs/CONVENTIONS-toolchain-reference.md +89 -0
  239. package/docs/ONTOLOGY.md +655 -0
  240. package/docs/art/art-production-reference.md +157 -0
  241. package/docs/art/asset-pipelines.md +586 -0
  242. package/docs/c64-failure-patterns.md +693 -0
  243. package/docs/demo-design/demo-composition.md +349 -0
  244. package/docs/demo-design/demo-design-philosophy.md +320 -0
  245. package/docs/demo-design/intro-cracktro-patterns.md +435 -0
  246. package/docs/figures/ctm-spd-embed-probe.png +0 -0
  247. package/docs/figures/dot-flag-mid-5000000.png +0 -0
  248. package/docs/figures/dot-flag-no-erase-12000000.png +0 -0
  249. package/docs/figures/edges.json +1 -0
  250. package/docs/figures/fig6-architecture.png +0 -0
  251. package/docs/figures/fig7-ontology.png +0 -0
  252. package/docs/figures/screen-dissolve-mid-frame25.png +0 -0
  253. package/docs/figures/screen-dissolve-wipe-frame25.png +0 -0
  254. package/docs/figures/spindle-two-parts-part1.png +0 -0
  255. package/docs/figures/spindle-two-parts-part2.png +0 -0
  256. package/docs/figures/starters/action-puzzle.png +0 -0
  257. package/docs/figures/starters/adventure.png +0 -0
  258. package/docs/figures/starters/beat-em-up.png +0 -0
  259. package/docs/figures/starters/demo.png +0 -0
  260. package/docs/figures/starters/platformer.png +0 -0
  261. package/docs/figures/starters/shmup-vertical.png +0 -0
  262. package/docs/figures/tape-kernal-master-ntsc.png +0 -0
  263. package/docs/figures/tape-kernal-master-pal.png +0 -0
  264. package/docs/figures/tape-turbo-loader-ntsc.png +0 -0
  265. package/docs/figures/tape-turbo-loader-pal.png +0 -0
  266. package/docs/figures/tape-turbo-master-ntsc.png +0 -0
  267. package/docs/figures/tape-turbo-master-pal.png +0 -0
  268. package/docs/figures/tech-tech-pad2-12000000.png +0 -0
  269. package/docs/figures/tech-tech-pad4-12000000.png +0 -0
  270. package/docs/figures/tech-tech-seven-12000000.png +0 -0
  271. package/docs/figures/twister-mid-5000000.png +0 -0
  272. package/docs/figures/twister-straight-12000000.png +0 -0
  273. package/docs/figures/vector-balls-nosort-ntsc.png +0 -0
  274. package/docs/figures/vector-balls-nosort.png +0 -0
  275. package/docs/formats/c64-file-formats.md +1212 -0
  276. package/docs/formats/iec-disk-reference.md +754 -0
  277. package/docs/game-design/c64-game-archetypes.md +273 -0
  278. package/docs/game-design/designs/falling-blocks.md +54 -0
  279. package/docs/game-design/designs/platformer-scaffold.md +48 -0
  280. package/docs/game-design/designs/simple-shmup.md +27 -0
  281. package/docs/game-design/enemy-behaviour-and-difficulty.md +349 -0
  282. package/docs/game-design/game-design-patterns.md +1189 -0
  283. package/docs/game-design/game-structure.md +354 -0
  284. package/docs/game-design/production-planning.md +349 -0
  285. package/docs/game-design/reference-game-sources.md +90 -0
  286. package/docs/hardware/6502-illegal-opcodes.md +1353 -0
  287. package/docs/hardware/6510-cpu-reference.md +2112 -0
  288. package/docs/hardware/c64-memory-map.md +3184 -0
  289. package/docs/hardware/c64-registers-reference.md +996 -0
  290. package/docs/hardware/cia-reference.md +1281 -0
  291. package/docs/hardware/kernal-routines-reference.md +1836 -0
  292. package/docs/hardware/pal-ntsc-reference.md +813 -0
  293. package/docs/hardware/sid-reference.md +1137 -0
  294. package/docs/hardware/vic-ii-reference.md +1714 -0
  295. package/docs/music/music-production-reference.md +403 -0
  296. package/docs/pitfalls/banking.md +1067 -0
  297. package/docs/pitfalls/cia.md +1147 -0
  298. package/docs/pitfalls/cpu.md +874 -0
  299. package/docs/pitfalls/input.md +282 -0
  300. package/docs/pitfalls/kernal-and-io.md +1615 -0
  301. package/docs/pitfalls/loader.md +1191 -0
  302. package/docs/pitfalls/logic.md +94 -0
  303. package/docs/pitfalls/maths.md +187 -0
  304. package/docs/pitfalls/raster-and-badline.md +721 -0
  305. package/docs/pitfalls/region-timing.md +660 -0
  306. package/docs/pitfalls/scroll.md +207 -0
  307. package/docs/pitfalls/sid.md +738 -0
  308. package/docs/pitfalls/sprite.md +979 -0
  309. package/docs/pitfalls/text-mode-render.md +1172 -0
  310. package/docs/recipes/cc65/cartridge-8k.md +398 -0
  311. package/docs/recipes/cc65/hello-world-conio.md +76 -0
  312. package/docs/recipes/cc65/memory-layout.md +312 -0
  313. package/docs/recipes/cc65/screenshots/README.md +14 -0
  314. package/docs/recipes/cc65/screenshots/cartridge-8k-ntsc.png +0 -0
  315. package/docs/recipes/cc65/screenshots/cartridge-8k.png +0 -0
  316. package/docs/recipes/cc65/screenshots/hello-world-conio.png +0 -0
  317. package/docs/recipes/cc65/screenshots/memory-layout-ntsc.png +0 -0
  318. package/docs/recipes/cc65/screenshots/memory-layout.png +0 -0
  319. package/docs/recipes/kickassembler/basic-float-calls.md +578 -0
  320. package/docs/recipes/kickassembler/basic-wedge.md +398 -0
  321. package/docs/recipes/kickassembler/big-font-scroller.md +620 -0
  322. package/docs/recipes/kickassembler/charset-copy-rom-to-ram.md +623 -0
  323. package/docs/recipes/kickassembler/cia-revision-detect.md +366 -0
  324. package/docs/recipes/kickassembler/colour-cycling.md +343 -0
  325. package/docs/recipes/kickassembler/colour-fade.md +303 -0
  326. package/docs/recipes/kickassembler/compare-16bit-signed.md +1007 -0
  327. package/docs/recipes/kickassembler/cracktro-template.md +526 -0
  328. package/docs/recipes/kickassembler/crt-banked.md +276 -0
  329. package/docs/recipes/kickassembler/dos-error-codes.md +466 -0
  330. package/docs/recipes/kickassembler/dot-flag.md +576 -0
  331. package/docs/recipes/kickassembler/drive-job-queue.md +667 -0
  332. package/docs/recipes/kickassembler/drive-via-probe.md +690 -0
  333. package/docs/recipes/kickassembler/dycp-scroller.md +568 -0
  334. package/docs/recipes/kickassembler/dypp-sprite-scroller.md +681 -0
  335. package/docs/recipes/kickassembler/dysp.md +670 -0
  336. package/docs/recipes/kickassembler/easyflash-save.md +800 -0
  337. package/docs/recipes/kickassembler/eight-way-scroll.md +1484 -0
  338. package/docs/recipes/kickassembler/file-io-roundtrip.md +546 -0
  339. package/docs/recipes/kickassembler/fire-effect.md +420 -0
  340. package/docs/recipes/kickassembler/fld.md +414 -0
  341. package/docs/recipes/kickassembler/fli-image.md +336 -0
  342. package/docs/recipes/kickassembler/four-player-read.md +672 -0
  343. package/docs/recipes/kickassembler/headless-verify.md +228 -0
  344. package/docs/recipes/kickassembler/hello-world.md +98 -0
  345. package/docs/recipes/kickassembler/high-score-insert.md +660 -0
  346. package/docs/recipes/kickassembler/hires-plot-line.md +723 -0
  347. package/docs/recipes/kickassembler/irq-chain.md +316 -0
  348. package/docs/recipes/kickassembler/irq-owns-port.md +668 -0
  349. package/docs/recipes/kickassembler/isometric-room.md +1145 -0
  350. package/docs/recipes/kickassembler/light-pen-read.md +926 -0
  351. package/docs/recipes/kickassembler/logic-rate-decoupling.md +670 -0
  352. package/docs/recipes/kickassembler/mci-interlace.md +543 -0
  353. package/docs/recipes/kickassembler/memory-layout.md +277 -0
  354. package/docs/recipes/kickassembler/mouse-1351-read.md +801 -0
  355. package/docs/recipes/kickassembler/nmi-timer-tick.md +562 -0
  356. package/docs/recipes/kickassembler/own-keyscan.md +881 -0
  357. package/docs/recipes/kickassembler/paddle-read.md +751 -0
  358. package/docs/recipes/kickassembler/palette-cells.md +219 -0
  359. package/docs/recipes/kickassembler/pseudo-3d-road.md +930 -0
  360. package/docs/recipes/kickassembler/pwm-digi.md +463 -0
  361. package/docs/recipes/kickassembler/raster-bars.md +264 -0
  362. package/docs/recipes/kickassembler/reu-dma.md +1019 -0
  363. package/docs/recipes/kickassembler/runtime-relocation.md +743 -0
  364. package/docs/recipes/kickassembler/screen-dissolve.md +545 -0
  365. package/docs/recipes/kickassembler/screen-wipe.md +408 -0
  366. package/docs/recipes/kickassembler/screenshots/README.md +72 -0
  367. package/docs/recipes/kickassembler/screenshots/basic-float-calls-ntsc.png +0 -0
  368. package/docs/recipes/kickassembler/screenshots/basic-float-calls.png +0 -0
  369. package/docs/recipes/kickassembler/screenshots/basic-wedge-ntsc.png +0 -0
  370. package/docs/recipes/kickassembler/screenshots/basic-wedge.png +0 -0
  371. package/docs/recipes/kickassembler/screenshots/big-font-scroller-ntsc.png +0 -0
  372. package/docs/recipes/kickassembler/screenshots/big-font-scroller.png +0 -0
  373. package/docs/recipes/kickassembler/screenshots/charset-copy-rom-to-ram-ntsc.png +0 -0
  374. package/docs/recipes/kickassembler/screenshots/charset-copy-rom-to-ram.png +0 -0
  375. package/docs/recipes/kickassembler/screenshots/cia-revision-detect-ntsc.png +0 -0
  376. package/docs/recipes/kickassembler/screenshots/cia-revision-detect.png +0 -0
  377. package/docs/recipes/kickassembler/screenshots/colour-cycling-ntsc.png +0 -0
  378. package/docs/recipes/kickassembler/screenshots/colour-cycling.png +0 -0
  379. package/docs/recipes/kickassembler/screenshots/colour-fade-ntsc.png +0 -0
  380. package/docs/recipes/kickassembler/screenshots/colour-fade.png +0 -0
  381. package/docs/recipes/kickassembler/screenshots/compare-16bit-signed-ntsc.png +0 -0
  382. package/docs/recipes/kickassembler/screenshots/compare-16bit-signed.png +0 -0
  383. package/docs/recipes/kickassembler/screenshots/cracktro-template.png +0 -0
  384. package/docs/recipes/kickassembler/screenshots/crt-banked-ntsc.png +0 -0
  385. package/docs/recipes/kickassembler/screenshots/crt-banked.png +0 -0
  386. package/docs/recipes/kickassembler/screenshots/dos-error-codes-ntsc.png +0 -0
  387. package/docs/recipes/kickassembler/screenshots/dos-error-codes.png +0 -0
  388. package/docs/recipes/kickassembler/screenshots/dot-flag-ntsc.png +0 -0
  389. package/docs/recipes/kickassembler/screenshots/dot-flag.png +0 -0
  390. package/docs/recipes/kickassembler/screenshots/drive-job-queue-ntsc.png +0 -0
  391. package/docs/recipes/kickassembler/screenshots/drive-job-queue.png +0 -0
  392. package/docs/recipes/kickassembler/screenshots/drive-via-probe-ntsc.png +0 -0
  393. package/docs/recipes/kickassembler/screenshots/drive-via-probe.png +0 -0
  394. package/docs/recipes/kickassembler/screenshots/dycp-scroller-ntsc.png +0 -0
  395. package/docs/recipes/kickassembler/screenshots/dycp-scroller.png +0 -0
  396. package/docs/recipes/kickassembler/screenshots/dypp-sprite-scroller-ntsc.png +0 -0
  397. package/docs/recipes/kickassembler/screenshots/dypp-sprite-scroller.png +0 -0
  398. package/docs/recipes/kickassembler/screenshots/dysp-ntsc.png +0 -0
  399. package/docs/recipes/kickassembler/screenshots/dysp.png +0 -0
  400. package/docs/recipes/kickassembler/screenshots/easyflash-save-ntsc-run2.png +0 -0
  401. package/docs/recipes/kickassembler/screenshots/easyflash-save-ntsc.png +0 -0
  402. package/docs/recipes/kickassembler/screenshots/easyflash-save-run2.png +0 -0
  403. package/docs/recipes/kickassembler/screenshots/easyflash-save.png +0 -0
  404. package/docs/recipes/kickassembler/screenshots/eight-way-scroll-ntsc.png +0 -0
  405. package/docs/recipes/kickassembler/screenshots/eight-way-scroll.png +0 -0
  406. package/docs/recipes/kickassembler/screenshots/file-io-roundtrip-ntsc.png +0 -0
  407. package/docs/recipes/kickassembler/screenshots/file-io-roundtrip.png +0 -0
  408. package/docs/recipes/kickassembler/screenshots/fire-effect-ntsc.png +0 -0
  409. package/docs/recipes/kickassembler/screenshots/fire-effect.png +0 -0
  410. package/docs/recipes/kickassembler/screenshots/fld-ntsc.png +0 -0
  411. package/docs/recipes/kickassembler/screenshots/fld.png +0 -0
  412. package/docs/recipes/kickassembler/screenshots/fli-image.png +0 -0
  413. package/docs/recipes/kickassembler/screenshots/four-player-read-ntsc.png +0 -0
  414. package/docs/recipes/kickassembler/screenshots/four-player-read.png +0 -0
  415. package/docs/recipes/kickassembler/screenshots/headless-verify-ntsc.png +0 -0
  416. package/docs/recipes/kickassembler/screenshots/headless-verify.png +0 -0
  417. package/docs/recipes/kickassembler/screenshots/hello-world.png +0 -0
  418. package/docs/recipes/kickassembler/screenshots/high-score-insert-ntsc.png +0 -0
  419. package/docs/recipes/kickassembler/screenshots/high-score-insert.png +0 -0
  420. package/docs/recipes/kickassembler/screenshots/hires-plot-line-ntsc.png +0 -0
  421. package/docs/recipes/kickassembler/screenshots/hires-plot-line.png +0 -0
  422. package/docs/recipes/kickassembler/screenshots/irq-chain-ntsc.png +0 -0
  423. package/docs/recipes/kickassembler/screenshots/irq-chain.png +0 -0
  424. package/docs/recipes/kickassembler/screenshots/irq-owns-port-ntsc.png +0 -0
  425. package/docs/recipes/kickassembler/screenshots/irq-owns-port.png +0 -0
  426. package/docs/recipes/kickassembler/screenshots/isometric-room-ntsc.png +0 -0
  427. package/docs/recipes/kickassembler/screenshots/isometric-room.png +0 -0
  428. package/docs/recipes/kickassembler/screenshots/light-pen-read-ntsc.png +0 -0
  429. package/docs/recipes/kickassembler/screenshots/light-pen-read.png +0 -0
  430. package/docs/recipes/kickassembler/screenshots/logic-rate-decoupling-ntsc.png +0 -0
  431. package/docs/recipes/kickassembler/screenshots/logic-rate-decoupling.png +0 -0
  432. package/docs/recipes/kickassembler/screenshots/mci-interlace-average.png +0 -0
  433. package/docs/recipes/kickassembler/screenshots/mci-interlace-frame-b.png +0 -0
  434. package/docs/recipes/kickassembler/screenshots/mci-interlace-ntsc.png +0 -0
  435. package/docs/recipes/kickassembler/screenshots/mci-interlace.png +0 -0
  436. package/docs/recipes/kickassembler/screenshots/memory-layout-ntsc.png +0 -0
  437. package/docs/recipes/kickassembler/screenshots/memory-layout.png +0 -0
  438. package/docs/recipes/kickassembler/screenshots/mouse-1351-read-ntsc.png +0 -0
  439. package/docs/recipes/kickassembler/screenshots/mouse-1351-read.png +0 -0
  440. package/docs/recipes/kickassembler/screenshots/nmi-timer-tick-ntsc.png +0 -0
  441. package/docs/recipes/kickassembler/screenshots/nmi-timer-tick.png +0 -0
  442. package/docs/recipes/kickassembler/screenshots/own-keyscan-ntsc.png +0 -0
  443. package/docs/recipes/kickassembler/screenshots/own-keyscan.png +0 -0
  444. package/docs/recipes/kickassembler/screenshots/paddle-read-ntsc.png +0 -0
  445. package/docs/recipes/kickassembler/screenshots/paddle-read.png +0 -0
  446. package/docs/recipes/kickassembler/screenshots/palette-cells-ntsc.png +0 -0
  447. package/docs/recipes/kickassembler/screenshots/palette-cells.png +0 -0
  448. package/docs/recipes/kickassembler/screenshots/pseudo-3d-road-ntsc.png +0 -0
  449. package/docs/recipes/kickassembler/screenshots/pseudo-3d-road.png +0 -0
  450. package/docs/recipes/kickassembler/screenshots/pwm-digi-ntsc.png +0 -0
  451. package/docs/recipes/kickassembler/screenshots/pwm-digi.png +0 -0
  452. package/docs/recipes/kickassembler/screenshots/raster-bars.png +0 -0
  453. package/docs/recipes/kickassembler/screenshots/reu-dma-ntsc.png +0 -0
  454. package/docs/recipes/kickassembler/screenshots/reu-dma.png +0 -0
  455. package/docs/recipes/kickassembler/screenshots/runtime-relocation-ntsc.png +0 -0
  456. package/docs/recipes/kickassembler/screenshots/runtime-relocation.png +0 -0
  457. package/docs/recipes/kickassembler/screenshots/screen-dissolve-ntsc.png +0 -0
  458. package/docs/recipes/kickassembler/screenshots/screen-dissolve.png +0 -0
  459. package/docs/recipes/kickassembler/screenshots/screen-wipe-ntsc.png +0 -0
  460. package/docs/recipes/kickassembler/screenshots/screen-wipe.png +0 -0
  461. package/docs/recipes/kickassembler/screenshots/scroll-panel-split-ntsc.png +0 -0
  462. package/docs/recipes/kickassembler/screenshots/scroll-panel-split.png +0 -0
  463. package/docs/recipes/kickassembler/screenshots/sfx-in-player-ntsc.png +0 -0
  464. package/docs/recipes/kickassembler/screenshots/sfx-in-player.png +0 -0
  465. package/docs/recipes/kickassembler/screenshots/shadebobs-ntsc.png +0 -0
  466. package/docs/recipes/kickassembler/screenshots/shadebobs.png +0 -0
  467. package/docs/recipes/kickassembler/screenshots/sideborder-open.png +0 -0
  468. package/docs/recipes/kickassembler/screenshots/sine-scroller.png +0 -0
  469. package/docs/recipes/kickassembler/screenshots/sine-table-runtime-ntsc.png +0 -0
  470. package/docs/recipes/kickassembler/screenshots/sine-table-runtime.png +0 -0
  471. package/docs/recipes/kickassembler/screenshots/software-sprite-preshifted-ntsc.png +0 -0
  472. package/docs/recipes/kickassembler/screenshots/software-sprite-preshifted.png +0 -0
  473. package/docs/recipes/kickassembler/screenshots/speedcode-generator-ntsc.png +0 -0
  474. package/docs/recipes/kickassembler/screenshots/speedcode-generator.png +0 -0
  475. package/docs/recipes/kickassembler/screenshots/sprite-border-scroller-ntsc.png +0 -0
  476. package/docs/recipes/kickassembler/screenshots/sprite-border-scroller.png +0 -0
  477. package/docs/recipes/kickassembler/screenshots/sprite-cache-flip-ntsc.png +0 -0
  478. package/docs/recipes/kickassembler/screenshots/sprite-cache-flip.png +0 -0
  479. package/docs/recipes/kickassembler/screenshots/sprite-multiplex-24.png +0 -0
  480. package/docs/recipes/kickassembler/screenshots/sprite-multiplex-game-ntsc.png +0 -0
  481. package/docs/recipes/kickassembler/screenshots/sprite-multiplex-game.png +0 -0
  482. package/docs/recipes/kickassembler/screenshots/sprite-priority-classes-ntsc.png +0 -0
  483. package/docs/recipes/kickassembler/screenshots/sprite-priority-classes.png +0 -0
  484. package/docs/recipes/kickassembler/screenshots/sprite-sine-chain-ntsc.png +0 -0
  485. package/docs/recipes/kickassembler/screenshots/sprite-sine-chain.png +0 -0
  486. package/docs/recipes/kickassembler/screenshots/sprite-stretcher-ntsc.png +0 -0
  487. package/docs/recipes/kickassembler/screenshots/sprite-stretcher.png +0 -0
  488. package/docs/recipes/kickassembler/screenshots/sprites-only-screen-ntsc.png +0 -0
  489. package/docs/recipes/kickassembler/screenshots/sprites-only-screen.png +0 -0
  490. package/docs/recipes/kickassembler/screenshots/sqrt-atan2-ntsc.png +0 -0
  491. package/docs/recipes/kickassembler/screenshots/sqrt-atan2.png +0 -0
  492. package/docs/recipes/kickassembler/screenshots/stable-raster-irq-control.png +0 -0
  493. package/docs/recipes/kickassembler/screenshots/stable-raster-irq.png +0 -0
  494. package/docs/recipes/kickassembler/screenshots/tech-tech-ntsc.png +0 -0
  495. package/docs/recipes/kickassembler/screenshots/tech-tech.png +0 -0
  496. package/docs/recipes/kickassembler/screenshots/tod-alarm-ntsc.png +0 -0
  497. package/docs/recipes/kickassembler/screenshots/tod-alarm.png +0 -0
  498. package/docs/recipes/kickassembler/screenshots/topbottom-border-open.png +0 -0
  499. package/docs/recipes/kickassembler/screenshots/twister-ntsc.png +0 -0
  500. package/docs/recipes/kickassembler/screenshots/twister.png +0 -0
  501. package/docs/recipes/kickassembler/screenshots/unit-test-driver-ntsc.png +0 -0
  502. package/docs/recipes/kickassembler/screenshots/unit-test-driver.png +0 -0
  503. package/docs/recipes/kickassembler/screenshots/vector-balls-ntsc.png +0 -0
  504. package/docs/recipes/kickassembler/screenshots/vector-balls.png +0 -0
  505. package/docs/recipes/kickassembler/screenshots/wireframe-ships-ntsc.png +0 -0
  506. package/docs/recipes/kickassembler/screenshots/wireframe-ships.png +0 -0
  507. package/docs/recipes/kickassembler/scroll-panel-split.md +381 -0
  508. package/docs/recipes/kickassembler/sfx-in-player.md +907 -0
  509. package/docs/recipes/kickassembler/shadebobs.md +522 -0
  510. package/docs/recipes/kickassembler/sideborder-open.md +338 -0
  511. package/docs/recipes/kickassembler/sine-scroller.md +321 -0
  512. package/docs/recipes/kickassembler/sine-table-runtime.md +815 -0
  513. package/docs/recipes/kickassembler/software-sprite-preshifted.md +725 -0
  514. package/docs/recipes/kickassembler/speedcode-generator.md +606 -0
  515. package/docs/recipes/kickassembler/sprite-border-scroller.md +696 -0
  516. package/docs/recipes/kickassembler/sprite-cache-flip.md +1071 -0
  517. package/docs/recipes/kickassembler/sprite-multiplex-24.md +326 -0
  518. package/docs/recipes/kickassembler/sprite-multiplex-game.md +986 -0
  519. package/docs/recipes/kickassembler/sprite-priority-classes.md +463 -0
  520. package/docs/recipes/kickassembler/sprite-sine-chain.md +338 -0
  521. package/docs/recipes/kickassembler/sprite-stretcher.md +501 -0
  522. package/docs/recipes/kickassembler/sprites-only-screen.md +550 -0
  523. package/docs/recipes/kickassembler/sqrt-atan2.md +1014 -0
  524. package/docs/recipes/kickassembler/stable-raster-irq.md +360 -0
  525. package/docs/recipes/kickassembler/tape-turbo-loader.md +875 -0
  526. package/docs/recipes/kickassembler/tech-tech.md +679 -0
  527. package/docs/recipes/kickassembler/tod-alarm.md +754 -0
  528. package/docs/recipes/kickassembler/topbottom-border-open.md +407 -0
  529. package/docs/recipes/kickassembler/twister.md +518 -0
  530. package/docs/recipes/kickassembler/unit-test-driver.md +314 -0
  531. package/docs/recipes/kickassembler/vector-balls.md +545 -0
  532. package/docs/recipes/kickassembler/wireframe-ships.md +2324 -0
  533. package/docs/recipes/oscar64/actor-activation-window.md +807 -0
  534. package/docs/recipes/oscar64/adventure-engine.md +1094 -0
  535. package/docs/recipes/oscar64/attract-replay.md +465 -0
  536. package/docs/recipes/oscar64/beat-em-up-lanes.md +563 -0
  537. package/docs/recipes/oscar64/bfs-distance-map.md +723 -0
  538. package/docs/recipes/oscar64/bitmap-koala-viewer.md +355 -0
  539. package/docs/recipes/oscar64/car-contact.md +950 -0
  540. package/docs/recipes/oscar64/cave-scan.md +609 -0
  541. package/docs/recipes/oscar64/char-bullets.md +477 -0
  542. package/docs/recipes/oscar64/charset-animation.md +383 -0
  543. package/docs/recipes/oscar64/charset-parallax.md +401 -0
  544. package/docs/recipes/oscar64/destructible-terrain.md +1099 -0
  545. package/docs/recipes/oscar64/difficulty-tables.md +654 -0
  546. package/docs/recipes/oscar64/dig-and-guards.md +975 -0
  547. package/docs/recipes/oscar64/directory-reader.md +535 -0
  548. package/docs/recipes/oscar64/divide-check.md +581 -0
  549. package/docs/recipes/oscar64/double-buffer-nomirror.md +205 -0
  550. package/docs/recipes/oscar64/double-buffer.md +255 -0
  551. package/docs/recipes/oscar64/falling-blocks.md +874 -0
  552. package/docs/recipes/oscar64/fixed-point-jump-velocity.md +289 -0
  553. package/docs/recipes/oscar64/fixed-point-jump.md +210 -0
  554. package/docs/recipes/oscar64/flip-screen-rooms.md +793 -0
  555. package/docs/recipes/oscar64/frame-sync-loop-overrun.md +214 -0
  556. package/docs/recipes/oscar64/frame-sync-loop.md +254 -0
  557. package/docs/recipes/oscar64/game-tree-search.md +743 -0
  558. package/docs/recipes/oscar64/ghost-targeting.md +867 -0
  559. package/docs/recipes/oscar64/headless-verify.md +345 -0
  560. package/docs/recipes/oscar64/hello-world.md +83 -0
  561. package/docs/recipes/oscar64/high-score-persist.md +772 -0
  562. package/docs/recipes/oscar64/iffl-kernal-skip.md +421 -0
  563. package/docs/recipes/oscar64/joystick-input.md +358 -0
  564. package/docs/recipes/oscar64/lane-pursuit.md +1028 -0
  565. package/docs/recipes/oscar64/level-rle-decoder.md +620 -0
  566. package/docs/recipes/oscar64/lfsr-random-seed2.md +338 -0
  567. package/docs/recipes/oscar64/lfsr-random.md +403 -0
  568. package/docs/recipes/oscar64/load-asset-runtime.md +492 -0
  569. package/docs/recipes/oscar64/memory-layout.md +232 -0
  570. package/docs/recipes/oscar64/mixed-fighters.md +781 -0
  571. package/docs/recipes/oscar64/multi-sprite-object.md +533 -0
  572. package/docs/recipes/oscar64/nav-area-pathfinding.md +881 -0
  573. package/docs/recipes/oscar64/object-pool.md +572 -0
  574. package/docs/recipes/oscar64/pal-ntsc-detect.md +257 -0
  575. package/docs/recipes/oscar64/password-state.md +532 -0
  576. package/docs/recipes/oscar64/per-frame-hitbox.md +651 -0
  577. package/docs/recipes/oscar64/petscii-screen-codes.md +428 -0
  578. package/docs/recipes/oscar64/platformer-scaffold.md +1467 -0
  579. package/docs/recipes/oscar64/print-number.md +367 -0
  580. package/docs/recipes/oscar64/raster-bars.md +239 -0
  581. package/docs/recipes/oscar64/raster-profile-bars.md +404 -0
  582. package/docs/recipes/oscar64/rel-side-sectors.md +391 -0
  583. package/docs/recipes/oscar64/relative-file-records.md +378 -0
  584. package/docs/recipes/oscar64/save-load-seq-file.md +365 -0
  585. package/docs/recipes/oscar64/screenshots/README.md +99 -0
  586. package/docs/recipes/oscar64/screenshots/actor-activation-window-ntsc.png +0 -0
  587. package/docs/recipes/oscar64/screenshots/actor-activation-window.png +0 -0
  588. package/docs/recipes/oscar64/screenshots/adventure-engine-ntsc.png +0 -0
  589. package/docs/recipes/oscar64/screenshots/adventure-engine.png +0 -0
  590. package/docs/recipes/oscar64/screenshots/attract-replay-ntsc.png +0 -0
  591. package/docs/recipes/oscar64/screenshots/attract-replay.png +0 -0
  592. package/docs/recipes/oscar64/screenshots/beat-em-up-lanes-ntsc.png +0 -0
  593. package/docs/recipes/oscar64/screenshots/beat-em-up-lanes.png +0 -0
  594. package/docs/recipes/oscar64/screenshots/bfs-distance-map-ntsc.png +0 -0
  595. package/docs/recipes/oscar64/screenshots/bfs-distance-map.png +0 -0
  596. package/docs/recipes/oscar64/screenshots/bitmap-koala-viewer.png +0 -0
  597. package/docs/recipes/oscar64/screenshots/car-contact-ntsc.png +0 -0
  598. package/docs/recipes/oscar64/screenshots/car-contact.png +0 -0
  599. package/docs/recipes/oscar64/screenshots/cave-scan-ntsc.png +0 -0
  600. package/docs/recipes/oscar64/screenshots/cave-scan.png +0 -0
  601. package/docs/recipes/oscar64/screenshots/char-bullets-ntsc.png +0 -0
  602. package/docs/recipes/oscar64/screenshots/char-bullets.png +0 -0
  603. package/docs/recipes/oscar64/screenshots/charset-animation-ntsc.png +0 -0
  604. package/docs/recipes/oscar64/screenshots/charset-animation.png +0 -0
  605. package/docs/recipes/oscar64/screenshots/charset-parallax-ntsc.png +0 -0
  606. package/docs/recipes/oscar64/screenshots/charset-parallax.png +0 -0
  607. package/docs/recipes/oscar64/screenshots/destructible-terrain-ntsc.png +0 -0
  608. package/docs/recipes/oscar64/screenshots/destructible-terrain.png +0 -0
  609. package/docs/recipes/oscar64/screenshots/difficulty-tables-ntsc.png +0 -0
  610. package/docs/recipes/oscar64/screenshots/difficulty-tables.png +0 -0
  611. package/docs/recipes/oscar64/screenshots/dig-and-guards-ntsc.png +0 -0
  612. package/docs/recipes/oscar64/screenshots/dig-and-guards.png +0 -0
  613. package/docs/recipes/oscar64/screenshots/directory-reader-ntsc.png +0 -0
  614. package/docs/recipes/oscar64/screenshots/directory-reader.png +0 -0
  615. package/docs/recipes/oscar64/screenshots/divide-check-ntsc.png +0 -0
  616. package/docs/recipes/oscar64/screenshots/divide-check.png +0 -0
  617. package/docs/recipes/oscar64/screenshots/double-buffer-nomirror.png +0 -0
  618. package/docs/recipes/oscar64/screenshots/double-buffer-ntsc.png +0 -0
  619. package/docs/recipes/oscar64/screenshots/double-buffer.png +0 -0
  620. package/docs/recipes/oscar64/screenshots/falling-blocks-ntsc.png +0 -0
  621. package/docs/recipes/oscar64/screenshots/falling-blocks.png +0 -0
  622. package/docs/recipes/oscar64/screenshots/fixed-point-jump-ntsc.png +0 -0
  623. package/docs/recipes/oscar64/screenshots/fixed-point-jump-velocity-ntsc.png +0 -0
  624. package/docs/recipes/oscar64/screenshots/fixed-point-jump-velocity.png +0 -0
  625. package/docs/recipes/oscar64/screenshots/fixed-point-jump.png +0 -0
  626. package/docs/recipes/oscar64/screenshots/flip-screen-rooms-ntsc.png +0 -0
  627. package/docs/recipes/oscar64/screenshots/flip-screen-rooms.png +0 -0
  628. package/docs/recipes/oscar64/screenshots/frame-sync-loop-ntsc.png +0 -0
  629. package/docs/recipes/oscar64/screenshots/frame-sync-loop-overrun.png +0 -0
  630. package/docs/recipes/oscar64/screenshots/frame-sync-loop.png +0 -0
  631. package/docs/recipes/oscar64/screenshots/game-tree-search-ntsc.png +0 -0
  632. package/docs/recipes/oscar64/screenshots/game-tree-search.png +0 -0
  633. package/docs/recipes/oscar64/screenshots/ghost-targeting-ntsc.png +0 -0
  634. package/docs/recipes/oscar64/screenshots/ghost-targeting.png +0 -0
  635. package/docs/recipes/oscar64/screenshots/headless-verify-ntsc.png +0 -0
  636. package/docs/recipes/oscar64/screenshots/headless-verify.png +0 -0
  637. package/docs/recipes/oscar64/screenshots/hello-world.png +0 -0
  638. package/docs/recipes/oscar64/screenshots/high-score-persist-ntsc.png +0 -0
  639. package/docs/recipes/oscar64/screenshots/high-score-persist.png +0 -0
  640. package/docs/recipes/oscar64/screenshots/iffl-kernal-skip-ntsc.png +0 -0
  641. package/docs/recipes/oscar64/screenshots/iffl-kernal-skip.png +0 -0
  642. package/docs/recipes/oscar64/screenshots/joystick-input-ntsc.png +0 -0
  643. package/docs/recipes/oscar64/screenshots/joystick-input.png +0 -0
  644. package/docs/recipes/oscar64/screenshots/lane-pursuit-ntsc.png +0 -0
  645. package/docs/recipes/oscar64/screenshots/lane-pursuit.png +0 -0
  646. package/docs/recipes/oscar64/screenshots/level-rle-decoder-ntsc.png +0 -0
  647. package/docs/recipes/oscar64/screenshots/level-rle-decoder.png +0 -0
  648. package/docs/recipes/oscar64/screenshots/lfsr-random-ntsc.png +0 -0
  649. package/docs/recipes/oscar64/screenshots/lfsr-random-seed2.png +0 -0
  650. package/docs/recipes/oscar64/screenshots/lfsr-random.png +0 -0
  651. package/docs/recipes/oscar64/screenshots/load-asset-runtime-ntsc.png +0 -0
  652. package/docs/recipes/oscar64/screenshots/load-asset-runtime.png +0 -0
  653. package/docs/recipes/oscar64/screenshots/memory-layout-ntsc.png +0 -0
  654. package/docs/recipes/oscar64/screenshots/memory-layout.png +0 -0
  655. package/docs/recipes/oscar64/screenshots/mixed-fighters-ntsc.png +0 -0
  656. package/docs/recipes/oscar64/screenshots/mixed-fighters.png +0 -0
  657. package/docs/recipes/oscar64/screenshots/multi-sprite-object-ntsc.png +0 -0
  658. package/docs/recipes/oscar64/screenshots/multi-sprite-object.png +0 -0
  659. package/docs/recipes/oscar64/screenshots/nav-area-pathfinding-ntsc.png +0 -0
  660. package/docs/recipes/oscar64/screenshots/nav-area-pathfinding.png +0 -0
  661. package/docs/recipes/oscar64/screenshots/object-pool-ntsc.png +0 -0
  662. package/docs/recipes/oscar64/screenshots/object-pool.png +0 -0
  663. package/docs/recipes/oscar64/screenshots/pal-ntsc-detect-ntsc.png +0 -0
  664. package/docs/recipes/oscar64/screenshots/pal-ntsc-detect-oldntsc.png +0 -0
  665. package/docs/recipes/oscar64/screenshots/pal-ntsc-detect-pal.png +0 -0
  666. package/docs/recipes/oscar64/screenshots/password-state-ntsc.png +0 -0
  667. package/docs/recipes/oscar64/screenshots/password-state.png +0 -0
  668. package/docs/recipes/oscar64/screenshots/per-frame-hitbox-ntsc.png +0 -0
  669. package/docs/recipes/oscar64/screenshots/per-frame-hitbox.png +0 -0
  670. package/docs/recipes/oscar64/screenshots/petscii-screen-codes-ntsc.png +0 -0
  671. package/docs/recipes/oscar64/screenshots/petscii-screen-codes.png +0 -0
  672. package/docs/recipes/oscar64/screenshots/platformer-scaffold-d64-ntsc.png +0 -0
  673. package/docs/recipes/oscar64/screenshots/platformer-scaffold-d64.png +0 -0
  674. package/docs/recipes/oscar64/screenshots/platformer-scaffold-ntsc.png +0 -0
  675. package/docs/recipes/oscar64/screenshots/platformer-scaffold.png +0 -0
  676. package/docs/recipes/oscar64/screenshots/print-number-ntsc.png +0 -0
  677. package/docs/recipes/oscar64/screenshots/print-number.png +0 -0
  678. package/docs/recipes/oscar64/screenshots/raster-bars.png +0 -0
  679. package/docs/recipes/oscar64/screenshots/raster-profile-bars-ntsc.png +0 -0
  680. package/docs/recipes/oscar64/screenshots/raster-profile-bars.png +0 -0
  681. package/docs/recipes/oscar64/screenshots/rel-side-sectors-ntsc.png +0 -0
  682. package/docs/recipes/oscar64/screenshots/rel-side-sectors.png +0 -0
  683. package/docs/recipes/oscar64/screenshots/relative-file-records-ntsc.png +0 -0
  684. package/docs/recipes/oscar64/screenshots/relative-file-records.png +0 -0
  685. package/docs/recipes/oscar64/screenshots/save-load-seq-file-ntsc.png +0 -0
  686. package/docs/recipes/oscar64/screenshots/save-load-seq-file.png +0 -0
  687. package/docs/recipes/oscar64/screenshots/seeded-level-fill-ntsc.png +0 -0
  688. package/docs/recipes/oscar64/screenshots/seeded-level-fill.png +0 -0
  689. package/docs/recipes/oscar64/screenshots/sfx-engine-ntsc.png +0 -0
  690. package/docs/recipes/oscar64/screenshots/sfx-engine.png +0 -0
  691. package/docs/recipes/oscar64/screenshots/sid-music-player.png +0 -0
  692. package/docs/recipes/oscar64/screenshots/simple-shmup.png +0 -0
  693. package/docs/recipes/oscar64/screenshots/slope-collision-ntsc.png +0 -0
  694. package/docs/recipes/oscar64/screenshots/slope-collision.png +0 -0
  695. package/docs/recipes/oscar64/screenshots/soft-scroll-h.png +0 -0
  696. package/docs/recipes/oscar64/screenshots/sprite-animation-table-ntsc.png +0 -0
  697. package/docs/recipes/oscar64/screenshots/sprite-animation-table.png +0 -0
  698. package/docs/recipes/oscar64/screenshots/sprite-multiplex-8.png +0 -0
  699. package/docs/recipes/oscar64/screenshots/stable-raster-irq.png +0 -0
  700. package/docs/recipes/oscar64/screenshots/text-input-ntsc.png +0 -0
  701. package/docs/recipes/oscar64/screenshots/text-input.png +0 -0
  702. package/docs/recipes/oscar64/screenshots/text-overlay-playfield-gameover.png +0 -0
  703. package/docs/recipes/oscar64/screenshots/text-overlay-playfield-notrail-control.png +0 -0
  704. package/docs/recipes/oscar64/screenshots/text-overlay-playfield-ntsc.png +0 -0
  705. package/docs/recipes/oscar64/screenshots/text-overlay-playfield-ungated-control.png +0 -0
  706. package/docs/recipes/oscar64/screenshots/text-overlay-playfield.png +0 -0
  707. package/docs/recipes/oscar64/screenshots/text-window-menu-ntsc.png +0 -0
  708. package/docs/recipes/oscar64/screenshots/text-window-menu.png +0 -0
  709. package/docs/recipes/oscar64/screenshots/tile-grid-collision-ntsc.png +0 -0
  710. package/docs/recipes/oscar64/screenshots/tile-grid-collision.png +0 -0
  711. package/docs/recipes/oscar64/screenshots/tile-map-render-ntsc.png +0 -0
  712. package/docs/recipes/oscar64/screenshots/tile-map-render.png +0 -0
  713. package/docs/recipes/oscar64/screenshots/two-player-ntsc.png +0 -0
  714. package/docs/recipes/oscar64/screenshots/two-player.png +0 -0
  715. package/docs/recipes/oscar64/screenshots/two-word-parser-ntsc.png +0 -0
  716. package/docs/recipes/oscar64/screenshots/two-word-parser.png +0 -0
  717. package/docs/recipes/oscar64/screenshots/vehicle-control-ntsc.png +0 -0
  718. package/docs/recipes/oscar64/screenshots/vehicle-control.png +0 -0
  719. package/docs/recipes/oscar64/screenshots/wave-director-ntsc.png +0 -0
  720. package/docs/recipes/oscar64/screenshots/wave-director.png +0 -0
  721. package/docs/recipes/oscar64/seeded-level-fill.md +364 -0
  722. package/docs/recipes/oscar64/sfx-engine.md +514 -0
  723. package/docs/recipes/oscar64/sid-music-player.md +441 -0
  724. package/docs/recipes/oscar64/simple-shmup.md +1000 -0
  725. package/docs/recipes/oscar64/slope-collision.md +610 -0
  726. package/docs/recipes/oscar64/soft-scroll-h.md +261 -0
  727. package/docs/recipes/oscar64/sprite-animation-table.md +671 -0
  728. package/docs/recipes/oscar64/sprite-multiplex-8.md +314 -0
  729. package/docs/recipes/oscar64/stable-raster-irq.md +236 -0
  730. package/docs/recipes/oscar64/text-input.md +274 -0
  731. package/docs/recipes/oscar64/text-overlay-playfield.md +617 -0
  732. package/docs/recipes/oscar64/text-window-menu.md +551 -0
  733. package/docs/recipes/oscar64/tile-grid-collision.md +563 -0
  734. package/docs/recipes/oscar64/tile-map-render.md +395 -0
  735. package/docs/recipes/oscar64/two-player.md +528 -0
  736. package/docs/recipes/oscar64/two-word-parser.md +510 -0
  737. package/docs/recipes/oscar64/vehicle-control.md +771 -0
  738. package/docs/recipes/oscar64/wave-director.md +787 -0
  739. package/docs/recipes/runs.json +1606 -0
  740. package/docs/runtime/sim6502-reference.md +466 -0
  741. package/docs/runtime/vice-mcp-reference.md +351 -0
  742. package/docs/runtime/vice-reference.md +1393 -0
  743. package/docs/techniques/bitmap-modes.md +685 -0
  744. package/docs/techniques/cpu-cycle-tricks.md +1570 -0
  745. package/docs/techniques/effects-vector-3d.md +1431 -0
  746. package/docs/techniques/file-io.md +1427 -0
  747. package/docs/techniques/input.md +1072 -0
  748. package/docs/techniques/loaders-packers.md +768 -0
  749. package/docs/techniques/logic.md +3091 -0
  750. package/docs/techniques/maths.md +1524 -0
  751. package/docs/techniques/memory-banking.md +1686 -0
  752. package/docs/techniques/music-sid.md +1144 -0
  753. package/docs/techniques/raster.md +1543 -0
  754. package/docs/techniques/scroll.md +1292 -0
  755. package/docs/techniques/sprite.md +2566 -0
  756. package/docs/techniques/text-mode-render.md +717 -0
  757. package/docs/techniques/text.md +1095 -0
  758. package/docs/techniques/transitions.md +405 -0
  759. package/docs/toolchains/cartconv-reference.md +262 -0
  760. package/docs/toolchains/cc1541-reference.md +316 -0
  761. package/docs/toolchains/cc65-reference.md +667 -0
  762. package/docs/toolchains/error-sources/cc65/README.md +1 -0
  763. package/docs/toolchains/error-sources/cc65/missing-setcpu.s +4 -0
  764. package/docs/toolchains/error-sources/cc65/range-error.s +4 -0
  765. package/docs/toolchains/error-sources/cc65/segment-overflow.c +6 -0
  766. package/docs/toolchains/error-sources/cc65/unresolved-external.c +6 -0
  767. package/docs/toolchains/error-sources/kickassembler/README.md +1 -0
  768. package/docs/toolchains/error-sources/kickassembler/branch-out-of-range.asm +4 -0
  769. package/docs/toolchains/error-sources/kickassembler/failed-assert.asm +3 -0
  770. package/docs/toolchains/error-sources/kickassembler/flat-lib.asm +4 -0
  771. package/docs/toolchains/error-sources/kickassembler/import-source-no-namespace.asm +5 -0
  772. package/docs/toolchains/error-sources/kickassembler/macro-without-parentheses.asm +6 -0
  773. package/docs/toolchains/error-sources/kickassembler/memory-block-overlap.asm +4 -0
  774. package/docs/toolchains/error-sources/kickassembler/symbol-clash-lib.asm +5 -0
  775. package/docs/toolchains/error-sources/kickassembler/symbol-clash-main.asm +6 -0
  776. package/docs/toolchains/error-sources/kickassembler/unknown-symbol.asm +4 -0
  777. package/docs/toolchains/error-sources/oscar64/README.md +1 -0
  778. package/docs/toolchains/error-sources/oscar64/asm-addressing-mode.c +7 -0
  779. package/docs/toolchains/error-sources/oscar64/region-overflow.c +6 -0
  780. package/docs/toolchains/error-sources/oscar64/undefined-extern-var.c +5 -0
  781. package/docs/toolchains/error-sources/oscar64/undefined-extern.c +6 -0
  782. package/docs/toolchains/error-sources/oscar64/unknown-vic-field.c +6 -0
  783. package/docs/toolchains/error-sources/oscar64/void-main.c +3 -0
  784. package/docs/toolchains/kickassembler-reference.md +1020 -0
  785. package/docs/toolchains/memory-layout-planning.md +362 -0
  786. package/docs/toolchains/oscar64-headers-reference.md +583 -0
  787. package/docs/toolchains/oscar64-reference.md +892 -0
  788. package/docs/toolchains/petcat-reference.md +290 -0
  789. package/docs/toolchains/png2prg.md +188 -0
  790. package/docs/toolchains/release-disk.md +314 -0
  791. package/docs/toolchains/sidreloc.md +236 -0
  792. package/docs/toolchains/spindle-reference.md +487 -0
  793. package/docs/toolchains/tape-mastering.md +592 -0
  794. package/docs/toolchains/unit-testing-6502.md +281 -0
  795. package/docs/workflow/agent-harness.md +478 -0
  796. package/package.json +105 -0
  797. package/templates/_harness/CLAUDE.md.template +91 -0
  798. package/templates/_harness/PLAN.md.template +72 -0
  799. package/templates/_harness/check.py +442 -0
  800. package/templates/_harness/claude/settings.json +17 -0
  801. package/templates/_harness/gen-asm-header.py +96 -0
  802. package/templates/_harness/harness.mk +273 -0
  803. package/templates/_harness/hooks/plan-gate.py +185 -0
  804. package/templates/_harness/meter/frame_meter.asm +311 -0
  805. package/templates/_harness/meter/frame_meter.c +155 -0
  806. package/templates/_harness/meter/frame_meter.h +80 -0
  807. package/templates/_harness/zp-used.py +104 -0
  808. package/templates/action-puzzle/.claude/settings.json +17 -0
  809. package/templates/action-puzzle/.mcp.json +10 -0
  810. package/templates/action-puzzle/CLAUDE.md +120 -0
  811. package/templates/action-puzzle/Makefile +125 -0
  812. package/templates/action-puzzle/PLAN.md +388 -0
  813. package/templates/action-puzzle/README.md +240 -0
  814. package/templates/action-puzzle/expect.json +25 -0
  815. package/templates/action-puzzle/src/cave.c +280 -0
  816. package/templates/action-puzzle/src/cave.h +80 -0
  817. package/templates/action-puzzle/src/gen_autopilot.h +20 -0
  818. package/templates/action-puzzle/src/gen_caves.h +59 -0
  819. package/templates/action-puzzle/src/gen_notes.h +16 -0
  820. package/templates/action-puzzle/src/hiscore.c +152 -0
  821. package/templates/action-puzzle/src/hiscore.h +41 -0
  822. package/templates/action-puzzle/src/level.c +64 -0
  823. package/templates/action-puzzle/src/level.h +24 -0
  824. package/templates/action-puzzle/src/main.c +599 -0
  825. package/templates/action-puzzle/src/render.c +239 -0
  826. package/templates/action-puzzle/src/render.h +31 -0
  827. package/templates/action-puzzle/src/sound.c +158 -0
  828. package/templates/action-puzzle/src/sound.h +22 -0
  829. package/templates/action-puzzle/tools/disk_check.py +77 -0
  830. package/templates/action-puzzle/tools/drive.py +106 -0
  831. package/templates/action-puzzle/tools/gen.py +454 -0
  832. package/templates/action-puzzle/tools/model_check.py +49 -0
  833. package/templates/action-puzzle/tools/verdict_codes.py +24 -0
  834. package/templates/adventure/.claude/settings.json +17 -0
  835. package/templates/adventure/.mcp.json +10 -0
  836. package/templates/adventure/CLAUDE.md +118 -0
  837. package/templates/adventure/Makefile +113 -0
  838. package/templates/adventure/PLAN.md +396 -0
  839. package/templates/adventure/README.md +277 -0
  840. package/templates/adventure/expect.json +25 -0
  841. package/templates/adventure/src/engine.c +543 -0
  842. package/templates/adventure/src/engine.h +48 -0
  843. package/templates/adventure/src/gen_script.h +141 -0
  844. package/templates/adventure/src/gen_world.h +511 -0
  845. package/templates/adventure/src/main.c +439 -0
  846. package/templates/adventure/src/picture.c +83 -0
  847. package/templates/adventure/src/picture.h +16 -0
  848. package/templates/adventure/src/save.c +159 -0
  849. package/templates/adventure/src/save.h +25 -0
  850. package/templates/adventure/src/sound.c +71 -0
  851. package/templates/adventure/src/sound.h +16 -0
  852. package/templates/adventure/src/text.c +349 -0
  853. package/templates/adventure/src/text.h +40 -0
  854. package/templates/adventure/tools/disk_check.py +128 -0
  855. package/templates/adventure/tools/drive.py +119 -0
  856. package/templates/adventure/tools/gen.py +1033 -0
  857. package/templates/adventure/tools/world.py +356 -0
  858. package/templates/beat-em-up/.claude/settings.json +17 -0
  859. package/templates/beat-em-up/.mcp.json +10 -0
  860. package/templates/beat-em-up/CLAUDE.md +136 -0
  861. package/templates/beat-em-up/Makefile +96 -0
  862. package/templates/beat-em-up/PLAN.md +502 -0
  863. package/templates/beat-em-up/README.md +315 -0
  864. package/templates/beat-em-up/expect-gameover.json +8 -0
  865. package/templates/beat-em-up/expect.json +29 -0
  866. package/templates/beat-em-up/src/anim.c +70 -0
  867. package/templates/beat-em-up/src/art.c +344 -0
  868. package/templates/beat-em-up/src/autopilot.h +154 -0
  869. package/templates/beat-em-up/src/brute.c +273 -0
  870. package/templates/beat-em-up/src/enemy.c +281 -0
  871. package/templates/beat-em-up/src/engine.asm +512 -0
  872. package/templates/beat-em-up/src/fighter.c +384 -0
  873. package/templates/beat-em-up/src/game.h +269 -0
  874. package/templates/beat-em-up/src/hud.c +135 -0
  875. package/templates/beat-em-up/src/main.c +341 -0
  876. package/templates/beat-em-up/src/sound.c +44 -0
  877. package/templates/beat-em-up/src/street.c +93 -0
  878. package/templates/beat-em-up/src/verdict.h +523 -0
  879. package/templates/beat-em-up/src/view.c +362 -0
  880. package/templates/beat-em-up/tools/drive.py +105 -0
  881. package/templates/beat-em-up/tools/flickercheck.py +273 -0
  882. package/templates/demo/.claude/settings.json +17 -0
  883. package/templates/demo/.mcp.json +10 -0
  884. package/templates/demo/CLAUDE.md +129 -0
  885. package/templates/demo/Makefile +66 -0
  886. package/templates/demo/PLAN.md +401 -0
  887. package/templates/demo/README.md +322 -0
  888. package/templates/demo/expect.json +945 -0
  889. package/templates/demo/src/config.asm +80 -0
  890. package/templates/demo/src/framework.asm +390 -0
  891. package/templates/demo/src/main.asm +139 -0
  892. package/templates/demo/src/music.asm +197 -0
  893. package/templates/demo/src/part_main.asm +279 -0
  894. package/templates/demo/src/part_title.asm +79 -0
  895. package/templates/demo/src/parts.asm +43 -0
  896. package/templates/demo/src/tables.asm +73 -0
  897. package/templates/demo/src/verdict.asm +179 -0
  898. package/templates/demo/tools/audio.py +80 -0
  899. package/templates/demo/tools/gen_expect.py +167 -0
  900. package/templates/demo/tools/probe.py +95 -0
  901. package/templates/hello/.claude/settings.json +17 -0
  902. package/templates/hello/.mcp.json +10 -0
  903. package/templates/hello/CLAUDE.md +100 -0
  904. package/templates/hello/Makefile +38 -0
  905. package/templates/hello/PLAN.md +200 -0
  906. package/templates/hello/expect.json +20 -0
  907. package/templates/hello/src/main.c +161 -0
  908. package/templates/hello/src/sprite.asm +27 -0
  909. package/templates/hello-kick/.claude/settings.json +17 -0
  910. package/templates/hello-kick/.mcp.json +10 -0
  911. package/templates/hello-kick/CLAUDE.md +100 -0
  912. package/templates/hello-kick/Makefile +17 -0
  913. package/templates/hello-kick/PLAN.md +199 -0
  914. package/templates/hello-kick/expect.json +20 -0
  915. package/templates/hello-kick/src/main.asm +233 -0
  916. package/templates/platformer/.claude/settings.json +17 -0
  917. package/templates/platformer/.mcp.json +10 -0
  918. package/templates/platformer/CLAUDE.md +125 -0
  919. package/templates/platformer/Makefile +86 -0
  920. package/templates/platformer/PLAN.md +360 -0
  921. package/templates/platformer/README.md +277 -0
  922. package/templates/platformer/expect.json +32 -0
  923. package/templates/platformer/src/actors.c +289 -0
  924. package/templates/platformer/src/anim.c +51 -0
  925. package/templates/platformer/src/art.c +212 -0
  926. package/templates/platformer/src/autopilot.h +30 -0
  927. package/templates/platformer/src/engine.asm +253 -0
  928. package/templates/platformer/src/game.h +248 -0
  929. package/templates/platformer/src/hud.c +90 -0
  930. package/templates/platformer/src/level.c +184 -0
  931. package/templates/platformer/src/main.c +306 -0
  932. package/templates/platformer/src/player.c +268 -0
  933. package/templates/platformer/src/sound.c +42 -0
  934. package/templates/platformer/src/verdict.h +206 -0
  935. package/templates/platformer/src/view.c +331 -0
  936. package/templates/platformer/stage-expect.json +6 -0
  937. package/templates/platformer/tools/drive.py +112 -0
  938. package/templates/platformer/tools/tearcheck.py +229 -0
  939. package/templates/shmup-vertical/.claude/settings.json +17 -0
  940. package/templates/shmup-vertical/.mcp.json +10 -0
  941. package/templates/shmup-vertical/CLAUDE.md +137 -0
  942. package/templates/shmup-vertical/Makefile +131 -0
  943. package/templates/shmup-vertical/PLAN.md +569 -0
  944. package/templates/shmup-vertical/README.md +189 -0
  945. package/templates/shmup-vertical/expect.json +38 -0
  946. package/templates/shmup-vertical/src/bullets.c +158 -0
  947. package/templates/shmup-vertical/src/bullets.h +35 -0
  948. package/templates/shmup-vertical/src/display.c +239 -0
  949. package/templates/shmup-vertical/src/display.h +40 -0
  950. package/templates/shmup-vertical/src/game.h +85 -0
  951. package/templates/shmup-vertical/src/glyph.asm +358 -0
  952. package/templates/shmup-vertical/src/hiscore.c +141 -0
  953. package/templates/shmup-vertical/src/hiscore.h +16 -0
  954. package/templates/shmup-vertical/src/hit.asm +180 -0
  955. package/templates/shmup-vertical/src/hitbox.c +59 -0
  956. package/templates/shmup-vertical/src/hitbox.h +25 -0
  957. package/templates/shmup-vertical/src/kernel.asm +330 -0
  958. package/templates/shmup-vertical/src/level.c +174 -0
  959. package/templates/shmup-vertical/src/level.h +27 -0
  960. package/templates/shmup-vertical/src/main.c +824 -0
  961. package/templates/shmup-vertical/src/mux.asm +321 -0
  962. package/templates/shmup-vertical/src/sound.asm +255 -0
  963. package/templates/shmup-vertical/src/step.asm +169 -0
  964. package/templates/shmup-vertical/src/waves.c +195 -0
  965. package/templates/shmup-vertical/src/waves.h +33 -0
  966. package/templates/shmup-vertical/stage-expect.json +6 -0
  967. package/templates/shmup-vertical/tools/drive.py +152 -0
  968. package/templates/shmup-vertical/tools/joytest.py +159 -0
  969. package/templates/shmup-vertical/tools/meter.py +15 -0
  970. 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.