$CONTROL MAP,CODE,USLINIT                                               00010000
<<IOPLOT0 - MODULE 15>>                                                 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
                                                                        00060000
                                                                        00065000
                                                                        00070000
                                                                        00075000
                                                                        00080000
$CONTROL PRIVILEGED,UNCALLABLE                                          00085000
$THIRTY                                                                 00090000
$TITLE "30226A PLOTTER INTERFACE DRIVER"                                00095000
                                                                        00100000
                                                                        00105000
                                                                        00110000
DRIVER REQUEST CODES:                                                   00115000
                                                                        00120000
    1 - WRITE                                                           00125000
    2 - OPEN FILE                                                       00130000
    3 - CLOSE FILE                                                      00135000
    4 - CLOSE DEVICE                                                    00140000
    5 - RETURN DEVICE SUBTYPE                                           00145000
                                                                        00150000
                                                                        00155000
                                                                        00160000
                                                                        00165000
BEGIN                                                                   00170000
    EQUATE                                                              00175000
         QDSTN        = 4,       <<INDEX INTO IOQ-DST#>>                00180000
         QFUNC        = 6,       <<INDEX INTO IOQ-FUNCT CODE>>          00185000
         QPAR1        = 8,       <<INDEX INTO IOQ-PARAM #1>>            00190000
         QPAR2        = 9,       <<INDEX INTO IOQ-PARAM #2>>            00195000
         QMISC        = 3,       <<INDEX INTO IOQ-INTERNAL FLAGS>>      00200000
         QWBCNT       = 7,       <<INDEX INTO IOQ-WORD/BYTE CNT>>       00205000
         QFLAG        = 0,       <<INDEX INTO IOQ-FLAGS>>               00210000
         QLDEV        = 2,       <<INDEX INTO IOQ-LOG DEV#>>            00215000
         QSTAT        =10,       <<INDEX INTO IOQ-STATUS>>              00220000
         DFLAG        = 0,       <<INDEX INTO DIT-FLAGS>>               00225000
         DLDEV        = 3,       <<INDEX INTO DIT-LOG DEV#>>            00230000
         DSTAT        = 6,       <<INDEX INTO DIT-STATUS>>              00235000
         DACCESS      = 8,       <<INDEX INTO DIT-ACCESS TYPE>>         00240000
         WRITE        = 1,       <<FUNCTION-WRITE>>                     00245000
         OPEN         = 2,       <<FUNCTION-FILE OPEN>>                 00250000
         CLOSE        = 3,       <<FUNCTION-FILE CLOSE>>                00255000
         DEVCLOSE     = 4,       <<FUNCTION-DEVICE CLOSE>>              00260000
         CNTRL        = %40000,  <<SIO CNTRL ORDER>>                    00265000
         JUMP         = 0,       <<SIO UNCOND JUMP>>                    00270000
         SETBANK      = %14000,  <<SIO SET BANK>>                       00275000
         SIOEND       = %34000,  <<SIO END ORDER>>                      00280000
         COMPLETION   = 3,       <<MONITOR STATE-COMPLETION>>           00285000
         ENDIO        = 5,       <<MONITOR STATE-END OF REQUEST>>       00290000
         REINIT       = %7,      <<MONITOR STATE-REINIT ON INTRP>>      00295000
         UNITFAIL     = %54,     <<STATUS RET-UNIT FAIL>>               00300000
         INVALID      = 4,       <<STATUS RET-INV FUNC>>                00305000
         XFERR        = %14,     <<STATUS RET=TRANSFERR ERR>>           00310000
         TIMEOUT      = %34,     <<STATUS RET=TIMEOUT>>                 00315000
         LIMITSW      = %143,    <<STATUS RET=LIMIT SW REACHED>>        00320000
         NTRDY        = %100,    <<STATUS RET=NOT RDY>>                 00325000
         SUCCESS      = 1,       <<STATUS RET=SUCCESSFUL  >>   <<02654>>00330000
         MACC         = %123,    <<STATUS RETURN-MULTIPLE ACCESS>>      00335000
         ABORTED      = %33,     <<STATUS RETURN-I/0 ABORTED>>          00340000
         PFABORT      = %63,     <<STATUS RETURN-PWR FAIL ABORT>>       00345000
         CLEAR        = %040000, <<CLEAR ALL INTERRUPTS>>               00350000
         MSTRCLEAR    = %100000, <<MASTER CLEAR>>                       00355000
         SYSDB        = %1000,   <<SYSTEM DB>>                          00360000
         SYSSBUF      = 6,       <<SYS BUF TABLE INDEX>>                00365000
         WNEW         = %7,      <<REINITIATE ON INTERRUPT>>            00370000
         CALLCMPLT    = %13,     <<CALL CMPLTR ON INTRPT>>              00375000
         BADCNTRL     = %3,      <<INVALID CONTROL FUNCTION>>           00380000
         BADFUNC      = %5,      <<INVALID FUNCTION CODE>>              00385000
         XFERERR      = %14,     <<TRANSFERR ERROR-STATUS>>             00390000
         SYSLPDT      = %10,     <<LPDT POINTER INDEX>>                 00395000
         DITSIZE      = 10,      <<DIT SIZE>>                           00400000
         SIOSIZE      =30,       <<SIO PGM SIZE>>                       00405000
         SIOSIZED2    =SIOSIZE/2,<<SIO PGM SIZE/2 FOR INITIAL>><<01300>>00410000
         SIOWR1       = %67777,  <<SIOWR 1 WORD>>                       00415000
         SIOWR2       = %60000,  <<SIOWR 0 CNT>>                        00420000
          TERMI       = 0;        <<TERMINATOR>>                        00425000
                                                                        00430000
  DEFINE                                                                00435000
       ABS            = ABSOLUTE#,                                      00440000
       DISABLE        = ASSEMBLE(SED 0)#,                               00445000
       ENABLE         = ASSEMBLE(SED 1)#,                               00450000
       PFAILB         = (11:1)#,                                        00455000
       IAK            = (8:1)#,                                         00460000
       EOF            = (8:2)#,   <<EOF FIELD IN LPDT>>                 00465000
       DEOF           =DITP(DACCESS).(12:1)#,                           00470000
       STATUS         =IOQP(QSTAT).(8:8)#,                              00475000
       DACCP          =DITP(DACCESS)#,                                  00480000
       MSGDONE        =IOQP(QFLAG)#,   <<MESSAGE DONE FLG>>             00485000
       SBUF           =IOQP(QFLAG).(3:1)#,  <<SYS BUFFER FLAG>>         00490000
       QMISCP         =IOQP(QMISC)#,                                    00495000
       TERMD          = 0#;                                             00500000
                                                                        00505000
                                                                        00510000
                                                                        00515000
                                                                        00520000
