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,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Badline
|
|
4
|
+
class C64
|
|
5
|
+
class Bus
|
|
6
|
+
# The 6510's port under port.* in a keyed snapshot module
|
|
7
|
+
# (Snapshot::Keyed, BL-CPU), and the bus once its memories, the port
|
|
8
|
+
# and the cartridge are loaded: the banks the CPU and the VIC see are
|
|
9
|
+
# worked out again.
|
|
10
|
+
module KeyedState
|
|
11
|
+
# The RAM expansion fitted, or an Unexpanded stand-in.
|
|
12
|
+
attr_reader :ram_expansion
|
|
13
|
+
|
|
14
|
+
# Takes the cartridge out of the expansion port, as a restore does for
|
|
15
|
+
# a snapshot without one.
|
|
16
|
+
def detach_cartridge
|
|
17
|
+
@cartridge = nil
|
|
18
|
+
update_overlays!
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# The 6510 port's direction and output registers, and the charge left
|
|
22
|
+
# on its floating bits.
|
|
23
|
+
def port_state = [@cpu_port.ddr, @cpu_port.data, @cpu_port.floating]
|
|
24
|
+
|
|
25
|
+
# Sets the port as port_state reads it, as a snapshot restores it,
|
|
26
|
+
# leaving the RAM under $00 and $01 alone.
|
|
27
|
+
def restore_port(ddr, out, floating)
|
|
28
|
+
@cpu_port.restore(ddr, out, floating)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def save_port_fields(out) = @cpu_port.save_fields(out, "port.")
|
|
32
|
+
|
|
33
|
+
def load_port_fields(input) = @cpu_port.load_fields(input, "port.")
|
|
34
|
+
|
|
35
|
+
def restored! = update_overlays!
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
include KeyedState
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
data/lib/badline/c64/bus.rb
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "badline/c64/bus/
|
|
3
|
+
require "badline/c64/bus/keyed_state"
|
|
4
4
|
require "badline/c64/bus/sid_slots"
|
|
5
5
|
require "badline/c64/bus/extra_sids"
|
|
6
6
|
require "badline/c64/bus/pla"
|
|
7
7
|
require "badline/c64/bus/roms"
|
|
8
8
|
require "badline/c64/bus/fittings"
|
|
9
|
+
require "badline/c64/bus/debug_register"
|
|
9
10
|
|
|
10
11
|
module Badline
|
|
11
12
|
# Memory layout:
|
|
@@ -90,6 +91,7 @@ module Badline
|
|
|
90
91
|
@cia1.on_port_b4_change { |high| @vic.lightpen_level(high) }
|
|
91
92
|
@sid = Chips::SID.new(model: sid_model, pots: @control_ports)
|
|
92
93
|
@sid_slots = []
|
|
94
|
+
@extra_sids = []
|
|
93
95
|
|
|
94
96
|
@datasette = Drives::Datasette.new
|
|
95
97
|
@datasette.on_flag { @cia1.flag! }
|
|
@@ -22,6 +22,10 @@ module Badline
|
|
|
22
22
|
include Freezer
|
|
23
23
|
|
|
24
24
|
CONTROL_MODES = %i[rom8k rom16k off ultimax].freeze
|
|
25
|
+
|
|
26
|
+
# Ultimax mode with the RAM at ROML and I/O 2 and the first bank at
|
|
27
|
+
# ROMH, as a freeze leaves the register.
|
|
28
|
+
FREEZE_CONTROL = 0x23
|
|
25
29
|
IO2_PAGE = 0x1f00
|
|
26
30
|
|
|
27
31
|
def connect(ram:, open_bus:)
|
|
@@ -59,25 +63,11 @@ module Badline
|
|
|
59
63
|
|
|
60
64
|
def freeze!
|
|
61
65
|
@active = true
|
|
62
|
-
|
|
63
|
-
select(:ultimax, @isolated, io2_ram: true)
|
|
66
|
+
control(FREEZE_CONTROL)
|
|
64
67
|
end
|
|
65
68
|
|
|
66
69
|
private
|
|
67
70
|
|
|
68
|
-
def save_mapper(out)
|
|
69
|
-
super
|
|
70
|
-
out.int(window_index(@rom, windows)).boolean(@active).boolean(@io2_ram).blob(@ram_data)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def load_mapper(input)
|
|
74
|
-
super
|
|
75
|
-
@rom = window_at(input.int, windows)
|
|
76
|
-
@active = input.boolean?
|
|
77
|
-
@io2_ram = input.boolean?
|
|
78
|
-
input.blob_into(@ram_data)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
71
|
def windows = [@through, @isolated, @contended, *@rom_banks, EMPTY_BANK]
|
|
82
72
|
|
|
83
73
|
def io2_peek(addr)
|
|
@@ -85,6 +75,7 @@ module Badline
|
|
|
85
75
|
end
|
|
86
76
|
|
|
87
77
|
def control(value)
|
|
78
|
+
@control = value
|
|
88
79
|
self.nmi = false if value.anybits?(0x40)
|
|
89
80
|
@rom = bank(@rom_banks, (value >> 3) & 0x03)
|
|
90
81
|
configure(value)
|
|
@@ -12,13 +12,15 @@ module Badline
|
|
|
12
12
|
|
|
13
13
|
def peek(addr)
|
|
14
14
|
if addr < 0xde10
|
|
15
|
-
@
|
|
15
|
+
@bank = addr & 0x0f
|
|
16
|
+
@roml = bank(@banks, @bank)
|
|
16
17
|
changed!
|
|
17
18
|
end
|
|
18
19
|
open_bus(addr)
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
def reset
|
|
23
|
+
@bank = 0
|
|
22
24
|
@roml = bank(@banks, 0)
|
|
23
25
|
changed!
|
|
24
26
|
end
|
|
@@ -88,21 +88,6 @@ module Badline
|
|
|
88
88
|
@romh = @high_flash.window(@bank * BANK_SIZE)
|
|
89
89
|
end
|
|
90
90
|
|
|
91
|
-
def save_mapper(out)
|
|
92
|
-
out.int(@bank).int(@control).blob(@io_ram)
|
|
93
|
-
@low_flash.save_state(out)
|
|
94
|
-
@high_flash.save_state(out)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def load_mapper(input)
|
|
98
|
-
@bank = input.int
|
|
99
|
-
@control = input.int
|
|
100
|
-
input.blob_into(@io_ram)
|
|
101
|
-
@low_flash.load_state(input)
|
|
102
|
-
@high_flash.load_state(input)
|
|
103
|
-
map_bank
|
|
104
|
-
end
|
|
105
|
-
|
|
106
91
|
def apply_control
|
|
107
92
|
game = @control.nobits?(0x04) || @control.anybits?(0x01)
|
|
108
93
|
exrom = @control.anybits?(0x02)
|
|
@@ -61,21 +61,10 @@ module Badline
|
|
|
61
61
|
|
|
62
62
|
private
|
|
63
63
|
|
|
64
|
-
def save_mapper(out)
|
|
65
|
-
super
|
|
66
|
-
out.boolean(@register_visible).boolean(@phi1_ultimax)
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def load_mapper(input)
|
|
70
|
-
super
|
|
71
|
-
@io_bank = @roml
|
|
72
|
-
@register_visible = input.boolean?
|
|
73
|
-
@phi1_ultimax = input.boolean?
|
|
74
|
-
end
|
|
75
|
-
|
|
76
64
|
def windows = [*@roml_banks, *@romh_banks, EMPTY_BANK]
|
|
77
65
|
|
|
78
66
|
def select(number)
|
|
67
|
+
@bank = number
|
|
79
68
|
@io_bank = @roml = bank(@roml_banks, number)
|
|
80
69
|
@romh = bank(@romh_banks, number)
|
|
81
70
|
end
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "badline/c64/cartridge/flash/saved_state"
|
|
4
|
-
|
|
5
3
|
module Badline
|
|
6
4
|
class C64
|
|
7
5
|
class Cartridge
|
|
@@ -69,7 +67,9 @@ module Badline
|
|
|
69
67
|
alias [] peek
|
|
70
68
|
end
|
|
71
69
|
|
|
72
|
-
|
|
70
|
+
# The command states, which a snapshot names.
|
|
71
|
+
STATES = %i[read program_setup autoselect programming erase_window erasing suspended chip_erase
|
|
72
|
+
program_error].freeze
|
|
73
73
|
|
|
74
74
|
attr_reader :data, :state
|
|
75
75
|
attr_writer :clock
|
|
@@ -10,7 +10,8 @@ module Badline
|
|
|
10
10
|
def poke(addr, value)
|
|
11
11
|
return if addr > 0xdeff
|
|
12
12
|
|
|
13
|
-
@
|
|
13
|
+
@bank = self.class.bank_number(value)
|
|
14
|
+
@roml = bank(@banks, @bank)
|
|
14
15
|
case value & 0xc6
|
|
15
16
|
when 0x00 then self.mode = :rom8k
|
|
16
17
|
when 0x86 then self.mode = :off
|
|
@@ -48,18 +48,6 @@ module Badline
|
|
|
48
48
|
changed!
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
-
def save_mapper(out)
|
|
52
|
-
out.int(@bank).boolean(@flash_writes)
|
|
53
|
-
@flash.save_state(out)
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def load_mapper(input)
|
|
57
|
-
@bank = input.int
|
|
58
|
-
@flash_writes = input.boolean?
|
|
59
|
-
@flash.load_state(input)
|
|
60
|
-
@roml = @flash.window(@bank * BANK_SIZE)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
51
|
def install_chips(chips)
|
|
64
52
|
data = Array.new(BANKS * BANK_SIZE, 0xff)
|
|
65
53
|
chips.each do |chip|
|
|
@@ -53,24 +53,8 @@ module Badline
|
|
|
53
53
|
@block = @page = @window = 0
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
# A GEO-RAM is built from its size alone.
|
|
57
|
-
def save_setup(out)
|
|
58
|
-
out.int(GEO_RAM_SETUP).int(@size)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
56
|
private
|
|
62
57
|
|
|
63
|
-
def save_mapper(out)
|
|
64
|
-
out.blob(@ram_data).int(@block).int(@page).int(@window)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def load_mapper(input)
|
|
68
|
-
input.blob_into(@ram_data)
|
|
69
|
-
@block = input.int
|
|
70
|
-
@page = input.int
|
|
71
|
-
@window = input.int
|
|
72
|
-
end
|
|
73
|
-
|
|
74
58
|
def install_chips(_chips)
|
|
75
59
|
@ram_data = Array.new(@size * 1024, 0)
|
|
76
60
|
reset
|
|
@@ -56,14 +56,6 @@ module Badline
|
|
|
56
56
|
|
|
57
57
|
private
|
|
58
58
|
|
|
59
|
-
def save_mapper(out)
|
|
60
|
-
out.blob(@io_ram)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def load_mapper(input)
|
|
64
|
-
input.blob_into(@io_ram)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
59
|
def install_chips(chips)
|
|
68
60
|
roml, romh = banks_from(chips)
|
|
69
61
|
@roml = roml.first || EMPTY_BANK
|