ASMB,A,B,L,C
      HED 2100-21MX COMPUTER DMA DIAGNOSTIC 
      ORG 100B
      SUP   DSN 101220   23 FEBRUARY  1977 REV 1705 
************************************************************
* 
* A CONSOLE MAY BE USED BUT IS NOT REQUIRED 
* 
* THE DIAGNOSTIC CONFIGURATOR IS REQUIRED 
* 
* THE DIAGNOSTIC SERIAL NUMBER (DSN) IS 101120
* 
* OPERATING INSTRUCTIONS: 
* 
*     1.  LOAD AND CONFIGURE THE DIAGNOSTIC CONFIGURATOR. 
* 
*     2.  LOAD THE DMA DIAGNOSTIC.
* 
*     3.  SET THE P REGISTER TO 100. SET THE SELECT CODE OF THE I/O CARD
*         USED WITH THE DIAGNOSTIC IN THE SWITCH REGISTER. PRESS PRESET 
*         (INT. & EXT. IF PRESENT) AND RUN. 
* 
*     * NOTE * THE TEST INTERFACE USED WITH THIS DIAGNOSTIC 
*              MUST BE A 12554A OR 12597A OR 12566B WITH AN ATTACHED
*              1251-0332 CONNECTOR OR 12930-60001 WITH AN ATTACHED
*              12930-60006 TEST CONNECTOR.
* 
*     4.  SUCCESSFUL CONFIGURATION IS INDICATED BY A HALT 102074. 
* 
*     5.  ENTER PROGRAM OPTIONS IN THE SWITCH REGISTER. 
*          (SEE SWITCH REG OPTIONS ON THE NEXT PAGE)
* 
*     6.  PRESS RUN.
* 
*   12554 JUMPER CONFIGURATION- 
* 
*     W4-W6   B 
*     W7      A 
*     W8-W12  IN
*     W13     A(IF APPLICABLE)
*     W14     A(IF APPLICABLE)
* 
*           OR
*     W4-W5   A 
*     W6-W7   B 
*     W8-W12  IN
*     W13-W14 A (IF APPLICABLE) 
* 
*   12597A JUMPER CONFIGURATION-
* 
*     W1,W2   A   -OR-   W1,W2 B
*     W3,W4   IN         W8,W4 IN 
* 
*      NOTE: W3 & W8 MUST NOT BE INSTALLED AT THE SAME TIME.
      SKP 
*   12566 12849 JUMPER CONFIGURATION- 
* 
*     W1      A(B)
*     W2-W4   B(A)
*     W5-W8   IN
* 
* 
*     NOTE: MUST HAVE PIN 22,23 (OR Z,AA) JUMPERED TOGETHER ON T.C. 
* 
*   12930 PROGRAMMABLE SWITCHES 
* 
*     85S1-1       97S1-2       106S1-1 
*       S2-5         S2-5          S2-5 
*       S3-10(0)     S3-10(0)      S3-9 
* 
*     87S1-1      102S1-2 
*       S2-4         S2-7 
*       S3-8         S3-10(0) 
* 
*     NOTE:  THE PROGRAMMABLE SWITCHES ARE SET USING A SCREWDRRIVER 
*            TO POSITION THE CONTACT MECHANISM.  SEE FIGURE A-3 
*            IN MOD FOR SWITCH LOCATION AND SWITCH POSITION.
* 
*            THE SWITCH POSITIONS SHOWN ARE USED FOR THE UI CARD
*            AND THE TEST CONNECTOR WHEN RUNNING
*            THE STANDARD TEST RUN..
* 
*************** SWITCH REGISTER OPTIONS ****************************
* 
* 
*   BIT        MEANING
* 
*   0-7        RESERVED 
*     8        SUPPRESS PRESET TEST 
*     9        USER SELECTION 
*    10        SUPPRESS NON-ERROR MESSAGES
*    11        SUPPRESS ERROR MESSAGES
*    12        LOOP ON DIAGNOSTIC. CLEAR TO HALT 102077 AT END
*              OF PASS
*    13        LOOP ON CURRENT TEST SECTION 
*    14        SUPPRESS ERROR HALTS 
*    15        HALT 102076 AT END OF CURRENT TEST SECTION 
* 
* 
*************** COMPUTER HALTS *************************************
* 
*   HALT       MEANING
* 
*  1020XX      ERROR AND
*  1030XX       OPERATOR
*  1070XX         HALTS.
*  1060XX      UNEXPECTED TRAP CELL INTERRUPT 
*  102077      DIAGNOSTIC COMPLETE
* 
* 
* 
      SKP 
      ORG 100B
