diff --git a/sysdata/libraries/stn/src/alloc/alloc_return.hb b/sysdata/libraries/stn/src/alloc/alloc_return.hb index e32bd1aac..bdc61f518 100644 --- a/sysdata/libraries/stn/src/alloc/alloc_return.hb +++ b/sysdata/libraries/stn/src/alloc/alloc_return.hb @@ -1,4 +1,4 @@ AllocReturn := struct { - byte_count: uint, - ptr: ?^u8, -} + byte_count: uint, + ptr: ?^u8, +} \ No newline at end of file diff --git a/sysdata/libraries/stn/src/alloc/block_alloc.hb b/sysdata/libraries/stn/src/alloc/block_alloc.hb index 34aba7a02..7cd29c6b6 100644 --- a/sysdata/libraries/stn/src/alloc/block_alloc.hb +++ b/sysdata/libraries/stn/src/alloc/block_alloc.hb @@ -4,70 +4,72 @@ alloc_return := @use("alloc_return.hb") this will very quickly lead to exhaustion of free blocks. */ BlockAlloc := struct { - state := uint, - ptr := ^u8, + state: uint, + ptr: ?^u8, - $init := fn(): Self{ - // request a kernel page - // ptr := memory.alloc(1) - return .(0, null) - } - - - // $alloc := fn(self: Self, alloc_type: Type, count: uint): alloc_return.AllocReturn { - // offset := 0 - // a := 0 - // loop { - // a = self.state << offset; - // // check if the `offset` bit is 1, if it is move to the next offset - // if a == 1 { - // offset += 1 - // } else { - // // self it to 1 and return the ptr to the allocation - // self.state |= a - // return (ptr + (offset * 64)) - // } - // // there are only 64 blocks - // if offset >= 64 { - // break; - // } - // } - // return null - // } - - // $dealloc := fn(&self, ptr: ^u8, alloc_type: Type, count: uint): void { - // size := size_of(alloc_type)*count - // // get the size alligned to the nearest block - // rounded_size := nearest_block_size_rounded_up(size) - - - // state_bit_start := { - // // Do math here to figure out what starting ptr corresponds to what bit - // 3 - // } - - // offset := 0 - - // loop { - // if rounded_size > 0 { - // // set state_bit_start+offset to 0 - - - // // at the end move to the next one - // offset += 1 - // } else { - // break; - // } - - // rounded_size -= 64 - // } - - // return void - // } - - // $deinit := fn(&self): void { - // self.state := 0 - - - // } + $init := fn(): Self { + return .(0, null) + } } + +// $alloc := fn(self: Self, alloc_type: Type, count: uint): alloc_return.AllocReturn { +// offset := 0 +// a := 0 +// loop { +// a = self.state << offset; +// // check if the `offset` bit is 1, if it is move to the next offset +// if a == 1 { +// offset += 1 +// } else { +// // self it to 1 and return the ptr to the allocation +// self.state |= a +// return (ptr + (offset * 64)) +// } +// // there are only 64 blocks +// if offset >= 64 { +// break; +// } +// } +// return null +// } + + + +// request a kernel page +// ptr := memory.alloc(1) + + + +// $dealloc := fn(&self, ptr: ^u8, alloc_type: Type, count: uint): void { +// size := size_of(alloc_type)*count +// // get the size alligned to the nearest block +// rounded_size := nearest_block_size_rounded_up(size) + +// state_bit_start := { +// // Do math here to figure out what starting ptr corresponds to what bit +// 3 +// } + +// offset := 0 + +// loop { +// if rounded_size > 0 { +// // set state_bit_start+offset to 0 + +// // at the end move to the next one +// offset += 1 +// } else { +// break; +// } + +// rounded_size -= 64 +// } + +// return void +// } + +// $deinit := fn(&self): void { +// self.state := 0 + +// } +// } \ No newline at end of file diff --git a/sysdata/libraries/stn/src/alloc/fake_alloc.hb b/sysdata/libraries/stn/src/alloc/fake_alloc.hb index 5b2e74c65..a7ccd76fc 100644 --- a/sysdata/libraries/stn/src/alloc/fake_alloc.hb +++ b/sysdata/libraries/stn/src/alloc/fake_alloc.hb @@ -6,15 +6,15 @@ FakeAlloc := struct { return .() } - $alloc := fn(&self, alloc_type: Type, count: uint): alloc_return.AllocReturn { + $alloc := fn(self: Self, alloc_type: type, count: uint): alloc_return.AllocReturn { return .(0, null) } - $dealloc := fn(&self, ptr: ^u8, alloc_type: Type, count: uint) : void{ + $dealloc := fn(self: Self, ptr: ^u8, alloc_type: Type, count: uint) : void{ return void } // Nothing to clean up here - $deinit := fn(&self): void { + $deinit := fn(self: Self): void { return void } } diff --git a/sysdata/libraries/stn/src/alloc/lib.hb b/sysdata/libraries/stn/src/alloc/lib.hb index a05698f10..f80a36190 100644 --- a/sysdata/libraries/stn/src/alloc/lib.hb +++ b/sysdata/libraries/stn/src/alloc/lib.hb @@ -1,2 +1,2 @@ -// .{FakeAlloc} := @use("fake_alloc.hb") -.{BlockAlloc} := @use("block_alloc.hb") +.{BlockAlloc} := @use("block_alloc.hb"); +.{FakeAlloc} := @use("fake_alloc.hb") \ No newline at end of file diff --git a/sysdata/libraries/stn/src/lib.hb b/sysdata/libraries/stn/src/lib.hb index 538e77862..d90217b66 100644 --- a/sysdata/libraries/stn/src/lib.hb +++ b/sysdata/libraries/stn/src/lib.hb @@ -1,5 +1,5 @@ acs := @use("acs.hb") -alloc := @use("alloc/lib.hb") +allocators := @use("alloc/lib.hb") string := @use("string.hb") log := @use("log.hb") memory := @use("memory.hb") @@ -10,7 +10,6 @@ file := @use("file_io.hb") dt := @use("dt.hb") process := @use("process.hb") - panic := fn(message: ?^u8): never { log.error("Error: Panic Called, Message:\0") if message == null { diff --git a/sysdata/programs/alloc_test/README.md b/sysdata/programs/alloc_test/README.md new file mode 100644 index 000000000..560819442 --- /dev/null +++ b/sysdata/programs/alloc_test/README.md @@ -0,0 +1 @@ +# alloc_test \ No newline at end of file diff --git a/sysdata/programs/alloc_test/meta.toml b/sysdata/programs/alloc_test/meta.toml new file mode 100644 index 000000000..aa77119fd --- /dev/null +++ b/sysdata/programs/alloc_test/meta.toml @@ -0,0 +1,11 @@ +[package] +name = "alloc_test" +authors = [""] + +[dependants.libraries] + +[dependants.binaries] +hblang.version = "1.0.0" + +[build] +command = "hblang src/main.hb" diff --git a/sysdata/programs/alloc_test/src/main.hb b/sysdata/programs/alloc_test/src/main.hb new file mode 100644 index 000000000..7b4a7dcd2 --- /dev/null +++ b/sysdata/programs/alloc_test/src/main.hb @@ -0,0 +1,25 @@ +stn := @use("../../../libraries/stn/src/lib.hb"); +.{allocators, panic} := stn + +AStruct := struct { + a_field: u8, +} + +main := fn(): void { + alloc := allocators.FakeAlloc.init() + astruct := alloc.alloc(AStruct, 2) + // if astruct.ptr != null{ + // panic.panic("FakeAlloc actually allocated.") + // } + // alloc.dealloc(&astruct.ptr, AStruct, 2) + alloc.deinit() + + // balloc := allocators.BlockAlloc.init() + // bstruct_ptr := balloc.alloc(AStruct, 2) + // if bstruct_ptr == null { + // panic("BlockAlloc actually didn't allocate.") + // } + // balloc.dealloc(bstruct_ptr, AStruct, 2) + // balloc.deinit() + return +} \ No newline at end of file diff --git a/sysdata/system_config.toml b/sysdata/system_config.toml index a7b849e0d..182c3dedc 100644 --- a/sysdata/system_config.toml +++ b/sysdata/system_config.toml @@ -22,8 +22,8 @@ resolution = "1024x768x24" [boot.limine.ableos.modules] -[boot.limine.ableos.modules.render_example] -path = "boot:///render_example.hbf" +# [boot.limine.ableos.modules.render_example] +# path = "boot:///render_example.hbf" # [boot.limine.ableos.modules.horizon] # path = "boot:///horizon.hbf" @@ -45,3 +45,6 @@ path = "boot:///render_example.hbf" # [boot.limine.ableos.modules.processes] # path = "boot:///processes.hbf" + +# [boot.limine.ableos.modules.alloc_test] +# path = "boot:///alloc_test.hbf" \ No newline at end of file