]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blobdiff - cbios/move.180
interbank move via dma. (re)enable multisector transfer
[z180-stamp-cpm3.git] / cbios / move.180
index 0ebfdfcfeb113eed3b2c033dc81707cca4cf1294..1e46c825ee1edeb3e45ef2c980d1b539b7bd2461 100644 (file)
     endif
        ret
 
-    if banked
+   if banked
 
 inter_bank_move:               ; source in HL, dest in DE, count in BC
-     if 0                      ; *** DOES NOT WORK PROPERLY
-                               ;     (Crossing Bank boundary problems)
+
+    if 1                       ; works with new memory map
+
        push    bc
        push    de
        push    hl
 
-;TODO: check if source range crosses bank/common boundary
+       out0    (bcr0l),c       ; setup DMA count
+       out0    (bcr0h),b
 
        ld      a,(src$bnk)
        call    bnk2phy
@@ -61,8 +63,6 @@ inter_bank_move:              ; source in HL, dest in DE, count in BC
        out0    (sar0h),h
        out0    (sar0b),a
 
-;TODO: check if destination range crosses bank/common boundary
-
        ex      de,hl
        ld      a,(dst$bnk)
        call    bnk2phy
@@ -73,8 +73,6 @@ inter_bank_move:              ; source in HL, dest in DE, count in BC
 
        ld      a,M_MMOD        ; DMA burst mode
        out0    (dmode),a
-       out0    (bcr0l),c       ; setup DMA count
-       out0    (bcr0h),b
        ld      a,M_DE0+M_NDWE1 ; enable DMA0
        out0    (dstat),a       ; move the block
 
@@ -92,7 +90,7 @@ inter_bank_move:              ; source in HL, dest in DE, count in BC
 
        ret                     ; return with src in DE, dst in HL, count = 0
 
-     else                      ; *** INNEFICIENT, BUT WORKS
+    else                       ; inefficient fall back
 
        ld      (tmp$sp),sp
        ld      sp,tmp$stk
@@ -107,12 +105,9 @@ mv$blk:
        call    ?bank
        ex      af,af'          ;
        ld      (de),a
-       inc     hl
        inc     de
-       dec     bc
-       ld      a,b
-       or      c
-       jr      nz,mv$blk
+       cpi
+       jp      pe,mv$blk
        ld      a,(@cbnk)
        call    ?bank
        ld      a,0FEh
@@ -127,12 +122,12 @@ mv$blk:
 tmp$stk:
 tmp$sp:   ds   2
 
-     endif
+    endif
 
 src$bnk: db    0FEh
 dst$bnk: db    0FEh
 
 
-    endif      ;banked
+   endif       ;banked
 
        end