$CONTROL MAP,CODE,USLINIT                                               00010000
<<IOPTRD0 - MODULE 13>>                                                 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
<<PAPER TAPE READER DRIVER>>                                            00030000
$TITLE "PTRDR0 - DRIVER FOR  PAPER TAPE READER"                         00032000
$CONTROL PRIVILEGED,UNCALLABLE                                          00034000
$THIRTY                                                                 00036000
                                                                        00038000
                                                                        00040000
<<*******************************************************               00042000
                                                                        00044000
                                                                        00046000
*******************************************************>>               00048000
                                                                        00050000
DRIVER REQUEST CODES:                                                   00052000
                                                                        00054000
     0 - READ                                                           00056000
         P1.(13:3)     EOF SPECIFICATION                                00058000
                                                                        00060000
         P2 (0:8)      SPECIAL READ TERMINATION CHARACTER               00062000
            (10:3)  - 0 ASCII                                  <<00.05>>00064000
                    - 1 BINARY                                          00066000
                                                                        00068000
     2 - OPEN FILE                                                      00070000
                                                                        00072000
     3 - CLOSE FILE                                                     00074000
                                                                        00076000
     4 - CLOSE DEVICE                                                   00078000
                                                                        00080000
                                                                        00082000
BEGIN  << IOPTRDR0 >>                                                   00084000
DEFINE                                                                  00086000
        DISABLE    =    ASSEMBLE(SED 0)#,                               00088000
        DRT        =    (8:8)#,                                <<01300>>00090000
        ENABLE     =    ASSEMBLE(SED 1)#,                               00092000
        F          =    ABSOLUTE#,                                      00094000
        IAK        =    (8:1)#,                                         00096000
        RIORDY     =    ( 1: 1)#,                                       00098000
        EOFBT      =    ( 8: 1)#,  <<LPDT>>                             00100000
        TAPERDY    =    ( 9: 1)#,                                       00102000
        EOFABE     =    ( 7: 3)#,                                       00104000
        EOFAB      =    ( 7: 2)#,                                       00106000
        EOFB       =    ( 8: 1)#,                                       00108000
        EBT        =    ( 9: 1)#,                                       00110000
        STATUS     =    IOQP(QSTAT).(8:8)#,                             00112000
        PFAILB     =    (11:1)#,                                        00114000
        QMISP      =    IOQP(QMISC)#,                                   00116000
        STOPDEFS   =    <<>>#;         <<STOPPER FOR DEFINES        >>  00118000
