Oric Images
The Oric Atmos draws its high-resolution pictures in HIRES mode: a 240×200 bitmap where each byte holds six pixels. Colour is not stored on a separate grid as on many machines. Instead special control bytes sit in the pixel stream and change the ink and paper colour serially, from that point on along the rest of the row.
Overview
The Oric's video chip reads screen memory a byte at a time and turns each byte into six screen pixels. A byte is either a pixel byte, which draws six one-bit pixels, or an attribute byte, which draws six background pixels and changes the colour or mode for the rest of that row. There is no separate colour map: colour lives inline with the pixels, so every image is a mix of pixel data and control bytes woven together along each line.
| Property | Value |
|---|---|
| HIRES resolution | 240 × 200 pixels |
| Pixels per byte | 6 |
| Bytes per row | 40 (240 ÷ 6) |
| HIRES rows | 200 |
| Colours | 8 |
| Colours per row | Any, set serially by attribute bytes |
The HIRES screen
HIRES mode is 240 pixels across and 200 down. Each of the 200 rows is 40 bytes wide, and 40 × 6 gives the 240 pixels. The rows are stored in plain order, one after another: row y starts at the screen base plus y × 40. There is no interleaving, so stepping down a column is a fixed add of 40 to the address.
Below the HIRES area the Oric shows three rows of text, so the display is a HIRES picture with a small text window at the foot of the screen. The whole HIRES bitmap, including its inline attributes, is 8000 bytes.
The pixel byte
A byte with bit 6 clear is a pixel byte. Bits 5 down to 0 are the six pixels, bit 5 the leftmost. A set bit draws the current ink colour, a clear bit the current paper colour. Bit 7 inverts: when set it swaps ink and paper for those six pixels, so the same pattern shows in the opposite colours.
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Meaning | INVERSE | 0 (pixel byte) | six pixels, bit 5 = leftmost, 1 = ink 0 = paper | |||||
So a single byte carries six pixels plus an invert flag, but no colour of its own. The colours it uses are whatever the most recent attribute bytes on that row have set.
Serial attributes
A byte with bit 6 set is a control, or attribute, byte. It does not draw pixels: the six pixels it occupies are shown in the current paper colour as background. What it does is change the drawing state for the rest of that pixel row, from that point rightward. Colour is therefore set serially along each line, and each change costs one byte, which is the width of six pixels.
The low three bits carry the value 0 to 7, and bits 5 and 4 pick which state is being set. One group sets the ink colour, another sets the paper colour, and others set flash, double height and which character set text uses.
| Byte range | Bits 5–3 | Effect |
|---|---|---|
| 0x40–0x47 | Ink | Set ink colour to the low 3 bits (0–7) |
| 0x48–0x4F | Text mode | Standard or alternate charset, flash, double height |
| 0x50–0x57 | Paper | Set paper colour to the low 3 bits (0–7) |
| 0x58–0x5F | Text mode | As 0x48–0x4F for the alternate group |
Because a colour change takes six pixels of width and applies only to the rest of the row, an object that needs its own colour must place an attribute byte just to its left on every row it covers, and the attribute state resets to the defaults at the start of each new row.
Text mode
The Oric also has a TEXT mode of 40 columns by 28 rows. Each screen position is one byte holding a character code, and the video chip reads that character's 6×8 pattern from the character set in RAM. Attribute bytes work the same way in text mode: a control byte in a cell sets ink, paper or a text flag for the rest of that text row, so colour is again serial along the line.
| Mode | Grid | Cell |
|---|---|---|
| TEXT | 40 × 28 characters | 6 × 8 pixels each |
| HIRES | 240 × 200 pixels | with 3 text rows below |
Memory map
Screen memory sits in the Oric's RAM, not in a separate video bank. The HIRES bitmap and the text screen have fixed base addresses, and the character sets live just below the HIRES area.
| Area | Address | Size | Contents |
|---|---|---|---|
| TEXT screen | 0xBB80 (48000) | 40 × 28 bytes | Character codes and inline attributes. |
| HIRES screen | 0xA000 (40960) | 8000 bytes | The 240×200 bitmap, 40 bytes per row, with inline attributes. |
| Standard charset | 0xB400 (46080) | 2048 bytes | The redefinable character patterns. |
| Alternate charset | 0x9800 (38912) | 2048 bytes | The second redefinable set used in HIRES. |
Because pixels and colours share the same bytes, a saved HIRES screen is simply the 8000 bytes of the bitmap, control bytes and all, so what you save is exactly what the chip drew.