]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - z180/msgbuf-a.180
message buffer init changes. cp/m r/w for new memory map
[z180-stamp.git] / z180 / msgbuf-a.180
index 7e8c9ccc6e7ceb92ff8f4847eaa440c7f90ea7cf..3575569de9a764be14a985905d74bcd19ccea86f 100644 (file)
@@ -1,12 +1,13 @@
        page    255\r
        .z80\r
 \r
-       global  mrx.fifo,mtx.fifo\r
+       public  mrx.fifo,mtx.fifo\r
 \r
-       global  msginit,msgi.st,msg.in,msgo.st,msg.out\r
-       global  msg.sout\r
+       public  msginit,msgi.st,msg.in,msgo.st\r
+       public  msg.sm,msg.sout\r
 \r
-       extrn   buf.init\r
+       extrn   bufinit,hwl2phy\r
+       extrn   fifolst\r
 \r
        include config.inc\r
        if CPU_Z180\r
 ;\r
 \r
 msginit:\r
+       ld      a,(043h)\r
+;TODO: value should be 0\r
        ld      ix,mtx.fifo\r
-       ld      a,mtx.fifo.mask\r
-       call    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
-       ld      a,mrx.fifo.mask\r
-       jp      buf.init\r
+       jp      bufinit\r
 \r
 ;--------------------------------------------------------------\r
 \r
@@ -136,7 +150,7 @@ bp.wait:
 \r
 ;--------------------------------------------------------------\r
 \r
-\r
+   if 0\r
 \r
 msg.out:\r
        push    ix\r
@@ -165,6 +179,36 @@ bp.wait:
        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
@@ -305,4 +349,26 @@ buf_end:
 \r
 ;----------------------------------------------------------------------\r
 \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