EQUATE                                                                  00120000
        MSTRCLEAR  =    %100000,       <<PROGRAMMED MASTER RESET    >>  00122000
        CLEAR      =    %040000,       <<RESET INTS               >>    00124000
        RESET      =    %040002,       <<RESET INTS,ENABLE INTS>>       00126000
        INITCHR    =    %002023,       <<START NEXT CHARACTER>>         00128000
        INTON      =          2,       <<ENABLE U.I. CARD INTERRUPTS>>  00130000
        DSTAT      =          6, <<DIT:  CONTROLLER STATUS>>   <<01334>>00132000
        DSERR      =          7, <<DIT:HARDWARE STATUS INDEX>> <<01334>>00134000
        DLOGERROR  =         18, <<DIT: ERROR LOG STATUS>>     <<01334>>00136000
        PFABORT    =          %63,                                      00138000
        ICNTRL     =         %7,     <<INDEX IN ILT OF DRT>>   <<01300>>00140000
        QFLAG      =          0,       <<IOQ:  REQUEST FLAGS        >>  00142000
        QDSTN      =          4,       <<IOQ:  INT ACK. BIT IN BIT 1>>  00144000
        QFUNC      =          6,       <<IOQ:  FUNCTION CODE        >>  00146000
        QLDEV      =          2,       <<IOQ: LOGICAL DEVICE>>          00148000
        QMISC      =          3,       <<IOQ: DRIVER STATE FLAGS    >>  00150000
        QSTAT      =          10,      <<IOQ: DEV STATUS>>              00152000
        QPAR1      =          8,       <<IOQ: PARAMETER #1          >>  00154000
        QPAR2      =          9,       <<IOQ: PARAMETER #2          >>  00156000
        QWBCT      =          7,       <<IOQ:  WORD/BYTE COUNT      >>  00158000
        SYSB    =3,                                                     00160000
        DISCPI  =%25,                                                   00162000
        DIT0        =  0,                                               00164000
        MSK         =  8,                                               00166000
        MXNULL      =  9,                                      <<00.06>>00168000
        NULLCNT     =  10,                                              00170000
        TERMCHR     =  11,                                              00172000
        COUNT       =  12,                                              00174000
        ODDBYTEF    =  13,                                              00176000
        ADDR        =  14,                                              00178000
        BANKA       =  15,                                              00180000
        CNT         =  16,                                              00182000
        FLG         =  17,                                              00184000
        DEOF        =  6,    <<EOF DETECTED AND AUX BUFFER>>            00186000
        OKF     =0,                                                     00188000
        TRBLF   =1,                                                     00190000
        EOTF    =2,                                                     00192000
        DELF       =          3,                                        00194000
        WAITF      =          4,                                        00196000
        TOF         =         5,                                        00198000
        HDWEOF      =         2,       <<HARDWARE EOF>>                 00200000
        CR         =        %15,                                        00202000
        LF         =        %12,                                        00204000
        XC         =       %030,       <<CONTROL X>>                    00206000
        HC         =       %010,       <<CONTROL H>>                    00208000
        RO         =       %177,       <<RUBOUT>>                       00210000
        XOFF       =       %23,                                         00212000
        QC         =       %21,                                         00214000
        YC         =       %31,                                         00216000
        R0         =       %177,                                        00218000
        DITSIZE    =         20,       <<DEVICE INFO. TABLE SIZE    >>  00220000
        SIOSIZE    =        128,       <<SIO PROGRAM AREA SIZE>>        00222000
        SIOSIZED2  =      SIOSIZE/2,<<SIO PGM SIZE/2 FOR INIT>><<01300>>00224000
        ABORTED    =        %33,       <<I/O ABORTED RETURN STATUS  >>  00226000
        BADCNTRL   =        %04,       <<INVALLID CONTROL FUNCTION  >>  00228000
        NOTRDYWT   =        %030,       <<NOT READY WAIT STATUS      >> 00230000
        PENDING    =        %10,       <<I/O INNITIATED STATUS      >>  00232000
        SIOFAIL    =        %45,       <<BAD RTN FRM STARTSIOP INTR >>  00234000
        SUCCESSFUL =          1,       <<I/O SUCCESSFULLY COMPLETED >>  00236000
        UNITFAIL   =        %54,       <<UNIT FAILURE RETURN STATUS >>  00238000
        XFERERR    =        %14,       <<TRANSFER ERROR             >>  00240000
        CALLINIT   =          2,       <<CALLINNITIATOR FOR RETRY   >>  00242000
        ENDIO      =          5,       <<END OF I/O REQUEST         >>  00244000
        WNEW       =        7,       <<RE-INITIATE AFTER INTERRUPT>>    00246000
       COMPLETION =         3,        <<COMPLETION>>                    00248000
        WCOMP      =        %13,       <<CALL COMPLETOR AFTER INT   >>  00250000
        WEND       =        %15,       <<END I/O AFTER NEXT INT     >>  00252000
        TLOG       =          1,       <<IOCB-TRANSMISSION LOG      >>  00254000
        UNPACKED   =    %000042,       <<SET UNPACKED MODE, INTS ON >>  00256000
        NRDYCW     =    %001002,       <<INTS. ON ONLY              >>  00258000
        RESIDUE    =          5,       <<SIO AREA:  INDEX TO RESIDUE>>  00260000
        SETDEVSTAT =        %10,       <<SET STATUS TO DEVICE STATUS>>  00262000
        STOPEQTS   =     000000;       <<STOPPER FOR EQUATES        >>  00264000
