summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/nightgal.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/nightgal.cpp')
-rw-r--r--src/mame/drivers/nightgal.cpp61
1 files changed, 46 insertions, 15 deletions
diff --git a/src/mame/drivers/nightgal.cpp b/src/mame/drivers/nightgal.cpp
index bd2bccf3458..a69c050f738 100644
--- a/src/mame/drivers/nightgal.cpp
+++ b/src/mame/drivers/nightgal.cpp
@@ -27,8 +27,11 @@ TODO:
#include "cpu/m6800/m6800.h"
#include "cpu/z80/z80.h"
+#include "machine/clock.h"
#include "sound/2203intf.h"
#include "sound/ay8910.h"
+#include "sound/dac.h"
+#include "sound/volt_reg.h"
#include "video/jangou_blitter.h"
#include "video/resnet.h"
#include "screen.h"
@@ -43,6 +46,7 @@ public:
nightgal_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_comms_ram(*this, "comms_ram"),
+ m_sound_ram(*this, "sound_ram"),
m_maincpu(*this, "maincpu"),
m_subcpu(*this, "sub"),
m_audiocpu(*this, "audiocpu"),
@@ -71,6 +75,7 @@ public:
emu_timer *m_z80_wait_ack_timer;
required_shared_ptr<uint8_t> m_comms_ram;
+ optional_shared_ptr<uint8_t> m_sound_ram;
/* devices */
required_device<cpu_device> m_maincpu;
@@ -89,6 +94,8 @@ public:
DECLARE_READ8_MEMBER(input_1p_r);
DECLARE_READ8_MEMBER(input_2p_r);
DECLARE_WRITE8_MEMBER(output_w);
+ DECLARE_READ8_MEMBER(sexygal_soundram_r);
+ DECLARE_READ8_MEMBER(sexygal_unknown_sound_r);
DECLARE_WRITE8_MEMBER(sexygal_audioff_w);
DECLARE_WRITE8_MEMBER(sexygal_audionmi_w);
@@ -377,25 +384,36 @@ void nightgal_state::common_nsc_map(address_map &map)
* Sexy Gal
********************************/
+READ8_MEMBER(nightgal_state::sexygal_soundram_r)
+{
+ // bit 7 set = contention?
+ return BIT(m_sound_ram[offset], 7) ? 0x00 : 0x40;
+}
+
+READ8_MEMBER(nightgal_state::sexygal_unknown_sound_r)
+{
+ // value read here stored in (1-bit) shared RAM but not used?
+ return 0;
+}
+
// flip flop from main to audio CPU
WRITE8_MEMBER(nightgal_state::sexygal_audioff_w)
{
// causes an irq
- if(m_sexygal_audioff & 0x40 && (data & 0x40) == 0)
- m_audiocpu->set_input_line(0, HOLD_LINE);
-
- // NMI, correct?
- if(m_sexygal_audioff & 0x20 && (data & 0x20) == 0)
- m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
+ m_audiocpu->set_input_line(0, BIT(data, 6) ? ASSERT_LINE : CLEAR_LINE);
// bit 4 used, audio cpu reset line?
+ // bit 5 used only for access to shared RAM?
m_sexygal_audioff = data;
}
WRITE8_MEMBER(nightgal_state::sexygal_audionmi_w)
{
- m_maincpu->set_input_line(INPUT_LINE_NMI,PULSE_LINE);
+ m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
+
+ // doesn't seem to be any way around this blatant hack
+ m_audiocpu->reset();
}
@@ -410,6 +428,7 @@ void nightgal_state::sweetgal_map(address_map &map)
void nightgal_state::sexygal_map(address_map &map)
{
sweetgal_map(map);
+ map(0x8000, 0x807f).r(this, FUNC(nightgal_state::sexygal_soundram_r));
map(0xa000, 0xa000).w(this, FUNC(nightgal_state::sexygal_audioff_w));
}
@@ -434,8 +453,10 @@ void nightgal_state::sgaltrop_io(address_map &map)
{
common_sexygal_io(map);
- map(0x01, 0x01).r("ymsnd", FUNC(ym2203_device::data_r));
- map(0x02, 0x03).w("ymsnd", FUNC(ym2203_device::data_address_w));
+ // not actually a YM2203?
+ map(0x01, 0x01).r("ymsnd", FUNC(ym2203_device::read_port_r));
+ map(0x02, 0x02).w("ymsnd", FUNC(ym2203_device::write_port_w));
+ map(0x03, 0x03).w("ymsnd", FUNC(ym2203_device::control_port_w));
}
void nightgal_state::sexygal_nsc_map(address_map &map)
@@ -460,9 +481,11 @@ void nightgal_state::sgaltrop_nsc_map(address_map &map)
void nightgal_state::sexygal_audio_map(address_map &map)
{
map(0x0000, 0x007f).ram();
-
+ map(0x0080, 0x0080).r(this, FUNC(nightgal_state::sexygal_unknown_sound_r));
+ map(0x1000, 0x1000).w("dac", FUNC(dac_byte_interface::write));
map(0x2000, 0x207f).ram().share("sound_ram");
map(0x3000, 0x3000).w(this, FUNC(nightgal_state::sexygal_audionmi_w));
+ map(0x4000, 0xbfff).rom().region("samples", 0);
map(0xc000, 0xffff).rom().region("audiorom", 0);
}
@@ -804,7 +827,6 @@ MACHINE_CONFIG_START(nightgal_state::sexygal)
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(sexygal_map)
MCFG_CPU_IO_MAP(sexygal_io)
- //MCFG_CPU_PERIODIC_INT_DRIVER(nightgal_state, nmi_line_pulse, 60)//???
MCFG_CPU_MODIFY("sub")
MCFG_CPU_PROGRAM_MAP(sexygal_nsc_map)
@@ -813,6 +835,13 @@ MACHINE_CONFIG_START(nightgal_state::sexygal)
MCFG_CPU_ADD("audiocpu", NSC8105, MASTER_CLOCK / 8)
MCFG_CPU_PROGRAM_MAP(sexygal_audio_map)
+ MCFG_DEVICE_ADD("sampleclk", CLOCK, 6000) // quite a wild guess
+ MCFG_CLOCK_SIGNAL_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI))
+
+ MCFG_SOUND_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) // unknown DAC
+ MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
+ MCFG_SOUND_ROUTE_EX(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE_EX(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
+
MCFG_DEVICE_REMOVE("aysnd")
MCFG_SOUND_ADD("ymsnd", YM2203, MASTER_CLOCK / 8)
@@ -828,6 +857,7 @@ MACHINE_CONFIG_START(nightgal_state::sweetgal)
// doesn't have the extra NSC8105 (so how does this play samples?)
MCFG_DEVICE_REMOVE("audiocpu")
+ MCFG_DEVICE_REMOVE("sampleclk")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(nightgal_state::ngalsumr)
@@ -847,6 +877,7 @@ MACHINE_CONFIG_START(nightgal_state::sgaltrop)
MCFG_CPU_PROGRAM_MAP(sgaltrop_nsc_map)
MCFG_DEVICE_REMOVE("audiocpu")
+ MCFG_DEVICE_REMOVE("sampleclk")
MACHINE_CONFIG_END
/*
@@ -1035,7 +1066,6 @@ ROM_START( sexygal )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "10.3n", 0x00000, 0x04000, CRC(53425b74) SHA1(1239c0527d00d693313366b7e3da669565f99ffd) )
ROM_LOAD( "11.3pr", 0x04000, 0x04000, CRC(a3138b42) SHA1(1bf7f6e2c4020251379cc72fa731c17795f35e2e) )
- ROM_LOAD( "12.s8b", 0x08000, 0x04000, CRC(7ac4a984) SHA1(7b41c522387938fe7625c9a6c62a385d6635cc5e) )
ROM_REGION( 0x4000, "subrom", 0 )
ROM_LOAD( "1.3a", 0x00000, 0x04000, CRC(f814cf27) SHA1(ceba1f14a202d926380039d7cb4669eb8be58539) ) // has a big (16 byte wide) ASCII 'Y.M' art, written in YMs (!)
@@ -1043,8 +1073,9 @@ ROM_START( sexygal )
ROM_REGION( 0x4000, "audiorom", 0)
ROM_LOAD( "14.s6b", 0x00000, 0x04000, CRC(b4a2497b) SHA1(7231f57b4548899c886625e883b9972c0f30e9f2) )
- ROM_REGION( 0x4000, "samples", 0 )
- ROM_LOAD( "13.s7b", 0x00000, 0x04000, CRC(5eb75f56) SHA1(b7d81d786d1ac8d65a6a122140954eb89d76e8b4) )
+ ROM_REGION( 0x8000, "samples", 0 )
+ ROM_LOAD( "12.s8b", 0x00000, 0x04000, CRC(7ac4a984) SHA1(7b41c522387938fe7625c9a6c62a385d6635cc5e) )
+ ROM_LOAD( "13.s7b", 0x04000, 0x04000, CRC(5eb75f56) SHA1(b7d81d786d1ac8d65a6a122140954eb89d76e8b4) )
ROM_REGION( 0x40000, "gfx", ROMREGION_ERASEFF )
ROM_LOAD( "2.3c", 0x00000, 0x04000, CRC(f719e09d) SHA1(c78411b4f974b3dd261d51e522e086fc30a96fcb) )
@@ -1174,7 +1205,7 @@ Sexy Gal Tropical
XGトロピカル (main board)
Chips/hybrid modules (all Nichibutsu silkscreen):
- 2P GF 136027 (40-pin CPU?)
+ 2P GF 136027 (40-pin CPU or PSG?)
4C XG 1985-05 (40-pin)
4P XGZ 60-04 (40-pin)
5D NB 1984-06 (28-pin)