Loading from disk works, but jumping to the kernel does not

This commit is contained in:
2015-01-24 18:06:35 -08:00
parent 20ee203ace
commit 5e4513dd22
6 changed files with 112 additions and 121 deletions

View File

@@ -13,44 +13,44 @@ start:
mov dl, 0x0
call setCursorPosition
mov al, 0x17 ; read the remaining 16 tracks
mov ch, 0x1 ; .... on track 1 ....
mov cl, 0x1 ; .... starting at sector 1
mov al, 0x1 ; read the remaining 16 tracks
mov ch, 0x0 ; .... on track 0 ....
mov cl, 0x2 ; .... starting at sector 2
mov bx, 0x1000 ; 0x1000 is a standard kernel start location
mov es, bx
xor bx, bx ; bx = 0, es:bs = 0x1000:0
mov bx, 0x0 ; bx = 0, es:bx = 0x1000:0
call loadFloppyDiskSectors
push ax
mov ax, bx
add ax, 0x2200 ; we just read 0x2200 bytes, move pointer in memory
mov bx, ax
pop ax
mov al, 0x17 ; read 18 sectors per track for all future tracks
mov cl, 0x1 ; start at sector 1 for all future tracks
;; push ax
;; mov ax, bx
;; add ax, 0x2200 ; we just read 0x2200 bytes, move pointer in memory
;; mov bx, ax
;; pop ax
;; mov al, 0x17 ; read 18 sectors per track for all future tracks
;; mov cl, 0x1 ; start at sector 1 for all future tracks
mov di, 0x2FF ; abuse di as a counter, while (di < 80)
; di is technically a destination index for stream
; ops, but nothing is using it ATM, so gimme.
_next_floppy_track:
push ax
mov ax, 0x2e
call printCharacter
mov ax, cx
mov cx, di
mov cl, al
pop ax
call loadFloppyDiskSectors
push ax
mov ax, bx
add ax, 0x2400 ; each floppy track is (512b*18s)=0x2400 bytes long
mov bx, ax
pop ax
inc di
push cx
mov cx, 0x50
cmp di, cx ; di < 80 ?
jg _end_floppy_read
pop cx
;; mov di, 0x2FF ; abuse di as a counter, while (di < 80)
;; ; di is technically a destination index for stream
;; ; ops, but nothing is using it ATM, so gimme.
;; _next_floppy_track:
;; push ax
;; mov ax, 0x2e
;; call printCharacter
;; mov ax, cx
;; mov cx, di
;; mov cl, al
;; pop ax
;; call loadFloppyDiskSectors
;; push ax
;; mov ax, bx
;; add ax, 0x2400 ; each floppy track is (512b*18s)=0x2400 bytes long
;; mov bx, ax
;; pop ax
;; inc di
;; push cx
;; mov cx, 0x50
;; cmp di, cx ; di < 80 ?
;; jg _end_floppy_read
;; pop cx
_end_floppy_read:
mov dh, 0x1
@@ -58,13 +58,15 @@ _end_floppy_read:
call setCursorPosition
mov si, _str_floppydone
call printString
jmp 0x1000
jmp _extern_c_main
%include "libinterrupt.S"
%include "kernel_syms.S"
_str_hello db 'Piquant v0.1 Bootloader', 0xA, 0
_str_loading db 'Loading', 0
_str_floppydone db 'Kernel loaded', 0xA, 0
times 510 - ($ - $$) db 0 ; fill up to 510 bytes with 0
dw 0xAA55 ; magic bootloader signature