$PAGE "PTRDR0-DATA AREA-IOQH,DIT,SIO AREA"                              00266000
BYTE ARRAY CONFIG(0:7)=DB :=                                            00268000
       DITSIZE,                                                         00270000
       1,                                                               00272000
       0,                                                               00274000
       0,                                                               00276000
       0,0,                                                             00278000
       SIOSIZED2,0;                                            <<01300>>00280000
<<------------------------------- DIT ------------------------------>>  00282000
ARRAY  DITA(1:DITSIZE) = DB :=                                 <<01334>>00284000
        0,    <<DFLAG>>                                        <<01334>>00286000
        0,    <<DLINK>>                                        <<01334>>00288000
        0,    <<DIOQP>>                                        <<01334>>00290000
        0,    <<DLDEV>>                                        <<01334>>00292000
        0,    <<DLTP>>                                         <<01334>>00294000
        0,    <<DILTP>>                                        <<01334>>00296000
        0,    <<DSTAT>>                                        <<01334>>00298000
        0,    <<DSERR>> <<COUNT & INDEX OF HARWARE STATUS>>    <<01334>>00300000
     %177,  <<MSK>>                                            <<01334>>00302000
      -30,  <<MXNULL>>                                         <<01334>>00304000
        0,  <<NULLCNT>>                                        <<01334>>00306000
      %15,  <<TERMCHR>>                                        <<01334>>00308000
        0,  <<COUNT>>                                          <<01334>>00310000
        0,  <<ODDBYTEF>>                                       <<01334>>00312000
        0,  <<ADDR>>                                           <<01334>>00314000
        0,  <<BANK>>                                           <<01334>>00316000
        0,  <<CNT>>                                            <<01334>>00318000
        0,  <<FLG>>                                            <<01334>>00320000
        0,    << DLOGERROR>>                                   <<01334>>00322000
        0;                                                     <<01334>>00324000
                                                                        00326000
<<----------------------------- SIO PROGRAM STORAGE ---------------->>  00328000
                                                                        00330000
ARRAY  SIOA(1:SIOSIZE) = DB := 0,0,0,0;                                 00332000
                                                                        00334000
$PAGE "PTRDR0-EXTERNAL DECLARATIONS"                                    00336000
<<---------------------- EXTERNAL PROCEDURE DECLARATIONS ----------->>  00338000
                                                                        00340000
PROCEDURE IOINITDUMMY(DRTNUMBER);                                       00342000
VALUE DRTNUMBER; INTEGER DRTNUMBER; OPTION EXTERNAL;                    00344000
                                                                        00346000
PROCEDURE STARTSIOP(DITP,SIOP,FLAG,RATE);                               00348000
VALUE   DITP,SIOP,FLAG,RATE;                                            00350000
INTEGER FLAG,RATE;                                                      00352000
POINTER DITP, SIOP;                                                     00354000
OPTION EXTERNAL;                                                        00356000
                                                                        00358000
PROCEDURE LDEVNOTRDY(DITP);                                    <<0U.EB>>00360000
VALUE DITP; POINTER DITP; OPTION EXTERNAL;                     <<0U.EB>>00362000
                                                                        00364000
PROCEDURE DELAY(MSEC);VALUE MSEC;DOUBLE MSEC;OPTION EXTERNAL;           00366000
                                                                        00368000
PROCEDURE EOFCHECK(IOQP,BUFP,CNT,HARDCHK);                              00370000
VALUE   IOQP,BUFP,CNT,HARDCHK;                                          00372000
POINTER IOQP;                                                           00374000
DOUBLE BUFP;                                                            00376000
INTEGER CNT,HARDCHK;                                                    00378000
OPTION EXTERNAL;                                                        00380000
PROCEDURE INITPTR(DRTN);                                                00382000
VALUE   DRTN;                                                           00384000
INTEGER DRTN;                                                           00386000
OPTION EXTERNAL;                                                        00388000
                                                                        00390000
