diff --git a/Makefile b/Makefile index 6f106c0..a7b0e50 100644 --- a/Makefile +++ b/Makefile @@ -13,11 +13,11 @@ kernel-i386.elf: kernel.o start32.o vga.o tcc -m32 -nostdlib -Wl,-Ttext,0x100000 start32.o kernel.o vga.o -o kernel-i386.elf qemu-multiboot: kernel-i386.elf - qemu-system-i386 -kernel kernel-i386.elf -serial stdio + qemu-system-i386 -kernel kernel-i386.elf -serial file:CON qemu-image: kernel-i386.elf mount cp kernel-i386.elf mnt/ sync - qemu-system-i386 koalemos.img -serial stdio + qemu-system-i386 koalemos.img mount: koalemos.img mnt/ @if ! mountpoint -q "mnt/"; then \ diff --git a/kernel.c b/kernel.c index 7f0abd6..f917e01 100644 --- a/kernel.c +++ b/kernel.c @@ -1,9 +1,11 @@ #include "multiboot.h" #include "vga.h" -static inline void outb(unsigned short port, unsigned char val) { +/* +static inline void outb(unsigned int port, unsigned char val) { asm volatile ("outb %0, %1" : : "a"(val), "Nd"(port) : "memory"); } +*/ char* itoa(int value, int base) { char* result; @@ -34,8 +36,9 @@ char* itoa(int value, int base) { void kmain (unsigned int mbootmagick, multiboot_info_t* mbootinfo) { // Cursor disabling - outb(0x3D4, 0x0A); - outb(0x3D5, 0x20); + // TODO: outb function + //outb(0x3D4, 0x0A); + //outb(0x3D5, 0x20); //cls(); vga_init(VGA_COLOR_BLACK, VGA_COLOR_GRAY); @@ -75,4 +78,5 @@ void kmain (unsigned int mbootmagick, multiboot_info_t* mbootinfo) { } vga_write_line("\nExecution finished, halting..."); + *(unsigned char *)0xb8000 = '!'; } diff --git a/start32.asm b/start32.asm index 29fb6c4..4d80e11 100644 --- a/start32.asm +++ b/start32.asm @@ -32,10 +32,30 @@ section '.text' executable public _start extrn kmain +disable_cursor: + pushf + push eax + push edx + + mov dx, 0x3D4 + mov al, 0xA ; low cursor shape register + out dx, al + + inc dx + mov al, 0x20 ; bits 6-7 unused, bit 5 disables the cursor, bits 0-4 control the cursor shape + out dx, al + + pop edx + pop eax + popf + ret + _start: ; Setup stack mov esp, stack_top + call disable_cursor + ; Call the main kernel function. push ebx push eax diff --git a/vga.h b/vga.h index b2aa979..60c0666 100644 --- a/vga.h +++ b/vga.h @@ -1,5 +1,3 @@ -#ifndef HEADER_VGA -#define HEADER_VGA enum vga_color { VGA_COLOR_BLACK = 0, @@ -20,5 +18,3 @@ void vga_write(const char* text); void vga_write_color( const char* text, enum vga_color fg, enum vga_color bg); void vga_write_line(const char* text); void vga_write_line_color( const char* text, enum vga_color fg, enum vga_color bg); - -#endif