;=====================================================================
; UP TXD sendet ein Zeichen aus dem ACCU via RS232
;---------------------------------------------------------------------
; Stack-Pointer AR1: JA
; �bergabe: ASCII-Zeichen im ACCU
; R�ckgabe: keine
; ver�nderte Register: ARP
; Programmierer: MP
; Datum: 28.11.95                            letzte �nderung: 03.01.96
;---------------------------------------------------------------------
TXD:     mar   *,AR1         ; Stack-Pointer aktivieren
         popd  *+            ; R�cksprungadresse retten
         sar   AR7,*+        ; AR7 retten
txd_1:
         in    AR7,SR
         nop
         nop
         bit   AR7,12
         bcnd  txd_1,NTC
         sacl  AR7
         nop                 ; Pipeline-Protection
         nop                 ;
         out   AR7,THR
         mar   *,AR1
         mar   *-
         lar   AR7,*-        ; AR7 restaurieren
         pshd  *             ; R�cksprungadresse restaurieren
         ret
;---------------------------------------------------------------------
;=====================================================================
; UP RXD aktiviert den UART und wartet bis ein Zeichen empfangen wird.
;---------------------------------------------------------------------
; Stack-Pointer AR1: JA
; �bergabe: keine
; R�ckgabe: ASCII-Zeichen im ACCU
; ver�nderte Register: ARP
; Programmierer: MP
; Datum: 28.11.95                            letzte �nderung: 07.11.95
;---------------------------------------------------------------------
RXD:     mar    *,AR1         ; Stack-Pointer aktivieren
         popd   *+            ; R�cksprungadresse retten
         sar    AR7,*+        ; AR7 retten

rxd_1:
        ; lar    AR7,#05h
        ; out    AR7,CR

         in     AR7,SR
         nop
         nop
         bit    AR7,15
         bcnd   rxd_1,NTC
         in     AR7,RHR
         nop
         nop
         lacc   AR7
         and    #0ffh

         mar    *-
         lar    AR7,*-        ; AR7 restaurieren
         pshd   *             ; R�cksprungadresse restaurieren
         ret
;---------------------------------------------------------------------
RXD_CLR: in     AR7,SR
         nop
         nop
         bit    AR7,15
         bcnd   r_clr_e,NTC
         in     AR7,RHR
         b      RXD_CLR
r_clr_e: ret

;=====================================================================
; UART_I initialisiert den UART
;---------------------------------------------------------------------
; Stack-Pointer AR1: JA
; �bergabe: keine
; R�ckgabe: keine
; ver�nderte Register: ARP
; Programmierer: MP
; Datum: 28.11.95                            letzte �nderung: 03.01.96
;---------------------------------------------------------------------
UART_I:  mar    *,AR1        ; Stack-Pointer aktivieren
         popd   *+           ; R�cksprungadresse retten
         sar    AR7,*+       ; AR7 retten
; ACR
         lar   AR7,#08fh     ; ACR[7]=1, ACR[4]=Power Down off
         out   AR7,ACR       ;
; MR1
         lar   AR7,#013h
         out   AR7,MR1       ; kein RTS, no parity, 8 Bit
; MR2
         lar   AR7,#007h
         out   AR7,MR2       ; 1 Stoppbits
; CSR
         lar   AR7,#0cch     ; (38.4)/19.2 kbps f�r RXD und TXD mit ACR[7]=1
         out   AR7,CSR
         b     CRXX
;---------------------------------------------------------------------
; Initialisierung mit Baudrateclock vom int. UART-Timer
; ACR
         lar   AR7,#078h     ; 0111 1000b
         out   AR7,ACR
; CSR
         lar   AR7,#0ddh     ; Clock vom Timer intern
;         lar   AR7,#0ffh     ; Clock vom MPI
         out   AR7,CSR
; CTUR
         lar   AR7,#0
         out   AR7,CTUR
; CTLR
         lar   AR7,#6        ; 19.2 kBps �ber Timer intern
;         lar   AR7,#16       ; 115.2 kHz am MPO --> MPI f�r 115.2 kBps
         out   AR7,CTLR
; CR
CRXX:    lar   AR7,#85h      ; enable RXD und enable TXD
         out   AR7,CR
;---------------------------------------------------------------------
; IMR
         lar   AR7,#0        ; Interrupt disable
         out   AR7,U_IMR     ;

         mar    *,AR1
         mar    *-
         lar    AR7,*-        ; AR7 restaurieren
         pshd   *             ; R�cksprungadresse restaurieren
         ret
;=====================================================================
; CALL TXDSTRG sendet via V.24 einen String aus; Ende-Zeichen ist 0
; Beispiel:   txt:  .byte "Hallo, ich bin ein String!",10,13,0
;                    lar  ar7,#txt
;                    call TXDSTRG
;---------------------------------------------------------------------
; Stack-Pointer AR1:   Ja
; �bergabe:            Adress-Pointer in AR7
; R�ckgabe:            keine
; ver�nderte Register: ARP
; Unterprogmme:        TXD
; Programmierer:       MP
; Datum: 28.11.95                            letzte �nderung: 07.12.95
;---------------------------------------------------------------------
TXDSTRG: mar   *,AR1
         popd  *+
         sacl  *+
         sar   AR6,*+
txds1:   mar   *,AR7
;         lacc  *+
;-------------------         ; ** Idee **
;                            ; f�r die Stringausgaben aus dem CODE-Breich
        lacc  AR7           ; Stringadresse nach ACCUL
        tblr  060h           ; AR6=*ACCUL, Zeichen lesen
        nop
        nop
        mar   *,AR7
        adrk  1             ; Stringadresse inkrementieren

        lacc  060h          ; ACCU = Zeichen
;-------------------
         bcnd  txdsend,EQ
         call  TXD
         b     txds1
txdsend: mar   *,AR1
         mar   *-
         lar   AR6,*-
         lacc  *-
         pshd  *
         ret
;=====================================================================
TXDHEX:  call  BIN2HEX
         lar   AR7,#BUF
         call  TXDSTRG
         ret