<< DIT DEFINITION AND DRIVER LINKAGE AREA >>                            00525000
                                                                        00530000
BYTE ARRAY CONFIG(0:7)=DB:=                                             00535000
DITSIZE,1,0,0,0,0,SIOSIZED2,0;                                 <<01300>>00540000
                                                                        00545000
ARRAY DITAB(1:DITSIZE)=DB:=                                             00550000
0,0,0,0,0,0,0,0,0,0;                                                    00555000
                                                                        00560000
ARRAY SIOA(1:SIOSIZE)=DB:=                                              00565000
0,0,0,0,0,0,0,0,0,0,                                                    00570000
0,0,0,0,0,0,0,0,0,0,                                                    00575000
0,0,0,0,0,0,0,0,0,0                                                     00580000
                                                                        00585000
;     <<TERMINATOR >>                                                   00590000
PROCEDURE EOFCHECK(IOQP,BUFR,CNT,HARDCHK);                              00595000
  VALUE IOQP,BUFR,CNT,HARDCHK;                                          00600000
  DOUBLE BUFR;                                                          00605000
  POINTER IOQP;                                                         00610000
  INTEGER CNT,HARDCHK;                                                  00615000
  OPTION EXTERNAL;                                                      00620000
                                                                        00625000
PROCEDURE GIP;                                                          00630000
  OPTION EXTERNAL;                                                      00635000
                                                                        00640000
