1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-01-13 15:17:03 +00:00
Paul Kimpel d6f2e498d6 1. Finalize and release emulator version 0.05.
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.
2013-05-27 04:08:34 +00:00

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