badline 0.16.1 → 0.18.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 (256) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +213 -0
  3. data/CLAUDE.md +11 -7
  4. data/CONTRIBUTING.md +7 -1
  5. data/README.md +265 -26
  6. data/doc/media.md +5 -2
  7. data/doc/pinned-behaviour.md +189 -0
  8. data/doc/snapshot-format.md +616 -74
  9. data/doc/snapshots.md +192 -24
  10. data/exe/badline-ruby +5 -0
  11. data/lib/badline/audio/terminal.rb +34 -2
  12. data/lib/badline/c128/keyed_state.rb +2 -0
  13. data/lib/badline/c128.rb +1 -0
  14. data/lib/badline/c64/keyed_state.rb +2 -0
  15. data/lib/badline/c64.rb +1 -0
  16. data/lib/badline/cbm2/acia.rb +10 -0
  17. data/lib/badline/cbm2/bus.rb +263 -0
  18. data/lib/badline/cbm2/cpu.rb +58 -0
  19. data/lib/badline/cbm2/crtc_video.rb +133 -0
  20. data/lib/badline/cbm2/ieee_drive.rb +18 -0
  21. data/lib/badline/cbm2/ieee_layout.rb +69 -0
  22. data/lib/badline/cbm2/ieee_ports.rb +104 -0
  23. data/lib/badline/cbm2/ieee_traps.rb +81 -0
  24. data/lib/badline/cbm2/keyboard_ports.rb +60 -0
  25. data/lib/badline/cbm2/keyed_modules.rb +67 -0
  26. data/lib/badline/cbm2/keyed_state.rb +95 -0
  27. data/lib/badline/cbm2/model.rb +44 -0
  28. data/lib/badline/cbm2/p500/control_ports.rb +80 -0
  29. data/lib/badline/cbm2/p500/ieee_layout.rb +41 -0
  30. data/lib/badline/cbm2/p500/keyed_state.rb +85 -0
  31. data/lib/badline/cbm2/p500/model.rb +39 -0
  32. data/lib/badline/cbm2/p500/pages.rb +57 -0
  33. data/lib/badline/cbm2/p500.rb +264 -0
  34. data/lib/badline/cbm2/sid_page.rb +19 -0
  35. data/lib/badline/cbm2.rb +270 -0
  36. data/lib/badline/{plus4 → chips}/acia/frames.rb +1 -1
  37. data/lib/badline/chips/acia/keyed_state.rb +47 -0
  38. data/lib/badline/chips/acia.rb +307 -0
  39. data/lib/badline/chips/cia/timer.rb +2 -2
  40. data/lib/badline/chips/cpu/instruction_set.rb +1 -1
  41. data/lib/badline/chips/crtc.rb +3 -2
  42. data/lib/badline/chips/m6809/arithmetic.rb +140 -0
  43. data/lib/badline/chips/m6809/bus_steps.rb +223 -0
  44. data/lib/badline/chips/m6809/core.rb +149 -0
  45. data/lib/badline/chips/m6809/indexed.rb +82 -0
  46. data/lib/badline/chips/m6809/interrupts.rb +159 -0
  47. data/lib/badline/chips/m6809/keyed_state.rb +147 -0
  48. data/lib/badline/chips/m6809/opcodes.rb +159 -0
  49. data/lib/badline/chips/m6809/operations.rb +258 -0
  50. data/lib/badline/chips/m6809/plans.rb +143 -0
  51. data/lib/badline/chips/m6809/registers.rb +82 -0
  52. data/lib/badline/chips/m6809/stack.rb +140 -0
  53. data/lib/badline/chips/m6809.rb +13 -0
  54. data/lib/badline/chips/riot/fast_forward.rb +72 -0
  55. data/lib/badline/chips/riot/keyed_parts.rb +69 -0
  56. data/lib/badline/chips/riot/timer.rb +91 -0
  57. data/lib/badline/chips/riot.rb +162 -0
  58. data/lib/badline/chips/rriot/keyed_state.rb +30 -0
  59. data/lib/badline/chips/rriot.rb +134 -0
  60. data/lib/badline/chips/sid/filter.rb +4 -4
  61. data/lib/badline/chips/sid/waveform.rb +6 -6
  62. data/lib/badline/chips/tpi/keyed_state.rb +38 -0
  63. data/lib/badline/chips/tpi.rb +233 -0
  64. data/lib/badline/chips/vic/bank.rb +60 -5
  65. data/lib/badline/chips/vic/sprite.rb +4 -3
  66. data/lib/badline/chips/vic_i/keyed_parts.rb +7 -2
  67. data/lib/badline/chips/vic_i.rb +84 -21
  68. data/lib/badline/data_path.rb +3 -3
  69. data/lib/badline/drives/datasette/keyed_state.rb +9 -1
  70. data/lib/badline/drives/datasette.rb +27 -3
  71. data/lib/badline/drives/ieee_models.rb +54 -0
  72. data/lib/badline/drives/model1001.rb +37 -0
  73. data/lib/badline/drives/model2031.rb +6 -0
  74. data/lib/badline/drives/model4040/disk.rb +62 -0
  75. data/lib/badline/drives/model4040/ip_bus.rb +46 -0
  76. data/lib/badline/drives/model4040/keyed_state.rb +57 -0
  77. data/lib/badline/drives/model4040/mechanism.rb +192 -0
  78. data/lib/badline/drives/model4040/parts.rb +20 -0
  79. data/lib/badline/drives/model4040.rb +179 -0
  80. data/lib/badline/drives/model8050/board.rb +77 -0
  81. data/lib/badline/drives/model8050/disk.rb +163 -0
  82. data/lib/badline/drives/model8050/dos_board.rb +91 -0
  83. data/lib/badline/drives/model8050/fdc_bus.rb +102 -0
  84. data/lib/badline/drives/model8050/idle.rb +181 -0
  85. data/lib/badline/drives/model8050/ieee_port.rb +147 -0
  86. data/lib/badline/drives/model8050/ip_bus.rb +93 -0
  87. data/lib/badline/drives/model8050/keyed_state.rb +163 -0
  88. data/lib/badline/drives/model8050/mechanism.rb +230 -0
  89. data/lib/badline/drives/model8050/parts.rb +37 -0
  90. data/lib/badline/drives/model8050.rb +131 -0
  91. data/lib/badline/drives/model9060/idle.rb +149 -0
  92. data/lib/badline/drives/model9060/keyed_state.rb +123 -0
  93. data/lib/badline/drives/model9060/parts.rb +98 -0
  94. data/lib/badline/drives/model9060/sasi_bus.rb +88 -0
  95. data/lib/badline/drives/model9060/sasi_commands.rb +168 -0
  96. data/lib/badline/drives/model9060/sasi_target.rb +161 -0
  97. data/lib/badline/drives/model9060.rb +195 -0
  98. data/lib/badline/frontend/app.rb +18 -3
  99. data/lib/badline/frontend/boot.rb +4 -3
  100. data/lib/badline/frontend/controls.rb +107 -15
  101. data/lib/badline/frontend/gamepads.rb +3 -3
  102. data/lib/badline/frontend/keys.rb +97 -2
  103. data/lib/badline/frontend/kim1_panel.rb +208 -0
  104. data/lib/badline/frontend/media_slots.rb +8 -1
  105. data/lib/badline/frontend/menu/drive_types.rb +56 -0
  106. data/lib/badline/frontend/menu/menu_dialogs.rb +61 -14
  107. data/lib/badline/frontend/menu/menu_media.rb +47 -14
  108. data/lib/badline/frontend/menu/menu_pages.rb +113 -4
  109. data/lib/badline/frontend/menu/menu_ports.rb +77 -4
  110. data/lib/badline/frontend/menu/pause_menu.rb +6 -2
  111. data/lib/badline/frontend/pet_keyboard.rb +45 -7
  112. data/lib/badline/frontend/screen.rb +1 -1
  113. data/lib/badline/frontend/screens.rb +40 -2
  114. data/lib/badline/frontend/teletype_pane.rb +152 -0
  115. data/lib/badline/frontend/timeline.rb +49 -11
  116. data/lib/badline/frontend.rb +3 -0
  117. data/lib/badline/kernal_trap/dos/disk_commands.rb +80 -0
  118. data/lib/badline/kernal_trap/dos/status.rb +3 -0
  119. data/lib/badline/kernal_trap/dos.rb +18 -5
  120. data/lib/badline/kernal_trap/ieee.rb +4 -2
  121. data/lib/badline/kernal_trap/ieee_layout.rb +95 -43
  122. data/lib/badline/kim1/bus.rb +117 -0
  123. data/lib/badline/kim1/cpu.rb +25 -0
  124. data/lib/badline/kim1/host_terminal.rb +74 -0
  125. data/lib/badline/kim1/key_entry.rb +74 -0
  126. data/lib/badline/kim1/keyed_modules.rb +53 -0
  127. data/lib/badline/kim1/keyed_state.rb +133 -0
  128. data/lib/badline/kim1/panel.rb +176 -0
  129. data/lib/badline/kim1/rriots.rb +28 -0
  130. data/lib/badline/kim1/sound.rb +29 -0
  131. data/lib/badline/kim1/tape.rb +116 -0
  132. data/lib/badline/kim1/teletype.rb +193 -0
  133. data/lib/badline/kim1.rb +190 -0
  134. data/lib/badline/machine/ieee_drives.rb +171 -0
  135. data/lib/badline/machine/keyboard_buffer.rb +20 -3
  136. data/lib/badline/machine/line_sound.rb +122 -0
  137. data/lib/badline/machine/settling.rb +4 -0
  138. data/lib/badline/machine.rb +62 -14
  139. data/lib/badline/media/cbm2_media.rb +29 -0
  140. data/lib/badline/media/extensions.rb +8 -4
  141. data/lib/badline/media/kim1_media.rb +150 -0
  142. data/lib/badline/media/pet_media.rb +3 -1
  143. data/lib/badline/media/program.rb +6 -3
  144. data/lib/badline/media/true_drive.rb +51 -25
  145. data/lib/badline/media.rb +23 -8
  146. data/lib/badline/options/family.rb +108 -6
  147. data/lib/badline/options/help.rb +58 -12
  148. data/lib/badline/options/table.rb +60 -14
  149. data/lib/badline/options/validation.rb +71 -11
  150. data/lib/badline/options.rb +46 -13
  151. data/lib/badline/pet/bus.rb +16 -2
  152. data/lib/badline/pet/cassettes.rb +22 -1
  153. data/lib/badline/pet/ieee_drive.rb +5 -64
  154. data/lib/badline/pet/ieee_ports.rb +7 -0
  155. data/lib/badline/pet/keyboard_ports.rb +9 -2
  156. data/lib/badline/pet/keyed_state.rb +4 -0
  157. data/lib/badline/pet/model.rb +11 -2
  158. data/lib/badline/pet/rom_sets.rb +1 -0
  159. data/lib/badline/pet/sound.rb +5 -105
  160. data/lib/badline/pet/superpet/acia.rb +12 -0
  161. data/lib/badline/pet/superpet/board.rb +221 -0
  162. data/lib/badline/pet/superpet/dongle.rb +81 -0
  163. data/lib/badline/pet/superpet/keyed_modules.rb +63 -0
  164. data/lib/badline/pet/superpet/keyed_parts.rb +76 -0
  165. data/lib/badline/pet/superpet/m6809.rb +32 -0
  166. data/lib/badline/pet/superpet/waterloo_traps.rb +199 -0
  167. data/lib/badline/pet/superpet.rb +216 -0
  168. data/lib/badline/pet.rb +33 -6
  169. data/lib/badline/plus4/acia.rb +4 -298
  170. data/lib/badline/plus4/keyed_parts.rb +0 -44
  171. data/lib/badline/plus4/keyed_state.rb +2 -0
  172. data/lib/badline/plus4.rb +2 -0
  173. data/lib/badline/roms/1001/fdc-251257-02a.rom +0 -0
  174. data/lib/badline/roms/4040/dos-1.2.rom +0 -0
  175. data/lib/badline/roms/4040/dos-2.1-rev.rom +0 -0
  176. data/lib/badline/roms/4040/dos-2.1.rom +0 -0
  177. data/lib/badline/roms/4040/fdc-901466-02.rom +0 -0
  178. data/lib/badline/roms/4040/fdc-901466-04.rom +0 -0
  179. data/lib/badline/roms/8050/dos-2.7.rom +0 -0
  180. data/lib/badline/roms/8050/fdc-901869-01.rom +0 -0
  181. data/lib/badline/roms/8050/fdc-901885-04.rom +0 -0
  182. data/lib/badline/roms/9060/dos-3.0.rom +0 -0
  183. data/lib/badline/roms/9060/sasi-300515-revb.rom +0 -0
  184. data/lib/badline/roms/README +277 -0
  185. data/lib/badline/roms/cbm2/basic128-02b.rom +0 -0
  186. data/lib/badline/roms/cbm2/basic128.rom +0 -0
  187. data/lib/badline/roms/cbm2/basic256.rom +0 -0
  188. data/lib/badline/roms/cbm2/characters-600.rom +0 -0
  189. data/lib/badline/roms/cbm2/characters-700.rom +0 -0
  190. data/lib/badline/roms/cbm2/kernal-03b.rom +0 -0
  191. data/lib/badline/roms/cbm2/kernal-04a.rom +0 -0
  192. data/lib/badline/roms/cbm2/p500-basic.rom +0 -0
  193. data/lib/badline/roms/cbm2/p500-kernal.rom +0 -0
  194. data/lib/badline/roms/kim1/6530-002.rom +0 -0
  195. data/lib/badline/roms/kim1/6530-003.rom +0 -0
  196. data/lib/badline/roms/pet/characters-superpet.rom +0 -0
  197. data/lib/badline/roms/pet/superpet-a000.rom +0 -0
  198. data/lib/badline/roms/pet/superpet-c000.rom +0 -0
  199. data/lib/badline/roms/pet/superpet-e000-50hz.rom +0 -0
  200. data/lib/badline/roms/pet/superpet-e000.rom +0 -0
  201. data/lib/badline/snapshot/cbm2_setup.rb +53 -0
  202. data/lib/badline/snapshot/container.rb +9 -2
  203. data/lib/badline/snapshot/field_doc/markdown.rb +4 -2
  204. data/lib/badline/snapshot/field_doc.rb +59 -3
  205. data/lib/badline/snapshot/image.rb +65 -9
  206. data/lib/badline/snapshot/kim1_setup.rb +28 -0
  207. data/lib/badline/snapshot/pet_setup.rb +27 -11
  208. data/lib/badline/snapshot/storage_setup.rb +4 -1
  209. data/lib/badline/snapshot/vic20_setup.rb +11 -7
  210. data/lib/badline/snapshot/vice/cbm2.rb +93 -0
  211. data/lib/badline/snapshot/vice/cbm2_acia.rb +75 -0
  212. data/lib/badline/snapshot/vice/cbm2_crtc.rb +127 -0
  213. data/lib/badline/snapshot/vice/cbm2_mains.rb +49 -0
  214. data/lib/badline/snapshot/vice/cbm2_mem.rb +75 -0
  215. data/lib/badline/snapshot/vice/cbm2_restore.rb +204 -0
  216. data/lib/badline/snapshot/vice/cbm2_tpi.rb +58 -0
  217. data/lib/badline/snapshot/vice/cias.rb +13 -9
  218. data/lib/badline/snapshot/vice/p500.rb +96 -0
  219. data/lib/badline/snapshot/vice/p500_restore.rb +130 -0
  220. data/lib/badline/snapshot/vice/p500_vicii.rb +166 -0
  221. data/lib/badline/snapshot/vice/pet.rb +20 -10
  222. data/lib/badline/snapshot/vice/pet_cpu.rb +42 -5
  223. data/lib/badline/snapshot/vice/pet_crtc.rb +25 -17
  224. data/lib/badline/snapshot/vice/pet_drive.rb +180 -0
  225. data/lib/badline/snapshot/vice/pet_drive8050.rb +336 -0
  226. data/lib/badline/snapshot/vice/pet_mem.rb +49 -5
  227. data/lib/badline/snapshot/vice/pet_restore.rb +100 -7
  228. data/lib/badline/snapshot/vice/pet_via.rb +6 -5
  229. data/lib/badline/snapshot/vice/sid_registers.rb +2 -1
  230. data/lib/badline/snapshot/vice/vicii_import.rb +10 -6
  231. data/lib/badline/snapshot/vice.rb +3 -0
  232. data/lib/badline/snapshot.rb +15 -3
  233. data/lib/badline/status.rb +30 -30
  234. data/lib/badline/storage/crt_file.rb +7 -1
  235. data/lib/badline/storage/d64_image.rb +7 -0
  236. data/lib/badline/storage/d67_image.rb +55 -0
  237. data/lib/badline/storage/d80_image.rb +17 -1
  238. data/lib/badline/storage/d81_image.rb +14 -0
  239. data/lib/badline/storage/d90_image.rb +180 -0
  240. data/lib/badline/storage/disk_image/bam.rb +18 -3
  241. data/lib/badline/storage/disk_image/formatting.rb +69 -0
  242. data/lib/badline/storage/disk_image/writing.rb +37 -2
  243. data/lib/badline/storage/disk_image.rb +2 -0
  244. data/lib/badline/storage/kim_tape.rb +254 -0
  245. data/lib/badline/storage/papertape.rb +90 -0
  246. data/lib/badline/storage.rb +5 -0
  247. data/lib/badline/support/cbm2_checkpoint.rb +48 -0
  248. data/lib/badline/support/kim1_checkpoint.rb +41 -0
  249. data/lib/badline/support/p500_checkpoint.rb +35 -0
  250. data/lib/badline/support/superpet_checkpoint.rb +35 -0
  251. data/lib/badline/version.rb +1 -1
  252. data/lib/badline/vic20/keyed_modules.rb +6 -3
  253. data/lib/badline/vic20/keyed_state.rb +6 -4
  254. data/lib/badline/vic20.rb +26 -12
  255. data/lib/badline.rb +2 -0
  256. metadata +148 -2
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "pet_checkpoint"
4
+
5
+ module Badline
6
+ module Support
7
+ # A Checkpoint of a SuperPET: the PET's components (PETCheckpoint), the
8
+ # board's latches and bank RAM, the 6702, the ACIA, the 6809 with
9
+ # whether it has the bus, and the traps on the Waterloo ROM's IEEE-488
10
+ # routines, empty without a disk on device 8.
11
+ module SuperPETCheckpoint
12
+ COMPONENTS = (PETCheckpoint::COMPONENTS + %w[board dongle acia m6809 waterloo]).freeze
13
+
14
+ def self.take(machine)
15
+ pet = PETCheckpoint.take(machine)
16
+ board = machine.board
17
+ dongle = machine.dongle
18
+ acia = machine.acia
19
+ Checkpoint.new(machine.cycles, pet.digests + [
20
+ Checkpoint.fnv1a([board.bank_latch, board.system_latch, board.socket, *board.cells]),
21
+ Checkpoint.fnv1a(dongle.registers + [dongle.latch, dongle.shift_at]),
22
+ Checkpoint.fnv1a([acia.command, acia.control, acia.status, acia.due]),
23
+ Checkpoint.fnv1a(m6809_state(machine.m6809) + [machine.m6809_running? ? 1 : 0]),
24
+ Checkpoint.fnv1a(machine.waterloo_traps&.state || [])
25
+ ], COMPONENTS)
26
+ end
27
+
28
+ def self.m6809_state(cpu)
29
+ [cpu.a, cpu.b, cpu.x, cpu.y, cpu.u, cpu.s, cpu.pc, cpu.dp, cpu.cc, cpu.cycles]
30
+ end
31
+
32
+ def self.parse(line) = Checkpoint.parse(line, COMPONENTS)
33
+ end
34
+ end
35
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Badline
4
- VERSION = "0.16.1"
4
+ VERSION = "0.18.0"
5
5
  end