PROCEDURE HELP;                                                         00645000
  OPTION EXTERNAL;                                                      00650000
                                                                        00655000
PROCEDURE LDEVNOTRDY(DITP);                                    <<0U.EB>>00660000
   VALUE DITP; POINTER DITP; OPTION EXTERNAL;                  <<0U.EB>>00665000
                                                                        00670000
PROCEDURE SIODM(DITP,FLAGS);                                            00675000
  VALUE DITP,FLAGS;                                                     00680000
  LOGICAL FLAGS;                                                        00685000
  POINTER DITP;                                                         00690000
  OPTION EXTERNAL;                                                      00695000
                                                                        00700000
                                                                        00705000
PROCEDURE MASTERCLEAR(DITP);                                            00710000
  ARRAY DITP;                                                           00715000
  OPTION EXTERNAL;                                                      00720000
                                                                        00725000
                                                                        00730000
                                                                        00735000
PROCEDURE CHECKINDEX(INDEX,TABLE);                                      00740000
  VALUE INDEX,TABLE;                                                    00745000
  INTEGER INDEX;                                                        00750000
  INTEGER POINTER TABLE;                                                00755000
  OPTION EXTERNAL;                                                      00760000
                                                                        00765000
                                                                        00770000
                                                                        00775000
PROCEDURE STARTIO(DITP,SIOP,QFLAG);                                     00780000
   VALUE DITP,SIOP,QFLAG;                                               00785000
   POINTER DITP,SIOP;                                                   00790000
   LOGICAL QFLAG;                                                       00795000
   OPTION EXTERNAL;                                                     00800000
                                                                        00805000
                                                                        00810000
                                                                        00815000
PROCEDURE IOFAILURE(DRTN,DITP);                                         00820000
   VALUE DRTN;                                                          00825000
   INTEGER DRTN;                                                        00830000
   ARRAY DITP;                                                          00835000
   OPTION EXTERNAL;                                                     00840000
                                                                        00845000
                                                                        00850000
PROCEDURE INITZ(IDITP);                                                 00855000
   INTEGER ARRAY IDITP;                                                 00860000
   BEGIN                                                                00865000
<<  DUMMY    >>                                                         00870000
   END;                                                                 00875000
INTEGER PROCEDURE PLOTDRVR(IOQP,DITP,BANK,BUFADR,SIOP,DRTN);            00880000
  VALUE IOQP,DITP,BANK,BUFADR,SIOP,DRTN;                                00885000
  INTEGER BANK,DRTN,BUFADR;                                             00890000
  INTEGER POINTER IOQP,DITP,SIOP;                                       00895000
                                                                        00900000
                                                                        00905000
  BEGIN                                                                 00910000
                                                                        00915000
    DOUBLE UBUF=BANK;                                                   00920000
    INTEGER MSTATE=PLOTDRVR,                                            00925000
            S0=S-0,                                                     00930000
            S1=S-1,                                                     00935000
            S2=S-2,                                                     00940000
            S3=S-3,                                                     00945000
            S4=S-4,                                                     00950000
            S5=S-5,                                                     00955000
            X=X,                                                        00960000
            FUNC,                                                       00965000
            P1,                                                         00970000
            P2,                                                         00975000
            MODE,                                                       00980000
            I,K,J,L,M,N,CNT,IX,                                         00985000
            MAXBUFSIZE,                                                 00990000
            BNKNO,                                                      00995000
            TEMP,                                                       01000000
            FWORD,                                                      01005000
            WBCNT;                                                      01010000
    DEFINE LDEV   = IOQP(QLDEV).(8:8)#,                                 01015000
           STAT1    = DITP(DSTAT)#,                                     01020000
           SIOPBASE = @SIOP+SYSDB#;                                     01025000
                                                                        01030000
                                                                        01035000
                                                                        01040000
        INTEGER POINTER SBUFR=DB+SYSSBUF,BADR;                          01045000
        DOUBLE POINTER LPDTD = DB+SYSLPDT;                              01050000
        DOUBLE POINTER DSIOP = SIOP;                                    01055000
        LOGICAL ODDBYTE,ODDONE;                                         01060000
                                                                        01065000
                                                                        01070000
                                                                        01075000
