summaryrefslogtreecommitdiff
path: root/Kernel/BlkDev/DskFDC.HC
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/BlkDev/DskFDC.HC')
-rw-r--r--Kernel/BlkDev/DskFDC.HC12
1 files changed, 8 insertions, 4 deletions
diff --git a/Kernel/BlkDev/DskFDC.HC b/Kernel/BlkDev/DskFDC.HC
index 9b14e4e..53cdccb 100644
--- a/Kernel/BlkDev/DskFDC.HC
+++ b/Kernel/BlkDev/DskFDC.HC
@@ -61,36 +61,40 @@ U8 FDCReadByte(CBlkDev *bd)
{
// Read byte from FDC.
- U8 byte; // The byte read
+ U64 byte,msr; // The byte read, and the MSR contents
F64 timeout; // Timeout variable
timeout = tS()+3.0; // 3 second timeout
while (TRUE) {
- if (InU8(bd->base0+FDC_MSR_DSR)>>6==3) {
+ msr=InU8(bd->base0+FDC_MSR_DSR);
+ if (msr>>6==3) {
byte=InU8(bd->base0+FDC_DATA);
return byte;
}
if (tS()>timeout) {
throw('BlkDev');
}
+ Yield;
}
}
U0 FDCSendByte(CBlkDev *bd,U8 byte)
{
// Send byte to FDC.
-
+ U64 msr; // MSR contents
F64 timeout; // Timeout variable
timeout=tS()+3.0; // 3 second timeout
while (TRUE) {
- if (InU8(bd->base0+FDC_MSR_DSR)>>6==2) {
+ msr=InU8(bd->base0+FDC_MSR_DSR);
+ if (msr>>6==2) {
OutU8(bd->base0+FDC_DATA,byte);
return;
}
if (tS()>timeout) {
throw('BlkDev');
}
+ Yield;
}
}