badline 0.12.1 → 0.13.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 (505) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/CLAUDE.md +59 -31
  4. data/README.md +1 -1
  5. data/doc/library.md +9 -9
  6. data/doc/pinned-behaviour.md +105 -105
  7. data/doc/snapshots.md +1 -4
  8. data/lib/badline/audio/bare_player.rb +3 -3
  9. data/lib/badline/audio/cli.rb +6 -6
  10. data/lib/badline/audio/jukebox.rb +2 -2
  11. data/lib/badline/audio/machine_player.rb +2 -2
  12. data/lib/badline/{media → audio}/queue.rb +1 -1
  13. data/lib/badline/audio/queued_tune.rb +6 -6
  14. data/lib/badline/audio/renderer.rb +5 -5
  15. data/lib/badline/audio/stereo.rb +1 -1
  16. data/lib/badline/c128/{bus_state.rb → bus/saved_state.rb} +1 -1
  17. data/lib/badline/c128/bus.rb +18 -17
  18. data/lib/badline/c128/color_lines.rb +2 -2
  19. data/lib/badline/c128/cpu.rb +1 -1
  20. data/lib/badline/c128/drives.rb +10 -11
  21. data/lib/badline/c128/fast_serial.rb +5 -5
  22. data/lib/badline/c128/mmu_pages.rb +1 -1
  23. data/lib/badline/c128/modes.rb +2 -2
  24. data/lib/badline/c128/saved_state.rb +21 -47
  25. data/lib/badline/c128/z80.rb +2 -2
  26. data/lib/badline/c128.rb +14 -9
  27. data/lib/badline/{computer → c64}/attachments.rb +4 -6
  28. data/lib/badline/c64/banked_ram/banking.rb +32 -0
  29. data/lib/badline/c64/banked_ram/plus256k.rb +56 -0
  30. data/lib/badline/c64/banked_ram/plus60k.rb +45 -0
  31. data/lib/badline/c64/banked_ram/unexpanded.rb +30 -0
  32. data/lib/badline/c64/banked_ram.rb +23 -0
  33. data/lib/badline/c64/bus/extra_sids.rb +32 -0
  34. data/lib/badline/c64/bus/fittings.rb +40 -0
  35. data/lib/badline/c64/bus/pla.rb +149 -0
  36. data/lib/badline/c64/bus/roms.rb +41 -0
  37. data/lib/badline/c64/bus/saved_state.rb +68 -0
  38. data/lib/badline/c64/bus/sid_slots.rb +44 -0
  39. data/lib/badline/c64/bus.rb +218 -0
  40. data/lib/badline/c64/cartridge/action_replay.rb +128 -0
  41. data/lib/badline/c64/cartridge/atomic_power.rb +26 -0
  42. data/lib/badline/c64/cartridge/bank.rb +83 -0
  43. data/lib/badline/c64/cartridge/comal80.rb +52 -0
  44. data/lib/badline/c64/cartridge/dinamic.rb +36 -0
  45. data/lib/badline/c64/cartridge/easy_flash.rb +147 -0
  46. data/lib/badline/c64/cartridge/epyx_fastload.rb +81 -0
  47. data/lib/badline/c64/cartridge/final_cartridge3.rb +91 -0
  48. data/lib/badline/c64/cartridge/flash/saved_state.rb +40 -0
  49. data/lib/badline/c64/cartridge/flash.rb +279 -0
  50. data/lib/badline/c64/cartridge/freezer.rb +35 -0
  51. data/lib/badline/c64/cartridge/fun_play.rb +40 -0
  52. data/lib/badline/c64/cartridge/g_mod2.rb +76 -0
  53. data/lib/badline/c64/cartridge/game_system.rb +42 -0
  54. data/lib/badline/c64/cartridge/geo_ram.rb +81 -0
  55. data/lib/badline/c64/cartridge/kcs_power.rb +77 -0
  56. data/lib/badline/c64/cartridge/mach5.rb +34 -0
  57. data/lib/badline/c64/cartridge/magic_desk.rb +32 -0
  58. data/lib/badline/c64/cartridge/ocean.rb +37 -0
  59. data/lib/badline/c64/cartridge/pagefox.rb +70 -0
  60. data/lib/badline/c64/cartridge/retro_replay/saved_state.rb +47 -0
  61. data/lib/badline/c64/cartridge/retro_replay.rb +286 -0
  62. data/lib/badline/c64/cartridge/rex_utility.rb +31 -0
  63. data/lib/badline/c64/cartridge/rgcd.rb +60 -0
  64. data/lib/badline/c64/cartridge/saved_state.rb +63 -0
  65. data/lib/badline/c64/cartridge/simons_basic.rb +37 -0
  66. data/lib/badline/c64/cartridge/standard.rb +17 -0
  67. data/lib/badline/c64/cartridge/super_games.rb +50 -0
  68. data/lib/badline/c64/cartridge/westermann.rb +32 -0
  69. data/lib/badline/c64/cartridge/zaxxon.rb +68 -0
  70. data/lib/badline/c64/cartridge.rb +258 -0
  71. data/lib/badline/c64/color_memory.rb +27 -0
  72. data/lib/badline/{computer → c64}/common.rb +2 -2
  73. data/lib/badline/{computer → c64}/kernal_traps.rb +18 -18
  74. data/lib/badline/c64/reu/dma/saved_state.rb +52 -0
  75. data/lib/badline/c64/reu/dma.rb +275 -0
  76. data/lib/badline/c64/reu/ram.rb +109 -0
  77. data/lib/badline/c64/reu/saved_state.rb +55 -0
  78. data/lib/badline/c64/reu/trigger.rb +34 -0
  79. data/lib/badline/c64/reu.rb +291 -0
  80. data/lib/badline/{computer → c64}/saved_state.rb +13 -18
  81. data/lib/badline/{computer → c64}/true_drives.rb +11 -11
  82. data/lib/badline/{computer.rb → c64.rb} +18 -13
  83. data/lib/badline/chips/cia/fast_forward.rb +62 -0
  84. data/lib/badline/chips/cia/interrupt_register.rb +145 -0
  85. data/lib/badline/chips/cia/saved_state.rb +49 -0
  86. data/lib/badline/chips/cia/serial/saved_state.rb +45 -0
  87. data/lib/badline/chips/cia/serial.rb +250 -0
  88. data/lib/badline/chips/cia/time_of_day.rb +232 -0
  89. data/lib/badline/chips/cia/timer.rb +208 -0
  90. data/lib/badline/chips/cia.rb +281 -0
  91. data/lib/badline/chips/cpu/addressing.rb +133 -0
  92. data/lib/badline/chips/cpu/boundary.rb +56 -0
  93. data/lib/badline/chips/cpu/core.rb +167 -0
  94. data/lib/badline/chips/cpu/instruction.rb +338 -0
  95. data/lib/badline/chips/cpu/instruction_set/arithmetic.rb +118 -0
  96. data/lib/badline/chips/cpu/instruction_set/bitwise.rb +130 -0
  97. data/lib/badline/chips/cpu/instruction_set/branch.rb +83 -0
  98. data/lib/badline/chips/cpu/instruction_set/flag.rb +67 -0
  99. data/lib/badline/chips/cpu/instruction_set/illegal.rb +274 -0
  100. data/lib/badline/chips/cpu/instruction_set/inc_dec.rb +73 -0
  101. data/lib/badline/chips/cpu/instruction_set/stack.rb +56 -0
  102. data/lib/badline/chips/cpu/instruction_set/transfer.rb +141 -0
  103. data/lib/badline/chips/cpu/instruction_set.rb +59 -0
  104. data/lib/badline/chips/cpu/interrupts.rb +108 -0
  105. data/lib/badline/chips/cpu/microcode.rb +179 -0
  106. data/lib/badline/chips/cpu/operations.rb +90 -0
  107. data/lib/badline/chips/cpu/port.rb +116 -0
  108. data/lib/badline/chips/cpu/saved_state.rb +117 -0
  109. data/lib/badline/chips/cpu/stack_operations.rb +84 -0
  110. data/lib/badline/chips/cpu/traps.rb +23 -0
  111. data/lib/badline/chips/cpu.rb +12 -0
  112. data/lib/badline/chips/sid/catch_up.rb +122 -0
  113. data/lib/badline/chips/sid/decimator.rb +66 -0
  114. data/lib/badline/chips/sid/envelope/saved_state.rb +70 -0
  115. data/lib/badline/chips/sid/envelope.rb +241 -0
  116. data/lib/badline/chips/sid/filter/saved_state.rb +42 -0
  117. data/lib/badline/chips/sid/filter.rb +241 -0
  118. data/lib/badline/chips/sid/saved_state.rb +52 -0
  119. data/lib/badline/chips/sid/voice.rb +79 -0
  120. data/lib/badline/chips/sid/waveform/combined.rb +128 -0
  121. data/lib/badline/chips/sid/waveform/fast_forward.rb +107 -0
  122. data/lib/badline/chips/sid/waveform/noise_writeback.rb +124 -0
  123. data/lib/badline/chips/sid/waveform/saved_state.rb +68 -0
  124. data/lib/badline/chips/sid/waveform.rb +307 -0
  125. data/lib/badline/chips/sid.rb +265 -0
  126. data/lib/badline/{c128 → chips}/vdc/memory.rb +1 -1
  127. data/lib/badline/{c128 → chips}/vdc/painter.rb +1 -1
  128. data/lib/badline/{c128 → chips}/vdc/raster.rb +1 -1
  129. data/lib/badline/chips/vdc/saved_state.rb +36 -0
  130. data/lib/badline/{c128 → chips}/vdc/window.rb +1 -1
  131. data/lib/badline/{c128 → chips}/vdc.rb +7 -31
  132. data/lib/badline/chips/via/control_lines.rb +124 -0
  133. data/lib/badline/chips/via/fast_forward.rb +55 -0
  134. data/lib/badline/chips/via/interrupt_register.rb +69 -0
  135. data/lib/badline/chips/via/saved_state.rb +44 -0
  136. data/lib/badline/chips/via/shift_register.rb +182 -0
  137. data/lib/badline/chips/via/timer1.rb +133 -0
  138. data/lib/badline/chips/via/timer2.rb +135 -0
  139. data/lib/badline/chips/via.rb +268 -0
  140. data/lib/badline/chips/vic/bank.rb +135 -0
  141. data/lib/badline/chips/vic/border_mask.rb +88 -0
  142. data/lib/badline/chips/vic/collisions.rb +117 -0
  143. data/lib/badline/chips/vic/color_patches.rb +49 -0
  144. data/lib/badline/chips/vic/display_state.rb +187 -0
  145. data/lib/badline/chips/vic/graphics_mode.rb +166 -0
  146. data/lib/badline/chips/vic/graphics_shifter/saved_state.rb +40 -0
  147. data/lib/badline/chips/vic/graphics_shifter.rb +187 -0
  148. data/lib/badline/chips/vic/register_log.rb +83 -0
  149. data/lib/badline/chips/vic/registers.rb +197 -0
  150. data/lib/badline/chips/vic/saved_state.rb +82 -0
  151. data/lib/badline/chips/vic/sequencer/saved_state.rb +91 -0
  152. data/lib/badline/chips/vic/sequencer.rb +277 -0
  153. data/lib/badline/chips/vic/sequencer_output.rb +118 -0
  154. data/lib/badline/chips/vic/sprite/internal_bus.rb +70 -0
  155. data/lib/badline/chips/vic/sprite/saved_state.rb +66 -0
  156. data/lib/badline/chips/vic/sprite/shifter.rb +148 -0
  157. data/lib/badline/chips/vic/sprite/timing.rb +58 -0
  158. data/lib/badline/chips/vic/sprite.rb +339 -0
  159. data/lib/badline/chips/vic/sprites/saved_state.rb +59 -0
  160. data/lib/badline/chips/vic/sprites.rb +284 -0
  161. data/lib/badline/chips/vic.rb +783 -0
  162. data/lib/badline/chips/vic_i/painter/saved_state.rb +40 -0
  163. data/lib/badline/{vic20/vic → chips/vic_i}/painter.rb +6 -30
  164. data/lib/badline/{vic20/vic → chips/vic_i}/saved_state.rb +2 -2
  165. data/lib/badline/chips/vic_i/sound/output.rb +85 -0
  166. data/lib/badline/chips/vic_i/sound.rb +235 -0
  167. data/lib/badline/{vic20/vic → chips/vic_i}/text_window.rb +2 -2
  168. data/lib/badline/{vic20/vic.rb → chips/vic_i.rb} +5 -5
  169. data/lib/badline/chips/z80/arithmetic.rb +119 -0
  170. data/lib/badline/chips/z80/bit_page.rb +57 -0
  171. data/lib/badline/chips/z80/block_io.rb +60 -0
  172. data/lib/badline/chips/z80/block_transfers.rb +61 -0
  173. data/lib/badline/chips/z80/bus_cycles.rb +113 -0
  174. data/lib/badline/chips/z80/core.rb +115 -0
  175. data/lib/badline/chips/z80/exchanges.rb +52 -0
  176. data/lib/badline/chips/z80/extended_page.rb +91 -0
  177. data/lib/badline/chips/z80/flags.rb +39 -0
  178. data/lib/badline/chips/z80/interrupt_acceptance.rb +48 -0
  179. data/lib/badline/chips/z80/jumps.rb +84 -0
  180. data/lib/badline/chips/z80/loads.rb +100 -0
  181. data/lib/badline/chips/z80/main_page.rb +136 -0
  182. data/lib/badline/chips/z80/registers.rb +122 -0
  183. data/lib/badline/chips/z80/saved_state.rb +71 -0
  184. data/lib/badline/chips/z80/shifts.rb +66 -0
  185. data/lib/badline/chips/z80.rb +13 -0
  186. data/lib/badline/core.rb +26 -28
  187. data/lib/badline/drives/datasette/saved_state.rb +37 -0
  188. data/lib/badline/drives/datasette.rb +140 -0
  189. data/lib/badline/drives/engine/core.rb +149 -0
  190. data/lib/badline/drives/engine/fast_serial.rb +75 -0
  191. data/lib/badline/drives/engine/idle.rb +127 -0
  192. data/lib/badline/drives/engine/idle_cpu.rb +30 -0
  193. data/lib/badline/drives/engine/orbit.rb +81 -0
  194. data/lib/badline/drives/engine/serial_lines.rb +75 -0
  195. data/lib/badline/drives/engine/sleep.rb +114 -0
  196. data/lib/badline/drives/engine/vias.rb +86 -0
  197. data/lib/badline/drives/engine/watch.rb +152 -0
  198. data/lib/badline/drives/engine.rb +11 -0
  199. data/lib/badline/drives/model1541/bus.rb +88 -0
  200. data/lib/badline/drives/model1541/byte_ready.rb +50 -0
  201. data/lib/badline/drives/model1541/cpu.rb +13 -0
  202. data/lib/badline/drives/model1541/disk/saved_state.rb +88 -0
  203. data/lib/badline/drives/model1541/disk.rb +317 -0
  204. data/lib/badline/drives/model1541/disk_via.rb +38 -0
  205. data/lib/badline/drives/model1541/gcr.rb +59 -0
  206. data/lib/badline/drives/model1541/mechanism/saved_state.rb +72 -0
  207. data/lib/badline/drives/model1541/mechanism.rb +315 -0
  208. data/lib/badline/drives/model1541/rotation.rb +123 -0
  209. data/lib/badline/drives/model1541/saved_state.rb +44 -0
  210. data/lib/badline/drives/model1541/sector_reader.rb +78 -0
  211. data/lib/badline/drives/model1541/serial_port.rb +20 -0
  212. data/lib/badline/drives/model1541/track.rb +100 -0
  213. data/lib/badline/drives/model1541.rb +81 -0
  214. data/lib/badline/drives/model1571/bus.rb +113 -0
  215. data/lib/badline/drives/model1571/cpu.rb +13 -0
  216. data/lib/badline/drives/model1571/saved_state.rb +47 -0
  217. data/lib/badline/drives/model1571/serial_port.rb +39 -0
  218. data/lib/badline/drives/model1571/serial_via.rb +27 -0
  219. data/lib/badline/drives/model1571/wd1770.rb +122 -0
  220. data/lib/badline/drives/model1571.rb +142 -0
  221. data/lib/badline/drives/model1581/bus.rb +139 -0
  222. data/lib/badline/drives/model1581/cpu.rb +13 -0
  223. data/lib/badline/drives/model1581/disk/saved_state.rb +89 -0
  224. data/lib/badline/drives/model1581/disk.rb +137 -0
  225. data/lib/badline/drives/model1581/mechanism.rb +119 -0
  226. data/lib/badline/drives/model1581/saved_state.rb +42 -0
  227. data/lib/badline/drives/model1581/serial_port.rb +54 -0
  228. data/lib/badline/drives/model1581/slot.rb +79 -0
  229. data/lib/badline/drives/model1581/track.rb +102 -0
  230. data/lib/badline/drives/model1581/track_bytes.rb +77 -0
  231. data/lib/badline/drives/model1581/wd1772/registers.rb +91 -0
  232. data/lib/badline/drives/model1581/wd1772/saved_state.rb +68 -0
  233. data/lib/badline/drives/model1581/wd1772/sector_writes.rb +75 -0
  234. data/lib/badline/drives/model1581/wd1772/sectors.rb +152 -0
  235. data/lib/badline/drives/model1581/wd1772/stepping.rb +111 -0
  236. data/lib/badline/drives/model1581/wd1772/tracks.rb +127 -0
  237. data/lib/badline/drives/model1581/wd1772/turn.rb +75 -0
  238. data/lib/badline/drives/model1581/wd1772.rb +218 -0
  239. data/lib/badline/drives/model1581.rb +206 -0
  240. data/lib/badline/drives/serial_bus.rb +161 -0
  241. data/lib/badline/frontend/boot.rb +3 -3
  242. data/lib/badline/frontend/machine_window.rb +3 -1
  243. data/lib/badline/frontend/player/filter_view.rb +1 -1
  244. data/lib/badline/frontend/player/player_controller.rb +2 -2
  245. data/lib/badline/frontend/player/player_screen.rb +1 -0
  246. data/lib/badline/frontend/player/theme.rb +7 -7
  247. data/lib/badline/frontend/timeline.rb +3 -3
  248. data/lib/badline/input/control_ports.rb +78 -0
  249. data/lib/badline/input/joystick.rb +27 -0
  250. data/lib/badline/input/keyboard.rb +114 -0
  251. data/lib/badline/input.rb +3 -0
  252. data/lib/badline/kernal_trap/{drive → dos}/block_commands.rb +1 -1
  253. data/lib/badline/kernal_trap/dos/channel.rb +183 -0
  254. data/lib/badline/kernal_trap/{drive → dos}/channels.rb +1 -1
  255. data/lib/badline/kernal_trap/{drive → dos}/memory.rb +1 -1
  256. data/lib/badline/kernal_trap/{drive → dos}/parameters.rb +1 -1
  257. data/lib/badline/kernal_trap/{drive → dos}/status.rb +1 -1
  258. data/lib/badline/kernal_trap/{drive → dos}/write_file.rb +1 -1
  259. data/lib/badline/kernal_trap/{drive → dos}/writes.rb +1 -1
  260. data/lib/badline/kernal_trap/{drive.rb → dos.rb} +11 -10
  261. data/lib/badline/kernal_trap/load.rb +5 -5
  262. data/lib/badline/kernal_trap/save.rb +4 -4
  263. data/lib/badline/kernal_trap/serial.rb +7 -7
  264. data/lib/badline/kernal_trap.rb +1 -2
  265. data/lib/badline/machine/clocking.rb +1 -1
  266. data/lib/badline/machine.rb +5 -5
  267. data/lib/badline/media/true_drive.rb +1 -1
  268. data/lib/badline/media/tune.rb +2 -2
  269. data/lib/badline/media.rb +3 -3
  270. data/lib/badline/model.rb +1 -1
  271. data/lib/badline/roms/README +6 -6
  272. data/lib/badline/sdl.rb +1 -0
  273. data/lib/badline/{storage/sid_file.rb → sid_tune/file.rb} +3 -3
  274. data/lib/badline/{storage → sid_tune}/hvsc.rb +7 -7
  275. data/lib/badline/{storage → sid_tune}/song_lengths.rb +2 -2
  276. data/lib/badline/{storage → sid_tune}/stil/credit.rb +1 -1
  277. data/lib/badline/{storage → sid_tune}/stil.rb +3 -3
  278. data/lib/badline/sid_tune.rb +6 -0
  279. data/lib/badline/snapshot/c128_setup.rb +43 -0
  280. data/lib/badline/snapshot/c64_setup.rb +79 -0
  281. data/lib/badline/snapshot/image.rb +5 -25
  282. data/lib/badline/snapshot/machine_state.rb +1 -1
  283. data/lib/badline/snapshot/setup.rb +22 -66
  284. data/lib/badline/snapshot/state.rb +8 -18
  285. data/lib/badline/snapshot/storage_setup.rb +68 -0
  286. data/lib/badline/snapshot/vic20_setup.rb +37 -0
  287. data/lib/badline/snapshot/vice/c64_mem.rb +1 -1
  288. data/lib/badline/snapshot/vice/restore.rb +1 -1
  289. data/lib/badline/snapshot/vice/reu1764.rb +1 -1
  290. data/lib/badline/snapshot/vice/reu_fields.rb +40 -0
  291. data/lib/badline/snapshot/vice.rb +7 -5
  292. data/lib/badline/snapshot.rb +3 -4
  293. data/lib/badline/storage/d64_image.rb +0 -2
  294. data/lib/badline/storage/d71_image.rb +0 -2
  295. data/lib/badline/storage/d81_image.rb +0 -2
  296. data/lib/badline/storage/disk_image.rb +3 -6
  297. data/lib/badline/storage/g64_image.rb +2 -2
  298. data/lib/badline/storage/host_directory.rb +0 -5
  299. data/lib/badline/storage/t64.rb +2 -8
  300. data/lib/badline/storage/unavailable.rb +1 -1
  301. data/lib/badline/storage.rb +0 -37
  302. data/lib/badline/support/c128_checkpoint.rb +39 -0
  303. data/lib/badline/support/checkpoint.rb +108 -0
  304. data/lib/badline/support/vic20_checkpoint.rb +38 -0
  305. data/lib/badline/support.rb +5 -0
  306. data/lib/badline/version.rb +1 -1
  307. data/lib/badline/vic20/attachments.rb +5 -5
  308. data/lib/badline/vic20/bus/saved_state.rb +35 -0
  309. data/lib/badline/vic20/bus.rb +3 -25
  310. data/lib/badline/vic20/cpu.rb +1 -1
  311. data/lib/badline/vic20/port_wiring.rb +4 -4
  312. data/lib/badline/vic20/saved_state.rb +16 -30
  313. data/lib/badline/vic20/user_via_ports.rb +2 -2
  314. data/lib/badline/vic20.rb +19 -14
  315. metadata +245 -221
  316. data/lib/badline/address_bus/extra_sids.rb +0 -30
  317. data/lib/badline/address_bus/fittings.rb +0 -38
  318. data/lib/badline/address_bus/pla.rb +0 -147
  319. data/lib/badline/address_bus/roms.rb +0 -39
  320. data/lib/badline/address_bus/saved_state.rb +0 -66
  321. data/lib/badline/address_bus/sid_slots.rb +0 -42
  322. data/lib/badline/address_bus.rb +0 -216
  323. data/lib/badline/cartridge/action_replay.rb +0 -126
  324. data/lib/badline/cartridge/atomic_power.rb +0 -24
  325. data/lib/badline/cartridge/bank.rb +0 -81
  326. data/lib/badline/cartridge/comal80.rb +0 -50
  327. data/lib/badline/cartridge/dinamic.rb +0 -34
  328. data/lib/badline/cartridge/easy_flash.rb +0 -145
  329. data/lib/badline/cartridge/epyx_fastload.rb +0 -79
  330. data/lib/badline/cartridge/final_cartridge3.rb +0 -89
  331. data/lib/badline/cartridge/flash.rb +0 -306
  332. data/lib/badline/cartridge/freezer.rb +0 -33
  333. data/lib/badline/cartridge/fun_play.rb +0 -38
  334. data/lib/badline/cartridge/g_mod2.rb +0 -74
  335. data/lib/badline/cartridge/game_system.rb +0 -40
  336. data/lib/badline/cartridge/geo_ram.rb +0 -79
  337. data/lib/badline/cartridge/kcs_power.rb +0 -75
  338. data/lib/badline/cartridge/mach5.rb +0 -32
  339. data/lib/badline/cartridge/magic_desk.rb +0 -30
  340. data/lib/badline/cartridge/ocean.rb +0 -35
  341. data/lib/badline/cartridge/pagefox.rb +0 -68
  342. data/lib/badline/cartridge/retro_replay.rb +0 -320
  343. data/lib/badline/cartridge/rex_utility.rb +0 -29
  344. data/lib/badline/cartridge/rgcd.rb +0 -58
  345. data/lib/badline/cartridge/simons_basic.rb +0 -35
  346. data/lib/badline/cartridge/standard.rb +0 -15
  347. data/lib/badline/cartridge/super_games.rb +0 -48
  348. data/lib/badline/cartridge/westermann.rb +0 -30
  349. data/lib/badline/cartridge/zaxxon.rb +0 -66
  350. data/lib/badline/cartridge.rb +0 -303
  351. data/lib/badline/checkpoint.rb +0 -98
  352. data/lib/badline/cia/fast_forward.rb +0 -60
  353. data/lib/badline/cia/interrupt_register.rb +0 -143
  354. data/lib/badline/cia/serial.rb +0 -275
  355. data/lib/badline/cia/state.rb +0 -47
  356. data/lib/badline/cia/timer.rb +0 -206
  357. data/lib/badline/cia.rb +0 -279
  358. data/lib/badline/color_memory.rb +0 -25
  359. data/lib/badline/control_ports.rb +0 -76
  360. data/lib/badline/cpu/addressing.rb +0 -131
  361. data/lib/badline/cpu/boundary.rb +0 -54
  362. data/lib/badline/cpu/core.rb +0 -165
  363. data/lib/badline/cpu/microcode.rb +0 -177
  364. data/lib/badline/cpu/operations.rb +0 -88
  365. data/lib/badline/cpu/saved_state.rb +0 -115
  366. data/lib/badline/cpu/stack_operations.rb +0 -82
  367. data/lib/badline/cpu.rb +0 -10
  368. data/lib/badline/cpu_port.rb +0 -112
  369. data/lib/badline/datasette.rb +0 -161
  370. data/lib/badline/drive/core.rb +0 -147
  371. data/lib/badline/drive/fast_serial.rb +0 -73
  372. data/lib/badline/drive/idle.rb +0 -125
  373. data/lib/badline/drive/idle_cpu.rb +0 -28
  374. data/lib/badline/drive/orbit.rb +0 -79
  375. data/lib/badline/drive/serial_lines.rb +0 -73
  376. data/lib/badline/drive/sleep.rb +0 -112
  377. data/lib/badline/drive/vias.rb +0 -84
  378. data/lib/badline/drive/watch.rb +0 -150
  379. data/lib/badline/drive.rb +0 -11
  380. data/lib/badline/drive1541/bus.rb +0 -86
  381. data/lib/badline/drive1541/byte_ready.rb +0 -48
  382. data/lib/badline/drive1541/cpu.rb +0 -11
  383. data/lib/badline/drive1541/disk.rb +0 -315
  384. data/lib/badline/drive1541/disk_state.rb +0 -86
  385. data/lib/badline/drive1541/disk_via.rb +0 -36
  386. data/lib/badline/drive1541/gcr.rb +0 -57
  387. data/lib/badline/drive1541/mechanism.rb +0 -313
  388. data/lib/badline/drive1541/mechanism_state.rb +0 -68
  389. data/lib/badline/drive1541/rotation.rb +0 -121
  390. data/lib/badline/drive1541/sector_reader.rb +0 -76
  391. data/lib/badline/drive1541/serial_port.rb +0 -18
  392. data/lib/badline/drive1541/track.rb +0 -98
  393. data/lib/badline/drive1541.rb +0 -111
  394. data/lib/badline/drive1571/bus.rb +0 -111
  395. data/lib/badline/drive1571/cpu.rb +0 -11
  396. data/lib/badline/drive1571/serial_port.rb +0 -37
  397. data/lib/badline/drive1571/serial_via.rb +0 -25
  398. data/lib/badline/drive1571/wd1770.rb +0 -120
  399. data/lib/badline/drive1571.rb +0 -175
  400. data/lib/badline/drive1581/bus.rb +0 -137
  401. data/lib/badline/drive1581/cpu.rb +0 -11
  402. data/lib/badline/drive1581/disk.rb +0 -135
  403. data/lib/badline/drive1581/disk_state.rb +0 -87
  404. data/lib/badline/drive1581/mechanism.rb +0 -117
  405. data/lib/badline/drive1581/serial_port.rb +0 -52
  406. data/lib/badline/drive1581/slot.rb +0 -78
  407. data/lib/badline/drive1581/track.rb +0 -100
  408. data/lib/badline/drive1581/track_bytes.rb +0 -75
  409. data/lib/badline/drive1581/wd1772/registers.rb +0 -89
  410. data/lib/badline/drive1581/wd1772/sector_writes.rb +0 -73
  411. data/lib/badline/drive1581/wd1772/sectors.rb +0 -150
  412. data/lib/badline/drive1581/wd1772/state.rb +0 -66
  413. data/lib/badline/drive1581/wd1772/stepping.rb +0 -109
  414. data/lib/badline/drive1581/wd1772/tracks.rb +0 -125
  415. data/lib/badline/drive1581/wd1772/turn.rb +0 -73
  416. data/lib/badline/drive1581/wd1772.rb +0 -216
  417. data/lib/badline/drive1581.rb +0 -233
  418. data/lib/badline/iec_bus.rb +0 -159
  419. data/lib/badline/instruction.rb +0 -334
  420. data/lib/badline/instruction_set/arithmetic.rb +0 -114
  421. data/lib/badline/instruction_set/bitwise.rb +0 -126
  422. data/lib/badline/instruction_set/branch.rb +0 -79
  423. data/lib/badline/instruction_set/flag.rb +0 -63
  424. data/lib/badline/instruction_set/illegal.rb +0 -270
  425. data/lib/badline/instruction_set/inc_dec.rb +0 -69
  426. data/lib/badline/instruction_set/stack.rb +0 -52
  427. data/lib/badline/instruction_set/transfer.rb +0 -137
  428. data/lib/badline/instruction_set.rb +0 -55
  429. data/lib/badline/interrupts.rb +0 -104
  430. data/lib/badline/joystick.rb +0 -25
  431. data/lib/badline/kernal_trap/channel.rb +0 -181
  432. data/lib/badline/keyboard.rb +0 -112
  433. data/lib/badline/ram_expansion/banking.rb +0 -30
  434. data/lib/badline/ram_expansion/plus256k.rb +0 -54
  435. data/lib/badline/ram_expansion/plus60k.rb +0 -43
  436. data/lib/badline/ram_expansion/unexpanded.rb +0 -28
  437. data/lib/badline/ram_expansion.rb +0 -21
  438. data/lib/badline/reu/dma/saved_state.rb +0 -50
  439. data/lib/badline/reu/dma.rb +0 -273
  440. data/lib/badline/reu/ram.rb +0 -107
  441. data/lib/badline/reu/saved_state.rb +0 -80
  442. data/lib/badline/reu/trigger.rb +0 -32
  443. data/lib/badline/reu.rb +0 -289
  444. data/lib/badline/sid/catch_up.rb +0 -120
  445. data/lib/badline/sid/decimator.rb +0 -64
  446. data/lib/badline/sid/envelope/state.rb +0 -68
  447. data/lib/badline/sid/envelope.rb +0 -239
  448. data/lib/badline/sid/filter.rb +0 -263
  449. data/lib/badline/sid/voice.rb +0 -77
  450. data/lib/badline/sid/waveform/combined.rb +0 -126
  451. data/lib/badline/sid/waveform/fast_forward.rb +0 -105
  452. data/lib/badline/sid/waveform/noise_writeback.rb +0 -122
  453. data/lib/badline/sid/waveform/state.rb +0 -66
  454. data/lib/badline/sid/waveform.rb +0 -305
  455. data/lib/badline/sid.rb +0 -303
  456. data/lib/badline/time_of_day.rb +0 -228
  457. data/lib/badline/traps.rb +0 -19
  458. data/lib/badline/via/control_lines.rb +0 -122
  459. data/lib/badline/via/fast_forward.rb +0 -53
  460. data/lib/badline/via/interrupt_register.rb +0 -67
  461. data/lib/badline/via/shift_register.rb +0 -180
  462. data/lib/badline/via/state.rb +0 -42
  463. data/lib/badline/via/timer1.rb +0 -131
  464. data/lib/badline/via/timer2.rb +0 -133
  465. data/lib/badline/via.rb +0 -266
  466. data/lib/badline/vic/bank.rb +0 -133
  467. data/lib/badline/vic/border_mask.rb +0 -86
  468. data/lib/badline/vic/collisions.rb +0 -115
  469. data/lib/badline/vic/color_patches.rb +0 -47
  470. data/lib/badline/vic/display_state.rb +0 -185
  471. data/lib/badline/vic/graphics_mode.rb +0 -164
  472. data/lib/badline/vic/graphics_shifter.rb +0 -207
  473. data/lib/badline/vic/register_log.rb +0 -81
  474. data/lib/badline/vic/registers.rb +0 -195
  475. data/lib/badline/vic/sequencer.rb +0 -275
  476. data/lib/badline/vic/sequencer_output.rb +0 -116
  477. data/lib/badline/vic/sequencer_state.rb +0 -89
  478. data/lib/badline/vic/sprite/internal_bus.rb +0 -68
  479. data/lib/badline/vic/sprite/saved_state.rb +0 -64
  480. data/lib/badline/vic/sprite/shifter.rb +0 -146
  481. data/lib/badline/vic/sprite/timing.rb +0 -56
  482. data/lib/badline/vic/sprite.rb +0 -337
  483. data/lib/badline/vic/sprites.rb +0 -282
  484. data/lib/badline/vic/sprites_state.rb +0 -57
  485. data/lib/badline/vic.rb +0 -853
  486. data/lib/badline/vic20/sound/output.rb +0 -83
  487. data/lib/badline/vic20/sound.rb +0 -233
  488. data/lib/badline/z80/arithmetic.rb +0 -117
  489. data/lib/badline/z80/bit_page.rb +0 -55
  490. data/lib/badline/z80/block_io.rb +0 -58
  491. data/lib/badline/z80/block_transfers.rb +0 -59
  492. data/lib/badline/z80/bus_cycles.rb +0 -111
  493. data/lib/badline/z80/core.rb +0 -113
  494. data/lib/badline/z80/exchanges.rb +0 -50
  495. data/lib/badline/z80/extended_page.rb +0 -89
  496. data/lib/badline/z80/flags.rb +0 -37
  497. data/lib/badline/z80/interrupt_acceptance.rb +0 -46
  498. data/lib/badline/z80/jumps.rb +0 -82
  499. data/lib/badline/z80/loads.rb +0 -98
  500. data/lib/badline/z80/main_page.rb +0 -134
  501. data/lib/badline/z80/registers.rb +0 -120
  502. data/lib/badline/z80/saved_state.rb +0 -69
  503. data/lib/badline/z80/shifts.rb +0 -64
  504. data/lib/badline/z80.rb +0 -11
  505. /data/lib/badline/snapshot/{fields.rb → vice/fields.rb} +0 -0
