mirror of
https://github.com/italicsjenga/agb.git
synced 2024-12-24 08:41:34 +11:00
Extract dma_copy to its own module
This commit is contained in:
parent
068bc95fe7
commit
09f6736497
|
@ -3,6 +3,7 @@ use core::ops::{Deref, DerefMut};
|
|||
|
||||
use crate::bitarray::Bitarray;
|
||||
use crate::display::{self, Priority, DISPLAY_CONTROL};
|
||||
use crate::dma::dma_copy;
|
||||
use crate::fixnum::Vector2D;
|
||||
use crate::memory_mapped::MemoryMapped;
|
||||
|
||||
|
@ -190,28 +191,3 @@ fn div_ceil(x: i32, y: i32) -> i32 {
|
|||
x / y
|
||||
}
|
||||
}
|
||||
|
||||
const fn dma_source_addr(dma: usize) -> usize {
|
||||
0x0400_00b0 + 0x0c * dma
|
||||
}
|
||||
|
||||
const fn dma_dest_addr(dma: usize) -> usize {
|
||||
0x0400_00b4 + 0x0c * dma
|
||||
}
|
||||
|
||||
const fn dma_control_addr(dma: usize) -> usize {
|
||||
0x0400_00b8 + 0x0c * dma
|
||||
}
|
||||
|
||||
const DMA3_SOURCE_ADDR: MemoryMapped<u32> = unsafe { MemoryMapped::new(dma_source_addr(3)) };
|
||||
const DMA3_DEST_ADDR: MemoryMapped<u32> = unsafe { MemoryMapped::new(dma_dest_addr(3)) };
|
||||
const DMA3_CONTROL: MemoryMapped<u32> = unsafe { MemoryMapped::new(dma_control_addr(3)) };
|
||||
|
||||
unsafe fn dma_copy(src: *const u16, dest: *mut u16, count: usize) {
|
||||
assert!(count < u16::MAX as usize);
|
||||
|
||||
DMA3_SOURCE_ADDR.set(src as u32);
|
||||
DMA3_DEST_ADDR.set(dest as u32);
|
||||
|
||||
DMA3_CONTROL.set(count as u32 | (1 << 31));
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ use alloc::vec::Vec;
|
|||
|
||||
use crate::{
|
||||
display::palette16,
|
||||
dma::dma_copy,
|
||||
memory_mapped::{MemoryMapped, MemoryMapped1DArray},
|
||||
};
|
||||
|
||||
|
@ -291,28 +292,3 @@ impl<'a> VRamManager<'a> {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
const fn dma_source_addr(dma: usize) -> usize {
|
||||
0x0400_00b0 + 0x0c * dma
|
||||
}
|
||||
|
||||
const fn dma_dest_addr(dma: usize) -> usize {
|
||||
0x0400_00b4 + 0x0c * dma
|
||||
}
|
||||
|
||||
const fn dma_control_addr(dma: usize) -> usize {
|
||||
0x0400_00b8 + 0x0c * dma
|
||||
}
|
||||
|
||||
const DMA3_SOURCE_ADDR: MemoryMapped<u32> = unsafe { MemoryMapped::new(dma_source_addr(3)) };
|
||||
const DMA3_DEST_ADDR: MemoryMapped<u32> = unsafe { MemoryMapped::new(dma_dest_addr(3)) };
|
||||
const DMA3_CONTROL: MemoryMapped<u32> = unsafe { MemoryMapped::new(dma_control_addr(3)) };
|
||||
|
||||
unsafe fn dma_copy(src: *const u16, dest: *mut u16, count: usize) {
|
||||
assert!(count < u16::MAX as usize);
|
||||
|
||||
DMA3_SOURCE_ADDR.set(src as u32);
|
||||
DMA3_DEST_ADDR.set(dest as u32);
|
||||
|
||||
DMA3_CONTROL.set(count as u32 | (1 << 31));
|
||||
}
|
||||
|
|
26
agb/src/dma.rs
Normal file
26
agb/src/dma.rs
Normal file
|
@ -0,0 +1,26 @@
|
|||
use crate::memory_mapped::MemoryMapped;
|
||||
|
||||
const fn dma_source_addr(dma: usize) -> usize {
|
||||
0x0400_00b0 + 0x0c * dma
|
||||
}
|
||||
|
||||
const fn dma_dest_addr(dma: usize) -> usize {
|
||||
0x0400_00b4 + 0x0c * dma
|
||||
}
|
||||
|
||||
const fn dma_control_addr(dma: usize) -> usize {
|
||||
0x0400_00b8 + 0x0c * dma
|
||||
}
|
||||
|
||||
const DMA3_SOURCE_ADDR: MemoryMapped<u32> = unsafe { MemoryMapped::new(dma_source_addr(3)) };
|
||||
const DMA3_DEST_ADDR: MemoryMapped<u32> = unsafe { MemoryMapped::new(dma_dest_addr(3)) };
|
||||
const DMA3_CONTROL: MemoryMapped<u32> = unsafe { MemoryMapped::new(dma_control_addr(3)) };
|
||||
|
||||
pub(crate) unsafe fn dma_copy(src: *const u16, dest: *mut u16, count: usize) {
|
||||
assert!(count < u16::MAX as usize);
|
||||
|
||||
DMA3_SOURCE_ADDR.set(src as u32);
|
||||
DMA3_DEST_ADDR.set(dest as u32);
|
||||
|
||||
DMA3_CONTROL.set(count as u32 | (1 << 31));
|
||||
}
|
|
@ -142,6 +142,7 @@ mod arena;
|
|||
mod bitarray;
|
||||
/// Implements everything relating to things that are displayed on screen.
|
||||
pub mod display;
|
||||
mod dma;
|
||||
/// Button inputs to the system.
|
||||
pub mod input;
|
||||
#[doc(hidden)] // hide for now as the implementation in here is unsound
|
||||
|
|
Loading…
Reference in a new issue