A     EQU 0         A REGISTER REFERENCE
B     EQU 1         B REGISTER REFERENCE
SR    EQU 1         SWITCH REGISTER REFERENCE 
CH    EQU 10B       I-O CHANNEL REFERENCE 
* 
      ORG 100B
* 
      JMP CFIG,I    GO TO TEST EXECUTION. 
      BSS 1         FAST INPUT (PHOTO READER) 
SLOP  BSS 1         SLOW OUTPUT (LIST)
      BSS 1         FAST OUTPUT (DUMP OR PUNCH) 
      BSS 1         SLOW INPUT (KEYBOARD) 
FWAM  DEF FWAA      FIRST WORD OF AVBL. MEMORY
LWAM  BSS 1         LAST WORD OF AVBL. MEMORY 
      BSS 1         NOT USED (MAG TAPE) 
      BSS 1         1 MILL SEC TIME OUT COUNT 
      BSS 4         SELECT CODES FOR I/O
      BSS 1         COMPUTER TYPE/OPTIONS 
USRSC BSS 1         USER CARD TYPE AND SELECT CODE
      BSS 1         MEMORY SIZE AND TYPE
      BSS 1         INTERNAL SWITCH REGISTER
      BSS 1         1 MILL SEC TIMER
      BSS 1         CONFIGURATOR SWITCH CK PTR
      BSS 1         INTEGER TO ASCII CONVERSION 
O2AS  BSS 1         OCTAL TO ASCII CONVERSION 
AS2N  BSS 1         ASCII CONVERSION
DSN   OCT 101220    DIAGNOSTIC SERIAL NUMBER
FMTR  BSS 1         FORMATTER 
      SPC 1 
CFIG  DEF ENTRY 
STDA  OCT 77777 
TSTN  NOP 
TSTP  DEF *+1 
      DEF TST00 
      DEF TST01 
      DEF TST02 
      DEF TST03 
      DEF TST04 
      DEF TST05 
      DEF TST06 
      DEF TST07 
      DEF TST08 
      DEF TST09 
      DEF TST10 
      DEF TST11 
      DEF TST12 
      DEF TST13 
      DEF TST14 
      DEF TST15 
      DEC -1
      HED DIAGNOSTIC CONSTANTS AND VARIABLES
FIRST DEF *+1 
      DEF STFX
      DEF CLCCX 
      DEF STCX
      DEF STCCX 
      DEF OTAX
      DEF LIAX
      DEF LIAX1 
      DEF LIAX2 
      DEF SFSX
      DEF IOX1
      DEF CH2 
M1    DEC -1
* 
*        CONSTANTS & STORAGE LOCATIONS
* 
NULL  BSS 2 
SVRES BSS 2 
B2    OCT 2 
B6    OCT 6 
B11   OCT 11
B12   OCT 12
B37   OCT 37
B77   OCT 77
B100  OCT 100 
B105  OCT 105 
B177  OCT 177 
B377  OCT 377 
B400  OCT 400 
HLT0  OCT 102000
THLTX OCT 106077
NB77  OCT 177700
N76   OCT 177776
CNTLW OCT 120000
CNT12 OCT 100002
ASC00 OCT 30060 
M2    DEC -2
M10   DEC -10 
M10B  OCT -10 
CLF0  JSB *+1 
      NOP 
      CLF 0 
      JMP *-2,I 
