-- File: Alto1822Defs.mesa
-- Last Edit: HGM  September 23, 1980  9:02 PM
-- Last Edit: L. Stewart  September 17, 1978  3:50 PM

DIRECTORY
  Mopcodes USING [zLIW, zJRAM, zSTARTIO];

Alto1822Defs: DEFINITIONS =
  BEGIN

  -- 1822 Interface Stuff
  -- Useful Types

  Bit: TYPE = [0..1];
  ON: Bit = 1;
  OFF: Bit = 0;
  Byte: TYPE = [0..377B];

  -- SIO codes

  SioParameter: TYPE = RECORD [WORD];
  inputSioCode: SioParameter = [002000B];
  outputSioCode: SioParameter = [001000B];
  controlSioCode: SioParameter = [003000B];

  -- Command Word codes

  AICommandCode: TYPE = RECORD [WORD];
  doNothing: AICommandCode = [000000B];
  masterReset: AICommandCode = [000001B];
  setLastWord: AICommandCode = [000002B];
  tryClearIWD: AICommandCode = [000003B];
  turnOnTestMode: AICommandCode = [000004B];
  turnOffTestMode: AICommandCode = [000005B];
  turnOnRelay: AICommandCode = [000006B];
  turnOffRelay: AICommandCode = [000007B];
  turnOnLastBit: AICommandCode = [002000B];
  turnOffLastBit: AICommandCode = [001000B];

  -- Buffer Descriptor

  AIBufferDescriptor: TYPE = MACHINE DEPENDENT RECORD [
    start: POINTER, end: POINTER];

  -- Microcode Status codes

  allOK: Byte = 001B;
  iBufFull: Byte = 002B;
  iBufLenZero: Byte = 003B;
  iBufFullDone: Byte = 004B;

  -- Post Word

  AIPostStatus: TYPE = MACHINE DEPENDENT RECORD [
    mcStat: Byte,
    blank: [0..31],
    impWasDown: Bit,
    impNotReady: Bit,
    hostNotReady: Bit];

  notPosted: AIPostStatus = [0, 0, 0, 0, 0];

  -- Command Block

  AICommandBlockHandle: TYPE = POINTER TO AICommandBlock;
  AICommandBlock: TYPE = MACHINE DEPENDENT RECORD [
    command: AICommandCode,
    blank: WORD,
    inputBuffer: AIBufferDescriptor,
    outputBuffer: AIBufferDescriptor,
    controlPost: AIPostStatus,
    controlBits: WORD,
    inputPost: AIPostStatus,
    inputBits: WORD,
    outputPost: AIPostStatus,
    outputBits: WORD];

  -- RAM Stuff

  setConPtrAddr: CARDINAL = 1420B; -- Ram address of microcode

  SetControlPtr: PROCEDURE [ControlPointer: UNSPECIFIED] = MACHINE CODE
    BEGIN
    Mopcodes.zLIW, setConPtrAddr/256, setConPtrAddr MOD 256;
    Mopcodes.zJRAM;
    END;

  StartIO: PROCEDURE [Command: SioParameter] = MACHINE CODE
    BEGIN Mopcodes.zSTARTIO; END;

  END. -- Alto1822Defs.mesa