WIP on loading files from disk
This commit is contained in:
parent
0896c77ae6
commit
a0f2a71066
6 changed files with 100 additions and 51 deletions
48
kernel/drive.asm
Normal file
48
kernel/drive.asm
Normal file
|
@ -0,0 +1,48 @@
|
|||
; Load a sector from drive.
|
||||
; IN DX:AX sector number
|
||||
; BP ptr to BPB
|
||||
drive_read:
|
||||
push ax
|
||||
push cx
|
||||
push dx
|
||||
push bx
|
||||
push si
|
||||
|
||||
mov cx, dx
|
||||
or cx, ax
|
||||
jz .fast
|
||||
|
||||
div word [bp+13] ; ax:temp = (lba / spt)
|
||||
inc dx ; dx:sector = (lba % spt) + 1
|
||||
mov cl, dl ; sector number
|
||||
|
||||
div word [bp+15] ; ax:cylinder = (tmp / heads)
|
||||
; dx:head = (tmp % heads)
|
||||
mov ch, al ; cylinder number
|
||||
mov dh, dl ; head number
|
||||
mov si, 5 ; retry count
|
||||
.try:
|
||||
mov dl, [bp+(bpb_size-1)] ; drive number
|
||||
mov bx, diskbuf
|
||||
mov ax, 0x0201
|
||||
int 0x13
|
||||
.giveup:
|
||||
pop si
|
||||
pop bx
|
||||
pop dx
|
||||
pop cx
|
||||
pop ax
|
||||
ret
|
||||
.fast: ; fast lane for boot sector
|
||||
inc cl
|
||||
jmp .try
|
||||
.fail:
|
||||
; reset disk
|
||||
mov ah, 0x00
|
||||
int 0x13
|
||||
; loop with si
|
||||
dec si
|
||||
test si, si
|
||||
jnz .try
|
||||
stc
|
||||
jmp .giveup
|
Loading…
Add table
Add a link
Reference in a new issue