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
2 changed files with 9 additions and 49 deletions
|
@ -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"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue