$CONTROL MAP,CODE,USLINIT                                               00010000
<<IOREM0 -- MODULE 25>>                                                 00012000
<< HP32002C MPE SOURCE C.00.00 >>                                       00014000
<< COPYRIGHT     "(C) COPYRIGHT HEWLETT-PACKARD CO. 1980.           >>  00016000
<<     THIS PROGRAM MAY BE USED WITH ONE COMPUTER SYSTEM AT A       >>  00018000
<<     TIME AND SHALL NOT OTHERWISE BE RECORDED, TRANSMITTED OR     >>  00020000
<<     STORED IN A RETRIEVAL SYSTEM.  COPYING OR OTHER REPRODUCTION >>  00022000
<<     OF THIS PROGRAM EXCEPT FOR ARCHIVAL PURPOSES IS PROHIBITED   >>  00024000
<<     WITHOUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.>>  00026000
<< **** Note - Dollar Copyright cannot be used with this module *** >>  00028000
                                                                        00030000
$CONTROL PRIVILEGED,UNCALLABLE                                          00032000
$THIRTY                                                                 00034000
$TITLE "IOREM0 - 'REMOTE' HP 2100 DRIVER FOR THE HP 3000"               00036000
BEGIN  << IOREM0 >>                                                     00038000
DEFINE                                                                  00040000
        DISABLE    =    ASSEMBLE(SED 0)#,                               00042000
        ENABLE     =    ASSEMBLE(SED 1)#,                               00044000
        DUPLICATE  =    TOS := S0#,                                     00046000
        IAK        =    ( 1: 1)#,                                       00048000
        ERRBIT     =    (12: 1)#,                                       00050000
        RSTATUS    =    ( 8: 8)#,      <<IOQP:  RETURN STATUS       >>  00052000
        STATUS     =    IOQP(QSTAT).(8:8)#,                             00054000
        PFAILB     =    (11:1)#,                                        00056000
        SBUF       =    IOQP(QFLAG).(3:1)#,                             00058000
        STOPDEFS   =    <<>>#;         <<STOPPER FOR DEFINES        >>  00060000
EQUATE                                                                  00062000
        MSTRCLEAR  =    %100000,       <<PROGRAMMED MASTER RESET    >>  00064000
        CLEAR      =    %040000,       <<RESET INTS,ENABLE INTS     >>  00066000
        NULL       =          0,       <<ZERO,NOTHING,EMPTY, ETC    >>  00068000
        QFUNC      =          6,       <<IOQ:  FUNCTION CODE        >>  00070000
        QMISC      =         3,       <<IOQ: DRIVER STATE FLAGS    >>   00072000
        QPAR1      =          8,       <<IOQ: PARAMETER #1          >>  00074000
        QPAR2      =          9,       <<IOQ: PARAMETER #2          >>  00076000
        QWBCT      =          7,       <<IOQ:  WORD/BYTE COUNT      >>  00078000
        QSTAT      =          10,      <<IOQ: STATUS>>                  00080000
        QFLAG      =           0,      <<IOQ: FLAGS>>                   00082000
        SIOJMP     =    %000000,       <<SIO JUMP COMMAND ORDER     >>  00084000
        SIORES     =    %010000,       <<SIO RETURN RESIDUE COMMAND >>  00086000
        SIOEND     =    %030000,       <<SIO END ORDER              >>  00088000
        SIOENDINT  =    %034000,       <<SIO END AND INTERRUPT ORDER>>  00090000
        SIOCNTRL   =    %040000,       <<SIO CONTROL COMMAND ORDER  >>  00092000
        SIOWRITE   =    %060000,       <<SIO WRITE COMMAND ORDER    >>  00094000
        SIOREAD    =    %070000,       <<SIO READ COMMAND ORDER     >>  00096000
        SIOCMWRT   =    %170000-SIOWRITE,                               00098000
        SIOCMRD    =    %170000-SIOREAD,                                00100000
        SETBANK    =    %014000,        <<SIO SET BANK INSTRUCTION>>    00102000
        COMPLETION =     3,                                             00104000
        WRITE      =     1,                                             00106000
        READ       =     0,                                             00108000
        OPEN       =     2,                                             00110000
        CLOSE      =     3,                                             00112000
        DEVCLOSE   =     4,                                             00114000
        CONTROL    =     28,                                            00116000
        DITSIZE    =          11,       <<DEVICE INFO. TABLE SIZE    >> 00118000
        SIOSIZE    =         20,       <<SIO PROGRAM AREA SIZE>>        00120000
        SIOSIZED2  =   SIOSIZE/2,<<SIO PGM SIZE/2 FOR INITIAL>><<01300>>00122000
        COUNT      =          8,       <<DIT:  CURRENT WORD COUNT   >>  00124000
        DSTAT      =          6,        <<DIT: DEV STATUS>>             00126000
        EROR       =          10,       <<DIT:  ERROR RETRY INFO     >> 00128000
        COND       =          9,       <<UNUSUAL CONDITION FLAG     >>  00130000
        ERROR      =       %400,       <<WORD COUNT MISMATCH-SEND/REC>> 00132000
        ABORTED    =        %33,       <<I/O ABORTED RETURN STATUS  >>  00134000
        BADCNTRL   =        %03,       <<INVALLID CONTROL FUNCTION  >>  00136000
        BADLGTH    =        %03,       <<BAD REQST LGTH>>  <<00.01>>    00138000
        PENDING    =        %10,       <<I/O INNITIATED STATUS      >>  00140000
        PFABORT    =        %63,                                        00142000
        BADBUF     =        %104,                                       00144000
        SIOFAIL    =        %45,       <<BAD RTN FRM STARTIO INTR >>    00146000
        SUCCESSFUL =          1,       <<I/O SUCCESSFULLY COMPLETED >>  00148000
        XFERERR    =        %15,       <<TRANSFER ERROR             >>  00150000
        ENDIO      =          5,       <<END OF I/O REQUEST         >>  00152000
        WCOMP      =        %13,       <<CALL COMPLETOR AFTER INT   >>  00154000
        TLOG       =          7,       <<IOQP-TRANSMISSION LOG      >>  00156000
        READCW     =    %000042,       <<READ READY C.W.            >>  00158000
        WRITECW    =    %000102,       <<WRITE READY C.W.           >>  00160000
        NRDYCW     =    %001002,       <<INTS. ON ONLY              >>  00162000
        RESIDUE    =         11,       <<SIO AREA:  INDEX TO RESIDUE>>  00164000
        SETDEVSTAT =        %10,       <<SET STATUS TO DEVICE STATUS>>  00166000
        SYSDB      =     %1000,                                         00168000
        STOPEQTS   =     000000;       <<STOPPER FOR EQUATES        >>  00170000
                                                                        00172000
$PAGE "IOREM0-DATA AREA-IOQH,DIT,SIO AREA"                              00174000
BYTE ARRAY CONFIG(0:7)=DB:=                                             00176000
      DITSIZE,                                                          00178000
      1,                                                                00180000
      0,                                                                00182000
      0,                                                                00184000
      0,                                                                00186000
      0,                                                                00188000
      SIOSIZED2,0;                                             <<01300>>00190000
<<------------------------------- DIT ------------------------------>>  00192000
ARRAY DITAB(1:DITSIZE)=DB:=                                             00194000
        0,0,0,0,0,0,0,0,0,0,0;                                          00196000
                                                                        00198000
<<----------------------------- SIO PROGRAM STORAGE ---------------->>  00200000
                                                                        00202000
ARRAY  SIOA(1:SIOSIZE)=DB:=                                             00204000
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;                                        00206000
$PAGE "IOREM0-EXTERNAL DECLARATIONS"                                    00208000
<<---------------------- EXTERNAL PROCEDURE DECLARATIONS ----------->>  00210000
                                                                        00212000
                                                                        00214000
PROCEDURE GIP;                                                          00216000
  OPTION EXTERNAL;                                                      00218000
                                                                        00220000
PROCEDURE HELP;                                                         00222000
  OPTION EXTERNAL;                                                      00224000
                                                                        00226000
LOGICAL PROCEDURE IOMESSAGE(DEST,CATN,P1,P2,P3,P4,DITP,BUF,CONT);       00228000
  VALUE DEST,CATN,P1,P2,P3,P4,DITP,BUF,CONT;                            00230000
  POINTER DITP;                                                         00232000
  INTEGER DEST,CATN,P1,P2,P3,P4,BUF,CONT;                               00234000
  OPTION VARIABLE,EXTERNAL;                                             00236000
                                                                        00238000
PROCEDURE SIODM(DITP,FLAGS);                                            00240000
  VALUE DITP,FLAGS;                                                     00242000
  LOGICAL FLAGS;                                                        00244000
  POINTER DITP;                                                         00246000
  OPTION EXTERNAL;                                                      00248000
                                                                        00250000
                                                                        00252000
PROCEDURE MASTERCLEAR(DITP);                                            00254000
  ARRAY DITP;                                                           00256000
  OPTION EXTERNAL;                                                      00258000
                                                                        00260000
                                                                        00262000
                                                                        00264000
PROCEDURE CHECKINDEX(INDEX,TABLE);                                      00266000
  VALUE INDEX,TABLE;                                                    00268000
  INTEGER INDEX;                                                        00270000
  INTEGER POINTER TABLE;                                                00272000
  OPTION EXTERNAL;                                                      00274000
                                                                        00276000
                                                                        00278000
                                                                        00280000
PROCEDURE STARTIO(DITP,SIOP,QFLAG);                                     00282000
   VALUE DITP,SIOP,QFLAG;                                               00284000
   POINTER DITP,SIOP;                                                   00286000
   LOGICAL QFLAG;                                                       00288000
   OPTION EXTERNAL;                                                     00290000
                                                                        00292000
                                                                        00294000
                                                                        00296000
PROCEDURE IOFAILURE(DRTN,DITP);                                         00298000
   VALUE DRTN;                                                          00300000
   INTEGER DRTN;                                                        00302000
   ARRAY DITP;                                                          00304000
   OPTION EXTERNAL;                                                     00306000
                                                                        00308000
                                                                        00310000
PROCEDURE INITZ(IDITP);                                                 00312000
   INTEGER ARRAY IDITP;                                                 00314000
   BEGIN                                                                00316000
<<  DUMMY    >>                                                         00318000
   END;                                                                 00320000
$PAGE "IOREM0-ENTRY:RESET INT,CHK FOR ABORT,DETERMINE ENTRY TYPE"       00322000
                                                                        00324000
<<-------------------------- DRIVER CODE PROCEDURE ----------------->>  00326000
                                                                        00328000
INTEGER PROCEDURE REMDVR(IOQP,DITP,BANK,BUFADR,SIOP,DRTN);              00330000
  VALUE IOQP,DITP,BANK,BUFADR,SIOP,DRTN;                                00332000
  INTEGER BANK,DRTN,BUFADR;                                             00334000
  INTEGER POINTER IOQP,DITP,SIOP;                                       00336000
                                                                        00338000
                                                                        00340000
  BEGIN                                                                 00342000
                                                                        00344000
    LOGICAL SIOCW;                                                      00346000
    INTEGER RDYCW,MSTATE=REMDVR,                                        00348000
       S0=S-0,                                                          00350000
       S1=S-1,                                                          00352000
       S2=S-2,                                                          00354000
       S3=S-3,                                                          00356000
       S4=S-4,                                                          00358000
       S5=S-5,                                                          00360000
       X=X,                                                             00362000
       FUNC,                                                            00364000
       P1,                                                              00366000
       P2;                                                              00368000
    DOUBLE POINTER DSIOP=SIOP;                                          00370000
    DEFINE SIOPBASE=@SIOP+SYSDB#;                                       00372000
                                                                        00374000
