ASMB,R,B,L,C
      HED 2313B (NON-DMA) BCS DRIVER D.62V VERIF   8/22/73
* 
* 
      NAM D.62V 
      ENT D.62,I.62 
      EXT DELAY,GONLY 
      SPC 2 
*  THIS DRIVER OPERATES THE 2313B SUB-SYSTEM IN THE 
*  BCS ENVIRONMENT.  IT IS CALLED DIRECTLY FROM 
*  ASSEMBLY LANGUAGE.  FOR USE WITH FORTRAN OR ALGOL
*  REFER TO THE ALGOL/FTN-DRIVER INTERFACE ROUTINE (V2313). 
* 
*  THIS IS A REDUCED VERSION OF THE DRIVER FOR USE WITH THE 
*  2313B VERIFICATION PROGRAM.  THERE ARE NO CALLS FOR DAC OR 
*  SIMULTANEOUS SAMPLE AND HOLD.
* 
*  THE CALLS FOR CLEAR AND STATUS ARE STANDARD WITH 
*  STATUS BIT 0 FOR OVERLOAD AND BIT 1 FOR PACE 
*  RATE TOO FAST.  STATUS IS DYNAMIC (BITS 14 AND 15 OF 
*  EQT WORD 2 MAY BOTH BE SET). 
* 
*  THE READ CALL IS AS FOLLOWS: 
* 
*        JSB .IOC.
*        OCT 1SFUR  <UR = UNIT REFERENCE NUMBER>
*       /JMP\       <REJECT 
*       \JSB/         ADDRESS>
*        DEF CBUFF
*        DEC 3
*        ---
*  CBUFF DEF CHAN   <ADRS OF 1ST WD OF CH # BUFFER> 
*        DEC N      <N = # OF READINGS TO TAKE> 
*        DEF DATA   <ADDRESS OF 1ST WORD OF DATA BUFFER>
*        ---
* 
*  WHERE S & F ARE AS FOLLOWS:
* 
*    S CONSISTS OF REQUEST CODE WORD BITS 9, 10, & 11 
* 
*        S = 1  UNPACED 
*        S = 3  PACED 
* 
*    F CONSISTS OF REQUEST CODE WORD BITS 6, 7, & 8 
* 
*        F = 0  SINGLE CHANNEL
*        F = 1  TWO CHANNEL 
*        F = 2  SEQUENTIAL SCAN 
*        F = 6  SEQUENTIAL SCAN (DIFFERENTIAL INPUTS) 
      SKP 
*  THE WRITE CALL IS AS FOLLOWS (PACER & LAD):
* 
*        JSB .IOC.
*        OCT 2SFUR  <UR = UNIT REFERENCE NUMBER>
*       /JMP\       <REJECT 
*       \JSB/         ADDRESS>
*        DEF CBUFF
*        DEC 2
*        ---
* 
*  FOR PACER: 
* 
*        ---
*  CBUFF OCT RATE   <PACE PERIOD, 0-377 OCTAL (1-255 MICROSEC)> 
*        OCT RANGE  <PACE MULTIPLIER, 0-7 (POWER OF 10 MULTIPLIER)> 
*        ---
* 
*  FOR LAST ADDRESS DETECTOR (LAD): 
* 
*        ---
*  CBUFF OCT LAD    <2313B CARD ADRS OF LAST ADRS DET>
*        OCT LADRS  <LAST HLMPX ADDRESS TO BE SCANNED>
* 
*  WHERE S & F ARE AS FOLLOWS:
* 
*        S = 5  FOR PACER CALL
* 
*        S = 7  FOR LAST ADDRESS DETECTOR CALL
* 
*  FOR THE PACER CALL F IS ACTUALLY F0 & F1 WHERE 
*    F0 IS REQ CODE BIT 6 AND F1 IS REQ CODE BIT 7
* 
*       F0 = 0  CHANGE RATE IMMEDIATELY 
*       F0 = 1  CHANGE RATE AT NEXT PACE PULSE
* 
*       F1 = 0  DISABLE EXTERNAL START/STOP 
*       F1 = 1  ENABLE EXTERNAL START/STOP
* 
*  FOR THE LAST ADDRESS DETECTOR F IS REQ CODE BITS 6, 7, & 8 
* 
*        F = 0  TURN OFF LAD
*        F = 1  TURN ON LAD AND GET NEW LAST ADDRESS
      SKP 
