Properly set up registers when chainloading from boot sector

This commit is contained in:
Nero 2020-03-30 20:41:32 +00:00
parent bc096f41d3
commit eabb1d9fa9

View File

@ -1,5 +1,6 @@
; Bootsector for FAT32 filesystems
org 0x0800
cpu 8086
jmp short init
nop
@ -28,12 +29,17 @@ dn: equ ( $$ + 0x040 )
times (0x5A - ($-$$)) db 0
init: xor ax, ax
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0x7C00
mov si, sp
; save potential partition table entry
push ds
push si
mov ds, ax
mov es, ax
mov si, 0x7C00
mov di, 0x0800
mov cx, 0x0100
rep movsw
@ -101,7 +107,7 @@ read_: ; read sector DX:AX from disk
mov si, sp
mov ah, 0x42
mov dl, 0x80
mov dl, [dn]
stc
int 0x13
jc dskerr
@ -213,7 +219,8 @@ loadf: call search
mov dx, [si+0x14]
jmp load
main: ; load root directory
main: mov [dn], dl
; load root directory
call loadr
; search for first system directory
mov ah, 0x14
@ -222,6 +229,20 @@ main: ; load root directory
mov ah, 0x04
call loadf
; jump
xor ax, ax
xor cx, cx
xor dx, dx
xor bx, bx
xor di, di
xor bp, bp
; restore drive number
mov dl, [dn]
; restore potential partition table
pop si
pop ds
jmp 0:0x7C00
end: call msg