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