badline 0.4.2 → 0.5.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +37 -0
- data/CLAUDE.md +32 -27
- data/CONTRIBUTING.md +5 -0
- data/README.md +55 -24
- data/doc/pinned-behaviour.md +223 -0
- data/exe/badline-ruby +7 -4
- data/lib/badline/address_bus/ultimax_pages.rb +38 -0
- data/lib/badline/address_bus.rb +19 -29
- data/lib/badline/audio/jukebox.rb +6 -4
- data/lib/badline/audio/machine_player.rb +10 -6
- data/lib/badline/cartridge/kcs_power.rb +3 -3
- data/lib/badline/cia.rb +21 -3
- data/lib/badline/computer.rb +86 -7
- data/lib/badline/cpu.rb +39 -0
- data/lib/badline/drive1541/bus.rb +197 -0
- data/lib/badline/drive1541/disk.rb +256 -0
- data/lib/badline/drive1541/disk_via.rb +33 -0
- data/lib/badline/drive1541/gcr.rb +57 -0
- data/lib/badline/drive1541/idle.rb +136 -0
- data/lib/badline/drive1541/mechanism.rb +277 -0
- data/lib/badline/drive1541/orbit.rb +81 -0
- data/lib/badline/drive1541/rotation.rb +111 -0
- data/lib/badline/drive1541/sector_reader.rb +76 -0
- data/lib/badline/drive1541/serial_port.rb +67 -0
- data/lib/badline/drive1541/sleep.rb +114 -0
- data/lib/badline/drive1541/track.rb +98 -0
- data/lib/badline/drive1541.rb +234 -0
- data/lib/badline/gui/application.rb +15 -3
- data/lib/badline/gui/drive_led_pane.rb +29 -0
- data/lib/badline/gui.rb +1 -0
- data/lib/badline/iec_bus.rb +109 -0
- data/lib/badline/kernal_trap/channel.rb +9 -1
- data/lib/badline/kernal_trap/serial.rb +9 -3
- data/lib/badline/media/true_drive.rb +54 -0
- data/lib/badline/media.rb +22 -1
- data/lib/badline/memory.rb +3 -0
- data/lib/badline/options.rb +24 -4
- data/lib/badline/region.rb +35 -10
- data/lib/badline/reu/dma.rb +228 -0
- data/lib/badline/reu/ram.rb +65 -0
- data/lib/badline/reu/trigger.rb +32 -0
- data/lib/badline/reu.rb +276 -0
- data/lib/badline/roms/README +10 -0
- data/lib/badline/roms/dos1541.rom +0 -0
- data/lib/badline/sdl/functions.rb +1 -0
- data/lib/badline/storage/d64_image.rb +18 -9
- data/lib/badline/storage/d81_image.rb +1 -0
- data/lib/badline/storage/disk_image/catalog.rb +52 -0
- data/lib/badline/storage/disk_image/writing.rb +16 -0
- data/lib/badline/storage/disk_image.rb +2 -0
- data/lib/badline/storage/g64_image.rb +222 -0
- data/lib/badline/storage/host_directory.rb +21 -1
- data/lib/badline/storage/listing.rb +118 -0
- data/lib/badline/storage/t64.rb +14 -0
- data/lib/badline/storage.rb +2 -0
- data/lib/badline/traps.rb +4 -0
- data/lib/badline/version.rb +1 -1
- data/lib/badline/via/control_lines.rb +3 -0
- data/lib/badline/via/fast_forward.rb +53 -0
- data/lib/badline/via/shift_register.rb +8 -3
- data/lib/badline/via/timer1.rb +36 -0
- data/lib/badline/via/timer2.rb +31 -0
- data/lib/badline/via.rb +2 -0
- data/lib/badline/vic/display_state.rb +7 -7
- data/lib/badline/vic/sprite/internal_bus.rb +11 -7
- data/lib/badline/vic/sprite/shifter.rb +10 -15
- data/lib/badline/vic/sprite/timing.rb +60 -0
- data/lib/badline/vic/sprite.rb +14 -12
- data/lib/badline/vic/sprites.rb +2 -2
- data/lib/badline/vic.rb +86 -39
- data/lib/badline.rb +3 -0
- metadata +28 -1
data/lib/badline/vic/sprite.rb
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require "badline/vic/sprite/internal_bus"
|
|
4
4
|
require "badline/vic/sprite/shifter"
|
|
5
|
+
require "badline/vic/sprite/timing"
|
|
5
6
|
|
|
6
7
|
module Badline
|
|
7
8
|
class VIC < Cycleable
|
|
@@ -22,9 +23,6 @@ module Badline
|
|
|
22
23
|
LAST_MCBASE = 63
|
|
23
24
|
MC_MASK = 0x3f
|
|
24
25
|
|
|
25
|
-
# The X comparator matches the pixel before the sprite's first one.
|
|
26
|
-
COMPARE_OFFSET = X_OFFSET - 1
|
|
27
|
-
|
|
28
26
|
# 24 bits at two pixels each, plus slack for a mid-sprite expansion
|
|
29
27
|
# change stretching the tail.
|
|
30
28
|
MAX_SPAN = 64
|
|
@@ -48,7 +46,8 @@ module Badline
|
|
|
48
46
|
|
|
49
47
|
# On the line of its last row, a sprite whose DMA ended at cycle 16
|
|
50
48
|
# loses its display at cycle 58, so no hit from this pixel on starts
|
|
51
|
-
# it (spritegap3). One already shifting runs on.
|
|
49
|
+
# it (spritegap3). One already shifting runs on. A region whose
|
|
50
|
+
# display compare falls later moves it with the compare.
|
|
52
51
|
DISPLAY_OFF_X = 460
|
|
53
52
|
|
|
54
53
|
include Shifter
|
|
@@ -63,6 +62,7 @@ module Badline
|
|
|
63
62
|
@bank = bank
|
|
64
63
|
@bus = bus
|
|
65
64
|
@width = bus.columns * 8
|
|
65
|
+
@timing = bus.timing
|
|
66
66
|
@bit = 1 << index
|
|
67
67
|
@dma = false
|
|
68
68
|
@display_on = false
|
|
@@ -78,8 +78,9 @@ module Badline
|
|
|
78
78
|
@reload_codes = Array.new(MAX_SPAN + RELOAD_HOLD, 0)
|
|
79
79
|
@reload_leftmost = 0
|
|
80
80
|
@reload_span = 0
|
|
81
|
-
|
|
82
|
-
@
|
|
81
|
+
reload = @timing.reload_x(index)
|
|
82
|
+
@reload_x = reload % @width
|
|
83
|
+
@reload_next_line = reload < @width
|
|
83
84
|
@sr = 0
|
|
84
85
|
@latch = 0
|
|
85
86
|
@mc_flop = false
|
|
@@ -157,9 +158,10 @@ module Badline
|
|
|
157
158
|
# MCBASE, and returns true. Display is enabled separately in cycle 58,
|
|
158
159
|
# so the rows render from the following line on.
|
|
159
160
|
#
|
|
160
|
-
# On the VIC's side, BA falls at the sprite's own column
|
|
161
|
-
#
|
|
162
|
-
#
|
|
161
|
+
# On the VIC's side, BA falls at the sprite's own column
|
|
162
|
+
# (Timing#ba_column) — 55 for sprite 0 on the 6569, two later for each
|
|
163
|
+
# sprite after it, a column behind the window the CPU sees
|
|
164
|
+
# (VIC#layout_columns) — or two columns after
|
|
163
165
|
# this compare, whichever is later. AEC follows three columns on, and
|
|
164
166
|
# the first of the three s-accesses runs in the column it arrives in:
|
|
165
167
|
# a DMA starting on the second compare therefore loses that access for
|
|
@@ -168,7 +170,7 @@ module Badline
|
|
|
168
170
|
def check_dma(line, column)
|
|
169
171
|
return false if @dma || !enabled? || !y_match?(line)
|
|
170
172
|
|
|
171
|
-
@first_byte_lost = column + 2 >
|
|
173
|
+
@first_byte_lost = column + 2 > @timing.ba_column(index)
|
|
172
174
|
@dma = true
|
|
173
175
|
@mcbase = 0
|
|
174
176
|
@exp_ff = true
|
|
@@ -229,7 +231,7 @@ module Badline
|
|
|
229
231
|
return unless @row_ready || @prev_bits || reload_bits
|
|
230
232
|
|
|
231
233
|
log = nil if log.nil? || log.empty?
|
|
232
|
-
@stop_x = @dma ? nil :
|
|
234
|
+
@stop_x = @dma ? nil : @timing.display_off_x
|
|
233
235
|
comparator_hits(log).each { |start| sequence_hit(log, start, reload_bits) }
|
|
234
236
|
end
|
|
235
237
|
|
|
@@ -261,7 +263,7 @@ module Badline
|
|
|
261
263
|
def blind_fetch
|
|
262
264
|
@bits = @bus.row(index)
|
|
263
265
|
@row_ready = true
|
|
264
|
-
@show_from =
|
|
266
|
+
@show_from = @timing.display_off_x
|
|
265
267
|
end
|
|
266
268
|
|
|
267
269
|
def code_at(raster_x, leftmost, span, codes)
|
data/lib/badline/vic/sprites.rb
CHANGED
|
@@ -31,12 +31,12 @@ module Badline
|
|
|
31
31
|
# sooner than the 6569's.
|
|
32
32
|
WRITE_DELAY_8565 = WRITE_DELAY.dup.tap { |delays| delays[0x1c] = SEQUENCER_DELAY - 1 }.freeze
|
|
33
33
|
|
|
34
|
-
def initialize(registers, bank, width, model: :mos6569)
|
|
34
|
+
def initialize(registers, bank, width, model: :mos6569, region: Region::PAL)
|
|
35
35
|
@registers = registers
|
|
36
36
|
@write_delay = model == :mos8565 ? WRITE_DELAY_8565 : WRITE_DELAY
|
|
37
37
|
@bank = bank
|
|
38
38
|
@width = width
|
|
39
|
-
@bus = Sprite::InternalBus.new(bank,
|
|
39
|
+
@bus = Sprite::InternalBus.new(bank, Sprite::Timing.new(region))
|
|
40
40
|
@sprites = Array.new(8) { |i| Sprite.new(i, registers, bank, @bus, model:) }
|
|
41
41
|
@collisions = Collisions.new(registers, width)
|
|
42
42
|
@hits = @collisions.hits
|
data/lib/badline/vic.rb
CHANGED
|
@@ -46,16 +46,31 @@ module Badline
|
|
|
46
46
|
FETCH_HOLD = 0x20
|
|
47
47
|
FETCH_HOLD_ROM = 0x60
|
|
48
48
|
|
|
49
|
-
# The
|
|
50
|
-
#
|
|
51
|
-
|
|
49
|
+
# The hooks a column can carry, as bits: MCBASE, the left border
|
|
50
|
+
# compare with the end of the sprite, the sprite DMA compare, the
|
|
51
|
+
# expansion flip-flop, the sprite display compare, and the start of the
|
|
52
|
+
# vertical border for the line after the last column.
|
|
53
|
+
HOOK_MCBASE = 1
|
|
54
|
+
HOOK_LEFT = 2
|
|
55
|
+
HOOK_DMA = 4
|
|
56
|
+
HOOK_EXPANSION = 8
|
|
57
|
+
HOOK_DISPLAY = 16
|
|
58
|
+
HOOK_LAST = 32
|
|
59
|
+
|
|
60
|
+
# On the 6569 the DMA compares fall in columns 53 and 54 and the
|
|
61
|
+
# display compare in column 57. A region whose sprite fetches run later
|
|
62
|
+
# moves them with the fetches (Region::Profile#sprite_cycle).
|
|
63
|
+
DMA_COLUMN = 53
|
|
64
|
+
EXPANSION_COLUMN = 54
|
|
52
65
|
|
|
53
66
|
# BA falls three columns ahead of each sprite's pair of s-accesses, and
|
|
54
67
|
# the five-column windows step two columns apart from sprite 0 at column
|
|
55
|
-
# 54
|
|
56
|
-
#
|
|
57
|
-
#
|
|
58
|
-
|
|
68
|
+
# 54 on the 6569, a column later where the fetches are. From sprite 3 on
|
|
69
|
+
# they reach past the end of the line, so each is split: the tail
|
|
70
|
+
# columns fall on the line whose DMA compare started the fetch, the head
|
|
71
|
+
# columns on the line after it.
|
|
72
|
+
SPRITE_BA_FIRST = 54
|
|
73
|
+
SPRITE_BA_LENGTH = 5
|
|
59
74
|
|
|
60
75
|
def initialize(address_bus = nil, debug: false, model: :mos6569, region: Region::PAL)
|
|
61
76
|
raise ArgumentError, "unknown VIC-II model #{model}" unless MODELS.include?(model)
|
|
@@ -72,6 +87,8 @@ module Badline
|
|
|
72
87
|
@debug = debug
|
|
73
88
|
|
|
74
89
|
@columns_per_line = region.cycles_per_line
|
|
90
|
+
@sprite_cycle = region.sprite_cycle
|
|
91
|
+
@sprite_shift = region.sprite_cycle - Region::PAL.sprite_cycle
|
|
75
92
|
@width = @columns_per_line * 8
|
|
76
93
|
@height = region.lines_per_frame
|
|
77
94
|
@last_column = @columns_per_line - 1
|
|
@@ -94,10 +111,10 @@ module Badline
|
|
|
94
111
|
def power_on!
|
|
95
112
|
@registers = VIC::Registers.new
|
|
96
113
|
@register_bytes = @registers.bytes
|
|
97
|
-
@display_state = VIC::DisplayState.new(@registers)
|
|
114
|
+
@display_state = VIC::DisplayState.new(@registers, @last_column)
|
|
98
115
|
@sequencer = VIC::Sequencer.new(@width, @registers, @vic_bank, model: @model, region: @region)
|
|
99
116
|
@sequencer.render = @render
|
|
100
|
-
@sprites = VIC::Sprites.new(@registers, @vic_bank, @width, model: @model)
|
|
117
|
+
@sprites = VIC::Sprites.new(@registers, @vic_bank, @width, model: @model, region: @region)
|
|
101
118
|
@display.fill(0)
|
|
102
119
|
@lines.each { |line| line.fill(0) }
|
|
103
120
|
@dirty_lines.fill(true)
|
|
@@ -132,7 +149,8 @@ module Badline
|
|
|
132
149
|
|
|
133
150
|
fetch_character_data! if dma_active?
|
|
134
151
|
|
|
135
|
-
|
|
152
|
+
hooks = @hook_columns[@column]
|
|
153
|
+
column_hooks(hooks) if hooks
|
|
136
154
|
|
|
137
155
|
@column += 1
|
|
138
156
|
if @column == @columns_per_line
|
|
@@ -149,19 +167,18 @@ module Badline
|
|
|
149
167
|
# ahead of Bauer's numbering — two for MCBASE, the DMA compares and the
|
|
150
168
|
# expansion flip-flop, which the `spriteenable` and `spritecrunch`
|
|
151
169
|
# references place a column earlier still. Guarded in
|
|
152
|
-
# #cycle! so an ordinary column pays
|
|
170
|
+
# #cycle! so an ordinary column pays an array read rather than the
|
|
153
171
|
# dispatch.
|
|
154
|
-
def column_hooks
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
when 15
|
|
172
|
+
def column_hooks(hooks)
|
|
173
|
+
@sprites.advance_mcbase if hooks.anybits?(HOOK_MCBASE)
|
|
174
|
+
if hooks.anybits?(HOOK_LEFT)
|
|
158
175
|
@sequencer.left_compare_vertical_border
|
|
159
176
|
finish_sprite_mcbase
|
|
160
|
-
when 53 then check_sprite_dma
|
|
161
|
-
when 54 then check_dma_and_toggle_expansion
|
|
162
|
-
when 57 then @sprites.check_display(@rasterline)
|
|
163
|
-
when @last_column then @sequencer.start_vertical_border(@rasterline == @last_line ? 0 : @rasterline + 1)
|
|
164
177
|
end
|
|
178
|
+
check_sprite_dma if hooks.anybits?(HOOK_DMA)
|
|
179
|
+
@sprites.toggle_expansion if hooks.anybits?(HOOK_EXPANSION)
|
|
180
|
+
@sprites.check_display(@rasterline) if hooks.anybits?(HOOK_DISPLAY)
|
|
181
|
+
@sequencer.start_vertical_border(@rasterline == @last_line ? 0 : @rasterline + 1) if hooks.anybits?(HOOK_LAST)
|
|
165
182
|
end
|
|
166
183
|
|
|
167
184
|
# The IRQ line is held asserted while any enabled latch bit is set in
|
|
@@ -210,6 +227,16 @@ module Badline
|
|
|
210
227
|
@column > DisplayState::DMA_FIRST && @column <= DisplayState::DMA_LAST + 1
|
|
211
228
|
end
|
|
212
229
|
|
|
230
|
+
# BA as an REU's DMA sees it. On the line whose raster matches sprite
|
|
231
|
+
# 0's Y, where the sprite's DMA starts, the REU doesn't see BA fall on
|
|
232
|
+
# the first cycle of the sprite's window. Pinned by
|
|
233
|
+
# REU/bonzai/spritetiming.
|
|
234
|
+
def reu_ba_low?
|
|
235
|
+
return false if @column == SPRITE_BA_FIRST + @sprite_shift && sprite_zero_starting?
|
|
236
|
+
|
|
237
|
+
ba_low?
|
|
238
|
+
end
|
|
239
|
+
|
|
213
240
|
# Light pen input level (CIA1 PB4). A falling edge triggers the latch.
|
|
214
241
|
def lightpen_level(high)
|
|
215
242
|
@lp_low = !high
|
|
@@ -233,7 +260,7 @@ module Badline
|
|
|
233
260
|
end
|
|
234
261
|
return if line == @last_line && column.positive?
|
|
235
262
|
|
|
236
|
-
vic_x = (
|
|
263
|
+
vic_x = Sprite::Timing.xpos(column * 8, @width, @region.x_hold)
|
|
237
264
|
latch_lightpen((vic_x >> 1) + @lightpen_extra, line)
|
|
238
265
|
end
|
|
239
266
|
|
|
@@ -302,24 +329,27 @@ module Badline
|
|
|
302
329
|
@sprites.log_change(reg, old, value, beam_x)
|
|
303
330
|
end
|
|
304
331
|
|
|
305
|
-
# Bauer cycles 1-10 and 58-63 are sprite p- and s-accesses,
|
|
306
|
-
# refresh, 16-55 g-accesses and 56-57 idle.
|
|
307
|
-
#
|
|
332
|
+
# On the 6569 Bauer cycles 1-10 and 58-63 are sprite p- and s-accesses,
|
|
333
|
+
# 11-15 refresh, 16-55 g-accesses and 56-57 idle. Where the sprite
|
|
334
|
+
# fetches start later, the idle cycles before them grow, and on the
|
|
335
|
+
# 6567R8 cycle 10 idles too. @column has already advanced, so it is the
|
|
336
|
+
# Bauer cycle less one.
|
|
308
337
|
def phi1_address
|
|
309
338
|
cycle = @column + 1
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
339
|
+
slot = (cycle - @sprite_cycle) % @columns_per_line
|
|
340
|
+
if slot < 16
|
|
341
|
+
sprite_phi1_address(slot)
|
|
342
|
+
elsif cycle.between?(11, 15)
|
|
313
343
|
0x3f00 | ((0xff - (5 * @rasterline) - (cycle - 11)) & 0xff)
|
|
314
|
-
elsif cycle
|
|
344
|
+
elsif cycle.between?(16, 55)
|
|
315
345
|
graphics_phi1_address
|
|
316
346
|
else
|
|
317
347
|
0x3fff
|
|
318
348
|
end
|
|
319
349
|
end
|
|
320
350
|
|
|
321
|
-
# Each sprite takes two cycles from
|
|
322
|
-
# middle s-access.
|
|
351
|
+
# Each sprite takes two cycles from sprite 0's, the p-access and then
|
|
352
|
+
# the middle s-access.
|
|
323
353
|
def sprite_phi1_address(slot)
|
|
324
354
|
n = slot >> 1
|
|
325
355
|
return @registers.screen_base + 0x3f8 + n if slot.even?
|
|
@@ -357,11 +387,6 @@ module Badline
|
|
|
357
387
|
rebuild_sprite_ba if @sprites.stopped_dma?
|
|
358
388
|
end
|
|
359
389
|
|
|
360
|
-
def check_dma_and_toggle_expansion
|
|
361
|
-
check_sprite_dma
|
|
362
|
-
@sprites.toggle_expansion
|
|
363
|
-
end
|
|
364
|
-
|
|
365
390
|
# The trigger re-arms at the start of each frame; if the pen line is
|
|
366
391
|
# still low, the latch retriggers immediately with a fixed LPX of $d1.
|
|
367
392
|
def start_lightpen_frame
|
|
@@ -378,6 +403,10 @@ module Badline
|
|
|
378
403
|
@registers.latch_irq!(LIGHTPEN_IRQ)
|
|
379
404
|
end
|
|
380
405
|
|
|
406
|
+
def sprite_zero_starting?
|
|
407
|
+
@registers[0x15].anybits?(0x01) && @registers[0x01] == (@rasterline & 0xff)
|
|
408
|
+
end
|
|
409
|
+
|
|
381
410
|
def rebuild_sprite_ba
|
|
382
411
|
@sprite_ba.fill(false)
|
|
383
412
|
8.times do |n|
|
|
@@ -389,13 +418,31 @@ module Badline
|
|
|
389
418
|
end
|
|
390
419
|
|
|
391
420
|
# Splits the sprite BA windows at the end of the line and marks the hook
|
|
392
|
-
# columns, for a line of the region's length
|
|
393
|
-
# column
|
|
421
|
+
# columns, for a line of the region's length: 14, 15, 53, 54 and 57, and
|
|
422
|
+
# the line's last column, which starts the vertical border for the line
|
|
423
|
+
# after it. The marks let an ordinary column cost one array read instead
|
|
424
|
+
# of the dispatch.
|
|
394
425
|
def layout_columns
|
|
395
426
|
last = @last_column
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
427
|
+
windows = Array.new(8) do |n|
|
|
428
|
+
first = SPRITE_BA_FIRST + @sprite_shift + (2 * n)
|
|
429
|
+
first...(first + SPRITE_BA_LENGTH)
|
|
430
|
+
end
|
|
431
|
+
@sprite_ba_tail = windows.map { |w| w.select { |c| c <= last } }.freeze
|
|
432
|
+
@sprite_ba_head = windows.map { |w| w.filter_map { |c| c - last - 1 if c > last } }.freeze
|
|
433
|
+
@hook_columns = layout_hooks.map { |hooks| hooks unless hooks.zero? }.freeze
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
def layout_hooks
|
|
437
|
+
hooks = Array.new(@columns_per_line, 0)
|
|
438
|
+
hooks[14] |= HOOK_MCBASE
|
|
439
|
+
hooks[15] |= HOOK_LEFT
|
|
440
|
+
hooks[DMA_COLUMN + @sprite_shift] |= HOOK_DMA
|
|
441
|
+
hooks[DMA_COLUMN + @sprite_shift + 1] |= HOOK_DMA
|
|
442
|
+
hooks[EXPANSION_COLUMN] |= HOOK_EXPANSION
|
|
443
|
+
hooks[@region.sprite_display_cycle - 1] |= HOOK_DISPLAY
|
|
444
|
+
hooks[@last_column] |= HOOK_LAST
|
|
445
|
+
hooks
|
|
399
446
|
end
|
|
400
447
|
|
|
401
448
|
# Runs this column's g-access and draws the one from GRAPHICS_DELAY
|
data/lib/badline.rb
CHANGED
|
@@ -24,11 +24,14 @@ require "badline/cia"
|
|
|
24
24
|
require "badline/via"
|
|
25
25
|
require "badline/sid"
|
|
26
26
|
require "badline/debug_register"
|
|
27
|
+
require "badline/reu"
|
|
27
28
|
require "badline/interrupts"
|
|
28
29
|
require "badline/traps"
|
|
29
30
|
require "badline/cpu"
|
|
30
31
|
require "badline/vic"
|
|
31
32
|
require "badline/keyboard_buffer"
|
|
33
|
+
require "badline/iec_bus"
|
|
34
|
+
require "badline/drive1541"
|
|
32
35
|
require "badline/computer"
|
|
33
36
|
require "badline/checkpoint"
|
|
34
37
|
require "badline/storage"
|
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.5.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Inge Jørgensen
|
|
@@ -47,6 +47,7 @@ files:
|
|
|
47
47
|
- exe/badline-ruby
|
|
48
48
|
- lib/badline.rb
|
|
49
49
|
- lib/badline/address_bus.rb
|
|
50
|
+
- lib/badline/address_bus/ultimax_pages.rb
|
|
50
51
|
- lib/badline/addressable.rb
|
|
51
52
|
- lib/badline/audio.rb
|
|
52
53
|
- lib/badline/audio/aiff.rb
|
|
@@ -107,8 +108,22 @@ files:
|
|
|
107
108
|
- lib/badline/cycleable.rb
|
|
108
109
|
- lib/badline/datasette.rb
|
|
109
110
|
- lib/badline/debug_register.rb
|
|
111
|
+
- lib/badline/drive1541.rb
|
|
112
|
+
- lib/badline/drive1541/bus.rb
|
|
113
|
+
- lib/badline/drive1541/disk.rb
|
|
114
|
+
- lib/badline/drive1541/disk_via.rb
|
|
115
|
+
- lib/badline/drive1541/gcr.rb
|
|
116
|
+
- lib/badline/drive1541/idle.rb
|
|
117
|
+
- lib/badline/drive1541/mechanism.rb
|
|
118
|
+
- lib/badline/drive1541/orbit.rb
|
|
119
|
+
- lib/badline/drive1541/rotation.rb
|
|
120
|
+
- lib/badline/drive1541/sector_reader.rb
|
|
121
|
+
- lib/badline/drive1541/serial_port.rb
|
|
122
|
+
- lib/badline/drive1541/sleep.rb
|
|
123
|
+
- lib/badline/drive1541/track.rb
|
|
110
124
|
- lib/badline/gui.rb
|
|
111
125
|
- lib/badline/gui/application.rb
|
|
126
|
+
- lib/badline/gui/drive_led_pane.rb
|
|
112
127
|
- lib/badline/gui/gamepads.rb
|
|
113
128
|
- lib/badline/gui/joy_map.rb
|
|
114
129
|
- lib/badline/gui/key_map.rb
|
|
@@ -116,6 +131,7 @@ files:
|
|
|
116
131
|
- lib/badline/gui/pane.rb
|
|
117
132
|
- lib/badline/gui/screen_pane.rb
|
|
118
133
|
- lib/badline/gui/window.rb
|
|
134
|
+
- lib/badline/iec_bus.rb
|
|
119
135
|
- lib/badline/input.rb
|
|
120
136
|
- lib/badline/input/mouse1351.rb
|
|
121
137
|
- lib/badline/input/paddles.rb
|
|
@@ -150,6 +166,7 @@ files:
|
|
|
150
166
|
- lib/badline/keyboard.rb
|
|
151
167
|
- lib/badline/keyboard_buffer.rb
|
|
152
168
|
- lib/badline/media.rb
|
|
169
|
+
- lib/badline/media/true_drive.rb
|
|
153
170
|
- lib/badline/memory.rb
|
|
154
171
|
- lib/badline/options.rb
|
|
155
172
|
- lib/badline/ram_expansion.rb
|
|
@@ -158,10 +175,15 @@ files:
|
|
|
158
175
|
- lib/badline/ram_expansion/plus60k.rb
|
|
159
176
|
- lib/badline/ram_expansion/unexpanded.rb
|
|
160
177
|
- lib/badline/region.rb
|
|
178
|
+
- lib/badline/reu.rb
|
|
179
|
+
- lib/badline/reu/dma.rb
|
|
180
|
+
- lib/badline/reu/ram.rb
|
|
181
|
+
- lib/badline/reu/trigger.rb
|
|
161
182
|
- lib/badline/rom.rb
|
|
162
183
|
- lib/badline/roms/README
|
|
163
184
|
- lib/badline/roms/basic.rom
|
|
164
185
|
- lib/badline/roms/character.rom
|
|
186
|
+
- lib/badline/roms/dos1541.rom
|
|
165
187
|
- lib/badline/roms/eapi/LICENSE.md
|
|
166
188
|
- lib/badline/roms/eapi/README
|
|
167
189
|
- lib/badline/roms/eapi/eapi-am29f040-14
|
|
@@ -187,9 +209,12 @@ files:
|
|
|
187
209
|
- lib/badline/storage/d81_image.rb
|
|
188
210
|
- lib/badline/storage/disk_image.rb
|
|
189
211
|
- lib/badline/storage/disk_image/bam.rb
|
|
212
|
+
- lib/badline/storage/disk_image/catalog.rb
|
|
190
213
|
- lib/badline/storage/disk_image/directory.rb
|
|
191
214
|
- lib/badline/storage/disk_image/writing.rb
|
|
215
|
+
- lib/badline/storage/g64_image.rb
|
|
192
216
|
- lib/badline/storage/host_directory.rb
|
|
217
|
+
- lib/badline/storage/listing.rb
|
|
193
218
|
- lib/badline/storage/p00.rb
|
|
194
219
|
- lib/badline/storage/sid_file.rb
|
|
195
220
|
- lib/badline/storage/song_lengths.rb
|
|
@@ -200,6 +225,7 @@ files:
|
|
|
200
225
|
- lib/badline/version.rb
|
|
201
226
|
- lib/badline/via.rb
|
|
202
227
|
- lib/badline/via/control_lines.rb
|
|
228
|
+
- lib/badline/via/fast_forward.rb
|
|
203
229
|
- lib/badline/via/interrupt_register.rb
|
|
204
230
|
- lib/badline/via/shift_register.rb
|
|
205
231
|
- lib/badline/via/timer1.rb
|
|
@@ -219,6 +245,7 @@ files:
|
|
|
219
245
|
- lib/badline/vic/sprite.rb
|
|
220
246
|
- lib/badline/vic/sprite/internal_bus.rb
|
|
221
247
|
- lib/badline/vic/sprite/shifter.rb
|
|
248
|
+
- lib/badline/vic/sprite/timing.rb
|
|
222
249
|
- lib/badline/vic/sprites.rb
|
|
223
250
|
- packaging/homebrew/badline.rb
|
|
224
251
|
- vendor/.gitkeep
|