Disk read refactor

pull/13/head
E. Almqvist 3 years ago
parent 7e2743af96
commit 219164c7bb
  1. 45
      src/bios/disk.asm

@ -1,18 +1,39 @@
;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 al, dh ; read dh amount of sectors
mov ch, 0x00 ; CYLINDER
mov dh, 0x00 ; HEAD
mov cl, 0x02 ; SECTOR
mov ch, 0x00 ; read from first cylinder
mov dh, 0x00 ; head
int BIOS_DISK_INT ; interrupt
; data pointer: es:bx (standard)
int BIOS_DISK_INT ; do the interrupt
jc read_error ; if flag is set then jump to error
; 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
@ -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

Loading…
Cancel
Save