ASMB,R,B,L,T,C
      HED        *** ASYNCHRONOUS CARD READER DRIVER ACR01 ***
      NAM ACR01,6 
      ENT ACR01,H7260 
      EXT .ENTR,EXEC
* 
* 
*     LOGICAL DRIVER FOR THE 7260A CARD READER ***
* 
* 
LU    NOP 
H7260 NOP 
LINE  NOP 
IXT   NOP 
* 
*     INITIALIZATION SECTION ***
* 
* 
ACR01 NOP 
      JSB .ENTR     GET PARAMETERS
      DEF LU        FROM CALLING PROGRAM
      LDB IXT       SET EXTENSION ADDRESS 
      STB X1        FOR EXEC
      ADB P04$      *EQT22
      LDA READ      READ SECTION ENTRY POINT
      STA B,I       CONFIGURE EQT 22
      INB           *EQT23
      LDA WRITE     WRITE SECTION ENTRY POINT 
      STA B,I       CONFIGURE EQT23 
      INB           *EQT24
      LDA CONTL     CONTROL SECTION ENTRY POINT 
      STA B,I       CONFIGURE EQT24 
      LDA IXT       SET UP EQT ADDRESSES
      JSB SETQI     OF EXTENSION EQT
      LDA IQT18,I   GET EQT EXTENSION LENGTH
      LDB D28       PRIME FOR TRACE TABLE 
      CPA D31       TRACE SPECIFIED ? 
      CLB           NO - CLEAR POINTER
      STB IQT48,I   SET UP INDEX
      LDA LINE,I    GET THE PLEX DATA 
      RAR,RAR       ROTATE
      RAR,SLA       IS IT RIGHT SPEED ? 
      RSS           YES - GO AHEAD
      JMP BAD       NO - REJECT 
      AND P17$      MASK OUT JUNK 
      STA B         SAVE THE BAUD RATE
      BLF,BLF       ROTATE
      IOR B         SET UP INPUT RATE 
      STA IQT21,I   = OUTPUT RATE 
      BLF,BLF       RESET BAUD RATE 
      CPB P01$      IS IT 110 BPS ? 
      CLA,INA,RSS   YES - SET TWO STOP BITS 
      CLA           NO - ONLY ONE 
      RAL,RAL       ROTATE A
      INA           EVEN - SET A REG. 
      RAL,ALF       ROTATE AGAIN
      IOR P07$      SET UP CHARACTER LENGTH 
      ALF,RAR       PRE-ROTATE OF 3 
      LDB LINE,I    GET LINE PLEX 
      SLB           WITH ECHO ? 
      JMP BAD       YES - REJECT
      RRR 3         NO - SET UP 15/14 
      STA IQT19,I   SAVE FINAL WORD 
      LDB P20.$     SET UP
      STB IQT41,I   "HOT 7260". 
      LDA LU,I      GET LOGICAL UNIT
      AND P77$      AND CONFIGURE 
      ADA P100$     EXEC CALL TO
      STA LU        PHYSICAL DRIVER 
      LDA SPEC      PASS ADDRESS OF 
      STA IQT25,I   SPECIAL CHAR. ADDRESS 
      LDA N80$      INITIALIZE A
      STA IQT45,I   COLUMN REGISTER 
* 
      JSB EXEC      CALL EXEC 
      DEF *+5       TO CALL THE 
      DEF P03$      PHYSICAL DRIVER 
      DEF LU        LOGICAL UNIT
      DEF P00$      DUMMY 
X1    DEF *         EXTENSION ADDR. 
      AND P377$     PRESERVE STATUS 
      JMP ACR01,I   RETURN TO THE USER
* 
BAD   LDA P01$      A=1 FOR 
      JMP ACR01,I   REJECTING 
      SKP 