CNTR  NOP 
SAVEA NOP 
DAOUT NOP 
DAIN  NOP 
BT812 OCT 10400 
BIT9  OCT 1000
BIT12 OCT 10000 
BIT13 OCT 20000 
BIT14 OCT 40000 
BIT15 OCT 100000
PATCK OCT 252 
PATT1 OCT 125252
PATT2 OCT 52525 
SAVWC NOP 
INTON NOP 
SAVAX NOP 
SAVA  NOP 
SAVB  NOP 
EOTCT NOP 
SVINA NOP 
SAVIA NOP 
TSTNN NOP 
TESTI DEC -1
JLINK JMP *+1,I 
PADDR NOP 
JSBLK JSB *-1,I 
ANULL DEF NULL
ADDR1 DEF E012-3
ADDR2 DEF E015-3
WC1RP DEF M33A+3
WC1R2 DEF M33B+3
OUTP1 DEF M63A+7
OUTP2 DEF M63B+7
OUTP3 DEF M63C+7
CKPAD DEF PADDR 
* 
USSC  BSS 1         USER SELECT CODE FOR DUAL CH
BUF   BSS 1 
BUF1  DEF FWAA      OUTPUT BUFFER 
BUF2  BSS 1         INPUT BUFFER
BUFX  BSS 1 
BUFZ  BSS 1 
WCNT  BSS 1         WORD COUNT
CNT   BSS 1         COUNTER 
CNTX  BSS 1 
K     OCT 135       CONSTANT
XYZ   BSS 1 
CHA   EQU 12B       I-O CHANNEL 
CHB   EQU 13B 
B7700 OCT 7700
B7777 OCT 7777
MW107 DEF M107B+10
MX107 DEF M107A+10
MY107 DEF M107A+3 
MZ107 DEF M107B+3 
MX114 DEF EE114+15
CH1I  DEF CH1 
CH3I  DEF CH3 
WCR   NOP 
ASC6  ASC 01,6
ASC7  ASC 01,7
      HED SUBROUTINES 
PATX  NOP           GENERATE PATTERN
      LDA BUF 
      STA BUF2
      LDA K         GET FIRST VALUE PATTERN 
      ADA EOTCT     ADD PASS COUNT
L3    STA BUF2,I    STORE IN BUF
      ISZ BUF2      INCR BUF
      NOP             POINTER 
      ISZ CNT       LAST PATTERN ?
      RSS           NO, CONTINUE
      JMP LBFZ      YES, RETURN 
      CMA           COMPLEMENT PATTERN
      STA BUF2,I    STORE PATTERN 
      CMA           RESTORE PATTERN 
      ADA K         ADD NEW VALUE TO OLD PATTERN
      ISZ BUF2      INCR BUF
      NOP             POINTER 
      ISZ CNT       LAST PATTERN ?
      JMP L3        NO, CONTINUE
LBFZ  LDA BUF       GET ADDR OF BUF 
      CMA,INA       SUBTRACT
      INA            TWO FROM BUF 
      INA             TO GET
      CMA,INA          BUFFER-Z'S 
      STA BUFZ          ADDR
      LDB PATT1     GET PATTERN 
      STB A,I       STORE IN BUFF-Z 
      CMB           COMPLEMENT PATTERN
      INA           NEXT LOCATION IN BUFF-Z 
      STB A,I       STORE PATTERN 
      JMP PATX,I    YES, RETURN 
* 
REV   NOP           REVERSE I-O SELECT CODES
      LDA USSC      GET USERS SELECT CODES
      AND B77       MASK OFF BITS 0-5 
      ALF             AND 
      RAL,RAL           STORE 
      STA B             IN BITS 6-9 
      LDA USSC      GET BITS 6-9
      ALF,ALF         AND 
      RAL,RAL           STORE 
      AND B77             IN
      IOR B                 BITS 0-5
      STA USSC      RESTORE NEW SC
      LDA CH1I,I    RECONFIGURE 
      AND NB77        STC INSTRUCTION 
      STA SAVA          * 
      LDA USSC          * 
      ALF,ALF           * 
      RAL,RAL           * 
      AND B77           * 
      IOR SAVA          * 
      STA CH1I,I        * 
      JMP REV,I     RETURN
      SKP 
