From 6d39b0ffd70a3b610aca031e946496f3c3c916d3 Mon Sep 17 00:00:00 2001 From: Leo C Date: Mon, 29 Apr 2019 16:16:34 +0200 Subject: [PATCH] Send XON/XOFF chars in tx int routine, not in input routines. Removes polling loops. --- cbios/ascii.180 | 53 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/cbios/ascii.180 b/cbios/ascii.180 index 57b2be1..7b1ce1f 100644 --- a/cbios/ascii.180 +++ b/cbios/ascii.180 @@ -42,9 +42,14 @@ o.fflags equ 3 o.cflags equ 4 db 0 +o.stat equ 5 + b2m SXOFF,0 + b2m TDC1,1 + b2m TDC3,2 db 0 oint.iflags equ as0_dev+o.iflags-s0.inbuf oint.fflags equ as0_dev+o.fflags-s0.inbuf +oint.stat equ as0_dev+o.stat-s0.inbuf mkbuf s0.rx_id, s0.inbuf, s0.rx_len mkbuf s0.tx_id, s0.outbuf,s0.tx_len @@ -573,13 +578,13 @@ asci1_inp: jr nz,a1i_2 ; no, just get char bit IXOFF,(ix+oint.fflags) ; XON/XOFF on input? jr z,a1i_2 ; no -; di -a1i_1: in0 a,(stat1) ; status reg ASCI1 - bit TDRE,a ; Transmitter Data Reg. empty? - jr z,a1i_1 ; no, wait - ld a,DC1 ; DC1/XON - out0 (tdr1),a ; send out -; ei + + di + set TDC1,(ix+oint.stat) ; + in0 a,(stat1) ; + set TIE,a ; + out0 (stat1),a ; + ei a1i_2: ld a,c ; get back the char pop ix @@ -721,23 +726,37 @@ rxi0_nocrts: bit IXOFF,e jr z,rxtxi&dev&_lp1 - ;todo: send XOFF - -rxi_3: in0 a,(stat&dev) ; status reg ASCI1 - bit TDRE,a ; Transmitter Data Reg. empty? - jr z,rxi_3 ; no, wait - ld a,DC3 ; DC3/XOFF - out0 (tdr&dev),a ; send out + ;send XOFF + set TDC3,(ix+oint.stat) + in0 a,(stat&dev) ; + set TIE,a ; + out0 (stat&dev),a ; jr rxtxi&dev&_lp1 - txi&dev: ld e,a bit TDRE,e ;TX int? jr z,rxtxi&dev&_exit - ;todo: xon/xoff + bit IXOFF,(ix+oint.fflags) + jr z,txi&dev&_char +txi&dev&_dc1: + bit TDC1,(ix+oint.stat) + jr z,txi&dev&_dc3 + res TDC1,(ix+oint.stat) + ld a,DC1 + jr txi&dev&_dc1dc3 + +txi&dev&_dc3: + bit TDC3,(ix+oint.stat) + jr z,txi&dev&_char + res TDC3,(ix+oint.stat) + ld a,DC3 +txi&dev&_dc1dc3: + out0 (tdr&dev),a ; + jp rxtxi&dev&_lp0 +txi&dev&_char: ld hl,s&dev&.outbuf+o.in_idx ;[in] ld a,(hl) ; inc hl ;[out] @@ -754,7 +773,7 @@ txi&dev: and c ; ld (s&dev&.outbuf+o.out_idx),a ; - jr rxtxi&dev&_lp0 + jp rxtxi&dev&_lp0 txi&dev&_empty: res TIE,e ;disable tx-int -- 2.39.2