SUBROUTINE DOSIO;                                                       01080000
  BEGIN  <<DO START IO>>                                                01085000
    STARTIO(DITP,SIOP,1);                                               01090000
    IF <> THEN                                                          01095000
    BEGIN                                                               01100000
      IOFAILURE(DRTN,DITP);   <<NON RESPONDING DEVICE>>                 01105000
    END;                                                                01110000
    TOS:=%10;                                                           01115000
    TOS:=CALLCMPLT;                                                     01120000
    GO TO BEND;                                                         01125000
  END;  <<START I/O>>                                                   01130000
                                                                        01135000
                                                                        01140000
                                                                        01145000
                                                                        01150000
                                                                        01155000
SUBROUTINE SETFLAGS;                                                    01160000
  BEGIN                                                                 01165000
    FUNC:=IOQP(QFUNC);     <<GET FUNCTION CODE>>                        01170000
    P1:=IOQP(QPAR1);       <<GET PARAMETER 1>>                          01175000
    P2:=IOQP(QPAR2);       <<GET PARAMETER 2>>                          01180000
    ODDBYTE:=FALSE;                                                     01185000
    TOS:=IOQP(QWBCNT);  <<GET WORD BYTE COUNT>>                         01190000
    ASSEMBLE(DUP,DUP);                                                  01195000
    IF TOS.(0:1)=1 THEN                                                 01200000
    BEGIN   <<NEGATIVE COUNT IS IN BYTES>>                              01205000
      IF TOS.(15:1)=1 THEN ODDBYTE:=TRUE                                01210000
      ELSE ODDBYTE:=FALSE;                                              01215000
      WBCNT:=(-TOS)/2;                                                  01220000
      IF ODDBYTE THEN                                                   01225000
      BEGIN                                                             01230000
        IF WBCNT=0 THEN                                                 01235000
        BEGIN                                                           01240000
          WBCNT:=1;                                                     01245000
          ODDONE:=TRUE;                                                 01250000
        END;                                                            01255000
      END;                                                              01260000
    END                                                                 01265000
    ELSE                                                                01270000
    BEGIN                                                               01275000
    WBCNT:=TOS;<<COUNT IS IN WORDS>>                                    01280000
    DEL;                                                                01285000
    END;                                                                01290000
  END;  <<SETFLAGS>>                                                    01295000
                                                                        01300000
                                                                        01305000
