badline 0.15.1 → 0.16.1

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 (136) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +55 -0
  3. data/CLAUDE.md +8 -7
  4. data/README.md +128 -9
  5. data/doc/media.md +9 -0
  6. data/doc/pinned-behaviour.md +67 -0
  7. data/doc/snapshot-format.md +215 -18
  8. data/doc/snapshots.md +55 -0
  9. data/lib/badline/c64/common.rb +1 -1
  10. data/lib/badline/chips/crtc/keyed_state.rb +46 -0
  11. data/lib/badline/chips/crtc.rb +163 -0
  12. data/lib/badline/chips/pia/control_lines.rb +138 -0
  13. data/lib/badline/chips/pia/keyed_parts.rb +56 -0
  14. data/lib/badline/chips/pia.rb +138 -0
  15. data/lib/badline/chips/vic/register_log.rb +1 -4
  16. data/lib/badline/core.rb +3 -0
  17. data/lib/badline/drives/ieee_bus.rb +74 -0
  18. data/lib/badline/drives/model1551/cable.rb +5 -2
  19. data/lib/badline/drives/model1551/tia.rb +13 -34
  20. data/lib/badline/drives/model1551.rb +26 -4
  21. data/lib/badline/drives/model2031/ieee_port.rb +133 -0
  22. data/lib/badline/drives/model2031/keyed_state.rb +66 -0
  23. data/lib/badline/drives/model2031/parts.rb +25 -0
  24. data/lib/badline/drives/model2031.rb +92 -0
  25. data/lib/badline/drives.rb +1 -0
  26. data/lib/badline/frontend/app.rb +1 -1
  27. data/lib/badline/frontend/controls.rb +23 -3
  28. data/lib/badline/frontend/gamepads.rb +10 -3
  29. data/lib/badline/frontend/keys.rb +88 -0
  30. data/lib/badline/frontend/media_slots.rb +1 -0
  31. data/lib/badline/frontend/menu/menu_dialogs.rb +2 -1
  32. data/lib/badline/frontend/menu/menu_media.rb +27 -28
  33. data/lib/badline/frontend/menu/menu_pages.rb +24 -2
  34. data/lib/badline/frontend/menu/menu_ports.rb +22 -1
  35. data/lib/badline/frontend/menu/pause_menu.rb +1 -0
  36. data/lib/badline/frontend/pet_keyboard.rb +124 -0
  37. data/lib/badline/frontend/screens.rb +2 -1
  38. data/lib/badline/frontend/timeline.rb +16 -9
  39. data/lib/badline/frontend.rb +1 -0
  40. data/lib/badline/kernal_trap/dos/writes.rb +3 -1
  41. data/lib/badline/kernal_trap/dos.rb +6 -1
  42. data/lib/badline/kernal_trap/frames.rb +117 -0
  43. data/lib/badline/kernal_trap/ieee.rb +151 -0
  44. data/lib/badline/kernal_trap/ieee_layout.rb +113 -0
  45. data/lib/badline/kernal_trap/keyed_state.rb +4 -4
  46. data/lib/badline/kernal_trap/routine.rb +3 -53
  47. data/lib/badline/kernal_trap/serial.rb +4 -102
  48. data/lib/badline/kernal_trap/steps.rb +64 -0
  49. data/lib/badline/kernal_trap.rb +4 -0
  50. data/lib/badline/machine/keyboard_buffer.rb +8 -0
  51. data/lib/badline/machine/settling.rb +1 -1
  52. data/lib/badline/machine.rb +29 -6
  53. data/lib/badline/media/extensions.rb +5 -2
  54. data/lib/badline/media/pet_media.rb +40 -0
  55. data/lib/badline/media/program.rb +14 -2
  56. data/lib/badline/media/true_drive.rb +19 -6
  57. data/lib/badline/media/vic20_media.rb +2 -2
  58. data/lib/badline/media.rb +41 -17
  59. data/lib/badline/options/family.rb +17 -6
  60. data/lib/badline/options/help.rb +23 -3
  61. data/lib/badline/options/table.rb +22 -4
  62. data/lib/badline/options/validation.rb +84 -5
  63. data/lib/badline/options.rb +47 -16
  64. data/lib/badline/pet/bus/expansion.rb +200 -0
  65. data/lib/badline/pet/bus.rb +222 -0
  66. data/lib/badline/pet/canvas.rb +97 -0
  67. data/lib/badline/pet/cassettes.rb +63 -0
  68. data/lib/badline/pet/characters.rb +32 -0
  69. data/lib/badline/pet/cpu.rb +10 -0
  70. data/lib/badline/pet/crtc_video.rb +155 -0
  71. data/lib/badline/pet/discrete_video.rb +83 -0
  72. data/lib/badline/pet/ieee_drive.rb +76 -0
  73. data/lib/badline/pet/ieee_ports.rb +77 -0
  74. data/lib/badline/pet/ieee_traps.rb +80 -0
  75. data/lib/badline/pet/keyboard_ports.rb +74 -0
  76. data/lib/badline/pet/keyed_modules.rb +88 -0
  77. data/lib/badline/pet/keyed_parts.rb +127 -0
  78. data/lib/badline/pet/keyed_state.rb +42 -0
  79. data/lib/badline/pet/model.rb +163 -0
  80. data/lib/badline/pet/rom_sets.rb +89 -0
  81. data/lib/badline/pet/sound.rb +128 -0
  82. data/lib/badline/pet/via.rb +10 -0
  83. data/lib/badline/pet/via_ports.rb +19 -0
  84. data/lib/badline/pet.rb +244 -0
  85. data/lib/badline/plus4/keyed_state.rb +5 -3
  86. data/lib/badline/plus4/tcbm_drive.rb +14 -0
  87. data/lib/badline/plus4.rb +1 -1
  88. data/lib/badline/roms/README +169 -0
  89. data/lib/badline/roms/dos2031.rom +0 -0
  90. data/lib/badline/roms/pet/basic1.rom +0 -0
  91. data/lib/badline/roms/pet/basic2.rom +0 -0
  92. data/lib/badline/roms/pet/basic4.rom +0 -0
  93. data/lib/badline/roms/pet/characters-din.rom +0 -0
  94. data/lib/badline/roms/pet/characters1.rom +0 -0
  95. data/lib/badline/roms/pet/characters2.rom +0 -0
  96. data/lib/badline/roms/pet/editor1.rom +0 -0
  97. data/lib/badline/roms/pet/editor2-b.rom +0 -0
  98. data/lib/badline/roms/pet/editor2-n.rom +0 -0
  99. data/lib/badline/roms/pet/editor4-40-n-50hz.rom +0 -0
  100. data/lib/badline/roms/pet/editor4-40-n-60hz.rom +0 -0
  101. data/lib/badline/roms/pet/editor4-80-b-50hz-0283.rom +0 -0
  102. data/lib/badline/roms/pet/editor4-80-b-50hz-8296.rom +0 -0
  103. data/lib/badline/roms/pet/editor4-80-b-50hz.rom +0 -0
  104. data/lib/badline/roms/pet/editor4-80-b-60hz.rom +0 -0
  105. data/lib/badline/roms/pet/editor4-b.rom +0 -0
  106. data/lib/badline/roms/pet/editor4-n.rom +0 -0
  107. data/lib/badline/roms/pet/kernal1.rom +0 -0
  108. data/lib/badline/roms/pet/kernal2.rom +0 -0
  109. data/lib/badline/roms/pet/kernal4.rom +0 -0
  110. data/lib/badline/snapshot/container.rb +6 -1
  111. data/lib/badline/snapshot/field_doc/markdown.rb +1 -1
  112. data/lib/badline/snapshot/field_doc.rb +17 -3
  113. data/lib/badline/snapshot/image.rb +28 -10
  114. data/lib/badline/snapshot/pet_setup.rb +88 -0
  115. data/lib/badline/snapshot/storage_setup.rb +7 -1
  116. data/lib/badline/snapshot/vice/pet.rb +117 -0
  117. data/lib/badline/snapshot/vice/pet_cpu.rb +67 -0
  118. data/lib/badline/snapshot/vice/pet_crtc.rb +246 -0
  119. data/lib/badline/snapshot/vice/pet_mem.rb +93 -0
  120. data/lib/badline/snapshot/vice/pet_pias.rb +56 -0
  121. data/lib/badline/snapshot/vice/pet_restore.rb +150 -0
  122. data/lib/badline/snapshot/vice/pet_via.rb +164 -0
  123. data/lib/badline/snapshot/vice.rb +1 -0
  124. data/lib/badline/snapshot.rb +9 -5
  125. data/lib/badline/storage/d80_image.rb +48 -0
  126. data/lib/badline/storage/d82_image.rb +21 -0
  127. data/lib/badline/storage/tap.rb +16 -3
  128. data/lib/badline/storage.rb +2 -0
  129. data/lib/badline/support/pet_checkpoint.rb +38 -0
  130. data/lib/badline/timing.rb +5 -4
  131. data/lib/badline/version.rb +1 -1
  132. data/lib/badline/vic20/attachments.rb +7 -2
  133. data/lib/badline/vic20/bus/keyed_state.rb +5 -4
  134. data/lib/badline/vic20/bus.rb +5 -0
  135. data/lib/badline/vic20.rb +1 -1
  136. metadata +70 -1