PROCEDURE MASTERCLEAR(DITPX);                                           00392000
ARRAY DITPX;                                                            00394000
OPTION EXTERNAL;                                                        00396000
                                                                        00398000
PROCEDURE PTRIP;                                                        00400000
OPTION EXTERNAL;                                                        00402000
                                                                        00404000
PROCEDURE SIODM(DITP,FLAGS);                                            00406000
VALUE DITP,FLAGS;                                                       00408000
LOGICAL FLAGS;                                                          00410000
POINTER DITP;                                                           00412000
OPTION EXTERNAL;                                                        00414000
                                                                        00416000
PROCEDURE HELP;                                                         00418000
OPTION EXTERNAL;                                                        00420000
                                                                        00422000
                                                                        00424000
PROCEDURE IOFAILURE(DRTN,DITP);                                         00426000
VALUE DRTN; INTEGER DRTN;                                               00428000
ARRAY DITP;                                                             00430000
OPTION EXTERNAL;                                                        00432000
                                                                        00434000
                                                                        00436000
PROCEDURE INITZ(IDITP);                                                 00438000
INTEGER ARRAY IDITP;                                                    00440000
BEGIN                                                                   00442000
  POINTER PS0=S-0;                                                      00444000
  MASTERCLEAR(IDITP);                                                   00446000
  TOS:=IDITP(5);  <<GET THE DRT NUMBER>>                                00448000
  TOS:=PS0(ICNTRL).DRT;                                        <<01300>>00450000
  TOS:=2;         <<ENABLE INTERRUPTS>>                                 00452000
  ASSEMBLE(CIO 1);                                                      00454000
  IF <>THEN ASSEMBLE(DEL);                                              00456000
END;                                                                    00458000
                                                                        00460000
                                                                        00462000
<<-------------------------- DRIVER CODE PROCEDURE ----------------->>  00464000
                                                                        00466000
INTEGER PROCEDURE PTRDVR(IOQP,DITP,BANK,BUFADR,SIOP,DRTN);              00468000
VALUE IOQP,DITP,BANK,BUFADR,SIOP,DRTN;                                  00470000
INTEGER BANK,BUFADR,DRTN;                                               00472000
INTEGER POINTER IOQP,DITP,SIOP;                                         00474000
                                                                        00476000
BEGIN  <<PTRDVR>>                                                       00478000
  DOUBLE UBUF=BANK;                                                     00480000
  DOUBLE ABUF;                                                          00482000
  INTEGER MSTATE=PTRDVR;                                                00484000
  LOGICAL DSTATUS;                                                      00486000
  INTEGER FUNC;                                                         00488000
INTEGER X=X, S0 = S-0, S1 = S-1, S2 = S-2, S3 = S-3;                    00490000
  DEFINE LDEV=IOQP(QLDEV).(8:8)#;                                       00492000
  DEFINE SIOPBASE=@SIOP+%1000#;                                         00494000
<< CHECK FOR ABORTED REQUEST AND RESET INTERRUPT ACKNOWLEGED FLAG   >>  00496000
<< GET FUNCTION CODE                                                >>  00498000
   FUNC:= IOQP(QFUNC);                                                  00500000
   TOS:=0;  <<SET UP AUX BUFFER>>                                       00502000
   TOS:=SIOPBASE;                                                       00504000
   ABUF:=TOS;                                                           00506000
   IF FUNC =6 THEN                                                      00508000
   BEGIN                                                                00510000
     HELP;                                                              00512000
     TOS:=SUCCESSFUL;                                                   00514000
     GO TO IODONE;                                                      00516000
   END;                                                                 00518000
                                                                        00520000
   DISABLE;                                                             00522000
   DITP(0).IAK:=0;  <<RESET IAK>>                                       00524000
   TOS := IOQP;                                                         00526000
   DEL;                                                                 00528000
   IF < THEN                                                            00530000
    BEGIN                              << I/O REQUEST ABORTED       >>  00532000
     ENABLE;                                                            00534000
     MASTERCLEAR(DITP);                                                 00536000
     IF IOQP.PFAILB=1 THEN TOS:=PFABORT ELSE                            00538000
     TOS := ABORTED;                                                    00540000
     GO  IODONE;                                                        00542000
    END;                                                                00544000
   ENABLE;                                                              00546000
   IF MSTATE = COMPLETION THEN GO COMP;                                 00548000
   TOS:=DRTN;                                                           00550000
   TOS:= CLEAR LOR %10;  <<ENABLE DEV STATUS CLEAR INTS>>               00552000
   ASSEMBLE(CIO 1;DEL);                                                 00554000
   IF <> THEN                                                           00556000
   BEGIN                                                                00558000