SUBROUTINE SETSYSBUF;                                                   01310000
  BEGIN                                                                 01315000
    CHECKINDEX(@SBUFR+SYSDB-BUFADR,SBUFR);                              01320000
    IF WBCNT > 1024 THEN GO BF;                                         01325000
    CNT:=WBCNT;                                                         01330000
    WHILE CNT>0 DO                                                      01335000
    BEGIN                                                               01340000
      IF CNT >128 THEN                                                  01345000
      BEGIN                                                             01350000
        TOS:=%160000;   <<WR CHAINED>>                                  01355000
        TOS.(4:12):=-128;  <<SET FULL COUNT>>                           01360000
        TOS:=BUFADR;                                                    01365000
        DSIOP(I):=TOS;     <<STORE IN SIOPGM>>                          01370000
        I:=I+1;                                                         01375000
        CNT:=CNT-128;                                                   01380000
      END                                                               01385000
      ELSE                                                              01390000
      BEGIN  <<CNT IS 128 OR LESS>>                                     01395000
        TOS:=%60000;  <<WR UNCHAINED>>                                  01400000
        TOS.(4:12):=-CNT;  <<SET WR COUNT>>                             01405000
        TOS:=BUFADR;                                                    01410000
        DSIOP(I):=TOS;                                                  01415000
        I:=I+1;                                                         01420000
        CNT:=0;                                                         01425000
      END;                                                              01430000
       <<GET NEXT ADDRESS>>                                             01435000
      IF CNT > 0 THEN                                                   01440000
      BEGIN                                                             01445000
      CHECKINDEX(ABS(BUFADR-1),SBUFR);                                  01450000
      BUFADR:=ABS(X)+@SBUFR+SYSDB;                                      01455000
      END;                                                              01460000
    END;                                                                01465000
  END;  <<SETSYSBUF>>                                                   01470000
                                                                        01475000
                                                                        01480000
                                                                        01485000
                                                                        01490000
$PAGE                                                                   01495000
<<  I  N  I  T  I  A  T  O  R    >>                                     01500000
     DISABLE;     <<DISABLE INTERRUPTS>>                                01505000
     TOS:=IOQP;                                                         01510000
     DEL;                                                               01515000
     IF < THEN                                                          01520000
     BEGIN     <<I/O HAS BEEN ABORTED>>                                 01525000
       ENABLE;                                                          01530000
       IF MSTATE = COMPLETION THEN                                      01535000
       MASTERCLEAR(DITP);                                               01540000
       IF IOQP.PFAILB =1 THEN TOS:=PFABORT ELSE TOS:=ABORTED;           01545000
       TOS:=ENDIO;                                                      01550000
       GO TO BEND;                                                      01555000
     END;                                                               01560000
     ENABLE;                                                            01565000
     IF MSTATE = COMPLETION THEN GO COMPLETOR;                          01570000
     TOS:=DRTN;     <<ENABLE DEV STATUS,CLEAR INTERRUPTS>>              01575000
     TOS:=CLEAR;                                                        01580000
     ASSEMBLE (CIO 1; DEL);                                             01585000
     IF <> THEN                                                         01590000
     BEGIN                                                              01595000
UFAIL:                                                                  01600000
       IOFAILURE(DRTN,DITP);   <<NON RESPONDING DEVICE>>                01605000
      TOS:=UNITFAIL;                                                    01610000
      TOS:=ENDIO;                                                       01615000
FAIL:                                                                   01620000
      MASTERCLEAR(DITP);                                                01625000
      GO TO BEND;                                                       01630000
    END;                                                                01635000
    SETFLAGS;                                                           01640000
    IF P1.(0:1)=1 THEN HELP;                                            01645000
IF FUNC=WRITE THEN                                                      01650000
$PAGE                                                                   01655000
<<  I N I T I A T O R    W R I T E               >>                     01660000
    BEGIN                                                               01665000
                                                                        01670000
FORMSIOP:                                                               01675000
      I:=0;                                                             01680000
      TOS:=SETBANK;                                                     01685000
      TOS:=BANK;                                                        01690000
      DSIOP(I):=TOS;                                                    01695000
      I:=I+1;                                                           01700000
      IF SBUF =1 THEN SETSYSBUF                                         01705000
      ELSE                                                              01710000
      BEGIN     <<SET UP WRITE CMDS>>                                   01715000
        TOS:=WBCNT;     <<GET COUNT>>                                   01720000
        IF < THEN GO BF;     <<INVALID>>                                01725000
        IF = THEN GO DOCIO;                                             01730000
        K:=BUFADR;     <<BUFFER ADDRESS>>                               01735000