*                   ** INITIATOR SECTION ** 
      SPC 1 
D.62  NOP 
      STA SAVA      SAVE EQT ENTRY ADRS 
      STB SAVB      SAVE REQ CODE ADRS
      LDA A,I       GET 
      AND B77         SELECT CODE 
      STA SC            AND SAVE
      LDB A,I       GET TRAP CELL 
      STB TCC         CONTENTS AND SAVE 
      LDA SAVB,I    GET REQ CODE AND
B77   OCT 77 (ALF)    SHIFT TO LSB'S
B7    OCT 7  (NOP)    \ 
      AND B17          THEN ISOLATE REQUEST 
      SZA           CLEAR REQUEST?
      JMP NTCLR       NO
      SPC 2 
*                   ** CLEAR REQ - ISSUE SYN ** 
      SPC 1 
*                   CONFIGURE SYN I/O INSTRUCTIONS
      SPC 1 
      LDA SC
      IOR XSFS      FORM "SFS SC" INST
      STA SFS1        AND STORE IT
      ADA B300      FORM "OTA SC" INST
      STA OTA1        AND STORE IT
      IOR B1100     FORM "STC SC,C" INST
      STA STCC1       AND STORE IT
      XOR B5000     FORM "CLC SC" INST
      STA CLC1        AND STORE IT
      STA CLC2        / 
      XOR B4000     FORM "STC SC" INST
      STA STC1        AND STORE IT
      SPC 1 
*                   ISSUE SYN TWICE 
      SPC 1 
CLC1  CLC ADI       MAKE SURE ENCODE IS RESET 
      LDA SYN       GET AND OUTPUT THE
OTA1  OTA ADI         SYSTEM NORMALIZE COMMAND
      CLA           CLEAR THE 
      STA SC,I        TRAP CELL (PREVENT INTERRUPT) 
STCC1 STC ADI,C     ENCODE
      NOP 
STC1  STC ADI       ENCODE AGAIN
SFS1  SFS ADI 
      JMP *-1 
CLC2  CLC ADI       TURN OFF I/O CARD 
      STB SC,I      RESTORE TRAP CELL 
      ISZ SAVA      CLEAR 
      LDB ET          EQT WORD 2 -
      STB SAVA,I        BUSY AND STATUS 
      STA BUSY        YES - CLEAR DRIVER BUSY FLAG
      SPC 1 
      JMP D.62,I   CLEAR REQUEST RETURN POINT 
      SKP 
*                   ** OPERATION REQUEST ** 
*                      (READ OR WRITE)
      SPC 1 
NTCLR LDB BUSY      DRIVER
      SZB             BUSY? 
      JMP REJB          YES - REJECT CALL 
      ADA N2        SAVE REQ CODE AS -1=READ, 
      STA REQ         0=WRITE, AND +1=CONTROL 
      LDA XRSS      SET FIRST READING FLAG
      STA FIRST 
      SPC 2 
*                   ** CONFIGURE I/O INSTRUCTIONS **
      SPC 1 
      LDA SC
      IOR XSFS      FORM "SFS SC" INST
      STA SFS3        AND STORE IT
      STA SFS4        / 
      ADA B300      FORM "OTA SC" INST
      STA OTA2        AND STORE IT
      STA OTA3        / 
      STA OTA4        / 
      IOR B1100     FORM "STC SC,C" INST
      STA STCC3       AND STORE IT
      STA STCC4       / 
      STA STCC5       / 
      XOR B5000     FORM "CLC SC" INST
      STA CLC3        AND STORE IT
      XOR B4200     FORM "LIA SC" INST
      STA INPUT       AND STORE IT
      SKP 
