The memory map
Read from the memory map code of this site’s 5200 emulator (mmu5200.ts):
| Address | What |
|---|---|
$0000-$3FFF | RAM, 16 KiB |
$4000-$BFFF | The cartridge (32 KiB of address space; smaller cartridges repeat) |
$C000-$C0FF | GTIA (32 registers, repeated) |
$D400-$D4FF | ANTIC (16 registers, repeated) |
$E800-$EFFF | POKEY (16 registers, repeated) |
$F800-$FFFF | The BIOS, 2 KiB. The vectors $FFFA-$FFFF are in it |
There is no PIA and no serial bus. The Atari 8-bit computers have GTIA at $D000, POKEY at $D200 and ANTIC at $D400: the 5200 has the same three chips, so the
register names and layouts are the same, at other addresses (the explorer takes them from the Atari 8-bit table and moves them). The
differences: the “shadow” registers of the 8-bit operating system do not exist here; the controllers are analogue sticks read through POKEY’s paddle inputs; the keypad is read through POKEY’s keyboard scanner.
Interrupt vectors
The 6502’s own vectors, $FFFA (NMI), $FFFC (RESET) and $FFFE (IRQ), are in the BIOS ROM, not in the cartridge, so a cartridge image has none. The BIOS handlers jump through RAM vectors
that the cartridge sets. The four below were read from the AltirraOS 5200 BIOS (a 2 KiB replacement BIOS, disassembled with this site’s decoder; the original Atari BIOS is not available here). The
names are descriptive, not Atari’s.
| Address | Name | What |
|---|---|---|
| $0200 | irq_vector | The IRQ handler ends with JMP ($0200) |
| $0202 | vbi_vector | The NMI handler jumps through it for a vertical blank |
| $0206 | dli_vector | The NMI handler jumps through it for a display list interrupt (NMIST bit 7 set) |
| $020A | key_vector | The keyboard interrupt jumps through it with the key code in A |
AltirraOS has the reset vector at $FD31, the NMI vector at $FD23 and the IRQ vector at $FC00.
GTIA at $C000
Names as in the Atari 8-bit GTIA; descriptions on the Atari 8-bit page.
| Address | Name |
|---|---|
| $C000 | HPOSP0/M0PF |
| $C001 | HPOSP1/M1PF |
| $C002 | HPOSP2/M2PF |
| $C003 | HPOSP3/M3PF |
| $C004 | HPOSM0/P0PF |
| $C005 | HPOSM1/P1PF |
| $C006 | HPOSM2/P2PF |
| $C007 | HPOSM3/P3PF |
| $C008 | SIZEP0/M0PL |
| $C009 | SIZEP1/M1PL |
| $C00A | SIZEP2/M2PL |
| $C00B | SIZEP3/M3PL |
| $C00C | SIZEM/P0PL |
| $C00D | GRAFP0/P1PL |
| $C00E | GRAFP1/P2PL |
| $C00F | GRAFP2/P3PL |
| $C010 | GRAFP3/TRIG0 |
| $C011 | GRAFM/TRIG1 |
| $C012 | COLPM0/TRIG2 |
| $C013 | COLPM1/TRIG3 |
| $C014 | COLPM2/PAL |
| $C015 | COLPM3 |
| $C016 | COLPF0 |
| $C017 | COLPF1 |
| $C018 | COLPF2 |
| $C019 | COLPF3 |
| $C01A | COLBK |
| $C01B | PRIOR |
| $C01C | VDELAY |
| $C01D | GRACTL |
| $C01E | HITCLR |
| $C01F | CONSOL |
ANTIC at $D400
| Address | Name |
|---|---|
| $D400 | DMACTL |
| $D401 | CHACTL |
| $D402 | DLISTL |
| $D403 | DLISTH |
| $D404 | HSCROL |
| $D405 | VSCROL |
| $D407 | PMBASE |
| $D409 | CHBASE |
| $D40A | WSYNC |
| $D40B | VCOUNT |
| $D40C | PENH |
| $D40D | PENV |
| $D40E | NMIEN |
| $D40F | NMIRES/NMIST |
POKEY at $E800
| Address | Name |
|---|---|
| $E800 | AUDF1/POT0 |
| $E801 | AUDC1/POT1 |
| $E802 | AUDF2/POT2 |
| $E803 | AUDC2/POT3 |
| $E804 | AUDF3/POT4 |
| $E805 | AUDC3/POT5 |
| $E806 | AUDF4/POT6 |
| $E807 | AUDC4/POT7 |
| $E808 | AUDCTL/ALLPOT |
| $E809 | STIMER/KBCODE |
| $E80A | SKREST/RANDOM |
| $E80B | POTGO |
| $E80D | SEROUT/SERIN |
| $E80E | IRQEN/IRQST |
| $E80F | SKCTL/SKSTAT |
Not described
Known, not yet covered
- Reference: the BIOS entry points and its other RAM locations.
- Reference: the register descriptions of the Atari 8-bit pages apply, but the 5200-specific uses of the POKEY paddle and keyboard registers are not written out.
Unknown
- Reference: the original Atari BIOS and its memory use were not available; GTIA and POKEY addresses come from the emulator’s map only, not from a hardware manual. Whether the POKEY at
$E800is also seen at$EB00and so on is not described.