]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - z180/msgbuf-a.180
Adaptions for fatfs R0.12b
[z180-stamp.git] / z180 / msgbuf-a.180
index 36e08715db1304e3443110a131d61ffd1aa93d03..3575569de9a764be14a985905d74bcd19ccea86f 100644 (file)
@@ -1,22 +1,25 @@
        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
+       public  mrx.fifo,mtx.fifo\r
+\r
+       public  msginit,msgi.st,msg.in,msgo.st\r
+       public  msg.sm,msg.sout\r
+\r
+       extrn   bufinit,hwl2phy\r
+       extrn   fifolst\r
 \r
        include config.inc\r
+       if CPU_Z180\r
        include z180reg.inc\r
+       endif\r
 \r
 ;--------------------------------------------------------------\r
 \r
        dseg\r
 \r
-       mkbuf   mrx.fifo,mrx.fifo_len\r
-       mkbuf   mtx.fifo,mtx.fifo_len\r
+       mkbuf   mtx.fifo_id, mtx.fifo, mtx.fifo_len\r
+       mkbuf   mrx.fifo_id, mrx.fifo, mrx.fifo_len\r
 \r
 ;--------------------------------------------------------------\r
 \r
 ;\r
 ; Init buffer\r
 ;\r
-       \r
+\r
 msginit:\r
-       ld      ix,mrx.fifo\r
-       ld      a,mrx.fifo.mask\r
-       call    buf.init\r
+       ld      a,(043h)\r
+;TODO: value should be 0\r
        ld      ix,mtx.fifo\r
-       ld      a,mtx.fifo.mask\r
-       jp      buf.init\r
+       call    bufinit\r
+       push    ix\r
+       pop     hl\r
+       call    hwl2phy\r
+       ld      (040h),hl\r
+       ld      (040h+2),a\r
+       ld      a,0ffh\r
+       ld      (043h),a\r
+       out     (AVRINT5),a\r
+wait:\r
+       ld      a,(043h)\r
+       or      a\r
+       jr      nz,wait\r
+\r
+       ld      ix,mrx.fifo\r
+       jp      bufinit\r
 \r
 ;--------------------------------------------------------------\r
 \r
@@ -47,7 +63,7 @@ buf.empty:
        ret     z\r
        or      0ffh\r
        ret\r
-       \r
+\r
 ;--------------------------------------------------------------\r
 \r
 msg.in:\r
@@ -69,12 +85,12 @@ bg.wait:
        inc     h\r
 bg.nc:\r
        ld      l,(hl)\r
-       \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
+\r
        ld      a,l\r
        pop     hl\r
        pop     ix\r
@@ -98,6 +114,8 @@ buf.full:
 \r
 ;--------------------------------------------------------------\r
 \r
+    if 0\r
+\r
 msg.out:\r
        push    ix\r
        ld      ix,mtx.fifo             ;\r
@@ -120,58 +138,192 @@ bp.wait:
        jr      z,bp.wait\r
        ld      (hl),b\r
        ld      (ix+o.in_idx),a\r
-       \r
+\r
        ld      a,b\r
-       out0    (AVRINT5),a\r
+       out     (AVRINT5),a\r
        pop     bc\r
        pop     hl\r
        pop     ix\r
        ret\r
 \r
+    endif\r
 \r
 ;--------------------------------------------------------------\r
-;\r
-; (hl): data\r
 \r
-msg.sout:\r
+   if 0\r
+\r
+msg.out:\r
        push    ix\r
        ld      ix,mtx.fifo             ;\r
 \r
+buf.put:\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      b,0\r
+       push    ix                      ;14\r
+       add     ix,bc                   ;10\r
+       ld      (ix+0),a                ;15\r
+       pop     ix                      ;12 / 51\r
+       ld      b,a                     ; 4\r
        ld      a,c                     ;\r
-       inc     a\r
-       and     (ix+o.mask)\r
-ms.wait:\r
+       inc     a                       ;\r
+       and     (ix+o.mask)             ;\r
+bp.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
+       jr      z,bp.wait               ;\r
+       ld      (ix+o.in_idx),a         ;\r
+\r
+       ld      a,b\r
+       out     (AVRINT5),a\r
        pop     bc\r
        pop     ix\r
        ret\r
 \r