*                   ** SUB-FUNCTION CHECK **
      SPC 1 
      LDA SAVB,I    GET REQ CODE WORD 
      ALF,RAL       ISOLATE SUB-FUNCTION
      STA SFB11       BIT 11 AND SAVE 
      ALF,RAR       ISOLATE SUB-FUNCTION
      STA SFB8        BIT 8 AND SAVE
      RAL,RAL       ISOLATE SUB-FUNCTION F
      AND B3          (BITS 6 AND 7) AS 
      ADA N1            -1, 0, OR +1 AND
      STA F               SAVE
      SPC 2 
SFS3  SFS ADI       IS THE 2313 OPERABLE? 
      JMP REJB        NO - BUSY 
      SPC 2 
      LDA ETBSY     SET EQT 
      ISZ SAVA        WORD 2
      LDB SAVA          FOR 
      STA B,I             BUSY (CLEAR STATUS) 
      STA BUSY      SET DRIVER BUSY FLAG
      CLA           CLEAR 
      STA RNFLG         RANDOM MODE FLAG
      STA DECNT           AND DELAY COUNTER 
      SPC 1 
      LDA SAVB,I    GET PACE MODE BIT 
      AND B2000       FROM BIT 10 OF REQ
      RAL,RAL           CODE WORD, ROTATE 
      STA PBIT            INTO BIT 12 AND SAVE
      IOR CLEAN     FORM LAST DATA
      STA SFS3        COMMAND WORD & STORE
      SKP 
      LDB SAVB      \\\\\\\ 
      ADB B2               \
      LDA B,I               \ 
      INB           GET      \
      LDB B,I        AND      \ 
      CMB,INB         SAVE     \
      STB TSAVA        PARAMETER\ 
      LDB CBUFF         LIST    / 
      STB SAVAX          FROM  /
GET   LDB A,I             CALL/ 
      STB SAVAX,I            /
      INA                   / 
      ISZ SAVAX            /
      ISZ TSAVA           / 
      JMP GET       //////
      SPC 2 
      LDA NUMBR     SET NUMBER
      CMA,INA         OF READINGS NEGATIVE
      STA CNTR          FOR COUNTER 
      SPC 1 
      LDA PBIT      GET PACE MODE BIT 
      LDB REQ       REQUEST 
      SSB             CODE? 
      JMP READ          =1
      SKP 
*                   ** PROCESS PACER REQUEST ** 
      SPC 1 
      SZA           LAD REQUEST?
      JMP LAD         YES 
      LDA SAVB,I    GET BITS 6 AND 7
      AND B300        OF REQ CODE WORD AND
      ALF,RAL           MOVE INTO BITS 11 AND 12
      STA B 
      SPC 1 
      LDA CNBUF     GET RATE
      AND B377        AND OR
      IOR B             IT TO COMMAND 
      STA B 
      SPC 1 
      LDA NUMBR     GET RANGE,
      AND B7          MOVE TO PROPER
      ALF,ALF           POSITION AND OR 
      IOR B               IT TO COMMAND 
      SPC 1 
      IOR PCR       FORM PACER COMMAND
      JMP OTA3
      SPC 2 
LAD   LDA NUMBR     GET LAST
      AND B7777       ADDRESS 
      LDB F         CLEAR 
      SZB,RSS         OR SET? 
      IOR PBIT          SET - PUT IN BIT 12 
      STA PDATA     SAVE LAST ADDRESS 
      LDA BIT14     FORM DAC CMND 
      IOR CNBUF       WD TO ADRS LAD
      CLB 
      STB SFB11 
      JMP OTA3
      SPC 2 
      SKP 
*                   ** READ REQUESTS ** 
      SPC 1 
READ  LDA BIT13     FORM MPX COMMAND
      SPC 2 
