⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 karnov.c

📁 这个是延伸mame的在wince平台下的游戏模拟器的代码
💻 C
📖 第 1 页 / 共 3 页
字号:
	ROM_LOAD( "kar15",        0x70000, 0x08000, 0x2f72cac0 )
	ROM_LOAD( "dn16-",        0x78000, 0x10000, 0x55e63a11 )
	ROM_LOAD( "kar17",        0x88000, 0x08000, 0x7851c70f )
	ROM_LOAD( "dn18-",        0x90000, 0x10000, 0x2ad53213 )
	ROM_LOAD( "kar19",        0xa0000, 0x08000, 0x7bc174bb )

	ROM_REGION_DISPOSE(0x0800)	/* color PROMs */
	ROM_LOAD( "karnprom.21",  0x0000, 0x0400, 0xaab0bb93 )
	ROM_LOAD( "karnprom.20",  0x0400, 0x0400, 0x02f78ffb )

	ROM_REGION(0x10000) /* 6502 Sound CPU */
	ROM_LOAD( "kar5",         0x8000, 0x8000, 0x7c9158f1 )
ROM_END

ROM_START( chelnov_rom )
	ROM_REGION(0x60000)	/* 6*64k for 68000 code */
	ROM_LOAD_EVEN( "ee08-a.j15",   0x00000, 0x10000, 0x2f2fb37b )
	ROM_LOAD_ODD ( "ee11-a.j20",   0x00000, 0x10000, 0xf306d05f )
	ROM_LOAD_EVEN( "ee07-a.j14",   0x20000, 0x10000, 0x9c69ed56 )
	ROM_LOAD_ODD ( "ee10-a.j18",   0x20000, 0x10000, 0xd5c5fe4b )
	ROM_LOAD_EVEN( "ee06-e.j13",   0x40000, 0x10000, 0x55acafdb )
	ROM_LOAD_ODD ( "ee09-e.j17",   0x40000, 0x10000, 0x303e252c )

	ROM_REGION_DISPOSE(0xa8000)
	ROM_LOAD( "ee00-e.c5",    0x00000, 0x08000, 0xe06e5c6b )	/* Characters */
	ROM_LOAD( "ee04-.d18",    0x08000, 0x10000, 0x96884f95 )	/* Backgrounds */
	ROM_LOAD( "ee01-.c15",    0x18000, 0x10000, 0xf4b54057 )
	ROM_LOAD( "ee03-.d15",    0x28000, 0x10000, 0x7178e182 )
	ROM_LOAD( "ee02-.c18",    0x38000, 0x10000, 0x9d7c45ae )
	ROM_LOAD( "ee12-.f8",     0x48000, 0x10000, 0x9b1c53a5 )	/* Sprites */
	ROM_LOAD( "ee13-.f9",     0x60000, 0x10000, 0x72b8ae3e )
	ROM_LOAD( "ee14-.f13",    0x78000, 0x10000, 0xd8f4bbde )
	ROM_LOAD( "ee15-.f15",    0x90000, 0x10000, 0x81e3e68b )

	ROM_REGION_DISPOSE(0x0800)	/* color PROMs */
	ROM_LOAD( "ee21.k8",      0x0000, 0x0400, 0xb1db6586 )	/* different from the other set; */
														/* might be bad */
	ROM_LOAD( "ee20.l6",      0x0400, 0x0400, 0x41816132 )

	ROM_REGION(0x10000)	/* 6502 Sound CPU */
	ROM_LOAD( "ee05-.f3",     0x8000, 0x8000, 0x6a8936b4 )
ROM_END

