From ad9a584814b204eb325e306f0489922682d57f02 Mon Sep 17 00:00:00 2001 From: Paul Kimpel Date: Fri, 15 Nov 2013 05:33:58 +0000 Subject: [PATCH] Release emulator version 0.15: 1. Initial implementation of a datacom terminal. 2. Initial implementation (read-only) of magnetic tape drives. 3. Further work towards getting P2 to function (but not working yet). 4. Allow device driver classes to be optionally included in the global UI script. 5. Fix callback arguments handling in SetCallback. 6. Decrease width of SPO window slightly. 7. Improve trapping and printing of SPO keystrokes, based on datacom implementation. 8. Minor performance tuning improvements. 9. Dump raw header words in octal in tools/B5500DiskDirList.html script. 10. New wiki pages and several updates to existing ones. --- Mark-XVI/SYMBOL/DCMCP.esp_m | 249 ++++++++++++++++++++++++++++++++++++ 1 file changed, 249 insertions(+) diff --git a/Mark-XVI/SYMBOL/DCMCP.esp_m b/Mark-XVI/SYMBOL/DCMCP.esp_m index f5df544..1b07aa9 100644 --- a/Mark-XVI/SYMBOL/DCMCP.esp_m +++ b/Mark-XVI/SYMBOL/DCMCP.esp_m @@ -23561,3 +23561,252 @@ EOF: END COOLOFF;% 38376000 HEADER[4].[11:1]~1; END; 38411800 END; IF ACCESS = 4 THEN ACCESS := 2; 38411900 END;% 38412000 + END;% 38412100 + HEADER[4].[43:1]:=FPB[FNUM+3].[15:1]; 38412200 + IF (NOT REW) OR LOCK OR REL OR TIME THEN 38419000 + BEGIN 38420000 + FORMS~HEADER[3]; 38421000 + STREAM(PF~[FIB[4]],D~FPB[FNUM+2].[18:30],H~[HEADER[3]],S~[T]); 38422000 + BEGIN SI~PF;SI~SI+5;DS~3 OCT;SI~LOC D;DI~H;DS~8 OCT END; 38423000 + HEADER[3]~(P(DUP,LOD,SSN))&(P(DUP))[12:30:18]&T[2:38:10]; 38424000 + END; 38425000 + IF LOCK OR HEADER[4].[43:1] THEN 38426000 + BEGIN IF NOT HEADER[4] THEN%FILE IS BEING CREATED 38427000 + BEGIN 38428000 + IF KRUNCH THEN KRUNCHER(HEADER); 38429000 + HEADER[4].[9:3]:=5;% MARK AS NEW FORMAT,ACCESSED 38430000 + IF JAR[P1MIX,0] < 0 AND FIB[4].[29:1] THEN 38431000 +% COMPILER CLOSING CODE FILE WITH LOCK *********************************38432000 + BEGIN 38433000 + SEG0:=[M[TYPEDSPACE(62,SEGZEROAREAV)]]&30[SIZE];38434000 + SKEL ~ 31 INX SEG0; T3 ~ JAR[P1MIX,2].[FF]; 38435000 + % READ IN SEGMENT ZERO 38436000 + DISKWAIT(-SEG0.[CF],30,HEADER[10]]; 38437000 + % READ IN SKELETON SHEET 38438000 + DISKWAIT(-SKEL.[CF],30,T3); 38439000 + IF SKEL[20]<0 THEN SKEL[20] ~ SEG0[7].[FF]; 38440000 + IF JAR[P1MIX,2].[8:10]=1 THEN 38441000 + BEGIN % COMPILE AND GO **********************38442000 + SKEL[6]:=JAR[P1MIX,6]& 38442100 + (PRT[P1MIX,3].[8:10]+20)[CTF]; 38442200 + DISKWAIT(SKEL.[CF],30,T3); 38443000 + COMPGO ~ TRUE; 38444000 + END 38445000 + ELSE 38446000 + BEGIN % COMPILE TO LIBRARY ******************38447000 + FOR T1 ~ 15 STEP 1 UNTIL 22 DO 38448000 + SEG0[T1] ~ SKEL[T1]; 38449000 + IF (T2 ~ SKEL[13]) = 0 THEN GO TO L3; 38450000 + SKEL[13] ~ 0; % IN CASE I CALL TERMINATE 38451000 + DISKWAIT(SKEL.[CF],30,T3); 38452000 + IF(T1:=DISKADDRESS(MID,FID,FPB[FNUM+3],HEADER[7]:= % (SHM)38453000 + (*P(DUP))+1,HEADER,0))=0 THEN 38454000 + FILEMESS(-"DISK ","OVRFLOW",MID,FID,38455000 + R,D,C); 38456000 + SEG0[15] ~ T1 ~ HEADER[7]; 38457000 + L1: DISKWAIT(-SKEL.[CF],30,T2); 38458000 + FORGETESPDISK(T2); 38459000 + IF (T2~SKEL[29]) = 0 THEN GO TO L2; 38460000 + IF(T3:=DISKADDRESS(MID,FID,FPB[FNUM+3],HEADER[7]:= % (SHM)38461000 + (*P(DUP))+1,HEADER,0))=0 THEN 38462000 + FILEMESS(-"DISK ","OVRFLOW",MID,FID,38463000 + R,D,C); 38464000 + SKEL[29] ~ T3 ~ HEADER[7]; 38465000 + DISKWAIT(SKEL.[CF],30, 38466000 + I~HEADER[T1 DIV HEADER[8]+10] + 38467000 + T1 MOD HEADER[8]); 38468000 + T1 ~ T3; 38469000 + GO TO L1; 38470000 + L2: DISKWAIT(SKEL.[CF],30, 38471000 + I~HEADER[T1 DIV HEADER[8]+10] + 38472000 + T1 MOD HEADER[8]); 38473000 + L3: SEG9[6] ~ P(DUP,LOD,SSN); % "NEW FORMAT" 38474000 + HEADER[4].[10:1]~1;%MARK AS PROGRAM FILE 38475000 + DISKWAIT(SEG0.[CF],30,HEADER[10]); 38476000 + END COPY OF LABEL EQUATION CARDS; 38477000 + FORGETSPACE(SEG0); 38478000 + IF HEADER[7]20; % 1=PUD %175-38581910 + R:=M[FIB[14].[3:16]+6]; % PB REEL NO. %175-38581920 + GO TO ZERODKADDR; %175-38581930 + END; 38581940 + IF FIB[17]<0 THEN 38582000 + BEGIN M[ALPHA].[FF]~@60020; IF TYPE<20 THEN CKBKUP; 38583000 + M[ALPHA].[18:1]~0; CKBKUP END% 38584000 + ELSE IF FIB[17]20 THEN M[T+5].[3:1]:=0; 38607100 + R:=M[T+6]; 38607200 + $ SET OMIT = DATACOM AND RJE 38607299 + P(0); 38607300 + $ POP OMIT 38607301 + $ SET OMIT = NOT(DATACOM AND RJE ) 38607399 + M[T+6]:=P(XCH); 38607900 + M[T+5].[2:1]~0; 38607950 + DISKWAIT(T,30,M[T-1]); 38608000 + D:=R&1[TOREELNO]; 38608100 +AGAIN: P(DIRECTORYSEARCH(-(IF I THEN P(PUD) ELSE P(PBD)),D,14), 38608200 + DEL); 38608300 + IF D!R THEN 38608400 + BEGIN STREAM(ONE:=1, D:=[D]); 38608500 + BEGIN SI:=LOC ONE; DS:=8 ADD END; 38608600 + GO AGAIN; 38608700 + END; 38608800 + $ SET OMIT = NOT PACKETS 38608890 + IF (T1:=PSEUDOMIX[P1MIX])=0 THEN P(1) ELSE 38608900 + IF PACKETPAGE[T1-32]=0 THEN P(1) ELSE P(0); 38608910 + IF P OR 1 THEN %105-38608920 + BEGIN PBCOUNT:=PBCOUNT+1; 38609000 + $ POP OMIT 38609010