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