SRC = r3init.180
SRC += ddtz.180
#SRC += fifoio.180 msgbuf.180 ser1-i.180 console.180
-SRC += msgfifo.180 ser1-i.180 console.180
+SRC += msgbuf-a.180 conbuf-a.180 ser1-i.180 console.180
+# serial (asci1) console only:
#SRC += ser1-i.180 console.180
SRC += romend.180
--- /dev/null
+ page 255\r
+ .z80\r
+ \r
+;\r
+; FIFO channels for communication with avr\r
+;\r
+ global ff.init,ff.in,ff.out,ff.i.st\r
+\r
+ extrn buf.init\r
+\r
+ include config.inc\r
+ include z180reg.inc\r
+\r
+\r
+;--------------------------------------------------------------\r
+\r
+ dseg\r
+ \r
+\r
+ mkbuf co.fifo,co.fifo_len\r
+ mkbuf ci.fifo,ci.fifo_len\r
+\r
+\r
+;--------------------------------------------------------------\r
+\r
+ cseg\r
+\r
+; Init Serial I/O for console input and output\r
+;\r
+\r
+ff.init:\r
+ ld ix,ci.fifo\r
+ ld a,ci.fifo.mask\r
+ call buf.init\r
+ ld ix,co.fifo\r
+ ld a,co.fifo.mask\r
+ jp buf.init\r
+\r
+\r
+ff.i.st:\r
+ push ix\r
+ ld ix,ci.fifo ;\r
+\r
+buf.empty:\r
+ ld a,(ix+o.in_idx) ;\r
+ sub (ix+o.out_idx) ;\r
+ pop ix\r
+ ret z\r
+ or 0ffh\r
+ ret\r
+ \r
+\r
+ff.in:\r
+ push ix\r
+ ld ix,ci.fifo ;\r
+\r
+buf.get:\r
+ ld a,(ix+o.out_idx) ;\r
+bg.wait:\r
+ cp (ix+o.in_idx) ;\r
+ jr z,bg.wait\r
+\r
+ push hl ;\r
+ push ix\r
+ pop hl\r
+ add a,l\r
+ ld l,a\r
+ jr nc,bg.nc\r
+ inc h\r
+bg.nc:\r
+ ld l,(hl)\r
+ \r
+ ld a,(ix+o.out_idx) ;\r
+ inc a\r
+ and (ix+o.mask)\r
+ ld (ix+o.out_idx),a\r
+ \r
+ ld a,l\r
+ pop hl\r
+ pop ix\r
+ ret\r
+\r
+\r
+ff.o.st:\r
+ push ix\r
+ ld ix,co.fifo ;\r
+\r
+buf.full:\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
+ff.out:\r
+ push ix\r
+ ld ix,co.fifo ;\r
+\r
+buf.put:\r
+ push hl ;\r
+ push bc\r
+ push ix\r
+ pop hl\r
+ ld c,(ix+o.in_idx) ;\r
+ ld b,0\r
+ add hl,bc\r
+ ld b,a\r
+\r
+ ld a,c ;\r
+ inc a\r
+ and (ix+o.mask)\r
+bp.wait:\r
+ cp (ix+o.out_idx) ;\r
+ jr z,bp.wait\r
+ ld (hl),b\r
+ ld (ix+o.in_idx),a\r
+ \r
+ out (AVRINT6),a\r
+ ld a,b\r
+ pop bc\r
+ pop hl\r
+ pop ix\r
+ ret\r
+\r
+ end\r
+\r
DRSTNUM equ 30h ;DDTZ Restart vector (breakpoints)\r
\r
\r
-msg_rx_fifo_len equ 256\r
-msg_tx_fifo_len equ 256\r
+mrx.fifo_len equ 256\r
+mtx.fifo_len equ 256\r
\r
+ci.fifo_len equ 128\r
+co.fifo_len equ 256\r
\r
s1.rx_len equ 256 ;Serial 1 (ASCI1) buffers\r
s1.tx_len equ 256 ;\r
\r
\r
extrn ser.init,ser.instat,ser.in,ser.out\r
- extrn msginit,msg.in,msg.out,msgi.st\r
- extrn msg.co\r
+ extrn ff.init,ff.i.st,ff.in,ff.out\r
+ extrn ff.out\r
\r
\r
include config.inc\r
;\r
\r
$coninit:\r
- call msginit\r
+ call ff.init\r
call ser.init\r
ret\r
\r
$cists:\r
- call msgi.st\r
+ call ff.i.st\r
ret nz\r
call ser.instat\r
ret\r
\r
$ci:\r
- call msgi.st\r
- jp nz,msg.in\r
+ call ff.i.st\r
+ jp nz,ff.in\r
call ser.instat\r
jp nz,ser.in\r
jr $ci\r
; jp f.o.st\r
\r
$co:\r
- call msg.co\r
+ call ff.out\r
jp ser.out\r
\r
end\r
page 255\r
.z80\r
\r
+;\r
+; FIFO channels for communication with stm32\r
+;\r
global f.init,f.in,f.out,f.i.st\r
\r
extrn buf.init\r
;--------------------------------------------------------------\r
\r
cseg\r
-;\r
-; FIFO channels for communication with stm32\r
-;\r
+\r
; Init Serial I/O for console input and output\r
;\r
- \r
+\r
f.init:\r
ld ix,rx.buf\r
ld a,rx.buf.mask\r
--- /dev/null
+ page 255\r
+ .z80\r
+ \r
+ global mrx.fifo,mtx.fifo\r
+\r
+ global msginit,msgi.st,msg.in,msgo.st,msg.out\r
+ global msg.sout\r
+ \r
+ extrn buf.init\r
+\r
+ include config.inc\r
+ include z180reg.inc\r
+\r
+;--------------------------------------------------------------\r
+\r
+ dseg\r
+\r
+ mkbuf mrx.fifo,mrx.fifo_len\r
+ mkbuf mtx.fifo,mtx.fifo_len\r
+\r
+;--------------------------------------------------------------\r
+\r
+ cseg\r
+\r
+;\r
+; Init buffer\r
+;\r
+ \r
+msginit:\r
+ ld ix,mrx.fifo\r
+ ld a,mrx.fifo.mask\r
+ call buf.init\r
+ ld ix,mtx.fifo\r
+ ld a,mtx.fifo.mask\r
+ jp buf.init\r
+\r
+;--------------------------------------------------------------\r
+\r
+msgi.st:\r
+ push ix\r
+ ld ix,mrx.fifo ;\r
+\r
+buf.empty:\r
+ ld a,(ix+o.in_idx) ;\r
+ sub (ix+o.out_idx) ;\r
+ pop ix\r
+ ret z\r
+ or 0ffh\r
+ ret\r
+ \r
+;--------------------------------------------------------------\r
+\r
+msg.in:\r
+ push ix\r
+ ld ix,mrx.fifo ;\r
+\r
+buf.get:\r
+ ld a,(ix+o.out_idx) ;\r
+bg.wait:\r
+ cp (ix+o.in_idx) ;\r
+ jr z,bg.wait\r
+\r
+ push hl ;\r
+ push ix\r
+ pop hl\r
+ add a,l\r
+ ld l,a\r
+ jr nc,bg.nc\r
+ inc h\r
+bg.nc:\r
+ ld l,(hl)\r
+ \r
+ ld a,(ix+o.out_idx) ;\r
+ inc a\r
+ and (ix+o.mask)\r
+ ld (ix+o.out_idx),a\r
+ \r
+ ld a,l\r
+ pop hl\r
+ pop ix\r
+ ret\r
+\r
+;--------------------------------------------------------------\r
+\r
+msgo.st:\r
+ push ix\r
+ ld ix,mtx.fifo ;\r
+\r
+buf.full:\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,mtx.fifo ;\r
+\r
+buf.put:\r
+ push hl ;\r
+ push bc\r
+ push ix\r
+ pop hl\r
+ ld c,(ix+o.in_idx) ;\r
+ ld b,0\r
+ add hl,bc\r
+ ld b,a\r
+\r
+ ld a,c ;\r
+ inc a\r
+ and (ix+o.mask)\r
+bp.wait:\r
+ cp (ix+o.out_idx) ;\r
+ jr z,bp.wait\r
+ ld (hl),b\r
+ ld (ix+o.in_idx),a\r
+ \r
+ ld a,b\r
+ out0 (AVRINT5),a\r
+ pop bc\r
+ pop hl\r
+ pop ix\r
+ ret\r
+\r
+\r
+;--------------------------------------------------------------\r
+;\r
+; (hl): data\r
+\r
+msg.sout:\r
+ push ix\r
+ ld ix,mtx.fifo ;\r
+\r
+ push bc\r
+ push de\r
+ ld b,(hl) ;\r
+ inc hl\r
+ ex de,hl\r
+ \r
+ms.ol:\r
+ push ix\r
+ pop hl\r
+ ld c,(ix+o.in_idx) ;\r
+ ld a,c\r
+ add l\r
+ ld l,a\r
+ jr nc,ms.on\r
+ inc h\r
+ms.on:\r
+ ld a,c ;\r
+ inc a\r
+ and (ix+o.mask)\r
+ms.wait:\r
+ cp (ix+o.out_idx) ;\r
+ jr z,ms.wait\r
+ ld c,a\r
+ ld a,(de)\r
+ inc de\r
+ ld (hl),a\r
+ ld (ix+o.in_idx),c\r
+ djnz ms.ol\r
+ out0 (AVRINT5),a\r
+ ex de,hl\r
+ pop de\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 - $ - 1 ;output string length\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
ret\r
\r
;----------------------------------------------------------------------\r
-\r
+if 0\r
extrn msginit,msg_tx_fifo,msg_rx_fifo\r
extrn msg.sout\r
\r
ld (40h+0),hl\r
ld (40h+2),a\r
\r
- ld (bufdat+1),hl\r
- ld (bufdat+3),a\r
- xor a\r
- ld (bufdat+0),a\r
- ld hl,inimsg\r
- call msg.sout\r
+; ld (bufdat+1),hl\r
+; ld (bufdat+3),a\r
+; ld a,1\r
+; ld (bufdat+0),a\r
+; ld hl,inimsg\r
+; call msg.sout\r
\r
ld de,msg_rx_fifo\r
in0 a,cbr\r
call log2phys\r
ld (bufdat+1),hl\r
ld (bufdat+3),a\r
- ld a,1\r
+ ld a,2\r
ld (bufdat+0),a\r
ld hl,inimsg\r
call msg.sout\r
db 0\r
inimsg_e:\r
\r
+endif\r
;----------------------------------------------------------------------\r
;\r
-if 0\r
\r
- extrn msginit,msg.sout,msg_fifo\r
- extrn tx.buf,rx.buf\r
+ extrn msginit,msg.sout\r
+ extrn mtx.fifo,mrx.fifo\r
+ extrn co.fifo,ci.fifo\r
\r
\r
bufferinit:\r
call msginit\r
\r
ld hl,buffers\r
- ld bc,0300h ; b:count, c:buffer nr\r
+ ld b,buftablen\r
bfi_1:\r
+ ld a,(hl)\r
+ inc hl\r
+ ld (bufdat+0),a\r
ld e,(hl)\r
inc hl\r
ld d,(hl)\r
inc hl\r
push hl\r
+\r
+ or a\r
+ jr nz,bfi_2\r
+ in0 a,cbr\r
+ call log2phys\r
+ ld (40h+0),hl\r
+ ld (40h+2),a\r
+ out0 (AVRINT5),a\r
+ jr bfi_3 \r
+bfi_2:\r
in0 a,cbr\r
call log2phys\r
ld (bufdat+1),hl\r
ld (bufdat+3),a\r
- ld a,c\r
- ld (bufdat+0),a\r
ld hl,inimsg\r
call msg.sout\r
+bfi_3:\r
pop hl\r
- inc c\r
djnz bfi_1\r
ret\r
\r
- rept 20\r
- db 0\r
- endm\r
-\r
buffers:\r
- dw msg_fifo\r
- dw tx.buf\r
- dw rx.buf\r
+ db 0\r
+ dw mtx.fifo\r
+ db 1\r
+ dw mrx.fifo\r
+ db 2\r
+ dw co.fifo\r
+ db 3\r
+ dw ci.fifo\r
+buftablen equ ($ - buffers)/3\r
\r
inimsg:\r
- db inimsg_e - $ -2\r
- db PMSG\r
+ db inimsg_e - $ -1\r
db 81h\r
db inimsg_e - $ -1\r
db 0\r
db 0\r
inimsg_e:\r
\r
-endif\r
\r
;\r
;----------------------------------------------------------------------\r