mirror of
https://github.com/pkimpel/retro-b5500.git
synced 2026-02-11 19:05:01 +00:00
1. Commit ALGOLXEM compiler source after conversion to E-mode and initial debugging. It's actually starting to work, folks...
2. Commit test cases used to debug ALGOLXEM under new "tests" directory. 3. Commit new CODEDUMP55.alg_m utility to prepare a semi-formatted dump of a B5500 code file. 4. Commit further typographical corrections to B5500 Algol compiler source uncovered during conversion and debugging of ALGOLXEM.
This commit is contained in:
@@ -720,7 +720,7 @@ DEFINE % %116-01007400
|
||||
TION (IN [12:6]), AND THE FIRST 5 CHARACTERS OF ALPHA. 01014000
|
||||
SUCCEDING WORDS CONTAIN THE REMAINING CHARACTORS OF ALPHA,01015000
|
||||
FOLLOWED BY ANY ADDITIONAL INFORMATION. THE ELBAT WORD 01016000
|
||||
AND THE ALPHA FOR ANY QUANTITY ARE NOT SPLUT ACROSS A ROW 01017000
|
||||
AND THE ALPHA FOR ANY QUANTITY ARE NOT SPLIT ACROSS A ROW 01017000
|
||||
OF INFO. FOR PURPOSES OF FINDING AN IDENTIFIER OR 01018000
|
||||
RESERVED WORD THE QUANTITIES ARE SCATTERED INTO 125 01019000
|
||||
DIFERENT LISTS OR STACKES. WHICH STACK CONTAINS A QUANTITY01020000
|
||||
@@ -768,7 +768,7 @@ COMMENT INFO FORMAT 01028000
|
||||
NOW S[L] POINTS TO THE ENTRY FOR B AND IT POINTS TO THE 01062000
|
||||
ENTRY FOR A. 01063000
|
||||
SIMILARLY,AFTER C IS ENTERED 01064000
|
||||
A[L] POINTS TO C,WHOSE ENTRY POINTS TO B WHOSE ENTRY 01065000
|
||||
S[L] POINTS TO C,WHOSE ENTRY POINTS TO B WHOSE ENTRY 01065000
|
||||
POINTS TO A. 01066000
|
||||
THE SECOND WORD OF EACH ENTRY IN INFO IS MADE UP AS FOLLOWS: 01067000
|
||||
FWDPT =[1:1],THIS TELLS WHETHER A PROCEDURE WAS DECLARED 01068000
|
||||
@@ -4448,7 +4448,7 @@ INTEGER PROCEDURE GETSPACE(PERMANENT,L); VALUE PERMANENT,L; 05331000
|
||||
PRTIMAX ~ (GS ~ PRTIMAX)+1 END 05350000
|
||||
ELSE IF MODE = 0 THEN BEGIN 05351000
|
||||
Q ~ SPRT[ROW ~ PRTI.[38:5]]; 05352000
|
||||
M ~ MASK(COL ~ PRTI.[43:4]-35); 05353000
|
||||
M ~ MASK(COL ~ PRTI.[43:5]-35); 05353000
|
||||
COL ~ COL+35; 05354000
|
||||
L1: IF REAL(M AND Q) ! 0 05355000
|
||||
THEN BEGIN 05356000
|
||||
@@ -5245,7 +5245,7 @@ FCR:= (LCR:=MKABS(TBUFF[9]))-9 END; %104-07025030
|
||||
PCTR IS A COUNT OF THE NUMBER OF PARAMETERS 07052000
|
||||
COMPILED. 07053000
|
||||
ACLASS IS THE CLASS OF THE ACTUAL PARAMETER- 07054000
|
||||
SCLASS IS TEH CLASS OF THE FORMAL PARAMETER. 07055000
|
||||
SCLASS IS THE CLASS OF THE FORMAL PARAMETER. 07055000
|
||||
THEY ARE PUT IN A NORMALIZED FORM IN ORDER 07056000
|
||||
TO ALLOW INTEGER, REAL, AND ALPHA TO HAVE 07057000
|
||||
SIMILAR MEANINGS; 07058000
|
||||
@@ -6283,6 +6283,7 @@ PROCEDURE CMPLXSTMT; FORWARD ; 07777777
|
||||
GO TO XXX 07859090
|
||||
END ELSE 07859100
|
||||
$ SET OMIT = NOT TSPOL 07859900
|
||||
$ POP OMIT % [NOT IN ORIGINAL LISTING] 07899000
|
||||
BEGIN ERROR(100); GO TO XXX END; 07900000
|
||||
IF STEPI ! LEFTPAREN THEN 07901000
|
||||
BEGIN ERR(105); GO TO XXX END; 07902000
|
||||
@@ -6533,7 +6534,7 @@ PROCEDURE KLUDGE(T); VALUE T; INTEGER T; 07930000
|
||||
IF FORCLASS(STEPV) THEN 08182000
|
||||
IF SIMPLE(CONSTANB,B,SIGNB) THEN 08183000
|
||||
IF FORCLASS(UNTILV) THEN 08184000
|
||||
IF SIMPLE(CONSTANC,C,SIGNC) THEN 08185000
|
||||
IF SIMPLE(CONSTANC,Q,SIGNC) THEN 08185000
|
||||
IF FORCLASS(DOV) THEN 08186000
|
||||
BEGIN 08187000
|
||||
PLUG(CONSTANA,A); 08188000
|
||||
@@ -8033,7 +8034,7 @@ FILL INFO[2,*] WITH OCT0030000120000000, "2LB000", % THESE ENTRIES ARE 09214105
|
||||
OCT0130000000040000, "3ERF00", OCT0000000012500000,%651 09214410
|
||||
OCT0130000000040000, "5GAMMA", OCT0000000012600000,%654 09214415
|
||||
OCT0130000000040000, "5LNGAM", OCT0000000012700000,%657 09214420
|
||||
OCT0130000000040000, "3TAN00", OCT0000000011100000,%660 09214425
|
||||
OCT0130000000040000, "3TAN00", OCT0000000011100007,%660 09214425
|
||||
OCT0130000260000000, "4FAST0", %663 09214426
|
||||
OCT0130000270000000, "4SLOW0", %665 09214427
|
||||
OCT0130000240000000, "7PROTE", "CT000000", %667 09214428
|
||||
@@ -8257,7 +8258,7 @@ COMMENT ADD IN CORE ESTIMATE FOR SORT; 09361181
|
||||
IF GTI1 } 32000 THEN GTI1~ 32000; 09361200
|
||||
COMMENT AT THIS POINT GTI1 HAS THE NEEDED TOTAL CORE REQD; 09361210
|
||||
COMMENT WRITE OUT FILE PARAMETER BLOCK; 09393000
|
||||
GTI1~MIN((IDLOC-IDLOCTEMP).[33:15]+1, 128);% AHA 09394000
|
||||
GT1~MIN((IDLOC-IDLOCTEMP).[33:15]+1, 128);% AHA 09394000
|
||||
MOVE(GT1,IDARRAY[0],EDOC[0,0]); 09395000
|
||||
ZEROUT(IDARRAY[0],0,30); 09395500
|
||||
IDARRAY[4]:=MOVEANDBLOCK(EDOC,GT1,0); %106-09396000
|
||||
@@ -8452,7 +8453,7 @@ END END END PROGRAM; 09420000
|
||||
REPEAT~F-SKIP; F~SKIP; 10127000
|
||||
WHIPOUT(EDOC[F.[38:3],F.[41:7]]&REPEAT[28:38:10]); 10127100
|
||||
F~SKIP+REPEAT; S~TRUE; CODE~RRIGHT END 10127200
|
||||
ELSE IF ELCLASS = "0" 10128000
|
||||
ELSE IF ELCLASS = "O" 10128000
|
||||
THEN BEGIN CODE~RO; W~8 END 10129000
|
||||
ELSE IF ELCLASS = "D" 10130000
|
||||
THEN BEGIN CODE~RD; W~8 END 10131000
|
||||
@@ -8557,7 +8558,7 @@ END END END PROGRAM; 09420000
|
||||
L2: NEXTENT; GO TO EXIT; 10172000
|
||||
EX: FORMATPHRASE ~ TRUE; ERR(136); 10173000
|
||||
EXIT: END FORMATPHRASE; 10174000
|
||||
COMMENT GETINT DOES A CALL ON NEXTEND AND CHECKS TO SEE IF AN INTEGER 10175000
|
||||
COMMENT GETINT DOES A CALL ON NEXTENT AND CHECKS TO SEE IF AN INTEGER 10175000
|
||||
WAS THE RESULT: IF NOT ERROR - OTHERWISE MAKE SIGN PLUS; 10176000
|
||||
BOOLEAN PROCEDURE GETINT; 10177000
|
||||
BEGIN NEXTENT; IF ELCLASS ~ - ELCLASS < 0 THEN 10178000
|
||||
@@ -9999,7 +10000,7 @@ COMMENT 13294000
|
||||
KOUNT~COUNT; 13306000
|
||||
ACCUM[0].INCR~WORDCOUNT; 13307000
|
||||
ACCUM[0].LINK ~STACKHEAD[SCRAM];STACKHEAD[SCRAM]~NEXTINFO; 13308000
|
||||
ACCUM[1].PURPT~NEXTINFO~LASTINFO; 13309000
|
||||
ACCUM[1].PURPT~NEXTINFO-LASTINFO; 13309000
|
||||
MOVE(WORDCOUNT,ACCUM,INFO[NEXTINFO.LINKR,NEXTINFO.LINKC]); 13310000
|
||||
IF XREF THEN % MAKE DECLARATION REFERENCE %116-13310050
|
||||
IF (ACCUM[0].CLASS ! DEFINEDID OR NOT %116-13310075
|
||||
@@ -10032,7 +10033,7 @@ COMMENT 13317000
|
||||
ENTRY ASSUMES THAT I IS POINTING AT AN IDENTIFIER WHICH 13318000
|
||||
IS BEING DECLARED AND MAKES UP THE ELBAT ENTRY FOR IT 13319000
|
||||
ACCORD TO TYPE .IF THE ENTRY IS AN ARRAY AND NOT 13320000
|
||||
A SPECIFICATION THEN A DESCRIPTOR IS PALCED IN THE STACK 13321000
|
||||
A SPECIFICATION THEN A DESCRIPTOR IS PLACED IN THE STACK 13321000
|
||||
FOR THE UPCOMING COMMUNICATE TO GET STORAGE FOR THE ARRAY(S) ;13322000
|
||||
BEGIN 13323000
|
||||
BOOLEAN SVTOG;% 13323010
|
||||
@@ -10252,7 +10253,7 @@ TWO:IF STEPI=ADOP THEN 13474000
|
||||
ULITOG~FALSE; 13523000
|
||||
AEXP; 13524000
|
||||
EMITL(JUNK); 13525000
|
||||
EMITL(ISN); 13526000
|
||||
EMITO(ISN); 13526000
|
||||
CSZ: IF LLITOG AND ULITOG THEN 13527000
|
||||
BEGIN 13528000
|
||||
L~ARPROGS; 13529000
|
||||
@@ -11652,7 +11653,7 @@ COMMENT **** MONITOR FUNCTION M1 GOES HERE ; 15238000
|
||||
COMMENT 203 VARIABLE- THE NUMBER OF SUBSCRIPTS USED IN A ROW * 15257000
|
||||
ROW DESIGNATOR DOES NOT MATCH THE ARRAY * 15258000
|
||||
DECLARATION. *;15259000
|
||||
IF STEPI = RTBRKET THEN 15260000
|
||||
IF STEPI ! RTBRKET THEN 15260000
|
||||
BEGIN ERR(204);GO EXIT END; 15261000
|
||||
COMMENT 204 VARIABLE- COMPILER EXPECTS A ] IN A ROW DESIGNATER *;15262000
|
||||
IF P1 ! FA THEN 15262500
|
||||
|
||||
55
tests/ALGOLXEM/CASESW.alg_m
Normal file
55
tests/ALGOLXEM/CASESW.alg_m
Normal file
@@ -0,0 +1,55 @@
|
||||
$ SET LIST $ PRT DEBUGN 00000100120418PK
|
||||
% CASE VS. SWITCH 10/01/70 ROSE & PK 00002000
|
||||
BEGIN 00003000
|
||||
INTEGER I, J, K; 00004000
|
||||
FILE OUT PR 18 (2,15); 00005000
|
||||
BEGIN %%% INNER BLOCK %%% 00006000
|
||||
REAL X, Y, Z; 00007000
|
||||
LABEL L1, L2, L3; 00008000
|
||||
SWITCH S ~ L1, L2, L3; 00008500
|
||||
ALPHA ARRAY A[0:I], B[0:2|I]; 00009000120418PK
|
||||
FORMAT F1 (X20,O,X5,2O); 00010000
|
||||
00011000
|
||||
STREAM PROCEDURE MOVEPRT (PRT25, A, N1, N2); 00012000
|
||||
VALUE N1, N2; 00013000
|
||||
BEGIN 00014000
|
||||
SI ~ LOC PRT25; SI ~ SI - 21; 00015000
|
||||
DI ~ A; 00016000
|
||||
N1(2(DS ~ 32 WDS)); N2(DS ~ WDS); 00017000
|
||||
END MOVEPRT; 00018000
|
||||
00019000
|
||||
STREAM PROCEDURE BINOCT (N1, N2, S, D); 00020000
|
||||
VALUE N1, N2; 00021000
|
||||
BEGIN 00022000
|
||||
SI ~ S; 00023000
|
||||
DI ~ D; 00024000
|
||||
N1(32(32(DS~ 3 RESET; 3(IF SB THEN DS ~ SET ELSE DS ~ RESET; 00025000
|
||||
SKIP SB)))); 00026000
|
||||
N2(16(DS ~ 3 RESET; 3(IF SB THEN DS ~ SET ELSE DS ~ RESET; 00027000
|
||||
SKIP SB))); 00028000
|
||||
END BINOCT; 00029000
|
||||
00030000
|
||||
L1: 00031000
|
||||
J ~ 3; GO TO S[J]; 00032000
|
||||
L2: 00033000
|
||||
CASE J MOD 10 OF 00034000
|
||||
BEGIN 00035000
|
||||
J ~ 3; 00036000
|
||||
K ~ J; 00037000
|
||||
X ~ K +J; 00038000
|
||||
Y ~ X ~ SQRT(X); 00039000
|
||||
; 00040000
|
||||
Z ~ 2|Y + 6.0; 00041000120418PK
|
||||
; 00042000
|
||||
K ~ 5000; 00043000
|
||||
END CASE; 00044000
|
||||
L3: 00045000
|
||||
MOVEPRT (I, A[*], I DIV 64, I MOD 64); 00046000
|
||||
BINOCT (I DIV 64, I MOD 64, A[*], B[*]); 00047000
|
||||
FOR J ~ 0 STEP 1 UNTIL I DO 00048000
|
||||
BEGIN 00049000
|
||||
BINOCT (0, 1, J, Y); 00050000
|
||||
WRITE (PR, F1, Y, B[J|2], B[J|2+1]); 00051000120418PK
|
||||
END; 00052000
|
||||
END INNER BLOCK; 00053000
|
||||
END. 00054000
|
||||
2
tests/ALGOLXEM/TEST-ONE.alg_m
Normal file
2
tests/ALGOLXEM/TEST-ONE.alg_m
Normal file
@@ -0,0 +1,2 @@
|
||||
$ SET $ LIST PRT DEBUGN 00000010120419PK
|
||||
BEGIN END. 00000100
|
||||
5
tests/ALGOLXEM/TEST-TWO.alg_m
Normal file
5
tests/ALGOLXEM/TEST-TWO.alg_m
Normal file
@@ -0,0 +1,5 @@
|
||||
$ SET LIST $ PRT DEBUGN 00000100120417PK
|
||||
BEGIN 00000200
|
||||
INTEGER I, J; 00000300
|
||||
J:= I+5; 00000400
|
||||
END. 00000500
|
||||
207
tools/CODEDUMP55.alg_m
Normal file
207
tools/CODEDUMP55.alg_m
Normal file
@@ -0,0 +1,207 @@
|
||||
$ SET LINEINFO 00000100
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00001000
|
||||
%% CODEDUMP55 %%00001100
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00001200
|
||||
% 00001300
|
||||
% MCP E-MODE PROGRAM TO DUMP A B-5500 CODE FILE IN OCTAL AND TO 00001400
|
||||
% INTERPRET SEGMENT 0 AND THE SEGMENT DICTIONARY. 00001500
|
||||
% 00001600
|
||||
% TO USE, EQUATE FILE CODE TO THE B5500 CODE FILE. OUTPUT IS TO THE 00001700
|
||||
% PRINTER FILE LINE. 00001800
|
||||
% 00049900
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00050000
|
||||
% 2012-04-19 P.KIMPEL 00050010
|
||||
% ORIGINAL VERSION. 00050011
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00099000
|
||||
BEGIN 00100000
|
||||
DEFINE 00100100
|
||||
SECTORSIZE = 30 #, 00100200
|
||||
UNITSOF(V,U) = (((V)+(U-1)) DIV (U)) #, 00100300
|
||||
INCREMENTSOF(V,U) = (UNITSOF(V,U)*U) #; 00100400
|
||||
00110000
|
||||
INTEGER 00120100
|
||||
CODERECSIZE, 00120200
|
||||
PRTSIZE, 00120300
|
||||
SEGDICTSIZE; 00120400
|
||||
00130000
|
||||
REAL 00130100
|
||||
T7; 00130200
|
||||
00150000
|
||||
ARRAY 00150100
|
||||
A[0:29], 00150200
|
||||
PRT[0:29], 00150300
|
||||
SEGDICT[0:29], 00150400
|
||||
SEGZERO[0:29]; 00150500
|
||||
00170000
|
||||
FILE 00170100
|
||||
CODE (KIND=DISK, DEPENDENTSPECS, DEPENDENTINTMODE), 00170200
|
||||
LINE (KIND=PRINTER, MAXRECSIZE=132, FRAMESIZE=8, FILEUSE=IO); 00170300
|
||||
00300000
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00300100
|
||||
PROCEDURE DUMPSECTOR(SECTOR, BUF, BUFX); 00300200
|
||||
VALUE SECTOR, BUFX; 00300300
|
||||
INTEGER SECTOR, BUFX; 00300400
|
||||
ARRAY BUF[0]; 00300500
|
||||
BEGIN 00300600
|
||||
INTEGER 00300700
|
||||
ENDX, 00300800
|
||||
X, 00300900
|
||||
Y; 00301000
|
||||
00301100
|
||||
ENDX:= BUFX+SECTORSIZE-1; 00301200
|
||||
WRITE(LINE, <X3,K5,X2,5(K4,X1,6(K16,X1),/,X10)>, 00301300
|
||||
SECTOR, FOR X:= BUFX STEP 6 UNTIL ENDX DO [ 00301400
|
||||
X, FOR Y:=0 STEP 1 UNTIL 5 DO BUF[X+Y]]); 00301500
|
||||
END DUMPSECTOR; 00301600
|
||||
00810000
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00810100
|
||||
PROCEDURE DUMPPRT(PRTLOC, PRTSIZE, PRT); 00810200
|
||||
VALUE PRTLOC, PRTSIZE; 00810300
|
||||
INTEGER PRTLOC, PRTSIZE; 00810400
|
||||
ARRAY PRT[0]; 00810500
|
||||
BEGIN 00810600
|
||||
INTEGER 00810700
|
||||
BUFX, 00810800
|
||||
SECTOR; 00810900
|
||||
00811000
|
||||
WRITE(LINE, <"PRT:">); 00811100
|
||||
SECTOR:= PRTLOC; 00811200
|
||||
IF SIZE(PRT) < PRTSIZE THEN 00811300
|
||||
RESIZE(PRT, INCREMENTSOF(PRTSIZE, SECTORSIZE)); 00811400
|
||||
00811500
|
||||
WHILE BUFX < PRTSIZE DO 00811600
|
||||
BEGIN 00811700
|
||||
READ(CODE[SECTOR], CODERECSIZE, PRT[BUFX]); 00811800
|
||||
DUMPSECTOR(SECTOR, PRT, BUFX); 00811900
|
||||
BUFX:=*+SECTORSIZE; 00812000
|
||||
SECTOR:= *+1; 00812100
|
||||
END WHILE; 00812200
|
||||
END DUMPPRT; 00812300
|
||||
00820000
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00820100
|
||||
PROCEDURE DUMPSEGDICT(DICTLOC, DICTSIZE, DICT, PRT); 00820200
|
||||
VALUE DICTLOC, DICTSIZE; 00820300
|
||||
INTEGER DICTLOC, DICTSIZE; 00820400
|
||||
ARRAY DICT, PRT[0]; 00820500
|
||||
BEGIN 00820600
|
||||
INTEGER 00820700
|
||||
BUFX, 00820800
|
||||
PRTX, 00820900
|
||||
SECTOR, 00821000
|
||||
SECTOREND, 00821050
|
||||
SEGSECTORS; 00821100
|
||||
REAL 00821200
|
||||
P, 00821300
|
||||
W; 00821400
|
||||
00821500
|
||||
WRITE(LINE, <"SEGMENT DICTIONARY:">); 00821600
|
||||
SECTOR:= DICTLOC; 00821700
|
||||
IF SIZE(DICT) < DICTSIZE THEN 00821800
|
||||
RESIZE(DICT, INCREMENTSOF(DICTSIZE, SECTORSIZE)); 00821900
|
||||
00822000
|
||||
WHILE BUFX < DICTSIZE DO 00822100
|
||||
BEGIN 00822200
|
||||
READ(CODE[SECTOR], CODERECSIZE, DICT[BUFX]); 00822300
|
||||
BUFX:= *+SECTORSIZE; 00822400
|
||||
END WHILE; 00822500
|
||||
00822600
|
||||
FOR BUFX:= 0 STEP 1 WHILE BUFX < DICTSIZE DO 00822700
|
||||
BEGIN 00822800
|
||||
W:= DICT[BUFX]; 00822900
|
||||
IF W IS 0 THEN 00823000
|
||||
WRITE(LINE, <K4,X2,"(ZERO)">, BUFX) 00823100
|
||||
ELSE 00823200
|
||||
BEGIN 00823300
|
||||
SECTOR:= W.[14:15]; 00823400
|
||||
SEGSECTORS:= UNITSOF(W.[29:15], SECTORSIZE); 00823500
|
||||
SECTOREND:= SECTOR+SEGSECTORS-1; 00823600
|
||||
PRTX:= W.[39:10]; 00823700
|
||||
WRITE(LINE, <K4,X2,K16," TYPE=",I1," INTR=",I1," PRT-LNK=",K3, 00823800
|
||||
" SIZE=",K5," ADDR=",K5>, 00823900
|
||||
BUFX, W, W.[46:1]+1, W.[45:1], PRTX, W.[29:15], SECTOR); 00824000
|
||||
00824100
|
||||
IF PRTX > 0 THEN 00824200
|
||||
BEGIN 00824300
|
||||
DO BEGIN 00824400
|
||||
P:= PRT[PRTX]; 00824500
|
||||
WRITE(LINE, <X6,"PRT ",K4," STOP=",I1," LINK=",K4, 00824600
|
||||
" SEG DICT=",K5," OFFSET=",K5>, 00824700
|
||||
PRTX, P.[41:1], P.[40:11], P.[29:15], P.[14:15]); 00824800
|
||||
PRTX:= P.[40:11]; 00824900
|
||||
END 00825000
|
||||
UNTIL BOOLEAN(P.[41:1]); % PRT STOPPER BIT 00825100
|
||||
END; 00825200
|
||||
00825300
|
||||
IF BOOLEAN(W.[45:1]) THEN 00825400
|
||||
WRITE(LINE) % AN INTRINSICS SEGMENT 00825500
|
||||
ELSE 00825600
|
||||
BEGIN 00825700
|
||||
WRITE(LINE); 00825800
|
||||
FOR SECTOR:= SECTOR STEP 1 WHILE SECTOR<=SECTOREND DO 00825900
|
||||
BEGIN 00826000
|
||||
READ(CODE[SECTOR], CODERECSIZE, A); 00826100
|
||||
DUMPSECTOR(SECTOR, A, 0); 00826200
|
||||
END FOR; 00826300
|
||||
END; 00826400
|
||||
END; 00826500
|
||||
END FOR; 00826600
|
||||
00826700
|
||||
WRITE(LINE); 00826800
|
||||
END DUMPSEGDICT; 00826900
|
||||
00840000
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00840100
|
||||
PROCEDURE DUMPFPB(FPBLOC, FPBSIZE, BUF); 00840200
|
||||
VALUE FPBLOC, FPBSIZE; 00840300
|
||||
INTEGER FPBLOC, FPBSIZE; 00840400
|
||||
ARRAY BUF[0]; 00840500
|
||||
BEGIN 00840600
|
||||
INTEGER 00840700
|
||||
BUFX, 00840800
|
||||
SECTOR; 00840900
|
||||
00841000
|
||||
WRITE(LINE, <"FPB:">); 00841100
|
||||
SECTOR:= FPBLOC; 00841200
|
||||
00841300
|
||||
WHILE BUFX < FPBSIZE DO 00841400
|
||||
BEGIN 00841500
|
||||
READ(CODE[SECTOR], CODERECSIZE, BUF); 00841600
|
||||
DUMPSECTOR(SECTOR, BUF, 0); 00841700
|
||||
BUFX:=*+SECTORSIZE; 00841800
|
||||
SECTOR:= *+1; 00841900
|
||||
END WHILE; 00842000
|
||||
END DUMPFPB; 00842100
|
||||
00900000
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00900100
|
||||
%% OUTER BLOCK 00900200
|
||||
00900300
|
||||
OPEN(CODE); 00900400
|
||||
CODERECSIZE:= CODE.MAXRECSIZE; 00900500
|
||||
REPLACE POINTER(A,8) BY " " FOR 132; 00900600
|
||||
REPLACE POINTER(A,8) BY "CODEDUMP55: ", CODE.LTITLE; 00900700
|
||||
REPLACE POINTER(A[17],8)-5 BY " ", 00900800
|
||||
(T7:= TIME(7)).[47:12] FOR 4 DIGITS, "-", 00900900
|
||||
T7.[35:6] FOR 2 DIGITS, "-", 00901000
|
||||
T7.[29:6] FOR 2 DIGITS, " ", 00901100
|
||||
T7.[23:6] FOR 2 DIGITS, ":", 00901200
|
||||
T7.[17:6] FOR 2 DIGITS; 00901300
|
||||
WRITE(LINE[SPACE 2], 132, A); 00901400
|
||||
00910000
|
||||
READ(CODE[0], CODERECSIZE, SEGZERO); 00910100
|
||||
00910200
|
||||
WRITE(LINE, <"SEGMENT DICTIONARY AT SECTOR ",I6," FOR ",I6,/, 00910300
|
||||
"PRT AT SECTOR ",I6," FOR ",I6,/, 00910400
|
||||
"FPB AT SECTOR ",I6," FOR ",I6,/, 00910500
|
||||
"STARTING SEGMENT NUMBER ",I6,/, 00910600
|
||||
"NUMBER OF FILES ",I6,/, 00910700
|
||||
"CORE ESTIMATE ",I6,/>, 00910800
|
||||
SEGZERO[0], SEGZERO[1], SEGZERO[2], SEGZERO[3], 00910900
|
||||
SEGZERO[4], SEGZERO[5], SEGZERO[6], 00911000
|
||||
SEGZERO[7].[14:15], SEGZERO[7].[29:15]*64); 00911100
|
||||
00911200
|
||||
SEGDICTSIZE:= SEGZERO[1]; 00911300
|
||||
PRTSIZE:= SEGZERO[3]; 00911400
|
||||
DUMPPRT(SEGZERO[2], PRTSIZE, PRT); 00911500
|
||||
DUMPFPB(SEGZERO[4], SEGZERO[5], A); 00911600
|
||||
DUMPSEGDICT(SEGZERO[0], SEGDICTSIZE, SEGDICT, PRT); 00911700
|
||||
00999800
|
||||
END. 00999900
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user