$CONTROL MAP,CODE,USLINIT                                               00010000
<<IOPTRD0 - MODULE 13>>                                                 00015000
<< HP32002C MPE SOURCE C.00.00 >>                                       00020000
<< COPYRIGHT     "(C) COPYRIGHT HEWLETT-PACKARD CO. 1980.           >>  00025000
<<     THIS PROGRAM MAY BE USED WITH ONE COMPUTER SYSTEM AT A       >>  00030000
<<     TIME AND SHALL NOT OTHERWISE BE RECORDED, TRANSMITTED OR     >>  00035000
<<     STORED IN A RETRIEVAL SYSTEM.  COPYING OR OTHER REPRODUCTION >>  00040000
<<     OF THIS PROGRAM EXCEPT FOR ARCHIVAL PURPOSES IS PROHIBITED   >>  00045000
<<     WITHOUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.>>  00050000
<< **** Note - Dollar Copyright cannot be used with this module *** >>  00055000
<<PAPER TAPE READER DRIVER>>                                            00060000
$TITLE "PTRDR0 - DRIVER FOR  PAPER TAPE READER"                         00065000
$CONTROL PRIVILEGED,UNCALLABLE                                          00070000
$THIRTY                                                                 00075000
                                                                        00080000
                                                                        00085000
<<*******************************************************               00090000
                                                                        00095000
                                                                        00100000
*******************************************************>>               00105000
                                                                        00110000
DRIVER REQUEST CODES:                                                   00115000
                                                                        00120000
     0 - READ                                                           00125000
         P1.(13:3)     EOF SPECIFICATION                                00130000
                                                                        00135000
         P2 (0:8)      SPECIAL READ TERMINATION CHARACTER               00140000
            (10:3)  - 0 ASCII                                  <<00.05>>00145000
                    - 1 BINARY                                          00150000
                                                                        00155000
     2 - OPEN FILE                                                      00160000
                                                                        00165000
     3 - CLOSE FILE                                                     00170000
                                                                        00175000
     4 - CLOSE DEVICE                                                   00180000
                                                                        00185000
                                                                        00190000
BEGIN  << IOPTRDR0 >>                                                   00195000
DEFINE                                                                  00200000
        DISABLE    =    ASSEMBLE(SED 0)#,                               00205000
        DRT        =    (8:8)#,                                <<01300>>00210000
        ENABLE     =    ASSEMBLE(SED 1)#,                               00215000
        F          =    ABSOLUTE#,                                      00220000
        IAK        =    (8:1)#,                                         00225000
        RIORDY     =    ( 1: 1)#,                                       00230000
        EOFBT      =    ( 8: 1)#,  <<LPDT>>                             00235000
        TAPERDY    =    ( 9: 1)#,                                       00240000
        EOFABE     =    ( 7: 3)#,                                       00245000
        EOFAB      =    ( 7: 2)#,                                       00250000
        EOFB       =    ( 8: 1)#,                                       00255000
        EBT        =    ( 9: 1)#,                                       00260000
        STATUS     =    IOQP(QSTAT).(8:8)#,                             00265000
        PFAILB     =    (11:1)#,                                        00270000
        QMISP      =    IOQP(QMISC)#,                                   00275000
        STOPDEFS   =    <<>>#;         <<STOPPER FOR DEFINES        >>  00280000
