summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit4316c8f31b34fc4b604458c67001f8e027750d96 (patch)
treee7852951498a31682d6e1c4e6cf36e0417b7d2c1
parent6885fb45278bbf3f0cb6cac1d6059f9b71c2cf40 (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.cpp57
-rw-r--r--src/mame/drivers/stv.cpp4
-rw-r--r--src/mame/includes/saturn.h1
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);