ASMB,A,B,L,C
      HED HP 7900/7905 DISC INITIALIZATION (DSN 011000) 
* 
      ORG 100B
      SUP 
A     EQU 0 
B     EQU 1 
SC    EQU 0 
INTP  EQU 0 
SWREG EQU 1 
DMA2  EQU 2 
DMA6  EQU 6 
* 
* 
*         LINK TABLE
* 
START JMP 130B,I    GO TO START OF PROGRAM
DRI   BSS 1         DATA RECORD INPUT 
COD   BSS 1         CONSOLE OUTPUT DRIVER 
LPD   BSS 1         LINE PRINTER DRIVER 
CID   BSS 1         CONSOLE INPUT DRIVER
FWA   DEF FWAA      FIRST WORD OF AVBL. MEMORY
LWA   BSS 1         LAST WORD OF AVBL. MEMORY 
      BSS 1         DIAG. LOADER PROGRAM
      BSS 1         1 MILSEC. TIME COUNT
DRISC BSS 1         DATA RECORD INPUT SELECT CODE 
CODSC BSS 1         CONSOLE OUTPUT SELECT CODE
LPDSC BSS 1         LINE PRINTER SELECT CODE
CIDSC BSS 1         CONSOLE INPUT SELECT CODE 
CTO   BSS 1         COMPUTER TYPE/OPTIONS 
      NOP           USER CARD TYPE AND SELECT CODE
MEM   BSS 1         MEMORY SIZE 
      BSS 1         GO TO DIAG. LOADER PROGRAM
WAIT  BSS 1         1 MILL SEC TIMER ROUTINE
SWRC  BSS 1         CHECK SWITCH REG
D2AS  BSS 1         DECIMAL TO ASCII CONVERSION 
O2AS  BSS 1         OCTAL TO ASCII CONVERSION 
AS2N  BSS 1         ASCII TO BINARY CONVERSION
DSN   OCT 011000    SERIAL NUMBER 
FMTO  BSS 1         FORMATTED OUTPUT
* 
      DEF DI
      SKP 
*         OUTPUT MESSAGE + CALL FOR INPUT 
* 
MSG   NOP 
      CLA,CLE 
      LDB MSG,I     OUTPUT MESSAGE
      ELB,CLE,ERB   CLEAR BIT 15
      SZB           SKIP OUTPUT IF NO MESSAGE 
      JSB FMTO,I
      LDB MSG,I     IS THIS A MESSAGE ONLY
      SSB           ? 
      JMP MSGX      YES - EXIT
      LDA DN10      CLEAR 
      LDB IBUFD        BUFFER 
      STB TMP0
      CLB 
      STB TMP0,I
      ISZ TMP0
      INA,SZA 
      JMP *-3 
      LDA D20       CALL FOR INPUT
      LDB IBUFD 
      JSB CID,I 
      SZA,RSS       IF NO INPUT TRY AGAIN 
      JMP MSG+1 
      LDA IBUFD     SET POINTER 
      RAL             FOR GET BLOCK (GETB)
      STA IBUFP 
MSGX  ISZ MSG 
      JMP MSG,I     RETURN
      SKP 
*         GET 4 ASCII CHARACTERS (FROM CONSOLE INPUT BUFFER)
*         IN A & B REG. THEN SKIP TO COMMA OR EOL 
* 
GETA  NOP 
      CLA           CLEAR CHARACTERS FIRST
      STA SVA 
      STA SVB 
      JSB GETCH     FIRST CHARACTER 
      JMP GETAE 
      ALF,ALF 
      STA SVA 
      JSB GETCH     SECOND CHARACTER
      JMP GETAE 
      IOR SVA 
      STA SVA 
      JSB GETCH     THIRD CHARACTER 
      JMP GETAE 
      ALF,ALF 
      STA SVB 
      JSB GETCH     FOURTH CHARACTER
      JMP GETAE 
      IOR SVB 
      STA SVB 
      JSB GETCH     WAIT FOR COMMA OR EOL 
      RSS 
      JMP *-2 
GETAE LDA SVA       GET THE FOUR CHARACTERS 
      LDB SVB 
      JMP GETA,I    RETURN
