badline 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +72 -1
- data/CLAUDE.md +42 -12
- data/CONTRIBUTING.md +4 -3
- data/README.md +76 -13
- data/doc/media.md +2 -1
- data/doc/pinned-behaviour.md +174 -0
- data/doc/snapshot-format.md +1197 -0
- data/doc/snapshots.md +90 -40
- data/lib/badline/audio/bare_player.rb +46 -17
- data/lib/badline/audio/machine_player.rb +6 -10
- data/lib/badline/audio/renderer.rb +32 -21
- data/lib/badline/c128/banks.rb +7 -6
- data/lib/badline/c128/bus/keyed_state.rb +45 -0
- data/lib/badline/c128/bus.rb +36 -4
- data/lib/badline/c128/drives.rb +6 -25
- data/lib/badline/c128/keyed_modules.rb +117 -0
- data/lib/badline/c128/keyed_state.rb +91 -0
- data/lib/badline/c128/keys.rb +9 -0
- data/lib/badline/c128/mmu.rb +9 -8
- data/lib/badline/c128/mmu_pages.rb +27 -0
- data/lib/badline/c128/modes.rb +19 -9
- data/lib/badline/c128/z80_turns.rb +1 -1
- data/lib/badline/c128.rb +8 -8
- data/lib/badline/c64/attachments.rb +0 -44
- data/lib/badline/c64/banked_ram/plus256k.rb +18 -10
- data/lib/badline/c64/banked_ram/plus60k.rb +8 -6
- data/lib/badline/c64/banked_ram/unexpanded.rb +2 -2
- data/lib/badline/c64/bus/debug_register.rb +32 -0
- data/lib/badline/c64/bus/extra_sids.rb +80 -0
- data/lib/badline/c64/bus/keyed_state.rb +41 -0
- data/lib/badline/c64/bus.rb +3 -1
- data/lib/badline/c64/cartridge/action_replay.rb +6 -15
- data/lib/badline/c64/cartridge/comal80.rb +1 -0
- data/lib/badline/c64/cartridge/dinamic.rb +3 -1
- data/lib/badline/c64/cartridge/easy_flash.rb +0 -15
- data/lib/badline/c64/cartridge/epyx_fastload.rb +0 -8
- data/lib/badline/c64/cartridge/final_cartridge3.rb +1 -12
- data/lib/badline/c64/cartridge/flash.rb +3 -3
- data/lib/badline/c64/cartridge/fun_play.rb +2 -1
- data/lib/badline/c64/cartridge/g_mod2.rb +0 -12
- data/lib/badline/c64/cartridge/game_system.rb +2 -1
- data/lib/badline/c64/cartridge/geo_ram.rb +0 -16
- data/lib/badline/c64/cartridge/kcs_power.rb +0 -8
- data/lib/badline/c64/cartridge/keyed_state.rb +514 -0
- data/lib/badline/c64/cartridge/magic_desk.rb +2 -1
- data/lib/badline/c64/cartridge/ocean.rb +1 -0
- data/lib/badline/c64/cartridge/pagefox.rb +1 -10
- data/lib/badline/c64/cartridge/retro_replay.rb +0 -8
- data/lib/badline/c64/cartridge/rgcd.rb +2 -11
- data/lib/badline/c64/cartridge/super_games.rb +3 -12
- data/lib/badline/c64/cartridge/zaxxon.rb +1 -16
- data/lib/badline/c64/cartridge.rb +4 -30
- data/lib/badline/c64/kernal_traps.rb +28 -25
- data/lib/badline/c64/keyed_modules.rb +115 -0
- data/lib/badline/c64/keyed_state.rb +68 -0
- data/lib/badline/c64/reu/dma.rb +0 -4
- data/lib/badline/c64/reu/keyed_state.rb +140 -0
- data/lib/badline/c64/reu/ram.rb +0 -15
- data/lib/badline/c64/reu.rb +1 -3
- data/lib/badline/c64/true_drives.rb +56 -5
- data/lib/badline/c64.rb +7 -3
- data/lib/badline/chips/cia/interrupt_register.rb +0 -17
- data/lib/badline/chips/cia/keyed_parts.rb +213 -0
- data/lib/badline/chips/cia/serial.rb +0 -4
- data/lib/badline/chips/cia/time_of_day.rb +0 -22
- data/lib/badline/chips/cia/timer.rb +0 -20
- data/lib/badline/chips/cia.rb +2 -2
- data/lib/badline/chips/cpu/core.rb +18 -2
- data/lib/badline/chips/cpu/keyed_state.rb +177 -0
- data/lib/badline/chips/cpu/microcode.rb +16 -0
- data/lib/badline/chips/cpu/port.rb +20 -3
- data/lib/badline/chips/cpu.rb +5 -0
- data/lib/badline/chips/sid/decimator.rb +10 -8
- data/lib/badline/chips/sid/envelope.rb +1 -6
- data/lib/badline/chips/sid/filter.rb +0 -14
- data/lib/badline/chips/sid/keyed_parts.rb +286 -0
- data/lib/badline/chips/sid/voice.rb +0 -10
- data/lib/badline/chips/sid/waveform.rb +0 -2
- data/lib/badline/chips/sid.rb +1 -2
- data/lib/badline/chips/ted/beam.rb +118 -0
- data/lib/badline/chips/ted/fetches.rb +199 -0
- data/lib/badline/chips/ted/keyed_state.rb +156 -0
- data/lib/badline/chips/ted/modes.rb +134 -0
- data/lib/badline/chips/ted/palette.rb +43 -0
- data/lib/badline/chips/ted/picture.rb +182 -0
- data/lib/badline/chips/ted/sound/output.rb +86 -0
- data/lib/badline/chips/ted/sound.rb +284 -0
- data/lib/badline/chips/ted/timers.rb +66 -0
- data/lib/badline/chips/ted.rb +190 -0
- data/lib/badline/chips/tia.rb +61 -0
- data/lib/badline/chips/vdc/keyed_parts.rb +105 -0
- data/lib/badline/chips/vdc/painter.rb +0 -12
- data/lib/badline/chips/vdc/raster.rb +0 -16
- data/lib/badline/chips/vdc/window.rb +0 -9
- data/lib/badline/chips/vdc.rb +1 -2
- data/lib/badline/chips/via/control_lines.rb +0 -15
- data/lib/badline/chips/via/interrupt_register.rb +0 -9
- data/lib/badline/chips/via/keyed_parts.rb +163 -0
- data/lib/badline/chips/via/shift_register.rb +0 -14
- data/lib/badline/chips/via/timer1.rb +0 -13
- data/lib/badline/chips/via/timer2.rb +0 -18
- data/lib/badline/chips/via.rb +1 -2
- data/lib/badline/chips/vic/border_mask.rb +0 -10
- data/lib/badline/chips/vic/collisions.rb +0 -11
- data/lib/badline/chips/vic/color_patches.rb +0 -11
- data/lib/badline/chips/vic/display_state.rb +0 -19
- data/lib/badline/chips/vic/graphics_shifter.rb +0 -4
- data/lib/badline/chips/vic/keyed_parts.rb +228 -0
- data/lib/badline/chips/vic/keyed_sprites.rb +225 -0
- data/lib/badline/chips/vic/keyed_state.rb +102 -0
- data/lib/badline/chips/vic/register_log.rb +0 -18
- data/lib/badline/chips/vic/registers.rb +0 -9
- data/lib/badline/chips/vic/sequencer.rb +0 -2
- data/lib/badline/chips/vic/sprite/internal_bus.rb +0 -11
- data/lib/badline/chips/vic/sprite.rb +0 -2
- data/lib/badline/chips/vic/sprites.rb +0 -3
- data/lib/badline/chips/vic.rb +6 -2
- data/lib/badline/chips/vic_i/keyed_parts.rb +142 -0
- data/lib/badline/chips/vic_i/painter.rb +0 -4
- data/lib/badline/chips/vic_i/sound.rb +38 -46
- data/lib/badline/chips/vic_i.rb +2 -2
- data/lib/badline/chips/z80/core.rb +2 -2
- data/lib/badline/chips/z80/keyed_state.rb +73 -0
- data/lib/badline/chips.rb +10 -0
- data/lib/badline/core.rb +4 -21
- data/lib/badline/drives/datasette/keyed_state.rb +43 -0
- data/lib/badline/drives/datasette.rb +62 -12
- data/lib/badline/drives/engine/core.rb +3 -0
- data/lib/badline/drives/engine/serial_lines.rb +4 -7
- data/lib/badline/drives/model1541/bus.rb +0 -13
- data/lib/badline/drives/model1541/disk.rb +9 -8
- data/lib/badline/drives/model1541/keyed_state.rb +251 -0
- data/lib/badline/drives/model1541/mechanism.rb +0 -2
- data/lib/badline/drives/model1541.rb +1 -2
- data/lib/badline/drives/model1571/bus.rb +0 -13
- data/lib/badline/drives/model1571/keyed_state.rb +108 -0
- data/lib/badline/drives/model1571/wd1770.rb +0 -14
- data/lib/badline/drives/model1571.rb +1 -2
- data/lib/badline/drives/model1581/bus.rb +0 -13
- data/lib/badline/drives/model1581/disk.rb +0 -4
- data/lib/badline/drives/model1581/keyed_state.rb +280 -0
- data/lib/badline/drives/model1581/mechanism.rb +0 -21
- data/lib/badline/drives/model1581/slot.rb +0 -18
- data/lib/badline/drives/model1581/wd1772.rb +0 -2
- data/lib/badline/drives/model1581.rb +2 -2
- data/lib/badline/drives.rb +8 -0
- data/lib/badline/frontend/app.rb +3 -3
- data/lib/badline/frontend/boot.rb +4 -2
- data/lib/badline/frontend/controls.rb +25 -5
- data/lib/badline/frontend/drive_led.rb +44 -21
- data/lib/badline/frontend/keys.rb +14 -2
- data/lib/badline/frontend/media_slots.rb +11 -1
- data/lib/badline/frontend/menu/menu_dialogs.rb +4 -3
- data/lib/badline/frontend/menu/menu_media.rb +13 -3
- data/lib/badline/frontend/menu/menu_pages.rb +8 -8
- data/lib/badline/frontend/menu/menu_ports.rb +13 -1
- data/lib/badline/frontend/screen.rb +33 -12
- data/lib/badline/frontend/screens.rb +2 -1
- data/lib/badline/frontend/snapshots.rb +12 -1
- data/lib/badline/frontend/sound.rb +4 -4
- data/lib/badline/frontend/timeline.rb +43 -12
- data/lib/badline/input/matrix_typist.rb +98 -0
- data/lib/badline/input.rb +1 -0
- data/lib/badline/kernal_trap/chrout.rb +45 -0
- data/lib/badline/kernal_trap/dos/channel.rb +0 -27
- data/lib/badline/kernal_trap/dos/channels.rb +0 -25
- data/lib/badline/kernal_trap/dos/memory.rb +0 -9
- data/lib/badline/kernal_trap/dos/status.rb +0 -8
- data/lib/badline/kernal_trap/dos/write_file.rb +0 -18
- data/lib/badline/kernal_trap/dos.rb +0 -19
- data/lib/badline/kernal_trap/file_routine.rb +4 -4
- data/lib/badline/kernal_trap/keyed_state.rb +150 -0
- data/lib/badline/kernal_trap/layout.rb +75 -11
- data/lib/badline/kernal_trap/load.rb +14 -16
- data/lib/badline/kernal_trap/routine.rb +12 -0
- data/lib/badline/kernal_trap/save.rb +8 -18
- data/lib/badline/kernal_trap/serial.rb +1 -17
- data/lib/badline/kernal_trap.rb +2 -0
- data/lib/badline/machine/keyboard_buffer.rb +49 -0
- data/lib/badline/machine/settling.rb +29 -0
- data/lib/badline/machine.rb +29 -6
- data/lib/badline/media/boot_disk.rb +14 -2
- data/lib/badline/media/extensions.rb +10 -0
- data/lib/badline/media/plus4_media.rb +68 -0
- data/lib/badline/media/program.rb +20 -6
- data/lib/badline/media.rb +33 -12
- data/lib/badline/memory.rb +3 -6
- data/lib/badline/options/family.rb +6 -2
- data/lib/badline/options/help.rb +66 -16
- data/lib/badline/options/table.rb +17 -2
- data/lib/badline/options/validation.rb +26 -2
- data/lib/badline/options.rb +42 -9
- data/lib/badline/plus4/acia.rb +45 -0
- data/lib/badline/plus4/bus.rb +375 -0
- data/lib/badline/plus4/cassette_sense.rb +21 -0
- data/lib/badline/plus4/cpu.rb +10 -0
- data/lib/badline/plus4/cpu_port.rb +93 -0
- data/lib/badline/plus4/keyboard_port.rb +76 -0
- data/lib/badline/plus4/keyed_modules.rb +99 -0
- data/lib/badline/plus4/keyed_parts.rb +143 -0
- data/lib/badline/plus4/keyed_state.rb +41 -0
- data/lib/badline/plus4/model.rb +38 -0
- data/lib/badline/plus4/user_port.rb +31 -0
- data/lib/badline/plus4.rb +240 -0
- data/lib/badline/roms/README +38 -0
- data/lib/badline/roms/plus4/basic.rom +0 -0
- data/lib/badline/roms/plus4/function-high.rom +0 -0
- data/lib/badline/roms/plus4/function-low.rom +0 -0
- data/lib/badline/roms/plus4/kernal-ntsc.rom +0 -0
- data/lib/badline/roms/plus4/kernal-pal.rom +0 -0
- data/lib/badline/snapshot/c128_setup.rb +9 -20
- data/lib/badline/snapshot/c64_setup.rb +28 -24
- data/lib/badline/snapshot/container.rb +6 -0
- data/lib/badline/snapshot/field_doc/markdown.rb +113 -0
- data/lib/badline/snapshot/field_doc.rb +148 -0
- data/lib/badline/snapshot/image.rb +143 -28
- data/lib/badline/snapshot/keyed/cursor.rb +40 -0
- data/lib/badline/snapshot/keyed/modules.rb +66 -0
- data/lib/badline/snapshot/keyed/reader.rb +188 -0
- data/lib/badline/snapshot/keyed/recorder.rb +88 -0
- data/lib/badline/snapshot/keyed/report.rb +26 -0
- data/lib/badline/snapshot/keyed/writer.rb +55 -0
- data/lib/badline/snapshot/keyed.rb +64 -0
- data/lib/badline/snapshot/machine_state.rb +17 -64
- data/lib/badline/snapshot/plus4_setup.rb +39 -0
- data/lib/badline/snapshot/storage_setup.rb +29 -34
- data/lib/badline/snapshot/vic20_setup.rb +6 -15
- data/lib/badline/snapshot/vice/reu1764.rb +2 -2
- data/lib/badline/snapshot/vice.rb +7 -31
- data/lib/badline/snapshot.rb +48 -20
- data/lib/badline/storage/crt_file.rb +3 -1
- data/lib/badline/storage/g64_image.rb +9 -4
- data/lib/badline/storage/tap.rb +57 -20
- data/lib/badline/support/checkpoint.rb +3 -2
- data/lib/badline/support/plus4_checkpoint.rb +42 -0
- data/lib/badline/version.rb +1 -1
- data/lib/badline/vic20/attachments.rb +3 -0
- data/lib/badline/vic20/bus/keyed_state.rb +52 -0
- data/lib/badline/vic20/bus.rb +1 -2
- data/lib/badline/vic20/keyed_modules.rb +73 -0
- data/lib/badline/vic20/keyed_state.rb +45 -0
- data/lib/badline/vic20.rb +5 -5
- data/lib/badline.rb +1 -0
- metadata +75 -42
- data/lib/badline/c128/bus/saved_state.rb +0 -53
- data/lib/badline/c128/saved_state.rb +0 -117
- data/lib/badline/c64/bus/saved_state.rb +0 -68
- data/lib/badline/c64/cartridge/flash/saved_state.rb +0 -40
- data/lib/badline/c64/cartridge/retro_replay/saved_state.rb +0 -47
- data/lib/badline/c64/cartridge/saved_state.rb +0 -63
- data/lib/badline/c64/reu/dma/saved_state.rb +0 -52
- data/lib/badline/c64/reu/saved_state.rb +0 -55
- data/lib/badline/c64/saved_state.rb +0 -112
- data/lib/badline/chips/cia/saved_state.rb +0 -49
- data/lib/badline/chips/cia/serial/saved_state.rb +0 -45
- data/lib/badline/chips/cpu/saved_state.rb +0 -117
- data/lib/badline/chips/sid/envelope/saved_state.rb +0 -70
- data/lib/badline/chips/sid/filter/saved_state.rb +0 -42
- data/lib/badline/chips/sid/saved_state.rb +0 -52
- data/lib/badline/chips/sid/waveform/saved_state.rb +0 -68
- data/lib/badline/chips/vdc/saved_state.rb +0 -36
- data/lib/badline/chips/via/saved_state.rb +0 -44
- data/lib/badline/chips/vic/graphics_shifter/saved_state.rb +0 -40
- data/lib/badline/chips/vic/saved_state.rb +0 -82
- data/lib/badline/chips/vic/sequencer/saved_state.rb +0 -91
- data/lib/badline/chips/vic/sprite/saved_state.rb +0 -66
- data/lib/badline/chips/vic/sprites/saved_state.rb +0 -59
- data/lib/badline/chips/vic_i/painter/saved_state.rb +0 -40
- data/lib/badline/chips/vic_i/saved_state.rb +0 -55
- data/lib/badline/chips/z80/saved_state.rb +0 -71
- data/lib/badline/chrout_trap.rb +0 -43
- data/lib/badline/debug_register.rb +0 -28
- data/lib/badline/drives/datasette/saved_state.rb +0 -37
- data/lib/badline/drives/model1541/disk/saved_state.rb +0 -88
- data/lib/badline/drives/model1541/mechanism/saved_state.rb +0 -72
- data/lib/badline/drives/model1541/saved_state.rb +0 -44
- data/lib/badline/drives/model1571/saved_state.rb +0 -47
- data/lib/badline/drives/model1581/disk/saved_state.rb +0 -89
- data/lib/badline/drives/model1581/saved_state.rb +0 -42
- data/lib/badline/drives/model1581/wd1772/saved_state.rb +0 -68
- data/lib/badline/keyboard_buffer.rb +0 -33
- data/lib/badline/snapshot/setup.rb +0 -31
- data/lib/badline/snapshot/state.rb +0 -179
- data/lib/badline/vic20/bus/saved_state.rb +0 -35
- data/lib/badline/vic20/saved_state.rb +0 -110
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Badline
|
|
4
|
+
class Vic20
|
|
5
|
+
# The whole machine as keyed snapshot modules (Snapshot::Keyed), in the
|
|
6
|
+
# order a load applies them, as C64::KeyedModules: BL-MACHINE with the
|
|
7
|
+
# RAM expansion and the bytes each side's data lines hold under bus.*,
|
|
8
|
+
# the memories, a cartridge's ROM chips, the VIC with its sound, both
|
|
9
|
+
# VIAs, the CPU, the datasette, device 8 through the traps and the true
|
|
10
|
+
# drives.
|
|
11
|
+
module KeyedModules
|
|
12
|
+
def save_modules
|
|
13
|
+
bus = @bus
|
|
14
|
+
sections = [Snapshot::Keyed.section("BL-MACHINE") do |out|
|
|
15
|
+
save_machine_fields(out)
|
|
16
|
+
bus.save_fields(out, "bus.")
|
|
17
|
+
end]
|
|
18
|
+
sections << Snapshot::Keyed.section("BL-RAM") { |out| bus.ram.save_fields(out, "ram") }
|
|
19
|
+
sections << Snapshot::Keyed.section("BL-COLORRAM") { |out| bus.color_ram.save_fields(out, "ram") }
|
|
20
|
+
sections << Snapshot::Keyed.section("BL-CART") { |out| bus.save_rom_fields(out) } if bus.cartridge?
|
|
21
|
+
sections << Snapshot::Keyed.section("BL-CPU") { |out| @cpu.save_fields(out) }
|
|
22
|
+
sections << Snapshot::Keyed.section("BL-VICI") { |out| @vic.save_fields(out) }
|
|
23
|
+
sections << Snapshot::Keyed.section("BL-VIA1") { |out| @via1.save_fields(out) }
|
|
24
|
+
sections << Snapshot::Keyed.section("BL-VIA2") { |out| @via2.save_fields(out) }
|
|
25
|
+
sections << Snapshot::Keyed.section("BL-TAPE") { |out| @datasette.save_fields(out) }
|
|
26
|
+
sections << Snapshot::Keyed.section("BL-TRAPDOS") { |out| save_trap_dos_fields(out) } if mounted?
|
|
27
|
+
save_drive_modules(sections)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Raises Snapshot::FormatError for the modules of a VIC-20 with
|
|
31
|
+
# another RAM expansion.
|
|
32
|
+
def load_modules(modules)
|
|
33
|
+
machine = modules.machine
|
|
34
|
+
check_snapshot_setup(Snapshot::Vic20Setup.read_fields(machine))
|
|
35
|
+
load_machine_fields(machine)
|
|
36
|
+
bus = @bus
|
|
37
|
+
bus.load_fields(machine, "bus.")
|
|
38
|
+
bus.ram.load_fields(modules.required("BL-RAM"), "ram")
|
|
39
|
+
bus.color_ram.load_fields(modules.required("BL-COLORRAM"), "ram")
|
|
40
|
+
bus.load_rom_fields(modules.optional("BL-CART") || Snapshot::Keyed::Reader.new("BL-CART"))
|
|
41
|
+
bus.restored!
|
|
42
|
+
@vic.load_fields(modules.required("BL-VICI"))
|
|
43
|
+
@via1.load_fields(modules.required("BL-VIA1"))
|
|
44
|
+
@via2.load_fields(modules.required("BL-VIA2"))
|
|
45
|
+
@cpu.load_fields(modules.required("BL-CPU"))
|
|
46
|
+
@datasette.load_fields(modules.required("BL-TAPE"))
|
|
47
|
+
trap_dos = modules.optional("BL-TRAPDOS")
|
|
48
|
+
trap_dos ? load_trap_dos_fields(trap_dos, detached: modules.detached?) : unmount
|
|
49
|
+
load_drive_modules(modules)
|
|
50
|
+
modules_restored!
|
|
51
|
+
self
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
private
|
|
55
|
+
|
|
56
|
+
def modules_restored!
|
|
57
|
+
@cpu.restored!
|
|
58
|
+
@vic.restored!
|
|
59
|
+
@via1.restored!
|
|
60
|
+
@via2.restored!
|
|
61
|
+
machine_restored!
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def check_snapshot_setup(setup)
|
|
65
|
+
return if setup.ram == @ram_configuration
|
|
66
|
+
|
|
67
|
+
raise Snapshot::FormatError, "the snapshot is of a VIC-20 with #{setup.ram} RAM, not #{@ram_configuration}"
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
include KeyedModules
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Badline
|
|
4
|
+
class Vic20
|
|
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.*.
|
|
9
|
+
module KeyedState
|
|
10
|
+
# How many more on_init handlers the machine a snapshot was taken of had
|
|
11
|
+
# yet to run than this one has. Nil until the machine is restored.
|
|
12
|
+
attr_reader :init_handlers_lost
|
|
13
|
+
|
|
14
|
+
# Whether a snapshot saves now (Machine::Settling): the CPU between
|
|
15
|
+
# instructions or jammed.
|
|
16
|
+
def settled_for_snapshot? = @cpu.boundary? || @cpu.jammed?
|
|
17
|
+
|
|
18
|
+
# The sound's voices, run up to this cycle.
|
|
19
|
+
def settle_chips_for_snapshot = @sound.catch_up!
|
|
20
|
+
|
|
21
|
+
def save_machine_fields(out)
|
|
22
|
+
out.text("family", "vic20").text("written_by", VERSION)
|
|
23
|
+
Snapshot::Vic20Setup.new(ram: @ram_configuration).write_fields(out)
|
|
24
|
+
out.int("cycles", @cycles).bool("nmi_asserted", @nmi_asserted)
|
|
25
|
+
pending = @pending_keys
|
|
26
|
+
out.ints("host.pending_keys", pending) if pending
|
|
27
|
+
out.int("host.init_pending", @cycles <= @init_threshold ? @init_handlers.length : 0)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def load_machine_fields(input)
|
|
31
|
+
@cycles = input.int("cycles", @cycles)
|
|
32
|
+
@nmi_asserted = input.bool("nmi_asserted", @nmi_asserted)
|
|
33
|
+
pending = input.ints("host.pending_keys", [])
|
|
34
|
+
@pending_keys = pending.empty? ? nil : pending.dup
|
|
35
|
+
@init_handlers_lost = [input.int("host.init_pending", 0) - @init_handlers.length, 0].max
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# The serial bus's lines and the datasette's motor and write line from
|
|
39
|
+
# the VIAs, once they are loaded.
|
|
40
|
+
def machine_restored! = via_written
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
include KeyedState
|
|
44
|
+
end
|
|
45
|
+
end
|
data/lib/badline/vic20.rb
CHANGED
|
@@ -6,9 +6,9 @@ require "badline/vic20/cpu"
|
|
|
6
6
|
require "badline/vic20/keyboard_via_ports"
|
|
7
7
|
require "badline/vic20/port_wiring"
|
|
8
8
|
require "badline/vic20/user_via_ports"
|
|
9
|
-
require "badline/
|
|
10
|
-
require "badline/
|
|
11
|
-
require "badline/vic20/
|
|
9
|
+
require "badline/snapshot/vic20_setup"
|
|
10
|
+
require "badline/vic20/keyed_state"
|
|
11
|
+
require "badline/vic20/keyed_modules"
|
|
12
12
|
|
|
13
13
|
module Badline
|
|
14
14
|
# The Commodore VIC-20 with the PAL 6561: a 6502 at the VIC's clock, the
|
|
@@ -22,11 +22,11 @@ module Badline
|
|
|
22
22
|
# serves disks through the KERNAL traps or a true 1541.
|
|
23
23
|
class Vic20
|
|
24
24
|
include IntegerHelper
|
|
25
|
-
include KeyboardBuffer
|
|
25
|
+
include Machine::KeyboardBuffer
|
|
26
26
|
include Machine::Clocking
|
|
27
|
+
include Machine::Settling
|
|
27
28
|
include Attachments
|
|
28
29
|
include PortWiring
|
|
29
|
-
include SavedState
|
|
30
30
|
|
|
31
31
|
attr_reader :bus, :cpu, :vic, :via1, :via2, :keyboard, :joystick1, :cycles, :init_threshold, :sound,
|
|
32
32
|
:drive1541, :iec_bus, :datasette
|
data/lib/badline.rb
CHANGED
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.
|
|
4
|
+
version: 0.15.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Inge Jørgensen
|
|
@@ -45,6 +45,7 @@ files:
|
|
|
45
45
|
- doc/media.md
|
|
46
46
|
- doc/pinned-behaviour.md
|
|
47
47
|
- doc/sid-player.md
|
|
48
|
+
- doc/snapshot-format.md
|
|
48
49
|
- doc/snapshots.md
|
|
49
50
|
- exe/badline-ruby
|
|
50
51
|
- lib/badline.rb
|
|
@@ -68,18 +69,19 @@ files:
|
|
|
68
69
|
- lib/badline/c128.rb
|
|
69
70
|
- lib/badline/c128/banks.rb
|
|
70
71
|
- lib/badline/c128/bus.rb
|
|
71
|
-
- lib/badline/c128/bus/
|
|
72
|
+
- lib/badline/c128/bus/keyed_state.rb
|
|
72
73
|
- lib/badline/c128/color_lines.rb
|
|
73
74
|
- lib/badline/c128/cpu.rb
|
|
74
75
|
- lib/badline/c128/drives.rb
|
|
75
76
|
- lib/badline/c128/fast_serial.rb
|
|
76
77
|
- lib/badline/c128/io_pages.rb
|
|
78
|
+
- lib/badline/c128/keyed_modules.rb
|
|
79
|
+
- lib/badline/c128/keyed_state.rb
|
|
77
80
|
- lib/badline/c128/keys.rb
|
|
78
81
|
- lib/badline/c128/mmu.rb
|
|
79
82
|
- lib/badline/c128/mmu_pages.rb
|
|
80
83
|
- lib/badline/c128/model.rb
|
|
81
84
|
- lib/badline/c128/modes.rb
|
|
82
|
-
- lib/badline/c128/saved_state.rb
|
|
83
85
|
- lib/badline/c128/z80.rb
|
|
84
86
|
- lib/badline/c128/z80_pages.rb
|
|
85
87
|
- lib/badline/c128/z80_turns.rb
|
|
@@ -91,11 +93,12 @@ files:
|
|
|
91
93
|
- lib/badline/c64/banked_ram/plus60k.rb
|
|
92
94
|
- lib/badline/c64/banked_ram/unexpanded.rb
|
|
93
95
|
- lib/badline/c64/bus.rb
|
|
96
|
+
- lib/badline/c64/bus/debug_register.rb
|
|
94
97
|
- lib/badline/c64/bus/extra_sids.rb
|
|
95
98
|
- lib/badline/c64/bus/fittings.rb
|
|
99
|
+
- lib/badline/c64/bus/keyed_state.rb
|
|
96
100
|
- lib/badline/c64/bus/pla.rb
|
|
97
101
|
- lib/badline/c64/bus/roms.rb
|
|
98
|
-
- lib/badline/c64/bus/saved_state.rb
|
|
99
102
|
- lib/badline/c64/bus/sid_slots.rb
|
|
100
103
|
- lib/badline/c64/cartridge.rb
|
|
101
104
|
- lib/badline/c64/cartridge/action_replay.rb
|
|
@@ -107,22 +110,20 @@ files:
|
|
|
107
110
|
- lib/badline/c64/cartridge/epyx_fastload.rb
|
|
108
111
|
- lib/badline/c64/cartridge/final_cartridge3.rb
|
|
109
112
|
- lib/badline/c64/cartridge/flash.rb
|
|
110
|
-
- lib/badline/c64/cartridge/flash/saved_state.rb
|
|
111
113
|
- lib/badline/c64/cartridge/freezer.rb
|
|
112
114
|
- lib/badline/c64/cartridge/fun_play.rb
|
|
113
115
|
- lib/badline/c64/cartridge/g_mod2.rb
|
|
114
116
|
- lib/badline/c64/cartridge/game_system.rb
|
|
115
117
|
- lib/badline/c64/cartridge/geo_ram.rb
|
|
116
118
|
- lib/badline/c64/cartridge/kcs_power.rb
|
|
119
|
+
- lib/badline/c64/cartridge/keyed_state.rb
|
|
117
120
|
- lib/badline/c64/cartridge/mach5.rb
|
|
118
121
|
- lib/badline/c64/cartridge/magic_desk.rb
|
|
119
122
|
- lib/badline/c64/cartridge/ocean.rb
|
|
120
123
|
- lib/badline/c64/cartridge/pagefox.rb
|
|
121
124
|
- lib/badline/c64/cartridge/retro_replay.rb
|
|
122
|
-
- lib/badline/c64/cartridge/retro_replay/saved_state.rb
|
|
123
125
|
- lib/badline/c64/cartridge/rex_utility.rb
|
|
124
126
|
- lib/badline/c64/cartridge/rgcd.rb
|
|
125
|
-
- lib/badline/c64/cartridge/saved_state.rb
|
|
126
127
|
- lib/badline/c64/cartridge/simons_basic.rb
|
|
127
128
|
- lib/badline/c64/cartridge/standard.rb
|
|
128
129
|
- lib/badline/c64/cartridge/super_games.rb
|
|
@@ -131,20 +132,20 @@ files:
|
|
|
131
132
|
- lib/badline/c64/color_memory.rb
|
|
132
133
|
- lib/badline/c64/common.rb
|
|
133
134
|
- lib/badline/c64/kernal_traps.rb
|
|
135
|
+
- lib/badline/c64/keyed_modules.rb
|
|
136
|
+
- lib/badline/c64/keyed_state.rb
|
|
134
137
|
- lib/badline/c64/reu.rb
|
|
135
138
|
- lib/badline/c64/reu/dma.rb
|
|
136
|
-
- lib/badline/c64/reu/
|
|
139
|
+
- lib/badline/c64/reu/keyed_state.rb
|
|
137
140
|
- lib/badline/c64/reu/ram.rb
|
|
138
|
-
- lib/badline/c64/reu/saved_state.rb
|
|
139
141
|
- lib/badline/c64/reu/trigger.rb
|
|
140
|
-
- lib/badline/c64/saved_state.rb
|
|
141
142
|
- lib/badline/c64/true_drives.rb
|
|
143
|
+
- lib/badline/chips.rb
|
|
142
144
|
- lib/badline/chips/cia.rb
|
|
143
145
|
- lib/badline/chips/cia/fast_forward.rb
|
|
144
146
|
- lib/badline/chips/cia/interrupt_register.rb
|
|
145
|
-
- lib/badline/chips/cia/
|
|
147
|
+
- lib/badline/chips/cia/keyed_parts.rb
|
|
146
148
|
- lib/badline/chips/cia/serial.rb
|
|
147
|
-
- lib/badline/chips/cia/serial/saved_state.rb
|
|
148
149
|
- lib/badline/chips/cia/time_of_day.rb
|
|
149
150
|
- lib/badline/chips/cia/timer.rb
|
|
150
151
|
- lib/badline/chips/cpu.rb
|
|
@@ -162,37 +163,45 @@ files:
|
|
|
162
163
|
- lib/badline/chips/cpu/instruction_set/stack.rb
|
|
163
164
|
- lib/badline/chips/cpu/instruction_set/transfer.rb
|
|
164
165
|
- lib/badline/chips/cpu/interrupts.rb
|
|
166
|
+
- lib/badline/chips/cpu/keyed_state.rb
|
|
165
167
|
- lib/badline/chips/cpu/microcode.rb
|
|
166
168
|
- lib/badline/chips/cpu/operations.rb
|
|
167
169
|
- lib/badline/chips/cpu/port.rb
|
|
168
|
-
- lib/badline/chips/cpu/saved_state.rb
|
|
169
170
|
- lib/badline/chips/cpu/stack_operations.rb
|
|
170
171
|
- lib/badline/chips/cpu/traps.rb
|
|
171
172
|
- lib/badline/chips/sid.rb
|
|
172
173
|
- lib/badline/chips/sid/catch_up.rb
|
|
173
174
|
- lib/badline/chips/sid/decimator.rb
|
|
174
175
|
- lib/badline/chips/sid/envelope.rb
|
|
175
|
-
- lib/badline/chips/sid/envelope/saved_state.rb
|
|
176
176
|
- lib/badline/chips/sid/filter.rb
|
|
177
|
-
- lib/badline/chips/sid/
|
|
178
|
-
- lib/badline/chips/sid/saved_state.rb
|
|
177
|
+
- lib/badline/chips/sid/keyed_parts.rb
|
|
179
178
|
- lib/badline/chips/sid/voice.rb
|
|
180
179
|
- lib/badline/chips/sid/waveform.rb
|
|
181
180
|
- lib/badline/chips/sid/waveform/combined.rb
|
|
182
181
|
- lib/badline/chips/sid/waveform/fast_forward.rb
|
|
183
182
|
- lib/badline/chips/sid/waveform/noise_writeback.rb
|
|
184
|
-
- lib/badline/chips/
|
|
183
|
+
- lib/badline/chips/ted.rb
|
|
184
|
+
- lib/badline/chips/ted/beam.rb
|
|
185
|
+
- lib/badline/chips/ted/fetches.rb
|
|
186
|
+
- lib/badline/chips/ted/keyed_state.rb
|
|
187
|
+
- lib/badline/chips/ted/modes.rb
|
|
188
|
+
- lib/badline/chips/ted/palette.rb
|
|
189
|
+
- lib/badline/chips/ted/picture.rb
|
|
190
|
+
- lib/badline/chips/ted/sound.rb
|
|
191
|
+
- lib/badline/chips/ted/sound/output.rb
|
|
192
|
+
- lib/badline/chips/ted/timers.rb
|
|
193
|
+
- lib/badline/chips/tia.rb
|
|
185
194
|
- lib/badline/chips/vdc.rb
|
|
195
|
+
- lib/badline/chips/vdc/keyed_parts.rb
|
|
186
196
|
- lib/badline/chips/vdc/memory.rb
|
|
187
197
|
- lib/badline/chips/vdc/painter.rb
|
|
188
198
|
- lib/badline/chips/vdc/raster.rb
|
|
189
|
-
- lib/badline/chips/vdc/saved_state.rb
|
|
190
199
|
- lib/badline/chips/vdc/window.rb
|
|
191
200
|
- lib/badline/chips/via.rb
|
|
192
201
|
- lib/badline/chips/via/control_lines.rb
|
|
193
202
|
- lib/badline/chips/via/fast_forward.rb
|
|
194
203
|
- lib/badline/chips/via/interrupt_register.rb
|
|
195
|
-
- lib/badline/chips/via/
|
|
204
|
+
- lib/badline/chips/via/keyed_parts.rb
|
|
196
205
|
- lib/badline/chips/via/shift_register.rb
|
|
197
206
|
- lib/badline/chips/via/timer1.rb
|
|
198
207
|
- lib/badline/chips/via/timer2.rb
|
|
@@ -204,24 +213,21 @@ files:
|
|
|
204
213
|
- lib/badline/chips/vic/display_state.rb
|
|
205
214
|
- lib/badline/chips/vic/graphics_mode.rb
|
|
206
215
|
- lib/badline/chips/vic/graphics_shifter.rb
|
|
207
|
-
- lib/badline/chips/vic/
|
|
216
|
+
- lib/badline/chips/vic/keyed_parts.rb
|
|
217
|
+
- lib/badline/chips/vic/keyed_sprites.rb
|
|
218
|
+
- lib/badline/chips/vic/keyed_state.rb
|
|
208
219
|
- lib/badline/chips/vic/register_log.rb
|
|
209
220
|
- lib/badline/chips/vic/registers.rb
|
|
210
|
-
- lib/badline/chips/vic/saved_state.rb
|
|
211
221
|
- lib/badline/chips/vic/sequencer.rb
|
|
212
|
-
- lib/badline/chips/vic/sequencer/saved_state.rb
|
|
213
222
|
- lib/badline/chips/vic/sequencer_output.rb
|
|
214
223
|
- lib/badline/chips/vic/sprite.rb
|
|
215
224
|
- lib/badline/chips/vic/sprite/internal_bus.rb
|
|
216
|
-
- lib/badline/chips/vic/sprite/saved_state.rb
|
|
217
225
|
- lib/badline/chips/vic/sprite/shifter.rb
|
|
218
226
|
- lib/badline/chips/vic/sprite/timing.rb
|
|
219
227
|
- lib/badline/chips/vic/sprites.rb
|
|
220
|
-
- lib/badline/chips/vic/sprites/saved_state.rb
|
|
221
228
|
- lib/badline/chips/vic_i.rb
|
|
229
|
+
- lib/badline/chips/vic_i/keyed_parts.rb
|
|
222
230
|
- lib/badline/chips/vic_i/painter.rb
|
|
223
|
-
- lib/badline/chips/vic_i/painter/saved_state.rb
|
|
224
|
-
- lib/badline/chips/vic_i/saved_state.rb
|
|
225
231
|
- lib/badline/chips/vic_i/sound.rb
|
|
226
232
|
- lib/badline/chips/vic_i/sound/output.rb
|
|
227
233
|
- lib/badline/chips/vic_i/text_window.rb
|
|
@@ -237,17 +243,16 @@ files:
|
|
|
237
243
|
- lib/badline/chips/z80/flags.rb
|
|
238
244
|
- lib/badline/chips/z80/interrupt_acceptance.rb
|
|
239
245
|
- lib/badline/chips/z80/jumps.rb
|
|
246
|
+
- lib/badline/chips/z80/keyed_state.rb
|
|
240
247
|
- lib/badline/chips/z80/loads.rb
|
|
241
248
|
- lib/badline/chips/z80/main_page.rb
|
|
242
249
|
- lib/badline/chips/z80/registers.rb
|
|
243
|
-
- lib/badline/chips/z80/saved_state.rb
|
|
244
250
|
- lib/badline/chips/z80/shifts.rb
|
|
245
|
-
- lib/badline/chrout_trap.rb
|
|
246
251
|
- lib/badline/core.rb
|
|
247
252
|
- lib/badline/data_path.rb
|
|
248
|
-
- lib/badline/
|
|
253
|
+
- lib/badline/drives.rb
|
|
249
254
|
- lib/badline/drives/datasette.rb
|
|
250
|
-
- lib/badline/drives/datasette/
|
|
255
|
+
- lib/badline/drives/datasette/keyed_state.rb
|
|
251
256
|
- lib/badline/drives/engine.rb
|
|
252
257
|
- lib/badline/drives/engine/core.rb
|
|
253
258
|
- lib/badline/drives/engine/fast_serial.rb
|
|
@@ -263,20 +268,18 @@ files:
|
|
|
263
268
|
- lib/badline/drives/model1541/byte_ready.rb
|
|
264
269
|
- lib/badline/drives/model1541/cpu.rb
|
|
265
270
|
- lib/badline/drives/model1541/disk.rb
|
|
266
|
-
- lib/badline/drives/model1541/disk/saved_state.rb
|
|
267
271
|
- lib/badline/drives/model1541/disk_via.rb
|
|
268
272
|
- lib/badline/drives/model1541/gcr.rb
|
|
273
|
+
- lib/badline/drives/model1541/keyed_state.rb
|
|
269
274
|
- lib/badline/drives/model1541/mechanism.rb
|
|
270
|
-
- lib/badline/drives/model1541/mechanism/saved_state.rb
|
|
271
275
|
- lib/badline/drives/model1541/rotation.rb
|
|
272
|
-
- lib/badline/drives/model1541/saved_state.rb
|
|
273
276
|
- lib/badline/drives/model1541/sector_reader.rb
|
|
274
277
|
- lib/badline/drives/model1541/serial_port.rb
|
|
275
278
|
- lib/badline/drives/model1541/track.rb
|
|
276
279
|
- lib/badline/drives/model1571.rb
|
|
277
280
|
- lib/badline/drives/model1571/bus.rb
|
|
278
281
|
- lib/badline/drives/model1571/cpu.rb
|
|
279
|
-
- lib/badline/drives/model1571/
|
|
282
|
+
- lib/badline/drives/model1571/keyed_state.rb
|
|
280
283
|
- lib/badline/drives/model1571/serial_port.rb
|
|
281
284
|
- lib/badline/drives/model1571/serial_via.rb
|
|
282
285
|
- lib/badline/drives/model1571/wd1770.rb
|
|
@@ -284,16 +287,14 @@ files:
|
|
|
284
287
|
- lib/badline/drives/model1581/bus.rb
|
|
285
288
|
- lib/badline/drives/model1581/cpu.rb
|
|
286
289
|
- lib/badline/drives/model1581/disk.rb
|
|
287
|
-
- lib/badline/drives/model1581/
|
|
290
|
+
- lib/badline/drives/model1581/keyed_state.rb
|
|
288
291
|
- lib/badline/drives/model1581/mechanism.rb
|
|
289
|
-
- lib/badline/drives/model1581/saved_state.rb
|
|
290
292
|
- lib/badline/drives/model1581/serial_port.rb
|
|
291
293
|
- lib/badline/drives/model1581/slot.rb
|
|
292
294
|
- lib/badline/drives/model1581/track.rb
|
|
293
295
|
- lib/badline/drives/model1581/track_bytes.rb
|
|
294
296
|
- lib/badline/drives/model1581/wd1772.rb
|
|
295
297
|
- lib/badline/drives/model1581/wd1772/registers.rb
|
|
296
|
-
- lib/badline/drives/model1581/wd1772/saved_state.rb
|
|
297
298
|
- lib/badline/drives/model1581/wd1772/sector_writes.rb
|
|
298
299
|
- lib/badline/drives/model1581/wd1772/sectors.rb
|
|
299
300
|
- lib/badline/drives/model1581/wd1772/stepping.rb
|
|
@@ -350,10 +351,12 @@ files:
|
|
|
350
351
|
- lib/badline/input/control_ports.rb
|
|
351
352
|
- lib/badline/input/joystick.rb
|
|
352
353
|
- lib/badline/input/keyboard.rb
|
|
354
|
+
- lib/badline/input/matrix_typist.rb
|
|
353
355
|
- lib/badline/input/mouse1351.rb
|
|
354
356
|
- lib/badline/input/paddles.rb
|
|
355
357
|
- lib/badline/integer_helper.rb
|
|
356
358
|
- lib/badline/kernal_trap.rb
|
|
359
|
+
- lib/badline/kernal_trap/chrout.rb
|
|
357
360
|
- lib/badline/kernal_trap/dos.rb
|
|
358
361
|
- lib/badline/kernal_trap/dos/block_commands.rb
|
|
359
362
|
- lib/badline/kernal_trap/dos/channel.rb
|
|
@@ -364,20 +367,23 @@ files:
|
|
|
364
367
|
- lib/badline/kernal_trap/dos/write_file.rb
|
|
365
368
|
- lib/badline/kernal_trap/dos/writes.rb
|
|
366
369
|
- lib/badline/kernal_trap/file_routine.rb
|
|
370
|
+
- lib/badline/kernal_trap/keyed_state.rb
|
|
367
371
|
- lib/badline/kernal_trap/layout.rb
|
|
368
372
|
- lib/badline/kernal_trap/load.rb
|
|
369
373
|
- lib/badline/kernal_trap/routine.rb
|
|
370
374
|
- lib/badline/kernal_trap/save.rb
|
|
371
375
|
- lib/badline/kernal_trap/serial.rb
|
|
372
|
-
- lib/badline/keyboard_buffer.rb
|
|
373
376
|
- lib/badline/machine.rb
|
|
374
377
|
- lib/badline/machine/clocking.rb
|
|
378
|
+
- lib/badline/machine/keyboard_buffer.rb
|
|
379
|
+
- lib/badline/machine/settling.rb
|
|
375
380
|
- lib/badline/media.rb
|
|
376
381
|
- lib/badline/media/boot_disk.rb
|
|
377
382
|
- lib/badline/media/disk_list.rb
|
|
378
383
|
- lib/badline/media/disk_set.rb
|
|
379
384
|
- lib/badline/media/extensions.rb
|
|
380
385
|
- lib/badline/media/not_disk.rb
|
|
386
|
+
- lib/badline/media/plus4_media.rb
|
|
381
387
|
- lib/badline/media/program.rb
|
|
382
388
|
- lib/badline/media/true_drive.rb
|
|
383
389
|
- lib/badline/media/tune.rb
|
|
@@ -393,6 +399,18 @@ files:
|
|
|
393
399
|
- lib/badline/options/option.rb
|
|
394
400
|
- lib/badline/options/table.rb
|
|
395
401
|
- lib/badline/options/validation.rb
|
|
402
|
+
- lib/badline/plus4.rb
|
|
403
|
+
- lib/badline/plus4/acia.rb
|
|
404
|
+
- lib/badline/plus4/bus.rb
|
|
405
|
+
- lib/badline/plus4/cassette_sense.rb
|
|
406
|
+
- lib/badline/plus4/cpu.rb
|
|
407
|
+
- lib/badline/plus4/cpu_port.rb
|
|
408
|
+
- lib/badline/plus4/keyboard_port.rb
|
|
409
|
+
- lib/badline/plus4/keyed_modules.rb
|
|
410
|
+
- lib/badline/plus4/keyed_parts.rb
|
|
411
|
+
- lib/badline/plus4/keyed_state.rb
|
|
412
|
+
- lib/badline/plus4/model.rb
|
|
413
|
+
- lib/badline/plus4/user_port.rb
|
|
396
414
|
- lib/badline/region.rb
|
|
397
415
|
- lib/badline/rom.rb
|
|
398
416
|
- lib/badline/roms/README
|
|
@@ -411,6 +429,11 @@ files:
|
|
|
411
429
|
- lib/badline/roms/kernal-pet64.rom
|
|
412
430
|
- lib/badline/roms/kernal-sx64.rom
|
|
413
431
|
- lib/badline/roms/kernal.rom
|
|
432
|
+
- lib/badline/roms/plus4/basic.rom
|
|
433
|
+
- lib/badline/roms/plus4/function-high.rom
|
|
434
|
+
- lib/badline/roms/plus4/function-low.rom
|
|
435
|
+
- lib/badline/roms/plus4/kernal-ntsc.rom
|
|
436
|
+
- lib/badline/roms/plus4/kernal-pal.rom
|
|
414
437
|
- lib/badline/roms/vic20/basic.rom
|
|
415
438
|
- lib/badline/roms/vic20/character.rom
|
|
416
439
|
- lib/badline/roms/vic20/kernal-ntsc.rom
|
|
@@ -426,10 +449,18 @@ files:
|
|
|
426
449
|
- lib/badline/snapshot/c128_setup.rb
|
|
427
450
|
- lib/badline/snapshot/c64_setup.rb
|
|
428
451
|
- lib/badline/snapshot/container.rb
|
|
452
|
+
- lib/badline/snapshot/field_doc.rb
|
|
453
|
+
- lib/badline/snapshot/field_doc/markdown.rb
|
|
429
454
|
- lib/badline/snapshot/image.rb
|
|
455
|
+
- lib/badline/snapshot/keyed.rb
|
|
456
|
+
- lib/badline/snapshot/keyed/cursor.rb
|
|
457
|
+
- lib/badline/snapshot/keyed/modules.rb
|
|
458
|
+
- lib/badline/snapshot/keyed/reader.rb
|
|
459
|
+
- lib/badline/snapshot/keyed/recorder.rb
|
|
460
|
+
- lib/badline/snapshot/keyed/report.rb
|
|
461
|
+
- lib/badline/snapshot/keyed/writer.rb
|
|
430
462
|
- lib/badline/snapshot/machine_state.rb
|
|
431
|
-
- lib/badline/snapshot/
|
|
432
|
-
- lib/badline/snapshot/state.rb
|
|
463
|
+
- lib/badline/snapshot/plus4_setup.rb
|
|
433
464
|
- lib/badline/snapshot/storage_setup.rb
|
|
434
465
|
- lib/badline/snapshot/vic20_setup.rb
|
|
435
466
|
- lib/badline/snapshot/vice.rb
|
|
@@ -467,17 +498,19 @@ files:
|
|
|
467
498
|
- lib/badline/support.rb
|
|
468
499
|
- lib/badline/support/c128_checkpoint.rb
|
|
469
500
|
- lib/badline/support/checkpoint.rb
|
|
501
|
+
- lib/badline/support/plus4_checkpoint.rb
|
|
470
502
|
- lib/badline/support/vic20_checkpoint.rb
|
|
471
503
|
- lib/badline/timing.rb
|
|
472
504
|
- lib/badline/version.rb
|
|
473
505
|
- lib/badline/vic20.rb
|
|
474
506
|
- lib/badline/vic20/attachments.rb
|
|
475
507
|
- lib/badline/vic20/bus.rb
|
|
476
|
-
- lib/badline/vic20/bus/
|
|
508
|
+
- lib/badline/vic20/bus/keyed_state.rb
|
|
477
509
|
- lib/badline/vic20/cpu.rb
|
|
478
510
|
- lib/badline/vic20/keyboard_via_ports.rb
|
|
511
|
+
- lib/badline/vic20/keyed_modules.rb
|
|
512
|
+
- lib/badline/vic20/keyed_state.rb
|
|
479
513
|
- lib/badline/vic20/port_wiring.rb
|
|
480
|
-
- lib/badline/vic20/saved_state.rb
|
|
481
514
|
- lib/badline/vic20/user_via_ports.rb
|
|
482
515
|
- packaging/homebrew/badline.rb
|
|
483
516
|
homepage: https://github.com/elektronaut/badline
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Badline
|
|
4
|
-
class C128
|
|
5
|
-
class Bus
|
|
6
|
-
# The bus's state for a snapshot, as C64::Bus::SavedState is the
|
|
7
|
-
# C64's.
|
|
8
|
-
module SavedState
|
|
9
|
-
# The machine's memory, the last access and everything on the bus but
|
|
10
|
-
# the keyboard, the joysticks, the pot devices and CAPS LOCK, which the
|
|
11
|
-
# host holds. A cartridge is already in the port, built from its setup.
|
|
12
|
-
def save_state(out)
|
|
13
|
-
out.marker("C128 BUS")
|
|
14
|
-
out.int(@cpu_port.ddr).int(@cpu_port.data).int(@cpu_port.floating).int(@address).int(@data)
|
|
15
|
-
@mmu.save_state(out)
|
|
16
|
-
@ram.save_state(out)
|
|
17
|
-
@color_lines.color_ram(0).save_state(out)
|
|
18
|
-
@color_lines.color_ram(1).save_state(out)
|
|
19
|
-
@cartridge&.save_state(out)
|
|
20
|
-
@datasette.save_state(out)
|
|
21
|
-
@vic.save_state(out)
|
|
22
|
-
@cia1.save_state(out)
|
|
23
|
-
@cia2.save_state(out)
|
|
24
|
-
@sid.save_state(out)
|
|
25
|
-
@vdc.save_state(out)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def load_state(input)
|
|
29
|
-
input.marker("C128 BUS")
|
|
30
|
-
ddr = input.int
|
|
31
|
-
data = input.int
|
|
32
|
-
floating = input.int
|
|
33
|
-
@address = input.int
|
|
34
|
-
@data = input.int
|
|
35
|
-
@mmu.load_state(input)
|
|
36
|
-
@ram.load_state(input)
|
|
37
|
-
@color_lines.color_ram(0).load_state(input)
|
|
38
|
-
@color_lines.color_ram(1).load_state(input)
|
|
39
|
-
@cartridge&.load_state(input)
|
|
40
|
-
@datasette.load_state(input)
|
|
41
|
-
@cpu_port.load(ddr, data, floating)
|
|
42
|
-
update_overlays!
|
|
43
|
-
@vic.load_state(input)
|
|
44
|
-
@control_ports.extra_rows = 0xf8 | @vic.extra_keyboard_lines
|
|
45
|
-
@cia1.load_state(input)
|
|
46
|
-
@cia2.load_state(input)
|
|
47
|
-
@sid.load_state(input)
|
|
48
|
-
@vdc.load_state(input)
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "badline/snapshot/c128_setup"
|
|
4
|
-
|
|
5
|
-
module Badline
|
|
6
|
-
class C128
|
|
7
|
-
# How the machine a State from #snapshot was taken of was built.
|
|
8
|
-
def self.setup(state) = Snapshot::C128Setup.from(state)
|
|
9
|
-
|
|
10
|
-
# A new machine, built as the one a State from #snapshot was taken of,
|
|
11
|
-
# at that state.
|
|
12
|
-
def self.restored(state) = setup(state).build.apply_state(state)
|
|
13
|
-
|
|
14
|
-
# The whole machine's state for a snapshot, as C64's: the
|
|
15
|
-
# machine's own latches, FAST and TEST as they last took hold, the bus with its RAM, the MMU, the chips and
|
|
16
|
-
# the VDC, the CPU, the cartridge, the disk device 8 serves through the
|
|
17
|
-
# traps and a true 1541. The serial lines go back into the bus from the
|
|
18
|
-
# restored CIA 2. What the host holds stays out: the keyboard, the
|
|
19
|
-
# joysticks, CAPS LOCK and 40/80 DISPLAY, the traps and callbacks, and
|
|
20
|
-
# which chip renders.
|
|
21
|
-
module SavedState
|
|
22
|
-
# How many more on_init handlers the machine a State was taken of had
|
|
23
|
-
# yet to run than this one has. Nil until the machine is restored.
|
|
24
|
-
attr_reader :init_handlers_lost
|
|
25
|
-
|
|
26
|
-
def snapshot
|
|
27
|
-
out = Snapshot::StateWriter.new
|
|
28
|
-
save_state(out)
|
|
29
|
-
out.state
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# Takes the machine back to a State from #snapshot, trying it on a new
|
|
33
|
-
# machine first, so one that fails leaves this machine as it was.
|
|
34
|
-
# Raises Snapshot::FormatError for a state of another model or SID.
|
|
35
|
-
def restore(state)
|
|
36
|
-
check_setup(C128.setup(state))
|
|
37
|
-
C128.restored(state)
|
|
38
|
-
apply_state(state)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# Puts a State into the machine without trying it on a new one first.
|
|
42
|
-
def apply_state(state)
|
|
43
|
-
input = Snapshot::StateReader.new(state)
|
|
44
|
-
load_state(input)
|
|
45
|
-
raise Snapshot::FormatError, "the state goes on past the machine" unless input.finished?
|
|
46
|
-
|
|
47
|
-
self
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def save_state(out)
|
|
51
|
-
out.marker(Snapshot::C128Setup::MARKER).stamp
|
|
52
|
-
snapshot_setup.write(out)
|
|
53
|
-
out.int(@cycles).int(@clock_bits).boolean(@nmi_asserted).boolean(@cartridge_nmi).boolean(@restore_pulse)
|
|
54
|
-
out.boolean(!@pending_keys.nil?)
|
|
55
|
-
out.ints(@pending_keys) if @pending_keys
|
|
56
|
-
out.int(@cycles <= init_threshold ? @init_handlers.length : 0)
|
|
57
|
-
save_cartridge(out)
|
|
58
|
-
@bus.save_state(out)
|
|
59
|
-
@cpu.save_state(out)
|
|
60
|
-
@z80.save_state(out)
|
|
61
|
-
out.int(@z80_due).int(@chips_ahead).boolean(@cpu_reset_pending)
|
|
62
|
-
save_trap_dos(out)
|
|
63
|
-
save_serial_bus(out)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def load_state(input)
|
|
67
|
-
input.marker(Snapshot::C128Setup::MARKER)
|
|
68
|
-
input.check_stamp
|
|
69
|
-
check_setup(Snapshot::C128Setup.read(input))
|
|
70
|
-
@cycles = input.int
|
|
71
|
-
@clock_bits = input.int
|
|
72
|
-
@nmi_asserted = input.boolean?
|
|
73
|
-
@cartridge_nmi = input.boolean?
|
|
74
|
-
@restore_pulse = input.boolean?
|
|
75
|
-
@pending_keys = nil
|
|
76
|
-
@pending_keys = input.ints if input.boolean?
|
|
77
|
-
@init_handlers_lost = [input.int - @init_handlers.length, 0].max
|
|
78
|
-
load_cartridge(input)
|
|
79
|
-
@cpu_reset_pending = false
|
|
80
|
-
@bus.load_state(input)
|
|
81
|
-
push_serial_lines
|
|
82
|
-
@cpu.load_state(input)
|
|
83
|
-
load_z80(input)
|
|
84
|
-
load_trap_dos(input)
|
|
85
|
-
load_serial_bus(input)
|
|
86
|
-
push_fast_serial
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
private
|
|
90
|
-
|
|
91
|
-
# The Z80 and which CPU has the bus. The bus, restored before it,
|
|
92
|
-
# hands the bus to its CPU without resetting the 8502.
|
|
93
|
-
def load_z80(input)
|
|
94
|
-
@z80_running = @bus.z80?
|
|
95
|
-
@z80.load_state(input)
|
|
96
|
-
@z80_due = input.int
|
|
97
|
-
@chips_ahead = input.int
|
|
98
|
-
@cpu_reset_pending = input.boolean?
|
|
99
|
-
@z80_turn = @z80_running || @chips_ahead.positive?
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
# How this machine was built.
|
|
103
|
-
def snapshot_setup
|
|
104
|
-
Snapshot::C128Setup.new(model: @model.name, sid_model: @sid.model, mode: @c64_built ? :c64 : :c128)
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def check_setup(setup)
|
|
108
|
-
ours = snapshot_setup
|
|
109
|
-
return if setup == ours
|
|
110
|
-
|
|
111
|
-
raise Snapshot::FormatError, "the state is of a #{setup}, not a #{ours}"
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
include SavedState
|
|
116
|
-
end
|
|
117
|
-
end
|