-- file OpCodeParams.mesa
-- last edited by Sweet on 26-Oct-81  9:51:25
-- last edited by Satterthwaite on December 16, 1982 8:45 am

DIRECTORY
  Mopcodes: TYPE,
  PrincOps: TYPE USING [globalbase, localbase];

OpCodeParams: DEFINITIONS =
  BEGIN OPEN Mopcodes;

  BYTE: TYPE = [0..256);

  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.