* 
GETCH NOP 
      LDB IBUFP 
      CLE,ERB 
      LDA B,I 
      SEZ,RSS 
      ALF,ALF 
      AND B177
      SZA,RSS       EOL?
      JMP GETCH,I   YES 
      ISZ IBUFP     NO MOVE TO NEXT CHARACTER 
      CPA COMA      COMMA?
      RSS           YES 
      ISZ GETCH     ADJUST RETURN IF NOT A COMMA OR EOL 
      JMP GETCH,I 
      SKP 
*         CONVERT SELECT CODE 
* 
CVSC  NOP 
      JSB GETA      GET ASCII INPUT 
      SZB           IF MORE THAN 2
      JMP CVSC,I      THEN ERROR
      SZA,RSS       IF NO INPUT 
      JMP CVSC,I      THEN ERROR
      ALF,ALF 
      JSB CVSCC     CHECK IT
      JMP CVSC,I    NOT A NUMBER
      RAL,RAL       OK
      RAL             SAVE IT 
      SZA,RSS       CAN'T BE ZERO 
      JMP CVSC,I
      STA CVSCT 
      LDA SVA 
      JSB CVSCC     CONVERT SECOND NUMBER 
      JMP CVSC,I    NOT A NUMBER
      IOR CVSCT     ADD FIRST NUMBER
      ISZ CVSC      ADJUST GOOD RETURN
      JMP CVSC,I    RETURN
* 
CVSCC NOP 
      STA B 
      AND B170
      CPA B60       MUST BE A NUMBER
      RSS 
      JMP CVSCC,I   NOT SO RETURN WITH ERROR
      LDA B 
      AND B7
      ISZ CVSCC     ADJUST RETURN 
      JMP CVSCC,I   RETURN
* 
CVSCT NOP 
      SKP 
*         INITIALIZE SELECT CODE
* 
ISC   NOP 
      STB ISCA      SAVE LIST POINTER 
      LDB ISCA,I    GET AN ADDRESS
      CPB M1        END OF LIST?
      JMP ISC,I     YES 
      CPB M2        INCREMENT SELECT CODE 
ISCF  RSS           SET TO 0 IF 7905
      JMP *+3       NO
      ISZ ISCT      YES 
      JMP *+5         BUT SKIP UPDATE OF M2 
      LDA B,I       GET I/O INSTRUCTION 
      AND ISCM      MASK OFF OLD SELECT CODE
      ADA ISCT      ADD NEW ONE 
      STA B,I       PUT IT BACK IN PLACE
      ISZ ISCA      MOVE TO NEXT ONE
      JMP ISC+2 
ISCA  NOP 
ISCT  NOP 
ISCM  OCT 177700
* 
*     OUTPUT MESSAGE AND CHECK ANSWER (YES OR NO) 
* 
YES?  NOP 
      LDA YES?,I
      ISZ YES?
      STA *+2 
      JSB MSG       OUTPUT QUESTION 
      NOP 
      LDA IBUF
      CPA AYE 
      JMP *+6 
      CPA ANO 
      RSS 
      JMP *-7 
      ISZ YES?      ANSWER = NO RETURN P+3
      JMP YES?,I
      LDA IBUF+1
      ALF,ALF 
      AND B177
      CPA AS        DID HE ADD THE "S"
      JMP YES?,I    YES -  RETURN P+2 
      JMP YES?+4    NO
      SKP 
*         TABLE SEARCH ROUTINE
* 
CNTS  NOP 
      JSB GETA      GET FOUR CHARACTERS 
      LDB CNTS,I
      ISZ CNTS
CNTS0 LDA B,I       START SEARCH
      CPA M1        END OF LIST?
      JMP CNTS,I    YES-ERROR RETURN
      CPA SVA       DO THE FIRST TWO CHR'S COMPAR?
      JMP *+5       YES 
      INB           NO MOVE TO
CNTS1 INB            NEXT BLOCK 
      INB 
      JMP CNTS0 
      INB 
      LDA B,I 
      CPA SVB       DO THE NEXT TWO CHR'S COMPARE?
      JMP *+2 
      JMP CNTS1     NO
      INB           YES 
      LDA B,I       GET NEXT WORD 
      ISZ CNTS       RETURN P+3 
      JMP CNTS,I
      SKP 
*              MOVE DRIVER INTO LOCATION
*              (WILL UPDATE SELECT CODE)
* 
MVDVR NOP 
      STA FROM      SAVE FROM LOCATION
      STB TO        SAVE TO LOCATION
      LDA MVDVR,I   GET NUMBER OF 
      ISZ MVDVR       WORDS TO BE MOVED 
      STA MVCNT 
