\r
; Extended Disk Parameter Headers (XPDHs)\r
\r
+ ; dph translate$table, - disk parameter header\r
+ ; disk$parameter$block,\r
+ ; checksum$size, (optional)\r
+ ; alloc$size (optional)\r
+\r
dw sd$write\r
dw sd$read\r
dw sd$login\r
\r
cseg ; DPB must be resident\r
\r
+ ; dpb physical$sector$size, - disk parameter block\r
+ ; physical$sectors$per$track,\r
+ ; number$tracks,\r
+ ; block$size,\r
+ ; number$dir$entries,\r
+ ; track$offset,\r
+ ; checksum$vec$size (optional)\r
+\r
dpbsimhd512:\r
- dpb 512,8,2048,4096,1024,6\r
+ dpb 512,8,2048,4096,1024,6,8100h\r
\r
\r
dseg ; rest is banked\r
\r
call u$conin$echo ; get operator response\r
cp 'Y'\r
- jr z,retry ; Yes, then retry 10 more times\r
+ jr z,retry ; Yes, then retry once more\r
\r
hard$error:\r
; otherwise,\r
xor a\r
ld (residual),a\r
-\r
- ld a,1 ; return hard error to BDOS\r
+ ld a,(recv_msg_rc) ; return hard error to BDOS\r
+ ld c,0ffh\r
+ cp 6 ; media changed?\r
+ jr z,e_exit\r
+ ld c,2\r
+ cp 5 ; disk read only?\r
+ jr z,e_exit\r
+ dec c\r
+e_exit:\r
+ ld a,c\r
ret\r
\r
-cancel: ; here to abort job\r
- jp ?wboot ; leap directly to warmstart vector\r
-\r
-\r
-\r
; Print message to error code in A\r
;\r
\r
write$msg:\r
db ', Write, ',0\r
\r
+ ; general driver errors\r
+\r
drvmsg0: db 'Unknown Error, ',0\r
drvmsg1: db 'Invalid Parameter(s), ',0\r
drvmsg2: db 'Invalid Drive, ',0\r
drvmsg3: db 'Bus Timeout, ',0\r
+drvmsg4: db 'Access beyond disk size, ',0\r
+drvmsg5: db 'Write protected, ',0\r
+drvmsg6: db 'No media, ',0\r
drvmsg_size equ $ - drvmsg0\r
-drvmsg_count equ 3\r
-\r
+drvmsg_count equ 7\r
\r
-; table of pointers to error message strings\r
+ ; fat file system errors\r
\r
fr$msg0: db 'Unknown Error,',0\r
fr$msg1: db 'DISK_ERR,',0\r
fr$msg19: db 'FR_INVALID_PARAMETER,',0\r
fr$msg20: db 'short read/write,',0\r
fr$msg$size equ $ - fr$msg0\r
-fr$msg$count equ 20\r
+fr$msg$count equ 21\r
\r
end\r