diff --git a/boot/fat32.asm b/boot/fat32.asm index d1523ae..0f1b9dd 100644 --- a/boot/fat32.asm +++ b/boot/fat32.asm @@ -28,23 +28,7 @@ init: xor ax, ax rep movsw jmp 0x0:main -msg: pop si -mloop: lodsb - test al, al - jz mend - mov ah, 0x0e - mov bx, 7 - int 0x10 - jmp mloop -mend: push si - ret - -dskerr: call msg - db "DISK", 0 -err: call msg - db "ERR", 0x0A, 0x0D, 0 -hlt: hlt - jmp hlt + %include "inc/booterr.asm" ; offsets relative to FS readd: ; add offset of cluster data area to DX:AX @@ -69,7 +53,7 @@ readf: ; add offset to FAT table to DX:AX readp: ; read sector DX:AX from partition add ax, word [bp+bpb_po] adc dx, word [bp+bpb_po+2] - jc err + jc dskerr read_: ; read sector DX:AX from disk ; qword sector number DX:AX push cs @@ -99,6 +83,9 @@ read_: ; read sector DX:AX from disk ret + ; error handling for disk errors +dskerr: call errcll + next: ; Advances DX:AX to next FAT entry push ax push bx @@ -181,7 +168,7 @@ loop: add si, 0x20 mov al, [si] ; unallocated direntry test al, al - jz end + jz fserr ; deleted files cmp al, 0xE2 je loop @@ -197,7 +184,7 @@ loadr: mov ax, 2 jmp load loadf: call search - jne end + jne fserr mov ax, [si+0x1A] mov dx, [si+0x14] jmp load @@ -228,9 +215,8 @@ main: mov bp, bpb jmp 0:0x7C00 -end: call msg - db "DIR", 0 - jmp err + ; error handling for file not found +fserr: call errcll ; Padding and signature times (0x1FE - ($-$$)) db 0 diff --git a/inc/booterr.asm b/inc/booterr.asm new file mode 100644 index 0000000..8a8af3a --- /dev/null +++ b/inc/booterr.asm @@ -0,0 +1,18 @@ +errcll: pop dx +errjmp: call dmpdx +hlt: hlt + jmp hlt +dmpdx: xor bx, bx + mov ah, 0x0e + mov cl, 4 + call dmpdx1 +dmpdx1: call dmpdx2 +dmpdx2: mov al, dh + shl dx, cl + shr al, cl + add al, 0x30 + cmp al, 0x3a + jl dmpdx3 + add al, 7 +dmpdx3: int 0x10 + ret