@@ -42,27 +42,32 @@ pub extern "C" fn kernel_main() -> ! {
4242 proka_kernel:: interrupts:: apic:: init ( ) ;
4343 proka_kernel:: interrupts:: apic:: ioapic:: init ( ) ;
4444
45- // Route Keyboard IRQ
46- proka_kernel:: interrupts:: apic:: ioapic:: route_irq (
47- 1 ,
48- proka_kernel:: interrupts:: idt:: IRQ_BASE + 1 ,
49- 0 ,
50- ) ;
51-
52- // Register Keyboard Handler via Registry
45+ // Register Keyboard Handler (Simplified)
46+ proka_kernel:: interrupts:: request_irq ( 1 , "Keyboard" , |_context| {
47+ let mut port = x86_64:: instructions:: port:: Port :: < u8 > :: new ( 0x60 ) ;
48+ let scancode = unsafe { port. read ( ) } ;
49+ proka_kernel:: drivers:: input:: keyboard:: KEYBOARD . handle_scancode ( scancode) ;
50+ proka_kernel:: interrupts:: apic:: registry:: IrqResult :: Handled
51+ } ) ;
52+
53+ // Register Timer Handler via Registry
5354 proka_kernel:: interrupts:: apic:: registry:: IRQ_REGISTRY
5455 . lock ( )
5556 . register (
56- proka_kernel:: interrupts:: idt :: IRQ_BASE + 1 ,
57- "Keyboard " ,
57+ proka_kernel:: interrupts:: apic :: TIMER_VECTOR ,
58+ "Timer " ,
5859 |_context| {
59- let mut port = x86_64:: instructions:: port:: Port :: < u8 > :: new ( 0x60 ) ;
60- let scancode = unsafe { port. read ( ) } ;
61- proka_kernel:: drivers:: input:: keyboard:: KEYBOARD . handle_scancode ( scancode) ;
60+ use core:: sync:: atomic:: { AtomicU64 , Ordering } ;
61+ static TICKS : AtomicU64 = AtomicU64 :: new ( 0 ) ;
62+ let t = TICKS . fetch_add ( 1 , Ordering :: Relaxed ) ;
63+ if t > 0 && t % 100 == 0 {
64+ println ! ( "System Tick: {}s" , t / 100 ) ;
65+ }
66+
6267 proka_kernel:: interrupts:: apic:: registry:: IrqResult :: Handled
6368 } ,
6469 )
65- . expect ( "Failed to register keyboard handler" ) ;
70+ . expect ( "Failed to register timer handler" ) ;
6671
6772 proka_kernel:: drivers:: init_devices ( ) ; // Initialize devices
6873 proka_kernel:: libs:: time:: init ( ) ; // Init time system
@@ -100,7 +105,9 @@ pub extern "C" fn kernel_main() -> ! {
100105
101106 let time = proka_kernel:: libs:: time:: time_since_boot ( ) ;
102107 println ! ( "Time since boot: {time}" ) ;
103- CONSOLE . lock ( ) . cursor_show ( ) ;
108+ x86_64:: instructions:: interrupts:: without_interrupts ( || {
109+ CONSOLE . lock ( ) . cursor_show ( ) ;
110+ } ) ;
104111
105112 let shell = proka_kernel:: libs:: shell:: Shell :: new ( ) ;
106113 shell. run ( "keyboard" ) ;
0 commit comments