data/doc/snapshots.md CHANGED
@@ -62,10 +62,7 @@ Every model saves this way, PAL, NTSC, old NTSC and Drean alike, and so
62
62
  does a machine with an REU, with its RAM, its registers and a transfer
63
63
  part way through. A snapshot only restores in the badline version that
64
64
  wrote it, into a machine with the same chip models, region, RAM
65
- expansion, REU, KERNAL, datasette and board. One saved before badline
66
- recorded the KERNAL and the datasette restores as a machine with the
67
- C64's KERNAL and a datasette, and one saved before it recorded the board
68
- restores on a C64's.
65
+ expansion, REU, KERNAL, datasette and board.
69
66
 
70
67
  ## The VIC-20
71
68
 
@@ -49,13 +49,13 @@ module Badline
49
49
  def initialize(tune, subtune: nil, sid_models: tune.sid_models)
50
50
  @tune = tune
51
51
  @subtune = (subtune || tune.start_subtune).clamp(1, tune.subtunes) - 1
52
- @bus = AddressBus.new(sid_model: sid_models[0])
52
+ @bus = C64::Bus.new(sid_model: sid_models[0])
53
53
  # The CPU port as the KERNAL leaves it, which a PSID tune expects.
54
54
  @bus.poke(0x00, 0x2f)