ERR   NOP           REPORT ERROR MESSAGE
      STA SAVA      SAVE A-REG
      STB SAVB      SAVE B-REG
      CLE           PACK IN UPPER BYTE
      LDB MY107     BUFFER ADDRESS
      JSB O2AS,I    OCTAL TO ASCII CONV 
      CLE           PACK IN UPPER BYTE
      LDA SAVB      ACTUAL DATA 
      LDB MZ107     BUFFER ADDRESS
      JSB O2AS,I    OCTAL TO ASCII CONV 
      CLE           PACK IN UPPER BYTE
      LDA BUF2      FAILING ADDRESS 
      LDB MX107     BUFFER ADDRESS
      JSB O2AS,I    OCTAL TO ASCII CONV 
      CLE           PACK IN UPPER BYTE
      LDA BUFX      EXP BUF ADDR
      LDB MW107 
      JSB O2AS,I    OCTAL TO ASCII CONV 
      LDA SAVA      RESTORE A-REG 
      LDB SAVB        AND B-REG 
E107  JSB ERMSG     PRINT ERROR MESSAGE 
      DEF EE107 
      LDA SAVA      RESTORE A-REG 
      LDB SAVB        AND B-REG 
      JMP ERR,I     RETURN
      SKP 
DMAO  NOP           DMA OUT 
      LDA USSC      GET I-O CH
      NOP           DEBUG 
      NOP           DEBUG 
      AND B77       MASK OFF
      IOR BIT15     ADD CONTROL WORD
      NOP           DEBUG 
      OTA 6         OUTPUT CW1
      CLC 2         PREPARE MEM.ADR.REG.
      LDA BUF       ADDR OF BUFFER
      NOP           DEBUG 
      OTA 2         OUTPUT MEM.ADR.REG. 
      STC 2         PREPARE WC
      LDA WCNT      WORD COUNT
      NOP           DEBUG 
      OTA 2         OUTPUT WC 
      NOP           DEBUG 
      JMP DMAO,I    RETURN
* 
DMAI  NOP           DMA IN
      LDA USSC      GET I-O CH
      ALF,ALF       POISTION BITS 
      RAL,RAL         6-9 IN 0-5
      AND B77       MASK OFF
      IOR BIT15     ADD CONTROL WORD
      NOP           DEBUG 
      OTA 7         OUTPUT CW1
      CLC 3         PREPARE MEM.ADR.REG.
      LDA BUF1      BUFFER ADDR 
      NOP           DEBUG 
      IOR BIT15     ADD CW
      OTA 3         OUTPUT MEM.ADR.REG. 
      STC 3         PREPARE FOR WC
      LDA WCNT      WORD COUNT
      NOP           DEBUG 
      OTA 3         OUTPUT WC 
      NOP           DEBUG 
      JMP DMAI,I
      SKP 
ERR1  NOP 
      STB WCR       SAVE WCR VALUE
      LDA WCNT      GET STARTING WC VALUE 
      CPA B         IS WCR = WC VALUE ? 
      JMP *+2       YES 
      JMP *+4       NO
E110  JSB ERMSG     REPORT ERR
      DEF EE110 
      JMP ERR1,I    RETURN
E111  JSB ERMSG 
      DEF EE111 
      JMP ERR1,I    RETURN
* 
ERR2  NOP 
      STB WCR       SAVE WCR VALUE
      SZB           IS WCR = TO ZERO ?
      JMP *+4       NO
E113  JSB ERMSG     REPORT ERR
      DEF EE113 
      JMP ERR2,I    RETURN
      LDA WCNT      GET STARTING WC VALUE 
      CPA B         IS WCR = TO WC ?
      JMP *+2       YES 
      JMP *+4       NO
E112  JSB ERMSG     REPORT ERR
      DEF EE112 
      JMP ERR2,I    RETURN
      LDB MX114     SET 
      LDA WCR        UP 
      CLE             MESSAGE 
      JSB O2AS,I       WITH 
      LDA WCNT          ACTUAL
      LDB WCR            WCR VALUE
E114  JSB ERMSG     REPORT ERR
      DEF EE114 
      JMP ERR2,I    RETURN
* 
SMSG  NOP           SET 
      STA EX110,I    UP 
      STA EX111,I     MESSAGE 
      STA EX112,I      WITH 
      STA EX113,I       DMA-6 
      STA EX114,I        OR DMA-7 
      JMP SMSG,I
