mirror of
https://github.com/italicsjenga/gba.git
synced 2024-12-24 03:11:29 +11:00
test out BitUnpack, fix bugs.
This commit is contained in:
parent
8bd4dfa939
commit
ff16e0bbc6
|
@ -1,7 +1,7 @@
|
||||||
#![no_std]
|
#![no_std]
|
||||||
#![no_main]
|
#![no_main]
|
||||||
|
|
||||||
use core::fmt::Write;
|
use core::{fmt::Write, mem::size_of_val};
|
||||||
use gba::{
|
use gba::{
|
||||||
mgba::{MgbaBufferedLogger, MgbaMessageLevel},
|
mgba::{MgbaBufferedLogger, MgbaMessageLevel},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
|
@ -36,7 +36,20 @@ extern "C" fn main() -> ! {
|
||||||
writeln!(logger, "hello!").ok();
|
writeln!(logger, "hello!").ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
DISPCNT.write(DisplayControl::new().with_show_bg0(true));
|
{
|
||||||
|
// get our tile data into memory.
|
||||||
|
//let src = ;
|
||||||
|
let dest = CHARBLOCK0_4BPP.index(0).as_usize() as *mut u32;
|
||||||
|
let info = BitUnpackInfo {
|
||||||
|
src_byte_len: size_of_val(&CGA_8X8_THICK) as u16,
|
||||||
|
src_elem_width: 1,
|
||||||
|
dest_elem_width: 4,
|
||||||
|
offset_and_touch_zero: 0,
|
||||||
|
};
|
||||||
|
unsafe { BitUnPack(CGA_8X8_THICK.as_ptr().cast::<u8>(), dest, &info) };
|
||||||
|
}
|
||||||
|
|
||||||
|
DISPCNT.write(DisplayControl::new().with_show_bg2(true));
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
VBlankIntrWait();
|
VBlankIntrWait();
|
||||||
|
|
|
@ -106,9 +106,9 @@ pub struct BitUnpackInfo {
|
||||||
/// * `dest` must be 4 byte aligned.
|
/// * `dest` must be 4 byte aligned.
|
||||||
#[inline]
|
#[inline]
|
||||||
#[instruction_set(arm::t32)]
|
#[instruction_set(arm::t32)]
|
||||||
pub unsafe fn BitUnPack(src: *mut u8, dest: *mut u32, info: &BitUnpackInfo) {
|
pub unsafe fn BitUnPack(src: *const u8, dest: *mut u32, info: &BitUnpackInfo) {
|
||||||
core::arch::asm! {
|
core::arch::asm! {
|
||||||
"swi #0x05",
|
"swi #0x10",
|
||||||
inout("r0") src => _,
|
inout("r0") src => _,
|
||||||
inout("r1") dest => _,
|
inout("r1") dest => _,
|
||||||
inout("r2") info => _,
|
inout("r2") info => _,
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
/// # use core::mem::size_of_val;
|
/// # use core::mem::size_of_val;
|
||||||
/// let src = CGA_8X8_THICK.as_ptr().cast::<u8>();
|
/// let src = CGA_8X8_THICK.as_ptr().cast::<u8>();
|
||||||
///
|
///
|
||||||
/// let dest = CHARBLOCK0_4BPP.as_usize() as *mut u32;
|
/// let dest = CHARBLOCK0_4BPP.index(0).as_usize() as *mut u32;
|
||||||
///
|
///
|
||||||
/// let info = BitUnpackInfo {
|
/// let info = BitUnpackInfo {
|
||||||
/// src_byte_len: size_of_val(&CGA_8X8_THICK) as u16,
|
/// src_byte_len: size_of_val(&CGA_8X8_THICK) as u16,
|
||||||
|
@ -35,7 +35,7 @@
|
||||||
/// https://en.wikipedia.org/wiki/Intellectual_property_protection_of_typefaces
|
/// https://en.wikipedia.org/wiki/Intellectual_property_protection_of_typefaces
|
||||||
///
|
///
|
||||||
/// [df-tiles]: https://dwarffortresswiki.org/Tileset_repository#8.C3.978
|
/// [df-tiles]: https://dwarffortresswiki.org/Tileset_repository#8.C3.978
|
||||||
pub const CGA_8X8_THICK: [u32; 512] = [
|
pub static CGA_8X8_THICK: [u32; 512] = [
|
||||||
// Note(Lokathor): I generated this by (1) converting the type face file from
|
// Note(Lokathor): I generated this by (1) converting the type face file from
|
||||||
// an RGB PNG to Indexed Color PNG using GIMP, (2) running `grit
|
// an RGB PNG to Indexed Color PNG using GIMP, (2) running `grit
|
||||||
// CGA8x8thick-indexed.png -gB1` to output an assembly file full of the
|
// CGA8x8thick-indexed.png -gB1` to output an assembly file full of the
|
||||||
|
|
Loading…
Reference in a new issue