kernel: strip down to dumb binary, expect bootloader to load into sane location and setup stack
This commit is contained in:
parent
6bfb0dd21e
commit
a46114f6bd
8
Makefile
8
Makefile
@ -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
|
||||||
|
@ -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"
|
||||||
|
Loading…
Reference in New Issue
Block a user