badline 0.15.1 → 0.16.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 +39 -0
- data/CLAUDE.md +8 -7
- data/README.md +102 -6
- data/doc/pinned-behaviour.md +67 -0
- data/doc/snapshot-format.md +213 -18
- data/doc/snapshots.md +14 -0
- data/lib/badline/c64/common.rb +1 -1
- data/lib/badline/chips/crtc/keyed_state.rb +46 -0
- data/lib/badline/chips/crtc.rb +163 -0
- data/lib/badline/chips/pia/control_lines.rb +138 -0
- data/lib/badline/chips/pia/keyed_parts.rb +56 -0
- data/lib/badline/chips/pia.rb +138 -0
- data/lib/badline/chips/vic/register_log.rb +1 -4
- data/lib/badline/core.rb +3 -0
- data/lib/badline/drives/ieee_bus.rb +28 -0
- data/lib/badline/drives/model1551/cable.rb +5 -2
- data/lib/badline/drives/model1551/tia.rb +13 -34
- data/lib/badline/drives/model1551.rb +26 -4
- data/lib/badline/drives.rb +1 -0
- data/lib/badline/frontend/app.rb +1 -1
- data/lib/badline/frontend/controls.rb +23 -3
- data/lib/badline/frontend/gamepads.rb +10 -3
- data/lib/badline/frontend/keys.rb +88 -0
- data/lib/badline/frontend/media_slots.rb +1 -0
- data/lib/badline/frontend/menu/menu_dialogs.rb +2 -1
- data/lib/badline/frontend/menu/menu_media.rb +27 -28
- data/lib/badline/frontend/menu/menu_pages.rb +15 -2
- data/lib/badline/frontend/menu/menu_ports.rb +22 -1
- data/lib/badline/frontend/menu/pause_menu.rb +1 -0
- data/lib/badline/frontend/pet_keyboard.rb +124 -0
- data/lib/badline/frontend/screens.rb +2 -1
- data/lib/badline/frontend/timeline.rb +16 -9
- data/lib/badline/frontend.rb +1 -0
- data/lib/badline/kernal_trap/dos/writes.rb +3 -1
- data/lib/badline/kernal_trap/dos.rb +6 -1
- data/lib/badline/kernal_trap/frames.rb +117 -0
- data/lib/badline/kernal_trap/ieee.rb +148 -0
- data/lib/badline/kernal_trap/ieee_layout.rb +113 -0
- data/lib/badline/kernal_trap/keyed_state.rb +4 -4
- data/lib/badline/kernal_trap/routine.rb +3 -53
- data/lib/badline/kernal_trap/serial.rb +4 -102
- data/lib/badline/kernal_trap/steps.rb +64 -0
- data/lib/badline/kernal_trap.rb +4 -0
- data/lib/badline/machine/keyboard_buffer.rb +8 -0
- data/lib/badline/machine/settling.rb +1 -1
- data/lib/badline/machine.rb +28 -6
- data/lib/badline/media/extensions.rb +5 -2
- data/lib/badline/media/pet_media.rb +40 -0
- data/lib/badline/media/program.rb +14 -2
- data/lib/badline/media/vic20_media.rb +2 -2
- data/lib/badline/media.rb +36 -16
- data/lib/badline/options/family.rb +17 -6
- data/lib/badline/options/help.rb +19 -3
- data/lib/badline/options/table.rb +14 -2
- data/lib/badline/options/validation.rb +68 -5
- data/lib/badline/options.rb +31 -19
- data/lib/badline/pet/bus/expansion.rb +106 -0
- data/lib/badline/pet/bus.rb +204 -0
- data/lib/badline/pet/canvas.rb +97 -0
- data/lib/badline/pet/cassettes.rb +63 -0
- data/lib/badline/pet/characters.rb +26 -0
- data/lib/badline/pet/cpu.rb +10 -0
- data/lib/badline/pet/crtc_video.rb +142 -0
- data/lib/badline/pet/discrete_video.rb +83 -0
- data/lib/badline/pet/ieee_ports.rb +66 -0
- data/lib/badline/pet/ieee_traps.rb +75 -0
- data/lib/badline/pet/keyboard_ports.rb +74 -0
- data/lib/badline/pet/keyed_modules.rb +85 -0
- data/lib/badline/pet/keyed_parts.rb +123 -0
- data/lib/badline/pet/keyed_state.rb +42 -0
- data/lib/badline/pet/model.rb +113 -0
- data/lib/badline/pet/rom_sets.rb +65 -0
- data/lib/badline/pet/sound.rb +128 -0
- data/lib/badline/pet/via.rb +10 -0
- data/lib/badline/pet/via_ports.rb +19 -0
- data/lib/badline/pet.rb +226 -0
- data/lib/badline/plus4/keyed_state.rb +5 -3
- data/lib/badline/plus4/tcbm_drive.rb +14 -0
- data/lib/badline/plus4.rb +1 -1
- data/lib/badline/roms/README +137 -0
- data/lib/badline/roms/pet/basic1.rom +0 -0
- data/lib/badline/roms/pet/basic2.rom +0 -0
- data/lib/badline/roms/pet/basic4.rom +0 -0
- data/lib/badline/roms/pet/characters1.rom +0 -0
- data/lib/badline/roms/pet/characters2.rom +0 -0
- data/lib/badline/roms/pet/editor1.rom +0 -0
- data/lib/badline/roms/pet/editor2-b.rom +0 -0
- data/lib/badline/roms/pet/editor2-n.rom +0 -0
- data/lib/badline/roms/pet/editor4-40-n-50hz.rom +0 -0
- data/lib/badline/roms/pet/editor4-40-n-60hz.rom +0 -0
- data/lib/badline/roms/pet/editor4-80-b-50hz-0283.rom +0 -0
- data/lib/badline/roms/pet/editor4-80-b-50hz.rom +0 -0
- data/lib/badline/roms/pet/editor4-80-b-60hz.rom +0 -0
- data/lib/badline/roms/pet/editor4-b.rom +0 -0
- data/lib/badline/roms/pet/editor4-n.rom +0 -0
- data/lib/badline/roms/pet/kernal1.rom +0 -0
- data/lib/badline/roms/pet/kernal2.rom +0 -0
- data/lib/badline/roms/pet/kernal4.rom +0 -0
- data/lib/badline/snapshot/container.rb +2 -0
- data/lib/badline/snapshot/field_doc/markdown.rb +1 -1
- data/lib/badline/snapshot/field_doc.rb +16 -3
- data/lib/badline/snapshot/image.rb +14 -7
- data/lib/badline/snapshot/pet_setup.rb +71 -0
- data/lib/badline/snapshot/storage_setup.rb +7 -1
- data/lib/badline/snapshot.rb +9 -5
- data/lib/badline/storage/d80_image.rb +48 -0
- data/lib/badline/storage/d82_image.rb +21 -0
- data/lib/badline/storage/tap.rb +16 -3
- data/lib/badline/storage.rb +2 -0
- data/lib/badline/support/pet_checkpoint.rb +38 -0
- data/lib/badline/timing.rb +5 -4
- data/lib/badline/version.rb +1 -1
- data/lib/badline/vic20/attachments.rb +7 -2
- data/lib/badline/vic20/bus/keyed_state.rb +5 -4
- data/lib/badline/vic20/bus.rb +5 -0
- data/lib/badline/vic20.rb +1 -1
- metadata +55 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e262717ff30b8634c869b951cbb627fead4c6d4270cb0f9251cfadb567c0edef
|
|
4
|
+
data.tar.gz: 6c35c8a8313fe7de6de0d7df4a8436bebc160e1267e11132bd84c0be0abc50b0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b9de5e45e9ab8b0d8a18c98815599c6055f0fc1a44a2324f34f60753a3096d5c254edad42852e7bf0bf1507b1fb845512cca41117fb6f5f51988fa3a41be0204
|
|
7
|
+
data.tar.gz: 5102663a8eee7f811f9e88b81ff79948ad4f1011d790551a8d8bbba53de29c676f4055db0fe15a2e1085b0bbe3efee805e2db421ba5161b77c9abbaefb181623
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.16.0](https://github.com/elektronaut/badline/compare/v0.15.1...v0.16.0) (2026-10-17)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* add the 6520 PIA ([329bf8c](https://github.com/elektronaut/badline/commit/329bf8c04a6f8cc666ea1dfded4ec1a8431e07cc))
|
|
9
|
+
* add the PET's IEEE trap layouts and keyboard buffer layouts ([f628ba2](https://github.com/elektronaut/badline/commit/f628ba26c661d1c539c28506e48a95504afd7fd3))
|
|
10
|
+
* answer the debug register at $8BFF on every PET ([76f47ab](https://github.com/elektronaut/badline/commit/76f47ab67f834eb89451fb95134fae2abcadde36))
|
|
11
|
+
* attach programs, disks and archives to the PET, .d80 and .d82 among them ([2094ee5](https://github.com/elektronaut/badline/commit/2094ee53ec3e94a1a7571d38b598212476cf738b))
|
|
12
|
+
* boot the PET to READY headless ([b86044a](https://github.com/elektronaut/badline/commit/b86044a149cde620b41eac3c5a77db252e68c10c))
|
|
13
|
+
* bundle the PET ROMs and refuse badline pet until it runs ([76591ff](https://github.com/elektronaut/badline/commit/76591ffc72c615f0c78649e4b29f0dc8e4a3775f))
|
|
14
|
+
* count the PET's CRTC to the cycle and paint its picture ([59a010f](https://github.com/elektronaut/badline/commit/59a010fc1e5250f543c796ab0de464241b28dcae))
|
|
15
|
+
* fit the 8032's other 50 Hz editor, 901474-04 dated 0283, with --editor 4-80-b-50hz-0283 ([b7b230f](https://github.com/elektronaut/badline/commit/b7b230f4032ba7145358cb60f1be1e370997c0e0))
|
|
16
|
+
* let any machine's timing share a window pixel between its dots ([55f04e8](https://github.com/elektronaut/badline/commit/55f04e86871423f1b0121a4570763f501cb08db1))
|
|
17
|
+
* paint the PET's discrete 40-column video ([2d4f5e6](https://github.com/elektronaut/badline/commit/2d4f5e6caac7c2a3d4e3abe5e8ef37185962dbc9))
|
|
18
|
+
* play and record tapes on the PET's two cassette ports ([aea1a9d](https://github.com/elektronaut/badline/commit/aea1a9de8008ceb576e006520234fa7dc6b4a5e3))
|
|
19
|
+
* play the PET's VIA CB2 as its sound ([cd24520](https://github.com/elektronaut/badline/commit/cd24520a8e87bce7938cae12d153e332f9be1f99))
|
|
20
|
+
* read and write 8050 and 8250 disk images ([2196736](https://github.com/elektronaut/badline/commit/2196736d0e9c84146ce259e322c991a14e1fe69d))
|
|
21
|
+
* run the PET and the CBM in the window with badline pet ([0ee8585](https://github.com/elektronaut/badline/commit/0ee8585ef6a2d789dbbbbf06af3a54a9f33fbbff))
|
|
22
|
+
* save and restore the PET in keyed snapshots ([1dcbb75](https://github.com/elektronaut/badline/commit/1dcbb75785ce70ca6de7b6596970ce06a2275a30))
|
|
23
|
+
* serve device 8 to the PET through traps on its IEEE-488 primitives ([7f72c7d](https://github.com/elektronaut/badline/commit/7f72c7d3d58e5520f32c62120a4ce0270f02893a))
|
|
24
|
+
* show the PET in the window, with its keys, memory and model in the pause menu ([7e90498](https://github.com/elektronaut/badline/commit/7e9049864015e511c3db8455b2d5d6749ffc6ea3))
|
|
25
|
+
* type on the PET's graphics and business keyboards by character from the window ([0797790](https://github.com/elektronaut/badline/commit/079779011880ffca5ecc7c67e6bcef9620147ca5))
|
|
26
|
+
* type the PET's shifted keys with Alt, and name its pause-menu page KEYBOARD ([22b3059](https://github.com/elektronaut/badline/commit/22b305966dd44bdd813af71c3bb5e0a4e2202761))
|
|
27
|
+
* wire the PET's key matrices and type into its keyboard buffer ([1f22475](https://github.com/elektronaut/badline/commit/1f22475b581ac95776a86c1dd27f2671afcfb90c))
|
|
28
|
+
* write PET tapes and read a tape's platform from its header ([29ccd99](https://github.com/elektronaut/badline/commit/29ccd99629bb98c311842628be39c298aab12eb9))
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
### Bug Fixes
|
|
32
|
+
|
|
33
|
+
* keep the VIC-20's cartridge name in the machine and its snapshots ([4837ab1](https://github.com/elektronaut/badline/commit/4837ab10049309f39d1b5d3b2170e55ab9d21c76))
|
|
34
|
+
* move a 1551's TCBM interface with its DEV line ([f934bcf](https://github.com/elektronaut/badline/commit/f934bcf6cd2058a4528521fb1e14f75b7d15021c))
|
|
35
|
+
* record the Plus/4's true drive model in its snapshots ([9c8ddb1](https://github.com/elektronaut/badline/commit/9c8ddb1b355145382df4a2813a3e55769839f0c9))
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
### Performance Improvements
|
|
39
|
+
|
|
40
|
+
* sweep only the lines the last PET CRTC frame showed ([026b26a](https://github.com/elektronaut/badline/commit/026b26afc97ed72f32b2e6517a8df18de5d863d1))
|
|
41
|
+
|
|
3
42
|
## [0.15.1](https://github.com/elektronaut/badline/compare/v0.15.0...v0.15.1) (2026-10-12)
|
|
4
43
|
|
|
5
44
|
|
data/CLAUDE.md
CHANGED
|
@@ -14,8 +14,8 @@ directory: `chips/vic.rb` is `Badline::Chips::VIC`.
|
|
|
14
14
|
the VIC holds BA low). `c64/` holds the rest of the C64's board:
|
|
15
15
|
`c64/bus.rb` handles banking and page-table dispatch, and
|
|
16
16
|
`c64/banked_ram.rb` and `c64/banked_ram/` the +60K and +256K boards
|
|
17
|
-
that bank in extra RAM through `$D100`. `vic20.rb` and `vic20/`, and
|
|
18
|
-
`
|
|
17
|
+
that bank in extra RAM through `$D100`. `vic20.rb` and `vic20/`, `c128.rb` and `c128/`,
|
|
18
|
+
`plus4.rb` and `plus4/`, and `pet.rb` and `pet/` are the other families, and `machine.rb`
|
|
19
19
|
builds each by name. Every family reads and writes memory as its CPU
|
|
20
20
|
sees it with `peek` and `poke`
|
|
21
21
|
- **CPU**: `chips/cpu.rb` and `chips/cpu/`: the 6502 core
|
|
@@ -25,10 +25,11 @@ directory: `chips/vic.rb` is `Badline::Chips::VIC`.
|
|
|
25
25
|
C128's Z80
|
|
26
26
|
- **VIC-II**: `chips/vic.rb` and `chips/vic/`, covering the sequencer,
|
|
27
27
|
sprites, graphics modes, border and register timing. `chips/vic_i.rb`
|
|
28
|
-
is the VIC-20's VIC-I and its sound,
|
|
28
|
+
is the VIC-20's VIC-I and its sound, `chips/vdc.rb` the C128's VDC,
|
|
29
|
+
and `chips/crtc.rb` the PET's 6545 CRTC
|
|
29
30
|
- **CIA**: `chips/cia.rb` and `chips/cia/` (timers, serial and the TOD
|
|
30
|
-
clock, `time_of_day.rb`). `chips/via.rb` is the 6522 of the VIC-20
|
|
31
|
-
the
|
|
31
|
+
clock, `time_of_day.rb`). `chips/via.rb` is the 6522 of the VIC-20, the
|
|
32
|
+
drives and the PET, and `chips/pia.rb` the PET's 6520 PIA
|
|
32
33
|
- **REU**: `c64/reu.rb` and `c64/reu/`, the RAM Expansion Unit's
|
|
33
34
|
registers and its DMA, which `C64#cycle!` clocks in place of the CPU
|
|
34
35
|
while it holds the bus
|
|
@@ -70,7 +71,7 @@ file: `core.rb` requires their members one by one.
|
|
|
70
71
|
| SingleStepTests 65x02 | `rake test` (100 sampled cases per opcode) | CPU, per-cycle bus traces |
|
|
71
72
|
| SingleStepTests z80 | `rake test` (the first 100 cases per opcode, `Z80_SAMPLE=all` for all 1,604,000) | `Z80`: registers, flags, ports and the bus pins on every T-state |
|
|
72
73
|
| Wolfgang Lorenz suite | `bin/lorenz` | CPU, CIA, interrupts; its plus4 build with `--plus4`: the CPU on the 264's bus, the TED's clock, DMA, timers and interrupt |
|
|
73
|
-
| VICE testbench | `bin/testbench <subtree>` | `VICII/`, `CIA/`, `interrupts/`, `CPU/`, cartridges with `--carts`, the true 1541 drive with `--drive`, the VIC-20 with `--vic20`, the C128 in C64 mode with `--c128c64`, in C128 mode with `--c128`, and its Z80 with `--c128-z80`, the Plus/4 with `--plus4
|
|
74
|
+
| VICE testbench | `bin/testbench <subtree>` | `VICII/`, `CIA/`, `interrupts/`, `CPU/`, cartridges with `--carts`, the true 1541 drive with `--drive`, the VIC-20 with `--vic20`, the C128 in C64 mode with `--c128c64`, in C128 mode with `--c128`, and its Z80 with `--c128-z80`, the Plus/4 with `--plus4`, the C16 with `--c16`, and the PET with `--pet` (8096) and `--pet-discrete` (2001, 3032) |
|
|
74
75
|
| VICE SID testprogs | `bin/sidtests` | SID |
|
|
75
76
|
| Drive scenarios | `bin/drive_scenarios` | The true 1541 running the DOS ROM: save, format, the error channel, idle, write protect and autostart; the `plus4-*` rows on the Plus/4 and C16, with the 1541 and 1581 on their serial bus and a tape saved and loaded back on the datasette |
|
|
76
77
|
| CIA offline grids | `bundle exec rspec --tag slow spec/badline/chips/cia` | CIA timers and shift register, against a bare CIA in about 2 min |
|
|
@@ -274,7 +275,7 @@ serial bus, its media, the CPU port or the datasette.
|
|
|
274
275
|
Its tests run one at a time as the C64's do, with
|
|
275
276
|
`ruby --yjit bin/lorenz --plus4 --resume <test> --stop-after <test>`; the C128 (`c128.rb`, `c128/`), or
|
|
276
277
|
the VIC-IIe, CPU or PLA code it shares with the C64 → `testbench-c128c64`
|
|
277
|
-
(`bin/testbench --c128c64`); the C128's Z80, MMU or hand-over → `testbench-c128-z80` (`bin/testbench --c128-z80`) and `testbench-c128`; SID → `sid`, plus `sid-8580` for anything the 8580
|
|
278
|
+
(`bin/testbench --c128c64`); the PET (`pet.rb`, `pet/`), its 6520 PIA (`chips/pia.rb`) or its CRTC (`chips/crtc.rb`) → `testbench-pet` (`bin/testbench --pet`) and `testbench-pet-discrete` (`bin/testbench --pet-discrete`); the C128's Z80, MMU or hand-over → `testbench-c128-z80` (`bin/testbench --c128-z80`) and `testbench-c128`; SID → `sid`, plus `sid-8580` for anything the 8580
|
|
278
279
|
model reaches (`bin/sidtests --sid 8580`). Leave the Lorenz chain to CI,
|
|
279
280
|
unless your code has a rule in `doc/pinned-behaviour.md` that names Lorenz
|
|
280
281
|
tests: the interrupt polling, CPU port and CIA timer rules. Run just the
|
data/README.md
CHANGED
|
@@ -13,7 +13,7 @@ are modelled at the cycle level.
|
|
|
13
13
|
It runs programs, disk and tape images, cartridges and SID tunes, and
|
|
14
14
|
the SDL2 front end supports the keyboard, joysticks, game controllers,
|
|
15
15
|
paddles and a 1351 mouse. It also runs a PAL VIC-20, as
|
|
16
|
-
`badline vic20`, the C128, in C128 mode on 40 or 80 columns and in C64 mode, as `badline c128`,
|
|
16
|
+
`badline vic20`, the C128, in C128 mode on 40 or 80 columns and in C64 mode, as `badline c128`, the Plus/4, the C16 and the C116, as `badline plus4`, and the PET and CBM, as `badline pet`. See [What's emulated](#whats-emulated) for the details.
|
|
17
17
|
|
|
18
18
|
It comes in two builds of the same emulator:
|
|
19
19
|
|
|
@@ -70,7 +70,8 @@ from it.
|
|
|
70
70
|
The first argument can name the machine, as in `badline c64 game.prg`.
|
|
71
71
|
The C64 is the default, and `--model` picks which C64. See
|
|
72
72
|
[The VIC-20](#the-vic-20) for `badline vic20`, [The C128](#the-c128)
|
|
73
|
-
for `badline c128
|
|
73
|
+
for `badline c128`, [The Plus/4](#the-plus4) for `badline plus4` and
|
|
74
|
+
[The PET](#the-pet) for `badline pet`.
|
|
74
75
|
|
|
75
76
|
`badline-ruby` takes the same media and the same options, with the
|
|
76
77
|
differences noted in the table. `--help` lists the options for either.
|
|
@@ -85,13 +86,15 @@ differences noted in the table. `--help` lists the options for either.
|
|
|
85
86
|
| `--drive-type 1541` | On the Plus/4, make the true drive on device 8 an emulated 1541 on the serial bus in place of the 1551. It implies `--true-drive`. See [The Plus/4](#the-plus4) |
|
|
86
87
|
| `-s`, `--subtune N` | Pick a subtune of a `.sid` file, counting from 1 |
|
|
87
88
|
| `--sid 6581`, `--sid 8580` | Fit the older or newer SID. `--sid auto`, the default, takes a `.sid` tune's own |
|
|
88
|
-
| `--ram SIZE` | Give a VIC-20 the RAM expansion `SIZE`: `unexpanded`, `3k`, `8k`, `16k`, `24k`, `32k` or `all`. Without it, the VIC-20 gets the expansion its media needs. See [The VIC-20](#the-vic-20). On the Plus/4, `16k`, `32k` or `64k` of RAM in place of the model's own |
|
|
89
|
+
| `--ram SIZE` | Give a VIC-20 the RAM expansion `SIZE`: `unexpanded`, `3k`, `8k`, `16k`, `24k`, `32k` or `all`. Without it, the VIC-20 gets the expansion its media needs. See [The VIC-20](#the-vic-20). On the Plus/4, `16k`, `32k` or `64k` of RAM in place of the model's own, and on the PET `4k`, `8k`, `16k` or `32k` |
|
|
90
|
+
| `--60hz` | Run a CRTC PET's 60 Hz editor in place of its 50 Hz one. See [The PET](#the-pet) |
|
|
91
|
+
| `--basic VERSION`, `--editor NAME` | Fit a PET with an upgrade ROM its board takes: BASIC `1`, `2` or `4`, or an editor. See [The PET](#the-pet) |
|
|
89
92
|
| `--c1lo FILE`, `--c1hi FILE`, `--c2lo FILE`, `--c2hi FILE` | Put a raw `.bin` ROM image in one of the Plus/4's cartridge slots: cartridge 1 or 2, low (`$8000`) or high (`$C000`). See [The Plus/4](#the-plus4) |
|
|
90
93
|
| `--sid-card 6581`, `--sid-card 8580` | Fit a Plus/4 or C16 with a SID card at `$FD40`. See [The Plus/4](#the-plus4) |
|
|
91
94
|
| `--sid-card-address fd40`, `--sid-card-address fe80` | Put the SID card at `$FD40` (the default) or at `$FE80` |
|
|
92
95
|
| `--ram-expansion NAME` | Fit a Plus/4 or C16 with a RAM expansion: `hannes256`, `hannes1m` or `csory256`. See [The Plus/4](#the-plus4) |
|
|
93
96
|
| `--reu SIZE` | Plug in a RAM Expansion Unit of `SIZE` K: 128, 256, 512 (a 1750) or up to 16384 |
|
|
94
|
-
| `--model NAME` | Run another model of the machine, named as in VICE. For the C64: `c64` (the default, a PAL C64 with the 6569 VIC-II, 6526 CIAs and the 6581 SID), `c64c` (the PAL C64C, with the 8565, 6526As and the 8580), `ntsc` (the 6567R8), `newntsc` (the NTSC C64C, with the 8562, 6526As and the 8580), `oldntsc` (the first NTSC C64s' 6567R56A), `drean` (the Drean C64 of Argentina, PAL-N with the 6572), `sx64` (the portable SX-64, with its own KERNAL and no datasette), `pet64` (the PET 64 or Educator 64, a PAL C64 in a PET's case with its own KERNAL and a green monochrome monitor) `c64gs` (the C64GS games console, a PAL C64C with its own BASIC and KERNAL, and no keyboard or datasette) or `ultimax` (the MAX Machine of Japan, NTSC with 2K of RAM, one CIA and no ROMs, which runs only a cartridge). `--sid` or a `.sid` tune's own SID takes the model's place. The VIC-20, the C128
|
|
97
|
+
| `--model NAME` | Run another model of the machine, named as in VICE. For the C64: `c64` (the default, a PAL C64 with the 6569 VIC-II, 6526 CIAs and the 6581 SID), `c64c` (the PAL C64C, with the 8565, 6526As and the 8580), `ntsc` (the 6567R8), `newntsc` (the NTSC C64C, with the 8562, 6526As and the 8580), `oldntsc` (the first NTSC C64s' 6567R56A), `drean` (the Drean C64 of Argentina, PAL-N with the 6572), `sx64` (the portable SX-64, with its own KERNAL and no datasette), `pet64` (the PET 64 or Educator 64, a PAL C64 in a PET's case with its own KERNAL and a green monochrome monitor) `c64gs` (the C64GS games console, a PAL C64C with its own BASIC and KERNAL, and no keyboard or datasette) or `ultimax` (the MAX Machine of Japan, NTSC with 2K of RAM, one CIA and no ROMs, which runs only a cartridge). `--sid` or a `.sid` tune's own SID takes the model's place. The VIC-20, the C128, the Plus/4 and the PET have models of their own: see their sections |
|
|
95
98
|
| `--ntsc` | Run an NTSC C64, as `--model ntsc` does |
|
|
96
99
|
| `--c64` | Start a C128 in C64 mode, holding `C=` at power-on. See [The C128](#the-c128) |
|
|
97
100
|
| `--no-sound` | Don't play the SID (`badline` only, where sound is on by default) |
|
|
@@ -283,6 +286,69 @@ out. `F11` and the
|
|
|
283
286
|
Snapshots page save it as they do the others, but not for VICE.
|
|
284
287
|
[Input](#input) lists its keys.
|
|
285
288
|
|
|
289
|
+
## The PET
|
|
290
|
+
|
|
291
|
+
`badline pet` runs a CBM 8032, with BASIC 4 and 80 columns on a green
|
|
292
|
+
screen, and takes programs, disks and tapes:
|
|
293
|
+
|
|
294
|
+
```sh
|
|
295
|
+
badline pet # READY., in BASIC 4
|
|
296
|
+
badline pet game.prg # Load and run a program
|
|
297
|
+
badline pet game.d64 # Mount a disk image as device 8 and load it
|
|
298
|
+
badline pet game.d82 # The same with an 8250's disk
|
|
299
|
+
badline pet game.tap # Insert a tape and load it
|
|
300
|
+
badline pet --model 2001 # The first PET, with BASIC 1
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
`--model` picks the machine: `8032` (the default, 32K, 80 columns and
|
|
304
|
+
the business keyboard), `8096` (an 8032 with the 64K board at `$FFF0`),
|
|
305
|
+
`4032` (40 columns on a CRTC and the graphics keyboard), `3032` (the
|
|
306
|
+
discrete 40-column board with BASIC 2), `3032b` (the same with the
|
|
307
|
+
business keyboard) and `2001` (8K, BASIC 1 and the chiclet keyboard).
|
|
308
|
+
`--ram 4k`, `8k` or `16k` fits less RAM in place of the model's own, as
|
|
309
|
+
the 3008, 3016 and 4016 had.
|
|
310
|
+
|
|
311
|
+
The 4032, 8032 and 8096 run their 50 Hz editor, and `--60hz` their
|
|
312
|
+
60 Hz one. The others always run at 60 Hz. `--basic` fits the upgrade
|
|
313
|
+
ROMs Commodore sold, with the editor that goes with them: BASIC 2 for the
|
|
314
|
+
2001, and BASIC 4 for the 3032 and the 3032b. `--editor` names the editor
|
|
315
|
+
instead, among those the board and its BASIC take. Each name is the
|
|
316
|
+
BASIC, the keyboard, `n` for graphics or `b` for business, and on a CRTC
|
|
317
|
+
board the columns and the frame rate: `1`, `2-n`, `2-b`, `4-n`, `4-b`,
|
|
318
|
+
`4-40-n-50hz`, `4-40-n-60hz`, `4-80-b-50hz`, `4-80-b-50hz-0283` and
|
|
319
|
+
`4-80-b-60hz`.
|
|
320
|
+
|
|
321
|
+
The 8032 and the 8096 take two 50 Hz editors, both 901474-04 and read
|
|
322
|
+
from different chips. `4-80-b-50hz`, the default, runs lines of 50
|
|
323
|
+
cycles, 400 to a frame. `4-80-b-50hz-0283`, the chip dated 0283, runs
|
|
324
|
+
lines of 64 cycles, 313 to a frame, with the screen's rows a scanline
|
|
325
|
+
closer together and lower down. Both boot to the same READY.
|
|
326
|
+
|
|
327
|
+
```sh
|
|
328
|
+
badline pet --model 2001 --basic 2 # A 2001 with BASIC 2
|
|
329
|
+
badline pet --model 3032 --basic 4 # A 3032 with BASIC 4, without a CRTC
|
|
330
|
+
badline pet --editor 4-80-b-60hz # An 8032 at 60 Hz, as --60hz runs it
|
|
331
|
+
badline pet --editor 4-80-b-50hz-0283 # An 8032 with the other 50 Hz editor
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
BASIC 1, on the 2001, can't LOAD from a disk drive: its own ROM breaks
|
|
335
|
+
the transfer, so `LOAD"NAME",8` finds the file and loads nothing. A
|
|
336
|
+
disk given to `badline` still starts its first program on a 2001, which
|
|
337
|
+
goes into memory as a program file does. `--basic 2`, the upgrade
|
|
338
|
+
Commodore sold, loads from disk.
|
|
339
|
+
|
|
340
|
+
A program loads at the start of BASIC, `$0401`, and runs. A `.d80`, a
|
|
341
|
+
`.d82` or a tape made for the PET starts a PET without `pet`, but a
|
|
342
|
+
program that loads at `$0401` starts a C64, since a VIC-20 with 3K loads
|
|
343
|
+
there too. Disks go through the KERNAL traps on the IEEE-488 bus as
|
|
344
|
+
device 8, and tapes play on cassette port 1. The keys type what the host's
|
|
345
|
+
keys type, on either keyboard, and `Alt` adds the PET's `SHIFT`:
|
|
346
|
+
[Input](#input) lists the rest. The pause
|
|
347
|
+
menu's Power page names the model, its RAM and its frame rate, and its
|
|
348
|
+
Expansion port page its RAM and the 8096's 64K board. The PET has no
|
|
349
|
+
joysticks. `F11` and the Snapshots page save it as they do the others,
|
|
350
|
+
but not for VICE.
|
|
351
|
+
|
|
286
352
|
## Snapshots
|
|
287
353
|
|
|
288
354
|
`F11` quicksaves the whole machine to the next of five slots in
|
|
@@ -349,6 +415,30 @@ and put their own here:
|
|
|
349
415
|
They have no `RESTORE`, `←` or `↑` key, so `Page Up`, `` ` `` and `]`
|
|
350
416
|
press nothing.
|
|
351
417
|
|
|
418
|
+
The PET types the characters on the host's keys, so Shift and `'` type
|
|
419
|
+
`"` on the graphics keyboard, where `"` has a key of its own, and on the
|
|
420
|
+
business keyboard, where it's `SHIFT` and `2`. Shift with a letter types
|
|
421
|
+
the graphics character on its key. Either `Alt` with a key presses the
|
|
422
|
+
PET's `SHIFT` and the key its unshifted character is on, so `Alt` and
|
|
423
|
+
`'` type the graphics character on the graphics keyboard's `'` key, and
|
|
424
|
+
on the business keyboard the character `SHIFT` gives that key. The keys
|
|
425
|
+
without a character are here, with the pause menu's Keyboard page
|
|
426
|
+
listing them too:
|
|
427
|
+
|
|
428
|
+
| PET | Host |
|
|
429
|
+
|-----|------|
|
|
430
|
+
| `RUN/STOP` | `Page Down`, or `Escape` on the graphics keyboard |
|
|
431
|
+
| `ESC` | `Escape`, on the business keyboard |
|
|
432
|
+
| `CLR/HOME` | `Home` |
|
|
433
|
+
| `INST/DEL` | `Backspace` |
|
|
434
|
+
| `RVS` | `Ctrl` |
|
|
435
|
+
| `CRSR ⇔` / `CRSR ⇕` | `Left`, `Right` / `Up`, `Down`, with `SHIFT` where they go left or up |
|
|
436
|
+
| `↑` / `←` | `^` / `_` or `` ` `` |
|
|
437
|
+
| `TAB`, `REPEAT` | `Tab`, `Page Up`, on the business keyboard |
|
|
438
|
+
| Keypad | The keypad |
|
|
439
|
+
|
|
440
|
+
On the PET `Tab` is a key, since there are no joysticks to switch to.
|
|
441
|
+
|
|
352
442
|
`Tab` switches the keys between the C64 keyboard and the joysticks. The
|
|
353
443
|
window title shows where they go, and any device plugged into a control
|
|
354
444
|
port:
|
|
@@ -392,9 +482,9 @@ too.
|
|
|
392
482
|
| Drive 8 | The disk: insert, eject, the previous or next disk of its set, and whether it's writable |
|
|
393
483
|
| Datasette | The tape: insert, eject, PLAY and REWIND |
|
|
394
484
|
| Expansion port | The cartridge's name: a `.crt`'s own, or a raw image's file name. Insert, remove, and its freeze button if it has one. On the VIC-20, the cartridge and the RAM expansion |
|
|
395
|
-
| Ports | The device in each control port, and where the keys go |
|
|
485
|
+
| Ports | The device in each control port, and where the keys go. On the PET, Keyboard: where its keys are |
|
|
396
486
|
| Sound | Mute, and the SID's model |
|
|
397
|
-
| Power | Reset, power cycle and quit, on a C128 its model and mode, and on a Plus/4 its model and RAM |
|
|
487
|
+
| Power | Reset, power cycle and quit, on a C128 its model and mode, and on a Plus/4 or a PET its model and RAM |
|
|
398
488
|
|
|
399
489
|
INSERT opens a file browser. A disk's set is the `.m3u` or `.vfl` list it
|
|
400
490
|
was opened from, or one in its folder that lists it. Without one, it comes
|
|
@@ -444,6 +534,12 @@ in cartridge 1 as it does from the command line.
|
|
|
444
534
|
receives at its baud rates, with nothing on the user port; Ruby code
|
|
445
535
|
driving the machine can plug in a terminal, whose bytes it feeds and
|
|
446
536
|
drains, or a loopback plug (`Plus4::ACIA#plug`).
|
|
537
|
+
- **PET and CBM**: the 2001, 3032, 3032b, 4032, 8032 and 8096, with
|
|
538
|
+
BASIC 1, 2 or 4, the discrete video and the 6545 CRTC on 40 and 80
|
|
539
|
+
columns, both 6520 PIAs and the 6522 VIA, the graphics and business
|
|
540
|
+
keyboards, the sound on the VIA's CB2, the 8096's 64K board, both
|
|
541
|
+
cassette ports and device 8 on the IEEE-488 bus through the KERNAL
|
|
542
|
+
traps, `.d80` and `.d82` among its disks (`badline pet`).
|
|
447
543
|
- **1541**: an emulated drive running its own DOS (`--true-drive`).
|
|
448
544
|
- **1571**: the C128D's drive running DOS 3.0, in 1541 mode and in 1571
|
|
449
545
|
mode at 2 MHz with both sides of a `.d71` or `.g71`, and fast serial
|
data/doc/pinned-behaviour.md
CHANGED
|
@@ -48,6 +48,8 @@ only catches the rows that happen to move.
|
|
|
48
48
|
- [SID data bus](#sid-data-bus)
|
|
49
49
|
- [SID envelope](#sid-envelope)
|
|
50
50
|
- [`.sid` tune banking](#sid-tune-banking)
|
|
51
|
+
- [PET discrete video](#pet-discrete-video)
|
|
52
|
+
- [PET CRTC](#pet-crtc)
|
|
51
53
|
|
|
52
54
|
## CPU interrupt recognition
|
|
53
55
|
|
|
@@ -2162,3 +2164,68 @@ testprogs named.
|
|
|
2162
2164
|
in `$19` and goes silent when BASIC writes `$0a` there.
|
|
2163
2165
|
- Spec guard:
|
|
2164
2166
|
[`sid_tune/file/driver_spec.rb`](../spec/badline/sid_tune/file/driver_spec.rb).
|
|
2167
|
+
|
|
2168
|
+
## PET discrete video
|
|
2169
|
+
|
|
2170
|
+
- The 2001's and 3000 series' frame is 260 lines of 64 cycles, 16,640
|
|
2171
|
+
cycles, and the vertical drive line is low for 3,840 of them, 60 lines.
|
|
2172
|
+
- Pinned by xpet's 2001 and 3032 as a black box: the falling edges of
|
|
2173
|
+
VIA PB5, timed with VIA T1 over 64 frames, come 16,640 cycles apart,
|
|
2174
|
+
each low for 3,840. Nothing checks the 64-cycle line itself.
|
|
2175
|
+
- Spec guard: *the vertical drive line* in
|
|
2176
|
+
[`pet/discrete_video_spec.rb`](../spec/badline/pet/discrete_video_spec.rb).
|
|
2177
|
+
- A line's 40 characters come in its last 40 cycles, 24 cycles after the
|
|
2178
|
+
line starts, and the vertical drive line falls right after line 199's
|
|
2179
|
+
last character. Each character reads the screen RAM as it stands before
|
|
2180
|
+
the CPU's access in the same cycle.
|
|
2181
|
+
- Pinned by `PET/hi-res`, which rewrites the screen RAM as the beam
|
|
2182
|
+
reads it: its picture matches `hi-res.bitmap` (all but the bitmap's
|
|
2183
|
+
tenth column, which `hi-res.py` makes from an immediate that isn't a
|
|
2184
|
+
screen write) with the characters anywhere from 6 to 32 cycles after
|
|
2185
|
+
the line starts. 24 puts them at the end of the line, so the vertical
|
|
2186
|
+
drive line falls as the display ends.
|
|
2187
|
+
- Spec guard: *shows a line's characters in its last 40 cycles* in
|
|
2188
|
+
[`pet/discrete_video_spec.rb`](../spec/badline/pet/discrete_video_spec.rb).
|
|
2189
|
+
|
|
2190
|
+
## PET CRTC
|
|
2191
|
+
|
|
2192
|
+
- The 6545's counters step once a cycle, ahead of the CPU, and compare
|
|
2193
|
+
with the registers as they stand that cycle, so a write lands from the
|
|
2194
|
+
next character. Vertical sync starts at the first character of row R7
|
|
2195
|
+
and lasts 16 lines, and its start is PIA 1 CB1's falling edge, the
|
|
2196
|
+
editor's IRQ. Every editor leaves R3's upper four bits 0, and nothing
|
|
2197
|
+
has checked another value.
|
|
2198
|
+
- Pinned by `CRTC/crtc0`, `crtc4`-`crtc9`, `crtc11` and `crtc12`
|
|
2199
|
+
(`testbench-pet`), which time their register writes from that IRQ
|
|
2200
|
+
with VIA T1 and loops: all eight match their references dot for dot.
|
|
2201
|
+
The 16 lines match xpet's frame probe on every editor (vertical drive
|
|
2202
|
+
low for 800 cycles of 50-cycle lines, 1,024 of 64).
|
|
2203
|
+
- Spec guard:
|
|
2204
|
+
[`chips/crtc_spec.rb`](../spec/badline/chips/crtc_spec.rb).
|
|
2205
|
+
- A compare the counter has already passed doesn't happen: R1 written
|
|
2206
|
+
below the character counter leaves the display on to the line's end,
|
|
2207
|
+
MA counting on, and on a row's last line leaves the next row's start
|
|
2208
|
+
where it was, so the row repeats. R9 written below the line counter
|
|
2209
|
+
runs the row on to 32 lines, and R6 written below the row counter
|
|
2210
|
+
leaves the display on to the frame's end.
|
|
2211
|
+
- Pinned by `CRTC/crtc6` and `crtc7` (R1), `crtc10` (R9, which matches
|
|
2212
|
+
today's xpet dot for dot; its reference is an older xpet's) and
|
|
2213
|
+
`crtc13` (R6).
|
|
2214
|
+
- Spec guard: *past an R1 it missed*, *repeats a row*, *past an R9 it
|
|
2215
|
+
missed* and *past an R6 it missed* in
|
|
2216
|
+
[`chips/crtc_spec.rb`](../spec/badline/chips/crtc_spec.rb).
|
|
2217
|
+
- The picture is framed as xpet frames its screenshots: R1's characters
|
|
2218
|
+
in the middle of 704 dots (80 columns) or 384 (40); each character as
|
|
2219
|
+
far right as it comes after its line's horizontal sync, so lines whose
|
|
2220
|
+
sync moves mid-frame move against the rest; the frame's first line
|
|
2221
|
+
where the last frame's lines up to the R6 stop would sit in the middle
|
|
2222
|
+
of 273, unchanged after a frame where the display never stopped; each
|
|
2223
|
+
horizontal sync starting the next line of the picture; nothing within
|
|
2224
|
+
8 dots of either side.
|
|
2225
|
+
- Pinned by `CRTC/crtc4` and `crtc5` (sync moved for some lines),
|
|
2226
|
+
`crtc6` and `crtc7` (display through horizontal sync), `crtc10`
|
|
2227
|
+
(a frame of 232 displayed lines framed from line 20) and the boot
|
|
2228
|
+
screens of the 4032 and the 8032, which match xpet's at the same
|
|
2229
|
+
cycle dot for dot.
|
|
2230
|
+
- Spec guard:
|
|
2231
|
+
[`pet/crtc_video_spec.rb`](../spec/badline/pet/crtc_video_spec.rb).
|
data/doc/snapshot-format.md
CHANGED
|
@@ -22,11 +22,11 @@ key only some of them have names them.
|
|
|
22
22
|
|
|
23
23
|
## BL-MACHINE
|
|
24
24
|
|
|
25
|
-
Written by the C64, VIC-20, C128, Plus/4.
|
|
25
|
+
Written by the C64, VIC-20, C128, Plus/4, PET.
|
|
26
26
|
|
|
27
27
|
| Key | Type | Default |
|
|
28
28
|
| --- | --- | --- |
|
|
29
|
-
| `family` | text: c64 vic20 c128 plus4 | "c64" |
|
|
29
|
+
| `family` | text: c64 vic20 c128 plus4 pet | "c64" |
|
|
30
30
|
| `region` | text: pal ntsc ntscold drean | C64: "pal" |
|
|
31
31
|
| `vic_model` | text: mos6569 mos8565 mos8566 mos8564 | C64: "mos6569" |
|
|
32
32
|
| `cia_model` | text: mos6526 mos6526a | C64: "mos6526" |
|
|
@@ -49,7 +49,7 @@ Written by the C64, VIC-20, C128, Plus/4.
|
|
|
49
49
|
| `ram` | text: unexpanded 3k 8k 16k 24k 32k all | VIC-20: "unexpanded" |
|
|
50
50
|
| `bus.data` | byte | VIC-20: 253; C128: 255 |
|
|
51
51
|
| `bus.video_data` | byte | VIC-20: 0 |
|
|
52
|
-
| `model` | text: c128 c128ntsc c128dcr c128dcrntsc | C128: "c128"; Plus/4: "plus4" |
|
|
52
|
+
| `model` | text: c128 c128ntsc c128dcr c128dcrntsc | C128: "c128"; Plus/4: "plus4"; PET: "8032" |
|
|
53
53
|
| `mode` | text: c64 c128 | C128: "c64" |
|
|
54
54
|
| `bus.address` | word | C128: 65533 |
|
|
55
55
|
| `clock_bits` | int | C128: 0 |
|
|
@@ -61,22 +61,32 @@ Written by the C64, VIC-20, C128, Plus/4.
|
|
|
61
61
|
| `host.typist.code` | int, optional | C128: absent |
|
|
62
62
|
| `host.typist.wait` | int | C128: 0 |
|
|
63
63
|
| `host.typist.typing` | bool | C128: false |
|
|
64
|
-
| `ram_kb` | int | Plus/4: 64 or 16 |
|
|
64
|
+
| `ram_kb` | int | Plus/4: 64 or 16; PET: 32 or 8 |
|
|
65
65
|
| `sid_card` | text: none mos6581 mos8580 | Plus/4: "none" |
|
|
66
66
|
| `tcbm` | bool | Plus/4: false |
|
|
67
67
|
| `sid_card_address` | int | Plus/4: 64832 |
|
|
68
|
+
| `host.true_drive_model` | text: 1541 1551 | Plus/4: "1551" |
|
|
69
|
+
| `refresh_hz` | int | PET: 50 or 60 |
|
|
70
|
+
| `rom.basic` | text | PET: "pet/basic4.rom" or "pet/basic1.rom" |
|
|
71
|
+
| `rom.editor` | text | PET: "pet/editor4-80-b-50hz.rom" or "pet/editor1.rom" |
|
|
72
|
+
| `rom.kernal` | text | PET: "pet/kernal4.rom" or "pet/kernal1.rom" |
|
|
73
|
+
| `rom.characters` | text | PET: "pet/characters2.rom" or "pet/characters1.rom" |
|
|
74
|
+
| `vertical_drive` | bool | PET: true |
|
|
68
75
|
|
|
69
76
|
## BL-RAM
|
|
70
77
|
|
|
71
|
-
Written by the C64, VIC-20, C128, Plus/4.
|
|
78
|
+
Written by the C64, VIC-20, C128, Plus/4, PET.
|
|
72
79
|
|
|
73
80
|
| Key | Type | Default |
|
|
74
81
|
| --- | --- | --- |
|
|
75
|
-
| `ram` | bytes | C64: 65536 values; VIC-20: 49152 values; C128: 131072 values; Plus/4: 65536 × 0 or 16384 × 0 |
|
|
82
|
+
| `ram` | bytes | C64: 65536 values; VIC-20: 49152 values; C128: 131072 values; Plus/4: 65536 × 0 or 16384 × 0; PET: 32768 × 0 or 8192 × 0 |
|
|
76
83
|
| `bus.low_bank` | int & 0x3 | Plus/4: 0 |
|
|
77
84
|
| `bus.high_bank` | int & 0x3 | Plus/4: 0 |
|
|
78
85
|
| `bus.rom_selected` | bool | Plus/4: true |
|
|
79
|
-
| `bus.data` | byte | Plus/4: 255 |
|
|
86
|
+
| `bus.data` | byte | Plus/4: 255; PET: 253 |
|
|
87
|
+
| `screen` | bytes | PET: 2048 × 0 or 1024 × 0 |
|
|
88
|
+
| `expansion.control` | byte | PET: 0 |
|
|
89
|
+
| `expansion.ram` | bytes | PET: 65536 × 0 |
|
|
80
90
|
|
|
81
91
|
## BL-COLORRAM
|
|
82
92
|
|
|
@@ -89,14 +99,14 @@ Written by the C64, VIC-20, C128.
|
|
|
89
99
|
|
|
90
100
|
## BL-CPU
|
|
91
101
|
|
|
92
|
-
Written by the C64, C128, Plus/4, VIC-20.
|
|
102
|
+
Written by the C64, C128, Plus/4, VIC-20, PET.
|
|
93
103
|
|
|
94
104
|
| Key | Type | Default |
|
|
95
105
|
| --- | --- | --- |
|
|
96
106
|
| `port.ddr` | byte | C64: 0; C128: 0; Plus/4: 0 |
|
|
97
107
|
| `port.data` | byte | C64: 0; C128: 0; Plus/4: 0 |
|
|
98
108
|
| `port.floating` | byte | C64: 0; C128: 0 |
|
|
99
|
-
| `pc` | word | C64: 64738; VIC-20: 64802; C128: 65341; Plus/4: 65526 |
|
|
109
|
+
| `pc` | word | C64: 64738; VIC-20: 64802; C128: 65341; Plus/4: 65526; PET: 64790 or 64824 |
|
|
100
110
|
| `sp` | byte | 255 |
|
|
101
111
|
| `a` | byte | 0 |
|
|
102
112
|
| `x` | byte | 0 |
|
|
@@ -532,6 +542,7 @@ Written by the C64, VIC-20, Plus/4.
|
|
|
532
542
|
| `active` | bool | C64: true |
|
|
533
543
|
| `ram` | bytes | C64: 8192 × 0 |
|
|
534
544
|
| `ram<N>.data` | bytes | C64: 8192 × 0 |
|
|
545
|
+
| `name` | text | VIC-20: "" |
|
|
535
546
|
| `roms` | int | VIC-20: 0 |
|
|
536
547
|
| `rom0.bytes` | bytes | VIC-20: [] |
|
|
537
548
|
| `rom0.start` | word | VIC-20: 0 |
|
|
@@ -542,11 +553,11 @@ Written by the C64, VIC-20, Plus/4.
|
|
|
542
553
|
|
|
543
554
|
## BL-TRAPDOS
|
|
544
555
|
|
|
545
|
-
Written by the C64.
|
|
556
|
+
Written by the C64, PET.
|
|
546
557
|
|
|
547
558
|
| Key | Type | Default |
|
|
548
559
|
| --- | --- | --- |
|
|
549
|
-
| `storage.kind` | text: directory d64 d71 d81 t64 | "directory" |
|
|
560
|
+
| `storage.kind` | text: directory d64 d71 d81 t64 d80 d82 | "directory" |
|
|
550
561
|
| `storage.path` | text | "" |
|
|
551
562
|
| `storage.bytes` | bytes | [] |
|
|
552
563
|
| `storage.read_only` | bool | false |
|
|
@@ -562,13 +573,19 @@ Written by the C64.
|
|
|
562
573
|
| `status.error` | ints | [] |
|
|
563
574
|
| `status.bytes` | bytes | [] |
|
|
564
575
|
| `channels` | ints | [] |
|
|
565
|
-
| `serial.listening` | bool | false |
|
|
566
|
-
| `serial.talking` | bool | false |
|
|
567
|
-
| `serial.listen_channel` | int, optional | absent |
|
|
568
|
-
| `serial.talk_channel` | int, optional | absent |
|
|
569
|
-
| `serial.frame` | int | 240 |
|
|
570
|
-
| `serial.buffer` | bytes | [] |
|
|
571
|
-
| `save.saving` | bool | false |
|
|
576
|
+
| `serial.listening` | bool | C64: false |
|
|
577
|
+
| `serial.talking` | bool | C64: false |
|
|
578
|
+
| `serial.listen_channel` | int, optional | C64: absent |
|
|
579
|
+
| `serial.talk_channel` | int, optional | C64: absent |
|
|
580
|
+
| `serial.frame` | int | C64: 240 |
|
|
581
|
+
| `serial.buffer` | bytes | C64: [] |
|
|
582
|
+
| `save.saving` | bool | C64: false |
|
|
583
|
+
| `ieee.listening` | bool | PET: false |
|
|
584
|
+
| `ieee.talking` | bool | PET: false |
|
|
585
|
+
| `ieee.listen_channel` | int, optional | PET: absent |
|
|
586
|
+
| `ieee.talk_channel` | int, optional | PET: absent |
|
|
587
|
+
| `ieee.frame` | int | PET: 240 |
|
|
588
|
+
| `ieee.buffer` | bytes | PET: [] |
|
|
572
589
|
|
|
573
590
|
## BL-D8
|
|
574
591
|
|
|
@@ -1243,3 +1260,181 @@ Written by the Plus/4.
|
|
|
1243
1260
|
| `ports` | ints | [0, 0, 0] |
|
|
1244
1261
|
| `directions` | ints | [0, 0, 0] |
|
|
1245
1262
|
| `inputs` | ints | [255, 3, 192] |
|
|
1263
|
+
|
|
1264
|
+
## BL-PIA1
|
|
1265
|
+
|
|
1266
|
+
Written by the PET.
|
|
1267
|
+
|
|
1268
|
+
| Key | Type | Default |
|
|
1269
|
+
| --- | --- | --- |
|
|
1270
|
+
| `ora` | byte | 0 |
|
|
1271
|
+
| `orb` | byte | 0 |
|
|
1272
|
+
| `ddra` | byte | 0 |
|
|
1273
|
+
| `ddrb` | byte | 0 |
|
|
1274
|
+
| `ca.control` | int & 0x3f | 0 |
|
|
1275
|
+
| `ca.c1_high` | bool | true |
|
|
1276
|
+
| `ca.c2_high` | bool | true |
|
|
1277
|
+
| `ca.c1_flag` | bool | false |
|
|
1278
|
+
| `ca.c2_flag` | bool | false |
|
|
1279
|
+
| `ca.handshake_low` | bool | false |
|
|
1280
|
+
| `ca.pulse` | int & 0x3 | 0 |
|
|
1281
|
+
| `cb.control` | int & 0x3f | 0 |
|
|
1282
|
+
| `cb.c1_high` | bool | true |
|
|
1283
|
+
| `cb.c2_high` | bool | true |
|
|
1284
|
+
| `cb.c1_flag` | bool | false |
|
|
1285
|
+
| `cb.c2_flag` | bool | false |
|
|
1286
|
+
| `cb.handshake_low` | bool | false |
|
|
1287
|
+
| `cb.pulse` | int & 0x3 | 0 |
|
|
1288
|
+
|
|
1289
|
+
## BL-PIA2
|
|
1290
|
+
|
|
1291
|
+
Written by the PET.
|
|
1292
|
+
|
|
1293
|
+
| Key | Type | Default |
|
|
1294
|
+
| --- | --- | --- |
|
|
1295
|
+
| `ora` | byte | 0 |
|
|
1296
|
+
| `orb` | byte | 0 |
|
|
1297
|
+
| `ddra` | byte | 0 |
|
|
1298
|
+
| `ddrb` | byte | 0 |
|
|
1299
|
+
| `ca.control` | int & 0x3f | 0 |
|
|
1300
|
+
| `ca.c1_high` | bool | true |
|
|
1301
|
+
| `ca.c2_high` | bool | true |
|
|
1302
|
+
| `ca.c1_flag` | bool | false |
|
|
1303
|
+
| `ca.c2_flag` | bool | false |
|
|
1304
|
+
| `ca.handshake_low` | bool | false |
|
|
1305
|
+
| `ca.pulse` | int & 0x3 | 0 |
|
|
1306
|
+
| `cb.control` | int & 0x3f | 0 |
|
|
1307
|
+
| `cb.c1_high` | bool | true |
|
|
1308
|
+
| `cb.c2_high` | bool | true |
|
|
1309
|
+
| `cb.c1_flag` | bool | false |
|
|
1310
|
+
| `cb.c2_flag` | bool | false |
|
|
1311
|
+
| `cb.handshake_low` | bool | false |
|
|
1312
|
+
| `cb.pulse` | int & 0x3 | 0 |
|
|
1313
|
+
|
|
1314
|
+
## BL-VIA
|
|
1315
|
+
|
|
1316
|
+
Written by the PET.
|
|
1317
|
+
|
|
1318
|
+
| Key | Type | Default |
|
|
1319
|
+
| --- | --- | --- |
|
|
1320
|
+
| `ora` | byte | 0 |
|
|
1321
|
+
| `orb` | byte | 0 |
|
|
1322
|
+
| `ddra` | byte | 0 |
|
|
1323
|
+
| `ddrb` | byte | 0 |
|
|
1324
|
+
| `latch_a` | byte | 255 |
|
|
1325
|
+
| `latch_b` | byte | 255 |
|
|
1326
|
+
| `acr` | byte | 0 |
|
|
1327
|
+
| `pcr` | byte | 0 |
|
|
1328
|
+
| `pb6_high` | bool | true |
|
|
1329
|
+
| `t<N>.counter` | word | 65535 |
|
|
1330
|
+
| `t1.latch` | word | 65535 |
|
|
1331
|
+
| `t<N>.hold` | bool | false |
|
|
1332
|
+
| `t1.reload` | bool | false |
|
|
1333
|
+
| `t<N>.armed` | bool | false |
|
|
1334
|
+
| `t1.pb7` | bool | true |
|
|
1335
|
+
| `t2.latch_low` | byte | 255 |
|
|
1336
|
+
| `t2.low_reload` | bool | false |
|
|
1337
|
+
| `t2.low_underflowed` | bool | false |
|
|
1338
|
+
| `t2.count_pulses` | bool | false |
|
|
1339
|
+
| `t2.counting_pulses` | bool | false |
|
|
1340
|
+
| `sr.mode` | int & 0x7 | 0 |
|
|
1341
|
+
| `sr.data` | byte | 0 |
|
|
1342
|
+
| `sr.bits` | int | 0 |
|
|
1343
|
+
| `sr.delay` | int | 0 |
|
|
1344
|
+
| `sr.clock` | bool | true |
|
|
1345
|
+
| `sr.cb2` | bool | true |
|
|
1346
|
+
| `sr.cb2_input` | bool | true |
|
|
1347
|
+
| `ifr.flags` | int & 0x7f | 0 |
|
|
1348
|
+
| `ifr.enable` | int & 0x7f | 0 |
|
|
1349
|
+
| `ca.control` | int & 0xf | 0 |
|
|
1350
|
+
| `ca.c1_high` | bool | true |
|
|
1351
|
+
| `ca.c2_high` | bool | true |
|
|
1352
|
+
| `ca.handshake_low` | bool | false |
|
|
1353
|
+
| `ca.pulse` | int | 0 |
|
|
1354
|
+
| `ca.c2_output` | bool | true |
|
|
1355
|
+
| `cb.control` | int & 0xf | 0 |
|
|
1356
|
+
| `cb.c1_high` | bool | true |
|
|
1357
|
+
| `cb.c2_high` | bool | true |
|
|
1358
|
+
| `cb.handshake_low` | bool | false |
|
|
1359
|
+
| `cb.pulse` | int | 0 |
|
|
1360
|
+
| `cb.c2_output` | bool | true |
|
|
1361
|
+
|
|
1362
|
+
## BL-CRTC
|
|
1363
|
+
|
|
1364
|
+
Written by the PET.
|
|
1365
|
+
|
|
1366
|
+
| Key | Type | Default |
|
|
1367
|
+
| --- | --- | --- |
|
|
1368
|
+
| `registers` | bytes | 18 × 0 |
|
|
1369
|
+
| `selected` | int & 0x1f | 0 |
|
|
1370
|
+
| `column` | byte | 0 |
|
|
1371
|
+
| `since_hsync` | int | 0 |
|
|
1372
|
+
| `line` | int & 0x1f | 0 |
|
|
1373
|
+
| `row` | int & 0x7f | 0 |
|
|
1374
|
+
| `vsync_lines` | int | 16 |
|
|
1375
|
+
| `adjusting` | bool | false |
|
|
1376
|
+
| `row_display` | bool | false |
|
|
1377
|
+
| `column_display` | bool | true |
|
|
1378
|
+
| `row_start` | int & 0x3fff | 0 |
|
|
1379
|
+
| `address` | int & 0x3fff | 0 |
|
|
1380
|
+
|
|
1381
|
+
## BL-VIDEO
|
|
1382
|
+
|
|
1383
|
+
Written by the PET.
|
|
1384
|
+
|
|
1385
|
+
| Key | Type | Default |
|
|
1386
|
+
| --- | --- | --- |
|
|
1387
|
+
| `displayed` | int | 0 |
|
|
1388
|
+
| `frame_displayed` | int | 0 |
|
|
1389
|
+
| `line_shown` | bool | false |
|
|
1390
|
+
| `y` | int | 136 |
|
|
1391
|
+
| `from_y` | int | 136 |
|
|
1392
|
+
| `to_y` | int | 136 |
|
|
1393
|
+
| `shown_from` | int | 36 |
|
|
1394
|
+
| `shown_to` | int | 37 |
|
|
1395
|
+
| `on_canvas` | bool | true |
|
|
1396
|
+
| `origin` | int | 336 |
|
|
1397
|
+
| `from` | int | 704 |
|
|
1398
|
+
| `to` | int | -704 |
|
|
1399
|
+
| `canvas.dots` | bytes | 192192 × 0 or 83328 × 0 |
|
|
1400
|
+
| `canvas.painted` | ints | 48048 × 0 or 20832 × 0 |
|
|
1401
|
+
| `canvas.span_from` | ints | 273 × 0 or 217 × 0 |
|
|
1402
|
+
| `canvas.span_to` | ints | 273 × 0 or 217 × 0 |
|
|
1403
|
+
| `column` | int | 0 |
|
|
1404
|
+
| `line` | int | 0 |
|
|
1405
|
+
|
|
1406
|
+
## BL-TAPE1
|
|
1407
|
+
|
|
1408
|
+
Written by the PET.
|
|
1409
|
+
|
|
1410
|
+
| Key | Type | Default |
|
|
1411
|
+
| --- | --- | --- |
|
|
1412
|
+
| `playing` | bool | false |
|
|
1413
|
+
| `motor` | bool | false |
|
|
1414
|
+
| `countdown` | int | 0 |
|
|
1415
|
+
| `recording` | bool | false |
|
|
1416
|
+
| `since` | int | 0 |
|
|
1417
|
+
| `write_high` | bool | true |
|
|
1418
|
+
| `rise_at` | int | 0 |
|
|
1419
|
+
| `low_recorded` | bool | false |
|
|
1420
|
+
| `tape.bytes` | bytes | [] |
|
|
1421
|
+
| `tape.path` | text | "" |
|
|
1422
|
+
| `tape.position` | int | 0 |
|
|
1423
|
+
|
|
1424
|
+
## BL-TAPE2
|
|
1425
|
+
|
|
1426
|
+
Written by the PET.
|
|
1427
|
+
|
|
1428
|
+
| Key | Type | Default |
|
|
1429
|
+
| --- | --- | --- |
|
|
1430
|
+
| `playing` | bool | false |
|
|
1431
|
+
| `motor` | bool | false |
|
|
1432
|
+
| `countdown` | int | 0 |
|
|
1433
|
+
| `recording` | bool | false |
|
|
1434
|
+
| `since` | int | 0 |
|
|
1435
|
+
| `write_high` | bool | true |
|
|
1436
|
+
| `rise_at` | int | 0 |
|
|
1437
|
+
| `low_recorded` | bool | false |
|
|
1438
|
+
| `tape.bytes` | bytes | [] |
|
|
1439
|
+
| `tape.path` | text | "" |
|
|
1440
|
+
| `tape.position` | int | 0 |
|