Previous 199869 Revisions Next

r22831 Wednesday 15th May, 2013 at 17:09:13 UTC by smf
changed i/o to 16 bits and don't install memory handlers at run time (nw)
[src/emu/cpu/psx]psx.c psx.h
[src/mame/drivers]namcos12.c

trunk/src/mame/drivers/namcos12.c
r22830r22831
10451045   namcos12_state(const machine_config &mconfig, device_type type, const char *tag)
10461046      : driver_device(mconfig, type, tag),
10471047      m_rtc(*this, "rtc"),
1048      m_sharedram(*this, "sharedram") ,
1048      m_sharedram(*this, "sharedram"),
10491049      m_maincpu(*this, "maincpu"),
10501050      m_ram(*this, "maincpu:ram")
10511051   {
10521052   }
10531053
10541054   required_device<rtc4543_device> m_rtc;
1055   required_shared_ptr<UINT32> m_sharedram;
1056   UINT32 m_n_bankoffset;
1055   required_shared_ptr<UINT16> m_sharedram;
1056   UINT16 m_n_bankoffset;
10571057
10581058   UINT32 m_n_dmaoffset;
1059   UINT32 m_n_dmabias;
10601059   UINT32 m_n_tektagdmaoffset;
10611060   int m_has_tektagt_dma;
10621061
r22830r22831
10691068   int m_s12_setstate;
10701069   int m_s12_setnum;
10711070   int m_s12_settings[8];
1072   DECLARE_WRITE32_MEMBER(sharedram_w);
1073   DECLARE_READ32_MEMBER(sharedram_r);
1074   DECLARE_WRITE16_MEMBER(sharedram_sub_w);
1075   DECLARE_READ16_MEMBER(sharedram_sub_r);
1076   DECLARE_WRITE32_MEMBER(bankoffset_w);
1077   DECLARE_WRITE32_MEMBER(dmaoffset_w);
1078   DECLARE_WRITE32_MEMBER(s12_dma_bias_w);
1079   DECLARE_WRITE32_MEMBER(system11gun_w);
1080   DECLARE_READ32_MEMBER(system11gun_r);
1081   DECLARE_WRITE32_MEMBER(tektagt_protection_1_w);
1082   DECLARE_READ32_MEMBER(tektagt_protection_1_r);
1083   DECLARE_WRITE32_MEMBER(tektagt_protection_2_w);
1084   DECLARE_READ32_MEMBER(tektagt_protection_2_r);
1085   DECLARE_READ32_MEMBER(tektagt_protection_3_r);
1071   DECLARE_WRITE16_MEMBER(sharedram_w);
1072   DECLARE_READ16_MEMBER(sharedram_r);
1073   DECLARE_WRITE16_MEMBER(bankoffset_w);
1074   DECLARE_WRITE16_MEMBER(dmaoffset_w);
1075   DECLARE_WRITE16_MEMBER(system11gun_w);
1076   DECLARE_READ16_MEMBER(system11gun_r);
1077   DECLARE_WRITE16_MEMBER(tektagt_protection_1_w);
1078   DECLARE_READ16_MEMBER(tektagt_protection_1_r);
1079   DECLARE_WRITE16_MEMBER(tektagt_protection_2_w);
1080   DECLARE_READ16_MEMBER(tektagt_protection_2_r);
1081   DECLARE_READ16_MEMBER(tektagt_protection_3_r);
10861082   DECLARE_READ8_MEMBER(s12_mcu_p8_r);
10871083   DECLARE_READ8_MEMBER(s12_mcu_pa_r);
10881084   DECLARE_WRITE8_MEMBER(s12_mcu_pa_w);
r22830r22831
10931089   DECLARE_READ8_MEMBER(s12_mcu_gun_h_r);
10941090   DECLARE_READ8_MEMBER(s12_mcu_gun_v_r);
10951091   DECLARE_DRIVER_INIT(namcos12);
1096   DECLARE_DRIVER_INIT(ghlpanic);
10971092   DECLARE_DRIVER_INIT(ptblank2);
10981093   DECLARE_MACHINE_RESET(namcos12);
10991094   inline void ATTR_PRINTF(3,4) verboselog( int n_level, const char *s_fmt, ... );
11001095   void namcos12_rom_read( UINT32 *p_n_psxram, UINT32 n_address, INT32 n_size );
11011096   void namcos12_sub_irq( screen_device &screen, bool vblank_state );
1102   void system11gun_install(  );
11031097   required_device<psxcpu_device> m_maincpu;
11041098   required_device<ram_device> m_ram;
11051099};
r22830r22831
11171111   }
11181112}
11191113
1120WRITE32_MEMBER(namcos12_state::sharedram_w)
1114WRITE16_MEMBER(namcos12_state::sharedram_w)
11211115{
11221116   verboselog(1, "sharedram_w( %08x, %08x, %08x )\n", ( offset * 4 ), data, mem_mask );
11231117   COMBINE_DATA( &m_sharedram[ offset ] );
11241118}
11251119
1126READ32_MEMBER(namcos12_state::sharedram_r)
1120READ16_MEMBER(namcos12_state::sharedram_r)
11271121{
11281122   verboselog(1, "sharedram_r( %08x, %08x ) %08x\n", ( offset * 4 ), mem_mask, m_sharedram[ offset ] );
11291123   return m_sharedram[ offset ];
11301124}
11311125
1132WRITE16_MEMBER(namcos12_state::sharedram_sub_w)
1126WRITE16_MEMBER(namcos12_state::bankoffset_w)
11331127{
1134   UINT16 *shared16 = reinterpret_cast<UINT16 *>(m_sharedram.target());
1135
1136   COMBINE_DATA(&shared16[BYTE_XOR_LE(offset)]);
1137}
1138
1139READ16_MEMBER(namcos12_state::sharedram_sub_r)
1140{
1141   UINT16 *shared16 = reinterpret_cast<UINT16 *>(m_sharedram.target());
1142
1143   return shared16[BYTE_XOR_LE(offset)];
1144}
1145
1146WRITE32_MEMBER(namcos12_state::bankoffset_w)
1147{
11481128   // Golgo 13 has different banking (maybe the keycus controls it?)
11491129   if( strcmp( machine().system().name, "golgo13" ) == 0 ||
11501130      strcmp( machine().system().name, "g13knd" ) == 0 )
r22830r22831
11681148   verboselog(1, "bankoffset_w( %08x, %08x, %08x ) %08x\n", offset, data, mem_mask, m_n_bankoffset );
11691149}
11701150
1171WRITE32_MEMBER(namcos12_state::dmaoffset_w)
1151WRITE16_MEMBER(namcos12_state::dmaoffset_w)
11721152{
1173   if( ACCESSING_BITS_0_15 )
1153   m_n_dmaoffset = ( offset * 2 ) | ( data << 16 );
1154
1155   /// HACK: it's unclear how exp_cfg & exp_base really play a part in this.
1156   if( m_maincpu->exp_base() == 0x1f300000 )
11741157   {
1175      m_n_dmaoffset = ( offset * 4 ) | ( data << 16 );
1158      m_n_dmaoffset |= 0x80000000;
11761159   }
1177   if( ACCESSING_BITS_16_31 )
1178   {
1179      m_n_dmaoffset = ( ( offset * 4 ) + 2 ) | ( data & 0xffff0000 );
1180   }
1160
11811161   verboselog(1, "dmaoffset_w( %08x, %08x, %08x ) %08x\n", offset, data, mem_mask, m_n_dmaoffset );
11821162}
11831163
r22830r22831
12011181      n_offset = m_n_tektagdmaoffset & 0x7fffffff;
12021182      verboselog(1, "namcos12_rom_read( %08x, %08x ) tektagt %08x\n", n_address, n_size, n_offset );
12031183   }
1204   else if( ( m_n_dmaoffset >= 0x80000000 ) || ( m_n_dmabias == 0x1f300000 ) )
1184   else if( m_n_dmaoffset >= 0x80000000 )
12051185   {
12061186      n_region = "maincpu:rom";
12071187      n_offset = m_n_dmaoffset & 0x003fffff;
r22830r22831
12491229   irq1_line_pulse( *machine().device( "sub" ) );
12501230}
12511231
1252WRITE32_MEMBER(namcos12_state::s12_dma_bias_w)
1253{
1254   m_n_dmabias = data;
1255}
1256
12571232static ADDRESS_MAP_START( namcos12_map, AS_PROGRAM, 32, namcos12_state )
1258   AM_RANGE(0x1f000000, 0x1f000003) AM_READNOP AM_WRITE(bankoffset_w)          /* banking */
1259   AM_RANGE(0x1f080000, 0x1f083fff) AM_READWRITE(sharedram_r, sharedram_w) AM_SHARE("sharedram") /* shared ram?? */
1233   AM_RANGE(0x1f000000, 0x1f000003) AM_READNOP AM_WRITE16(bankoffset_w, 0x0000ffff)          /* banking */
1234   AM_RANGE(0x1f080000, 0x1f083fff) AM_READWRITE16(sharedram_r, sharedram_w, 0xffffffff) /* shared ram?? */
12601235   AM_RANGE(0x1f140000, 0x1f140fff) AM_DEVREADWRITE8("at28c16", at28c16_device, read, write, 0x00ff00ff) /* eeprom */
12611236   AM_RANGE(0x1f1bff08, 0x1f1bff0f) AM_WRITENOP    /* ?? */
1262   AM_RANGE(0x1f700000, 0x1f70ffff) AM_WRITE(dmaoffset_w)  /* dma */
1237   AM_RANGE(0x1f700000, 0x1f70ffff) AM_WRITE16(dmaoffset_w, 0xffffffff)  /* dma */
12631238   AM_RANGE(0x1fa00000, 0x1fbfffff) AM_ROMBANK("bank1") /* banked roms */
12641239ADDRESS_MAP_END
12651240
1266WRITE32_MEMBER(namcos12_state::system11gun_w)
1241static ADDRESS_MAP_START( ptblank2_map, AS_PROGRAM, 32, namcos12_state )
1242   AM_IMPORT_FROM( namcos12_map )
1243
1244   AM_RANGE(0x1f780000, 0x1f78000f) AM_READ16(system11gun_r, 0xffffffff)
1245   AM_RANGE(0x1f788000, 0x1f788003) AM_WRITE16(system11gun_w, 0xffffffff)
1246ADDRESS_MAP_END
1247
1248static ADDRESS_MAP_START( tektagt_map, AS_PROGRAM, 32, namcos12_state )
1249   AM_RANGE(0x1fb00000, 0x1fb00003) AM_READWRITE16(tektagt_protection_1_r, tektagt_protection_1_w, 0xffffffff)
1250   AM_RANGE(0x1fb80000, 0x1fb80003) AM_READWRITE16(tektagt_protection_2_r, tektagt_protection_2_w, 0xffffffff)
1251   AM_RANGE(0x1f700000, 0x1f700003) AM_READ16(tektagt_protection_3_r, 0xffffffff)
1252
1253   AM_IMPORT_FROM( namcos12_map )
1254ADDRESS_MAP_END
1255
1256WRITE16_MEMBER(namcos12_state::system11gun_w)
12671257{
1268   if( ACCESSING_BITS_0_15 )
1258   switch( offset )
12691259   {
1260   case 0:
12701261      /* blowback 1 */
12711262      /* blowback 2 */
12721263      /* Note: output label has been changed for the Engrish Impaired ;-) */
r22830r22831
12781269      /* start 2 */
12791270      output_set_value("P2_Start_lamp", (~data & 0x04)>>2);
12801271
1272      verboselog(1, "system11gun_w: outputs (%08x %08x)\n", data, mem_mask );
1273      break;
12811274
1282      verboselog(1, "system11gun_w: outputs (%08x %08x)\n", data, mem_mask );
1283   }
1284   if( ACCESSING_BITS_16_31 )
1285   {
1275   case 1:
12861276      verboselog(2, "system11gun_w: start reading (%08x %08x)\n", data, mem_mask );
1277      break;
12871278   }
12881279}
12891280
1290READ32_MEMBER(namcos12_state::system11gun_r)
1281READ16_MEMBER(namcos12_state::system11gun_r)
12911282{
1292   UINT32 data = 0;
1283   UINT16 data = 0;
1284
12931285   switch( offset )
12941286   {
12951287   case 0:
12961288      data = ioport("LIGHT0_X")->read();
12971289      break;
1298   case 1:
1299      data = ( ioport("LIGHT0_Y")->read() ) | ( ( ioport("LIGHT0_Y")->read() + 1 ) << 16 );
1300      break;
1290
13011291   case 2:
1302      data = ioport("LIGHT1_X")->read();
1292      data = ioport("LIGHT0_Y")->read();
13031293      break;
1294
13041295   case 3:
1305      data = ( ioport("LIGHT1_Y")->read() ) | ( ( ioport("LIGHT1_Y")->read() + 1 ) << 16 );
1296      data = ioport("LIGHT0_Y")->read() + 1;
13061297      break;
1298
1299   case 4:
1300      data = ioport("LIGHT1_X")->read();
1301      break;
1302
1303   case 6:
1304      data = ioport("LIGHT1_Y")->read();
1305      break;
1306
1307   case 7:
1308      data = ioport("LIGHT1_Y")->read() + 1;
1309      break;
13071310   }
13081311   verboselog(2, "system11gun_r( %08x, %08x ) %08x\n", offset, mem_mask, data );
13091312   return data;
13101313}
13111314
1312void namcos12_state::system11gun_install(  )
1315WRITE16_MEMBER(namcos12_state::tektagt_protection_1_w)
13131316{
1314   m_maincpu->space(AS_PROGRAM).install_write_handler(0x1f788000, 0x1f788003, write32_delegate(FUNC(namcos12_state::system11gun_w),this));
1315   m_maincpu->space(AS_PROGRAM).install_read_handler (0x1f780000, 0x1f78000f, read32_delegate(FUNC(namcos12_state::system11gun_r),this));
1317   // Second dma offset or protection ref values write
1318
1319   switch(offset)
1320   {
1321   case 0:
1322      m_n_tektagdmaoffset = data;
1323
1324      if(m_ttt_cnt != 2)
1325         m_ttt_val[m_ttt_cnt] = data;
1326      break;
1327   case 1:
1328      m_n_tektagdmaoffset |= data << 16;
1329
1330      if(m_ttt_cnt != 2)
1331         m_ttt_val[m_ttt_cnt++] |= data << 16;
1332      break;
1333   }
13161334}
13171335
1318WRITE32_MEMBER(namcos12_state::tektagt_protection_1_w)
1336READ16_MEMBER(namcos12_state::tektagt_protection_1_r)
13191337{
1320   // Second dma offset or protection ref values write
1321   m_n_tektagdmaoffset = data;
1322   if(m_ttt_cnt != 2)
1323      m_ttt_val[m_ttt_cnt++] = data;
1324}
1338   switch(offset)
1339   {
1340   case 0:
1341      // Reads are either ignored or bit 15 is tested for a busy flag
1342      return 0x8000;
1343   }
13251344
1326READ32_MEMBER(namcos12_state::tektagt_protection_1_r)
1327{
1328   // Reads are either ignored or bit 15 is tested for a busy flag
1329   return 0x8000;
1345   return 0;
13301346}
13311347
1332WRITE32_MEMBER(namcos12_state::tektagt_protection_2_w)
1348WRITE16_MEMBER(namcos12_state::tektagt_protection_2_w)
13331349{
1334   // Writes are 0 or rand(), only used as a "start prot value write" trigger
1335   m_ttt_cnt = 0;
1350   switch( offset )
1351   {
1352   case 0:
1353      // Writes are 0 or rand(), only used as a "start prot value write" trigger
1354      m_ttt_cnt = 0;
1355   }
13361356}
13371357
1338READ32_MEMBER(namcos12_state::tektagt_protection_2_r)
1358READ16_MEMBER(namcos12_state::tektagt_protection_2_r)
13391359{
1340   UINT32 *ttt_val = m_ttt_val;
1341   UINT32 data = 0;
1360   if( m_ttt_cnt == 2 )
1361   {
1362      if( m_ttt_val[0] == 0x806d2c24 && m_ttt_val[1] == 0xd5545715 )
1363      {
1364         if( offset == 0 )
1365            return 0x36e2;
1366      }
1367      else if( m_ttt_val[0] == 0x804c2c84 && m_ttt_val[1] == 0xd5545615 )
1368      {
1369         if( offset == 0 )
1370            return 0x2651;
1371      }
1372      else if( m_ttt_val[0] == 0x2aaba8e6 && m_ttt_val[1] == 0x00820040 )
1373      {
1374         if( offset == 1 )
1375            return 0x4186;
1376      }
1377      else if( m_ttt_val[0] == 0x2aaba592 && m_ttt_val[1] == 0x01780544 )
1378      {
1379         if( offset == 1 )
1380            return 0x3c7d;
1381      }
1382      else
1383      {
1384         if(((m_ttt_val[1] >> 16) & 0xff) == 0xa9)
1385            return 0x552e;
1386      }
1387   }
13421388
1343   if(((ttt_val[0] >> 16) & 0xff) == 0x6d)
1344      data |= 0x000036e2;
1345
1346   if(((ttt_val[0] >> 16) & 0xff) == 0x4c)
1347      data |= 0x00002651;
1348
1349   if(((ttt_val[1] >> 16) & 0xff) == 0x82)
1350      data |= 0x41860000;
1351
1352   if(((ttt_val[1] >> 16) & 0xff) == 0x78)
1353      data |= 0x3c7d0000;
1354
1355   if(((ttt_val[1] >> 16) & 0xff) == 0xa9)
1356      data |= 0x552e0000;
1357
1358   return data;
1389   return 0;
13591390}
13601391
1361READ32_MEMBER(namcos12_state::tektagt_protection_3_r)
1392READ16_MEMBER(namcos12_state::tektagt_protection_3_r)
13621393{
1394   m_has_tektagt_dma = 1;
13631395   // Always ignored
13641396   return 0;
13651397}
r22830r22831
13671399MACHINE_RESET_MEMBER(namcos12_state,namcos12)
13681400{
13691401   address_space &space = m_maincpu->space(AS_PROGRAM);
1370   bankoffset_w(space,0,0,0xffffffff);
1402   bankoffset_w(space,0,0,0xffff);
13711403
1372   space.install_write_handler(0x1f801000, 0x1f801003, write32_delegate(FUNC(namcos12_state::s12_dma_bias_w),this));
1373
13741404   m_has_tektagt_dma = 0;
13751405
1376
13771406   if( strcmp( machine().system().name, "tektagt" ) == 0 ||
13781407      strcmp( machine().system().name, "tektagtac" ) == 0 ||
13791408      strcmp( machine().system().name, "tektagtac1" ) == 0 ||
13801409      strcmp( machine().system().name, "tektagtub" ) == 0 ||
13811410      strcmp( machine().system().name, "tektagtjb" ) == 0 ||
1382      strcmp( machine().system().name, "tektagtja" ) == 0 )
1383   {
1384      m_has_tektagt_dma = 1;
1385      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));
1386      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));
1387      space.install_read_handler(0x1f700000, 0x1f700003, read32_delegate(FUNC(namcos12_state::tektagt_protection_3_r),this));
1388   }
1389
1390   if( strcmp( machine().system().name, "tektagt" ) == 0 ||
1391      strcmp( machine().system().name, "tektagtac" ) == 0 ||
1392      strcmp( machine().system().name, "tektagtac1" ) == 0 ||
1393      strcmp( machine().system().name, "tektagtub" ) == 0 ||
1394      strcmp( machine().system().name, "tektagtjb" ) == 0 ||
13951411      strcmp( machine().system().name, "tektagtja" ) == 0 ||
13961412      strcmp( machine().system().name, "fgtlayer" ) == 0 ||
13971413      strcmp( machine().system().name, "golgo13" ) == 0 ||
r22830r22831
14091425      strcmp( machine().system().name, "truckk" ) == 0 ||
14101426      strcmp( machine().system().name, "ghlpanic" ) == 0 )
14111427   {
1412      /* this is based on guesswork, it might not even be keycus. */
1428      /* HACK: this is based on guesswork, it might not even be keycus. */
14131429      UINT8 *rom = memregion( "maincpu:rom" )->base() + 0x20280;
14141430      UINT8 *ram = m_ram->pointer() + 0x10000;
14151431
r22830r22831
14201436/* H8/3002 MCU stuff */
14211437static ADDRESS_MAP_START( s12h8rwmap, AS_PROGRAM, 16, namcos12_state )
14221438   AM_RANGE(0x000000, 0x07ffff) AM_ROM
1423   AM_RANGE(0x080000, 0x08ffff) AM_READWRITE(sharedram_sub_r, sharedram_sub_w )
1439   AM_RANGE(0x080000, 0x08ffff) AM_RAM AM_SHARE("sharedram")
14241440   AM_RANGE(0x280000, 0x287fff) AM_DEVREADWRITE("c352", c352_device, read, write)
14251441   AM_RANGE(0x300000, 0x300001) AM_READ_PORT("IN0")
14261442   AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1")
r22830r22831
15771593
15781594   m_n_tektagdmaoffset = 0;
15791595   m_n_dmaoffset = 0;
1580   m_n_dmabias = 0;
15811596   m_n_bankoffset = 0;
15821597   membank( "bank1" )->set_entry( 0 );
15831598
15841599   save_item( NAME(m_n_dmaoffset) );
1585   save_item( NAME(m_n_dmabias) );
15861600   save_item( NAME(m_n_bankoffset) );
15871601}
15881602
r22830r22831
15901604{
15911605   DRIVER_INIT_CALL(namcos12);
15921606
1593   /* patch out wait for dma 5 to complete */
1607   /* HACK: patch out wait for dma 5 to complete */
15941608   *( (UINT32 *)( memregion( "maincpu:rom" )->base() + 0x331c4 ) ) = 0;
1595
1596   system11gun_install();
15971609}
15981610
1599DRIVER_INIT_MEMBER(namcos12_state,ghlpanic)
1600{
1601   DRIVER_INIT_CALL(namcos12);
1602
1603   system11gun_install();
1604}
1605
16061611static MACHINE_CONFIG_START( coh700, namcos12_state )
16071612   /* basic machine hardware */
16081613   MCFG_CPU_ADD( "maincpu", CXD8661R, XTAL_100MHz )
r22830r22831
16371642   MCFG_AT28C16_ADD( "at28c16", NULL )
16381643MACHINE_CONFIG_END
16391644
1645static MACHINE_CONFIG_DERIVED( ptblank2, coh700 )
1646   MCFG_CPU_MODIFY( "maincpu" )
1647   MCFG_CPU_PROGRAM_MAP( ptblank2_map )
1648MACHINE_CONFIG_END
1649
1650static MACHINE_CONFIG_DERIVED( tektagt, coh700 )
1651   MCFG_CPU_MODIFY( "maincpu" )
1652   MCFG_CPU_PROGRAM_MAP( tektagt_map )
1653MACHINE_CONFIG_END
1654
1655
16401656static INPUT_PORTS_START( namcos12 )
16411657   PORT_START("DSW")
16421658   PORT_DIPNAME( 0x0080, 0x0080, DEF_STR(Service_Mode) )
r22830r22831
27732789GAME( 1998, tenkomorja,tenkomor, coh700,   namcos12, namcos12_state, namcos12, ROT90,"Namco",           "Tenkomori Shooting (Japan, TKM1/VER.A1)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC036 */
27742790GAME( 1998, fgtlayer,  0,        coh700,   namcos12, namcos12_state, namcos12, ROT0, "Arika / Namco",   "Fighting Layer (Japan, FTL1/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC037 */
27752791GAME( 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 */
2776GAME( 1999, ptblank2,  0,        coh700,   ptblank2, namcos12_state, ptblank2, ROT0, "Namco",           "Point Blank 2 (GNB5/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC042 */
2777GAME( 1999, gunbarl,   ptblank2, coh700,   ptblank2, namcos12_state, ptblank2, ROT0, "Namco",           "Gunbarl (Japan, GNB4/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC042 */
2792GAME( 1999, ptblank2,  0,        ptblank2, ptblank2, namcos12_state, ptblank2, ROT0, "Namco",           "Point Blank 2 (GNB5/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC042 */
2793GAME( 1999, gunbarl,   ptblank2, ptblank2, ptblank2, namcos12_state, ptblank2, ROT0, "Namco",           "Gunbarl (Japan, GNB4/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC042 */
27782794GAME( 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 */
2779GAME( 1999, tektagt,   0,        coh700,   namcos12, namcos12_state, namcos12, ROT0, "Namco",           "Tekken Tag Tournament (US, TEG3/VER.C1)", GAME_IMPERFECT_SOUND ) /* KC044 */
2780GAME( 1999, tektagtac, tektagt,  coh700,   namcos12, namcos12_state, namcos12, ROT0, "Namco",           "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 1)", GAME_IMPERFECT_SOUND ) /* KC044 */
2781GAME( 1999, tektagtac1,tektagt,  coh700,   namcos12, namcos12_state, namcos12, ROT0, "Namco",           "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 2)", GAME_IMPERFECT_SOUND ) /* KC044 */
2782GAME( 1999, tektagtub, tektagt,  coh700,   namcos12, namcos12_state, namcos12, ROT0, "Namco",           "Tekken Tag Tournament (US, TEG3/VER.B)", GAME_IMPERFECT_SOUND ) /* KC044 */
2783GAME( 1999, tektagtjb, tektagt,  coh700,   namcos12, namcos12_state, namcos12, ROT0, "Namco",           "Tekken Tag Tournament (Japan, TEG1/VER.B)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) /* KC044 */
2784GAME( 1999, tektagtja, tektagt,  coh700,   namcos12, namcos12_state, namcos12, ROT0, "Namco",           "Tekken Tag Tournament (Japan, TEG1/VER.A3)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) /* KC044 */
2785GAME( 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 */
2795GAME( 1999, tektagt,   0,        tektagt,  namcos12, namcos12_state, namcos12, ROT0, "Namco",           "Tekken Tag Tournament (US, TEG3/VER.C1)", GAME_IMPERFECT_SOUND ) /* KC044 */
2796GAME( 1999, tektagtac, tektagt,  tektagt,  namcos12, namcos12_state, namcos12, ROT0, "Namco",           "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 1)", GAME_IMPERFECT_SOUND ) /* KC044 */
2797GAME( 1999, tektagtac1,tektagt,  tektagt,  namcos12, namcos12_state, namcos12, ROT0, "Namco",           "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 2)", GAME_IMPERFECT_SOUND ) /* KC044 */
2798GAME( 1999, tektagtub, tektagt,  tektagt,  namcos12, namcos12_state, namcos12, ROT0, "Namco",           "Tekken Tag Tournament (US, TEG3/VER.B)", GAME_IMPERFECT_SOUND ) /* KC044 */
2799GAME( 1999, tektagtjb, tektagt,  tektagt,  namcos12, namcos12_state, namcos12, ROT0, "Namco",           "Tekken Tag Tournament (Japan, TEG1/VER.B)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) /* KC044 */
2800GAME( 1999, tektagtja, tektagt,  tektagt,  namcos12, namcos12_state, namcos12, ROT0, "Namco",           "Tekken Tag Tournament (Japan, TEG1/VER.A3)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) /* KC044 */
2801GAME( 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 */
27862802GAME( 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 */
2787GAME( 1999, mrdrillr,  0,        coh700,   namcos124w, namcos12_state,namcos12,ROT0, "Namco",           "Mr. Driller (Japan, DRI1/VER.A2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC048 */
2803GAME( 1999, mrdrillr,  0,        coh700,   namcos124w,namcos12_state,namcos12,ROT0, "Namco",           "Mr. Driller (Japan, DRI1/VER.A2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC048 */
27882804GAME( 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 */
27892805GAME( 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 */
27902806GAME( 1999, aquarush,  0,        coh700,   namcos12, namcos12_state, namcos12, ROT0, "Namco",           "Aqua Rush (Japan, AQ1/VER.A1)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC053 */
trunk/src/emu/cpu/psx/psx.c
r22830r22831
198198   m_berr = 1;
199199}
200200
201READ32_MEMBER( psxcpu_device::exp_base_r )
202{
203   return m_exp_base;
204}
205
206WRITE32_MEMBER( psxcpu_device::exp_base_w )
207{
208   COMBINE_DATA( &m_exp_base ); // TODO: check byte writes
209
210   m_exp_base = 0x1f000000 | ( m_exp_base & 0xffffff );
211}
212
213UINT32 psxcpu_device::exp_base()
214{
215   return m_exp_base;
216}
217
218READ32_MEMBER( psxcpu_device::exp_config_r )
219{
220   return m_exp_config;
221}
222
223WRITE32_MEMBER( psxcpu_device::exp_config_w )
224{
225   UINT32 old = m_exp_config;
226
227   COMBINE_DATA( &m_exp_config ); // TODO: check byte writes
228
229   m_exp_config &= 0xaf1fffff;
230}
231
201232READ32_MEMBER( psxcpu_device::ram_config_r )
202233{
203234   return m_ram_config;
r22830r22831
207238{
208239   UINT32 old = m_ram_config;
209240
210   COMBINE_DATA( &m_ram_config );
241   COMBINE_DATA( &m_ram_config ); // TODO: check byte writes
211242
212243   if( ( ( m_ram_config ^ old ) & 0xff00 ) != 0 )
213244   {
r22830r22831
224255{
225256   UINT32 old = m_rom_config;
226257
227   COMBINE_DATA( &m_rom_config );
258   COMBINE_DATA( &m_rom_config ); // TODO: check byte writes
228259
229260   if( ( ( m_rom_config ^ old ) & 0x001f0000 ) != 0 )
230261   {
r22830r22831
232263   }
233264}
234265
266READ32_HANDLER( psxcpu_device::com_delay_r )
267{
268   //verboselog( p_psx, 1, "psx_com_delay_r( %08x )\n", mem_mask );
269   return m_com_delay;
270}
271
272WRITE32_HANDLER( psxcpu_device::com_delay_w )
273{
274   COMBINE_DATA( &m_com_delay ); // TODO: check byte writes
275   //verboselog( p_psx, 1, "psx_com_delay_w( %08x %08x )\n", data, mem_mask );
276}
277
235278READ32_MEMBER( psxcpu_device::biu_r )
236279{
237280   return m_biu;
r22830r22831
241284{
242285   UINT32 old = m_biu;
243286
244   COMBINE_DATA( &m_biu );
287   COMBINE_DATA( &m_biu ); // TODO: check byte writes
245288
246289   if( ( old & ( BIU_RAM | BIU_DS ) ) != ( m_biu & ( BIU_RAM | BIU_DS ) ) )
247290   {
r22830r22831
16331676static ADDRESS_MAP_START( psxcpu_internal_map, AS_PROGRAM, 32, psxcpu_device )
16341677   AM_RANGE(0x1f800000, 0x1f8003ff) AM_NOP /* scratchpad */
16351678   AM_RANGE(0x1f800400, 0x1f800fff) AM_READWRITE( berr_r, berr_w )
1636   AM_RANGE(0x1f801000, 0x1f80100f) AM_RAM
1679   AM_RANGE(0x1f801000, 0x1f801003) AM_READWRITE( exp_base_r, exp_base_w )
1680   AM_RANGE(0x1f801004, 0x1f801007) AM_RAM
1681   AM_RANGE(0x1f801008, 0x1f80100b) AM_READWRITE( exp_config_r, exp_config_w )
1682   AM_RANGE(0x1f80100c, 0x1f80100f) AM_RAM
16371683   AM_RANGE(0x1f801010, 0x1f801013) AM_READWRITE( rom_config_r, rom_config_w )
16381684   AM_RANGE(0x1f801014, 0x1f80101f) AM_RAM
16391685   /* 1f801014 spu delay */
r22830r22831
33013347   m_cd_write_handler( space, offset, data, mem_mask );
33023348}
33033349
3304WRITE32_HANDLER( psxcpu_device::com_delay_w )
3305{
3306   COMBINE_DATA( &m_com_delay );
3307   //verboselog( p_psx, 1, "psx_com_delay_w( %08x %08x )\n", data, mem_mask );
3308}
3309
3310READ32_HANDLER( psxcpu_device::com_delay_r )
3311{
3312   //verboselog( p_psx, 1, "psx_com_delay_r( %08x )\n", mem_mask );
3313   return m_com_delay;
3314}
3315
33163350static MACHINE_CONFIG_FRAGMENT( psx )
33173351   MCFG_DEVICE_ADD("irq", PSX_IRQ, 0)
33183352   MCFG_PSX_IRQ_HANDLER(INPUTLINE(DEVICE_SELF, PSXCPU_IRQ0))
trunk/src/emu/cpu/psx/psx.h
r22830r22831
151151   DECLARE_WRITE32_MEMBER( berr_w );
152152   DECLARE_READ32_MEMBER( berr_r );
153153
154   UINT32 exp_base();
155
156   DECLARE_WRITE32_MEMBER( exp_base_w );
157   DECLARE_READ32_MEMBER( exp_base_r );
158
159   DECLARE_WRITE32_MEMBER( exp_config_w );
160   DECLARE_READ32_MEMBER( exp_config_r );
161
154162   DECLARE_WRITE32_MEMBER( ram_config_w );
155163   DECLARE_READ32_MEMBER( ram_config_r );
156164
r22830r22831
241249   UINT32 m_bad_byte_address_mask;
242250   UINT32 m_bad_half_address_mask;
243251   UINT32 m_bad_word_address_mask;
252   UINT32 m_exp_base;
253   UINT32 m_exp_config;
244254   UINT32 m_ram_config;
245255   UINT32 m_rom_config;
246256

Previous 199869 Revisions Next


© 1997-2024 The MAME Team