

       NAM ACIACK
*THIS  ROUTINE TESTS MOST OF THE FUNCTIONS
*OF    AN ACIA CARD. CONNECT THE TX(RS232C) DATA OUT
*TO    THE RX DATA IN. CONNECT THE RTS OUT TO
*THE   CTS IN, SET THE BAUD RATE SWITCH TO YOUR
*SPEED AND ENTER THE PROGRAM.
*THIS  PROGRAM WILL STEP THROUGH ALL THE WORD
*SIZE  SETTINGS FOR BOTH THE DIVIDE BY 16 AND 64
*CLOCK SETTINGS. IT WILL TRANSMIT, RECEIVE AND CHECK
*A     WORD OF ALTERNATE ZEROS AND ONES FOLLOWED
*BY    A WORD OF ALTERNATE ONES AND ZEROS. IT USES
*THE   INTERRUPT MODE OF OPERATION WHICH CHECKS BOTH
*THE   INTERRUPTS AND THE TX AND RX STATUS BITS.
*ERRORSARE PRINTED OUT GIVING THE WORD WHICH
*FAILED,WHAT CONTROL WORD WAS IN EFFECT AND
*THE   STATUS REGISTER CONTENTS.
       SPC 1
HARD   EQU $FFF8  INTERRUPT VECTOR LOCATION
MAID   EQU $F0F9  MAID ENTRY POINT
PDATA  EQU $F024  XBUG MESSAGE PRINTING ROUTINE
INADDR EQU $F00F  XBUG ADDRESS ROUTINE
OUT2HS EQU $F01B  XBUG BYTE OUTPUT ROUTINE
OUTCH  EQU $F018  XBUG CHARACTER OUTPUT ROUTINE
       SPC 1
       BSCT
MR     FCB %01010111  MASTER RESET WORD
WDCNT  RMB 1  COUNT FOR WORD SIZE SETTINGS
NFLAG  RMB 1  FLAG FOR 7 TO 8 BIT CHANGE
DFLAG  RMB 1 FLAG FOR 16 TO 64 CHANGE
WD2FLG RMB 1 WORD 2 FLAG FOR ALTERNATIONS
CTRLWD RMB 1  CONTROL WORD IN USE
WD1    RMB 1 WORD 1
WD2    RMB 1  WORD 2
CNT    RMB 1  BIT COUNT FOR PRNT01 ROUTINE
ACIA   RMB 2  ACIA LOCATION
STATUS RMB 1  STATUS AT ERROR TIME
XMIT   RMB 1  XMIT FLAG FOR SINGLE XMIT
TESTN  RMB 1 TEST COUNT
       SPC 1
       PSCT
*LOCATEACIA, INITIALIZE IT & CK PATHS
START  SEI  GET ACIA LOCATION
       LDX #MSG1
       JSR PDATA
       LDX #$FF08
       JSR INADDR
       LDX $FF0A
       STX ACIA
       LDX #INT
       STX HARD  INTERRUPT VECTOR
       LDAA #3 SET INITIAL CONDITIONS
       STAA WDCNT
       CLR A
       STAA NFLAG
       STAA WD2FLG
       STAA STATUS
       STAA XMIT
       LDX ACIA
       LDAA #$30  TEST COUNT
       STAA TESTN
       LDAA MR
       STAA 0,X  MASTER RESET ACIA
       LDAA #1 SET UP RTS
       STAA DFLAG
       STAA 0,X
       LDAA #$A1  DIVIDE BY 16
       STAA CTRLWD
       LDAA #$55  7 BIT WD1
       STAA WD1
       LDAA #$2A  7 BIT WD2
       STAA WD2
       LDAA 0,X  READ STATUS
       BIT A #$8  CHECK RTS TO CTS
       BEQ A1  CTS OK
       JMP ERCTS  CTS =1 NG
A1     LDAA #$15 CHECK TX RX PATH
       STAA 0,X
       LDAA #$55
       STAA 1,X
       LDAB #3  WAIT FOR TRANSFER
B2     LDX #0
B1     INX
       BNE B1
       DEC B
       BNE B2
       LDX ACIA  TEST THE WORD
       LDAB 1,X
       CBA  SEE IF OK
       BEQ C1
       JMP ERTXRX  NOT OK
       SPC 1
*MAIN  WAITING ROUTINE AND TIMER
C1     NOP
       LDX #END
       JSR PDATA
       LDX ACIA
       LDAA CTRLWD
       STAA 0,X  LOAD FIRST CONTROL WORD
       LDX #0
       NOP
       CLI
TST    INX  WAITING ROUTINE
       NOP
       NOP
       BNE TST
       SEI
       LDAA 0,X
       STAA STATUS
       JMP ERTIME  WAITING TOO LONG
       SPC 1
*INTERRUPTROUTINES
INT    NOP  CHECK STATUS
       LDX ACIA
       LDAA 0,X
       STAA STATUS
       BIT A #1
       BNE RX RCVR
       BIT A #2
       BNE TX  XMITTER
       LDAA #3 RESET ACIA
       STAA 0,X
       SWI  SOMEONE ELSE INTERRUPTED
       SPC 1