EQUATE                                                                  00285000
        MSTRCLEAR  =    %100000,       <<PROGRAMMED MASTER RESET    >>  00290000
        CLEAR      =    %040000,       <<RESET INTS               >>    00295000
        RESET      =    %040002,       <<RESET INTS,ENABLE INTS>>       00300000
        INITCHR    =    %002023,       <<START NEXT CHARACTER>>         00305000
        INTON      =          2,       <<ENABLE U.I. CARD INTERRUPTS>>  00310000
        DSTAT      =          6, <<DIT:  CONTROLLER STATUS>>   <<01334>>00315000
        DSERR      =          7, <<DIT:HARDWARE STATUS INDEX>> <<01334>>00320000
        DLOGERROR  =         18, <<DIT: ERROR LOG STATUS>>     <<01334>>00325000
        PFABORT    =          %63,                                      00330000
        ICNTRL     =         %7,     <<INDEX IN ILT OF DRT>>   <<01300>>00335000
        QFLAG      =          0,       <<IOQ:  REQUEST FLAGS        >>  00340000
        QDSTN      =          4,       <<IOQ:  INT ACK. BIT IN BIT 1>>  00345000
        QFUNC      =          6,       <<IOQ:  FUNCTION CODE        >>  00350000
        QLDEV      =          2,       <<IOQ: LOGICAL DEVICE>>          00355000
        QMISC      =          3,       <<IOQ: DRIVER STATE FLAGS    >>  00360000
        QSTAT      =          10,      <<IOQ: DEV STATUS>>              00365000
        QPAR1      =          8,       <<IOQ: PARAMETER #1          >>  00370000
        QPAR2      =          9,       <<IOQ: PARAMETER #2          >>  00375000
        QWBCT      =          7,       <<IOQ:  WORD/BYTE COUNT      >>  00380000
        SYSB    =3,                                                     00385000
        DISCPI  =%25,                                                   00390000
        DIT0        =  0,                                               00395000
        MSK         =  8,                                               00400000
        MXNULL      =  9,                                      <<00.06>>00405000
        NULLCNT     =  10,                                              00410000
        TERMCHR     =  11,                                              00415000
        COUNT       =  12,                                              00420000
        ODDBYTEF    =  13,                                              00425000
        ADDR        =  14,                                              00430000
        BANKA       =  15,                                              00435000
        CNT         =  16,                                              00440000
        FLG         =  17,                                              00445000
        DEOF        =  6,    <<EOF DETECTED AND AUX BUFFER>>            00450000
        OKF     =0,                                                     00455000
        TRBLF   =1,                                                     00460000
        EOTF    =2,                                                     00465000
        DELF       =          3,                                        00470000
        WAITF      =          4,                                        00475000
        TOF         =         5,                                        00480000
        HDWEOF      =         2,       <<HARDWARE EOF>>                 00485000
        CR         =        %15,                                        00490000
        LF         =        %12,                                        00495000
        XC         =       %030,       <<CONTROL X>>                    00500000
        HC         =       %010,       <<CONTROL H>>                    00505000
        RO         =       %177,       <<RUBOUT>>                       00510000
        XOFF       =       %23,                                         00515000
        QC         =       %21,                                         00520000
        YC         =       %31,                                         00525000
        R0         =       %177,                                        00530000
        DITSIZE    =         20,       <<DEVICE INFO. TABLE SIZE    >>  00535000
        SIOSIZE    =        128,       <<SIO PROGRAM AREA SIZE>>        00540000
        SIOSIZED2  =      SIOSIZE/2,<<SIO PGM SIZE/2 FOR INIT>><<01300>>00545000
        ABORTED    =        %33,       <<I/O ABORTED RETURN STATUS  >>  00550000
        BADCNTRL   =        %04,       <<INVALLID CONTROL FUNCTION  >>  00555000
        NOTRDYWT   =        %030,       <<NOT READY WAIT STATUS      >> 00560000
        PENDING    =        %10,       <<I/O INNITIATED STATUS      >>  00565000
        SIOFAIL    =        %45,       <<BAD RTN FRM STARTSIOP INTR >>  00570000
        SUCCESSFUL =          1,       <<I/O SUCCESSFULLY COMPLETED >>  00575000
        UNITFAIL   =        %54,       <<UNIT FAILURE RETURN STATUS >>  00580000
        XFERERR    =        %14,       <<TRANSFER ERROR             >>  00585000
        CALLINIT   =          2,       <<CALLINNITIATOR FOR RETRY   >>  00590000
        ENDIO      =          5,       <<END OF I/O REQUEST         >>  00595000
        WNEW       =        7,       <<RE-INITIATE AFTER INTERRUPT>>    00600000
       COMPLETION =         3,        <<COMPLETION>>                    00605000
        WCOMP      =        %13,       <<CALL COMPLETOR AFTER INT   >>  00610000
        WEND       =        %15,       <<END I/O AFTER NEXT INT     >>  00615000
        TLOG       =          1,       <<IOCB-TRANSMISSION LOG      >>  00620000
        UNPACKED   =    %000042,       <<SET UNPACKED MODE, INTS ON >>  00625000
        NRDYCW     =    %001002,       <<INTS. ON ONLY              >>  00630000
        RESIDUE    =          5,       <<SIO AREA:  INDEX TO RESIDUE>>  00635000
        SETDEVSTAT =        %10,       <<SET STATUS TO DEVICE STATUS>>  00640000
        STOPEQTS   =     000000;       <<STOPPER FOR EQUATES        >>  00645000