* 
*     CONTROL REQUESTS PROCESSING *** 
* 
* 
CONTL DEF *+1       CONTROL SECTION ADDRESS 
      NOP 
      JSB SETQ      SET UP EQT'S ADDRESSES
      CLA 
      JSB LOG       LOG TO TRACE TABLE
      JSB CLEAR     CLEAR FLAGS 
      LDA EQT9,I    GET REQUEST CODE
      AND P7700     MASK OUT JUNK 
      CPA P200$     IS IT LINE OPEN ? 
      JMP OPEN      YES - 
      CPA P4000     IS IT SELECT HOPPER ? 
      JMP CNT40     YES 
      CPA P4100     IS IT BELL ?
      JMP CNT41     YES 
      CPA P4200     IS IT PASS
      JMP LNGTH     # OF COLUMNS ?
      CPA P4300     STOP COMMAND ?
      JMP STOP      YES 
      CPA P4400     IS IT FOR "HOT 7260" ?
      JMP TCS1      YES 
      CPA P4500     IS IT CLEAR "HOT" ? 
      JMP TCS2      YES 
      CPA P4600     IS IT MID CARD TERMINATION ?
      JMP MID       YES - 
CNRT3 CLA           NO - OTHER
CNRT1 ISZ CONTL+1   AND EXECUTE 
      JMP CONTL+1,I CONTINUATION
*     HOPPER SELECT *** 
CNT40 LDA P200$     FLAG=BIT 7 OF 
SWRT  STA EQT39,I   EQT 39
      LDA BWRT$     WRITE CODE FOR PHY. 
      IOR P12$      INSERT LF 
      JMP CNRT1     AND START A WRITE OP. 
*     BELL ***
CNT41 LDA P04$      FLAG=BIT 2
      JMP SWRT      AND START WRITING 
BAD1  ISZ EQT4,I    STATUS=ILL. REQUEST 
      JMP CONTL+1,I AND COMPLETION
*     NUMBER OF COLUMNS *** 
LNGTH LDA EQT10,I   GET # OF
      ADA N97$      COLUMNS 
      SSA,RSS       IF MORE THAN
      JMP BAD1      96 - REJECT 
      LDA EQT10,I   FETCH AGAIN 
      CMA,INA       IF ZERO OR
      SSA,RSS       NEGATIVE
      JMP BAD1      REJECT
      STA EQT45,I   SET UP VALUE
      JMP CONTL+1,I COMPLETE
*     STOP COMMAND ***
STOP  LDA P400$     SET FLAG BIT
      JMP SWRT      AND START A WRITE 
*     TCS PROCESSING ***
TCS1  LDA EQT41,I    SET FLAG 
      IOR P20.$     IN EQT41
      JMP *+3       FOR "HOT" 
TCS2  LDA EQT41,I   CLEAR FLAG
      AND P1757     FOR "HOT" 
      STA EQT41,I   IN EQT41,I
      JMP CONTL+1,I COMPLETION. 
*     MID CARD TERMINATION ***
MID   LDB EQT10,I    GET PARAMETERS 
      LDA EQT41,I    GET FLAG WORD
      RAL,CLE,RAL    ROTATE RIGHT TWO 
      SZB            CHECK PARAM. 
      CCE            SET FLAG 
      ERA,RAR        ROTATE LEFT TWO
      STA EQT41,I    STORE IT 
      JMP CONTL+1,I  COMPLETION 
*     LINE OPEN PROCESSING ***
OPEN  LDA EQT10,I    GET LINE OPEN PARAM. 
      RAL,CLE,ERA    CLEAR AUTO-SPEED OPTION
      STA EQT10,I    STORE IT BACK
      JMP CNRT3      CONTINUATION 
      SKP 
* 
*     WRITE REQUESTS PROCESSING *** 
* 
* 
WRITE DEF *+1       WRITE SECTION ADDRESS 
      NOP 
      JSB SETQ      SET UP EQT'S ADDRESSES
      LDA P02$      A=2 FOR WRITING 
      JSB LOG       LOG TO TRACE TABLE
      SSB,RSS       IS IT INITIALIZED ? 
      JMP WRIT1     NO - GO AHEAD 
      CLB,INB       YES - SET ILLEGAL 
      JSB STATS     REQUEST 
