|
|
DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 10392 (0x2898)
Types: TextFile
Names: »SOPP.S«
└─⟦ffe699cee⟧ Bits:30005101 8" CR80 Floppy CR80FD_0060 ( VOL: SCC.V NSC Directories: EVR.D OCP.D SCCINIT.D )
└─⟦9c1658a4c⟧
└─⟦this⟧ »OCP.D!SOPP.S«
MAINMODULE SOPP;
LABEL TERM;
LABEL OUT1;
LABEL OUT2;
CONST
ESO_CMD = #0000;
ESO_0_ERR = #0001;
ESO_1_RER = #0002;
ESO_1_RSE = #0003;
ESO_1_WER = #0004;
ESO_1_WSE = #0005;
ESO_2_ER0 = #0006;
ESO_2_ER1 = #0007;
ESO_ID = #0008;
ESO_2_RER = #0009;
ESO_2_RSE = #000A;
ESO_SUB3 = #000B;
ESO_SUB4 = #000C;
ESO_2_WER = #000D;
ESO_2_WSE = #000E;
ESO_3_RER = #000F;
ESO_3_RSE = #0010;
ESO_SUB5 = #0011;
ESO_SUB6 = #0012;
ESO_SUB7 = #0013;
ESO_SUB8 = #0014;
ESO_SUB9 = #0015;
ESO_3_WER = #0016;
ESO_3_WSE = #0017;
ESO_4_ERR = #0018;
ESO_4_RER = #0019;
ESO_4_RSE = #001A;
ESO_4_WER = #001B;
ESO_4_WSE = #001C;
ESO_INSMTCB = #001D;
ESO_INSQE = #001E;
MDST = 0;
CCOK = 0;
CCEE = 1;
%NOLIST
%SOURCE @**GENS.D*SWELLPREFIX.D*GENERALPARAMS.S
%SOURCE @**GENS.D*SWELLPREFIX.D*MONITORNAMES.S
%SOURCE @**GENS.D*SWELLPREFIX.D*IOSPARAMS.S
%SOURCE @**SCCNAMES.D*QACCESS_TYPES.S
%SOURCE @**SCCNAMES.D*SCC_MON.N
%SOURCE @**SCCNAMES.D*SCCNAME.N
%SOURCE @**SCCNAMES.D*SCCDATA.N
%SOURCE @**SCCNAMES.D*SCCHEAD.N
%SOURCE @**SCCNAMES.D*SCCREC.N
%SOURCE @**NSCNAMES.D*NSC.N
%SOURCE @**SCCNAMES.D*SCCMTCB.N
IMPORT PROCEDURE INSERT_MTCB (R0;R4;R6);
IMPORT PROCEDURE INSERT_QE (R0;R1;R2;R6);
%LIST
VAR
MSG : ARRAY[0..4] OF INTEGER;
EPM : ARRAY[0..11] OF INTEGER;
STD_OP_CMD : STD_OP_C_PMX;
FST_STATUS : STAW;
HD_BUF : FST_HD;
TR_CBUF : TRUNK_CONN;
TR_SBUF : ARRAY[0..39] OF INTEGER;
M_BUF : M_ST;
DTG_AREA : ARRAY[0..12] OF INTEGER;
MTCBX : INTEGER;
CMD : INTEGER;
MEVENT : INTEGER;
M_BLOCK : REAL;
TO_NODE : INTEGER;
CONST
FST_WOP = (IF_RES + SWRITE + SWAIT + FST);
FST_ROP = (IF_REL + SREAD + SWAIT + FST);
FNC_OP = (SREAD + FNC);
BEGIN
MON(WAITEVENT, ADDRESS(MSG)=>R1, BMMESSAGE=>R2, R7);
R2 => MEVENT;
R1@INTEGER => R0 => R2;
R0 EXTRACT 8;
IF R0 <> MDST THEN
BEGIN
ESO_CMD => R0;
GOTO TERM;
END;
R2 SHIFTRL 8;
ADDRESS(STD_OP_CMD) => R4;
TYCE => R1=> R4@STD_OP_C_PMX.HEAD.MTY;
CSU => R1 => R4@STD_OP_C_PMX.HEAD.SCA;
ADDRESS(FST_STATUS) => R5;
CASE R2 OF
0: BEGIN
SUDP => R1 => R4@STD_OP_C_PMX.HEAD.MCC;
SWITCH MON(SCCM, GET_NM_IDB, R0, MSG[1]=>R3, R7):ERROR_DONE TO
ERR : BEGIN
ESO_0_ERR => R0;
GOTO TERM;
END;
END; "SWITCH
R3 => R4@STD_OP_C_PMX.N_M_ID;
MSG[2] => R1 => R4@STD_OP_C_PMX.DUSER;
END;
1: BEGIN
SUSR => R1 => R4@STD_OP_C_PMX.HEAD.MCC;
MSG[1] => R1 => R4@STD_OP_C_PMX.PAR;
HEADFST => R1 => R5@STAW.U.REC_D;
SIZE(HD_BUF) => R1 => R5@STAW.U.BUFZ_D;
ADDRESS(HD_BUF) => R1 => R5@STAW.U.BUFA_D;
SWITCH MON(STA, FST_ROP, R4, R5, R7):ERR_SEM_OK TO
ERRS : BEGIN
ESO_1_RER => R0;
GOTO TERM;
END;
SEM : BEGIN
ESO_1_RSE => R0;
GOTO TERM;
END;
END; "SWITCH
ADDRESS(HD_BUF.NET_STR) => R6;
MSG[1] => R1 => R6@NET_ST.RETR_RATE;
SWITCH MON(STA, FST_WOP, R4, R5, R7):ERR_SEM_OK TO
ERRS : BEGIN
ESO_1_WER => R0;
GOTO TERM;
END;
SEM : BEGIN
ESO_1_WSE => R0;
GOTO TERM;
END;
END; "SWITCH
END;
2,3,4: BEGIN
R2 => CMD;
CASE R2 OF
2 : SUST => R1;
3 : SUCT => R1;
4 : SUOT => R1;
END;
R1 => R4@STD_OP_C_PMX.HEAD.MCC;
MSG[1] => R3 SHIFTRL 8;
SWITCH MON(SCCM, GET_NM_IDB, R0, R3, R7):ERROR_DONE TO
ERR : BEGIN
ESO_2_ER0 => R0;
GOTO TERM;
END;
END; "SWITCH
R3 => R4@STD_OP_C_PMX.N_M_ID;
ENTFNC => R1 => R5@STAW.U.REC_D;
R3 => R5@STAW.U.ENT_D;
SIZE(TR_CBUF) => R1=> R5@STAW.U.BUFZ_D;
ADDRESS(TR_CBUF) =>R1 => R5@STAW.U.BUFA_D;
MON(STA,FNC_OP, R4, R5, R7):ERR_SEM_OK;
MSG[1] => R3 EXTRACT 8;
SWITCH MON(SCCM, GET_NM_IDB, R0, R3, R7):ERROR_DONE TO
ERR : BEGIN
ESO_2_ER1 => R0;
GOTO TERM;
END;
END; "SWITCH
R3 => TO_NODE;
0 => R2;
REPEAT
R1@INTEGER => R0;
IF R0[15] THEN BEGIN
R0 => R6 EXTRACT 4;
IF R6 = R3 THEN BEGIN
IF R0[11] THEN
BEGIN
R0 SHIFTRL 8 EXTRACT 3;
IF R0 = MSG[2] THEN
GOTO OUT1
ELSE GOTO OUT2;
END
ELSE GOTO OUT1;
END;
END;
R1 + 1;
UNTIL R2 + 1 = 8;
OUT2 :
ESO_ID => R2;
GOTO TERM;
OUT1:
R2 => R4@STD_OP_C_PMX.HEAD.MCC;
IF CMD => R2 = 2 THEN
MSG[3] => R1 => R4@STD_OP_C_PMX.PAR;
ENTFST_TRUNK => R1 => R5@STAW.U.REC_D;
R3 => R5@STAW.U.ENT_D;
SIZE(TR_SBUF) => R1 => R5@STAW.U.BUFZ_D;
ADDRESS(TR_SBUF) => R1 => R5@STAW.U.BUFA_D;
SWITCH MON(STA, FST_ROP, R4, R5, R7):ERR_SEM_OK TO
ERRS : BEGIN
ESO_2_RER => R0;
GOTO TERM;
END;
SEM : BEGIN
ESO_2_RSE => R0;
GOTO TERM;
END;
END; "SWITCH
5 => R0;
R2@LONG * R0;
R2 + R1;
IF CMD => R1 = 2 THEN
BEGIN
R2 + 4;
MSG[3] => R1;
END;
IF R1 = 3 THEN BEGIN
R2@INTEGER => R0;
IF R0 <> RSON LOGOR R0 <> RSOP THEN
BEGIN
ESO_SUB3 => R3;
GOTO TERM;
END
ELSE IF R0 = RSON THEN
RSNC => R1
ELSE RSPC => R1;
END
ELSE BEGIN
IF R0 <> RSCL THEN
BEGIN
ESO_SUB4 => R0;
GOTO TERM;
END;
RSCO => R1;
END;
R1 => R2@INTEGER;
SWITCH MON(STA, FST_WOP, R4, R5, R7):ERR_SEM_OK TO
ERRS : BEGIN
ESO_2_WER => R0;
GOTO TERM;
END;
SEM : BEGIN
ESO_2_WSE => R0;
GOTO TERM;
END;
END; "SWITCH
END; "2,3,4
5,6,7,8,9 : BEGIN
CASE R2 OF
5 : SUCL => R1;
6 : SUOL => R1;
7 : SUAS => R1;
8 : SUSA => R1;
9 : SUSO => R1;
END; "CASE
R1 => R4@STD_OP_C_PMX.HEAD.MCC;
HEADFST => R1 => R5@STAW.U.REC_D;
SIZE(HD_BUF) => R1 => R5@STAW.U.BUFZ_D;
ADDRESS(HD_BUF) => R1 => R5@STAW.U.BUFA_D;
SWITCH MON(STA, FST_ROP, R4, R5, R7):ERR_SEM_OK TO
ERRS : BEGIN
ESO_3_RER => R0;
GOTO TERM;
END;
SEM : BEGIN
ESO_3_RSE => R0;
GOTO TERM;
END;
END; "SWITCH
CASE R2 OF
5 : BEGIN
(R1 + 1)@INTEGER => R0;
IF R0 <> LSOP THEN
BEGIN
ESO_SUB5 => R0;
GOTO TERM;
END;
LSOC => R3 => R1@INTEGER;
END;
6 : BEGIN
(R1 + 1)@INTEGER => R0;
IF R0 <> LSCL THEN
BEGIN
ESO_SUB6 => R0;
GOTO TERM;
END;
LSCO => R3 => R1@INTEGER;
END;
7 : BEGIN
R1@INTEGER => R0;
IF R0 <> STAC THEN
BEGIN
ESO_SUB7 => R0;
GOTO TERM;
END;
END;
8 : BEGIN
R1@INTEGER => R0;
IF R0 <> STST THEN
BEGIN
ESO_SUB8 => R0;
GOTO TERM;
END;
STSA => R3 => R1@INTEGER;
END;
9 : BEGIN
R1@INTEGER => R0;
IF R0 <> STST THEN
BEGIN
ESO_SUB9 => R0;
GOTO TERM;
END;
STSO => R3 => R1@INTEGER;
END;
END; "CASE
SWITCH MON(STA, FST_WOP, R4, R5, R7):ERR_SEM_OK TO
ERRS : BEGIN
ESO_3_WER => R0;
GOTO TERM;
END;
SEM : BEGIN
ESO_3_WSE => R0;
GOTO TERM;
END;
END; "SWITCH
END; "5,6,7,8,9
10 : BEGIN
SURD => R1 => R4@STD_OP_C_PMX.HEAD.MCC;
SWITCH MON(SCCM, GET_NM_IDB, R0, MSG[1]=>R3, R7):ERROR_DONE TO
ERR : BEGIN
ESO_4_ERR => R0;
GOTO TERM;
END;
END; "SWITCH
R3 => R4@STD_OP_C_PMX.N_M_ID;
ENTFST_MEDE => R1 => R5@STAW.U.REC_D;
R3 => R5@STAW.U.ENT_D;
SIZE(M_BUF) => R1 => R5@STAW.U.BUFZ_D;
ADDRESS(M_BUF) => R1 => R5@STAW.U.BUFA_D;
SWITCH MON(STA, FST_ROP, R4, R5, R7):ERR_SEM_OK TO
ERRS : BEGIN
ESO_4_RER => R0;
GOTO TERM;
END;
SEM : BEGIN
ESO_4_RSE => R0;
GOTO TERM;
END;
END; "SWITCH
R1 => R6;
DSRO => R1 => R6@M_ST.DIRQ_ST;
SWITCH MON(STA, FST_WOP, R4, R5, R7):ERR_SEM_OK TO
ERRS : BEGIN
ESO_4_WER => R0;
GOTO TERM;
END;
SEM : BEGIN
ESO_4_WSE => R0;
GOTO TERM;
END;
END; "SWITCH
END;
END; "CASE
MON(GETDTG, ADDRESS(DTG_AREA)=>R5, R7);
DTG_AREA[11] => R1 => R4@STD_OP_C_PMX.LOG_DTG.LEAST;
DTG_AREA[12] => R1 => R4@STD_OP_C_PMX.LOG_DTG.MOST;
"CREATE EVENT PSUDO MTCB AND INSERT IT INTO 'EV' QUEUE
SWITCH INSERT_MTCB(R0, R4, R6) :ERROR_DONE TO
0 : BEGIN
ESO_INSMTCB => R0;
GOTO TERM;
END;
END; "SWITCH
R0 => R2;
SWITCH INSERT_QE(34=>R0, 0=>R1, R2, R6) :ERROR_DONE TO
0 : BEGIN
ESO_INSQE => R0;
GOTO TERM;
END;
END; "SWITCH
0 => R0;
TERM :
IF R0 = 0 THEN
CCOK => R2 => MSG[1]
ELSE CCEE =>R2 => MSG[1];
MON(SENDANSWER, ADDRESS(MSG)=>R1, MEVENT=>R2, R7);
MON(TERMINATE, R0 , R1, R7);
END;
ENDMODULE C