From baeea20aa7164790b1e44a2ede899a5721b2da7b Mon Sep 17 00:00:00 2001 From: Julien THILLARD Date: Sun, 15 Mar 2026 17:26:11 +0100 Subject: [PATCH] Interrupts are working again, new fontplate --- assets/cozette.otb | Bin 0 -> 181924 bytes assets/fontplate.png | Bin 1664 -> 7147 bytes assets/fontplate.py | 42 ++++++++++++++++++++++++++++++ crates/kernel-macros/src/image.rs | 30 +++++---------------- src/draw.rs | 8 +----- src/interrupt.rs | 11 -------- src/main.rs | 12 ++++----- src/process.rs | 12 ++------- src/riscv.rs | 7 ++--- src/time.rs | 2 +- 10 files changed, 62 insertions(+), 62 deletions(-) create mode 100644 assets/cozette.otb create mode 100755 assets/fontplate.py diff --git a/assets/cozette.otb b/assets/cozette.otb new file mode 100644 index 0000000000000000000000000000000000000000..1ad13b926cd1d9dbada31612837624baf6504d68 GIT binary patch literal 181924 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

MBh}$hs*s86m4Z+$e#p z_RxfctRbNZ30Xrz6B4q9gc~J@G!?#dXhf3|^}03EsgZPQB%K;br$*ALk#uS#of=7} zM$)N~bZR7>8u77Mtnhi1ni|rn3ZF;4`rltD(wPX4UpX;5J9EkOzk=4k%NDpQ&l z((uE5GnX9Z(H`7f9?c)wr}ZE;8A(k>Qj?L?WF$2iNlivllM$`UIO3iMO06qen{h;I z6Qyn?txd@43aw4Zx|N+`jXJRJ@SdZSoF6nnagy#QO;E_XpVFd{v}hzP8cB;r(xM8B zN1SkKBb1G4bB|ADY?;q&*5%>3<%sucU!}E*pg{ zaH3zqwkk>;g&ba|~%?ogs1NHfu3AAH&>ga{w6y6{x1f9eQq5ycD+y&#! z=&ex`)2s0MsDteffF`DwO&mTj%~hrF_ZWY?il{FZ^~IvTIL=p1&m5TAJJJ5~Yo!in zX4g#Ntz@v)&8xqbVcpYfq z9?Lq9Wu3>O$e3FuaSWBb`6Sfm?^bYqcjEYgidy0J(%mSGcT$?D0A=BF;6n4UbmSG^be z#bUo$Y!{2|VzFH;wu{AfvDhva+r?tLSZo)I?P9TAEVhfqcCpwl7Td*QyI5=&i|t~u zT`abX#dfjSE*9IxV!K#u7mMu_1|K5~-pp3aCA{)%a?Wn2ZY#9^OwO&ulHv!vr)9PV zQv|>I)Y*N3XX_lT3-P1^3Nz$h=sRV zb!dKiZtBSNWkeKRDkL6Pq>55VJY+3<(WOG-QBS&zMVAVRk7LoLLgFE(7CMO6dEuv* z^Mm=#Et)tM-^JoP1-_$R%0%9S0^d`M5my4EO;td z1-(O-MiJ4qLGSR_kLfKDT`Z!DMRc)a7mMf=1P>gI9=CF!aC9HJl>=G* z=LSDyDtZOMLnhJ2BD7e97K_kg5n9X*ew;6TB7#%UJQSSzFM?ChJnDrnf{R6Pu?Q{} z!Nnpt1oAX zJUNB2<8#hgg|S1X9!D6vg^e2V09L120SaP=Qs)>eNF6f!qTqDMx+=HhA?vD9v#KQ& zFzWQ&k-_1fIfPS#v1rG%N5*m?r05|LJtU%sMD(DLa`1|ppsgE)kfWZ{MO5_eD+PX=!b)yjTSRv*p)pfZ)iQFHBo`dzcj1mz* zBKIee`;&+O5-I*fia(L!Po(%0DgH!?Kas*ur0^3de1*D$WpxXs@DnNgL<&EV!cU~| z6DfRz#`C^N!6(}4Nwn3INF66~TN0_`L|Z+Hwt5n6-6Zlg5-HC_$}^F#kw|$aQl5!? zjYP^bk*|@+*GS}RB=R*9K3|3PpoJheBaxet$jwOPW+dF{#`)@}+>J!)Fp=G#NF64! z`xB|dMCve+-Ji(rPoxeLsl!C-Fp)Y;qz)6Q!$j&Zk-eWt4JJ|}iR|4(_N^kyVg2a7 za>p1l)t@5FA#1*K#~3ozf1(}Zgz;afXa5n2Zti!g&7@R2$f-7yQtcq8+CfgGfKu%s zr&2(v6i_M!lxiy}l>$PV+@;pr~Nf3t##|QNh@86u!1U6cvnm(rBvfk5pUAskW3; z>6uh|CY7F1G%>!c8}+B8lNc zssGZOiX=w8`Y*kyNMh7${G~S)NsM~+UwTuK#Hd&Qr9Tx(44+N?ml>%@V$`euG9wj9 zjC%E7W+WnsIgeyUDvlWEssAz~6-SJE^4sQzo8L~+EZSN~;3DvlWS>c8~A z;)qeN{>zM195L$Ef0>brBZiNv{>zM195L$Ee?D=9Ed3)MQ5-Sq)qn9wDjrcBF+P_* z6^|&681>DH9SHmACrg5p9JLju#*C;UiSYqPK#|0dc?T3p44ExZBr#-;03wNTK|Go4 zKlD^6F;3tuKqzs00t{zynqrCJr;}3W9g%e|IfYU(X#E?xB#*bYjt8PJ~Q5G?{j2vc$BYICcS9;F&D&Ocr=13p~>XO(qLGOH2z8Fy0>|ndF&v zXfm1PnRaM0ndF&vXfo~4WP0e4=_zZb{h3VrGnt-VWisJ2?bBp3GF z=hJh@va)Y-nfZ75z6)8lK?|8|giJO zm0)B&k;=5$l*vlSWF=(st}_3n8`5l*vBG zWFKVOX3AtAWU>!3Z8K%E4>H*YnYNiS*#}uKTZJ9e!vtmTWFllT5i&hW$z&pAG7&O8 zO37p*WHJ#lJxa-BB4jcVGCfMkWFllT5i*$wnM{OCu4X0^A(M%a$wbKHYGyJKGMNaO zT+NI>HG+;LC+2c7bGeqe41rv(WiCS?7r*Cr{GE{4uEU2_EypO&_31D& zl^C8bX~{_6=hFAN^nEV;WEVL90 zEyY5+HidR=3hmky+O;XPYg5R)F0^zDE!{#(x6slpv~&wC-9k&Z(9$imbPFxrLQA*M z(k--f3oYG3OSjO{EwpqCE!{#(x6slpv~&wC-9k2WA(OYz8Y;AQ3ayPoYopNGD6}>T zt&KvvNr*->Q@7A=a-rR%LXQ^R)=8mt zQfQqNvI7h478Tl+F0@-z$PO&DTU2OW6$TK+Ewx@tt=CfP zwbXhowO&iD*HY`X)OszoUQ4alQtP$UdM&kHORd*Z>$TK+Ewx@tt=CfPwbXhowO&iD z*HTnlifT(yZK-u!$`>vb*H`lQ9Z3F0f1?!7mU4wlxx%Gf;Zm+}DOb3ZUMS@X>sRbZ zB1dW}A6yRu9TiDrRPfNxl($rl%6Z4=Su0hQhKhGo-3v2O6j>$dajh7E2Za3>A6yRu9TiD zrRPfNxl($rl%6Z4=Su0hQhKhGo-3v2O6j>$dajh7E2Za3>A6yRu9TiDrRPfNxl($r zl%6Z4=Sq3Jr99qJ9&ag+x0J_Q%I+xT@s{#gVFSRRP>gir7f47vsTgu-pyW*w%-BSK;DSx+=zgx=RE#>c)dYV{jSG<(JTgu-p z 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 literal 0 HcmV?d00001 diff --git a/assets/fontplate.png b/assets/fontplate.png index 7120f476040e9611b95f3297aeba5cb4565e3c83..b66dcbacf04f42b2ad2ef7c97c8827e7550ef303 100644 GIT binary patch literal 7147 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 delta 1661 zcmV-@27>wPH-HV07JmRI2nGNE09lfP?@5`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u00v@9 zM??Vs0RI60puMM)00009a7bBm000XU000XU0RWnu7ytkO2Y+-)O+^Rk3k?Ym6LivV zxBvhJ#7RU!RCwC$UG0wCAPn5B^8SyU^iQcQ>W>*?2z$3kRdopgV{BuafjwTY*Zm^O zaUABm`=*+5+hW>B+F@z?mfukhPXRo^x~}W>e!u_y--HbLCVCdVL%-?kMf7>ff-0-0 zr2V`5zRhv0Dt|pqtWo;(aw3&Hf$N#4DMo9<5>QVu(7rV~+3za_iGAPr)96MFhgQFT zt|`6bZC|vuRABnXWIk-#dDigW_!0r+|2qrG@0y$0KR{Gv-pOJ4mTED{bdwiDvWX7&K0A<`4 zHU`jKEp2RCf6@ra=jY5pYlK_b1uJGieRX8Hi+_T6He1A|K`pCm`OucDW@U3&U)-u+ z)s7X9%#Pid_u)pEoY+iyP=4cSCF(+WLW(Lt)SmUe`L4lToD+9RV8z2D8xzy$SO#d#+eLX%>(QGD70f0 zPk+3XwL}ps6yUcn>)$e0v86F%WDW5EOa)je)Fa@tpFa7!^F>=(GQuk3BpL8}$pb61 zBZa>QYxd=gEP9lku%dpeew4?xToA@W5iFkzQ-RVo8r;W zJa2sQ>U)aKrrl+G{k%k3qf?8JqXB44M}O<1+x;k*DY7yi0~o+rw9NKxAQ`C&ej1FiyWjC4jmI09xG8Qci8R}Q!WbK<#bvn?$vxPNFo z@O043?$9r%FN*3loW-Xv@2fCJjJucR^GXbr=jyD$bIm~1zO`VX%4&=RmpdrfE(c>! zzE#qTBoD0MJfdSK88|J?VwjEipcW{qXBKj%AQKySlaz@uP$QuM`_O(_P+%p9ZG}Q- z_{nC3!uDPpY=nJFZFcHuoK~hkxqlHB0Vd^nYRQ*=*BGJoIF92U9rRaOetua6_S1HP znYwJ8;9`L?TK&ZcJu5(?^R^?@VkS*xE>LFK-33uPO2@HGWGusG5^=R&>28;C~x!i#Y&q zF?;s|GTzM)pBn7TU^%Mqxp!xkMrXcdzsb@Ur4DzrygQySt2!(Fl#zAe(5SnTy$jN^ zo*vxSy5K28k9Uhgc6G3F^doR_`CPlXL0gF;{#g8+1&2nSuQEii3xo)OCuA%mya_<@ zBN083>*Bp*T_f#g3zR=veShoDP=@~+jWY@hdYf@ys5gI}Yd`gJ+?6QKUE_}xWmhyP z%jfJBD%OrULeII&tJ+IB~Or(k+!>-FGH z@RPoJ)k&pU, Vec>, width: usize, height: usize) - output } -fn path_to_image(path: &str) -> (Vec, String, usize, usize) { +fn path_to_image(path: &str) -> (Vec, usize, usize) { let img = match image::open(path) { Ok(img) => img.to_luma8(), Err(e) => panic!("failed to open image {}: {}", path, e), @@ -45,14 +45,7 @@ fn path_to_image(path: &str) -> (Vec, String, usize, usize) { let bytes = to_format(img, width, height); - let path = path - .split('/') - .next_back() - .expect("failed to get last part of path"); - let split: Vec<_> = path.split('.').collect(); - let name = remove_non_alphanumeric(&split[0..split.len() - 1].join(".")).to_uppercase(); - - (bytes, name, width, height) + (bytes, width, height) } struct ParsedArgs { @@ -69,20 +62,11 @@ impl Parse for ParsedArgs { pub fn parse_image( input: TokenStream, -) -> Result< - ( - u8, - u8, - proc_macro2::Ident, - usize, - Vec, - ), - syn::Error, -> { +) -> Result<(u8, u8, usize, Vec), syn::Error> { // parse the input into a comma separated list of arguments let parsed_args = syn::parse::(input)?; // let parsed_args = parse_macro_input!(input as ParsedArgs); - let (bytes, name, width, height) = path_to_image(&parsed_args.path); + let (bytes, width, height) = path_to_image(&parsed_args.path); let width = width as u8; let height = height as u8; @@ -90,14 +74,12 @@ pub fn parse_image( let byte_array = bytes.as_slice(); let byte_count = byte_array.len(); - let name_ident = syn::Ident::new(&name, Span::call_site().into()); - let byte_tokens = bytes.iter().map(|b| quote! { #b }).collect::>(); - Ok((width, height, name_ident, byte_count, byte_tokens)) + Ok((width, height, byte_count, byte_tokens)) } pub fn include_bitmap_image_impl(input: TokenStream) -> TokenStream { - let (_, _, _, _, byte_tokens) = parse_image(input).unwrap(); + let (_, _, _, byte_tokens) = parse_image(input).unwrap(); let output = quote! { [#(#byte_tokens),*] diff --git a/src/draw.rs b/src/draw.rs index f0e709f..b3160a3 100644 --- a/src/draw.rs +++ b/src/draw.rs @@ -39,12 +39,6 @@ pub trait Draw { /// /// Uses the embedded font plate to render glyphs into the framebuffer. unsafe fn draw_char_bg(&mut self, x: u16, y: u16, c: char, color: Color, bg_color: Color) { - let c = if (c as u8 > b'~') || ((c as u8) < b' ') { - b'/' - b' ' - } else { - c as u8 - b' ' - }; - // Get char position within font plate let char_x = (c as usize % 32) * FONT_WIDTH; let char_y = (c as usize / 32) * FONT_HEIGHT; @@ -119,6 +113,6 @@ pub trait Draw { pub const FONT_WIDTH: usize = 6; pub const FONT_HEIGHT: usize = 13; pub const FONTPLATE_WIDTH: usize = 32 * FONT_WIDTH; -pub const FONTPLATE_HEIGHT: usize = 3 * FONT_HEIGHT; +pub const FONTPLATE_HEIGHT: usize = 42 * FONT_HEIGHT; pub const FONTPLATE_SIZE: usize = FONTPLATE_WIDTH * FONTPLATE_HEIGHT / 8; pub static FONTPLATE: [u8; FONTPLATE_SIZE] = include_bitmap_image! {"assets/fontplate.png"}; diff --git a/src/interrupt.rs b/src/interrupt.rs index f80fbb0..e1e08b4 100644 --- a/src/interrupt.rs +++ b/src/interrupt.rs @@ -385,17 +385,6 @@ unsafe extern "C" fn _supervisor_mode_trap() { csrr t0, sepc sd t0, 248(sp) csrr t0, sstatus - // Move SIE bit to SPIE. Restore_context, in the sret instruction, will do the inverse operation - // Isolate SIE bit (1) - andi t1, t0, 0x2 - // li t1, 0x2 - // Shift to bit 5 (SPIE) - slli t1, t1, 4 - // Clear bit 1 and 5 - li t2, ~0x22 - and t0, t0, t2 - // Add the SPIE bit - or t0, t0, t1 sd t0, 256(sp) mv a0, sp diff --git a/src/main.rs b/src/main.rs index a72cbf5..c51e8d8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -115,7 +115,7 @@ pub static mut KBD_DRIVER: VirtioPciDriver = unsafe { } _ => {} } - // println!("event: {:#?}", event); + println!("event: {:#?}", event); } } else { // println!("key pressed, {:#?}", event); @@ -171,12 +171,12 @@ pub extern "C" fn supervisor_mode_entry() { info!("Hello World !"); // unsafe { Vga.draw_string(10, 10, "Hello World !", Color::WHITE, Color::BLACK) }; - // SCHEDULER.lock().create_process(Box::new(test), "proc1"); - // SCHEDULER.lock().create_process(Box::new(proc2), "proc2"); + SCHEDULER.lock().create_process(Box::new(test), "proc1"); + SCHEDULER.lock().create_process(Box::new(proc2), "proc2"); - // SCHEDULER - // .lock() - // .create_process_from_file("/usr/bin/test_pic"); + SCHEDULER + .lock() + .create_process_from_file("/usr/bin/test_pic"); enable_supervisor_interrupt(); diff --git a/src/process.rs b/src/process.rs index 4066c64..485a68f 100644 --- a/src/process.rs +++ b/src/process.rs @@ -16,6 +16,7 @@ use shared::syscall::exit; use crate::{ println, + riscv::SStatus, scheduler::{ACTIVE_PID, SCHEDULER, Scheduler}, time::elapsed_time_since_startup, tty::TTY0, @@ -25,15 +26,6 @@ use crate::{ /// Size of the stack allocated to each process (in 64-bit words). const STACK_SIZE: usize = 4096; -/// MSTATUS bit to enable supervisor mode interrupts. -const MSTATUS_SIE: u64 = 1 << 1; - -/// MSTATUS bit to enable supervisor mode interrupts. -const MSTATUS_SPIE: u64 = 1 << 5; - -/// MSTATUS bit to set previous privilege mode to supervisor. -const MSTATUS_SPP: u64 = 1 << 1; - /// Represents the state of a process in the system. #[derive(Debug, PartialEq, Eq)] pub enum ProcessState { @@ -317,7 +309,7 @@ impl Scheduler { process.ctx.mepc = process_launcher as *const _; // Configure mstatus for supervisor mode with interrupts enabled - process.ctx.mstatus = MSTATUS_SPP | MSTATUS_SPIE; + process.ctx.mstatus = SStatus::SPIE; // Initialize stack pointer at the top of the stack process.ctx.sp = &raw const process.stack[STACK_SIZE - 1]; diff --git a/src/riscv.rs b/src/riscv.rs index 4e36463..8adb5df 100644 --- a/src/riscv.rs +++ b/src/riscv.rs @@ -22,8 +22,9 @@ impl MStatus { pub const MPIE: usize = 1 << 7; } impl SStatus { - pub const SIE: usize = 1 << 1; - pub const SPIE: usize = 1 << 5; + pub const SPP: u64 = 1 << 8; + pub const SIE: u64 = 1 << 1; + pub const SPIE: u64 = 1 << 5; } /// Return the current machine interrupt enable state. @@ -32,7 +33,7 @@ pub fn get_interrupt_state() -> bool { } /// Return whether supervisor interrupts are currently enabled. pub fn get_supervisor_interrupt_state() -> bool { - (read_csr!(sstatus) & SStatus::SIE as u64) != 0 + (read_csr!(sstatus) & SStatus::SIE) != 0 } /// Enable machine-level interrupts. pub fn enable_interrupt() { diff --git a/src/time.rs b/src/time.rs index eade1e7..9dc13f2 100644 --- a/src/time.rs +++ b/src/time.rs @@ -26,7 +26,7 @@ const CLINT_TIMER: *const u64 = 0x0200_bff8 as *const u64; /// The hardware timer frequency (Hz). const TIMER_FREQUENCY: u64 = 10_000_000; // 10 MHz /// The frequency at which timer interrupts should occur (Hz). -const INTERRUPT_FREQUENCY: u64 = 200; // 20 Hz +const INTERRUPT_FREQUENCY: u64 = 100; // 100 Hz /// Stores the instant when the kernel started. static START_TIME: AtomicU64 = AtomicU64::new(0);