]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - z180/init.180
Z180 banking updates
[z180-stamp.git] / z180 / init.180
index 73a77bb76767314502278b9ae0fe5a777eabcab0..f43aaeb9eaab90bf2371e17cdf93def37165867c 100644 (file)
@@ -234,51 +234,6 @@ buf.init:
        ld      (ix+o.mask),a\r
        ret\r
 \r
-;----------------------------------------------------------------------\r
-if 0\r
-       extrn   msginit,msg_tx_fifo,msg_rx_fifo\r
-       extrn   msg.sout\r
-\r
-bufferinit:\r
-\r
-       ld      de,msg_tx_fifo\r
-       in0     a,cbr\r
-       call    log2phys\r
-       ld      (40h+0),hl\r
-       ld      (40h+2),a\r
-\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,2\r
-       ld      (bufdat+0),a\r
-       ld      hl,inimsg\r
-       call    msg.sout\r
-\r
-       ret\r
-\r
-inimsg:\r
-       db      inimsg_e - $ - 1\r
-       db      0AEh\r
-       db      inimsg_e - $ - 1\r
-       db      0\r
-bufdat:\r
-       db      0\r
-       dw      0\r
-       db      0\r
-inimsg_e:\r
-\r
-endif\r
-\r
 ;----------------------------------------------------------------------\r
 \r
        extrn   msginit,msg.sout\r
@@ -300,27 +255,27 @@ bfi_1:
        inc     hl\r
        ld      d,(hl)\r
        inc     hl\r
-       push    hl\r
+       ex      de,hl\r
 \r
        or      a\r
        jr      nz,bfi_2\r
-       call    hw_log2phys\r
+       call    hwl2phy\r
        ld      (40h+0),hl\r
        ld      (40h+2),a\r
-       out0    (AVRINT5),a\r
+       out     (AVRINT5),a\r
        jr      bfi_3   \r
 bfi_2:\r
-       call    hw_log2phys\r
+       call    hwl2phy\r
        ld      (bufdat+1),hl\r
        ld      (bufdat+3),a\r
        ld      hl,inimsg\r
        call    msg.sout\r
 bfi_3:\r
-       pop     hl\r
+       ex      de,hl\r
        djnz    bfi_1\r
        ret\r
 \r
-    else\r
+    else ;CPU_Z180\r
 \r
        call    msginit\r
 \r
@@ -340,7 +295,7 @@ bfi_1:
        jr      nz,bfi_2\r
 \r
        ld      a,(@cbnk)\r
-       call    bnk2phys\r
+       call    bnk2phy\r
 \r
        ld      (40h+0),hl\r
        ld      (40h+2),a\r
@@ -349,7 +304,7 @@ bfi_1:
 bfi_2:\r
 \r
        ld      a,(@cbnk)\r
-       call    bnk2phys\r
+       call    bnk2phy\r
 \r
        ld      (bufdat+1),hl\r
        ld      (bufdat+3),a\r
@@ -548,115 +503,109 @@ io.ini.l:
 ;\r
     if CPU_Z180\r
 \r
-; a: Bank number\r
+;--------------------------------------------------------------------\r
+; Return the BBR value for the given bank number\r
 ;\r
+; in  a: Bank number\r
 ; out a: bbr value\r
 \r
 bnk2log:\r
-       push    bc\r
-       ld      b,a\r
-       ld      c,CA\r
-       mlt     bc\r
-       add     a,10h\r
-       pop     bc\r
-       ret\r
+       or      a               ;\r
+       ret     z               ; Bank 0 is at physical address 0\r
 \r
-; de: Log. Address\r
-;  a: Bank number\r
+       push    bc              ;\r
+       ld      b,a             ;\r
+       ld      c,CA            ;\r
+       mlt     bc              ;\r
+       ld      a,c             ;\r
+       add     a,10h           ;\r
+       pop     bc              ;\r
+       ret                     ;\r
+\r
+;--------------------------------------------------------------\r
+\r
+;in  hl: Log. Address\r
+;     a: Bank number\r
 ;\r
 ;out ahl: Phys. (linear) Address\r
 \r
 \r
-bnk2phys:\r
+bnk2phy:\r
        call    bnk2log\r
-\r
        ; fall thru\r
+\r
 ;--------------------------------------------------------------\r
 ;\r
-; de: Log. Address\r
+; hl: Log. Address\r
 ;  a: Bank base (bbr)\r
 ;\r
