summaryrefslogtreecommitdiff
path: root/src/bootloader/bios_functions/bios_disk.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/bootloader/bios_functions/bios_disk.asm')
-rw-r--r--src/bootloader/bios_functions/bios_disk.asm38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/bootloader/bios_functions/bios_disk.asm b/src/bootloader/bios_functions/bios_disk.asm
new file mode 100644
index 0000000..28fc74d
--- /dev/null
+++ b/src/bootloader/bios_functions/bios_disk.asm
@@ -0,0 +1,38 @@
+bios_disk:
+.load_sectors:
+pusha
+mov es, dx
+
+mov ah, 0x02 ; read disc sectors
+mov ch, 0x00 ; track 0
+mov dh, 0x00 ; head 0
+mov dl, [stage0.boot_device]
+
+int 0x13
+
+jc .failed
+
+mov ah, 0
+popa
+ret
+
+.failed:
+
+mov bx, .loadsectors_error
+mov cx, 0
+call bios_print
+
+push 0
+mov al, ah
+mov ah, 0 ; you need to clean up the bios print function!
+push ax
+mov cx, 1
+mov bx, sp
+call bios_print
+
+
+mov ah, 1
+popa
+ret
+
+.loadsectors_error: db "Error loading sectors: ", 0