Improved logging system
This commit is contained in:
parent
52bb2609ae
commit
70c1f666c6
@ -9,13 +9,12 @@ uint32_t tick = 0;
|
|||||||
|
|
||||||
static void timer_callback(registers_t regs) {
|
static void timer_callback(registers_t regs) {
|
||||||
tick++;
|
tick++;
|
||||||
uint8_t buf[8];
|
/* uint8_t buf[8];
|
||||||
itoa(tick, buf, 10);
|
itoa(tick, buf, 10);
|
||||||
kprint((uint8_t*)"Time: ");
|
kprint((uint8_t*)"Time: ");
|
||||||
uitoa(tick, buf, 10);
|
uitoa(tick, buf, 10);
|
||||||
kprint((uint8_t*)buf);
|
kprint((uint8_t*)buf);
|
||||||
kprint((uint8_t*)"\n");
|
kprint((uint8_t*)"\n");*/
|
||||||
|
|
||||||
// Cast to void unused parameter
|
// Cast to void unused parameter
|
||||||
UNUSED_PAR(regs);
|
UNUSED_PAR(regs);
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void init_timer(uint32_t frequency);
|
void init_timer(uint32_t frequency);
|
||||||
|
uint32_t tick;
|
||||||
/* Since regs parameter(from timer_callback) will be unused
|
/* Since regs parameter(from timer_callback) will be unused
|
||||||
* GCC(with -Werror flag) will dump an error, so we avoid this
|
* GCC(with -Werror flag) will dump an error, so we avoid this
|
||||||
* using the following macro
|
* using the following macro
|
||||||
|
@ -11,15 +11,29 @@
|
|||||||
#include "drivers/timer.h"
|
#include "drivers/timer.h"
|
||||||
#include "drivers/keyboard.h"
|
#include "drivers/keyboard.h"
|
||||||
#include "shell/shell.h"
|
#include "shell/shell.h"
|
||||||
|
#include "libc/stdio.h"
|
||||||
|
|
||||||
void kernel_main() {
|
void kernel_main() {
|
||||||
gdt_setup(); // Setup Global Descriptor Table
|
printf_color("\n[STATUS]", LIGHT_GREEN, BLACK);
|
||||||
idt_setup(); // Setup Interrupt Descriptor Table
|
printf_color(" - Loading kernel, wait please...", WHITE, BLACK);
|
||||||
|
|
||||||
clear_prompt();
|
gdt_setup(); // Setup Global Descriptor Table
|
||||||
|
printf_color("\n[INFO]", LIGHT_CYAN, BLACK);
|
||||||
|
printf_color(" - Loaded GDT", WHITE, BLACK);
|
||||||
|
|
||||||
|
idt_setup(); // Setup Interrupt Descriptor Table
|
||||||
|
printf_color("\n[INFO]", LIGHT_CYAN, BLACK);
|
||||||
|
printf_color(" - Loaded IDT", WHITE, BLACK);
|
||||||
|
|
||||||
|
init_timer(1); // Initialize PIT driver
|
||||||
|
printf_color("\n[INFO]", LIGHT_CYAN, BLACK);
|
||||||
|
printf_color(" - Loaded PIT", WHITE, BLACK);
|
||||||
|
|
||||||
|
init_keyboard(); // Initialize keyboard driver
|
||||||
|
printf_color("\n[INFO]", LIGHT_CYAN, BLACK);
|
||||||
|
printf_color(" - Loaded PS/2 driver", WHITE, BLACK);
|
||||||
|
|
||||||
iceos_ascii_logo();
|
iceos_ascii_logo();
|
||||||
init_prompt(); // Initialize frame buffer
|
init_prompt(); // Initialize frame buffer
|
||||||
init_keyboard(); // Initialize keyboard driver
|
|
||||||
|
|
||||||
// init_timer(1); // Only for debug purposes
|
|
||||||
}
|
}
|
@ -3,6 +3,7 @@
|
|||||||
#include "../libc/stdio.h"
|
#include "../libc/stdio.h"
|
||||||
#include "../drivers/tty.h"
|
#include "../drivers/tty.h"
|
||||||
#include "../drivers/ports.h"
|
#include "../drivers/ports.h"
|
||||||
|
#include "../drivers/timer.h"
|
||||||
|
|
||||||
void helper() {
|
void helper() {
|
||||||
puts("\nList of available commands:\n"
|
puts("\nList of available commands:\n"
|
||||||
@ -10,6 +11,8 @@ void helper() {
|
|||||||
"\nint - Test some interrupts"
|
"\nint - Test some interrupts"
|
||||||
"\nbanner - Show banner"
|
"\nbanner - Show banner"
|
||||||
"\nclear, cls - Clear the screen"
|
"\nclear, cls - Clear the screen"
|
||||||
|
"\nregs - Prints register dump"
|
||||||
|
"\ntimer - Prints timer tick"
|
||||||
"\nabout - About this kernel"
|
"\nabout - About this kernel"
|
||||||
"\nreboot - Reboot the system"
|
"\nreboot - Reboot the system"
|
||||||
);
|
);
|
||||||
@ -42,6 +45,44 @@ void about() {
|
|||||||
LIGHT_GREEN, BLACK);
|
LIGHT_GREEN, BLACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void register_dump() {
|
||||||
|
register uint32_t eax_v asm("eax");
|
||||||
|
register uint32_t ebx_v asm("ebx");
|
||||||
|
register uint32_t ecx_v asm("ecx");
|
||||||
|
register uint32_t edx_v asm("edx");
|
||||||
|
register uint32_t esx_v asm("esi");
|
||||||
|
register uint32_t edi_v asm("edi");
|
||||||
|
register uint32_t ebp_v asm("ebp");
|
||||||
|
register uint32_t esp_v asm("esp");
|
||||||
|
|
||||||
|
printf_color("\n===================================\n"
|
||||||
|
" BEGIN 32 BITS CPU REGISTER DUMP \n"
|
||||||
|
"===================================\n",
|
||||||
|
LIGHT_BROWN, BLACK);
|
||||||
|
printf(" EAX: %x\n"
|
||||||
|
" EBX: %x\n"
|
||||||
|
" ECX: %x\n"
|
||||||
|
" EDX: %x\n"
|
||||||
|
" ESX: %x\n"
|
||||||
|
" EDI: %x\n"
|
||||||
|
" EBP: %x\n"
|
||||||
|
" ESP: %x\n",
|
||||||
|
eax_v, ebx_v, ecx_v, edx_v, esx_v, edi_v, ebp_v, esp_v);
|
||||||
|
printf_color("\n==================================\n"
|
||||||
|
" END 32 BITS CPU REGISTER DUMP \n"
|
||||||
|
"==================================\n",
|
||||||
|
LIGHT_BROWN, BLACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
void timer_dump() {
|
||||||
|
uint8_t buf[8];
|
||||||
|
uitoa(tick, buf, 10);
|
||||||
|
|
||||||
|
printf_color("\nTicks since boot: ",
|
||||||
|
LIGHT_GREEN, BLACK);
|
||||||
|
printf_color((const char*)buf,
|
||||||
|
LIGHT_CYAN, BLACK);
|
||||||
|
}
|
||||||
void reboot() {
|
void reboot() {
|
||||||
uint8_t tmp;
|
uint8_t tmp;
|
||||||
asm("cli"); // First disable all interrupts
|
asm("cli"); // First disable all interrupts
|
||||||
@ -56,6 +97,27 @@ void reboot() {
|
|||||||
outb(0x64, 0xFE); // Reset the CPU
|
outb(0x64, 0xFE); // Reset the CPU
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void processCommand(uint8_t *cmd) {
|
||||||
|
if(strcmp(cmd, (uint8_t*)"help") == 0)
|
||||||
|
helper();
|
||||||
|
else if(strcmp(cmd, (uint8_t*)"int") == 0)
|
||||||
|
test_interrupts();
|
||||||
|
else if(strcmp(cmd, (uint8_t*)"clear") == 0 || strcmp(cmd, (uint8_t*)"cls") == 0)
|
||||||
|
clear_prompt();
|
||||||
|
else if(strcmp(cmd, (uint8_t*)"about") == 0)
|
||||||
|
about();
|
||||||
|
else if(strcmp(cmd, (uint8_t*)"regs") == 0)
|
||||||
|
register_dump();
|
||||||
|
else if(strcmp(cmd, (uint8_t*)"timer") == 0)
|
||||||
|
timer_dump();
|
||||||
|
else if(strcmp(cmd, (uint8_t*)"banner") == 0)
|
||||||
|
iceos_ascii_logo();
|
||||||
|
else if(strcmp(cmd, (uint8_t*)"reboot") == 0)
|
||||||
|
reboot();
|
||||||
|
else
|
||||||
|
puts("\nCommand not found!");
|
||||||
|
}
|
||||||
|
|
||||||
void iceos_ascii_logo() {
|
void iceos_ascii_logo() {
|
||||||
printf_color(
|
printf_color(
|
||||||
"\n\n### ##### ####### ####### #####\n"
|
"\n\n### ##### ####### ####### #####\n"
|
||||||
@ -67,21 +129,4 @@ void iceos_ascii_logo() {
|
|||||||
"### ##### ####### ####### ##### \n"
|
"### ##### ####### ####### ##### \n"
|
||||||
"\n (c) Marco Cetica 2019\n",
|
"\n (c) Marco Cetica 2019\n",
|
||||||
LIGHT_MAGENTA, BLACK);
|
LIGHT_MAGENTA, BLACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
void processCommand(uint8_t *cmd) {
|
|
||||||
if(strcmp(cmd, (uint8_t*)"help") == 0)
|
|
||||||
helper();
|
|
||||||
else if(strcmp(cmd, (uint8_t*)"int") == 0)
|
|
||||||
test_interrupts();
|
|
||||||
else if(strcmp(cmd, (uint8_t*)"clear") == 0 || strcmp(cmd, (uint8_t*)"cls") == 0)
|
|
||||||
clear_prompt();
|
|
||||||
else if(strcmp(cmd, (uint8_t*)"about") == 0)
|
|
||||||
about();
|
|
||||||
else if(strcmp(cmd, (uint8_t*)"banner") == 0)
|
|
||||||
iceos_ascii_logo();
|
|
||||||
else if(strcmp(cmd, (uint8_t*)"reboot") == 0)
|
|
||||||
reboot();
|
|
||||||
else
|
|
||||||
puts("\nCommand not found!");
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user