--GeneralDisplayDefs.mesa
--last modified by Pier, June 5, 1980 10:52 AM
GeneralDisplayDefs: DEFINITIONS =
BEGIN
pMonitorHead: POINTER TO POINTER TO MonitorControlBlock = LOOPHOLE[414B];
MonitorControlBlock: TYPE = RECORD
[
Seal:CARDINAL ← 177456B,
Flags:MCBFlags,
AChanControlBlock:POINTER TO ChannelControlBlock,
BChanControlBlock:POINTER TO ChannelControlBlock,
pColorControlBlock:POINTER TO ColorControlBlock
];

MCBFlags:TYPE = MACHINE DEPENDENT RECORD
[
unused:[0..777B] ← 0,
Minimixer:BOOLEAN,
VerticalControl:BOOLEAN,
HorizontalControl:BOOLEAN,
Clock:BOOLEAN,
ATable, BTable, CTable:BOOLEAN
];

ChannelControlBlock:TYPE = RECORD
[
Link:POINTER TO ChannelControlBlock,
nWordsPerLine:CARDINAL,--words of bitmap per scanline
Screen:LONG POINTER,
ScanLinesPerField:CARDINAL,
OffsetPixelsPerLine:CARDINAL,--visible pixels/scanline + 377B for Dorado
OffsetLeftMargin:CARDINAL,--left margin + MarginOffset[monitortype] for Dorado
ScanControl:ScanControlWord
];

MarginOffset:PUBLIC ARRAY monitortype OF marginoffset =
[ 107B, 66B, 107B, 0, 66B, 0];
monitortype:TYPE =
{AltoTerminal, ConracRQB525, ConracRQB875, ConracRQB1225, Ramtek525,
Ramtek1000};
marginoffset: TYPE = CARDINAL;

ScanControlWord:TYPE = MACHINE DEPENDENT RECORD
[
unused:[0..77B] ← 0,
b24BitsPerPixel, AByPass, BByPass, A8B2:BOOLEAN,
Resolution:resolution,
Size8, Size4, Size2, Size1:BOOLEAN
];
resolution:TYPE={quarter, illegal, half, full};

ColorControlBlock:TYPE=RECORD
[
ATable:LONG POINTER TO ATableImage,
BTable:LONG POINTER TO BCTableImage,
CTable:LONG POINTER TO BCTableImage,
MiniMixer:LONG POINTER TO MiniMixerImage,
VBlank:MACHINE DEPENDENT RECORD[VBtoVS: [0..377B], VStoVS: [0..377B]],
VStoVB:CARDINAL,
VisibleLines:CARDINAL,
HRamMaxAddr:CARDINAL,
HBlank:MACHINE DEPENDENT RECORD[HBLeadLength: [0..377B], HSTrailAddr: [0..377B]],
HBTrailLength:CARDINAL,
PClock:MACHINE DEPENDENT RECORD[unused: [0..17B] ← 0, PClockMul: [0..377B], PClockDiv: [0..17B]],
reserved:CARDINAL
];

ATableImage:TYPE = ARRAY[0..ATableSize) OF ATableEntry;
BCTableImage:TYPE = ARRAY[0..BCTableSize) OF BCTableEntry;
MiniMixerImage:TYPE = ARRAY[0..MiniMixerSize) OF MiniMixerEntry;

ATableSize:CARDINAL = 1024;
BCTableSize:CARDINAL = 256;
MiniMixerSize:CARDINAL = 256;

ATableEntry:TYPE = MACHINE DEPENDENT RECORD
[
zeroLow:[0..17B] ← 0,
redLow:[0..17B],
blue:[0..377B],
zeroHigh:[0..17B] ← 0,
green:[0..377B],
redHigh:[0..17B]
];

BCTableEntry:TYPE = MACHINE DEPENDENT RECORD
[
MustBeZero:[0..377B] ← 0,
BCTableData:[0..377B]
];

MiniMixerEntry:TYPE = MACHINE DEPENDENT RECORD
[
Address:[0..377B],
Data:[0..377B]
];
END.