UFAIL:                                                                  00560000
     IOFAILURE(DRTN,DITP);   <<NON RESPONDING DEVICE>>                  00562000
FAIL:                                                                   00564000
     MASTERCLEAR(DITP);                                                 00566000
     TOS:=UNITFAIL;                                                     00568000
     TOS:=ENDIO;                                                        00570000
     GO OUT;                                                            00572000
   END;                                                                 00574000
   TOS:=DRTN;                                                           00576000
   ASSEMBLE(TIO 0);                                                     00578000
   IF < THEN GO UFAIL;                                                  00580000
   DSTATUS:=TOS;                                                        00582000
   IF DSTATUS.(9:1) =0 THEN                                             00584000
    BEGIN  <<DEVICE NOT READY>>                                         00586000
NTRDY:                                                                  00588000
     IF DITP(FLG) <> WAITF THEN                                         00590000
      BEGIN                                                             00592000
       LDEVNOTRDY(DITP); <<OUTPUT NOT READY MESSAGE>>          <<0U.EB>>00594000
      END;                                                              00596000
     GO WAIT;                                                           00598000
    END;                                                                00600000
   ASSEMBLE(DEL);                                                       00602000
$PAGE "NEW REQ: GET FUNCTION,WORD CNT,ETC, & SET UP & START SIO PROG"   00604000
NEW:                                                                    00606000
                                                                        00608000
   IF FUNC = 1 THEN                                                     00610000
    BEGIN  <<WRITE ATTEMPTED>>                                          00612000
     GO INVALIDCNTRL;  <<REJECT IT>>                                    00614000
    END;                                                                00616000
   IF FUNC > 1 THEN GO CONTROL;                                         00618000
$PAGE                                                                   00620000
<<  R  E  A  D  >>                                                      00622000
                                                                        00624000
DITP(MSK):=IF IOQP(QPAR2).(10:3)=0                             <<00.05>>00626000
THEN %177 ELSE %377;                                                    00628000
IF IOQP(QPAR2) <> 0 THEN                                                00630000
DITP(TERMCHR):=IOQP(QPAR2).(0:8);                                       00632000
<<  CHECK FOR END OF FILE  >>                                           00634000
                                                                        00636000
   EOFCHECK(IOQP,0D,0,0);                                               00638000
   IF <> THEN                                                           00640000
   BEGIN                                                                00642000
     MSTATE:=ENDIO;                                                     00644000
     RETURN;                                                            00646000
   END;                                                                 00648000
<< DETERMINE WORD COUNT                                             >>  00650000
   TOS := IOQP(QWBCT);                                                  00652000
   IF > THEN TOS := -TOS & ASL(1);                                      00654000
   IF = THEN                                                            00656000
    BEGIN  <<NULL LENGTH>>                                              00658000
     TOS := SUCCESSFUL;                                                 00660000
     GO IODONE;                                                         00662000
    END;                                                                00664000
   DITP(COUNT) := TOS;                                                  00666000
                                                                        00668000
