diff --git a/Makefile b/Makefile index d0b209e..ec9f05f 100644 --- a/Makefile +++ b/Makefile @@ -4,8 +4,8 @@ build: cargo build --release extract: build - riscv32-elf-objcopy -O binary --only-section=.text target/riscv32i-unknown-none-elf/release/lw-riscv text.bin - riscv32-elf-objcopy -O binary --only-section=.rodata target/riscv32i-unknown-none-elf/release/lw-riscv rodata.bin + riscv32-elf-objcopy -O binary --only-section=.text target/riscv32i-unknown-none-elf/release/lw-riscv ~/text.bin + riscv32-elf-objcopy -O binary --only-section=.rodata target/riscv32i-unknown-none-elf/release/lw-riscv ~/rodata.bin size: extract cargo size --release -- -A diff --git a/src/main.rs b/src/main.rs index 106f934..e8800f5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,20 +6,39 @@ use riscv_rt::entry; #[panic_handler] fn panic_handler(_info: &PanicInfo) -> ! { + unsafe { + OUTPUT.write_volatile(0xDEADC0DE); + } loop {} } -#[used] -static TEXT: &str = "lmao YEET"; +const OUTPUT: *mut u32 = 0x2000_0000 as *mut u32; +const BTNS: *mut u8 = 0x2000_0008 as *mut u8; #[entry] fn main() -> ! { - let output = 0x2000_0000 as *mut u32; - let mut n: u32 = 6814; + let mut value: u32 = 1; + let mut btnA_prev = false; + let mut btnB_prev = false; loop { + let btns_value; + unsafe { + btns_value = BTNS.read_volatile(); + } + let btnA = (btns_value & 0b00000001) > 0; + let btnB = (btns_value & 0b00000010) > 0; + if btnA && !btnA_prev { + value >>= 1; + } else if btnB && !btnB_prev { + value <<= 1; + } + if value == 0 { + panic!(); + } unsafe { - output.write_volatile(n); + OUTPUT.write_volatile(value); } - n += 1; + btnA_prev = btnA; + btnB_prev = btnB; } }