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,435 @@
1
+ ---
2
+ kind: demo
3
+ ---
4
+
5
+ <!-- doc-type: archetype-reference -->
6
+
7
+ # Cracktro and One-Screen Intro Patterns
8
+
9
+ The cracktro is the smallest self-contained unit of C64 demo aesthetics. It is a
10
+ one-screen production that declares a group's existence, delivers a message, and
11
+ exits cleanly. Understanding its conventions is prerequisite to building any larger
12
+ demo or game intro, because the cracktro is where every single technique — stable
13
+ raster, side-border open, sprite animation, SID player, scroller — appears in its
14
+ simplest combined form.
15
+
16
+ This page is also the archetype reference for demo forms. Each form below is an
17
+ `Archetype` node of kind `demo` in the graph, named by its `**Archetype:**` line;
18
+ its `**Technique fingerprint:**` line becomes `FEATURES` edges to techniques and its
19
+ `**Common pitfalls:**` line `RISKS` edges to pitfalls, and `c64_demo_briefing` reads
20
+ them when called with an `archetype` (`../CONVENTIONS-archetypes.md`). Technique
21
+ names match H2s in `../techniques/`; pitfall names match H2s in `../pitfalls/`.
22
+ A section without an `**Archetype:**` line is prose and is not a node.
23
+
24
+ ---
25
+
26
+ ## History
27
+
28
+ From approximately 1985 to 1995 the cracktro was a functional artifact. Cracking
29
+ groups stripped the copy protection from commercial games and prefixed the cracked
30
+ binary with a short intro: the group's name, a scroller message declaring the crack
31
+ version and date, greetings to allied groups, and a SID tune. The intro ran until
32
+ the user pressed a key, then it jumped into the game.
33
+
34
+ The cracktro served two purposes simultaneously. First, it was attribution: the
35
+ group claimed the crack. Second, it was social infrastructure: the greetings list
36
+ embedded in the scroller text was the scene's address book. A group's standing in
37
+ the community was partly measured by who greeted them back.
38
+
39
+ Size constraints were strict because the intro shared memory with the game. Common
40
+ limits were 1 KB or less — sometimes 256 bytes — because the cracked game image
41
+ had to fit alongside the intro in the C64's 64 KB address space. These constraints
42
+ forced extreme economy: every byte of code, every raster line of display time, had
43
+ to earn its place.
44
+
45
+ From the mid-1990s onward, cracktros became increasingly aesthetic objects in their
46
+ own right. Groups like Triad, Onslaught, F4CG (Fairlight's successor formation), and
47
+ Genesis Project continued releasing cracks with attached intros well into the 2000s
48
+ and 2010s. The cracktro format also migrated to demo parties as a compo category:
49
+ productions capped at 4 KB compete on the same terms as the 1985 originals. The
50
+ cracktro remains alive as a constrained art form distinct from the full demo.
51
+
52
+ ---
53
+
54
+ ## Crack Intro
55
+
56
+ **Archetype:** `cracktro`
57
+
58
+ The crack intro is the canonical form, built from five elements. A canonical cracktro
59
+ consists of exactly five elements assembled in a fixed spatial
60
+ layout. Each element maps to one or more C64 techniques. The five elements are not
61
+ optional: omitting any one of them produces something that reads as incomplete to a
62
+ scene-literate viewer.
63
+
64
+ ### Group Logo
65
+
66
+ The logo occupies roughly the top half of the visible screen — approximately 80 to
67
+ 100 pixels tall, spanning the full 320-pixel width. It is the first thing the viewer
68
+ sees and the hardest to get right aesthetically.
69
+
70
+ Two implementation paths exist. The first is a bitmap logo: a hi-res or multicolor
71
+ bitmap loaded into $4000–$7FFF (standard VIC-II bitmap area), with color data in
72
+ screen RAM and color RAM. The VIC-II's multicolor bitmap mode (bit 5 of $D011 = 1,
73
+ bit 4 of $D016 = 1) gives three colors plus background, which is sufficient for a
74
+ bold logo glyph. The second path is a large custom multicolor charset: a 4x4 or 8x4
75
+ character-cell logo built from custom character definitions. The charset approach
76
+ is smaller in RAM footprint and easier to re-color dynamically, making it the common
77
+ choice when the intro must fit under 1 KB.
78
+
79
+ Regardless of rendering method, the logo is static. Cracktros do not animate the
80
+ logo. Animation budget goes to the sprite layer beneath it.
81
+
82
+ Logo placement in screen coordinates: top edge at raster line ~40 (the first visible
83
+ line below the top border), bottom edge at approximately raster line 140. This leaves
84
+ roughly 100 raster lines for the sprite layer and 40 lines for the scroller bar.
85
+
86
+ Color conventions: see Conventions below.
87
+
88
+ ### Side-Border Sprites
89
+
90
+ The left and right side borders are normally invisible extensions of the border
91
+ region; the VIC-II's horizontal blank window cuts them off. Side-border opening
92
+ (`sideborder_open`) uses a two-write timing trick in the horizontal blank to trick
93
+ the VIC-II into leaving the border generator disabled, exposing roughly 7 pixels
94
+ of sprite rendering on each side.
95
+
96
+ In a cracktro context, side-border sprites are purely decorative: thin vertical bars,
97
+ dashed lines, or simple graphic elements that frame the screen. They reinforce the
98
+ sense that the intro has pushed the hardware as far as it will go — a deliberate
99
+ display of technical competence.
100
+
101
+ The implementation requirement is a stable raster IRQ (`stable_raster_irq`) firing on
102
+ the correct scanline for each horizontal blank crossing. The two VIC-II writes
103
+ ($D016 wide / $D016 narrow) must land within a ±1 cycle window. See
104
+ `../techniques/raster.md` for the exact cycle budget.
105
+
106
+ In intros smaller than 1 KB, side-border opening is sometimes omitted to save code
107
+ space. In any intro above approximately 512 bytes it is expected.
108
+
109
+ ### Sprite-Chain Animation
110
+
111
+ Eight hardware sprites are available simultaneously. A cracktro typically devotes all
112
+ eight to an animated element in the middle of the screen — between the logo and the
113
+ scroller bar. Common patterns are a horizontal sweep (sprites moving left-to-right in
114
+ a chain, wrapping), a bounce pattern (sprites oscillating vertically at different
115
+ phases), or a sine-wave chain that produces a fluid ribbon effect.
116
+
117
+ The sprite positions are updated in the raster IRQ handler or a main-loop timer. Each
118
+ sprite gets an X and Y position computed from a precomputed sine table indexed by a
119
+ per-sprite phase offset. The phase advances by a fixed amount each frame, and each
120
+ sprite's phase is offset from the previous by a constant (typically 256/8 = 32 units
121
+ for an evenly spaced chain over a full sine period).
122
+
123
+ The chain animation itself (eight sprites phased along one table, the `$D010`
124
+ high-bit wrap, the bounce, the expanded-sprite logo) is `sprite_sine_chain` in
125
+ `../techniques/sprite.md`, with the recipe `../recipes/kickassembler/sprite-sine-chain.md`;
126
+ `sprite_multiplex_8` is a multiplexer and is only needed when more than eight
127
+ objects are on screen at once (an earlier version of this page named it for the
128
+ chain). For showier intros with more than 8 simultaneous sprite objects, `sprite_multiplex_8`
129
+ is replaced by `sprite_multiplex_24`, which reuses the eight hardware sprites across
130
+ multiple raster bands. The trade-off is IRQ complexity and a minimum vertical spacing
131
+ requirement between bands.
132
+
133
+ Sprite design in cracktros is constrained by the same color economy as the logo: two
134
+ or three colors, chosen to complement the palette of the logo region. Multicolor
135
+ sprites (bit set in $D01C) give three colors plus transparent; hi-res sprites give
136
+ one color with sharper edges. Cracktros almost universally use multicolor.
137
+
138
+ ### SID Tune
139
+
140
+ Every cracktro carries a SID tune. The tune plays in the background while the scroller
141
+ runs; it loops for as long as the user lets the intro run before pressing a key.
142
+
143
+ The tune is almost always a standalone SID binary: a composer exports a `.sid` file
144
+ from a tracker (GoatTracker, SID Factory II, or older tools like Music Assembler),
145
+ and the intro relocates and links it. The player follows the `sid_play_routine_pattern`
146
+ convention: an `init` entry point that accepts a song number in the accumulator, called
147
+ once at startup, and a `play` entry point called once per frame (every 50 Hz on PAL,
148
+ every 60 Hz on NTSC) from the raster IRQ.
149
+
150
+ In a size-constrained intro (under 1 KB) the SID player is the largest single
151
+ component. A minimal three-voice SID routine with one short tune can occupy 200–400
152
+ bytes. Some groups ship hand-assembled micro-players for extreme size categories.
153
+
154
+ Loop length is a social convention as much as a technical one: 30 to 60 seconds is
155
+ the expected range. A tune that loops in under 20 seconds becomes annoying. A tune
156
+ longer than 90 seconds was historically impractical because the tracker data would
157
+ overflow the available RAM.
158
+
159
+ ### Scroller Bar
160
+
161
+ The scroller is the text layer at the bottom of the screen, typically occupying one
162
+ character row (8 raster lines) or a double-height zone (16 lines). It scrolls
163
+ horizontally from right to left at a speed of one pixel per frame (50 pixels/second
164
+ on PAL), shifting the VIC-II's fine X-scroll register ($D016 bits 2–0) and advancing
165
+ a character pointer when the fine-scroll wraps to 7.
166
+
167
+ Implementation uses `soft_scroll_h` from `../techniques/scroll.md`. The scroller
168
+ buffer holds enough characters to fill the screen plus one additional character to
169
+ absorb the pipeline delay. New characters are fed from the message string as the
170
+ scroll pointer advances.
171
+
172
+ The scroller bar is positioned at the bottom of the visible display, often with a
173
+ distinct background color (set via color RAM for that row) to separate it visually
174
+ from the sprite layer. A common layout places it at character row 24 (the last
175
+ row before the border).
176
+
177
+ The text in the scroller is the human-readable content of the cracktro. See Conventions
178
+ below for text conventions.
179
+
180
+ ### Size and Exit
181
+
182
+ The canonical form: one screen, often under 1 KB, sometimes 256 bytes. All five
183
+ elements are present in minimal form. The code is hand-optimized machine language
184
+ (or KickAssembler with aggressive constant-folding). RAM usage is tracked byte by
185
+ byte. The SID tune is the primary size driver. Groups in the extreme-size category
186
+ sometimes synthesize audio from a tiny engine rather than shipping tracker data.
187
+
188
+ The crack intro exits to the game when the user presses a key or fire. The exit
189
+ routine patches the game's reset vector or JSRs directly into the game entry point.
190
+
191
+ The core cracktro pattern scales up and down into the variant formats that follow:
192
+ the demo intro, the pack intro, the dentro and the 4K party intro.
193
+
194
+ **Technique fingerprint:** `stable_raster_irq`, `sideborder_open`, `sprite_sine_chain`, `soft_scroll_h`, `raster_bars`, `sid_play_routine_pattern`
195
+
196
+ **Common pitfalls:** `raster_irq_first_line_jitter`, `d016_unmasked_rmw_clobbers_csel_mcm`, `xscroll_applies_to_all_rows`, `sprite_x_high_bit_wrong_register`, `pal_ntsc_tempo_mismatch`
197
+
198
+ The fingerprint is the Technique Checklist's five core names plus `raster_bars`, which the
199
+ canonical recipe builds behind the scroller; `sprite_multiplex_24` is the checklist's
200
+ alternative for larger intros and is not forced. The pitfalls follow from the elements:
201
+ the stable IRQ (`raster_irq_first_line_jitter`), two users of `$D016` on one screen
202
+ (`d016_unmasked_rmw_clobbers_csel_mcm`), a scroller on one row under a static logo
203
+ (`xscroll_applies_to_all_rows`), the `$D010` wrap in the sprite chain
204
+ (`sprite_x_high_bit_wrong_register`) and a play call once a frame on both models
205
+ (`pal_ntsc_tempo_mismatch`).
206
+
207
+ ---
208
+
209
+ ## Demo Intro
210
+
211
+ **Archetype:** `demo_intro`
212
+
213
+ **Starter:** `demo`
214
+
215
+ A demo intro is the opening part of a longer multi-part demo, released as a
216
+ standalone production in its own right. Size ceiling is typically 1 KB to 4 KB.
217
+ It may combine the cracktro layout with a simple effect — a plasma, a vector cube,
218
+ or a tunnel — that previews the demo's aesthetic. The transition from the intro
219
+ screen to the first effect is itself a design moment: fade-to-black, raster wipe,
220
+ or hard-cut. The fade is `colour_fade` in `../techniques/transitions.md`, a
221
+ sixteen-step luminance-ordered table measured in the `colour-fade` recipe;
222
+ a fade done by arithmetic on the colour numbers flickers through hues.
223
+
224
+ **Technique fingerprint:** `stable_raster_irq`, `soft_scroll_h`, `sid_play_routine_pattern`, `colour_fade`
225
+
226
+ **Common pitfalls:** `raster_irq_first_line_jitter`, `pal_ntsc_tempo_mismatch`
227
+
228
+ The effect that previews the demo (plasma, vector, tunnel) is the intro's own choice
229
+ and is not in the fingerprint; the fade out of the intro screen is.
230
+
231
+ ---
232
+
233
+ ## Pack Intro
234
+
235
+ **Archetype:** `pack_intro`
236
+
237
+ A pack intro is the interface wrapper for a compilation (a "pack" or "disk magazine").
238
+ It presents a menu of productions loadable from the disk. The pack intro's scroller
239
+ explains the contents; the sprite layer and logo identify the group curating the
240
+ collection. Functionally the pack intro replaces the exit-to-game logic with a
241
+ disk directory reader and a loader invocation. Pack intros from the late 1980s are
242
+ some of the earliest examples of C64 software with a designed UI.
243
+
244
+ **Technique fingerprint:** `stable_raster_irq`, `soft_scroll_h`, `sid_play_routine_pattern`, `multi_load_sequencing`
245
+
246
+ **Common pitfalls:** `raster_irq_first_line_jitter`, `pal_ntsc_tempo_mismatch`, `fastloader_kernal_dependency`
247
+
248
+ The loader that replaces the exit-to-game logic is `multi_load_sequencing` in
249
+ `../techniques/loaders-packers.md`; which loader sits under it is the pack's choice.
250
+
251
+ ---
252
+
253
+ ## Mini-Demo / Dentro
254
+
255
+ **Archetype:** `dentro`
256
+
257
+ The "dentro" (a mid-1990s portmanteau of "demo" and "dentro") is a multi-part
258
+ production in the 8 KB to 16 KB range, typically 2 to 4 parts. Each part is a
259
+ self-contained effect with its own raster setup and SID tune. A minimal loader
260
+ sequences the parts from disk. The dentro format emerged as a middle ground between
261
+ the one-screen intro and the full competition demo requiring multiple disk sides.
262
+ A two-part dentro might open with a cracktro-style screen, transition to a plasma
263
+ or sprite-multiplexed effect, then roll credits.
264
+
265
+ **Technique fingerprint:** `stable_raster_irq`, `sid_play_routine_pattern`, `multi_load_sequencing`, `colour_fade`
266
+
267
+ **Common pitfalls:** `raster_irq_first_line_jitter`, `pal_ntsc_tempo_mismatch`, `fastloader_kernal_dependency`
268
+
269
+ Each part brings its own raster setup and tune, so the stable IRQ and the play
270
+ convention are per part; the sequencing loader and the transitions between parts
271
+ are what the dentro adds over the one-screen intro.
272
+
273
+ ---
274
+
275
+ ## Conventions
276
+
277
+ ### Scroller Text Format
278
+
279
+ The canonical scroller text follows a well-established template:
280
+
281
+ ```
282
+ *** GROUP NAME PRESENTS ANOTHER 100% CRACK / GREETINGS TO: GROUP A ... GROUP Z ***
283
+ ```
284
+
285
+ Key conventions:
286
+ - Triple asterisks as visual separators between message segments
287
+ - "PRESENTS" as the verb (alternatives: "RELEASED", "BRINGS YOU")
288
+ - "100% CRACK" as the quality claim (100% = no trainer, no nag screen, fully working)
289
+ - "GREETINGS TO" as the transition to the social network list
290
+ - Group names in ALL CAPS throughout
291
+ - Ellipsis represented as " ... " with spaces
292
+ - The message loops: the closing ` ***` connects back to the opening `*** ` without pause
293
+
294
+ A longer scroller might include: release date, version number, crack notes ("TRAINED
295
+ BY XXX" or "ORIGINAL TRAINER REMOVED"), requests for originals, contact addresses
296
+ (BBS phone numbers in the historical era, nowadays IRC or email), and an extended
297
+ greetings list of 10 to 30 groups.
298
+
299
+ ### Logo Placement and Sizing
300
+
301
+ Logo top edge: no higher than raster line 40 (first line below top border). Logo
302
+ bottom edge: no lower than raster line 140. This preserves the 100-line sprite zone
303
+ (140–190) and the scroller zone (190–248). The logo fills the horizontal screen
304
+ fully — 320 pixels wide for hi-res, 160 pixels wide for multicolor (with 2x pixel
305
+ width).
306
+
307
+ ### Color Scheme
308
+
309
+ Cracktros use 2 to 3 colors maximum. The historically dominant palette is:
310
+
311
+ - Logo: blue ($06) or light blue ($0E) on black ($00) background
312
+ - Scroller bar background: dark blue ($06), text color cyan ($03) or white ($01)
313
+ - Sprite chain: white ($01) or yellow ($07)
314
+ - Border: black ($00) always
315
+
316
+ This palette is a historical artifact of early-1980s European scene aesthetics
317
+ influenced by the default C64 BASIC screen colors. Modern cracktros sometimes break
318
+ with it deliberately as an aesthetic statement, but the departure is always legible
319
+ as a deviation from the norm.
320
+
321
+ ### Tune Length
322
+
323
+ 30 to 60 seconds per loop. A 30-second loop is acceptable for intros under 512 bytes
324
+ where tune data is the bottleneck. 60 seconds is the comfortable maximum before the
325
+ tracker pattern data begins to strain the available RAM in a sub-4KB intro.
326
+
327
+ ### Greetings List
328
+
329
+ The greetings list is the cracktro's primary social function. Its composition is not
330
+ arbitrary: groups are listed roughly in order of alliance strength, with close allies
331
+ first and friendly-but-distant contacts toward the end. Listing a group is a public
332
+ statement of respect. Being listed earns reciprocal listing. Groups actively curate
333
+ their greetings lists across releases as social relationships evolve.
334
+
335
+ For an agent building a cracktro for functional purposes (a demo framework test, a
336
+ toolchain validation), the greetings list can be a stub: `GREETINGS TO ALL CODERS
337
+ READING THIS SOURCE CODE`. The format must be present; the content is context-dependent.
338
+
339
+ ---
340
+
341
+ ## 4K Party Intro
342
+
343
+ **Archetype:** `party_intro_4k`
344
+
345
+ The 4K party intro is the form's modern reinvention. The cracktro format has outlasted
346
+ the software piracy context that created it. Several
347
+ groups have continued producing cracktros as releases in their own right through the
348
+ 2000s and 2010s. Triad (Sweden) has been releasing cracks with attached intros since
349
+ the mid-1980s and was still active into the 2010s. Genesis Project and Onslaught
350
+ have similarly long release histories with cracktro production as a consistent
351
+ component.
352
+
353
+ At demo parties, the intro compo (productions under 4 KB) functions as the modern
354
+ heir to the cracktro tradition. The constraint is identical — fit everything into a
355
+ small binary — but the production context is competitive rather than attached to a
356
+ specific cracked game. The best 4 KB intros from major parties (Revision, X, Datastorm)
357
+ demonstrate what is technically achievable when experienced coders maximize every byte:
358
+ real-time plasma, vector objects, and polyphonic SID all within the cracktro spatial
359
+ layout.
360
+
361
+ The cracktro is also used as a pedagogical reference. Because every element is present
362
+ in minimal form, it is the ideal starting point for learning how the five core C64
363
+ techniques interact. A working cracktro is a proof that stable raster, side-border,
364
+ sprite animation, SID playback, and hardware scroll can coexist in a single binary
365
+ without conflicts.
366
+
367
+ **Technique fingerprint:** `stable_raster_irq`, `soft_scroll_h`, `sprite_sine_chain`, `sid_play_routine_pattern`
368
+
369
+ **Common pitfalls:** `raster_irq_first_line_jitter`, `pal_ntsc_tempo_mismatch`
370
+
371
+ The fingerprint is the cracktro spatial layout the compo entry keeps; the plasma
372
+ and vector work that the best entries add is not required of every one and is left
373
+ to the brief.
374
+
375
+ ---
376
+
377
+ ## Buildable Reference
378
+
379
+ ### Canonical Recipe
380
+
381
+ The canonical buildable cracktro is at `../recipes/kickassembler/cracktro-template.md`.
382
+ It implements all five elements in KickAssembler. Readers building a cracktro should
383
+ start there: the recipe provides the full memory map, IRQ handler structure, sprite
384
+ sine table, scroller main loop, and SID relocation pattern.
385
+
386
+ The current revision of that recipe builds a text logo, ten raster bars from a
387
+ chained IRQ ring, a sine scroller and a SID play call, and says in its synopsis that
388
+ it no longer opens the side borders or drives a sprite layer; those two come from
389
+ `../recipes/kickassembler/sideborder-open.md` and
390
+ `../recipes/kickassembler/sprite-sine-chain.md`. Read the recipe's own synopsis for
391
+ what it builds today.
392
+
393
+ KickAssembler is the primary toolchain for cracktros because it gives cycle-exact
394
+ control over the raster timing required by `sideborder_open`. Oscar64 is suitable for
395
+ game logic and high-level demo structure, but for a component where every cycle of
396
+ the horizontal blank window matters, hand-assembled KickAssembler gives the necessary
397
+ precision.
398
+
399
+ ### Technique Checklist
400
+
401
+ A complete cracktro combines the following techniques (snake_case names as used in
402
+ the knowledge graph):
403
+
404
+ | Technique | Role in cracktro |
405
+ |---|---|
406
+ | `stable_raster_irq` | Prerequisite for all timed writes; provides the cycle-stable IRQ baseline |
407
+ | `sideborder_open` | Opens left and right borders; requires `stable_raster_irq` |
408
+ | `sprite_sine_chain` | Phases the eight sprites of the middle band along one table (sweep, bounce, logo); `sprite_multiplex_8` is only needed above eight objects |
409
+ | `sprite_multiplex_24` | Alternative for showier intros with more than 8 simultaneous objects |
410
+ | `soft_scroll_h` | Drives the bottom scroller bar one pixel per frame |
411
+ | `sid_play_routine_pattern` | Standard init+play convention for the background SID tune |
412
+
413
+ These six names can be passed directly to `c64_check_compatibility` to detect register
414
+ conflicts before writing a line of code. The primary known conflict is that
415
+ `sideborder_open` and `sprite_multiplex_24` both require IRQ handlers at multiple
416
+ raster lines — the IRQ schedule must be planned explicitly to avoid handler collision.
417
+ `sprite_multiplex_8` does not have this problem because it operates in a single
418
+ raster band.
419
+
420
+ ---
421
+
422
+ ## Cross-References
423
+
424
+ - `./demo-design-philosophy.md` — broader scene philosophy; cracktros as the atomic
425
+ unit of demo culture
426
+ - `../recipes/kickassembler/cracktro-template.md` — the canonical buildable recipe
427
+ for a complete cracktro in KickAssembler
428
+ - `../techniques/sprite.md` — `sprite_multiplex_8` and `sprite_multiplex_24`
429
+ implementation details, sine table patterns, sprite chain construction
430
+ - `../techniques/scroll.md` — `soft_scroll_h` implementation; scroller buffer
431
+ management; fine-scroll register protocol
432
+ - `../techniques/raster.md` — `stable_raster_irq` and `sideborder_open`; cycle
433
+ budget for the horizontal blank window; two-write timing protocol
434
+ - `../techniques/music-sid.md` — `sid_play_routine_pattern`; SID binary relocation;
435
+ init/play entry point conventions
@@ -0,0 +1 @@
1
+ {"edges":[{"t":"standard_bitmap","r":"SCROLY","a":"$D011"},{"t":"standard_bitmap","r":"VMCSB","a":"$D018"},{"t":"multicolor_bitmap","r":"SCROLY","a":"$D011"},{"t":"multicolor_bitmap","r":"SCROLX","a":"$D016"},{"t":"multicolor_bitmap","r":"VMCSB","a":"$D018"},{"t":"ecm_mode","r":"SCROLY","a":"$D011"},{"t":"ecm_mode","r":"BGCOL1","a":"$D022"},{"t":"ecm_mode","r":"BGCOL2","a":"$D023"},{"t":"ecm_mode","r":"BGCOL3","a":"$D024"},{"t":"mcm_text","r":"SCROLX","a":"$D016"},{"t":"mcm_text","r":"VMCSB","a":"$D018"},{"t":"mcm_text","r":"BGCOL0","a":"$D021"},{"t":"mcm_text","r":"BGCOL1","a":"$D022"},{"t":"mcm_text","r":"BGCOL2","a":"$D023"},{"t":"mcm_text","r":"SPMC0","a":"$D025"},{"t":"mcm_text","r":"SPMC1","a":"$D026"},{"t":"fli_image","r":"SCROLY","a":"$D011"},{"t":"fli_image","r":"SCROLX","a":"$D016"},{"t":"fli_image","r":"VMCSB","a":"$D018"},{"t":"afli_image","r":"SCROLY","a":"$D011"},{"t":"afli_image","r":"VMCSB","a":"$D018"},{"t":"ifli_image","r":"SCROLY","a":"$D011"},{"t":"ifli_image","r":"VMCSB","a":"$D018"},{"t":"koala_format","r":"SCROLY","a":"$D011"},{"t":"koala_format","r":"SCROLX","a":"$D016"},{"t":"koala_format","r":"VMCSB","a":"$D018"},{"t":"koala_format","r":"BGCOL0","a":"$D021"},{"t":"phase_inverted_irq","r":"RASTER","a":"$D012"},{"t":"phase_inverted_irq","r":"VICIRQ","a":"$D019"},{"t":"phase_inverted_irq","r":"IRQMSK","a":"$D01A"},{"t":"dma_steal_avoidance","r":"SCROLY","a":"$D011"},{"t":"dma_steal_avoidance","r":"RASTER","a":"$D012"},{"t":"dma_steal_avoidance","r":"SPENA","a":"$D015"},{"t":"dot_3d_rotator","r":"M0X","a":"$D000"},{"t":"dot_3d_rotator","r":"M0Y","a":"$D001"},{"t":"dot_3d_rotator","r":"M1X","a":"$D002"},{"t":"dot_3d_rotator","r":"M1Y","a":"$D003"},{"t":"dot_3d_rotator","r":"M2X","a":"$D004"},{"t":"dot_3d_rotator","r":"M2Y","a":"$D005"},{"t":"dot_3d_rotator","r":"M3X","a":"$D006"},{"t":"dot_3d_rotator","r":"M3Y","a":"$D007"},{"t":"dot_3d_rotator","r":"M4X","a":"$D008"},{"t":"dot_3d_rotator","r":"M4Y","a":"$D009"},{"t":"dot_3d_rotator","r":"M5X","a":"$D00A"},{"t":"dot_3d_rotator","r":"M5Y","a":"$D00B"},{"t":"dot_3d_rotator","r":"M6X","a":"$D00C"},{"t":"dot_3d_rotator","r":"M6Y","a":"$D00D"},{"t":"dot_3d_rotator","r":"M7X","a":"$D00E"},{"t":"dot_3d_rotator","r":"M7Y","a":"$D00F"},{"t":"dot_3d_rotator","r":"MSIGX","a":"$D010"},{"t":"dot_3d_rotator","r":"SPENA","a":"$D015"},{"t":"dot_3d_rotator","r":"VMCSB","a":"$D018"},{"t":"dot_3d_rotator","r":"SP0COL","a":"$D027"},{"t":"dot_3d_rotator","r":"SP1COL","a":"$D028"},{"t":"dot_3d_rotator","r":"SP2COL","a":"$D029"},{"t":"dot_3d_rotator","r":"SP3COL","a":"$D02A"},{"t":"dot_3d_rotator","r":"SP4COL","a":"$D02B"},{"t":"dot_3d_rotator","r":"SP5COL","a":"$D02C"},{"t":"dot_3d_rotator","r":"SP6COL","a":"$D02D"},{"t":"dot_3d_rotator","r":"SP7COL","a":"$D02E"},{"t":"solid_vector_3d","r":"SCROLY","a":"$D011"},{"t":"solid_vector_3d","r":"SCROLX","a":"$D016"},{"t":"solid_vector_3d","r":"VMCSB","a":"$D018"},{"t":"bobs_effect","r":"SCROLY","a":"$D011"},{"t":"bobs_effect","r":"VMCSB","a":"$D018"},{"t":"plasma","r":"VMCSB","a":"$D018"},{"t":"plasma","r":"BGCOL0","a":"$D021"},{"t":"plasma","r":"BGCOL1","a":"$D022"},{"t":"plasma","r":"BGCOL2","a":"$D023"},{"t":"tunnel","r":"VMCSB","a":"$D018"},{"t":"tunnel","r":"BGCOL0","a":"$D021"},{"t":"starfield","r":"M0X","a":"$D000"},{"t":"starfield","r":"M0Y","a":"$D001"},{"t":"starfield","r":"M1X","a":"$D002"},{"t":"starfield","r":"M1Y","a":"$D003"},{"t":"starfield","r":"M2X","a":"$D004"},{"t":"starfield","r":"M2Y","a":"$D005"},{"t":"starfield","r":"M3X","a":"$D006"},{"t":"starfield","r":"M3Y","a":"$D007"},{"t":"starfield","r":"M4X","a":"$D008"},{"t":"starfield","r":"M4Y","a":"$D009"},{"t":"starfield","r":"M5X","a":"$D00A"},{"t":"starfield","r":"M5Y","a":"$D00B"},{"t":"starfield","r":"M6X","a":"$D00C"},{"t":"starfield","r":"M6Y","a":"$D00D"},{"t":"starfield","r":"M7X","a":"$D00E"},{"t":"starfield","r":"M7Y","a":"$D00F"},{"t":"starfield","r":"MSIGX","a":"$D010"},{"t":"starfield","r":"SPENA","a":"$D015"},{"t":"text_zoom","r":"SCROLY","a":"$D011"},{"t":"text_zoom","r":"SCROLX","a":"$D016"},{"t":"voxel_landscape","r":"SCROLY","a":"$D011"},{"t":"voxel_landscape","r":"VMCSB","a":"$D018"},{"t":"mode7_lookalike","r":"SCROLX","a":"$D016"},{"t":"mode7_lookalike","r":"VMCSB","a":"$D018"},{"t":"krill_loader_integration","r":"DD00","a":"$DD00"},{"t":"sparkle_irq_loader","r":"DD00","a":"$DD00"},{"t":"sparkle_irq_loader","r":"RASTER","a":"$D012"},{"t":"sparkle_irq_loader","r":"VICIRQ","a":"$D019"},{"t":"sparkle_irq_loader","r":"IRQMSK","a":"$D01A"},{"t":"disk_protection_tricks","r":"DD00","a":"$DD00"},{"t":"vic_bank_select","r":"DD00","a":"$DD00"},{"t":"char_rom_under_vic","r":"DD00","a":"$DD00"},{"t":"char_rom_under_vic","r":"VMCSB","a":"$D018"},{"t":"screen_ram_relocation","r":"VMCSB","a":"$D018"},{"t":"bitmap_relocation","r":"VMCSB","a":"$D018"},{"t":"sid_voice_setup","r":"FRELO1","a":"$D400"},{"t":"sid_voice_setup","r":"FREHI1","a":"$D401"},{"t":"sid_voice_setup","r":"PWLO1","a":"$D402"},{"t":"sid_voice_setup","r":"PWHI1","a":"$D403"},{"t":"sid_voice_setup","r":"VCREG1","a":"$D404"},{"t":"sid_voice_setup","r":"ATDCY1","a":"$D405"},{"t":"sid_voice_setup","r":"SUREL1","a":"$D406"},{"t":"sid_voice_setup","r":"FRELO2","a":"$D407"},{"t":"sid_voice_setup","r":"FREHI2","a":"$D408"},{"t":"sid_voice_setup","r":"PWLO2","a":"$D409"},{"t":"sid_voice_setup","r":"PWHI2","a":"$D40A"},{"t":"sid_voice_setup","r":"VCREG2","a":"$D40B"},{"t":"sid_voice_setup","r":"ATDCY2","a":"$D40C"},{"t":"sid_voice_setup","r":"SUREL2","a":"$D40D"},{"t":"sid_voice_setup","r":"FRELO3","a":"$D40E"},{"t":"sid_voice_setup","r":"FREHI3","a":"$D40F"},{"t":"sid_voice_setup","r":"PWLO3","a":"$D410"},{"t":"sid_voice_setup","r":"PWHI3","a":"$D411"},{"t":"sid_voice_setup","r":"VCREG3","a":"$D412"},{"t":"sid_voice_setup","r":"ATDCY3","a":"$D413"},{"t":"sid_voice_setup","r":"SUREL3","a":"$D414"},{"t":"sid_filter_routing","r":"CUTLO","a":"$D415"},{"t":"sid_filter_routing","r":"CUTHI","a":"$D416"},{"t":"sid_filter_routing","r":"RESON","a":"$D417"},{"t":"sid_filter_routing","r":"SIGVOL","a":"$D418"},{"t":"sid_play_routine_pattern","r":"FRELO1","a":"$D400"},{"t":"sid_play_routine_pattern","r":"FREHI1","a":"$D401"},{"t":"sid_play_routine_pattern","r":"PWLO1","a":"$D402"},{"t":"sid_play_routine_pattern","r":"PWHI1","a":"$D403"},{"t":"sid_play_routine_pattern","r":"VCREG1","a":"$D404"},{"t":"sid_play_routine_pattern","r":"ATDCY1","a":"$D405"},{"t":"sid_play_routine_pattern","r":"SUREL1","a":"$D406"},{"t":"sid_play_routine_pattern","r":"FRELO2","a":"$D407"},{"t":"sid_play_routine_pattern","r":"FREHI2","a":"$D408"},{"t":"sid_play_routine_pattern","r":"PWLO2","a":"$D409"},{"t":"sid_play_routine_pattern","r":"PWHI2","a":"$D40A"},{"t":"sid_play_routine_pattern","r":"VCREG2","a":"$D40B"},{"t":"sid_play_routine_pattern","r":"ATDCY2","a":"$D40C"},{"t":"sid_play_routine_pattern","r":"SUREL2","a":"$D40D"},{"t":"sid_play_routine_pattern","r":"FRELO3","a":"$D40E"},{"t":"sid_play_routine_pattern","r":"FREHI3","a":"$D40F"},{"t":"sid_play_routine_pattern","r":"PWLO3","a":"$D410"},{"t":"sid_play_routine_pattern","r":"PWHI3","a":"$D411"},{"t":"sid_play_routine_pattern","r":"VCREG3","a":"$D412"},{"t":"sid_play_routine_pattern","r":"ATDCY3","a":"$D413"},{"t":"sid_play_routine_pattern","r":"SUREL3","a":"$D414"},{"t":"sid_play_routine_pattern","r":"CUTLO","a":"$D415"},{"t":"sid_play_routine_pattern","r":"CUTHI","a":"$D416"},{"t":"sid_play_routine_pattern","r":"RESON","a":"$D417"},{"t":"sid_play_routine_pattern","r":"SIGVOL","a":"$D418"},{"t":"sid_8580_vs_6581_differences","r":"VCREG1","a":"$D404"},{"t":"sid_8580_vs_6581_differences","r":"CUTLO","a":"$D415"},{"t":"sid_8580_vs_6581_differences","r":"CUTHI","a":"$D416"},{"t":"sid_8580_vs_6581_differences","r":"RESON","a":"$D417"},{"t":"sid_8580_vs_6581_differences","r":"SIGVOL","a":"$D418"},{"t":"digi_4bit","r":"SIGVOL","a":"$D418"},{"t":"digi_8bit_hard_restart","r":"VCREG1","a":"$D404"},{"t":"digi_8bit_hard_restart","r":"ATDCY1","a":"$D405"},{"t":"digi_8bit_hard_restart","r":"SUREL1","a":"$D406"},{"t":"digi_8bit_hard_restart","r":"SIGVOL","a":"$D418"},{"t":"sidfx_layered_chip","r":"FRELO1","a":"$D400"},{"t":"sidfx_layered_chip","r":"FREHI1","a":"$D401"},{"t":"sidfx_layered_chip","r":"PWLO1","a":"$D402"},{"t":"sidfx_layered_chip","r":"PWHI1","a":"$D403"},{"t":"sidfx_layered_chip","r":"VCREG1","a":"$D404"},{"t":"sidfx_layered_chip","r":"ATDCY1","a":"$D405"},{"t":"sidfx_layered_chip","r":"SUREL1","a":"$D406"},{"t":"sidfx_layered_chip","r":"FRELO2","a":"$D407"},{"t":"sidfx_layered_chip","r":"FREHI2","a":"$D408"},{"t":"sidfx_layered_chip","r":"PWLO2","a":"$D409"},{"t":"sidfx_layered_chip","r":"PWHI2","a":"$D40A"},{"t":"sidfx_layered_chip","r":"VCREG2","a":"$D40B"},{"t":"sidfx_layered_chip","r":"ATDCY2","a":"$D40C"},{"t":"sidfx_layered_chip","r":"SUREL2","a":"$D40D"},{"t":"sidfx_layered_chip","r":"FRELO3","a":"$D40E"},{"t":"sidfx_layered_chip","r":"FREHI3","a":"$D40F"},{"t":"sidfx_layered_chip","r":"PWLO3","a":"$D410"},{"t":"sidfx_layered_chip","r":"PWHI3","a":"$D411"},{"t":"sidfx_layered_chip","r":"VCREG3","a":"$D412"},{"t":"sidfx_layered_chip","r":"ATDCY3","a":"$D413"},{"t":"sidfx_layered_chip","r":"SUREL3","a":"$D414"},{"t":"sidfx_layered_chip","r":"CUTLO","a":"$D415"},{"t":"sidfx_layered_chip","r":"CUTHI","a":"$D416"},{"t":"sidfx_layered_chip","r":"RESON","a":"$D417"},{"t":"sidfx_layered_chip","r":"SIGVOL","a":"$D418"},{"t":"sidasid_emulation_notes","r":"CUTLO","a":"$D415"},{"t":"sidasid_emulation_notes","r":"CUTHI","a":"$D416"},{"t":"sidasid_emulation_notes","r":"RESON","a":"$D417"},{"t":"sidasid_emulation_notes","r":"SIGVOL","a":"$D418"},{"t":"stable_raster_irq","r":"SCROLY","a":"$D011"},{"t":"stable_raster_irq","r":"RASTER","a":"$D012"},{"t":"stable_raster_irq","r":"VICIRQ","a":"$D019"},{"t":"stable_raster_irq","r":"IRQMSK","a":"$D01A"},{"t":"raster_bars","r":"RASTER","a":"$D012"},{"t":"raster_bars","r":"VICIRQ","a":"$D019"},{"t":"raster_bars","r":"EXTCOL","a":"$D020"},{"t":"raster_bars","r":"BGCOL0","a":"$D021"},{"t":"badline_synchronization","r":"SCROLY","a":"$D011"},{"t":"badline_synchronization","r":"RASTER","a":"$D012"},{"t":"double_irq","r":"RASTER","a":"$D012"},{"t":"double_irq","r":"VICIRQ","a":"$D019"},{"t":"double_irq","r":"IRQMSK","a":"$D01A"},{"t":"vsp_glitch","r":"SCROLY","a":"$D011"},{"t":"vsp_glitch","r":"SCROLX","a":"$D016"},{"t":"sideborder_open","r":"SCROLX","a":"$D016"},{"t":"topbottom_border_open","r":"SCROLY","a":"$D011"},{"t":"raster_split_modes","r":"SCROLY","a":"$D011"},{"t":"raster_split_modes","r":"SCROLX","a":"$D016"},{"t":"raster_split_modes","r":"VMCSB","a":"$D018"},{"t":"soft_scroll_h","r":"SCROLX","a":"$D016"},{"t":"soft_scroll_v","r":"SCROLY","a":"$D011"},{"t":"char_scroll_buffer_h","r":"SCROLX","a":"$D016"},{"t":"char_scroll_buffer_v","r":"SCROLY","a":"$D011"},{"t":"infinite_scroll_h","r":"SCROLX","a":"$D016"},{"t":"parallax_dual_layer","r":"MSIGX","a":"$D010"},{"t":"parallax_dual_layer","r":"SCROLX","a":"$D016"},{"t":"bitmap_scroll","r":"SCROLY","a":"$D011"},{"t":"bitmap_scroll","r":"SCROLX","a":"$D016"},{"t":"bitmap_scroll","r":"VMCSB","a":"$D018"},{"t":"sprite_multiplex_8","r":"M0X","a":"$D000"},{"t":"sprite_multiplex_8","r":"M0Y","a":"$D001"},{"t":"sprite_multiplex_8","r":"RASTER","a":"$D012"},{"t":"sprite_multiplex_8","r":"SPENA","a":"$D015"},{"t":"sprite_multiplex_8","r":"VICIRQ","a":"$D019"},{"t":"sprite_multiplex_8","r":"IRQMSK","a":"$D01A"},{"t":"sprite_multiplex_8","r":"SP0COL","a":"$D027"},{"t":"sprite_multiplex_24","r":"M0X","a":"$D000"},{"t":"sprite_multiplex_24","r":"M0Y","a":"$D001"},{"t":"sprite_multiplex_24","r":"M1X","a":"$D002"},{"t":"sprite_multiplex_24","r":"M1Y","a":"$D003"},{"t":"sprite_multiplex_24","r":"M2X","a":"$D004"},{"t":"sprite_multiplex_24","r":"M2Y","a":"$D005"},{"t":"sprite_multiplex_24","r":"M3X","a":"$D006"},{"t":"sprite_multiplex_24","r":"M3Y","a":"$D007"},{"t":"sprite_multiplex_24","r":"M4X","a":"$D008"},{"t":"sprite_multiplex_24","r":"M4Y","a":"$D009"},{"t":"sprite_multiplex_24","r":"M5X","a":"$D00A"},{"t":"sprite_multiplex_24","r":"M5Y","a":"$D00B"},{"t":"sprite_multiplex_24","r":"M6X","a":"$D00C"},{"t":"sprite_multiplex_24","r":"M6Y","a":"$D00D"},{"t":"sprite_multiplex_24","r":"M7X","a":"$D00E"},{"t":"sprite_multiplex_24","r":"M7Y","a":"$D00F"},{"t":"sprite_multiplex_24","r":"MSIGX","a":"$D010"},{"t":"sprite_multiplex_24","r":"SPENA","a":"$D015"},{"t":"sprite_multiplex_24","r":"SP0COL","a":"$D027"},{"t":"sprite_multiplex_24","r":"SP1COL","a":"$D028"},{"t":"sprite_multiplex_24","r":"SP2COL","a":"$D029"},{"t":"sprite_multiplex_24","r":"SP3COL","a":"$D02A"},{"t":"sprite_multiplex_24","r":"SP4COL","a":"$D02B"},{"t":"sprite_multiplex_24","r":"SP5COL","a":"$D02C"},{"t":"sprite_multiplex_24","r":"SP6COL","a":"$D02D"},{"t":"sprite_multiplex_24","r":"SP7COL","a":"$D02E"},{"t":"sprite_expand","r":"YXPAND","a":"$D017"},{"t":"sprite_expand","r":"XXPAND","a":"$D01D"},{"t":"sprite_collision_detect","r":"SPSPCL","a":"$D01E"},{"t":"sprite_collision_detect","r":"SPBGCL","a":"$D01F"},{"t":"sprite_y_stretch_glitch","r":"YXPAND","a":"$D017"},{"t":"mob_priority","r":"SPBGPR","a":"$D01B"},{"t":"sprite_color_swap_mid_line","r":"SP0COL","a":"$D027"},{"t":"sprite_color_swap_mid_line","r":"SP1COL","a":"$D028"},{"t":"sprite_color_swap_mid_line","r":"SP2COL","a":"$D029"},{"t":"sprite_color_swap_mid_line","r":"SP3COL","a":"$D02A"},{"t":"sprite_color_swap_mid_line","r":"SP4COL","a":"$D02B"},{"t":"sprite_color_swap_mid_line","r":"SP5COL","a":"$D02C"},{"t":"sprite_color_swap_mid_line","r":"SP6COL","a":"$D02D"},{"t":"sprite_color_swap_mid_line","r":"SP7COL","a":"$D02E"}],"cats":[{"t":"standard_bitmap","c":"bitmap"},{"t":"multicolor_bitmap","c":"bitmap"},{"t":"ecm_mode","c":"bitmap"},{"t":"mcm_text","c":"bitmap"},{"t":"fli_image","c":"bitmap"},{"t":"afli_image","c":"bitmap"},{"t":"ifli_image","c":"bitmap"},{"t":"koala_format","c":"bitmap"},{"t":"self_modifying_code","c":"cpu"},{"t":"unrolled_loops","c":"cpu"},{"t":"illegal_opcode_tricks","c":"cpu"},{"t":"jump_table_dispatch","c":"cpu"},{"t":"zero_page_burst","c":"cpu"},{"t":"decimal_mode_pitfalls","c":"cpu"},{"t":"bit_test_trick","c":"cpu"},{"t":"phase_inverted_irq","c":"cpu"},{"t":"dma_steal_avoidance","c":"cpu"},{"t":"dot_3d_rotator","c":"effect"},{"t":"solid_vector_3d","c":"effect"},{"t":"bobs_effect","c":"effect"},{"t":"plasma","c":"effect"},{"t":"tunnel","c":"effect"},{"t":"starfield","c":"effect"},{"t":"text_zoom","c":"effect"},{"t":"voxel_landscape","c":"effect"},{"t":"mode7_lookalike","c":"effect"},{"t":"krill_loader_integration","c":"loader"},{"t":"wcf_packer","c":"loader"},{"t":"exomizer_basics","c":"loader"},{"t":"doynax_decruncher","c":"loader"},{"t":"sparkle_irq_loader","c":"loader"},{"t":"byteboozer_packer","c":"loader"},{"t":"disk_protection_tricks","c":"loader"},{"t":"multi_load_sequencing","c":"loader"},{"t":"crunched_data_in_basic_stub","c":"loader"},{"t":"cpu_io_port_bank","c":"banking"},{"t":"vic_bank_select","c":"banking"},{"t":"char_rom_under_vic","c":"banking"},{"t":"screen_ram_relocation","c":"banking"},{"t":"bitmap_relocation","c":"banking"},{"t":"cartridge_bank_easyflash","c":"banking"},{"t":"ram_under_kernal","c":"banking"},{"t":"sid_voice_setup","c":"music"},{"t":"sid_filter_routing","c":"music"},{"t":"sid_play_routine_pattern","c":"music"},{"t":"sid_8580_vs_6581_differences","c":"music"},{"t":"digi_4bit","c":"music"},{"t":"digi_8bit_hard_restart","c":"music"},{"t":"sidfx_layered_chip","c":"music"},{"t":"sidasid_emulation_notes","c":"music"},{"t":"stable_raster_irq","c":"raster"},{"t":"raster_bars","c":"raster"},{"t":"badline_synchronization","c":"raster"},{"t":"double_irq","c":"raster"},{"t":"vsp_glitch","c":"raster"},{"t":"sideborder_open","c":"raster"},{"t":"topbottom_border_open","c":"raster"},{"t":"raster_split_modes","c":"raster"},{"t":"soft_scroll_h","c":"scroll"},{"t":"soft_scroll_v","c":"scroll"},{"t":"char_scroll_buffer_h","c":"scroll"},{"t":"char_scroll_buffer_v","c":"scroll"},{"t":"infinite_scroll_h","c":"scroll"},{"t":"parallax_dual_layer","c":"scroll"},{"t":"bitmap_scroll","c":"scroll"},{"t":"sprite_multiplex_8","c":"sprite"},{"t":"sprite_multiplex_24","c":"sprite"},{"t":"sprite_expand","c":"sprite"},{"t":"sprite_collision_detect","c":"sprite"},{"t":"sprite_y_stretch_glitch","c":"sprite"},{"t":"mob_priority","c":"sprite"},{"t":"sprite_color_swap_mid_line","c":"sprite"},{"t":"text_mode_overlay_render","c":"render"}]}
Binary file
Binary file