BELL1 CLA           CLEAR 
      STA EQT39,I   FLAGS 
      JMP WRITE+1,I AND COMPLETE
* 
* 
WRIT1 JSB BITCK     CHECK STATUS
      JMP WRIT2      - TIME OUT 
      JMP WRIT3      - LINE ERROR 
      NOP            - DATA ERROR 
      JSB TMCK      CLEAR TIME OUT
      LDA EQT39,I   GET FLAG WORD 
WRIT4 CLB           CLEAR A COUNTER 
      RAR,SLA       COMMAND SEND ?
      JMP X.ON      YES - GO SEND X-ON
      RAR,SLA       AND SCAN TO 
      JMP FOUND     FIND THE
      INB           COMMAND 
      JMP *-3       LOOP BACK 
FOUND ADB TADD      COMMAND TABLE 
      LDA EQT39,I   SET UP
      IOR P02$      FLAG IN 
      STA EQT39,I   EQT 39
      LDA B,I       GET COMMAND 
CNRT2 LDB TIME      NO TIME OUT CHANGE
      ISZ WRITE+1   AND KEEP ON 
      JMP WRITE+1,I OUTPUTTING
* 
X.ON  CCE,SSA       OUTPUT X-ON ? 
      JMP CHECK     NO - ALREADY DONE 
      ELA           YES - SET FLAG
      STA EQT39,I   IN EQT 39 
      LDA P21$      LOAD X-ON 
      JMP CNRT2     AND CONTINUATION
* 
CHECK RAR,CLE,ELA   CLEAR BOTH
      CLE,ELA       FLAGS 
      STA EQT39,I   IN EQT39
      AND P434$     IS IT RETRANSMIT
      SZA,RSS       DEMAND OR REJECT ?
      JMP BACK      YES - RETURN TO READ SECTION
      AND P404$     NO - MASK OUT 
      SZA           IS IT BELL OR STOP ?
      JMP BELL1     YES - COMPLETE
      LDB EQT40,I   NO - IMAGE OFF / ON 
      LDA P100$   
      RBR,SLB       GET USER'S REQUEST
      LDA P40$      AND SET UP RE X-MIT 
      STA EQT39,I   OR DEMAND . 
      JMP WRIT4     OUTPUT THE COMMAND
BACK  LDA BREAD     READ CODE 
      JMP CNRT2     AND START READING 
* 
* 
WRIT2 LDB P03$      SET THREE 
      JSB STATS     AS STATUS.
      JSB TRANS     SET TRANSMISSION LOG
      JMP WRITE+1,I COMPLETE
* 
* 
WRIT3 JSB ERRL      SET 2 SECONDS 
      CLA 
      ISZ WRITE+1   RETURN TO 
      JMP WRITE+1,I PHYSICAL DRIVER 
* 
* 
TADD  DEF *+1 
P07$  OCT 7         BELL
      OCT 24        IMAGE OFF 
P22$  OCT 22        IMAGE ON
P10$  OCT 10        RETRANSMIT
      OCT 31        DEMAND
P13$  OCT 13        REJECT
      OCT 11        STOP
* 
SPEC  DEF *+1 
      DEC -1
CR    OCT 15        CARRIAGE RETURN 
* 
TIME NOP
      SKP 
* 
* 
* 
CLEAR NOP           ENTRY POINT 
      CLB           CLEAR 
      STB EQT14,I   TRANSMISSION LOG
      LDA EQT41,I   CLEAR FIRST FLAG
      AND P760.     AND # OF
      STA EQT41,I   RE X-MIT
      RAL           SET UP A MID
      STA EQT47,I   CARD TERMINATION FLAG 
      LDA EQT45,I   INITIALIZE
      STA EQT43,I   A COUNTER.
      STB EQT39,I   FLAGS WORD
      STB TIME      TIME OUT VALUE
      STB EQT46,I   CLEAR WORD
      JSB STATS     CLEAR STATUS
      JMP CLEAR,I   RETURN
