kernel: strip down to dumb binary, expect bootloader to load into sane location and setup stack

This commit is contained in:
Nero 2019-03-27 23:07:04 +00:00
parent 6bfb0dd21e
commit a46114f6bd
2 changed files with 9 additions and 49 deletions

View File

@ -1,15 +1,15 @@
default: kernel.com default: kernel.com
kernel.com: kernel/*.asm boot.bin: kernel/*.asm
nasm -s -o $@ -I kernel kernel/main.asm nasm -s -o $@ -I kernel kernel/main.asm
vbr.bin: boot/vbr.asm vbr.bin: boot/vbr.asm
nasm -s -o $@ -I lib $< 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=$@ dd if=/dev/zero bs=512 count=720 of=$@
mformat -i $@ -f 360 -B vbr.bin -v "BOOT2B" :: mformat -i $@ -f 360 -B vbr.bin ::
mcopy -i fdimage.img kernel.com ::boot.bin mcopy -i fdimage.img boot.bin ::boot.bin
clean: clean:
rm -f *.com *.bin *.img rm -f *.com *.bin *.img

View File

@ -3,51 +3,9 @@ cpu 8086
org 0x0000 org 0x0000
_startup: _startup:
xor ax, ax ; trash ax
mov ax, cs mov ax, cs
cmp ax, 0x0000 ; MBR or NBP, CS=0000 IP=7C00 mov ss, ax
je .mbr mov sp, 0x0000
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
main: main:
mov ax, cs mov ax, cs
mov ds, ax mov ds, ax
@ -58,7 +16,9 @@ main:
int 0x2E int 0x2E
retf .halt:
hlt
jmp .halt
%include "heap.asm" %include "heap.asm"
%include "intr.asm" %include "intr.asm"