badline 0.12.0 → 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 (516) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -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 +4 -4
  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} +6 -6
  17. data/lib/badline/c128/bus.rb +30 -51
  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 +18 -72
  27. data/lib/badline/{computer → c64}/attachments.rb +16 -47
  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/c64/common.rb +34 -0
  73. data/lib/badline/c64/kernal_traps.rb +89 -0
  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 +20 -31
  82. data/lib/badline/{computer.rb → c64.rb} +22 -80
  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 +27 -29
  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 +10 -61
  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/{file.rb → file_routine.rb} +1 -1
  262. data/lib/badline/kernal_trap/load.rb +6 -6
  263. data/lib/badline/kernal_trap/save.rb +5 -5
  264. data/lib/badline/kernal_trap/serial.rb +7 -7
  265. data/lib/badline/kernal_trap.rb +2 -3
  266. data/lib/badline/machine/clocking.rb +50 -0
  267. data/lib/badline/machine.rb +63 -7
  268. data/lib/badline/media/boot_disk.rb +2 -2
  269. data/lib/badline/media/disk_list.rb +3 -3
  270. data/lib/badline/media/disk_set.rb +1 -1
  271. data/lib/badline/media/extensions.rb +33 -0
  272. data/lib/badline/media/program.rb +28 -0
  273. data/lib/badline/media/true_drive.rb +4 -3
  274. data/lib/badline/media/tune.rb +35 -0
  275. data/lib/badline/media/vic20_cartridge.rb +1 -7
  276. data/lib/badline/media/vic20_media.rb +38 -80
  277. data/lib/badline/media.rb +84 -81
  278. data/lib/badline/model.rb +1 -1
  279. data/lib/badline/options/event.rb +3 -1
  280. data/lib/badline/roms/README +6 -6
  281. data/lib/badline/sdl.rb +1 -0
  282. data/lib/badline/{storage/sid_file.rb → sid_tune/file.rb} +3 -3
  283. data/lib/badline/{storage → sid_tune}/hvsc.rb +7 -7
  284. data/lib/badline/{storage → sid_tune}/song_lengths.rb +2 -2
  285. data/lib/badline/{storage → sid_tune}/stil/credit.rb +1 -1
  286. data/lib/badline/{storage → sid_tune}/stil.rb +3 -3
  287. data/lib/badline/sid_tune.rb +6 -0
  288. data/lib/badline/snapshot/c128_setup.rb +43 -0
  289. data/lib/badline/snapshot/c64_setup.rb +79 -0
  290. data/lib/badline/snapshot/image.rb +5 -25
  291. data/lib/badline/snapshot/machine_state.rb +10 -2
  292. data/lib/badline/snapshot/setup.rb +22 -66
  293. data/lib/badline/snapshot/state.rb +8 -17
  294. data/lib/badline/snapshot/storage_setup.rb +68 -0
  295. data/lib/badline/snapshot/vic20_setup.rb +37 -0
  296. data/lib/badline/snapshot/vice/c64_mem.rb +1 -1
  297. data/lib/badline/snapshot/vice/restore.rb +1 -1
  298. data/lib/badline/snapshot/vice/reu1764.rb +1 -1
  299. data/lib/badline/snapshot/vice/reu_fields.rb +40 -0
  300. data/lib/badline/snapshot/vice.rb +7 -5
  301. data/lib/badline/snapshot.rb +13 -12
  302. data/lib/badline/storage/d64_image.rb +15 -9
  303. data/lib/badline/storage/d71_image.rb +0 -2
  304. data/lib/badline/storage/d81_image.rb +0 -2
  305. data/lib/badline/storage/disk_image/writing.rb +2 -2
  306. data/lib/badline/storage/disk_image.rb +3 -6
  307. data/lib/badline/storage/g64_image.rb +2 -2
  308. data/lib/badline/storage/host_directory.rb +0 -5
  309. data/lib/badline/storage/t64.rb +2 -8
  310. data/lib/badline/storage/unavailable.rb +1 -1
  311. data/lib/badline/storage.rb +0 -37
  312. data/lib/badline/support/c128_checkpoint.rb +39 -0
  313. data/lib/badline/support/checkpoint.rb +108 -0
  314. data/lib/badline/support/vic20_checkpoint.rb +38 -0
  315. data/lib/badline/support.rb +5 -0
  316. data/lib/badline/version.rb +1 -1
  317. data/lib/badline/vic20/attachments.rb +11 -81
  318. data/lib/badline/vic20/bus/saved_state.rb +35 -0
  319. data/lib/badline/vic20/bus.rb +3 -25
  320. data/lib/badline/vic20/cpu.rb +1 -1
  321. data/lib/badline/vic20/port_wiring.rb +4 -4
  322. data/lib/badline/vic20/saved_state.rb +16 -60
  323. data/lib/badline/vic20/user_via_ports.rb +2 -2
  324. data/lib/badline/vic20.rb +20 -51
  325. metadata +250 -221
  326. data/lib/badline/address_bus/extra_sids.rb +0 -30
  327. data/lib/badline/address_bus/fittings.rb +0 -38
  328. data/lib/badline/address_bus/pla.rb +0 -147
  329. data/lib/badline/address_bus/roms.rb +0 -39
  330. data/lib/badline/address_bus/saved_state.rb +0 -72
  331. data/lib/badline/address_bus/sid_slots.rb +0 -42
  332. data/lib/badline/address_bus.rb +0 -235
  333. data/lib/badline/cartridge/action_replay.rb +0 -126
  334. data/lib/badline/cartridge/atomic_power.rb +0 -24
  335. data/lib/badline/cartridge/bank.rb +0 -81
  336. data/lib/badline/cartridge/comal80.rb +0 -50
  337. data/lib/badline/cartridge/dinamic.rb +0 -34
  338. data/lib/badline/cartridge/easy_flash.rb +0 -145
  339. data/lib/badline/cartridge/epyx_fastload.rb +0 -79
  340. data/lib/badline/cartridge/final_cartridge3.rb +0 -89
  341. data/lib/badline/cartridge/flash.rb +0 -306
  342. data/lib/badline/cartridge/freezer.rb +0 -33
  343. data/lib/badline/cartridge/fun_play.rb +0 -38
  344. data/lib/badline/cartridge/g_mod2.rb +0 -74
  345. data/lib/badline/cartridge/game_system.rb +0 -40
  346. data/lib/badline/cartridge/geo_ram.rb +0 -79
  347. data/lib/badline/cartridge/kcs_power.rb +0 -75
  348. data/lib/badline/cartridge/mach5.rb +0 -32
  349. data/lib/badline/cartridge/magic_desk.rb +0 -30
  350. data/lib/badline/cartridge/ocean.rb +0 -35
  351. data/lib/badline/cartridge/pagefox.rb +0 -68
  352. data/lib/badline/cartridge/retro_replay.rb +0 -320
  353. data/lib/badline/cartridge/rex_utility.rb +0 -29
  354. data/lib/badline/cartridge/rgcd.rb +0 -58
  355. data/lib/badline/cartridge/simons_basic.rb +0 -35
  356. data/lib/badline/cartridge/standard.rb +0 -15
  357. data/lib/badline/cartridge/super_games.rb +0 -48
  358. data/lib/badline/cartridge/westermann.rb +0 -30
  359. data/lib/badline/cartridge/zaxxon.rb +0 -66
  360. data/lib/badline/cartridge.rb +0 -303
  361. data/lib/badline/checkpoint.rb +0 -98
  362. data/lib/badline/cia/fast_forward.rb +0 -60
  363. data/lib/badline/cia/interrupt_register.rb +0 -143
  364. data/lib/badline/cia/serial.rb +0 -275
  365. data/lib/badline/cia/state.rb +0 -47
  366. data/lib/badline/cia/timer.rb +0 -206
  367. data/lib/badline/cia.rb +0 -279
  368. data/lib/badline/color_memory.rb +0 -25
  369. data/lib/badline/computer/kernal_traps.rb +0 -29
  370. data/lib/badline/control_ports.rb +0 -76
  371. data/lib/badline/cpu/addressing.rb +0 -131
  372. data/lib/badline/cpu/boundary.rb +0 -54
  373. data/lib/badline/cpu/core.rb +0 -165
  374. data/lib/badline/cpu/microcode.rb +0 -177
  375. data/lib/badline/cpu/operations.rb +0 -88
  376. data/lib/badline/cpu/saved_state.rb +0 -115
  377. data/lib/badline/cpu/stack_operations.rb +0 -82
  378. data/lib/badline/cpu.rb +0 -10
  379. data/lib/badline/cycleable.rb +0 -38
  380. data/lib/badline/datasette.rb +0 -161
  381. data/lib/badline/drive/core.rb +0 -147
  382. data/lib/badline/drive/fast_serial.rb +0 -73
  383. data/lib/badline/drive/idle.rb +0 -125
  384. data/lib/badline/drive/idle_cpu.rb +0 -28
  385. data/lib/badline/drive/orbit.rb +0 -79
  386. data/lib/badline/drive/serial_lines.rb +0 -73
  387. data/lib/badline/drive/sleep.rb +0 -112
  388. data/lib/badline/drive/vias.rb +0 -84
  389. data/lib/badline/drive/watch.rb +0 -150
  390. data/lib/badline/drive.rb +0 -11
  391. data/lib/badline/drive1541/bus.rb +0 -86
  392. data/lib/badline/drive1541/byte_ready.rb +0 -48
  393. data/lib/badline/drive1541/cpu.rb +0 -11
  394. data/lib/badline/drive1541/disk.rb +0 -318
  395. data/lib/badline/drive1541/disk_state.rb +0 -94
  396. data/lib/badline/drive1541/disk_via.rb +0 -36
  397. data/lib/badline/drive1541/gcr.rb +0 -57
  398. data/lib/badline/drive1541/mechanism.rb +0 -313
  399. data/lib/badline/drive1541/mechanism_state.rb +0 -68
  400. data/lib/badline/drive1541/rotation.rb +0 -121
  401. data/lib/badline/drive1541/sector_reader.rb +0 -76
  402. data/lib/badline/drive1541/serial_port.rb +0 -18
  403. data/lib/badline/drive1541/track.rb +0 -98
  404. data/lib/badline/drive1541.rb +0 -111
  405. data/lib/badline/drive1571/bus.rb +0 -111
  406. data/lib/badline/drive1571/cpu.rb +0 -11
  407. data/lib/badline/drive1571/serial_port.rb +0 -37
  408. data/lib/badline/drive1571/serial_via.rb +0 -25
  409. data/lib/badline/drive1571/wd1770.rb +0 -120
  410. data/lib/badline/drive1571.rb +0 -175
  411. data/lib/badline/drive1581/bus.rb +0 -137
  412. data/lib/badline/drive1581/cpu.rb +0 -11
  413. data/lib/badline/drive1581/disk.rb +0 -135
  414. data/lib/badline/drive1581/disk_state.rb +0 -87
  415. data/lib/badline/drive1581/mechanism.rb +0 -117
  416. data/lib/badline/drive1581/serial_port.rb +0 -52
  417. data/lib/badline/drive1581/slot.rb +0 -78
  418. data/lib/badline/drive1581/track.rb +0 -100
  419. data/lib/badline/drive1581/track_bytes.rb +0 -75
  420. data/lib/badline/drive1581/wd1772/registers.rb +0 -89
  421. data/lib/badline/drive1581/wd1772/sector_writes.rb +0 -73
  422. data/lib/badline/drive1581/wd1772/sectors.rb +0 -150
  423. data/lib/badline/drive1581/wd1772/state.rb +0 -66
  424. data/lib/badline/drive1581/wd1772/stepping.rb +0 -109
  425. data/lib/badline/drive1581/wd1772/tracks.rb +0 -125
  426. data/lib/badline/drive1581/wd1772/turn.rb +0 -73
  427. data/lib/badline/drive1581/wd1772.rb +0 -216
  428. data/lib/badline/drive1581.rb +0 -233
  429. data/lib/badline/iec_bus.rb +0 -159
  430. data/lib/badline/instruction.rb +0 -334
  431. data/lib/badline/instruction_set/arithmetic.rb +0 -114
  432. data/lib/badline/instruction_set/bitwise.rb +0 -126
  433. data/lib/badline/instruction_set/branch.rb +0 -79
  434. data/lib/badline/instruction_set/flag.rb +0 -63
  435. data/lib/badline/instruction_set/illegal.rb +0 -270
  436. data/lib/badline/instruction_set/inc_dec.rb +0 -69
  437. data/lib/badline/instruction_set/stack.rb +0 -52
  438. data/lib/badline/instruction_set/transfer.rb +0 -137
  439. data/lib/badline/instruction_set.rb +0 -55
  440. data/lib/badline/interrupts.rb +0 -104
  441. data/lib/badline/joystick.rb +0 -25
  442. data/lib/badline/kernal_trap/channel.rb +0 -181
  443. data/lib/badline/keyboard.rb +0 -112
  444. data/lib/badline/ram_expansion/banking.rb +0 -30
  445. data/lib/badline/ram_expansion/plus256k.rb +0 -54
  446. data/lib/badline/ram_expansion/plus60k.rb +0 -43
  447. data/lib/badline/ram_expansion/unexpanded.rb +0 -28
  448. data/lib/badline/ram_expansion.rb +0 -21
  449. data/lib/badline/reu/dma/saved_state.rb +0 -50
  450. data/lib/badline/reu/dma.rb +0 -273
  451. data/lib/badline/reu/ram.rb +0 -107
  452. data/lib/badline/reu/saved_state.rb +0 -80
  453. data/lib/badline/reu/trigger.rb +0 -32
  454. data/lib/badline/reu.rb +0 -289
  455. data/lib/badline/sid/catch_up.rb +0 -120
  456. data/lib/badline/sid/decimator.rb +0 -64
  457. data/lib/badline/sid/envelope/state.rb +0 -68
  458. data/lib/badline/sid/envelope.rb +0 -239
  459. data/lib/badline/sid/filter.rb +0 -263
  460. data/lib/badline/sid/voice.rb +0 -77
  461. data/lib/badline/sid/waveform/combined.rb +0 -126
  462. data/lib/badline/sid/waveform/fast_forward.rb +0 -105
  463. data/lib/badline/sid/waveform/noise_writeback.rb +0 -122
  464. data/lib/badline/sid/waveform/state.rb +0 -66
  465. data/lib/badline/sid/waveform.rb +0 -305
  466. data/lib/badline/sid.rb +0 -303
  467. data/lib/badline/time_of_day.rb +0 -228
  468. data/lib/badline/traps.rb +0 -19
  469. data/lib/badline/via/control_lines.rb +0 -122
  470. data/lib/badline/via/fast_forward.rb +0 -53
  471. data/lib/badline/via/interrupt_register.rb +0 -67
  472. data/lib/badline/via/shift_register.rb +0 -180
  473. data/lib/badline/via/state.rb +0 -42
  474. data/lib/badline/via/timer1.rb +0 -131
  475. data/lib/badline/via/timer2.rb +0 -133
  476. data/lib/badline/via.rb +0 -266
  477. data/lib/badline/vic/bank.rb +0 -133
  478. data/lib/badline/vic/border_mask.rb +0 -86
  479. data/lib/badline/vic/collisions.rb +0 -115
  480. data/lib/badline/vic/color_patches.rb +0 -47
  481. data/lib/badline/vic/display_state.rb +0 -185
  482. data/lib/badline/vic/graphics_mode.rb +0 -164
  483. data/lib/badline/vic/graphics_shifter.rb +0 -207
  484. data/lib/badline/vic/register_log.rb +0 -81
  485. data/lib/badline/vic/registers.rb +0 -195
  486. data/lib/badline/vic/sequencer.rb +0 -275
  487. data/lib/badline/vic/sequencer_output.rb +0 -116
  488. data/lib/badline/vic/sequencer_state.rb +0 -89
  489. data/lib/badline/vic/sprite/internal_bus.rb +0 -68
  490. data/lib/badline/vic/sprite/saved_state.rb +0 -64
  491. data/lib/badline/vic/sprite/shifter.rb +0 -146
  492. data/lib/badline/vic/sprite/timing.rb +0 -56
  493. data/lib/badline/vic/sprite.rb +0 -337
  494. data/lib/badline/vic/sprites.rb +0 -282
  495. data/lib/badline/vic/sprites_state.rb +0 -57
  496. data/lib/badline/vic.rb +0 -852
  497. data/lib/badline/vic20/sound/output.rb +0 -83
  498. data/lib/badline/vic20/sound.rb +0 -233
  499. data/lib/badline/z80/arithmetic.rb +0 -117
  500. data/lib/badline/z80/bit_page.rb +0 -55
  501. data/lib/badline/z80/block_io.rb +0 -58
  502. data/lib/badline/z80/block_transfers.rb +0 -59
  503. data/lib/badline/z80/bus_cycles.rb +0 -111
  504. data/lib/badline/z80/core.rb +0 -113
  505. data/lib/badline/z80/exchanges.rb +0 -50
  506. data/lib/badline/z80/extended_page.rb +0 -89
  507. data/lib/badline/z80/flags.rb +0 -37
  508. data/lib/badline/z80/interrupt_acceptance.rb +0 -46
  509. data/lib/badline/z80/jumps.rb +0 -82
  510. data/lib/badline/z80/loads.rb +0 -98
  511. data/lib/badline/z80/main_page.rb +0 -134
  512. data/lib/badline/z80/registers.rb +0 -120
  513. data/lib/badline/z80/saved_state.rb +0 -69
  514. data/lib/badline/z80/shifts.rb +0 -64
  515. data/lib/badline/z80.rb +0 -11
  516. /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