55
55
  @bus.poke(0x01, 0x37)
56
56
  @bus.poke(VIDEO_STANDARD, tune.ntsc? ? 0 : 1)
57
57
  @bus.cia1.timer_a_latch = tune.ntsc? ? NTSC_KERNAL_TIMER : KERNAL_TIMER
58
- @cpu = CPU.new(@bus)
58
+ @cpu = Chips::CPU.new(@bus)
59
59
  @sid = @bus.sid
60
60
  @stereo = Stereo.new(@bus, tune, sid_models)
61
61
  @extras = @stereo.extras
@@ -164,7 +164,7 @@ module Badline
164
164
 
165
165
  # Tunes live under the ROMs as often as not, so $01 has to bank out
166
166
  # whatever covers the routine about to run. An RSID tune banks itself,
167
- # and `SIDFile#bank_for` hands back nil for it.
167
+ # and `SIDTune::File#bank_for` hands back nil for it.
168
168
  def dispatch
169
169
  bank = @tune.bank_for(@pending)
170
170
  @bus.poke(0x01, bank) if bank
@@ -49,8 +49,8 @@ module Badline
49
49
  def queue
50
50
  @queue ||= begin
51
51
  paths = @options.tune_paths
52
- queue = Media::Queue.new(entries(paths, @options.subtune), all_parts: @options.all_subtunes?,
53
- build: ->(dropped) { entries(dropped) })
52
+ queue = Queue.new(entries(paths, @options.subtune), all_parts: @options.all_subtunes?,
53
+ build: ->(dropped) { entries(dropped) })
54
54
  raise Error, "no .sid tunes in #{paths.join(', ')}" if queue.empty? && !paths.empty?