ROM_START( chelnovj_rom )
	ROM_REGION(0x60000)	/* 6*64k for 68000 code */
	ROM_LOAD_EVEN( "a-j15.bin",    0x00000, 0x10000, 0x1978cb52 )
	ROM_LOAD_ODD ( "a-j20.bin",    0x00000, 0x10000, 0xe0ed3d99 )
	ROM_LOAD_EVEN( "a-j14.bin",    0x20000, 0x10000, 0x51465486 )
	ROM_LOAD_ODD ( "a-j18.bin",    0x20000, 0x10000, 0xd09dda33 )
	ROM_LOAD_EVEN( "a-j13.bin",    0x40000, 0x10000, 0xcd991507 )
	ROM_LOAD_ODD ( "a-j17.bin",    0x40000, 0x10000, 0x977f601c )

	ROM_REGION_DISPOSE(0xa8000)
	ROM_LOAD( "a-c5.bin",     0x00000, 0x08000, 0x1abf2c6d )	/* Characters */
	ROM_LOAD( "ee04-.d18",    0x08000, 0x10000, 0x96884f95 )	/* Backgrounds */
	ROM_LOAD( "ee01-.c15",    0x18000, 0x10000, 0xf4b54057 )
	ROM_LOAD( "ee03-.d15",    0x28000, 0x10000, 0x7178e182 )
	ROM_LOAD( "ee02-.c18",    0x38000, 0x10000, 0x9d7c45ae )
	ROM_LOAD( "ee12-.f8",     0x48000, 0x10000, 0x9b1c53a5 )	/* Sprites */
	ROM_LOAD( "ee13-.f9",     0x60000, 0x10000, 0x72b8ae3e )
	ROM_LOAD( "ee14-.f13",    0x78000, 0x10000, 0xd8f4bbde )
	ROM_LOAD( "ee15-.f15",    0x90000, 0x10000, 0x81e3e68b )

	ROM_REGION_DISPOSE(0x0800)	/* color PROMs */
	ROM_LOAD( "a-k7.bin",     0x0000, 0x0400, 0x309c49d8 )	/* different from the other set; */
														/* might be bad */
	ROM_LOAD( "a-l6.bin",     0x0400, 0x0400, 0x41816132 )

	ROM_REGION(0x10000)	/* 6502 Sound CPU */
	ROM_LOAD( "ee05-.f3",     0x8000, 0x8000, 0x6a8936b4 )
ROM_END

/******************************************************************************/

static void chelnov_patch(void)
{
	unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];

	WRITE_WORD (&RAM[0x0A26],0x4E71);  /* removes a protection lookup table */
	WRITE_WORD (&RAM[0x062a],0x4E71);  /* hangs waiting on i8751 int */
}

static void chelnovj_patch(void)
{
	unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];

	WRITE_WORD (&RAM[0x0A2E],0x4E71);  /* removes a protection lookup table */
	WRITE_WORD (&RAM[0x062a],0x4E71);  /* hangs waiting on i8751 int */
}



/******************************************************************************/

/* MISH:  I doubt these functions will work on the mac.. */
static int karnov_hiload(void)
{
        void *f;

        /* check if the hi score table has already been initialized */
        if (memcmp(&karnov_ram[0x3d00],"\x41\x0\x41\x41",4) == 0 )
        {
                if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
                {
                        osd_fread(f,&karnov_ram[0x3c00],4*10);
                        osd_fread(f,&karnov_ram[0x3d00],4*10);
                        karnov_ram[0x0a]=karnov_ram[0x3c00];
                        karnov_ram[0x0b]=karnov_ram[0x3c01];
                        karnov_ram[0x0c]=karnov_ram[0x3c02];
                        karnov_ram[0x0d]=karnov_ram[0x3c03];
                        osd_fclose(f);
                }
                return 1;
        }
        else return 0;  /* we can't load the hi scores yet */
}

static void karnov_hisave(void)
{
	void *f;

	        if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
	        {
	                osd_fwrite(f,&karnov_ram[0x3c00],4*10);
	                osd_fwrite(f,&karnov_ram[0x3d00],4*10);
	                osd_fclose(f);
	        }
}

static int chelnov_hiload(void)
{
	void *f;

	/* check if the hi score table has already been initialized */

	if (memcmp(&karnov_ram[0xc0],"BA",2) == 0 )
	{
		if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0)) != 0)
		{
			osd_fread(f,&karnov_ram[0x80],4*11);
			osd_fread(f,&karnov_ram[0xc0],4*11);
                        karnov_ram[0x0048]=karnov_ram[0x0080];
                        karnov_ram[0x0049]=karnov_ram[0x0081];
                        karnov_ram[0x004a]=karnov_ram[0x0082];
                        karnov_ram[0x004b]=karnov_ram[0x0083];
                        osd_fclose(f);
                }
                return 1;
        }
        else return 0;  /* we can't load the hi scores yet */
}