@@ -116,7 +116,7 @@ module Badline
116
116
  cycles
117
117
  end
118
118
 
119
- def clock_hz = @tune.ntsc? ? NTSC_CLOCK_HZ : TimeOfDay::CLOCK_HZ
119
+ def clock_hz = @tune.ntsc? ? NTSC_CLOCK_HZ : Region::PAL.clock_hz
120
120
 
121
121
  private
122
122
 
@@ -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
  # host holds. A cartridge is already in the port, built from its setup.
12
12
  def save_state(out)
13
13
  out.marker("C128 BUS")
14
- out.int(@port_ddr).int(@port_out).int(@port_floating).int(@address).int(@data)
14
+ out.int(@cpu_port.ddr).int(@cpu_port.data).int(@cpu_port.floating).int(@address).int(@data)
15
15
  @mmu.save_state(out)
16
16
  @ram.save_state(out)
17
17
  @color_lines.color_ram(0).save_state(out)
@@ -27,9 +27,9 @@ module Badline
27
27
 
28
28
  def load_state(input)
29
29
  input.marker("C128 BUS")
30
- @port_ddr = input.int
31
- @port_out = input.int
32
- @port_floating = input.int
30
+ ddr = input.int
31
+ data = input.int
32
+ floating = input.int
33
33
  @address = input.int