<<  SET UP DIT  >>                                                      00670000
   IF DITP(FLG)=DEOF THEN                                               00672000
   BEGIN     <<MOVE FROM AUX BUFFER TO USERS>>                          00674000
     TOS:=UBUF;                                                         00676000
     TOS:=ABUF;                                                         00678000
     TOS:=-(DITP(COUNT));                                               00680000
     TOS:=TOS&ASR(1);  <<SET TO WORD COUNT>>                            00682000
     ASSEMBLE(MABS);                                                    00684000
     DITP(FLG):=0;                                                      00686000
     TOS:=SUCCESSFUL;                                                   00688000
     GO IODONE;                                                         00690000
   END;                                                                 00692000
   DITP(NULLCNT) := DITP(MXNULL);                                       00694000
   DITP(ODDBYTEF):=0;                                                   00696000
   DITP(ADDR):=BUFADR;                                                  00698000
   DITP(BANKA):=BANK;                                                   00700000
   DITP(CNT):=0;                                                        00702000
   DITP(FLG):=0;                                                        00704000
DOIO:                                                                   00706000
   TOS:=DRTN;                                                           00708000
   TOS := INITCHR;                                                      00710000
   ASSEMBLE(CIO 1);                                                     00712000
   IF < THEN GO UFAIL;                                                  00714000
   TOS := PENDING;                                                      00716000
   TOS := WCOMP;                                                        00718000
   GO OUT;                                                              00720000
                                                                        00722000
$PAGE "PTRDR0-CONTROL REQUEST"                                          00724000
<< CONTROL REQUEST                                                  >>  00726000
CONTROL:                                                                00728000
   IF FUNC > 4 THEN GO INVALIDCNTRL;                                    00730000
                                                                        00732000
                                                                        00734000
   IF FUNC = 2 THEN                                                     00736000
   BEGIN                                                                00738000
     TOS:=SUCCESSFUL;                                                   00740000
     GO IODONE;                                                         00742000
   END;                                                                 00744000
                                                                        00746000
   <<C L O S E   D E V I C E >>                                         00748000
     DITP(MSK) := %177;  <<RESET TO ASCII MODE>>                        00750000
     DITP(TERMCHR) := %15;  <<RESET TERMCHR TO CARRIAGE RTN>>           00752000
     DITP(MXNULL) := -30;                                               00754000
     TOS := SUCCESSFUL;                                                 00756000
    GO IODONE;                                                          00758000
$PAGE "PTRDR0-COMPLETION SECT: CHK STATUS & RETURN IOCB"                00760000
COMP:                                                                   00762000
                                                                        00764000
<<CHECK FLG TO SEE WHAT HAPPENED>>                                      00766000
                                                                        00768000
   IF DITP(FLG) = TOF THEN                                              00770000
      BEGIN <<TAPE OUT FLAG, BINARY MODE>>                              00772000
      TOS:=HDWEOF;                                                      00774000
      GOTO IODONE;                                                      00776000
      END;                                                              00778000
   IF DITP(FLG) = WAITF THEN GO NEW;                                    00780000
   IF DITP(FLG) = DELF THEN GO NEW;                                     00782000
   IF DITP(FLG)=TRBLF THEN GO TRANSERR;                                 00784000
   IF DITP(FLG)=EOTF THEN                                               00786000
    BEGIN  IF DITP(MSK)=%177 THEN BEGIN                                 00788000
      TOS:=HDWEOF; GO IODONE; END ELSE GO NTRDY;                        00790000
    END;                                                                00792000
                                                                        00794000
<< DETERMINE NUMBER OF WORDS TRANSFERRED                            >>  00796000
                                                                        00798000
   TOS := -DITP(CNT);                                                   00800000
   IF IOQP(QWBCT) >= 0 THEN                                             00802000
    BEGIN  <<REQUEST WAS FOR WORDS>>                                    00804000
     TOS := -(TOS & ASR(1));  <<ROUND UP>>                              00806000
     IF LOGICAL(DITP(CNT)) THEN                                         00808000
      BEGIN  <<ODD # OF BYTES TRANSMITTED>>                             00810000
       TOS:=DITP(BANKA);                                                00812000
       TOS:=DITP(ADDR);                                                 00814000
       ASSEMBLE(LSEA);                                                  00816000
       TOS.(8:8):=" ";     <<BLANK LAST BYTE>>                          00818000
       ASSEMBLE(SSEA; DDEL);  <<PUT IT BACK>>                           00820000
      END;                                                              00822000
    END;                                                                00824000
     IOQP(QWBCT):=TOS;                                         <<00.02>>00826000
   GO WELLDONE;                                                         00828000
