From fedf58aa42846315d2acb4499743835676dc6135 Mon Sep 17 00:00:00 2001 From: cam900 Date: Sun, 22 Jul 2018 22:09:34 +0900 Subject: vgmplay.cpp : Add X1-010 Support seta.cpp, seta2.cpp : memory_banks for X1-010 Bankswitching --- src/devices/sound/x1_010.cpp | 63 ++++++++++----- src/devices/sound/x1_010.h | 11 ++- src/mame/drivers/seta.cpp | 126 +++++++++++++++++------------- src/mame/drivers/seta2.cpp | 180 +++++++++++++++++++++---------------------- src/mame/drivers/vgmplay.cpp | 44 ++++++++++- src/mame/includes/seta.h | 6 ++ src/mame/includes/seta2.h | 7 +- src/mame/layout/vgmplay.lay | 4 + src/mame/video/seta.cpp | 31 +------- 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(0x2000); + m_HI_WORD_BUF = make_unique_clear(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<>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 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 m_reg; // X1-010 Register & wave form area + std::unique_ptr 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 DECLARE_WRITE8_MEMBER(multipcm_bank_hi_w); template 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 m_rf5c164; // TODO : !!RF5C164!! required_shared_ptr m_rf5c68_ram; required_shared_ptr m_rf5c164_ram; + required_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 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 m_maincpu; @@ -130,6 +132,7 @@ protected: optional_device m_rtc; optional_device m_dispenser; + optional_memory_bank_array<8> m_x1_bank; optional_shared_ptr m_nvram; optional_shared_ptr m_spriteram; optional_shared_ptr 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 --> @@ -63,6 +64,7 @@ + @@ -123,6 +125,7 @@ + @@ -153,6 +156,7 @@ + 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]); -- cgit v1.2.3