@@ -5,8 +5,9 @@ module Badline
5
5
  #
6
6
  # What a front end needs to run a machine's frames and show them: the CPU
7
7
  # clock, the raster's cycles per line and lines per frame, and the
8
- # [left, top, width, height] of the raster it shows, and how many of the
9
- # window's square pixels wide each of its pixels shows. Each machine
10
- # derives it from its region.
11
- Timing = Data.define(:clock_hz, :cycles_per_line, :lines_per_frame, :crop, :pixel_width)
8
+ # [left, top, width, height] of the raster it shows, how many of the
9
+ # window's square pixels wide each of its pixels shows, and how many of
10
+ # its pixels share one window pixel, as an 80-column screen's dots do.
11
+ # Each machine derives it from its region.
12
+ Timing = Data.define(:clock_hz, :cycles_per_line, :lines_per_frame, :crop, :pixel_width, :dots)
12
13
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Badline
4
- VERSION = "0.15.1"
4
+ VERSION = "0.16.1"
5
5
  end
@@ -23,12 +23,17 @@ module Badline
23
23
  # Puts a cartridge's ROM chips, each a CRTFile::Chip with its address
24
24
  # and bytes, into their blocks, and switches the machine off and on,
25
25
  # as a cartridge goes in with the power off. The KERNAL then starts