MVDV0 LDA FROM,I    GET WORD
      LDB FROM,I
      CPB IOGM3     IS IT SWR REF?
      JMP MVDV1     YES - SKIP SC 
      AND IOGM0 
      SZA,RSS       IS IT A HALT
      JMP MVDV1     YES - SKIP SELECT CODE
      LDA FROM,I
      AND IOGM1 
      CPA IOGM2     IS IT AN IO INSTRUCTION 
      ADB .SC       YES - ADD SELECT CODE 
MVDV1 STB TO,I      PUT IT IN PLACE 
      ISZ FROM      INCREMENT ADDRESSES 
      ISZ TO          FOR NEXT WORD 
      ISZ MVCNT     ALL WORDS MOVED?
      JMP MVDV0     NO
      JMP MVDVR,I 
* 
* 
IOGM0 OCT 700 
IOGM1 OCT 172076
IOGM2 OCT 102000
IOGM3 LIA 1,C 
TO    NOP 
FROM  NOP 
MVCNT NOP 
      SKP 
DINDM ASC 15,INPUT DEVICE (NO.,SC)........_ 
* 
DINDT EQU * 
      ASC 2,2748
      OCT 0 
      ASC 2,2758
      OCT 0 
      ASC 2,2737
      OCT 0 
      ASC 2,7970
      OCT 1 
      ASC 2,7900
      OCT 2 
      ASC 2,7901
      OCT 2 
      ASC 2,7905
      OCT 3 
      ASC 2,7920
      OCT 3 
      ASC 2,2644
      OCT 4 
      ASC 2,2645
      OCT 4 
      DEC -1
* 
LDVRY ASC 17,READY INPUT DEVICE, PRESS RETURN_
* 
DINDD DEF *+1 
      DEF PT        PAPER TAPE READER 
      DEF MG        MAG TAPE
      DEF DS        7900/1 DISC 
      DEF DF        7905 DISC 
      DEF CT        2644 CARTRIDGE TAPE 
      SKP 
*         TABLES-CONSTANTS-STORAGE-MESSAGES 
* 
B2    OCT 2 
B3    OCT 3 
B5    OCT 5 
B7    OCT 7 
B77   OCT 77
B700  OCT 700 
DN10  DEC -10 
D20   DEC 20
B177  OCT 177 
BIT2  OCT 4 
BIT5  OCT 40
BIT15 OCT 100000
SVA   NOP 
SVB   NOP 
.SC   NOP 
TYPE  NOP 
TMP0  NOP 
IBUFD DEF IBUF
IBUFP NOP 
IBUF  BSS 10
      NOP           END-OF-BUFFER 
M1    DEC -1
M2    DEC -2
M3    DEC -3
M10   OCT -10 
B170 OCT 170
B60   OCT 60
ANO   ASC 1,NO
AYE   ASC 1,YE
AS    OCT 123 
COMA  OCT 54
      SKP 
DISC  NOP 
DICY  NOP 
DIHS  NOP 
DICYS NOP 
DIHSS NOP 
DISTA NOP 
DISTC NOP 
DISTX NOP 
DICNT NOP 
DIADD NOP 
DICKM NOP 
DIDTA NOP 
DIFWA NOP 
DISN  NOP 
DIMSK OCT 177077
DI126 OCT 126 
COMMA OCT 54
DIBF  BSS 129 
DI203 DEC -203      7900 MAX CYLINDER NUMBER
DI411 DEC -411      7905 MAX CYLINDER NUMBER
DIMXC NOP           MAX CYLINDER FOR SELECTED DRIVE 
DIFC  NOP 
DIAD  OCT 2050
DILDV DEF LDVR
DILSC NOP 
* 
DISNM DEF *+1 
      ASC 03,DSN #/ 
DIMHD ASC 15,CARTRIDGE DISC INITIALIZATION/ 
DIMCY ASC 15,FIRST, LAST CYLINDER NUMBER.._ 
DICSE ASC 15,CHECKSUM ERROR, ABORT?......._ 
DIERM ASC 15,OVER LAST CYLINDER, ABORTED!!/ 
DIMEL ASC 15,END OF LOAD?................._ 
DIMTS ASC 15,DISC DEVICE (NO.,SC)........._ 
* 
DISCT EQU * 
      ASC 2,7900
      OCT 0 
      ASC 2,7901
      OCT 0 
      ASC 2,7905
      OCT 1 
      ASC 2,7920
      OCT 1 
      ASC 2,VRFY
      OCT 7 
      DEC -1
      SKP 
