--- np2/bios/bios12.c 2003/12/12 01:04:39 1.3 +++ np2/bios/bios12.c 2011/01/15 18:04:42 1.7 @@ -3,16 +3,18 @@ #include "pccore.h" #include "iocore.h" #include "bios.h" +#include "biosmem.h" #define baseport 0x00c8 void bios0x12(void) { - BYTE stat; - BYTE result; - BYTE *p; - BYTE drv; + UINT8 status; + UINT8 result; + UINT8 *p; + UINT8 drv; + UINT8 drvbit; // TRACE_("BIOS", 0x12); iocore_out8(0x08, 0x20); @@ -20,16 +22,16 @@ void bios0x12(void) { iocore_out8(0x00, 0x20); } - stat = iocore_inp8(baseport); + status = iocore_inp8(baseport); while(1) { - if (!(stat & FDCSTAT_CB)) { - if ((stat & (FDCSTAT_RQM | FDCSTAT_DIO)) != FDCSTAT_RQM) { + if (!(status & FDCSTAT_CB)) { + if ((status & (FDCSTAT_RQM | FDCSTAT_DIO)) != FDCSTAT_RQM) { break; } iocore_out8(baseport+2, 0x08); - stat = iocore_inp8(baseport); + status = iocore_inp8(baseport); } - if ((stat & (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) + if ((status & (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) != (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) { break; } @@ -41,6 +43,7 @@ void bios0x12(void) { break; } drv = result & 3; + drvbit = 0x10 << drv; if (result & (FDCRLT_IC1 | FDCRLT_SE)) { p = mem + 0x005d8 + (drv * 2); } @@ -49,13 +52,14 @@ void bios0x12(void) { } while(1) { *p++ = result; - stat = iocore_inp8(baseport); - if ((stat & (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) + status = iocore_inp8(baseport); + if ((status & (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) != (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) { break; } result = iocore_inp8(baseport+2); } + mem[0x0055f] |= drvbit; } }