diff --git a/src/bios/disk.asm b/src/bios/disk.asm index c72dfe1..6a3acbe 100644 --- a/src/bios/disk.asm +++ b/src/bios/disk.asm @@ -1,21 +1,42 @@ +;disk_read: +; push dx +; mov ah, BIOS_DISK_READ +; mov al, dh ; sector count +; mov cl, 0x02 ; second sector (after bootsection) +; +; mov ch, 0x00 ; read from first cylinder +; mov dh, 0x00 ; head +; +; ; data pointer: es:bx (standard) +; int BIOS_DISK_INT ; do the interrupt +; jc read_error ; if flag is set then jump to error +; +; pop dx +; cmp al, dh +; jne sector_error +; +; ret + disk_read: - push dx - mov ah, BIOS_DISK_READ - mov al, dh ; sector count - mov cl, 0x02 + push dx ; store dx on stack so that we can compare later + + mov ah, BIOS_DISK_READ ; specify function - mov ch, 0x00 ; read from first cylinder - mov dh, 0x00 ; head + mov al, dh ; read dh amount of sectors + mov ch, 0x00 ; CYLINDER + mov dh, 0x00 ; HEAD + mov cl, 0x02 ; SECTOR - ; data pointer: es:bx (standard) - int BIOS_DISK_INT ; do the interrupt - jc read_error ; if flag is set then jump to error + int BIOS_DISK_INT ; interrupt + + ; Error checks + jc read_error ; carry flag set -> error pop dx - cmp al, dh + cmp dh, al ; if dh != al then error jne sector_error - - ret + + ret sector_error: mov bx, sector_error_string @@ -31,5 +52,5 @@ read_error: disk_loop: jmp $ -read_error_string: db "Disk read error", ASCII_END -sector_error_string: db "Invalid number of sectors read", ASCII_END +read_error_string: db "Disk read error!", ASCII_END +sector_error_string: db "Invalid number of sectors read!", ASCII_END