$ 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 % 2012-07-14 P.KIMPEL 00050020120714PK % CORRECT USE OF PARAMETER DEFINES. 00050021120714PK %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00099000 BEGIN 00100000 DEFINE 00100100 SECTORSIZE = 30 #, 00100200 UNITSOF(V,U) = (((V)+((U)-1)) DIV (U)) #, 00100300120714PK INCREMENTSOF(V,U) = (UNITSOF(V,U)*(U)) #; 00100400120714PK 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, , 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, , 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, ); 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