26
- # the cartridge in BLK5 that signs itself with A0CBM.
27
- def attach_cartridge(chips)
26
+ # the cartridge in BLK5 that signs itself with A0CBM. +name+ is the
27
+ # name it goes by (#cartridge_name).
28
+ def attach_cartridge(chips, name = "")
28
29
  chips.each { |chip| @bus.map_rom(chip.address, chip.data) }
30
+ @bus.cartridge_name = name
29
31
  power_cycle!
30
32
  end
31
33
 
34
+ # The name of the cartridge in the expansion blocks, or an empty one.
35
+ def cartridge_name = @bus.cartridge_name
36
+
32
37
  private
33
38
 
34
39
  # The VIC-20's KERNAL, which the traps stand in for.
@@ -11,9 +11,9 @@ module Badline
11
11
  end
12
12
 
13
13
  # The bytes each side's data lines hold, under `prefix`, and a
14
- # cartridge's ROM chips as rom<N>.start and rom<N>.bytes, in a keyed
15
- # snapshot module (Snapshot::Keyed). The pages are mapped again once
16
- # they are loaded.
14
+ # cartridge's name and its ROM chips as rom<N>.start and rom<N>.bytes,
15
+ # in a keyed snapshot module (Snapshot::Keyed). The pages are mapped
16
+ # again once they are loaded.
17
17
  module KeyedState
18
18
  def save_fields(out, prefix)
19
19
  out.int("#{prefix}data", @data).int("#{prefix}video_data", @video_data)
@@ -28,7 +28,7 @@ module Badline
28
28
  def cartridge? = !@roms.empty?
29
29
 
30
30
  def save_rom_fields(out)