SUBROUTINE SETFLAGS;                                                    00376000
  BEGIN                                                                 00378000
    FUNC:=IOQP(QFUNC);     <<GET FUNCTION CODE>>                        00380000
    P1:=IOQP(QPAR1);       <<GET PARAMETER 1>>                          00382000
    P2:=IOQP(QPAR2);       <<GET PARAMETER 2>>                          00384000
    <<  DETERMINE WORD COUNT     >>                                     00386000
    TOS:=IOQP(QWBCT);                                                   00388000
    IF < THEN                                                           00390000
    BEGIN     <<BYTES CONVERT TO  WORDS>>                               00392000
      TOS:=-TOS&ASR(1);  <<ROUND DOWN >>                                00394000
    END;                                                                00396000
    IF S0 >4096 THEN GO INVALIDLENGTH;                                  00398000
    DITP(COUNT):=TOS;                                                   00400000
    IF SBUF=1 THEN                                                      00402000
    BEGIN     <<BUFFERING NOT ALLOWED>>                                 00404000
      TOS:=BADBUF;                                                      00406000
      GO IODONE;                                                        00408000
    END;                                                                00410000
  END;  <<SETFLAGS>>                                                    00412000
                                                                        00414000
                                                                        00416000
<<  I  N  I  T  I  A  T  O  R    >>                                     00418000
     DISABLE;     <<DISABLE INTERRUPTS>>                                00420000
     TOS:=IOQP;                                                         00422000
     DEL;                                                               00424000
     IF < THEN                                                          00426000
     BEGIN     <<I/O HAS BEEN ABORTED>>                                 00428000
       ENABLE;                                                          00430000
       IF MSTATE = COMPLETION THEN                                      00432000
       MASTERCLEAR(DITP);                                               00434000
       IF IOQP.PFAILB =1 THEN TOS:=PFABORT ELSE TOS:=ABORTED;           00436000
       GO TO IODONE;                                                    00438000
     END;                                                               00440000
     ENABLE;                                                            00442000
     IF MSTATE = COMPLETION THEN GO COMP;                               00444000
     TOS:=DRTN;     <<ENABLE DEV STATUS,CLEAR INTERRUPTS>>              00446000
     TOS:=CLEAR;                                                        00448000
     ASSEMBLE (CIO 1; DEL);                                             00450000
     IF <> THEN                                                         00452000
     BEGIN                                                              00454000
UFAIL:                                                                  00456000
       IOFAILURE(DRTN,DITP);   <<NON RESPONDING DEVICE>>                00458000
      TOS:=%54;                                                         00460000
      TOS:=ENDIO;                                                       00462000
FAIL:                                                                   00464000
      MASTERCLEAR(DITP);                                                00466000
      GO TO OUT;                                                        00468000
    END;                                                                00470000
    SETFLAGS;                                                           00472000
    IF P1.(0:1)=1 THEN HELP;                                            00474000
   IF FUNC=CONTROL THEN                                                 00476000
    BEGIN                              << THIS IS A CONTROL REQ.    >>  00478000
     GO CONTRL;                                                         00480000
    END; DEL;                                                           00482000
   IF FUNC = WRITE THEN                                                 00484000
    BEGIN                              << WRITE REQUEST             >>  00486000
     TOS := SIOCMWRT;                                                   00488000
     TOS := WRITECW;                                                    00490000
    END                                                                 00492000
   ELSE                                                                 00494000
    BEGIN                              << READ REQUEST              >>  00496000
     TOS := SIOCMRD;                                                    00498000
     TOS := READCW;                                                     00500000
    END;                                                                00502000
   RDYCW := TOS;                                                        00504000
   SIOCW := TOS;                                                        00506000
                                                                        00508000
   TOS := DITP(COUNT);                                                  00510000
   IF = THEN GO INVALIDLENGTH;         << LEAVE WORD COUNT ON TOS   >>  00512000