* 
EX110 DEF EE110+7   ERR MESSAGE ADDRESS 
EX111 DEF EE111+7 
EX112 DEF EE112+7 
EX113 DEF EE113+7 
EX114 DEF EE114+7 
      HED DIAGNOSTIC SUBROUTINES
* SWRT INVESTIGATES THE STATE OF THE S-REG. IF ANY BIT(S) 
*  AS SPECIFIED IN THE B-REG ARE SET SWRT RETURNS P+1 
*   ELSE P+2. 
* 
SWRT  NOP 
      STA SAVAX     SAVE A-REG. 
      JSB DEBON     GO DEBOUNCE SW.REG. 
      AND B         MASK OUT TEST BIT(S). 
      SZA,RSS       ANY SWITCHES UP?
      ISZ SWRT       NO! UPDATE RETURN TO P+2.
      LDA SAVAX      YES! GET ORIGINAL A-REG. 
      JMP SWRT,I    RETURN. 
      SPC 3 
* SWITCH REGISTER DEBOUNCE ROUTINE
*  TO PREVENT OVERLAY OF A HALT BY A DEPRESSED DISPLAY REG. BIT.
* 
DEBON NOP 
      LIA SR        GET SWITCH REG. 
      STA SAVEA     SAVE SW.REG. SETTING. 
      CLA,CCE       READY INDICATORS. 
WAITS OTA SR        TRY TO CLEAR SW.REG.
      LIA SR        GET SW.REG. BACK. 
      SZA,RSS       IS OPERATOR PRESSING A SWITCH?
      JMP WAITO      NO! GO DO NEXT SW. REG. TEST.
      CLA,CLE        YES! SET DELAY MARKER. 
      JMP WAITS     WAIT UNTIL OPERATOR LETS GO.
WATM1 CLE           SET DELAY MARKER. 
WAITO CCA           SET TEST PATTERN. 
      OTA SR        ATTEMPT TO SET ALL SR BITS. 
      LIA SR        GET SR CONTENTS.
      ISZ A         IS OPERATOR CLEARING A SWITCH?
      JMP WATM1      YES! WAIT UNTIL HE LETS GO.
      SEZ           WAS A SW.REG. BIT PRESSED?
      JMP RESSW      NO! GO RESTORE SW.REG. 
      INA            YES! DELAY 
      SZA                  ABOUT
      JMP *-2               400 MS. 
      JMP WAITS     TRY TEST AGAIN. 
RESSW LDA SAVEA     RESTORE ORIGINAL SW.REG.
      OTA SR        RESTORE DISPLAY.
      JMP DEBON,I   RETURN. 
      SPC 2 
* THIS ROUTINE SETS THE DMA XFER ERROR MESSAGE TO 
*  READ AS AN OUTPUT FAILURE. 
SETOT NOP 
      JSB FIXMS     PUT 
      ASC 1, O       AN 
      DEF EE063+5     -OUT- 
      JSB FIXMS        IN 
      ASC 1,UT          THE 
      DEF EE063+6        MESSAGE STRING.
      JMP SETOT,I    RETURN.
      SKP 
* STUFFS A JUMP PADDR,I IN TRAP CELL 6
*  AND THE DESTINATION ADDRESS IN PADDR 
* 
STUF6 NOP 
      LDA JLINK     GET A JMP PADDR,I 
      STA 6         STORE IT IN TRAP CELL.
      LDA STUF6,I   GET DESTINATION ADDRESS.
      STA PADDR     SAVE IT.
      ISZ STUF6     UPDATE RETURN.
      JMP STUF6,I   RETURN. 
      SPC 2 
* STUFFS A JUMP PADDR,I IN TRAP CELL 7
*  AND THE DESTINATION ADDRESS IN PADDR 
* 
STUF7 NOP 
      LDA JLINK     GET A JMP PADDR,I 
      STA 7         STORE IT IN THE TRAP CELL.
      LDA STUF7,I   GET DESTINATION ADDRESS.
      STA PADDR     SAVE IT.
      ISZ STUF7     UPDATE RETURN.
      JMP STUF7,I   RETURN. 
      SPC 3 
