diff --git a/Cargo.lock b/Cargo.lock index b20adbfc..af66e89e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -34,9 +34,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" +checksum = "74f37166d7d48a0284b99dd824694c26119c700b53bf0d1540cdb147dbdaaf13" [[package]] name = "autocfg" @@ -97,9 +97,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "cc" -version = "1.1.31" +version = "1.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +checksum = "67b9470d453346108f93a59222a9a1a5724db32d0a4727b7ab7ace4b4d822dc9" dependencies = [ "shlex", ] @@ -253,12 +253,12 @@ dependencies = [ [[package]] name = "hbbytecode" version = "0.1.0" -source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#38a00cbaa09434324d209fc5f59480d2b6743fb3" +source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#e8f1d2af8ca7520bbb695dcaf1029a348f29592e" [[package]] name = "hblang" version = "0.1.0" -source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#38a00cbaa09434324d209fc5f59480d2b6743fb3" +source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#e8f1d2af8ca7520bbb695dcaf1029a348f29592e" dependencies = [ "hashbrown 0.15.0", "hbbytecode", @@ -270,7 +270,7 @@ dependencies = [ [[package]] name = "hbvm" version = "0.1.0" -source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#38a00cbaa09434324d209fc5f59480d2b6743fb3" +source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#e8f1d2af8ca7520bbb695dcaf1029a348f29592e" dependencies = [ "hbbytecode", ] @@ -550,9 +550,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.15" +version = "0.23.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fbb44d7acc4e873d613422379f69f237a1b141928c02f6bc6ccfddddc2d7993" +checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e" dependencies = [ "log", "once_cell", @@ -606,18 +606,18 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.213" +version = "1.0.214" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea7893ff5e2466df8d720bb615088341b295f849602c6956047f8f80f0e9bc1" +checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.213" +version = "1.0.214" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5" +checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" dependencies = [ "proc-macro2", "quote", @@ -677,9 +677,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.85" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", diff --git a/sysdata/libraries/horizon_api/src/lib.hb b/sysdata/libraries/horizon_api/src/lib.hb index c2e2f3d4..1db3411e 100644 --- a/sysdata/libraries/horizon_api/src/lib.hb +++ b/sysdata/libraries/horizon_api/src/lib.hb @@ -35,7 +35,7 @@ create_window := fn(channel: int): ^render.Surface { loop if x > 1000 break else x += 1 ret := buffer.recv([u8; 4096], windowing_system_buffer, mem_buf) - if ret == 0 { + if ret == null { log.info("No messages\0") } diff --git a/sysdata/libraries/render/src/image.hb b/sysdata/libraries/render/src/image.hb index a07d862b..249094ad 100644 --- a/sysdata/libraries/render/src/image.hb +++ b/sysdata/libraries/render/src/image.hb @@ -32,11 +32,11 @@ BitmapColorHeader := packed struct { unused: u32, } -surface_from_bmp := fn(bmp: ^u8): Surface { +surface_from_bmp := fn(bmp: ^u8): ?Surface { file_header := @as(^BitmapFileHeader, @bitcast(bmp)) if file_header.img_type != 0x4D42 { log.error("failed to load bmp image: not a bmp image, idiot\0") - return idk + return null } info_header := @as(^BitmapInfoHeader, @bitcast(bmp + @sizeof(BitmapFileHeader))) bmp += file_header.offset @@ -64,11 +64,11 @@ surface_from_bmp := fn(bmp: ^u8): Surface { return .(@bitcast(bmp), info_header.width, info_header.height) } -new_surface_from_bmp := fn(bmp: ^u8): Surface { +new_surface_from_bmp := fn(bmp: ^u8): ?Surface { file_header := @as(^BitmapFileHeader, @bitcast(bmp)) if file_header.img_type != 0x4D42 { log.error("failed to load bmp image: not a bmp image, idiot\0") - return idk + return null } info_header := @as(^BitmapInfoHeader, @bitcast(bmp + @sizeof(BitmapFileHeader))) bmp += file_header.offset diff --git a/sysdata/libraries/render/src/software.hb b/sysdata/libraries/render/src/software.hb index 3fa79deb..588eee2e 100644 --- a/sysdata/libraries/render/src/software.hb +++ b/sysdata/libraries/render/src/software.hb @@ -3,6 +3,9 @@ .{get_glyph, Font} := text; .{Vec2} := math +// safety: don't use before init() or you will get a memory access violation +framebuffer := memory.dangling(^Color) + Surface := struct { buf: ^Color, width: uint, @@ -36,8 +39,6 @@ free_surface := fn(surface: Surface): void { return @inline(memory.free, Color, surface.buf, @intcast(surface.width * surface.height), false) } -framebuffer := @as(^Color, null) - init := fn(doublebuffer: bool): Surface { framebuffer = dt.get(^Color, "framebuffer/fb0/ptr\0") width := dt.get(uint, "framebuffer/fb0/width\0") @@ -80,8 +81,9 @@ put_filled_rect := fn(surface: Surface, pos: Vec2(uint), tr: Vec2(uint), color: rows_to_fill := tr.y loop if rows_to_fill <= 1 break else { - @inline(memory.set, Color, &color, top_start_idx, @bitcast(tr.x)) - @inline(memory.set, Color, &color, bottom_start_idx, @bitcast(tr.x)) + // inline is broked + memory.set(Color, &color, top_start_idx, @bitcast(tr.x)) + memory.set(Color, &color, bottom_start_idx, @bitcast(tr.x)) top_start_idx += surface.width bottom_start_idx -= surface.width @@ -272,10 +274,12 @@ put_text := fn(surface: Surface, font: Font, pos: Vec2(uint), color: Color, str: } glyph_data := @inline(get_glyph, font, @intcast(*current_char)) - if glyph_data == idk { - current_char += 1 - continue - } + // ! cool null check don't disable :dead: + // !! i disabled the cool null check because compiler + // if glyph_data == null { + // current_char += 1 + // continue + // } if cursor.x % surface.width + font.width >= surface.width { cursor.x = pos.x diff --git a/sysdata/libraries/render/src/text.hb b/sysdata/libraries/render/src/text.hb index 46896106..37cabf74 100644 --- a/sysdata/libraries/render/src/text.hb +++ b/sysdata/libraries/render/src/text.hb @@ -28,11 +28,11 @@ Font := struct { char_gap: uint, } -font_from_psf1 := fn(psf: ^u8): Font { +font_from_psf1 := fn(psf: ^u8): ?Font { header := @as(^PSF1Header, @bitcast(psf)) if header.magic != 0x436 { log.error("failed to load psf font: not a psf1 font, idiot\0") - return idk + return null } psf += @sizeof(PSF1Header) @@ -40,30 +40,30 @@ font_from_psf1 := fn(psf: ^u8): Font { return .( psf, 8, - @intcast(header.character_size), + header.character_size, 256, - @intcast(header.character_size), + header.character_size, false, 0, 0, ) } -font_from_psf2 := fn(psf: ^u8): Font { +font_from_psf2 := fn(psf: ^u8): ?Font { header := @as(^PSF2Header, @bitcast(psf)) if header.magic != 0x864AB572 { log.error("failed to load psf font: not a psf2 font, idiot\0") - return idk + return null } psf += header.header_size return .( psf, - @intcast(header.width), - @intcast(header.height), - @intcast(header.num_glyph), - @intcast(header.bytes_per_glyph), + header.width, + header.height, + header.num_glyph, + header.bytes_per_glyph, (header.flags & 1) != 0, 0, 0, diff --git a/sysdata/libraries/stn/src/buffer.hb b/sysdata/libraries/stn/src/buffer.hb index d4aa4e7a..f2fad6b5 100644 --- a/sysdata/libraries/stn/src/buffer.hb +++ b/sysdata/libraries/stn/src/buffer.hb @@ -1,6 +1,6 @@ string := @use("string.hb") -recv := fn($Expr: type, buffer_id: int, memory_map_location: ^u8): ^Expr { +recv := fn($Expr: type, buffer_id: int, memory_map_location: ^u8): ?^Expr { return @eca(4, buffer_id, memory_map_location, @sizeof(Expr)) } diff --git a/sysdata/libraries/stn/src/lib.hb b/sysdata/libraries/stn/src/lib.hb index 6c67d451..8c6fabc9 100644 --- a/sysdata/libraries/stn/src/lib.hb +++ b/sysdata/libraries/stn/src/lib.hb @@ -6,4 +6,14 @@ buffer := @use("buffer.hb") math := @use("math.hb") random := @use("random.hb") file := @use("file_io.hb") -dt := @use("dt.hb") \ No newline at end of file +dt := @use("dt.hb") + +panic := fn(message: ?^u8): never { + log.error("Error: Panic Called, Message:\0") + if message == null { + log.error("None\0") + } else { + log.error(message) + } + die +} \ No newline at end of file diff --git a/sysdata/libraries/stn/src/memory.hb b/sysdata/libraries/stn/src/memory.hb index 540d3d78..f133e63b 100644 --- a/sysdata/libraries/stn/src/memory.hb +++ b/sysdata/libraries/stn/src/memory.hb @@ -2,6 +2,10 @@ PAGE_SIZE := 4096 MAX_ALLOC := 0xFF MAX_FREE := 0xFF +dangling := fn($Expr: type): Expr { + return @bitcast(@sizeof(Expr)) +} + calc_pages := fn($Expr: type, num: uint): uint { return 1 + @sizeof(Expr) * num / PAGE_SIZE } @@ -14,10 +18,10 @@ alloc := fn($Expr: type, num: uint): ^Expr { ptr := request_page(0xFF) remaining := pages - MAX_ALLOC loop if remaining < MAX_ALLOC break else { - _ := request_page(@intcast(MAX_ALLOC)) + _ = request_page(@intcast(MAX_ALLOC)) remaining -= MAX_ALLOC } - _ := request_page(@intcast(remaining)) + _ = request_page(@intcast(remaining)) return @bitcast(ptr) } diff --git a/sysdata/libraries/stn/src/panic.hb b/sysdata/libraries/stn/src/panic.hb deleted file mode 100644 index eddf15a8..00000000 --- a/sysdata/libraries/stn/src/panic.hb +++ /dev/null @@ -1,8 +0,0 @@ -panic := fn(message: ?^u8): void { - if message != null { - log.error(message) - } - // TODO: replace with die keyword when it gets pushed - loop { - } -} \ No newline at end of file diff --git a/sysdata/libraries/stn/src/string.hb b/sysdata/libraries/stn/src/string.hb index 3307199b..5551b5cb 100644 --- a/sysdata/libraries/stn/src/string.hb +++ b/sysdata/libraries/stn/src/string.hb @@ -1,8 +1,7 @@ + length := fn(ptr: ^u8): uint { - len := @as(uint, 0) - // loop if *(ptr + len) == 0 return len else len += 1 - loop if *(ptr + len) == 0 break else len += 1 - return len + len := 0 + loop if *(ptr + len) == 0 return len else len += 1 } display_int := fn(num: int, p: ^u8, radix: uint): ^u8 { @@ -58,7 +57,7 @@ display_int := fn(num: int, p: ^u8, radix: uint): ^u8 { } reverse := fn(s: ^u8): void { - i := @as(uint, 0) + i := 0 j := @inline(length, s) - 1 temp := @as(u8, 0) loop if i >= j break else { diff --git a/sysdata/programs/filesystem_fat32/src/bios_parameter_block.hb b/sysdata/programs/filesystem_fat32/src/bios_parameter_block.hb index 8517c5bd..d6774c1a 100644 --- a/sysdata/programs/filesystem_fat32/src/bios_parameter_block.hb +++ b/sysdata/programs/filesystem_fat32/src/bios_parameter_block.hb @@ -9,8 +9,7 @@ OemIdent := struct { } new_oem_ident := fn(major: int, minor: int): OemIdent { - ver := [u8].(0, 0, 0, 0, 0, 0, 0, 0) - return OemIdent.(ver, ver) + return .(.(0, 0, 0, 0, 0, 0, 0, 0), .(0, 0, 0, 0, 0, 0, 0, 0)) } BiosParameterBlock := struct { @@ -38,9 +37,7 @@ bpb_sanity_check := fn(bpb: BiosParameterBlock): int { } new_bpb := fn(): BiosParameterBlock { - oem := new_oem_ident(0, 0) - - return BiosParameterBlock.(VALID_JUMP_BYTES, oem, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + return .(VALID_JUMP_BYTES, new_oem_ident(0, 0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) } sector_count := fn(bpb: BiosParameterBlock): u32 { diff --git a/sysdata/programs/horizon/src/main.hb b/sysdata/programs/horizon/src/main.hb index f8af80b4..2ab0368c 100644 --- a/sysdata/programs/horizon/src/main.hb +++ b/sysdata/programs/horizon/src/main.hb @@ -36,7 +36,8 @@ main := fn(): int { vel_inner := Vec2(int).(1, 1) pos_inner := Vec2(uint).((window.width - side) / 2, (window.height - side) / 2) str := "Window Title Bar\0" - font := render.text.font_from_psf2(@bitcast(&psf)) + // really we should null check but it is a bit broked + font := @unwrap(render.text.font_from_psf2(@bitcast(&psf))) loop { // Clear the screen @@ -45,11 +46,12 @@ main := fn(): int { // TODO: Read the window buffer here { ret := buffer.recv([u8; 4096], win_buff, mem_buf) - if ret == 0 { - log.info("No messages\0") - } else { - log.info("Handle Messages\0") - } + // for some reason this null check causes the compiler to spin forever + // if ret == null { + // log.info("No messages\0") + // } else { + // log.info("Handle Messages\0") + // } } if pos_inner.x == 0 | pos_inner.x == window.width - side { diff --git a/sysdata/programs/ps2_driver/src/main.hb b/sysdata/programs/ps2_driver/src/main.hb index 7256181b..150d3b06 100644 --- a/sysdata/programs/ps2_driver/src/main.hb +++ b/sysdata/programs/ps2_driver/src/main.hb @@ -7,7 +7,7 @@ send_byte := fn(byte: u8): u8 { main := fn(): int { buf := buffer.create("XKeyboard\0") - _ := send_byte(238) + _ = send_byte(238) log.info("PS/2 Driver Loaded\0") if send_byte(238) == 238 { log.info("PS/2 Keyboard Echoed\0") diff --git a/sysdata/programs/render_example/src/examples/image.hb b/sysdata/programs/render_example/src/examples/image.hb index 25d68404..49dafd06 100644 --- a/sysdata/programs/render_example/src/examples/image.hb +++ b/sysdata/programs/render_example/src/examples/image.hb @@ -8,9 +8,10 @@ bmp_1 := @embed("./assets/able.bmp") bmp_2 := @embed("./assets/mini.bmp") example := fn(): void { + // strictly we should be null checking here but i am lazy images := [render.Surface].( - render.image.surface_from_bmp(@bitcast(&bmp_1)), - render.image.surface_from_bmp(@bitcast(&bmp_2)), + @unwrap(render.image.surface_from_bmp(@bitcast(&bmp_1))), + @unwrap(render.image.surface_from_bmp(@bitcast(&bmp_2))), ) screen := render.init(true) vel := Vec2(int).(1, 1) diff --git a/sysdata/programs/render_example/src/examples/text.hb b/sysdata/programs/render_example/src/examples/text.hb index 11086678..92c66f50 100644 --- a/sysdata/programs/render_example/src/examples/text.hb +++ b/sysdata/programs/render_example/src/examples/text.hb @@ -1,22 +1,37 @@ -.{Vec2, sin, cos} := @use("../../../../libraries/stn/src/lib.hb").math render := @use("../../../../libraries/render/src/lib.hb") /* expected result: - words */ + extended unicode test */ psf := @embed("../../../../consolefonts/tamsyn/10x20r.psf") example := fn(): void { - screen := render.init(true) + screen := render.init(false) font := render.text.font_from_psf2(@bitcast(&psf)) - t := 0 - str := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX\0" - loop { - render.clear(screen, render.black) - render.put_text(screen, font, .(t, t % screen.height), render.red, str) - render.sync(screen) - // t += 1 - } + str := "Extended unicode test: + +ABCDEFGHIJKLMNOPQRSTUVWXYZ +abcdefghijklmnopqrstuvwxyz +0123456789 +!\"#$%&'()*+,-./:;<=>?@[]^_`{|}~ +ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞß +àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ +ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğ +ĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿ +„‟†‡•‣․‥…‧ +₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲₳₴₵₶₷₸₹₺₻₼₽₾₿ +∀∁∂∃∄∅∆∇∈∉∊∋∌∍∎∏∐∑−∓∔∕∖∗∘∙√∛∜∝∞∟ +─│┌┐└┘├┤┬┴┼╋╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿ +▀▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▐░▒▓▔▕▖▗▘▙▚▛▜▝▞▟ +■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿◀◁◂◃◄◅◆◇◈◉◊○ +←↑→↓↔↕↖↗↘↙↚↛↜↝↞↟↠↡↢↣↤↥↦↧↨↩↪↫↬↭↮↯↰↱↲↳↴↵↶↷↸↹↺↻ + 、。〃〄々〆〇〈〉《》「」『』【】〒〓〔〕〖〗〘〙〚〛〜〝〞〟 +✀✁✂✃✄✅✆✇✈✉✊✋✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟ +✠✡✢✣✤✥✦✧✨✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿\0" + + render.clear(screen, render.black) + render.put_text(screen, @unwrap(font), .(0, 0), render.white, str) + render.sync(screen) return } \ No newline at end of file diff --git a/sysdata/programs/serial_driver_test/src/main.hb b/sysdata/programs/serial_driver_test/src/main.hb index d3011c33..19ad6c15 100644 --- a/sysdata/programs/serial_driver_test/src/main.hb +++ b/sysdata/programs/serial_driver_test/src/main.hb @@ -5,7 +5,9 @@ log_info := fn(): void { if a == 0 { } else { msg := "XABC\0" - msg_length := @inline(string.length, msg) + // inline is broked + // msg_length := @inline(string.length, msg) + msg_length := 5 @as(void, @eca(3, a, msg, msg_length)) } diff --git a/sysdata/system_config.toml b/sysdata/system_config.toml index 09fe797d..ada45086 100644 --- a/sysdata/system_config.toml +++ b/sysdata/system_config.toml @@ -37,8 +37,8 @@ resolution = "1024x768x24" # [boot.limine.ableos.modules.serial_driver_test] # path = "boot:///serial_driver_test.hbf" -# [boot.limine.ableos.modules.horizon] -# path = "boot:///horizon.hbf" +[boot.limine.ableos.modules.horizon] +path = "boot:///horizon.hbf" # [boot.limine.ableos.modules.horizon_testing_program] # path = "boot:///horizon_testing_program.hbf" @@ -58,6 +58,5 @@ resolution = "1024x768x24" # [boot.limine.ableos.modules.pumpkin_print] # path = "boot:///pumpkin_print.hbf" - -[boot.limine.ableos.modules.mouse_driver] -path = "boot:///mouse_driver.hbf" +# [boot.limine.ableos.modules.mouse_driver] +# path = "boot:///mouse_driver.hbf"