Update string lib for num format - Trees

This commit is contained in:
Sam Buckley 2024-07-16 22:42:49 +01:00
parent 1adc381399
commit f59776e792
6 changed files with 129 additions and 5 deletions

View file

@ -177,7 +177,9 @@ pub fn handler(vm: &mut Vm) {
unsafe fn x86_out(address: u16, value: u32) { unsafe fn x86_out(address: u16, value: u32) {
x86_64::instructions::port::Port::new(address).write(value); x86_64::instructions::port::Port::new(address).write(value);
} }
vm.registers[3] = hbvm::value::Value(unsafe { x86_in(r2 as u16) } as u64); let x = hbvm::value::Value(unsafe { x86_in(r2 as u16) } as u64);
info!("Read {:?} from Port {:?}", x, r2);
vm.registers[3] = x
} }
} }
// 5 // 5

View file

@ -5,4 +5,48 @@ length := fn(ptr: ^u8): int {
ptr += 1; ptr += 1;
} }
return len; return len;
} }
display_int := fn(num: int): ^u8 {
p := page;
i := 0;
if num == 0 {
set(p, 48);
return p;
}
loop {
if num == 0 break;
set(p + i, num % 10 + 48);
num /= 10;
i += 1;
}
reverse(p);
//null terminate
set(p + i, 0);
return p;
}
reverse := fn(s: ^u8): void {
//reverse a string, don't remove digits
len := 0;
loop {
if *(s + len) == 0 break;
len += 1;
}
i := 0;
j := len - 1;
loop {
if i >= j break;
temp := *(s + i);
*(s + i) = *(s + j);
*(s + j) = temp;
i += 1;
j -= 1;
}
return;
}
set := fn(change: ^int, new: int): void {
*(change) = new;
return;
}

View file

@ -37,4 +37,4 @@ TERM_BACKDROP=008080
MODULE_CMDLINE="height=10 width=10 arch=${ARCH}" MODULE_CMDLINE="height=10 width=10 arch=${ARCH}"
MODULE_PATH=boot:///serial_driver.hbf MODULE_PATH=boot:///serial_driver.hbf
MODULE_CMDLINE="arch=${ARCH}" MODULE_CMDLINE="arch=${ARCH}"

View file

@ -0,0 +1,11 @@
[package]
name = "time_driver"
authors = ["SamBuckley"]
[dependants.libraries]
[dependants.binaries]
hblang.version = "1.0.0"
[build]
command = "hblang src/main.hb"

View file

@ -0,0 +1,64 @@
stn := @use("../../../libraries/stn/src/lib.hb");
log := stn.log;
mem := stn.memory;
page := 0
main := fn(): void {
page += mem.request_page(1);
port_str := "\0\{46}\0";
a := @eca(u8, 3, 3, port_str, 2);
log.debug(&a);
n := 5000000;
loop {
if n == 0 break;
n -= 1;
stack_reclamation_edge_case := 0;
}
td := display_int(100);
log.debug(td);
return;
}
display_int := fn(num: int): ^u8 {
p := page;
i := 0;
if num == 0 {
set(p, 48);
return p;
}
loop {
if num == 0 break;
set(p + i, num % 10 + 48);
num /= 10;
i += 1;
}
reverse(p);
//null terminate
set(p + i, 0);
return p;
}
reverse := fn(s: ^u8): void {
//reverse a string, don't remove digits
len := 0;
loop {
if *(s + len) == 0 break;
len += 1;
}
i := 0;
j := len - 1;
loop {
if i >= j break;
temp := *(s + i);
*(s + i) = *(s + j);
*(s + j) = temp;
i += 1;
j -= 1;
}
return;
}
set := fn(change: ^int, new: int): void {
*(change) = new;
return;
}

View file

@ -24,5 +24,8 @@ path = "boot:///tests.hbf"
# [boot.limine.ableos.modules.diskio_driver] # [boot.limine.ableos.modules.diskio_driver]
# path = "boot:///diskio_driver.hbf" # path = "boot:///diskio_driver.hbf"
[boot.limine.ableos.modules.fb_driver] # [boot.limine.ableos.modules.fb_driver]
path = "boot:///fb_driver.hbf" # path = "boot:///fb_driver.hbf"
[boot.limine.ableos.modules.time_driver]
path = "boot:///time_driver.hbf"