<< SET UP SIO PROGRAM                                               >>  00514000
   TOS := SIOCNTRL;                    << TURN ON RDY BIT           >>  00516000
   TOS := RDYCW;                                                        00518000
   TOS:=TOS LOR LOGICAL(DITP(COND));   <<SET UNUSUAL CONDITION      >>  00520000
   ASSEMBLE(DDUP);                     <<DUPLICATE CONTROL ORDER>>      00522000
   DSIOP(0):=TOS;                                                       00524000
   IF RDYCW = READCW                   <<READ OPERATION>>               00526000
    THEN                               <<CONSTRUCT SPECIAL READ ORDERS>>00528000
     BEGIN                                                              00530000
      TOS:=LOGICAL(-1)-LOGICAL(SIOCW); <<READ ORDER, 1 WORD>>           00532000
      TOS:=SIOPBASE+8;                 <<ADDR OF 2ND READ ORDER>>       00534000
      DSIOP(X:=X+1):=TOS;                                               00536000
      TOS:=SIOENDINT;                  <<END WITH INTERRUPT>>           00538000
      TOS:=0;                          <<SPACE FOR STATUS>>             00540000
      DSIOP(X:=X+1):=TOS;                                               00542000
      DSIOP(X:=X+1):=TOS;              <<REPEAT CONTROL ORDER>>         00544000
     END                                                                00546000
    ELSE                               <<WRITE OPERATION>>              00548000
     BEGIN                                                              00550000
      DDEL;                            <<DELETE EXTRA CONTROL ORDER>>   00552000
      TOS:=SETBANK;                                                     00554000
      TOS:=BANK;                                                        00556000
      DSIOP(X:=X+1):=TOS;                                               00558000
      TOS:=SIOJMP;                     <<JUMP TO WRITE ORDER  >>        00560000
      TOS:=SIOPBASE+8;                 <<JUMP ADDRESS>>                 00562000
      DSIOP(X:=X+1):=TOS;                                               00564000
      X:=X+1;                                                           00566000
     END;                                                               00568000
   TOS := -TOS;  TOS := LOGICAL(TOS) - LOGICAL(SIOCW);                  00570000
   TOS :=BUFADR;                                                        00572000
   DSIOP(X:=X+1):=TOS;                                                  00574000
   TOS := SIORES;                      << RETURN RESIDUE            >>  00576000
   TOS := 0;                                                            00578000
   DSIOP(X:=X+1) := TOS;                                                00580000
   TOS := SIOCNTRL;                    << TURN OFF RDY BIT          >>  00582000
   TOS := NRDYCW;                                                       00584000
   DSIOP(X:=X+1) := TOS;                                                00586000
   TOS := SIOEND;                      <<SIO END--NO INTERRUPT      >>  00588000
   TOS := 0;                                                            00590000
   DSIOP(X:=X+1) := TOS;                                                00592000
<< START SIO PROGRAM                                                >>  00594000
DOIO:                                                                   00596000
   STARTIO(DITP,SIOP,1);                                                00598000
   IF <> THEN GO BADSIO;                                                00600000
   TOS := PENDING;                                                      00602000
   TOS := WCOMP;                                                        00604000
   GO OUT;                                                              00606000
                                                                        00608000