TX     NOP  XMIT ROUTINE
       LDAA XMIT
       BNE D1
       INC XMIT
       LDAA WD2FLG  CHECK FLAG
       BNE WD2TX
WD1TX  LDAA WD1
       STAA 1,X  TX WD1
       LDX #1
       RTI
       SPC 1
WD2TX  LDAA WD2
       STAA 1,X  TX WD2
       LDX #1
D1     RTI
       SPC 1
RX     NOP RECEIVE ROUTINE
       CLR XMIT
       LDAA WD2FLG  CHECK WD2FLG
       BNE WD2RX
WD1RX  LDAA 1,X  READ WD1
       CMP A WD1
       BEQ R100
       JSR ERRWD1  NG
R100   INC WD2FLG  OK
       LDX #1
       RTI
       SPC 1
WD2RX  LDAA 1,X  READ WD2
       CMP A WD2
       BEQ R200
       JSR ERRWD2  NG
R200   CLR WD2FLG  OK
       INC TESTN
       LDAA TESTN
       JSR OUTCH
       DEC WDCNT
       BMI R300  CHECK IF MINUS
       LDAA CTRLWD  NOT MINUS
       ADDA #4  ADVANCE CTRLWD
       STAA CTRLWD
       STAA 0,X
       LDX #1
       RTI
       SPC 1
R300   LDAA NFLAG  IT'S MINUS DO 8 BITS
       BNE R400  CHECK IF NFLAG NOT ZERO
       LDAA #$55  EQUALS ZERO
       STAA WD1  SET UP 8 BIT WORDS FIRST TIME
       LDAA #$AA
       STAA WD2
       LDAA CTRLWD
       ADDA #4  ADVANCE CTRLWD
       STAA CTRLWD
       STAA 0,X
       INC NFLAG
       LDX #1
       RTI
       SPC 1
R400   LDAA WDCNT  8 BITS ALREADY SET UP
       CMP A #$FB  IS SERIES FINISHED
       BEQ R500  YES
       LDAA CTRLWD  NO
       ADDA #4  ADVANCE CTRLWD
       STAA CTRLWD
       STAA 0,X
       LDX #1
       RTI
       SPC 1
R500   DEC DFLAG
       BPL R600  ALL DONE ?
       JMP EXIT  YES
R600   LDAA #3  NO-DO DIVIDE BY 64
       STAA WDCNT
       LDAA #$A2
       STAA CTRLWD
       STAA 0,X
       CLR NFLAG
       LDAA #$55
       STAA WD1
       LDAA #$2A  BACK TO 7 BITS
       STAA WD2
       LDX #1
       RTI  HERE WE GO AGAIN
       SPC 1
*ERROR MESSAGES AND OUT
ERCTS  LDX #MSG3  RTS-CTS NG
       JSR PDATA
       JMP EXIT
       SPC 1
ERTXRX LDX #MSG6  RX-TX NG
       JSR PDATA
       JMP EXIT
       SPC 1
ERRWD1 LDX #MSG4  WD1 NG
       JSR PDATA
       LDX #WD1
       JSR OUT2HS
       BRA D100
       SPC 1
ERRWD2 LDX #MSG4  WD2 NG
       JSR PDATA
       LDX #WD2
       JSR OUT2HS
       BRA D100
       SPC 1
ERTIME NOP  TIMER RAN OUT
       LDX #MSG7
       JSR PDATA
       JSR D100
       JMP EXIT
       SPC 1
D100   NOP  PRINT STATUS AND CONTROL WORD
       LDX #MSG2
       JSR PDATA
       LDAB CTRLWD
       JSR PRNT01
       LDX #MSG5
       JSR PDATA
       LDAB STATUS
       JSR PRNT01
       LDX #END
       JSR PDATA
       LDX ACIA
       RTS
       SPC 1
PRNT01 NOP BINARY PRINTING ROUTINE
       PSH A
       LDAA #$8
       STAA CNT
       TBA
       BMI D200  A ONE
       BRA D300  A ZERO
D400   DEC CNT
       BEQ D500  ALL BITS DONE?
       ASL B  MOVE NEXT BIT INTO POSITION
       BMI D200
D300   LDAA ZERO
       JSR OUTCH
       BRA D400
       SPC 1
D200   LDAA ONE
       JSR OUTCH
       BRA D400
       SPC 1
D500   PUL A
       RTS
       SPC 1
EXIT   LDX #MSGL FINIS
       JSR PDATA
       LDX ACIA
       LDAA #3
       STAA 0,X
       JMP MAID
       SPC 1
*MESSAGESETC.
MSG1   FCC "ACIA LOCATION ="
       FCB 4
MSG2   FCC "CONTROL WORD= "
       FCB 4
MSG3   FCC "RTS-CTS NOT WORKING"
       FCB 4
MSG4   FCC "WORD IN ERROR= "
       FCB 4
MSG5   FCC "STATUS REGISTER= "
       FCB 4
MSG6   FCC "TX AND RX NOT TALKING"
       FCB 4
MSG7   FCC "TIMER RUN OUT"
       FCB 4
MSGL   FCC "TEST DONE"
END    FCB 4
ZERO   FCC "0"
ONE    FCC "1"
       BSZ 50
       END
