From 2fa1a7069a9709f8d61a198cec1b1d9b2e275fe1 Mon Sep 17 00:00:00 2001 From: Leo C Date: Tue, 5 May 2015 15:42:49 +0200 Subject: Z180 banking updates --- z180/msgbuf-a.180 | 183 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 144 insertions(+), 39 deletions(-) (limited to 'z180/msgbuf-a.180') diff --git a/z180/msgbuf-a.180 b/z180/msgbuf-a.180 index 1bdd826..ddb2d93 100644 --- a/z180/msgbuf-a.180 +++ b/z180/msgbuf-a.180 @@ -1,11 +1,11 @@ page 255 .z80 - + global mrx.fifo,mtx.fifo global msginit,msgi.st,msg.in,msgo.st,msg.out global msg.sout - + extrn buf.init include config.inc @@ -27,7 +27,7 @@ ; ; Init buffer ; - + msginit: ld ix,mrx.fifo ld a,mrx.fifo.mask @@ -49,7 +49,7 @@ buf.empty: ret z or 0ffh ret - + ;-------------------------------------------------------------- msg.in: @@ -71,12 +71,12 @@ bg.wait: inc h bg.nc: ld l,(hl) - + ld a,(ix+o.out_idx) ; inc a and (ix+o.mask) ld (ix+o.out_idx),a - + ld a,l pop hl pop ix @@ -100,6 +100,8 @@ buf.full: ;-------------------------------------------------------------- + if 0 + msg.out: push ix ld ix,mtx.fifo ; @@ -122,7 +124,7 @@ bp.wait: jr z,bp.wait ld (hl),b ld (ix+o.in_idx),a - + ld a,b out (AVRINT5),a pop bc @@ -130,50 +132,154 @@ bp.wait: pop ix ret + endif ;-------------------------------------------------------------- -; -; (hl): data -msg.sout: + + +msg.out: push ix ld ix,mtx.fifo ; +buf.put: push bc - push de - ld b,(hl) ; - inc hl - ex de,hl - -ms.ol: - push ix - pop hl ld c,(ix+o.in_idx) ; - ld a,c - add l - ld l,a - jr nc,ms.on - inc h -ms.on: + ld b,0 + push ix ;14 + add ix,bc ;10 + ld (ix+0),a ;15 + pop ix ;12 / 51 + ld b,a ; 4 ld a,c ; - inc a - and (ix+o.mask) -ms.wait: + inc a ; + and (ix+o.mask) ; +bp.wait: cp (ix+o.out_idx) ; - jr z,ms.wait - ld c,a - ld a,(de) - inc de - ld (hl),a - ld (ix+o.in_idx),c - djnz ms.ol + jr z,bp.wait ; + ld (ix+o.in_idx),a ; + + ld a,b out (AVRINT5),a - ex de,hl - pop de pop bc pop ix ret + +;-------------------------------------------------------------- + + if 0 + ; Works only, if buffer size < (128 - 3) + ; --> mask must be 03fh or less + +msg.out: + push ix + ld ix,mtx.fifo ; + +buf.put: + push bc + ld b,a ; 4 + ld a,(ix+o.in_idx) ;14 + ld ($ + 3 + 2),a ;15 + ld (ix+0),b ;15 + inc a ; + and (ix+o.mask) ; +bp.wait: + cp (ix+o.out_idx) ; + jr z,bp.wait ; + ld (ix+o.in_idx),a ; + + ld a,b + out (AVRINT5),a + pop bc + pop ix + ret + + endif + +;-------------------------------------------------------------- +; +; (hl): data + +msg.sout: + push ix ;14 + ld ix,mtx.fifo ;12 + push bc ;11 + push de ;11 + ld c,(hl) ; 6 + ld b,0 ; 6 + inc hl ; 7 +ms.ol: ; \ + ld a,low mtx.fifo ; 6 + add a,(ix+o.in_idx) ;14 + ld e,a ; 4 + ld a,high mtx.fifo ; 6 + adc a,b ; 4 + ld d,a ; 4 + + ld a,(ix+o.in_idx) ;14 + inc a ; 4 + and (ix+o.mask) ;14 +ms.wait: + cp (ix+o.out_idx) ;14 + jr z,ms.wait ; 6/8 + + ldi ;12 + ld (ix+o.in_idx),a ;15 + jp pe,ms.ol ; 6/9 -- 126 + + out (AVRINT5),a ;10 + pop de ; 9 + pop bc ; 9 + pop ix ;12 + ret ; 9 + +;-------------------------------------------------------------- +; +; (hl): data + + if 0 + +msg.sout: + push ix ;14 + ld ix,mtx.fifo ;12 + push bc ;11 + push de ;11 + ld b,(hl) ; 6 + inc hl ; 4 + ex de,hl ; 3 +ms.ol: ; \ + push ix ;14 + pop hl ; 9 + ld c,(ix+o.in_idx) ;14 + ld a,c ; 4 + add l ; 4 + ld l,a ; 4 + jr nc,ms.on ; 6/8 + inc h ; 4 +ms.on: + ld a,c ; 4 + inc a ; 4 + and (ix+o.mask) ;14 +ms.wait: + cp (ix+o.out_idx) ;14 + jr z,ms.wait ; 6/8 + ld c,a ; 4 + ld a,(de) ; 6 + inc de ; 4 + ld (hl),a ; 7 + ld (ix+o.in_idx),c ;15 + djnz ms.ol ; 7/9 -- 130 + + out (AVRINT5),a ;10 + ex de,hl ; 3 + pop de ; 9 + pop bc ; 9 + pop ix ;12 + ret ; 9 + + endif + ;-------------------------------------------------------------- msg.co: @@ -185,8 +291,8 @@ msg.co: pop hl pop af ret - - + + buf: db buf_end - $ - 1 ;output string length db 0AEh ; message start token @@ -200,4 +306,3 @@ buf_end: ;---------------------------------------------------------------------- end - -- cgit v1.2.3