mirror of
https://github.com/pkimpel/retro-b5500.git
synced 2026-02-11 19:05:01 +00:00
Commit DCMCP transcription as of 2013-01-16.
This commit is contained in:
@@ -19517,3 +19517,105 @@ BOOLEAN PROCEDURE OLAY(LOC); % MADE SAVE IN INITIALIZE 22228000
|
||||
IF CHAR THEN% 22305000
|
||||
% SPECIAL CHECKS FOR ADDRESS SAVED IN CHARACTER MODE 22306000
|
||||
BEGIN CHAR:=(((T:=M[S-1].[CF]) } FRONT AND T < BACK) OR 22307000
|
||||
% M-REGISTER FROM ICW (SOURCE ADDRESS) 22308000
|
||||
((T:=M[S-2].[FF])} FRONT AND T < BACK)); 22309000
|
||||
% S-REGISTER FROM ILCW (DESTINATION ADDRESS) 22310000
|
||||
IF NOT CHAR THEN% 22311000
|
||||
BEGIN X ~ M[S ~ M[S].[FF]].[FF]+1;% 22312000
|
||||
% M[S].[FF] IS ADDRESS OF RCW, M[RCW].[FF] IS ADDRESS OF MSCW 22313000
|
||||
DO CHAR ~ ((T ~ M[S ~ S-1].[CF])}FRONT 22314000
|
||||
AND T < BACK) UNTIL (S { X) OR CHAR; 22315000
|
||||
% SEARCH THROUGH STREAM LOCALS AND PARAMETERS FOR ADDRESSES 22316000
|
||||
S ~ X;% 22317000
|
||||
END;% 22318000
|
||||
END;% 22319000
|
||||
IF CHAR THEN %TELL BREAKOUT ABOUT IT 22320000
|
||||
BEGIN P(AWAKEN,SSN); GO EXIT; 22320100
|
||||
END; 22320200
|
||||
% CANNOT OVERLAY IF MAY BE ADDRESSES IN CHAR MODE STACK 22321000
|
||||
IOD~M[MOM].[8:10]; 22322000
|
||||
IF (DISK:=MOM.[FF]) NEQ 0 THEN % OLAY ADDRESS PRESENT 22323000
|
||||
BEGIN 22323200
|
||||
$ SET OMIT = NOT(AUXMEM) 22323400
|
||||
MOM.[FF]:=0; 22324800
|
||||
END; 22325000
|
||||
IF DISK=0 THEN DISK:=DISKSPACE(IOD,MIX,NOAUX); 22325200
|
||||
IF DISK LSS 0 THEN % NO OLAY DISK 22325400
|
||||
BEGIN P(AWAKEN); GO EXIT; 22325410
|
||||
END; 22325430
|
||||
$ SET OMIT = NOT(STATISTICS) 22325600
|
||||
IF (S:=S-1) GTR MOM THEN IF MOM GTR BS THEN BS:=MOM-1; 22326400
|
||||
% IF MOTHER IS IN STACK, ONLY SEARCH ABOVE IT 22326600
|
||||
WHILE (STACK:=HUNT(BS).[CF]) LSS S DO 22326800
|
||||
BEGIN 22327000
|
||||
IF (DESC:=NFLAG(M[STACK])).[1:2]=1 THEN 22327200
|
||||
% ONLY WORRY ABOUT DATA DESCRIPTORS WHICH ARE PRESENT 22327400
|
||||
IF DESC.[FF]=MOM THEN 22327600
|
||||
% THIS ONE DEMANDS ACTION -- IT POINTS INTO OUR ARRAY 22327800
|
||||
IF DESC.[8:10]=0 THEN 22328000
|
||||
% NAME DESCRIPTOR -- PUT IN OFFSET AND RESET P-BIT 22328200
|
||||
M[STACK]:=FLAG((DESC.[CF]-FRONT)&MOM[CTF]) 22328400
|
||||
ELSE 22328600
|
||||
% NORMAL ROW DESCRIPTOR -- ZERO CORE FIELD AND RESET P-BIT 22328800
|
||||
M[STACK]:=FLAG(0&DESC[8:8:25]); 22329000
|
||||
BS:=STACK+1; 22329200
|
||||
END; 22329400
|
||||
IF M[MOM].[3:3] NEQ 7 % NOT READ ONLY ALREADY WRITTEN 22329600
|
||||
$ SET OMIT = NOT(BREAKOUT) 22329800
|
||||
THEN 22330400
|
||||
BEGIN 22330600
|
||||
$ SET OMIT = NOT(AUXMEM) 22330800
|
||||
RETRY: DISKIO(RSLT,FRONT-1,IOD&1[3:47:1],DATADDRESS(MIX,DISK)); 22331400
|
||||
% [3:1] IN SIZE MARKS I/O AS ORIGINATING FROM OLAY 22331600
|
||||
M[MOM]:=(*P(DUP))&0[2:47:1]&5[CTC]; 22331800
|
||||
P(AWAKEN,DEL); 22332000
|
||||
% CF=5 IN MOTHER IS INTERLOCK FOR MAKEPRESENT 22332200
|
||||
SNOOZE(0,[RSLT],IOMASK); 22332400
|
||||
IF RLST.[26:7] NEQ 0 THEN % I/O ERROR 22332600
|
||||
BEGIN 22332800
|
||||
$ SET OMIT = NOT(AUXMEM) 22333000
|
||||
IF (DISK:=DISKSPACE(IOD,MIX,-0)) LSS 0 THEN 22333800
|
||||
BEGIN % NO OLAY DISK 22334000
|
||||
M[MOM]:=(*P(DUP))&6[CTC]; % TERMINATE MARKER 22334200
|
||||
GO TO FOG; 22334400
|
||||
END; 22334600
|
||||
GO TO RETRY; % TRY AGAIN WITH ANOTHER ADDRESS 22334800
|
||||
END; % IF I/O ERROR 22335000
|
||||
M[MOM]:=(*P(DUP))&DISK[CTC]; % PUT DISK ADDRESS IN MOTHER 22335200
|
||||
END % IF READ ONLY, NOT YET WRITTEN 22335400
|
||||
ELSE 22335600
|
||||
BEGIN 22335800
|
||||
M[MOM]:=(*P(DUP))&0[2:47:1]&DISK[CTC]; 22336000
|
||||
P(AWAKEN,DEL); 22336200
|
||||
END; 22336400
|
||||
IF M[MOM].[3:3]=6 THEN M[MOM].[5:1]~1; 22339100
|
||||
FOG: FORGETSPACE(FRONT); 22350000
|
||||
P(TRUE); GO EXIT; 22351000
|
||||
CODE:% 22352000
|
||||
% OBJECT PROGRAM CODE TO BE OVERLAID 22353000
|
||||
IF (T ~ M[S].[CF])}FRONT AND T{BACK THEN% 22354000
|
||||
% CANNOT OVERLAY NORMAL STATE SEGMENT HE WILL RETURN TO 22355000
|
||||
BEGIN P(AWAKEN); GO EXIT; 22356000
|
||||
END; 22356020
|
||||
IF SOFTI>0 THEN 22356100
|
||||
IF JAR[MIX,2].[5:1] THEN % SOFTWARE INTERRUPTS 22356140
|
||||
IF (TSKA ~ PRT[MIX,TSX]).PBIT THEN 22356150
|
||||
IF (T ~ TSKA[8].[FF])!0 THEN 22356200
|
||||
IF (M~M[T].[CF])}FRONT AND T{BACK THEN 22356300
|
||||
BEGIN P(AWAKEN); GO EXIT; 22356400
|
||||
END; 22356420
|
||||
IF (MIXUP ~ (SEGDICT ~ PRT[MIX,4]).[FF])!0 THEN% 22357000
|
||||
% RE-ENTRANT CODE TO BE OVERLAID -- CHECK OTHER USERS, TOO 22358000
|
||||
BEGIN MIXUP ~ MIXUP.[39:6];% 22359000
|
||||
DO BEGIN% 22360000
|
||||
IF MIXUP=P2MIX THEN STOP;% 22361000
|
||||
% STOP OTHER USER OF THIS CODE IF RUNNING ON PROCESSOR 2 22362000
|
||||
IF (T ~ M[PRT[MIXUP,8]].[CF])}FRONT AND T{BACK% 22363000
|
||||
THEN BEGIN P(AWAKEN); GO EXIT; 22364000
|
||||
END; 22364100
|
||||
% SAME CRITERIA APPLY TO ALL USERS OF THIS CODE 22365000
|
||||
IF SOFTI>0 THEN 22365100
|
||||
IF JAR[MIXUP,2].[5:1] THEN % SOFTWARE INTERRUPTS 22365140
|
||||
IF (TSKA ~ PRT[MIXUP,@26]).PBIT THEN 22365150
|
||||
IF (T ~ TSKA[8].[FF])!0 THEN 22365200
|
||||
IF (T~M[T].[CF])}FRONT AND T{BACK THEN 22365300
|
||||
|
||||
Reference in New Issue
Block a user