-- File: TimingDefs.mesa
-- Edited by Sandman on September 3, 1980  3:32 PM

DIRECTORY
  Mopcodes USING [zMISC];

TimingDefs: DEFINITIONS =
  BEGIN

  HiLo: TYPE = {hi, lo};

  Pair: TYPE = RECORD [value, factor: CARDINAL];

  Fudge: TYPE = ARRAY HiLo OF Pair;

  Fudges: ARRAY Machine OF Fudge =
    [[[value: 2, factor: 1], [value: 1, factor: 1]], -- altoI
      [[value: 2, factor: 1], [value: 1, factor: 1]], -- altoII
      [[value: 2, factor: 1], [value: 2, factor: 1]]]; -- d0

  MsPerTick: LONG CARDINAL = 38;
  MaxTick: LONG CARDINAL = 400000000B;

  Machine: TYPE = {altoI, altoII, d0};

  HighTime: TYPE = MACHINE DEPENDENT RECORD [
    SELECT OVERLAID * FROM
      split => [high: [0..1777B], low: [0..77B]],
      whole => [whole: CARDINAL],
      ENDCASE];

  LowTime: TYPE = MACHINE DEPENDENT RECORD [
    SELECT COMPUTED Machine FROM
      altoI => [low: [0..1777B], fill: [0..77B]],
      altoII => [fill1: [0..17B], low: [0..1777B], fill2: [0..3B]],
      d0 => [low: [0..1777B], fill: [0..77B]], -- version 3.0

      ENDCASE];

  RealTime: TYPE = MACHINE DEPENDENT RECORD [low: LowTime, high: HighTime];

  ReadTime: PROCEDURE RETURNS [RealTime] = MACHINE CODE
    BEGIN Mopcodes.zMISC, 11B END;

  END..