34
34
  @data = input.int
35
35
  @mmu.load_state(input)
@@ -38,7 +38,7 @@ module Badline
38
38
  @color_lines.color_ram(1).load_state(input)
39
39
  @cartridge&.load_state(input)
40
40
  @datasette.load_state(input)
41
- @io_port.value = port_value
41
+ @cpu_port.load(ddr, data, floating)
42
42
  update_overlays!
43
43
  @vic.load_state(input)
44
44
  @control_ports.extra_rows = 0xf8 | @vic.extra_keyboard_lines
@@ -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
@@ -47,11 +47,10 @@ module Badline
47
47
  PORT_PULLUPS = 0b0001_0111
48
48
  PORT_FLOATING = 0b1000_1000
49
49
  CAPS_LOCK = 0b0100_0000
50
- TAPE_SENSE = 0b0001_0000
51
50
 
52
- # 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
53
52
  # banks. The C128's own DRAMs' pattern is unmeasured.
54
- 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
55
54
 
56
55
  # The VIC's write side: a write to $D02F also drives the extra
57
56
  # keyboard lines K0-K2 onto the keyboard's rows 8-10.
@@ -126,9 +125,6 @@ module Badline
126
125
  # KERNAL and the character ROM's C128 set.
127
126
  attr_reader :basic_low_rom, :basic_high_rom, :editor_rom, :c128_kernal_rom, :c128_character_rom
