DIRECTORY Basics, CRIO, XBus; CRIOImpl: CEDAR PROGRAM IMPORTS XBus, Basics EXPORTS CRIO = BEGIN baseAddress: LONG POINTER = LOOPHOLE[LONG[0C000H]]; control: NAT = 2000H; readDataHigh: NAT = 1000H; readDataLow: NAT = 0000H; statusReg: NAT = 0H; writeDataHighReg: NAT = 2H; TestEnb: CARDINAL = 1; AccessRefreshEnb: CARDINAL = 2; EmergencyRefreshEnb: CARDINAL = 4; big: BOOLEAN; status: CARDINAL; writeDataHigh: CARDINAL; Init: PUBLIC PROC [bigChip: BOOLEAN] ~ { big _ bigChip; status _ 0; XBus.IOWrite[baseAddress+control+statusReg, status]; writeDataHigh _ 0; XBus.IOWrite[baseAddress+control+writeDataHighReg, writeDataHigh]; }; Test: PUBLIC PROC [on: BOOLEAN] ~ { IF on THEN status _ Basics.BITOR[status, TestEnb] ELSE status _ Basics.BITAND[status, Basics.BITNOT[TestEnb]]; XBus.IOWrite[baseAddress+control+statusReg, status]; }; AccessRefresh: PUBLIC PROC [on: BOOLEAN] ~ { IF on THEN status _ Basics.BITOR[status, AccessRefreshEnb] ELSE status _ Basics.BITAND[status, Basics.BITNOT[AccessRefreshEnb]]; XBus.IOWrite[baseAddress+control+statusReg, status]; }; EmergencyRefresh: PUBLIC PROC [on: BOOLEAN] ~ { IF on THEN status _ Basics.BITOR[status, EmergencyRefreshEnb] ELSE status _ Basics.BITAND[status, Basics.BITNOT[EmergencyRefreshEnb]]; XBus.IOWrite[baseAddress+control+statusReg, status]; }; CRRead: PUBLIC PROC [address: [0..2048)] RETURNS [data: LONG CARDINAL] ~ { wordAddress: CARDINAL _ Basics.BITAND[address*2, 0FFFEH]; data _ XBus.IORead[baseAddress+readDataLow+wordAddress]; IF big THEN data _ data + (XBus.IORead[baseAddress+readDataHigh+wordAddress]*65536) ELSE data _ Basics.BITAND[data, 0FFFEH]; RETURN[data]; }; CRWrite: PUBLIC PROC [address: [0..2048), data: LONG CARDINAL] ~ { wordAddress: CARDINAL _ Basics.BITAND[address*2, 0FFFEH]; IF big AND (Basics.HighHalf[data] # writeDataHigh) THEN XBus.IOWrite[baseAddress+control+writeDataHighReg, writeDataHigh _ Basics.HighHalf[data]]; XBus.IOWrite[baseAddress+wordAddress, Basics.LowHalf[data]]; }; END. ώCRIOImpl.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Created by: Gasbarro August 27, 1985 5:17:18 pm PDT Last Edited by: Gasbarro, February 21, 1986 2:41:37 pm PST Multibus Board Addresses Status Register Bit Values Globals ΚΟ˜J™ Icodešœ Οmœ1™