*         DISC RESIDENT BOOT FOR THE CONFIGURATOR 
* 
      ORG 2011B 
* 
      ASC 2,LBDG    DIAG. LABEL 
      OCT 0         SYSTEM GEN CODE 
      ASC 3,DIAG.   DISC LABEL
* 
DRBIO DEF DB0       START OF SELECT CODE UPDATE 
DRBEN DEF DRBEX     END   OF   "     "     "
DRBMK OCT 172076    I/O INSTRUCTION MASK
DRBIN OCT 102000    I/O INSTRUCTION RESULT AFTER MASK 
DB0SK OCT 30000     7900 SEEK COMMAND 
DB0RC OCT 20000     7900 READ COMMAND 
DB5SK OCT 1000      7905 SEEK COMMAND 
DB5RC OCT 2400      7905 READ COMMAND 
DRBCW OCT 100000    DMA CONTROL WORD
DRBSC OCT 0 
DRBSX OCT 17        SECTOR 15 
DRBMS OCT 77        SELECT CODE MASK
DRBWC ABS 2011B-DLLDE DMA WORD COUNT FOR BOOT 
DRBSD OCT 102011    LOADING ADDRESS FOR SYS. BOOT 
DRBID DEF DLLDR     STARTING ADDRESS FOR SYS. BOOT
DRBJI JMP 3B,I       FOR SYSTEM BOOT
      OCT 0,0,0,0,0,0,0,0,0  SPACE HOLDERS
DRBCS NOP           CHECKSUM FOR DOS IIIB ONLY
      OCT 0,0,0,0   SPACE HOLDERS 
      DEF DRB       START OF BOOT 
      OCT 0 
      SKP 
DRB   NOP           BOOT ENTRY POINT
      STF DMA6      TURN OFF DMA
      CLA 
      LDA DRB,I     GET SC IN LOADER AREADMA
      SZA,RSS       DID I GET IT? 
      HLT 33B       NO WAIT FOR OPERATOR TO ENTER IT
      AND DRBMS     MASK OFF UPPER BITS 
      STA DRBSC       SAVE IT 
      LDB DRBIO     UPDATE I/O INSTRUCTIONS 
DRBC0 LDA B,I       GET INSTRUCTION 
      CPB DRBEN     END OF UPDATE?
      JMP DRBC1     YES 
      AND DRBMK     MASK INSTRUCTION
      CPA DRBIN     IS IT AN I/O INSTRUCTION? 
      RSS 
      JMP *+4       NO - SKIP UPDATE
      LDA B,I       RESTORE INSTRUCTION 
      ADA DRBSC     ADD SELECT CODE 
      STA B,I       PUT IT BACK IN PLACE
      INB           MOVE TO NEXT ONE
      JMP DRBC0     AND DO IT 
DRBC1 LDA DRBID     SET INDIRECT ADD FOR SYSTEM 
      STA 3B
      LDA DRBJI     AND JMP 3B,I
      STA 2B
      JMP *+4 
      NOP           DATAFOR DOS IIIB ONLY 
      NOP 
      NOP 
      LDA DRBCW     SET UP DMA
      IOR DRBSC     ADD SELECT CODE 
      OTA DMA6
      CLC DMA2
      LDA DRBSD     ADDRESS 2011
      OTA DMA2
      STC DMA2
      LDA DRBWC     WORD COUNT
      OTA DMA2
DRB05 RSS           SET TO NOP IF 7905
      JMP DB5       7905 BOOT DRIVER
      JMP DB0       7900 BOOT DRIVER
      NOP           SPACE HOLDER
      SKP 
*     7900 BOOT DRIVER
* 
DB0   CCA           GET CYLINDER -1 
      ADA DRBCY 
      OTA SC
      STC SC,C
      LDA DB0SK     GET SEEK COMMAND
      OTA SC+1
      STC SC+1,C
      SFS SC        WAIT FOR COMPLETION 
      JMP *-1 
      LDA DRBSX     GET HEAD SECTOR 
      OTA SC
      STC SC,C
DB0SF SFS SC+1
      JMP *-1 
      CLC SC,C
      CLC SC+1,C
      LDA DB0RC     GET READ COMMSND
      OTA SC+1
      STC SC,C
      STC DMA6,C
      STC SC+1,C
      LDA DB0SF     GET FLAG CHECK FOR COMPLETION 
      JMP DRBEX     WAIT FOR COMPLETION 
