summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cam900 <dbtlrchl@naver.com>2018-07-22 22:09:34 +0900
committer Vas Crabb <cuavas@users.noreply.github.com>2018-07-23 10:20:56 +1000
commitfedf58aa42846315d2acb4499743835676dc6135 (patch)
treecbb3275a1df980d613f8527540c975a6a7f62533
parent38369086a617978cafac8997289333f72c207399 (diff)
vgmplay.cpp : Add X1-010 Support
seta.cpp, seta2.cpp : memory_banks for X1-010 Bankswitching
-rw-r--r--src/devices/sound/x1_010.cpp63
-rw-r--r--src/devices/sound/x1_010.h11
-rw-r--r--src/mame/drivers/seta.cpp126
-rw-r--r--src/mame/drivers/seta2.cpp180
-rw-r--r--src/mame/drivers/vgmplay.cpp44
-rw-r--r--src/mame/includes/seta.h6
-rw-r--r--src/mame/includes/seta2.h7
-rw-r--r--src/mame/layout/vgmplay.lay4
-rw-r--r--src/mame/video/seta.cpp31
9 files changed, 274 insertions, 198 deletions
diff --git a/src/devices/sound/x1_010.cpp b/src/devices/sound/x1_010.cpp
index 226d956c268..b94851c0510 100644
--- a/src/devices/sound/x1_010.cpp
+++ b/src/devices/sound/x1_010.cpp
@@ -87,17 +87,17 @@ struct X1_010_CHANNEL {
DEFINE_DEVICE_TYPE(X1_010, x1_010_device, "x1_010", "Seta X1-010")
x1_010_device::x1_010_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, X1_010, tag, owner, clock),
- device_sound_interface(mconfig, *this),
- m_region(*this, DEVICE_SELF),
- m_rate(0),
- m_xor(0),
- m_stream(nullptr),
- m_sound_enable(0),
- m_base_clock(0)
+ : device_t(mconfig, X1_010, tag, owner, clock)
+ , device_sound_interface(mconfig, *this)
+ , device_rom_interface(mconfig, *this, 20)
+ , m_rate(0)
+ , m_xor(0)
+ , m_stream(nullptr)
+ , m_sound_enable(0)
+ , m_reg(nullptr)
+ , m_HI_WORD_BUF(nullptr)
+ , m_base_clock(0)
{
- std::fill(std::begin(m_reg), std::end(m_reg), 0);
- std::fill(std::begin(m_HI_WORD_BUF), std::end(m_HI_WORD_BUF), 0);
std::fill(std::begin(m_smp_offset), std::end(m_smp_offset), 0);
std::fill(std::begin(m_env_offset), std::end(m_env_offset), 0);
}
@@ -123,15 +123,40 @@ void x1_010_device::device_start()
/* get stream channels */
m_stream = machine().sound().stream_alloc(*this, 0, 2, m_rate);
+ m_reg = make_unique_clear<uint8_t[]>(0x2000);
+ m_HI_WORD_BUF = make_unique_clear<uint8_t[]>(0x2000);
+
save_item(NAME(m_rate));
save_item(NAME(m_sound_enable));
- save_item(NAME(m_reg));
- save_item(NAME(m_HI_WORD_BUF));
+ save_pointer(NAME(m_reg), 0x2000);
+ save_pointer(NAME(m_HI_WORD_BUF), 0x2000);
save_item(NAME(m_smp_offset));
save_item(NAME(m_env_offset));
save_item(NAME(m_base_clock));
}
+//-------------------------------------------------
+// device_clock_changed - called if the clock
+// changes
+//-------------------------------------------------
+
+void x1_010_device::device_clock_changed()
+{
+ m_base_clock = clock();
+ m_rate = clock() / 512;
+
+ m_stream->set_sample_rate(m_rate);
+}
+
+//-------------------------------------------------
+// rom_bank_updated - the rom bank has changed
+//-------------------------------------------------
+
+void x1_010_device::rom_bank_updated()
+{
+ m_stream->update();
+}
+
void x1_010_device::enable_w(int data)
{
@@ -193,9 +218,9 @@ void x1_010_device::sound_stream_update(sound_stream &stream, stream_sample_t **
{
X1_010_CHANNEL *reg;
int ch, i, volL, volR, freq, div;
- int8_t *start, *end, data;
+ int8_t data;
uint8_t *env;
- uint32_t smp_offs, smp_step, env_offs, env_step, delta;
+ uint32_t start, end, smp_offs, smp_step, env_offs, env_step, delta;
// mixer buffer zero clear
memset( outputs[0], 0, samples*sizeof(*outputs[0]) );
@@ -210,8 +235,8 @@ void x1_010_device::sound_stream_update(sound_stream &stream, stream_sample_t **
stream_sample_t *bufR = outputs[1];
div = (reg->status&0x80) ? 1 : 0;
if( (reg->status&2) == 0 ) { // PCM sampling
- start = m_region + reg->start*0x1000;
- end = m_region + (0x100-reg->end)*0x1000;
+ start = reg->start*0x1000;
+ end = (0x100-reg->end)*0x1000;
volL = ((reg->volume>>4)&0xf)*VOL_BASE;
volR = ((reg->volume>>0)&0xf)*VOL_BASE;
smp_offs = m_smp_offset[ch];
@@ -232,14 +257,14 @@ void x1_010_device::sound_stream_update(sound_stream &stream, stream_sample_t **
reg->status &= 0xfe; // Key off
break;
}
- data = *(start+delta);
+ data = (int8_t)(read_byte(start+delta));
*bufL++ += (data*volL/256);
*bufR++ += (data*volR/256);
smp_offs += smp_step;
}
m_smp_offset[ch] = smp_offs;
} else { // Wave form
- start = (int8_t *)&(m_reg[reg->volume*128+0x1000]);
+ start = (reg->volume*128+0x1000);
smp_offs = m_smp_offset[ch];
freq = ((reg->pitch_hi<<8)+reg->frequency)>>div;
smp_step = (uint32_t)((float)m_base_clock/128.0f/1024.0f/4.0f*freq*(1<<FREQ_BASE_BITS)/(float)m_rate);
@@ -263,7 +288,7 @@ void x1_010_device::sound_stream_update(sound_stream &stream, stream_sample_t **
vol = *(env+(delta&0x7f));
volL = ((vol>>4)&0xf)*VOL_BASE;
volR = ((vol>>0)&0xf)*VOL_BASE;
- data = *(start+((smp_offs>>FREQ_BASE_BITS)&0x7f));
+ data = (int8_t)(m_reg[start+((smp_offs>>FREQ_BASE_BITS)&0x7f)]);
*bufL++ += (data*volL/256);
*bufR++ += (data*volR/256);
smp_offs += smp_step;
diff --git a/src/devices/sound/x1_010.h b/src/devices/sound/x1_010.h
index 12bf9c975d8..45801d0bb2c 100644
--- a/src/devices/sound/x1_010.h
+++ b/src/devices/sound/x1_010.h
@@ -5,7 +5,7 @@
#pragma once
-class x1_010_device : public device_t, public device_sound_interface
+class x1_010_device : public device_t, public device_sound_interface, public device_rom_interface
{
public:
x1_010_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
@@ -24,23 +24,26 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_clock_changed() override;
// sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
+ // device_rom_interface overrides
+ virtual void rom_bank_updated() override;
+
private:
static constexpr unsigned NUM_CHANNELS = 16;
// internal state
/* Variables only used here */
- required_region_ptr<int8_t> m_region; // ROM
int m_rate; // Output sampling rate (Hz)
int m_xor; // address XOR
sound_stream * m_stream; // Stream handle
int m_sound_enable; // sound output enable/disable
- uint8_t m_reg[0x2000]; // X1-010 Register & wave form area
- uint8_t m_HI_WORD_BUF[0x2000]; // X1-010 16bit access ram check avoidance work
+ std::unique_ptr<uint8_t[]> m_reg; // X1-010 Register & wave form area
+ std::unique_ptr<uint8_t[]> m_HI_WORD_BUF; // X1-010 16bit access ram check avoidance work
uint32_t m_smp_offset[NUM_CHANNELS];
uint32_t m_env_offset[NUM_CHANNELS];
diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp
index 3ae176449c5..084e0a635fa 100644
--- a/src/mame/drivers/seta.cpp
+++ b/src/mame/drivers/seta.cpp
@@ -1919,6 +1919,12 @@ void seta_state::blandia_map(address_map &map)
map(0xf00000, 0xf00001).nopw(); // ? Sound IRQ Ack
}
+void seta_state::blandia_x1_map(address_map &map)
+{
+ map(0x00000, 0xbffff).rom();
+ map(0xc0000, 0xfffff).bankr("x1_bank");
+}
+
/***************************************************************************
Blandia (proto), Gundhara, J.J.Squawkers, Rezon, War of Aero, Zing Zing Zip
@@ -2043,6 +2049,12 @@ void seta_state::zombraid_map(address_map &map)
map(0xf00002, 0xf00003).r(FUNC(seta_state::zombraid_gun_r));
}
+void seta_state::zombraid_x1_map(address_map &map)
+{
+ map(0x00000, 0x7ffff).rom();
+ map(0x80000, 0xfffff).bankr("x1_bank");
+}
+
READ16_MEMBER(seta_state::zingzipbl_unknown_r)
{
return 0x0000;
@@ -8256,6 +8268,7 @@ MACHINE_CONFIG_START(seta_state::blandia)
MCFG_DEVICE_ADD("x1snd", X1_010, 16000000) /* 16 MHz */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_DEVICE_ADDRESS_MAP(0, blandia_x1_map)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(seta_state::blandiap)
@@ -8293,6 +8306,7 @@ MACHINE_CONFIG_START(seta_state::blandiap)
MCFG_DEVICE_ADD("x1snd", X1_010, 16000000) /* 16 MHz */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_DEVICE_ADDRESS_MAP(0, blandia_x1_map)
MACHINE_CONFIG_END
@@ -8627,6 +8641,7 @@ MACHINE_CONFIG_START(seta_state::eightfrc)
MCFG_DEVICE_ADD("x1snd", X1_010, 16000000) /* 16 MHz */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_DEVICE_ADDRESS_MAP(0, blandia_x1_map)
MACHINE_CONFIG_END
@@ -8747,7 +8762,7 @@ MACHINE_CONFIG_END
Zombie Raid
***************************************************************************/
-MACHINE_START_MEMBER(seta_state,zombraid){ m_gun_recoil.resolve(); }
+MACHINE_START_MEMBER(seta_state,zombraid) { m_gun_recoil.resolve(); }
MACHINE_CONFIG_START(seta_state::zombraid)
gundhara(config);
@@ -8762,6 +8777,9 @@ MACHINE_CONFIG_START(seta_state::zombraid)
MCFG_DEVICE_ADD("adc", ADC0834, 0)
MCFG_ADC083X_INPUT_CB(seta_state, zombraid_adc_cb)
+
+ MCFG_DEVICE_MODIFY("x1snd")
+ MCFG_DEVICE_ADDRESS_MAP(0, zombraid_x1_map)
MACHINE_CONFIG_END
/***************************************************************************
@@ -10435,11 +10453,9 @@ ROM_START( blandia )
ROM_LOAD( "ux001012.u068", 0x040000, 0x080000, CRC(f29959f6) SHA1(edccea3d0bf972a07edd6339e18792d089033bff) )
/* The c0000-fffff region is bankswitched */
- ROM_REGION( 0x240000, "x1snd", 0 ) /* Samples */
- ROM_LOAD( "ux001013.u69", 0x000000, 0x0c0000, CRC(5cd273cd) SHA1(602e1f10454e2b1c941f2e6983872bb9ca77a542) )
- // skip c0000-fffff (banked region)
- ROM_CONTINUE( 0x100000, 0x040000 )
- ROM_LOAD( "ux001014.u70", 0x140000, 0x080000, CRC(86b49b4e) SHA1(045b352950d848907af4c22b817d154b2cfff382) )
+ ROM_REGION( 0x200000, "x1snd", 0 ) /* Samples */
+ ROM_LOAD( "ux001013.u69", 0x000000, 0x100000, CRC(5cd273cd) SHA1(602e1f10454e2b1c941f2e6983872bb9ca77a542) )
+ ROM_LOAD( "ux001014.u70", 0x100000, 0x080000, CRC(86b49b4e) SHA1(045b352950d848907af4c22b817d154b2cfff382) )
ROM_END
ROM_START( blandiap )
@@ -10476,23 +10492,23 @@ ROM_START( blandiap )
ROM_LOAD( "v2-3.bin", 0x0a0000, 0x020000, CRC(80ad0c3b) SHA1(00fcbcf7805784d7298b92136e7f256d65029c44) )
/* The c0000-fffff region is bankswitched */
- ROM_REGION( 0x240000, "x1snd", 0 ) /* Samples */
+ ROM_REGION( 0x200000, "x1snd", 0 ) /* Samples */
ROM_LOAD( "s-0.bin", 0x000000, 0x020000, CRC(a5fde408) SHA1(89efcd37ef6c5b313169d74a962a7c074a09b12a) )
- ROM_CONTINUE( 0x140000, 0x020000 )
+ ROM_CONTINUE( 0x100000, 0x020000 )
ROM_LOAD( "s-1.bin", 0x020000, 0x020000, CRC(3083f9c4) SHA1(f5d2297c3d680eb1f128fa42a3a7f61badb9853a) )
- ROM_CONTINUE( 0x160000, 0x020000 )
+ ROM_CONTINUE( 0x120000, 0x020000 )
ROM_LOAD( "s-2.bin", 0x040000, 0x020000, CRC(a591c9ef) SHA1(83e665e342c42fd3582c83becfacc27a3a3e5a54) )
- ROM_CONTINUE( 0x180000, 0x020000 )
+ ROM_CONTINUE( 0x140000, 0x020000 )
ROM_LOAD( "s-3.bin", 0x060000, 0x020000, CRC(68826c9d) SHA1(a860b7b2140a5a506bf25110c08c6ea59db25743) )
- ROM_CONTINUE( 0x1a0000, 0x020000 )
+ ROM_CONTINUE( 0x160000, 0x020000 )
ROM_LOAD( "s-4.bin", 0x080000, 0x020000, CRC(1c7dc8c2) SHA1(006459a23de83fe48e11bdd6ebe23ef6a18a87e8) )
- ROM_CONTINUE( 0x1c0000, 0x020000 )
+ ROM_CONTINUE( 0x180000, 0x020000 )
ROM_LOAD( "s-5.bin", 0x0a0000, 0x020000, CRC(4bb0146a) SHA1(1e3c1739ea3c85296573426e55f25dce11f0ed2b) )
- ROM_CONTINUE( 0x1e0000, 0x020000 )
- ROM_LOAD( "s-6.bin", 0x100000, 0x020000, CRC(9f8f34ee) SHA1(60abb70ae87595ebae23df68d62f3b0ed4a2e768) ) // skip c0000-fffff (banked region)
- ROM_CONTINUE( 0x200000, 0x020000 ) // this half is 0
- ROM_LOAD( "s-7.bin", 0x120000, 0x020000, CRC(e077dd39) SHA1(a6f0881a026161710adc132bcf7cb95c4c8f2528) )
- ROM_CONTINUE( 0x220000, 0x020000 ) // this half is 0
+ ROM_CONTINUE( 0x1a0000, 0x020000 )
+ ROM_LOAD( "s-6.bin", 0x0c0000, 0x020000, CRC(9f8f34ee) SHA1(60abb70ae87595ebae23df68d62f3b0ed4a2e768) )
+ ROM_CONTINUE( 0x1c0000, 0x020000 ) // this half is 0
+ ROM_LOAD( "s-7.bin", 0x0e0000, 0x020000, CRC(e077dd39) SHA1(a6f0881a026161710adc132bcf7cb95c4c8f2528) )
+ ROM_CONTINUE( 0x1e0000, 0x020000 ) // this half is 0
ROM_END
ROM_START( blockcar )
@@ -11044,11 +11060,9 @@ ROM_START( eightfrc )
ROM_REGION( 0x100000, "gfx3", 0 ) /* Layer 2 */
ROM_LOAD( "u68.bin", 0x000000, 0x100000, CRC(c17aad22) SHA1(eabbae2142cad3eef6a94d542ea03221c8228e94) )
- ROM_REGION( 0x240000, "x1snd", 0 ) /* Samples */
- ROM_LOAD( "u70.bin", 0x000000, 0x0c0000, CRC(dfdb67a3) SHA1(0fed6fb498dcfc1276facd0ecd2dfde45ff671f2) )
- // skip c0000-fffff (banked region)
- ROM_CONTINUE( 0x100000, 0x040000 )
- ROM_LOAD( "u69.bin", 0x140000, 0x100000, CRC(82ec08f1) SHA1(f17300d3cf990ef5c11056fd922f8cae0b2c918f) )
+ ROM_REGION( 0x200000, "x1snd", 0 ) /* Samples */
+ ROM_LOAD( "u70.bin", 0x000000, 0x100000, CRC(dfdb67a3) SHA1(0fed6fb498dcfc1276facd0ecd2dfde45ff671f2) )
+ ROM_LOAD( "u69.bin", 0x100000, 0x100000, CRC(82ec08f1) SHA1(f17300d3cf990ef5c11056fd922f8cae0b2c918f) )
ROM_END
ROM_START( kiwame )
@@ -11260,11 +11274,9 @@ ROM_START( zombraid )
ROM_LOAD ( "fy001010.68", 0x000000, 0x200000, CRC(8b40ed7a) SHA1(05fcd7947a8419cab5ed2305fba9a671911e4850) )
ROM_LOAD16_BYTE( "fy001009.67", 0x200000, 0x100000, CRC(6bcca641) SHA1(49c9106e6f23e25e5b5917af11fc48d34457c61a) )
- ROM_REGION( 0x480000, "x1snd", 0 ) /* Samples */
- ROM_LOAD( "fy001012.b", 0x000000, 0x080000, CRC(fd30e102) SHA1(ae02f94f69aa301b0c37921ca1117e3ad20467b5) )
- // skip 80000-fffff (banked region)
- ROM_CONTINUE( 0x100000, 0x180000 )
- ROM_LOAD( "fy001011.a", 0x280000, 0x200000, CRC(e3c431de) SHA1(1030adacbbfabc00231417e09f3de40e3052f65c) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) /* Samples */
+ ROM_LOAD( "fy001012.b", 0x000000, 0x200000, CRC(fd30e102) SHA1(ae02f94f69aa301b0c37921ca1117e3ad20467b5) )
+ ROM_LOAD( "fy001011.a", 0x200000, 0x200000, CRC(e3c431de) SHA1(1030adacbbfabc00231417e09f3de40e3052f65c) )
ROM_REGION(0x10000, "nvram", 0)
ROM_LOAD( "nvram.bin", 0x0000, 0x10000, CRC(1a4b2ee8) SHA1(9a14fb2089fef9d13e0a5fe0a83eb7bae51fe1ae) )
@@ -11319,16 +11331,15 @@ ROM_START( zombraidp ) /* Prototype or test board version. Data matches release
ROM_LOAD16_BYTE( "u152_master_scn_2-2_c00e.u152", 0x200000, 0x080000, CRC(0870ad58) SHA1(20e076fa665c24db0e316598a0a5d7fae9fc2f2a) )
ROM_LOAD16_BYTE( "u153_master_scn_2-5_e1da.u153", 0x300000, 0x080000, CRC(814ac66a) SHA1(1fd13a0bf73b9bdede82a865789413308d989c3a) )
- ROM_REGION( 0x480000, "x1snd", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "x1snd", 0 ) /* Samples */
ROM_LOAD( "u156_master_snd_0_f630.u156", 0x000000, 0x080000, CRC(bfc467bd) SHA1(a234cb8e0259a21b7bad40a72d99bf379a4b4046) ) /* These 8 roms dated 7/17/95 */
- // skip 80000-fffff (banked region)
- ROM_LOAD( "u157_master_snd_1_c20a.u157", 0x100000, 0x080000, CRC(b449a8ba) SHA1(3248a767132f60dec848fdc21a76481caa428cd2) )
- ROM_LOAD( "u158_master_snd_2_5c69.u158", 0x180000, 0x080000, CRC(ed6de791) SHA1(416c39c03a9ac2214702eaea7716e9aa74c8c228) )
- ROM_LOAD( "u159_master_snd_3_0727.u159", 0x200000, 0x080000, CRC(794cec21) SHA1(5c44286ea14c0e6a7a4588e523015f83d64dd1a7) )
- ROM_LOAD( "u160_master_snd_4_5a70.u160", 0x280000, 0x080000, CRC(e81ace66) SHA1(f4984e855c222e1cf3287538f536f7b0275f03d5) )
- ROM_LOAD( "u161_master_snd_5_599c.u161", 0x300000, 0x080000, CRC(1793dd13) SHA1(1b5b3c50e6df399c3e334c08be5313eef7d7ed95) )
- ROM_LOAD( "u162_master_snd_6_6d2e.u162", 0x380000, 0x080000, CRC(2ece241f) SHA1(1ebe4dd788799ec10c2eddf02f9bdaee8457993b) )
- ROM_LOAD( "u163_master_snd_7_c733.u163", 0x400000, 0x080000, CRC(d90f78b2) SHA1(e847eba6a4d6c1a3044041a9d32b6b534fb45307) )
+ ROM_LOAD( "u157_master_snd_1_c20a.u157", 0x080000, 0x080000, CRC(b449a8ba) SHA1(3248a767132f60dec848fdc21a76481caa428cd2) )
+ ROM_LOAD( "u158_master_snd_2_5c69.u158", 0x100000, 0x080000, CRC(ed6de791) SHA1(416c39c03a9ac2214702eaea7716e9aa74c8c228) )
+ ROM_LOAD( "u159_master_snd_3_0727.u159", 0x180000, 0x080000, CRC(794cec21) SHA1(5c44286ea14c0e6a7a4588e523015f83d64dd1a7) )
+ ROM_LOAD( "u160_master_snd_4_5a70.u160", 0x200000, 0x080000, CRC(e81ace66) SHA1(f4984e855c222e1cf3287538f536f7b0275f03d5) )
+ ROM_LOAD( "u161_master_snd_5_599c.u161", 0x280000, 0x080000, CRC(1793dd13) SHA1(1b5b3c50e6df399c3e334c08be5313eef7d7ed95) )
+ ROM_LOAD( "u162_master_snd_6_6d2e.u162", 0x300000, 0x080000, CRC(2ece241f) SHA1(1ebe4dd788799ec10c2eddf02f9bdaee8457993b) )
+ ROM_LOAD( "u163_master_snd_7_c733.u163", 0x380000, 0x080000, CRC(d90f78b2) SHA1(e847eba6a4d6c1a3044041a9d32b6b534fb45307) )
ROM_REGION(0x10000, "nvram", 0)
ROM_LOAD( "nvram.bin", 0x0000, 0x10000, CRC(1a4b2ee8) SHA1(9a14fb2089fef9d13e0a5fe0a83eb7bae51fe1ae) )
@@ -11367,16 +11378,15 @@ ROM_START( zombraidpj ) /* Prototype or test board version. Data matches releas
ROM_LOAD16_BYTE( "u152_master_scn_2-2_c00e.u152", 0x200000, 0x080000, CRC(0870ad58) SHA1(20e076fa665c24db0e316598a0a5d7fae9fc2f2a) )
ROM_LOAD16_BYTE( "u153_master_scn_2-5_e1da.u153", 0x300000, 0x080000, CRC(814ac66a) SHA1(1fd13a0bf73b9bdede82a865789413308d989c3a) )
- ROM_REGION( 0x480000, "x1snd", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "x1snd", 0 ) /* Samples */
ROM_LOAD( "u156_master_snd_0_f630.u156", 0x000000, 0x080000, CRC(bfc467bd) SHA1(a234cb8e0259a21b7bad40a72d99bf379a4b4046) ) /* These 8 roms dated 7/17/95 */
- // skip 80000-fffff (banked region)
- ROM_LOAD( "u157_master_snd_1_c20a.u157", 0x100000, 0x080000, CRC(b449a8ba) SHA1(3248a767132f60dec848fdc21a76481caa428cd2) )
- ROM_LOAD( "u158_master_snd_2_5c69.u158", 0x180000, 0x080000, CRC(ed6de791) SHA1(416c39c03a9ac2214702eaea7716e9aa74c8c228) )
- ROM_LOAD( "u159_master_snd_3_0727.u159", 0x200000, 0x080000, CRC(794cec21) SHA1(5c44286ea14c0e6a7a4588e523015f83d64dd1a7) )
- ROM_LOAD( "u160_master_snd_4_5a70.u160", 0x280000, 0x080000, CRC(e81ace66) SHA1(f4984e855c222e1cf3287538f536f7b0275f03d5) )
- ROM_LOAD( "u161_master_snd_5_599c.u161", 0x300000, 0x080000, CRC(1793dd13) SHA1(1b5b3c50e6df399c3e334c08be5313eef7d7ed95) )
- ROM_LOAD( "u162_master_snd_6_6d2e.u162", 0x380000, 0x080000, CRC(2ece241f) SHA1(1ebe4dd788799ec10c2eddf02f9bdaee8457993b) )
- ROM_LOAD( "u163_master_snd_7_c733.u163", 0x400000, 0x080000, CRC(d90f78b2) SHA1(e847eba6a4d6c1a3044041a9d32b6b534fb45307) )
+ ROM_LOAD( "u157_master_snd_1_c20a.u157", 0x080000, 0x080000, CRC(b449a8ba) SHA1(3248a767132f60dec848fdc21a76481caa428cd2) )
+ ROM_LOAD( "u158_master_snd_2_5c69.u158", 0x100000, 0x080000, CRC(ed6de791) SHA1(416c39c03a9ac2214702eaea7716e9aa74c8c228) )
+ ROM_LOAD( "u159_master_snd_3_0727.u159", 0x180000, 0x080000, CRC(794cec21) SHA1(5c44286ea14c0e6a7a4588e523015f83d64dd1a7) )
+ ROM_LOAD( "u160_master_snd_4_5a70.u160", 0x200000, 0x080000, CRC(e81ace66) SHA1(f4984e855c222e1cf3287538f536f7b0275f03d5) )
+ ROM_LOAD( "u161_master_snd_5_599c.u161", 0x280000, 0x080000, CRC(1793dd13) SHA1(1b5b3c50e6df399c3e334c08be5313eef7d7ed95) )
+ ROM_LOAD( "u162_master_snd_6_6d2e.u162", 0x300000, 0x080000, CRC(2ece241f) SHA1(1ebe4dd788799ec10c2eddf02f9bdaee8457993b) )
+ ROM_LOAD( "u163_master_snd_7_c733.u163", 0x380000, 0x080000, CRC(d90f78b2) SHA1(e847eba6a4d6c1a3044041a9d32b6b534fb45307) )
ROM_REGION(0x10000, "nvram", 0)
ROM_LOAD( "nvram.bin", 0x0000, 0x10000, CRC(1a4b2ee8) SHA1(9a14fb2089fef9d13e0a5fe0a83eb7bae51fe1ae) )
@@ -11958,6 +11968,11 @@ void seta_state::init_metafox()
}
+void seta_state::init_bankx1()
+{
+ m_x1_bank->configure_entries(0, 8, memregion("x1snd")->base(), 0x40000);
+}
+
void seta_state::init_blandia()
{
/* rearrange the gfx data so it can be decoded in the same way as the other set */
@@ -11982,15 +11997,16 @@ void seta_state::init_blandia()
}
std::copy( buf.begin(), buf.end(), &rom[0] );
-}
+ init_bankx1();
+}
void seta_state::init_eightfrc()
{
m_maincpu->space(AS_PROGRAM).nop_read(0x500004, 0x500005); // watchdog??
+ init_bankx1();
}
-
void seta_state::init_kiwame()
{
uint16_t *RAM = (uint16_t *) memregion("maincpu")->base();
@@ -12002,7 +12018,6 @@ void seta_state::init_kiwame()
RAM[0x66/2] = 0x0dca;
}
-
void seta_state::init_rezon()
{
m_maincpu->space(AS_PROGRAM).nop_read(0x500006, 0x500007); // irq ack?
@@ -12016,6 +12031,13 @@ void seta_state::init_pairlove()
save_pointer(NAME(m_pairslove_protram_old), 0x200/2);
}
+void seta_state::init_zombraid()
+{
+ /* bank 1 is never explicitly selected, 0 is used in its place */
+ m_x1_bank->configure_entry(0, memregion("x1snd")->base() + 0x80000);
+ m_x1_bank->configure_entries(1, 7, memregion("x1snd")->base() + 0x80000, 0x80000);
+}
+
void seta_state::init_wiggie()
{
uint8_t temp[16];
@@ -12116,7 +12138,7 @@ GAME( 1991, stg, 0, drgnunit, stg, seta_state, empty_ini
GAME( 1991, pairlove, 0, pairlove, pairlove, seta_state, init_pairlove, ROT270, "Athena", "Pairs Love", 0 )
GAME( 1992, blandia, 0, blandia, blandia, seta_state, init_blandia, ROT0, "Allumer", "Blandia", MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1992, blandiap, blandia, blandiap, blandia, seta_state, empty_init, ROT0, "Allumer", "Blandia (prototype)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1992, blandiap, blandia, blandiap, blandia, seta_state, init_bankx1, ROT0, "Allumer", "Blandia (prototype)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1992, blockcar, 0, blockcar, blockcar, seta_state, empty_init, ROT90, "Visco", "Block Carnival / Thunder & Lightning 2" , 0) // Title: DSW
GAME( 1992, blockcarb, blockcar, blockcarb, blockcar, seta_state, empty_init, ROT90, "bootleg", "Block Carnival / Thunder & Lightning 2 (bootleg)", MACHINE_IMPERFECT_SOUND)
@@ -12179,8 +12201,8 @@ GAME( 1995, gundharac, gundhara, gundhara, gundhara, seta_state, empty_ini
GAME( 1995, sokonuke, 0, extdwnhl, sokonuke, seta_state, empty_init, ROT0, "Sammy Industries", "Sokonuke Taisen Game (Japan)", MACHINE_IMPERFECT_SOUND )
-GAME( 1995, zombraid, 0, zombraid, zombraid, seta_state, empty_init, ROT0, "American Sammy", "Zombie Raid (9/28/95, US)", MACHINE_NO_COCKTAIL )
-GAME( 1995, zombraidp, zombraid, zombraid, zombraid, seta_state, empty_init, ROT0, "American Sammy", "Zombie Raid (9/28/95, US, prototype PCB)", MACHINE_NO_COCKTAIL ) // actual code is same as the released version
-GAME( 1995, zombraidpj,zombraid, zombraid, zombraid, seta_state, empty_init, ROT0, "Sammy Industries Co.,Ltd.", "Zombie Raid (9/28/95, Japan, prototype PCB)", MACHINE_NO_COCKTAIL ) // just 3 bytes different from above
+GAME( 1995, zombraid, 0, zombraid, zombraid, seta_state, init_zombraid, ROT0, "American Sammy", "Zombie Raid (9/28/95, US)", MACHINE_NO_COCKTAIL )
+GAME( 1995, zombraidp, zombraid, zombraid, zombraid, seta_state, init_zombraid, ROT0, "American Sammy", "Zombie Raid (9/28/95, US, prototype PCB)", MACHINE_NO_COCKTAIL ) // actual code is same as the released version
+GAME( 1995, zombraidpj,zombraid, zombraid, zombraid, seta_state, init_zombraid, ROT0, "Sammy Industries Co.,Ltd.", "Zombie Raid (9/28/95, Japan, prototype PCB)", MACHINE_NO_COCKTAIL ) // just 3 bytes different from above
GAME( 1996, crazyfgt, 0, crazyfgt, crazyfgt, seta_state, init_crazyfgt, ROT0, "Subsino", "Crazy Fight", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/drivers/seta2.cpp b/src/mame/drivers/seta2.cpp
index 7fb2fb8694e..dd91c6ef1be 100644
--- a/src/mame/drivers/seta2.cpp
+++ b/src/mame/drivers/seta2.cpp
@@ -131,19 +131,40 @@ reelquak:
***************************************************************************/
-WRITE16_MEMBER(seta2_state::sound_bank_w)
+void seta2_state::machine_start()
{
- if (ACCESSING_BITS_0_7)
+ uint32_t const max = memregion( "x1snd" )->bytes() / 0x20000;
+ for (int i = 0; i < 8; i++)
{
- uint8_t *ROM = memregion( "x1snd" )->base();
- int banks = (memregion( "x1snd" )->bytes() - 0x100000) / 0x20000;
- if (data >= banks)
+ if (m_x1_bank[i] != nullptr)
{
- logerror("CPU #0 PC %06X: invalid sound bank %04X\n",m_maincpu->pc(),data);
- data %= banks;
+ uint32_t ind = 0;
+ while (ind < 256)
+ {
+ m_x1_bank[i]->configure_entries(ind, max, memregion( "x1snd" )->base(), 0x20000); // TODO : Mirrored?
+ ind += max;
+ }
}
- memcpy(ROM + offset * 0x20000, ROM + 0x100000 + data * 0x20000, 0x20000);
}
+ m_leds.resolve();
+ m_lamps.resolve();
+}
+
+WRITE8_MEMBER(seta2_state::sound_bank_w)
+{
+ m_x1_bank[offset & 7]->set_entry(data);
+}
+
+void seta2_state::x1_map(address_map &map)
+{
+ map(0x00000, 0x1ffff).bankr("x1_bank_1");
+ map(0x20000, 0x3ffff).bankr("x1_bank_2");
+ map(0x40000, 0x5ffff).bankr("x1_bank_3");
+ map(0x60000, 0x7ffff).bankr("x1_bank_4");
+ map(0x80000, 0x9ffff).bankr("x1_bank_5");
+ map(0xa0000, 0xbffff).bankr("x1_bank_6");
+ map(0xc0000, 0xdffff).bankr("x1_bank_7");
+ map(0xe0000, 0xfffff).bankr("x1_bank_8");
}
@@ -179,7 +200,7 @@ void seta2_state::grdians_map(address_map &map)
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xc50000, 0xc5ffff).ram(); // cleared
map(0xc60000, 0xc6003f).w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
- map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)); // Samples Banks
+ map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -218,7 +239,7 @@ void seta2_state::gundamex_map(address_map &map)
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xc50000, 0xc5ffff).ram(); // cleared
map(0xc60000, 0xc6003f).w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
- map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)); // Samples Banks
+ map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -277,7 +298,7 @@ void seta2_state::mj4simai_map(address_map &map)
map(0x600200, 0x600201).nopw(); // Leds? Coins?
map(0x600300, 0x600301).portr("DSW1"); // DSW 1
map(0x600302, 0x600303).portr("DSW2"); // DSW 2
- map(0x600300, 0x60030f).w(FUNC(seta2_state::sound_bank_w)); // Samples Banks
+ map(0x600300, 0x60030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0xb00000, 0xb03fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
@@ -301,7 +322,7 @@ void seta2_state::myangel_map(address_map &map)
map(0x700200, 0x700201).nopw(); // Leds? Coins?
map(0x700300, 0x700301).portr("DSW1"); // DSW 1
map(0x700302, 0x700303).portr("DSW2"); // DSW 2
- map(0x700310, 0x70031f).w(FUNC(seta2_state::sound_bank_w)); // Samples Banks
+ map(0x700310, 0x70031f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0xb00000, 0xb03fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
@@ -325,7 +346,7 @@ void seta2_state::myangel2_map(address_map &map)
map(0x600200, 0x600201).nopw(); // Leds? Coins?
map(0x600300, 0x600301).portr("DSW1"); // DSW 1
map(0x600302, 0x600303).portr("DSW2"); // DSW 2
- map(0x600300, 0x60030f).w(FUNC(seta2_state::sound_bank_w)); // Samples Banks
+ map(0x600300, 0x60030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0xb00000, 0xb03fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
map(0xd00000, 0xd3ffff).ram().share("spriteram"); // Sprites
map(0xd40000, 0xd4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
@@ -366,7 +387,7 @@ void seta2_state::pzlbowl_map(address_map &map)
map(0x200000, 0x20ffff).ram(); // RAM
map(0x400300, 0x400301).portr("DSW1"); // DSW 1
map(0x400302, 0x400303).portr("DSW2"); // DSW 2
- map(0x400300, 0x40030f).w(FUNC(seta2_state::sound_bank_w)); // Samples Banks
+ map(0x400300, 0x40030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0x500000, 0x500001).portr("P1"); // P1
map(0x500002, 0x500003).portr("P2"); // P2
map(0x500004, 0x500005).rw(FUNC(seta2_state::pzlbowl_coins_r), FUNC(seta2_state::pzlbowl_coin_counter_w)); // Coins + Protection?
@@ -407,7 +428,7 @@ void seta2_state::penbros_map(address_map &map)
map(0x300000, 0x30ffff).ram();
map(0x500300, 0x500301).portr("DSW1");
map(0x500302, 0x500303).portr("DSW2");
- map(0x500300, 0x50030f).w(FUNC(seta2_state::sound_bank_w));
+ map(0x500300, 0x50030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff);
map(0xb60000, 0xb6003f).w(FUNC(seta2_state::vregs_w)).share("vregs");
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w));
}
@@ -471,7 +492,7 @@ void seta2_state::reelquak_map(address_map &map)
map(0x400200, 0x400201).w(FUNC(seta2_state::reelquak_coin_w)); // Coin Counters / IRQ Ack
map(0x400300, 0x400301).portr("DSW1"); // DSW 1
map(0x400302, 0x400303).portr("DSW2"); // DSW 2
- map(0x400300, 0x40030f).w(FUNC(seta2_state::sound_bank_w)); // Samples Banks
+ map(0x400300, 0x40030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0xb00000, 0xb03fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
@@ -521,7 +542,7 @@ void seta2_state::samshoot_map(address_map &map)
map(0x400000, 0x400001).portr("DSW1"); // DSW 1
map(0x400002, 0x400003).portr("BUTTONS"); // Buttons
- map(0x400300, 0x40030f).w(FUNC(seta2_state::sound_bank_w)); // Samples Banks
+ map(0x400300, 0x40030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0x500000, 0x500001).portr("GUN1"); // P1
map(0x580000, 0x580001).portr("GUN2"); // P2
@@ -713,7 +734,7 @@ void seta2_state::telpacfl_map(address_map &map)
map(0xb60000, 0xb6003f).w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
map(0xd00006, 0xd00007).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
// AM_RANGE(0xe00000, 0xe00001) AM_WRITE
- map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)); // Samples Banks
+ map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0xfffc00, 0xffffff).rw(m_tmp68301, FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w)); // TMP68301 Registers
}
@@ -2579,6 +2600,7 @@ MACHINE_CONFIG_START(seta2_state::seta2)
MCFG_DEVICE_ADD("x1snd", X1_010, XTAL(50'000'000)/3) // clock?
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_DEVICE_ADDRESS_MAP(0, x1_map)
MACHINE_CONFIG_END
@@ -3166,9 +3188,8 @@ ROM_START( grdians )
ROM_LOAD( "u21.bin", 0x1e00000, 0x200000, CRC(6f95e466) SHA1(28482fad16a3ac9302f152d81552e6f84a44f3e4) )
ROM_CONTINUE( 0x1c00000, 0x200000 )
- ROM_REGION( 0x200000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "u32.bin", 0x100000, 0x100000, CRC(cf0f3017) SHA1(8376d3a674f71aec72f52c72758fbc53d9feb1a1) )
+ ROM_REGION( 0x100000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "u32.bin", 0x000000, 0x100000, CRC(cf0f3017) SHA1(8376d3a674f71aec72f52c72758fbc53d9feb1a1) )
ROM_END
/***************************************************************************
@@ -3226,9 +3247,8 @@ ROM_START( gundamex )
ROM_LOAD( "ka001008.u23", 0x1400000, 0x200000, CRC(db55a60a) SHA1(03d118c7284ca86219891c473e2a89489710ea27) )
ROM_FILL( 0x1800000, 0x600000, 0x00 ) // 6bpp instead of 8bpp
- ROM_REGION( 0x300000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "ka001015.u28", 0x100000, 0x200000, CRC(ada2843b) SHA1(09d06026031bc7558da511c3c0e29187ea0a0099) )
+ ROM_REGION( 0x200000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "ka001015.u28", 0x000000, 0x200000, CRC(ada2843b) SHA1(09d06026031bc7558da511c3c0e29187ea0a0099) )
ROM_REGION16_BE( 0x80, "eeprom", 0 )
ROM_LOAD( "eeprom.bin", 0x0000, 0x0080, CRC(80f8e248) SHA1(1a9787811e56d95f7acbedfb00225b6e7df265eb) )
@@ -3265,9 +3285,8 @@ ROM_START( mj4simai )
ROM_LOAD( "cha-02.u22", 0x1400000, 0x400000, CRC(f6346860) SHA1(4eebd3fa315b97964fa39b88224f9de7622ba881) )
ROM_FILL( 0x1800000, 0x800000, 0x00 ) // 6bpp instead of 8bpp
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "cha-07.u32", 0x100000, 0x400000, CRC(817519ee) SHA1(ed09740cdbf61a328f7b50eb569cf498fb749416) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "cha-07.u32", 0x000000, 0x400000, CRC(817519ee) SHA1(ed09740cdbf61a328f7b50eb569cf498fb749416) )
ROM_END
/***************************************************************************
@@ -3302,9 +3321,8 @@ ROM_START( myangel )
ROM_LOAD( "kq1-cg7.u21", 0xc00000, 0x200000, CRC(9f48382c) SHA1(80dfc33a55123b5d3cdb3ed97b43a527f0254d61) )
ROM_LOAD( "kq1-cg5.u17", 0xe00000, 0x200000, CRC(a4bc4516) SHA1(0eb11fa54d16bba1b96f9dd943a68949a3bb9a2f) )
- ROM_REGION( 0x300000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "kq1-snd.u32", 0x100000, 0x200000, CRC(8ca1b449) SHA1(f54096fb5400843af4879135c96760485b6cb319) )
+ ROM_REGION( 0x200000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "kq1-snd.u32", 0x000000, 0x200000, CRC(8ca1b449) SHA1(f54096fb5400843af4879135c96760485b6cb319) )
ROM_END
/***************************************************************************
@@ -3339,9 +3357,8 @@ ROM_START( myangel2 )
ROM_LOAD( "kqs1-cg7.u21", 0x1200000, 0x200000, CRC(2c977904) SHA1(2589447f2471cdc414266b34aff552044c680d93) )
ROM_LOAD( "kqs1-cg3.u17", 0x1400000, 0x400000, CRC(de3b2191) SHA1(d7d6ea07b665cfd834747d3c0776b968ce03bc6a) )
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "kqs1-snd.u32", 0x100000, 0x400000, CRC(792a6b49) SHA1(341b4e8f248b5032217733bada32e353c67e3888) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "kqs1-snd.u32", 0x000000, 0x400000, CRC(792a6b49) SHA1(341b4e8f248b5032217733bada32e353c67e3888) )
ROM_END
/***************************************************************************
@@ -3461,9 +3478,8 @@ ROM_START( pzlbowl )
ROM_LOAD( "kuc-u40.i00", 0x800000, 0x400000, CRC(7e49a2cf) SHA1(d24683addbc54515c33fb620ac500e6702bd9e17) )
ROM_LOAD( "kuc-u41.i00", 0xc00000, 0x400000, CRC(2febf19b) SHA1(8081ac590c0463529777b5e4817305a1a6f6ea41) )
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "kus-u18.i00", 0x100000, 0x400000, CRC(e2b1dfcf) SHA1(fb0b8be119531a1a27efa46ed7b86b05a37ed585) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "kus-u18.i00", 0x000000, 0x400000, CRC(e2b1dfcf) SHA1(fb0b8be119531a1a27efa46ed7b86b05a37ed585) )
ROM_END
/***************************************************************************
@@ -3547,9 +3563,8 @@ ROM_START( penbros ) // Genuine P0-142A PCB & original ROM labels
ROM_LOAD( "a-blast_jpn_u40.u40", 0x800000, 0x400000, CRC(dc9e0a96) SHA1(c2c8ccf9039ee0e179b08fdd2d37f29899349cda) )
ROM_FILL( 0xc00000, 0x400000, 0x00 ) // 6bpp instead of 8bpp
- ROM_REGION( 0x300000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "a-blast_jpn_u18.u18", 0x100000, 0x200000, CRC(de4e65e2) SHA1(82d4e590c714b3e9bf0ffaf1500deb24fd315595) )
+ ROM_REGION( 0x200000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "a-blast_jpn_u18.u18", 0x000000, 0x200000, CRC(de4e65e2) SHA1(82d4e590c714b3e9bf0ffaf1500deb24fd315595) )
ROM_END
ROM_START( ablast ) // Genuine P0-142A PCB & original ROM labels
@@ -3563,9 +3578,8 @@ ROM_START( ablast ) // Genuine P0-142A PCB & original ROM labels
ROM_LOAD( "a-blast_twn_u40.u40", 0x800000, 0x400000, CRC(db94847d) SHA1(fd2e29a45bb0acbd9e709256c7fc27bdd64a6634) )
ROM_FILL( 0xc00000, 0x400000, 0x00 ) // 6bpp instead of 8bpp
- ROM_REGION( 0x300000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "a-blast_twn_u18.u18", 0x100000, 0x200000, CRC(de4e65e2) SHA1(82d4e590c714b3e9bf0ffaf1500deb24fd315595) )
+ ROM_REGION( 0x200000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "a-blast_twn_u18.u18", 0x000000, 0x200000, CRC(de4e65e2) SHA1(82d4e590c714b3e9bf0ffaf1500deb24fd315595) )
ROM_END
ROM_START( ablastb ) // bootleg PCB with standard 68000 instead of TMP68301 and 4 FPGAs (3 A40MX04 and 1 A54SX16A)
@@ -3682,9 +3696,8 @@ ROM_START( reelquak )
ROM_LOAD( "kf-001-007_t44.u18", 0x400000, 0x200000, CRC(9daec83d) SHA1(07de144898deac5058d05466f29682d7840323b7) )
ROM_LOAD( "kf-001-008_t45.u17", 0x600000, 0x200000, CRC(f6ef6e41) SHA1(c3e838dd4dc340f44abdf45ec0b90de24f50dda9) )
- ROM_REGION( 0x300000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "kf-001-009_t46.u32", 0x100000, 0x200000, CRC(2a9641f9) SHA1(efb9df78f1877eddf29c4dae2461546adb9cea8f) )
+ ROM_REGION( 0x200000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "kf-001-009_t46.u32", 0x000000, 0x200000, CRC(2a9641f9) SHA1(efb9df78f1877eddf29c4dae2461546adb9cea8f) )
ROM_REGION( 0x117, "plds", 0 )
ROM_LOAD( "gal16v8_kf-001.u38", 0x000, 0x117, NO_DUMP )
@@ -3777,9 +3790,8 @@ ROM_START( endrichs )
ROM_LOAD( "kfc-u18-c00.u18", 0x400000, 0x200000, CRC(561ac136) SHA1(96da493157405a5d3d72b8cc3004abd3fa3eadfa) )
ROM_LOAD( "kfc-u17-c00.u17", 0x600000, 0x200000, CRC(34660029) SHA1(cf09b97422497d739f71e6ff8b9974fca0329928) )
- ROM_REGION( 0x300000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "kfs-u32-c00.u32", 0x100000, 0x200000, CRC(e9ffbecf) SHA1(3cc9ab3f4be1a305235603a68ca1e15797fb27cb) ) // Yes, it's actually "KFS" here
+ ROM_REGION( 0x200000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "kfs-u32-c00.u32", 0x000000, 0x200000, CRC(e9ffbecf) SHA1(3cc9ab3f4be1a305235603a68ca1e15797fb27cb) ) // Yes, it's actually "KFS" here
ROM_REGION( 0x117, "plds", 0 )
ROM_LOAD( "gal16v8_kf-001.u38", 0x000, 0x117, NO_DUMP )
@@ -3828,9 +3840,8 @@ ROM_START( staraudi )
ROM_REGION( 0x200000, "flash", ROMREGION_ERASE )
ROM_LOAD( "lh28f016sat_flash.u08", 0x000000, 0x200000, CRC(002255bd) SHA1(5e94c29e9a785fe49229f57bc94234ac79dd2f3b) )
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "su1_snd.u32", 0x100000, 0x400000, CRC(d5376010) SHA1(89fab1fbb45c7cf8acb63c31ecafdeb3482c2fec) ) // BAD, inconsistent reads: FIXED BITS (xxxxxxxx00000000)
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "su1_snd.u32", 0x000000, 0x400000, CRC(d5376010) SHA1(89fab1fbb45c7cf8acb63c31ecafdeb3482c2fec) ) // BAD, inconsistent reads: FIXED BITS (xxxxxxxx00000000)
ROM_END
void staraudi_state::driver_start()
@@ -4094,9 +4105,8 @@ ROM_START( deerhunt ) /* Deer Hunting USA V4.3 (11/1/2000) - The "E05" breaks ve
ROM_LOAD( "as0903m01.u40", 0x1000000, 0x800000, CRC(e8ef81b3) SHA1(97666942ca6cca5b8ea6451314a2aaabad9e06ba) )
ROM_LOAD( "as0904m01.u41", 0x1800000, 0x800000, CRC(d0f97fdc) SHA1(776c9d42d03a9f61155521212305e1ed696eaf47) )
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "as0905m01.u18", 0x100000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "as0905m01.u18", 0x000000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
ROM_END
ROM_START( deerhunta ) /* Deer Hunting USA V4.2 (xx/x/2000) */
@@ -4110,9 +4120,8 @@ ROM_START( deerhunta ) /* Deer Hunting USA V4.2 (xx/x/2000) */
ROM_LOAD( "as0903m01.u40", 0x1000000, 0x800000, CRC(e8ef81b3) SHA1(97666942ca6cca5b8ea6451314a2aaabad9e06ba) )
ROM_LOAD( "as0904m01.u41", 0x1800000, 0x800000, CRC(d0f97fdc) SHA1(776c9d42d03a9f61155521212305e1ed696eaf47) )
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "as0905m01.u18", 0x100000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "as0905m01.u18", 0x000000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
ROM_END
ROM_START( deerhuntb ) /* Deer Hunting USA V4.0 (6/15/2000) */
@@ -4126,9 +4135,8 @@ ROM_START( deerhuntb ) /* Deer Hunting USA V4.0 (6/15/2000) */
ROM_LOAD( "as0903m01.u40", 0x1000000, 0x800000, CRC(e8ef81b3) SHA1(97666942ca6cca5b8ea6451314a2aaabad9e06ba) )
ROM_LOAD( "as0904m01.u41", 0x1800000, 0x800000, CRC(d0f97fdc) SHA1(776c9d42d03a9f61155521212305e1ed696eaf47) )
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "as0905m01.u18", 0x100000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "as0905m01.u18", 0x000000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
ROM_END
/* Are there versions 3.x of Deer Hunting USA with labels "AS0906 E03 U06" & "AS0907 E03 U07" ?? */
@@ -4144,9 +4152,8 @@ ROM_START( deerhuntc ) /* These rom labels break label conventions but is correc
ROM_LOAD( "as0903m01.u40", 0x1000000, 0x800000, CRC(e8ef81b3) SHA1(97666942ca6cca5b8ea6451314a2aaabad9e06ba) )
ROM_LOAD( "as0904m01.u41", 0x1800000, 0x800000, CRC(d0f97fdc) SHA1(776c9d42d03a9f61155521212305e1ed696eaf47) )
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "as0905m01.u18", 0x100000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "as0905m01.u18", 0x000000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
ROM_END
ROM_START( deerhuntd ) /* Deer Hunting USA V2.x - No version number is printed to screen but "E02" in EPROM label signifies V2 */
@@ -4160,9 +4167,8 @@ ROM_START( deerhuntd ) /* Deer Hunting USA V2.x - No version number is printed t
ROM_LOAD( "as0903m01.u40", 0x1000000, 0x800000, CRC(e8ef81b3) SHA1(97666942ca6cca5b8ea6451314a2aaabad9e06ba) )
ROM_LOAD( "as0904m01.u41", 0x1800000, 0x800000, CRC(d0f97fdc) SHA1(776c9d42d03a9f61155521212305e1ed696eaf47) )
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "as0905m01.u18", 0x100000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "as0905m01.u18", 0x000000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
ROM_END
ROM_START( deerhunte ) /* Deer Hunting USA V1.x - No version number is printed to screen but "E01" in EPROM label signifies V1 */
@@ -4176,9 +4182,8 @@ ROM_START( deerhunte ) /* Deer Hunting USA V1.x - No version number is printed t
ROM_LOAD( "as0903m01.u40", 0x1000000, 0x800000, CRC(e8ef81b3) SHA1(97666942ca6cca5b8ea6451314a2aaabad9e06ba) )
ROM_LOAD( "as0904m01.u41", 0x1800000, 0x800000, CRC(d0f97fdc) SHA1(776c9d42d03a9f61155521212305e1ed696eaf47) )
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "as0905m01.u18", 0x100000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "as0905m01.u18", 0x000000, 0x400000, CRC(8d8165bb) SHA1(aca7051613d260734ee787b4c3db552c336bd600) )
ROM_END
ROM_START( turkhunt ) /* V1.0 is currently the only known version */
@@ -4192,9 +4197,8 @@ ROM_START( turkhunt ) /* V1.0 is currently the only known version */
ROM_LOAD( "asx903m01.u40", 0x1000000, 0x800000, CRC(5f86c322) SHA1(5a72adb99eea176199f172384cb051e2b045ab94) )
ROM_LOAD( "asx904m01.u41", 0x1800000, 0x800000, CRC(c77e0b66) SHA1(0eba30e62e4bd38c198fa6cb69fb94d002ded77a) )
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "asx905m01.u18", 0x100000, 0x400000, CRC(8d9dd9a9) SHA1(1fc2f3688d2c24c720dca7357bca6bf5f4016c53) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "asx905m01.u18", 0x000000, 0x400000, CRC(8d9dd9a9) SHA1(1fc2f3688d2c24c720dca7357bca6bf5f4016c53) )
ROM_END
ROM_START( wschamp ) /* Wing Shooting Championship V2.00 (01/23/2002) */
@@ -4208,9 +4212,8 @@ ROM_START( wschamp ) /* Wing Shooting Championship V2.00 (01/23/2002) */
ROM_LOAD( "as1003m01.u40", 0x1000000, 0x800000, CRC(89618858) SHA1(a8bd07f233482e8f5a256af7ff9577648eb58ef4) )
ROM_LOAD( "as1004m01.u41", 0x1800000, 0x800000, CRC(500c0909) SHA1(73ff27d46b9285f34a50a81c21c54437f21e1939) )
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "as1005m01.u18", 0x100000, 0x400000, CRC(e4b137b8) SHA1(4d8d15073c51f7d383282cc5755ae5b2eab6226c) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "as1005m01.u18", 0x000000, 0x400000, CRC(e4b137b8) SHA1(4d8d15073c51f7d383282cc5755ae5b2eab6226c) )
ROM_END
ROM_START( wschampa ) /* Wing Shooting Championship V1.01 */
@@ -4224,9 +4227,8 @@ ROM_START( wschampa ) /* Wing Shooting Championship V1.01 */
ROM_LOAD( "as1003m01.u40", 0x1000000, 0x800000, CRC(89618858) SHA1(a8bd07f233482e8f5a256af7ff9577648eb58ef4) )
ROM_LOAD( "as1004m01.u41", 0x1800000, 0x800000, CRC(500c0909) SHA1(73ff27d46b9285f34a50a81c21c54437f21e1939) )
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "as1005m01.u18", 0x100000, 0x400000, CRC(e4b137b8) SHA1(4d8d15073c51f7d383282cc5755ae5b2eab6226c) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "as1005m01.u18", 0x000000, 0x400000, CRC(e4b137b8) SHA1(4d8d15073c51f7d383282cc5755ae5b2eab6226c) )
ROM_END
ROM_START( wschampb ) /* Wing Shooting Championship V1.00, dumps match listed checksum but shows as "NG" on boot screen - need to verify correct at some point if possible */
@@ -4240,9 +4242,8 @@ ROM_START( wschampb ) /* Wing Shooting Championship V1.00, dumps match listed ch
ROM_LOAD( "as1003m01.u40", 0x1000000, 0x800000, CRC(89618858) SHA1(a8bd07f233482e8f5a256af7ff9577648eb58ef4) )
ROM_LOAD( "as1004m01.u41", 0x1800000, 0x800000, CRC(500c0909) SHA1(73ff27d46b9285f34a50a81c21c54437f21e1939) )
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "as1005m01.u18", 0x100000, 0x400000, CRC(e4b137b8) SHA1(4d8d15073c51f7d383282cc5755ae5b2eab6226c) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "as1005m01.u18", 0x000000, 0x400000, CRC(e4b137b8) SHA1(4d8d15073c51f7d383282cc5755ae5b2eab6226c) )
ROM_END
ROM_START( trophyh ) /* Version 1.00 - v: Thu Mar 28 12:35:50 2002 JST-9 - on a B0-010A PCB with all MASK ROMs */
@@ -4256,9 +4257,8 @@ ROM_START( trophyh ) /* Version 1.00 - v: Thu Mar 28 12:35:50 2002 JST-9 - on a
ROM_LOAD( "as1103m01.u40", 0x1000000, 0x800000, CRC(adf8a54e) SHA1(bb28bf219d18082246f7964851a5c49b9c0ba7f5) )
ROM_LOAD( "as1104m01.u41", 0x1800000, 0x800000, CRC(387882e9) SHA1(0fdd0c77dabd1066c6f3bd64e357236a76f524ab) )
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "as1105m01.u18", 0x100000, 0x400000, CRC(633d0df8) SHA1(3401c424f5c207ef438a9269e0c0e7d482771fed) )
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "as1105m01.u18", 0x000000, 0x400000, CRC(633d0df8) SHA1(3401c424f5c207ef438a9269e0c0e7d482771fed) )
ROM_END
ROM_START( trophyht ) /* V1.00 Location Test - v: Tue Feb 26 18:18:43 2002 JST-9 - on a P0-145-1 main PCB with a P1-115A flash ROM board */
@@ -4288,9 +4288,8 @@ ROM_START( trophyht ) /* V1.00 Location Test - v: Tue Feb 26 18:18:43 2002 JST-9
ROM_LOAD( "as1103m01.u40", 0x1000000, 0x800000, CRC(adf8a54e) SHA1(bb28bf219d18082246f7964851a5c49b9c0ba7f5) ) /* Load these in until the flash ROMs are dumped */
ROM_LOAD( "as1104m01.u41", 0x1800000, 0x800000, CRC(387882e9) SHA1(0fdd0c77dabd1066c6f3bd64e357236a76f524ab) ) /* Load these in until the flash ROMs are dumped */
- ROM_REGION( 0x500000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "as1105m01.u18", 0x100000, 0x400000, CRC(633d0df8) SHA1(3401c424f5c207ef438a9269e0c0e7d482771fed) ) /* unlabeled 27C322 with same data as AS1105M01 MASK rom */
+ ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "as1105m01.u18", 0x000000, 0x400000, CRC(633d0df8) SHA1(3401c424f5c207ef438a9269e0c0e7d482771fed) ) /* unlabeled 27C322 with same data as AS1105M01 MASK rom */
ROM_END
/***************************************************************************
@@ -4329,10 +4328,9 @@ ROM_START( telpacfl )
ROM_FILL ( 0x400000, 0x200000, 0 ) // wipe out the bad rom
// Empty sockets: 23C16000 (@ U17-20, U22-23)
- ROM_REGION( 0x200000, "x1snd", 0 ) // Samples
- // Leave 1MB empty (addressable by the chip)
- ROM_LOAD( "mp3_sound0__u111_v1.0.u111", 0x100000, 0x080000, CRC(711c915e) SHA1(d654a0c158cf54aab5faca913583c5620388aa46) )
- ROM_LOAD( "mp3_sound1__u112_v1.0.u112", 0x180000, 0x080000, CRC(27fd83cd) SHA1(d0261b2c5354ea17061e71bcea747d70efc18a49) )
+ ROM_REGION( 0x100000, "x1snd", 0 ) // Samples
+ ROM_LOAD( "mp3_sound0__u111_v1.0.u111", 0x000000, 0x080000, CRC(711c915e) SHA1(d654a0c158cf54aab5faca913583c5620388aa46) )
+ ROM_LOAD( "mp3_sound1__u112_v1.0.u112", 0x080000, 0x080000, CRC(27fd83cd) SHA1(d0261b2c5354ea17061e71bcea747d70efc18a49) )
ROM_REGION( 0x117 * 2, "plds", 0 )
ROM_LOAD( "kc-001c.u51", 0x000, 0x117, NO_DUMP )
diff --git a/src/mame/drivers/vgmplay.cpp b/src/mame/drivers/vgmplay.cpp
index f71d26c47ed..0c346573764 100644
--- a/src/mame/drivers/vgmplay.cpp
+++ b/src/mame/drivers/vgmplay.cpp
@@ -13,6 +13,7 @@
#include "cpu/h6280/h6280.h"
#include "cpu/m6502/n2a03.h"
#include "sound/2203intf.h"
+#include "sound/2608intf.h"
#include "sound/2612intf.h"
#include "sound/3526intf.h"
#include "sound/3812intf.h"
@@ -31,11 +32,11 @@
#include "sound/rf5c68.h"
#include "sound/segapcm.h"
#include "sound/sn76496.h"
+#include "sound/x1_010.h"
#include "sound/ym2151.h"
#include "sound/ym2413.h"
#include "sound/ymf271.h"
#include "sound/ymz280b.h"
-#include "sound/2608intf.h"
#include "vgmplay.lh"
#include "debugger.h"
@@ -100,7 +101,8 @@ public:
A_RF5C68 = 0x00013c40,
A_RF5C164 = 0x00013c50,
A_RF5C68RAM = 0x00014000,
- A_RF5C164RAM = 0x00024000
+ A_RF5C164RAM = 0x00024000,
+ A_X1_010 = 0x00034000
};
enum io16_t
@@ -134,6 +136,7 @@ public:
DECLARE_READ8_MEMBER(c352_rom_r);
DECLARE_READ8_MEMBER(qsound_rom_r);
DECLARE_READ8_MEMBER(ga20_rom_r);
+ DECLARE_READ8_MEMBER(x1_010_rom_r);
template<int Chip> DECLARE_WRITE8_MEMBER(multipcm_bank_hi_w);
template<int Chip> DECLARE_WRITE8_MEMBER(multipcm_bank_lo_w);
@@ -195,6 +198,8 @@ private:
LED_RF5C68,
LED_RF5C164,
+ LED_X1_010,
+
LED_COUNT
};
@@ -299,6 +304,7 @@ public:
void segapcm_map(address_map &map);
void soundchips16_map(address_map &map);
void soundchips_map(address_map &map);
+ void x1_010_map(address_map &map);
void ymf271_map(address_map &map);
void ymz280b_map(address_map &map);
@@ -338,6 +344,7 @@ private:
required_device<rf5c68_device> m_rf5c164; // TODO : !!RF5C164!!
required_shared_ptr<uint8_t> m_rf5c68_ram;
required_shared_ptr<uint8_t> m_rf5c164_ram;
+ required_device<x1_010_device> m_x1_010;
uint32_t m_okim6295_clock[2];
uint32_t m_okim6295_pin7[2];
@@ -841,6 +848,13 @@ void vgmplay_device::execute_run()
m_pc += 4;
break;
+ case 0xc8: {
+ pulse_act_led(LED_X1_010);
+ m_io->write_byte(A_X1_010 + ((m_file->read_byte(m_pc+1) << 8) | m_file->read_byte(m_pc+2)), m_file->read_byte(m_pc+3));
+ m_pc += 4;
+ break;
+ }
+
case 0xd1: {
pulse_act_led(LED_YMF271);
uint8_t offset = m_file->read_byte(m_pc+1);
@@ -1193,7 +1207,7 @@ offs_t vgmplay_disassembler::disassemble(std::ostream &stream, offs_t pc, const
return 4 | SUPPORTED;
case 0xc2:
- util::stream_format(stream, "rf5c163 %04x = %02x", opcodes.r8(pc+1) | (opcodes.r8(pc+2) << 8), opcodes.r8(pc+3));
+ util::stream_format(stream, "rf5c164 %04x = %02x", opcodes.r8(pc+1) | (opcodes.r8(pc+2) << 8), opcodes.r8(pc+3));
return 4 | SUPPORTED;
case 0xc3:
@@ -1204,6 +1218,10 @@ offs_t vgmplay_disassembler::disassemble(std::ostream &stream, offs_t pc, const
util::stream_format(stream, "qsound %02x = %04x", opcodes.r8(pc+3), opcodes.r8(pc+2) | (opcodes.r8(pc+1) << 8));
return 4 | SUPPORTED;
+ case 0xc8:
+ util::stream_format(stream, "x1-010 %04x = %02x", opcodes.r8(pc+2) | (opcodes.r8(pc+1) << 8), opcodes.r8(pc+3));
+ return 4 | SUPPORTED;
+
case 0xd0:
util::stream_format(stream, "ymf278b r%02x.%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2), opcodes.r8(pc+3));
return 4 | SUPPORTED;
@@ -1335,6 +1353,11 @@ READ8_MEMBER(vgmplay_device::qsound_rom_r)
return rom_r(0, 0x8f, offset);
}
+READ8_MEMBER(vgmplay_device::x1_010_rom_r)
+{
+ return rom_r(0, 0x91, offset);
+}
+
READ8_MEMBER(vgmplay_device::c352_rom_r)
{
return rom_r(0, 0x92, offset);
@@ -1381,6 +1404,7 @@ vgmplay_state::vgmplay_state(const machine_config &mconfig, device_type type, co
, m_rf5c164(*this, "rf5c164")
, m_rf5c68_ram(*this, "rf5c68_ram")
, m_rf5c164_ram(*this, "rf5c164_ram")
+ , m_x1_010(*this, "x1_010")
{
}
@@ -1641,6 +1665,9 @@ void vgmplay_state::machine_start()
if(version >= 0x171 && r8(0xd6)) {
m_c352->set_divider(r8(0xd6) * 4);
}
+ if(version >= 0x171 && r32(0xd8)) {
+ m_x1_010->set_unscaled_clock(r32(0xd8));
+ }
if(version >= 0x171 && r32(0xdc)) {
m_c352->set_unscaled_clock(r32(0xdc));
}
@@ -1863,6 +1890,7 @@ void vgmplay_state::soundchips_map(address_map &map)
map(vgmplay_device::A_RF5C164, vgmplay_device::A_RF5C164+0xf).w(m_rf5c164, FUNC(rf5c68_device::rf5c68_w));
map(vgmplay_device::A_RF5C68RAM, vgmplay_device::A_RF5C68RAM+0xffff).w(m_rf5c68, FUNC(rf5c68_device::rf5c68_mem_w));
map(vgmplay_device::A_RF5C164RAM, vgmplay_device::A_RF5C164RAM+0xffff).w(m_rf5c164, FUNC(rf5c68_device::rf5c68_mem_w));
+ map(vgmplay_device::A_X1_010, vgmplay_device::A_X1_010+0x1fff).w(m_x1_010, FUNC(x1_010_device::write));
}
void vgmplay_state::segapcm_map(address_map &map)
@@ -1930,6 +1958,11 @@ void vgmplay_state::ga20_map(address_map &map)
map(0, 0xfffff).r("vgmplay", FUNC(vgmplay_device::ga20_rom_r));
}
+void vgmplay_state::x1_010_map(address_map &map)
+{
+ map(0, 0xfffff).r("vgmplay", FUNC(vgmplay_device::x1_010_rom_r));
+}
+
void vgmplay_state::nescpu_map(address_map &map)
{
map(0, 0xffff).ram().share("nesapu_ram");
@@ -2124,6 +2157,11 @@ MACHINE_CONFIG_START(vgmplay_state::vgmplay)
m_rf5c164->set_addrmap(0, &vgmplay_state::rf5c164_map);
m_rf5c164->add_route(0, "lspeaker", 1);
m_rf5c164->add_route(1, "rspeaker", 1);
+
+ X1_010(config, m_x1_010, 16000000);
+ m_x1_010->set_addrmap(0, &vgmplay_state::x1_010_map);
+ m_x1_010->add_route(0, "lspeaker", 1);
+ m_x1_010->add_route(1, "rspeaker", 1);
MACHINE_CONFIG_END
ROM_START( vgmplay )
diff --git a/src/mame/includes/seta.h b/src/mame/includes/seta.h
index 23d86b54401..8271483db6e 100644
--- a/src/mame/includes/seta.h
+++ b/src/mame/includes/seta.h
@@ -69,6 +69,7 @@ public:
m_vctrl(*this,"vctrl_%u", 0U),
m_paletteram(*this,"paletteram%u", 1U),
m_subbank(*this,"subbank"),
+ m_x1_bank(*this,"x1_bank"),
m_gun_recoil(*this,"Player%u_Gun_Recoil", 1U),
m_leds(*this, "led%u", 0U),
m_gfxdecode(*this, "gfxdecode"),
@@ -130,9 +131,11 @@ public:
void init_arbalest();
void init_wiggie();
void init_blandia();
+ void init_bankx1();
void init_kiwame();
void init_eightfrc();
void init_pairlove();
+ void init_zombraid();
DECLARE_CUSTOM_INPUT_MEMBER(usclssic_trackball_x_r);
DECLARE_CUSTOM_INPUT_MEMBER(usclssic_trackball_y_r);
@@ -171,6 +174,7 @@ protected:
optional_shared_ptr_array<uint16_t, 2> m_paletteram;
optional_memory_bank m_subbank;
+ optional_memory_bank m_x1_bank;
output_finder<2> m_gun_recoil;
output_finder<48> m_leds;
@@ -306,6 +310,7 @@ protected:
void atehate_map(address_map &map);
void blandia_map(address_map &map);
+ void blandia_x1_map(address_map &map);
void blandiap_map(address_map &map);
void blockcar_map(address_map &map);
void blockcarb_map(address_map &map);
@@ -350,6 +355,7 @@ protected:
void wrofaero_map(address_map &map);
void zingzipbl_map(address_map &map);
void zombraid_map(address_map &map);
+ void zombraid_x1_map(address_map &map);
};
class setaroul_state : public seta_state
diff --git a/src/mame/includes/seta2.h b/src/mame/includes/seta2.h
index 27dad1d9c63..1c9380fdbf5 100644
--- a/src/mame/includes/seta2.h
+++ b/src/mame/includes/seta2.h
@@ -35,6 +35,7 @@ public:
m_rtc(*this, "rtc"),
m_dispenser(*this, "dispenser"),
+ m_x1_bank(*this,"x1_bank_%u", 1U),
m_nvram(*this, "nvram"),
m_spriteram(*this, "spriteram", 0),
m_tileram(*this, "tileram", 0),
@@ -65,7 +66,7 @@ public:
DECLARE_WRITE16_MEMBER(vregs_w);
DECLARE_READ32_MEMBER(oki_read);
DECLARE_WRITE32_MEMBER(oki_write);
- DECLARE_WRITE16_MEMBER(sound_bank_w);
+ DECLARE_WRITE8_MEMBER(sound_bank_w);
protected:
@@ -113,8 +114,9 @@ protected:
void reelquak_map(address_map &map);
void samshoot_map(address_map &map);
void telpacfl_map(address_map &map);
+ void x1_map(address_map &map);
- virtual void machine_start() override { m_leds.resolve(); m_lamps.resolve(); }
+ virtual void machine_start() override;
virtual void video_start() override;
required_device<cpu_device> m_maincpu;
@@ -130,6 +132,7 @@ protected:
optional_device<upd4992_device> m_rtc;
optional_device<ticket_dispenser_device> m_dispenser;
+ optional_memory_bank_array<8> m_x1_bank;
optional_shared_ptr<uint16_t> m_nvram;
optional_shared_ptr<uint16_t> m_spriteram;
optional_shared_ptr<uint16_t> m_tileram;
diff --git a/src/mame/layout/vgmplay.lay b/src/mame/layout/vgmplay.lay
index 81a719488a3..30efd5be8c9 100644
--- a/src/mame/layout/vgmplay.lay
+++ b/src/mame/layout/vgmplay.lay
@@ -28,6 +28,7 @@
23: GA20
24: RF5C68
25: RF5C164
+ 26: X1-010
-->
<element name="backdrop"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
@@ -63,6 +64,7 @@
<element name="act_label_ga20"><text string="GA20" align="1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="act_label_rf5c68"><text string="RF5C68" align="1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="act_label_rf5c164"><text string="RF5C164" align="1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="act_label_x1_010"><text string="X1-010" align="1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="static_black2"><rect><color red="0.2" green="0.21" blue="0.23" /></rect></element>
@@ -123,6 +125,7 @@
<cpanel name="led_act_24" element="act_led"><bounds x="46" y="1" width="2" height="2" /></cpanel>
<cpanel name="led_act_25" element="act_led"><bounds x="46" y="4" width="2" height="2" /></cpanel>
+ <cpanel name="led_act_26" element="act_led"><bounds x="46" y="7" width="2" height="2" /></cpanel>
<cpanel element="act_label_ay8910"><bounds x="4" y="1.2" width="10" height="1.6" /></cpanel>
<cpanel element="act_label_sn76496"><bounds x="4" y="4.2" width="10" height="1.6" /></cpanel>
@@ -153,6 +156,7 @@
<cpanel element="act_label_rf5c68"><bounds x="49" y="1.2" width="10" height="1.6" /></cpanel>
<cpanel element="act_label_rf5c164"><bounds x="49" y="4.2" width="10" height="1.6" /></cpanel>
+ <cpanel element="act_label_x1_010"><bounds x="49" y="7.2" width="10" height="1.6" /></cpanel>
</group>
<view name="Internal Layout">
diff --git a/src/mame/video/seta.cpp b/src/mame/video/seta.cpp
index 7bd302266c7..dc66f28e994 100644
--- a/src/mame/video/seta.cpp
+++ b/src/mame/video/seta.cpp
@@ -262,34 +262,9 @@ WRITE8_MEMBER(seta_state::seta_vregs_w)
if (new_bank != m_samples_bank)
{
- if (!m_x1.found()) // triplfun no longer has the hardware, but still writes here
- return;
-
- uint8_t *rom = memregion("x1snd")->base();
- int samples_len = memregion("x1snd")->bytes();
- int addr;
-
m_samples_bank = new_bank;
-
- if (samples_len == 0x240000) /* blandia, eightfrc */
- {
- addr = 0x40000 * new_bank;
- if (new_bank >= 3) addr += 0x40000;
-
- if ( (samples_len > 0x100000) && ((addr+0x40000) <= samples_len) )
- memcpy(&rom[0xc0000],&rom[addr],0x40000);
- else
- logerror("PC %06X - Invalid samples bank %02X !\n", m_maincpu->pc(), new_bank);
- }
- else if (samples_len == 0x480000) /* zombraid */
- {
- /* bank 1 is never explicitly selected, 0 is used in its place */
- if (new_bank == 0) new_bank = 1;
- addr = 0x80000 * new_bank;
- if (new_bank > 0) addr += 0x80000;
-
- memcpy(&rom[0x80000],&rom[addr],0x80000);
- }
+ if (m_x1_bank != nullptr)
+ m_x1_bank->set_entry(m_samples_bank);
}
}
@@ -480,6 +455,8 @@ VIDEO_START_MEMBER(seta_state,seta_no_layers)
while (m_global_offsets->gamename && strcmp(machine().system().name, m_global_offsets->gamename))
m_global_offsets++;
m_samples_bank = -1; // set the samples bank to an out of range value at start-up
+ if (m_x1_bank != nullptr)
+ m_x1_bank->set_entry(0); // TODO : Unknown init
// position kludges
m_seta001->set_fg_xoffsets(m_global_offsets->sprite_offs[1], m_global_offsets->sprite_offs[0]);