mcs48: rename n7751 to upd7751

This commit is contained in:
hap 2024-08-20 13:06:13 +02:00
parent cd2b19164f
commit 24c82edb75
8 changed files with 205 additions and 204 deletions

View File

@ -31,14 +31,14 @@
8648 64 1k 27 (OTPROM)
8748 64 1k 27 (EPROM)
8884 64 1k
N7751 64 1k (8048, speech synthesizer in internal ROM)
UPD7751 64 1k (8048, speech synthesizer in internal ROM)
8039 128 0 27 (external ROM)
8049 128 2k 27 (ROM)
8749 128 2k 27 (EPROM)
M58715 128 0 (external ROM)
8040 256 4k 27 (external ROM)
8040 256 0 27 (external ROM)
8050 256 4k 27 (ROM)
****************************************************************************
@ -151,6 +151,7 @@ DEFINE_DEVICE_TYPE(I8049, i8049_device, "i8049", "Intel 8049")
DEFINE_DEVICE_TYPE(I8749, i8749_device, "i8749", "Intel 8749")
DEFINE_DEVICE_TYPE(I8040, i8040_device, "i8040", "Intel 8040")
DEFINE_DEVICE_TYPE(I8050, i8050_device, "i8050", "Intel 8050")
DEFINE_DEVICE_TYPE(I8041A, i8041a_device, "i8041a", "Intel 8041A")
DEFINE_DEVICE_TYPE(I8741A, i8741a_device, "i8741a", "Intel 8741A")
DEFINE_DEVICE_TYPE(I8041AH, i8041ah_device, "i8041ah", "Intel 8041AH")
@ -159,9 +160,10 @@ DEFINE_DEVICE_TYPE(I8042, i8042_device, "i8042", "Intel 8042")
DEFINE_DEVICE_TYPE(I8742, i8742_device, "i8742", "Intel 8742")
DEFINE_DEVICE_TYPE(I8042AH, i8042ah_device, "i8042ah", "Intel 8042AH")
DEFINE_DEVICE_TYPE(I8742AH, i8742ah_device, "i8742ah", "Intel 8742AH")
DEFINE_DEVICE_TYPE(MB8884, mb8884_device, "mb8884", "MB8884")
DEFINE_DEVICE_TYPE(N7751, n7751_device, "n7751", "NEC uPD7751")
DEFINE_DEVICE_TYPE(M58715, m58715_device, "m58715", "M58715")
DEFINE_DEVICE_TYPE(MB8884, mb8884_device, "mb8884", "Fujitsu MB8884")
DEFINE_DEVICE_TYPE(UPD7751, upd7751_device, "upd7751", "NEC uPD7751")
DEFINE_DEVICE_TYPE(M58715, m58715_device, "m58715", "Mitsubishi M58715")
/***************************************************************************
@ -262,8 +264,8 @@ mb8884_device::mb8884_device(const machine_config &mconfig, const char *tag, dev
{
}
n7751_device::n7751_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: mcs48_cpu_device(mconfig, N7751, tag, owner, clock, 1024, 64, I8048_FEATURE, s_mcs48_opcodes)
upd7751_device::upd7751_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: mcs48_cpu_device(mconfig, UPD7751, tag, owner, clock, 1024, 64, I8048_FEATURE, s_mcs48_opcodes)
{
}

View File

@ -94,7 +94,7 @@ DECLARE_DEVICE_TYPE(I8742AH, i8742ah_device) // 2k internal UV EPROM, 256 bytes
// Clones
DECLARE_DEVICE_TYPE(MB8884, mb8884_device) // 8035 clone
DECLARE_DEVICE_TYPE(N7751, n7751_device) // 8048 clone
DECLARE_DEVICE_TYPE(UPD7751, upd7751_device) // 8048 clone
DECLARE_DEVICE_TYPE(M58715, m58715_device) // 8049 clone
@ -604,11 +604,11 @@ public:
mb8884_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
class n7751_device : public mcs48_cpu_device
class upd7751_device : public mcs48_cpu_device
{
public:
// construction/destruction
n7751_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
upd7751_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
class m58715_device : public mcs48_cpu_device

View File

@ -62,12 +62,12 @@ public:
m_videoram(*this, "videoram"),
m_maincpu(*this, "maincpu"),
m_ay(*this, "ay%u", 0U),
m_n7751(*this, "n7751"),
m_i8243(*this, "n7751_8243"),
m_upd7751(*this, "upd7751"),
m_i8243(*this, "upd7751_8243"),
m_palette(*this, "palette"),
m_soundlatch(*this, "soundlatch"),
m_gfx_data(*this, "gfx"),
m_n7751_data(*this, "n7751data")
m_upd7751_data(*this, "upd7751data")
{ }
void othello(machine_config &config);
@ -86,25 +86,25 @@ private:
/* misc */
int m_ay_select = 0;
int m_ack_data = 0;
uint8_t m_n7751_command = 0;
uint8_t m_upd7751_command = 0;
int m_sound_addr = 0;
int m_n7751_busy = 0;
int m_upd7751_busy = 0;
/* devices */
required_device<cpu_device> m_maincpu;
required_device_array<ay8910_device, 2> m_ay;
required_device<n7751_device> m_n7751;
required_device<upd7751_device> m_upd7751;
required_device<i8243_device> m_i8243;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
required_region_ptr<uint8_t> m_gfx_data;
required_region_ptr<uint8_t> m_n7751_data;
required_region_ptr<uint8_t> m_upd7751_data;
uint8_t unk_87_r();
void unk_8a_w(uint8_t data);
void n7751_command_w(uint8_t data);
uint8_t n7751_busy_r();
void upd7751_command_w(uint8_t data);
uint8_t upd7751_busy_r();
uint8_t sound_ack_r();
void unk_8f_w(uint8_t data);
void tilebank_w(uint8_t data);
@ -113,11 +113,11 @@ private:
void ack_w(uint8_t data);
void ay_address_w(uint8_t data);
void ay_data_w(uint8_t data);
uint8_t n7751_rom_r();
uint8_t n7751_command_r();
void n7751_p2_w(uint8_t data);
template<int Shift> void n7751_rom_addr_w(uint8_t data);
void n7751_rom_select_w(uint8_t data);
uint8_t upd7751_rom_r();
uint8_t upd7751_command_r();
void upd7751_p2_w(uint8_t data);
template<int Shift> void upd7751_rom_addr_w(uint8_t data);
void upd7751_rom_select_w(uint8_t data);
void othello_palette(palette_device &palette) const;
MC6845_UPDATE_ROW(crtc_update_row);
@ -181,15 +181,15 @@ void othello_state::unk_8a_w(uint8_t data)
logerror("8a -> %x\n", data);
}
void othello_state::n7751_command_w(uint8_t data)
void othello_state::upd7751_command_w(uint8_t data)
{
m_n7751->set_input_line(0, (data & 0x80) ? CLEAR_LINE : ASSERT_LINE);
m_n7751_command = data;
m_upd7751->set_input_line(0, (data & 0x80) ? CLEAR_LINE : ASSERT_LINE);
m_upd7751_command = data;
}
uint8_t othello_state::n7751_busy_r()
uint8_t othello_state::upd7751_busy_r()
{
return m_n7751_busy;
return m_upd7751_busy;
}
uint8_t othello_state::sound_ack_r()
@ -219,7 +219,7 @@ void othello_state::main_portmap(address_map &map)
map(0x86, 0x86).w(FUNC(othello_state::tilebank_w));
map(0x87, 0x87).r(FUNC(othello_state::unk_87_r));
map(0x8a, 0x8a).w(FUNC(othello_state::unk_8a_w));
map(0x8c, 0x8c).rw(FUNC(othello_state::n7751_busy_r), FUNC(othello_state::n7751_command_w));
map(0x8c, 0x8c).rw(FUNC(othello_state::upd7751_busy_r), FUNC(othello_state::upd7751_command_w));
map(0x8d, 0x8d).r(FUNC(othello_state::sound_ack_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0x8f, 0x8f).w(FUNC(othello_state::unk_8f_w));
}
@ -272,7 +272,7 @@ void othello_state::audio_portmap(address_map &map)
}
template<int Shift>
void othello_state::n7751_rom_addr_w(uint8_t data)
void othello_state::upd7751_rom_addr_w(uint8_t data)
{
// P4 - address lines 0-3
// P5 - address lines 4-7
@ -280,7 +280,7 @@ void othello_state::n7751_rom_addr_w(uint8_t data)
m_sound_addr = (m_sound_addr & ~(0x00f << Shift)) | ((data & 0x0f) << Shift);
}
void othello_state::n7751_rom_select_w(uint8_t data)
void othello_state::upd7751_rom_select_w(uint8_t data)
{
// P7 - ROM selects
m_sound_addr &= 0xfff;
@ -291,24 +291,24 @@ void othello_state::n7751_rom_select_w(uint8_t data)
if (!BIT(data, 3)) m_sound_addr |= 0x3000;
}
uint8_t othello_state::n7751_rom_r()
uint8_t othello_state::upd7751_rom_r()
{
return m_n7751_data[m_sound_addr];
return m_upd7751_data[m_sound_addr];
}
uint8_t othello_state::n7751_command_r()
uint8_t othello_state::upd7751_command_r()
{
return m_n7751_command << 4 | 0x0f;
return m_upd7751_command << 4 | 0x0f;
}
void othello_state::n7751_p2_w(uint8_t data)
void othello_state::upd7751_p2_w(uint8_t data)
{
/* write to P2; low 4 bits go to 8243 */
m_i8243->p2_w(data & 0x0f);
/* output of bit $80 indicates we are ready (1) or busy (0) */
/* no other outputs are used */
m_n7751_busy = data & 0x80;
m_upd7751_busy = data & 0x80;
}
static INPUT_PORTS_START( othello )
@ -361,9 +361,9 @@ void othello_state::machine_start()
save_item(NAME(m_tile_bank));
save_item(NAME(m_ay_select));
save_item(NAME(m_ack_data));
save_item(NAME(m_n7751_command));
save_item(NAME(m_upd7751_command));
save_item(NAME(m_sound_addr));
save_item(NAME(m_n7751_busy));
save_item(NAME(m_upd7751_busy));
}
void othello_state::machine_reset()
@ -371,9 +371,9 @@ void othello_state::machine_reset()
m_tile_bank = 0;
m_ay_select = 0;
m_ack_data = 0;
m_n7751_command = 0;
m_upd7751_command = 0;
m_sound_addr = 0;
m_n7751_busy = 0;
m_upd7751_busy = 0;
}
void othello_state::othello(machine_config &config)
@ -388,21 +388,21 @@ void othello_state::othello(machine_config &config)
audiocpu.set_addrmap(AS_PROGRAM, &othello_state::audio_map);
audiocpu.set_addrmap(AS_IO, &othello_state::audio_portmap);
N7751(config, m_n7751, XTAL(6'000'000));
m_n7751->t1_in_cb().set_constant(0); // labelled as "TEST", connected to ground
m_n7751->p2_in_cb().set(FUNC(othello_state::n7751_command_r));
m_n7751->bus_in_cb().set(FUNC(othello_state::n7751_rom_r));
m_n7751->p1_out_cb().set("dac", FUNC(dac_byte_interface::data_w));
m_n7751->p2_out_cb().set(FUNC(othello_state::n7751_p2_w));
m_n7751->prog_out_cb().set(m_i8243, FUNC(i8243_device::prog_w));
UPD7751(config, m_upd7751, XTAL(6'000'000));
m_upd7751->t1_in_cb().set_constant(0); // labelled as "TEST", connected to ground
m_upd7751->p2_in_cb().set(FUNC(othello_state::upd7751_command_r));
m_upd7751->bus_in_cb().set(FUNC(othello_state::upd7751_rom_r));
m_upd7751->p1_out_cb().set("dac", FUNC(dac_byte_interface::data_w));
m_upd7751->p2_out_cb().set(FUNC(othello_state::upd7751_p2_w));
m_upd7751->prog_out_cb().set(m_i8243, FUNC(i8243_device::prog_w));
config.set_perfect_quantum(m_maincpu);
I8243(config, m_i8243);
m_i8243->p4_out_cb().set(FUNC(othello_state::n7751_rom_addr_w<0>));
m_i8243->p5_out_cb().set(FUNC(othello_state::n7751_rom_addr_w<4>));
m_i8243->p6_out_cb().set(FUNC(othello_state::n7751_rom_addr_w<8>));
m_i8243->p7_out_cb().set(FUNC(othello_state::n7751_rom_select_w));
m_i8243->p4_out_cb().set(FUNC(othello_state::upd7751_rom_addr_w<0>));
m_i8243->p5_out_cb().set(FUNC(othello_state::upd7751_rom_addr_w<4>));
m_i8243->p6_out_cb().set(FUNC(othello_state::upd7751_rom_addr_w<8>));
m_i8243->p7_out_cb().set(FUNC(othello_state::upd7751_rom_select_w));
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@ -438,10 +438,10 @@ ROM_START( othello )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "3.ic32", 0x0000, 0x2000, CRC(2bb4f75d) SHA1(29a659031acf0d50f374f440b8d353bcf98145a0))
ROM_REGION( 0x1000, "n7751", 0 ) /* 1k for 7751 onboard ROM */
ROM_REGION( 0x1000, "upd7751", 0 ) /* 1k for 7751 onboard ROM */
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) )
ROM_REGION( 0x4000, "n7751data", 0 ) /* 7751 sound data */
ROM_REGION( 0x4000, "upd7751data", 0 ) /* 7751 sound data */
ROM_LOAD( "1.ic48", 0x0000, 0x2000, CRC(c3807dea) SHA1(d6339380e1239f3e20bcca2fbc673ad72e9ca608))
ROM_LOAD( "2.ic49", 0x2000, 0x2000, CRC(a945f3e7) SHA1(ea18efc18fda63ce1747287bbe2a9704b08daff8))

