When the explorer disassembles the machine code of an Oric tape it names the addresses below. Only addresses that are standard hardware facts are named. The ROM’s routines and the system variables of page 2 are not: nothing on this machine documents them well enough to check, so the code shows them as numbers. The processor is a 6502 (the 6502A of the Oric), decoded as the NMOS 6502 with its undocumented opcodes marked; see the 6502 instruction reference.
Memory map
| Addresses | Use |
|---|---|
$0000–$00FF | Zero page |
$0100–$01FF | Stack |
$0200–$02FF | Page 2: the system’s variables (not named here) |
$0300–$03FF | Input and output: the VIA at $0300, see below |
$0400–$9FFF | RAM for programs; a BASIC program starts at $0501. A 16 KB machine has RAM only up to $3FFF |
$A000–$BF3F | The HIRES screen: 240 by 200 pixels, 8000 bytes (HIRES_SCREEN) |
$B400–$B7FF | The standard character set (CHARSET_STD) |
$B800–$BB7F | The alternate character set (CHARSET_ALT) |
$BB80–$BFDF | The text screen: 40 columns by 28 rows (TEXT_SCREEN) |
$C000–$FFFF | ROM, with the hardware vectors at the top |
The address ranges of the HIRES screen, the character sets and the text screen overlap, as the table shows.
The VIA at $0300
The 6522 versatile interface adapter has 16 registers at $0300 to $030F. The Oric
uses it for the keyboard, the printer port, the cassette and, through port A and its control lines, the
sound chip. The names are the 6522’s own.
| Address | Name | Register |
|---|---|---|
$0300 | VIA_ORB | Port B output / input register |
$0301 | VIA_ORA | Port A output / input register, with handshake |
$0302 | VIA_DDRB | Data direction register B |
$0303 | VIA_DDRA | Data direction register A |
$0304 | VIA_T1CL | Timer 1 counter, low (reading clears the timer 1 interrupt flag) |
$0305 | VIA_T1CH | Timer 1 counter, high |
$0306 | VIA_T1LL | Timer 1 latch, low |
$0307 | VIA_T1LH | Timer 1 latch, high |
$0308 | VIA_T2CL | Timer 2 counter, low |
$0309 | VIA_T2CH | Timer 2 counter, high |
$030A | VIA_SR | Shift register |
$030B | VIA_ACR | Auxiliary control register |
$030C | VIA_PCR | Peripheral control register |
$030D | VIA_IFR | Interrupt flag register |
$030E | VIA_IER | Interrupt enable register |
$030F | VIA_ORA_NH | Port A output / input register, without handshake |
Hardware vectors
The 6502 reads three 16-bit vectors from the top of memory, which on the Oric are in the ROM: the
non-maskable interrupt at $FFFA (NMI_VECTOR), reset at $FFFC
(RESET_VECTOR) and IRQ and BRK at $FFFE (IRQ_VECTOR). The ROM’s own
routines for these jump through addresses in page 2, which are not named here.