-; OP: ahl = (a<<12) + (d<<8) + e\r
+;           2           0       0\r
+;           0   6       8       0\r
+; hl             hhhhhhhhllllllll\r
+;  a   +     bbbbbbbb\r
+;\r
+; OP: ahl = (a<<12) + (h<<8) + l\r
 ;\r
 ;out ahl: Phys. (linear) Address\r
 \r
-\r
-log2phys:\r
+log2phy:\r
        push    bc              ;\r
+l2p_i:\r
        ld      c,a             ;\r
        ld      b,16            ;\r
-       mlt     bc              ;  bc = a<<4\r
-       ld      l,d             ;4\r
-       ld      h,0             ;6\r
-       add     hl,bc           ;7  bc + d == a<<4 + d\r
-       ld      a,h             ;4\r
-       ld      h,l             ;4\r
-       ld      l,e             ;4\r
-       pop     bc              ;\r
-       ret                     ;\r
-\r
-    if 0\r
-    \r
-log2phys:\r
-       push    bc              ;\r
-       ld      b,a             ;\r
-       ld      c,16            ;\r
        mlt     bc              ; bc = a<<4\r
-       ld      a,c             ;4\r
-       add     a,h             ;4\r
-       ld      h,a             ;4\r
-       ld      a,b             ;4\r
-       adc     a,0             ;6\r
+       ld      a,c             ;\r
+       add     a,h             ;\r
+       ld      h,a             ;\r
+       ld      a,b             ;\r
+       adc     a,0             ;\r
        pop     bc              ;\r
        ret                     ;\r
 \r
-    endif\r
 ;--------------------------------------------------------------\r
 ;\r
-; de: Log. Address\r
-; \r
+; hl: Log. Address\r
+;\r
 ;\r
 ; OP: ahl = (bankbase<<12) + (d<<8) + e\r
 ;\r
 ;out ahl: Phys. (linear) Address\r
 \r
 \r
-hw_log2phys:\r
+hwl2phy:\r
        push    bc              ;\r
-       in0     c,(cbar)\r
-       ld      a,d\r
-       or      00fh\r
+       in0     c,(cbar)        ;\r
+       ld      a,h             ;\r
+       or      00fh            ; log. addr in common1?\r
        cp      c\r
        jr      c,hlp_1\r
-       in0     c,(cbr)\r
-       jr      hlp_e\r
+\r
+       in0     a,(cbr)         ; yes, cbr is address base\r
+       jr      hl2p_x\r
 hlp_1:\r
-       ld      b,16\r
+       ld      b,16            ; log. address in baked area?\r
        mlt     bc\r
-       ld      a,d\r
+       ld      a,h\r
        cp      c\r
-       ld      c,0\r
-       jr      c,hlp_e\r
-       in0     c,(bbr)\r
-hlp_e: \r
-       ld      b,16            ;\r
-       mlt     bc              ;bc = a<<4\r
-       ld      l,d             ;\r
-       ld      h,0             ;\r
-       add     hl,bc           ;bc + d == a<<4 + d\r
-       ld      a,h             ;\r
-       ld      h,l             ;\r
-       ld      l,e             ;\r
-       pop     bc              ;\r
+       jr      c,hlp_2\r
+       in0     a,(bbr)         ; yes, bbr is address base\r
+       jr      hl2p_x\r
+hlp_2:\r
+       xor     a               ; common1\r
+hl2p_x:\r
+       jr      nz,l2p_i\r
+\r
+       pop     bc              ; bank part is 0, no translation\r
        ret                     ;\r
 \r
-    else\r
 \r
-;\r
+\r
+    else       ;CPU_Z180\r
+\r
 ;----------------------------------------------------------------------\r
 ;\r
 \r
-bnk2phys:\r
+bnk2phy:\r
        sla     h\r
        jr      nc,b2p_1                ;A15=1 --> common\r
        ld      a,3\r
@@ -693,18 +642,18 @@ topcodsys:
 ; Save cbar\r
 \r
 isv_sw:                                ;\r
-       ex (sp),hl              ;       save hl, return adr in hl\r
+       ex (sp),hl              ;save hl, 'return adr' in hl\r
        push de                 ;\r
        push af                 ;\r
-       ex de,hl                ;\r
+       ex de,hl                ;'return address' in de\r
        ld hl,0                 ;\r
        add hl,sp               ;\r
        ld a,h                  ;\r
        cp 0f8h                 ;\r
-       jr nc,isw_1             ;\r
+       jr nc,isw_1             ;stack allready in top ram\r
        ld sp,$stack            ;\r
 isw_1:\r
-       push hl                 ;\r
+       push hl                 ;save user stack pointer\r
        in0 h,(cbar)            ;\r
        push hl                 ;\r
        ld a,SYS$CBAR           ;\r