You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
657 B

2 years ago
  1. INCLUDE "hardware.inc"
  2. SECTION "OAM Mirror", WRAM0, ALIGN[8]
  3. _OAM:: ds OAM_COUNT * sizeof_OAM_ATTRS
  4. _OAM_end:
  5. SECTION "OAM Code", ROM0
  6. ; Initialize OAM
  7. OAM_Init::
  8. ; Clear internal OAM
  9. ld hl, _OAM
  10. xor a
  11. ld c, _OAM_end - _OAM
  12. call memset
  13. ; Copy DMA transfer routine to HRAM
  14. ld hl, waitForDMA
  15. ld bc, DMA_Start
  16. ld d, waitForDMA_end - waitForDMA
  17. call memcpy
  18. ret
  19. ; Wait for DMA transfer from $XX00 to complete (~160 cycles)
  20. ; @param a $XX
  21. waitForDMA:
  22. ld [rDMA], a
  23. ld a, 40
  24. .wait:
  25. dec a
  26. jr nz, .wait
  27. ret
  28. waitForDMA_end:
  29. SECTION "OAM DMA", HRAM
  30. DMA_Start::
  31. ds waitForDMA_end - waitForDMA