31
- out.int("roms", @roms.length)
31
+ out.text("name", @cartridge_name).int("roms", @roms.length)
32
32
  @roms.each_with_index do |rom, number|
33
33
  out.int("rom#{number}.start", rom.start)
34
34
  rom.save_fields(out, "rom#{number}.bytes")
@@ -37,6 +37,7 @@ module Badline
37
37
 
38
38
  def load_rom_fields(input)
39
39
  @roms = []
40
+ @cartridge_name = input.text("name", "")
40
41
  input.int("roms", 0).times do |number|
41
42
  bytes = input.bytes("rom#{number}.bytes", "".b).bytes
42
43
  @roms << ROM.new(bytes, length: bytes.length, start: input.word("rom#{number}.start", 0))
@@ -160,6 +160,10 @@ module Badline
160
160
  # The last byte on the V-bus.
161
161
  attr_reader :video_data
162
162
 
163
+ # The name of the cartridge whose ROM chips are in the expansion
164
+ # blocks, or an empty one.
165
+ attr_accessor :cartridge_name
166
+
163
167
  # +vic+, +via1+ and +via2+ are the chips in I/O 0, each answering
164
168
  # peek and poke with the CPU's address. +blocks+ names the expansion
165
169
  # blocks that hold RAM (BLOCKS), and +kernal+ the KERNAL ROM's file.
@@ -177,6 +181,7 @@ module Badline
177
181
  @read_pages = Array.new(256, @open_bus)
178
182
  @write_pages = Array.new(256, @open_bus)
179
183
  @roms = []
184
+ @cartridge_name = ""
180
185
  @debug_register = nil
181
186
  @via_write_handler = nil
182
187
  self.blocks = blocks
data/lib/badline/vic20.rb CHANGED
@@ -120,7 +120,7 @@ module Badline
120
120
  blanked = profile.blanked_lines
121
121
  Timing.new(clock_hz: profile.clock_hz, cycles_per_line: profile.cycles_per_line,
122
122
  lines_per_frame: profile.lines_per_frame,
123
- crop: [0, blanked, width, profile.lines_per_frame - blanked], pixel_width: 2)
123
+ crop: [0, blanked, width, profile.lines_per_frame - blanked], pixel_width: 2, dots: 1)
124
124
  end
125
125
 
126
126
  # The RESTORE key pulls VIA 1's CA1 low while it is held. The KERNAL
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.15.1
4
+ version: 0.16.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Inge Jørgensen
@@ -169,6 +169,11 @@ files:
169
169
  - lib/badline/chips/cpu/port.rb
170
170
  - lib/badline/chips/cpu/stack_operations.rb
171
171
  - lib/badline/chips/cpu/traps.rb
172
+ - lib/badline/chips/crtc.rb
173
+ - lib/badline/chips/crtc/keyed_state.rb
174
+ - lib/badline/chips/pia.rb
175
+ - lib/badline/chips/pia/control_lines.rb
176
+ - lib/badline/chips/pia/keyed_parts.rb
172
177
  - lib/badline/chips/sid.rb
173
178
  - lib/badline/chips/sid/catch_up.rb
174
179
  - lib/badline/chips/sid/decimator.rb
@@ -264,6 +269,7 @@ files:
264
269
  - lib/badline/drives/engine/sleep.rb
265
270
  - lib/badline/drives/engine/vias.rb
266
271
  - lib/badline/drives/engine/watch.rb
272
+ - lib/badline/drives/ieee_bus.rb
267
273
  - lib/badline/drives/model1541.rb
268
274
  - lib/badline/drives/model1541/bus.rb
269
275
  - lib/badline/drives/model1541/byte_ready.rb
@@ -308,6 +314,10 @@ files:
308
314
  - lib/badline/drives/model1581/wd1772/stepping.rb
309
315
  - lib/badline/drives/model1581/wd1772/tracks.rb
310
316
  - lib/badline/drives/model1581/wd1772/turn.rb
317
+ - lib/badline/drives/model2031.rb
318
+ - lib/badline/drives/model2031/ieee_port.rb
319
+ - lib/badline/drives/model2031/keyed_state.rb
320
+ - lib/badline/drives/model2031/parts.rb
311
321
  - lib/badline/drives/serial_bus.rb
