|
|
| version 1.1, 2003/10/16 17:58:27 | version 1.11, 2005/03/22 04:03:15 |
|---|---|
| Line 5 | Line 5 |
| #include "sysmng.h" | #include "sysmng.h" |
| #include "pccore.h" | #include "pccore.h" |
| #include "iocore.h" | #include "iocore.h" |
| #include "fddfile.h" | |
| #include "diskdrv.h" | #include "diskdrv.h" |
| #include "fddfile.h" | |
| #define DISK_DELAY 20 // (0.4sec) | #define DISK_DELAY 20 // (0.4sec) |
| int diskdrv_delay[4]; // ver0.26 | int diskdrv_delay[4]; |
| int diskdrv_ro[4]; // ver0.26 | OEMCHAR diskdrv_fname[4][MAX_PATH]; |
| char diskdrv_fname[4][MAX_PATH]; // ver0.26 | UINT diskdrv_ftype[4]; |
| int diskdrv_ro[4]; | |
| void diskdrv_sethdd(BYTE drv, const char *fname) { | |
| void diskdrv_sethdd(REG8 drv, const OEMCHAR *fname) { | |
| char *p; | |
| UINT num; | |
| if (drv < 2) { | OEMCHAR *p; |
| p = np2cfg.hddfile[drv]; | int leng; |
| num = drv & 0x0f; | |
| p = NULL; | |
| leng = 0; | |
| if (!(drv & 0x20)) { // SASI or IDE | |
| if (num < 2) { | |
| p = np2cfg.sasihdd[num]; | |
| leng = NELEMENTS(np2cfg.sasihdd[0]); | |
| } | |
| } | |
| #if defined(SUPPORT_SCSI) | |
| else { // SCSI | |
| if (num < 4) { | |
| p = np2cfg.scsihdd[num]; | |
| leng = NELEMENTS(np2cfg.scsihdd[0]); | |
| } | |
| } | |
| #endif | |
| if (p) { | |
| if (fname) { | if (fname) { |
| file_cpyname(p, fname, sizeof(np2cfg.hddfile[0])); | file_cpyname(p, fname, leng); |
| } | } |
| else { | else { |
| p[0] = '\0'; | p[0] = '\0'; |
| Line 32 void diskdrv_sethdd(BYTE drv, const char | Line 51 void diskdrv_sethdd(BYTE drv, const char |
| } | } |
| } | } |
| void diskdrv_setfdd(BYTE drv, const char *fname, int readonly) { | void diskdrv_readyfddex(REG8 drv, const OEMCHAR *fname, |
| UINT ftype, int readonly) { | |
| if ((drv < 4) && (fdc.equip & (1 << drv))) { | |
| if ((fname != NULL) && (fname[0] != '\0')) { | |
| fdd_set(drv, fname, ftype, readonly); | |
| fdc.stat[drv] = FDCRLT_AI | drv; | |
| fdc_interrupt(); | |
| sysmng_update(SYS_UPDATEFDD); | |
| } | |
| } | |
| } | |
| void diskdrv_setfddex(REG8 drv, const OEMCHAR *fname, | |
| UINT ftype, int readonly) { | |
| if (drv < 4) { | if ((drv < 4) && (fdc.equip & (1 << drv))) { |
| fdd_eject(drv); | fdd_eject(drv); |
| diskdrv_delay[drv] = 0; | diskdrv_delay[drv] = 0; |
| diskdrv_fname[drv][0] = '\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(); | fdc_interrupt(); |
| if (fname) { | if (fname) { |
| diskdrv_delay[drv] = DISK_DELAY; | diskdrv_delay[drv] = DISK_DELAY; |
| diskdrv_ftype[drv] = ftype; | |
| diskdrv_ro[drv] = readonly; | 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); | sysmng_update(SYS_UPDATEFDD); |
| } | } |
| Line 52 void diskdrv_setfdd(BYTE drv, const char | Line 87 void diskdrv_setfdd(BYTE drv, const char |
| void diskdrv_callback(void) { | void diskdrv_callback(void) { |
| BYTE drv; | REG8 drv; |
| for (drv=0; drv<4; drv++) { | for (drv=0; drv<4; drv++) { |
| if (diskdrv_delay[drv]) { | if (diskdrv_delay[drv]) { |
| diskdrv_delay[drv]--; | diskdrv_delay[drv]--; |
| if ((!diskdrv_delay[drv]) && (diskdrv_fname[drv][0])) { | if (!diskdrv_delay[drv]) { |
| fdd_set(drv, diskdrv_fname[drv], FTYPE_NONE, diskdrv_ro[drv]); | diskdrv_readyfddex(drv, diskdrv_fname[drv], |
| diskdrv_ftype[drv], diskdrv_ro[drv]); | |
| diskdrv_fname[drv][0] = '\0'; | diskdrv_fname[drv][0] = '\0'; |
| fdc.stat[drv] = FDCRLT_IC0 | FDCRLT_IC1 | drv; | |
| fdc_interrupt(); | |
| sysmng_update(SYS_UPDATEFDD); | |
| } | } |
| } | } |
| } | } |