akern-gkgoat-fork/ableos/src/arch/riscv/mod.rs

100 lines
2.6 KiB
Rust
Raw Normal View History

pub mod drivers;
pub mod init;
2022-04-11 22:23:11 +00:00
use crate::print;
use crate::println;
use core::arch::asm;
#[naked]
#[no_mangle]
unsafe extern "C" fn _boot() -> ! {
#[rustfmt::skip]
asm!("
csrw sie, zero
csrci sstatus, 2
.option push
.option norelax
lla gp, __global_pointer$
.option pop
lla sp, __tmp_stack_top
lla t0, __bss_start
lla t1, __bss_end
1:
beq t0, t1, 2f
sd zero, (t0)
addi t0, t0, 8
j 1b
2:
j {}
",
sym _start, options(noreturn));
}
2021-11-23 11:53:06 +00:00
extern "C" fn _start() -> ! {
2022-04-11 22:23:11 +00:00
use crate::serial_println;
2022-02-18 16:04:10 +00:00
let uart = crate::arch::drivers::uart::Uart::new(0x1000_0000);
uart.init();
2022-05-13 02:07:06 +00:00
log!("Hello, world!\r");
2022-02-18 16:04:10 +00:00
loop {
if let Some(c) = uart.get() {
match c {
2022-02-20 11:05:50 +00:00
66 => break,
2022-02-18 16:04:10 +00:00
10 | 13 => {
uart.put('\n' as u8);
uart.put('\r' as u8);
}
2022-04-12 18:46:50 +00:00
/*
91 => {
if let Some(ch) = uart.get() {
match ch as char {
'A' => {
serial_println!("That's the up arrow!");
}
'B' => {
serial_println!("That's the down arrow!");
}
'C' => {
serial_println!("That's the right arrow!");
}
'D' => {
serial_println!("That's the left arrow!");
}
_ => {
serial_println!("That's something else!");
}
}
}
}
*/
2022-02-18 16:04:10 +00:00
_ => {
uart.put(c);
}
}
}
2021-11-27 15:19:08 +00:00
}
2022-02-18 16:04:10 +00:00
2022-03-11 23:13:41 +00:00
serial_println!("Serial connection closed.\r");
sloop()
}
pub fn sloop() -> ! {
loop {
2022-02-18 16:04:10 +00:00
unsafe {
asm!("wfi");
};
}
}
2022-02-18 16:04:10 +00:00
pub fn shutdown() {}
pub fn generate_process_pass() -> u128 {
123
}