* 
* 
STATS NOP           ENTRY POINT 
      LDA EQT4,I    GET STATUS
      AND P1774     KEEP LEFT BYTE
      IOR B         MERGE STATUS
      STA EQT4,I    STORE IT
      JMP STATS,I   RETURN
* 
* 
TMCK  NOP           ENTRY POINT 
      LDA EQT39,I   GET FLAG WORD 
      RAL,CLE,RAL   ROTATE
      CLB           CLEAR TIME-OUT
      SSA           TIME-OUT IN PROGRESS ?
      INB           YES - KILL IT 
      RAL,CLE,ERA   CLEAR BIT IN
      RAR,RAR       EQT39 
      STA EQT39,I   AND 
      STB TIME      RETURN
      JMP TMCK,I
* 
* 
ERRL  NOP 
      LDB N20$      SET 2 SECONDS 
      LDA EQT39,I   AS TIME OUT 
      AND P2000     IF NO TIME
      SZA           WAS NOT ALREADY 
      CLB           RUNNING 
      STB TIME      SAVE IT 
      LDA EQT39,I   SET UP
      IOR P2000     FLAG IN 
      STA EQT39,I   EQT39 TO
      JMP ERRL,I    TWO SECONDS 
* 
* 
TRANS NOP 
      LDA EQT14,I   GET TRANSMISSION
      LDB EQT11,I   CHECK THE 
      SSB           MODE OF REQUEST 
      JMP TRANS,I   CHARACTER ? 
      INA           WORD - CONVERT
      ARS           IN WORD 
      STA EQT14,I   STORE AND 
      JMP TRANS,I   RETURN
* 
* 
BITCK NOP 
      LDB N03$      CHECK 
      RAL,SLA       BIT OF
      JMP BITCK,I   A REGISTER
      ISZ BITCK     AND 
      INB,SZB       RETURN
      JMP *-4       DEPEND ON 
      JMP BITCK,I   BIT 15-14-13
      SKP 
* 
* 
*     READ REQUESTS PROCESSING ***
* 
* 
READ  DEF *+1       READ SECTION ENTRY POINT
      NOP 
      JSB SETQ      SET UP EQT ADDRESSES
      CLA,INA       A=1 FOR READING 
      JSB LOG       LOG TO TRACE TABLE
      SSB,RSS       INITIATE ?
      JMP READ1     NO
* 
*     INITIALIZATION SECTION OF READ REQUEST ***
* 
      JSB CLEAR     YES - CLEAR FLAGS 
      LDA N10$      INITIATE TO -10 
      STA EQT13,I   A COUNTER OF RETRY
      LDB EQT9,I    GET REQUEST CODE
      BLF,CLE,RBL   ROTATE AND STUCK IN 
      ELB,RBL       BIT 10 INTO BIT 8 
      ELB,RBL       THEN, CHECK IF
      CLE,SLB       PACKED BINARY REQUEST 
      CCE           YES - SET A FLAG
      RBR,SLB,RBL   CHECK IF  
      JMP RXMIT     RETRANSMIT
      STB EQT44,I   SAVE REQUEST
OK    STB EQT40,I   TWICE 
      LDA P20$      SET IMAGE ON
      SSB           BINARY ?
      JMP BINRY     YES - GO AHEAD
      SEZ,RSS       NO - ASCII ?
      JMP ASCI1     YES 
BAD2  CLB,INB       NO - ILLEGAL REQUEST
      JSB STATS     UPDATE STATUS 
      JMP READ+1,I  COMPLETION