128
127
 
129
- # Whether CAPS LOCK is down, holding P6 low.
130
- attr_reader :caps_lock
131
-
132
128
  # The chips +model+, a Model::Profile, names, with the SID
133
129
  # +sid_model+. +mode+ is the mode the MMU resets into.
134
130
  def initialize(model, sid_model: model.sid_model, mode: :c64)
@@ -139,7 +135,6 @@ module Badline
139
135
  @mmu = MMU.new(mode)
140
136
  @cartridge = nil
141
137
  @debug_page = nil
142
- @caps_lock = false
143
138
 
144
139
  load_roms
145
140
  load_c128_roms
@@ -148,22 +143,21 @@ module Badline
148
143
  @on_mode_change = nil
149
144
  plug_chips(model, sid_model)
150
145
 
151
- @datasette = Datasette.new
146
+ @datasette = Badline::Drives::Datasette.new
152
147
  @datasette.on_flag { @cia1.flag! }
153
- @datasette.on_sense_change { @io_port.value = port_value }
148
+ @datasette.on_sense_change { @cpu_port.refresh }
154
149
 
155
150
  @color_lines = ColorLines.new(@vic, @cia2, character_rom, @c128_character_rom)
156
151
  @color_ram = @color_lines.color_ram(1)
157
152
  build_z80_pages
