1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;; Miguel's FoolOS Helper Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;disk_load
;
[bits 16]
DISK_LOAD_HANG_MSG:
db " D",0
;disk_load routune (load dh sectors from drive dl to es:bx)
disk_load:
pusha
; mov ah,0x41
; mov bx,0x55AA
; ;mov dl,[disk]
; int 0x13
; jne disk_load_hang
;mov ah,0x42
; llea si,[lbaadr]
; int 0x13
; cmp ah,0x00 ; check for error
; jne disk_load_hang
; check if LBA is supported
pusha
mov ah,0x41
mov bx,0x55aa
int 0x13
jnc disk_load_lba
popa
mov ah,0x02 ;BIOS read sector func
mov al,dh ;read dh sectors (amount)
mov ch,0x00 ;cyl 0
mov dh,0x00 ;head 0
mov cl,0x02 ;start at sector 2
;
int 0x13 ;bios interrupt
; jc disk_load_hang
popa
ret
disk_load_lba:
popa
xor ah,ah
mov ah,0x42
lea si,[lbaadr]
int 0x13
jc skip_print
mov bx, 0x1000
call print_string
skip_print:
popa
ret
lbaadr:
dw 0x10
dw 52
dw 0x1000
dw 0
dd 1
dd 0
;
;lbaadr:
; dw 0x0010 ; 2byte, reserved - size of packet.
; dw 0x0010 ; WORD 2bytes nr of blocks read.
; dd 0x00001000 ; DWORD 4bytes Transfer buffer
; ; dq 0x0000000034009605 ; QWORD 4bytes,32bit LBA address
; dq 0x0000000000000000
|