*     RETRANSMIT REQUEST ***
RXMIT LDA EQT44,I   FIRST OF ALL
      ALF,ALF       CHECK IF A
      RAR,SLA       PREVIOUS READ 
      RSS           HAS BEEN MADE 
      JMP BAD2      NO - REJECT 
      LDA EQT44,I   GET PREVIOUS REQUEST
      SSA           ASCII ? 
      JMP BINR      NO - WAS BINARY 
      SSB,RSS       NEW ASCII TOO ? 
      JMP OK        YES - NOTHING SPECIAL 
      LDA EQT47,I   NO - MID CARD 
      SSA           TERMINATION ? 
      JMP OK        NO - NOTHING SPECIAL
      LDA P04$      YES - BINARY AFTER
      IOR B         ASCII WITH MID CARD TERM. 
      LDB A 
      JMP OK        SET SPECIAL FLAG
BINR  SSB           NEW BINARY TOO ?
      JMP OK        YES - NOTHING SPECIAL 
      LDA P10$      NO - ASCII AFTER
      IOR B         IMAGE - SET 
      LDB A 
      JMP OK        SPECIAL FLAG
*     ASCII REQUESTS ***
ASCI1 LDB EQT11,I   CHECK THE LENGTH
      SZB,RSS       IF ZERO 
      JMP READ+1,I  COMPLETION RIGHT AWAY 
      LDA P10$      SET IMAGE OFF 
SAVE3 STA EQT39,I   IN EQT 39 
      LDA BWRT$     WRITE CODE
      IOR P12$      INSERT LF 
CONTR LDB TIME      TIME OUT PURPOSE
      ISZ READ+1    AND ASK A 
      JMP READ+1,I  CONTINUATION
*     IMAGE REQUESTS ***
BINRY LDB EQT11,I   IS IT 
      SSB           IN WORD ? 
      JMP BAD2      NO - REJECT 
      JMP SAVE3     YES - OK
* 
*     CONTINUATION SECTION OF READ REQUESTS *** 
* 
READ1 JSB BITCK     CHECK STATUS OF THE LINE
      JMP READ2      - TIME OUT 
      JMP READ3      - LINE ERROR 
      JMP READ4      - DATA ERROR 
      JSB TMCK      STOP TIME-OUT 
START LDA EQT39,I   CHECK IF
      SSA           CR WAS
      JMP CMPL1     EXPECTED
      LDA SAVA      NO - GET DATA 
      AND P177$     MASK OUT JUNK 
      STA SAVA      SAVE IT 
      LDB EQT41,I   GET FIRST DATA FLAG 
      SSB           CHECK IT
      JMP DATA2     NOT THE FIRST 
*     FIRST INTERRUPT = STATUS ***
      CLB           CLEAR A FLAG
      CPA P37$      IS IT NOT READY ? 
      LDB P02$      YES - NOT READY STATUS
      CPA P07$      IS IT HOPPER BAD
      JMP TCS3      YES - CHECK "HOT" 
      CPA P13$      IS IT REJECT BAD ?
      LDB P06$      YES . REJECT FAIL STATUS
      CPA P14$      IS IT REJECT SUCCESFUL ?
      JMP CR1       YES - GO WAIT THE CR
      CPA P22$      IS IT READY ? 
      JMP TCS3      YES - CHECK "HOT" 
      CPA P11$      IS IT PICK FAIL ? 
      JMP FAIL1     YES 
      CCE,SZB,RSS   IS IT FIRST DATA ?
      JMP DATA1     YES 
      JSB STATS     NO - WRONG STATUS 
CR1   LDA EQT39,I   SET BIT 15
      CCE           TO ONE
      RAL,ERA       TO WAIT 
      STA EQT39,I   THE CR
      JMP READ6     CONTINUATION RETURN 
TCS3  LDA EQT41,I   CHECK IF
      AND P20.$     " HOT " PROCESSING. 
      SZA,RSS 
      JMP NOTCS     NO - GO SET STATUS
      LDA EQT40,I   YES - SET UP  
      IOR P2000     FLAG IN 
                                                                                                                                                                                                                                    