]> cloudbase.mooo.com Git - z180-stamp.git/commitdiff
new fifos msg in, msg out, console in, console out
authorLeo C <erbl259-lmu@yahoo.de>
Thu, 23 Oct 2014 00:22:01 +0000 (02:22 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Thu, 23 Oct 2014 00:22:01 +0000 (02:22 +0200)
z180/Tupfile
z180/conbuf-a.180 [new file with mode: 0644]
z180/config.inc
z180/console.180
z180/fifoio.180
z180/msgbuf-a.180 [new file with mode: 0644]
z180/msgbuf-s.180 [moved from z180/msgbuf.180 with 100% similarity]
z180/r3init.180

index fc926dee7a24b8272d150ae5857b7d510b6898cd..8b50b8a2930a040367f62208643d29f1febfa65c 100644 (file)
@@ -5,7 +5,8 @@ PROG    = hdrom
 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
 
diff --git a/z180/conbuf-a.180 b/z180/conbuf-a.180
new file mode 100644 (file)
index 0000000..3ec84d4
--- /dev/null
@@ -0,0 +1,130 @@
+       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
index 652b5ae2653a77f7159f9dd88adb212749816010..9cef0511f8f72a144c7c351dec2e91c02cd27a75 100644 (file)
@@ -41,9 +41,11 @@ CWAITROM     equ     2 shl MWI0
 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
index 9b0d5197b8dc2cbcc8be1e1015f88fe736334777..07fb570a2f07b72cb90009de48d45603503f8fb4 100644 (file)
@@ -8,8 +8,8 @@
 \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
@@ -41,7 +41,7 @@ $ci:
 ;      jp      f.o.st\r
        \r
 $co:\r
-       call    msg.co\r
+       call    ff.out\r
        jp      ser.out\r
        \r
        end\r
index 27745d4d1b4f268d5bf11d26a3e1986c3ebe9070..dd99c53500a1876ccc62f21d6111115d57f4a20d 100644 (file)
@@ -1,6 +1,9 @@
        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
diff --git a/z180/msgbuf-a.180 b/z180/msgbuf-a.180
new file mode 100644 (file)
index 0000000..f52074e
--- /dev/null
@@ -0,0 +1,201 @@
+       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
similarity index 100%
rename from z180/msgbuf.180
rename to z180/msgbuf-s.180
index 1936c9be0bd5de4704823fcceff31871d69f3c2c..2dd1bb8f7343119d30c37ba43752f7d9d38e32d9 100644 (file)
@@ -313,7 +313,7 @@ buf.init:
        ret\r
 \r
 ;----------------------------------------------------------------------\r
-\r
+if 0\r
        extrn   msginit,msg_tx_fifo,msg_rx_fifo\r
        extrn   msg.sout\r
 \r
@@ -325,19 +325,19 @@ bufferinit:
        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
@@ -355,50 +355,63 @@ bufdat:
        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
@@ -408,7 +421,6 @@ bufdat:
        db      0\r
 inimsg_e:\r
 \r
-endif\r
 \r
 ;\r
 ;----------------------------------------------------------------------\r