@@ -28,7 +28,7 @@ module Badline
28
28
  end
29
29
 
30
30
  # Raises Snapshot::FormatError for the modules of a VIC-20 with
31
- # another RAM expansion.
31
+ # another RAM expansion or of another model.
32
32
  def load_modules(modules)
33
33
  machine = modules.machine
34
34
  check_snapshot_setup(Snapshot::Vic20Setup.read_fields(machine))
@@ -62,9 +62,12 @@ module Badline
62
62
  end
63
63
 
64
64
  def check_snapshot_setup(setup)
65
- return if setup.ram == @ram_configuration
65
+ unless setup.ram == @ram_configuration
66
+ raise Snapshot::FormatError, "the snapshot is of a VIC-20 with #{setup.ram} RAM, not #{@ram_configuration}"
67
+ end
68
+ return if setup.model == @model
66
69
 
67
- raise Snapshot::FormatError, "the snapshot is of a VIC-20 with #{setup.ram} RAM, not #{@ram_configuration}"
70
+ raise Snapshot::FormatError, "the snapshot is of a #{setup.model.upcase} VIC-20, not a #{@model.upcase} one"
68
71
  end
69
72
  end
70
73
 
@@ -3,9 +3,9 @@
3
3
  module Badline
4
4
  class Vic20