*                   ** PROCESS HLMPX REQUEST ** 
      SPC 1 
      IOR BIT15     FORM MPX DIGITIZE COMMAND 
      CLB,INB       CHECK NUMBER
      CPB NUMBR       OF READINGS?
      XOR BIT13         =1 - CHANGE TO RANDOM 
      STA CMND      SAVE COMMAND WORD 
      SPC 1 
      LDA B7777     SET CHANNEL 
      STA MASK        NUMBER MASK 
      CLB,INB       SEQUENTIAL
      CPB F           SCAN? 
      XOR B             YES - CLEAR BIT 0 OF MASK 
      STA MASK2 
      LDB BIT14     SET SEQUENTIAL
      STB SEQWD       BIT WORD
      LDB SFB8      SUB-FUNCTION BIT 8
      SLB,RSS         CHECK FOR DIFF OR S.E.
      ISZ SEQWD         S.E. - SET BIT 0 OF SEQWD 
      SPC 1 
      SPC 1 
      JSB POW       SET GAIN? 
      LDA CNBUF,I   GET FIRST CHANNEL 
      AND MASK        NUMBER AND OR IT
      IOR CMND          ONTO COMMAND
      CLB,INB       CHECK NUMBER
      CPB NUMBR       OF READINGS 
      JMP SRNFG         =1 - GO SET RANDOM FLAG 
      SPC 1 
      JSB FOUT      OUTPUT 1ST CMND (BAD DATA BACK) 
      ISZ CNTR      INCREMENT # OF READINGS 
      SPC 1 
      LDA CMND      GET COMMAND WORD
      LDB F         SUB-
      SZB,RSS         FUNCTION F? 
      JMP L2            BLOCK SCAN
      SSB 
      JMP L1            SINGLE CHANNEL
      IOR SEQWD         SEQUENTIAL SCAN - FORM SEQ
      SPC 1 
L1    STA CMND2     SAVE COMMAND
      LDA CNBUF,I   PUT 
      AND MASK2       START CHANNEL 
      CLB,INB               ONTO THE
      CPB F                     COMMAND 
      ADA N2
      IOR CMND2 
      IOR PBIT
      STA CMND2 
      JMP START 
      SKP 
L2    ISZ CNBUF     INCREMENT CHANNEL # BUFFER
      LDA CNBUF,I   GET CHANNEL 
      AND MASK        NUMBER AND OR 
      IOR CMND          IT ONTO COMMAND 
      IOR PBIT      PUT THE PACE BIT
      STA CMND2       ON THE COMMAND
      SPC 2 
*                   ** OUTPUT COMMAND **
      SPC 1 
START LDA CMND2 
OTA3  OTA ADI       OUTPUT COMMAND WORD 
      CLA           CLEAR A & B 
      CLB             REGISTERS FOR NORMAL RETURN 
STCC3 STC ADI,C     ENCODE THE 2313 
      SPC 1 
      JMP D.62,I    RETURN TO .IOC. 
      SPC 2 
*                   ** ONE OPERATION ONLY **
      SPC 1 
SRNFG CCB           SET RANDOM
      STB RNFLG       MODE FLAG 
      IOR PBIT      PUT PACE BIT ON CMND
      JMP OTA3
      SPC 2 
*                   ** BUSY REJECT ** 
      SPC 1 
REJB  LDB BIT15     SET BIT 15 OF B FOR DEVICE BUSY 
      CLA,INA       SET A REG TO 1 AS REJECT FLAG 
      JMP D.62,I    RETURN TO .IOC. 
      SPC 2 
*                   ** FLAG OUTPUT ROUTINE ** 
*                        THIS ROUTINE IS USED BY BOTH 
*                          THE INITIATOR AND
*                          CONTINUATOR SECTIONS 
*                          FOR OUTPUTTING WITHOUT 
*                          INTERRUPT. 
      SPC 1 
FOUT  NOP 
      CLB           CLEAR THE TRAP CELL 
      STB SC,I        TO PREVENT INTERRUPT