* STUFFS A JUMP PADDR,I IN THE I-O TRAP CELL
*  AND THE DESTINATION ADDRESS IN PADDR 
* 
STUFI NOP 
      LDA JLINK     GET A JMP PADDR,I.
      STA USRSC,I   PUT IT IN I-O TRAP CELL.
      LDA STUFI,I   GET DESTINATION ADDRESS.
      STA PADDR     SAVE IT.
      ISZ STUFI     UPDATE RETURN.
      JMP STUFI,I   RETURN. 
      SPC 2 
* STORES AN ASCII STRING IN A MESSAGE STRING. 
* CALLING FORMAT- 
*   JSB FIXMS 
*   ASC 1,XX
*   DEF MESG STRING POINTER 
* 
FIXMS NOP 
      LDA FIXMS,I   GET AN ASCII WORD.
      ISZ FIXMS     UPDATE RETURN TO P+2. 
      STA SAVEA     SAVE ASCII DATA.
      LDA FIXMS     GET JSB+2 ADDR. 
      IOR BIT15     MAKE IT AN INDIRECT ADDR. 
      STA FIXMS     RESTORE NEW ADDR. 
      LDA SAVEA     RESTORE ASCII DATA. 
      STA FIXMS,I   STORE ASCII IN MESSAGE STRING.
      ISZ FIXMS     UPDATE RETURN.
      LDA FIXMS     GET JSB LINK ADDR.
      ELA,CLE,ERA   CLEAR INDIRECT BIT. 
      JMP A,I       RETURN. 
      SKP 
* SETS UP THE GOOD AND BAD DATA IN THE MESSAGE
*  STRING AFTER A WCR FAILURE.
* 
PDATA NOP 
      STB DAIN      SAVE ACTUAL DATA. 
      LDB WC1RP     GET MESSAGE POINTER.
      JSB O2AS,I    CONVERT OCTAL TO ASCII. 
      LDA DAIN      GET ACTUAL DATA.
      LDB WC1R2     GET MESSAGE POINTER.
      JSB O2AS,I    CONVERT OCTAL TO ASCII. 
      JMP PDATA,I   RETURN. 
      SPC 2 
* REPORTS A DMA1 WCR FAILURE. 
* 
FIX33 NOP 
      JSB FIXMS     UPDATE
      ASC 1,R1       ERROR
      DEF EE033+4     MESSAGE.
      DLD SVRES     GET GOOD-BAD WCR DATA 
      JSB ERMSG     REPORT WCR1 GOOD=XXXXXX 
      DEF EE033              BAD=XXXXXX 
*                  A=EXPECTED WCR1 CONTENTS 
*                  B=ACTUAL WCR1 CONTENTS 
      JMP FIX33,I   RETURN. 
      SPC 2 
* REPORTS A DMA2 WCR FAILURE. 
* 
FIX34 NOP 
      JSB FIXMS     UPDATE
      ASC 1,R2        ERROR 
      DEF EE033+4     MESSAGE TO WCR2.
      DLD SVRES     GET GOOD-BAD WCR DATA 
      JSB ERMSG     REPORT WCR2 GOOD=XXXXXX 
      DEF EE033                BAD=XXXXXX 
*                  A=EXPECTED WCR2 CONTENTS 
*                  B=ACTUAL WCR2 CONTENTS 
      JMP FIX34,I   RETURN. 
      SPC 2 
* THIS RETURN SETS THE DMA XFER ERROR MESSAGE 
*  TO READ AS AN INPUT FAILURE. 
* 
SETIN NOP 
      JSB FIXMS     PUT 
      ASC 1, I       AN 
      DEF EE063+5     -IN-
      JSB FIXMS        INTO 
      ASC 1,N           THE 
      DEF EE063+6        MESSAGE STRING.
      JMP SETIN,I   RETURN. 
      SKP 
* I-O SUBROUTINES 
* 
STF   NOP           SET I-O FLAG. 
STFX  STF CH
      JMP STF,I 
      SPC 2 
CLCC  NOP 
CLCCX CLC CH,C      CLEAR I-O CONTROL FF. 
      JMP CLCC,I
      SPC 2 
      SPC 2 
STC   NOP 
STCX  STC CH        SET I-O CONTROL FF. 
      JMP STC,I 
      SPC 2 