5
5
  # The machine's own fields in a keyed snapshot module (Snapshot::Keyed,
6
- # BL-MACHINE): the family, its RAM expansion by name, the cycle count,
7
- # the RESTORE key's NMI, and the host's typing still to feed and on_init
8
- # handlers still to run under host.*.
6
+ # BL-MACHINE): the family, its RAM expansion and model by name, the
7
+ # cycle count, the RESTORE key's NMI, and the host's typing still to
8
+ # feed and on_init handlers still to run under host.*.
9
9
  module KeyedState
10
10
  # How many more on_init handlers the machine a snapshot was taken of had
11
11
  # yet to run than this one has. Nil until the machine is restored.
@@ -20,10 +20,11 @@ module Badline
20
20
 
21
21
  def save_machine_fields(out)
22
22
  out.text("family", "vic20").text("written_by", VERSION)
23
- Snapshot::Vic20Setup.new(ram: @ram_configuration).write_fields(out)
23
+ Snapshot::Vic20Setup.new(ram: @ram_configuration, model: @model).write_fields(out)
24
24
  out.int("cycles", @cycles).bool("nmi_asserted", @nmi_asserted)
25
25
  pending = @pending_keys
26
26
  out.ints("host.pending_keys", pending) if pending
27
+ save_init_keys(out)
27
28
  out.int("host.init_pending", @cycles <= @init_threshold ? @init_handlers.length : 0)