$PAGE "IOREM0-CONTROL REQUEST"                                          00610000
<< CONTROL REQUEST                                                  >>  00612000
CONTRL:                                                                 00614000
   IF IOQP(QPAR1) =1                   <<DYNAMIC STATUS REQST?>>        00616000
    THEN                                                                00618000
     BEGIN                                                              00620000
      TOS:=DRTN;                                                        00622000
      TOS:=SETDEVSTAT;                                                  00624000
      ASSEMBLE(CIO 1);                 <<ENABLE DEVICE STATUS>>         00626000
      ASSEMBLE(TIO 0);                 <<READ DEVICE STATUS>>           00628000
      DITP(DSTAT):=TOS;  <<RETURN STATUS>>                              00630000
      DEL;                                                              00632000
      TOS:=1;                          <<ONE WORD READ>>                00634000
      GO CNTLDONE;                                                      00636000
     END;                                                               00638000
   IF IOQP(QPAR1) =%200 THEN                                            00640000
    DITP(COND):=IOQP(QPAR1);                                            00642000
   TOS:=0;                             <<NO ACTION ON OTHER REQUESTS >> 00644000
   GO CNTLDONE;                                                         00646000
$PAGE "IOREM0-COMPLETION SECT: CHK STATUS & RETURN IOQP"                00648000
COMP:                                                                   00650000
   TOS:=DRTN;                                                           00652000
   ASSEMBLE(TIO 0);                    <<READ INTERRUPT STATUS>>        00654000
   ASSEMBLE(DELB);                                                      00656000
   IF TOS.(13:1) THEN                  <<INITIAL READ INTERRUPT>>       00658000
    BEGIN                                                               00660000
     TOS:=SIOP(8);                     <<GET 2100 WORD COUNT>>          00662000
     DUPLICATE;                                                         00664000
     IF TOS=0 THEN GO UCOUNT;          <<INVALID COUNT >>               00666000
     DUPLICATE;                                                         00668000
     IF TOS = DITP(COUNT)              <<SEND/RECEIVE COUNTS MATCH>>    00670000
      THEN GO RESTRT                                                    00672000
      ELSE                                                              00674000
       BEGIN                                                            00676000
        DUPLICATE;                                                      00678000
        IF TOS > DITP(X)                                                00680000
         THEN                                                           00682000
UCOUNT:                                                                 00684000
          BEGIN                                                         00686000
           DEL;                        <<IGNORE 2100 WORD CNT>>         00688000
           TOS:=DITP(COUNT);           <<USE 3000 WORD COUNT>>          00690000
           SIOP(13):=LOGICAL(SIOP(13)) LOR ERROR;  <<2100 ERROR>>       00692000
          END;                                                          00694000
       END;                                                             00696000
RESTRT:                                                                 00698000
     TOS:=SETBANK;                                                      00700000
     TOS:=BANK;                                                         00702000
     DSIOP(0):=TOS;                                                     00704000
     TOS:=SIOJMP;                                                       00706000
     TOS:=SIOPBASE+6;                                                   00708000
     DSIOP(1):=TOS;                                                     00710000
     SIOP(8):=(-TOS).(4:12) LOR SIOREAD; <<SIO READ - MIN COUNT>>       00712000
     TOS:=DRTN;                                                         00714000
     TOS:=CLEAR;                       <<CLEAR ALL INTERRUPTS>>         00716000
     ASSEMBLE(CIO 1);                                                   00718000
     DEL;                                                               00720000
     STARTIO(DITP,SIOP,1);     <<START SIO OPERATION>>                  00722000
     IF <> THEN GO BADSIO;                                              00724000
     TOS:=PENDING;                                                      00726000
     TOS:=WCOMP;                                                        00728000
     GO OUT;                                                            00730000
    END;                                                                00732000
   TOS := DRTN;                                                         00734000
   TOS := MSTRCLEAR;                                                    00736000
   ASSEMBLE(CIO 1);                                                     00738000
   TOS := CLEAR;                                                        00740000
   ASSEMBLE(CIO 1);                                                     00742000
   DEL;                                                                 00744000
