mirror of
https://github.com/holub/mame
synced 2025-05-23 22:20:01 +03:00
NSS: Don't add the DSP since the currently dumped games can do without. (no whatsnew)
This commit is contained in:
parent
319f170519
commit
d31a55243e
@ -295,7 +295,6 @@ Contra III CONTRA_III_1 TC574000 CONTRA_III_0 TC574000 GAME1_NSSU
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "cpu/upd7725/upd7725.h"
|
||||
#include "includes/snes.h"
|
||||
|
||||
static ADDRESS_MAP_START( snes_map, ADDRESS_SPACE_PROGRAM, 8)
|
||||
@ -484,14 +483,6 @@ static ADDRESS_MAP_START( bios_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( dsp_prg_map, ADDRESS_SPACE_PROGRAM, 32 )
|
||||
AM_RANGE(0x0000, 0x07ff) AM_ROM AM_REGION("dspprg", 0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( dsp_data_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x0000, 0x03ff) AM_ROM AM_REGION("dspdata", 0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static MACHINE_START( nss )
|
||||
{
|
||||
UINT8 *ROM = machine->region("bios")->base();
|
||||
@ -657,10 +648,6 @@ static MACHINE_CONFIG_START( snes, snes_state )
|
||||
MCFG_CPU_ADD("soundcpu", SPC700, 2048000/2) /* 2.048 Mhz, but internal divider */
|
||||
MCFG_CPU_PROGRAM_MAP(spc_mem)
|
||||
|
||||
MCFG_CPU_ADD("dsp", UPD7725, 8000000)
|
||||
MCFG_CPU_PROGRAM_MAP(dsp_prg_map)
|
||||
MCFG_CPU_DATA_MAP(dsp_data_map)
|
||||
|
||||
// MCFG_QUANTUM_TIME(HZ(24000))
|
||||
MCFG_QUANTUM_PERFECT_CPU("maincpu")
|
||||
|
||||
@ -704,7 +691,7 @@ MACHINE_CONFIG_END
|
||||
#define NSS_BIOS \
|
||||
ROM_REGION(0x100, "user5", 0) /* IPL ROM */ \
|
||||
ROM_LOAD("spc700.rom", 0, 0x40, CRC(44bb3a40) SHA1(97e352553e94242ae823547cd853eecda55c20f0) ) \
|
||||
ROM_REGION(0x10000, "addons", ROMREGION_ERASE00) /* add-on chip ROMs (DSP1 could be needed if we dump smk). the second 0x800 host DSP3 ROM in MESS */\
|
||||
ROM_REGION(0x10000, "addons", ROMREGION_ERASE00) /* add-on chip ROMs (DSP1 will be needed if we dump the NSS version of Super Mario Kart)*/\
|
||||
ROM_LOAD( "dsp1b.bin", SNES_DSP1B_OFFSET, 0x002800, CRC(453557e0) SHA1(3a218b0e4572a8eba6d0121b17fdac9529609220) ) \
|
||||
ROM_REGION(0x20000, "bios", 0) /* Bios CPU (what is it?) */ \
|
||||
ROM_LOAD("nss-c.dat" , 0x10000, 0x8000, CRC(a8e202b3) SHA1(b7afcfe4f5cf15df53452dc04be81929ced1efb2) ) /* bios */ \
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include "streams.h"
|
||||
#include "cpu/spc700/spc700.h"
|
||||
#include "cpu/g65816/g65816.h"
|
||||
#include "cpu/upd7725/upd7725.h"
|
||||
#include "audio/snes_snd.h"
|
||||
|
||||
/*
|
||||
@ -469,6 +470,7 @@ public:
|
||||
spc700_device *soundcpu;
|
||||
snes_sound_device *spc700;
|
||||
cpu_device *superfx;
|
||||
upd7725_device *upd7725;
|
||||
};
|
||||
|
||||
/* Special chips, checked at init and used in memory handlers */
|
||||
|
@ -36,6 +36,12 @@ static WRITE8_HANDLER(snes_io_dma_w);
|
||||
|
||||
struct snes_cart_info snes_cart;
|
||||
|
||||
// DSP accessors
|
||||
#define dsp_get_sr() state->upd7725->snesdsp_read(false)
|
||||
#define dsp_get_dr() state->upd7725->snesdsp_read(true)
|
||||
#define dsp_set_sr(data) state->upd7725->snesdsp_write(false, data)
|
||||
#define dsp_set_dr(data) state->upd7725->snesdsp_write(true, data)
|
||||
|
||||
// add-on chip emulators
|
||||
#include "machine/snesobc1.c"
|
||||
#include "machine/snescx4.c"
|
||||
@ -278,40 +284,6 @@ static TIMER_CALLBACK(snes_mult_callback)
|
||||
snes_ram[RDMPYH] = (c >> 8) & 0xff;
|
||||
}
|
||||
|
||||
|
||||
/*************************************
|
||||
|
||||
DSP I/O
|
||||
|
||||
*************************************/
|
||||
static UINT8 dsp_get_sr(running_machine *machine)
|
||||
{
|
||||
upd7725_device *upd7725 = machine->device<upd7725_device>("dsp");
|
||||
|
||||
return upd7725->snesdsp_read(false);
|
||||
}
|
||||
|
||||
static UINT8 dsp_get_dr(running_machine *machine)
|
||||
{
|
||||
upd7725_device *upd7725 = machine->device<upd7725_device>("dsp");
|
||||
|
||||
return upd7725->snesdsp_read(true);
|
||||
}
|
||||
|
||||
static void dsp_set_sr(running_machine *machine, UINT8 data)
|
||||
{
|
||||
upd7725_device *upd7725 = machine->device<upd7725_device>("dsp");
|
||||
|
||||
upd7725->snesdsp_write(false, data);
|
||||
}
|
||||
|
||||
static void dsp_set_dr(running_machine *machine, UINT8 data)
|
||||
{
|
||||
upd7725_device *upd7725 = machine->device<upd7725_device>("dsp");
|
||||
|
||||
upd7725->snesdsp_write(true, data);
|
||||
}
|
||||
|
||||
/*************************************
|
||||
|
||||
Input Handlers
|
||||
@ -968,7 +940,7 @@ READ8_HANDLER( snes_r_bank1 )
|
||||
else if (state->has_addon_chip == HAS_OBC1)
|
||||
value = obc1_read(space, offset);
|
||||
else if ((state->cart[0].mode == SNES_MODE_21) && (state->has_addon_chip == HAS_DSP1) && (offset < 0x100000))
|
||||
value = (address < 0x7000) ? dsp_get_dr(space->machine) : dsp_get_sr(space->machine);
|
||||
value = (address < 0x7000) ? dsp_get_dr() : dsp_get_sr();
|
||||
else if (state->has_addon_chip == HAS_CX4)
|
||||
value = CX4_read(address - 0x6000);
|
||||
else if (state->has_addon_chip == HAS_SPC7110 || state->has_addon_chip == HAS_SPC7110_RTC)
|
||||
@ -983,11 +955,11 @@ READ8_HANDLER( snes_r_bank1 )
|
||||
}
|
||||
}
|
||||
else if ((state->cart[0].mode == SNES_MODE_20) && (state->has_addon_chip == HAS_DSP1) && (offset >= 0x200000))
|
||||
value = (address < 0xc000) ? dsp_get_dr(space->machine) : dsp_get_sr(space->machine);
|
||||
value = (address < 0xc000) ? dsp_get_dr() : dsp_get_sr();
|
||||
else if ((state->cart[0].mode == SNES_MODE_20) && (state->has_addon_chip == HAS_DSP2) && (offset >= 0x200000))
|
||||
value = (address < 0xc000) ? dsp_get_dr(space->machine) : dsp_get_sr(space->machine);
|
||||
value = (address < 0xc000) ? dsp_get_dr() : dsp_get_sr();
|
||||
else if ((state->has_addon_chip == HAS_DSP3) && (offset >= 0x200000))
|
||||
value = (address < 0xc000) ? dsp_get_dr(space->machine) : dsp_get_sr(space->machine);
|
||||
value = (address < 0xc000) ? dsp_get_dr() : dsp_get_sr();
|
||||
else
|
||||
value = snes_ram[offset];
|
||||
|
||||
@ -1047,13 +1019,13 @@ READ8_HANDLER( snes_r_bank2 )
|
||||
}
|
||||
/* some dsp1 games use these banks 0x30 to 0x3f at address 0x8000 */
|
||||
else if ((state->cart[0].mode == SNES_MODE_20) && (state->has_addon_chip == HAS_DSP1))
|
||||
value = (address < 0xc000) ? dsp_get_dr(space->machine) : dsp_get_sr(space->machine);
|
||||
value = (address < 0xc000) ? dsp_get_dr() : dsp_get_sr();
|
||||
else if ((state->cart[0].mode == SNES_MODE_20) && (state->has_addon_chip == HAS_DSP2))
|
||||
value = (address < 0xc000) ? dsp_get_dr(space->machine) : dsp_get_sr(space->machine);
|
||||
value = (address < 0xc000) ? dsp_get_dr() : dsp_get_sr();
|
||||
else if (state->has_addon_chip == HAS_DSP3)
|
||||
value = (address < 0xc000) ? dsp_get_dr(space->machine) : dsp_get_sr(space->machine);
|
||||
value = (address < 0xc000) ? dsp_get_dr() : dsp_get_sr();
|
||||
else if (state->has_addon_chip == HAS_DSP4)
|
||||
value = (address < 0xc000) ? dsp_get_dr(space->machine) : dsp_get_sr(space->machine);
|
||||
value = (address < 0xc000) ? dsp_get_dr() : dsp_get_sr();
|
||||
else
|
||||
value = snes_ram[0x300000 + offset];
|
||||
|
||||
@ -1130,7 +1102,7 @@ READ8_HANDLER( snes_r_bank4 )
|
||||
value = snes_ram[0x600000 + offset];
|
||||
/* some other dsp1 games use these banks 0x60 to 0x6f at address 0x0000 */
|
||||
else if (state->has_addon_chip == HAS_DSP1)
|
||||
value = (address >= 0x4000) ? dsp_get_sr(space->machine) : dsp_get_dr(space->machine);
|
||||
value = (address >= 0x4000) ? dsp_get_sr() : dsp_get_dr();
|
||||
else
|
||||
{
|
||||
logerror("(PC=%06x) snes_r_bank4: Unmapped external chip read: %04x\n",cpu_get_pc(space->cpu),address);
|
||||
@ -1218,13 +1190,13 @@ READ8_HANDLER( snes_r_bank6 )
|
||||
}
|
||||
}
|
||||
else if ((state->cart[0].mode == SNES_MODE_20) && (state->has_addon_chip == HAS_DSP1) && (offset >= 0x200000))
|
||||
value = (address < 0xc000) ? dsp_get_dr(space->machine) : dsp_get_sr(space->machine);
|
||||
value = (address < 0xc000) ? dsp_get_dr() : dsp_get_sr();
|
||||
else if ((state->cart[0].mode == SNES_MODE_20) && (state->has_addon_chip == HAS_DSP2) && (offset >= 0x200000))
|
||||
value = (address < 0xc000) ? dsp_get_dr(space->machine) : dsp_get_sr(space->machine);
|
||||
value = (address < 0xc000) ? dsp_get_dr() : dsp_get_sr();
|
||||
else if ((state->has_addon_chip == HAS_DSP3) && (offset >= 0x200000))
|
||||
value = (address < 0xc000) ? dsp_get_dr(space->machine) : dsp_get_sr(space->machine);
|
||||
value = (address < 0xc000) ? dsp_get_dr() : dsp_get_sr();
|
||||
else if ((state->has_addon_chip == HAS_DSP4) && (offset >= 0x300000))
|
||||
value = (address < 0xc000) ? dsp_get_dr(space->machine) : dsp_get_sr(space->machine);
|
||||
value = (address < 0xc000) ? dsp_get_dr() : dsp_get_sr();
|
||||
else
|
||||
value = snes_ram[0x800000 + offset];
|
||||
|
||||
@ -1314,7 +1286,7 @@ WRITE8_HANDLER( snes_w_bank1 )
|
||||
else if (state->has_addon_chip == HAS_OBC1)
|
||||
obc1_write(space, offset, data);
|
||||
else if ((state->cart[0].mode == SNES_MODE_21) && (state->has_addon_chip == HAS_DSP1) && (offset < 0x100000))
|
||||
dsp_set_dr(space->machine, data);
|
||||
dsp_set_dr(data);
|
||||
else if (state->has_addon_chip == HAS_CX4)
|
||||
CX4_write(space->machine, address - 0x6000, data);
|
||||
else if (state->has_addon_chip == HAS_SPC7110 || state->has_addon_chip == HAS_SPC7110_RTC)
|
||||
@ -1326,19 +1298,19 @@ WRITE8_HANDLER( snes_w_bank1 )
|
||||
logerror("snes_w_bank1: Attempt to write to reserved address: %x = %02x\n", offset, data);
|
||||
}
|
||||
else if ((state->cart[0].mode == SNES_MODE_20) && (state->has_addon_chip == HAS_DSP1) && (offset >= 0x200000))
|
||||
dsp_set_dr(space->machine, data);
|
||||
dsp_set_dr(data);
|
||||
else if ((state->cart[0].mode == SNES_MODE_20) && (state->has_addon_chip == HAS_DSP2) && (offset >= 0x200000))
|
||||
{
|
||||
if (address < 0xc000)
|
||||
dsp_set_dr(space->machine, data);
|
||||
dsp_set_dr(data);
|
||||
else
|
||||
dsp_set_sr(space->machine, data);
|
||||
dsp_set_sr(data);
|
||||
}
|
||||
else if ((state->has_addon_chip == HAS_DSP3) && (offset >= 0x200000))
|
||||
if (address < 0xc000)
|
||||
dsp_set_dr(space->machine, data);
|
||||
dsp_set_dr(data);
|
||||
else
|
||||
dsp_set_sr(space->machine, data);
|
||||
dsp_set_sr(data);
|
||||
else
|
||||
logerror( "(PC=%06x) Attempt to write to ROM address: %X\n",cpu_get_pc(space->cpu),offset );
|
||||
|
||||
@ -1387,24 +1359,19 @@ WRITE8_HANDLER( snes_w_bank2 )
|
||||
}
|
||||
/* some dsp1 games use these banks 0x30 to 0x3f at address 0x8000 */
|
||||
else if ((state->cart[0].mode == SNES_MODE_20) && (state->has_addon_chip == HAS_DSP1))
|
||||
dsp_set_dr(space->machine, data);
|
||||
dsp_set_dr(data);
|
||||
else if ((state->cart[0].mode == SNES_MODE_20) && (state->has_addon_chip == HAS_DSP2))
|
||||
{
|
||||
if (address < 0xc000)
|
||||
dsp_set_dr(space->machine, data);
|
||||
dsp_set_dr(data);
|
||||
else
|
||||
dsp_set_sr(space->machine, data);
|
||||
dsp_set_sr(data);
|
||||
}
|
||||
else if (state->has_addon_chip == HAS_DSP3)
|
||||
else if ((state->has_addon_chip == HAS_DSP3) || (state->has_addon_chip == HAS_DSP4))
|
||||
if (address < 0xc000)
|
||||
dsp_set_dr(space->machine, data);
|
||||
dsp_set_dr(data);
|
||||
else
|
||||
dsp_set_sr(space->machine, data);
|
||||
else if (state->has_addon_chip == HAS_DSP4)
|
||||
if (address < 0xc000)
|
||||
dsp_set_dr(space->machine, data);
|
||||
else
|
||||
dsp_set_sr(space->machine, data);
|
||||
dsp_set_sr(data);
|
||||
else
|
||||
logerror("(PC=%06x) Attempt to write to ROM address: %X\n",cpu_get_pc(space->cpu),offset + 0x300000);
|
||||
|
||||
@ -1429,7 +1396,7 @@ WRITE8_HANDLER( snes_w_bank4 )
|
||||
if (address >= 0x8000)
|
||||
logerror("(PC=%06x) Attempt to write to ROM address: %X\n",cpu_get_pc(space->cpu),offset + 0x600000);
|
||||
else if (state->has_addon_chip == HAS_DSP1)
|
||||
dsp_set_dr(space->machine, data);
|
||||
dsp_set_dr(data);
|
||||
else
|
||||
logerror("snes_w_bank4: Attempt to write to reserved address: %X = %02x\n", offset + 0x600000, data);
|
||||
}
|
||||
@ -1498,24 +1465,24 @@ WRITE8_HANDLER( snes_w_bank6 )
|
||||
}
|
||||
}
|
||||
else if ((state->cart[0].mode == SNES_MODE_20) && (state->has_addon_chip == HAS_DSP1) && (offset >= 0x200000))
|
||||
dsp_set_dr(space->machine, data);
|
||||
dsp_set_dr(data);
|
||||
else if ((state->cart[0].mode == SNES_MODE_20) && (state->has_addon_chip == HAS_DSP2) && (offset >= 0x200000))
|
||||
{
|
||||
if (address < 0xc000)
|
||||
dsp_set_dr(space->machine, data);
|
||||
dsp_set_dr(data);
|
||||
else
|
||||
dsp_set_sr(space->machine, data);
|
||||
dsp_set_sr(data);
|
||||
}
|
||||
else if ((state->has_addon_chip == HAS_DSP3) && (offset >= 0x200000))
|
||||
if (address < 0xc000)
|
||||
dsp_set_dr(space->machine, data);
|
||||
dsp_set_dr(data);
|
||||
else
|
||||
dsp_set_sr(space->machine, data);
|
||||
dsp_set_sr(data);
|
||||
else if ((state->has_addon_chip == HAS_DSP4) && (offset >= 0x300000))
|
||||
if (address < 0xc000)
|
||||
dsp_set_dr(space->machine, data);
|
||||
dsp_set_dr(data);
|
||||
else
|
||||
dsp_set_sr(space->machine, data);
|
||||
dsp_set_sr(data);
|
||||
else
|
||||
logerror("(PC=%06x) Attempt to write to ROM address: %X\n",cpu_get_pc(space->cpu),offset + 0x800000);
|
||||
|
||||
@ -1708,8 +1675,14 @@ static void snes_init_ram( running_machine *machine )
|
||||
snes_ram[WRIO] = 0xff;
|
||||
snes_ram[VMAIN] = 0x80;
|
||||
|
||||
// assume no DSP and halt it...
|
||||
cputag_set_input_line(machine, "dsp", INPUT_LINE_RESET, ASSERT_LINE);
|
||||
// see if there's a uPD7725 DSP in the machine config
|
||||
state->upd7725 = machine->device<upd7725_device>("dsp");
|
||||
|
||||
// if we have a DSP, halt it for the moment
|
||||
if (state->upd7725)
|
||||
{
|
||||
cputag_set_input_line(machine, "dsp", INPUT_LINE_RESET, ASSERT_LINE);
|
||||
}
|
||||
|
||||
switch (state->has_addon_chip)
|
||||
{
|
||||
@ -1717,8 +1690,15 @@ static void snes_init_ram( running_machine *machine )
|
||||
case HAS_DSP2:
|
||||
case HAS_DSP3:
|
||||
case HAS_DSP4:
|
||||
// we do have a DSP, let 'er rip
|
||||
cputag_set_input_line(machine, "dsp", INPUT_LINE_RESET, CLEAR_LINE);
|
||||
// cartridge uses the DSP, let 'er rip
|
||||
if (state->upd7725)
|
||||
{
|
||||
cputag_set_input_line(machine, "dsp", INPUT_LINE_RESET, CLEAR_LINE);
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("SNES: We have a DSP, but the machine driver is missing the uPD7725!\n");
|
||||
}
|
||||
break;
|
||||
|
||||
case HAS_RTC:
|
||||
|
Loading…
Reference in New Issue
Block a user