; CP/M-80 Version 3 -- Modular BIOS\r
\r
\r
- dseg\r
-\r
; Disk drive dispatching tables for linked BIOS\r
\r
public sd0,sd1,sd2,sd3\r
+ public sd4,sd5,sd6,sd7\r
\r
; Variables containing parameters passed by BDOS\r
\r
+ extrn @xdph\r
extrn @adrv,@rdrv\r
extrn @trk,@sect,@cnt\r
extrn @dma,@dbnk\r
; Utility routines in standard BIOS\r
\r
extrn ?wboot ; warm boot vector\r
- extrn ?pmsg ; print message @<HL> up to 00, saves <BC> & <DE>\r
- extrn ?pdec ; print binary number in <A> from 0 to 99.\r
+ extrn ?pmsg,pr.inln ; print message @<HL>, print inline message\r
+ extrn pr.crlf ; print <cr><lf>\r
extrn ?pderr ; print BIOS disk error header\r
extrn ?conin,?cono ; con in and out\r
extrn ?const ; get console status\r
bell equ 7\r
\r
\r
+ dseg\r
+\r
; Extended Disk Parameter Headers (XPDHs)\r
\r
dw sd$write\r
dw sd$write\r
dw sd$read\r
dw sd$login\r
- dw sd$init0\r
+ dw sd$init2\r
db 2,0 ; relative drive zero\r
sd2: dph 0,dpbsimhd512\r
\r
dw sd$write\r
dw sd$read\r
dw sd$login\r
- dw sd$init1\r
+ dw sd$init3\r
db 3,0 ; relative drive one\r
sd3: dph 0,dpbsimhd512\r
\r
\r
+ dw sd$write\r
+ dw sd$read\r
+ dw sd$login\r
+ dw sd$init4\r
+ db 4,0 ; relative drive zero\r
+sd4: dph 0,dpbsimhd512\r
+\r
+ dw sd$write\r
+ dw sd$read\r
+ dw sd$login\r
+ dw sd$init5\r
+ db 5,0 ; relative drive one\r
+sd5: dph 0,dpbsimhd512\r
+\r
+ dw sd$write\r
+ dw sd$read\r
+ dw sd$login\r
+ dw sd$init6\r
+ db 6,0 ; relative drive zero\r
+sd6: dph 0,dpbsimhd512\r
+\r
+ dw sd$write\r
+ dw sd$read\r
+ dw sd$login\r
+ dw sd$init7\r
+ db 7,0 ; relative drive one\r
+sd7: dph 0,dpbsimhd512\r
+\r
+\r
cseg ; DPB must be resident\r
\r
dpbsimhd512:\r
sd$init1:\r
sd$init2:\r
sd$init3:\r
+sd$init4:\r
+sd$init5:\r
+sd$init6:\r
+sd$init7:\r
ret ; all initialization done by drive 0\r
\r
\r
-\r
-\r
; This entry is called when a logical drive is about to\r
; be logged into for the purpose of density determination.\r
; It may adjust the parameters contained in the disk\r
; parameter header pointed at by <DE>\r
+;\r
+; absolute drive number in @adrv (8 bits) +0\r
+; relative drive number in @rdrv (8 bits) +1\r
\r
sd$login:\r
xor a\r
ld b,recv_msg_len ; max receive message len\r
call msg.recv\r
\r
-; ld a,(recv_msg_rc)\r
-; or a\r
+ ld a,(recv_msg_rc)\r
+ or a\r
+ ret z\r
+ ld hl,0\r
+ ld (@xdph),hl\r
ret ;\r
\r
\r
ld de,write$msg ; point at " Write "\r
ld c,2\r
rw$common:\r
+\r
ld hl,residual ; remainng sectors from last multi io?\r
ld a,(hl)\r
sub a,1\r
ld hl,@adrv ;address of arguments\r
ld bc,6\r
ldir\r
- ld (de),a\r
+ ld (de),a ;number of sectors\r
inc de\r
push de\r
ld e,(hl) ;dma address\r
tst 080h\r
jr z,prompt ; no fatfs error\r
\r
- ld hl,fsmsg\r
- call ?pmsg\r
+ call pr.inln\r
+ db 'FatFs: ',0\r
\r
ld hl,fr$msg0 ; point at first FatFs message\r
ld c,fr$msg$count\r
call pdecoded\r
\r
prompt:\r
- ld hl,error$msg\r
- call ?pmsg ; print "<BEL>, Retry (Y/N) ? "\r
+ call pr.inln\r
+ db ' Retry (Y/N) ? ',0\r
+\r
call u$conin$echo ; get operator response\r
cp 'Y'\r
jr z,retry ; Yes, then retry 10 more times\r
drvmsg_size equ $ - drvmsg0\r
drvmsg_count equ 3\r
\r
-fsmsg: db 'FatFs: ',0\r
\r
; table of pointers to error message strings\r
\r
fr$msg$size equ $ - fr$msg0\r
fr$msg$count equ 20\r
\r
-error$msg:\r
- db ' Retry (Y/N) ? ',0\r
-\r
-\r
end\r