28
29
  end
29
30
 
@@ -32,6 +33,7 @@ module Badline
32
33
  @nmi_asserted = input.bool("nmi_asserted", @nmi_asserted)
33
34
  pending = input.ints("host.pending_keys", [])
34
35
  @pending_keys = pending.empty? ? nil : pending.dup
36
+ load_init_keys(input)
35
37
  @init_handlers_lost = [input.int("host.init_pending", 0) - @init_handlers.length, 0].max
36
38
  end
37
39
 
data/lib/badline/vic20.rb CHANGED
@@ -11,8 +11,8 @@ require "badline/vic20/keyed_state"
11
11
  require "badline/vic20/keyed_modules"
12
12
 
13
13
  module Badline
14
- # The Commodore VIC-20 with the PAL 6561: a 6502 at the VIC's clock, the
15
- # VIC-I and two 6522 VIAs. VIA 1, at $9110, pulls NMI, and VIA 2, at
14
+ # The Commodore VIC-20, with the PAL 6561 or the NTSC 6560: a 6502 at
15
+ # the VIC's clock, the VIC-I and two 6522 VIAs. VIA 1, at $9110, pulls NMI, and VIA 2, at
16
16
  # $9120, pulls IRQ. Nothing else interrupts the CPU, and nothing halts
17
17
  # it: the VIC fetches in the half of the cycle the CPU leaves alone.
18
18
  #
@@ -34,6 +34,14 @@ module Badline
34
34
  # The RAM expansion it was built with, a key of Bus::RAM_CONFIGURATIONS.
35
35
  attr_reader :ram_configuration
36
36
 
