-- XXDebugUser.mesa Edited by Bruce, September 22, 1980 11:19 AM
DIRECTORY
AltoDefs: FROM "altodefs",
Inline: FROM "inline",
IODefs: FROM "iodefs",
Mopcodes: FROM "mopcodes",
RESOut: FROM "resout",
SegmentDefs: FROM "segmentdefs",
StringDefs: FROM "stringdefs",
XXDebugDefs: FROM "xxdebugdefs";
XXDebugUser: PROGRAM
IMPORTS Inline, RESOut, SegmentDefs, StringDefs
EXPORTS XXDebugDefs =
BEGIN OPEN RESOut, XXDebugDefs;
CoreFile: SegmentDefs.FileHandle ← NIL;
CoreSeg: SegmentDefs.FileSegmentHandle;
GetPage: PROCEDURE [page: CARDINAL] RETURNS [base: POINTER] =
BEGIN OPEN SegmentDefs;
IF CoreFile = NIL THEN
BEGIN
CoreFile ← NewFile["Swatee"L, Read, DefaultVersion];
LockFile[CoreFile];
CoreSeg ← NewFileSegment[CoreFile, page, 1, Read];
MakeSwappedIn[CoreSeg, DefaultBase, HardUp];
END;
IF CoreSeg.base # page THEN
BEGIN
Unlock[CoreSeg];
SwapOut[CoreSeg];
MoveFileSegment[CoreSeg, page, 1];
MakeSwappedIn[CoreSeg, DefaultBase, HardUp];
END;
base ← SegmentAddress[CoreSeg];
END;
UserREAD: PUBLIC PROCEDURE [loc: LONG POINTER]
RETURNS [val: UNSPECIFIED] =
BEGIN OPEN Mopcodes;
mempage, offset: CARDINAL;
[mempage, offset] ←
Inline.LongDivMod[LOOPHOLE[loc], AltoDefs.PageSize];
SELECT mempage FROM
> 253 => RETURN[ReadVM[loc]];
ENDCASE => RETURN [(GetPage[mempage] + offset)↑];
END;
UserCopyRead: PUBLIC PROCEDURE [
from: LONG POINTER, nwords: CARDINAL, to: LONG POINTER] =
BEGIN
i: CARDINAL;
FOR i IN [0..nwords) DO (to+i)↑ ← UserREAD[from+i]; ENDLOOP;
RETURN
END;
ReadVM: PROCEDURE [p: LONG POINTER] RETURNS [UNSPECIFIED] =
BEGIN
RBL: PROC [LONG POINTER] RETURNS [UNSPECIFIED] =
MACHINE CODE BEGIN Mopcodes.zRBL, 0 END;
RETURN[RBL[p]];
END;
Octal0: IODefs.NumberFormat =
[base: 8, unsigned: TRUE, zerofill: FALSE, columns: 0];
nString: PUBLIC STRING ← NIL;
UserOctalRead: PUBLIC PROCEDURE [loc: LONG POINTER] =
BEGIN
val, i, cols, count: CARDINAL;
IF nString = NIL THEN GO TO noNumber;
count ← StringDefs.StringToNumber[nString, 10 !
StringDefs.InvalidNumber => GO TO noNumber];
PCr[];
FOR i IN [0..count) DO
val ← UserREAD[(loc+i)];
cols ← Log8[val];
IF val > 7 THEN cols ← cols + 1;
IF i # 0 AND MakeRoom[cols+2, 0] THEN PString[", "]
ELSE {PLongNumber[(loc+i), Octal0]; PString["B: "L]};
POctal[val];
ENDLOOP;
EXITS
noNumber =>
BEGIN
Complain["specify a count, please"L];
ERROR cancelAction;
END;
END;
END.