tape training

This commit is contained in:
Joppe Blondel
2026-10-03 17:30:43 +02:00
parent 5897e55094
commit 9823a05ffe
8 changed files with 1085 additions and 43 deletions
+15 -10
View File
@@ -41,6 +41,9 @@ mode, or UART/CTC setup must restore it before returning.
prints the low 16 bits of the sum as four hexadecimal digits. The end address
must be greater than or equal to the start address.
`D` prints 16 bytes per row followed by an ASCII column. Bytes outside the
printable ASCII range are shown as `.`.
Build the ROM and programmer-format images with:
```sh
@@ -84,15 +87,15 @@ The outputs are:
- `build/tinybasic/tinybasic.bin`: standalone relocated Tiny BASIC payload
- `build/casette/tape_loader.bin`: standalone relocated tape-loader payload
The current compact image is 12,318 bytes. Its ROM layout is:
The current compact image is 12,967 bytes. Its ROM layout is:
- `0000-007F`: reset/copy bootstrap
- `0080-1201`: packed BIOS+monitor image copied to RAM at `C000-D181`
- `1202-13FF`: unused space reserved for the resident image to grow
- `0080-12DD`: packed BIOS+monitor image copied to RAM at `C000-D25D`
- `12DE-13FF`: unused space reserved for the resident image to grow
- `1400-1C0C`: Tiny BASIC, executed directly from ROM
- `1C0D-2FFF`: unused ROM
- `3000-301D`: tape loader, executed directly from ROM
- `301E-7FFF`: unused space available for additional ROM content
- `3000-32A6`: tape loader, executed directly from ROM
- `32A7-7FFF`: unused space available for additional ROM content
The resident image starts at `C000`, its IM 2 vector table is at `C040`, and
linked code starts at `C080`. The bootstrap obtains the resident copy length
@@ -103,8 +106,8 @@ The resulting RAM layout is:
- `8000-AFFF`: Tiny BASIC workspace and BASIC program text
- `B000-B077`: Tiny BASIC variables and input buffer
- `B078-BFFF`: Tiny BASIC stack space
- `C000-D181`: resident BIOS, vectors, services, and monitor
- `D182-EFFF`: free space for resident-image growth
- `C000-D25D`: resident BIOS, vectors, services, and monitor
- `D25E-EFFF`: free space for resident-image growth
- `F000-FFFF`: BIOS globals, UART buffers, and monitor stack
The BIOS and monitor continue to work if low ROM is disabled. ROM-resident
@@ -197,12 +200,14 @@ returns to the Tiny BASIC prompt.
Tiny BASIC resets the stack pointer when it starts, so it does not currently
return through the monitor's `G` call. Reset the machine to return to the
monitor. The tape loader occupies the later ROM slot at `3000-301D`; the first
unused byte after it is `301E`.
monitor. The tape loader occupies the later ROM slot at `3000-32A6`; the first
unused byte after it is `32A7`.
## Tape loader
The tape-loader image is built from `apps/casette/tape_loader.asm`, linked at
`3000`, and included in both ROM images. Start it with `T`, `TAPE`, or `G 3000`.
The current image polls the comparator input and prints its state through the
resident BIOS console service.
resident BIOS console service. Signal acquisition is bounded; a missing,
unstable, or permanently high signal reports `TAPE SIGNAL TIMEOUT` and returns
to the monitor instead of waiting forever with interrupts disabled.