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 */ |