mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-01-13 15:17:03 +00:00
2. Fix (we hope) the nasty problem that was causing Invalid Address out of COM5 after large compiles -- bug in MSCW/MSFF tracing in Processor.exitSubroutine(). 3. Implement ability to do a hardware load without initiating P1 in CentralControl (used by SyllableDebugger). 4. De-anonymize object prototype method functions in Processor as an aid when using JS debuggers. 5. Rework storeForInterrupt() and initiate() in Processor. 6. Replace bitmask "AND"s with power-of-two "MOD"s in many places in Processor. 7. Replace many bit(), fieldIsolate(), fieldInsert() calls with mod/div expressions in Processor. 8. Fix a problem existing normalization when an Integer Overflow occurs in Integer Store syllables. 9. Fix missing and superfluous break statements in Processor.run() switch statements. 10. Fix incorrect C-register restoration in Character Mode RCA syllable. 11. Correct test for continuity bit in Processor PRL syllable coding. 12. Correct missing "this." in Processor BRT syllable coding. 13. Change way that delayTime and Processor.procSlack is computed in Processor.run(). 14. Correct BCL translation bug and directory EOF detection in B5500ColdLoader. 15. Attempt to initialize SYSTEM/LOG in B5500ColdLoader (not working yet). 16. Implement new retro-B5500-Logo.png. 17. Implement Hardware Load button in SyllableDebugger. 18. Release tools/B5500DiskDirList.html utility. 19. Release tools/B5500DiskFileList.html utility with PBD file special formattring. 20. Restrict directory complement to EU0 in B5500ColdLoader.html. 21. Miscellaneous improvements to comments and cosmetics.
263 lines
24 KiB
Plaintext
263 lines
24 KiB
Plaintext
$ SET LINEINFO 00000100
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00001000
|
|
%% SRCE/MISC/B5500/INCL2OMIT %%00001100
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00001200
|
|
% CONVERTS $INCLUDE AND $OMIT PRAGMAS IN THE B5500 MARK XIII MCP 00001300
|
|
% SOURCE TO THE NEWER $OMIT SCHEME USED IN LATER RELEASES. READS THE 00001400
|
|
% MCP SOURCE FROM INTNAME "SOURCE" AND WRITES CHANGED LINES TO 00001500
|
|
% INTNAME "PATCH". 00001600
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00010000
|
|
% 2013-03-08 P.KIMPEL 00010010
|
|
% ORIGINAL VERSION. 00010020
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00099900
|
|
00100000
|
|
BEGIN 00100100
|
|
DEFINE 00100200
|
|
ALL1 = REAL(NOT FALSE) #; 00100300
|
|
00100400
|
|
INTEGER 00100500
|
|
LASTSEQNR, 00100600
|
|
LEFT, 00100700
|
|
OMITDEPTH, 00100750
|
|
OMITTYPE, 00100800
|
|
POPCOUNT, 00100900
|
|
POPSEQNR, 00101000
|
|
STOPSEQNR, 00101100
|
|
THISSEQNR, 00101200
|
|
TOKLEFT, 00101300
|
|
TOKLENGTH, 00101400
|
|
TOKOFFSET, 00101500
|
|
X; 00101600
|
|
00101700
|
|
POINTER 00101800
|
|
P; 00101900
|
|
00102000
|
|
ARRAY 00102100
|
|
POPLIST[0:15]; 00102200
|
|
00102300
|
|
EBCDIC ARRAY 00102400
|
|
PREC[0:89], 00102500
|
|
REC[0:89], 00102600
|
|
TOKEN[0:89]; 00102700
|
|
00102800
|
|
FILE 00102900
|
|
SOURCE(KIND=DISK, DEPENDENTSPECS, FILEUSE=IN, 00103000
|
|
TITLE="SRCE/MISC/B5500/MARKXIII/MCP."), 00103100
|
|
PATCH(KIND=DISK, MAXRECSIZE=15, BLOCKSIZE=420, FRAMESIZE=48, 00103200
|
|
AREAS=10, AREASIZE=1008, FLEXIBLE, FILEKIND=ESPOLSYMBOL, 00103300
|
|
TITLE="PATCH/MISC/B5500/MARKXIII/MCP/INCL2OMIT."); 00103350
|
|
00103400
|
|
TRUTHSET 00103500
|
|
NUMBERS ("0123456789"), 00103600
|
|
ALPHANUM (NUMBERS OR "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); 00103700
|
|
00300000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00300100
|
|
INTEGER PROCEDURE SCANNER; 00300200
|
|
BEGIN 00300300
|
|
INTEGER 00300400
|
|
LEFT; 00300500
|
|
POINTER 00300600
|
|
P; 00300700
|
|
00300800
|
|
SCAN P:REC[TOKOFFSET] FOR LEFT:TOKLEFT WHILE=" "; 00300900
|
|
IF LEFT = 0 THEN 00301000
|
|
BEGIN 00301100
|
|
TOKLENGTH:= TOKLEFT:= 0; 00301200
|
|
REPLACE TOKEN BY 48"00"; 00301300
|
|
END 00301400
|
|
ELSE 00301500
|
|
BEGIN 00301600
|
|
TOKOFFSET:= *+TOKLEFT-LEFT; 00301700
|
|
IF P IN NUMBERS THEN 00301800
|
|
REPLACE TOKEN[1] BY P FOR TOKLEFT:LEFT WHILE IN NUMBERS 00301900
|
|
ELSE IF P IN ALPHANUM THEN 00302000
|
|
REPLACE TOKEN[1] BY P FOR TOKLEFT:LEFT WHILE IN ALPHANUM 00302100
|
|
ELSE 00302200
|
|
BEGIN 00302300
|
|
REPLACE TOKEN[1] BY P FOR 1; 00302400
|
|
TOKLEFT:= LEFT-1; 00302500
|
|
END; 00302600
|
|
00302700
|
|
TOKLENGTH:= LEFT-TOKLEFT; 00302800
|
|
TOKOFFSET:= *+TOKLENGTH; 00302900
|
|
REPLACE TOKEN BY TOKLENGTH.[7:48] FOR 1; 00303000
|
|
END; 00303100
|
|
00303200
|
|
SCANNER:= TOKLENGTH; 00303300
|
|
END SCANNER; 00303400
|
|
00303500
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00303600
|
|
INTEGER PROCEDURE INSERTPOP(STOPSEQNR); 00303700
|
|
VALUE STOPSEQNR; 00303800
|
|
INTEGER STOPSEQNR; 00303900
|
|
BEGIN 00304000
|
|
INTEGER 00304100
|
|
X; 00304200
|
|
00304300
|
|
X:= POPLIST[0]; 00304400
|
|
IF X > 0 THEN 00304500
|
|
X:= MASKSEARCH(0, ALL1, POPLIST[X]); 00304600
|
|
00304700
|
|
IF X < 1 THEN 00304800
|
|
BEGIN 00304850
|
|
X:= POPLIST[0]:= *+1; 00304900
|
|
IF SIZE(POPLIST) <= X THEN 00305000
|
|
RESIZE(POPLIST, X+16, RETAIN); 00305100
|
|
END; 00305200
|
|
00305300
|
|
POPLIST[X]:= STOPSEQNR; 00305400
|
|
OMITDEPTH:= *+1; 00305450
|
|
INSERTPOP:= X; 00305500
|
|
END INSERTPOP; 00305600
|
|
00305700
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00305800
|
|
INTEGER PROCEDURE REMOVEPOP(STOPSEQNR); 00305900
|
|
VALUE STOPSEQNR; 00306000
|
|
INTEGER STOPSEQNR; 00306100
|
|
BEGIN 00306200
|
|
INTEGER 00306300
|
|
X; 00306400
|
|
00306500
|
|
X:= POPLIST[0]; 00306600
|
|
WHILE X > 0 DO 00306700
|
|
BEGIN 00306800
|
|
IF POPLIST[X] > STOPSEQNR THEN 00306900
|
|
X:= *-1 00307000
|
|
ELSE 00307100
|
|
BEGIN 00307200
|
|
REMOVEPOP:= POPLIST[X]; 00307300
|
|
POPLIST[X]:= 0; 00307400
|
|
IF POPLIST[0] = X THEN 00307500
|
|
POPLIST[0]:= *-1; 00307600
|
|
00307700
|
|
X:= 0; % KILL THE LOOP 00307800
|
|
IF OMITDEPTH > 0 THEN 00307820
|
|
OMITDEPTH:= *-1; 00307840
|
|
END; 00307900
|
|
END; 00308000
|
|
END REMOVEPOP; 00308100
|
|
00900000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00900100
|
|
%% OUTER BLOCK 00900200
|
|
00900300
|
|
REPLACE REC BY " " FOR 72, "0" FOR 8, " " FOR 10; 00900500
|
|
REPLACE REC BY "$# MARKXIII/MCP INCL2OMIT"; 00900600
|
|
WRITE(PATCH, 15, REC); 00900700
|
|
00900800
|
|
WHILE NOT READ(SOURCE, 15, REC) DO 00900900
|
|
BEGIN 00901000
|
|
TOKOFFSET:= 0; 00901100
|
|
TOKLEFT:= 72; 00901200
|
|
LASTSEQNR:= THISSEQNR; 00901300
|
|
THISSEQNR:= INTEGER(REC[72], 8); 00901400
|
|
IF THISSEQNR <= LASTSEQNR THEN 00901500
|
|
DISPLAY("SEQUENCE ERROR " !! STRING(LASTSEQNR,8) !! " : " !! 00901600
|
|
STRING(THISSEQNR,8)); 00901700
|
|
00901800
|
|
POPCOUNT:= 0; 00901900
|
|
POPSEQNR:= REMOVEPOP(THISSEQNR); 00901950
|
|
WHILE POPSEQNR > 0 DO 00902000
|
|
BEGIN 00902100
|
|
IF POPSEQNR >= THISSEQNR THEN 00902200
|
|
BEGIN 00902250
|
|
POPCOUNT:= *+1; 00902300
|
|
POPSEQNR:= REMOVEPOP(THISSEQNR); 00902320
|
|
END 00902340
|
|
ELSE 00902400
|
|
BEGIN 00902500
|
|
REPLACE PREC BY " " FOR 72, POPSEQNR FOR 8 DIGITS, " " FOR 10; 00902600
|
|
REPLACE P:PREC BY " $POP OMIT"; 00902700
|
|
LASTSEQNR:= POPSEQNR; 00902710
|
|
DO BEGIN 00902720
|
|
POPSEQNR:= REMOVEPOP(THISSEQNR); 00902730
|
|
IF POPSEQNR = LASTSEQNR THEN 00902740
|
|
REPLACE P:P BY " OMIT"; 00902750
|
|
END 00902760
|
|
UNTIL POPSEQNR ^= LASTSEQNR; 00902770
|
|
WRITE(PATCH, 15, PREC); 00902800
|
|
END; 00903000
|
|
END WHILE; 00903100
|
|
00903200
|
|
SCANNER; 00903300
|
|
IF TOKEN ^= 48"01""$" THEN 00903400
|
|
BEGIN 00903402
|
|
IF POPCOUNT > 0 THEN 00903405
|
|
BEGIN 00903410
|
|
REPLACE PREC BY " " FOR 72, THISSEQNR-1 FOR 8 DIGITS, " " FOR 10; 00903415
|
|
REPLACE P:PREC BY " $POP "; 00903420
|
|
WHILE POPCOUNT > 0 DO 00903425
|
|
BEGIN 00903430
|
|
REPLACE P:P BY "OMIT "; 00903435
|
|
POPCOUNT:= *-1; 00903440
|
|
END WHILE; 00903445
|
|
WRITE(PATCH, 15, PREC); 00903450
|
|
END; 00903455
|
|
END 00903456
|
|
ELSE 00903460
|
|
BEGIN 00903500
|
|
SCANNER; 00903600
|
|
OMITTYPE:= (IF TOKEN=48"07""INCLUDE" THEN 1 ELSE 00903700
|
|
IF TOKEN=48"04""OMIT" THEN 2 ELSE 0); 00903800
|
|
IF OMITTYPE > 0 THEN 00903900
|
|
BEGIN 00904000
|
|
SCANNER; 00904100
|
|
IF TOKEN[1] IN NUMBERS FOR TOKLENGTH THEN 00904200
|
|
BEGIN 00904300
|
|
STOPSEQNR:= INTEGER(TOKEN[1], TOKLENGTH); 00904400
|
|
SCANNER; 00904500
|
|
IF TOKEN = 48"01""," THEN 00904600
|
|
SCANNER; 00904700
|
|
00904800
|
|
IF TOKEN = 48"02""IF" THEN 00904900
|
|
BEGIN 00905000
|
|
REPLACE PREC BY " " FOR 90; 00905100
|
|
REPLACE P:PREC BY " $"; 00905200
|
|
IF POPCOUNT > 0 THEN 00905300
|
|
BEGIN 00905400
|
|
REPLACE P:P BY "POP "; 00905500
|
|
WHILE POPCOUNT > 0 DO 00905600
|
|
BEGIN 00905700
|
|
REPLACE P:P BY "OMIT "; 00905800
|
|
POPCOUNT:= *-1; 00905900
|
|
END WHILE; 00906000
|
|
END; 00906100
|
|
00906200
|
|
INSERTPOP(STOPSEQNR); 00906250
|
|
REPLACE P:P BY "SET OMIT="; 00906300
|
|
IF OMITTYPE = 1 THEN 00906400
|
|
REPLACE P:P BY "NOT"; 00906500
|
|
00906600
|
|
REPLACE P:P BY "("; 00906700
|
|
SCANNER; 00906800
|
|
DO BEGIN 00906900
|
|
REPLACE P:P BY TOKEN[1] FOR TOKLENGTH, " "; 00907000
|
|
SCANNER; 00907100
|
|
END 00907200
|
|
UNTIL TOKLENGTH = 0 OR TOKEN=48"01"";"; 00907300
|
|
IF TOKEN = 48"01"";" THEN 00907320
|
|
SCANNER; 00907340
|
|
00907360
|
|
REPLACE P:P-1 BY ") "; 00907400
|
|
IF OMITDEPTH > 1 THEN 00907420
|
|
REPLACE P:P BY "OR OMIT "; 00907440
|
|
00907450
|
|
WHILE TOKLENGTH > 0 DO 00907500
|
|
BEGIN 00907600
|
|
REPLACE P:P BY TOKEN[1] FOR TOKLENGTH, " "; 00907700
|
|
SCANNER; 00907800
|
|
END WHILE; 00907900
|
|
00908000
|
|
REPLACE PREC[72] BY THISSEQNR FOR 8 DIGITS; 00908100
|
|
WRITE(PATCH, 15, PREC); 00908200
|
|
END; 00908300
|
|
00908400
|
|
END; 00908500
|
|
END; 00908600
|
|
END; 00908700
|
|
END READ SOURCE; 00908800
|
|
00908900
|
|
CLOSE(PATCH, CRUNCH); 00909000
|
|
CLOSE(SOURCE); 00909100
|
|
00999800
|
|
END. 00999900
|