📄 karnov.c
字号:
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 + -