37
+ # The model it was built as, one of MODELS.
38
+ attr_reader :model
39
+
40
+ # The models, by xvic's names for its video standards: the PAL one with
41
+ # the 6561 and KERNAL 901486-07, and the NTSC one with the 6560 and
42
+ # KERNAL 901486-06.
43
+ MODELS = %w[pal ntsc].freeze
44
+
37
45
  def ram = @bus.ram
38
46
 
39
47
  # Reads and writes memory as the CPU sees it, through the bus.
@@ -50,10 +58,14 @@ module Badline
50
58
  # No pot device plugs in yet.
51
59
  def control_ports = nil
52
60
 
53
- # +ram+ names the RAM expansion, one of Bus::RAM_CONFIGURATIONS.
54
- def initialize(ram: :unexpanded, debug: false)
61
+ # +ram+ names the RAM expansion, one of Bus::RAM_CONFIGURATIONS, and
62
+ # +model+ the model, one of MODELS.
63
+ def initialize(ram: :unexpanded, model: "pal", debug: false)
55
64
  @ram_configuration = ram
56
- @vic = Chips::VICI.new
65
+ @model = model
66
+ raise ArgumentError, "no VIC-20 model named #{model}" unless MODELS.include?(model)
67
+
68
+ @vic = Chips::VICI.new(model == "ntsc" ? Chips::VICI::NTSC : Chips::VICI::PAL)
57
69
  @keyboard = Input::Keyboard.new(matrix: KeyboardVIAPorts::MATRIX)
58
70
  @joystick1 = Input::Joystick.new
59
71
  @iec_bus = Drives::SerialBus.new
@@ -63,7 +75,8 @@ module Badline
63
75
  keyboard_ports = KeyboardVIAPorts.new(keyboard: @keyboard, joystick: @joystick1)
64
76
  @via2 = Chips::VIA.new(start: 0x9000, peripheral: keyboard_ports)
65
77
  keyboard_ports.connect(@via2)
66
- @bus = Bus.new(vic: @vic, via1: @via1, via2: @via2, blocks: Bus::RAM_CONFIGURATIONS.fetch(ram))
78
+ @bus = Bus.new(vic: @vic, via1: @via1, via2: @via2, blocks: Bus::RAM_CONFIGURATIONS.fetch(ram),
79
+ kernal: "vic20/kernal-#{model}.rom")
67
80
  @vic.connect(@bus)
68
81
  @cpu = CPU.new(@bus, debug:)
69
82
  @cycles = 0
@@ -72,6 +85,7 @@ module Badline
72
85
  @nmi_asserted = false
73
86
  @init_handlers = []
74
87
  @pending_keys = nil
88
+ @init_keys = nil
75
89
  @dos = nil
76
90
  @serial_trap = nil
77
91
  @save_trap = nil
@@ -109,18 +123,18 @@ module Badline
109
123
  # #drain_samples.
110
124
  def sound_source = @sound
111
125
 
112
- # The PAL clock and raster, and the part of the display xvic shows: all
113
- # 284 pixels of a line, from line 28, below the VIC's vertical blank.
114
- # The VIC draws 4 pixels a cycle, half as many as the C64's VIC-II on
115
- # about the same clock, so each pixel shows two window pixels wide, as
116
- # xvic draws them.
126
+ # The VIC's clock and raster, and the part of the display xvic shows:
127
+ # every pixel of a line, from line 28, below the VIC's vertical blank,
128
+ # 284 lines on PAL and 233 on NTSC. The VIC draws 4 pixels a cycle,
129
+ # half as many as the C64's VIC-II on about the same clock, so each
130
+ # pixel shows two window pixels wide, as xvic draws them.
117
131
  def timing
118
132
  profile = @vic.profile
119
133
  width = profile.cycles_per_line * Chips::VICI::PIXELS_PER_CYCLE
120
134
  blanked = profile.blanked_lines
121
135
  Timing.new(clock_hz: profile.clock_hz, cycles_per_line: profile.cycles_per_line,
122
136
  lines_per_frame: profile.lines_per_frame,
123
- crop: [0, blanked, width, profile.lines_per_frame - blanked], pixel_width: 2, dots: 1)
137
+ crop: [0, blanked, width, profile.shown_lines], pixel_width: 2, dots: 1)
124
138
  end
125
139
 
126
140
  # The RESTORE key pulls VIA 1's CA1 low while it is held. The KERNAL
data/lib/badline.rb CHANGED
@@ -3,6 +3,8 @@
3
3
  require "badline/core"
4
4
  require "badline/c128"
5
5
  require "badline/plus4"
6
+ require "badline/cbm2"
7
+ require "badline/kim1"
6
8
  require "badline/options"
7
9
  require "badline/data_path"
8
10
  require "badline/snapshot"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: badline
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.1
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Inge Jørgensen
@@ -140,7 +140,30 @@ files:
140
140
  - lib/badline/c64/reu/ram.rb
141
141
  - lib/badline/c64/reu/trigger.rb
142
142
  - lib/badline/c64/true_drives.rb
143
+ - lib/badline/cbm2.rb
144
+ - lib/badline/cbm2/acia.rb
145
+ - lib/badline/cbm2/bus.rb
146
+ - lib/badline/cbm2/cpu.rb
147
+ - lib/badline/cbm2/crtc_video.rb
148
+ - lib/badline/cbm2/ieee_drive.rb
149
+ - lib/badline/cbm2/ieee_layout.rb
150
+ - lib/badline/cbm2/ieee_ports.rb
151
+ - lib/badline/cbm2/ieee_traps.rb
152
+ - lib/badline/cbm2/keyboard_ports.rb
153
+ - lib/badline/cbm2/keyed_modules.rb
154
+ - lib/badline/cbm2/keyed_state.rb
155
+ - lib/badline/cbm2/model.rb
156
+ - lib/badline/cbm2/p500.rb
157
+ - lib/badline/cbm2/p500/control_ports.rb
158
+ - lib/badline/cbm2/p500/ieee_layout.rb
159
+ - lib/badline/cbm2/p500/keyed_state.rb
160
+ - lib/badline/cbm2/p500/model.rb
161
+ - lib/badline/cbm2/p500/pages.rb
162
+ - lib/badline/cbm2/sid_page.rb
143
163
  - lib/badline/chips.rb
