--- np2/fdd/diskdrv.c 2004/03/07 07:51:26 1.6 +++ np2/fdd/diskdrv.c 2005/03/19 18:54:58 1.10 @@ -13,13 +13,13 @@ int diskdrv_delay[4]; int diskdrv_ro[4]; - char diskdrv_fname[4][MAX_PATH]; + OEMCHAR diskdrv_fname[4][MAX_PATH]; -void diskdrv_sethdd(REG8 drv, const char *fname) { +void diskdrv_sethdd(REG8 drv, const OEMCHAR *fname) { UINT num; - char *p; + OEMCHAR *p; int leng; num = drv & 0x0f; @@ -28,14 +28,14 @@ void diskdrv_sethdd(REG8 drv, const char if (!(drv & 0x20)) { // SASI or IDE if (num < 2) { p = np2cfg.sasihdd[num]; - leng = sizeof(np2cfg.sasihdd[0]); + leng = NELEMENTS(np2cfg.sasihdd[0]); } } #if defined(SUPPORT_SCSI) else { // SCSI if (num < 4) { p = np2cfg.scsihdd[num]; - leng = sizeof(np2cfg.scsihdd[0]); + leng = NELEMENTS(np2cfg.scsihdd[0]); } } #endif @@ -50,19 +50,32 @@ void diskdrv_sethdd(REG8 drv, const char } } -void diskdrv_setfdd(REG8 drv, const char *fname, int readonly) { +void diskdrv_readyfdd(REG8 drv, const OEMCHAR *fname, int readonly) { + + if ((drv < 4) && (fdc.equip & (1 << drv))) { + if ((fname != NULL) && (fname[0] != '\0')) { + fdd_set(drv, fname, FTYPE_NONE, readonly); + fdc.stat[drv] = FDCRLT_AI | drv; + fdc_interrupt(); + sysmng_update(SYS_UPDATEFDD); + } + } +} + +void diskdrv_setfdd(REG8 drv, const OEMCHAR *fname, int readonly) { if ((drv < 4) && (fdc.equip & (1 << drv))) { fdd_eject(drv); diskdrv_delay[drv] = 0; diskdrv_fname[drv][0] = '\0'; - fdc.stat[drv] = FDCRLT_IC0 | FDCRLT_IC1 | FDCRLT_NR | drv; + fdc.stat[drv] = FDCRLT_AI | FDCRLT_NR | drv; fdc_interrupt(); if (fname) { diskdrv_delay[drv] = DISK_DELAY; diskdrv_ro[drv] = readonly; - file_cpyname(diskdrv_fname[drv], fname, sizeof(diskdrv_fname[0])); + file_cpyname(diskdrv_fname[drv], fname, + NELEMENTS(diskdrv_fname[0])); } sysmng_update(SYS_UPDATEFDD); } @@ -75,12 +88,9 @@ void diskdrv_callback(void) { for (drv=0; drv<4; drv++) { if (diskdrv_delay[drv]) { diskdrv_delay[drv]--; - if ((!diskdrv_delay[drv]) && (diskdrv_fname[drv][0])) { - fdd_set(drv, diskdrv_fname[drv], FTYPE_NONE, diskdrv_ro[drv]); + if (!diskdrv_delay[drv]) { + diskdrv_readyfdd(drv, diskdrv_fname[drv], diskdrv_ro[drv]); diskdrv_fname[drv][0] = '\0'; - fdc.stat[drv] = FDCRLT_IC0 | FDCRLT_IC1 | drv; - fdc_interrupt(); - sysmng_update(SYS_UPDATEFDD); } } }