55
55
 
56
56
  queue
@@ -77,7 +77,7 @@ module Badline
77
77
  # below the directories, the first starting on `subtune` if given.
78
78
  def entries(paths, subtune = nil)
79
79
  tunes = []
80
- Media::Queue.files(paths, ".sid").each do |path|
80
+ Queue.files(paths, ".sid").each do |path|
81
81
  tunes << QueuedTune.new(path, @options, subtune: tunes.empty? ? subtune : nil)
82
82
  end
83
83
  tunes
@@ -223,9 +223,9 @@ module Badline
223
223
  end
224
224
 
225
225
  def stil(entry)
226
- list = Storage::STIL.locate(entry.path)
227
- hvsc_path = list && Storage::HVSC.path(entry.path, list)
228
- hvsc_path && (@stil_lists[list] ||= Storage::STIL.new(list)).entry(hvsc_path)
226
+ list = SIDTune::STIL.locate(entry.path)
227
+ hvsc_path = list && SIDTune::HVSC.path(entry.path, list)
228
+ hvsc_path && (@stil_lists[list] ||= SIDTune::STIL.new(list)).entry(hvsc_path)
229
229
  end
230
230
 
231
231
  def progress(done, total)
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Badline
4
4
  module Audio
5
- # Plays a Media::Queue of tunes interactively: the console's keys step
5
+ # Plays a Audio::Queue of tunes interactively: the console's keys step
6
6
  # between tunes and between a tune's subtunes, seek within the subtune, pause,