164
+ - lib/badline/chips/acia.rb
165
+ - lib/badline/chips/acia/frames.rb
166
+ - lib/badline/chips/acia/keyed_state.rb
144
167
  - lib/badline/chips/cia.rb
145
168
  - lib/badline/chips/cia/fast_forward.rb
146
169
  - lib/badline/chips/cia/interrupt_register.rb
@@ -171,9 +194,27 @@ files:
171
194
  - lib/badline/chips/cpu/traps.rb
172
195
  - lib/badline/chips/crtc.rb
173
196
  - lib/badline/chips/crtc/keyed_state.rb
197
+ - lib/badline/chips/m6809.rb
198
+ - lib/badline/chips/m6809/arithmetic.rb
199
+ - lib/badline/chips/m6809/bus_steps.rb
200
+ - lib/badline/chips/m6809/core.rb
201
+ - lib/badline/chips/m6809/indexed.rb
202
+ - lib/badline/chips/m6809/interrupts.rb
203
+ - lib/badline/chips/m6809/keyed_state.rb
204
+ - lib/badline/chips/m6809/opcodes.rb
205
+ - lib/badline/chips/m6809/operations.rb
206
+ - lib/badline/chips/m6809/plans.rb
207
+ - lib/badline/chips/m6809/registers.rb
208
+ - lib/badline/chips/m6809/stack.rb
174
209
  - lib/badline/chips/pia.rb
175
210
  - lib/badline/chips/pia/control_lines.rb
176
211
  - lib/badline/chips/pia/keyed_parts.rb
212
+ - lib/badline/chips/riot.rb
213
+ - lib/badline/chips/riot/fast_forward.rb
214
+ - lib/badline/chips/riot/keyed_parts.rb
215
+ - lib/badline/chips/riot/timer.rb
216
+ - lib/badline/chips/rriot.rb
217
+ - lib/badline/chips/rriot/keyed_state.rb
177
218
  - lib/badline/chips/sid.rb
178
219
  - lib/badline/chips/sid/catch_up.rb
179
220
  - lib/badline/chips/sid/decimator.rb
@@ -196,6 +237,8 @@ files:
196
237
  - lib/badline/chips/ted/sound/output.rb
197
238
  - lib/badline/chips/ted/timers.rb
198
239
  - lib/badline/chips/tia.rb
240
+ - lib/badline/chips/tpi.rb
241
+ - lib/badline/chips/tpi/keyed_state.rb
199
242
  - lib/badline/chips/vdc.rb
200
243
  - lib/badline/chips/vdc/keyed_parts.rb
201
244
  - lib/badline/chips/vdc/memory.rb
@@ -270,6 +313,8 @@ files:
270
313
  - lib/badline/drives/engine/vias.rb
271
314
  - lib/badline/drives/engine/watch.rb
272
315
  - lib/badline/drives/ieee_bus.rb
316
+ - lib/badline/drives/ieee_models.rb
317
+ - lib/badline/drives/model1001.rb
273
318
  - lib/badline/drives/model1541.rb
274
319
  - lib/badline/drives/model1541/bus.rb
275
320
  - lib/badline/drives/model1541/byte_ready.rb
@@ -318,6 +363,30 @@ files:
318
363
  - lib/badline/drives/model2031/ieee_port.rb
319
364
  - lib/badline/drives/model2031/keyed_state.rb
320
365
  - lib/badline/drives/model2031/parts.rb
366
+ - lib/badline/drives/model4040.rb
367
+ - lib/badline/drives/model4040/disk.rb
368
+ - lib/badline/drives/model4040/ip_bus.rb
369
+ - lib/badline/drives/model4040/keyed_state.rb
370
+ - lib/badline/drives/model4040/mechanism.rb
371
+ - lib/badline/drives/model4040/parts.rb
372
+ - lib/badline/drives/model8050.rb
373
+ - lib/badline/drives/model8050/board.rb
374
+ - lib/badline/drives/model8050/disk.rb
375
+ - lib/badline/drives/model8050/dos_board.rb
376
+ - lib/badline/drives/model8050/fdc_bus.rb
377
+ - lib/badline/drives/model8050/idle.rb
378
+ - lib/badline/drives/model8050/ieee_port.rb
379
+ - lib/badline/drives/model8050/ip_bus.rb
380
+ - lib/badline/drives/model8050/keyed_state.rb
381
+ - lib/badline/drives/model8050/mechanism.rb
382
+ - lib/badline/drives/model8050/parts.rb
383
+ - lib/badline/drives/model9060.rb
384
+ - lib/badline/drives/model9060/idle.rb
385
+ - lib/badline/drives/model9060/keyed_state.rb
386
+ - lib/badline/drives/model9060/parts.rb
387
+ - lib/badline/drives/model9060/sasi_bus.rb
388
+ - lib/badline/drives/model9060/sasi_commands.rb
389
+ - lib/badline/drives/model9060/sasi_target.rb
321
390
  - lib/badline/drives/serial_bus.rb
322
391
  - lib/badline/ffi.rb
323
392
  - lib/badline/frontend.rb
@@ -332,9 +401,11 @@ files:
332
401
  - lib/badline/frontend/frame_report.rb
333
402
  - lib/badline/frontend/gamepads.rb
334
403
  - lib/badline/frontend/keys.rb
404
+ - lib/badline/frontend/kim1_panel.rb
335
405
  - lib/badline/frontend/machine_window.rb
336
406
  - lib/badline/frontend/media_slots.rb
337
407
  - lib/badline/frontend/menu/confirmation.rb
408
+ - lib/badline/frontend/menu/drive_types.rb
338
409
  - lib/badline/frontend/menu/file_browser.rb
339
410
  - lib/badline/frontend/menu/menu_dialogs.rb
340
411
  - lib/badline/frontend/menu/menu_media.rb
@@ -365,6 +436,7 @@ files:
365
436
  - lib/badline/frontend/screenshot.rb
366
437
  - lib/badline/frontend/snapshots.rb
367
438
  - lib/badline/frontend/sound.rb
439
+ - lib/badline/frontend/teletype_pane.rb
368
440
  - lib/badline/frontend/timeline.rb
