trunk/src/mame/drivers/namcos12.c
r22830 | r22831 | |
1045 | 1045 | namcos12_state(const machine_config &mconfig, device_type type, const char *tag) |
1046 | 1046 | : driver_device(mconfig, type, tag), |
1047 | 1047 | m_rtc(*this, "rtc"), |
1048 | | m_sharedram(*this, "sharedram") , |
| 1048 | m_sharedram(*this, "sharedram"), |
1049 | 1049 | m_maincpu(*this, "maincpu"), |
1050 | 1050 | m_ram(*this, "maincpu:ram") |
1051 | 1051 | { |
1052 | 1052 | } |
1053 | 1053 | |
1054 | 1054 | 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; |
1057 | 1057 | |
1058 | 1058 | UINT32 m_n_dmaoffset; |
1059 | | UINT32 m_n_dmabias; |
1060 | 1059 | UINT32 m_n_tektagdmaoffset; |
1061 | 1060 | int m_has_tektagt_dma; |
1062 | 1061 | |
r22830 | r22831 | |
1069 | 1068 | int m_s12_setstate; |
1070 | 1069 | int m_s12_setnum; |
1071 | 1070 | 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); |
1086 | 1082 | DECLARE_READ8_MEMBER(s12_mcu_p8_r); |
1087 | 1083 | DECLARE_READ8_MEMBER(s12_mcu_pa_r); |
1088 | 1084 | DECLARE_WRITE8_MEMBER(s12_mcu_pa_w); |
r22830 | r22831 | |
1093 | 1089 | DECLARE_READ8_MEMBER(s12_mcu_gun_h_r); |
1094 | 1090 | DECLARE_READ8_MEMBER(s12_mcu_gun_v_r); |
1095 | 1091 | DECLARE_DRIVER_INIT(namcos12); |
1096 | | DECLARE_DRIVER_INIT(ghlpanic); |
1097 | 1092 | DECLARE_DRIVER_INIT(ptblank2); |
1098 | 1093 | DECLARE_MACHINE_RESET(namcos12); |
1099 | 1094 | inline void ATTR_PRINTF(3,4) verboselog( int n_level, const char *s_fmt, ... ); |
1100 | 1095 | void namcos12_rom_read( UINT32 *p_n_psxram, UINT32 n_address, INT32 n_size ); |
1101 | 1096 | void namcos12_sub_irq( screen_device &screen, bool vblank_state ); |
1102 | | void system11gun_install( ); |
1103 | 1097 | required_device<psxcpu_device> m_maincpu; |
1104 | 1098 | required_device<ram_device> m_ram; |
1105 | 1099 | }; |
r22830 | r22831 | |
1117 | 1111 | } |
1118 | 1112 | } |
1119 | 1113 | |
1120 | | WRITE32_MEMBER(namcos12_state::sharedram_w) |
| 1114 | WRITE16_MEMBER(namcos12_state::sharedram_w) |
1121 | 1115 | { |
1122 | 1116 | verboselog(1, "sharedram_w( %08x, %08x, %08x )\n", ( offset * 4 ), data, mem_mask ); |
1123 | 1117 | COMBINE_DATA( &m_sharedram[ offset ] ); |
1124 | 1118 | } |
1125 | 1119 | |
1126 | | READ32_MEMBER(namcos12_state::sharedram_r) |
| 1120 | READ16_MEMBER(namcos12_state::sharedram_r) |
1127 | 1121 | { |
1128 | 1122 | verboselog(1, "sharedram_r( %08x, %08x ) %08x\n", ( offset * 4 ), mem_mask, m_sharedram[ offset ] ); |
1129 | 1123 | return m_sharedram[ offset ]; |
1130 | 1124 | } |
1131 | 1125 | |
1132 | | WRITE16_MEMBER(namcos12_state::sharedram_sub_w) |
| 1126 | WRITE16_MEMBER(namcos12_state::bankoffset_w) |
1133 | 1127 | { |
1134 | | UINT16 *shared16 = reinterpret_cast<UINT16 *>(m_sharedram.target()); |
1135 | | |
1136 | | COMBINE_DATA(&shared16[BYTE_XOR_LE(offset)]); |
1137 | | } |
1138 | | |
1139 | | READ16_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 | | |
1146 | | WRITE32_MEMBER(namcos12_state::bankoffset_w) |
1147 | | { |
1148 | 1128 | // Golgo 13 has different banking (maybe the keycus controls it?) |
1149 | 1129 | if( strcmp( machine().system().name, "golgo13" ) == 0 || |
1150 | 1130 | strcmp( machine().system().name, "g13knd" ) == 0 ) |
r22830 | r22831 | |
1168 | 1148 | verboselog(1, "bankoffset_w( %08x, %08x, %08x ) %08x\n", offset, data, mem_mask, m_n_bankoffset ); |
1169 | 1149 | } |
1170 | 1150 | |
1171 | | WRITE32_MEMBER(namcos12_state::dmaoffset_w) |
| 1151 | WRITE16_MEMBER(namcos12_state::dmaoffset_w) |
1172 | 1152 | { |
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 ) |
1174 | 1157 | { |
1175 | | m_n_dmaoffset = ( offset * 4 ) | ( data << 16 ); |
| 1158 | m_n_dmaoffset |= 0x80000000; |
1176 | 1159 | } |
1177 | | if( ACCESSING_BITS_16_31 ) |
1178 | | { |
1179 | | m_n_dmaoffset = ( ( offset * 4 ) + 2 ) | ( data & 0xffff0000 ); |
1180 | | } |
| 1160 | |
1181 | 1161 | verboselog(1, "dmaoffset_w( %08x, %08x, %08x ) %08x\n", offset, data, mem_mask, m_n_dmaoffset ); |
1182 | 1162 | } |
1183 | 1163 | |
r22830 | r22831 | |
1201 | 1181 | n_offset = m_n_tektagdmaoffset & 0x7fffffff; |
1202 | 1182 | verboselog(1, "namcos12_rom_read( %08x, %08x ) tektagt %08x\n", n_address, n_size, n_offset ); |
1203 | 1183 | } |
1204 | | else if( ( m_n_dmaoffset >= 0x80000000 ) || ( m_n_dmabias == 0x1f300000 ) ) |
| 1184 | else if( m_n_dmaoffset >= 0x80000000 ) |
1205 | 1185 | { |
1206 | 1186 | n_region = "maincpu:rom"; |
1207 | 1187 | n_offset = m_n_dmaoffset & 0x003fffff; |
r22830 | r22831 | |
1249 | 1229 | irq1_line_pulse( *machine().device( "sub" ) ); |
1250 | 1230 | } |
1251 | 1231 | |
1252 | | WRITE32_MEMBER(namcos12_state::s12_dma_bias_w) |
1253 | | { |
1254 | | m_n_dmabias = data; |
1255 | | } |
1256 | | |
1257 | 1232 | static 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?? */ |
1260 | 1235 | AM_RANGE(0x1f140000, 0x1f140fff) AM_DEVREADWRITE8("at28c16", at28c16_device, read, write, 0x00ff00ff) /* eeprom */ |
1261 | 1236 | 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 */ |
1263 | 1238 | AM_RANGE(0x1fa00000, 0x1fbfffff) AM_ROMBANK("bank1") /* banked roms */ |
1264 | 1239 | ADDRESS_MAP_END |
1265 | 1240 | |
1266 | | WRITE32_MEMBER(namcos12_state::system11gun_w) |
| 1241 | static 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) |
| 1246 | ADDRESS_MAP_END |
| 1247 | |
| 1248 | static 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 ) |
| 1254 | ADDRESS_MAP_END |
| 1255 | |
| 1256 | WRITE16_MEMBER(namcos12_state::system11gun_w) |
1267 | 1257 | { |
1268 | | if( ACCESSING_BITS_0_15 ) |
| 1258 | switch( offset ) |
1269 | 1259 | { |
| 1260 | case 0: |
1270 | 1261 | /* blowback 1 */ |
1271 | 1262 | /* blowback 2 */ |
1272 | 1263 | /* Note: output label has been changed for the Engrish Impaired ;-) */ |
r22830 | r22831 | |
1278 | 1269 | /* start 2 */ |
1279 | 1270 | output_set_value("P2_Start_lamp", (~data & 0x04)>>2); |
1280 | 1271 | |
| 1272 | verboselog(1, "system11gun_w: outputs (%08x %08x)\n", data, mem_mask ); |
| 1273 | break; |
1281 | 1274 | |
1282 | | verboselog(1, "system11gun_w: outputs (%08x %08x)\n", data, mem_mask ); |
1283 | | } |
1284 | | if( ACCESSING_BITS_16_31 ) |
1285 | | { |
| 1275 | case 1: |
1286 | 1276 | verboselog(2, "system11gun_w: start reading (%08x %08x)\n", data, mem_mask ); |
| 1277 | break; |
1287 | 1278 | } |
1288 | 1279 | } |
1289 | 1280 | |
1290 | | READ32_MEMBER(namcos12_state::system11gun_r) |
| 1281 | READ16_MEMBER(namcos12_state::system11gun_r) |
1291 | 1282 | { |
1292 | | UINT32 data = 0; |
| 1283 | UINT16 data = 0; |
| 1284 | |
1293 | 1285 | switch( offset ) |
1294 | 1286 | { |
1295 | 1287 | case 0: |
1296 | 1288 | data = ioport("LIGHT0_X")->read(); |
1297 | 1289 | break; |
1298 | | case 1: |
1299 | | data = ( ioport("LIGHT0_Y")->read() ) | ( ( ioport("LIGHT0_Y")->read() + 1 ) << 16 ); |
1300 | | break; |
| 1290 | |
1301 | 1291 | case 2: |
1302 | | data = ioport("LIGHT1_X")->read(); |
| 1292 | data = ioport("LIGHT0_Y")->read(); |
1303 | 1293 | break; |
| 1294 | |
1304 | 1295 | case 3: |
1305 | | data = ( ioport("LIGHT1_Y")->read() ) | ( ( ioport("LIGHT1_Y")->read() + 1 ) << 16 ); |
| 1296 | data = ioport("LIGHT0_Y")->read() + 1; |
1306 | 1297 | 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; |
1307 | 1310 | } |
1308 | 1311 | verboselog(2, "system11gun_r( %08x, %08x ) %08x\n", offset, mem_mask, data ); |
1309 | 1312 | return data; |
1310 | 1313 | } |
1311 | 1314 | |
1312 | | void namcos12_state::system11gun_install( ) |
| 1315 | WRITE16_MEMBER(namcos12_state::tektagt_protection_1_w) |
1313 | 1316 | { |
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 | } |
1316 | 1334 | } |
1317 | 1335 | |
1318 | | WRITE32_MEMBER(namcos12_state::tektagt_protection_1_w) |
| 1336 | READ16_MEMBER(namcos12_state::tektagt_protection_1_r) |
1319 | 1337 | { |
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 | } |
1325 | 1344 | |
1326 | | READ32_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; |
1330 | 1346 | } |
1331 | 1347 | |
1332 | | WRITE32_MEMBER(namcos12_state::tektagt_protection_2_w) |
| 1348 | WRITE16_MEMBER(namcos12_state::tektagt_protection_2_w) |
1333 | 1349 | { |
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 | } |
1336 | 1356 | } |
1337 | 1357 | |
1338 | | READ32_MEMBER(namcos12_state::tektagt_protection_2_r) |
| 1358 | READ16_MEMBER(namcos12_state::tektagt_protection_2_r) |
1339 | 1359 | { |
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 | } |
1342 | 1388 | |
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; |
1359 | 1390 | } |
1360 | 1391 | |
1361 | | READ32_MEMBER(namcos12_state::tektagt_protection_3_r) |
| 1392 | READ16_MEMBER(namcos12_state::tektagt_protection_3_r) |
1362 | 1393 | { |
| 1394 | m_has_tektagt_dma = 1; |
1363 | 1395 | // Always ignored |
1364 | 1396 | return 0; |
1365 | 1397 | } |
r22830 | r22831 | |
1367 | 1399 | MACHINE_RESET_MEMBER(namcos12_state,namcos12) |
1368 | 1400 | { |
1369 | 1401 | address_space &space = m_maincpu->space(AS_PROGRAM); |
1370 | | bankoffset_w(space,0,0,0xffffffff); |
| 1402 | bankoffset_w(space,0,0,0xffff); |
1371 | 1403 | |
1372 | | space.install_write_handler(0x1f801000, 0x1f801003, write32_delegate(FUNC(namcos12_state::s12_dma_bias_w),this)); |
1373 | | |
1374 | 1404 | m_has_tektagt_dma = 0; |
1375 | 1405 | |
1376 | | |
1377 | 1406 | if( strcmp( machine().system().name, "tektagt" ) == 0 || |
1378 | 1407 | strcmp( machine().system().name, "tektagtac" ) == 0 || |
1379 | 1408 | strcmp( machine().system().name, "tektagtac1" ) == 0 || |
1380 | 1409 | strcmp( machine().system().name, "tektagtub" ) == 0 || |
1381 | 1410 | 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 || |
1395 | 1411 | strcmp( machine().system().name, "tektagtja" ) == 0 || |
1396 | 1412 | strcmp( machine().system().name, "fgtlayer" ) == 0 || |
1397 | 1413 | strcmp( machine().system().name, "golgo13" ) == 0 || |
r22830 | r22831 | |
1409 | 1425 | strcmp( machine().system().name, "truckk" ) == 0 || |
1410 | 1426 | strcmp( machine().system().name, "ghlpanic" ) == 0 ) |
1411 | 1427 | { |
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. */ |
1413 | 1429 | UINT8 *rom = memregion( "maincpu:rom" )->base() + 0x20280; |
1414 | 1430 | UINT8 *ram = m_ram->pointer() + 0x10000; |
1415 | 1431 | |
r22830 | r22831 | |
1420 | 1436 | /* H8/3002 MCU stuff */ |
1421 | 1437 | static ADDRESS_MAP_START( s12h8rwmap, AS_PROGRAM, 16, namcos12_state ) |
1422 | 1438 | 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") |
1424 | 1440 | AM_RANGE(0x280000, 0x287fff) AM_DEVREADWRITE("c352", c352_device, read, write) |
1425 | 1441 | AM_RANGE(0x300000, 0x300001) AM_READ_PORT("IN0") |
1426 | 1442 | AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1") |
r22830 | r22831 | |
1577 | 1593 | |
1578 | 1594 | m_n_tektagdmaoffset = 0; |
1579 | 1595 | m_n_dmaoffset = 0; |
1580 | | m_n_dmabias = 0; |
1581 | 1596 | m_n_bankoffset = 0; |
1582 | 1597 | membank( "bank1" )->set_entry( 0 ); |
1583 | 1598 | |
1584 | 1599 | save_item( NAME(m_n_dmaoffset) ); |
1585 | | save_item( NAME(m_n_dmabias) ); |
1586 | 1600 | save_item( NAME(m_n_bankoffset) ); |
1587 | 1601 | } |
1588 | 1602 | |
r22830 | r22831 | |
1590 | 1604 | { |
1591 | 1605 | DRIVER_INIT_CALL(namcos12); |
1592 | 1606 | |
1593 | | /* patch out wait for dma 5 to complete */ |
| 1607 | /* HACK: patch out wait for dma 5 to complete */ |
1594 | 1608 | *( (UINT32 *)( memregion( "maincpu:rom" )->base() + 0x331c4 ) ) = 0; |
1595 | | |
1596 | | system11gun_install(); |
1597 | 1609 | } |
1598 | 1610 | |
1599 | | DRIVER_INIT_MEMBER(namcos12_state,ghlpanic) |
1600 | | { |
1601 | | DRIVER_INIT_CALL(namcos12); |
1602 | | |
1603 | | system11gun_install(); |
1604 | | } |
1605 | | |
1606 | 1611 | static MACHINE_CONFIG_START( coh700, namcos12_state ) |
1607 | 1612 | /* basic machine hardware */ |
1608 | 1613 | MCFG_CPU_ADD( "maincpu", CXD8661R, XTAL_100MHz ) |
r22830 | r22831 | |
1637 | 1642 | MCFG_AT28C16_ADD( "at28c16", NULL ) |
1638 | 1643 | MACHINE_CONFIG_END |
1639 | 1644 | |
| 1645 | static MACHINE_CONFIG_DERIVED( ptblank2, coh700 ) |
| 1646 | MCFG_CPU_MODIFY( "maincpu" ) |
| 1647 | MCFG_CPU_PROGRAM_MAP( ptblank2_map ) |
| 1648 | MACHINE_CONFIG_END |
| 1649 | |
| 1650 | static MACHINE_CONFIG_DERIVED( tektagt, coh700 ) |
| 1651 | MCFG_CPU_MODIFY( "maincpu" ) |
| 1652 | MCFG_CPU_PROGRAM_MAP( tektagt_map ) |
| 1653 | MACHINE_CONFIG_END |
| 1654 | |
| 1655 | |
1640 | 1656 | static INPUT_PORTS_START( namcos12 ) |
1641 | 1657 | PORT_START("DSW") |
1642 | 1658 | PORT_DIPNAME( 0x0080, 0x0080, DEF_STR(Service_Mode) ) |
r22830 | r22831 | |
2773 | 2789 | GAME( 1998, tenkomorja,tenkomor, coh700, namcos12, namcos12_state, namcos12, ROT90,"Namco", "Tenkomori Shooting (Japan, TKM1/VER.A1)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC036 */ |
2774 | 2790 | 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 */ |
2775 | 2791 | 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 */ |
2776 | | GAME( 1999, ptblank2, 0, coh700, ptblank2, namcos12_state, ptblank2, ROT0, "Namco", "Point Blank 2 (GNB5/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC042 */ |
2777 | | GAME( 1999, gunbarl, ptblank2, coh700, ptblank2, namcos12_state, ptblank2, ROT0, "Namco", "Gunbarl (Japan, GNB4/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC042 */ |
| 2792 | GAME( 1999, ptblank2, 0, ptblank2, ptblank2, namcos12_state, ptblank2, ROT0, "Namco", "Point Blank 2 (GNB5/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC042 */ |
| 2793 | GAME( 1999, gunbarl, ptblank2, ptblank2, ptblank2, namcos12_state, ptblank2, ROT0, "Namco", "Gunbarl (Japan, GNB4/VER.A)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC042 */ |
2778 | 2794 | 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 */ |
2779 | | GAME( 1999, tektagt, 0, coh700, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (US, TEG3/VER.C1)", GAME_IMPERFECT_SOUND ) /* KC044 */ |
2780 | | GAME( 1999, tektagtac, tektagt, coh700, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 1)", GAME_IMPERFECT_SOUND ) /* KC044 */ |
2781 | | GAME( 1999, tektagtac1,tektagt, coh700, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 2)", GAME_IMPERFECT_SOUND ) /* KC044 */ |
2782 | | GAME( 1999, tektagtub, tektagt, coh700, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (US, TEG3/VER.B)", GAME_IMPERFECT_SOUND ) /* KC044 */ |
2783 | | 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 */ |
2784 | | 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 */ |
2785 | | 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 */ |
| 2795 | GAME( 1999, tektagt, 0, tektagt, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (US, TEG3/VER.C1)", GAME_IMPERFECT_SOUND ) /* KC044 */ |
| 2796 | GAME( 1999, tektagtac, tektagt, tektagt, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 1)", GAME_IMPERFECT_SOUND ) /* KC044 */ |
| 2797 | GAME( 1999, tektagtac1,tektagt, tektagt, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 2)", GAME_IMPERFECT_SOUND ) /* KC044 */ |
| 2798 | GAME( 1999, tektagtub, tektagt, tektagt, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Tekken Tag Tournament (US, TEG3/VER.B)", GAME_IMPERFECT_SOUND ) /* KC044 */ |
| 2799 | 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 */ |
| 2800 | 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 */ |
| 2801 | 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 */ |
2786 | 2802 | 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 */ |
2787 | | GAME( 1999, mrdrillr, 0, coh700, namcos124w, namcos12_state,namcos12,ROT0, "Namco", "Mr. Driller (Japan, DRI1/VER.A2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC048 */ |
| 2803 | GAME( 1999, mrdrillr, 0, coh700, namcos124w,namcos12_state,namcos12,ROT0, "Namco", "Mr. Driller (Japan, DRI1/VER.A2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC048 */ |
2788 | 2804 | 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 */ |
2789 | 2805 | 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 */ |
2790 | 2806 | GAME( 1999, aquarush, 0, coh700, namcos12, namcos12_state, namcos12, ROT0, "Namco", "Aqua Rush (Japan, AQ1/VER.A1)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* KC053 */ |