Introduction
The 7800 can address 64 KiB and the cartridge gets $4000-$FFFF. A ROM up to 48 KiB sits in it unswitched, with its last byte at
$FFFF. Larger ROMs are cut into 16 KiB banks. The layouts below are the ones js7800 builds when it loads a cartridge (its Store and
WriteBank functions, read for this page); they are the layouts at power-up. The cartridge type comes from the header
(Cartridge type bits) and can be overridden in the options bar.
Cartridge types
| Type | $4000-$7FFF | $8000-$BFFF | $C000-$FFFF | Switching |
|---|---|---|---|---|
| Normal | the ROM, top at $FFFF (a 32 KiB ROM is $8000-$FFFF, a 48 KiB ROM $4000-$FFFF) | none | ||
| Normal, RAM at $4000 | RAM | the ROM, top at $FFFF | none | |
| SuperGame | not the cartridge’s | bank n (16 KiB) | the last 16 KiB of the ROM | a write to $8000-$BFFF with the bank number as the value |
| SuperGame, RAM at $4000 | RAM | bank n | the last bank | as SuperGame |
| SuperGame, bank 6 at $4000 | bank 6 | bank n | the last bank | as SuperGame |
| SuperGame large | bank 0 | a bank | the last bank | a write to $8000-$BFFF of the value v shows bank v + 1 |
| Absolute | bank 0 or 1 (16 KiB) | 32 KiB fixed from ROM offset $8000 | a write of 1 or 2 to $8000 shows bank 0 or 1 at $4000 | |
| SOUPER | RAM | bank n of 32 | bank 31 | writes to $8000 (bank), $8001 and $8002 (character banks), $8003 (mode), $8004, $8005 (RAM pages), $8007 (audio command) |
| Activision | not modelled by the explorer: the ROM is shown as plain 16 KiB banks. js7800 places 8 KiB pieces from several parts of the ROM and switches at $FF80-$FFFF (the low three bits of the address choose the bank at $A000) | access to $FF80 and above | ||
The bank written is checked against the ROM size, and in a ROM of up to 64 KiB with four banks the number is taken modulo four (bit 3 is ignored). The explorer shows the bank chosen in the options bar in the switchable window, the fixed banks, and the vectors of the fixed bank at the top.
Vectors
The vectors $FFFA (NMI), $FFFC (RESET) and $FFFE (IRQ/BRK) are the last six bytes of whichever ROM piece is at the top of memory.
In a banked cartridge that is the fixed last bank, so the vectors do not depend on the bank in the window. In beefdrop.a78 they are NMI $F000,
RESET $FF77 and IRQ $F074.
Not described
Known, not yet covered
- Viewer: Activision banking, SOUPER’s character and RAM banks, banksets (the second set), banked RAM and the halt-based RAM bank.
- Viewer: an Absolute ROM’s bank is shown from the first 16 KiB of each choice only if the ROM is at least 64 KiB.
Unknown
- Reference: the layouts come from one emulator’s source (js7800) and were not compared with a second emulator or with hardware; no real banked 7800 ROM was available.