


       NAM TTYI0
*
*      THIS IS A I/O ROUTINE DESIGNED TO LOAD & DUMP
*      THE CONTENTS OF A USER DEFINED BUFFER TO THE
*      TELETYPE.
*
*      IT USES 2 BUFFERS DEFINED IN THE CALLING PROGRAM
*
*      ACCUM A- CONTAINS A FLAG 1=INPUT
*      0=OUTPUT
*
*      BBUF-CONTAINS HEX REPRESENTATION OF OBJECT BUFFER
*
*      CBUF- IS THE OBJECT BUFFER TO BE DUMPED
*
*      THE TWO BUFFERS ARE IN CONTIGUOUS STORAGE
*
*      THE CALL TO TTYIO SHOULD BRANCH TO $9010
*
*
*      WRITTEN BY W. D. PIERCE 6 F. E. CARDEN
*      STARTED 9-16-75
*
*
       ORG $9010
       OPT  O=TTYOBJ
       OPT SYMBOL
OPTN   EQU $9000
SIZ    EQU $9001
ACIAC  EQU $8008 ACIA CONTROL LOCATION
ACIAD  EQU $8009 ACIA DATA LOCATION
COUNT  EQU $9002
TEMP   EQU $9003
INDXA  EQU $9004
*
       NOP
       NOP
       NOP
       STA A OPTN STORE OPTION CODE
       LDA A 0,X
       STA A SIZ STORE BUFFER SIZE
       CMP A #$00
       BEQ JMPX
       JMP CONTA
JMPX    JMP ENDC
CONTA   CLR COUNT CLEAR COUNTER

       LDA A OPTN CHECK FOR INPUT OR OUTPUT O
       CMP A #$00
       BEQ OUTPT
ERROR  NOP
       LDA B #$3F (?)=(00111111)
       JSR DOUT
       JMP INPUT
DOUT   LDA A ACIAC MAIN OUTPUT ROUTINE
       LSR A
       LSR A
       BCC DOUT
       STA B ACIAD
       RTS
INPUT  NOP INPUT ROUTINE
       STX INDXA
       INX
LOOP   LDA A ACIAC
       TAB
       AND B #$70 (01110000)=ERROR FLAGS
       BNE ERROR ERROR CHECK
       ROR A
       BCC LOOP CHECK IF A CHAR. IS IN
       LDA A ACIAD
       AND A #$7F

       STA A TEMP
       TAB
       JSR DOUT ECHO BACK
       LDA A TEMP
       CMP A #$5F )BACK ARROW) =CHAR. DELETE
       BEQ BKSPC
       CMP A #$18 (CNTL+X)=LINE DELETE
       BEQ REST
       CMP A #$0D (CR)=END OF INPUT
       BEQ  ENDB
       STA A 0,X

       INX
       INC COUNT
       LDA A COUNT
       CMP A SIZ CHECK IF BUFFER IS FULL
       BEQ ENDC
       JMP LOOP
BKSPC  DEX DELETE LAST CHAR.
       DEC COUNT
       JMP LOOP
*
REST   DEX LINE DELETE
       DEC COUNT
       LDA A COUNT
       CMP A #$00
       BNE REST CHECK IF RESET IS COMPLETE
       LDA B #$0D C/R
       JSR DOUT
       LDA B #$0A L/F
       JSR DOUT
       JMP LOOP
*
OUTPT  INX OUTPUT ROUTINE
LOOP1  LDA B 0,X
       JSR DOUT
       INX
       INC COUNT
       LDA A COUNT
       CMP A SIZ CHECK IF BUFFER HAS BEEN DU
       BEQ ENDC
       JMP LOOP1
*
*
ENDB   LDX INDXA RESET BUFFER SIZE
       LDA A COUNT
       STA A 0,X
       LDA B #$A
       JSR DOUT
       RTS
*
ENDC   LDA B #$0D
       JSR DOUT
       LDA B #$0A
       JSR DOUT
       RTS
       PAGE
*
*      INPUT ROUTINE
*
*USAGE:IN THE CALLING PROGRAM THE FOLLOWING
*             IS INSERTED;
*
*      INPUT EQU $910C  (AT THE START OF CALLING PROGRAM)
*
*
*      LDX #NAM (TO USE INPUT)
*      JSR INPUT
*
*
*NAM   RMB 1 (THE INPUT BUFFER)
*      RMB 72
*
*      WRITTEN BY W.D. PIERCE & F. E. CARDEN
*      STARTED 9-18-75
*
       ORG $910A
TTYIO  EQU $9010
TEMP2  RMB 2
       LDA A #72
       STA A 0,X
       LDA A #$01
       JSR TTYIO
       RTS
       PAGE
*
*      OUTPUT ROUTINE
*
*      USAGE: IN THE CALLING PROGRAM THE FOLLOWING
*             IS INSERTED;
*
*      OUTPUT EQU $90F0  (AT THE START OF THE CALLING PROG)
*
*
*      LDX #NAM  (TO USE OUTPUT)
*      JSR OUTPUT
*
*
*      NAM FCB NN (WHERE NN IS THE SIZE OF THE OUTPUT BUFFER)
*          FCC /  OUTPUT BUFFER  /
*
*      WRITTEN BY W.D. PIERCE & F.E. CARDEN
*      STARTED 9-18-75
*
       ORG $90F0
       LDA A #$00
       JSR TTYIO
       RTS
       END
PAGE
