diff options
Diffstat (limited to 'engine/oam_dma.asm')
-rw-r--r-- | engine/oam_dma.asm | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/engine/oam_dma.asm b/engine/oam_dma.asm new file mode 100644 index 00000000..3de4d773 --- /dev/null +++ b/engine/oam_dma.asm @@ -0,0 +1,25 @@ +WriteDMACodeToHRAM: +; Since no other memory is available during OAM DMA, +; DMARoutine is copied to HRAM and executed there. + ld c, $ff80 % $100 + ld b, DMARoutineEnd - DMARoutine + ld hl, DMARoutine +.copy + ld a, [hli] + ld [$ff00+c], a + inc c + dec b + jr nz, .copy + ret + +DMARoutine: + ; initiate DMA + ld a, wOAMBuffer / $100 + ld [$ff46], a + + ; wait for DMA to finish + ld a, $28 +.wait dec a + jr nz, .wait + ret +DMARoutineEnd: |