Add attempt for drive table to kernel
This commit is contained in:
parent
7d7b4a89e6
commit
d23bba5bdd
50
kernel/drive.asm
Normal file
50
kernel/drive.asm
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
%define drive_struct_len 0x0C
|
||||||
|
|
||||||
|
drive_table:
|
||||||
|
dw 0
|
||||||
|
.count:
|
||||||
|
dw 4
|
||||||
|
|
||||||
|
; Drive table
|
||||||
|
; 00 BYTE DL number
|
||||||
|
; 01 BYTE file system type
|
||||||
|
; 02 BYTE CHS heads (ignored if LBA)
|
||||||
|
; 03 BYTE CHS sectors per track (ignored if LBA)
|
||||||
|
; 04 DWORD total number of sectors
|
||||||
|
; 08 DWORD partition offset
|
||||||
|
|
||||||
|
; DI is incremented for the space taken
|
||||||
|
; IN ES:DI
|
||||||
|
drive_setup:
|
||||||
|
xor cx, cx
|
||||||
|
mov [drive_table], di
|
||||||
|
mov al, drive_struct_len
|
||||||
|
mov ah, BYTE [drive_table.count]
|
||||||
|
mul ah
|
||||||
|
xchg cx, ax
|
||||||
|
; this increments DI and also fills table with zeros
|
||||||
|
rep stosb
|
||||||
|
ret
|
||||||
|
|
||||||
|
; Load a drive table entry
|
||||||
|
; IN DL drive number
|
||||||
|
; OUT DS:SI ptr to table item
|
||||||
|
drive_load:
|
||||||
|
; bail out if number too high
|
||||||
|
cmp dl, [cs:drive_table.count]
|
||||||
|
jnc .err
|
||||||
|
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
|
mov si, [drive_table]
|
||||||
|
|
||||||
|
push ax
|
||||||
|
mov al, drive_struct_len
|
||||||
|
mul dl
|
||||||
|
add si, ax
|
||||||
|
pop ax
|
||||||
|
|
||||||
|
ret
|
||||||
|
.err:
|
||||||
|
stc
|
||||||
|
ret
|
@ -31,28 +31,30 @@ isr_error:
|
|||||||
isr_return:
|
isr_return:
|
||||||
iret
|
iret
|
||||||
|
|
||||||
|
%include "drive.asm"
|
||||||
|
|
||||||
init:
|
init:
|
||||||
mov ax, cs
|
mov ax, cs
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
mov es, ax
|
mov es, ax
|
||||||
|
|
||||||
|
mov di, kernel_end
|
||||||
|
call drive_setup
|
||||||
|
|
||||||
mov dx, isr_dos_main
|
mov dx, isr_dos_main
|
||||||
mov ax, 0x2521
|
mov ax, 0x2521
|
||||||
pushf
|
pushf
|
||||||
push cs
|
push cs
|
||||||
call isr_dos_main
|
call isr_dos_main
|
||||||
|
|
||||||
mov cx, WORD [0x80]
|
mov dl, 0x37
|
||||||
xor ch, ch
|
mov ah, 0x02
|
||||||
mov si, 0x81
|
int 0x21
|
||||||
.loop:
|
|
||||||
lodsb
|
|
||||||
call putc
|
|
||||||
loop .loop
|
|
||||||
|
|
||||||
cli
|
cli
|
||||||
.halt:
|
.halt:
|
||||||
hlt
|
hlt
|
||||||
jmp .halt
|
jmp .halt
|
||||||
|
|
||||||
|
|
||||||
kernel_end:
|
kernel_end:
|
||||||
|
Loading…
Reference in New Issue
Block a user