mirror of
https://github.com/italicsjenga/agb.git
synced 2024-12-24 00:31:34 +11:00
pull out where to write
This commit is contained in:
parent
875d53c040
commit
d183b8373d
|
@ -14,11 +14,11 @@ pub use unmanaged::{AffineMode, OAMIterator, OAMSlot, UnmanagedOAM, UnmanagedObj
|
||||||
|
|
||||||
use super::DISPLAY_CONTROL;
|
use super::DISPLAY_CONTROL;
|
||||||
|
|
||||||
const OBJECT_ATTRIBUTE_MEMORY: usize = 0x0700_0000;
|
const OBJECT_ATTRIBUTE_MEMORY: *mut u16 = 0x0700_0000 as *mut u16;
|
||||||
|
|
||||||
pub(super) unsafe fn initilise_oam() {
|
pub(super) unsafe fn initilise_oam() {
|
||||||
for i in 0..128 {
|
for i in 0..128 {
|
||||||
let ptr = (OBJECT_ATTRIBUTE_MEMORY as *mut u16).add(i * 4);
|
let ptr = (OBJECT_ATTRIBUTE_MEMORY).add(i * 4);
|
||||||
ptr.write_volatile(0b10 << 8);
|
ptr.write_volatile(0b10 << 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,6 @@ use alloc::rc::Rc;
|
||||||
|
|
||||||
use crate::display::affine::AffineMatrixObject;
|
use crate::display::affine::AffineMatrixObject;
|
||||||
|
|
||||||
use super::OBJECT_ATTRIBUTE_MEMORY;
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
struct AffineMatrixData {
|
struct AffineMatrixData {
|
||||||
frame_count: Cell<u32>,
|
frame_count: Cell<u32>,
|
||||||
|
@ -55,13 +53,12 @@ impl AffineMatrixVram {
|
||||||
self.0.location.set(location);
|
self.0.location.set(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn write_to_location(&self) {
|
pub fn write_to_location(&self, oam: *mut u16) {
|
||||||
let components = self.0.matrix.components();
|
let components = self.0.matrix.components();
|
||||||
let location = self.0.location.get() as usize;
|
let location = self.0.location.get() as usize;
|
||||||
for (idx, component) in components.iter().enumerate() {
|
for (idx, component) in components.iter().enumerate() {
|
||||||
unsafe {
|
unsafe {
|
||||||
(OBJECT_ATTRIBUTE_MEMORY as *mut u16)
|
oam.add(location * 16 + idx * 4 + 3)
|
||||||
.add(location * 16 + idx * 4 + 3)
|
|
||||||
.write_volatile(*component);
|
.write_volatile(*component);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,7 @@ impl OAMSlot<'_> {
|
||||||
);
|
);
|
||||||
affine_matrix.set_location(frame_data.affine_matrix_count);
|
affine_matrix.set_location(frame_data.affine_matrix_count);
|
||||||
frame_data.affine_matrix_count += 1;
|
frame_data.affine_matrix_count += 1;
|
||||||
affine_matrix.write_to_location();
|
affine_matrix.write_to_location(OBJECT_ATTRIBUTE_MEMORY);
|
||||||
}
|
}
|
||||||
|
|
||||||
attributes.set_affine_matrix(affine_matrix.location() as u16);
|
attributes.set_affine_matrix(affine_matrix.location() as u16);
|
||||||
|
|
Loading…
Reference in a new issue