peredOS/kernel/kmain.c
msh356 fe18dc2f99 MULTIPLE: 3 изменения (реализован спикер, таймер больше не срет в логи, в ядре крутая бутанимация со спикером)
SPEAKER: реализован
TIMER: не срет в логи больше
KERNEL: крутая бутанимация со спикером
2026-07-02 20:59:56 +03:00

57 lines
1.9 KiB
C

#include "../drivers/vga.h"
#include "../drivers/serial.h"
#include "../drivers/timer.h"
#include "../drivers/speaker.h"
#include "gdt.h"
#include "idt.h"
#include "pic.h"
#include "logger.h"
void kernel_main(void) {
log_info(LOG_NORMAL, "Initializing serial...");
serial_init();
log_info(LOG_NORMAL, "Initializing VGA...");
vga_init();
log_info(LOG_NORMAL, "Setting color white on black");
vga_set_color(VGA_COLOR_WHITE, VGA_COLOR_BLACK);
log_info(LOG_NORMAL, "Initializing GDT...");
gdt_init();
log_info(LOG_NORMAL, "Initializing IDT...");
idt_init();
log_info(LOG_NORMAL, "Remapping PIC...");
pic_remap(32, 40);
log_info(LOG_NORMAL, "Unmasking IRQ 0... (timer)");
pic_clear_mask(0);
log_info(LOG_NORMAL, "Unmasking IRQ 1... (keyboard)");
pic_clear_mask(1);
log_info(LOG_NORMAL, "Registering timer at 100Hz");
timer_init(100);
log_info(LOG_NORMAL, "Enabling IRQ...");
__asm__ __volatile__("sti");
vga_set_color(VGA_COLOR_LIGHT_GREEN, VGA_COLOR_BLACK);
vga_print("h");
speaker_beep(100, 10);
vga_print("a");
speaker_beep(125, 10);
vga_print("i");
speaker_beep(150, 10);
vga_print("!");
speaker_beep(175, 10);
vga_print("!");
speaker_beep(200, 10);
vga_print("!");
speaker_beep(225, 10);
vga_print("!");
speaker_beep(250, 10);
vga_print("!");
speaker_beep(275, 10);
vga_print("!");
speaker_beep(300, 10);
vga_print("!");
speaker_beep(325, 10);
vga_print("\n # ### #### \n #### ### # ## ### #### # # # \n # # ##### ## ##### # # # # ### \n # # # # # # # # # # \n #### ### # ### #### ### #### \n # \n");
speaker_beep(350, 400);
vga_init();
vga_set_color(VGA_COLOR_LIGHT_GRAY, VGA_COLOR_BLACK);
while (1);
}