158
153
  @vic_writes = VICWrites.new(@vic, @control_ports)
159
- @open_bus = AddressBus::OpenBus.new(@vic)
154
+ @open_bus = C64::Bus::OpenBus.new(@vic)
160
155
  @configuration_reads = ConfigurationPage.new(@mmu, @open_bus)
161
156
  @configuration_writes = ConfigurationPage.new(@mmu, @open_bus)
162
157
 
163
- @port_ddr = 0x00
164
- @port_out = 0x00
165
- @port_floating = 0x00
166
- @io_port = PortStatus.new(%i[basic kernal io tape_out tape_switch tape_motor], value: port_value)
158
+ @cpu_port = Chips::CPU::Port.new(@datasette, pullups: PORT_PULLUPS, floating: PORT_FLOATING,
159
+ caps_lock: CAPS_LOCK)
160
+ @io_port = @cpu_port.status
167
161
 
168
162
  @read_pages = Array.new(256)
169
163
  @write_pages = Array.new(256)
@@ -171,6 +165,7 @@ module Badline
171
165
  @data = 0
172
166
  @io_mapped = false
173
167
  @mmu.on_change { update_overlays! }
168
+ @cpu_port.on_change { update_overlays! }
174
169
  update_overlays!
175
170
  end
176
171
 