* 
*     7905 BOOT DRIVER
* 
DB5   LDA DB5SK     GET SEEK COMMAND
      CLC SC        SET TO OUTPUT COMMAND 
      OTA SC,C
      SFS SC        WAIT FOR ACCEPTANCE 
      JMP *-1 
      CCA 
      ADA DRBCY     GET CYLINDER -1 
      OTA SC,C
      SFS SC        WAIT FOR COMPLETION 
      JMP *-1 
      LDA DRBSX     GET HEAD SECTOR 
      OTA SC,C
      STC SC
DB5SF SFS SC
      JMP *-1 
      LDA DB5RC     GET READ COMMAND
      CLC SC
      OTA SC,C
      STC DMA6,C
      LDA DB5SF     GET FLAG CHECK
DRBEX LDB *+1 
      JMP 0         WAIT FOR COMPLETION OF LOAD 
* 
DILC  OCT 0         LAST CYLINDER FOR INITIALIZATION
DRBCY OCT 0         FIRST CYLINDER +1 
      OCT 0 
      SKP 
DLLDR CLC 0,C       TURN OFF ALL I O
      LIB 1         GET SWITCH REGISTER 
      RBR,RBR       GET SYSTEM BIT
      RBR,SLB 
      RSS 
      JMP 2055B,I   GO TO SYSTEM BOOT 
      AND DLB77     MASK SELECT CODE
      ADA DLM1      SUBTRACT 1 FROM SC
      STA DLCY      SAVE SELECT CODE
      LDB DLSCL     GET POINTER TO I/O LIST 
      STB DLHS      SAVE IT 
DLLP0 LDB DLHS,I    GET ADDRESS OF I/O INSTRUCTION
      CPB DLM2      DO SECOND SELECT CODE?
      RSS 
      JMP *+3 
      ISZ DLCY      YES MOVE UP ONE 
      JMP *+7 
      CPB DLM1      END OF LIST?
      JMP *+7 
      LDA B,I       GET THE I/O INSTRUCTION 
      AND DLM00     MASK OFF OLD SC 
      ADA DLCY      ADD SELECT CODE 
      STA B,I       PUT IT BACK 
      ISZ DLHS      MOVE TO NEXT INSTRUCTION
      JMP DLLP0     DO IT 
      CLA           CALCULATE MEMORY SIZE 
      STA 3B        CLEAR WRAPAROUND
      LDB DL8K      START WITH 8 K
DLM0  STB B,I       STORE ADDRESS 
      CPB 3B        DID IT WRAPAROUND 
      JMP DLJ1      YES - THAT'S ALL FOLKS
      CPB B,I       DID IT STORE? 
      RSS 
      JMP DLJ1      NO - THAT'S ALL FOLKS 
      STB A         SAVE CURRENT MEMORY SIZE
      CPB DL32K     END OF BASE MEMORY? 
      JMP DLJ1      YES 
      ADB DL10K     MOVE TO NEXT 4K 
      JMP DLM0      TRY IT
DLJ1  LDB DLMXA     GET CURRENT LOCATION
      STB DLLAD 
      AND DLDMC     MASK OFF THE THREE
      LDB DLRW      UPDATE ROUTINE POINTER
      ADB A 
      STB DLRW
      IOR DLMXA     MAKE NEW LOCATION 
      STA DLLTM     SAVE IT 
      STA DLMXA 
      LDB DLMC      GET MOVE COUNT
      LDA DLLAD,I   MOVE IT 
      STA DLLTM,I 
      ISZ DLLAD 
      ISZ DLLTM 
      INB,SZB 
      JMP *-5 
      JMP DLMXA,I   GO TO NEW LOCATION
      SKP 
DLLDS EQU * 
      CLA           CLEAR HEAD AND SECTOR 
      STA DLCY
      STA DLHS
      JSB DLRD      READ FIRST HEAD AND SECTOR
      JSB DLW         GET CYLINDER
      JSB DLW         GET NEST HEAD AND SECTOR
      JSB DLW       GET MAX ADDRESS 
