badline 0.12.1 → 0.14.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 (565) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +66 -1
  3. data/CLAUDE.md +86 -38
  4. data/CONTRIBUTING.md +4 -3
  5. data/README.md +9 -6
  6. data/doc/library.md +9 -9
  7. data/doc/media.md +2 -1
  8. data/doc/pinned-behaviour.md +134 -105
  9. data/doc/snapshot-format.md +1047 -0
  10. data/doc/snapshots.md +73 -43
  11. data/lib/badline/audio/bare_player.rb +53 -20
  12. data/lib/badline/audio/cli.rb +6 -6
  13. data/lib/badline/audio/jukebox.rb +2 -2
  14. data/lib/badline/audio/machine_player.rb +16 -10
  15. data/lib/badline/{media → audio}/queue.rb +1 -1
  16. data/lib/badline/audio/queued_tune.rb +6 -6
  17. data/lib/badline/audio/renderer.rb +33 -22
  18. data/lib/badline/audio/stereo.rb +1 -1
  19. data/lib/badline/c128/banks.rb +6 -3
  20. data/lib/badline/c128/bus/keyed_state.rb +45 -0
  21. data/lib/badline/c128/bus.rb +35 -20
  22. data/lib/badline/c128/color_lines.rb +2 -2
  23. data/lib/badline/c128/cpu.rb +1 -1
  24. data/lib/badline/c128/drives.rb +14 -34
  25. data/lib/badline/c128/fast_serial.rb +5 -5
  26. data/lib/badline/c128/keyed_modules.rb +117 -0
  27. data/lib/badline/c128/keyed_state.rb +91 -0
  28. data/lib/badline/c128/keys.rb +9 -0
  29. data/lib/badline/c128/mmu.rb +9 -8
  30. data/lib/badline/c128/mmu_pages.rb +21 -1
  31. data/lib/badline/c128/modes.rb +21 -11
  32. data/lib/badline/c128/z80.rb +2 -2
  33. data/lib/badline/c128/z80_turns.rb +1 -1
  34. data/lib/badline/c128.rb +21 -16
  35. data/lib/badline/c64/attachments.rb +42 -0
  36. data/lib/badline/c64/banked_ram/banking.rb +32 -0
  37. data/lib/badline/c64/banked_ram/plus256k.rb +64 -0
  38. data/lib/badline/c64/banked_ram/plus60k.rb +47 -0
  39. data/lib/badline/c64/banked_ram/unexpanded.rb +30 -0
  40. data/lib/badline/c64/banked_ram.rb +23 -0
  41. data/lib/badline/c64/bus/debug_register.rb +32 -0
  42. data/lib/badline/c64/bus/extra_sids.rb +32 -0
  43. data/lib/badline/c64/bus/fittings.rb +40 -0
  44. data/lib/badline/c64/bus/keyed_state.rb +41 -0
  45. data/lib/badline/c64/bus/pla.rb +149 -0
  46. data/lib/badline/c64/bus/roms.rb +41 -0
  47. data/lib/badline/c64/bus/sid_slots.rb +44 -0
  48. data/lib/badline/c64/bus.rb +219 -0
  49. data/lib/badline/c64/cartridge/action_replay.rb +115 -0
  50. data/lib/badline/c64/cartridge/atomic_power.rb +26 -0
  51. data/lib/badline/c64/cartridge/bank.rb +83 -0
  52. data/lib/badline/c64/cartridge/comal80.rb +52 -0
  53. data/lib/badline/c64/cartridge/dinamic.rb +36 -0
  54. data/lib/badline/c64/cartridge/easy_flash.rb +132 -0
  55. data/lib/badline/c64/cartridge/epyx_fastload.rb +73 -0
  56. data/lib/badline/c64/cartridge/final_cartridge3.rb +79 -0
  57. data/lib/badline/c64/cartridge/flash.rb +279 -0
  58. data/lib/badline/c64/cartridge/freezer.rb +35 -0
  59. data/lib/badline/c64/cartridge/fun_play.rb +40 -0
  60. data/lib/badline/c64/cartridge/g_mod2.rb +64 -0
  61. data/lib/badline/c64/cartridge/game_system.rb +42 -0
  62. data/lib/badline/c64/cartridge/geo_ram.rb +65 -0
  63. data/lib/badline/c64/cartridge/kcs_power.rb +69 -0
  64. data/lib/badline/c64/cartridge/keyed_state.rb +393 -0
  65. data/lib/badline/c64/cartridge/mach5.rb +34 -0
  66. data/lib/badline/c64/cartridge/magic_desk.rb +32 -0
  67. data/lib/badline/c64/cartridge/ocean.rb +37 -0
  68. data/lib/badline/c64/cartridge/pagefox.rb +60 -0
  69. data/lib/badline/c64/cartridge/retro_replay.rb +278 -0
  70. data/lib/badline/c64/cartridge/rex_utility.rb +31 -0
  71. data/lib/badline/c64/cartridge/rgcd.rb +50 -0
  72. data/lib/badline/c64/cartridge/simons_basic.rb +37 -0
  73. data/lib/badline/c64/cartridge/standard.rb +17 -0
  74. data/lib/badline/c64/cartridge/super_games.rb +40 -0
  75. data/lib/badline/c64/cartridge/westermann.rb +32 -0
  76. data/lib/badline/c64/cartridge/zaxxon.rb +52 -0
  77. data/lib/badline/c64/cartridge.rb +232 -0
  78. data/lib/badline/c64/color_memory.rb +27 -0
  79. data/lib/badline/{computer → c64}/common.rb +2 -2
  80. data/lib/badline/{computer → c64}/kernal_traps.rb +39 -36
  81. data/lib/badline/c64/keyed_modules.rb +111 -0
  82. data/lib/badline/c64/keyed_state.rb +68 -0
  83. data/lib/badline/c64/reu/dma.rb +271 -0
  84. data/lib/badline/c64/reu/keyed_state.rb +140 -0
  85. data/lib/badline/c64/reu/ram.rb +94 -0
  86. data/lib/badline/c64/reu/trigger.rb +34 -0
  87. data/lib/badline/c64/reu.rb +289 -0
  88. data/lib/badline/c64/true_drives.rb +120 -0
  89. data/lib/badline/{computer.rb → c64.rb} +24 -15
  90. data/lib/badline/chips/cia/fast_forward.rb +62 -0
  91. data/lib/badline/chips/cia/interrupt_register.rb +128 -0
  92. data/lib/badline/chips/cia/keyed_parts.rb +213 -0
  93. data/lib/badline/chips/cia/serial.rb +246 -0
  94. data/lib/badline/chips/cia/time_of_day.rb +210 -0
  95. data/lib/badline/chips/cia/timer.rb +188 -0
  96. data/lib/badline/chips/cia.rb +281 -0
  97. data/lib/badline/chips/cpu/addressing.rb +133 -0
  98. data/lib/badline/chips/cpu/boundary.rb +56 -0
  99. data/lib/badline/chips/cpu/core.rb +183 -0
  100. data/lib/badline/chips/cpu/instruction.rb +338 -0
  101. data/lib/badline/chips/cpu/instruction_set/arithmetic.rb +118 -0
  102. data/lib/badline/chips/cpu/instruction_set/bitwise.rb +130 -0
  103. data/lib/badline/chips/cpu/instruction_set/branch.rb +83 -0
  104. data/lib/badline/chips/cpu/instruction_set/flag.rb +67 -0
  105. data/lib/badline/chips/cpu/instruction_set/illegal.rb +274 -0
  106. data/lib/badline/chips/cpu/instruction_set/inc_dec.rb +73 -0
  107. data/lib/badline/chips/cpu/instruction_set/stack.rb +56 -0
  108. data/lib/badline/chips/cpu/instruction_set/transfer.rb +141 -0
  109. data/lib/badline/chips/cpu/instruction_set.rb +59 -0
  110. data/lib/badline/chips/cpu/interrupts.rb +108 -0
  111. data/lib/badline/chips/cpu/keyed_state.rb +177 -0
  112. data/lib/badline/chips/cpu/microcode.rb +195 -0
  113. data/lib/badline/chips/cpu/operations.rb +90 -0
  114. data/lib/badline/chips/cpu/port.rb +133 -0
  115. data/lib/badline/chips/cpu/stack_operations.rb +84 -0
  116. data/lib/badline/chips/cpu/traps.rb +23 -0
  117. data/lib/badline/chips/cpu.rb +17 -0
  118. data/lib/badline/chips/sid/catch_up.rb +122 -0
  119. data/lib/badline/chips/sid/decimator.rb +68 -0
  120. data/lib/badline/chips/sid/envelope.rb +236 -0
  121. data/lib/badline/chips/sid/filter.rb +227 -0
  122. data/lib/badline/chips/sid/keyed_parts.rb +286 -0
  123. data/lib/badline/chips/sid/voice.rb +69 -0
  124. data/lib/badline/chips/sid/waveform/combined.rb +128 -0
  125. data/lib/badline/chips/sid/waveform/fast_forward.rb +107 -0
  126. data/lib/badline/chips/sid/waveform/noise_writeback.rb +124 -0
  127. data/lib/badline/chips/sid/waveform.rb +305 -0
  128. data/lib/badline/chips/sid.rb +264 -0
  129. data/lib/badline/chips/ted/beam.rb +119 -0
  130. data/lib/badline/chips/ted/timers.rb +66 -0
  131. data/lib/badline/chips/ted.rb +143 -0
  132. data/lib/badline/chips/tia.rb +49 -0
  133. data/lib/badline/chips/vdc/keyed_parts.rb +105 -0
  134. data/lib/badline/{c128 → chips}/vdc/memory.rb +1 -1
  135. data/lib/badline/{c128 → chips}/vdc/painter.rb +1 -13
  136. data/lib/badline/{c128 → chips}/vdc/raster.rb +1 -17
  137. data/lib/badline/{c128 → chips}/vdc/window.rb +1 -10
  138. data/lib/badline/{c128 → chips}/vdc.rb +6 -31
  139. data/lib/badline/chips/via/control_lines.rb +109 -0
  140. data/lib/badline/chips/via/fast_forward.rb +55 -0
  141. data/lib/badline/chips/via/interrupt_register.rb +60 -0
  142. data/lib/badline/chips/via/keyed_parts.rb +163 -0
  143. data/lib/badline/chips/via/shift_register.rb +168 -0
  144. data/lib/badline/chips/via/timer1.rb +120 -0
  145. data/lib/badline/chips/via/timer2.rb +117 -0
  146. data/lib/badline/chips/via.rb +267 -0
  147. data/lib/badline/chips/vic/bank.rb +135 -0
  148. data/lib/badline/chips/vic/border_mask.rb +78 -0
  149. data/lib/badline/chips/vic/collisions.rb +106 -0
  150. data/lib/badline/chips/vic/color_patches.rb +38 -0
  151. data/lib/badline/chips/vic/display_state.rb +168 -0
  152. data/lib/badline/chips/vic/graphics_mode.rb +166 -0
  153. data/lib/badline/chips/vic/graphics_shifter.rb +183 -0
  154. data/lib/badline/chips/vic/keyed_parts.rb +228 -0
  155. data/lib/badline/chips/vic/keyed_sprites.rb +225 -0
  156. data/lib/badline/chips/vic/keyed_state.rb +102 -0
  157. data/lib/badline/chips/vic/register_log.rb +65 -0
  158. data/lib/badline/chips/vic/registers.rb +188 -0
  159. data/lib/badline/chips/vic/sequencer.rb +275 -0
  160. data/lib/badline/chips/vic/sequencer_output.rb +118 -0
  161. data/lib/badline/chips/vic/sprite/internal_bus.rb +59 -0
  162. data/lib/badline/chips/vic/sprite/shifter.rb +148 -0
  163. data/lib/badline/chips/vic/sprite/timing.rb +58 -0
  164. data/lib/badline/chips/vic/sprite.rb +337 -0
  165. data/lib/badline/chips/vic/sprites.rb +281 -0
  166. data/lib/badline/chips/vic.rb +787 -0
  167. data/lib/badline/chips/vic_i/keyed_parts.rb +142 -0
  168. data/lib/badline/{vic20/vic → chips/vic_i}/painter.rb +2 -30
  169. data/lib/badline/chips/vic_i/sound/output.rb +85 -0
  170. data/lib/badline/chips/vic_i/sound.rb +227 -0
  171. data/lib/badline/{vic20/vic → chips/vic_i}/text_window.rb +2 -2
  172. data/lib/badline/{vic20/vic.rb → chips/vic_i.rb} +6 -6
  173. data/lib/badline/chips/z80/arithmetic.rb +119 -0
  174. data/lib/badline/chips/z80/bit_page.rb +57 -0
  175. data/lib/badline/chips/z80/block_io.rb +60 -0
  176. data/lib/badline/chips/z80/block_transfers.rb +61 -0
  177. data/lib/badline/chips/z80/bus_cycles.rb +113 -0
  178. data/lib/badline/chips/z80/core.rb +115 -0
  179. data/lib/badline/chips/z80/exchanges.rb +52 -0
  180. data/lib/badline/chips/z80/extended_page.rb +91 -0
  181. data/lib/badline/chips/z80/flags.rb +39 -0
  182. data/lib/badline/chips/z80/interrupt_acceptance.rb +48 -0
  183. data/lib/badline/chips/z80/jumps.rb +84 -0
  184. data/lib/badline/chips/z80/keyed_state.rb +73 -0
  185. data/lib/badline/chips/z80/loads.rb +100 -0
  186. data/lib/badline/chips/z80/main_page.rb +136 -0
  187. data/lib/badline/chips/z80/registers.rb +122 -0
  188. data/lib/badline/chips/z80/shifts.rb +66 -0
  189. data/lib/badline/chips/z80.rb +13 -0
  190. data/lib/badline/chips.rb +10 -0
  191. data/lib/badline/core.rb +13 -32
  192. data/lib/badline/drives/datasette/keyed_state.rb +38 -0
  193. data/lib/badline/drives/datasette.rb +173 -0
  194. data/lib/badline/drives/engine/core.rb +152 -0
  195. data/lib/badline/drives/engine/fast_serial.rb +75 -0
  196. data/lib/badline/drives/engine/idle.rb +127 -0
  197. data/lib/badline/drives/engine/idle_cpu.rb +30 -0
  198. data/lib/badline/drives/engine/orbit.rb +81 -0
  199. data/lib/badline/drives/engine/serial_lines.rb +72 -0
  200. data/lib/badline/drives/engine/sleep.rb +114 -0
  201. data/lib/badline/drives/engine/vias.rb +86 -0
  202. data/lib/badline/drives/engine/watch.rb +152 -0
  203. data/lib/badline/drives/engine.rb +11 -0
  204. data/lib/badline/drives/model1541/bus.rb +75 -0
  205. data/lib/badline/drives/model1541/byte_ready.rb +50 -0
  206. data/lib/badline/drives/model1541/cpu.rb +13 -0
  207. data/lib/badline/drives/model1541/disk.rb +318 -0
  208. data/lib/badline/drives/model1541/disk_via.rb +38 -0
  209. data/lib/badline/drives/model1541/gcr.rb +59 -0
  210. data/lib/badline/drives/model1541/keyed_state.rb +251 -0
  211. data/lib/badline/drives/model1541/mechanism.rb +313 -0
  212. data/lib/badline/drives/model1541/rotation.rb +123 -0
  213. data/lib/badline/drives/model1541/sector_reader.rb +78 -0
  214. data/lib/badline/drives/model1541/serial_port.rb +20 -0
  215. data/lib/badline/drives/model1541/track.rb +100 -0
  216. data/lib/badline/drives/model1541.rb +80 -0
  217. data/lib/badline/drives/model1571/bus.rb +100 -0
  218. data/lib/badline/drives/model1571/cpu.rb +13 -0
  219. data/lib/badline/drives/model1571/keyed_state.rb +108 -0
  220. data/lib/badline/drives/model1571/serial_port.rb +39 -0
  221. data/lib/badline/drives/model1571/serial_via.rb +27 -0
  222. data/lib/badline/drives/model1571/wd1770.rb +108 -0
  223. data/lib/badline/drives/model1571.rb +141 -0
  224. data/lib/badline/drives/model1581/bus.rb +126 -0
  225. data/lib/badline/drives/model1581/cpu.rb +13 -0
  226. data/lib/badline/drives/model1581/disk.rb +133 -0
  227. data/lib/badline/drives/model1581/keyed_state.rb +280 -0
  228. data/lib/badline/drives/model1581/mechanism.rb +98 -0
  229. data/lib/badline/drives/model1581/serial_port.rb +54 -0
  230. data/lib/badline/drives/model1581/slot.rb +61 -0
  231. data/lib/badline/drives/model1581/track.rb +102 -0
  232. data/lib/badline/drives/model1581/track_bytes.rb +77 -0
  233. data/lib/badline/drives/model1581/wd1772/registers.rb +91 -0
  234. data/lib/badline/drives/model1581/wd1772/sector_writes.rb +75 -0
  235. data/lib/badline/drives/model1581/wd1772/sectors.rb +152 -0
  236. data/lib/badline/drives/model1581/wd1772/stepping.rb +111 -0
  237. data/lib/badline/drives/model1581/wd1772/tracks.rb +127 -0
  238. data/lib/badline/drives/model1581/wd1772/turn.rb +75 -0
  239. data/lib/badline/drives/model1581/wd1772.rb +216 -0
  240. data/lib/badline/drives/model1581.rb +206 -0
  241. data/lib/badline/drives/serial_bus.rb +161 -0
  242. data/lib/badline/drives.rb +8 -0
  243. data/lib/badline/frontend/app.rb +3 -3
  244. data/lib/badline/frontend/boot.rb +4 -4
  245. data/lib/badline/frontend/controls.rb +19 -3
  246. data/lib/badline/frontend/drive_led.rb +44 -21
  247. data/lib/badline/frontend/machine_window.rb +3 -1
  248. data/lib/badline/frontend/menu/menu_dialogs.rb +2 -2
  249. data/lib/badline/frontend/player/filter_view.rb +1 -1
  250. data/lib/badline/frontend/player/player_controller.rb +2 -2
  251. data/lib/badline/frontend/player/player_screen.rb +1 -0
  252. data/lib/badline/frontend/player/theme.rb +7 -7
  253. data/lib/badline/frontend/snapshots.rb +12 -1
  254. data/lib/badline/frontend/timeline.rb +30 -12
  255. data/lib/badline/input/control_ports.rb +78 -0
  256. data/lib/badline/input/joystick.rb +27 -0
  257. data/lib/badline/input/keyboard.rb +114 -0
  258. data/lib/badline/input/matrix_typist.rb +98 -0
  259. data/lib/badline/input.rb +4 -0
  260. data/lib/badline/kernal_trap/chrout.rb +45 -0
  261. data/lib/badline/kernal_trap/{drive → dos}/block_commands.rb +1 -1
  262. data/lib/badline/kernal_trap/dos/channel.rb +156 -0
  263. data/lib/badline/kernal_trap/{drive → dos}/channels.rb +1 -26
  264. data/lib/badline/kernal_trap/{drive → dos}/memory.rb +1 -10
  265. data/lib/badline/kernal_trap/{drive → dos}/parameters.rb +1 -1
  266. data/lib/badline/kernal_trap/{drive → dos}/status.rb +1 -9
  267. data/lib/badline/kernal_trap/{drive → dos}/write_file.rb +1 -19
  268. data/lib/badline/kernal_trap/{drive → dos}/writes.rb +1 -1
  269. data/lib/badline/kernal_trap/{drive.rb → dos.rb} +9 -27
  270. data/lib/badline/kernal_trap/file_routine.rb +4 -4
  271. data/lib/badline/kernal_trap/keyed_state.rb +150 -0
  272. data/lib/badline/kernal_trap/layout.rb +75 -11
  273. data/lib/badline/kernal_trap/load.rb +19 -21
  274. data/lib/badline/kernal_trap/routine.rb +12 -0
  275. data/lib/badline/kernal_trap/save.rb +12 -22
  276. data/lib/badline/kernal_trap/serial.rb +8 -24
  277. data/lib/badline/kernal_trap.rb +3 -2
  278. data/lib/badline/machine/clocking.rb +1 -1
  279. data/lib/badline/machine/keyboard_buffer.rb +49 -0
  280. data/lib/badline/machine/settling.rb +29 -0
  281. data/lib/badline/machine.rb +10 -7
  282. data/lib/badline/media/boot_disk.rb +14 -2
  283. data/lib/badline/media/extensions.rb +10 -0
  284. data/lib/badline/media/true_drive.rb +1 -1
  285. data/lib/badline/media/tune.rb +2 -2
  286. data/lib/badline/media.rb +3 -3
  287. data/lib/badline/memory.rb +3 -6
  288. data/lib/badline/model.rb +1 -1
  289. data/lib/badline/options/family.rb +5 -2
  290. data/lib/badline/options/help.rb +42 -16
  291. data/lib/badline/options/table.rb +2 -0
  292. data/lib/badline/options/validation.rb +2 -0
  293. data/lib/badline/options.rb +6 -1
  294. data/lib/badline/plus4/acia.rb +45 -0
  295. data/lib/badline/plus4/bus.rb +312 -0
  296. data/lib/badline/plus4/cpu.rb +10 -0
  297. data/lib/badline/plus4/cpu_port.rb +93 -0
  298. data/lib/badline/plus4/keyboard_port.rb +51 -0
  299. data/lib/badline/plus4/model.rb +38 -0
  300. data/lib/badline/plus4/user_port.rb +31 -0
  301. data/lib/badline/plus4.rb +164 -0
  302. data/lib/badline/roms/README +44 -6
  303. data/lib/badline/roms/plus4/basic.rom +0 -0
  304. data/lib/badline/roms/plus4/function-high.rom +0 -0
  305. data/lib/badline/roms/plus4/function-low.rom +0 -0
  306. data/lib/badline/roms/plus4/kernal-ntsc.rom +0 -0
  307. data/lib/badline/roms/plus4/kernal-pal.rom +0 -0
  308. data/lib/badline/sdl.rb +1 -0
  309. data/lib/badline/{storage/sid_file.rb → sid_tune/file.rb} +3 -3
  310. data/lib/badline/{storage → sid_tune}/hvsc.rb +7 -7
  311. data/lib/badline/{storage → sid_tune}/song_lengths.rb +2 -2
  312. data/lib/badline/{storage → sid_tune}/stil/credit.rb +1 -1
  313. data/lib/badline/{storage → sid_tune}/stil.rb +3 -3
  314. data/lib/badline/sid_tune.rb +6 -0
  315. data/lib/badline/snapshot/c128_setup.rb +32 -0
  316. data/lib/badline/snapshot/c64_setup.rb +83 -0
  317. data/lib/badline/snapshot/container.rb +4 -0
  318. data/lib/badline/snapshot/field_doc/markdown.rb +112 -0
  319. data/lib/badline/snapshot/field_doc.rb +109 -0
  320. data/lib/badline/snapshot/image.rb +132 -46
  321. data/lib/badline/snapshot/keyed/cursor.rb +40 -0
  322. data/lib/badline/snapshot/keyed/modules.rb +66 -0
  323. data/lib/badline/snapshot/keyed/reader.rb +188 -0
  324. data/lib/badline/snapshot/keyed/recorder.rb +88 -0
  325. data/lib/badline/snapshot/keyed/report.rb +26 -0
  326. data/lib/badline/snapshot/keyed/writer.rb +55 -0
  327. data/lib/badline/snapshot/keyed.rb +64 -0
  328. data/lib/badline/snapshot/machine_state.rb +17 -64
  329. data/lib/badline/snapshot/storage_setup.rb +63 -0
  330. data/lib/badline/snapshot/vic20_setup.rb +28 -0
  331. data/lib/badline/snapshot/vice/c64_mem.rb +1 -1
  332. data/lib/badline/snapshot/vice/restore.rb +1 -1
  333. data/lib/badline/snapshot/vice/reu1764.rb +3 -3
  334. data/lib/badline/snapshot/vice/reu_fields.rb +40 -0
  335. data/lib/badline/snapshot/vice.rb +13 -35
  336. data/lib/badline/snapshot.rb +44 -22
  337. data/lib/badline/storage/crt_file.rb +3 -1
  338. data/lib/badline/storage/d64_image.rb +0 -2
  339. data/lib/badline/storage/d71_image.rb +0 -2
  340. data/lib/badline/storage/d81_image.rb +0 -2
  341. data/lib/badline/storage/disk_image.rb +3 -6
  342. data/lib/badline/storage/g64_image.rb +10 -5
  343. data/lib/badline/storage/host_directory.rb +0 -5
  344. data/lib/badline/storage/t64.rb +2 -8
  345. data/lib/badline/storage/tap.rb +43 -15
  346. data/lib/badline/storage/unavailable.rb +1 -1
  347. data/lib/badline/storage.rb +0 -37
  348. data/lib/badline/support/c128_checkpoint.rb +39 -0
  349. data/lib/badline/support/checkpoint.rb +108 -0
  350. data/lib/badline/support/vic20_checkpoint.rb +38 -0
  351. data/lib/badline/support.rb +5 -0
  352. data/lib/badline/version.rb +1 -1
  353. data/lib/badline/vic20/attachments.rb +8 -5
  354. data/lib/badline/vic20/bus/keyed_state.rb +52 -0
  355. data/lib/badline/vic20/bus.rb +2 -25
  356. data/lib/badline/vic20/cpu.rb +1 -1
  357. data/lib/badline/vic20/keyed_modules.rb +73 -0
  358. data/lib/badline/vic20/keyed_state.rb +45 -0
  359. data/lib/badline/vic20/port_wiring.rb +4 -4
  360. data/lib/badline/vic20/user_via_ports.rb +2 -2
  361. data/lib/badline/vic20.rb +22 -17
  362. data/lib/badline.rb +1 -0
  363. metadata +271 -228
  364. data/lib/badline/address_bus/extra_sids.rb +0 -30
  365. data/lib/badline/address_bus/fittings.rb +0 -38
  366. data/lib/badline/address_bus/pla.rb +0 -147
  367. data/lib/badline/address_bus/roms.rb +0 -39
  368. data/lib/badline/address_bus/saved_state.rb +0 -66
  369. data/lib/badline/address_bus/sid_slots.rb +0 -42
  370. data/lib/badline/address_bus.rb +0 -216
  371. data/lib/badline/c128/bus_state.rb +0 -53
  372. data/lib/badline/c128/saved_state.rb +0 -143
  373. data/lib/badline/cartridge/action_replay.rb +0 -126
  374. data/lib/badline/cartridge/atomic_power.rb +0 -24
  375. data/lib/badline/cartridge/bank.rb +0 -81
  376. data/lib/badline/cartridge/comal80.rb +0 -50
  377. data/lib/badline/cartridge/dinamic.rb +0 -34
  378. data/lib/badline/cartridge/easy_flash.rb +0 -145
  379. data/lib/badline/cartridge/epyx_fastload.rb +0 -79
  380. data/lib/badline/cartridge/final_cartridge3.rb +0 -89
  381. data/lib/badline/cartridge/flash.rb +0 -306
  382. data/lib/badline/cartridge/freezer.rb +0 -33
  383. data/lib/badline/cartridge/fun_play.rb +0 -38
  384. data/lib/badline/cartridge/g_mod2.rb +0 -74
  385. data/lib/badline/cartridge/game_system.rb +0 -40
  386. data/lib/badline/cartridge/geo_ram.rb +0 -79
  387. data/lib/badline/cartridge/kcs_power.rb +0 -75
  388. data/lib/badline/cartridge/mach5.rb +0 -32
  389. data/lib/badline/cartridge/magic_desk.rb +0 -30
  390. data/lib/badline/cartridge/ocean.rb +0 -35
  391. data/lib/badline/cartridge/pagefox.rb +0 -68
  392. data/lib/badline/cartridge/retro_replay.rb +0 -320
  393. data/lib/badline/cartridge/rex_utility.rb +0 -29
  394. data/lib/badline/cartridge/rgcd.rb +0 -58
  395. data/lib/badline/cartridge/simons_basic.rb +0 -35
  396. data/lib/badline/cartridge/standard.rb +0 -15
  397. data/lib/badline/cartridge/super_games.rb +0 -48
  398. data/lib/badline/cartridge/westermann.rb +0 -30
  399. data/lib/badline/cartridge/zaxxon.rb +0 -66
  400. data/lib/badline/cartridge.rb +0 -303
  401. data/lib/badline/checkpoint.rb +0 -98
  402. data/lib/badline/chrout_trap.rb +0 -43
  403. data/lib/badline/cia/fast_forward.rb +0 -60
  404. data/lib/badline/cia/interrupt_register.rb +0 -143
  405. data/lib/badline/cia/serial.rb +0 -275
  406. data/lib/badline/cia/state.rb +0 -47
  407. data/lib/badline/cia/timer.rb +0 -206
  408. data/lib/badline/cia.rb +0 -279
  409. data/lib/badline/color_memory.rb +0 -25
  410. data/lib/badline/computer/attachments.rb +0 -88
  411. data/lib/badline/computer/saved_state.rb +0 -117
  412. data/lib/badline/computer/true_drives.rb +0 -69
  413. data/lib/badline/control_ports.rb +0 -76
  414. data/lib/badline/cpu/addressing.rb +0 -131
  415. data/lib/badline/cpu/boundary.rb +0 -54
  416. data/lib/badline/cpu/core.rb +0 -165
  417. data/lib/badline/cpu/microcode.rb +0 -177
  418. data/lib/badline/cpu/operations.rb +0 -88
  419. data/lib/badline/cpu/saved_state.rb +0 -115
  420. data/lib/badline/cpu/stack_operations.rb +0 -82
  421. data/lib/badline/cpu.rb +0 -10
  422. data/lib/badline/cpu_port.rb +0 -112
  423. data/lib/badline/datasette.rb +0 -161
  424. data/lib/badline/debug_register.rb +0 -28
  425. data/lib/badline/drive/core.rb +0 -147
  426. data/lib/badline/drive/fast_serial.rb +0 -73
  427. data/lib/badline/drive/idle.rb +0 -125
  428. data/lib/badline/drive/idle_cpu.rb +0 -28
  429. data/lib/badline/drive/orbit.rb +0 -79
  430. data/lib/badline/drive/serial_lines.rb +0 -73
  431. data/lib/badline/drive/sleep.rb +0 -112
  432. data/lib/badline/drive/vias.rb +0 -84
  433. data/lib/badline/drive/watch.rb +0 -150
  434. data/lib/badline/drive.rb +0 -11
  435. data/lib/badline/drive1541/bus.rb +0 -86
  436. data/lib/badline/drive1541/byte_ready.rb +0 -48
  437. data/lib/badline/drive1541/cpu.rb +0 -11
  438. data/lib/badline/drive1541/disk.rb +0 -315
  439. data/lib/badline/drive1541/disk_state.rb +0 -86
  440. data/lib/badline/drive1541/disk_via.rb +0 -36
  441. data/lib/badline/drive1541/gcr.rb +0 -57
  442. data/lib/badline/drive1541/mechanism.rb +0 -313
  443. data/lib/badline/drive1541/mechanism_state.rb +0 -68
  444. data/lib/badline/drive1541/rotation.rb +0 -121
  445. data/lib/badline/drive1541/sector_reader.rb +0 -76
  446. data/lib/badline/drive1541/serial_port.rb +0 -18
  447. data/lib/badline/drive1541/track.rb +0 -98
  448. data/lib/badline/drive1541.rb +0 -111
  449. data/lib/badline/drive1571/bus.rb +0 -111
  450. data/lib/badline/drive1571/cpu.rb +0 -11
  451. data/lib/badline/drive1571/serial_port.rb +0 -37
  452. data/lib/badline/drive1571/serial_via.rb +0 -25
  453. data/lib/badline/drive1571/wd1770.rb +0 -120
  454. data/lib/badline/drive1571.rb +0 -175
  455. data/lib/badline/drive1581/bus.rb +0 -137
  456. data/lib/badline/drive1581/cpu.rb +0 -11
  457. data/lib/badline/drive1581/disk.rb +0 -135
  458. data/lib/badline/drive1581/disk_state.rb +0 -87
  459. data/lib/badline/drive1581/mechanism.rb +0 -117
  460. data/lib/badline/drive1581/serial_port.rb +0 -52
  461. data/lib/badline/drive1581/slot.rb +0 -78
  462. data/lib/badline/drive1581/track.rb +0 -100
  463. data/lib/badline/drive1581/track_bytes.rb +0 -75
  464. data/lib/badline/drive1581/wd1772/registers.rb +0 -89
  465. data/lib/badline/drive1581/wd1772/sector_writes.rb +0 -73
  466. data/lib/badline/drive1581/wd1772/sectors.rb +0 -150
  467. data/lib/badline/drive1581/wd1772/state.rb +0 -66
  468. data/lib/badline/drive1581/wd1772/stepping.rb +0 -109
  469. data/lib/badline/drive1581/wd1772/tracks.rb +0 -125
  470. data/lib/badline/drive1581/wd1772/turn.rb +0 -73
  471. data/lib/badline/drive1581/wd1772.rb +0 -216
  472. data/lib/badline/drive1581.rb +0 -233
  473. data/lib/badline/iec_bus.rb +0 -159
  474. data/lib/badline/instruction.rb +0 -334
  475. data/lib/badline/instruction_set/arithmetic.rb +0 -114
  476. data/lib/badline/instruction_set/bitwise.rb +0 -126
  477. data/lib/badline/instruction_set/branch.rb +0 -79
  478. data/lib/badline/instruction_set/flag.rb +0 -63
  479. data/lib/badline/instruction_set/illegal.rb +0 -270
  480. data/lib/badline/instruction_set/inc_dec.rb +0 -69
  481. data/lib/badline/instruction_set/stack.rb +0 -52
  482. data/lib/badline/instruction_set/transfer.rb +0 -137
  483. data/lib/badline/instruction_set.rb +0 -55
  484. data/lib/badline/interrupts.rb +0 -104
  485. data/lib/badline/joystick.rb +0 -25
  486. data/lib/badline/kernal_trap/channel.rb +0 -181
  487. data/lib/badline/keyboard.rb +0 -112
  488. data/lib/badline/keyboard_buffer.rb +0 -33
  489. data/lib/badline/ram_expansion/banking.rb +0 -30
  490. data/lib/badline/ram_expansion/plus256k.rb +0 -54
  491. data/lib/badline/ram_expansion/plus60k.rb +0 -43
  492. data/lib/badline/ram_expansion/unexpanded.rb +0 -28
  493. data/lib/badline/ram_expansion.rb +0 -21
  494. data/lib/badline/reu/dma/saved_state.rb +0 -50
  495. data/lib/badline/reu/dma.rb +0 -273
  496. data/lib/badline/reu/ram.rb +0 -107
  497. data/lib/badline/reu/saved_state.rb +0 -80
  498. data/lib/badline/reu/trigger.rb +0 -32
  499. data/lib/badline/reu.rb +0 -289
  500. data/lib/badline/sid/catch_up.rb +0 -120
  501. data/lib/badline/sid/decimator.rb +0 -64
  502. data/lib/badline/sid/envelope/state.rb +0 -68
  503. data/lib/badline/sid/envelope.rb +0 -239
  504. data/lib/badline/sid/filter.rb +0 -263
  505. data/lib/badline/sid/voice.rb +0 -77
  506. data/lib/badline/sid/waveform/combined.rb +0 -126
  507. data/lib/badline/sid/waveform/fast_forward.rb +0 -105
  508. data/lib/badline/sid/waveform/noise_writeback.rb +0 -122
  509. data/lib/badline/sid/waveform/state.rb +0 -66
  510. data/lib/badline/sid/waveform.rb +0 -305
  511. data/lib/badline/sid.rb +0 -303
  512. data/lib/badline/snapshot/setup.rb +0 -75
  513. data/lib/badline/snapshot/state.rb +0 -189
  514. data/lib/badline/time_of_day.rb +0 -228
  515. data/lib/badline/traps.rb +0 -19
  516. data/lib/badline/via/control_lines.rb +0 -122
  517. data/lib/badline/via/fast_forward.rb +0 -53
  518. data/lib/badline/via/interrupt_register.rb +0 -67
  519. data/lib/badline/via/shift_register.rb +0 -180
  520. data/lib/badline/via/state.rb +0 -42
  521. data/lib/badline/via/timer1.rb +0 -131
  522. data/lib/badline/via/timer2.rb +0 -133
  523. data/lib/badline/via.rb +0 -266
  524. data/lib/badline/vic/bank.rb +0 -133
  525. data/lib/badline/vic/border_mask.rb +0 -86
  526. data/lib/badline/vic/collisions.rb +0 -115
  527. data/lib/badline/vic/color_patches.rb +0 -47
  528. data/lib/badline/vic/display_state.rb +0 -185
  529. data/lib/badline/vic/graphics_mode.rb +0 -164
  530. data/lib/badline/vic/graphics_shifter.rb +0 -207
  531. data/lib/badline/vic/register_log.rb +0 -81
  532. data/lib/badline/vic/registers.rb +0 -195
  533. data/lib/badline/vic/sequencer.rb +0 -275
  534. data/lib/badline/vic/sequencer_output.rb +0 -116
  535. data/lib/badline/vic/sequencer_state.rb +0 -89
  536. data/lib/badline/vic/sprite/internal_bus.rb +0 -68
  537. data/lib/badline/vic/sprite/saved_state.rb +0 -64
  538. data/lib/badline/vic/sprite/shifter.rb +0 -146
  539. data/lib/badline/vic/sprite/timing.rb +0 -56
  540. data/lib/badline/vic/sprite.rb +0 -337
  541. data/lib/badline/vic/sprites.rb +0 -282
  542. data/lib/badline/vic/sprites_state.rb +0 -57
  543. data/lib/badline/vic.rb +0 -853
  544. data/lib/badline/vic20/saved_state.rb +0 -124
  545. data/lib/badline/vic20/sound/output.rb +0 -83
  546. data/lib/badline/vic20/sound.rb +0 -233
  547. data/lib/badline/vic20/vic/saved_state.rb +0 -55
  548. data/lib/badline/z80/arithmetic.rb +0 -117
  549. data/lib/badline/z80/bit_page.rb +0 -55
  550. data/lib/badline/z80/block_io.rb +0 -58
  551. data/lib/badline/z80/block_transfers.rb +0 -59
  552. data/lib/badline/z80/bus_cycles.rb +0 -111
  553. data/lib/badline/z80/core.rb +0 -113
  554. data/lib/badline/z80/exchanges.rb +0 -50
  555. data/lib/badline/z80/extended_page.rb +0 -89
  556. data/lib/badline/z80/flags.rb +0 -37
  557. data/lib/badline/z80/interrupt_acceptance.rb +0 -46
  558. data/lib/badline/z80/jumps.rb +0 -82
  559. data/lib/badline/z80/loads.rb +0 -98
  560. data/lib/badline/z80/main_page.rb +0 -134
  561. data/lib/badline/z80/registers.rb +0 -120
  562. data/lib/badline/z80/saved_state.rb +0 -69
  563. data/lib/badline/z80/shifts.rb +0 -64
  564. data/lib/badline/z80.rb +0 -11
  565. /data/lib/badline/snapshot/{fields.rb → vice/fields.rb} +0 -0
