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.

Oric Images

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.

PropertyValue
HIRES resolution240 × 200 pixels
Pixels per byte6
Bytes per row40 (240 ÷ 6)
HIRES rows200
Colours8
Colours per rowAny, 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.

Bit76543210
MeaningINVERSE0 (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 rangeBits 5–3Effect
0x40–0x47InkSet ink colour to the low 3 bits (0–7)
0x48–0x4FText modeStandard or alternate charset, flash, double height
0x50–0x57PaperSet paper colour to the low 3 bits (0–7)
0x58–0x5FText modeAs 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.

ModeGridCell
TEXT40 × 28 characters6 × 8 pixels each
HIRES240 × 200 pixelswith 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.

AreaAddressSizeContents
TEXT screen0xBB80 (48000)40 × 28 bytesCharacter codes and inline attributes.
HIRES screen0xA000 (40960)8000 bytesThe 240×200 bitmap, 40 bytes per row, with inline attributes.
Standard charset0xB400 (46080)2048 bytesThe redefinable character patterns.
Alternate charset0x9800 (38912)2048 bytesThe 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.