INVALIDCNTRL:                                                           00830000
   TOS := BADCNTRL;                                                     00832000
   GO IODONE;                                                           00834000
TRANSERR:                                                               00836000
   DITP(DSERR):= [8/1,8/DLOGERROR];  <<SET LOG COUNT & INDEX>> <<01334>>00838000
   DITP(DLOGERROR):= DITP(DSTAT);         <<LOG ERROR>>        <<01334>>00840000
   TOS := XFERERR;                                                      00842000
   GO IODONE;                                                           00844000
$PAGE "PTRDR0-EXITS:  GOOD,BAD, AND INDIFFERENT"                        00846000
WAIT:                                                                   00848000
   DITP(FLG) := WAITF;                                                  00850000
   TOS := DRTN;                                                         00852000
   TOS := RESET;                                                        00854000
   ASSEMBLE(CIO 1);                                                     00856000
   TOS := NOTRDYWT;                                                     00858000
   TOS := WNEW;                                                         00860000
   GO OUT;                                                              00862000
WELLDONE:                                                               00864000
   IF DITP(MSK) <> %377 THEN                                            00866000
    BEGIN  <<ASCII MODE>>                                               00868000
     EOFCHECK(IOQP,UBUF,DITP(COUNT),IF DITP(MSK)=%177 THEN 1 ELSE -1);  00870000
     IF <> THEN                                                         00872000
     BEGIN  <<EOF FOUND>>                                               00874000
       TOS:=ABUF;                                                       00876000
       TOS:=UBUF;                                                       00878000
       TOS:=-(DITP(COUNT));                                             00880000
       TOS:=TOS&ASR(1);  <<SET TO WORD COUNT>>                          00882000
       ASSEMBLE(MABS);                                                  00884000
       DITP(FLG):=DEOF;                                                 00886000
       MSTATE:=ENDIO;                                                   00888000
       RETURN;                                                          00890000
     END;                                                               00892000
    END;                                                                00894000
    TOS:=SUCCESSFUL;                                           <<00.05>>00896000
IODONE:                                                                 00898000
   DITP(COUNT):=0;                                             <<00.06>>00900000
   MASTERCLEAR(DITP);                                                   00902000
   TOS := ENDIO;                                                        00904000
   TOS := DRTN;                                                         00906000
   TOS:= 2;  <<ENABLE INTS>>                                            00908000
   ASSEMBLE(CIO 1);                                                     00910000
   DEL;                                                                 00912000
OUT:                                                                    00914000
   MSTATE :=TOS;                                                        00916000
   STATUS:=TOS;                                                         00918000
   RETURN;                                                              00920000
END  <<PTRDVR >>  ;                                                     00922000
$PAGE                                                                   00924000
                                                                        00926000
$PAGE "PTRDR0-'DUMMY' OUTER BLOCK GIVES CONFIGURATION DATA"             00928000
 ASSEMBLE(PCAL SIODM;      <<MONITOR>>                                  00930000
          PCAL PTRDVR;     <<INITIATOR>>                                00932000
          PCAL PTRDVR;     <<COMPLETOR>>                                00934000
          CON  0;                                                       00936000
          PCAL INITZ;      <<INITIALIZATION>>                           00938000
          CON  1;          <<I INTERRUPT HANDLER>>                      00940000
          PCAL PTRIP);     <<INTERRUPT HANDLER>>                        00942000
END  << IOPTRD0  >> ;.............................................      00944000