369
441
  - lib/badline/input.rb
370
442
  - lib/badline/input/control_ports.rb
@@ -380,6 +452,7 @@ files:
380
452
  - lib/badline/kernal_trap/dos/block_commands.rb
381
453
  - lib/badline/kernal_trap/dos/channel.rb
382
454
  - lib/badline/kernal_trap/dos/channels.rb
455
+ - lib/badline/kernal_trap/dos/disk_commands.rb
383
456
  - lib/badline/kernal_trap/dos/memory.rb
384
457
  - lib/badline/kernal_trap/dos/parameters.rb
385
458
  - lib/badline/kernal_trap/dos/status.rb
@@ -396,15 +469,31 @@ files:
396
469
  - lib/badline/kernal_trap/save.rb
397
470
  - lib/badline/kernal_trap/serial.rb
398
471
  - lib/badline/kernal_trap/steps.rb
472
+ - lib/badline/kim1.rb
473
+ - lib/badline/kim1/bus.rb
474
+ - lib/badline/kim1/cpu.rb
475
+ - lib/badline/kim1/host_terminal.rb
476
+ - lib/badline/kim1/key_entry.rb
477
+ - lib/badline/kim1/keyed_modules.rb
478
+ - lib/badline/kim1/keyed_state.rb
479
+ - lib/badline/kim1/panel.rb
480
+ - lib/badline/kim1/rriots.rb
481
+ - lib/badline/kim1/sound.rb
482
+ - lib/badline/kim1/tape.rb
483
+ - lib/badline/kim1/teletype.rb
399
484
  - lib/badline/machine.rb
400
485
  - lib/badline/machine/clocking.rb
486
+ - lib/badline/machine/ieee_drives.rb
401
487
  - lib/badline/machine/keyboard_buffer.rb
488
+ - lib/badline/machine/line_sound.rb
402
489
  - lib/badline/machine/settling.rb
403
490
  - lib/badline/media.rb
404
491
  - lib/badline/media/boot_disk.rb
492
+ - lib/badline/media/cbm2_media.rb
405
493
  - lib/badline/media/disk_list.rb
406
494
  - lib/badline/media/disk_set.rb
407
495
  - lib/badline/media/extensions.rb
496
+ - lib/badline/media/kim1_media.rb
408
497
  - lib/badline/media/not_disk.rb
409
498
  - lib/badline/media/pet_media.rb
410
499
  - lib/badline/media/plus4_media.rb
@@ -442,11 +531,18 @@ files:
442
531
  - lib/badline/pet/model.rb
443
532
  - lib/badline/pet/rom_sets.rb
444
533
  - lib/badline/pet/sound.rb
534
+ - lib/badline/pet/superpet.rb
535
+ - lib/badline/pet/superpet/acia.rb
536
+ - lib/badline/pet/superpet/board.rb
537
+ - lib/badline/pet/superpet/dongle.rb
538
+ - lib/badline/pet/superpet/keyed_modules.rb
539
+ - lib/badline/pet/superpet/keyed_parts.rb
540
+ - lib/badline/pet/superpet/m6809.rb
541
+ - lib/badline/pet/superpet/waterloo_traps.rb
445
542
  - lib/badline/pet/via.rb
446
543
  - lib/badline/pet/via_ports.rb
447
544
  - lib/badline/plus4.rb
448
545
  - lib/badline/plus4/acia.rb
449
- - lib/badline/plus4/acia/frames.rb
450
546
  - lib/badline/plus4/bus.rb
451
547
  - lib/badline/plus4/cassette_sense.rb
452
548
  - lib/badline/plus4/cpu.rb
@@ -463,12 +559,32 @@ files:
463
559
  - lib/badline/plus4/user_port.rb
464
560
  - lib/badline/region.rb
465
561
  - lib/badline/rom.rb
562
+ - lib/badline/roms/1001/fdc-251257-02a.rom
563
+ - lib/badline/roms/4040/dos-1.2.rom
564
+ - lib/badline/roms/4040/dos-2.1-rev.rom
565
+ - lib/badline/roms/4040/dos-2.1.rom
566
+ - lib/badline/roms/4040/fdc-901466-02.rom
567
+ - lib/badline/roms/4040/fdc-901466-04.rom
568
+ - lib/badline/roms/8050/dos-2.7.rom
569
+ - lib/badline/roms/8050/fdc-901869-01.rom
570
+ - lib/badline/roms/8050/fdc-901885-04.rom
571
+ - lib/badline/roms/9060/dos-3.0.rom
572
+ - lib/badline/roms/9060/sasi-300515-revb.rom
466
573
  - lib/badline/roms/README
467
574
  - lib/badline/roms/basic.rom
468
575
  - lib/badline/roms/c128/basic.rom
469
576
  - lib/badline/roms/c128/character.rom
470
577
  - lib/badline/roms/c128/kernal.rom
471
578
  - lib/badline/roms/c64gs.rom
579
+ - lib/badline/roms/cbm2/basic128-02b.rom
580
+ - lib/badline/roms/cbm2/basic128.rom
581
+ - lib/badline/roms/cbm2/basic256.rom
582
+ - lib/badline/roms/cbm2/characters-600.rom
583
+ - lib/badline/roms/cbm2/characters-700.rom
584
+ - lib/badline/roms/cbm2/kernal-03b.rom
585
+ - lib/badline/roms/cbm2/kernal-04a.rom
586
+ - lib/badline/roms/cbm2/p500-basic.rom
587
+ - lib/badline/roms/cbm2/p500-kernal.rom
472
588
  - lib/badline/roms/character.rom
473
589
  - lib/badline/roms/dos1541.rom
474
590
  - lib/badline/roms/dos1551.rom
@@ -481,10 +597,13 @@ files:
481
597
  - lib/badline/roms/kernal-pet64.rom
482
598
  - lib/badline/roms/kernal-sx64.rom
483
599
  - lib/badline/roms/kernal.rom
600
+ - lib/badline/roms/kim1/6530-002.rom
601
+ - lib/badline/roms/kim1/6530-003.rom
484
602
  - lib/badline/roms/pet/basic1.rom
