// Games made using `agb` are no_std which means you don't have access to the standard // rust library. This is because the game boy advance doesn't really have an operating // system, so most of the content of the standard library doesn't apply. // // Provided you haven't disabled it, agb does provide an allocator, so it is possible // to use both the `core` and the `alloc` built in crates. #![no_std] // `agb` defines its own `main` function, so you must declare your game's main function // using the #[agb::entry] proc macro. Failing to do so will cause failure in linking // which won't be a particularly clear error message. #![no_main] use agb::{display, syscall}; // The main function must take 1 arguments and never return. The agb::entry decorator // ensures that everything is in order. `agb` will call this after setting up the stack // and interrupt handlers correctly. It will also handle creating the `Gba` struct for you. #[agb::entry] fn main(mut gba: agb::Gba) -> ! { let mut bitmap = gba.display.video.bitmap3(); for x in 0..display::WIDTH { let y = syscall::sqrt(x << 6); let y = (display::HEIGHT - y).clamp(0, display::HEIGHT - 1); bitmap.draw_point(x, y, 0x001F); } loop { syscall::halt(); } }