static void chelnov_hisave(void)
{
        void *f;

        if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
        {
                osd_fwrite(f,&karnov_ram[0x0080],4*11);
                osd_fwrite(f,&karnov_ram[0x00c0],4*11);
                osd_fclose(f);
        }
}

/******************************************************************************/

static int karnov_cycle_r(int offset)
{
	if (cpu_getpc()==0x8f2) {cpu_spinuntil_int(); return 0;} return READ_WORD(&karnov_ram[0]);
}

static int karnovj_cycle_r(int offset)
{
	if (cpu_getpc()==0x8ec) {cpu_spinuntil_int(); return 0;} return READ_WORD(&karnov_ram[0]);
}

static int chelnov_cycle_r(int offset)
{
	if (cpu_getpc()==0xdfe) {cpu_spinuntil_int(); return 0;} return READ_WORD(&karnov_ram[0]);
}

static int chelnovj_cycle_r(int offset)
{
	if (cpu_getpc()==0xe06) {cpu_spinuntil_int(); return 0;} return READ_WORD(&karnov_ram[0]);
}

static void karnov_init(void)
{
	if (!strcmp(Machine->gamedrv->name,"karnov")) {
		install_mem_read_handler(0, 0x60000, 0x60001, karnov_cycle_r);
		KARNOV=1;
		CHELNOV=0;
	}

	if (!strcmp(Machine->gamedrv->name,"karnovj")) {
		install_mem_read_handler(0, 0x60000, 0x60001, karnovj_cycle_r);
		KARNOV=2;
		CHELNOV=0;
	}

	if (!strcmp(Machine->gamedrv->name,"chelnov")) {
		install_mem_read_handler(0, 0x60000, 0x60001, chelnov_cycle_r);
		KARNOV=0;
		CHELNOV=1;
	}

	if (!strcmp(Machine->gamedrv->name,"chelnovj")) {
		install_mem_read_handler(0, 0x60000, 0x60001, chelnovj_cycle_r);
		KARNOV=0;
		CHELNOV=2;
	}
}

/******************************************************************************/

struct GameDriver karnov_driver =
{
	__FILE__,
	0,
	"karnov",
	"Karnov (US)",
	"1987",
	"Data East USA",
	"Bryan McPhail",
	0,
	&karnov_machine_driver,
	karnov_init,

	karnov_rom,
	0,
	0,
	0,
	0,	/* sound_prom */

	karnov_input_ports,

	PROM_MEMORY_REGION(2), 0, 0,
	ORIENTATION_DEFAULT,
	karnov_hiload, karnov_hisave
};

struct GameDriver karnovj_driver =
{
	__FILE__,
	&karnov_driver,
	"karnovj",
	"Karnov (Japan)",
	"1987",
	"Data East Corporation",
	"Bryan McPhail",
	0,
	&karnov_machine_driver,
	karnov_init,

	karnovj_rom,
	0,
	0,
	0,
	0,	/* sound_prom */

	karnov_input_ports,

	PROM_MEMORY_REGION(2), 0, 0,
	ORIENTATION_DEFAULT,
	karnov_hiload, karnov_hisave
};

struct GameDriver chelnov_driver =
{
	__FILE__,
	0,
	"chelnov",
	"Chelnov - Atomic Runner (US)",
	"1988",
	"Data East USA",
	"Bryan McPhail",
	0,
	&karnov_machine_driver,
	karnov_init,

	chelnov_rom,
	chelnov_patch,
	0,
	0,
	0,	/* sound_prom */

	chelnov_input_ports,

	PROM_MEMORY_REGION(2), 0, 0,
	ORIENTATION_DEFAULT,
	chelnov_hiload, chelnov_hisave
};

struct GameDriver chelnovj_driver =
{
	__FILE__,
	&chelnov_driver,
	"chelnovj",
	"Chelnov - Atomic Runner (Japan)",
	"1988",
	"Data East Corporation",
	"Bryan McPhail",
	0,
	&karnov_machine_driver,
	karnov_init,

	chelnovj_rom,
	chelnovj_patch,
	0,
	0,
	0,	/* sound_prom */

	chelnov_input_ports,

	PROM_MEMORY_REGION(2), 0, 0,
	ORIENTATION_DEFAULT,
	chelnov_hiload, chelnov_hisave
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -