1
0
Fork 0
forked from AbleOS/ableos
This commit is contained in:
Able 2024-07-23 19:37:43 -05:00
parent 3f183e231d
commit ea6ba3bdb0
5 changed files with 49 additions and 12 deletions

View file

@ -68,7 +68,7 @@ pub fn handler(vm: &mut Vm) {
let buffer_id = vm.registers[3].cast::<u64>();
let mem_addr = vm.registers[4].cast::<u64>();
let length = vm.registers[5].cast::<u64>() as usize;
// debug!("IPC address: {:?}", mem_addr);
debug!("IPC address: {:?}", mem_addr);
use alloc::vec::Vec;
match buffer_id {
@ -89,10 +89,10 @@ pub fn handler(vm: &mut Vm) {
//
}
3 => {
unsafe fn x86_in(address: u16) -> u32 {
unsafe fn x86_in(address: u16) -> u8 {
x86_64::instructions::port::Port::new(address).read()
}
unsafe fn x86_out(address: u16, value: u32) {
unsafe fn x86_out(address: u16, value: u8) {
x86_64::instructions::port::Port::new(address).write(value);
}
@ -101,20 +101,32 @@ pub fn handler(vm: &mut Vm) {
msg_vec.remove(0);
match msg_type {
0 => {
let addr = msg_vec[0];
let mut addr = msg_vec[0] as u16;
msg_vec.remove(0);
let value = unsafe { x86_in(addr as u16) };
let addr2 = msg_vec[0] as u16;
msg_vec.remove(0);
addr = ((addr) << 8) | addr2;
let value = unsafe { x86_in(addr) };
info!("Read the value {} from address {}", value, addr);
vm.registers[1] = hbvm::value::Value(value as u64);
}
1 => {
let addr = msg_vec[0];
let mut addr = msg_vec[0] as u16;
msg_vec.remove(0);
let addr2 = msg_vec[0] as u16;
msg_vec.remove(0);
addr = ((addr) << 8) | addr2;
let value = msg_vec[0];
msg_vec.remove(0);
info!("Setting the address {} to {}", addr, value);
unsafe { x86_out(addr as u16, value as u32) };
unsafe { x86_out(addr, value) };
}
_ => {}
}

View file

@ -337,7 +337,8 @@ fn run(release: bool, target: Target) -> Result<(), Error> {
"-m", "4G",
"-smp", "cores=4",
// "-enable-kvm",
"-cpu", "Broadwell-v4"
"-cpu", "Broadwell-v4",
"-device", "isa-debug-exit,iobase=0xf4,iosize=0x04"
]);
}
Target::Riscv64Virt => {

View file

@ -16,3 +16,20 @@ release_page := fn(ptr: ^u8, page_count: u8): void {
return @eca(void, 3, 2, msg, 12)
}
outb := fn(addr_high: u8, addr_low: u8, value: u8): void {
msg := "\0\0\0\0";
*msg = 1;
*(msg + 1) = addr_high;
*(msg + 2) = addr_low;
*(msg + 3) = value
@eca(void, 3, 3, msg, 4)
return
}
inb := fn(addr_high: u8, addr_low: u8): u8 {
msg := "\0\0\0\0";
*(msg + 1) = addr_high;
*(msg + 2) = addr_low
return @eca(u8, 3, 3, msg, 3)
}

View file

@ -1,5 +1,12 @@
main := fn(): int {
@eca(i32, 1, 1, 1);
stn := @use("../../../libraries/stn/src/lib.hb");
.{log, string, memory, buffer} := stn
return 0;
main := fn(): int {
// shuts down ableOS
memory.outb(0, 244, 0)
a := memory.inb(0, 70)
b := memory.inb(0, 71)
return 0
}

View file

@ -9,6 +9,6 @@ service_search := fn(): void {
}
main := fn(): int {
service_search()
//service_search()
return 0
}