7
7
  # turn the queue's shuffle, loop and all-subtunes modes on and off, and
8
8
  # quit, and the status line follows along. Seeking runs the subtune
@@ -10,7 +10,7 @@ module Badline
10
10
  # forward, and from the latest of its Checkpoints at or before there to
11
11
  # go back, or to go forward when that checkpoint is further on than
12
12
  # where the subtune is. A subtune that plays to its end moves on as
13
- # Media::Queue#advance says. It stops at the end of the queue, on q, or
13
+ # Audio::Queue#advance says. It stops at the end of the queue, on q, or
14
14
  # on Ctrl-C.
15
15
  #
16
16
  # `renderer` builds the renderer for an entry's subtune at the sink's
@@ -17,7 +17,7 @@ module Badline
17
17
  def initialize(tune, subtune: nil, sid_models: tune.sid_models)
18
18
  @tune = tune
19
19
  @subtune = subtune || tune.start_subtune
20
- @computer = Computer.new(sid_model: sid_models[0])
20
+ @computer = C64.new(sid_model: sid_models[0])
21
21
  @stereo = Stereo.new(@computer.address_bus, tune, sid_models)
22
22
  @extras = @stereo.extras
23
23
  @multi = !@extras.empty?
@@ -39,7 +39,7 @@ module Badline
39
39
 