AGAIN:                                                                  01740000
        IF S0 > %7777 THEN                                              01745000
        J:=%7777                                                        01750000
        ELSE                                                            01755000
        J:=S0;     <<J=WORD COUNT FOR THIS WRITE>>                      01760000
        TOS:=TOS-J;  <<# WORDS REMAINING>>                              01765000
        TOS:=%67777 LAND LOGICAL(-J);                                   01770000
        TOS:=K;                                                         01775000
        DSIOP(I):=TOS;                                                  01780000
        I:=I+1;                                                         01785000
        IF S0 > 0 THEN                                                  01790000
        BEGIN     <<MORE WORDS IN BUFFER>>                              01795000
          K:=K+J;  <<BUFFER ADDRESS>>                                   01800000
          GO AGAIN;                                                     01805000
        END;                                                            01810000
      END;                                                              01815000
      TOS:=SIOEND;                                                      01820000
      TOS:=-1;                                                          01825000
      DSIOP(I):=TOS;                                                    01830000
      I:=I+1;                                                           01835000
DOCIO:                                                                  01840000
      MASTERCLEAR(DITP);                                                01845000
      TOS:=DRTN;                                                        01850000
      ASSEMBLE(TIO 0);                                                  01855000
      IF <> THEN GO UFAIL;                                              01860000
      X:=I;                                                             01865000
      IF <= THEN                                                        01870000
      BEGIN     <<NO SIO PGM OR STAT REQ>>                              01875000
        IF < THEN                                                       01880000
        STAT1:=TOS;                                                     01885000
        GO WELLDONE;                                                    01890000
      END;                                                              01895000
      ASSEMBLE (DEL; TIO 0);                                            01900000
      IF <> THEN GO UFAIL;                                              01905000
      IF (TOS&LSR(6)) THEN                                              01910000
      BEGIN     <<PLOTTER NOT READY>>                                   01915000
        LDEVNOTRDY(DITP);                                      <<0U.EB>>01920000
        TOS:=%30;                                                       01925000
        TOS:=WNEW;                                                      01930000
        GO BEND;                                                        01935000
      END;                                                              01940000
    DOSIO;                                                              01945000
    END;     <<WRITE>>                                                  01950000
    IF FUNC = OPEN THEN                                                 01955000
$PAGE                                                                   01960000
<<  I N I T I A T O R    O P E N                  >>                    01965000
    BEGIN     <<FILE OPEN>>                                             01970000
      MASTERCLEAR(DITP);                                                01975000
      GO WELLDONE;                                                      01980000
    END;                                                                01985000
    IF FUNC = CLOSE THEN                                                01990000
$PAGE                                                                   01995000
<<  I N I T I A T O R    C L O S E                 >>                   02000000
    BEGIN     <<FILE CLOSE>>                                            02005000
    GO WELLDONE;                                                        02010000
    END;     <<FILE CLOSE>>                                             02015000
    IF FUNC = DEVCLOSE THEN                                             02020000
$PAGE                                                                   02025000
<<  I N I T I A T O R    D E V I C E   C L O S E   >>                   02030000
    BEGIN     <<DEVICE CLOSE>>                                          02035000
      GO TO WELLDONE;                                                   02040000
    END;    <<DEVICE CLOSE>>                                            02045000
    IF FUNC > 4 THEN                                                    02050000
$PAGE                                                                   02055000
<<  I N I T I A T O R    I N V A L I D                >>                02060000
    BEGIN                                                               02065000
      TOS:=INVALID;                                                     02070000
BF:                                                                     02075000
      TOS:=ENDIO;                                                       02080000
      GO BEND;                                                          02085000
WELLDONE:                                                               02090000
      TOS:=1;     <<ENDING STAT OK>>                                    02095000
      TOS:=ENDIO;                                                       02100000
