diff --git a/Makefile b/Makefile index 13d32e4..7cec100 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,15 @@ default: kernel.com -kernel.com: kernel/*.asm +boot.bin: kernel/*.asm nasm -s -o $@ -I kernel kernel/main.asm vbr.bin: boot/vbr.asm nasm -s -o $@ -I lib $< -fdimage.img: vbr.bin kernel.com +fdimage.img: vbr.bin boot.bin dd if=/dev/zero bs=512 count=720 of=$@ - mformat -i $@ -f 360 -B vbr.bin -v "BOOT2B" :: - mcopy -i fdimage.img kernel.com ::boot.bin + mformat -i $@ -f 360 -B vbr.bin :: + mcopy -i fdimage.img boot.bin ::boot.bin clean: rm -f *.com *.bin *.img diff --git a/kernel/main.asm b/kernel/main.asm index 55bb8fb..30640e6 100644 --- a/kernel/main.asm +++ b/kernel/main.asm @@ -3,51 +3,9 @@ cpu 8086 org 0x0000 _startup: - xor ax, ax ; trash ax mov ax, cs - cmp ax, 0x0000 ; MBR or NBP, CS=0000 IP=7C00 - je .mbr - cmp ax, 0x07C0 ; MBR on weird BIOS, CS=07C0 IP=0000 - je .mbr -.dos: - ; ROP because call only works on immediate or memory - mov ax, cs - push ax ; return CS - mov ax, .dosret - add ax, 0x0100 - push ax ; return IP - mov ax, cs - add ax, 0x0010 - push ax ; main CS - mov ax, main - push ax ; main IP - retf -.dosret: - int 0x20 - jmp .halt -.mbr: - push si ; index of partition table entry - push ds ; segment for ^ - push dx ; dl might contain drive number - push bx ; possible offset for pxeenv+ struct - push es ; segment for ^ - - mov ax, 0x0050 - mov es, ax - mov di, 0x0000 - - xor ax, ax - mov ds, ax - mov si, 0x7C00 - - mov cx, _reloc_end - rep movsb - - call 0x0050:main -.halt: - hlt - jmp .halt - + mov ss, ax + mov sp, 0x0000 main: mov ax, cs mov ds, ax @@ -58,7 +16,9 @@ main: int 0x2E - retf +.halt: + hlt + jmp .halt %include "heap.asm" %include "intr.asm"