<> <> DIRECTORY IO USING [STREAM], PupTypes USING [PupAddress, PupType, PupSocketID], Rope USING [ROPE]; TeleLoad: CEDAR DEFINITIONS = BEGIN <> <> MaxByte: NAT = 200; BlockIndex: TYPE = [0..MaxByte); CoreAddress: TYPE = LONG CARDINAL; BootTypeNumber: TYPE = LONG CARDINAL; MachineTypeNumber: TYPE = LONG CARDINAL; Byte: TYPE = [0..400B); DataBlock: TYPE = PACKED ARRAY [0..0) OF Byte; TLObject: TYPE = MONITORED RECORD [ host: Rope.ROPE _ NIL, address: PupTypes.PupAddress, cacheCB: CoreBlock _ NIL, cacheSize: NAT _ 0, addressSpace: AddressSpace _ main, dirty: BOOLEAN _ FALSE, log: IO.STREAM ]; Handle: TYPE = REF TLObject; teleSwatSocket: PupTypes.PupSocketID = [0, 60B]; <<>> <> locMaxByte: PUBLIC NAT; <> coreStoreRequest: PupTypes.PupType = LOOPHOLE[300B]; coreFetchRequest: PupTypes.PupType = LOOPHOLE[302B]; <> <> <> <> <> goRequest: PupTypes.PupType = LOOPHOLE[304B]; stateFetchRequest: PupTypes.PupType = LOOPHOLE[306B]; singleStepRequest: PupTypes.PupType = LOOPHOLE[312B]; goFromBreakRequest: PupTypes.PupType = LOOPHOLE[314B]; <> debugRequest: PupTypes.PupType = LOOPHOLE[310B]; eventBooted: PupTypes.PupType = LOOPHOLE[311B]; <> slaveStoreRequest: PupTypes.PupType = LOOPHOLE[316B]; slaveFetchRequest: PupTypes.PupType = LOOPHOLE[320B]; <> callRequest: PupTypes.PupType = LOOPHOLE[322B]; <> Advice: TYPE = MACHINE DEPENDENT RECORD [ setHost: BOOLEAN, setAdvice: BOOLEAN, data: [0..37777B] ]; <> CorePktObject: TYPE = MACHINE DEPENDENT RECORD [ advice: Advice, address: CoreAddress, count: CARDINAL, data: DataBlock ]; CorePkt: TYPE = LONG POINTER TO CorePktObject; <> CallPktObject: TYPE = MACHINE DEPENDENT RECORD [ proc: CARDINAL, nargs: CARDINAL, returnArg: CARDINAL, args: ARRAY [0..5) OF CARDINAL ]; CallPkt: TYPE = LONG POINTER TO CallPktObject; <<8086 state>> Registers8086: TYPE = MACHINE DEPENDENT { AX(0), BX(1), CX(2), DX(3), SP(4), BP(5), SI(6), DI(7), CS(8), DS(9), SS(10), ES(11), IP(12), FL(13) }; State8086Object: TYPE = MACHINE DEPENDENT RECORD [ Regs: ARRAY Registers8086 OF CARDINAL ]; State8086: TYPE = LONG POINTER TO State8086Object; <> CoreBlockObject: TYPE = RECORD [ advice: Advice, address: CoreAddress, data: PACKED SEQUENCE count: NAT OF Byte ]; CoreBlock: TYPE = REF CoreBlockObject; <> <> NameToAddress: PROC [name: Rope.ROPE] RETURNS [address: PupTypes.PupAddress, ok: BOOL]; AddressToName: PROC [address: PupTypes.PupAddress] RETURNS [nameRope, addressRope: Rope.ROPE]; Start: PROC [host: Rope.ROPE, log: IO.STREAM] RETURNS [h: Handle]; Stop: PROC [h: Handle]; TeleLoadProc: TYPE = PROC [h: Handle, cb: CoreBlock, tries: NAT _ 5] RETURNS [ok: BOOL, attempts: NAT]; Store: TeleLoadProc; Fetch: TeleLoadProc; Go: TeleLoadProc; FetchState: TeleLoadProc; SingleStep: TeleLoadProc; GoFromBreak: TeleLoadProc; GoToDebugger: TeleLoadProc; SlaveStore: TeleLoadProc; SlaveFetch: TeleLoadProc; Call: TeleLoadProc; <> EventRecordObject: TYPE = MACHINE DEPENDENT RECORD [ regs: State8086Object, reason: CARDINAL, clockLow: CARDINAL, clockHigh: CARDINAL, bootSwitches: CARDINAL, advice: CARDINAL, monRelays: CARDINAL, tlNet: CARDINAL, tlHost: CARDINAL, tlImHost: CARDINAL, localNet: CARDINAL ]; EventRecord: TYPE = LONG POINTER TO EventRecordObject; <> EventProc: TYPE = PROC[who: PupTypes.PupAddress, cb: EventRecordObject, clientData: REF ANY]; StartEventServer: PROC [proc: EventProc, clientData: REF ANY _ NIL]; StopEventServer: PROC; <<>> <> <> Failed: ERROR; AddressSpace: TYPE = {main, slave}; GetCoreBlock: PROC[h: Handle, addr: CoreAddress, count: CARDINAL, addressSpace: AddressSpace _ main] RETURNS [CoreBlock]; <> Read: PROC [h: Handle, addr: CoreAddress, addressSpace: AddressSpace _ main] RETURNS [CARDINAL]; ReadWord: PROC [h: Handle, addr: CoreAddress, addressSpace: AddressSpace _ main] RETURNS [CARDINAL]; Write: PROC [h: Handle, addr: CoreAddress, value: CARDINAL, addressSpace: AddressSpace _ main]; WriteWord: PROC [h: Handle, addr: CoreAddress, value: CARDINAL, addressSpace: AddressSpace _ main]; FlushWrites: PROC [h: Handle]; <> ResetCache: PROC [h: Handle]; <> SetCacheSize: PROC [h: Handle, bytes: NAT]; <> Swab: PROC [a: CARDINAL] RETURNS [b: CARDINAL]; SwabState: PROC [state: State8086Object] RETURNS [State8086Object]; SwabEvent: PROC [state: EventRecordObject] RETURNS [EventRecordObject]; <> StopHimProbing: PROC [h: Handle, setPointers: BOOL _ FALSE]; <> GetEventData: PROC [h: Handle, setPointers: BOOL] RETURNS [event: EventRecordObject, ok: BOOL]; <> StartKing: PROC; StopKing: PROC; END. December 30, 1981 1:42 PM, Stewart, created 3-Jan-82 20:52:45, Stewart, Added 8086 state last edited by Stewart, 4-Jan-82 20:21:34 December 22, 1982 2:55 pm, Stewart April 25, 1983 11:25 am, LCS, changes to Event, add locMaxByte April 29, 1983 12:04 pm, LCS, new event, slave space May 1, 1983 3:18 pm, LCS, added GetEventData and StopHimProbing