$PAGE "PTRDR0-DATA AREA-IOQH,DIT,SIO AREA"                              00650000
BYTE ARRAY CONFIG(0:7)=DB :=                                            00655000
       DITSIZE,                                                         00660000
       1,                                                               00665000
       0,                                                               00670000
       0,                                                               00675000
       0,0,                                                             00680000
       SIOSIZED2,0;                                            <<01300>>00685000
<<------------------------------- DIT ------------------------------>>  00690000
ARRAY  DITA(1:DITSIZE) = DB :=                                 <<01334>>00695000
        0,    <<DFLAG>>                                        <<01334>>00700000
        0,    <<DLINK>>                                        <<01334>>00705000
        0,    <<DIOQP>>                                        <<01334>>00710000
        0,    <<DLDEV>>                                        <<01334>>00715000
        0,    <<DLTP>>                                         <<01334>>00720000
        0,    <<DILTP>>                                        <<01334>>00725000
        0,    <<DSTAT>>                                        <<01334>>00730000
        0,    <<DSERR>> <<COUNT & INDEX OF HARWARE STATUS>>    <<01334>>00735000
     %177,  <<MSK>>                                            <<01334>>00740000
      -30,  <<MXNULL>>                                         <<01334>>00745000
        0,  <<NULLCNT>>                                        <<01334>>00750000
      %15,  <<TERMCHR>>                                        <<01334>>00755000
        0,  <<COUNT>>                                          <<01334>>00760000
        0,  <<ODDBYTEF>>                                       <<01334>>00765000
        0,  <<ADDR>>                                           <<01334>>00770000
        0,  <<BANK>>                                           <<01334>>00775000
        0,  <<CNT>>                                            <<01334>>00780000
        0,  <<FLG>>                                            <<01334>>00785000
        0,    << DLOGERROR>>                                   <<01334>>00790000
        0;                                                     <<01334>>00795000
                                                                        00800000
<<----------------------------- SIO PROGRAM STORAGE ---------------->>  00805000
                                                                        00810000
ARRAY  SIOA(1:SIOSIZE) = DB := 0,0,0,0;                                 00815000
                                                                        00820000
$PAGE "PTRDR0-EXTERNAL DECLARATIONS"                                    00825000
<<---------------------- EXTERNAL PROCEDURE DECLARATIONS ----------->>  00830000
                                                                        00835000
PROCEDURE IOINITDUMMY(DRTNUMBER);                                       00840000
VALUE DRTNUMBER; INTEGER DRTNUMBER; OPTION EXTERNAL;                    00845000
                                                                        00850000
PROCEDURE STARTSIOP(DITP,SIOP,FLAG,RATE);                               00855000
VALUE   DITP,SIOP,FLAG,RATE;                                            00860000
INTEGER FLAG,RATE;                                                      00865000
POINTER DITP, SIOP;                                                     00870000
OPTION EXTERNAL;                                                        00875000
                                                                        00880000
PROCEDURE LDEVNOTRDY(DITP);                                    <<0U.EB>>00885000
VALUE DITP; POINTER DITP; OPTION EXTERNAL;                     <<0U.EB>>00890000
                                                                        00895000
PROCEDURE DELAY(MSEC);VALUE MSEC;DOUBLE MSEC;OPTION EXTERNAL;           00900000
                                                                        00905000