STCC  NOP 
STCCX STC CH,C      SET I-O CONTROL,CLEAR FLAG. 
      JMP STCC,I
      SPC 2 
OTA   NOP 
OTAX  OTA CH        OUTPUT TO I-O DATA BUFFER.
      JMP OTA,I 
      SPC 2 
LIA   NOP 
LIAX  LIA CH        INPUT I-O DATA BUFFER.
      JMP LIA,I 
      SPC 2 
SFS   NOP 
SFSX  SFS CH        IS I-O FLAG SET?
      JMP SFS,I      NO! RETURN P+1.
      ISZ SFS        YES! RETURN P+2. 
      JMP SFS,I 
      SPC 2 
FIXDT NOP 
      STA SAVAX     SAVE A-REG. 
      LDA MARKB     GET BOARD TYPE. 
      CPA PATT1     16 BIT BOARD? 
      JMP EXITF      YES! EXIT. 
      LDA B377       NO! GET BYTE MASK. 
      AND B         MASK OFF HI BYTE. 
      STA B         PUT NEW VALUE AWAY. 
EXITF LDA SAVAX     RESTORE A-REG.
      JMP FIXDT,I   RETURN. 
MARKB NOP 
      SKP 
* SET UP DMA1 FOR OUTPUT. MEM ADDR IN A, COMPLEMENT WRD-CNT IN B
* 
OUT1  NOP 
      CLC 2         PREPARE TO RECV MEM ADDR
      OTA 2         OUTPUT MEM ADDR 
      CMA           TRY TO CHANGE DMA1
      CLC 3          BY 
      OTA 3              CHANGING DMA2. 
      STC 2         PREPARE TO RECV WRD-CNT 
      OTB 2         OUTPUT WRD CNT
      LDA CNTLW     CONTROL WORD= STC,CLC.
      IOR USRSC     INCLUDE I/O SELECT CODE 
      OTA 6         OUTPUT DMA1 CNTL WORD.
      XOR CNTLW     ALTER DMA2 CONTROL AND
      ADA B11        AND CHANGE SERVICE 
      OTA 7           SELECT CODE.
      JMP OUT1,I    RETURN. 
      SPC 1 
* SET UP DMA2 FOR OUTPUT. SAME AS FOR DMA1 (OUT1 ). 
* 
OUT2  NOP 
      CLC 3         READY FOR MEM ADDR. 
      OTA 3         OUTPUT TO MAR.
      CMA           TRY TO CHANGE DMA2
      CLC 2           BY
      OTA 2             CHANGING DMA1.
      STC 3         READY FOR WORD COUNT. 
      OTB 3         OUTPUT TO WCR.
      LDA CNTLW     GET CONTROL WORD= STC,CLC.
      IOR USRSC     MERGE I-O SC. 
      OTA 7         OUTPUT TO DMA2. 
      XOR CNTLW     CHANGE DMA1 CONTROL 
      ADA B11        AND CHANGE SERVICE SELECT CODE 
      OTA 6           ON DMA1.
      JMP OUT2,I    RETURN. 
      SPC 1 
TRAPC NOP 
      LDA B2        START AT ADDR 2.
      LDB THLTX     GET A HLT 106077. 
THLTL STB A,I       PUT HALT IN A TRAP CELL.
      INA           UPDATE ADDR OF TRAP CELLS.
      CPA B100      LAST TRAP CELL? 
      JMP TRAPC,I    YES! EXIT. 
      JMP THLTL      NO! DO NEXT TRAP CELL. 
      SKP 
* THIS SUBROUTINE STORES ALL DATA REPORTED
*  DURING A DMA OUTPUT OR INPUT XFER FAILURE INTO 
*   THE ERROR MESSAGE STRING THEN PRINTS THE MESSAGE. 
* 
PXDAT NOP 
      CLE 
      LDA PADDR     GET FAILING ADDRESS.
      LDB OUTP1     GET MESSAGE POINTER.
      JSB O2AS,I    CONVERT OCTAL TO ASCII. 
      CLE 
      LDA EXPDA     GET EXPECTED DATA.
      LDB OUTP2     GET MESSAGE POINTER.
      JSB O2AS,I    CONVERT OCTAL TO ASCII. 
      CLE 
      LDA DAIN      GET ACTUAL DATA.
      LDB OUTP3     GET MESSAGE POINTER.
      JSB O2AS,I    CONVERT OCTAL TO ASCII. 
      LDA PADDR     GET XFER ADDRESS. 
      LDB DAIN      GET ACTUAL DATA IN. 
      JSB ERMSG     PRINT ERROR MESSAGE.
      DEF EE063     ERROR MESSAGE POINTER.
