diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2018-05-24 09:11:45 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2018-05-24 09:11:45 -0400 |
commit | 9e35452e46901fc0aa6271d9eacf6b512fe6da64 (patch) | |
tree | 18251795a12f7c12d71106d0760a6ac7c2171702 /boot.asm | |
parent | bf78cb8670c38fca13923022fc7c50bb9f57aaf5 (diff) | |
download | minos-9e35452e46901fc0aa6271d9eacf6b512fe6da64.tar.gz |
Fix up system initialization
Diffstat (limited to 'boot.asm')
-rw-r--r-- | boot.asm | 46 |
1 files changed, 25 insertions, 21 deletions
@@ -6,12 +6,30 @@ CR equ 0Dh LF equ 0Ah K_CS_ADDR equ 0080h +; data +drive0: dw 0 +banner: db "MINOS Bootloader", CR, LF, 0 + +; General messages +msg_loading: db "Loading", 0 +msg_done: db "done!", CR, LF, 0 + +; Error messages +error_msg_panic: db "PANIC: ", 0 +error_msg_disk_reset: db "Drive reset failed!", CR, LF, 0 +error_msg_disk_read: db "Drive read failed!", CR, LF, 0 + start: - mov ax, 07c0h + cli + mov ax, 07C0h ; load bootstrap address mov ds, ax ; set data segment - mov ax, 07e0h - mov ss, ax ; set stack segment - mov sp, 0200h ; 512 byte stack + mov es, ax ; set extra segment + mov ax, stack_end ; load address of temp stack segment + mov ss, ax ; set stack end + mov cx, 01FCh + sub ax, cx + mov sp, ax ; set stack top before boot signature + sti mov [drive0], dx ; save first detected drive @@ -46,8 +64,8 @@ start: add sp, 2 add bx, 0200h ; increment address by 512 bytes - inc di ; increment sector read count - cmp di, 20h ; 16K (512 * 32) + inc di ; increment track read count + cmp di, 12h ; transfer 9K (512 * 18) jle .loader ; keep reading push msg_done @@ -108,9 +126,7 @@ disk_read: jnc .success - push dx call disk_reset - add sp, 2 pop cx pop bx @@ -169,19 +185,7 @@ puts: pop bp ret - -; data -drive0: dw 0 -banner: db "MINOS Bootloader", CR, LF, 0 - -; General messages -msg_loading: db "Loading", 0 -msg_done: db "done!", CR, LF, 0 - -; Error messages -error_msg_panic: db "PANIC: ", 0 -error_msg_disk_reset: db "Drive reset failed!", CR, LF, 0 -error_msg_disk_read: db "Drive read failed!", CR, LF, 0 +stack_end: ; address of stack end ; boot signature times 510-($-$$) db 0 |