summaryrefslogtreecommitdiff
path: root/z180/msgbuf-a.180
diff options
context:
space:
mode:
authorLeo C2015-05-05 15:42:49 +0200
committerLeo C2015-05-05 15:42:49 +0200
commit2fa1a7069a9709f8d61a198cec1b1d9b2e275fe1 (patch)
tree9b3bab40decfe7552f257706f6a9d41852fc7773 /z180/msgbuf-a.180
parentbf5870430d2d1903b6dcdf1431d80b261f9a5d45 (diff)
downloadz180-stamp-2fa1a7069a9709f8d61a198cec1b1d9b2e275fe1.zip
Z180 banking updates
Diffstat (limited to 'z180/msgbuf-a.180')
-rw-r--r--z180/msgbuf-a.180183
1 files changed, 144 insertions, 39 deletions
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
-