View File

@ -50,7 +50,7 @@
* G-80 2716 EPROM board
* Video I board
* Monster Bash Background Board
* Monster Bash Sound Board (N7751+DAC, TMS3617, discrete)
* Monster Bash Sound Board (D7751+DAC, TMS3617, discrete)
It appears that later on in the evolution of the hardware, Sega
produced a 2-board version of the hardware which put all the CPU,
@ -58,7 +58,7 @@
Monster Bash (2 board):
* G-80 consolidated boardset (315-5006 encrypted Z80)
* Monster Bash Sound Board (N7751+DAC, TMS3617, discrete)
* Monster Bash Sound Board (D7751+DAC, TMS3617, discrete)
Pig Newton:
* G-80 consolidated boardset (315-0062 security)
@ -909,8 +909,8 @@ void segag80r_state::monsterb(machine_config &config)
i8255_device &ppi(I8255A(config, "ppi8255"));
ppi.out_pa_callback().set(m_soundbrd, FUNC(monsterb_sound_device::sound_a_w));
ppi.out_pb_callback().set(m_soundbrd, FUNC(monsterb_sound_device::sound_b_w));
ppi.in_pc_callback().set(m_soundbrd, FUNC(monsterb_sound_device::n7751_status_r));
ppi.out_pc_callback().set(m_soundbrd, FUNC(monsterb_sound_device::n7751_command_w));
ppi.in_pc_callback().set(m_soundbrd, FUNC(monsterb_sound_device::upd7751_status_r));
ppi.out_pc_callback().set(m_soundbrd, FUNC(monsterb_sound_device::upd7751_command_w));
/* background board changes */
m_gfxdecode->set_info(gfx_monsterb);
@ -1369,7 +1369,7 @@ ROM_START( monsterb )
ROM_REGION( 0x2000, "gfx2", 0 )
ROM_LOAD( "1518a.bg-u22", 0x0000, 0x2000, CRC(2d5932fe) SHA1(a9ca239a062e047b307cf3d0740cb6492a55abb4) )
ROM_REGION( 0x2000, "soundbrd:n7751", 0 )
ROM_REGION( 0x2000, "soundbrd:upd7751", 0 )
ROM_LOAD( "1543snd.bin", 0x0000, 0x1000, CRC(b525ce8f) SHA1(61e541061a0a579101e52ffa2431540010b9df3e) ) /* U19 */
ROM_LOAD( "1544snd.bin", 0x1000, 0x1000, CRC(56c79fb0) SHA1(26de83efcc97318220603f83acf4387f6d70d806) ) /* U23 */
@ -1412,7 +1412,7 @@ ROM_START( monsterb2 )
ROM_REGION( 0x2000, "gfx2", 0 )
ROM_LOAD( "epr-1554.58", 0x0000, 0x2000, CRC(a87937d0) SHA1(cfc2fca52bd74beb2f20ece07e9dd3e3f1038f7c) )
ROM_REGION( 0x2000, "soundbrd:n7751", 0 )
ROM_REGION( 0x2000, "soundbrd:upd7751", 0 )
ROM_LOAD( "epr-1543.19", 0x0000, 0x1000, CRC(b525ce8f) SHA1(61e541061a0a579101e52ffa2431540010b9df3e) )
ROM_LOAD( "epr-1544.23", 0x1000, 0x1000, CRC(56c79fb0) SHA1(26de83efcc97318220603f83acf4387f6d70d806) )
@ -1761,7 +1761,6 @@ GAME( 1981, astrob1, astrob, astrob, astrob, segag80r_state, init_astrob
GAME( 1981, astrobg, astrob, astrob, astrob, segag80r_state, init_astrob, ROT270, "Sega", "Astro Blaster (German)", 0 )
GAME( 1981, 005, 0, sega005, 005, segag80r_state, init_005, ROT270, "Sega", "005", MACHINE_IMPERFECT_SOUND )
/* basic G-80 system with individual background boards */
GAME( 1981, spaceod, 0, spaceod, spaceod, segag80r_state, init_spaceod, ROT270, "Sega", "Space Odyssey (version 2)", MACHINE_IMPERFECT_SOUND )
GAME( 1981, spaceod2, spaceod, spaceod, spaceod, segag80r_state, init_spaceod, ROT270, "Sega", "Space Odyssey (version 1)", MACHINE_IMPERFECT_SOUND )

View File

@ -416,7 +416,7 @@ static const char *const monsterb_sample_names[] =
monsterb_sound_device::monsterb_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, MONSTERB_SOUND, tag, owner, clock)
, m_audiocpu(*this, "audiocpu")
, m_audiocpu_region(*this, "n7751")
, m_audiocpu_region(*this, "upd7751")
, m_music(*this, "music")
, m_samples(*this, "samples")
, m_i8243(*this, "i8243")
@ -425,8 +425,8 @@ monsterb_sound_device::monsterb_sound_device(const machine_config &mconfig, cons
void monsterb_sound_device::device_start()
{
save_item(NAME(m_n7751_command));
save_item(NAME(m_n7751_busy));
save_item(NAME(m_upd7751_command));
save_item(NAME(m_upd7751_busy));
save_item(NAME(m_sound_state));
save_item(NAME(m_sound_addr));
}
@ -474,17 +474,17 @@ void monsterb_sound_device::sound_b_w(uint8_t data)
/*************************************
*
* N7751 connections
* D7751 connections
*
*************************************/
uint8_t monsterb_sound_device::n7751_status_r()
uint8_t monsterb_sound_device::upd7751_status_r()
{
return m_n7751_busy << 4;
return m_upd7751_busy << 4;
}
void monsterb_sound_device::n7751_command_w(uint8_t data)
void monsterb_sound_device::upd7751_command_w(uint8_t data)
{
/*
Z80 7751 control port
@ -492,14 +492,14 @@ void monsterb_sound_device::n7751_command_w(uint8_t data)
D0-D2 = connected to 7751 port C
D3 = /INT line
*/
m_n7751_command = data & 0x07;
m_upd7751_command = data & 0x07;
m_audiocpu->set_input_line(0, ((data & 0x08) == 0) ? ASSERT_LINE : CLEAR_LINE);
machine().scheduler().perfect_quantum(attotime::from_usec(100));
}
template<int Shift>
void monsterb_sound_device::n7751_rom_addr_w(uint8_t data)
void monsterb_sound_device::upd7751_rom_addr_w(uint8_t data)
{
// P4 - address lines 0-3
// P5 - address lines 4-7
@ -508,7 +508,7 @@ void monsterb_sound_device::n7751_rom_addr_w(uint8_t data)
}
void monsterb_sound_device::n7751_rom_select_w(uint8_t data)
void monsterb_sound_device::upd7751_rom_select_w(uint8_t data)
{
// P7 - ROM selects
m_sound_addr &= 0xfff;
@ -521,29 +521,29 @@ void monsterb_sound_device::n7751_rom_select_w(uint8_t data)
}
uint8_t monsterb_sound_device::n7751_rom_r()
uint8_t monsterb_sound_device::upd7751_rom_r()
{
/* read from BUS */
return m_audiocpu_region->base()[m_sound_addr];
}
uint8_t monsterb_sound_device::n7751_command_r()
uint8_t monsterb_sound_device::upd7751_command_r()
{
/* read from P2 - 8255's PC0-2 connects to 7751's S0-2 (P24-P26 on an 8048) */
/* bit 0x80 is an alternate way to control the sample on/off; doesn't appear to be used */
return 0x80 | ((m_n7751_command & 0x07) << 4);
return 0x80 | ((m_upd7751_command & 0x07) << 4);
}
void monsterb_sound_device::n7751_p2_w(uint8_t data)
void monsterb_sound_device::upd7751_p2_w(uint8_t data)
{
/* write to P2; low 4 bits go to 8243 */
m_i8243->p2_w(data & 0x0f);
/* output of bit $80 indicates we are ready (1) or busy (0) */
/* no other outputs are used */
m_n7751_busy = data >> 7;
m_upd7751_busy = data >> 7;
}
@ -557,19 +557,19 @@ void monsterb_sound_device::n7751_p2_w(uint8_t data)
void monsterb_sound_device::device_add_mconfig(machine_config &config)
{
/* basic machine hardware */
N7751(config, m_audiocpu, 6000000);
UPD7751(config, m_audiocpu, 6000000);
m_audiocpu->t1_in_cb().set_constant(0); // labelled as "TEST", connected to ground
m_audiocpu->p2_in_cb().set(FUNC(monsterb_sound_device::n7751_command_r));
m_audiocpu->bus_in_cb().set(FUNC(monsterb_sound_device::n7751_rom_r));
m_audiocpu->p2_in_cb().set(FUNC(monsterb_sound_device::upd7751_command_r));
m_audiocpu->bus_in_cb().set(FUNC(monsterb_sound_device::upd7751_rom_r));
m_audiocpu->p1_out_cb().set("dac", FUNC(dac_byte_interface::data_w));
m_audiocpu->p2_out_cb().set(FUNC(monsterb_sound_device::n7751_p2_w));
m_audiocpu->p2_out_cb().set(FUNC(monsterb_sound_device::upd7751_p2_w));
m_audiocpu->prog_out_cb().set(m_i8243, FUNC(i8243_device::prog_w));
I8243(config, m_i8243);
m_i8243->p4_out_cb().set(FUNC(monsterb_sound_device::n7751_rom_addr_w<0>));
m_i8243->p5_out_cb().set(FUNC(monsterb_sound_device::n7751_rom_addr_w<4>));
m_i8243->p6_out_cb().set(FUNC(monsterb_sound_device::n7751_rom_addr_w<8>));
m_i8243->p7_out_cb().set(FUNC(monsterb_sound_device::n7751_rom_select_w));
m_i8243->p4_out_cb().set(FUNC(monsterb_sound_device::upd7751_rom_addr_w<0>));
m_i8243->p5_out_cb().set(FUNC(monsterb_sound_device::upd7751_rom_addr_w<4>));
m_i8243->p6_out_cb().set(FUNC(monsterb_sound_device::upd7751_rom_addr_w<8>));
m_i8243->p7_out_cb().set(FUNC(monsterb_sound_device::upd7751_rom_select_w));
SAMPLES(config, m_samples);
m_samples->set_channels(2);

View File

@ -31,8 +31,8 @@ public:
monsterb_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
uint8_t n7751_status_r();
void n7751_command_w(uint8_t data);
uint8_t upd7751_status_r();
void upd7751_command_w(uint8_t data);
void sound_a_w(uint8_t data);
void sound_b_w(uint8_t data);
@ -43,14 +43,14 @@ protected:
virtual void device_start() override;
virtual void device_add_mconfig(machine_config &config) override;
uint8_t n7751_command_r();
void n7751_p2_w(uint8_t data);
uint8_t upd7751_command_r();
void upd7751_p2_w(uint8_t data);
uint8_t n7751_rom_r();
template<int Shift> void n7751_rom_addr_w(uint8_t data);
void n7751_rom_select_w(uint8_t data);
uint8_t upd7751_rom_r();
template<int Shift> void upd7751_rom_addr_w(uint8_t data);
void upd7751_rom_select_w(uint8_t data);
required_device<n7751_device> m_audiocpu;
required_device<upd7751_device> m_audiocpu;
required_memory_region m_audiocpu_region;
required_device<tms36xx_device> m_music;
@ -58,8 +58,8 @@ protected:
required_device<i8243_device> m_i8243;
uint8_t m_n7751_command;
uint8_t m_n7751_busy;
uint8_t m_upd7751_command;
uint8_t m_upd7751_busy;
uint8_t m_sound_state[2];
uint16_t m_sound_addr;
};

View File

@ -325,10 +325,10 @@ uint8_t segas16a_state::sound_data_r()
//-------------------------------------------------
// n7751_command_w - control the N7751
// upd7751_command_w - control the D7751
//-------------------------------------------------
void segas16a_state::n7751_command_w(uint8_t data)
void segas16a_state::upd7751_command_w(uint8_t data)
{
//
// Z80 7751 control port
@ -340,22 +340,22 @@ void segas16a_state::n7751_command_w(uint8_t data)
// D1 = /CS for ROM 0
// D0 = A14 line to ROMs
//
int numroms = memregion("n7751data")->bytes() / 0x8000;
m_n7751_rom_address &= 0x3fff;
m_n7751_rom_address |= (data & 0x01) << 14;
if (!(data & 0x02) && numroms >= 1) m_n7751_rom_address |= 0x00000;
if (!(data & 0x04) && numroms >= 2) m_n7751_rom_address |= 0x08000;
if (!(data & 0x08) && numroms >= 3) m_n7751_rom_address |= 0x10000;
if (!(data & 0x10) && numroms >= 4) m_n7751_rom_address |= 0x18000;
m_n7751_command = data >> 5;
int numroms = memregion("upd7751data")->bytes() / 0x8000;
m_upd7751_rom_address &= 0x3fff;
m_upd7751_rom_address |= (data & 0x01) << 14;
if (!(data & 0x02) && numroms >= 1) m_upd7751_rom_address |= 0x00000;
if (!(data & 0x04) && numroms >= 2) m_upd7751_rom_address |= 0x08000;
if (!(data & 0x08) && numroms >= 3) m_upd7751_rom_address |= 0x10000;
if (!(data & 0x10) && numroms >= 4) m_upd7751_rom_address |= 0x18000;
m_upd7751_command = data >> 5;
}
//-------------------------------------------------
// n7751_control_w - YM2151 output port callback
// upd7751_control_w - YM2151 output port callback
//-------------------------------------------------
void segas16a_state::n7751_control_w(uint8_t data)
void segas16a_state::upd7751_control_w(uint8_t data)
{
//
// YM2151 output port
@ -363,18 +363,18 @@ void segas16a_state::n7751_control_w(uint8_t data)
// D1 = /RESET line on 7751
// D0 = /IRQ line on 7751
//
m_n7751->set_input_line(INPUT_LINE_RESET, (data & 0x01) ? CLEAR_LINE : ASSERT_LINE);
m_n7751->set_input_line(0, (data & 0x02) ? CLEAR_LINE : ASSERT_LINE);
m_upd7751->set_input_line(INPUT_LINE_RESET, (data & 0x01) ? CLEAR_LINE : ASSERT_LINE);
m_upd7751->set_input_line(0, (data & 0x02) ? CLEAR_LINE : ASSERT_LINE);
machine().scheduler().perfect_quantum(attotime::from_usec(100));
}
//-------------------------------------------------
// n7751_rom_offset_w - post expander callback
// upd7751_rom_offset_w - post expander callback
//-------------------------------------------------
template<int Shift>
void segas16a_state::n7751_rom_offset_w(uint8_t data)
void segas16a_state::upd7751_rom_offset_w(uint8_t data)
{
// P4 - address lines 0-3
// P5 - address lines 4-7
@ -382,44 +382,44 @@ void segas16a_state::n7751_rom_offset_w(uint8_t data)
// P7 - address lines 12-13
int mask = (0xf << Shift) & 0x3fff;
int newdata = (data << Shift) & mask;
m_n7751_rom_address = (m_n7751_rom_address & ~mask) | newdata;
m_upd7751_rom_address = (m_upd7751_rom_address & ~mask) | newdata;
}
//**************************************************************************
// N7751 SOUND GENERATOR CPU READ/WRITE HANDLERS
// D7751 SOUND GENERATOR CPU READ/WRITE HANDLERS
//**************************************************************************
//-------------------------------------------------
// n7751_rom_r - MCU reads from BUS
// upd7751_rom_r - MCU reads from BUS
//-------------------------------------------------
uint8_t segas16a_state::n7751_rom_r()
uint8_t segas16a_state::upd7751_rom_r()
{
// read from BUS
return memregion("n7751data")->base()[m_n7751_rom_address];
return memregion("upd7751data")->base()[m_upd7751_rom_address];
}
//-------------------------------------------------
// n7751_p2_r - MCU reads from the P2 lines
// upd7751_p2_r - MCU reads from the P2 lines
//-------------------------------------------------
uint8_t segas16a_state::n7751_p2_r()
uint8_t segas16a_state::upd7751_p2_r()
{
// read from P2 - 8255's PC0-2 connects to 7751's S0-2 (P24-P26 on an 8048)
// bit 0x80 is an alternate way to control the sample on/off; doesn't appear to be used
return 0x80 | ((m_n7751_command & 0x07) << 4) | (m_n7751_i8243->p2_r() & 0x0f);
return 0x80 | ((m_upd7751_command & 0x07) << 4) | (m_upd7751_i8243->p2_r() & 0x0f);
}
//-------------------------------------------------
// n7751_p2_w - MCU writes to the P2 lines
// upd7751_p2_w - MCU writes to the P2 lines
//-------------------------------------------------
void segas16a_state::n7751_p2_w(uint8_t data)
void segas16a_state::upd7751_p2_w(uint8_t data)
{
// write to P2; low 4 bits go to 8243
m_n7751_i8243->p2_w(data & 0x0f);
m_upd7751_i8243->p2_w(data & 0x0f);
// output of bit $80 indicates we are ready (1) or busy (0)
// no other outputs are used
@ -627,8 +627,8 @@ void segas16a_state::machine_reset()
m_i8751_sync_timer->adjust(attotime::zero);
m_video_control = 0;
m_mcu_control = 0x00;
m_n7751_command = 0;
m_n7751_rom_address = 0;
m_upd7751_command = 0;
m_upd7751_rom_address = 0;
m_last_buttons1 = 0;
m_last_buttons2 = 0;
m_read_port = 0;
@ -995,7 +995,7 @@ void segas16a_state::sound_portmap(address_map &map)
map.unmap_value_high();
map.global_mask(0xff);
map(0x00, 0x01).mirror(0x3e).rw(m_ymsnd, FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0x80, 0x80).mirror(0x3f).w(FUNC(segas16a_state::n7751_command_w));
map(0x80, 0x80).mirror(0x3f).w(FUNC(segas16a_state::upd7751_command_w));
map(0xc0, 0xc0).mirror(0x3f).r(FUNC(segas16a_state::sound_data_r));
}
@ -1975,19 +1975,19 @@ void segas16a_state::system16a(machine_config &config)
m_soundcpu->set_addrmap(AS_PROGRAM, &segas16a_state::sound_map);
m_soundcpu->set_addrmap(AS_IO, &segas16a_state::sound_portmap);
N7751(config, m_n7751, 6000000);
m_n7751->bus_in_cb().set(FUNC(segas16a_state::n7751_rom_r));
m_n7751->t1_in_cb().set_constant(0); // labelled as "TEST", connected to ground
m_n7751->p1_out_cb().set("dac", FUNC(dac_byte_interface::data_w));
m_n7751->p2_in_cb().set(FUNC(segas16a_state::n7751_p2_r));
m_n7751->p2_out_cb().set(FUNC(segas16a_state::n7751_p2_w));
m_n7751->prog_out_cb().set("n7751_8243", FUNC(i8243_device::prog_w));
UPD7751(config, m_upd7751, 6000000);
m_upd7751->bus_in_cb().set(FUNC(segas16a_state::upd7751_rom_r));
m_upd7751->t1_in_cb().set_constant(0); // labelled as "TEST", connected to ground
m_upd7751->p1_out_cb().set("dac", FUNC(dac_byte_interface::data_w));
m_upd7751->p2_in_cb().set(FUNC(segas16a_state::upd7751_p2_r));
m_upd7751->p2_out_cb().set(FUNC(segas16a_state::upd7751_p2_w));
m_upd7751->prog_out_cb().set("upd7751_8243", FUNC(i8243_device::prog_w));
I8243(config, m_n7751_i8243);
m_n7751_i8243->p4_out_cb().set(FUNC(segas16a_state::n7751_rom_offset_w<0>));
m_n7751_i8243->p5_out_cb().set(FUNC(segas16a_state::n7751_rom_offset_w<4>));
m_n7751_i8243->p6_out_cb().set(FUNC(segas16a_state::n7751_rom_offset_w<8>));
m_n7751_i8243->p7_out_cb().set(FUNC(segas16a_state::n7751_rom_offset_w<12>));
I8243(config, m_upd7751_i8243);
m_upd7751_i8243->p4_out_cb().set(FUNC(segas16a_state::upd7751_rom_offset_w<0>));
m_upd7751_i8243->p5_out_cb().set(FUNC(segas16a_state::upd7751_rom_offset_w<4>));
m_upd7751_i8243->p6_out_cb().set(FUNC(segas16a_state::upd7751_rom_offset_w<8>));
m_upd7751_i8243->p7_out_cb().set(FUNC(segas16a_state::upd7751_rom_offset_w<12>));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@ -2021,7 +2021,7 @@ void segas16a_state::system16a(machine_config &config)
GENERIC_LATCH_8(config, m_soundlatch);
YM2151(config, m_ymsnd, 4000000);
m_ymsnd->port_write_handler().set(FUNC(segas16a_state::n7751_control_w));
m_ymsnd->port_write_handler().set(FUNC(segas16a_state::upd7751_control_w));
m_ymsnd->add_route(ALL_OUTPUTS, "speaker", 0.43);
DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.4); // unknown DAC
@ -2079,8 +2079,8 @@ void segas16a_state::system16a_no7751(machine_config &config)
system16a(config);
m_soundcpu->set_addrmap(AS_IO, &segas16a_state::sound_no7751_portmap);
config.device_remove("n7751");
config.device_remove("n7751_8243");
config.device_remove("upd7751");
config.device_remove("upd7751_8243");
config.device_remove("dac");
YM2151(config.replace(), m_ymsnd, 4000000);
@ -2101,7 +2101,7 @@ void segas16a_state::system16a_no7751p(machine_config &config)
void segas16a_state::system16a_i8751_no7751(machine_config &config)
{
system16a_i8751(config);
config.device_remove("n7751");
config.device_remove("upd7751");
config.device_remove("dac");
YM2151(config.replace(), "ymsnd", 4000000).add_route(ALL_OUTPUTS, "speaker", 0.5);
@ -2113,7 +2113,7 @@ void segas16a_state::system16a_fd1089a_no7751(machine_config &config)
system16a_fd1089a(config);
m_soundcpu->set_addrmap(AS_IO, &segas16a_state::sound_no7751_portmap);
config.device_remove("n7751");
config.device_remove("upd7751");
config.device_remove("dac");
YM2151(config.replace(), m_ymsnd, 4000000);
@ -2125,7 +2125,7 @@ void segas16a_state::system16a_fd1089b_no7751(machine_config &config)
system16a_fd1089b(config);
m_soundcpu->set_addrmap(AS_IO, &segas16a_state::sound_no7751_portmap);
config.device_remove("n7751");
config.device_remove("upd7751");
config.device_remove("dac");
YM2151(config.replace(), m_ymsnd, 4000000);
@ -2137,7 +2137,7 @@ void segas16a_state::system16a_fd1094_no7751(machine_config &config)
system16a_fd1094(config);
m_soundcpu->set_addrmap(AS_IO, &segas16a_state::sound_no7751_portmap);
config.device_remove("n7751");
config.device_remove("upd7751");
config.device_remove("dac");
YM2151(config.replace(), m_ymsnd, 4000000);
@ -2193,10 +2193,10 @@ ROM_START( aceattaca )
ROM_REGION( 0x20000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-11578.12", 0x0000, 0x8000, CRC(3d58e39a) SHA1(3e3591ac96903376698cf95d1b1a5f5db590db3c) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x20000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x20000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-11579.1", 0x00000, 0x8000, CRC(1a994135) SHA1(f42444521a878d32b189876f8854f6363e1b353b) )
ROM_LOAD( "epr-11580.2", 0x08000, 0x8000, CRC(961646ed) SHA1(4c8f87a10ffd7035145dedba86deb373368b0e49) )
ROM_LOAD( "epr-11581.4", 0x10000, 0x8000, CRC(d271a6e5) SHA1(de303f70abfa28e599e5eb0c2b314f43faa1b484) )
@ -2391,10 +2391,10 @@ ROM_START( alexkidd )
ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-10434.12", 0x0000, 0x8000, CRC(77141cce) SHA1(6c5e83527f7e11a5ff5cc4fa75d55618a55e1a58) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x10000, "n7751data", 0 ) // 7751 sound data (not used yet)
ROM_REGION( 0x10000, "upd7751data", 0 ) // 7751 sound data (not used yet)
ROM_LOAD( "epr-10435.1", 0x0000, 0x8000, CRC(ad89f6e3) SHA1(812a132142065b0fe13b5f0ac534b6d8830ba102) )
ROM_LOAD( "epr-10436.2", 0x8000, 0x8000, CRC(96c76613) SHA1(fe3e4e649fd2cb2453eec0c92015bd54b3b9a1b5) )
ROM_END
@ -2428,10 +2428,10 @@ ROM_START( alexkidd1 )
ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-10434.12", 0x0000, 0x8000, CRC(77141cce) SHA1(6c5e83527f7e11a5ff5cc4fa75d55618a55e1a58) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x10000, "n7751data", 0 ) // 7751 sound data (not used yet)
ROM_REGION( 0x10000, "upd7751data", 0 ) // 7751 sound data (not used yet)
ROM_LOAD( "epr-10435.1", 0x0000, 0x8000, CRC(ad89f6e3) SHA1(812a132142065b0fe13b5f0ac534b6d8830ba102) )
ROM_LOAD( "epr-10436.2", 0x8000, 0x8000, CRC(96c76613) SHA1(fe3e4e649fd2cb2453eec0c92015bd54b3b9a1b5) )
@ -2481,10 +2481,10 @@ ROM_START( aliensyn5 )
ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-10705.12", 0x00000, 0x8000, CRC(777b749e) SHA1(086b03100064a98228f95db7962b2671121c46ea) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x18000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x18000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-10706.1", 0x00000, 0x8000, CRC(aa114acc) SHA1(81a2b3586ae90bc7fc55b82478ffe182ac49983e) )
ROM_LOAD( "epr-10707.2", 0x08000, 0x8000, CRC(800c1d82) SHA1(aac4123bd35f87da09264649f4cf8326b2ba3cb8) )
ROM_LOAD( "epr-10708.4", 0x10000, 0x8000, CRC(5921ef52) SHA1(eff9978361692e6e60a9c6caf5740dd6182cfe4a) )
@ -2532,10 +2532,10 @@ ROM_START( aliensyn2 )
ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-10705.b1", 0x00000, 0x8000, CRC(777b749e) SHA1(086b03100064a98228f95db7962b2671121c46ea) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x18000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x18000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-10706.c1", 0x00000, 0x8000, CRC(aa114acc) SHA1(81a2b3586ae90bc7fc55b82478ffe182ac49983e) )
ROM_LOAD( "epr-10707.c2", 0x08000, 0x8000, CRC(800c1d82) SHA1(aac4123bd35f87da09264649f4cf8326b2ba3cb8) )
ROM_LOAD( "epr-10708.c3", 0x10000, 0x8000, CRC(5921ef52) SHA1(eff9978361692e6e60a9c6caf5740dd6182cfe4a) )
@ -2583,10 +2583,10 @@ ROM_START( aliensynjo )
ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-10705.12", 0x00000, 0x8000, CRC(777b749e) SHA1(086b03100064a98228f95db7962b2671121c46ea) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x18000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x18000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-10706.1", 0x00000, 0x8000, CRC(aa114acc) SHA1(81a2b3586ae90bc7fc55b82478ffe182ac49983e) )
ROM_LOAD( "epr-10707.2", 0x08000, 0x8000, CRC(800c1d82) SHA1(aac4123bd35f87da09264649f4cf8326b2ba3cb8) )
ROM_LOAD( "epr-10708.4", 0x10000, 0x8000, CRC(5921ef52) SHA1(eff9978361692e6e60a9c6caf5740dd6182cfe4a) )
@ -2632,10 +2632,10 @@ ROM_START( bodyslam )
ROM_REGION( 0x30000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-10026.b1", 0x00000, 0x8000, CRC(123b69b8) SHA1(c0614a8c822991e257f7218908247df278056de8) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x20000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x20000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-10029.c1", 0x00000, 0x8000, CRC(7e4aca83) SHA1(703486b96d493941ee87267e8363220a851f008e) )
ROM_LOAD( "epr-10030.c2", 0x08000, 0x8000, CRC(dcc1df0b) SHA1(a82a557fa48f4b3e1ab38f61b84d749cd417e80f) )
ROM_LOAD( "epr-10031.c3", 0x10000, 0x8000, CRC(ea3c4472) SHA1(ad8eac2d3d14fd6aba713f4d624861c17aabf757) )
@ -2677,10 +2677,10 @@ ROM_START( dumpmtmt )
ROM_REGION( 0x30000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-7710a.b1", 0x00000, 0x8000, CRC(a19b8ba8) SHA1(21b628d4ecbe38a6d96a39ca4252ff1cb728343f) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x20000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x20000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-7711.c1", 0x00000, 0x8000, CRC(efa9aabd) SHA1(b0928313b98159b95f3a6784c6279924774b9253) )
ROM_LOAD( "epr-7712.c2", 0x08000, 0x8000, CRC(7bcd85cf) SHA1(9acba6998327e1074d7311a9b6d06da9baf69aa0) )
ROM_LOAD( "epr-7713.c3", 0x10000, 0x8000, CRC(33f292e7) SHA1(4358cd3922a0dcbf109d2d697c7b8c4e090c3d52) )
@ -2884,10 +2884,10 @@ ROM_START( mjleague )
ROM_REGION( 0x20000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-7054c.1b", 0x00000, 0x8000, CRC(4443b744) SHA1(73359a6e9d62b382dee47fea31b9e17eb26a0321) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x20000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x20000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-7063.1a", 0x00000, 0x8000, CRC(45d8908a) SHA1(e61f81f953c1a744ded36fed3b55774e4747af29) )
ROM_LOAD( "epr-7065.2a", 0x08000, 0x8000, CRC(8c8f8cff) SHA1(fca5a916a8b25800ee5e8771e2ced0ed9bd737f4) )
ROM_LOAD( "epr-7064.3a", 0x10000, 0x8000, CRC(159f6636) SHA1(66fa3f3e95a6ef3d3ff4ded09c05ab1131d9fbbb) )
@ -2931,10 +2931,10 @@ ROM_START( passsht16a )
ROM_REGION( 0x20000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-11837.12", 0x0000, 0x8000, CRC(74d11552) SHA1(5a0f0c3fb858ed2bad8002fce4e29d730f102bcd) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x20000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x20000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-11838.1", 0x00000, 0x8000, CRC(a465cd69) SHA1(25da3809824fb3df1f93bbfa88355a7c50e44211) )
ROM_LOAD( "epr-11839.2", 0x08000, 0x8000, CRC(99de6197) SHA1(f7de6a34fa185754c12276a94b1513234d352f3f) )
ROM_LOAD( "epr-11840.4", 0x10000, 0x8000, CRC(9854e8b3) SHA1(bc9d8a17ff96cf03f9a955223c11d9f1fb0309c5) )
@ -2981,10 +2981,10 @@ ROM_START( quartet )
ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-7464.1b", 0x0000, 0x8000, CRC(9f291306) SHA1(96a09542a863ccf2ded43e2df6f913722b3f97b1) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x20000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x20000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-7473.1c", 0x00000, 0x8000, CRC(06ec75fa) SHA1(5f14bc887449122700c46ad22c0379a1682e0bdb) )
ROM_LOAD( "epr-7475.2c", 0x08000, 0x8000, CRC(7abd1206) SHA1(54d52dc0b9c245cd2df647e714310a71b803cbcf) )
ROM_LOAD( "epr-7474.3c", 0x10000, 0x8000, CRC(dbf853b8) SHA1(e82f497e1144f23f3233b5c45ef182bfc7923715) )
@ -3036,10 +3036,10 @@ ROM_START( quarteta )
ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-7464.1b", 0x0000, 0x8000, CRC(9f291306) SHA1(96a09542a863ccf2ded43e2df6f913722b3f97b1) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x20000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x20000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-7473.1c", 0x00000, 0x8000, CRC(06ec75fa) SHA1(5f14bc887449122700c46ad22c0379a1682e0bdb) )
ROM_LOAD( "epr-7475.2c", 0x08000, 0x8000, CRC(7abd1206) SHA1(54d52dc0b9c245cd2df647e714310a71b803cbcf) )
ROM_LOAD( "epr-7474.3c", 0x10000, 0x8000, CRC(dbf853b8) SHA1(e82f497e1144f23f3233b5c45ef182bfc7923715) )
@ -3094,10 +3094,10 @@ ROM_START( quartet2 )
ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-7464.1b", 0x0000, 0x8000, CRC(9f291306) SHA1(96a09542a863ccf2ded43e2df6f913722b3f97b1) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x20000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x20000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-7473.1c", 0x00000, 0x8000, CRC(06ec75fa) SHA1(5f14bc887449122700c46ad22c0379a1682e0bdb) )
ROM_LOAD( "epr-7475.2c", 0x08000, 0x8000, CRC(7abd1206) SHA1(54d52dc0b9c245cd2df647e714310a71b803cbcf) )
ROM_LOAD( "epr-7474.3c", 0x10000, 0x8000, CRC(dbf853b8) SHA1(e82f497e1144f23f3233b5c45ef182bfc7923715) )
@ -3138,10 +3138,10 @@ ROM_START( quartet2a )
ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-7464.1b", 0x0000, 0x8000, CRC(9f291306) SHA1(96a09542a863ccf2ded43e2df6f913722b3f97b1) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x20000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x20000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-7473.1c", 0x00000, 0x8000, CRC(06ec75fa) SHA1(5f14bc887449122700c46ad22c0379a1682e0bdb) )
ROM_LOAD( "epr-7475.2c", 0x08000, 0x8000, CRC(7abd1206) SHA1(54d52dc0b9c245cd2df647e714310a71b803cbcf) )
ROM_LOAD( "epr-7474.3c", 0x10000, 0x8000, CRC(dbf853b8) SHA1(e82f497e1144f23f3233b5c45ef182bfc7923715) )
@ -3271,10 +3271,10 @@ ROM_START( shinobi )
ROM_REGION( 0x20000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-11267.12", 0x0000, 0x8000, CRC(dd50b745) SHA1(52e1977569d3713ad864d607170c9a61cd059a65) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x08000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x08000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-11268.1", 0x0000, 0x8000, CRC(6d7966da) SHA1(90f55a99f784c21d7c135e630f4e8b1d4d043d66) )
ROM_END
@ -3317,10 +3317,10 @@ ROM_START( shinobls )
ROM_REGION( 0x20000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "b8", 0x0000, 0x8000, CRC(dd50b745) SHA1(52e1977569d3713ad864d607170c9a61cd059a65) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x08000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x08000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "b9", 0x0000, 0x8000, CRC(6d7966da) SHA1(90f55a99f784c21d7c135e630f4e8b1d4d043d66) )
ROM_END
@ -3365,11 +3365,11 @@ ROM_START( shinoblb )
ROM_REGION( 0x20000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "1.5s", 0x0000, 0x8000, CRC(dd50b745) SHA1(52e1977569d3713ad864d607170c9a61cd059a65) )
// these 2 n7751 ROMs weren't present in this set, it's possible it didn't have them
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
// these 2 7751 ROMs weren't present in this set, it's possible it didn't have them
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x08000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x08000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "b9", 0x0000, 0x8000, CRC(6d7966da) SHA1(90f55a99f784c21d7c135e630f4e8b1d4d043d66) )
ROM_REGION( 0x08000, "samples", 0 )
@ -3419,10 +3419,10 @@ ROM_START( shinobi1 )
ROM_REGION( 0x20000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-11267.12", 0x0000, 0x8000, CRC(dd50b745) SHA1(52e1977569d3713ad864d607170c9a61cd059a65) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x08000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x08000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-11268.1", 0x0000, 0x8000, CRC(6d7966da) SHA1(90f55a99f784c21d7c135e630f4e8b1d4d043d66) )
ROM_END
@ -3459,10 +3459,10 @@ ROM_START( shinobi1d )
ROM_REGION( 0x20000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-11267.12", 0x0000, 0x8000, CRC(dd50b745) SHA1(52e1977569d3713ad864d607170c9a61cd059a65) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x08000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x08000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-11268.1", 0x0000, 0x8000, CRC(6d7966da) SHA1(90f55a99f784c21d7c135e630f4e8b1d4d043d66) )
ROM_END
@ -3518,10 +3518,10 @@ ROM_START( sjryuko1 )
ROM_REGION( 0x20000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-12227.12", 0x0000, 0x8000, CRC(5b12409d) SHA1(b25d6fa004461426f6358ab70fd071239c78e949) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x20000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x20000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-12228.1", 0x00000, 0x8000, CRC(6b2e6aef) SHA1(64ae6ec327c32cdb877a493ebfe11af15e2388ac) )
ROM_LOAD( "epr-12229.2", 0x08000, 0x8000, CRC(b7aa015c) SHA1(0ef023f73722e27180c271b207a5097220f40b5e) )
ROM_LOAD( "epr-12230.4", 0x10000, 0x8000, CRC(d0f61fd4) SHA1(e6f29459d7395122f26957f56e38926aebd9004c) )
@ -3726,10 +3726,10 @@ ROM_START( timescan1 )
ROM_REGION( 0x20000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-10546.12", 0x0000, 0x8000, CRC(1ebee5cc) SHA1(5e24ee25e770068a1292e657307cf53f6a8ae1c9) )
ROM_REGION( 0x1000, "n7751", 0 ) // 4k for 7751 onboard ROM
ROM_REGION( 0x1000, "upd7751", 0 ) // 4k for 7751 onboard ROM
ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) // 7751 - U34
ROM_REGION( 0x08000, "n7751data", 0 ) // 7751 sound data
ROM_REGION( 0x08000, "upd7751data", 0 ) // 7751 sound data
ROM_LOAD( "epr-10547.1", 0x0000, 0x8000, CRC(d24ffc4b) SHA1(3b250e1f026664f7a37f65d1c1a07381e88f11e8) )
ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key
@ -3910,8 +3910,8 @@ void segas16a_state::init_generic()
// save state
save_item(NAME(m_video_control));
save_item(NAME(m_mcu_control));
save_item(NAME(m_n7751_command));
save_item(NAME(m_n7751_rom_address));
save_item(NAME(m_upd7751_command));
save_item(NAME(m_upd7751_rom_address));
save_item(NAME(m_last_buttons1));
save_item(NAME(m_last_buttons2));
save_item(NAME(m_read_port));

