From accdeea9cc9fb562ad8ec6f5108ead13d144eb6b Mon Sep 17 00:00:00 2001 From: D4VID Date: Sat, 25 Jan 2025 16:50:06 +0100 Subject: [PATCH] Pong Trash --- src/main.rs | 70 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 61 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index 2991c58..99f2f45 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,22 +13,74 @@ fn panic_handler(_info: &PanicInfo) -> ! { } const OUTPUT: *mut u32 = 0x2000_0000 as *mut u32; -// const BTNS: *mut u8 = 0x2000_0008 as *mut u8; - +const BTNS: *mut u8 = 0x2000_0008 as *mut u8; const SCREEN: *mut u32 = 0x2000_0080 as *mut u32; #[entry] fn main() -> ! { - let mut value: u32 = 1; - let mut offset: isize = 0; + let mut playerA: u8 = 1; + let mut playerB: u8 = 1; + let mut ballX: i8 = 16; + let mut ballY: i8 = 16; + let mut ballXvel: i8 = 1; + + let mut vram: [u32; 32] = [0; 32]; + + vram[playerA as usize] |= 1 << 31; + vram[playerB as usize] |= 1; + vram[ballY as usize] |= 1 << ballX; + loop { + let btns; unsafe { - SCREEN.offset(offset).write_volatile(value); + btns = BTNS.read_volatile(); + } + + // left up + if btns & (1 << 7) > 0 { + vram[playerA as usize] &= !(1 << 31); + playerA -= 1; + vram[playerA as usize] |= 1 << 31; + } + // left down + if btns & (1 << 5) > 0 { + vram[playerA as usize] &= !(1 << 31); + playerA += 1; + vram[playerA as usize] |= 1 << 31; + } + + // right up + if btns & (1 << 3) > 0 { + vram[playerB as usize] &= !1; + playerB -= 1; + vram[playerB as usize] |= 1; } - value <<= 1; - offset += 1; - if value == 0 { - panic!(); + // right down + if btns & (1 << 1) > 0 { + vram[playerB as usize] &= !1; + playerB += 1; + vram[playerB as usize] |= 1; + } + + if ballX >= 31 { + ballXvel = -1; + } else if ballX == 0 { + ballXvel = 1; + } + vram[ballY as usize] &= !(1 << ballX); + ballX += ballXvel; + vram[ballY as usize] |= 1 << ballX; + + draw(&vram); + } +} + +fn draw(vram: &[u32; 32]) { + for row_index in 0..32 { + unsafe { + SCREEN + .offset(row_index) + .write_volatile(vram[row_index as usize]); } } }