OTA2  OTA ADI       OUTPUT WORD PASSED IN A REG 
STCC4 STC ADI,C     ENCODE
SFS4  SFS ADI       WAIT ON 
      JMP *-1         FLAG
CLC3  CLC ADI       TURN OFF I/O CARD 
      LDB TCC       RESTORE 
      STB SC,I        TRAP CELL 
      JMP FOUT,I
      SKP 
*                   ** CONTINUATOR SECTION ** 
      SPC 1 
I.62  NOP 
      STA SAVAX     SAVE A REGISTER 
      STB OTA3      SAVE B REGISTER 
      ERA,ALS       SAVE
      SOC             E AND 
      INA               O 
      STA .2930          REGISTERS
      SPC 1 
      LDB REQ       CHECK REQUEST CODE
      SSB             READ REQ? 
      JMP INPUT         YES 
      LDB SFB11     LAD REQ?
      SLB,RSS 
      JMP DAC         YES 
      JMP THEND     DONE
      SPC 2 
*                   ** PROCESS READ REQUESTS ** 
      SPC 1 
INPUT LIA ADI       GET DATA FROM I/O CARD
      AND INMSK     ELIMINATE UNUSED BITS 
      STA DBUFF,I     AND STORE IN DATA BUFFER
      AND B3        ISOLATE BITS 0 & 1
FIRST RSS           NOP AFTER FIRST READING 
      JMP XYZ 
      AND B1        ELIMINATE PACE ERROR BIT
      CLB           CLEAR FIRST 
      STB FIRST       READING TEST INSTRUCTION
XYZ   SZA           TRANSMISSION ERROR? 
      IOR BIT14       YES - SET BIT 14
      IOR SAVA,I    SET STATUS INFORMATION
      STA SAVA,I      INTO EQT WORD 2 
      SPC 1 
      ISZ CNTR       INCR # OF READINGS - DONE? 
XRSS  RSS               NO
      JMP FINIS         YES 
      LDB F         SUB-
      SZB             FUNCTION F? 
      JMP L20           NOT =1
      ISZ DECNT         =1 - (BLOCK SCAN) 
      LDB DECNT       DO DELAY
      SLB,RSS           ON
      JSB WAIT            ALT. CHANNELS 
      JSB POW       SET GAIN? 
      ISZ CNBUF 
      LDA CNBUF,I   GET NEW CHAN #
      AND MASK
      IOR CMND      SET COMMAND BITS
      IOR PBIT      SET PACER CONTROL BIT 
      JMP L31 
      SKP 
L20   ISZ DBUFF     INCR DATA BUFF ADDR (SING OR SEQ) 
      SSB           DELAY ON
      JSB WAIT        SINGLE CHANNEL
      JMP EXIT        (FOR SINGLE CHAN OR SEQ)
      SPC 2 
DAC   LDA PDATA     GET LAST ADDRESS
      CLB,INB       SET TEST FOR FINISH 
      STB SFB11 
      JMP OTA4
      SPC 3 
*                   ** GET LAST READING  ** 
      SPC 1 
FINIS CCA 
      ISZ RNFLG     RANDOM MODE FLAG? 
      JMP L30         NO - GET LAST READING 
      SPC 2 
*                   ** DONE - CLEAR BUSY, ETC **
      SPC 1 
THEND LDA SAVA,I    CLEAR EQT WORD 2
      ELA,CLE,ERA     BUSY BIT
      STA SAVA,I
      CLA           CLEAR DRIVER
      STA BUSY        BUSY FLAG 
      SPC 1 
      LDA CLC3      SET EXIT
      STA STCC5       CONDITION FOR DONE
      JMP EXIT
      SKP 
*                   ** GET LAST READING (CONT.) **
      SPC 1 
L30   STA CNTR      SET # OF OPS TO -1
      STA RNFLG     SET RANDOM MODE FLAG
      LDB F 
      SSB           SINGLE CHANNEL? 
      JMP W           YES 
      SZB             NO - TWO CHANNEL? 
      JMP *+5                NO, SEQ. 
      JSB POW                YES - SET GAIN 
      LDA NUMBR              ODD # OF 
      SLA                      CHANNELS?
