summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Kernel/BlkDev/DskFDC.HC17
1 files changed, 13 insertions, 4 deletions
diff --git a/Kernel/BlkDev/DskFDC.HC b/Kernel/BlkDev/DskFDC.HC
index 73102c6..cf06939 100644
--- a/Kernel/BlkDev/DskFDC.HC
+++ b/Kernel/BlkDev/DskFDC.HC
@@ -387,21 +387,26 @@ U0 FDCWBlks(CDrv *dv,U8 *buf,I64 blk,I64 cnt)
U0 FDCWriteBlks(CBlkDev *bd,U8 *buf,I64 blk,I64 cnt)
{
I64 retries=3;
- U8 c,h,s,st0;
+ U64 c,h,s,st0;
Bool unlock=BlkDevLock(bd);
if (Bt(InU8(bd->base0+FDC_STAT_A),1))
throw('BlkDev');
+ FDCMotor(bd,ON);
+
retry:
- if (!retries) throw('BlkDev');
+ if (!retries) {
+ FDCMotor(bd,OFF);
+ throw('BlkDev');
+ }
- MemCpy(&FDC_DMA,buf,cnt);
+ MemCpy(&FDC_DMA,buf,cnt*bd->blk_size);
FDCSelDrv(bd);
c=blk/(bd->heads*bd->spt);
- h=blk/bd->spt%heads;
+ h=blk/bd->spt%bd->heads;
s=blk%bd->spt+1;
st0=FDCWriteData(bd,c,h,s,s+cnt-1);
@@ -410,6 +415,10 @@ U0 FDCWriteBlks(CBlkDev *bd,U8 *buf,I64 blk,I64 cnt)
retries-=1;
goto retry;
}
+
+ FDCMotor(bd,OFF);
+
+ if (unlock) BlkDevUnlock(bd);
}
U8 FDCReadId(CBlkDev *bd,Bool hd)