DIRECTORY Rope USING [ROPE], TargetArchitecture USING [Address, Displacement, nullDisplacement, Contents, Instruction]; BreakWorldArchitecture: CEDAR DEFINITIONS ~ { BreakWorld: TYPE ~ REF BreakWorldRep _ nullBreakWorld; nullBreakWorld: BreakWorld ~ NIL; BreakWorldRep: TYPE; WorldAccess: TYPE ~ REF WorldAccessRep _ nullWorldAccess; nullWorldAccess: WorldAccess ~ NIL; WorldAccessRep: TYPE ~ RECORD [ procs: WorldAccessProcs, data: WorldAccessData ]; WorldAccessProcs: TYPE ~ REF WorldAccessProcsRep _ nullWorldAccessProcs; nullWorldAccessProcs: WorldAccessProcs ~ NIL; WorldAccessProcsRep: TYPE ~ RECORD [ peekContents: PeekContentsProc, pokeContents: PokeContentsProc, getProcAddress: GetProcAddressProc, getPatchArea: GetPatchAreaProc, monitoredCall: MonitoredCallProc ]; PeekContentsProc: TYPE ~ PROCEDURE [address: Address] RETURNS [TargetArchitecture.Contents]; PokeContentsProc: TYPE ~ PROCEDURE [address: Address, contents: TargetArchitecture.Contents] RETURNS []; GetProcAddressProc: TYPE ~ PROCEDURE [breakWorld: BreakWorld, procName: Rope.ROPE] RETURNS [Address]; GetPatchAreaProc: TYPE ~ PROCEDURE [address: Address] RETURNS [PatchAreaRep]; PatchAreaRep: TYPE ~ RECORD [ address: Address, byteSize: ByteSize ] _ nullPatchAreaRep; nullPatchAreaRep: PatchAreaRep ~ [ address: nullAddress, byteSize: 0]; PatchArea: TYPE ~ REF PatchAreaRep _ nullPatchArea; nullPatchArea: PatchArea ~ NIL; MonitoredCallProc: TYPE ~ PROCEDURE [address: Address, proc: PROCEDURE [] RETURNS []] RETURNS []; WorldAccessData: TYPE ~ REF ANY _ nullWorldAccessData; nullWorldAccessData: WorldAccessData ~ NIL; BreakAccess: TYPE ~ REF BreakAccessRep _ nullBreakAccess; nullBreakAccess: BreakAccess ~ NIL; BreakAccessRep: TYPE; Address: TYPE ~ REF AddressRep _ nullAddress; nullAddress: Address ~ NIL; AddressRep: TYPE ~ RECORD [ breakWorld: BreakWorld, address: TargetArchitecture.Address ]; ByteSize: TYPE ~ CARD32; CreateBreakWorld: PROCEDURE [ peekContents: PeekContentsProc, pokeContents: PokeContentsProc, getProcAddress: GetProcAddressProc, getPatchArea: GetPatchAreaProc, monitoredCall: MonitoredCallProc, worldAccessData: WorldAccessData] RETURNS [BreakWorld]; CreateWorldAccess: PROCEDURE [ peekContents: PeekContentsProc, pokeContents: PokeContentsProc, getProcAddress: GetProcAddressProc, getPatchArea: GetPatchAreaProc, monitoredCall: MonitoredCallProc, worldAccessData: WorldAccessData] RETURNS [WorldAccess]; BreakWorldFromWorldAccess: PROCEDURE [worldAccess: WorldAccess] RETURNS [BreakWorld]; IsNullBreakWorld: PROCEDURE [breakWorld: BreakWorld] RETURNS [BOOLEAN]; WorldAccessFromBreakWorld: PROCEDURE [breakWorld: BreakWorld] RETURNS [WorldAccess]; BreakAccessFromBreakWorld: PROCEDURE [breakWorld: BreakWorld] RETURNS [BreakAccess]; PeekContents: PROCEDURE [ address: Address, displacement: TargetArchitecture.Displacement _ TargetArchitecture.nullDisplacement] RETURNS [TargetArchitecture.Contents]; PokeContents: PROCEDURE [ address: Address, displacement: TargetArchitecture.Displacement _ TargetArchitecture.nullDisplacement, contents: TargetArchitecture.Contents] RETURNS []; GetProcAddress: PROCEDURE [breakWorld: BreakWorld, procName: Rope.ROPE] RETURNS [Address]; GetPatchArea: PROCEDURE [address: Address] RETURNS [PatchArea]; MonitoredCall: PROCEDURE [address: Address, proc: PROCEDURE [] RETURNS []] RETURNS []; NewAddress: PROCEDURE [breakWorld: BreakWorld, address: TargetArchitecture.Address] RETURNS [Address]; TargetAddressFromBreakWorldAddress: PROCEDURE [address: Address] RETURNS [TargetArchitecture.Address]; BreakWorldFromBreakWorldAddress: PROCEDURE [address: Address] RETURNS [BreakWorld]; IsNullAddress: PROCEDURE [address: Address] RETURNS [BOOLEAN]; AddressEqual: PROCEDURE [this: Address, that: Address] RETURNS [BOOLEAN]; AddressFromDisplacement: PROCEDURE [ address: Address, displacement: TargetArchitecture.Displacement] RETURNS [Address]; NextInstruction: PROCEDURE [pc: Address] RETURNS [Address]; PrevInstruction: PROCEDURE [pc: Address] RETURNS [Address]; PeekInstruction: PROCEDURE [ pc: Address, displacement: TargetArchitecture.Displacement _ TargetArchitecture.nullDisplacement] RETURNS [TargetArchitecture.Instruction]; PokeInstruction: PROCEDURE [ pc: Address, displacement: TargetArchitecture.Displacement _ TargetArchitecture.nullDisplacement, instruction: TargetArchitecture.Instruction] RETURNS []; IsNullPatchArea: PROCEDURE [patchArea: PatchArea] RETURNS [BOOLEAN]; ErrorCode: TYPE ~ ATOM _ nullErrorCode; nullErrorCode: ErrorCode ~ NIL; ErrorMessage: TYPE ~ Rope.ROPE _ nullErrorMessage; nullErrorMessage: ErrorMessage ~ NIL; Cant: ERROR [code: ErrorCode, message: ErrorMessage]; WouldBlock: ERROR [message: ErrorMessage]; }.  BreakWorldArchitecture.mesa Copyright Ó 1989, 1990 by Xerox Corporation. All rights reserved. Peter B. Kessler, April 18, 1990 12:20 pm PDT Types. returns contents of given address. sets given address to have given contents. returns address of procedure with gien name. returns PatchAreaRep for a given address. Acquires monitor lock at given address for the duration of call to the given proc. Can raise WouldBlock if world is frozen and monitor lock is already held. Only remote worlds are frozen. Procedures. Major items: calls BreakWorldFromWorldAccess[CreateWorldAccess[...]]. BreakWorld accessors. Object style accessors: This had better be atomic! Useful procedures for object-style on Addresses, Instructions, etc.: This had better be atomic! Errors. Raised by MonitoredCall. Ê[•NewlineDelimiter – "cedar" style™codešœ™Kšœ Ïrœ7™BK™-—™šÏk ˜ Kšœžœžœ˜KšœžœB˜Z——K˜unitšÏnœžœž œ˜-head™šœ žœžœ ˜6Kšœžœ˜!Kšœžœ˜K˜—šœ žœžœ"˜9Kšœžœ˜#šœžœžœ˜K˜K˜K˜—šœžœžœ,˜HKšœ)žœ˜-šœžœžœ˜$K˜K˜K˜#Kšœ˜K˜ K˜—šœžœ˜šž œžœ˜CK™"——šœžœ˜šž œ;žœ˜OK™*——šœžœ˜šž œ)žœžœ ˜JK™,——šœžœ˜šž œžœ˜4K™)—šœžœžœ˜Kšœ˜Kšœ˜Kšœ˜šœ"˜"Kšœ˜Kšœ ˜ —šœ žœžœ˜3Kšœžœ˜———šœžœ˜šž œž œžœžœ˜GJ™R™IJ™———K˜—šœžœžœžœ˜6Kšœ'žœ˜+K˜——šœ žœžœ"˜9Kšœžœ˜#Kšœžœ˜K˜—šœ žœžœ˜-Kšœžœ˜šœ žœžœ˜K˜Kšœ#˜#K˜K˜—šœ žœžœ˜K˜———™ ™ šŸœž œÏžœ˜ÿKšœ8™8K˜—šŸœž œÏžœ˜K˜—šŸœž œžœ˜VK˜—šœ™K™šŸœž œžœžœ˜GK˜—šŸœž œžœ˜UK˜—KšŸœž œžœ˜UK˜——™šŸ œž œlžœ˜©K˜—šŸ œž œ”žœ˜¶K™K˜—šŸœž œ)žœžœ ˜[K˜—šŸ œž œžœ ˜?K˜—š Ÿ œž œž œžœžœ˜VK˜——™DšŸ œž œ@žœ ˜gK˜—šŸ"œž œžœ˜gK˜—šŸœž œžœ˜TK˜—šŸ œž œžœžœ˜>K˜—šŸ œž œ žœžœ˜JK˜—šŸœž œFžœ ˜zK˜—šŸœž œžœ ˜;K˜—šŸœž œžœ ˜;K˜—šŸœž œežœ"˜©K˜—šŸœž œfžœ-žœ˜ºK™K˜—šŸœž œžœžœ˜DK˜———™šœ žœžœ˜'Kšœžœ˜—šœžœžœ˜2Kšœ!žœ˜%K˜—šŸœžœ*˜5K˜—šŸ œžœ˜*K™K˜——L˜——…—„ù