]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - z180/init.180
phys. address 0x00040 points to fifo_list
[z180-stamp.git] / z180 / init.180
index f43aaeb9eaab90bf2371e17cdf93def37165867c..c3db6a1d2c281afb44984ab136395a6767043028 100644 (file)
@@ -163,7 +163,7 @@ kstart:
 \r
     if CPU_Z180\r
      if 0\r
-       \r
+\r
        ld      hl,dmclrt       ;load DMA registers\r
        call    ioiniml\r
        ld      a,0cbh          ;01ef   dst +1, src fixed, burst\r
@@ -174,7 +174,7 @@ kstart:
 ??cl_1:\r
        out0    (dstat),a       ;01f9   clear (up to) 64k\r
        djnz    ??cl_1          ;       end of RAM?\r
-       \r
+\r
      endif\r
     endif\r
 \r
@@ -185,10 +185,10 @@ kstart:
 ;      --  wstart  --\r
 \r
 wstart:\r
-       call    sysram_init     ;027f\r
+       call    sysram_init\r
        call    ivtab_init\r
     if CPU_Z180\r
-       call    prt0_init\r
+;      call    prt0_init\r
     endif\r
 \r
        call    charini\r
@@ -199,20 +199,23 @@ wstart:
        call    selbnk\r
     endif\r
 \r
-       im 2                    ;?030e\r
-       ei                      ;0282\r
+       ld      a,INIDONEVAL    ;tell others (CP/M) that hardware and fifos\r
+       ld      (INIDONE),a     ;    are allready initialized\r
+\r
+       im 2\r
+       ei\r
 \r
-       call ?const             ;0284\r
-       call ?const             ;0287\r
-       or a                    ;028a\r
-       call nz,?conin          ;028d\r
+       call ?const\r
+       call ?const\r
+       or a\r
+       call nz,?conin\r
 \r
     if CPU_Z180\r
        ld e,0                  ;Sys$Bank\r
     else\r
 ; TODO:\r
     endif\r
-       jp ddtz                 ;0290\r
+       jp ddtz\r
 \r
 \r
     if CPU_Z180\r
@@ -224,16 +227,51 @@ syscbr:   db      1
 ;----------------------------------------------------------------------\r
 ;\r
 \r
-;TODO: Make a ringbuffer module.\r
-\r
        global  buf.init\r
 \r
 buf.init:\r
        ld      (ix+o.in_idx),0\r
        ld      (ix+o.out_idx),0\r
        ld      (ix+o.mask),a\r
+\r
+       ld      a,(ix+o.id)\r
+       cp      4\r
+       ret     nc\r
+\r
+       push    de\r
+       push    hl\r
+       ld      hl,fifo_list\r
+       push    hl              ;save fifo_list\r
+       ld      e,a\r
+       ld      d,0\r
+       add     hl,de\r
+       add     hl,de\r
+       add     hl,de\r
+       push    ix\r
+       pop     de\r
+; TODO: address transation\r
+       ld      (hl),e\r
+       inc     hl\r
+       ld      (hl),d\r
+       pop     hl              ;get fifo_list back\r
+       or      a\r
+       jr      nz,bufi_ex\r
+\r
+       ld      (040h),hl\r
+       ld      (040h+2),a\r
+bufi_ex:\r
+       pop     hl\r
+       pop     de\r
+\r
        ret\r
 \r
+\r
+fifo_list:\r
+       rept 4\r
+        dw     0\r
+        db     0\r
+       endm\r
+\r
 ;----------------------------------------------------------------------\r
 \r
        extrn   msginit,msg.sout\r
@@ -259,11 +297,11 @@ bfi_1:
 \r
        or      a\r
        jr      nz,bfi_2\r
-       call    hwl2phy\r
-       ld      (40h+0),hl\r
-       ld      (40h+2),a\r
+;      call    hwl2phy\r
+;      ld      (40h+0),hl\r
+;      ld      (40h+2),a\r
        out     (AVRINT5),a\r
-       jr      bfi_3   \r
+       jr      bfi_3\r
 bfi_2:\r
        call    hwl2phy\r
        ld      (bufdat+1),hl\r
@@ -426,12 +464,12 @@ ioi_r:
        dec     a\r
        jr      nz,ioi_r\r
        jr      ioi_nxt\r
-ioi_e: \r
+ioi_e:\r
        pop     bc\r
        ret\r
-       \r
+\r
      else ;(if 1/0)\r
-     \r
+\r
        push    bc\r
        jr      ioi_nxt\r
 ioi_l:\r
@@ -449,7 +487,7 @@ ioi_nxt:
        djnz    ioi_l\r
        pop     bc\r
        ret\r
-       \r
+\r
      endif ;(1/0)\r
 \r
     else\r
@@ -484,7 +522,7 @@ ioml_lp:
        inc     hl\r
        cp      b\r
        jr      z,ioml_e\r
-       \r
+\r
        ld      c,(hl)\r
        inc     hl\r
        otimr\r
@@ -909,4 +947,3 @@ mark_55AA equ 0 - 2 - 4             ;2 byte for trap stack
 \r
 \r
        end\r
-\r