40
40
  def clock_hz = @computer.region.clock_hz
41
41
 
42
- # The whole machine, as Computer#snapshot takes it, and the extra SIDs,
42
+ # The whole machine, as C64#snapshot takes it, and the extra SIDs,
43
43
  # once it plays.
44
44
  def save_state(out)
45
45
  @computer.save_state(out)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Badline
4
- module Media
4
+ module Audio
5
5
  # An ordered list of media files to go through one at a time, such as
6
6
  # the tunes of a player. Each entry is a file and the part of it to
7
7
  # start on, counting from 1, out of the parts the file holds: a .sid
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Badline
4
4
  module Audio
5
- # A .sid tune in the player's Media::Queue, read only once the queue or
5
+ # A .sid tune in the player's Audio::Queue, read only once the queue or
6
6
  # the player first asks about it, so a queue of a whole collection
7
7
  # starts at once. Its subtunes, SID model and lengths follow the options:
8
8
  # --subtune picks the subtune to start on, --sid the model and --seconds the
@@ -11,7 +11,7 @@ module Badline
11
11
  #
12
12
  # A file that won't read as a tune, or lacks the subtune asked for, gets
13
13
  # an #error and a single subtune.
14
- class QueuedTune < Media::Queue::Entry
14
+ class QueuedTune < Queue::Entry
15
15
  def initialize(path, options, subtune: nil)
16
16
  super(path)
17
17
  @options = options
@@ -39,7 +39,7 @@ module Badline
39
39
  @error
40
40
  end
41
41
 
42
- def tune = @tune ||= Storage::SIDFile.new(path)
42
+ def tune = @tune ||= SIDTune::File.new(path)
43
43
 
44
44
  # Lets go of the tune's data, which #tune reads again if asked.
45
45
  def release = @tune = nil
@@ -71,7 +71,7 @@ module Badline
71
71
  @parts = tune.subtunes
72
72
  @part = @subtune || tune.start_subtune
73
73
  @error = "no subtune #{@part}: the tune has #{@parts}" if @part > @parts
74
- rescue Storage::SIDFile::FormatError => e
74
+ rescue SIDTune::File::FormatError => e
75
75
  @error = e.message
76
76
  end
77
77
 
@@ -81,8 +81,8 @@ module Badline
81
81
  return @lengths if @lengths_read
82
82
 
83
83
  @lengths_read = true
84
- database = @options.songlengths || Storage::SongLengths.locate(path)
85
- @lengths = database && Storage::SongLengths.new(database).lengths(tune.md5)
84
+ database = @options.songlengths || SIDTune::SongLengths.locate(path)
85
+ @lengths = database && SIDTune::SongLengths.new(database).lengths(tune.md5)
86
86
  end
87
87
  end
88
88
  end
@@ -50,7 +50,7 @@ module Badline
50
50
  @subtune = subtune
51
51
  @rate = rate
52
52
  @sid_models = sid_models
53
- @filter_chunk = SID::FILTER_CHUNK
53
+ @filter_chunk = Chips::SID::FILTER_CHUNK
54
54
  @silent_samples = 0
55
55
  @level = 0
56
56
  @still = 0
@@ -141,7 +141,7 @@ module Badline
141
141
 
142
142
  input = Snapshot::StateReader.new(state)
143
143
  played = input.int
144
- resume(input)
144
+ restore_player(input)
145
145
  record
146
146
  player.stereo.sids.each { |sid| sid.load_recording(input) }
147
147
  @level = input.int
@@ -159,10 +159,10 @@ module Badline
159
159
 
160
160
  # Restores the player as it was, then puts back the SID models chosen
161
161
  # for this renderer.
162
- def resume(input)
162
+ def restore_player(input)
163
163
  sids = player.stereo.sids
164
164
  chosen = sids.map(&:model)
165
- sids.each { |sid| refit(sid, Snapshot::Setup::SID_MODELS.fetch(input.int)) }
165
+ sids.each { |sid| refit(sid, Snapshot::C64Setup::SID_MODELS.fetch(input.int)) }
166
166
  player.load_state(input)
167
167
  sids.each_with_index { |sid, index| refit(sid, chosen[index]) }
168
168
  end
@@ -178,7 +178,7 @@ module Badline
178
178
  sids = player.stereo.sids
179
179
  out = Snapshot::StateWriter.new
180
180
  out.int(played)
181
- sids.each { |sid| out.int(Snapshot::Setup::SID_MODELS.index(sid.model) || 0) }
181
+ sids.each { |sid| out.int(Snapshot::C64Setup::SID_MODELS.index(sid.model) || 0) }
182
182
  player.save_state(out)
183
183
  sids.each { |sid| sid.save_recording(out) }
184
184
  out.int(@level).int(@still)
@@ -18,7 +18,7 @@ module Badline
18
18
  @sids = [bus.sid]
19
19
  @extras = []
20
20
  tune.sid_addresses.each do |address|
21
- sid = SID.new(model: models[@sids.size], at: address)
21
+ sid = Chips::SID.new(model: models[@sids.size], at: address)
22
22
  bus.add_sid(sid)
23
23
  @sids << sid
24
24
  @extras << sid
@@ -3,7 +3,7 @@
3
3
  module Badline
4
4
  class C128
5
5
  class Bus
6
- # The bus's state for a snapshot, as AddressBus::SavedState is the
6
+ # The bus's state for a snapshot, as C64::Bus::SavedState is the
7
7
  # C64's.
8
8
  module SavedState
9
9
  # The machine's memory, the last access and everything on the bus but
@@ -11,7 +11,7 @@ module Badline
11
11
  # $FF00-$FF04.
12
12
  #
13
13
  # In C64 mode the 8721 PLA decodes $01's LORAM, HIRAM and CHAREN and the
14
- # cartridge's EXROM and GAME as a C64's does (AddressBus::PLA), and the
14
+ # cartridge's EXROM and GAME as a C64's does (C64::Bus::PLA), and the
15
15
  # MMU answers nowhere.
16
16
  #
17
17
  # In both modes the RAM is the bank CR picks, with common RAM in bank 0,
@@ -34,8 +34,8 @@ module Badline
34
34
  # Colour RAM has two 1K banks (ColorLines).
35
35
  class Bus
36
36
  include Addressable
37
- include AddressBus::PLA
38
- include AddressBus::ROMs
37
+ include C64::Bus::PLA
38
+ include C64::Bus::ROMs
39
39
  include MMUPages
40
40
  include IOPages
41
41
  include Z80Pages
@@ -48,9 +48,9 @@ module Badline
48
48
  PORT_FLOATING = 0b1000_1000
49
49
  CAPS_LOCK = 0b0100_0000
50
50
 
51
- # The C64's power-on pattern (AddressBus::RAM_POWER_ON) in both 64K
51
+ # The C64's power-on pattern (C64::Bus::RAM_POWER_ON) in both 64K
52
52
  # banks. The C128's own DRAMs' pattern is unmeasured.
53
- RAM_POWER_ON = Array.new(2**17) { |addr| AddressBus::RAM_POWER_ON[addr & 0xffff] }.freeze
53
+ RAM_POWER_ON = Array.new(2**17) { |addr| C64::Bus::RAM_POWER_ON[addr & 0xffff] }.freeze
54
54
 
55
55
  # The VIC's write side: a write to $D02F also drives the extra
56
56
  # keyboard lines K0-K2 onto the keyboard's rows 8-10.
@@ -143,7 +143,7 @@ module Badline
143
143
  @on_mode_change = nil
144
144
  plug_chips(model, sid_model)
145
145
 
146
- @datasette = Datasette.new
146
+ @datasette = Badline::Drives::Datasette.new
147
147
  @datasette.on_flag { @cia1.flag! }
148
148
  @datasette.on_sense_change { @cpu_port.refresh }
149
149
 
@@ -151,11 +151,12 @@ module Badline
151
151
  @color_ram = @color_lines.color_ram(1)
152
152
  build_z80_pages
153
153
  @vic_writes = VICWrites.new(@vic, @control_ports)
