summaryrefslogtreecommitdiff
path: root/Kernel/BlkDev/DskFDC.HC
diff options
context:
space:
mode:
authorHarley Travis <harleytravis123@outlook.com>2026-06-27 14:40:19 -0500
committerHarley Travis <harleytravis123@outlook.com>2026-06-27 14:40:19 -0500
commit93ddde6d5ec9e66e488acf7e7529f1fb796417bd (patch)
tree0fbd3417c183882881210a5d696fcce756ba4b74 /Kernel/BlkDev/DskFDC.HC
parent6d640d9a3d1ef67675aaa8b1a21d8fdd986ad97a (diff)
downloadtempleos-floppy-driver-93ddde6d5ec9e66e488acf7e7529f1fb796417bd.tar.gz
Update FDCReadBlks
FDCReadBlks was patched to use 64-bit variables, turn the motor on and off, use the correct variable for the head count, and unlock the block device before returning.
Diffstat (limited to 'Kernel/BlkDev/DskFDC.HC')
-rw-r--r--Kernel/BlkDev/DskFDC.HC15
1 files changed, 12 insertions, 3 deletions
diff --git a/Kernel/BlkDev/DskFDC.HC b/Kernel/BlkDev/DskFDC.HC
index 874873b..73102c6 100644
--- a/Kernel/BlkDev/DskFDC.HC
+++ b/Kernel/BlkDev/DskFDC.HC
@@ -335,16 +335,21 @@ U0 FDCRBlks(CDrv *dv,U8 *buf,I64 blk,I64 cnt)
U0 FDCReadBlks(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);
+ FDCMotor(bd,ON);
+
retry:
- if (retries) throw('BlkDev');
+ if (retries) {
+ FDCMotor(bd,OFF);
+ throw('BlkDev');
+ }
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=FDCReadData(bd,c,h,s,s+cnt-1);
@@ -355,6 +360,10 @@ U0 FDCReadBlks(CBlkDev *bd,U8 *buf,I64 blk,I64 cnt)
}
MemCpy(buf,&FDC_DMA,cnt*bd->blk_size);
+
+ FDCMotor(bd,OFF);
+
+ if (unlock) BlkDevUnlock(bd);
}
U0 FDCWBlks(CDrv *dv,U8 *buf,I64 blk,I64 cnt)