Rework early startup and fix bss memory reservation

This commit is contained in:
Nero 2020-04-23 21:49:10 +02:00
parent 4804bf28ea
commit da41f6b0e2
1 changed files with 40 additions and 31 deletions

View File

@ -255,50 +255,59 @@ fputc: push ax
pop ax pop ax
iret iret
main: int 0x28 ; write CS:AX to ES:DI and advance DI
jmp main ; used for setting interrupts
stovec: stosw
mov ax, cs
stosw
ret
vects: dw int20h, int21h, idle, fputc
main: mov si, vects
mov di, (0x20*4)
lodsw
call stovec
lodsw
call stovec
mov di, (0x28*4)
lodsw
call stovec
lodsw
call stovec
mov si, banner
mov ah, 9
int 0x21
loop: int 0x28
mov ah, 7
int 0x21
jz loop
int 0x29
jmp loop
init: cli init: cli
xor ax, ax xor ax, ax
mov ds, ax mov ds, ax
mov es, ax mov es, ax
mov ss, ax mov ss, ax
xor sp, sp mov sp, stacke
; relocate
mov si, 0x7C00 mov si, 0x7C00
mov di, $$ mov di, $$
mov cx, (init-$$) mov cx, (init-$$)
rep movsb rep movsb
; Set boot drive as current drive
call dnconv
call select
; Set int 0x20 to 0x2F
mov di, (0x20*4)
mov si, ivects+0x7C00-$$
mov cx, 0x10
.loop: movsw
mov ax, cs
stosw
loop .loop
mov si, banner
mov ah, 0x09
int 0x21
jmp 0:main jmp 0:main
ivects: dw int20h, int21h, iret, iret
dw iret, iret, iret, iret
dw idle, fputc, iret, iret
dw iret, iret, iret, iret
section .bss section .bss
bpb: times bpb_len resb 0 bpb: resb bpb_len
drvnum: resb 0 drvnum: resb 1
align 4 align 4
drvoff: resd 0 ; partition offset drvoff: resd 1; partition offset
drvpos: resd 0 ; absolute physical sector number drvpos: resd 1; absolute physical sector number
buffer: times 512 resb 0 buffer: resb 512
stack: resw 512
stacke: