Skip to content

Commit aad9747

Browse files
committed
FIX
1 parent a77afc6 commit aad9747

5 files changed

Lines changed: 44 additions & 5 deletions

File tree

include/vga.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ void vga_puts(const char* text);
99
void vga_clear(uint8_t color);
1010
void vga_set_color(uint8_t color);
1111
void vga_set_cursor(uint8_t x, uint8_t y);
12+
void vga_hide_cursor(void);
1213
uint8_t vga_get_x(void);
1314
uint8_t vga_get_y(void);
1415

src/boot.asm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ _start:
1414
; Setup stack and call kernel_main
1515
mov esp, stack_top
1616
push ebx ; Pointer to Multiboot info
17+
push eax ; Multiboot magic number
1718
call kernel_main
1819
cli
1920
.hang: hlt

src/drivers/vga.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,21 @@ uint8_t vga_get_y(void) {
2626
void vga_set_cursor(uint8_t x, uint8_t y) {
2727
if (x < vga_width) vga_cursor_x = x;
2828
if (y < vga_height) vga_cursor_y = y;
29+
30+
uint16_t pos = y * vga_width + x;
31+
outb(0x3D4, 0x0F);
32+
outb(0x3D5, (uint8_t)(pos & 0xFF));
33+
outb(0x3D4, 0x0E);
34+
outb(0x3D5, (uint8_t)((pos >> 8) & 0xFF));
35+
}
36+
37+
void vga_hide_cursor(void) {
38+
outb(0x3D4, 0x0A);
39+
outb(0x3D5, 0x20);
2940
}
3041

3142
void vga_clear(uint8_t color) {
43+
vga_hide_cursor();
3244
uint16_t blank = (uint16_t)' ' | ((uint16_t)color << 8);
3345
for (uint32_t i = 0; i < (uint32_t)vga_width * vga_height; ++i) {
3446
vga_buffer[i] = blank;

src/kernel.c

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -352,14 +352,26 @@ static void task_b(void) {
352352
}
353353

354354
void kernel_main(unsigned int multiboot_magic, unsigned int multiboot_info_addr) {
355+
serial_init();
356+
serial_write_string("\n\n--- KERNEL STARTING ---\n");
357+
358+
// Display splash as early as possible
359+
vga_display_splash();
360+
361+
serial_write_string("DEBUG: Multiboot Magic: 0x");
362+
serial_write_hex32(multiboot_magic);
363+
serial_write_string("\n");
364+
355365
gdt_init();
366+
serial_write_string("DEBUG: GDT Initialized\n");
356367
idt_init();
368+
serial_write_string("DEBUG: IDT Initialized\n");
357369
isr_init();
370+
serial_write_string("DEBUG: ISR Initialized\n");
358371
syscall_init();
359-
serial_init();
372+
serial_write_string("DEBUG: Syscall Initialized\n");
360373
diag_init();
361374
diag_log(DIAG_INFO, "boot start");
362-
serial_write_string("DEBUG: GDT/IDT/ISR Initialized\n");
363375

364376
multiboot_info_t* info = 0;
365377
uint32_t mem_bytes = 16u * 1024u * 1024u;
@@ -400,29 +412,38 @@ void kernel_main(unsigned int multiboot_magic, unsigned int multiboot_info_addr)
400412
paging_init();
401413
serial_write_string("DEBUG: Paging Initialized\n");
402414

415+
serial_write_string("DEBUG: Initializing Interrupt Controller...\n");
403416
apex_intc_init();
417+
serial_write_string("DEBUG: Initializing MSGI...\n");
404418
msgi_init();
419+
serial_write_string("DEBUG: Initializing SMP...\n");
405420
smp_rally_init();
406421
serial_write_string("DEBUG: SMP/Interrupt Controller Initialized\n");
407422

423+
serial_write_string("DEBUG: Initializing Power Subsystems...\n");
408424
power_plane_init();
409425
acpi_power_init();
426+
serial_write_string("DEBUG: Initializing Security...\n");
410427
secure_hard_init();
411428
secure_policy_init();
412429
secure_caps_init();
413430
secure_audit_init();
431+
serial_write_string("DEBUG: Initializing Trace/USB/PCIe/GFX...\n");
414432
trace_forge_init();
415433
usb_nexus_init();
416434
pcie_portshift_init();
417435
gfx_forge_init();
436+
serial_write_string("DEBUG: Initializing Input/DriverGrid/Net/Loader...\n");
418437
input_stream_init();
419438
driver_grid_init();
420439
net_stack_init();
421440
dyn_loader_init();
422441
init_orch_init();
442+
serial_write_string("DEBUG: Initializing TTY/PTY/Devnodes...\n");
423443
tty_core_init();
424444
pty_mux_init();
425445
devnodes_init();
446+
serial_write_string("DEBUG: Initializing View/Config...\n");
426447
proc_view_init();
427448
sys_view_init();
428449
sys_config_init();
@@ -475,10 +496,8 @@ void kernel_main(unsigned int multiboot_magic, unsigned int multiboot_info_addr)
475496
process_create(task_a, 0);
476497
process_create(task_b, 0);
477498
pit_init(100);
478-
serial_write_string("DEBUG: Scheduler/PIT Initialized. Displaying splash...\n");
499+
serial_write_string("DEBUG: Scheduler/PIT Initialized.\n");
479500

480-
vga_display_splash();
481-
482501
fb_clear(0);
483502
fb_console_init(0xFFFFFF, 0);
484503
keyboard_init();

src/video/framebuffer.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,12 @@ void fb_clear(uint32_t color) {
243243
scrollback_reset();
244244
text_x = 0;
245245
text_y = 0;
246+
247+
// Actually clear the hardware buffer
248+
uint16_t blank = text_entry(' ', (uint8_t)color);
249+
for (uint32_t i = 0; i < TEXT_COLS * TEXT_ROWS; ++i) {
250+
text_buffer[i] = blank;
251+
}
246252
return;
247253
}
248254
for (uint32_t y = 0; y < framebuffer.height; ++y) {

0 commit comments

Comments
 (0)