From b6ba4cafe95ee3e6eca548ea61f295e2899834d0 Mon Sep 17 00:00:00 2001 From: Harley Travis Date: Sat, 27 Jun 2026 11:23:35 -0500 Subject: Update FDCReadByte and FDCSendByte FDCReadByte and FDCSendByte have been updated to store the MSR contents into a separate variable for readability. They also now Yield; when polling to prevent the OS from feezing. --- Kernel/BlkDev/DskFDC.HC | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'Kernel/BlkDev/DskFDC.HC') 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; } } -- cgit v1.2.3