+++ /dev/null
- page 255\r
- .z80\r
- \r
- global msg_fifo\r
- global msginit\r
- global msg.out,msg.sout,msg.co\r
- \r
- extrn buf.init\r
-\r
- include config.inc\r
- include z180reg.inc\r
-\r
-;--------------------------------------------------------------\r
-\r
- dseg\r
-\r
- mkbuf msg_fifo, 0\r
-\r
-\r
-;--------------------------------------------------------------\r
-\r
- cseg\r
-\r
-;\r
-; Init buffer\r
-;\r
- \r
-msginit:\r
- ld ix,msg_fifo\r
- ld a,msg_fb_len-1\r
- jp buf.init\r
-\r
-\r
-;--------------------------------------------------------------\r
-\r
-msg.sts:\r
- push ix\r
- ld ix,msg_fifo ;\r
-\r
- ld a,(ix+o.in_idx) ;\r
- inc a\r
- and (ix+o.mask)\r
- sub (ix+o.out_idx) ;\r
- pop ix\r
- ret z\r
- or 0ffh\r
- ret\r
-\r
-;--------------------------------------------------------------\r
-\r
-msg.out:\r
- push ix\r
- ld ix,msg_fifo ;\r
-\r
- push bc\r
- ld b,a ;save char\r
- ld a,(ix+o.in_idx) ;\r
- inc a\r
- and (ix+o.mask)\r
-bp.wait:\r
- cp (ix+o.out_idx) ;\r
- jr z,bp.wait\r
- ld c,a\r
- ld a,b\r
- out (PMSG),a\r
- ld (ix+o.in_idx),c\r
- \r
- pop bc\r
- pop ix\r
- ret\r
-\r
-;--------------------------------------------------------------\r
-;\r
-; (hl): data\r
- \r
-msg.sout:\r
- push ix\r
- ld ix,msg_fifo ;\r
- push bc\r
-\r
- ld b,(hl) ;count\r
- inc hl\r
-obs_1:\r
- ld a,(ix+o.out_idx) ;\r
- sub (ix+o.in_idx) ;\r
- dec a\r
- and (ix+o.mask)\r
- cp b\r
- jr c,obs_1\r
-\r
- ld c,(hl) ;port address\r
- inc hl\r
- ld a,b\r
- otir\r
- add (ix+o.in_idx)\r
- and (ix+o.mask)\r
- ld (ix+o.in_idx),a\r
- pop bc\r
- pop ix\r
- ret\r
-\r
-;----------------------------------------------------------------------\r
-\r
-msg.co:\r
- push af\r
- push hl\r
- ld (buf_char),a\r
- ld hl,buf\r
- call msg.sout\r
- pop hl\r
- pop af\r
- ret\r
- \r
- \r
-buf:\r
- db buf_end - $ - 2 ;output string length\r
- db PMSG ;output port\r
- db 081h ; message start token\r
- db buf_end - $ - 1 ; message length\r
- db 1 ; command\r
- db 1 ; subcommand\r
-buf_char:\r
- db 0 ; pay load\r
-buf_end:\r
-\r
-;----------------------------------------------------------------------\r
-\r
- end\r
-\r