File:  [RetroPC.NET] / xmil / io / memio.c
Revision 1.6: download - view: text, annotated - select for diffs
Tue Jun 3 05:07:31 2008 JST (17 years, 4 months ago) by yui
Branches: MAIN
CVS tags: HEAD
change to c style comment

#include	"compiler.h"
#include	"dosio.h"
#include	"z80core.h"
#include	"pccore.h"
#include	"iocore.h"
#include	"defipl.res"


	UINT8	biosmem[0x8000];
#if defined(SUPPORT_BANKMEM)
	UINT8	bankmem[16][0x8000];
#endif


void memio_update(void) {

#if defined(SUPPORT_BANKMEM)
	if (iocore.s.bankmem & 0x10) {
#endif
		if (!(iocore.s.ppib & 0x10)) {
			z80core.e.memread = biosmem;
		}
		else {
			z80core.e.memread = mainmem;
		}
		z80core.e.memwrite = mainmem;
#if defined(SUPPORT_BANKMEM)
	}
	else {
		z80core.e.memread = bankmem[iocore.s.bankmem & 15];
		z80core.e.memwrite = bankmem[iocore.s.bankmem & 15];
	}
#endif
}

#if defined(SUPPORT_BANKMEM)
void IOOUTCALL memio_bank_o(UINT port, REG8 dat) {

	iocore.s.bankmem = dat;
	memio_update();
	(void)port;
}

REG8 IOINPCALL memio_bank_i(UINT port) {

	(void)port;
	return(iocore.s.bankmem);
}
#endif

void IOOUTCALL memio_rom(UINT port, REG8 dat) {

	iocore.s.ppib &= ~0x10;
#if defined(SUPPORT_BANKMEM)
	if (iocore.s.bankmem & 0x10) {
#endif
		z80core.e.memread = biosmem;
#if defined(SUPPORT_BANKMEM)
	}
#endif
	(void)port;
	(void)dat;
}

void IOOUTCALL memio_ram(UINT port, REG8 dat) {

	iocore.s.ppib |= 0x10;
#if defined(SUPPORT_BANKMEM)
	if (iocore.s.bankmem & 0x10) {
#endif
		z80core.e.memread = mainmem;
#if defined(SUPPORT_BANKMEM)
	}
#endif
	(void)port;
	(void)dat;
}


/* ---- */

static const OEMCHAR iplromx1[] = OEMTEXT("IPLROM.X1");
static const OEMCHAR iplromx1t[] = OEMTEXT("IPLROM.X1T");

void memio_reset(void) {

const OEMCHAR	*iplfile;
	UINT		iplsize;
	FILEH		fh;

	ZeroMemory(biosmem, 0x8000);
	CopyMemory(biosmem, defaultiplrom, sizeof(defaultiplrom));
	if (pccore.ROM_TYPE >= 1) {
		if (pccore.ROM_TYPE >= 2) {
			iplfile = iplromx1t;
			iplsize = 0x8000;
		}
		else {
			iplfile = iplromx1;
			iplsize = 0x8000;
		}
		fh = file_open_rb_c(iplfile);
		if (fh != FILEH_INVALID) {
			file_read(fh, biosmem, iplsize);
			file_close(fh);
		}
	}

#if defined(SUPPORT_BANKMEM)
	iocore.s.bankmem = 0x78;
#endif
	memio_update();
}


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