From 8c6769009941b2ca0684f90403eed38d85b5af97 Mon Sep 17 00:00:00 2001 From: husky Date: Fri, 12 Sep 2025 18:25:48 -0700 Subject: [PATCH 1/3] font --- Cargo.toml | 2 +- build.rs | 1 + src/arch/virt/mod.rs | 4 +--- src/arch/virt/trap.rs | 2 +- src/dev/framebuffer/charset1.data | Bin 0 -> 1932 bytes src/dev/framebuffer/charset1.png | Bin 0 -> 1678 bytes src/dev/framebuffer/mod.rs | 14 +++++++------- src/dev/framebuffer/vapfont.data | Bin 3584 -> 0 bytes src/dev/framebuffer/vapfont.png | Bin 2316 -> 0 bytes turntable/Cargo.toml | 1 + 10 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 src/dev/framebuffer/charset1.data create mode 100644 src/dev/framebuffer/charset1.png delete mode 100644 src/dev/framebuffer/vapfont.data delete mode 100644 src/dev/framebuffer/vapfont.png diff --git a/Cargo.toml b/Cargo.toml index 5987ecc..6eb2953 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ panic = "abort" opt-level = "z" debug-assertions = false overflow-checks = false -strip = true +strip = false lto = true codegen-units = 1 diff --git a/build.rs b/build.rs index a48f0e5..83302a6 100644 --- a/build.rs +++ b/build.rs @@ -1,6 +1,7 @@ fn main() { let arch = std::env::var("LBOS_ARCH").unwrap_or("virt".to_string()); println!("cargo:rerun-if-env-changed=LBOS_ARCH"); + println!("cargo:rerun-if-env-changed=LBOS_FONT"); println!("cargo:rustc-cfg=feature=\"arch_{}\"", arch); println!("cargo:rerun-if-changed=src/arch/{}/asm", arch); diff --git a/src/arch/virt/mod.rs b/src/arch/virt/mod.rs index 2c694d1..30f6422 100644 --- a/src/arch/virt/mod.rs +++ b/src/arch/virt/mod.rs @@ -17,7 +17,7 @@ global_asm!(include_str!("asm/trap.s")); extern "C" fn eh_personality() {} #[panic_handler] -//#[cfg(feature = "debug_messages")] +#[cfg(feature = "debug_messages")] fn panic(info: &core::panic::PanicInfo) -> ! { use core::fmt::Write; let mut uart = UART::new(0x1000_0000); @@ -38,7 +38,6 @@ fn panic(info: &core::panic::PanicInfo) -> ! { } } } -/* #[panic_handler] #[cfg(not(feature = "debug_messages"))] fn panic(_info: &core::panic::PanicInfo) -> ! { @@ -52,7 +51,6 @@ fn panic(_info: &core::panic::PanicInfo) -> ! { } } } -*/ pub fn virt_rough_panic(errcode: [char; 3]) -> ! { let uart = UART::new(0x1000_0000); for c in b"PANIC".iter() { diff --git a/src/arch/virt/trap.rs b/src/arch/virt/trap.rs index 2a0483e..b5fdd3a 100644 --- a/src/arch/virt/trap.rs +++ b/src/arch/virt/trap.rs @@ -1,7 +1,7 @@ use crate::arch::virt::{plic, serial_port}; use crate::rough_panic; use crate::syscalls::usize2sc; -use crate::trafficcontrol::{TC, context_switch, handle_syscall, MAX_TASKS}; +use crate::trafficcontrol::{TC, context_switch, handle_syscall, MAX_TASKS, TrafficControl, Task}; use core::arch::asm; use crate::spinlock::Spinlock; diff --git a/src/dev/framebuffer/charset1.data b/src/dev/framebuffer/charset1.data new file mode 100644 index 0000000000000000000000000000000000000000..d90ed7653161f8a000abb5fd215af5b514136018 GIT binary patch literal 1932 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 literal 0 HcmV?d00001 diff --git a/src/dev/framebuffer/mod.rs b/src/dev/framebuffer/mod.rs index 1717f24..28d462f 100644 --- a/src/dev/framebuffer/mod.rs +++ b/src/dev/framebuffer/mod.rs @@ -5,9 +5,10 @@ use core::sync::atomic::Ordering; pub mod console; -pub const VAPFONT: &[u8] = include_bytes!("./vapfont.data"); -pub const VAPFONT_W: usize = 256; -pub const VAPFONT_H: usize = 112; +pub const VAPFONT: &[u8] = include_bytes!(env!("LBOS_FONT")); +pub const VAPFONT_W: usize = 184; +pub const VAPFONT_H: usize = 84; +pub const CHAR_SIZE: usize = 12; pub struct FBColor { pub red: u8, @@ -43,15 +44,14 @@ pub fn fb_write_char_array(tc: &mut TrafficControl, mut x: usize, y: usize, char return; } let fbstride = FRAMEBUFFER_BPP.load(Ordering::Relaxed) * FRAMEBUFFER_WIDTH; - const CHAR_SIZE: usize = 16; for c in chars { let c = *c; if c == ' ' { x += CHAR_SIZE; } else if c as u8 > 32 { - let c = c as u8 - 32; - let cx = (c % 16) as usize * CHAR_SIZE; - let cy = (c / 16) as usize * CHAR_SIZE; + let c = c as u8 - b'!'; + let cx = (c % 15) as usize * CHAR_SIZE; + let cy = (c / 15) as usize * CHAR_SIZE; for row in 0..CHAR_SIZE { for col in 0..CHAR_SIZE { let coff = (VAPFONT_W * (cy + row)) + (cx + col); diff --git a/src/dev/framebuffer/vapfont.data b/src/dev/framebuffer/vapfont.data deleted file mode 100644 index 6d2b29209919ff07143a48576f796f57fc65b4bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmcJRzmMER6vv;}j%O~JT|37i%_S>)xNO3O0!DN_5s3&{S&63piG$pAq!EXEmtT7-#1?G-dzv@BF3`UJ0HIv^WK|h6TN99KDC)i zNSDHsB{#Srka#i6j0h8>9L>llXL%q>eBNYcXdW_eKz*`#CUWWPNTF3OQih}Pck2bi}IOCJ$bOm6JNAMe6nuBDP7_c630F7<>Aem z5A@c&<0+o)M&!7aZfFJ*-FAFv6H=Jf#GGv$Ew-BMq5g(=Ca!M;GKqZPn2P}Z08hgn zOR%q#cx4X%NKPc?`}nd4I&yxRd8q~FUe6Ct{`bLgOIxv^P%OowSfn9sH`y-!X${Xr zNRb6ZlrJWs$USMf;%b&WW7NqfbPe|5i>{Xv@`CgfX~BrQ1cW*6H3eXu!$=<2pTNI_ z61r^2XHuTw$|61k%z7)255GP1~GAE819P!~=TX zaujXi>o%R&p
bbdG$K3P_?il)caR0Lfn9)8VK!Cbnck)Fj!0QFuFQRt{{4t-ZoFEFZbtwh~-t;5IigzNmNRqXz#pxRs_@P7jfv!1<{tZ8<+_ zsF15qj>pK)Tc)4tRs@_cjuzFlntuOteSA2pm#h~%1ce&r3&jw@H%jL_elbQ_LUm$}hTQ8|tpR5mzatmN^(>a^5A&# zJiqoxH8HClw<*?sR{rwAD(l!uxs%K#x=ZNoi$Bo03}#Kwl}7vn=b&CzMC0o4oq$~# zm{-Tb_xa)Yz3r%>pzDR`Isy5J3KhpE4uRj;@EUX*oMYlKroQvAOfR1rmgo3xsiM_*KSsmE_Ze#>zhj`}hv<|TX8^piiBPH#) z`zC&bbN3$d*1)9}oH~xavF7^6j;E&MH7vtsJN;;@%n$=#TtU>N)!_=GS@sbAkR=gfa48QPrm5v)`))umArTDf}1b6k}JN83OC? zE1;V`&vWp;g8mslZ*3!gJrr&j3SS3h4%_d3!JBDTv>ne&&b|&+qg_g4qn$lLHjG3S z!Fnj3bzFg9|3;4Q2ScIbyNea48o7g{-~9^T4~{~oUp76D{UvhVgE-ggLrxrOHuUo7 zFP=L9Q8a12vR+O|A6&@XIF5qKzjDPLx`8kuE ze|4Ksfv>*t$(_fgETUwMXlw?)J7p>NPHsD`>p*n(rSZlyM?KRBw_UybLhA{7CJt%#?j0?~a~H;a>9nJ;k}*Fdt?zH&-`;!5T+Xug^rEFWuCDo2 y`TlPlpPToz=H1+l4c~jx#h1BgSC~fa(JQu3^!SG^KR1w{o_4>yzVkDG_3uxDddxZi diff --git a/src/dev/framebuffer/vapfont.png b/src/dev/framebuffer/vapfont.png deleted file mode 100644 index 892116de41136dbed0118bbe8b354fbaa4c831ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2316 zcmV+n3G?=eP)?jN*9lrmS zb3V!oS`Y%`?w)w%h*>DxfP|DS^dQ8U*Z?_ZuLA>f8G$y#;ez!V@GFB zEQJMU1BLkf_qvU`>Cz}~LqENKg^&4e$>(wW)9egjOFE)HefmoQLvdLrA}I-=TtHq_ zq9TPQT2i;qkRCB0#Bd7*ASVIg@}J8ERO^bN<@acVWD0&41I*kIEHONlf3$qKaOH0> zz@@pGpIuEpojn8t4@^dc*^i}$y?fe-1xBrq^i5#{;_PpWLGbQwdq=ZAI>M{q!RC^uf%CzY`37 zuYdi*C35HnD~Mbz+S~U7berl8w8vW>3g5%;UbyFII1XzpqO+`_pfrMP_)Tbyx1N5; z>C^bK619%T?b%tN6fe*PP0fHBBfYjrL9vU`>@T_3{Z^xPr5Q+vvRR3{yTs)muXet3 zZU$=pZ393tGCaw!JqlHb+dXYWGr6#*I)KNB$ekjj3d=Ut`{2`fpYQ~}b|%FWkf|FU z8HX@Qr;}n5#G$N!NMW(qlooYL$eI-9buGiZMuujaVln_Ah;5)E9Nl*47rkM?#3bog zT5uuIHb2Ns&{KQG0tjR(V;YePh8i7iNfM$5_<=Z*Sx?^aG71LF&;$os1ndih3`(do z>w%C8gRkrWu)sJE1e*lx)yU}4fA;eBXPeA-0Jb@R!~#O706bUNdUod9Ap8UZ)O|S5 zJ75wKZ2W*REePBcG|Z3~r4ihqwC$pIADw(x+ssa+bTZ+<_xfHJf~UfJDblDty-;Il zRkwbhmqRL4tgR$xn!WBHM!cz>*ZtQ7(#h-DhKf$9!dDZ#2H~x88|?UWB5D&px1K(S z*C|QrSmdw*G?|*ixo>-Z1s*W7gVeHMV$jujDCcg{wswU_!c}^S`pl#;_Wq*)AnU7a zC7qq#$v=~Mz^X0{B4>(Y0x?OHH&`HGAb&)LnLO3oIUnYwhQYt8*7dCof^()%J zkO_XmV8~;Rx*Y{WW<0PNZ1EK6%DOoHe-i@V%iw=2qt&`k_~E{ezh(Ot;9A!znKt3O z%_sCkm{EG8X=dog%fWrt!Mzv%`|Ue>K>zvH>v97I13PK%w-Iu4u(|PlL*G}QyVrq= zF)~gL7-9ITZhz`5U-Jaf_4Oo0S2j!AQG^48S@YNgMiuKT4a5RHPow_O zvDlSMQ2dsoz0bfZ3K!2uMXTUX3BVN#bWug}2V=pLTwxh;^_~E@4Dhq|k7Qm(+9*UFvga#K*Mq?B zW3q)QM`saZ`Z^$|irU=>J1?Rlwm{GuO>}a!;e3y@A2WlkkrX0vee7)H0~Q2B-|KsI z^8o_|Ni$D{H7Vm?-LT9~Y^TZNETp8KVg%C*Hb~7IsO_@)eCVTK`aTkls4OF0=tk{7 z=ZO7HRNjAWbiZUZXJ219%8Pd1^yC526aAKD>&G7#l`Dzj4+LnGq{IF`sagU)sYlukYXc6KdC#C(0#^#t8~%J=%$ z@&W(Di}60*fgLf6>IBK(rQa?qf0hA%O>*;sz5VMLu&olw|Le7TcK%~H#Wp_%y8_L& zM;Y&`Jx+JCDiCxwL9uxT%WU$c?LDhaPj(L!!#zvI?6FdNlv+(TIyCK4!V^VGCy7W+ z!JrCYu(loJh{iC!dw8NKKS^J|hpo)eHMW69(RVae$%OiN+F=NDLVr&jttFfRK>(|9 z4V9WKs1wL>dIu(aYUUUHY&F%2DW?crfDYe~$gsJ&USw{vXexC*J4B5VwC!-RWQks&oFvD^|dVb9H#kNw6+}I^fJyeX$iQc=Ym0 zDpGRMw8vQ(aqz4a)|gyTrrV=-kC$aY%df+yb2iML`BVrkUs9ln#=51Sb?6cl_gpgPeAk^PSjaLb?q3$i$wQ@%+K!dL;!urWik$sxG0)~a}P-V;1s zJDd*5Ra Date: Fri, 12 Sep 2025 18:30:05 -0700 Subject: [PATCH 2/3] update sizes for new font size --- src/dev/framebuffer/console.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/dev/framebuffer/console.rs b/src/dev/framebuffer/console.rs index b7903aa..b88ad8e 100644 --- a/src/dev/framebuffer/console.rs +++ b/src/dev/framebuffer/console.rs @@ -1,9 +1,9 @@ -use crate::dev::framebuffer::{fb_clear_area, fb_clearscreen, fb_write_char_array}; +use crate::dev::framebuffer::{fb_clear_area, fb_clearscreen, fb_write_char_array, CHAR_SIZE}; use crate::spinlock::Spinlock; use crate::trafficcontrol::TrafficControl; pub struct FramebufferConsole { - pub buffer: [[char; 20]; 15], // our font is 16x16, 320x240 is the standard res, so 20x15 + pub buffer: [[char; 26]; 20], // our font is 16x16, 320x240 is the standard res, so 20x15 pub cursor: (usize, usize), // (x, y) pub need_screen_clear: bool, pub need_line_clear: bool, @@ -14,7 +14,7 @@ pub static FBCONSOLE: Spinlock = Spinlock::new(FramebufferCo impl FramebufferConsole { pub const fn empty() -> Self { Self { - buffer: [[' '; 20]; 15], + buffer: [[' '; 26]; 20], cursor: (0, 0), need_screen_clear: true, need_line_clear: false, @@ -27,14 +27,14 @@ impl FramebufferConsole { let copy_from = self.buffer[line_num + 1]; self.buffer[line_num] = copy_from; } - self.buffer[self.buffer.len() - 1] = [' '; 20]; + self.buffer[self.buffer.len() - 1] = [' '; 26]; self.need_screen_clear = true; } // DOES send a framebuffer update! pub fn clear_terminal(&mut self, tc: &mut TrafficControl) { self.need_screen_clear = true; - self.buffer = [[' '; 20]; 15]; + self.buffer = [[' '; 26]; 20]; self.cursor = (0, 0); self.render(tc, true); } @@ -90,12 +90,12 @@ impl FramebufferConsole { self.need_screen_clear = false; } if self.need_line_clear { - fb_clear_area(tc, 0, self.cursor.1 * 16, 320, 16, refresh_whole_screen); + fb_clear_area(tc, 0, self.cursor.1 * CHAR_SIZE, 320, CHAR_SIZE, refresh_whole_screen); self.need_line_clear = false; } for (y, line) in self.buffer.iter().enumerate() { - fb_write_char_array(tc, 0, y * 16, line); + fb_write_char_array(tc, 0, y * CHAR_SIZE, line); } } } From 760d34c3571ea8472a956234d42f27c3b3c1728c Mon Sep 17 00:00:00 2001 From: husky Date: Fri, 12 Sep 2025 19:42:28 -0700 Subject: [PATCH 3/3] fixes for special characters --- liblbos/src/characters.rs | 11 +++++++++++ liblbos/src/lib.rs | 1 + src/dev/framebuffer/console.rs | 17 +++++++++-------- src/dev/framebuffer/mod.rs | 4 ++-- src/trafficcontrol.rs | 4 +--- turntable/Cargo.toml | 1 - turntable/src/main.rs | 10 +++++++--- 7 files changed, 31 insertions(+), 17 deletions(-) create mode 100644 liblbos/src/characters.rs diff --git a/liblbos/src/characters.rs b/liblbos/src/characters.rs new file mode 100644 index 0000000..8b2097c --- /dev/null +++ b/liblbos/src/characters.rs @@ -0,0 +1,11 @@ +pub const C_LIFEBLOOD_CAT: char = (b'~' + 1) as char; +pub const C_SMILE: char = (b'~' + 2) as char; +pub const C_FEARFUL: char = (b'~' + 3) as char; +pub const C_SUNGLASSES: char = (b'~' + 4) as char; +pub const C_COLONTHREE: char = (b'~' + 5) as char; +pub const C_FOLDER: char = (b'~' + 6) as char; +pub const C_FILE: char = (b'~' + 7) as char; +pub const C_BLOOD: char = (b'~' + 8) as char; +pub const C_WINK: char = (b'~' + 9) as char; +pub const C_CONFUSED: char = (b'~' + 10) as char; +pub const C_COLOND: char = (b'~' + 11) as char; \ No newline at end of file diff --git a/liblbos/src/lib.rs b/liblbos/src/lib.rs index 13c5a0d..8f1b05c 100644 --- a/liblbos/src/lib.rs +++ b/liblbos/src/lib.rs @@ -3,6 +3,7 @@ pub mod fs; pub mod ktask; pub mod syscalls; +pub mod characters; mod arch; #[repr(C)] diff --git a/src/dev/framebuffer/console.rs b/src/dev/framebuffer/console.rs index b88ad8e..4cca85f 100644 --- a/src/dev/framebuffer/console.rs +++ b/src/dev/framebuffer/console.rs @@ -3,7 +3,7 @@ use crate::spinlock::Spinlock; use crate::trafficcontrol::TrafficControl; pub struct FramebufferConsole { - pub buffer: [[char; 26]; 20], // our font is 16x16, 320x240 is the standard res, so 20x15 + pub buffer: [[u8; 26]; 20], // our font is 16x16, 320x240 is the standard res, so 20x15 pub cursor: (usize, usize), // (x, y) pub need_screen_clear: bool, pub need_line_clear: bool, @@ -14,7 +14,7 @@ pub static FBCONSOLE: Spinlock = Spinlock::new(FramebufferCo impl FramebufferConsole { pub const fn empty() -> Self { Self { - buffer: [[' '; 26]; 20], + buffer: [[b' '; 26]; 20], cursor: (0, 0), need_screen_clear: true, need_line_clear: false, @@ -27,23 +27,24 @@ impl FramebufferConsole { let copy_from = self.buffer[line_num + 1]; self.buffer[line_num] = copy_from; } - self.buffer[self.buffer.len() - 1] = [' '; 26]; + self.buffer[self.buffer.len() - 1] = [b' '; 26]; self.need_screen_clear = true; } // DOES send a framebuffer update! pub fn clear_terminal(&mut self, tc: &mut TrafficControl) { self.need_screen_clear = true; - self.buffer = [[' '; 26]; 20]; + self.buffer = [[b' '; 26]; 20]; self.cursor = (0, 0); self.render(tc, true); } // DOES send a framebuffer update! - pub fn printstr(&mut self, tc: &mut TrafficControl, str: &str) { - for c in str.chars() { + pub fn printstr(&mut self, tc: &mut TrafficControl, str: &[u8]) { + for c in str { + let c = *c; let mut was_special_char = false; - if c == '\n' || c == '\r' { + if c == b'\n' || c == b'\r' { was_special_char = true; self.cursor.0 = 0; self.cursor.1 += 1; @@ -53,7 +54,7 @@ impl FramebufferConsole { self.cursor.1 = self.buffer.len() - 1; self.scroll_terminal(); } - if c == '\x08' { + if c == b'\x08' { was_special_char = true; // we don't clear the character, that's up to the terminal self.need_line_clear = true; diff --git a/src/dev/framebuffer/mod.rs b/src/dev/framebuffer/mod.rs index 28d462f..8600cab 100644 --- a/src/dev/framebuffer/mod.rs +++ b/src/dev/framebuffer/mod.rs @@ -35,7 +35,7 @@ impl FBColor { } } -pub fn fb_write_char_array(tc: &mut TrafficControl, mut x: usize, y: usize, chars: &[char]) { +pub fn fb_write_char_array(tc: &mut TrafficControl, mut x: usize, y: usize, chars: &[u8]) { let ogx = x; let ogy = y; const BYTES: [u8; 3] = FB_FG_COLOR.to_bytes(); @@ -46,7 +46,7 @@ pub fn fb_write_char_array(tc: &mut TrafficControl, mut x: usize, y: usize, char let fbstride = FRAMEBUFFER_BPP.load(Ordering::Relaxed) * FRAMEBUFFER_WIDTH; for c in chars { let c = *c; - if c == ' ' { + if c == b' ' { x += CHAR_SIZE; } else if c as u8 > 32 { let c = c as u8 - b'!'; diff --git a/src/trafficcontrol.rs b/src/trafficcontrol.rs index 4f63715..05cd4fe 100644 --- a/src/trafficcontrol.rs +++ b/src/trafficcontrol.rs @@ -186,9 +186,7 @@ pub fn handle_syscall( if tc.use_fb_console { let mut fbcons = crate::dev::framebuffer::console::FBCONSOLE.lock(); fbcons.printstr(&mut tc, unsafe { - core::str::from_utf8_unchecked(unsafe { - core::slice::from_raw_parts(addr as *const u8, count) - }) + core::slice::from_raw_parts(addr as *const u8, count) }); } 0 diff --git a/turntable/Cargo.toml b/turntable/Cargo.toml index b7f25fc..559c755 100644 --- a/turntable/Cargo.toml +++ b/turntable/Cargo.toml @@ -17,7 +17,6 @@ panic = "abort" opt-level = "z" debug-assertions = false overflow-checks = false -strip = true lto = true codegen-units = 1 diff --git a/turntable/src/main.rs b/turntable/src/main.rs index 1d7277c..af1f3e6 100644 --- a/turntable/src/main.rs +++ b/turntable/src/main.rs @@ -2,6 +2,7 @@ #![no_main] use core::sync::atomic::{AtomicBool, AtomicPtr, AtomicUsize, Ordering}; +use liblbos::characters; use crate::terminal::{print, println}; use liblbos::fs::{DirectoryReader, FileSystem}; @@ -112,13 +113,16 @@ fn lsdir(env: &Environment<'_>) { break; } print("- "); + let name = &record.name[..record.name.iter().position(|&x| x == 0).unwrap_or(11)]; liblbos::syscalls::write_terminal( - &record.name[..record.name.iter().position(|&x| x == 0).unwrap_or(11)], + name ); if record.record_type == liblbos::fs::RecordType::Directory as u8 { - print("(dir)"); + liblbos::syscalls::write_terminal(&[b' ', characters::C_FOLDER as u8]); + } else if &name[name.len() - 3..] == b"DDI" { + liblbos::syscalls::write_terminal(&[b' ', characters::C_BLOOD as u8]); } else { - print("(file)"); + liblbos::syscalls::write_terminal(&[b' ', characters::C_FILE as u8]); } } print("\n");