From d6f2e498d6a014b0a3ef17ab5cd4535e72b7616b Mon Sep 17 00:00:00 2001 From: Paul Kimpel Date: Mon, 27 May 2013 04:08:34 +0000 Subject: [PATCH] 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. --- SYMBOL/DCMCP.esp_m | 166 ++++++++++++++++++++++++++++++++++++++++++ tools/INCL2OMIT.alg_m | 2 + 2 files changed, 168 insertions(+) diff --git a/SYMBOL/DCMCP.esp_m b/SYMBOL/DCMCP.esp_m index a62baa8..f5feb91 100644 --- a/SYMBOL/DCMCP.esp_m +++ b/SYMBOL/DCMCP.esp_m @@ -22886,3 +22886,169 @@ BEGIN REAL RCW=+0,MSCW=-2; 38001000 FPB[FNUM ]:=MFID:=FID; %126-38013030 FPB[FNUM+1]:=FID :=USERCODE[P1MIX]; %126-38013040 END; %126-38013050 + IF NFLAG(FIX[14]~FLAG(FILEHEADER(MFID 38013100 + $ SET OMIT = NOT SHAREDISK 38013199 + ,FID&FIB[5][1:45:1],FIB[8].[20:5] 38013300 + ,FIB[8].[25:23],BLEN,RLEN,STATE)))<6 THEN 38013400 + BEGIN P(DEL); 38013500 + TOG:= 1; 38013510 + $ SET OMIT = NOT SHAREDISK 38013519 + GO TO EXIT; 38013600 + END; 38013700 + IF FIB[8].[20:28]!0 THEN FPB[FNUM+2].[18:30]~DATE ELSE 38013900 + BEGIN% OLD FILE,VERIFY LABEL EQUATION DATE IF ANY 38014000 + HEADER := FIB[14];% 38014100 + STREAM(H:=HEADER[3].[30:18],B:=[T2]); 38014200 + BEGIN SI:=LOC H; DS:=8 DEC; END;% 38014300 + AGN: IF CDATE NEQ 0 AND CDATE NEQ HEADER[3].[30:18] THEN38014400 + BEGIN% WRITE DATE CHECK MESSAGE 38014500 + DOLITTLE(FALSE, 38014600 + VWY&VOF[36:42:6]&VOK[30:42:6], 38014610 + "#DAT CK"," =00000"&T2[18:18:30],MFID); 38014620 + IF TERMSET(P1MIX) THEN 38014700 + BEGIN 38014800 + FORGETSPACE(DIRECTORYSEARCH(MFID,FID, 38014900 + $ SET OMIT = NOT SHAREDISK 38014949 + FIB[5].[13:3]+10)); 38015000 + GO TO INITIATE; 38015100 + END;% 38015200 + IF P(NT6,DUP)=VOK OR P(XCH)=VOF THEN CDATE~0; 38015400 + GO AGN 38015500 + END;% VERIFICATION 38015600 + FPB[FNUM+2].[18:30]:=T2;% BCL DATE 38015700 + END OLD FILES;% 38015800 + STARTIMING(FNUM,18);% 38015900 + FPB:=PRT[P1MIX,3]; % STARTIMING MOVES THE FPB 38015950 + END;% 38016000 + HEADER~FIB[14];% 38020000 + KIND~4; U~18;% 38021000 + MODE~0;% 38022000 + IF NOT COBOL THEN UNLABELED~1;% 38023000 + CNTCTL~BLEN{1023;% 38024000 + $ SET OMIT = NOT SHAREDISK 38024004 + IF COBOL>0 AND (FIB[13].[22:1] OR TYPE=10 OR TYPE=26) THEN 38024100 + BEGIN COBOL:=3; %IF COBOL-IO OR COBOL-RANDOM 38024200 + BLEN := BLEN + RLEN; % THEN CHANGE BUFFSIZE TO 38024300 + END; % BUFFSIZE + RECSIZE 38024400 + GETBUFFERS((IF CNTCTL THEN BLEN% 38025000 + ELSE ((BLEN+29) DIV 30)|30)+1,% 38026000 + NBUFS,U,ALPHA);% 38027000 + IF COBOL = 3 THEN %IF COBOL-IO OR COBOL-RANDOM 38027100 + BEGIN COBOL := 1; % THEN CHANGE BUFFSIZE TO 38027200 + BLEN := BLEN - RLEN; % BUFFSIZE - RECSIZE 38027300 + END; % (SEE ABOVE 38027400 + FIB[16]~M[ALPHA]&CNTCTL[23:47:1]&10[24:47:1]% 38028000 + &((BLEN+29) DIV 30)[27:42:6]% 38029000 + &(IF CNTCTL THEN BLEN ELSE 1023)[8:38:10]% 38030000 + &TINU[18][3:3:5] OR M OR IOMASK;% 38031000 + FIB[16].[2:1]:=(HEADER.[31:2] AND (IO+1))!0; 38032000 + FIB[5].[1:1]:= NOT FIB[16].[2:1]; 38033000 + IF FIB[5].[1:1] THEN 38034000 + FOR MASK:=10 STEP 1 UNTIL 29 DO HEADER[MASK]:=0; 38035000 + FIB[19]~(IF DIREC THEN BLEN-RLEN+1 ELSE 1) 38036000 + INX FIB[16]&0[27:27:6]; 38037000 + IF STATE.[46:2]!0 THEN FIB[19].[8:10]~RLEN;% 38038000 + FS[P1MIX,(T2:=(FNUM DIV ETRLNG)).[40:4]]~(*P(DUP)) OR 38039000 + (TWO(0&T2[43:44:4])|((NOT HEADER).[31:2])); 38040000 + T2~IF COBOL THEN 0 ELSE FIB[19].[33:15]-FIB[16].[33:15]; 38041000 + FIB[10].[3:15]:=M[ALPHA]-2; %HEAD OF BUFFER RING 38041100 + FOR MASK~0 STEP 1 UNTIL NBUFS-1 DO% 38042000 + M[ALPHA+MASK]~(P(DUP,LOD)+T2)% 38043000 + &P(FLAG(FIB[19-ABS(3|COBOL)]),XCH)[CTC]; 38044000 + FIB[16]:=FIB[16] OR M; 38045000 + FIB[5].[45:1]~0; 38045100 + IF P([FIB[14]],LOD).[FF]=2 THEN FIB[5].[11:2]~1;%INPUT ONLY.38045105 + IF HEADER[4].[10:1] AND NOT IO THEN 38045110 + FILEMESS(-"CODE ","FILE ",MFID,FID,0,0,0); 38045120 + $ SET OMIT = NOT(PACKETS) 38045149 + IF PSEUDOMIX[P1MIX]!0 THEN 38045150 + IF NOT FIB[5].[41:1] THEN 38045155 + FILEMESSAGE((IF IO THEN " IN " ELSE "OUT") 38045160 + &TINU[U][6:30:18], IF ACCESS=0 THEN " SER " 38045200 + ELSE IF ACCESS=1 THEN IF TYPE=26 THEN " PRO " 38045300 + ELSE " RDM " ELSE " UPD ", 38045310 + MFID,FID,0,0,0,64); 38045400 + $ POP OMIT 38045501 + END DISKSETUP;% 38046000 + P(RCW,MSCW,STF); 38047000 + RCW:=RCW&P(XCH)[CTC]; 38048000 + DISKSETUP; 38049000 + IF COBOL<0 THEN % ADJUST UPPER BOUND FOR COBOL 68 38049200 + BEGIN MASK ~ (IF IO AND NOT FIB[13].[22:1] 38049300 + THEN HEADER[7] 38049400 + ELSE (((HEADER[9] | HEADER[1]) DIV 38049500 + HEADER[0].[42:6]) | HEADER[0].[30:12]) - 1);38049600 + IF FIB[3]=0 OR FIB[3]>MASK THEN FIB[3]~MASK; %LESSOR OF 2 EVILS38049700 + END; 38049800 + IF P(TYPE,DUP)=10 OR P(XCH)=26 THEN 38050000 + BEGIN 38051000 + IF COBOL<1 THEN % ALGOL OR COBOL 68 38052000 + FOR MASK ~ 0 STEP 1 UNTIL NBUFS-1 DO 38053000 + IF COBOL THEN M[M[ALPHA+MASK] INX NOT 2] ~ NOT 0 38053500 + ELSE M[ALPHA+MASK]~P(DUP,LOD)&1[27:47:1]; 38054000 + FIB[6]~FIB[7]~0;% 38055000 + FIB[17]~IF IO THEN 0 ELSE BLEN;% 38056000 + END ELSE 38057000 + BEGIN 38058000 + T2~(MFID~FIB[16).[33:15];% 38059000 + FIV7~FIB[7]; 38060000 + IF COBOL THEN% 38061000 + BEGIN IF COBOL>0 THEN 38062000 + IF NOT (FIB7=0 OR FIB[13].[22:1]) THEN 38062500 + BEGIN FIB7 ~ FIB7 - 1; 38063000 + OPTIONAL ~ NBUFS - 1; 38063500 + END ELSE OPTIONAL ~ NBUFS - 2 38064000 + ELSE BEGIN % COBOL 68 38064200 + OPTIONAL ~ NBUFS - 1; 38064400 + IF DIREC THEN FIB7 ~ FIB[7] ~ FIB[3]; 38064600 + END; 38065000 + FID~FIB[16];% 38066000 + MASK~0;% 38067000 + END ELSE% 38068000 + BEGIN OPTIONAL~NBUFS-1;% 38069000 + MASK~(FID~FIB[19]).[33:15]-T2;% 38070000 + END;% 38071000 + IF (STATE.[46:2]!0 AND NOT COBOL) OR IO THEN 38072000 + IF M[ALPHA].]2:1] THEN 38073000 + FOR T1~0 STEP 1 UNTIL OPTIONAL DO% 38074000 + BEGIN IF (M[T2]:= 38074500 + DISKADDRESS(FPB[FNUM], FPB[FNUM+1], FPB[FNUM+3], 38075000 + FORMS:=((HEADER[0].[30:12]|T1)&DIREC[1:47:1])+FIB7,38075500 + HEADER, IO&(NOT HEADER[4])[46:47:1])) > 1 THEN 38076000 + BEGIN 38076500 + IF (USERCODE[P1MIX] EQV MCP)!NOT 0 THEN 38077000 + IF P(M[MFID],DUP).[3:6]=0 AND 38077500 + P(XCH) 0 THEN 00903405 BEGIN 00903410 REPLACE PREC BY " " FOR 72, THISSEQNR-1 FOR 8 DIGITS, " " FOR 10; 00903415 @@ -191,6 +192,7 @@ WHILE NOT READ(SOURCE, 15, REC) DO 00900900 END WHILE; 00903445 WRITE(PATCH, 15, PREC); 00903450 END; 00903455 + END 00903456 ELSE 00903460 BEGIN 00903500 SCANNER; 00903600