@@ -191,19 +186,19 @@ module Badline
191
186
  @ram.clear!(RAM_POWER_ON)
192
187
  end
193
188
 
194
- # The RES line clears the port's direction and output registers and
195
- # resets the MMU. The port's floating bit keeps its charge.
189
+ # The RES line resets the MMU and clears the port's direction and
190
+ # output registers. The port's floating bit keeps its charge.
196
191
  def reset!
197
- @port_ddr = 0x00
198
- @port_out = 0x00
199
192
  @mmu.reset!
200
- update_port!
193
+ @cpu_port.reset!
201
194
  end
202
195
 
196
+ # Whether CAPS LOCK is down, holding P6 low.
197
+ def caps_lock = @cpu_port.caps_lock
198
+
203
199
  # Holds CAPS LOCK down, or lets it up.
204
200
  def caps_lock=(down)
205
- @caps_lock = down
206
- @io_port.value = port_value
201
+ @cpu_port.caps_lock = down
207
202
  end
208
203
 
209
204
  # Calls the block whenever MCR bit 6 takes the machine into C64 mode or
@@ -236,7 +231,7 @@ module Badline
236
231
  @data = if addr > 0x01
237
232
  @read_pages[addr >> 8].peek(addr)
238
233
  else
239
- addr.zero? ? @port_ddr : @io_port.value
234
+ addr.zero? ? @cpu_port.ddr : @io_port.value
240
235
  end