+   endif\r
+\r
+;----------------------------------------------------------------------\r
+;\r
+; Put char in message buffer:\r
+;     ix: buffer to put into\r
+;     c:  char\r
+\r
+buf.put:\r
+       push    ix                      ;15\r
+       push    bc                      ;11\r
+       ld      a,(ix+o.in_idx)         ;19\r
+       ld      c,a                     ;4\r
+       ld      b,0                     ;7\r
+       add     ix,bc                   ;11\r
+       pop     bc                      ;10\r
+       ld      (ix),c                  ;7\r
+       pop     ix                      ;14\r
+\r
+       inc     a                       ;4\r
+       and     (ix+o.mask)             ;19     =121\r
+bufp.wait:\r
+       cp      (ix+o.out_idx)          ;19\r
+       jr      z,bufp.wait             ;12/7\r
+       ld      (ix+o.in_idx),a         ;19\r
+\r
+       out     (AVRINT5),a             ;11\r
+       ld      a,c                     ;4\r
+       ret                             ;10     =191\r
+\r
+\r
+;--------------------------------------------------------------\r
+\r
+    if 0\r
+       ; Works only, if buffer size < (128 - 3)\r
+       ;       --> mask must be 03fh or less\r
+\r
+msg.out:\r
+       push    ix\r
+       ld      ix,mtx.fifo             ;\r
+\r
+buf.put:\r
+       push    bc\r
+       ld      b,a                     ; 4\r
+       ld      a,(ix+o.in_idx)         ;14\r
+       ld      ($ + 3 + 2),a           ;15\r
+       ld      (ix+0),b                ;15\r
+       inc     a                       ;\r
+       and     (ix+o.mask)             ;\r
+bp.wait:\r
+       cp      (ix+o.out_idx)          ;\r
+       jr      z,bp.wait               ;\r
+       ld      (ix+o.in_idx),a         ;\r
+\r
+       ld      a,b\r
+       out     (AVRINT5),a\r
+       pop     bc\r
+       pop     ix\r
+       ret\r
+\r
+    endif\r
+\r
+;--------------------------------------------------------------\r
+;\r
+; (hl): data\r
+\r
+msg.sout:\r
+       push    ix                      ;14\r
+       ld      ix,mtx.fifo             ;12\r
+       push    bc                      ;11\r
+       push    de                      ;11\r
+       ld      c,(hl)                  ; 6\r
+       ld      b,0                     ; 6\r
+       inc     hl                      ; 7\r
+ms.ol:                                 ;       \\r
+       ld      a,low mtx.fifo          ; 6\r
+       add     a,(ix+o.in_idx)         ;14\r
+       ld      e,a                     ; 4\r
+       ld      a,high mtx.fifo         ; 6\r
+       adc     a,b                     ; 4\r
+       ld      d,a                     ; 4\r
+\r
+       ld      a,(ix+o.in_idx)         ;14\r
+       inc     a                       ; 4\r
+       and     (ix+o.mask)             ;14\r
+ms.wait:\r
+       cp      (ix+o.out_idx)          ;14\r
+       jr      z,ms.wait               ; 6/8\r
+\r
+       ldi                             ;12\r
+       ld      (ix+o.in_idx),a         ;15\r
+       jp      pe,ms.ol                ; 6/9    -- 126\r
+\r
+       out     (AVRINT5),a             ;10\r
+       pop     de                      ; 9\r
+       pop     bc                      ; 9\r
+       pop     ix                      ;12\r
+       ret                             ; 9\r
+\r
+;--------------------------------------------------------------\r
+;\r
+; (hl): data\r
+\r
+    if 0\r
+\r
+msg.sout:\r
+       push    ix                      ;14\r
+       ld      ix,mtx.fifo             ;12\r
+       push    bc                      ;11\r
+       push    de                      ;11\r
+       ld      b,(hl)                  ; 6\r
+       inc     hl                      ; 4\r
+       ex      de,hl                   ; 3\r
+ms.ol:                                 ;       \\r
+       push    ix                      ;14\r
+       pop     hl                      ; 9\r
+       ld      c,(ix+o.in_idx)         ;14\r
+       ld      a,c                     ; 4\r
+       add     l                       ; 4\r
+       ld      l,a                     ; 4\r
+       jr      nc,ms.on                ; 6/8\r
+       inc     h                       ; 4\r
+ms.on:\r
+       ld      a,c                     ; 4\r
+       inc     a                       ; 4\r
+       and     (ix+o.mask)             ;14\r
+ms.wait:\r
+       cp      (ix+o.out_idx)          ;14\r
+       jr      z,ms.wait               ; 6/8\r
+       ld      c,a                     ; 4\r
+       ld      a,(de)                  ; 6\r
+       inc     de                      ; 4\r
+       ld      (hl),a                  ; 7\r
+       ld      (ix+o.in_idx),c         ;15\r
+       djnz    ms.ol                   ; 7/9   -- 130\r
+\r
+       out     (AVRINT5),a             ;10\r
+       ex      de,hl                   ; 3\r
+       pop     de                      ; 9\r
+       pop     bc                      ; 9\r
+       pop     ix                      ;12\r
+       ret                             ; 9\r
+\r
+    endif\r
+\r
 ;--------------------------------------------------------------\r
 \r
 msg.co:\r
@@ -183,8 +335,8 @@ msg.co:
        pop     hl\r
        pop     af\r
        ret\r
-       \r
-       \r
+\r
+\r
 buf:\r
        db      buf_end - $ - 1         ;output string length\r
        db      0AEh                    ; message start token\r
@@ -197,5 +349,26 @@ buf_end:
 \r
 ;----------------------------------------------------------------------\r
 \r
-       end\r
+;----------------------------------------------------------------------\r
+; Send message MEMORY\r
+;\r
+;     hl: pointer to message (netto)\r
+;     b: msg length\r
 \r
+msg.sm:\r
+       push    ix\r
+       ld      ix,mtx.fifo\r
+       ld      c,0AEh\r
+       call    buf.put\r
+       ld      c,b\r
+       call    buf.put\r
+msm_l:\r
+       ld      c,(hl)\r
+       inc     hl\r
+       call    buf.put\r
+       djnz    msm_l\r
+       pop     ix\r
+       ret\r
+\r
+\r
+       end\r