@@ -0,0 +1,1047 @@
1
+ # Snapshot format
2
+
3
+ This file is generated by `rake snapshot:fields` from the code that
4
+ loads a snapshot. Don't edit it by hand. doc/snapshots.md covers
5
+ what a snapshot holds and which versions load.
6
+
7
+ A snapshot is a VICE `.vsf` container. The machine is in modules
8
+ named `BL-` plus a unit, each a deflated list of records: a key, a
9
+ type and a value. The types are `int` (a zigzag BER integer), `bool`,
10
+ `bytes`, `ints` (a list of integers) and `text`. A load skips a key
11
+ it doesn't know, and a key that isn't there leaves the value a
12
+ machine built afresh has: the default below. `word`, `byte` and
13
+ `int & 0x..` are ints cut to the latch's width. A text that lists
14
+ its values takes one of them. An optional int is absent when the
15
+ latch holds nothing. A true drive's modules are named from its
16
+ device number, `BL-D8` to `BL-D11`. Keys with `<N>` stand for each
17
+ numbered unit. A default of "written only" is a key the load
18
+ doesn't read, or reads only when the snapshot has it. Where the
19
+ machines differ, the default is given for each, and a key only
20
+ some of them have names them.
21
+
22
+ ## BL-MACHINE
23
+
24
+ Written by the C64, VIC-20, C128.
25
+
26
+ | Key | Type | Default |
27
+ | --- | --- | --- |
28
+ | `family` | text: c64 vic20 c128 | "c64" |
29
+ | `region` | text: pal ntsc ntscold drean | C64: "pal" |
30
+ | `vic_model` | text: mos6569 mos8565 mos8566 mos8564 | C64: "mos6569" |
31
+ | `cia_model` | text: mos6526 mos6526a | C64: "mos6526" |
32
+ | `sid_model` | text: mos6581 mos8580 | C64: "mos6581"; C128: "mos6581" |
33
+ | `ram_expansion` | text: none plus60k plus256k | C64: "none" |
34
+ | `reu_kb` | int | C64: 0 |
35
+ | `kernal` | text: c64 sx64 pet64 gs | C64: "c64" |
36
+ | `datasette` | bool | C64: true |
37
+ | `board` | text: c64 pet64 gs max | C64: "c64" |
38
+ | `cycles` | int | 0 |
39
+ | `nmi_asserted` | bool | false |
40
+ | `cartridge_nmi` | bool | C64: false; C128: false |
41
+ | `restore_pulse` | bool | C64: false; C128: false |
42
+ | `freezing` | bool | C64: false |
43
+ | `freeze_writes` | int | C64: 0 |
44
+ | `dma` | bool | C64: false |
45
+ | `host.pending_keys` | ints | [] |
46
+ | `host.init_pending` | int | 0 |
47
+ | `written_by` | text | "" |
48
+ | `ram` | text: unexpanded 3k 8k 16k 24k 32k all | VIC-20: "unexpanded" |
49
+ | `bus.data` | byte | VIC-20: 253; C128: 255 |
50
+ | `bus.video_data` | byte | VIC-20: 0 |
51
+ | `model` | text: c128 c128ntsc c128dcr c128dcrntsc | C128: "c128" |
52
+ | `mode` | text: c64 c128 | C128: "c64" |
53
+ | `bus.address` | word | C128: 65533 |
54
+ | `clock_bits` | int | C128: 0 |
55
+ | `z80_ahead` | int | C128: 0 |
56
+ | `chips_ahead` | int | C128: 0 |
57
+ | `cpu_reset_pending` | bool | C128: true |
58
+ | `host.typing` | bool | C128: false |
59
+ | `host.holding_commodore` | bool | C128: false |
60
+ | `host.typist.code` | int, optional | C128: absent |
61
+ | `host.typist.wait` | int | C128: 0 |
62
+ | `host.typist.typing` | bool | C128: false |
63
+
64
+ ## BL-RAM
65
+
66
+ Written by the C64, VIC-20, C128.
67
+
68
+ | Key | Type | Default |
69
+ | --- | --- | --- |
70
+ | `ram` | bytes | C64: 65536 values; VIC-20: 49152 values; C128: 131072 values |
71
+
72
+ ## BL-COLORRAM
73
+
74
+ Written by the C64, VIC-20, C128.
75
+
76
+ | Key | Type | Default |
77
+ | --- | --- | --- |
78
+ | `ram` | bytes | C64: 1024 × 0; VIC-20: 1024 × 0 |
79
+ | `bank<N>` | bytes | C128: 1024 × 0 |
80
+
81
+ ## BL-CPU
82
+
83
+ Written by the C64, C128, VIC-20.
84
+
85
+ | Key | Type | Default |
86
+ | --- | --- | --- |
87
+ | `port.ddr` | byte | C64: 0; C128: 0 |
88
+ | `port.data` | byte | C64: 0; C128: 0 |
89
+ | `port.floating` | byte | C64: 0; C128: 0 |
90
+ | `pc` | word | C64: 64738; VIC-20: 64802; C128: 65341 |
91
+ | `sp` | byte | 255 |
92
+ | `a` | byte | 0 |
93
+ | `x` | byte | 0 |
94
+ | `y` | byte | 0 |
95
+ | `p` | byte | 32 |
96
+ | `nmi` | bool | false |
97
+ | `so_high` | bool | true |
98
+ | `irq.sample` | bool | false |
99
+ | `irq.pending` | bool | false |
100
+ | `irq.boundary` | bool | false |
101
+ | `nmi.sample` | bool | false |
102
+ | `nmi.pending` | bool | false |
103
+ | `nmi.boundary` | bool | false |
104
+ | `skip_poll` | bool | false |
105
+ | `cycles` | int | 0 |
106
+ | `instructions` | int | 0 |
107
+ | `stalled` | int, optional | absent |
108
+ | `pos.seq` | text: boundary op interrupt jam | "boundary" |
109
+
110
+ ## BL-VIC
111
+
112
+ Written by the C64, C128.
113
+
114
+ | Key | Type | Default |
115
+ | --- | --- | --- |
116
+ | `column` | int | 0 |
117
+ | `raster` | int | 0 |
118
+ | `fetch_d011` | byte | 0 |
119
+ | `g.kind` | ints | [0, 0, 0, 0] |
120
+ | `g.data` | ints | [0, 0, 0, 0] |
121
+ | `g.char` | ints | [0, 0, 0, 0] |
122
+ | `g.color` | ints | [1, 1, 1, 1] |
123
+ | `g.kept_char` | byte | 0 |
124
+ | `g.kept_color` | int & 0xf | 0 |
125
+ | `g.display` | bool | false |
126
+ | `lp_triggered` | bool | false |
127
+ | `lp_low` | bool | false |
128
+ | `raster_match` | bool | false |
129
+ | `bank_lines` | int | 3 |
130
+ | `character_buffer` | bytes | 40 × 0 |
131
+ | `color_buffer` | bytes | 40 × 0 |
132
+ | `registers` | bytes | 64 × 0 |
133
+ | `vc_base` | int & 0x3ff | 0 |
134
+ | `vc` | int & 0x3ff | 0 |
135
+ | `vmli` | int | 0 |
136
+ | `rc` | int & 0x7 | 0 |
137
+ | `display_state` | bool | false |
138
+ | `bad_lines_enabled` | bool | false |
139
+ | `matched` | bool | false |
140
+ | `ba` | int, optional | absent |
141
+ | `line_bits` | int | 0 |
142
+ | `den_line` | bool | false |
143
+ | `in_window` | bool | false |
144
+ | `line.layout` | int | 0 |
145
+ | `first_csel` | bool | false |
146
+ | `left_vertical_border` | int, optional | absent |
147
+ | `cur_colors` | ints | [0, 0, 0, 0, 0, 0, 0, 0] |
148
+ | `cur_fg` | text | "hires:0" |
149
+ | `prev_colors` | ints | [0, 0, 0, 0, 0, 0, 0, 0] |
150
+ | `prev_fg` | text | "hires:0" |
151
+ | `vertical_border` | bool | true |
152
+ | `vertical_armed` | bool | true |
153
+ | `main_border` | bool | true |
154
+ | `xscroll` | int & 0x7 | 0 |
155
+ | `last_shift` | int | 0 |
156
+ | `last_mode` | int | 0 |
157
+ | `settling` | bool | false |
158
+ | `prev_fresh` | bool | false |
159
+ | `check` | bool | true |
160
+ | `shifter.next_ecm_bmm` | int | 0 |
161
+ | `shifter.black_below` | int | 0 |
162
+ | `shifter.colors` | ints | [0, 0, 0, 0, 0, 0, 0, 0] |
163
+ | `shifter.fg` | ints | [0, 0, 0, 0, 0, 0, 0, 0] |
164
+ | `shifter.gbuf` | int | 0 |
165
+ | `shifter.vbuf` | int | 0 |
166
+ | `shifter.cbuf` | int | 0 |
167
+ | `shifter.flop` | int | 0 |
168
+ | `shifter.pixel` | int | 0 |
169
+ | `shifter.mode_lookup` | int | 0 |
170
+ | `shifter.mode_read` | int | 0 |
171
+ | `shifter.late_mcm` | bool | false |
172
+ | `shifter.late_read` | bool | false |
173
+ | `line.number` | int | 0 |
174
+ | `line.colors` | bytes | 504 × 0 |
175
+ | `line.fg` | ints | 504 × 0 |
176
+ | `line.border.groups` | ints | 63 × 0 |
177
+ | `line.border.mask` | ints | 504 × 1 |
178
+ | `line.border.snapshot` | bytes | 504 × 0 |
179
+ | `line.patches` | ints | [] |
180
+ | `sprite<N>.dma` | bool | false |
181
+ | `sprite<N>.display_on` | bool | false |
182
+ | `sprite<N>.mcbase` | int & 0x3f | 0 |
183
+ | `sprite<N>.mc` | int & 0x3f | 0 |
184
+ | `sprite<N>.exp_ff` | bool | true |
185
+ | `sprite<N>.crunched_mc` | int, optional | absent |
186
+ | `sprite<N>.bits` | int | 0 |
187
+ | `sprite<N>.row_ready` | bool | false |
188
+ | `sprite<N>.prev_bits` | int, optional | absent |
189
+ | `sprite<N>.first_byte_lost` | bool | false |
190
+ | `sprite<N>.blind` | bool | false |
191
+ | `sprite<N>.sr` | int | 0 |
192
+ | `sprite<N>.latch` | int | 0 |
193
+ | `sprite<N>.mc_flop` | bool | false |
194
+ | `sprite<N>.xe_flop` | bool | false |
195
+ | `line.sprite<N>.show_from` | int | 0 |
196
+ | `line.sprite<N>.stop_x` | int, optional | absent |
197
+ | `line.sprite<N>.codes` | ints | 71 × 0 |
198
+ | `line.sprite<N>.leftmost` | int | 0 |
199
+ | `line.sprite<N>.span` | int | 0 |
200
+ | `line.sprite<N>.reload_codes` | ints | 71 × 0 |
201
+ | `line.sprite<N>.reload_leftmost` | int | 0 |
202
+ | `line.sprite<N>.reload_span` | int | 0 |
203
+ | `sbus.lines` | int | 0 |
204
+ | `sbus.ghost` | byte | 255 |
205
+ | `sbus.value` | ints | 63 × 255 |
206
+ | `sbus.line` | ints | 63 × -1 |
207
+ | `collisions.cleared_sprite` | int | 0 |
208
+ | `collisions.cleared_data` | int | 0 |
209
+ | `line.collisions.hits` | bytes | 504 × 0 |
210
+ | `line.collisions.folded` | int | 0 |
211
+ | `line.carried` | bool | false |
212
+ | `line.lo` | int | 504 |
213
+ | `line.hi` | int | 0 |
214
+ | `line.sequenced` | int | -1 |
215
+ | `line.win_color` | bytes | 504 × 0 |
216
+ | `line.win_priority` | ints | 504 × 0 |
217
+ | `line.palette` | ints | [0, 0, 0, 0] |
218
+ | `line.stopped_dma` | bool | false |
219
+ | `line.carry<N>` | ints | [] |
220
+ | `line.carry_next<N>` | ints | [] |
221
+ | `line.log.entries` | ints | [] |
222
+ | `line.log.seed` | ints | [] |
223
+ | `line.log.values` | ints | 64 × 0 |
224
+ | `line.log.cursor` | int | 0 |
225
+ | `line.log.next_x` | int | 0 |
226
+ | `display` | bytes | 157248 × 0 |
227
+ | `output_line` | int | C128: 0 |
228
+ | `test_wrap` | bool | C128: false |
229
+
230
+ ## BL-CIA1
231
+
232
+ Written by the C64, C128.
233
+
234
+ | Key | Type | Default |
235
+ | --- | --- | --- |
236
+ | `pra` | byte | 0 |
237
+ | `prb` | byte | 0 |
238
+ | `ddra` | byte | 0 |
239
+ | `ddrb` | byte | 0 |
240
+ | `cra` | byte | 0 |
241
+ | `crb` | byte | 0 |
242
+ | `pb4_high` | bool | true |
243
+ | `pb4_driven_high` | bool | true |
244
+ | `cnt_high` | bool | true |
245
+ | `cnt_rise` | bool | false |
246
+ | `ta.counter` | word | 65535 |
247
+ | `ta.latch` | word | 65535 |
248
+ | `ta.pipe` | int & 0x3 | 0 |
249
+ | `ta.load_delay` | int | 0 |
250
+ | `ta.reload` | bool | false |
251
+ | `ta.underflowed` | bool | false |
252
+ | `ta.oneshot_linger` | int | 0 |
253
+ | `ta.toggle` | bool | true |
254
+ | `tb.counter` | word | 65535 |
255
+ | `tb.latch` | word | 65535 |
256
+ | `tb.pipe` | int & 0x3 | 0 |
257
+ | `tb.load_delay` | int | 0 |
258
+ | `tb.reload` | bool | false |
259
+ | `tb.underflowed` | bool | false |
260
+ | `tb.oneshot_linger` | int | 0 |
261
+ | `tb.toggle` | bool | true |
262
+ | `icr.mask` | byte | 0 |
263
+ | `icr.status` | byte | 0 |
264
+ | `icr.pending` | int | 0 |
265
+ | `icr.read` | int, optional | absent |
266
+ | `icr.read_last_cycle` | int, optional | absent |
267
+ | `icr.read_two_cycles_ago` | int, optional | absent |
268
+ | `icr.timer_b_bug` | bool | false |
269
+ | `sdr.data` | byte | 0 |
270
+ | `sdr.shift` | byte | 0 |
271
+ | `sdr.steps` | int | 0 |
272
+ | `sdr.empty_in` | int, optional | absent |
273
+ | `sdr.busy_in` | int, optional | absent |
274
+ | `sdr.busy` | bool | false |
275
+ | `sdr.abandoned` | bool | false |
276
+ | `sdr.pending` | int, optional | absent |
277
+ | `sdr.underflow_high` | bool | false |
278
+ | `sdr.in_flight` | bool | false |
279
+ | `sdr.flight_up` | int | 0 |
280
+ | `sdr.flight_down` | int | 0 |
281
+ | `sdr.cnt` | bool | true |
282
+ | `sdr.cnt_in` | bool | true |
283
+ | `sdr.sp_in` | bool | true |
284
+ | `sdr.sp_out` | bool | true |
285
+ | `sdr.idle` | bool | true |
286
+ | `tod.mains_phase` | int | 0 |
287
+ | `tod.pulses` | int | 0 |
288
+ | `tod.stopped` | bool | true |
289
+ | `tod.alarm_pending` | bool | false |
290
+ | `tod.clock.tenths` | byte | 0 |
291
+ | `tod.alarm.tenths` | byte | 0 |
292
+ | `tod.clock.seconds` | byte | 0 |
293
+ | `tod.alarm.seconds` | byte | 0 |
294
+ | `tod.clock.minutes` | byte | 0 |
295
+ | `tod.alarm.minutes` | byte | 0 |
296
+ | `tod.clock.hours` | byte | 1 |
297
+ | `tod.alarm.hours` | byte | 0 |
298
+ | `tod.latch.hours` | int, optional | absent |
299
+
300
+ ## BL-CIA2
301
+
302
+ Written by the C64, C128.
303
+
304
+ | Key | Type | Default |
305
+ | --- | --- | --- |
306
+ | `pra` | byte | 0 |
307
+ | `prb` | byte | 0 |
308
+ | `ddra` | byte | 0 |
309
+ | `ddrb` | byte | 0 |
310
+ | `cra` | byte | 0 |
311
+ | `crb` | byte | 0 |
312
+ | `pb4_high` | bool | true |
313
+ | `pb4_driven_high` | bool | true |
314
+ | `cnt_high` | bool | true |
315
+ | `cnt_rise` | bool | false |
316
+ | `ta.counter` | word | 65535 |
317
+ | `ta.latch` | word | 65535 |
318
+ | `ta.pipe` | int & 0x3 | 0 |
319
+ | `ta.load_delay` | int | 0 |
320
+ | `ta.reload` | bool | false |
321
+ | `ta.underflowed` | bool | false |
322
+ | `ta.oneshot_linger` | int | 0 |
323
+ | `ta.toggle` | bool | true |
324
+ | `tb.counter` | word | 65535 |
325
+ | `tb.latch` | word | 65535 |
326
+ | `tb.pipe` | int & 0x3 | 0 |
327
+ | `tb.load_delay` | int | 0 |
328
+ | `tb.reload` | bool | false |
329
+ | `tb.underflowed` | bool | false |
330
+ | `tb.oneshot_linger` | int | 0 |
331
+ | `tb.toggle` | bool | true |
332
+ | `icr.mask` | byte | 0 |
333
+ | `icr.status` | byte | 0 |
334
+ | `icr.pending` | int | 0 |
335
+ | `icr.read` | int, optional | absent |
336
+ | `icr.read_last_cycle` | int, optional | absent |
337
+ | `icr.read_two_cycles_ago` | int, optional | absent |
338
+ | `icr.timer_b_bug` | bool | false |
339
+ | `sdr.data` | byte | 0 |
340
+ | `sdr.shift` | byte | 0 |
341
+ | `sdr.steps` | int | 0 |
342
+ | `sdr.empty_in` | int, optional | absent |
343
+ | `sdr.busy_in` | int, optional | absent |
344
+ | `sdr.busy` | bool | false |
345
+ | `sdr.abandoned` | bool | false |
346
+ | `sdr.pending` | int, optional | absent |
347
+ | `sdr.underflow_high` | bool | false |
348
+ | `sdr.in_flight` | bool | false |
349
+ | `sdr.flight_up` | int | 0 |
350
+ | `sdr.flight_down` | int | 0 |
351
+ | `sdr.cnt` | bool | true |
352
+ | `sdr.cnt_in` | bool | true |
353
+ | `sdr.sp_in` | bool | true |
354
+ | `sdr.sp_out` | bool | true |
355
+ | `sdr.idle` | bool | true |
356
+ | `tod.mains_phase` | int | 0 |
357
+ | `tod.pulses` | int | 0 |
358
+ | `tod.stopped` | bool | true |
359
+ | `tod.alarm_pending` | bool | false |
360
+ | `tod.clock.tenths` | byte | 0 |
361
+ | `tod.alarm.tenths` | byte | 0 |
362
+ | `tod.clock.seconds` | byte | 0 |
363
+ | `tod.alarm.seconds` | byte | 0 |
364
+ | `tod.clock.minutes` | byte | 0 |
365
+ | `tod.alarm.minutes` | byte | 0 |
366
+ | `tod.clock.hours` | byte | 1 |
367
+ | `tod.alarm.hours` | byte | 0 |
368
+ | `tod.latch.hours` | int, optional | absent |
369
+
370
+ ## BL-SID
371
+
372
+ Written by the C64, C128.
373
+
374
+ | Key | Type | Default |
375
+ | --- | --- | --- |
376
+ | `registers` | bytes | 32 × 0 |
377
+ | `bus_value` | byte | 0 |
378
+ | `bus_ttl` | int | 0 |
379
+ | `voice<N>.wave.accumulator` | int & 0xffffff | 5592405 |
380
+ | `voice<N>.wave.shift_register` | int & 0x7fffff | 8388606 |
381
+ | `voice<N>.wave.shift_register_reset` | int | 0 |
382
+ | `voice<N>.wave.shift_pipeline` | int | 0 |
383
+ | `voice<N>.wave.delayed_triangle` | int & 0xfff | 0 |
384
+ | `voice<N>.wave.delayed_sawtooth` | int & 0xfff | 0 |
385
+ | `voice<N>.wave.msb_rising` | bool | false |
386
+ | `voice<N>.wave.floating` | int & 0xfff | 0 |
387
+ | `voice<N>.wave.floating_ttl` | int | 0 |
388
+ | `voice<N>.wave.pulse` | int & 0xfff | 4095 |
389
+ | `voice<N>.env.state` | text: attack decay_sustain release | "release" |
390
+ | `voice<N>.env.next_state` | text: attack decay_sustain release | "release" |
391
+ | `voice<N>.env.counter` | byte | 0 |
392
+ | `voice<N>.env.env<N>` | byte | 0 |
393
+ | `voice<N>.env.rate_counter` | int & 0x7fff | 0 |
394
+ | `voice<N>.env.rate_period` | int | 8 |
395
+ | `voice<N>.env.reset_rate_counter` | bool | false |
396
+ | `voice<N>.env.exponential_counter` | int | 0 |
397
+ | `voice<N>.env.exponential_period` | int | 1 |
398
+ | `voice<N>.env.state_pipeline` | int | 0 |
399
+ | `voice<N>.env.envelope_pipeline` | int | 0 |
400
+ | `voice<N>.env.exponential_pipeline` | int | 0 |
401
+ | `voice<N>.env.hold_zero` | bool | true |
402
+ | `filter.highpass` | int | 0 |
403
+ | `filter.bandpass` | int | 0 |
404
+ | `filter.lowpass` | int | 0 |
405
+ | `filter.unfiltered` | int | 0 |
406
+ | `filter.input` | int | 0 |
407
+ | `ext.lowpass` | int | 0 |
408
+ | `ext.highpass` | int | 0 |
409
+ | `ext.output` | int | 0 |
410
+
411
+ ## BL-TAPE
412
+
413
+ Written by the C64, VIC-20, C128.
414
+
415
+ | Key | Type | Default |
416
+ | --- | --- | --- |
417
+ | `playing` | bool | false |
418
+ | `motor` | bool | false |
419
+ | `countdown` | int | 0 |
420
+ | `tape.bytes` | bytes | [] |
421
+ | `tape.path` | text | C64: "" |
422
+ | `tape.position` | int | C64: 0 |
423
+
424
+ ## BL-RAMEXP
425
+
426
+ Written by the C64.
427
+
428
+ | Key | Type | Default |
429
+ | --- | --- | --- |
430
+ | `d100` | byte | 0 |
431
+ | `locked` | bool | false |
432
+ | `bank<N>` | bytes | 65536 × 0 |
433
+
434
+ ## BL-REU
435
+
436
+ Written by the C64.
437
+
438
+ | Key | Type | Default |
439
+ | --- | --- | --- |
440
+ | `status` | byte | 16 |
441
+ | `command` | byte | 16 |
442
+ | `c64` | word | 0 |
443
+ | `c64_start` | word | 0 |
444
+ | `expansion` | word | 0 |
445
+ | `expansion_start` | word | 0 |
446
+ | `bank` | byte | 0 |
447
+ | `bank_start` | byte | 0 |
448
+ | `length` | word | 65535 |
449
+ | `length_start` | word | 65535 |
450
+ | `interrupt_mask` | byte | 31 |
451
+ | `address_control` | byte | 63 |
452
+ | `armed` | bool | false |
453
+ | `requested` | bool | false |
454
+ | `running` | bool | false |
455
+ | `ba_was_low` | bool | false |
456
+ | `dma.c64` | word | 0 |
457
+ | `dma.expansion` | int | 0 |
458
+ | `dma.length` | int | 0 |
459
+ | `dma.events` | int | 0 |
460
+ | `dma.type` | text: stash fetch swap verify none | "none" |
461
+ | `dma.c64_step` | int, optional | absent |
462
+ | `dma.expansion_step` | int, optional | absent |
463
+ | `dma.last` | int, optional | absent |
464
+ | `dma.ba_low_after_writes` | int, optional | absent |
465
+ | `dma.swap_byte` | int, optional | absent |
466
+ | `dma.held_read` | int, optional | absent |
467
+ | `dma.holding` | bool | false |
468
+ | `dma.waiting` | bool | absent |
469
+ | `dma.stopped_after_write` | bool | absent |
470
+ | `dma.swap_write_due` | bool | absent |
471
+ | `dma.swap_read_again` | bool | absent |
472
+ | `dma.moved_all` | bool | absent |
473
+ | `dma.extra_cycle` | bool | absent |
474
+ | `latch` | byte | 255 |
475
+ | `bank<N>` | bytes | [] |
476
+
477
+ ## BL-CART
478
+
479
+ Written by the C64, VIC-20.
480
+
481
+ | Key | Type | Default |
482
+ | --- | --- | --- |
483
+ | `geo_ram_kb` | int | C64: 0 |
484
+ | `crt` | bytes | C64: [] |
485
+ | `exrom` | int & 0x1 | C64: 1 |
486
+ | `game` | int & 0x1 | C64: 0 |
487
+ | `nmi` | bool | C64: false |
488
+ | `button` | bool | C64: false |
489
+ | `bank` | int | C64: 0 |
490
+ | `control` | byte | C64: 0 |
491
+ | `io_ram` | bytes | C64: 256 × 255 |
492
+ | `flash_low.data` | bytes | C64: 524288 values |
493
+ | `flash_low.state` | text: read program_setup autoselect programming erase_window erasing suspended chip_erase program_error | C64: "read" |
494
+ | `flash_low.base_state` | text: read program_setup autoselect programming erase_window erasing suspended chip_erase program_error | C64: "read" |
495
+ | `flash_low.cycle` | int | C64: 0 |
496
+ | `flash_low.toggle` | int | C64: 0 |
497
+ | `flash_low.done_in` | int, optional | C64: absent |
498
+ | `flash_low.programmed` | int, optional | C64: absent |
499
+ | `flash_low.remaining` | int, optional | C64: absent |
500
+ | `flash_low.erasing_sectors` | ints | C64: [] |
501
+ | `flash_low.windows` | ints | C64: [] |
502
+ | `flash_low.status_windows` | ints | C64: [] |
503
+ | `flash_high.data` | bytes | C64: 524288 values |
504
+ | `flash_high.state` | text: read program_setup autoselect programming erase_window erasing suspended chip_erase program_error | C64: "read" |
505
+ | `flash_high.base_state` | text: read program_setup autoselect programming erase_window erasing suspended chip_erase program_error | C64: "read" |
506
+ | `flash_high.cycle` | int | C64: 0 |
507
+ | `flash_high.toggle` | int | C64: 0 |
508
+ | `flash_high.done_in` | int, optional | C64: absent |
509
+ | `flash_high.programmed` | int, optional | C64: absent |
510
+ | `flash_high.remaining` | int, optional | C64: absent |
511
+ | `flash_high.erasing_sectors` | ints | C64: [] |
512
+ | `flash_high.windows` | ints | C64: [] |
513
+ | `flash_high.status_windows` | ints | C64: [] |
514
+ | `roms` | int | VIC-20: 0 |
515
+ | `rom0.bytes` | bytes | VIC-20: [] |
516
+ | `rom0.start` | word | VIC-20: 0 |
517
+
518
+ ## BL-TRAPDOS
519
+
520
+ Written by the C64.
521
+
522
+ | Key | Type | Default |
523
+ | --- | --- | --- |
524
+ | `storage.kind` | text: directory d64 d71 d81 t64 | "directory" |
525
+ | `storage.path` | text | "" |
526
+ | `storage.bytes` | bytes | [] |
527
+ | `storage.read_only` | bool | false |
528
+ | `ram` | bytes | 2048 × 0 |
529
+ | `bam` | bool | true |
530
+ | `status.kind` | text: channel | "channel" |
531
+ | `status.writable` | bool | false |
532
+ | `status.base` | int | 0 |
533
+ | `status.length` | int | 0 |
534
+ | `status.pointer` | int | 0 |
535
+ | `status.lead` | int, optional | absent |
536
+ | `status.buffer` | int, optional | absent |
537
+ | `status.error` | ints | [] |
538
+ | `status.bytes` | bytes | [] |
539
+ | `channels` | ints | [] |
540
+ | `serial.listening` | bool | false |
541
+ | `serial.talking` | bool | false |
542
+ | `serial.listen_channel` | int, optional | absent |
543
+ | `serial.talk_channel` | int, optional | absent |
544
+ | `serial.frame` | int | 240 |
545
+ | `serial.buffer` | bytes | [] |
546
+ | `save.saving` | bool | false |
547
+
548
+ ## BL-D8
549
+
550
+ Written by the C64, C128.
551
+
552
+ | Key | Type | Default |
553
+ | --- | --- | --- |
554
+ | `model` | text: 1541 1571 1581 | C64: "1541" or "1581"; C128: "1541" or "1571" |
555
+ | `phase` | int | 0 |
556
+ | `cycles` | int | 0 |
557
+ | `so_pending` | bool | false |
558
+ | `serial.host` | int | 255 |
559
+ | `atn` | bool | C64: true |
560
+
561
+ ## BL-D8-RAM
562
+
563
+ Written by the C64, C128.
564
+
565
+ | Key | Type | Default |
566
+ | --- | --- | --- |
567
+ | `data` | byte | C64: 234 or 175; C128: 234 |
568
+ | `ram` | bytes | C64: 2048 × 0 or 8192 × 0; C128: 2048 × 0 |
569
+
570
+ ## BL-D8-VIA1
571
+
572
+ Written by the C64, C128.
573
+
574
+ | Key | Type | Default |
575
+ | --- | --- | --- |
576
+ | `ora` | byte | 0 |
577
+ | `orb` | byte | 0 |
578
+ | `ddra` | byte | 0 |
579
+ | `ddrb` | byte | 0 |
580
+ | `latch_a` | byte | 255 |
581
+ | `latch_b` | byte | 255 |
582
+ | `acr` | byte | 0 |
583
+ | `pcr` | byte | 0 |
584
+ | `pb6_high` | bool | true |
585
+ | `t<N>.counter` | word | 65535 |
586
+ | `t1.latch` | word | 65535 |
587
+ | `t<N>.hold` | bool | false |
588
+ | `t1.reload` | bool | false |
589
+ | `t<N>.armed` | bool | false |
590
+ | `t1.pb7` | bool | true |
591
+ | `t2.latch_low` | byte | 255 |
592
+ | `t2.low_reload` | bool | false |
593
+ | `t2.low_underflowed` | bool | false |
594
+ | `t2.count_pulses` | bool | false |
595
+ | `t2.counting_pulses` | bool | false |
596
+ | `sr.mode` | int & 0x7 | 0 |
597
+ | `sr.data` | byte | 0 |
598
+ | `sr.bits` | int | 0 |
599
+ | `sr.delay` | int | 0 |
600
+ | `sr.clock` | bool | true |
601
+ | `sr.cb2` | bool | true |
602
+ | `sr.cb2_input` | bool | true |
603
+ | `ifr.flags` | int & 0x7f | 0 |
604
+ | `ifr.enable` | int & 0x7f | 0 |
605
+ | `ca.control` | int & 0xf | 0 |
606
+ | `ca.c1_high` | bool | true |
607
+ | `ca.c2_high` | bool | true |
608
+ | `ca.handshake_low` | bool | false |
609
+ | `ca.pulse` | int | 0 |
610
+ | `ca.c2_output` | bool | true |
611
+ | `cb.control` | int & 0xf | 0 |
612
+ | `cb.c1_high` | bool | true |
613
+ | `cb.c2_high` | bool | true |
614
+ | `cb.handshake_low` | bool | false |
615
+ | `cb.pulse` | int | 0 |
616
+ | `cb.c2_output` | bool | true |
617
+
618
+ ## BL-D8-VIA2
619
+
620
+ Written by the C64, C128.
621
+
622
+ | Key | Type | Default |
623
+ | --- | --- | --- |
624
+ | `ora` | byte | 0 |
625
+ | `orb` | byte | 0 |
626
+ | `ddra` | byte | 0 |
627
+ | `ddrb` | byte | 0 |
628
+ | `latch_a` | byte | 255 |
629
+ | `latch_b` | byte | 255 |
630
+ | `acr` | byte | 0 |
631
+ | `pcr` | byte | 0 |
632
+ | `pb6_high` | bool | true |
633
+ | `t<N>.counter` | word | 65535 |
634
+ | `t1.latch` | word | 65535 |
635
+ | `t<N>.hold` | bool | false |
636
+ | `t1.reload` | bool | false |
637
+ | `t<N>.armed` | bool | false |
638
+ | `t1.pb7` | bool | true |
639
+ | `t2.latch_low` | byte | 255 |
640
+ | `t2.low_reload` | bool | false |
641
+ | `t2.low_underflowed` | bool | false |
642
+ | `t2.count_pulses` | bool | false |
643
+ | `t2.counting_pulses` | bool | false |
644
+ | `sr.mode` | int & 0x7 | 0 |
645
+ | `sr.data` | byte | 0 |
646
+ | `sr.bits` | int | 0 |
647
+ | `sr.delay` | int | 0 |
648
+ | `sr.clock` | bool | true |
649
+ | `sr.cb2` | bool | true |
650
+ | `sr.cb2_input` | bool | true |
651
+ | `ifr.flags` | int & 0x7f | 0 |
652
+ | `ifr.enable` | int & 0x7f | 0 |
653
+ | `ca.control` | int & 0xf | 0 |
654
+ | `ca.c1_high` | bool | true |
655
+ | `ca.c2_high` | bool | true |
656
+ | `ca.handshake_low` | bool | false |
657
+ | `ca.pulse` | int | 0 |
658
+ | `ca.c2_output` | bool | true |
659
+ | `cb.control` | int & 0xf | 0 |
660
+ | `cb.c1_high` | bool | true |
661
+ | `cb.c2_high` | bool | true |
662
+ | `cb.handshake_low` | bool | false |
663
+ | `cb.pulse` | int | 0 |
664
+ | `cb.c2_output` | bool | true |
665
+
666
+ ## BL-D8-CPU
667
+
668
+ Written by the C64, C128.
669
+
670
+ | Key | Type | Default |
671
+ | --- | --- | --- |
672
+ | `pc` | word | C64: 60064 or 44836; C128: 60064 |
673
+ | `sp` | byte | 255 |
674
+ | `a` | byte | 0 |
675
+ | `x` | byte | 0 |
676
+ | `y` | byte | 0 |
677
+ | `p` | byte | 32 |
678
+ | `nmi` | bool | false |
679
+ | `so_high` | bool | true |
680
+ | `irq.sample` | bool | false |
681
+ | `irq.pending` | bool | false |
682
+ | `irq.boundary` | bool | false |
683
+ | `nmi.sample` | bool | false |
684
+ | `nmi.pending` | bool | false |
685
+ | `nmi.boundary` | bool | false |
686
+ | `skip_poll` | bool | false |
687
+ | `cycles` | int | 0 |
688
+ | `instructions` | int | 0 |
689
+ | `stalled` | int, optional | absent |
690
+ | `pos.seq` | text: boundary op interrupt jam | "boundary" |
691
+
692
+ ## BL-D8-DISK
693
+
694
+ Written by the C64, C128.
695
+
696
+ | Key | Type | Default |
697
+ | --- | --- | --- |
698
+ | `path` | text | "" |
699
+ | `read_only` | bool | false |
700
+ | `image.kind` | text: none d64 d71 g64 | "none" |
701
+ | `image.path` | text | "" |
702
+ | `image` | bytes | [] |
703
+ | `track<N>.zone` | int, optional | absent |
704
+ | `written` | ints | [] |
705
+ | `changed` | ints | C64: [] |
706
+
707
+ ## BL-D8-MECH
708
+
709
+ Written by the C64, C128.
710
+
711
+ | Key | Type | Default |
712
+ | --- | --- | --- |
713
+ | `half_track` | int | C64: 35; C128: 37 |
714
+ | `slip` | int & 0x3 | C64: 0; C128: 2 |
715
+ | `side` | int | C64: 0 or 1; C128: 85 |
716
+ | `zone` | int & 0x3 | 3 |
717
+ | `time` | int | 0 |
718
+ | `read_clock_in` | int | 2097152 |
719
+ | `clocks` | int | 0 |
720
+ | `shift` | int | 0 |
721
+ | `ones` | int | 0 |
722
+ | `bits` | int | 0 |
723
+ | `write_shift` | int | 0 |
724
+ | `motor` | bool | C64: true or false; C128: true |
725
+ | `led` | bool | true |
726
+ | `sync` | bool | false |
727
+ | `byte_ready` | bool | false |
728
+ | `byte_latched` | bool | false |
729
+ | `writing` | bool | false |
730
+ | `write_gate` | bool | false |
731
+ | `track_written` | bool | false |
732
+ | `write_index` | int, optional | absent |
733
+ | `cylinder` | int | C64: 0 |
734
+ | `angle` | int | C64: 0 |
735
+ | `changed` | bool | C64: true |
736
+
737
+ ## BL-D8-CIA
738
+
739
+ Written by the C64, C128.
740
+
741
+ | Key | Type | Default |
742
+ | --- | --- | --- |
743
+ | `pra` | byte | 0 |
744
+ | `prb` | byte | 0 |
745
+ | `ddra` | byte | 0 |
746
+ | `ddrb` | byte | 0 |
747
+ | `cra` | byte | 0 |
748
+ | `crb` | byte | 0 |
749
+ | `pb4_high` | bool | true |
750
+ | `pb4_driven_high` | bool | true |
751
+ | `cnt_high` | bool | true |
752
+ | `cnt_rise` | bool | false |
753
+ | `ta.counter` | word | 65535 |
754
+ | `ta.latch` | word | 65535 |
755
+ | `ta.pipe` | int & 0x3 | 0 |
756
+ | `ta.load_delay` | int | 0 |
757
+ | `ta.reload` | bool | false |
758
+ | `ta.underflowed` | bool | false |
759
+ | `ta.oneshot_linger` | int | 0 |
760
+ | `ta.toggle` | bool | true |
761
+ | `tb.counter` | word | 65535 |
762
+ | `tb.latch` | word | 65535 |
763
+ | `tb.pipe` | int & 0x3 | 0 |
764
+ | `tb.load_delay` | int | 0 |
765
+ | `tb.reload` | bool | false |
766
+ | `tb.underflowed` | bool | false |
767
+ | `tb.oneshot_linger` | int | 0 |
768
+ | `tb.toggle` | bool | true |
769
+ | `icr.mask` | byte | 0 |
770
+ | `icr.status` | byte | 0 |
771
+ | `icr.pending` | int | 0 |
772
+ | `icr.read` | int, optional | absent |
773
+ | `icr.read_last_cycle` | int, optional | absent |
774
+ | `icr.read_two_cycles_ago` | int, optional | absent |
775
+ | `icr.timer_b_bug` | bool | false |
776
+ | `sdr.data` | byte | 0 |
777
+ | `sdr.shift` | byte | 0 |
778
+ | `sdr.steps` | int | 0 |
779
+ | `sdr.empty_in` | int, optional | absent |
780
+ | `sdr.busy_in` | int, optional | absent |
781
+ | `sdr.busy` | bool | false |
782
+ | `sdr.abandoned` | bool | false |
783
+ | `sdr.pending` | int, optional | absent |
784
+ | `sdr.underflow_high` | bool | false |
785
+ | `sdr.in_flight` | bool | false |
786
+ | `sdr.flight_up` | int | 0 |
787
+ | `sdr.flight_down` | int | 0 |
788
+ | `sdr.cnt` | bool | true |
789
+ | `sdr.cnt_in` | bool | true |
790
+ | `sdr.sp_in` | bool | true |
791
+ | `sdr.sp_out` | bool | true |
792
+ | `sdr.idle` | bool | true |
793
+ | `tod.mains_phase` | int | 0 |
794
+ | `tod.pulses` | int | 0 |
795
+ | `tod.stopped` | bool | true |
796
+ | `tod.alarm_pending` | bool | false |
797
+ | `tod.clock.tenths` | byte | 0 |
798
+ | `tod.alarm.tenths` | byte | 0 |
799
+ | `tod.clock.seconds` | byte | 0 |
800
+ | `tod.alarm.seconds` | byte | 0 |
801
+ | `tod.clock.minutes` | byte | 0 |
802
+ | `tod.alarm.minutes` | byte | 0 |
803
+ | `tod.clock.hours` | byte | 1 |
804
+ | `tod.alarm.hours` | byte | 0 |
805
+ | `tod.latch.hours` | int, optional | absent |
806
+
807
+ ## BL-D8-FDC
808
+
809
+ Written by the C64, C128.
810
+
811
+ | Key | Type | Default |
812
+ | --- | --- | --- |
813
+ | `now` | int | C64: 0 |
814
+ | `phase` | text: idle spin_up stepped settled search read_data write_gate write_data read_track track_index write_track motor_idle index_interrupt settle_search read_address write_track_start starting | C64: "idle" |
815
+ | `mode` | text: read write address verify_track | C64: "read" |
816
+ | `due_in` | int, optional | C64: absent; C128: 0 |
817
+ | `deadline_in` | int, optional | C64: absent |
818
+ | `id_in` | int, optional | C64: absent |
819
+ | `command` | byte | C64: 3 |
820
+ | `track` | byte | C64: 0 |
821
+ | `sector` | byte | C64: 1 |
822
+ | `data` | byte | C64: 0 |
823
+ | `status` | byte | 0 |
824
+ | `steps` | int | C64: 0 |
825
+ | `count` | int | C64: 0 |
826
+ | `after_spin_up` | int | C64: 0 |
827
+ | `found` | int | C64: -1 |
828
+ | `index` | int | C64: 0 |
829
+ | `crc` | int | C64: 65535 |
830
+ | `write_id` | int | C64: 0 |
831
+ | `size` | int | C64: 0 |
832
+ | `type1` | bool | C64: true |
833
+ | `drq` | bool | C64: false |
834
+ | `intrq` | bool | C64: false |
835
+ | `motor_on` | bool | C64: false |
836
+ | `inward` | bool | C64: true |
837
+ | `crc_good` | bool | C64: true |
838
+ | `gate_open` | bool | C64: false |
839
+ | `late` | bool | C64: false |
840
+ | `settling` | bool | C64: false |
841
+ | `bytes` | bytes | C64: [] |
842
+ | `syncs` | ints | C64: [] |
843
+ | `registers` | ints | C128: [0, 0, 0, 0] |
844
+ | `result` | int | C128: 0 |
845
+
846
+ ## BL-VICI
847
+
848
+ Written by the VIC-20.
849
+
850
+ | Key | Type | Default |
851
+ | --- | --- | --- |
852
+ | `registers` | bytes | 16 × 0 |
853
+ | `raster` | int | 0 |
854
+ | `column` | int | 0 |
855
+ | `window_open` | bool | false |
856
+ | `window_done` | bool | false |
857
+ | `row_start` | int | 0 |
858
+ | `matrix` | int | 0 |
859
+ | `char_line` | int | 0 |
860
+ | `text_rows` | int | 0 |
861
+ | `fetch_from` | int | 0 |
862
+ | `fetched` | int | 0 |
863
+ | `code` | byte | 0 |
864
+ | `line.layout` | int | 0 |
865
+ | `display` | bytes | 88608 × 0 |
866
+ | `line.row` | int | 311 |
867
+ | `line.painted` | int | 0 |
868
+ | `line.written` | bool | false |
869
+ | `line.patterns` | bytes | 12480 × 0 |
870
+ | `line.colors` | bytes | 12480 × 0 |
871
+ | `line.counts` | ints | 312 × 0 |
872
+ | `line.starts` | ints | 312 × 0 |
873
+ | `sound.shift_registers` | ints | [0, 0, 0, 255] |
874
+ | `sound.lfsr` | int & 0xffff | 65535 |
875
+ | `sound.level` | int | 0 |
876
+ | `sound.ran_ago` | int | 0 |
877
+ | `sound.next_shifts` | ints | [2048, 1024, 512, 256] |
878
+
879
+ ## BL-VIA1
880
+
881
+ Written by the VIC-20.
882
+
883
+ | Key | Type | Default |
884
+ | --- | --- | --- |
885
+ | `ora` | byte | 0 |
886
+ | `orb` | byte | 0 |
887
+ | `ddra` | byte | 0 |
888
+ | `ddrb` | byte | 0 |
889
+ | `latch_a` | byte | 255 |
890
+ | `latch_b` | byte | 255 |
891
+ | `acr` | byte | 0 |
892
+ | `pcr` | byte | 0 |
893
+ | `pb6_high` | bool | true |
894
+ | `t<N>.counter` | word | 65535 |
895
+ | `t1.latch` | word | 65535 |
896
+ | `t<N>.hold` | bool | false |
897
+ | `t1.reload` | bool | false |
898
+ | `t<N>.armed` | bool | false |
899
+ | `t1.pb7` | bool | true |
900
+ | `t2.latch_low` | byte | 255 |
901
+ | `t2.low_reload` | bool | false |
902
+ | `t2.low_underflowed` | bool | false |
903
+ | `t2.count_pulses` | bool | false |
904
+ | `t2.counting_pulses` | bool | false |
905
+ | `sr.mode` | int & 0x7 | 0 |
906
+ | `sr.data` | byte | 0 |
907
+ | `sr.bits` | int | 0 |
908
+ | `sr.delay` | int | 0 |
909
+ | `sr.clock` | bool | true |
910
+ | `sr.cb2` | bool | true |
911
+ | `sr.cb2_input` | bool | true |
912
+ | `ifr.flags` | int & 0x7f | 0 |
913
+ | `ifr.enable` | int & 0x7f | 0 |
914
+ | `ca.control` | int & 0xf | 0 |
915
+ | `ca.c1_high` | bool | true |
916
+ | `ca.c2_high` | bool | true |
917
+ | `ca.handshake_low` | bool | false |
918
+ | `ca.pulse` | int | 0 |
919
+ | `ca.c2_output` | bool | true |
920
+ | `cb.control` | int & 0xf | 0 |
921
+ | `cb.c1_high` | bool | true |
922
+ | `cb.c2_high` | bool | true |
923
+ | `cb.handshake_low` | bool | false |
924
+ | `cb.pulse` | int | 0 |
925
+ | `cb.c2_output` | bool | true |
926
+
927
+ ## BL-VIA2
928
+
929
+ Written by the VIC-20.
930
+
931
+ | Key | Type | Default |
932
+ | --- | --- | --- |
933
+ | `ora` | byte | 0 |
934
+ | `orb` | byte | 0 |
935
+ | `ddra` | byte | 0 |
936
+ | `ddrb` | byte | 0 |
937
+ | `latch_a` | byte | 255 |
938
+ | `latch_b` | byte | 255 |
939
+ | `acr` | byte | 0 |
940
+ | `pcr` | byte | 0 |
941
+ | `pb6_high` | bool | true |
942
+ | `t<N>.counter` | word | 65535 |
943
+ | `t1.latch` | word | 65535 |
944
+ | `t<N>.hold` | bool | false |
945
+ | `t1.reload` | bool | false |
946
+ | `t<N>.armed` | bool | false |
947
+ | `t1.pb7` | bool | true |
948
+ | `t2.latch_low` | byte | 255 |
949
+ | `t2.low_reload` | bool | false |
950
+ | `t2.low_underflowed` | bool | false |
951
+ | `t2.count_pulses` | bool | false |
952
+ | `t2.counting_pulses` | bool | false |
953
+ | `sr.mode` | int & 0x7 | 0 |
954
+ | `sr.data` | byte | 0 |
955
+ | `sr.bits` | int | 0 |
956
+ | `sr.delay` | int | 0 |
957
+ | `sr.clock` | bool | true |
958
+ | `sr.cb2` | bool | true |
959
+ | `sr.cb2_input` | bool | true |
960
+ | `ifr.flags` | int & 0x7f | 0 |
961
+ | `ifr.enable` | int & 0x7f | 0 |
962
+ | `ca.control` | int & 0xf | 0 |
963
+ | `ca.c1_high` | bool | true |
964
+ | `ca.c2_high` | bool | true |
965
+ | `ca.handshake_low` | bool | false |
966
+ | `ca.pulse` | int | 0 |
967
+ | `ca.c2_output` | bool | true |
968
+ | `cb.control` | int & 0xf | 0 |
969
+ | `cb.c1_high` | bool | true |
970
+ | `cb.c2_high` | bool | true |
971
+ | `cb.handshake_low` | bool | false |
972
+ | `cb.pulse` | int | 0 |
973
+ | `cb.c2_output` | bool | true |
974
+
975
+ ## BL-MMU
976
+
977
+ Written by the C128.
978
+
979
+ | Key | Type | Default |
980
+ | --- | --- | --- |
981
+ | `registers` | bytes | 12 values |
982
+ | `p0h_latch` | int & 0xf | 0 |
983
+ | `p1h_latch` | int & 0xf | 0 |
984
+
985
+ ## BL-VDC
986
+
987
+ Written by the C128.
988
+
989
+ | Key | Type | Default |
990
+ | --- | --- | --- |
991
+ | `registers` | bytes | 37 × 0 |
992
+ | `ram` | bytes | 16384 × 0 |
993
+ | `selected` | int & 0x3f | 0 |
994
+ | `read_latch` | byte | 0 |
995
+ | `write_data` | byte | 0 |
996
+ | `phase` | int | 0 |
997
+ | `line_units` | int | 126111744 |
998
+ | `busy_for` | int | 0 |
999
+ | `raster.frame` | int | 0 |
1000
+ | `raster.row` | int | 0 |
1001
+ | `raster.row_line` | int | 0 |
1002
+ | `raster.adjusting` | bool | false |
1003
+ | `raster.frame_line` | int | 0 |
1004
+ | `raster.frame_lines` | int | 1 |
1005
+ | `raster.sync_start` | int | 0 |
1006
+ | `raster.sync_lines` | int | 16 |
1007
+ | `display.width` | int | 128 |
1008
+ | `display.height` | int | 1 |
1009
+ | `window.display_start` | word | 0 |
1010
+ | `window.attribute_start` | word | 0 |
1011
+
1012
+ ## BL-Z80
1013
+
1014
+ Written by the C128.
1015
+
1016
+ | Key | Type | Default |
1017
+ | --- | --- | --- |
1018
+ | `a` | byte | 255 |
1019
+ | `f` | byte | 255 |
1020
+ | `b` | byte | 255 |
1021
+ | `c` | byte | 255 |
1022
+ | `d` | byte | 255 |
1023
+ | `e` | byte | 255 |
1024
+ | `h` | byte | 255 |
1025
+ | `l` | byte | 255 |
1026
+ | `af_alt` | word | 65535 |
1027
+ | `bc_alt` | word | 65535 |
1028
+ | `de_alt` | word | 65535 |
1029
+ | `hl_alt` | word | 65535 |
1030
+ | `i` | byte | 0 |
1031
+ | `r` | byte | 0 |
1032
+ | `pc` | word | 0 |
1033
+ | `sp` | word | 65535 |
1034
+ | `ix` | word | 65535 |
1035
+ | `iy` | word | 65535 |
1036
+ | `wz` | word | 0 |
1037
+ | `q` | byte | 0 |
1038
+ | `last_q` | byte | 0 |
1039
+ | `im` | int | 0 |
1040
+ | `cycles` | int | 0 |
1041
+ | `iff<N>` | bool | false |
1042
+ | `halted` | bool | false |
1043
+ | `after_ei` | bool | false |
1044
+ | `after_ld_a_ir` | bool | false |
1045
+ | `int` | bool | false |
1046
+ | `nmi` | bool | false |
1047
+ | `nmi_pending` | bool | false |