File:  [RetroPC.NET] / xmil / nds / fdd / fddfile.c
Revision 1.1: download - view: text, annotated - select for diffs
Tue Mar 24 22:52:52 2009 JST (16 years, 7 months ago) by yui
Branches: MAIN
CVS tags: HEAD
add nds-win32 simulation project

#include	"compiler.h"
#include	"pccore.h"
#include	"iocore.h"
#include	"fddfile.h"
#include	"fdd_2d.h"
#include	"fdd_d88.h"


	_FDDFILE	fddfile[MAX_FDDFILE];


static REG8 dummyseek(FDDFILE fdd, REG8 media, UINT track) {

	(void)fdd;
	(void)media;
	(void)track;
	return(FDDSTAT_SEEKERR);
}

static REG8 dummyreadp(FDDFILE fdd, REG8 media, UINT track, REG8 sc,
												void **ptr, UINT *size) {

	(void)fdd;
	(void)media;
	(void)track;
	(void)sc;
	(void)ptr;
	(void)size;
	return(FDDSTAT_RECNFND);
}

static REG8 dummywrite(FDDFILE fdd, REG8 media, UINT track, REG8 sc,
												const UINT8 *ptr, UINT size) {

	(void)fdd;
	(void)media;
	(void)track;
	(void)sc;
	(void)ptr;
	(void)size;
	return(FDDSTAT_RECNFND | FDDSTAT_WRITEFAULT);
}

static REG8 dummycrc(FDDFILE fdd, REG8 media, UINT track, UINT num,
												UINT8 *ptr) {

	(void)fdd;
	(void)media;
	(void)track;
	(void)num;
	(void)ptr;
	return(FDDSTAT_RECNFND);
}

static void setempty(FDDFILE fdd) {

	ZeroMemory(fdd, sizeof(_FDDFILE));
	fdd->seek = dummyseek;
	fdd->readp = dummyreadp;
	fdd->write = dummywrite;
	fdd->crc = dummycrc;
}


// ----

void fddfile_initialize(void) {

	UINT	i;

	for (i=0; i<MAX_FDDFILE; i++) {
		setempty(fddfile + i);
	}
}

BRESULT fddfile_diskready(REG8 drv) {

	if ((drv >= MAX_FDDFILE) || (fddfile[drv].type == DISKTYPE_NOTREADY)) {
		return(FALSE);
	}
	return(TRUE);
}

BRESULT fddfile_diskprotect(REG8 drv) {

	if ((drv >= MAX_FDDFILE) || (!fddfile[drv].protect)) {
		return(FALSE);
	}
	return(TRUE);
}

BRESULT fddfile_set(REG8 drv, UINT ftype, const UINT8 *romptr, UINT romsize) {

	FDDFILE	fdd;
	BRESULT	r;

	if (drv >= MAX_FDDFILE) {
		return(FAILURE);
	}
	fddfile_eject(drv);
	fdd = fddfile + drv;
	switch(ftype) {
		case FTYPE_BETA:
			r = fdd2d_set(fdd, romptr, romsize);
			break;

		case FTYPE_D88:
			r = fddd88_set(fdd, romptr, romsize);
			break;

		default:
			r = FAILURE;
			break;
	}
	if (r == SUCCESS) {
		fdd->romptr = romptr;
		fdd->romsize = romsize;
		fdd->ftype = ftype;
		fdd->protect = TRUE;
	}
	return(r);
}

void fddfile_eject(REG8 drv) {

	FDDFILE	fdd;

	if (drv >= MAX_FDDFILE) {
		return;
	}
	fdd = fddfile + drv;
	switch(fdd->type) {
		case DISKTYPE_BETA:
			fdd2d_eject(fdd);

		case DISKTYPE_D88:
			fddd88_eject(fdd);
	}
	setempty(fdd);
}


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