📄 neogeo.c
字号:
cpu_spinuntil_int();
return RAM[0xfef3];
}
return RAM[0xfef3];
}
/*
* Sound V2.0
*
* Used by puzzle Bobble and Goal Goal Goal
*
*/
static int cycle_v2_sr(int offset)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[1].memory_region];
if (cpu_getpc()==0x0143) {
cpu_spinuntil_int();
return RAM[0xfeef];
}
return RAM[0xfeef];
}
static int vwpoint_cycle_sr(int offset)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[1].memory_region];
if (cpu_getpc()==0x0143) {
cpu_spinuntil_int();
return RAM[0xfe46];
}
return RAM[0xfe46];
}
/*
* Sound revision no 1.5, and some 2.0 versions,
* are not fit for speedups, it results in sound drops !
* Games that use this one are : Ghost Pilots, Joy Joy, Nam 1975
*/
/*
static int cycle_v15_sr(int offset)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[1].memory_region];
if (cpu_getpc()==0x013D) {
cpu_spinuntil_int();
return RAM[0xfe46];
}
return RAM[0xfe46];
}
*/
/*
* Magician Lord uses a different sound core from all other
* Neo Geo Games.
*/
static int maglord_cycle_sr(int offset)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[1].memory_region];
if (cpu_getpc()==0xd487) {
cpu_spinuntil_int();
return RAM[0xfb91];
}
return RAM[0xfb91];
}
/******************************************************************************/
static void neogeo_custom_memory(void)
{
/* NeoGeo intro screen cycle skip, used by all games */
/* Individual games can go here... */
#if 1
if (!strcmp(Machine->gamedrv->name,"ridhero")) install_mem_read_handler(0, 0x1000ca, 0x1000cb, ridhero_cycle_r);
if (!strcmp(Machine->gamedrv->name,"bstars")) install_mem_read_handler(0, 0x10000a, 0x10000b, bstars_cycle_r);
if (!strcmp(Machine->gamedrv->name,"cyberlip")) install_mem_read_handler(0, 0x107bb4, 0x107bb4, cyberlip_cycle_r);
if (!strcmp(Machine->gamedrv->name,"lbowling")) install_mem_read_handler(0, 0x100098, 0x100099, lbowling_cycle_r);
if (!strcmp(Machine->gamedrv->name,"superspy")) install_mem_read_handler(0, 0x10108c, 0x10108d, superspy_cycle_r);
if (!strcmp(Machine->gamedrv->name,"ttbb")) install_mem_read_handler(0, 0x10000e, 0x10000f, ttbb_cycle_r);
if (!strcmp(Machine->gamedrv->name,"alpham2")) install_mem_read_handler(0, 0x10e2fe, 0x10e2ff, alpham2_cycle_r);
if (!strcmp(Machine->gamedrv->name,"eightman")) install_mem_read_handler(0, 0x10046e, 0x10046f, eightman_cycle_r);
if (!strcmp(Machine->gamedrv->name,"ararmy")) install_mem_read_handler(0, 0x104010, 0x104011, ararmy_cycle_r);
if (!strcmp(Machine->gamedrv->name,"fatfury1")) install_mem_read_handler(0, 0x104282, 0x104283, fatfury1_cycle_r);
if (!strcmp(Machine->gamedrv->name,"burningf")) install_mem_read_handler(0, 0x10000e, 0x10000f, burningf_cycle_r);
if (!strcmp(Machine->gamedrv->name,"kingofm")) install_mem_read_handler(0, 0x100020, 0x100021, kingofm_cycle_r);
if (!strcmp(Machine->gamedrv->name,"gpilots")) install_mem_read_handler(0, 0x10a682, 0x10a683, gpilots_cycle_r);
if (!strcmp(Machine->gamedrv->name,"lresort")) install_mem_read_handler(0, 0x104102, 0x104103, lresort_cycle_r);
if (!strcmp(Machine->gamedrv->name,"fbfrenzy")) install_mem_read_handler(0, 0x100020, 0x100021, fbfrenzy_cycle_r);
if (!strcmp(Machine->gamedrv->name,"socbrawl")) install_mem_read_handler(0, 0x10b20c, 0x10b20d, socbrawl_cycle_r);
if (!strcmp(Machine->gamedrv->name,"mutnat")) install_mem_read_handler(0, 0x101042, 0x101043, mutnat_cycle_r);
if (!strcmp(Machine->gamedrv->name,"artfight")) install_mem_read_handler(0, 0x108100, 0x108101, artfight_cycle_r);
if (!strcmp(Machine->gamedrv->name,"ncombat")) install_mem_read_handler(0, 0x100206, 0x100207, ncombat_cycle_r);
if (!strcmp(Machine->gamedrv->name,"trally")) install_mem_read_handler(0, 0x100206, 0x100207, trally_cycle_r);
if (!strcmp(Machine->gamedrv->name,"sengoku")) install_mem_read_handler(0, 0x100088, 0x100089, sengoku_cycle_r);
if (!strcmp(Machine->gamedrv->name,"wheroes")) install_mem_read_handler(0, 0x108206, 0x108207, wheroes_cycle_r);
if (!strcmp(Machine->gamedrv->name,"androdun")) install_mem_read_handler(0, 0x100080, 0x100081, androdun_cycle_r);
if (!strcmp(Machine->gamedrv->name,"bjourney")) install_mem_read_handler(0, 0x100206, 0x100207, bjourney_cycle_r);
if (!strcmp(Machine->gamedrv->name,"maglord")) install_mem_read_handler(0, 0x100206, 0x100207, maglord_cycle_r);
if (!strcmp(Machine->gamedrv->name,"pulstar")) install_mem_read_handler(0, 0x101000, 0x101001, pulstar_cycle_r);
if (!strcmp(Machine->gamedrv->name,"blazstar")) install_mem_read_handler(0, 0x101000, 0x101001, blazstar_cycle_r);
if (!strcmp(Machine->gamedrv->name,"puzzledp")) install_mem_read_handler(0, 0x100000, 0x100001, puzzledp_cycle_r);
if (!strcmp(Machine->gamedrv->name,"neodrift")) install_mem_read_handler(0, 0x100424, 0x100425, neodrift_cycle_r);
if (!strcmp(Machine->gamedrv->name,"spinmast")) install_mem_read_handler(0, 0x100050, 0x100051, spinmast_cycle_r);
if (!strcmp(Machine->gamedrv->name,"karnov_r")) install_mem_read_handler(0, 0x103466, 0x103467, karnov_r_cycle_r);
if (!strcmp(Machine->gamedrv->name,"wjammers")) install_mem_read_handler(0, 0x10005a, 0x10005b, wjammers_cycle_r);
if (!strcmp(Machine->gamedrv->name,"strhoops")) install_mem_read_handler(0, 0x101200, 0x101201, strhoops_cycle_r);
if (!strcmp(Machine->gamedrv->name,"sonicwi2")) install_mem_read_handler(0, 0x10e5b6, 0x10e5b7, sonicwi2_cycle_r);
if (!strcmp(Machine->gamedrv->name,"sonicwi3")) install_mem_read_handler(0, 0x10ea2e, 0x10ea2f, sonicwi3_cycle_r);
if (!strcmp(Machine->gamedrv->name,"goalx3")) install_mem_read_handler(0, 0x100006, 0x100007, goalx3_cycle_r);
if (!strcmp(Machine->gamedrv->name,"turfmast")) install_mem_read_handler(0, 0x102e54, 0x102e55, turfmast_cycle_r);
if (!strcmp(Machine->gamedrv->name,"kabukikl")) install_mem_read_handler(0, 0x10428a, 0x10428b, kabukikl_cycle_r);
if (!strcmp(Machine->gamedrv->name,"panicbom")) install_mem_read_handler(0, 0x10009c, 0x10009d, panicbom_cycle_r);
if (!strcmp(Machine->gamedrv->name,"neobombe")) install_mem_read_handler(0, 0x10448c, 0x10448d, neobombe_cycle_r);
if (!strcmp(Machine->gamedrv->name,"worlher2")) install_mem_read_handler(0, 0x108206, 0x108207, worlher2_cycle_r);
if (!strcmp(Machine->gamedrv->name,"worlhe2j")) install_mem_read_handler(0, 0x108206, 0x108207, worlhe2j_cycle_r);
if (!strcmp(Machine->gamedrv->name,"aodk")) install_mem_read_handler(0, 0x108206, 0x108207, aodk_cycle_r);
if (!strcmp(Machine->gamedrv->name,"whp")) install_mem_read_handler(0, 0x108206, 0x108207, whp_cycle_r);
if (!strcmp(Machine->gamedrv->name,"overtop")) install_mem_read_handler(0, 0x108202, 0x108203, overtop_cycle_r);
if (!strcmp(Machine->gamedrv->name,"twinspri")) install_mem_read_handler(0, 0x108206, 0x108207, twinspri_cycle_r);
if (!strcmp(Machine->gamedrv->name,"stakwin")) install_mem_read_handler(0, 0x100b92, 0x100b93, stakwin_cycle_r);
if (!strcmp(Machine->gamedrv->name,"shocktro")) install_mem_read_handler(0, 0x108344, 0x108345, shocktro_cycle_r);
if (!strcmp(Machine->gamedrv->name,"tws96")) install_mem_read_handler(0, 0x10010e, 0x10010f, tws96_cycle_r);
if (!strcmp(Machine->gamedrv->name,"zedblade")) install_mem_read_handler(0, 0x109004, 0x109005, zedblade_cycle_r);
if (!strcmp(Machine->gamedrv->name,"galaxyfg")) install_mem_read_handler(0, 0x101858, 0x101859, galaxyfg_cycle_r);
if (!strcmp(Machine->gamedrv->name,"wakuwak7")) install_mem_read_handler(0, 0x100bd4, 0x100bd5, wakuwak7_cycle_r);
if (!strcmp(Machine->gamedrv->name,"mahretsu")) install_mem_read_handler(0, 0x1013b2, 0x1013b3, mahretsu_cycle_r);
if (!strcmp(Machine->gamedrv->name,"nam_1975")) install_mem_read_handler(0, 0x1012e0, 0x1012e1, nam_1975_cycle_r);
if (!strcmp(Machine->gamedrv->name,"tpgolf")) install_mem_read_handler(0, 0x1000a4, 0x1000a5, tpgolf_cycle_r);
if (!strcmp(Machine->gamedrv->name,"legendos")) install_mem_read_handler(0, 0x100002, 0x100003, legendos_cycle_r);
if (!strcmp(Machine->gamedrv->name,"fatfury2")) install_mem_read_handler(0, 0x10418c, 0x10418d, fatfury2_cycle_r);
if (!strcmp(Machine->gamedrv->name,"bstars2")) install_mem_read_handler(0, 0x10001c, 0x10001c, bstars2_cycle_r);
if (!strcmp(Machine->gamedrv->name,"sidkicks")) install_mem_read_handler(0, 0x108c84, 0x108c85, sidkicks_cycle_r);
if (!strcmp(Machine->gamedrv->name,"kotm2")) install_mem_read_handler(0, 0x101000, 0x101001, kotm2_cycle_r);
if (!strcmp(Machine->gamedrv->name,"samsho")) install_mem_read_handler(0, 0x100a76, 0x100a77, samsho_cycle_r);
if (!strcmp(Machine->gamedrv->name,"fatfursp")) install_mem_read_handler(0, 0x10418c, 0x10418d, fatfursp_cycle_r);
if (!strcmp(Machine->gamedrv->name,"fatfury3")) install_mem_read_handler(0, 0x10418c, 0x10418d, fatfury3_cycle_r);
if (!strcmp(Machine->gamedrv->name,"tophuntr")) install_mem_read_handler(0, 0x10008e, 0x10008f, tophuntr_cycle_r);
if (!strcmp(Machine->gamedrv->name,"savagere")) install_mem_read_handler(0, 0x108404, 0x108405, savagere_cycle_r);
if (!strcmp(Machine->gamedrv->name,"aof2")) install_mem_read_handler(0, 0x108280, 0x108281, aof2_cycle_r);
if (!strcmp(Machine->gamedrv->name,"ssideki2")) install_mem_read_handler(0, 0x104292, 0x104293, ssideki2_cycle_r);
if (!strcmp(Machine->gamedrv->name,"samsho2")) install_mem_read_handler(0, 0x100a30, 0x100a31, samsho2_cycle_r);
if (!strcmp(Machine->gamedrv->name,"samsho3")) install_mem_read_handler(0, 0x108408, 0x108409, samsho3_cycle_r);
if (!strcmp(Machine->gamedrv->name,"kof95")) install_mem_read_handler(0, 0x10a784, 0x10a785, kof95_cycle_r);
if (!strcmp(Machine->gamedrv->name,"rbff1")) install_mem_read_handler(0, 0x10418c, 0x10418d, rbff1_cycle_r);
if (!strcmp(Machine->gamedrv->name,"ninjamas")) install_mem_read_handler(0, 0x108206, 0x108207, ninjamas_cycle_r);
if (!strcmp(Machine->gamedrv->name,"kof96")) install_mem_read_handler(0, 0x10a782, 0x10a783, kof96_cycle_r);
if (!strcmp(Machine->gamedrv->name,"samsho4")) install_mem_read_handler(0, 0x10830c, 0x10830d, samsho4_cycle_r);
if (!strcmp(Machine->gamedrv->name,"rbffspec")) install_mem_read_handler(0, 0x10418c, 0x10418d, rbffspec_cycle_r);
if (!strcmp(Machine->gamedrv->name,"kizuna")) install_mem_read_handler(0, 0x108808, 0x108809, kizuna_cycle_r);
if (!strcmp(Machine->gamedrv->name,"kof97")) install_mem_read_handler(0, 0x10a784, 0x10a785, kof97_cycle_r);
if (!strcmp(Machine->gamedrv->name,"realbou2")) install_mem_read_handler(0, 0x10418c, 0x10418d, realbou2_cycle_r);
if (!strcmp(Machine->gamedrv->name,"ragnagrd")) install_mem_read_handler(0, 0x100042, 0x100043, ragnagrd_cycle_r);
if (!strcmp(Machine->gamedrv->name,"lastblad")) install_mem_read_handler(0, 0x109d4e, 0x109d4f, lastblad_cycle_r);
if (!strcmp(Machine->gamedrv->name,"gururin")) install_mem_read_handler(0, 0x101002, 0x101003, gururin_cycle_r);
#endif
/* AVDB cpu spins based on sound processor status */
if (!strcmp(Machine->gamedrv->name,"puzzledp")) install_mem_read_handler(1, 0xfeb1, 0xfeb1, cycle_v3_sr);
if (!strcmp(Machine->gamedrv->name,"ssideki2")) install_mem_read_handler(1, 0xfeb1, 0xfeb1, cycle_v3_sr);
if (!strcmp(Machine->gamedrv->name,"sidkicks")) install_mem_read_handler(1, 0xfef3, 0xfef3, sidkicks_cycle_sr);
if (!strcmp(Machine->gamedrv->name,"artfight")) install_mem_read_handler(1, 0xfef3, 0xfef3, artfight_cycle_sr);
if (!strcmp(Machine->gamedrv->name,"pbobble")) install_mem_read_handler(1, 0xfeef, 0xfeef, cycle_v2_sr);
if (!strcmp(Machine->gamedrv->name,"goalx3")) install_mem_read_handler(1, 0xfeef, 0xfeef, cycle_v2_sr);
if (!strcmp(Machine->gamedrv->name,"fatfury1")) install_mem_read_handler(1, 0xfeef, 0xfeef, cycle_v2_sr);
if (!strcmp(Machine->gamedrv->name,"mutnat")) install_mem_read_handler(1, 0xfeef, 0xfeef, cycle_v2_sr);
if (!strcmp(Machine->gamedrv->name,"maglord")) install_mem_read_handler(1, 0xfb91, 0xfb91, maglord_cycle_sr);
if (!strcmp(Machine->gamedrv->name,"vwpoint")) install_mem_read_handler(1, 0xfe46, 0xfe46, vwpoint_cycle_sr);
/* kludges */
neogeo_game_fix=-1;
if (!strcmp(Machine->gamedrv->name,"blazstar")) neogeo_game_fix=0;
if (!strcmp(Machine->gamedrv->name,"gowcaizr")) neogeo_game_fix=1;
if (!strcmp(Machine->gamedrv->name,"realbou2")) neogeo_game_fix=2;
if (!strcmp(Machine->gamedrv->name,"samsho3")) neogeo_game_fix=3;
if (!strcmp(Machine->gamedrv->name,"overtop")) neogeo_game_fix=4;
if (!strcmp(Machine->gamedrv->name,"kof97")) neogeo_game_fix=5;
if (!strcmp(Machine->gamedrv->name,"miexchng")) neogeo_game_fix=6;
if (!strcmp(Machine->gamedrv->name,"gururin")) neogeo_game_fix=7;
if (!strcmp(Machine->gamedrv->name,"ncommand")) neogeo_game_fix=8;
/* hacks to make the games which do protection checks run in arcade mode */
/* we write protect a SRAM location so it cannot be set to 1 */
sram_protection_hack = -1;
if (!strcmp(Machine->gamedrv->name,"fatfury3") ||
!strcmp(Machine->gamedrv->name,"samsho3") ||
!strcmp(Machine->gamedrv->name,"samsho4") ||
!strcmp(Machine->gamedrv->name,"aof3") ||
!strcmp(Machine->gamedrv->name,"rbff1") ||
!strcmp(Machine->gamedrv->name,"rbffspec") ||
!strcmp(Machine->gamedrv->name,"kof95") ||
!strcmp(Machine->gamedrv->name,"kof96") ||
!strcmp(Machine->gamedrv->name,"kof97") ||
!strcmp(Machine->gamedrv->name,"kizuna") ||
!strcmp(Machine->gamedrv->name,"lastblad") ||
!strcmp(Machine->gamedrv->name,"realbou2") ||
!strcmp(Machine->gamedrv->name,"mslug2"))
sram_protection_hack = 0x100;
if (!strcmp(Machine->gamedrv->name,"pulstar"))
sram_protection_hack = 0x35a;
/* Improve games which don't work in 8 bit colour very well */
neogeo_red_mask=0xf;
neogeo_green_mask=0xf;
neogeo_blue_mask=0xf;
if (!strcmp(Machine->gamedrv->name,"blazstar")) neogeo_blue_mask=0xe;
if (!strcmp(Machine->gamedrv->name,"karnov_r")) neogeo_blue_mask=0xe;
if (!strcmp(Machine->gamedrv->name,"kof95")) neogeo_blue_mask=0xe;
if (!strcmp(Machine->gamedrv->name,"kof96")) neogeo_blue_mask=neogeo_red_mask=0xe;
if (!strcmp(Machine->gamedrv->name,"kof97")) neogeo_blue_mask=neogeo_red_mask=neogeo_green_mask=0xe;
if (!strcmp(Machine->gamedrv->name,"ragnagrd")) neogeo_blue_mask=neogeo_red_mask=neogeo_green_mask=0xe;
if (!strcmp(Machine->gamedrv->name,"whp")) neogeo_blue_mask=neogeo_red_mask=0xe;
}
void neogeo_sram_lock_w(int offset,int data)
{
sram_locked = 1;
}
void neogeo_sram_unlock_w(int offset,int data)
{
sram_locked = 0;
}
int neogeo_sram_r(int offset)
{
return READ_WORD(&neogeo_sram[offset]);
}
void neogeo_sram_w(int offset,int data)
{
if (sram_locked)
{
/*if (errorlog) fprintf(errorlog,"PC %06x: warning: write %02x to SRAM %04x while it was protected\n",cpu_getpc(),data,offset);*/
}
else
{
if (offset == sram_protection_hack)
{
if (data == 0x0001 || data == 0xff000001)
return; /* fake protection pass */
}
COMBINE_WORD_MEM(&neogeo_sram[offset],data);
}
}
int neogeo_sram_load(void)
{
void *f;
/* Load the SRAM settings for this game */
memset(neogeo_sram,0,0x10000);
f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,0);
if (f)
{
osd_fread_msbfirst(f,neogeo_sram,0x2000);
osd_fclose(f);
}
return 1;
}
void neogeo_sram_save(void)
{
void *f;
/* Save the SRAM settings */
if ((f = osd_fopen(Machine->gamedrv->name,0,OSD_FILETYPE_HIGHSCORE,1)) != 0)
{
osd_fwrite_msbfirst(f,neogeo_sram,0x2000);
osd_fclose(f);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -