trunk/src/mame/drivers/ninjakd2.c
r18270 | r18271 | |
158 | 158 | #define MAIN_CLOCK_12 XTAL_12MHz |
159 | 159 | #define MAIN_CLOCK_5 XTAL_5MHz |
160 | 160 | |
| 161 | |
| 162 | /************************************* |
| 163 | * |
| 164 | * Ninja Kid II PCM |
| 165 | * |
| 166 | *************************************/ |
| 167 | |
161 | 168 | // PCM playback is controlled by a 555 timer |
162 | 169 | #define NE555_FREQUENCY 16300 // measured on PCB |
163 | 170 | //#define NE555_FREQUENCY (1.0f / (0.693 * (560 + 2*51) * 0.1e-6)) // theoretical: this gives 21.8kHz which is too high |
164 | 171 | |
165 | | |
166 | | static void omegaf_io_protection_reset(running_machine &machine); |
167 | | |
168 | | |
169 | | INTERRUPT_GEN_MEMBER(ninjakd2_state::ninjakd2_interrupt) |
170 | | { |
171 | | device.execute().set_input_line_and_vector(0, HOLD_LINE, 0xd7); /* RST 10h */ |
172 | | } |
173 | | |
174 | | |
175 | | void ninjakd2_state::machine_reset() |
176 | | { |
177 | | /* initialize main Z80 bank */ |
178 | | machine().root_device().membank("bank1")->configure_entries(0, 8, machine().root_device().memregion("maincpu")->base() + 0x10000, 0x4000); |
179 | | machine().root_device().membank("bank1")->set_entry(0); |
180 | | } |
181 | | |
182 | | static void robokid_init_banks(running_machine &machine) |
183 | | { |
184 | | /* initialize main Z80 bank */ |
185 | | machine.root_device().membank("bank1")->configure_entries(0, 2, machine.root_device().memregion("maincpu")->base(), 0x4000); |
186 | | machine.root_device().membank("bank1")->configure_entries(2, 14, machine.root_device().memregion("maincpu")->base() + 0x10000, 0x4000); |
187 | | machine.root_device().membank("bank1")->set_entry(0); |
188 | | } |
189 | | |
190 | | MACHINE_RESET_MEMBER(ninjakd2_state,robokid) |
191 | | { |
192 | | robokid_init_banks(machine()); |
193 | | } |
194 | | |
195 | | MACHINE_RESET_MEMBER(ninjakd2_state,omegaf) |
196 | | { |
197 | | robokid_init_banks(machine()); |
198 | | |
199 | | omegaf_io_protection_reset(machine()); |
200 | | } |
201 | | |
202 | | |
203 | | WRITE8_MEMBER(ninjakd2_state::ninjakd2_bankselect_w) |
204 | | { |
205 | | membank("bank1")->set_entry(data & 0x7); |
206 | | } |
207 | | |
208 | | WRITE8_MEMBER(ninjakd2_state::robokid_bankselect_w) |
209 | | { |
210 | | membank("bank1")->set_entry(data & 0xf); |
211 | | } |
212 | | |
213 | | |
214 | | WRITE8_MEMBER(ninjakd2_state::ninjakd2_soundreset_w) |
215 | | { |
216 | | // bit 4 resets sound CPU |
217 | | machine().device("soundcpu")->execute().set_input_line(INPUT_LINE_RESET, (data & 0x10) ? ASSERT_LINE : CLEAR_LINE); |
218 | | |
219 | | // bit 7 flips screen |
220 | | flip_screen_set(data & 0x80); |
221 | | |
222 | | // other bits unused |
223 | | } |
224 | | |
225 | | |
226 | | |
227 | 172 | static SAMPLES_START( ninjakd2_init_samples ) |
228 | 173 | { |
229 | 174 | ninjakd2_state *state = device.machine().driver_data<ninjakd2_state>(); |
r18270 | r18271 | |
383 | 328 | |
384 | 329 | |
385 | 330 | |
| 331 | /*****************************************************************************/ |
| 332 | |
| 333 | WRITE8_MEMBER(ninjakd2_state::ninjakd2_bankselect_w) |
| 334 | { |
| 335 | membank("bank1")->set_entry(data & m_rom_bank_mask); |
| 336 | } |
| 337 | |
| 338 | WRITE8_MEMBER(ninjakd2_state::ninjakd2_soundreset_w) |
| 339 | { |
| 340 | // bit 4 resets sound CPU |
| 341 | machine().device("soundcpu")->execute().set_input_line(INPUT_LINE_RESET, (data & 0x10) ? ASSERT_LINE : CLEAR_LINE); |
| 342 | |
| 343 | // bit 7 flips screen |
| 344 | flip_screen_set(data & 0x80); |
| 345 | |
| 346 | // other bits unused |
| 347 | } |
| 348 | |
| 349 | |
| 350 | |
386 | 351 | /************************************* |
387 | 352 | * |
388 | 353 | * Memory maps |
r18270 | r18271 | |
446 | 411 | AM_RANGE(0xdc04, 0xdc04) AM_READ_PORT("DIPSW2") |
447 | 412 | AM_RANGE(0xdc00, 0xdc00) AM_WRITE(soundlatch_byte_w) |
448 | 413 | AM_RANGE(0xdc01, 0xdc01) AM_WRITE(ninjakd2_soundreset_w) // sound reset + flip screen |
449 | | AM_RANGE(0xdc02, 0xdc02) AM_WRITE(robokid_bankselect_w) |
| 414 | AM_RANGE(0xdc02, 0xdc02) AM_WRITE(ninjakd2_bankselect_w) |
450 | 415 | AM_RANGE(0xdc03, 0xdc03) AM_WRITE(ninjakd2_sprite_overdraw_w) |
451 | 416 | AM_RANGE(0xdd00, 0xdd04) AM_WRITE(robokid_bg0_ctrl_w) // scroll + enable |
452 | 417 | AM_RANGE(0xdd05, 0xdd05) AM_WRITE(robokid_bg0_bank_w) |
r18270 | r18271 | |
466 | 431 | AM_RANGE(0xc001, 0xc003) AM_READ(omegaf_io_protection_r) |
467 | 432 | AM_RANGE(0xc000, 0xc000) AM_WRITE(soundlatch_byte_w) |
468 | 433 | AM_RANGE(0xc001, 0xc001) AM_WRITE(ninjakd2_soundreset_w) // sound reset + flip screen |
469 | | AM_RANGE(0xc002, 0xc002) AM_WRITE(robokid_bankselect_w) |
| 434 | AM_RANGE(0xc002, 0xc002) AM_WRITE(ninjakd2_bankselect_w) |
470 | 435 | AM_RANGE(0xc003, 0xc003) AM_WRITE(ninjakd2_sprite_overdraw_w) |
471 | 436 | AM_RANGE(0xc004, 0xc006) AM_WRITE(omegaf_io_protection_w) |
472 | 437 | AM_RANGE(0xc100, 0xc104) AM_WRITE(robokid_bg0_ctrl_w) // scroll + enable |
r18270 | r18271 | |
934 | 899 | * |
935 | 900 | *************************************/ |
936 | 901 | |
| 902 | INTERRUPT_GEN_MEMBER(ninjakd2_state::ninjakd2_interrupt) |
| 903 | { |
| 904 | device.execute().set_input_line_and_vector(0, HOLD_LINE, 0xd7); /* RST 10h */ |
| 905 | } |
| 906 | |
| 907 | void ninjakd2_state::machine_reset() |
| 908 | { |
| 909 | /* initialize main Z80 bank */ |
| 910 | int num_banks = (machine().root_device().memregion("maincpu")->bytes() - 0x10000) / 0x4000; |
| 911 | machine().root_device().membank("bank1")->configure_entries(0, num_banks, machine().root_device().memregion("maincpu")->base() + 0x10000, 0x4000); |
| 912 | machine().root_device().membank("bank1")->set_entry(0); |
| 913 | |
| 914 | m_rom_bank_mask = num_banks - 1; |
| 915 | } |
| 916 | |
| 917 | MACHINE_RESET_MEMBER(ninjakd2_state,omegaf) |
| 918 | { |
| 919 | omegaf_io_protection_reset(machine()); |
| 920 | |
| 921 | machine_reset(); |
| 922 | } |
| 923 | |
| 924 | /*****************************************************************************/ |
| 925 | |
937 | 926 | static MACHINE_CONFIG_START( ninjakd2, ninjakd2_state ) |
938 | 927 | |
939 | 928 | /* basic machine hardware */ |
r18270 | r18271 | |
945 | 934 | MCFG_CPU_PROGRAM_MAP(ninjakd2_sound_cpu) |
946 | 935 | MCFG_CPU_IO_MAP(ninjakd2_sound_io) |
947 | 936 | |
948 | | |
949 | 937 | /* video hardware */ |
950 | 938 | MCFG_SCREEN_ADD("screen", RASTER) |
951 | 939 | MCFG_SCREEN_REFRESH_RATE(59.61) /* verified on pcb */ |
r18270 | r18271 | |
957 | 945 | MCFG_GFXDECODE(ninjakd2) |
958 | 946 | MCFG_PALETTE_LENGTH(0x300) |
959 | 947 | |
960 | | |
961 | 948 | /* sound hardware */ |
962 | 949 | MCFG_SPEAKER_STANDARD_MONO("mono") |
963 | 950 | |
r18270 | r18271 | |
981 | 968 | static MACHINE_CONFIG_DERIVED( mnight, ninjakd2 ) |
982 | 969 | |
983 | 970 | /* basic machine hardware */ |
984 | | |
985 | 971 | MCFG_CPU_MODIFY("maincpu") |
986 | 972 | MCFG_CPU_PROGRAM_MAP(mnight_main_cpu) |
987 | 973 | |
r18270 | r18271 | |
995 | 981 | static MACHINE_CONFIG_DERIVED( arkarea, ninjakd2 ) |
996 | 982 | |
997 | 983 | /* basic machine hardware */ |
998 | | |
999 | 984 | MCFG_CPU_MODIFY("maincpu") |
1000 | 985 | MCFG_CPU_PROGRAM_MAP(mnight_main_cpu) |
1001 | 986 | |
r18270 | r18271 | |
1009 | 994 | static MACHINE_CONFIG_DERIVED( robokid, mnight ) |
1010 | 995 | |
1011 | 996 | /* basic machine hardware */ |
1012 | | |
1013 | 997 | MCFG_CPU_MODIFY("maincpu") |
1014 | 998 | MCFG_CPU_PROGRAM_MAP(robokid_main_cpu) |
1015 | 999 | |
1016 | | MCFG_MACHINE_RESET_OVERRIDE(ninjakd2_state,robokid) |
1017 | | |
1018 | 1000 | /* video hardware */ |
1019 | 1001 | MCFG_GFXDECODE(robokid) |
1020 | 1002 | MCFG_PALETTE_LENGTH(0x400) // RAM is this large, but still only 0x300 colors used |
r18270 | r18271 | |
1027 | 1009 | static MACHINE_CONFIG_DERIVED( omegaf, robokid ) |
1028 | 1010 | |
1029 | 1011 | /* basic machine hardware */ |
1030 | | |
1031 | 1012 | MCFG_CPU_MODIFY("maincpu") |
1032 | 1013 | MCFG_CPU_PROGRAM_MAP(omegaf_main_cpu) |
1033 | 1014 | |
r18270 | r18271 | |
1210 | 1191 | ROM_END |
1211 | 1192 | |
1212 | 1193 | ROM_START( robokid ) |
1213 | | ROM_REGION( 0x48000, "maincpu", 0 ) |
| 1194 | ROM_REGION( 0x50000, "maincpu", 0 ) |
1214 | 1195 | ROM_LOAD( "robokid1.18j", 0x00000, 0x08000, CRC(378c21fc) SHA1(58163bd6fbfa8385b1bd648cfde3d75bf81ac07d) ) |
1215 | | ROM_CONTINUE( 0x10000, 0x08000 ) // banked at 8000-bfff |
1216 | | ROM_LOAD( "robokid2.18k", 0x18000, 0x10000, CRC(ddef8c5a) SHA1(a1dd2f51205863c3d5d3527991d538ca8adf7587) ) |
1217 | | ROM_LOAD( "robokid3.15k", 0x28000, 0x10000, CRC(05295ec3) SHA1(33dd0853a2064cb4301cfbdc7856def81f6e1223) ) |
1218 | | ROM_LOAD( "robokid4.12k", 0x38000, 0x10000, CRC(3bc3977f) SHA1(da394e12d197b0e109b03c854da06b1267bd9d59) ) |
| 1196 | ROM_IGNORE( 0x08000 ) |
| 1197 | ROM_RELOAD( 0x10000, 0x10000 ) // banked at 8000-bfff |
| 1198 | ROM_LOAD( "robokid2.18k", 0x20000, 0x10000, CRC(ddef8c5a) SHA1(a1dd2f51205863c3d5d3527991d538ca8adf7587) ) |
| 1199 | ROM_LOAD( "robokid3.15k", 0x30000, 0x10000, CRC(05295ec3) SHA1(33dd0853a2064cb4301cfbdc7856def81f6e1223) ) |
| 1200 | ROM_LOAD( "robokid4.12k", 0x40000, 0x10000, CRC(3bc3977f) SHA1(da394e12d197b0e109b03c854da06b1267bd9d59) ) |
1219 | 1201 | |
1220 | 1202 | ROM_REGION( 0x10000, "soundcpu", 0 ) |
1221 | 1203 | ROM_LOAD( "robokid.k7", 0x00000, 0x10000, CRC(f490a2e9) SHA1(861d1256c090ce3d1f45f95cc894affbbc3f1466) ) |
r18270 | r18271 | |
1258 | 1240 | ROM_END |
1259 | 1241 | |
1260 | 1242 | ROM_START( robokidj ) |
1261 | | ROM_REGION( 0x48000, "maincpu", 0 ) |
| 1243 | ROM_REGION( 0x50000, "maincpu", 0 ) |
1262 | 1244 | ROM_LOAD( "1.29", 0x00000, 0x08000, CRC(59a1e2ec) SHA1(71f9d28dd8d2cf77a27fab163ce9562e3e75a540) ) |
1263 | | ROM_CONTINUE( 0x10000, 0x08000 ) // banked at 8000-bfff |
1264 | | ROM_LOAD( "2.30", 0x18000, 0x10000, CRC(e3f73476) SHA1(bd1c8946d637df21432bd52ae9324255251570b9) ) |
1265 | | ROM_LOAD( "robokid3.15k", 0x28000, 0x10000, CRC(05295ec3) SHA1(33dd0853a2064cb4301cfbdc7856def81f6e1223) ) |
1266 | | ROM_LOAD( "robokid4.12k", 0x38000, 0x10000, CRC(3bc3977f) SHA1(da394e12d197b0e109b03c854da06b1267bd9d59) ) |
| 1245 | ROM_IGNORE( 0x08000 ) |
| 1246 | ROM_RELOAD( 0x10000, 0x10000 ) // banked at 8000-bfff |
| 1247 | ROM_LOAD( "2.30", 0x20000, 0x10000, CRC(e3f73476) SHA1(bd1c8946d637df21432bd52ae9324255251570b9) ) |
| 1248 | ROM_LOAD( "robokid3.15k", 0x30000, 0x10000, CRC(05295ec3) SHA1(33dd0853a2064cb4301cfbdc7856def81f6e1223) ) |
| 1249 | ROM_LOAD( "robokid4.12k", 0x40000, 0x10000, CRC(3bc3977f) SHA1(da394e12d197b0e109b03c854da06b1267bd9d59) ) |
1267 | 1250 | |
1268 | 1251 | ROM_REGION( 0x10000, "soundcpu", 0 ) |
1269 | 1252 | ROM_LOAD( "robokid.k7", 0x00000, 0x10000, CRC(f490a2e9) SHA1(861d1256c090ce3d1f45f95cc894affbbc3f1466) ) |
r18270 | r18271 | |
1306 | 1289 | ROM_END |
1307 | 1290 | |
1308 | 1291 | ROM_START( robokidj2 ) |
1309 | | ROM_REGION( 0x48000, "maincpu", 0 ) |
| 1292 | ROM_REGION( 0x50000, "maincpu", 0 ) |
1310 | 1293 | ROM_LOAD( "1_rom29.18j", 0x00000, 0x08000, CRC(969fb951) SHA1(aa32f0cb33ba2ccbb933dab5444a7e0dbbb84b3d) ) |
1311 | | ROM_CONTINUE( 0x10000, 0x08000 ) // banked at 8000-bfff |
1312 | | ROM_LOAD( "2_rom30.18k", 0x18000, 0x10000, CRC(c0228b63) SHA1(8f7e3a29a35723abc8b10bf511fc8611e31a2961) ) |
1313 | | ROM_LOAD( "robokid3.15k", 0x28000, 0x10000, CRC(05295ec3) SHA1(33dd0853a2064cb4301cfbdc7856def81f6e1223) ) |
1314 | | ROM_LOAD( "robokid4.12k", 0x38000, 0x10000, CRC(3bc3977f) SHA1(da394e12d197b0e109b03c854da06b1267bd9d59) ) |
| 1294 | ROM_IGNORE( 0x08000 ) |
| 1295 | ROM_RELOAD( 0x10000, 0x10000 ) // banked at 8000-bfff |
| 1296 | ROM_LOAD( "2_rom30.18k", 0x20000, 0x10000, CRC(c0228b63) SHA1(8f7e3a29a35723abc8b10bf511fc8611e31a2961) ) |
| 1297 | ROM_LOAD( "robokid3.15k", 0x30000, 0x10000, CRC(05295ec3) SHA1(33dd0853a2064cb4301cfbdc7856def81f6e1223) ) |
| 1298 | ROM_LOAD( "robokid4.12k", 0x40000, 0x10000, CRC(3bc3977f) SHA1(da394e12d197b0e109b03c854da06b1267bd9d59) ) |
1315 | 1299 | |
1316 | 1300 | ROM_REGION( 0x10000, "soundcpu", 0 ) |
1317 | 1301 | ROM_LOAD( "robokid.k7", 0x00000, 0x10000, CRC(f490a2e9) SHA1(861d1256c090ce3d1f45f95cc894affbbc3f1466) ) |
r18270 | r18271 | |
1354 | 1338 | ROM_END |
1355 | 1339 | |
1356 | 1340 | ROM_START( omegaf ) |
1357 | | ROM_REGION( 0x48000, "maincpu", 0 ) |
| 1341 | ROM_REGION( 0x50000, "maincpu", 0 ) |
1358 | 1342 | ROM_LOAD( "1.5", 0x00000, 0x08000, CRC(57a7fd96) SHA1(65ca290b48f8579fcce00db5b3b3f8694667a136) ) |
1359 | | ROM_CONTINUE( 0x10000, 0x18000 ) // banked at 8000-bfff |
1360 | | ROM_LOAD( "6.4l", 0x28000, 0x20000, CRC(6277735c) SHA1(b0f91f0cc51d424a1a7834c126736f24c2e23c17) ) |
| 1343 | ROM_IGNORE( 0x18000 ) |
| 1344 | ROM_RELOAD( 0x10000, 0x20000 ) // banked at 8000-bfff |
| 1345 | ROM_LOAD( "6.4l", 0x30000, 0x20000, CRC(6277735c) SHA1(b0f91f0cc51d424a1a7834c126736f24c2e23c17) ) |
1361 | 1346 | |
1362 | 1347 | ROM_REGION( 0x10000, "soundcpu", 0 ) |
1363 | 1348 | ROM_LOAD( "7.7m", 0x00000, 0x10000, CRC(d40fc8d5) SHA1(4f615a0fb786cafc20f82f0b5fa112a9c356378f) ) |
r18270 | r18271 | |
1379 | 1364 | ROM_END |
1380 | 1365 | |
1381 | 1366 | ROM_START( omegafs ) |
1382 | | ROM_REGION( 0x48000, "maincpu", 0 ) |
| 1367 | ROM_REGION( 0x50000, "maincpu", 0 ) |
1383 | 1368 | ROM_LOAD( "5.3l", 0x00000, 0x08000, CRC(503a3e63) SHA1(73420aecb653cd4fd3b6afe67d6f5726f01411dd) ) |
1384 | | ROM_CONTINUE( 0x10000, 0x18000 ) // banked at 8000-bfff |
| 1369 | ROM_IGNORE( 0x18000 ) |
| 1370 | ROM_RELOAD( 0x10000, 0x20000 ) // banked at 8000-bfff |
1385 | 1371 | ROM_LOAD( "6.4l", 0x28000, 0x20000, CRC(6277735c) SHA1(b0f91f0cc51d424a1a7834c126736f24c2e23c17) ) |
1386 | 1372 | |
1387 | 1373 | ROM_REGION( 0x10000, "soundcpu", 0 ) |
r18270 | r18271 | |
1488 | 1474 | * |
1489 | 1475 | *************************************/ |
1490 | 1476 | |
1491 | | // YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS |
| 1477 | // YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS |
1492 | 1478 | GAME( 1987, ninjakd2, 0, ninjakd2, ninjakd2, ninjakd2_state, ninjakd2, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 1)", 0 ) |
1493 | 1479 | GAME( 1987, ninjakd2a, ninjakd2, ninjakd2, ninjakd2, ninjakd2_state, bootleg, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 2, bootleg?)", 0 ) |
1494 | 1480 | GAME( 1987, ninjakd2b, ninjakd2, ninjakd2, rdaction, ninjakd2_state, bootleg, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 3, bootleg?)", 0 ) |
1495 | 1481 | GAME( 1987, rdaction, ninjakd2, ninjakd2, rdaction, ninjakd2_state, ninjakd2, ROT0, "UPL (World Games license)", "Rad Action / NinjaKun Ashura no Shou", 0 ) |
1496 | | GAME( 1987, mnight, 0, mnight, mnight, ninjakd2_state, mnight, ROT0, "UPL (Kawakus license)", "Mutant Night", 0 ) |
1497 | | GAME( 1988, arkarea, 0, arkarea, arkarea, ninjakd2_state, mnight, ROT0, "UPL", "Ark Area", 0 ) |
1498 | | GAME( 1988, robokid, 0, robokid, robokid, driver_device, 0, ROT0, "UPL", "Atomic Robo-kid", 0 ) |
1499 | | GAME( 1988, robokidj, robokid, robokid, robokidj, driver_device, 0, ROT0, "UPL", "Atomic Robo-kid (Japan, set 1)", 0 ) |
1500 | | GAME( 1988, robokidj2, robokid, robokid, robokidj, driver_device, 0, ROT0, "UPL", "Atomic Robo-kid (Japan, set 2)", 0 ) |
1501 | | GAME( 1989, omegaf, 0, omegaf, omegaf, driver_device, 0, ROT270, "UPL", "Omega Fighter", 0 ) |
1502 | | GAME( 1989, omegafs, omegaf, omegaf, omegaf, driver_device, 0, ROT270, "UPL", "Omega Fighter Special", 0 ) |
| 1482 | GAME( 1987, mnight, 0, mnight, mnight, ninjakd2_state, mnight, ROT0, "UPL (Kawakus license)", "Mutant Night", 0 ) |
| 1483 | GAME( 1988, arkarea, 0, arkarea, arkarea, ninjakd2_state, mnight, ROT0, "UPL", "Ark Area", 0 ) |
| 1484 | GAME( 1988, robokid, 0, robokid, robokid, driver_device, 0, ROT0, "UPL", "Atomic Robo-kid", 0 ) |
| 1485 | GAME( 1988, robokidj, robokid, robokid, robokidj, driver_device, 0, ROT0, "UPL", "Atomic Robo-kid (Japan, set 1)", 0 ) |
| 1486 | GAME( 1988, robokidj2, robokid, robokid, robokidj, driver_device, 0, ROT0, "UPL", "Atomic Robo-kid (Japan, set 2)", 0 ) |
| 1487 | GAME( 1989, omegaf, 0, omegaf, omegaf, driver_device, 0, ROT270, "UPL", "Omega Fighter", 0 ) |
| 1488 | GAME( 1989, omegafs, omegaf, omegaf, omegaf, driver_device, 0, ROT270, "UPL", "Omega Fighter Special", 0 ) |