312
322
  - lib/badline/ffi.rb
313
323
  - lib/badline/frontend.rb
@@ -336,6 +346,7 @@ files:
336
346
  - lib/badline/frontend/pacer.rb
337
347
  - lib/badline/frontend/pad_port.rb
338
348
  - lib/badline/frontend/painter.rb
349
+ - lib/badline/frontend/pet_keyboard.rb
339
350
  - lib/badline/frontend/player/filter_view.rb
340
351
  - lib/badline/frontend/player/info_view.rb
341
352
  - lib/badline/frontend/player/player_commands.rb
@@ -375,12 +386,16 @@ files:
375
386
  - lib/badline/kernal_trap/dos/write_file.rb
376
387
  - lib/badline/kernal_trap/dos/writes.rb
377
388
  - lib/badline/kernal_trap/file_routine.rb
389
+ - lib/badline/kernal_trap/frames.rb
390
+ - lib/badline/kernal_trap/ieee.rb
391
+ - lib/badline/kernal_trap/ieee_layout.rb
378
392
  - lib/badline/kernal_trap/keyed_state.rb
379
393
  - lib/badline/kernal_trap/layout.rb
380
394
  - lib/badline/kernal_trap/load.rb
381
395
  - lib/badline/kernal_trap/routine.rb
382
396
  - lib/badline/kernal_trap/save.rb
383
397
  - lib/badline/kernal_trap/serial.rb
398
+ - lib/badline/kernal_trap/steps.rb
384
399
  - lib/badline/machine.rb
385
400
  - lib/badline/machine/clocking.rb
386
401
  - lib/badline/machine/keyboard_buffer.rb
@@ -391,6 +406,7 @@ files:
391
406
  - lib/badline/media/disk_set.rb
392
407
  - lib/badline/media/extensions.rb
393
408
  - lib/badline/media/not_disk.rb
409
+ - lib/badline/media/pet_media.rb
394
410
  - lib/badline/media/plus4_media.rb
395
411
  - lib/badline/media/program.rb
396
412
  - lib/badline/media/true_drive.rb
@@ -407,6 +423,27 @@ files:
407
423
  - lib/badline/options/option.rb
408
424
  - lib/badline/options/table.rb
409
425
  - lib/badline/options/validation.rb
426
+ - lib/badline/pet.rb
427
+ - lib/badline/pet/bus.rb
428
+ - lib/badline/pet/bus/expansion.rb
429
+ - lib/badline/pet/canvas.rb
430
+ - lib/badline/pet/cassettes.rb
431
+ - lib/badline/pet/characters.rb
432
+ - lib/badline/pet/cpu.rb
433
+ - lib/badline/pet/crtc_video.rb
434
+ - lib/badline/pet/discrete_video.rb
435
+ - lib/badline/pet/ieee_drive.rb
436
+ - lib/badline/pet/ieee_ports.rb
437
+ - lib/badline/pet/ieee_traps.rb
438
+ - lib/badline/pet/keyboard_ports.rb
439
+ - lib/badline/pet/keyed_modules.rb
440
+ - lib/badline/pet/keyed_parts.rb
441
+ - lib/badline/pet/keyed_state.rb
442
+ - lib/badline/pet/model.rb
443
+ - lib/badline/pet/rom_sets.rb
444
+ - lib/badline/pet/sound.rb
445
+ - lib/badline/pet/via.rb
446
+ - lib/badline/pet/via_ports.rb
410
447
  - lib/badline/plus4.rb
411
448
  - lib/badline/plus4/acia.rb
412
449
  - lib/badline/plus4/acia/frames.rb
@@ -437,12 +474,33 @@ files:
437
474
  - lib/badline/roms/dos1551.rom
438
475
  - lib/badline/roms/dos1571.rom
439
476
  - lib/badline/roms/dos1581.rom
477
+ - lib/badline/roms/dos2031.rom
440
478
  - lib/badline/roms/eapi/LICENSE.md
441
479
  - lib/badline/roms/eapi/README
442
480
  - lib/badline/roms/eapi/eapi-am29f040-14
443
481
  - lib/badline/roms/kernal-pet64.rom
