-- Copyright (C) 1984 by Xerox Corporation. All rights reserved. -- DicentraInputOutput.mesa, HGM, 18-Feb-84 21:12:03 DIRECTORY Environment USING [PageCount], ESCAlpha USING [aINPUT, aLOADRAMJ, aOUTPUT], Mopcodes USING [zESC]; DicentraInputOutput: DEFINITIONS = BEGIN IOAddress: TYPE = LONG POINTER; -- Read/Write one WORD from specified IO Address (ADR0 = 0) Input: PROCEDURE [IOAddress] RETURNS [UNSPECIFIED] = MACHINE CODE BEGIN Mopcodes.zESC, ESCAlpha.aINPUT END; Output: PROCEDURE [datum: UNSPECIFIED, address: IOAddress] = MACHINE CODE BEGIN Mopcodes.zESC, ESCAlpha.aOUTPUT END; -- Read/Write one BYTE from specified IO Address (ADR0 = 0) InputByteEven: PROCEDURE [IOAddress] RETURNS [UNSPECIFIED] = MACHINE CODE BEGIN Mopcodes.zESC, 08CH END; OutputByteEven: PROCEDURE [datum: UNSPECIFIED, address: IOAddress] = MACHINE CODE BEGIN Mopcodes.zESC, 08DH END; -- Read/Write one BYTE from specified IO Address (ADR0 = 1) InputByteOdd: PROCEDURE [IOAddress] RETURNS [UNSPECIFIED] = MACHINE CODE BEGIN Mopcodes.zESC, 08EH END; OutputByteOdd: PROCEDURE [datum: UNSPECIFIED, address: IOAddress] = MACHINE CODE BEGIN Mopcodes.zESC, 08FH END; -- Block transfer operations to IO Address space -- Read "Reads" from the IO device. -- "Hole" uses the same IO Address for each word. ReadHole: PROCEDURE [to: LONG POINTER, from: IOAddress, words: CARDINAL] = MACHINE CODE BEGIN Mopcodes.zESC, 090H END; ReadBlock: PROCEDURE [to: LONG POINTER, from: IOAddress, words: CARDINAL] = MACHINE CODE BEGIN Mopcodes.zESC, 091H END; ReadHyper: PROCEDURE [to: LONG POINTER, from: IOAddress, words: CARDINAL] = MACHINE CODE BEGIN Mopcodes.zESC, 092H END; WriteHole: PROCEDURE [from: LONG POINTER, to: IOAddress, words: CARDINAL] = MACHINE CODE BEGIN Mopcodes.zESC, 093H END; WriteBlock: PROCEDURE [from: LONG POINTER, to: IOAddress, words: CARDINAL] = MACHINE CODE BEGIN Mopcodes.zESC, 094H END; WriteHyper: PROCEDURE [from: LONG POINTER, to: IOAddress, words: CARDINAL] = MACHINE CODE BEGIN Mopcodes.zESC, 095H END; -- Read/Write one word from specified real memory -- This allows access to memory beyond the addressing limits of the Map RawRead: PROCEDURE [IOAddress] RETURNS [UNSPECIFIED] = MACHINE CODE BEGIN Mopcodes.zESC, 084H END; RawWrite: PROCEDURE [datum: UNSPECIFIED, address: IOAddress] = MACHINE CODE BEGIN Mopcodes.zESC, 085H END; ExternalStatus: TYPE = RECORD [ ints: PACKED ARRAY InterruptLevel OF BOOLEAN, trash: PACKED ARRAY [0..4) OF BOOLEAN, altBoot, masterBar, debAFull, debBFull: BOOLEAN ]; GetExternalStatus: PROCEDURE RETURNS [ExternalStatus] = MACHINE CODE BEGIN Mopcodes.zESC, 086H END; SetExtCtrl: PROCEDURE [WORD] = MACHINE CODE BEGIN Mopcodes.zESC, 087H END; InterruptLevel: TYPE = MACHINE DEPENDENT { processTimeouts(0), slowThings(1), -- Not used yet ethernet(2), ethernetOne(3), phoneLine(4), disk(5), -- Not used yet display(6), -- Not used yet fastThings(7)}; -- Not used yet SetWakeupMask: PROCEDURE [bits: WORD, intLevel: InterruptLevel] = MACHINE CODE BEGIN Mopcodes.zESC, 088H END; SetNxmExpected: PROCEDURE [BOOLEAN] = MACHINE CODE BEGIN Mopcodes.zESC, 089H END; SetWakeupBits: PROCEDURE [bits: WORD] = MACHINE CODE BEGIN Mopcodes.zESC, 08AH END; SetPhonelineCSB: PROCEDURE [LONG POINTER] = MACHINE CODE BEGIN Mopcodes.zESC, 08BH END; JumpBank: PROCEDURE [newBank: CARDINAL] = MACHINE CODE BEGIN Mopcodes.zESC, ESCAlpha.aLOADRAMJ END; -- number of virtual pages in a standard product dandelion (16K map) numberVirtualPages: Environment.PageCount = 40000B; -- = 16384D = 4000x END..