diff --git a/agb/src/display/tiled/vram_manager.rs b/agb/src/display/tiled/vram_manager.rs index 7f375339..5c99f89f 100644 --- a/agb/src/display/tiled/vram_manager.rs +++ b/agb/src/display/tiled/vram_manager.rs @@ -266,8 +266,12 @@ impl<'a> VRamManager<'a> { } fn set_background_palette(&mut self, pal_index: u8, palette: &palette16::Palette16) { - for (colour_index, &colour) in palette.colours.iter().enumerate() { - PALETTE_BACKGROUND.set(pal_index as usize * 16 + colour_index, colour); + unsafe { + dma_copy16( + palette.colours.as_ptr(), + PALETTE_BACKGROUND.as_ptr().add(16 * pal_index as usize), + palette.colours.len(), + ); } } diff --git a/agb/src/memory_mapped.rs b/agb/src/memory_mapped.rs index 940f3d77..57b5bb51 100644 --- a/agb/src/memory_mapped.rs +++ b/agb/src/memory_mapped.rs @@ -57,6 +57,10 @@ impl MemoryMapped1DArray { pub fn set(&self, n: usize, val: T) { unsafe { (&mut (*self.array)[n] as *mut T).write_volatile(val) } } + + pub fn as_ptr(&self) -> *mut T { + self.array.cast() + } } pub struct MemoryMapped2DArray {