From: Leo C Date: Fri, 30 Oct 2015 09:02:26 +0000 (+0100) Subject: asci0 int: Save intermediate state. Not working! X-Git-Tag: hexrel-6.9~29 X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp-cpm3.git/commitdiff_plain/46c2044d53f17c5f48edfde56c09261114d70400 asci0 int: Save intermediate state. Not working! --- diff --git a/cbios/asci-cmn.180 b/cbios/asci-cmn.180 index c8f0c3b..63cbe90 100644 --- a/cbios/asci-cmn.180 +++ b/cbios/asci-cmn.180 @@ -33,7 +33,7 @@ as_init: jr nz,$+5 ld hl,initab1 - push hl + push hl ;save initab addr ld c,8 ; mlt bc ; ld hl,@ctbl+7 ;get baudrate index @@ -59,7 +59,7 @@ as_init: as_ini_1: ld b,h ld c,l - pop de + pop de ;get back initab addr ld hl,init_br_off add hl,de ld (hl),c diff --git a/cbios/ascii.180 b/cbios/ascii.180 index 12e18fd..54ee706 100644 --- a/cbios/ascii.180 +++ b/cbios/ascii.180 @@ -125,10 +125,10 @@ as0inp: jr nc,a0i_1 di in0 a,(cntla0) - res RTS0,a - set EFR,a - out0 (cntla0),a + and ~M_RTS0 ;assert RTS + or M_EFR ;don't reset error flags ei + out0 (cntla0),a a0i_1: call ff_get pop ix @@ -200,49 +200,59 @@ as1out: ;------------------------------------------ -; ASCI 1 Transmit/Receive interupt routines +; ASCI 0 Transmit/Receive interupt routines dseg rxtxi0: - in0 e,(stat0) ;receive flag set? 5 - jp p,txisv0 ; + push ix +rxtxi0_0: + in0 e,(stat0) ;receive flag set? + jp p,rxtxi0_1 ; + +rxi_0 + in0 a,(asext0) ;todo: break detection + and M_BREAK + or e + ld e,a - in0 a,(rdr0) ;todo: break detection 9 - in0 d,(cntla0) ; 1 + in0 d,(cntla0) ; res EFR,d ; - bit FE,e ;framing error? - jr nz,?0ri_1 - push ix ld ix,s0.inbuf ; ld hl,s0.inbuf ; - ld c,(ix+o.in_idx) ; + ld c,(ix+o.in_idx) ;-2 ld b,0 add hl,bc + in0 a,(rdr0) ; ld (hl),a - ld a,c ; - inc a - and (ix+o.mask) + bit FE,e ;framing error? + jr nz,?0ri_1 + + ld a,c ;increment buffer in pointer + inc a ; + and (ix+o.mask) ;-3 ld c,a - sub (ix+o.out_idx) ; + inc hl + jr z,$+5 + ld hl,s0.inbuf ; + sub (ix+o.out_idx) ;-1 jr z,$+5 ;skip if buffer is full - ld (ix+o.in_idx),c + ld (ix+o.in_idx),c ;-2 jr nc,$+6 - add (ix+o.mask) - inc a + add (ix+o.mask) ;-3 + inc a cp 96 jr c,$+4 - set RTS0,d ;RTS inactive - pop ix + set RTS0,d ;RTS inactive ?0ri_1: - out0 (cntla0),d ; 1 + out0 (cntla0),d ; + jr rxtxi0_0 -txisv0: - bit TDRE,e - ret z +rxtxi0_1: + bit TDRE,e ;TX int? + jr z,rxtxi0_e - push ix ld ix,s0.outbuf ; ld a,(ix+o.out_idx) ; @@ -264,6 +274,9 @@ txisv0: res TIE,e ;disable tx-int out0 (stat0),e ; 5 ?0ti_3: + jr rxtxi0_0 + +rxtxi0_e: pop ix ret