<< DETERMINE NUMBER OF WORDS TRANSFERRED                            >>  00746000
   TOS := SIOP(RESIDUE);                                                00748000
   TOS:=TOS LAND %7777;                <<ISOLATE RESIDUE COUNT >>       00750000
   IF <> THEN TOS:=TOS LOR %170000;    <<RESIDUE NOW 0 OR NEG  >>       00752000
   TOS := -(LOGICAL(SIOP(8).(4:12)) LOR %170000);  << + SIO CNT >>      00754000
   TOS:=TOS+TOS;                       <<SIO WD CNT - RESIDUE  >>       00756000
   IF IOQP(QWBCT) < 0 THEN                                              00758000
     BEGIN                             <<CONVERT TO BYTES           >>  00760000
      TOS := -TOS & ASL(1);             <<00.01>>                       00762000
     END;                                                               00764000
   TOS := DRTN;                                                         00766000
   TOS := SETDEVSTAT;                                                   00768000
   ASSEMBLE(CIO 1);                                                     00770000
   ASSEMBLE(TIO 0);                                                     00772000
   TOS.ERRBIT := 1;                                                     00774000
   ASSEMBLE(DDEL);                                                      00776000
   IF <> THEN                                                           00778000
    BEGIN                                                               00780000
     TOS:=TOS-1;                       <<RESIDUE 1 OFF ON DEVICE END>>  00782000
     GO TRANSERR;                                                       00784000
    END                                                                 00786000
    ELSE GO WELLDONE;                                                   00788000
INVALIDCNTRL:                                                           00790000
   TOS := BADCNTRL;                                                     00792000
   GO IODONE;                                                           00794000
INVALIDLENGTH:                                                          00796000
   IOQP(TLOG):=0;                                                       00798000
   TOS:= BADLGTH;                                                       00800000
   GO IODONE;                                                           00802000
TRANSERR:                                                               00804000
   IOQP(TLOG):=TOS;                                                     00806000
   TOS := XFERERR;                                                      00808000
   GO IODONE;                                                           00810000
BADSIO:                                                                 00812000
   TOS := SIOFAIL;                                                      00814000
   GO IODONE;                                                           00816000
TRYAGAIN:                                                               00818000
   TOS := DRTN;                                                         00820000
   TOS := MSTRCLEAR;                                                    00822000
   ASSEMBLE(CIO 1;DEL);                                                 00824000
   GO DOIO;                                                             00826000
$PAGE "IOREM0-EXITS:  GOOD,BAD, AND INDIFFERENT"                        00828000
WELLDONE:                                                               00830000
   DITP(COND):=0;                      <<RESET CONDITION FLAG>>         00832000
CNTLDONE:                                                               00834000
   IOQP(TLOG) := TOS;                                                   00836000
   TOS := SUCCESSFUL;                                                   00838000
IODONE:                                                                 00840000
   TOS := ENDIO;                                                        00842000
   TOS := DRTN;                                                         00844000
   TOS := MSTRCLEAR;                                                    00846000
   ASSEMBLE(CIO 1);                                                     00848000
   TOS := CLEAR;                                                        00850000
   ASSEMBLE(CIO 1);                                                     00852000
   TOS := NRDYCW;                                                       00854000
   ASSEMBLE(CIO 1);                                                     00856000
   DEL;                                                                 00858000
OUT:                                                                    00860000
   MSTATE:=TOS;                                                         00862000
   STATUS:=TOS;                                                         00864000
END  <<REMDVR >>  ;                                                     00866000
$PAGE "IOREM0-'DUMMY' OUTER BLOCK GIVES CONFIGURATION DATA"             00868000
ASSEMBLE(                                                               00870000
 PCAL SIODM;          <<MONITOR>>                                       00872000
 PCAL REMDVR;         <<INITIATOR>>                                     00874000
 PCAL REMDVR;         <<COMPLETOR>>                                     00876000
 CON 0;               <<NO IO PROCESS>>                                 00878000
 PCAL INITZ;          <<INITIALIZATION>>                                00880000
CON 1;                <<I INTERRUPT HANDLER>>                           00882000
PCAL GIP);            <<INTERRUPT HANDLER>>                             00884000
END  <<IOREM0  >> ;.............................................        00886000