444
482
  - lib/badline/roms/kernal-sx64.rom
445
483
  - lib/badline/roms/kernal.rom
484
+ - lib/badline/roms/pet/basic1.rom
485
+ - lib/badline/roms/pet/basic2.rom
486
+ - lib/badline/roms/pet/basic4.rom
487
+ - lib/badline/roms/pet/characters-din.rom
488
+ - lib/badline/roms/pet/characters1.rom
489
+ - lib/badline/roms/pet/characters2.rom
490
+ - lib/badline/roms/pet/editor1.rom
491
+ - lib/badline/roms/pet/editor2-b.rom
492
+ - lib/badline/roms/pet/editor2-n.rom
493
+ - lib/badline/roms/pet/editor4-40-n-50hz.rom
494
+ - lib/badline/roms/pet/editor4-40-n-60hz.rom
495
+ - lib/badline/roms/pet/editor4-80-b-50hz-0283.rom
496
+ - lib/badline/roms/pet/editor4-80-b-50hz-8296.rom
497
+ - lib/badline/roms/pet/editor4-80-b-50hz.rom
498
+ - lib/badline/roms/pet/editor4-80-b-60hz.rom
499
+ - lib/badline/roms/pet/editor4-b.rom
500
+ - lib/badline/roms/pet/editor4-n.rom
501
+ - lib/badline/roms/pet/kernal1.rom
502
+ - lib/badline/roms/pet/kernal2.rom
503
+ - lib/badline/roms/pet/kernal4.rom
446
504
  - lib/badline/roms/plus4/basic.rom
447
505
  - lib/badline/roms/plus4/function-high.rom
448
506
  - lib/badline/roms/plus4/function-low.rom
@@ -474,6 +532,7 @@ files:
474
532
  - lib/badline/snapshot/keyed/report.rb
475
533
  - lib/badline/snapshot/keyed/writer.rb
476
534
  - lib/badline/snapshot/machine_state.rb
535
+ - lib/badline/snapshot/pet_setup.rb
477
536
  - lib/badline/snapshot/plus4_setup.rb
478
537
  - lib/badline/snapshot/storage_setup.rb
479
538
  - lib/badline/snapshot/vic20_setup.rb
@@ -484,6 +543,13 @@ files:
484
543
  - lib/badline/snapshot/vice/fields.rb
485
544
  - lib/badline/snapshot/vice/main_cpu.rb
486
545
  - lib/badline/snapshot/vice/peripherals.rb
546
+ - lib/badline/snapshot/vice/pet.rb
547
+ - lib/badline/snapshot/vice/pet_cpu.rb
548
+ - lib/badline/snapshot/vice/pet_crtc.rb
549
+ - lib/badline/snapshot/vice/pet_mem.rb
550
+ - lib/badline/snapshot/vice/pet_pias.rb
551
+ - lib/badline/snapshot/vice/pet_restore.rb
552
+ - lib/badline/snapshot/vice/pet_via.rb
487
553
  - lib/badline/snapshot/vice/restore.rb
488
554
  - lib/badline/snapshot/vice/reu1764.rb
489
555
  - lib/badline/snapshot/vice/reu_fields.rb
@@ -496,7 +562,9 @@ files:
496
562
  - lib/badline/storage/crt_file.rb
497
563
  - lib/badline/storage/d64_image.rb
498
564
  - lib/badline/storage/d71_image.rb
565
+ - lib/badline/storage/d80_image.rb
499
566
  - lib/badline/storage/d81_image.rb
567
+ - lib/badline/storage/d82_image.rb
500
568
  - lib/badline/storage/disk_image.rb
501
569
  - lib/badline/storage/disk_image/bam.rb
502
570
  - lib/badline/storage/disk_image/catalog.rb
@@ -512,6 +580,7 @@ files:
512
580
  - lib/badline/support.rb
513
581
  - lib/badline/support/c128_checkpoint.rb
514
582
  - lib/badline/support/checkpoint.rb
583
+ - lib/badline/support/pet_checkpoint.rb
515
584
  - lib/badline/support/plus4_checkpoint.rb
516
585
  - lib/badline/support/vic20_checkpoint.rb
517
586
  - lib/badline/timing.rb