diff --git a/bochsrc b/bochsrc index 53afd9e..9eeeb70 100644 --- a/bochsrc +++ b/bochsrc @@ -1,4 +1,8 @@ +megs: 32 +cpu: count=1, ips=9000000 ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 ata0-master: type=cdrom, path="mkos.iso", status=inserted +ata1: enabled=true, ioaddr1=0x170, ioaddr2=0x370, irq=15 +ata1-master: type=disk, path="dysk.img", mode=flat boot: cdrom display_library: x, options="gui_debug" diff --git a/boot.s b/boot.s index a475f37..7f3e9f8 100644 --- a/boot.s +++ b/boot.s @@ -16,8 +16,6 @@ * podać ich odwrotność. */ .set CHECKSUM, -(MAGIC + FLAGS) -// TODO: Dopisać czas do dziennika - /* Faktyczny nagłówek multiboot z wykorzystaniem powyższych wartości */ .section .multiboot .align 4 @@ -36,6 +34,11 @@ stack_bottom: .skip 16834 stack_top: +.section .data +/* 23, bo będą 3 deskryptory po 8 bajtów, a przekazujemy wielkość - 1*/ +gdtr: .word 23 + .long 0 + /* Oznaczenie startu, tu zaczyna się kod kernela! */ @@ -44,7 +47,15 @@ stack_top: .type _start, @function _start: /* Tutaj podobno jest tryb chroniony już, jednak zastanawia czy faktycznie -bootloader ustawia za nas segmentacje pamięci? */ + * bootloader ustawia za nas segmentacje pamięci? + * EDIT: Ustawia, ale pod własne potrzeby, więc i tak trzeba zmienić + * Ustawię zatem najprostszy model segmentacji */ + +// 1. Pusty (null) deskryptor +mov $0, %eax +movq $0, (%eax) +// 2. Deskryptor kodu jądra + /* Ustawienie ESP na wierzchołek stosu */ mov $stack_top, %esp