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 buffer_id = vm.registers[3].cast::<u64>();
let mem_addr = vm.registers[4].cast::<u64>(); let mem_addr = vm.registers[4].cast::<u64>();
let length = vm.registers[5].cast::<u64>() as usize; let length = vm.registers[5].cast::<u64>() as usize;
// debug!("IPC address: {:?}", mem_addr); debug!("IPC address: {:?}", mem_addr);
use alloc::vec::Vec; use alloc::vec::Vec;
match buffer_id { match buffer_id {
@ -89,10 +89,10 @@ pub fn handler(vm: &mut Vm) {
// //
} }
3 => { 3 => {
unsafe fn x86_in(address: u16) -> u32 { unsafe fn x86_in(address: u16) -> u8 {
x86_64::instructions::port::Port::new(address).read() 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); x86_64::instructions::port::Port::new(address).write(value);
} }
@ -101,20 +101,32 @@ pub fn handler(vm: &mut Vm) {
msg_vec.remove(0); msg_vec.remove(0);
match msg_type { match msg_type {
0 => { 0 => {
let addr = msg_vec[0]; let mut addr = msg_vec[0] as u16;
msg_vec.remove(0); 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); info!("Read the value {} from address {}", value, addr);
vm.registers[1] = hbvm::value::Value(value as u64); vm.registers[1] = hbvm::value::Value(value as u64);
} }
1 => { 1 => {
let addr = msg_vec[0]; let mut addr = msg_vec[0] as u16;
msg_vec.remove(0); msg_vec.remove(0);
let addr2 = msg_vec[0] as u16;
msg_vec.remove(0);
addr = ((addr) << 8) | addr2;
let value = msg_vec[0]; let value = msg_vec[0];
msg_vec.remove(0); msg_vec.remove(0);
info!("Setting the address {} to {}", addr, value); 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", "-m", "4G",
"-smp", "cores=4", "-smp", "cores=4",
// "-enable-kvm", // "-enable-kvm",
"-cpu", "Broadwell-v4" "-cpu", "Broadwell-v4",
"-device", "isa-debug-exit,iobase=0xf4,iosize=0x04"
]); ]);
} }
Target::Riscv64Virt => { Target::Riscv64Virt => {

View file

@ -15,4 +15,21 @@ release_page := fn(ptr: ^u8, page_count: u8): void {
*msg_ptr = ptr *msg_ptr = ptr
return @eca(void, 3, 2, msg, 12) 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 @@
stn := @use("../../../libraries/stn/src/lib.hb");
.{log, string, memory, buffer} := stn
main := fn(): int { main := fn(): int {
@eca(i32, 1, 1, 1); // shuts down ableOS
memory.outb(0, 244, 0)
return 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 { main := fn(): int {
service_search() //service_search()
return 0 return 0
} }