mirror of
https://github.com/fergalmoran/ferglos.git
synced 2026-01-25 10:06:45 +00:00
Multi-line support in printf
This commit is contained in:
@@ -11,9 +11,34 @@
|
||||
|
||||
void printf(char* str) {
|
||||
static uint16_t* VideoMemory = (uint16_t*)0xb8000;
|
||||
static uint8_t x = 0, y = 0;
|
||||
|
||||
for (int i = 0; str[i] != '\0'; ++i)
|
||||
VideoMemory[i] = (VideoMemory[i] & 0xFF00) | str[i];
|
||||
for (int i = 0; str[i] != '\0'; ++i) {
|
||||
switch (str[i]) {
|
||||
case '\n':
|
||||
y++;
|
||||
x = 0;
|
||||
break;
|
||||
default:
|
||||
VideoMemory[80 * y + x] = (VideoMemory[80 * y + x] & 0xFF00) | str[i];
|
||||
x++;
|
||||
break;
|
||||
}
|
||||
|
||||
//line feed after 80 chars (terminal width)
|
||||
if (x >= 80) {
|
||||
y++;
|
||||
x = 0;
|
||||
}
|
||||
//we've reached max screen rows
|
||||
if (y > 25) {
|
||||
for (y = 0; y < 25; y++) {
|
||||
for (x - 0; x < 80; x++) {
|
||||
VideoMemory[80 * y + x] = (VideoMemory[80 * y + x] & 0xFF00) | ' ';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
typedef void (*constructor)();
|
||||
@@ -25,7 +50,10 @@ extern "C" void call_constructors() {
|
||||
}
|
||||
|
||||
extern "C" void ferglos_Main(const void* multiboot_structure, uint32_t /*mb_mag*/) {
|
||||
printf("Welcome to FerglOS v0.0.1!");
|
||||
printf("Welcome to FerglOS v0.0.2!\n");
|
||||
printf("Hitler blinks.");
|
||||
|
||||
GlobalDescriptorTable gdt;
|
||||
while (1)
|
||||
;
|
||||
}
|
||||
Reference in New Issue
Block a user