241
236
  end
242
237
 
@@ -254,8 +249,7 @@ module Badline
254
249
  @data = value
255
250
  if addr < 0x02
256
251
  @write_pages[0].poke(addr, @vic.phi1_data)
257
- addr.zero? ? @port_ddr = value : @port_out = value
258
- update_port!
252
+ addr.zero? ? @cpu_port.write_ddr(value) : @cpu_port.write_data(value)
259
253
  else
260
254
  @write_pages[addr >> 8].poke(addr, value)
261
255
  end
@@ -281,32 +275,17 @@ module Badline
281
275
  end
282
276
 
283
277
  def plug_chips(model, sid_model)
284
- @keyboard = Keyboard.new(matrix: KEYBOARD_MATRIX)
285
- @joystick1 = Joystick.new
286
- @joystick2 = Joystick.new
287
- @control_ports = ControlPorts.new(keyboard: @keyboard, joystick1: @joystick1, joystick2: @joystick2)
288
- @vic = VIC.new(model: model.vic_model, region: @region)
289
- @cia1 = CIA.new(start: 0xdc00, peripheral: @control_ports, model: model.cia_model, region: @region)
290
- @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)
291
285
  @control_ports.port_a_source = @cia1
292
286
  @cia1.on_port_b4_change { |high| @vic.lightpen_level(high) }
293
- @sid = SID.new(model: sid_model, pots: @control_ports)
294
- @vdc = VDC.new(model: model.vdc_model, ram_kb: model.vdc_ram_kb, clock_hz: @region.clock_hz)
295
- end
296
-
297
- def update_port!
298
- driven = @port_ddr & PORT_FLOATING
299
- @port_floating = (@port_floating & ~driven) | (@port_out & driven)
300
- @io_port.value = port_value
301
- @datasette.motor = !@io_port.tape_motor?
302
- update_overlays!
303
- end
304
-
305
- def port_value
306
- input = PORT_PULLUPS | (@port_floating & PORT_FLOATING)
307
- input |= CAPS_LOCK unless @caps_lock
308
- input &= ~TAPE_SENSE if @datasette.sense_low?
309
- (@port_out & @port_ddr) | (input & ~@port_ddr & 0xff)
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)
310
289
  end
311
290
 
312
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