From c360c2dce4a4200954e6bc01b4a95a5e2e23ccae Mon Sep 17 00:00:00 2001 From: Lokathor Date: Wed, 13 Feb 2019 01:47:12 -0700 Subject: [PATCH] example updates --- examples-bak/hello_world.rs | 25 ----------------- examples-bak/light_cycle.rs | 20 ++++++------- examples/hello_world.rs | 56 +++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 35 deletions(-) delete mode 100644 examples-bak/hello_world.rs create mode 100644 examples/hello_world.rs diff --git a/examples-bak/hello_world.rs b/examples-bak/hello_world.rs deleted file mode 100644 index d4848d6..0000000 --- a/examples-bak/hello_world.rs +++ /dev/null @@ -1,25 +0,0 @@ -#![no_std] -#![feature(start)] -#![forbid(unsafe_code)] - -use gba::{ - io::display::{DisplayControlSetting, DisplayMode, DISPCNT}, - vram::bitmap::Mode3, - Color, -}; - -#[panic_handler] -fn panic(_info: &core::panic::PanicInfo) -> ! { - loop {} -} - -#[start] -fn main(_argc: isize, _argv: *const *const u8) -> isize { - const SETTING: DisplayControlSetting = - DisplayControlSetting::new().with_mode(DisplayMode::Mode3).with_bg2(true); - DISPCNT.write(SETTING); - Mode3::write_pixel(120, 80, Color::from_rgb(31, 0, 0)); - Mode3::write_pixel(136, 80, Color::from_rgb(0, 31, 0)); - Mode3::write_pixel(120, 96, Color::from_rgb(0, 0, 31)); - loop {} -} diff --git a/examples-bak/light_cycle.rs b/examples-bak/light_cycle.rs index 3514998..58f2156 100644 --- a/examples-bak/light_cycle.rs +++ b/examples-bak/light_cycle.rs @@ -21,8 +21,8 @@ fn main(_argc: isize, _argv: *const *const u8) -> isize { const SETTING: DisplayControlSetting = DisplayControlSetting::new().with_mode(DisplayMode::Mode3).with_bg2(true); DISPCNT.write(SETTING); - let mut px = Mode3::SCREEN_WIDTH / 2; - let mut py = Mode3::SCREEN_HEIGHT / 2; + let mut px = Mode3::WIDTH / 2; + let mut py = Mode3::HEIGHT / 2; let mut color = Color::from_rgb(31, 0, 0); loop { @@ -36,24 +36,24 @@ fn main(_argc: isize, _argv: *const *const u8) -> isize { // draw the new game and wait until the next frame starts. const BLACK: Color = Color::from_rgb(0, 0, 0); - if px >= Mode3::SCREEN_WIDTH || py >= Mode3::SCREEN_HEIGHT { + if px >= Mode3::WIDTH || py >= Mode3::HEIGHT { // out of bounds, reset the screen and position. Mode3::clear_to(BLACK); color = color.rotate_left(5); - px = Mode3::SCREEN_WIDTH / 2; - py = Mode3::SCREEN_HEIGHT / 2; + px = Mode3::WIDTH / 2; + py = Mode3::HEIGHT / 2; } else { - let color_here = Mode3::read_pixel(px, py); + let color_here = Mode3::read(px, py); if color_here != Some(BLACK) { // crashed into our own line, reset the screen Mode3::dma_clear_to(BLACK); color = color.rotate_left(5); } else { // draw the new part of the line - Mode3::write_pixel(px, py, color); - Mode3::write_pixel(px, py + 1, color); - Mode3::write_pixel(px + 1, py, color); - Mode3::write_pixel(px + 1, py + 1, color); + Mode3::write(px, py, color); + Mode3::write(px, py + 1, color); + Mode3::write(px + 1, py, color); + Mode3::write(px + 1, py + 1, color); } } spin_until_vdraw(); diff --git a/examples/hello_world.rs b/examples/hello_world.rs new file mode 100644 index 0000000..122646b --- /dev/null +++ b/examples/hello_world.rs @@ -0,0 +1,56 @@ +#![no_std] +#![feature(start)] +#![forbid(unsafe_code)] + +use gba::{ + fatal, + io::display::{DisplayControlSetting, DisplayMode, DISPCNT}, + vram::bitmap::{Mode3, Mode4, Mode5, Page}, + warn, Color, +}; + +#[panic_handler] +fn panic(info: &core::panic::PanicInfo) -> ! { + fatal!("{}", info); + loop {} +} + +#[start] +fn main(_argc: isize, _argv: *const *const u8) -> isize { + const SETTING: DisplayControlSetting = + DisplayControlSetting::new().with_mode(DisplayMode::Mode5).with_bg2(true); + DISPCNT.write(SETTING); + + use gba::io::timers::*; + let tcs0 = TimerControlSetting::new().with_enabled(true); + let tcs1 = TimerControlSetting::new().with_tick_rate(TimerTickRate::Cascade).with_enabled(true); + + TM1CNT_H.write(tcs1); + TM0CNT_H.write(tcs0); + let start = TM0CNT_L.read(); + Mode5::clear_to(Page::Zero, Color(0)); + let end0 = TM0CNT_L.read(); + let end1 = TM1CNT_L.read(); + warn!("CLEAR_TO: start:{}, end0:{}, end1:{}", start, end0, end1); + + // reset + TM1CNT_H.write(TimerControlSetting::new()); + TM0CNT_H.write(TimerControlSetting::new()); + + TM1CNT_H.write(tcs1); + TM0CNT_H.write(tcs0); + let start = TM0CNT_L.read(); + Mode5::dma_clear_to(Page::Zero, Color(0)); + let end0 = TM0CNT_L.read(); + let end1 = TM1CNT_L.read(); + warn!("DMA_CLEAR_TO: start:{}, end0:{}, end1:{}", start, end0, end1); + + DISPCNT.write(DisplayControlSetting::new().with_mode(DisplayMode::Mode3).with_bg2(true)); + loop { + let this_frame_keys = gba::io::keypad::read_key_input(); + gba::io::display::spin_until_vblank(); + Mode3::dma_clear_to(Color(111)); + Mode3::draw_line(5, 5, 240, 160, Color(0b0_11111_11111_11111)); + gba::io::display::spin_until_vdraw(); + } +}