Disk read refactor

pull/13/head
E. Almqvist 3 years ago
parent 7e2743af96
commit 219164c7bb
  1. 49
      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: disk_read:
push dx push dx ; store dx on stack so that we can compare later
mov ah, BIOS_DISK_READ
mov al, dh ; sector count mov ah, BIOS_DISK_READ ; specify function
mov cl, 0x02
mov ch, 0x00 ; read from first cylinder mov al, dh ; read dh amount of sectors
mov dh, 0x00 ; head mov ch, 0x00 ; CYLINDER
mov dh, 0x00 ; HEAD
mov cl, 0x02 ; SECTOR
; data pointer: es:bx (standard) int BIOS_DISK_INT ; interrupt
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 pop dx
cmp al, dh cmp dh, al ; if dh != al then error
jne sector_error jne sector_error
ret ret
sector_error: sector_error:
mov bx, sector_error_string mov bx, sector_error_string
@ -31,5 +52,5 @@ read_error:
disk_loop: disk_loop:
jmp $ jmp $
read_error_string: db "Disk read error", ASCII_END read_error_string: db "Disk read error!", ASCII_END
sector_error_string: db "Invalid number of sectors read", ASCII_END sector_error_string: db "Invalid number of sectors read!", ASCII_END

Loading…
Cancel
Save