From ef8b2edc6322b090184fa596da10d870073b514e Mon Sep 17 00:00:00 2001 From: Gwilym Kuiper Date: Sun, 13 Mar 2022 19:53:07 +0000 Subject: [PATCH] Also dma the palette in backgrounds --- agb/src/display/tiled/vram_manager.rs | 8 ++++++-- agb/src/memory_mapped.rs | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) 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 {