-- DoradoInputOutput.mesa
-- Last Edited by: Taft, April 16, 1983 12:56 pm
DIRECTORY
DisplayFace USING [Cursor],
Mopcodes USING [zOR, zLINI, zMISC];
DoradoInputOutput: DEFINITIONS =
BEGIN
IOAddress: TYPE = [0..377B];
-- Read one word from specified slow I/O address
Input: PROCEDURE [IOAddress] RETURNS [UNSPECIFIED] = MACHINE CODE
BEGIN Mopcodes.zMISC, 5; END;
-- Input with parity checking disabled.
InputNoPE: PROCEDURE [IOAddress] RETURNS [UNSPECIFIED] = MACHINE CODE
BEGIN Mopcodes.zLINI; Mopcodes.zOR; Mopcodes.zMISC, 5; END;
-- Write one word to specified slow I/O address
Output: PROCEDURE [datum: UNSPECIFIED, register: IOAddress] = MACHINE CODE
BEGIN Mopcodes.zMISC, 6; END;
-- Read one word from External IO port (event counter A must be disabled)
ExternalInput: PROCEDURE RETURNS [UNSPECIFIED] = MACHINE CODE
BEGIN Mopcodes.zMISC, 12B; END;
-- Write one word to External IO port (event counter B must be disabled)
ExternalOutput: PROCEDURE [datum: UNSPECIFIED] = MACHINE CODE
BEGIN Mopcodes.zMISC, 13B; END;
-- Operate the event counters
StartEventCounters: PROCEDURE [EventCounterControl] = MACHINE CODE
BEGIN Mopcodes.zMISC, 240B; END;
EventCounterControl: TYPE = MACHINE DEPENDENT RECORD [
loadInsSet (0: 0..0): BOOLEAN ← FALSE,
unused1 (0: 1..3): [0..7] ← 0,
enableA (0: 4..4): BOOLEAN, -- enable event counter A
enableB (0: 5..5): BOOLEAN, -- enable event counter A
unused2 (0: 6..7): [0..3] ← 0,
eventTypeA (0: 8..10): {
true(0), hold(1), procRef(2), ifuJump(3), miss(4),
backPanelA(5), backPanelC(6), backPanelE(7)} ← true,
unused3 (0: 11..11): [0..1] ← 0,
eventTypeB (0: 12..14): {
true(0), hold(1), ifuRef(2), ifuNotReady(3), miss(4),
backPanelB(5), backPanelC(6), backPanelD(7)} ← true,
tasks (0: 15..15): {emuAndFaultOnly(0), all(1)}];
ReadEventCounters: PROCEDURE [LONG POINTER TO EventCounterTable] = MACHINE CODE
BEGIN Mopcodes.zMISC, 241B; END;
EventCounterTable: TYPE = MACHINE DEPENDENT RECORD [
eventALo, eventAMid, eventAHi: CARDINAL,
eventBLo, eventBMid, eventBHi: CARDINAL];
StopEventCounters: PROCEDURE = MACHINE CODE
BEGIN Mopcodes.zMISC, 242B; END;
-- Operate the micro-PC sampling machinery
SetPCHistogram: PROCEDURE [LONG POINTER TO PCHistogram --NIL to disable--] = MACHINE CODE
BEGIN Mopcodes.zMISC, 243B; END;
PCHistogram: TYPE = ARRAY [0..4095] OF LONG CARDINAL;
-- Operate the Dorado muffler/manifold system.
RWMufMan: PROCEDURE [MufManArg] RETURNS [MufManResult] = MACHINE CODE
BEGIN Mopcodes.zMISC, 246B; END;
MufManArg: TYPE = MACHINE DEPENDENT RECORD [
useDMD (0: 0..0): BOOLEAN,
unused (0: 1..3): [0..7] ← NULL,
dMuxAddr (0: 4..15): DMuxAddr];
DMuxAddr: TYPE = [0..7777B];
MufManResult: TYPE = MACHINE DEPENDENT RECORD [
dMuxData (0: 0..0): [0..1],
unused (0: 1..15): [0..77777B]];
-- Reset Ethernet hardware and tasks
ResetEther: PROCEDURE = MACHINE CODE
BEGIN Mopcodes.zMISC, 247B; END;
-- Get memory configuration
GetMemConfig: PROC RETURNS [realPages, virtualBanks: CARDINAL] = MACHINE CODE
BEGIN Mopcodes.zMISC, 251B; END;
pagesPerBank: CARDINAL = 256; -- wordsPerBank/wordsPerPage
-- Halt the Dorado, leaving a specified value on the BMux for the BaseBoard to read
Halt: PROC [data: UNSPECIFIED] = MACHINE CODE { Mopcodes.zMISC, 252B };
-- Change the refresh rate on the display
SetDisplayFieldRate: PROCEDURE [sync, topBorder, visible: CARDINAL] = MACHINE CODE
BEGIN Mopcodes.zMISC, 253B; END;
-- Reset disk hardware and task
-- mode=disable causes disk task to go catatonic.
ResetDisk: PROCEDURE [mode: MACHINE DEPENDENT {normal(0), disable(1)}] = MACHINE CODE
BEGIN Mopcodes.zMISC, 254B; END;
-- Set interval timer wakeup time
SetIntervalTimer: PROCEDURE [time: CARDINAL] = MACHINE CODE
BEGIN Mopcodes.zMISC, 255B; END;
-- Exported from ProcessorHeadDorado to UserTerminalHeadDorado for saving cursor
-- across world-swaps.
savedCursor: DisplayFace.Cursor;
END.