PROCEDURE EOFCHECK(IOQP,BUFP,CNT,HARDCHK);                              00910000
VALUE   IOQP,BUFP,CNT,HARDCHK;                                          00915000
POINTER IOQP;                                                           00920000
DOUBLE BUFP;                                                            00925000
INTEGER CNT,HARDCHK;                                                    00930000
OPTION EXTERNAL;                                                        00935000
PROCEDURE INITPTR(DRTN);                                                00940000
VALUE   DRTN;                                                           00945000
INTEGER DRTN;                                                           00950000
OPTION EXTERNAL;                                                        00955000
                                                                        00960000
PROCEDURE MASTERCLEAR(DITPX);                                           00965000
ARRAY DITPX;                                                            00970000
OPTION EXTERNAL;                                                        00975000
                                                                        00980000
PROCEDURE PTRIP;                                                        00985000
OPTION EXTERNAL;                                                        00990000
                                                                        00995000
PROCEDURE SIODM(DITP,FLAGS);                                            01000000
VALUE DITP,FLAGS;                                                       01005000
LOGICAL FLAGS;                                                          01010000
POINTER DITP;                                                           01015000
OPTION EXTERNAL;                                                        01020000
                                                                        01025000
PROCEDURE HELP;                                                         01030000
OPTION EXTERNAL;                                                        01035000
                                                                        01040000
                                                                        01045000
PROCEDURE IOFAILURE(DRTN,DITP);                                         01050000
VALUE DRTN; INTEGER DRTN;                                               01055000
ARRAY DITP;                                                             01060000
OPTION EXTERNAL;                                                        01065000
                                                                        01070000
                                                                        01075000
PROCEDURE INITZ(IDITP);                                                 01080000
INTEGER ARRAY IDITP;                                                    01085000
BEGIN                                                                   01090000
  POINTER PS0=S-0;                                                      01095000
  MASTERCLEAR(IDITP);                                                   01100000
  TOS:=IDITP(5);  <<GET THE DRT NUMBER>>                                01105000
  TOS:=PS0(ICNTRL).DRT;                                        <<01300>>01110000
  TOS:=2;         <<ENABLE INTERRUPTS>>                                 01115000
  ASSEMBLE(CIO 1);                                                      01120000
  IF <>THEN ASSEMBLE(DEL);                                              01125000
END;                                                                    01130000
                                                                        01135000
                                                                        01140000
<<-------------------------- DRIVER CODE PROCEDURE ----------------->>  01145000
                                                                        01150000
INTEGER PROCEDURE PTRDVR(IOQP,DITP,BANK,BUFADR,SIOP,DRTN);              01155000
VALUE IOQP,DITP,BANK,BUFADR,SIOP,DRTN;                                  01160000
INTEGER BANK,BUFADR,DRTN;                                               01165000
INTEGER POINTER IOQP,DITP,SIOP;                                         01170000
                                                                        01175000
BEGIN  <<PTRDVR>>                                                       01180000
  DOUBLE UBUF=BANK;                                                     01185000
  DOUBLE ABUF;                                                          01190000
  INTEGER MSTATE=PTRDVR;                                                01195000
  LOGICAL DSTATUS;                                                      01200000
  INTEGER FUNC;                                                         01205000
INTEGER X=X, S0 = S-0, S1 = S-1, S2 = S-2, S3 = S-3;                    01210000
  DEFINE LDEV=IOQP(QLDEV).(8:8)#;                                       01215000
  DEFINE SIOPBASE=@SIOP+%1000#;                                         01220000
