From f4d5b4febbffab80cb06bd18564d4c326756fad7 Mon Sep 17 00:00:00 2001 From: Leo C Date: Wed, 2 Jul 2014 14:33:22 +0200 Subject: Rename dir Z180 --> z180 --- z180/msgbuf.180 | 129 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 z180/msgbuf.180 (limited to 'z180/msgbuf.180') diff --git a/z180/msgbuf.180 b/z180/msgbuf.180 new file mode 100644 index 0000000..2c67527 --- /dev/null +++ b/z180/msgbuf.180 @@ -0,0 +1,129 @@ + page 255 + .z80 + + global msg_fifo + global msginit + global msg.out,msg.sout,msg.co + + extrn buf.init + + include config.inc + include z180reg.inc + +;-------------------------------------------------------------- + + dseg + + mkbuf msg_fifo, 0 + + +;-------------------------------------------------------------- + + cseg + +; +; Init buffer +; + +msginit: + ld ix,msg_fifo + ld a,msg_fb_len-1 + jp buf.init + + +;-------------------------------------------------------------- + +msg.sts: + push ix + ld ix,msg_fifo ; + + ld a,(ix+o.in_idx) ; + inc a + and (ix+o.mask) + sub (ix+o.out_idx) ; + pop ix + ret z + or 0ffh + ret + +;-------------------------------------------------------------- + +msg.out: + push ix + ld ix,msg_fifo ; + + push bc + ld b,a ;save char + ld a,(ix+o.in_idx) ; + inc a + and (ix+o.mask) +bp.wait: + cp (ix+o.out_idx) ; + jr z,bp.wait + ld c,a + ld a,b + out (PMSG),a + ld (ix+o.in_idx),c + + pop bc + pop ix + ret + +;-------------------------------------------------------------- +; +; (hl): data + +msg.sout: + push ix + ld ix,msg_fifo ; + push bc + + ld b,(hl) ;count + inc hl +obs_1: + ld a,(ix+o.out_idx) ; + sub (ix+o.in_idx) ; + dec a + and (ix+o.mask) + cp b + jr c,obs_1 + + ld c,(hl) ;port address + inc hl + ld a,b + otir + add (ix+o.in_idx) + and (ix+o.mask) + ld (ix+o.in_idx),a + pop bc + pop ix + ret + +;---------------------------------------------------------------------- + +msg.co: + push af + push hl + ld (buf_char),a + ld hl,buf + call msg.sout + pop hl + pop af + ret + + +buf: + db buf_end - $ - 2 ;output string length + db PMSG ;output port + db 081h ; message start token + db buf_end - $ - 1 ; message length + db 1 ; command + db 1 ; subcommand +buf_char: + db 0 ; pay load +buf_end: + +;---------------------------------------------------------------------- + + end + -- cgit v1.2.3