*                 A=TRANSFER ADDRESS
*                 B=ACTUAL DATA TRANSFERRED 
      JMP PXDAT,I   RETURN. 
EXPDA NOP 
      SPC 3 
* THIS SUBROUTINE STORES ALL DATA REPORTED
*  DURING A DMA OUTPUT OR INPUT XFER FAILURE INTO 
*   THE ERROR MESSAGE STRING THEN PRINTS THE MESSAGE. 
* 
PXDT2 NOP 
      LDA PADDR     GET FAILING ADDRESS.
      LDB OUTP1     GET MESSAGE POINTER.
      JSB O2AS,I     CONVERT OCTAL TO ASCII.
      LDA DAIN      GET EXPECTED DATA.
      LDB OUTP2     GET MESSAGE POINTER.
      JSB O2AS,I    CONVERT OCTAL TO ASCII. 
      LDA PADDR,I   GET ACTUAL DATA.
      LDB OUTP3     GET MESSAGE POINTER.
      JSB O2AS,I    CONVERT OCTAL TO ASCII. 
      LDA PADDR     GET XFER ADDRESS. 
      LDB DAIN      GET EXPECTED DATA IN. 
      JSB ERMSG     PRINT ERROR MESSAGE.
      DEF EE063     ERROR MESSAGE POINTER.
*                 A=TRANSFER ADDRESS
*                 B=EXPECTED DATA TRANSFERRED 
      JMP PXDT2,I   RETURN. 
      SKP 
TSTC1 NOP 
      LDA CLF0      SET SO WHEN IT INTERRUPTS THE INTS. 
      STA USRSC,I   ARE TURNED OFF
      JSB CLCC      INSURE I/O IS OFF 
      LDA BIT15     CHANGE CONTROL WORD TO
      IOR USRSC       STC DURING XFER.
      OTA 6         OUTPUT TO DMA1. 
      XOR BIT15     TRY TO CHANGE DMA1
      OTA 7          BY CHANGING DMA2.
      STC 6,C       TURN ON DMA1
      JSB STF       SET I/O FLAG TO START TRANSFER
      CLC 6         CLR DMA CTL TO AVOID DMA INT
      CLA           START A WAIT TIME 
      INA,SZA,RSS 
      JMP *+3 
      JSB SFS       IS FLAG SET YET 
      JMP *-3       NO WAIT FOR IT
      STF 0         ENABLE INT. IF I-O CTL IS SET,
      NOP            INT WILL TURN OFF INT SYS
      JMP TSTC1,I 
      SPC 1 
TSTC2 NOP 
      LDA CLF0      SET SO THAT INTPS ARE TURNED OFF
      STA USRSC,I     WHEN INTERRUPT OCCURS 
      JSB CLCC      TURN INTF OFF 
      LDA BIT15     CHANGE CONTROL WORD TO STC
      IOR USRSC      DURING XFER. 
      OTA 7         OUTPUT TO DMA2. 
      XOR BIT15     TRY TO CHANGE DMA2 CONTROL
      OTA 6          BY CHANGING DMA1.
      STC 7,C       TURN ON DMA2. 
      JSB STF       SET FLAG TO START TRANSFER
      CLC 7         DISABLE DMA2 INTERRUPTS.
      CLA           SET FOR TIME OUT
      INA,SZA,RSS 
      JMP *+3 
      JSB SFS       IS FLAG SET YET?
      JMP *-3       NO WAIT 
      STF 0         TURN ON INT SYSTEM. 
      NOP            INT WILL TURN OFF INT SYSTEM.
      JMP TSTC2,I 
      SPC 1 
                                                                                          