485
603
  - lib/badline/roms/pet/basic2.rom
486
604
  - lib/badline/roms/pet/basic4.rom
487
605
  - lib/badline/roms/pet/characters-din.rom
606
+ - lib/badline/roms/pet/characters-superpet.rom
488
607
  - lib/badline/roms/pet/characters1.rom
489
608
  - lib/badline/roms/pet/characters2.rom
490
609
  - lib/badline/roms/pet/editor1.rom
@@ -501,6 +620,10 @@ files:
501
620
  - lib/badline/roms/pet/kernal1.rom
502
621
  - lib/badline/roms/pet/kernal2.rom
503
622
  - lib/badline/roms/pet/kernal4.rom
623
+ - lib/badline/roms/pet/superpet-a000.rom
624
+ - lib/badline/roms/pet/superpet-c000.rom
625
+ - lib/badline/roms/pet/superpet-e000-50hz.rom
626
+ - lib/badline/roms/pet/superpet-e000.rom
504
627
  - lib/badline/roms/plus4/basic.rom
505
628
  - lib/badline/roms/plus4/function-high.rom
506
629
  - lib/badline/roms/plus4/function-low.rom
@@ -520,6 +643,7 @@ files:
520
643
  - lib/badline/snapshot.rb
521
644
  - lib/badline/snapshot/c128_setup.rb
522
645
  - lib/badline/snapshot/c64_setup.rb
646
+ - lib/badline/snapshot/cbm2_setup.rb
523
647
  - lib/badline/snapshot/container.rb
524
648
  - lib/badline/snapshot/field_doc.rb
525
649
  - lib/badline/snapshot/field_doc/markdown.rb
@@ -531,6 +655,7 @@ files:
531
655
  - lib/badline/snapshot/keyed/recorder.rb
532
656
  - lib/badline/snapshot/keyed/report.rb
533
657
  - lib/badline/snapshot/keyed/writer.rb
658
+ - lib/badline/snapshot/kim1_setup.rb
534
659
  - lib/badline/snapshot/machine_state.rb
535
660
  - lib/badline/snapshot/pet_setup.rb
536
661
  - lib/badline/snapshot/plus4_setup.rb
@@ -538,14 +663,26 @@ files:
538
663
  - lib/badline/snapshot/vic20_setup.rb
539
664
  - lib/badline/snapshot/vice.rb
540
665
  - lib/badline/snapshot/vice/c64_mem.rb
666
+ - lib/badline/snapshot/vice/cbm2.rb
667
+ - lib/badline/snapshot/vice/cbm2_acia.rb
668
+ - lib/badline/snapshot/vice/cbm2_crtc.rb
669
+ - lib/badline/snapshot/vice/cbm2_mains.rb
670
+ - lib/badline/snapshot/vice/cbm2_mem.rb
671
+ - lib/badline/snapshot/vice/cbm2_restore.rb
672
+ - lib/badline/snapshot/vice/cbm2_tpi.rb
541
673
  - lib/badline/snapshot/vice/cias.rb
542
674
  - lib/badline/snapshot/vice/cias_import.rb
543
675
  - lib/badline/snapshot/vice/fields.rb
544
676
  - lib/badline/snapshot/vice/main_cpu.rb
677
+ - lib/badline/snapshot/vice/p500.rb
678
+ - lib/badline/snapshot/vice/p500_restore.rb
679
+ - lib/badline/snapshot/vice/p500_vicii.rb
545
680
  - lib/badline/snapshot/vice/peripherals.rb
546
681
  - lib/badline/snapshot/vice/pet.rb
547
682
  - lib/badline/snapshot/vice/pet_cpu.rb
548
683
  - lib/badline/snapshot/vice/pet_crtc.rb
684
+ - lib/badline/snapshot/vice/pet_drive.rb
685
+ - lib/badline/snapshot/vice/pet_drive8050.rb
549
686
  - lib/badline/snapshot/vice/pet_mem.rb
550
687
  - lib/badline/snapshot/vice/pet_pias.rb
551
688
  - lib/badline/snapshot/vice/pet_restore.rb
@@ -561,27 +698,36 @@ files:
561
698
  - lib/badline/storage.rb
562
699
  - lib/badline/storage/crt_file.rb
563
700
  - lib/badline/storage/d64_image.rb
701
+ - lib/badline/storage/d67_image.rb
564
702
  - lib/badline/storage/d71_image.rb
565
703
  - lib/badline/storage/d80_image.rb
566
704
  - lib/badline/storage/d81_image.rb
567
705
  - lib/badline/storage/d82_image.rb
706
+ - lib/badline/storage/d90_image.rb
568
707
  - lib/badline/storage/disk_image.rb
569
708
  - lib/badline/storage/disk_image/bam.rb
570
709
  - lib/badline/storage/disk_image/catalog.rb
571
710
  - lib/badline/storage/disk_image/directory.rb
711
+ - lib/badline/storage/disk_image/formatting.rb
572
712
  - lib/badline/storage/disk_image/writing.rb
573
713
  - lib/badline/storage/g64_image.rb
574
714
  - lib/badline/storage/host_directory.rb
715
+ - lib/badline/storage/kim_tape.rb
575
716
  - lib/badline/storage/listing.rb
576
717
  - lib/badline/storage/p00.rb
718
+ - lib/badline/storage/papertape.rb
577
719
  - lib/badline/storage/t64.rb
578
720
  - lib/badline/storage/tap.rb
579
721
  - lib/badline/storage/unavailable.rb
580
722
  - lib/badline/support.rb
581
723
  - lib/badline/support/c128_checkpoint.rb
724
+ - lib/badline/support/cbm2_checkpoint.rb
582
725
  - lib/badline/support/checkpoint.rb
726
+ - lib/badline/support/kim1_checkpoint.rb
727
+ - lib/badline/support/p500_checkpoint.rb
583
728
  - lib/badline/support/pet_checkpoint.rb
584
729
  - lib/badline/support/plus4_checkpoint.rb
730
+ - lib/badline/support/superpet_checkpoint.rb
585
731
  - lib/badline/support/vic20_checkpoint.rb
586
732
  - lib/badline/timing.rb
587
733
  - lib/badline/version.rb