jr nc,a0i_1\r
di\r
in0 a,(cntla0)\r
- res RTS0,a\r
- set EFR,a\r
- out0 (cntla0),a\r
+ and ~M_RTS0 ;assert RTS\r
+ or M_EFR ;don't reset error flags\r
ei\r
+ out0 (cntla0),a\r
a0i_1:\r
call ff_get\r
pop ix\r
\r
\r
;------------------------------------------\r
-; ASCI 1 Transmit/Receive interupt routines\r
+; ASCI 0 Transmit/Receive interupt routines\r
\r
dseg\r
rxtxi0:\r
- in0 e,(stat0) ;receive flag set? 5\r
- jp p,txisv0 ;\r
+ push ix\r
+rxtxi0_0:\r
+ in0 e,(stat0) ;receive flag set?\r
+ jp p,rxtxi0_1 ;\r
+\r
+rxi_0\r
+ in0 a,(asext0) ;todo: break detection\r
+ and M_BREAK\r
+ or e\r
+ ld e,a\r
\r
- in0 a,(rdr0) ;todo: break detection 9\r
- in0 d,(cntla0) ; 1\r
+ in0 d,(cntla0) ;\r
res EFR,d ;\r
- bit FE,e ;framing error?\r
- jr nz,?0ri_1\r
\r
- push ix\r
ld ix,s0.inbuf ;\r
ld hl,s0.inbuf ;\r
- ld c,(ix+o.in_idx) ;\r
+ ld c,(ix+o.in_idx) ;-2\r
ld b,0\r
add hl,bc\r
+ in0 a,(rdr0) ;\r
ld (hl),a\r
\r
- ld a,c ;\r
- inc a\r
- and (ix+o.mask)\r
+ bit FE,e ;framing error?\r
+ jr nz,?0ri_1\r
+\r
+ ld a,c ;increment buffer in pointer\r
+ inc a ;\r
+ and (ix+o.mask) ;-3\r
ld c,a\r
- sub (ix+o.out_idx) ;\r
+ inc hl\r
+ jr z,$+5\r
+ ld hl,s0.inbuf ;\r
+ sub (ix+o.out_idx) ;-1\r
jr z,$+5 ;skip if buffer is full\r
- ld (ix+o.in_idx),c\r
+ ld (ix+o.in_idx),c ;-2\r
jr nc,$+6\r
- add (ix+o.mask)\r
- inc a\r
+ add (ix+o.mask) ;-3\r
+ inc a\r
cp 96\r
jr c,$+4\r
- set RTS0,d ;RTS inactive\r
- pop ix\r
+ set RTS0,d ;RTS inactive\r
?0ri_1:\r
- out0 (cntla0),d ; 1\r
+ out0 (cntla0),d ;\r
+ jr rxtxi0_0\r
\r
-txisv0:\r
- bit TDRE,e\r
- ret z\r
+rxtxi0_1:\r
+ bit TDRE,e ;TX int?\r
+ jr z,rxtxi0_e\r
\r
- push ix\r
ld ix,s0.outbuf ;\r
\r
ld a,(ix+o.out_idx) ;\r
res TIE,e ;disable tx-int\r
out0 (stat0),e ; 5\r
?0ti_3:\r
+ jr rxtxi0_0\r
+\r
+rxtxi0_e:\r
pop ix\r
ret\r
\r