]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blobdiff - cbios/msgbuf.180
Update IXON flag from character device table (@ctbl)
[z180-stamp-cpm3.git] / cbios / msgbuf.180
index a5dfa493a243933a0c0897ae4c0c458b4f87badd..6c702610685fb6457a6709c83deaecdf87de2f2f 100644 (file)
@@ -7,57 +7,70 @@
 ;      global  msg.sout\r
        global  msg.sm,msg.recv\r
 \r
-       extrn   bufinit\r
+       extrn   bufinit,hwl2phy,phy2log\r
        extrn   fifolst\r
 \r
-       include config.inc\r
-       include z180reg.inc\r
-\r
-\r
-       cseg\r
+       maclib z180reg.inc\r
+       maclib config.inc\r
 \r
 \r
+       dseg\r
        mkbuf   0,mtx.fifo,mtx.fifo_len\r
        mkbuf   1,mrx.fifo,mrx.fifo_len\r
 \r
-;txfifo_addr   equ     fifolst + (0*3)\r
-;rxfifo_addr   equ     fifolst + (1*3)\r
-\r
-itx    equ     0*3\r
-irx    equ     1*3\r
+itx    equ     0*2\r
+irx    equ     1*2\r
 \r
 ;--------------------------------------------------------------\r
 ;\r
-; Init mssage fifos\r
+; Init message fifos\r
 ;\r
        dseg\r
-\r
 msginit:\r
        ld      a,(INIDONE)\r
        cp      INIDONEVAL\r
        jr      nz,msgi_1\r
 \r
        ld      hl,(040h)\r
+       ld      a,(040h+2)\r
+       call    phy2log\r
+\r
        ld      a,l\r
        or      h\r
        jr      z,msgi_1\r
 \r
        ld      de,fifolst\r
-       ld      bc,4*3\r
+       ld      bc,4*2\r
        ldir\r
        ret\r
 \r
 msgi_1:\r
+       ld      a,(043h)\r
+\r
+;TODO: value should be 0\r
+\r
        ld      ix,mtx.fifo\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
 \r
-       cseg\r
-\r
+       dseg\r
 msgi.st:\r
        push    ix\r
        ld      ix,(fifolst+irx)        ;\r
@@ -82,9 +95,8 @@ bg.wait:
        cp      (ix+o.in_idx)           ;\r
        jr      z,bg.wait\r
 \r
-       push    hl                      ;\r
-       push    ix\r
-       pop     hl\r
+       push    ix                      ;\r
+       ex      (sp),hl                 ;\r
        add     a,l\r
        ld      l,a\r
        jr      nc,bg.nc\r
@@ -117,37 +129,27 @@ bg.nc:
 ; TODO: result code\r
 \r
 msg.recv:\r
-       push    de\r
-\r
-mr_wait_start:\r
        call    msg.in\r
        cp      0AEh\r
-       jr      nz,mr_wait_start\r
-\r
+       jr      nz,msg.recv\r
        call    msg.in          ; get message length\r
        ld      c,a\r
        inc     c\r
        jr      mr_do\r
-\r
 mr_next:\r
-       dec     c\r
-       jr      z,mr_exit       ; while chars in input buffer\r
+       dec     c               ; while chars in input buffer\r
+       ret     z\r
        call    msg.in          ;    get next\r
 mr_do:\r
-       ld      e,a\r
-       ld      a,b\r
-       or      a               ;    if room in output buffer\r
-       jr      z,mr_skip\r
-       ld      (hl),e          ;       store char\r
-       inc     hl\r
        dec     b\r
-mr_skip:\r
+       jp      p,mr_store\r
+       inc     b\r
+       jr      mr_next\r
+mr_store:\r
+       ld      (hl),a          ;       store char\r
+       inc     hl\r
        jr      mr_next         ;\r
 \r
-mr_exit:\r
-       pop     de\r
-       ret\r
-\r
 ;--------------------------------------------------------------\r
 \r
 msgo.st:\r
@@ -172,10 +174,9 @@ msg.out:
        push    ix\r
        ld      ix,(fifolst+itx)                ;\r
 \r
-       push    hl                      ;\r
        push    bc\r
        push    ix\r
-       pop     hl\r
+       ex      (sp),hl                 ;\r
        ld      c,(ix+o.in_idx)         ;\r
        ld      b,0\r
        add     hl,bc\r
@@ -192,8 +193,8 @@ bp.wait:
 \r
        ld      a,b\r
        out     (AVRINT5),a\r
-       pop     bc\r
        pop     hl\r
+       pop     bc\r
        pop     ix\r
        ret\r
 \r
@@ -317,7 +318,7 @@ msg.sout:
        ld      b,(hl)                  ; 6\r
        inc     hl                      ; 4\r
        ex      de,hl                   ; 3\r
-ms.ol:                                 ;       \\r
+ms.ol:                                 ;\r
        push    ix                      ;14\r
        pop     hl                      ; 9\r
        ld      c,(ix+o.in_idx)         ;14\r
@@ -379,17 +380,19 @@ msnd_l:
 \r
 buf.put:\r
        push    ix                      ;15\r
-       push    bc                      ;11\r
+       ex      (sp),hl                 ;16\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
+       add     a,l                     ; 4\r
+       ld      l,a                     ; 4\r
+       jr      nc,bufp.1               ;12/7\r
+       inc     h                       ; 4\r
+bufp.1:\r
+       ld      (hl),c                  ; 7\r
+       pop     hl                      ;10\r
 \r
+       ld      a,(ix+o.in_idx)         ;19\r
        inc     a                       ;4\r
-       and     (ix+o.mask)             ;19     =121\r
+       and     (ix+o.mask)             ;19     =129\r
 bufp.wait:\r
        cp      (ix+o.out_idx)          ;19\r
        jr      z,bufp.wait             ;12/7\r
@@ -397,8 +400,7 @@ bufp.wait:
 \r
        out     (AVRINT5),a             ;11\r
        ld      a,c                     ;4\r
-       ret                             ;10     =191\r
-\r
+       ret                             ;10     =199\r
 \r
 ;----------------------------------------------------------------------\r
 ; Send message MEMORY\r