<< CHECK FOR ABORTED REQUEST AND RESET INTERRUPT ACKNOWLEGED FLAG   >>  01225000
<< GET FUNCTION CODE                                                >>  01230000
   FUNC:= IOQP(QFUNC);                                                  01235000
   TOS:=0;  <<SET UP AUX BUFFER>>                                       01240000
   TOS:=SIOPBASE;                                                       01245000
   ABUF:=TOS;                                                           01250000
   IF FUNC =6 THEN                                                      01255000
   BEGIN                                                                01260000
     HELP;                                                              01265000
     TOS:=SUCCESSFUL;                                                   01270000
     GO TO IODONE;                                                      01275000
   END;                                                                 01280000
                                                                        01285000
   DISABLE;                                                             01290000
   DITP(0).IAK:=0;  <<RESET IAK>>                                       01295000
   TOS := IOQP;                                                         01300000
   DEL;                                                                 01305000
   IF < THEN                                                            01310000
    BEGIN                              << I/O REQUEST ABORTED       >>  01315000
     ENABLE;                                                            01320000
     MASTERCLEAR(DITP);                                                 01325000
     IF IOQP.PFAILB=1 THEN TOS:=PFABORT ELSE                            01330000
     TOS := ABORTED;                                                    01335000
     GO  IODONE;                                                        01340000
    END;                                                                01345000
   ENABLE;                                                              01350000
   IF MSTATE = COMPLETION THEN GO COMP;                                 01355000
   TOS:=DRTN;                                                           01360000
   TOS:= CLEAR LOR %10;  <<ENABLE DEV STATUS CLEAR INTS>>               01365000
   ASSEMBLE(CIO 1;DEL);                                                 01370000
   IF <> THEN                                                           01375000
   BEGIN                                                                01380000
UFAIL:                                                                  01385000
     IOFAILURE(DRTN,DITP);   <<NON RESPONDING DEVICE>>                  01390000
FAIL:                                                                   01395000
     MASTERCLEAR(DITP);                                                 01400000
     TOS:=UNITFAIL;                                                     01405000
     TOS:=ENDIO;                                                        01410000
     GO OUT;                                                            01415000
   END;                                                                 01420000
   TOS:=DRTN;                                                           01425000
   ASSEMBLE(TIO 0);                                                     01430000
   IF < THEN GO UFAIL;                                                  01435000
   DSTATUS:=TOS;                                                        01440000
   IF DSTATUS.(9:1) =0 THEN                                             01445000
    BEGIN  <<DEVICE NOT READY>>                                         01450000
NTRDY:                                                                  01455000
     IF DITP(FLG) <> WAITF THEN                                         01460000
      BEGIN                                                             01465000
       LDEVNOTRDY(DITP); <<OUTPUT NOT READY MESSAGE>>          <<0U.EB>>01470000
      END;                                                              01475000
     GO WAIT;                                                           01480000
    END;                                                                01485000
   ASSEMBLE(DEL);                                                       01490000
$PAGE "NEW REQ: GET FUNCTION,WORD CNT,ETC, & SET UP & START SIO PROG"   01495000
NEW:                                                                    01500000
                                                                        01505000
   IF FUNC = 1 THEN                                                     01510000
    BEGIN  <<WRITE ATTEMPTED>>                                          01515000
     GO INVALIDCNTRL;  <<REJECT IT>>                                    01520000
    END;                                                                01525000
   IF FUNC > 1 THEN GO CONTROL;                                         01530000
$PAGE                                                                   01535000
<<  R  E  A  D  >>                                                      01540000
                                                                        01545000
DITP(MSK):=IF IOQP(QPAR2).(10:3)=0                             <<00.05>>01550000
THEN %177 ELSE %377;                                                    01555000
IF IOQP(QPAR2) <> 0 THEN                                                01560000
DITP(TERMCHR):=IOQP(QPAR2).(0:8);                                       01565000
<<  CHECK FOR END OF FILE  >>                                           01570000
                                                                        01575000
   EOFCHECK(IOQP,0D,0,0);                                               01580000
   IF <> THEN                                                           01585000
   BEGIN                                                                01590000
     MSTATE:=ENDIO;                                                     01595000
     RETURN;                                                            01600000
   END;                                                                 01605000
<< DETERMINE WORD COUNT                                             >>  01610000
   TOS := IOQP(QWBCT);                                                  01615000
   IF > THEN TOS := -TOS & ASL(1);                                      01620000
   IF = THEN                                                            01625000
    BEGIN  <<NULL LENGTH>>                                              01630000
     TOS := SUCCESSFUL;                                                 01635000
     GO IODONE;                                                         01640000
    END;                                                                01645000
   DITP(COUNT) := TOS;                                                  01650000
                                                                        01655000