154
- @open_bus = AddressBus::OpenBus.new(@vic)
154
+ @open_bus = C64::Bus::OpenBus.new(@vic)
155
155
  @configuration_reads = ConfigurationPage.new(@mmu, @open_bus)
156
156
  @configuration_writes = ConfigurationPage.new(@mmu, @open_bus)
157
157
 
158
- @cpu_port = CPUPort.new(@datasette, pullups: PORT_PULLUPS, floating: PORT_FLOATING, caps_lock: CAPS_LOCK)
158
+ @cpu_port = Chips::CPU::Port.new(@datasette, pullups: PORT_PULLUPS, floating: PORT_FLOATING,
159
+ caps_lock: CAPS_LOCK)
159
160
  @io_port = @cpu_port.status
160
161
 
161
162
  @read_pages = Array.new(256)
@@ -274,17 +275,17 @@ module Badline
274
275
  end
275
276
 
276
277
  def plug_chips(model, sid_model)
277
- @keyboard = Keyboard.new(matrix: KEYBOARD_MATRIX)
278
- @joystick1 = Joystick.new
279
- @joystick2 = Joystick.new
280
- @control_ports = ControlPorts.new(keyboard: @keyboard, joystick1: @joystick1, joystick2: @joystick2)
281
- @vic = VIC.new(model: model.vic_model, region: @region)
282
- @cia1 = CIA.new(start: 0xdc00, peripheral: @control_ports, model: model.cia_model, region: @region)
283
- @cia2 = CIA.new(start: 0xdd00, model: model.cia_model, region: @region)
278
+ @keyboard = Input::Keyboard.new(matrix: KEYBOARD_MATRIX)
279
+ @joystick1 = Input::Joystick.new
280
+ @joystick2 = Input::Joystick.new
281
+ @control_ports = Input::ControlPorts.new(keyboard: @keyboard, joystick1: @joystick1, joystick2: @joystick2)
282
+ @vic = Chips::VIC.new(model: model.vic_model, region: @region)
283
+ @cia1 = Chips::CIA.new(start: 0xdc00, peripheral: @control_ports, model: model.cia_model, region: @region)
284
+ @cia2 = Chips::CIA.new(start: 0xdd00, model: model.cia_model, region: @region)
284
285
  @control_ports.port_a_source = @cia1
285
286
  @cia1.on_port_b4_change { |high| @vic.lightpen_level(high) }
286
- @sid = SID.new(model: sid_model, pots: @control_ports)
287
- @vdc = VDC.new(model: model.vdc_model, ram_kb: model.vdc_ram_kb, clock_hz: @region.clock_hz)
287
+ @sid = Chips::SID.new(model: sid_model, pots: @control_ports)
288
+ @vdc = Chips::VDC.new(model: model.vdc_model, ram_kb: model.vdc_ram_kb, clock_hz: @region.clock_hz)
288
289
  end
289
290
 
290
291
  def update_overlays!
@@ -13,8 +13,8 @@ module Badline
13
13
  @cia2 = cia2
14
14
  @c64_characters = c64_characters
15
15
  @c128_characters = c128_characters
16
- @bank0 = ColorMemory.new(vic)
17
- @bank1 = ColorMemory.new(vic)
16
+ @bank0 = C64::ColorMemory.new(vic)
17
+ @bank1 = C64::ColorMemory.new(vic)
18
18
  end
19
19
 
20
20
  # Colour RAM bank +number+, 0 or 1.
@@ -4,7 +4,7 @@ module Badline
4
4
  class C128
5
5
  # The C128's 8502, on the C128::Bus, which holds its I/O port.
6
6
  class CPU
7
- include Badline::CPU::Core
7
+ include Badline::Chips::CPU::Core
8
8
  end
9
9
  end
10
10
  end
@@ -2,13 +2,13 @@
2
2
 
3
3
  module Badline
4
4
  class C128
5
- # The true drives on the C128's serial bus: a Drive1541, the C128D's
6
- # built-in 1571 (Drive1571) or a 1581 (Drive1581::Slot), each in a
5
+ # The true drives on the C128's serial bus: a Drives::Model1541, the C128D's
6
+ # built-in 1571 (Drives::Model1571) or a 1581 (Drives::Model1581::Slot), each in a
7
7
  # field of its own, so none makes another's per-cycle call a union.
8
8
  module Drives
9
9
  attr_reader :drive1571
10
10
 
11
- # Plugs in a Drive1571, which then runs alongside the C128 on its own
11
+ # Plugs in a Drives::Model1571, which then runs alongside the C128 on its own
12
12
  # clock and talks to it over the serial bus, as attach_drive1541 does
13
13
  # for a 1541.
14
14
  def attach_drive1571(drive)
@@ -19,7 +19,7 @@ module Badline
19
19
  @serial_trap&.device = serial_trap_device
20
20
  end
21
21
 
22
- # Unplugs the Drive1571.
22
+ # Unplugs the Drives::Model1571.
23
23
  def detach_drive1571
24
24
  return unless @drive1571
25
25
 
@@ -35,14 +35,14 @@ module Badline
35
35
  # returns it.
36
36
  def plug_true_drive
37
37
  detach_drive1581 if drive1581_on_device8?
38
- Drive1571.new.tap { |drive| attach_drive1571(drive) }
38
+ Badline::Drives::Model1571.new.tap { |drive| attach_drive1571(drive) }
39
39
  end
40
40
 
41
41
  private
42
42
 
43
43
  # The serial bus, with no disk in device 8's traps and no true drive.
44
44
  def init_drives
45
- @drive = nil
45
+ @dos = nil
46
46
  @serial_trap = nil
47
47
  @save_trap = nil
48
48
  @drive1541 = nil
@@ -61,7 +61,7 @@ module Badline
61
61
  # A 1581 plugged in holds the machine's on_init handlers back until
62
62
  # its DOS has booted, which takes longer than the C128 KERNAL's.
63
63
  def drive1581_attached
64
- @init_threshold = [@init_threshold, Drive1581::BOOT_CYCLES].max if @cycles < @init_threshold
64
+ @init_threshold = [@init_threshold, Badline::Drives::Model1581::BOOT_CYCLES].max if @cycles < @init_threshold
65
65
  end
66
66
 
67
67
  # Unplugs the 1541 and the 1571 if either is device 8, for a 1581 to
@@ -72,10 +72,10 @@ module Badline
72
72
  detach_drive1571 if @drive1571&.device == device
73
73
  end
74
74
 
75
- # A true 1541 (Computer::Attachments#save_serial_bus), then a 1571 and
75
+ # A true 1541 (C64::Attachments#save_serial_bus), then a 1571 and
76
76
  # a 1581.
77
77
  def save_serial_bus(out)
78
- out.boolean(true).boolean(!@drive1541.nil?)
78
+ out.boolean(!@drive1541.nil?)
79
79
  if @drive1541
80
80
  out.int(@drive1541.device)
81
81
  @drive1541.save_state(out)
@@ -89,7 +89,6 @@ module Badline
89
89
  end
90
90
 
91
91
  def load_serial_bus(input)
92
- input.boolean?
93
92
  load_drive1541(input)
94
93
  load_drive1571(input)
95
94
  load_drive1581(input)
@@ -100,7 +99,7 @@ module Badline
100
99
 
101
100
  device = input.int
102
101
  detach_drive1571 if @drive1571 && @drive1571.device != device
103
- attach_drive1571(Drive1571.new(device:)) unless @drive1571
102
+ attach_drive1571(Badline::Drives::Model1571.new(device:)) unless @drive1571
104
103
  @drive1571.load_state(input)
105
104
  end
106
105
  end
@@ -6,7 +6,7 @@ module Badline
6
6
  # through buffers MCR's FSDIR turns round. Outwards, the machine pushes
7
7
  # the lines the pins pull into the bus as they move. Inwards, CIA 1
8
8
  # hears the lines whenever a drive moves its own fast serial pins
9
- # (IECBus#on_fast_change).
9
+ # (Drives::SerialBus#on_fast_change).
10
10
  module FastSerial
11
11
  private
12
12
 
@@ -48,15 +48,15 @@ module Badline
48
48
  serial = @cia1.serial
49
49
  return 0 unless serial.output?
50
50
 