BEND:                                                                   02105000
      MSTATE:=TOS;     <<SET MONITOR STATE>>                            02110000
      STATUS:=TOS;     <<SET STATUS>>                                   02115000
                                                                        02120000
      RETURN;                                                           02125000
    END;     <<INITIATOR>>                                              02130000
                                                                        02135000
                                                                        02140000
                                                                        02145000
$PAGE                                                                   02150000
<<        C  O  M  P  L  E  T  O  R        >>                           02155000
                                                                        02160000
                                                                        02165000
COMPLETOR:                                                              02170000
   <<TEST FOR LIMIT SW IGNORED>>                                        02175000
   IF STAT1.(14:1) =1 THEN                                              02180000
   BEGIN                                                                02185000
     TOS:=LOGICAL(STAT1) LAND %100100;                                  02190000
     IF = THEN                                                          02195000
     BEGIN  <<ONLY LIMIT SW>>                                           02200000
       TOS:=%10;                                                        02205000
       TOS:=CALLCMPLT;                                                  02210000
       GO TO BEND;                                                      02215000
     END;                                                               02220000
   END;                                                                 02225000
   TOS:=DRTN;                                                           02230000
   ASSEMBLE(TIO 0);                                                     02235000
   IF < THEN GO UFAIL;                                                  02240000
   TOS:=CLEAR ;  <<CLEAR INTERRUPTS>>                                   02245000
   ASSEMBLE(CIO 2);                                                     02250000
   IF <> THEN GO UFAIL;                                                 02255000
   STAT1:=TOS;                                                          02260000
   IF STAT1.(11:1) =1 THEN                                              02265000
   BEGIN     <<TRANSFER ERROR INTERRUPT>>                               02270000
     TOS:=XFERERR;                                                      02275000
     TOS:=ENDIO;                                                        02280000
     GO FAIL;                                                           02285000
   END;                                                                 02290000
   IF STAT1.(12:1) =1 THEN                                              02295000
   BEGIN     <<TIMEOUT>>                                                02300000
     TOS:=TIMEOUT;                                                      02305000
     TOS:=ENDIO;                                                        02310000
     GO FAIL;                                                           02315000
   END;                                                                 02320000
   TOS:=LOGICAL (STAT1) LAND %100100;                                   02325000
   IF < THEN GO WELLDONE ELSE                                           02330000
   BEGIN     <<NOT READY>>                                              02335000
NOTRDY:                                                                 02340000
     LDEVNOTRDY(DITP);                                         <<0U.EB>>02345000
     MASTERCLEAR(DITP);                                                 02350000
     TOS:=%30;                                                          02355000
     TOS:=REINIT;                                                       02360000
     GO BEND;                                                           02365000
   END;                                                                 02370000
   GO WELLDONE;                                                         02375000
                                                                        02380000
IF FUNC < 5 THEN GO WELLDONE;                                           02385000
$PAGE                                                                   02390000
<<  C O M P L E T O R  I N V A L I D  >>                                02395000
                                                                        02400000
<< IF YOU GET HERE FUNCTION IS INVALID.SHOULD NOT HAPPEN>>              02405000
INVFUNC:                                                                02410000
   TOS:=INVALID;                                                        02415000
   TOS:=ENDIO;                                                          02420000
   GO BEND;                                                             02425000
                                                                        02430000
END;     <<PLOTDRVR>>                                                   02435000
<< D R I V E R  L I N K A G E  A R E A >>                               02440000
                                                                        02445000
ASSEMBLE(                                                               02450000
         PCAL SIODM;          <<MONITOR>>                               02455000
         PCAL PLOTDRVR;       <<INITIATOR>>                             02460000
         PCAL PLOTDRVR;       <<COMPLETOR>>                             02465000
         CON 0;               <<NO I/O PROCESS>>                        02470000
         PCAL INITZ;          <<INITIALIZATION>>                        02475000
         CON 1;               <<1 INTERRUPT HANDLER>>                   02480000
         PCAL GIP);           <<INTERRUPT HANDLER>>                     02485000
end.                                                           <<02654>>02490000