<<  SET UP DIT  >>                                                      01660000
   IF DITP(FLG)=DEOF THEN                                               01665000
   BEGIN     <<MOVE FROM AUX BUFFER TO USERS>>                          01670000
     TOS:=UBUF;                                                         01675000
     TOS:=ABUF;                                                         01680000
     TOS:=-(DITP(COUNT));                                               01685000
     TOS:=TOS&ASR(1);  <<SET TO WORD COUNT>>                            01690000
     ASSEMBLE(MABS);                                                    01695000
     DITP(FLG):=0;                                                      01700000
     TOS:=SUCCESSFUL;                                                   01705000
     GO IODONE;                                                         01710000
   END;                                                                 01715000
   DITP(NULLCNT) := DITP(MXNULL);                                       01720000
   DITP(ODDBYTEF):=0;                                                   01725000
   DITP(ADDR):=BUFADR;                                                  01730000
   DITP(BANKA):=BANK;                                                   01735000
   DITP(CNT):=0;                                                        01740000
   DITP(FLG):=0;                                                        01745000
DOIO:                                                                   01750000
   TOS:=DRTN;                                                           01755000
   TOS := INITCHR;                                                      01760000
   ASSEMBLE(CIO 1);                                                     01765000
   IF < THEN GO UFAIL;                                                  01770000
   TOS := PENDING;                                                      01775000
   TOS := WCOMP;                                                        01780000
   GO OUT;                                                              01785000
                                                                        01790000
$PAGE "PTRDR0-CONTROL REQUEST"                                          01795000
<< CONTROL REQUEST                                                  >>  01800000
CONTROL:                                                                01805000
   IF FUNC > 4 THEN GO INVALIDCNTRL;                                    01810000
                                                                        01815000
                                                                        01820000
   IF FUNC = 2 THEN                                                     01825000
   BEGIN                                                                01830000
     TOS:=SUCCESSFUL;                                                   01835000
     GO IODONE;                                                         01840000
   END;                                                                 01845000
                                                                        01850000
   <<C L O S E   D E V I C E >>                                         01855000
     DITP(MSK) := %177;  <<RESET TO ASCII MODE>>                        01860000
     DITP(TERMCHR) := %15;  <<RESET TERMCHR TO CARRIAGE RTN>>           01865000
     DITP(MXNULL) := -30;                                               01870000
     TOS := SUCCESSFUL;                                                 01875000
    GO IODONE;                                                          01880000
$PAGE "PTRDR0-COMPLETION SECT: CHK STATUS & RETURN IOCB"                01885000
COMP:                                                                   01890000
                                                                        01895000
<<CHECK FLG TO SEE WHAT HAPPENED>>                                      01900000
                                                                        01905000
   IF DITP(FLG) = TOF THEN                                              01910000
      BEGIN <<TAPE OUT FLAG, BINARY MODE>>                              01915000
      TOS:=HDWEOF;                                                      01920000
      GOTO IODONE;                                                      01925000
      END;                                                              01930000
   IF DITP(FLG) = WAITF THEN GO NEW;                                    01935000
   IF DITP(FLG) = DELF THEN GO NEW;                                     01940000
   IF DITP(FLG)=TRBLF THEN GO TRANSERR;                                 01945000
   IF DITP(FLG)=EOTF THEN                                               01950000
    BEGIN  IF DITP(MSK)=%177 THEN BEGIN                                 01955000
      TOS:=HDWEOF; GO IODONE; END ELSE GO NTRDY;                        01960000
    END;                                                                01965000
                                                                        01970000
