From 5c43eeafe8316fa68f997ad34a419a916ba7bda3 Mon Sep 17 00:00:00 2001 From: smf- Date: Wed, 15 May 2013 17:09:13 +0000 Subject: [PATCH] changed i/o to 16 bits and don't install memory handlers at run time (nw) --- src/emu/cpu/psx/psx.c | 66 ++++++-- src/emu/cpu/psx/psx.h | 10 ++ src/mame/drivers/namcos12.c | 302 +++++++++++++++++++----------------- 3 files changed, 219 insertions(+), 159 deletions(-) diff --git a/src/emu/cpu/psx/psx.c b/src/emu/cpu/psx/psx.c index 06bd0c3f935..7fe5e0f7b84 100644 --- a/src/emu/cpu/psx/psx.c +++ b/src/emu/cpu/psx/psx.c @@ -198,6 +198,37 @@ WRITE32_MEMBER( psxcpu_device::berr_w ) m_berr = 1; } +READ32_MEMBER( psxcpu_device::exp_base_r ) +{ + return m_exp_base; +} + +WRITE32_MEMBER( psxcpu_device::exp_base_w ) +{ + COMBINE_DATA( &m_exp_base ); // TODO: check byte writes + + m_exp_base = 0x1f000000 | ( m_exp_base & 0xffffff ); +} + +UINT32 psxcpu_device::exp_base() +{ + return m_exp_base; +} + +READ32_MEMBER( psxcpu_device::exp_config_r ) +{ + return m_exp_config; +} + +WRITE32_MEMBER( psxcpu_device::exp_config_w ) +{ + UINT32 old = m_exp_config; + + COMBINE_DATA( &m_exp_config ); // TODO: check byte writes + + m_exp_config &= 0xaf1fffff; +} + READ32_MEMBER( psxcpu_device::ram_config_r ) { return m_ram_config; @@ -207,7 +238,7 @@ WRITE32_MEMBER( psxcpu_device::ram_config_w ) { UINT32 old = m_ram_config; - COMBINE_DATA( &m_ram_config ); + COMBINE_DATA( &m_ram_config ); // TODO: check byte writes if( ( ( m_ram_config ^ old ) & 0xff00 ) != 0 ) { @@ -224,7 +255,7 @@ WRITE32_MEMBER( psxcpu_device::rom_config_w ) { UINT32 old = m_rom_config; - COMBINE_DATA( &m_rom_config ); + COMBINE_DATA( &m_rom_config ); // TODO: check byte writes if( ( ( m_rom_config ^ old ) & 0x001f0000 ) != 0 ) { @@ -232,6 +263,18 @@ WRITE32_MEMBER( psxcpu_device::rom_config_w ) } } +READ32_HANDLER( psxcpu_device::com_delay_r ) +{ + //verboselog( p_psx, 1, "psx_com_delay_r( %08x )\n", mem_mask ); + return m_com_delay; +} + +WRITE32_HANDLER( psxcpu_device::com_delay_w ) +{ + COMBINE_DATA( &m_com_delay ); // TODO: check byte writes + //verboselog( p_psx, 1, "psx_com_delay_w( %08x %08x )\n", data, mem_mask ); +} + READ32_MEMBER( psxcpu_device::biu_r ) { return m_biu; @@ -241,7 +284,7 @@ WRITE32_MEMBER( psxcpu_device::biu_w ) { UINT32 old = m_biu; - COMBINE_DATA( &m_biu ); + COMBINE_DATA( &m_biu ); // TODO: check byte writes if( ( old & ( BIU_RAM | BIU_DS ) ) != ( m_biu & ( BIU_RAM | BIU_DS ) ) ) { @@ -1633,7 +1676,10 @@ int psxcpu_device::store_data_address_breakpoint( UINT32 address ) static ADDRESS_MAP_START( psxcpu_internal_map, AS_PROGRAM, 32, psxcpu_device ) AM_RANGE(0x1f800000, 0x1f8003ff) AM_NOP /* scratchpad */ AM_RANGE(0x1f800400, 0x1f800fff) AM_READWRITE( berr_r, berr_w ) - AM_RANGE(0x1f801000, 0x1f80100f) AM_RAM + AM_RANGE(0x1f801000, 0x1f801003) AM_READWRITE( exp_base_r, exp_base_w ) + AM_RANGE(0x1f801004, 0x1f801007) AM_RAM + AM_RANGE(0x1f801008, 0x1f80100b) AM_READWRITE( exp_config_r, exp_config_w ) + AM_RANGE(0x1f80100c, 0x1f80100f) AM_RAM AM_RANGE(0x1f801010, 0x1f801013) AM_READWRITE( rom_config_r, rom_config_w ) AM_RANGE(0x1f801014, 0x1f80101f) AM_RAM /* 1f801014 spu delay */ @@ -3301,18 +3347,6 @@ WRITE8_HANDLER( psxcpu_device::cd_w ) m_cd_write_handler( space, offset, data, mem_mask ); } -WRITE32_HANDLER( psxcpu_device::com_delay_w ) -{ - COMBINE_DATA( &m_com_delay ); - //verboselog( p_psx, 1, "psx_com_delay_w( %08x %08x )\n", data, mem_mask ); -} - -READ32_HANDLER( psxcpu_device::com_delay_r ) -{ - //verboselog( p_psx, 1, "psx_com_delay_r( %08x )\n", mem_mask ); - return m_com_delay; -} - static MACHINE_CONFIG_FRAGMENT( psx ) MCFG_DEVICE_ADD("irq", PSX_IRQ, 0) MCFG_PSX_IRQ_HANDLER(INPUTLINE(DEVICE_SELF, PSXCPU_IRQ0)) diff --git a/src/emu/cpu/psx/psx.h b/src/emu/cpu/psx/psx.h index f4ae5a4eb4a..cef4e974b28 100644 --- a/src/emu/cpu/psx/psx.h +++ b/src/emu/cpu/psx/psx.h @@ -151,6 +151,14 @@ public: DECLARE_WRITE32_MEMBER( berr_w ); DECLARE_READ32_MEMBER( berr_r ); + UINT32 exp_base(); + + DECLARE_WRITE32_MEMBER( exp_base_w ); + DECLARE_READ32_MEMBER( exp_base_r ); + + DECLARE_WRITE32_MEMBER( exp_config_w ); + DECLARE_READ32_MEMBER( exp_config_r ); + DECLARE_WRITE32_MEMBER( ram_config_w ); DECLARE_READ32_MEMBER( ram_config_r ); @@ -241,6 +249,8 @@ protected: UINT32 m_bad_byte_address_mask; UINT32 m_bad_half_address_mask; UINT32 m_bad_word_address_mask; + UINT32 m_exp_base; + UINT32 m_exp_config; UINT32 m_ram_config; UINT32 m_rom_config; diff --git a/src/mame/drivers/namcos12.c b/src/mame/drivers/namcos12.c index 0655e5b6777..c52afc96de5 100644 --- a/src/mame/drivers/namcos12.c +++ b/src/mame/drivers/namcos12.c @@ -1045,18 +1045,17 @@ public: namcos12_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_rtc(*this, "rtc"), - m_sharedram(*this, "sharedram") , + m_sharedram(*this, "sharedram"), m_maincpu(*this, "maincpu"), m_ram(*this, "maincpu:ram") { } required_device m_rtc; - required_shared_ptr m_sharedram; - UINT32 m_n_bankoffset; + required_shared_ptr m_sharedram; + UINT16 m_n_bankoffset; UINT32 m_n_dmaoffset; - UINT32 m_n_dmabias; UINT32 m_n_tektagdmaoffset; int m_has_tektagt_dma; @@ -1069,20 +1068,17 @@ public: int m_s12_setstate; int m_s12_setnum; int m_s12_settings[8]; - DECLARE_WRITE32_MEMBER(sharedram_w); - DECLARE_READ32_MEMBER(sharedram_r); - DECLARE_WRITE16_MEMBER(sharedram_sub_w); - DECLARE_READ16_MEMBER(sharedram_sub_r); - DECLARE_WRITE32_MEMBER(bankoffset_w); - DECLARE_WRITE32_MEMBER(dmaoffset_w); - DECLARE_WRITE32_MEMBER(s12_dma_bias_w); - DECLARE_WRITE32_MEMBER(system11gun_w); - DECLARE_READ32_MEMBER(system11gun_r); - DECLARE_WRITE32_MEMBER(tektagt_protection_1_w); - DECLARE_READ32_MEMBER(tektagt_protection_1_r); - DECLARE_WRITE32_MEMBER(tektagt_protection_2_w); - DECLARE_READ32_MEMBER(tektagt_protection_2_r); - DECLARE_READ32_MEMBER(tektagt_protection_3_r); + DECLARE_WRITE16_MEMBER(sharedram_w); + DECLARE_READ16_MEMBER(sharedram_r); + DECLARE_WRITE16_MEMBER(bankoffset_w); + DECLARE_WRITE16_MEMBER(dmaoffset_w); + DECLARE_WRITE16_MEMBER(system11gun_w); + DECLARE_READ16_MEMBER(system11gun_r); + DECLARE_WRITE16_MEMBER(tektagt_protection_1_w); + DECLARE_READ16_MEMBER(tektagt_protection_1_r); + DECLARE_WRITE16_MEMBER(tektagt_protection_2_w); + DECLARE_READ16_MEMBER(tektagt_protection_2_r); + DECLARE_READ16_MEMBER(tektagt_protection_3_r); DECLARE_READ8_MEMBER(s12_mcu_p8_r); DECLARE_READ8_MEMBER(s12_mcu_pa_r); DECLARE_WRITE8_MEMBER(s12_mcu_pa_w); @@ -1093,13 +1089,11 @@ public: DECLARE_READ8_MEMBER(s12_mcu_gun_h_r); DECLARE_READ8_MEMBER(s12_mcu_gun_v_r); DECLARE_DRIVER_INIT(namcos12); - DECLARE_DRIVER_INIT(ghlpanic); DECLARE_DRIVER_INIT(ptblank2); DECLARE_MACHINE_RESET(namcos12); inline void ATTR_PRINTF(3,4) verboselog( int n_level, const char *s_fmt, ... ); void namcos12_rom_read( UINT32 *p_n_psxram, UINT32 n_address, INT32 n_size ); void namcos12_sub_irq( screen_device &screen, bool vblank_state ); - void system11gun_install( ); required_device m_maincpu; required_device m_ram; }; @@ -1117,33 +1111,19 @@ inline void ATTR_PRINTF(3,4) namcos12_state::verboselog( int n_level, const char } } -WRITE32_MEMBER(namcos12_state::sharedram_w) +WRITE16_MEMBER(namcos12_state::sharedram_w) { verboselog(1, "sharedram_w( %08x, %08x, %08x )\n", ( offset * 4 ), data, mem_mask ); COMBINE_DATA( &m_sharedram[ offset ] ); } -READ32_MEMBER(namcos12_state::sharedram_r) +READ16_MEMBER(namcos12_state::sharedram_r) { verboselog(1, "sharedram_r( %08x, %08x ) %08x\n", ( offset * 4 ), mem_mask, m_sharedram[ offset ] ); return m_sharedram[ offset ]; } -WRITE16_MEMBER(namcos12_state::sharedram_sub_w) -{ - UINT16 *shared16 = reinterpret_cast(m_sharedram.target()); - - COMBINE_DATA(&shared16[BYTE_XOR_LE(offset)]); -} - -READ16_MEMBER(namcos12_state::sharedram_sub_r) -{ - UINT16 *shared16 = reinterpret_cast(m_sharedram.target()); - - return shared16[BYTE_XOR_LE(offset)]; -} - -WRITE32_MEMBER(namcos12_state::bankoffset_w) +WRITE16_MEMBER(namcos12_state::bankoffset_w) { // Golgo 13 has different banking (maybe the keycus controls it?) if( strcmp( machine().system().name, "golgo13" ) == 0 || @@ -1168,16 +1148,16 @@ WRITE32_MEMBER(namcos12_state::bankoffset_w) verboselog(1, "bankoffset_w( %08x, %08x, %08x ) %08x\n", offset, data, mem_mask, m_n_bankoffset ); } -WRITE32_MEMBER(namcos12_state::dmaoffset_w) +WRITE16_MEMBER(namcos12_state::dmaoffset_w) { - if( ACCESSING_BITS_0_15 ) + m_n_dmaoffset = ( offset * 2 ) | ( data << 16 ); + + /// HACK: it's unclear how exp_cfg & exp_base really play a part in this. + if( m_maincpu->exp_base() == 0x1f300000 ) { - m_n_dmaoffset = ( offset * 4 ) | ( data << 16 ); - } - if( ACCESSING_BITS_16_31 ) - { - m_n_dmaoffset = ( ( offset * 4 ) + 2 ) | ( data & 0xffff0000 ); + m_n_dmaoffset |= 0x80000000; } + verboselog(1, "dmaoffset_w( %08x, %08x, %08x ) %08x\n", offset, data, mem_mask, m_n_dmaoffset ); } @@ -1201,7 +1181,7 @@ void namcos12_state::namcos12_rom_read( UINT32 *p_n_psxram, UINT32 n_address, IN n_offset = m_n_tektagdmaoffset & 0x7fffffff; verboselog(1, "namcos12_rom_read( %08x, %08x ) tektagt %08x\n", n_address, n_size, n_offset ); } - else if( ( m_n_dmaoffset >= 0x80000000 ) || ( m_n_dmabias == 0x1f300000 ) ) + else if( m_n_dmaoffset >= 0x80000000 ) { n_region = "maincpu:rom"; n_offset = m_n_dmaoffset & 0x003fffff; @@ -1249,24 +1229,35 @@ void namcos12_state::namcos12_sub_irq( screen_device &screen, bool vblank_state irq1_line_pulse( *machine().device( "sub" ) ); } -WRITE32_MEMBER(namcos12_state::s12_dma_bias_w) -{ - m_n_dmabias = data; -} - static ADDRESS_MAP_START( namcos12_map, AS_PROGRAM, 32, namcos12_state ) - AM_RANGE(0x1f000000, 0x1f000003) AM_READNOP AM_WRITE(bankoffset_w) /* banking */ - AM_RANGE(0x1f080000, 0x1f083fff) AM_READWRITE(sharedram_r, sharedram_w) AM_SHARE("sharedram") /* shared ram?? */ + AM_RANGE(0x1f000000, 0x1f000003) AM_READNOP AM_WRITE16(bankoffset_w, 0x0000ffff) /* banking */ + AM_RANGE(0x1f080000, 0x1f083fff) AM_READWRITE16(sharedram_r, sharedram_w, 0xffffffff) /* shared ram?? */ AM_RANGE(0x1f140000, 0x1f140fff) AM_DEVREADWRITE8("at28c16", at28c16_device, read, write, 0x00ff00ff) /* eeprom */ AM_RANGE(0x1f1bff08, 0x1f1bff0f) AM_WRITENOP /* ?? */ - AM_RANGE(0x1f700000, 0x1f70ffff) AM_WRITE(dmaoffset_w) /* dma */ + AM_RANGE(0x1f700000, 0x1f70ffff) AM_WRITE16(dmaoffset_w, 0xffffffff) /* dma */ AM_RANGE(0x1fa00000, 0x1fbfffff) AM_ROMBANK("bank1") /* banked roms */ ADDRESS_MAP_END -WRITE32_MEMBER(namcos12_state::system11gun_w) +static ADDRESS_MAP_START( ptblank2_map, AS_PROGRAM, 32, namcos12_state ) + AM_IMPORT_FROM( namcos12_map ) + + AM_RANGE(0x1f780000, 0x1f78000f) AM_READ16(system11gun_r, 0xffffffff) + AM_RANGE(0x1f788000, 0x1f788003) AM_WRITE16(system11gun_w, 0xffffffff) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( tektagt_map, AS_PROGRAM, 32, namcos12_state ) + AM_RANGE(0x1fb00000, 0x1fb00003) AM_READWRITE16(tektagt_protection_1_r, tektagt_protection_1_w, 0xffffffff) + AM_RANGE(0x1fb80000, 0x1fb80003) AM_READWRITE16(tektagt_protection_2_r, tektagt_protection_2_w, 0xffffffff) + AM_RANGE(0x1f700000, 0x1f700003) AM_READ16(tektagt_protection_3_r, 0xffffffff) + + AM_IMPORT_FROM( namcos12_map ) +ADDRESS_MAP_END + +WRITE16_MEMBER(namcos12_state::system11gun_w) { - if( ACCESSING_BITS_0_15 ) + switch( offset ) { + case 0: /* blowback 1 */ /* blowback 2 */ /* Note: output label has been changed for the Engrish Impaired ;-) */ @@ -1278,88 +1269,129 @@ WRITE32_MEMBER(namcos12_state::system11gun_w) /* start 2 */ output_set_value("P2_Start_lamp", (~data & 0x04)>>2); - verboselog(1, "system11gun_w: outputs (%08x %08x)\n", data, mem_mask ); - } - if( ACCESSING_BITS_16_31 ) - { + break; + + case 1: verboselog(2, "system11gun_w: start reading (%08x %08x)\n", data, mem_mask ); + break; } } -READ32_MEMBER(namcos12_state::system11gun_r) +READ16_MEMBER(namcos12_state::system11gun_r) { - UINT32 data = 0; + UINT16 data = 0; + switch( offset ) { case 0: data = ioport("LIGHT0_X")->read(); break; - case 1: - data = ( ioport("LIGHT0_Y")->read() ) | ( ( ioport("LIGHT0_Y")->read() + 1 ) << 16 ); - break; + case 2: + data = ioport("LIGHT0_Y")->read(); + break; + + case 3: + data = ioport("LIGHT0_Y")->read() + 1; + break; + + case 4: data = ioport("LIGHT1_X")->read(); break; - case 3: - data = ( ioport("LIGHT1_Y")->read() ) | ( ( ioport("LIGHT1_Y")->read() + 1 ) << 16 ); + + case 6: + data = ioport("LIGHT1_Y")->read(); + break; + + case 7: + data = ioport("LIGHT1_Y")->read() + 1; break; } verboselog(2, "system11gun_r( %08x, %08x ) %08x\n", offset, mem_mask, data ); return data; } -void namcos12_state::system11gun_install( ) -{ - m_maincpu->space(AS_PROGRAM).install_write_handler(0x1f788000, 0x1f788003, write32_delegate(FUNC(namcos12_state::system11gun_w),this)); - m_maincpu->space(AS_PROGRAM).install_read_handler (0x1f780000, 0x1f78000f, read32_delegate(FUNC(namcos12_state::system11gun_r),this)); -} - -WRITE32_MEMBER(namcos12_state::tektagt_protection_1_w) +WRITE16_MEMBER(namcos12_state::tektagt_protection_1_w) { // Second dma offset or protection ref values write - m_n_tektagdmaoffset = data; - if(m_ttt_cnt != 2) - m_ttt_val[m_ttt_cnt++] = data; + + switch(offset) + { + case 0: + m_n_tektagdmaoffset = data; + + if(m_ttt_cnt != 2) + m_ttt_val[m_ttt_cnt] = data; + break; + case 1: + m_n_tektagdmaoffset |= data << 16; + + if(m_ttt_cnt != 2) + m_ttt_val[m_ttt_cnt++] |= data << 16; + break; + } } -READ32_MEMBER(namcos12_state::tektagt_protection_1_r) +READ16_MEMBER(namcos12_state::tektagt_protection_1_r) { - // Reads are either ignored or bit 15 is tested for a busy flag - return 0x8000; + switch(offset) + { + case 0: + // Reads are either ignored or bit 15 is tested for a busy flag + return 0x8000; + } + + return 0; } -WRITE32_MEMBER(namcos12_state::tektagt_protection_2_w) +WRITE16_MEMBER(namcos12_state::tektagt_protection_2_w) { - // Writes are 0 or rand(), only used as a "start prot value write" trigger - m_ttt_cnt = 0; + switch( offset ) + { + case 0: + // Writes are 0 or rand(), only used as a "start prot value write" trigger + m_ttt_cnt = 0; + } } -READ32_MEMBER(namcos12_state::tektagt_protection_2_r) +READ16_MEMBER(namcos12_state::tektagt_protection_2_r) { - UINT32 *ttt_val = m_ttt_val; - UINT32 data = 0; + if( m_ttt_cnt == 2 ) + { + if( m_ttt_val[0] == 0x806d2c24 && m_ttt_val[1] == 0xd5545715 ) + { + if( offset == 0 ) + return 0x36e2; + } + else if( m_ttt_val[0] == 0x804c2c84 && m_ttt_val[1] == 0xd5545615 ) + { + if( offset == 0 ) + return 0x2651; + } + else if( m_ttt_val[0] == 0x2aaba8e6 && m_ttt_val[1] == 0x00820040 ) + { + if( offset == 1 ) + return 0x4186; + } + else if( m_ttt_val[0] == 0x2aaba592 && m_ttt_val[1] == 0x01780544 ) + { + if( offset == 1 ) + return 0x3c7d; + } + else + { + if(((m_ttt_val[1] >> 16) & 0xff) == 0xa9) + return 0x552e; + } + } - if(((ttt_val[0] >> 16) & 0xff) == 0x6d) - data |= 0x000036e2; - - if(((ttt_val[0] >> 16) & 0xff) == 0x4c) - data |= 0x00002651; - - if(((ttt_val[1] >> 16) & 0xff) == 0x82) - data |= 0x41860000; - - if(((ttt_val[1] >> 16) & 0xff) == 0x78) - data |= 0x3c7d0000; - - if(((ttt_val[1] >> 16) & 0xff) == 0xa9) - data |= 0x552e0000; - - return data; + return 0; } -READ32_MEMBER(namcos12_state::tektagt_protection_3_r) +READ16_MEMBER(namcos12_state::tektagt_protection_3_r) { + m_has_tektagt_dma = 1; // Always ignored return 0; } @@ -1367,26 +1399,10 @@ READ32_MEMBER(namcos12_state::tektagt_protection_3_r) MACHINE_RESET_MEMBER(namcos12_state,namcos12) { address_space &space = m_maincpu->space(AS_PROGRAM); - bankoffset_w(space,0,0,0xffffffff); - - space.install_write_handler(0x1f801000, 0x1f801003, write32_delegate(FUNC(namcos12_state::s12_dma_bias_w),this)); + bankoffset_w(space,0,0,0xffff); m_has_tektagt_dma = 0; - - if( strcmp( machine().system().name, "tektagt" ) == 0 || - strcmp( machine().system().name, "tektagtac" ) == 0 || - strcmp( machine().system().name, "tektagtac1" ) == 0 || - strcmp( machine().system().name, "tektagtub" ) == 0 || - strcmp( machine().system().name, "tektagtjb" ) == 0 || - strcmp( machine().system().name, "tektagtja" ) == 0 ) - { - m_has_tektagt_dma = 1; - space.install_readwrite_handler(0x1fb00000, 0x1fb00003, read32_delegate(FUNC(namcos12_state::tektagt_protection_1_r),this), write32_delegate(FUNC(namcos12_state::tektagt_protection_1_w),this)); - space.install_readwrite_handler(0x1fb80000, 0x1fb80003, read32_delegate(FUNC(namcos12_state::tektagt_protection_2_r),this), write32_delegate(FUNC(namcos12_state::tektagt_protection_2_w),this)); - space.install_read_handler(0x1f700000, 0x1f700003, read32_delegate(FUNC(namcos12_state::tektagt_protection_3_r),this)); - } - if( strcmp( machine().system().name, "tektagt" ) == 0 || strcmp( machine().system().name, "tektagtac" ) == 0 || strcmp( machine().system().name, "tektagtac1" ) == 0 || @@ -1409,7 +1425,7 @@ MACHINE_RESET_MEMBER(namcos12_state,namcos12) strcmp( machine().system().name, "truckk" ) == 0 || strcmp( machine().system().name, "ghlpanic" ) == 0 ) { - /* this is based on guesswork, it might not even be keycus. */ + /* HACK: this is based on guesswork, it might not even be keycus. */ UINT8 *rom = memregion( "maincpu:rom" )->base() + 0x20280; UINT8 *ram = m_ram->pointer() + 0x10000; @@ -1420,7 +1436,7 @@ MACHINE_RESET_MEMBER(namcos12_state,namcos12) /* H8/3002 MCU stuff */ static ADDRESS_MAP_START( s12h8rwmap, AS_PROGRAM, 16, namcos12_state ) AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x080000, 0x08ffff) AM_READWRITE(sharedram_sub_r, sharedram_sub_w ) + AM_RANGE(0x080000, 0x08ffff) AM_RAM AM_SHARE("sharedram") AM_RANGE(0x280000, 0x287fff) AM_DEVREADWRITE("c352", c352_device, read, write) AM_RANGE(0x300000, 0x300001) AM_READ_PORT("IN0") AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1") @@ -1577,12 +1593,10 @@ DRIVER_INIT_MEMBER(namcos12_state,namcos12) m_n_tektagdmaoffset = 0; m_n_dmaoffset = 0; - m_n_dmabias = 0; m_n_bankoffset = 0; membank( "bank1" )->set_entry( 0 ); save_item( NAME(m_n_dmaoffset) ); - save_item( NAME(m_n_dmabias) ); save_item( NAME(m_n_bankoffset) ); } @@ -1590,17 +1604,8 @@ DRIVER_INIT_MEMBER(namcos12_state,ptblank2) { DRIVER_INIT_CALL(namcos12); - /* patch out wait for dma 5 to complete */ + /* HACK: patch out wait for dma 5 to complete */ *( (UINT32 *)( memregion( "maincpu:rom" )->base() + 0x331c4 ) ) = 0; - - system11gun_install(); -} - -DRIVER_INIT_MEMBER(namcos12_state,ghlpanic) -{ - DRIVER_INIT_CALL(namcos12); - - system11gun_install(); } static MACHINE_CONFIG_START( coh700, namcos12_state ) @@ -1637,6 +1642,17 @@ static MACHINE_CONFIG_START( coh700, namcos12_state ) MCFG_AT28C16_ADD( "at28c16", NULL ) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( ptblank2, coh700 ) + MCFG_CPU_MODIFY( "maincpu" ) + MCFG_CPU_PROGRAM_MAP( ptblank2_map ) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( tektagt, coh700 ) + MCFG_CPU_MODIFY( "maincpu" ) + MCFG_CPU_PROGRAM_MAP( tektagt_map ) +MACHINE_CONFIG_END + + static INPUT_PORTS_START( namcos12 ) PORT_START("DSW") PORT_DIPNAME( 0x0080, 0x0080, DEF_STR(Service_Mode) ) @@ -2773,18 +2789,18 @@ GAME( 1998, tenkomor, 0, coh700, namcos12, namcos12_state, namcos12, R GAME( 1998, tenkomorja,tenkomor, coh700, namcos12, namcos12_state, namcos12, ROT90,"Namco", "Tenkomori Shooting (Japan, TKM1/VER.A1)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC036 */ GAME( 1998, fgtlayer, 0, coh700, namcos12, namcos12_state, namcos12, ROT0, "Arika / Namco", "Fighting Layer (Japan, FTL1/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC037 */ GAME( 1999, pacapp, 0, coh700, namcos12, namcos12_state, namcos12, ROT0, "Produce / Namco", "Paca Paca Passion (Japan, PPP1/VER.A2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC038 */ -GAME( 1999, ptblank2, 0, coh700, ptblank2, namcos12_state, ptblank2, ROT0, "Namco", "Point Blank 2 (GNB5/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC042 */ -GAME( 1999, gunbarl, ptblank2, coh700, ptblank2, namcos12_state, ptblank2, ROT0, "Namco", "Gunbarl (Japan, GNB4/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC042 */ +GAME( 1999, ptblank2, 0, ptblank2, ptblank2, namcos12_state, ptblank2, ROT0, "Namco", "Point Blank 2 (GNB5/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC042 */ +GAME( 1999, gunbarl, ptblank2, ptblank2, ptblank2, namcos12_state, ptblank2, ROT0, "Namco", "Gunbarl (Japan, GNB4/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC042 */ GAME( 1999, sws99, 0, coh700, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Super World Stadium '99 (Japan, SS91/VER.A3)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC043 */ -GAME( 1999, tektagt, 0, coh700, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (US, TEG3/VER.C1)", GAME_IMPERFECT_SOUND ) /* KC044 */ -GAME( 1999, tektagtac, tektagt, coh700, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 1)", GAME_IMPERFECT_SOUND ) /* KC044 */ -GAME( 1999, tektagtac1,tektagt, coh700, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 2)", GAME_IMPERFECT_SOUND ) /* KC044 */ -GAME( 1999, tektagtub, tektagt, coh700, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (US, TEG3/VER.B)", GAME_IMPERFECT_SOUND ) /* KC044 */ -GAME( 1999, tektagtjb, tektagt, coh700, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (Japan, TEG1/VER.B)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) /* KC044 */ -GAME( 1999, tektagtja, tektagt, coh700, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (Japan, TEG1/VER.A3)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) /* KC044 */ -GAME( 1999, ghlpanic, 0, coh700, ghlpanic, namcos12_state, ghlpanic, ROT0, "Eighting / Raizing / Namco", "Ghoul Panic (Asia, OB2/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC045 */ +GAME( 1999, tektagt, 0, tektagt, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (US, TEG3/VER.C1)", GAME_IMPERFECT_SOUND ) /* KC044 */ +GAME( 1999, tektagtac, tektagt, tektagt, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 1)", GAME_IMPERFECT_SOUND ) /* KC044 */ +GAME( 1999, tektagtac1,tektagt, tektagt, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 2)", GAME_IMPERFECT_SOUND ) /* KC044 */ +GAME( 1999, tektagtub, tektagt, tektagt, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (US, TEG3/VER.B)", GAME_IMPERFECT_SOUND ) /* KC044 */ +GAME( 1999, tektagtjb, tektagt, tektagt, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (Japan, TEG1/VER.B)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) /* KC044 */ +GAME( 1999, tektagtja, tektagt, tektagt, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (Japan, TEG1/VER.A3)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) /* KC044 */ +GAME( 1999, ghlpanic, 0, ptblank2, ghlpanic, namcos12_state, namcos12, ROT0, "Eighting / Raizing / Namco", "Ghoul Panic (Asia, OB2/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC045 */ GAME( 1999, pacapp2, 0, coh700, namcos12, namcos12_state, namcos12, ROT0, "Produce / Namco", "Paca Paca Passion 2 (Japan, PKS1/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC046 */ -GAME( 1999, mrdrillr, 0, coh700, namcos124w, namcos12_state,namcos12,ROT0, "Namco", "Mr. Driller (Japan, DRI1/VER.A2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC048 */ +GAME( 1999, mrdrillr, 0, coh700, namcos124w,namcos12_state,namcos12,ROT0, "Namco", "Mr. Driller (Japan, DRI1/VER.A2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC048 */ GAME( 1999, kaiunqz, 0, coh700, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Kaiun Quiz (Japan, KW1/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) /* KC050 */ GAME( 1999, pacappsp, 0, coh700, namcos12, namcos12_state, namcos12, ROT0, "Produce / Namco", "Paca Paca Passion Special (Japan, PSP1/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC052 */ GAME( 1999, aquarush, 0, coh700, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Aqua Rush (Japan, AQ1/VER.A1)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC053 */