* 
*         LOAD AN ABSOLUTE BINARY FILE
* 
DLRR  JSB DLW       READ FIRST RECORD 
      SZA           EOF 
      JMP *+3       NO - LOAD RECORD
      HLT 77B       YES 
      JMP 100B      GO START PROGRAM
      ALF,ALF       RETURN IS A = COUNT 
      CMA,INA       MAKE IT NEGATIVE
      STA DLLC      SAVE COUNT
      JSB DLW       READ ADDRESS
      STA DLLAD     THIS WORD IS THE STORE ADDRESS
      STA DLTCS     INITIALIZE CHECKSUM 
DLRL  JSB DLW       READ A WORD 
      STA DLLTM     SAVE WORD 
      ADA DLTCS     ADD WORD
      STA DLTCS       TO CHECKSUM 
      LDA DLLAD     IS THE ADDRESS
      CMA,INA       IN THE
      ADA DLMXA       PROTECTED AREA
      SSA,RSS       ? 
      JMP *+3 
      HLT 55B 
      JMP DLLDR     YES - TRY AGAIN 
      LDA DLLTM     GET CONTENTS FOR MEMORY 
      STA DLLAD,I   PUT IT IN MEMORY
      ISZ DLLAD     MOVE TO NEXT LOCATION 
      ISZ DLLC      IS THAT ALL?
      JMP DLRL      NO
      JSB DLW       READ CHECKSUM FROM FILE 
      CPA DLTCS     DOES CHECKSUM AGREE?
      JMP DLRR      READ NEXT RECORD
      HLT 11B       TELL OPERATOR OF CHECKSUM ERROR 
      JMP DLLDR     TRY AGAIN 
* 
DLW   NOP 
      LDA DLDA       READ NEW SECTOR? 
      CPA DLMXA     ? 
      JSB DLRD       YES
      LDA DLDA,I       NOW GET WORD 
      ISZ DLDA       MOVE POINTER TO NEXT ONE 
      JMP DLW,I 
      SKP 
DLB7  OCT 7 
DLB77 OCT 77
DLM1  OCT -1
DLM2  OCT -2
DLM00 OCT 177700
DL1.5 OCT 100000
DLMC  ABS DLLDR-DLLDE 
DL32K OCT 70003 
DL8K  OCT 10003 
DL10K OCT 10000 
DLTCS NOP 
DLLC  NOP 
DLLTM NOP 
DLLAD NOP 
DLCY  NOP 
DLHS  NOP 
DLSA  NOP 
DLSB  NOP 
DLSN  NOP 
DLDA  NOP 
DLSCL NOP 
      SPC 5 
DLRD  NOP 
      LDA DLMXA     SET ADDRESS POINTERS
      ADA DLDMC 
      STA DLDA      POINTER FOR DLW 
      IOR DL1.5 
      STA DLDMC-1   READ POINTER
      LDA DLCY      GET CYLINDER
      LDB DLHS      AND HEAD SECTOR 
      JSB DLRW,I    READ IT 
      NOP           TO BUFFER 
DLDMC DEC -128        OF 128 WORDL
      STA DLCY      SET NEXT CYLINDER 
      STB DLHS        AND HEAD SECTOR 
      LDA DLSA      CHECK IF BOOT WAS READ
      IOR DLSB
      SZA 
      JMP DLRD,I    NO - RETURN 
      STA DLHS      CLEAR SECTOR
      LDA DLLDS-2   GET STARTING CYLINDER 
      STA DLCY
      JMP DLRD+1    TRY AGAIN 
* 
DLRW  NOP 
      SKP 
D0RW  NOP 
      STA DLSA      SAVE CYLINDER 
      STB DLSB         AND HEAD SECTOR
      JSB D0SK      GIVE SEEK 
      LDA D0CW1     GIVE DMA THE SELECT CODE
      OTA DMA6
      CLC DMA2
      LDA D0RW,I    BUFFER ADDRESS
      ISZ D0RW
      OTA DMA2
      STC DMA2
      LDB D0RW,I    BUFFER COUNT
      ISZ D0RW
      OTB DMA2
      SSA           READ OR WRITE 
      JMP D0R       READ
D0D01 STC DC        WRITE -  TRANSFER FIRST WORD
D0D02 STF DC          FROM DMA
      STC DMA6,C
      LDA D0WC      GET WRITE COMMAND 
D0C01 OTA CC
D0C02 STC CC,C
      JMP D0CMP     WAIT FOR COMPLETION 
D0R   LDA D0RC      GET READ COMMAND
D0C04 OTA CC
D0D03 STC DC,C
      STC DMA6,C
D0C05 STC CC,C
                                                                                                                                            