W     JSB WAIT                   YES - DELAY
      LDA SFS3      GET "CLEAN" CMND FOR LAST RDNG
L31   ISZ DBUFF     INC DATA BUFF (FOR BLOCK SCAN)
OTA4  OTA ADI       OUTPUT NEW COMMAND OR DATA
      SPC 2 
*                   ** EXIT POINT, DONE OR OTHER ** 
      SPC 1 
EXIT  LDA .2930     RESTORE 
      CLO             E AND 
      SLA,ELA           O 
      STO                REGISTERS
      LDA SAVAX     RESTORE A REGISTER
      LDB OTA3      RESTORE B REGISTER
STCC5 STC ADI,C     ENCODE (EXCEPT WHEN DONE - CLC) 
      SPC 1 
      JMP I.62,I
      SPC 2 
*                   ** CALL FOR DELAY **
      SPC 1 
WAIT  NOP           DELAY ONLY IF PACER NOT SET 
      LDA PBIT      PACER 
      SZA,RSS         SET?
      JSB DELAY         NO - SO DELAY 
      NOP           ALL0W ALGOL TO RETURN 
      JMP WAIT,I    CONTINUE
      SPC 2 
*                   ** PROGRAM LLMPX GAIN **
      SPC 1 
POW   NOP 
      LDA GONLY     DO WE WANT
      LDA A,I         TO SET GAIN?
      SSA,RSS         YES - GO ON 
      JMP HENCE       NO - RETURN 
      LDA CNBUF,I   FORM 1ST COMMAND
      AND B7740      WORD 
      IOR BIT14 
      JSB FOUT      ISSUE TO 2313 
      LDA CNBUF,I   FORM 2ND COMMAND
      ALF,RAR        WORD 
      AND B7
      JSB FOUT      ISSUE TO 2313 
HENCE JMP POW,I 
      SKP 
      SPC 2 
*                   ** CONSTANTS AND STORAGE ** 
      SPC 1 
A     EQU 0 
ADI   EQU 0 
      SPC 1 
B     EQU 1 
B1    OCT 1 
B2    OCT 2 
B3    OCT 3 
B17   OCT 17
B300  OCT 300 
B377  OCT 377 
B1100 OCT 1100
B2000 OCT 2000
B4000 OCT 4000
B4200 OCT 4200
B5000 OCT 5000
B7740 OCT 7740
B7777 OCT 7777
BIT13 OCT 20000 
BIT14 OCT 40000 
BIT15 OCT 100000
BUSY  NOP 
      SPC 1 
CLEAN OCT 120000
CMND  NOP 
CMND2 NOP 
CNTR  NOP 
      SPC 1 
DECNT NOP 
      SPC 1 
ET    OCT 31000 
ETBSY OCT 131000
      SPC 1 
F     NOP 
      SPC 1 
INMSK OCT 177762
      SPC 1 
MASK  NOP 
MASK2 NOP 
      SPC 1 
N1    OCT -1
N2    OCT -2
      SKP 
PBIT  NOP 
PCR   OCT 60000 
PDATA NOP 
      SPC 1 
REQ   NOP 
RNFLG NOP 
      SPC 1 
SAVA  NOP 
SAVAX NOP 
SAVB  NOP 
SC    NOP 
SEQWD NOP 
SFB8  NOP 
SFB11 NOP 
SYN   OCT 140001
      SPC 1 
TCC   NOP 
TSAVA NOP 
      SPC 1 
      SPC 1 
XSFS  SFS ADI 
      SPC 2 
*                   ** PARAMETER LIST STORAGE **
      SPC 1 
CBUFF DEF *+1 
CNBUF NOP 
NUMBR NOP 
DBUFF NOP 
.2930 NOP 
      SPC 2 
*                   ** END OF DRIVER ** 
      SPC 2 
      END 
                                                                                                                                                                      