
<<file OpCodeParams.mesa>>
<<last edited by Sweet on 26-Oct-81  9:51:25>>
<<last edited by Satterthwaite on November 27, 1985 2:44:43 pm PST>>

DIRECTORY
Basics: TYPE USING [BYTE],
PrincOps: TYPE;

OpCodeParams: DEFINITIONS =
BEGIN OPEN PrincOps;

BYTE: TYPE = Basics.BYTE;

GlobalBase: CARDINAL = PrincOps.globalbase;
GlobalHB: TYPE = [GlobalBase..GlobalBase+16);
GlobalAddressSlots: TYPE = [GlobalBase..GlobalBase];
GlobalLoadSlots: TYPE = [GlobalBase..GlobalBase+2];
GlobalDoubleLoadSlots: TYPE = [GlobalBase..GlobalBase];

LocalBase: CARDINAL = PrincOps.localbase;
LocalHB: TYPE = [LocalBase..LocalBase+16);
LocalAddressSlots: TYPE = [LocalBase..LocalBase+3];
LocalLoadSlots: TYPE = [LocalBase..LocalBase+11];
LocalDoubleLoadSlots: TYPE = [LocalBase..LocalBase+8]; -- also LocalBase+10
LocalStoreSlots: TYPE = [LocalBase..LocalBase+10];
LocalDoubleStoreSlots: TYPE = [LocalBase..LocalBase+6]; -- also LocalBase+8
LocalPutSlots: TYPE = [LocalBase..LocalBase+3];
LocalDoublePutSlots: TYPE = [LocalBase..LocalBase];

HB: TYPE = [0..16);
LoadImmediateSlots: TYPE = [0..10];
LoadImmediateDoubleSlots: TYPE = [0..0];

ReadSlots: TYPE = [0..1];
ReadLongSlots: TYPE = [0..0];
ReadDoubleSlots: TYPE = [0..0];
ReadDoubleLongSlots: TYPE = [0..0];

<<LABSlots = LocalAddressSlots, LocalBase+6, LocalBase+8>>
<<GABSlots = GlobalAddressSlots>>
<<WriteSlots: TYPE = [0..0);>>

PutSwappedDoubleSlots: TYPE = [0..0];

ReadLocalIndirect0Slots: TYPE = [0..3];
ReadDoubleLocalIndirect0Slots: TYPE = [0..0];

DescriptorSlots: TYPE = [0..0];

MaxFBJumps: INTEGER = 121;
MaxBBJumps: INTEGER = 127;

JumpASlots: TYPE = [2..4]; -- also 6, 8
<<JumpESlots: TYPE = [0..0);>>
<<JumpNESlots: TYPE = [0..0);>>
JumpZSlots: TYPE = [3..4];
JumpNZSlots: TYPE = [3..4];

ExternalProcBase: CARDINAL = 0;
LocalProcBase: CARDINAL = 1;
ExternalProcSlots: TYPE = [0..12];
LocalProcSlots: TYPE = [1..5];

RW: TYPE = {read, write};
Amount: TYPE = {single, double, field};
SL: TYPE = {short, long};
GL: TYPE = {global, local};
T: PRIVATE BOOL = TRUE; F: PRIVATE BOOL = FALSE;

RiImplemented: ARRAY RW OF ARRAY GL OF ARRAY SL OF ARRAY Amount OF BOOL = [
[global: [short: [T, F, F], long: [T, F, F]],  -- [RGI, RGDI, RGIF], [RGIL, RGDIL, RGILF]
local:  [short: [T, T, T], long: [T, T, T]]], -- [RLI, RLDI, RLIF], [RLIL, RLDIL, RLILF]
[global: [short: [F, F, F], long: [F, F, F]],  -- [WGI, WGDI, WGIF], [WGIL, WGDIL, WGILF]
local:  [short: [T, F, F], long: [T, T, F]]]];-- [WLI, WLDI, WLIF], [WLIL, WLDIL, WLILF]

RiOp: ARRAY RW OF ARRAY GL OF ARRAY SL OF ARRAY Amount OF BYTE = [
[global: [short: [zRGIP, zNOOP,  zNOOP], long: [zRGILP, zNOOP,   zNOOP]],
local:  [short: [zRLIP, zRLDIP, zRLIPF], long: [zRLILP, zRLDILP, zRLILPF]]],
[global: [short: [zNOOP, zNOOP,  zNOOP], long: [zNOOP,  zNOOP,   zNOOP]],
local:  [short: [zWLIP, zNOOP,  zNOOP], long: [zWLILP, zWLDILP, zNOOP]]]];

zEFCn: BYTE = zEFC0;
zLFCn: BYTE = zLFC1;

zLIn: BYTE = zLI0;
zLIDn: BYTE = zLID0;

zLAn: BYTE = zLA0;
zLLn: BYTE = zLL0;
zLLDn: BYTE = zLLD0;
zSLn: BYTE = zSL0;
zSLDn: BYTE = zSLD0;
zPLn: BYTE = zPL0;
zPLDn: BYTE = zPLD0;

zGAn: BYTE = zGA0;
zLGn: BYTE = zLG0;
zLGDn: BYTE = zLGD0;
<<zSGn: BYTE = zSG0;>>

zRn: BYTE = zR0;
zRLn: BYTE = zRL0;
zRDn: BYTE = zRD0;
zRDLn: BYTE = zRDL0;
zWnF: BYTE = zW0F;
zWLnF: BYTE = zWL0F;

zWSnF: BYTE = zWS0F;
zPSDn: BYTE = zPSD0;
zPSnF: BYTE = zPS0F;

zRLI0n: BYTE = zRLI00;
zRLDI0n: BYTE = zRLDI00;

zJn: BYTE = zJ2;
zJZn: BYTE = zJZ3;
zJNZn: BYTE = zJNZ3;

END.

