File:  [RetroPC.NET] / np2 / fdd / diskdrv.c
Revision 1.1: download - view: text, annotated - select for diffs
Fri Oct 17 02:58:27 2003 JST (22 years ago) by yui
Branches: MAIN
CVS tags: HEAD
Initial revision

// フロッピーディスクの挿入延滞用のブリッヂ

#include	"compiler.h"
#include	"dosio.h"
#include	"sysmng.h"
#include	"pccore.h"
#include	"iocore.h"
#include	"fddfile.h"
#include	"diskdrv.h"


#define	DISK_DELAY	20			// (0.4sec)

	int		diskdrv_delay[4];							// ver0.26
	int		diskdrv_ro[4];								// ver0.26
	char	diskdrv_fname[4][MAX_PATH];					// ver0.26


void diskdrv_sethdd(BYTE drv, const char *fname) {

	char	*p;

	if (drv < 2) {
		p = np2cfg.hddfile[drv];
		if (fname) {
			file_cpyname(p, fname, sizeof(np2cfg.hddfile[0]));
		}
		else {
			p[0] = '\0';
		}
		sysmng_update(SYS_UPDATEHDD | SYS_UPDATECFG);
	}
}

void diskdrv_setfdd(BYTE drv, const char *fname, int readonly) {

	if (drv < 4) {
		fdd_eject(drv);
		diskdrv_delay[drv] = 0;
		diskdrv_fname[drv][0] = '\0';
		fdc.stat[drv] = FDCRLT_IC0 | FDCRLT_IC1 | 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]));
		}
		sysmng_update(SYS_UPDATEFDD);
	}
}

void diskdrv_callback(void) {

	BYTE	drv;

	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]);
				diskdrv_fname[drv][0] = '\0';
				fdc.stat[drv] = FDCRLT_IC0 | FDCRLT_IC1 | drv;
				fdc_interrupt();
				sysmng_update(SYS_UPDATEFDD);
			}
		}
	}
}


RetroPC.NET-CVS <cvs@retropc.net>