diff options
author | angelosa <salese_corp_ltd@email.it> | 2017-10-08 05:07:38 +0200 |
---|---|---|
committer | angelosa <salese_corp_ltd@email.it> | 2017-10-08 05:08:51 +0200 |
commit | 4316c8f31b34fc4b604458c67001f8e027750d96 (patch) | |
tree | e7852951498a31682d6e1c4e6cf36e0417b7d2c1 | |
parent | 6885fb45278bbf3f0cb6cac1d6059f9b71c2cf40 (diff) |
stvcd.cpp: Added some basic MPEG commands, makes Sport Fishing 2 to surpass MPEG error on boot (nw)
-rw-r--r-- | src/devices/machine/stvcd.cpp | 57 | ||||
-rw-r--r-- | src/mame/drivers/stv.cpp | 4 | ||||
-rw-r--r-- | src/mame/includes/saturn.h | 1 |
3 files changed, 57 insertions, 5 deletions
diff --git a/src/devices/machine/stvcd.cpp b/src/devices/machine/stvcd.cpp index 30510db4b1d..21b2128a68d 100644 --- a/src/devices/machine/stvcd.cpp +++ b/src/devices/machine/stvcd.cpp @@ -128,6 +128,14 @@ void saturn_state::cr_standard_return(uint16_t cur_status) } } +void saturn_state::mpeg_standard_return(uint16_t cur_status) +{ + cr1 = cur_status | 0x01; + cr2 = 0; // V-Counter + cr3 = (0 << 8) | 0x10; // Picture Info | audio status + cr4 = 0x1000; // video status +} + void saturn_state::cd_exec_command( void ) { uint32_t temp; @@ -1354,8 +1362,15 @@ void saturn_state::cd_exec_command( void ) // cr1 = cd_stat; // necessary to pass // cr2 = 0x4; // hirqreg |= (CMOK|EFLS|CSCT); - sectorstore = 1; - hirqreg = 0xfc5; + if(cr2 == 0x0001) // MPEG card + { + hirqreg |= (CMOK|MPED); + } + else + { + sectorstore = 1; + hirqreg = 0x7c5; + } cr_standard_return(cd_stat); status_type = 0; break; @@ -1365,7 +1380,10 @@ void saturn_state::cd_exec_command( void ) if(cd_stat != CD_STAT_NODISC && cd_stat != CD_STAT_OPEN) cd_stat = CD_STAT_PAUSE; cr1 = cd_stat; // necessary to pass - cr2 = 0x4; // (must return this value to pass bios checks) + if(cr2 == 0x0001) // MPEG card + cr2 = 0x2; + else + cr2 = 0x4; // 0 = No CD, 1 = Audio CD, 2 Regular Data disk (not Saturn), 3 pirate disc, 4 Saturn disc cr3 = 0; cr4 = 0; hirqreg |= (CMOK); @@ -1373,9 +1391,42 @@ void saturn_state::cd_exec_command( void ) status_type = 0; break; + // following are MPEG commands, enough to get Sport Fishing to do something + // MPEG Get Status + case 0x90: + // MPEG Set IRQ Mask + case 0x92: + // MPEG Set Mode + case 0x94: + mpeg_standard_return(cd_stat); + hirqreg |= (CMOK); + break; + + // MPEG get IRQ + case 0x91: + cr1 = cd_stat | 0; + cr2 = 5; + cr3 = 0; + cr4 = 0; + hirqreg |= (CMOK); + break; + + // MPEG init + case 0x93: + hirqreg |= (CMOK|MPED); + if(cr2 == 0x0001) + hirqreg |= (MPCM); + + cr1 = cd_stat; + cr2 = 0; + cr3 = 0; + cr4 = 0; + break; + default: CDROM_LOG(("CD: Unknown command %04x\n", cr1>>8)) popmessage("CD Block unknown command %02x, contact MAMEdev",cr1>>8); + hirqreg |= (CMOK); break; } diff --git a/src/mame/drivers/stv.cpp b/src/mame/drivers/stv.cpp index 82e22054451..3561a26426f 100644 --- a/src/mame/drivers/stv.cpp +++ b/src/mame/drivers/stv.cpp @@ -3698,8 +3698,8 @@ GAME( 1996, magzun, stvbios, stv, stv, stv_state, magzun, ROT GAME( 1998, choroqhr, stvbios, stv, stv, stv_state, stv, ROT0, "Sega / Takara", "Choro Q Hyper Racing 5 (J 981230 V1.000)", MACHINE_NOT_WORKING ) /* CD games */ -GAME( 1995, sfish2, 0, stv, stv, stv_state, stv, ROT0, "Sega", "Sport Fishing 2 (UET 951106 V1.10e)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) -GAME( 1995, sfish2j, sfish2, stv, stv, stv_state, stv, ROT0, "Sega", "Sport Fishing 2 (J 951201 V1.100)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) +GAME( 1995, sfish2, 0, stv, stv, stv_state, stv, ROT0, "Sega", "Sport Fishing 2 (UET 951106 V1.10e)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN ) +GAME( 1995, sfish2j, sfish2, stv, stv, stv_state, stv, ROT0, "Sega", "Sport Fishing 2 (J 951201 V1.100)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN ) /* This is the known list of undumped ST-V games: diff --git a/src/mame/includes/saturn.h b/src/mame/includes/saturn.h index b5318482293..9d55ab78301 100644 --- a/src/mame/includes/saturn.h +++ b/src/mame/includes/saturn.h @@ -538,6 +538,7 @@ public: int get_track_index(uint32_t fad); int sega_cdrom_get_adr_control(cdrom_file *file, int track); void cr_standard_return(uint16_t cur_status); + void mpeg_standard_return(uint16_t cur_status); void cd_free_block(blockT *blktofree); void cd_defragblocks(partitionT *part); void cd_getsectoroffsetnum(uint32_t bufnum, uint32_t *sectoffs, uint32_t *sectnum); |