]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blobdiff - cbios/move.180
sd drive login: return 0 (== no disk), if login function detects error
[z180-stamp-cpm3.git] / cbios / move.180
index 92b56ceacaf8c7f595e1cfdb9167eb67c57397c3..aac18403c41a6414f24efdb47d350cb3ad35da98 100644 (file)
    if banked
 
 inter_bank_move:               ; source in HL, dest in DE, count in BC
-    if 0                       ; *** DOES NOT WORK PROPERLY
-                               ;     (Crossing Bank boundary problems)
-       push    bc
-       push    de
-       push    hl
 
-;TODO: check if source range crosses bank/common boundary
+    if 1                       ; works with new memory map
+
+       out0    (bcr0l),c       ; setup DMA count
+       out0    (bcr0h),b
 
+       push    hl
+       push    de
        ld      a,(src$bnk)
        call    bnk2phy
-
        out0    (sar0l),l       ; setup DMA src address
        out0    (sar0h),h
        out0    (sar0b),a
 
-;TODO: check if destination range crosses bank/common boundary
-
        ex      de,hl
        ld      a,(dst$bnk)
        call    bnk2phy
-
        out0    (dar0l),l       ; setup DMA dst address
        out0    (dar0h),h
        out0    (dar0b),a
 
        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
 
-       pop     hl
        pop     de
-       pop     bc
-
+       pop     hl
        add     hl,bc           ; src must point past end block
        ex      de,hl
        add     hl,bc           ; and so must dst
@@ -92,7 +84,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