View File

@ -35,8 +35,8 @@ public:
, m_mcu(*this, "mcu")
, m_i8255(*this, "i8255")
, m_ymsnd(*this, "ymsnd")
, m_n7751(*this, "n7751")
, m_n7751_i8243(*this, "n7751_8243")
, m_upd7751(*this, "upd7751")
, m_upd7751_i8243(*this, "upd7751_8243")
, m_nvram(*this, "nvram")
, m_watchdog(*this, "watchdog")
, m_segaic16vid(*this, "segaic16vid")
@ -50,8 +50,8 @@ public:
, m_custom_io_w(*this)
, m_video_control(0)
, m_mcu_control(0)
, m_n7751_command(0)
, m_n7751_rom_address(0)
, m_upd7751_command(0)
, m_upd7751_rom_address(0)
, m_last_buttons1(0)
, m_last_buttons2(0)
, m_read_port(0)
@ -95,14 +95,14 @@ private:
// Z80 sound CPU read/write handlers
uint8_t sound_data_r();
void n7751_command_w(uint8_t data);
void n7751_control_w(uint8_t data);
template<int Shift> void n7751_rom_offset_w(uint8_t data);
void upd7751_command_w(uint8_t data);
void upd7751_control_w(uint8_t data);
template<int Shift> void upd7751_rom_offset_w(uint8_t data);
// N7751 sound generator CPU read/write handlers
uint8_t n7751_rom_r();
uint8_t n7751_p2_r();
void n7751_p2_w(uint8_t data);
// D7751 sound generator CPU read/write handlers
uint8_t upd7751_rom_r();
uint8_t upd7751_p2_r();
void upd7751_p2_w(uint8_t data);
// I8751 MCU read/write handlers
void mcu_control_w(uint8_t data);
@ -154,8 +154,8 @@ private:
optional_device<i8751_device> m_mcu;
required_device<i8255_device> m_i8255;
required_device<ym2151_device> m_ymsnd;
optional_device<n7751_device> m_n7751;
optional_device<i8243_device> m_n7751_i8243;
optional_device<upd7751_device> m_upd7751;
optional_device<i8243_device> m_upd7751_i8243;
required_device<nvram_device> m_nvram;
required_device<watchdog_timer_device> m_watchdog;
required_device<segaic16_video_device> m_segaic16vid;
@ -178,8 +178,8 @@ private:
emu_timer * m_i8751_sync_timer;
uint8_t m_video_control;
uint8_t m_mcu_control;
uint8_t m_n7751_command;
uint32_t m_n7751_rom_address;
uint8_t m_upd7751_command;
uint32_t m_upd7751_rom_address;
uint8_t m_last_buttons1;
uint8_t m_last_buttons2;
uint8_t m_read_port;