Code: Select all
; Megadrive DMA Copy by Sasq
; d0 = Address, d1 = Size (in words), d2 = VRAM offset
dma_copy:
move.l #$C00004,a0
move.w #$8f02,(a0)
; Set Source address High, Mid & Low
lsl.l #7,d0
move.b #$97,d0
rol.l #8,d0
move.w d0,(a0)
move.b #$96,d0
rol.l #8,d0
move.w d0,(a0)
move.b #$95,d0
rol.l #8,d0
move.w d0,(a0)
; Set Size Low & High
move.w #$9300,d0
move.b d1,d0
move.w d0,(a0)
lsr #8,d1
or.w #$9400,d1
move.w d1,(a0)
; Set Target address =
; ((0x40000080 | ((adr) & 0x3FFF)) << 16) | (((adr) >> 14))
lsl.l #2,d2
lsr.w #2,d2
swap d2
or.l #$40000080,d2
move.l d2,(a0)
rts
-- Sasq