51
- low = serial.cnt ? 0 : IECBus::SRQ
52
- serial.sp_out ? low : low | IECBus::DATA
51
+ low = serial.cnt ? 0 : Badline::Drives::SerialBus::SRQ
52
+ serial.sp_out ? low : low | Badline::Drives::SerialBus::DATA
53
53
  end
54
54
 
55
55
  def hear_fast_serial
56
56
  low = @iec_bus.low_lines
57
57
  serial = @cia1.serial
58
- serial.cnt_in = low.nobits?(IECBus::SRQ)
59
- serial.sp_in = low.nobits?(IECBus::DATA)
58
+ serial.cnt_in = low.nobits?(Badline::Drives::SerialBus::SRQ)
59
+ serial.sp_in = low.nobits?(Badline::Drives::SerialBus::DATA)
60
60
  end
61
61
  end
62
62
  end
@@ -6,7 +6,7 @@ module Badline
6
6
  # What the MMU maps. For the CPU: the RAM bank, common RAM and the
7
7
  # pages page 0 and page 1 move to in both modes, and CR's ROMs and I/O
8
8
  # in C128 mode. C64 mode lays the PLA's ROMs and I/O over the same RAM
9
- # (AddressBus::PLA).
9
+ # (C64::Bus::PLA).
10
10
  module MMUPages
11
11
  private
12
12
 
@@ -33,7 +33,7 @@ module Badline
33
33
  def mode_changed
34
34
  layout = trap_layout
35
35
  @capture_output&.layout = layout
36
- if @drive
36
+ if @dos
37
37
  remove_kernal_traps
38
38
  install_kernal_traps(layout)
39
39
  end
@@ -41,7 +41,7 @@ module Badline
41
41
 
42
42
  keyboard.release(:cbm)
43
43
  @holding_commodore = false
44
- @init_threshold = @cycles + Computer::INIT_THRESHOLD if @cycles < @init_threshold
44
+ @init_threshold = @cycles + C64::INIT_THRESHOLD if @cycles < @init_threshold
45
45
  end
46
46
 
47
47
  # The keyboard buffer of the KERNAL the machine runs: the C64's, or in
@@ -1,26 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "badline/snapshot/c128_setup"
4
+
3
5
  module Badline
4
6
  class C128
5
- MARKER = "C128"
6
-
7
- # The model, the SID and the mode it resets into of the machine a State
8
- # from #snapshot was taken of, the arguments C128.new takes.
9
- def self.setup(state)
10
- input = Snapshot::StateReader.new(state)
11
- input.marker(MARKER)
12
- input.check_stamp
13
- SavedState.read_setup(input)
14
- end
7
+ # How the machine a State from #snapshot was taken of was built.
8
+ def self.setup(state) = Snapshot::C128Setup.from(state)
15
9
 
16
10
  # A new machine, built as the one a State from #snapshot was taken of,
17
11
  # at that state.
18
- def self.restored(state)
19
- setup = setup(state)
20
- new(model: setup[0], sid_model: setup[1], mode: setup[2]).apply_state(state)
21
- end
12
+ def self.restored(state) = setup(state).build.apply_state(state)
22
13
 
23
- # The whole machine's state for a snapshot, as Computer's: the
14
+ # The whole machine's state for a snapshot, as C64's: the
24
15
  # machine's own latches, FAST and TEST as they last took hold, the bus with its RAM, the MMU, the chips and
25
16
  # the VDC, the CPU, the cartridge, the disk device 8 serves through the
26
17
  # traps and a true 1541. The serial lines go back into the bus from the
@@ -28,21 +19,6 @@ module Badline
28
19
  # joysticks, CAPS LOCK and 40/80 DISPLAY, the traps and callbacks, and
29
20
  # which chip renders.
30
21
  module SavedState
31
- SID_MODELS = %i[mos6581 mos8580].freeze
32
- MODES = %i[c64 c128].freeze
33
-
34
- # The model's name, the SID's model and the mode.
35
- def self.read_setup(input)
36
- name = input.string
37
- known = Model::ALL.any? { |model| model.name == name }
38
- raise Snapshot::FormatError, "the state names a C128 model badline doesn't know" unless known
39
-
40
- sid_model = SID_MODELS.fetch(input.int)
41
- [name, sid_model, MODES.fetch(input.int)]
42
- rescue IndexError
43
- raise Snapshot::FormatError, "the state names a SID or a mode badline doesn't know"
44
- end
45
-
46
22
  # How many more on_init handlers the machine a State was taken of had
47
23
  # yet to run than this one has. Nil until the machine is restored.
48
24
  attr_reader :init_handlers_lost
@@ -72,8 +48,8 @@ module Badline
72
48
  end
73
49
 
74
50
  def save_state(out)
75
- out.marker(MARKER).stamp
76
- out.string(@model.name).int(SID_MODELS.index(@sid.model)).int(@c64_built ? 0 : 1)
51
+ out.marker(Snapshot::C128Setup::MARKER).stamp
52
+ snapshot_setup.write(out)
77
53
  out.int(@cycles).int(@clock_bits).boolean(@nmi_asserted).boolean(@cartridge_nmi).boolean(@restore_pulse)
78
54
  out.boolean(!@pending_keys.nil?)
79
55
  out.ints(@pending_keys) if @pending_keys
@@ -83,14 +59,14 @@ module Badline
83
59
  @cpu.save_state(out)
84
60
  @z80.save_state(out)
85
61
  out.int(@z80_due).int(@chips_ahead).boolean(@cpu_reset_pending)
86
- save_trap_drive(out)
62
+ save_trap_dos(out)
87
63
  save_serial_bus(out)
88
64
  end
89
65
 
90
66
  def load_state(input)
91
- input.marker(MARKER)
67
+ input.marker(Snapshot::C128Setup::MARKER)
92
68
  input.check_stamp
93
- check_setup(SavedState.read_setup(input))
69
+ check_setup(Snapshot::C128Setup.read(input))
94
70
  @cycles = input.int
95
71
  @clock_bits = input.int
96
72
  @nmi_asserted = input.boolean?
@@ -105,24 +81,17 @@ module Badline
105
81
  push_serial_lines
106
82
  @cpu.load_state(input)
107
83
  load_z80(input)
108
- load_trap_drive(input)
84
+ load_trap_dos(input)
109
85
  load_serial_bus(input)
110
86
  push_fast_serial
111
87
  end
112
88
 
113
89
  private
114
90
 
115
- # The Z80 and which CPU has the bus, which a state from before the
116
- # Z80 leaves to the 8502. The bus, restored before it, hands the bus
117
- # to its CPU without resetting the 8502.
91
+ # The Z80 and which CPU has the bus. The bus, restored before it,
92
+ # hands the bus to its CPU without resetting the 8502.
118
93
  def load_z80(input)
119
94
  @z80_running = @bus.z80?
120
- @z80_turn = @z80_running
121
- @z80_due = @z80.cycles
122
- @chips_ahead = 0
123
- @cpu_reset_pending = false
124
- return unless input.schema > 6
125
-
126
95
  @z80.load_state(input)
127
96
  @z80_due = input.int
128
97
  @chips_ahead = input.int
@@ -130,11 +99,16 @@ module Badline
130
99
  @z80_turn = @z80_running || @chips_ahead.positive?
131
100
  end
132
101
 
102
+ # How this machine was built.
103
+ def snapshot_setup
104
+ Snapshot::C128Setup.new(model: @model.name, sid_model: @sid.model, mode: @c64_built ? :c64 : :c128)
105
+ end
106
+
133
107
  def check_setup(setup)
134
- ours = [@model.name, @sid.model, @c64_built ? :c64 : :c128]
108
+ ours = snapshot_setup
135
109
  return if setup == ours
136
110
 
137
- raise Snapshot::FormatError, "the state is of a #{setup.join(' with a ')}, not a #{ours.join(' with a ')}"
111
+ raise Snapshot::FormatError, "the state is of a #{setup}, not a #{ours}"
138
112
  end
139
113
  end
140
114
 
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "badline/z80/core"
3
+ require "badline/chips/z80/core"
4
4
 
5
5
  module Badline
6
6
  class C128
7
7
  # The C128's Z80A, on the Z80's side of the C128::Bus.
8
8
  class Z80
9
- include Badline::Z80::Core
9
+ include Badline::Chips::Z80::Core
10
10
  end
11
11
 
12
12
  # The Z80's accesses, through the pages C128::Bus lays out for it