DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Hard and Floppy Disks

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Hard and Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦34d929010⟧ TextFile

    Length: 10392 (0x2898)
    Types: TextFile
    Names: »SOPP.S«

Derivation

└─⟦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« 

TextFile

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