String Library Update #15
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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}"
|
||||||
|
|
11
sysdata/programs/time_driver/meta.toml
Normal file
11
sysdata/programs/time_driver/meta.toml
Normal 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"
|
64
sysdata/programs/time_driver/src/main.hb
Normal file
64
sysdata/programs/time_driver/src/main.hb
Normal 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;
|
||||||
|
}
|
|
@ -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"
|
Loading…
Reference in a new issue