<< DETERMINE NUMBER OF WORDS TRANSFERRED                            >>  01975000
                                                                        01980000
   TOS := -DITP(CNT);                                                   01985000
   IF IOQP(QWBCT) >= 0 THEN                                             01990000
    BEGIN  <<REQUEST WAS FOR WORDS>>                                    01995000
     TOS := -(TOS & ASR(1));  <<ROUND UP>>                              02000000
     IF LOGICAL(DITP(CNT)) THEN                                         02005000
      BEGIN  <<ODD # OF BYTES TRANSMITTED>>                             02010000
       TOS:=DITP(BANKA);                                                02015000
       TOS:=DITP(ADDR);                                                 02020000
       ASSEMBLE(LSEA);                                                  02025000
       TOS.(8:8):=" ";     <<BLANK LAST BYTE>>                          02030000
       ASSEMBLE(SSEA; DDEL);  <<PUT IT BACK>>                           02035000
      END;                                                              02040000
    END;                                                                02045000
     IOQP(QWBCT):=TOS;                                         <<00.02>>02050000
   GO WELLDONE;                                                         02055000
INVALIDCNTRL:                                                           02060000
   TOS := BADCNTRL;                                                     02065000
   GO IODONE;                                                           02070000
TRANSERR:                                                               02075000
   DITP(DSERR):= [8/1,8/DLOGERROR];  <<SET LOG COUNT & INDEX>> <<01334>>02080000
   DITP(DLOGERROR):= DITP(DSTAT);         <<LOG ERROR>>        <<01334>>02085000
   TOS := XFERERR;                                                      02090000
   GO IODONE;                                                           02095000
$PAGE "PTRDR0-EXITS:  GOOD,BAD, AND INDIFFERENT"                        02100000
WAIT:                                                                   02105000
   DITP(FLG) := WAITF;                                                  02110000
   TOS := DRTN;                                                         02115000
   TOS := RESET;                                                        02120000
   ASSEMBLE(CIO 1);                                                     02125000
   TOS := NOTRDYWT;                                                     02130000
   TOS := WNEW;                                                         02135000
   GO OUT;                                                              02140000
WELLDONE:                                                               02145000
   IF DITP(MSK) <> %377 THEN                                            02150000
    BEGIN  <<ASCII MODE>>                                               02155000
     EOFCHECK(IOQP,UBUF,DITP(COUNT),IF DITP(MSK)=%177 THEN 1 ELSE -1);  02160000
     IF <> THEN                                                         02165000
     BEGIN  <<EOF FOUND>>                                               02170000
       TOS:=ABUF;                                                       02175000
       TOS:=UBUF;                                                       02180000
       TOS:=-(DITP(COUNT));                                             02185000
       TOS:=TOS&ASR(1);  <<SET TO WORD COUNT>>                          02190000
       ASSEMBLE(MABS);                                                  02195000
       DITP(FLG):=DEOF;                                                 02200000
       MSTATE:=ENDIO;                                                   02205000
       RETURN;                                                          02210000
     END;                                                               02215000
    END;                                                                02220000
    TOS:=SUCCESSFUL;                                           <<00.05>>02225000
IODONE:                                                                 02230000
   DITP(COUNT):=0;                                             <<00.06>>02235000
   MASTERCLEAR(DITP);                                                   02240000
   TOS := ENDIO;                                                        02245000
   TOS := DRTN;                                                         02250000
   TOS:= 2;  <<ENABLE INTS>>                                            02255000
   ASSEMBLE(CIO 1);                                                     02260000
   DEL;                                                                 02265000
OUT:                                                                    02270000
   MSTATE :=TOS;                                                        02275000
   STATUS:=TOS;                                                         02280000
   RETURN;                                                              02285000
END  <<PTRDVR >>  ;                                                     02290000
$PAGE                                                                   02295000
                                                                        02300000
$PAGE "PTRDR0-'DUMMY' OUTER BLOCK GIVES CONFIGURATION DATA"             02305000
 ASSEMBLE(PCAL SIODM;      <<MONITOR>>                                  02310000
          PCAL PTRDVR;     <<INITIATOR>>                                02315000
          PCAL PTRDVR;     <<COMPLETOR>>                                02320000
          CON  0;                                                       02325000
          PCAL INITZ;      <<INITIALIZATION>>                           02330000
          CON  1;          <<I INTERRUPT HANDLER>>                      02335000
          PCAL PTRIP);     <<INTERRUPT HANDLER>>                        02340000
END  << IOPTRD0  >> ;.............................................      02345000
