summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Angelo Salese <angelosa@users.noreply.github.com>2011-11-06 23:03:46 +0000
committer Angelo Salese <angelosa@users.noreply.github.com>2011-11-06 23:03:46 +0000
commit004692732c8fd613b8975c2869860b9b6b0e2ebe (patch)
treea5e18e7b36134c92830cc5831180c156fc7d2ea5
parentb384d01bc376da24aed0d4fbf7fb07f8058d6ccf (diff)
Added a preliminary ES5510 DSP DRAM input/output latches support in Taito F3 driver, fixes sound in Ring Rage and Riding Fight [Angelo Salese]
-rw-r--r--src/mame/audio/taito_en.c50
-rw-r--r--src/mame/drivers/taito_f3.c19
2 files changed, 51 insertions, 18 deletions
diff --git a/src/mame/audio/taito_en.c b/src/mame/audio/taito_en.c
index 1a4163e9d0c..ef2d4792879 100644
--- a/src/mame/audio/taito_en.c
+++ b/src/mame/audio/taito_en.c
@@ -3,11 +3,16 @@
#include "taito_en.h"
static int counter,vector_reg,imr_status;
-static UINT16 es5510_dsp_ram[0x200];
+static UINT16 es5510_dsp_ram[0x200];
static UINT32 es5510_gpr[0xc0];
+static UINT32 es5510_dram[1<<24];
+static UINT32 es5510_dol_latch;
+static UINT32 es5510_dil_latch;
+static UINT32 es5510_dadr_latch;
static UINT32 es5510_gpr_latch;
+static UINT8 es5510_ram_sel;
static int timer_mode,m68681_imr;
-static UINT32 *f3_shared_ram;
+static UINT32 *f3_shared_ram;
//static int es_tmp=1;
@@ -200,6 +205,13 @@ static READ16_HANDLER(es5510_dsp_r)
//if (offset<7 && es5510_dsp_ram[0]!=0xff) return space->machine().rand()%0xffff;
+ switch(offset)
+ {
+ case 0x09: return (es5510_dil_latch >> 16) & 0xff;
+ case 0x0a: return (es5510_dil_latch >> 8) & 0xff;
+ case 0x0b: return (es5510_dil_latch >> 0) & 0xff; //TODO: docs says that this always returns 0
+ }
+
if (offset==0x12) return 0;
// if (offset>4)
@@ -218,10 +230,36 @@ static WRITE16_HANDLER(es5510_dsp_w)
COMBINE_DATA(&es5510_dsp_ram[offset]);
switch (offset) {
- case 0x00: es5510_gpr_latch=(es5510_gpr_latch&0x00ffff)|((data&0xff)<<16);
- case 0x01: es5510_gpr_latch=(es5510_gpr_latch&0xff00ff)|((data&0xff)<< 8);
- case 0x02: es5510_gpr_latch=(es5510_gpr_latch&0xffff00)|((data&0xff)<< 0);
- case 0x03: break;
+ case 0x00: es5510_gpr_latch=(es5510_gpr_latch&0x00ffff)|((data&0xff)<<16); break;
+ case 0x01: es5510_gpr_latch=(es5510_gpr_latch&0xff00ff)|((data&0xff)<< 8); break;
+ case 0x02: es5510_gpr_latch=(es5510_gpr_latch&0xffff00)|((data&0xff)<< 0); break;
+
+ /* 0x03 to 0x08 INSTR Register */
+ /* 0x09 to 0x0b DIL Register (r/o) */
+
+ case 0x0c: es5510_dol_latch=(es5510_dol_latch&0x00ffff)|((data&0xff)<<16); break;
+ case 0x0d: es5510_dol_latch=(es5510_dol_latch&0xff00ff)|((data&0xff)<< 8); break;
+ case 0x0e: es5510_dol_latch=(es5510_dol_latch&0xffff00)|((data&0xff)<< 0); break; //TODO: docs says that this always returns 0xff
+
+ case 0x0f:
+ es5510_dadr_latch=(es5510_dadr_latch&0x00ffff)|((data&0xff)<<16);
+ if(es5510_ram_sel)
+ es5510_dil_latch = es5510_dram[es5510_dadr_latch];
+ else
+ es5510_dram[es5510_dadr_latch] = es5510_dol_latch;
+ break;
+
+ case 0x10: es5510_dadr_latch=(es5510_dadr_latch&0xff00ff)|((data&0xff)<< 8); break;
+ case 0x11: es5510_dadr_latch=(es5510_dadr_latch&0xffff00)|((data&0xff)<< 0); break;
+
+ /* 0x12 Host Control */
+
+ case 0x14: es5510_ram_sel = data & 0x80; /* bit 6 is i/o select, everything else is undefined */break;
+
+ /* 0x16 Program Counter (test purpose, r/o?) */
+ /* 0x17 Internal Refresh counter (test purpose) */
+ /* 0x18 Host Serial Control */
+ /* 0x1f Halt enable (w) / Frame Counter (r) */
case 0x80: /* Read select - GPR + INSTR */
// logerror("ES5510: Read GPR/INSTR %06x (%06x)\n",data,es5510_gpr[data]);
diff --git a/src/mame/drivers/taito_f3.c b/src/mame/drivers/taito_f3.c
index a3cc14b03ba..d78ee18c377 100644
--- a/src/mame/drivers/taito_f3.c
+++ b/src/mame/drivers/taito_f3.c
@@ -11,13 +11,8 @@
sprite sync fixes, sprite zoom fixes and others!
Other Issues:
- - Dsp isn't hooked up.
+ - ES5510 DSP isn't hooked up.
- Various hacks in video core that needs squashing;
- - Sound doesn't work in RidingF/RingRage?
- (for RingRage it's probably a timing / cpu sync bug, if you go into test mode
- for a while then exit you'll have sound, this doesn't work on RidingF)
- \- It does work in ringrage but you have to enter test mode first
- - Sound balance is not emulated (see arabianm test mode)
- When playing space invaders dx in original mode, t.t. with overlay, the
alpha blending effect is wrong (see Taito B version of game)
- Bubble Symphony has an alpha transition effect that doesn't appear in Mame
@@ -4076,15 +4071,15 @@ static DRIVER_INIT( commandw )
/******************************************************************************/
-GAME( 1992, ringrage, 0, f3_224a, f3, ringrage, ROT0, "Taito Corporation Japan", "Ring Rage (Ver 2.3O 1992/08/09)", GAME_IMPERFECT_SOUND )
-GAME( 1992, ringragej,ringrage, f3_224a, f3, ringrage, ROT0, "Taito Corporation", "Ring Rage (Ver 2.3J 1992/08/09)", GAME_IMPERFECT_SOUND )
-GAME( 1992, ringrageu,ringrage, f3_224a, f3, ringrage, ROT0, "Taito America Corporation", "Ring Rage (Ver 2.3A 1992/08/09)", GAME_IMPERFECT_SOUND )
+GAME( 1992, ringrage, 0, f3_224a, f3, ringrage, ROT0, "Taito Corporation Japan", "Ring Rage (Ver 2.3O 1992/08/09)", 0 )
+GAME( 1992, ringragej,ringrage, f3_224a, f3, ringrage, ROT0, "Taito Corporation", "Ring Rage (Ver 2.3J 1992/08/09)", 0 )
+GAME( 1992, ringrageu,ringrage, f3_224a, f3, ringrage, ROT0, "Taito America Corporation", "Ring Rage (Ver 2.3A 1992/08/09)", 0 )
GAME( 1992, arabianm, 0, f3_224a, f3, arabianm, ROT0, "Taito Corporation Japan", "Arabian Magic (Ver 1.0O 1992/07/06)", 0 )
GAME( 1992, arabianmj,arabianm, f3_224a, f3, arabianm, ROT0, "Taito Corporation", "Arabian Magic (Ver 1.0J 1992/07/06)", 0 )
GAME( 1992, arabianmu,arabianm, f3_224a, f3, arabianm, ROT0, "Taito America Corporation", "Arabian Magic (Ver 1.0A 1992/07/06)", 0 )
-GAME( 1992, ridingf, 0, f3_224b, f3, ridingf, ROT0, "Taito Corporation Japan", "Riding Fight (Ver 1.0O)", GAME_NO_SOUND )
-GAME( 1992, ridingfj, ridingf, f3_224b, f3, ridingf, ROT0, "Taito Corporation", "Riding Fight (Ver 1.0J)", GAME_NO_SOUND )
-GAME( 1992, ridingfu, ridingf, f3_224b, f3, ridingf, ROT0, "Taito America Corporation", "Riding Fight (Ver 1.0A)", GAME_NO_SOUND )
+GAME( 1992, ridingf, 0, f3_224b, f3, ridingf, ROT0, "Taito Corporation Japan", "Riding Fight (Ver 1.0O)", 0 )
+GAME( 1992, ridingfj, ridingf, f3_224b, f3, ridingf, ROT0, "Taito Corporation", "Riding Fight (Ver 1.0J)", 0 )
+GAME( 1992, ridingfu, ridingf, f3_224b, f3, ridingf, ROT0, "Taito America Corporation", "Riding Fight (Ver 1.0A)", 0 )
GAME( 1992, gseeker, 0, f3_224b_eeprom, f3, gseeker, ROT90, "Taito Corporation Japan", "Grid Seeker: Project Storm Hammer (Ver 1.3O)", 0 )
GAME( 1992, gseekerj, gseeker, f3_224b_eeprom, f3, gseeker, ROT90, "Taito Corporation", "Grid Seeker: Project Storm Hammer (Ver 1.3J)", 0 )
GAME( 1992, gseekeru, gseeker, f3_224b_eeprom, f3, gseeker, ROT90, "Taito America Corporation", "Grid Seeker: Project Storm Hammer (Ver 1.3A)", 0 )