X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FStorage%2FFDD%2Ffdd.c;h=5c2848ffee5a3ded0230e7e8761906cee2641c67;hb=209b173fbcd7bcadd5b3546a2f773312d668c5a1;hp=a7b20f7d763edbe4681751478e9b6ca720525180;hpb=e6795eb552a6be88b7870dae14a958ab391bfae8;p=tpg%2Facess2.git diff --git a/Modules/Storage/FDD/fdd.c b/Modules/Storage/FDD/fdd.c index a7b20f7d..5c2848ff 100644 --- a/Modules/Storage/FDD/fdd.c +++ b/Modules/Storage/FDD/fdd.c @@ -107,7 +107,7 @@ Uint FDD_ReadSectors(Uint64 SectorAddr, Uint Count, void *Buffer, Uint Disk); int FDD_ReadSector(Uint32 disk, Uint64 lba, void *Buffer); int FDD_WriteSector(Uint32 Disk, Uint64 LBA, void *Buffer); // --- Helpers -void FDD_IRQHandler(int Num); +void FDD_IRQHandler(int Num, void *Ptr); inline void FDD_WaitIRQ(); void FDD_SensInt(int base, Uint8 *sr0, Uint8 *cyl); int FDD_int_SendByte(int base, Uint8 Byte); @@ -172,7 +172,7 @@ int FDD_Install(char **Arguments) } // Install IRQ6 Handler - IRQ_AddHandler(6, FDD_IRQHandler); + IRQ_AddHandler(6, FDD_IRQHandler, NULL); // Ensure the FDD version is 0x90 { @@ -676,7 +676,7 @@ int FDD_int_GetDims(int type, int lba, int *c, int *h, int *s, int *spt) * \fn void FDD_IRQHandler(int Num) * \brief Handles IRQ6 */ -void FDD_IRQHandler(int Num) +void FDD_IRQHandler(int Num, void *Ptr) { gbFDD_IrqFired = 1; } @@ -707,8 +707,12 @@ int FDD_int_SendByte(int base, Uint8 byte) { tTime end = now() + 1000; // 1s - while( (inb(base + PORT_MAINSTATUS) & 0xC0) != 0x80 && now() < end ) + while( (inb(base + PORT_MAINSTATUS) & 0x80) != 0x80 && now() < end ) Threads_Yield(); //Delay + + if( inb(base + PORT_MAINSTATUS) & 0x40 ) { + Log_Warning("FDD", "FDD_int_SendByte: DIO set, is this ok?"); + } if( now() < end ) { @@ -731,9 +735,13 @@ int FDD_int_GetByte(int base, Uint8 *value) { tTime end = now() + 1000; // 1s - while( (inb(base + PORT_MAINSTATUS) & 0xd0) != 0xd0 && now() < end ) + while( (inb(base + PORT_MAINSTATUS) & 0x80) != 0x80 && now() < end ) Threads_Yield(); + if( !(inb(base + PORT_MAINSTATUS) & 0x40) ) { + Log_Warning("FDD", "FDD_int_GetByte: DIO unset, is this ok?"); + } + if( now() < end ) { Uint8 tmp = inb(base + PORT_DATA);