trunk/src/mame/drivers/taito.c
| r31815 | r31816 | |
| 13 | 13 | |
| 14 | 14 | Need schematics to do this properly. |
| 15 | 15 | |
| 16 | Status of each game: |
| 17 | - shock, obaoba, drakor, meteort, sureshop, cosmic, vortexp, stest, rally: |
| 18 | Works, with various quality of sounds |
| 19 | - sharkt, snake: |
| 20 | As above, but outhole can randomly stop working |
| 21 | - lunelle: |
| 22 | Works, but play can be interrupted by a large flashing '14' |
| 23 | - ladylukt, vegast, titan, gork: |
| 24 | Works, no sound |
| 25 | - gemini2k, zarza, cavnegro, hawkman, mrblack, sshuttle, fireactd: |
| 26 | Can insert a coin but cannot start a game |
| 27 | - fireact: |
| 28 | Cannot insert a coin |
| 29 | - mrblkz80: |
| 30 | Different hardware, not emulated |
| 16 | 31 | |
| 32 | |
| 17 | 33 | ToDO: |
| 18 | 34 | - Inputs |
| 19 | 35 | - Outputs |
| 20 | 36 | - Sound (need a schematic) |
| 21 | 37 | - Display flickers ingame |
| 22 | | - Votrax makes continual rattling noise |
| 38 | - Votrax makes continual rattling noise and nothing else |
| 23 | 39 | - Some games produce sound, but silence or random sounds often occur, or it just |
| 24 | 40 | cuts out for a while. |
| 25 | 41 | |
| 26 | 42 | *****************************************************************************************/ |
| 27 | 43 | |
| 28 | | #include "emu.h" |
| 44 | #include "machine/genpin.h" |
| 29 | 45 | #include "cpu/i8085/i8085.h" |
| 30 | 46 | #include "cpu/m6800/m6800.h" |
| 31 | 47 | #include "machine/6821pia.h" |
| r31815 | r31816 | |
| 34 | 50 | #include "sound/dac.h" |
| 35 | 51 | #include "taito.lh" |
| 36 | 52 | |
| 37 | | class taito_state : public driver_device |
| 53 | class taito_state : public genpin_class |
| 38 | 54 | { |
| 39 | 55 | public: |
| 40 | 56 | taito_state(const machine_config &mconfig, device_type type, const char *tag) |
| 41 | | : driver_device(mconfig, type, tag) |
| 57 | : genpin_class(mconfig, type, tag) |
| 42 | 58 | , m_maincpu(*this, "maincpu") |
| 43 | 59 | , m_cpu2(*this, "audiocpu") |
| 44 | 60 | , m_pia(*this, "pia") |
| r31815 | r31816 | |
| 108 | 124 | AM_RANGE(0x2000, 0x3fff) AM_ROM AM_REGION("cpu2", 0x2000) |
| 109 | 125 | ADDRESS_MAP_END |
| 110 | 126 | |
| 111 | | static ADDRESS_MAP_START( taito_sub_map3, AS_PROGRAM, 8, taito_state ) |
| 127 | static ADDRESS_MAP_START( taito_sub_map5, AS_PROGRAM, 8, taito_state ) |
| 112 | 128 | ADDRESS_MAP_GLOBAL_MASK(0x7fff) |
| 113 | 129 | AM_RANGE(0x0000, 0x007f) AM_RAM // internal to the cpu |
| 114 | 130 | AM_RANGE(0x0400, 0x0403) AM_DEVREADWRITE("pia", pia6821_device, read, write) |
| 115 | | AM_RANGE(0x5000, 0x7fff) AM_ROM AM_REGION("cpu2", 0x5000) |
| 131 | AM_RANGE(0x1000, 0x1000) AM_DEVWRITE("aysnd_0", ay8910_device, address_w) |
| 132 | AM_RANGE(0x1003, 0x1003) AM_DEVWRITE("aysnd_0", ay8910_device, address_w) |
| 133 | AM_RANGE(0x1007, 0x1007) AM_DEVREAD("aysnd_0", ay8910_device, data_r) |
| 134 | AM_RANGE(0x100c, 0x100c) AM_DEVWRITE("aysnd_1", ay8910_device, address_w) |
| 135 | AM_RANGE(0x100a, 0x100a) AM_DEVWRITE("aysnd_0", ay8910_device, data_w) |
| 136 | AM_RANGE(0x100b, 0x100b) AM_DEVWRITE("aysnd_0", ay8910_device, data_w) |
| 137 | AM_RANGE(0x100d, 0x100d) AM_DEVREAD("aysnd_1", ay8910_device, data_r) |
| 138 | AM_RANGE(0x100e, 0x100e) AM_DEVWRITE("aysnd_1", ay8910_device, data_w) |
| 139 | AM_RANGE(0x2000, 0x7fff) AM_ROM AM_REGION("cpu2", 0x2000) |
| 116 | 140 | ADDRESS_MAP_END |
| 117 | 141 | |
| 118 | 142 | static ADDRESS_MAP_START( shock_map, AS_PROGRAM, 8, taito_state ) |
| r31815 | r31816 | |
| 306 | 330 | MCFG_DEFAULT_LAYOUT(layout_taito) |
| 307 | 331 | |
| 308 | 332 | /* Sound */ |
| 309 | | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 333 | MCFG_FRAGMENT_ADD( genpin_audio ) |
| 334 | |
| 335 | MCFG_SPEAKER_STANDARD_MONO("dacsnd") |
| 310 | 336 | MCFG_DAC_ADD("dac") |
| 311 | | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.95) |
| 337 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "dacsnd", 0.95) |
| 312 | 338 | |
| 313 | 339 | MCFG_DEVICE_ADD("pia", PIA6821, 0) |
| 314 | 340 | //MCFG_PIA_READPA_HANDLER(READ8(taito_state, pia_pa_r)) |
| r31815 | r31816 | |
| 323 | 349 | MCFG_TIMER_DRIVER_ADD_PERIODIC("timer_a", taito_state, timer_a, attotime::from_hz(200)) |
| 324 | 350 | MACHINE_CONFIG_END |
| 325 | 351 | |
| 326 | | static MACHINE_CONFIG_DERIVED( taito2, taito ) |
| 327 | | MCFG_CPU_MODIFY( "audiocpu" ) |
| 328 | | MCFG_CPU_PROGRAM_MAP(taito_sub_map2) |
| 329 | | MACHINE_CONFIG_END |
| 330 | | |
| 331 | | static MACHINE_CONFIG_DERIVED( taito3, taito ) |
| 332 | | MCFG_CPU_MODIFY( "audiocpu" ) |
| 333 | | MCFG_CPU_PROGRAM_MAP(taito_sub_map3) |
| 334 | | MACHINE_CONFIG_END |
| 335 | | |
| 336 | 352 | static MACHINE_CONFIG_DERIVED( shock, taito ) |
| 337 | 353 | MCFG_CPU_MODIFY( "maincpu" ) |
| 338 | 354 | MCFG_CPU_PROGRAM_MAP(shock_map) |
| r31815 | r31816 | |
| 340 | 356 | MCFG_CPU_PROGRAM_MAP(shock_sub_map) |
| 341 | 357 | MACHINE_CONFIG_END |
| 342 | 358 | |
| 359 | static MACHINE_CONFIG_DERIVED( taito2, taito ) |
| 360 | MCFG_CPU_MODIFY( "audiocpu" ) |
| 361 | MCFG_CPU_PROGRAM_MAP(taito_sub_map2) |
| 362 | MACHINE_CONFIG_END |
| 363 | |
| 343 | 364 | // add vox |
| 344 | 365 | static MACHINE_CONFIG_DERIVED( taito4, taito ) |
| 366 | MCFG_SPEAKER_STANDARD_MONO("voxsnd") |
| 345 | 367 | MCFG_DEVICE_ADD("votrax", VOTRAX_SC01, 720000) // guess |
| 346 | 368 | MCFG_VOTRAX_SC01_REQUEST_CB(WRITELINE(taito_state, votrax_request)) |
| 347 | | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) // todo: fix - it makes noise continuously |
| 369 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "voxsnd", 0.15) // todo: fix - it makes noise continuously |
| 348 | 370 | |
| 349 | 371 | MCFG_DEVICE_REMOVE("pia") |
| 350 | 372 | MCFG_DEVICE_ADD("pia", PIA6821, 0) |
| r31815 | r31816 | |
| 358 | 380 | MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("audiocpu", m6802_cpu_device, irq_line)) |
| 359 | 381 | MACHINE_CONFIG_END |
| 360 | 382 | |
| 383 | static MACHINE_CONFIG_FRAGMENT( taito_ay_audio ) |
| 384 | MCFG_CPU_MODIFY( "audiocpu" ) |
| 385 | MCFG_CPU_PROGRAM_MAP(taito_sub_map5) |
| 361 | 386 | |
| 387 | MCFG_SPEAKER_STANDARD_MONO("aysnd") |
| 388 | MCFG_SOUND_ADD("aysnd_0", AY8910, XTAL_3_579545MHz/2) /* guess */ |
| 389 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "aysnd", 0.8) |
| 390 | MCFG_SOUND_ADD("aysnd_1", AY8910, XTAL_3_579545MHz/2) /* guess */ |
| 391 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "aysnd", 0.8) |
| 392 | MACHINE_CONFIG_END |
| 362 | 393 | |
| 394 | // add ay |
| 395 | static MACHINE_CONFIG_DERIVED( taito5, taito ) |
| 396 | MCFG_FRAGMENT_ADD( taito_ay_audio ) |
| 397 | MACHINE_CONFIG_END |
| 363 | 398 | |
| 399 | // add vox and ay |
| 400 | static MACHINE_CONFIG_DERIVED( taito6, taito4 ) |
| 401 | MCFG_FRAGMENT_ADD( taito_ay_audio ) |
| 402 | MACHINE_CONFIG_END |
| 364 | 403 | |
| 404 | |
| 405 | |
| 406 | |
| 365 | 407 | /*-------------------------------- |
| 366 | 408 | / Apache |
| 367 | 409 | /-------------------------------*/ |
| r31815 | r31816 | |
| 510 | 552 | ROM_LOAD( "gork3.bin", 0x1000, 0x0800, CRC(0ea1a2dc) SHA1(3ab58bc25a4512aae5c16f497bddf713413c02fe)) |
| 511 | 553 | ROM_LOAD( "gork4.bin", 0x1800, 0x0800, CRC(0e6260fb) SHA1(b2f7190991d63701210a25a3970293b8f4c34022)) |
| 512 | 554 | |
| 513 | | ROM_REGION(0x4000, "cpu2", 0) |
| 555 | ROM_REGION(0x8000, "cpu2", 0) |
| 514 | 556 | ROM_LOAD("gork_s1.bin", 0x2000, 0x1000, CRC(6611a4cb) SHA1(3ab840b162f9bfe2aebe1d3afeb1fddaf849d9c5)) |
| 515 | 557 | ROM_LOAD("gork_s2.bin", 0x3000, 0x1000, CRC(440739cb) SHA1(6172bf000f854ccf5c24c7700a0ad208596d24f8)) |
| 558 | ROM_RELOAD( 0x7000, 0x1000) |
| 516 | 559 | ROM_END |
| 517 | 560 | |
| 518 | 561 | /*-------------------------------- |
| r31815 | r31816 | |
| 719 | 762 | ROM_LOAD( "snake3.bin", 0x1000, 0x0800, CRC(6f054bc0) SHA1(08ab82131888756e8178b2fe2bbc24fc4f494ef2)) |
| 720 | 763 | ROM_LOAD( "snake4.bin", 0x1800, 0x0800, CRC(ed231064) SHA1(42410dbbef36dea9d0163c65406bc86b35bb0bd7)) |
| 721 | 764 | |
| 722 | | ROM_REGION(0x4000, "cpu2", 0) |
| 765 | ROM_REGION(0x8000, "cpu2", 0) |
| 723 | 766 | ROM_LOAD("snake_s1.bin", 0x2000, 0x1000, CRC(f7c1623c) SHA1(77e79ccc4b074b715008de37332baf76791d471e)) |
| 724 | 767 | ROM_LOAD("snake_s2.bin", 0x3000, 0x1000, CRC(18316d73) SHA1(422a093ff245f0c8f710aeba91acd59666e2398b)) |
| 768 | ROM_RELOAD( 0x7000, 0x1000) |
| 725 | 769 | ROM_END |
| 726 | 770 | |
| 727 | 771 | /*-------------------------------- |
| r31815 | r31816 | |
| 845 | 889 | ROM_LOAD( "voley3.bin", 0x1000, 0x0800, NO_DUMP) |
| 846 | 890 | ROM_LOAD( "voley4.bin", 0x1800, 0x0800, NO_DUMP) |
| 847 | 891 | |
| 848 | | ROM_REGION(0x4000, "cpu2", 0) |
| 892 | ROM_REGION(0x8000, "cpu2", 0) |
| 849 | 893 | ROM_LOAD("voley_s1.bin", 0x2000, 0x1000, CRC(9c825666) SHA1(330ecd9caccb8a1555c5e7302095ae25558c020e)) |
| 850 | 894 | ROM_LOAD("voley_s2.bin", 0x3000, 0x1000, CRC(79a8228c) SHA1(e71d9347a8fc230c70703164ae0e4d44423bbb5d)) |
| 895 | ROM_RELOAD( 0x7000, 0x1000) |
| 851 | 896 | ROM_END |
| 852 | 897 | |
| 853 | 898 | /*-------------------------------- |
| r31815 | r31816 | |
| 921 | 966 | ROM_END |
| 922 | 967 | |
| 923 | 968 | // no sound |
| 924 | | GAME(198?, taitest, 0, taito, taito, taito_state, taito, ROT0, "Taito do Brasil", "Taito Test Fixture", GAME_MECHANICAL | GAME_NO_SOUND_HW ) |
| 969 | GAME(198?, taitest, 0, taito, taito, taito_state, taito, ROT0, "Taito do Brasil", "Taito Test Fixture", GAME_MECHANICAL ) |
| 925 | 970 | |
| 926 | 971 | // dac (sintetizador) |
| 927 | 972 | GAME(1979, shock, 0, shock, taito, taito_state, taito, ROT0, "Taito do Brasil", "Shock", GAME_MECHANICAL | GAME_IMPERFECT_SOUND ) |
| r31815 | r31816 | |
| 954 | 999 | GAME(1982, hawkman1, hawkman, taito4, taito, taito_state, taito, ROT0, "Taito do Brasil", "Hawkman (set 2)", GAME_IS_SKELETON_MECHANICAL) |
| 955 | 1000 | |
| 956 | 1001 | // dac and ay |
| 957 | | GAME(1982, snake, 0, taito2, taito, taito_state, taito, ROT0, "Taito do Brasil", "Snake Machine", GAME_MECHANICAL | GAME_IMPERFECT_SOUND ) |
| 958 | | GAME(198?, voleybal, 0, taito2, taito, taito_state, taito, ROT0, "Taito do Brasil", "Voley Ball", GAME_IS_SKELETON_MECHANICAL) |
| 959 | | GAME(1984, mrblack, 0, taito3, taito, taito_state, taito, ROT0, "Taito do Brasil", "Mr. Black (set 1)", GAME_IS_SKELETON_MECHANICAL) |
| 960 | | GAME(1985, mrblack1, mrblack, taito3, taito, taito_state, taito, ROT0, "Taito do Brasil", "Mr. Black (set 2)", GAME_IS_SKELETON_MECHANICAL) |
| 961 | | GAME(1985, sshuttle, 0, taito3, taito, taito_state, taito, ROT0, "Taito do Brasil", "Space Shuttle (Taito) (set 1)", GAME_IS_SKELETON_MECHANICAL) |
| 962 | | GAME(1985, sshuttle1, sshuttle, taito3, taito, taito_state, taito, ROT0, "Taito do Brasil", "Space Shuttle (Taito) (set 2)", GAME_IS_SKELETON_MECHANICAL) |
| 963 | | GAME(198?, polar, 0, taito3, taito, taito_state, taito, ROT0, "Taito do Brasil", "Polar Explorer", GAME_IS_SKELETON_MECHANICAL) |
| 1002 | GAME(1982, snake, 0, taito5, taito, taito_state, taito, ROT0, "Taito do Brasil", "Snake Machine", GAME_MECHANICAL | GAME_IMPERFECT_SOUND ) |
| 1003 | GAME(198?, voleybal, 0, taito5, taito, taito_state, taito, ROT0, "Taito do Brasil", "Voley Ball", GAME_IS_SKELETON_MECHANICAL) |
| 1004 | GAME(1984, mrblack, 0, taito5, taito, taito_state, taito, ROT0, "Taito do Brasil", "Mr. Black (set 1)", GAME_IS_SKELETON_MECHANICAL) |
| 1005 | GAME(1985, mrblack1, mrblack, taito5, taito, taito_state, taito, ROT0, "Taito do Brasil", "Mr. Black (set 2)", GAME_IS_SKELETON_MECHANICAL) |
| 1006 | GAME(1985, sshuttle, 0, taito5, taito, taito_state, taito, ROT0, "Taito do Brasil", "Space Shuttle (Taito) (set 1)", GAME_IS_SKELETON_MECHANICAL) |
| 1007 | GAME(1985, sshuttle1, sshuttle, taito5, taito, taito_state, taito, ROT0, "Taito do Brasil", "Space Shuttle (Taito) (set 2)", GAME_IS_SKELETON_MECHANICAL) |
| 1008 | GAME(198?, polar, 0, taito5, taito, taito_state, taito, ROT0, "Taito do Brasil", "Polar Explorer", GAME_IS_SKELETON_MECHANICAL) |
| 964 | 1009 | |
| 965 | 1010 | // dac, vox and ay |
| 966 | | GAME(1982, gork, 0, taito2, taito, taito_state, taito, ROT0, "Taito do Brasil", "Gork", GAME_MECHANICAL | GAME_NO_SOUND ) |
| 967 | | GAME(198?, fireactd, 0, taito3, taito, taito_state, taito, ROT0, "Taito do Brasil", "Fire Action Deluxe", GAME_IS_SKELETON_MECHANICAL) |
| 1011 | GAME(1982, gork, 0, taito6, taito, taito_state, taito, ROT0, "Taito do Brasil", "Gork", GAME_MECHANICAL | GAME_NO_SOUND ) |
| 1012 | GAME(198?, fireactd, 0, taito6, taito, taito_state, taito, ROT0, "Taito do Brasil", "Fire Action Deluxe", GAME_IS_SKELETON_MECHANICAL) |
| 968 | 1013 | |
| 969 | 1014 | // different hardware |
| 970 | 1015 | GAME(198?, mrblkz80, mrblack, taito, taito, taito_state, taito, ROT0, "Taito do Brasil", "Mr. Black (Z-80 CPU)", GAME_IS_SKELETON_MECHANICAL) |