<> <> <> <> DIRECTORY CrRPC, Rope; RapunzelP2200V2: CEDAR DEFINITIONS ~ { ROPE: TYPE ~ Rope.ROPE; FaultCode: TYPE ~ MACHINE DEPENDENT { nonexistent(1), protection(2), alignmentShort(3), alignmentLong(4) }; PokeLong: PROC [h: CrRPC.Handle, address: CARD, value: CARD]; SeqCmd: TYPE ~ REF SeqCmdObject; SeqCmdObject: TYPE ~ MACHINE DEPENDENT RECORD [ body: PACKED SEQUENCE length: CARDINAL OF Cmd ]; DoCmds: PROC [h: CrRPC.Handle, cmdSeq: SeqCmd] RETURNS [resultSeq: SeqResult]; ReturnLengthResult: TYPE ~ RECORD []; SetShftAddrs: PROC [h: CrRPC.Handle, shftA: CARD, shftB: CARD]; ShftReadResult: TYPE ~ RECORD [ numRepeats: CARDINAL ]; Long: TYPE ~ CARD; Fault: ERROR [code: FaultCode, address: CARD]; Result: TYPE ~ RECORD [ SELECT type: OpCode FROM peekShort => [peekShort: PeekShortResult], pokeShort => [pokeShort: PokeShortResult], shftRead => [shftRead: ShftReadResult], shftWrite => [shftWrite: ShftWriteResult], returnLength => [returnLength: ReturnLengthResult] ENDCASE ]; PokeShort: PROC [h: CrRPC.Handle, address: CARD, value: CARDINAL]; ShftReadCmd: TYPE ~ RECORD [ address: CARD, numRepeats: CARDINAL ]; PeekLong: PROC [h: CrRPC.Handle, address: CARD] RETURNS [result: CARD]; PeekShortResult: TYPE ~ RECORD [ value: CARDINAL ]; PokeSeqShort: PROC [h: CrRPC.Handle, address: CARD, valueSeq: SeqShort]; PokeShortCmd: TYPE ~ RECORD [ address: CARD, value: CARDINAL ]; PokeShortResult: TYPE ~ RECORD []; ShftWriteCmd: TYPE ~ RECORD [ address: CARD, numRepeats: CARDINAL ]; SeqResult: TYPE ~ REF SeqResultObject; SeqResultObject: TYPE ~ MACHINE DEPENDENT RECORD [ body: PACKED SEQUENCE length: CARDINAL OF Result ]; ReturnLengthCmd: TYPE ~ RECORD [ returnLength: CARDINAL ]; ShftWriteResult: TYPE ~ RECORD [ numRepeats: CARDINAL ]; Cmd: TYPE ~ RECORD [ SELECT type: OpCode FROM peekShort => [peekShort: PeekShortCmd], pokeShort => [pokeShort: PokeShortCmd], shftRead => [shftRead: ShftReadCmd], shftWrite => [shftWrite: ShftWriteCmd], returnLength => [returnLength: ReturnLengthCmd] ENDCASE ]; PeekShort: PROC [h: CrRPC.Handle, address: CARD] RETURNS [result: CARDINAL]; OpCode: TYPE ~ MACHINE DEPENDENT { peekShort(0), pokeShort(1), shftRead(2), shftWrite(3), returnLength(4) }; PeekSeqShort: PROC [h: CrRPC.Handle, address: CARD, count: CARDINAL] RETURNS [resultSeq: SeqShort]; Address: TYPE ~ CARD; Short: TYPE ~ CARDINAL; PeekShortCmd: TYPE ~ RECORD [ address: CARD ]; SeqShort: TYPE ~ REF SeqShortObject; SeqShortObject: TYPE ~ MACHINE DEPENDENT RECORD [ body: PACKED SEQUENCE length: CARDINAL OF CARDINAL ]; }...