trunk/src/emu/cpu/hmcs40/hmcs40.c
| r244980 | r244981 | |
| 459 | 459 | { |
| 460 | 460 | m_icount--; |
| 461 | 461 | push_stack(); |
| 462 | m_ie = 0; |
| 462 | 463 | |
| 463 | 464 | // line 0/1 for external interrupt, let's use 2 for t/c interrupt |
| 464 | 465 | int line = (m_iri) ? m_eint_line : 2; |
| r244980 | r244981 | |
| 466 | 467 | // vector $3f, on page 0(timer/counter), or page 1(external) |
| 467 | 468 | // external interrupt has priority over t/c interrupt |
| 468 | 469 | m_pc = 0x3f | (m_iri ? 0x40 : 0); |
| 469 | | m_iri = m_irt = 0; |
| 470 | | m_ie = 0; |
| 470 | if (m_iri) |
| 471 | m_iri = 0; |
| 472 | else |
| 473 | m_irt = 0; |
| 471 | 474 | |
| 472 | 475 | standard_irq_callback(line); |
| 473 | 476 | } |
| r244980 | r244981 | |
| 554 | 557 | |
| 555 | 558 | // LPU is handled 1 cycle later |
| 556 | 559 | if ((m_prev_op & 0x3e0) == 0x340) |
| 560 | { |
| 561 | if ((m_op & 0x1c0) != 0x1c0) |
| 562 | logerror("%s LPU without BR/CAL at $%04X\n", tag(), m_prev_pc); |
| 563 | |
| 557 | 564 | m_pc = ((m_page << 6) | (m_pc & 0x3f)) & m_pcmask; |
| 565 | } |
| 558 | 566 | |
| 559 | 567 | // check/handle interrupt, but not in the middle of a long jump |
| 560 | 568 | if (m_ie && (m_iri || m_irt) && (m_op & 0x3e0) != 0x340) |
| r244980 | r244981 | |
| 567 | 575 | // fetch next opcode |
| 568 | 576 | debugger_instruction_hook(this, m_pc); |
| 569 | 577 | m_op = m_program->read_word(m_pc << 1) & 0x3ff; |
| 570 | | m_i = BITSWAP8(m_op,7,6,5,4,0,1,2,3) & 0xf; // reversed bit-order for immediate param |
| 578 | m_i = BITSWAP8(m_op,7,6,5,4,0,1,2,3) & 0xf; // reversed bit-order for immediate param (except for XAMR?) |
| 571 | 579 | increment_pc(); |
| 572 | 580 | |
| 573 | | /* |
| 574 | | |
| 575 | | op_ayy(); - |
| 576 | | op_syy(); - |
| 577 | | op_am(); - 34 234 4c |
| 578 | | op_sm()???:- 234 |
| 579 | | op_daa(); - 46 |
| 580 | | op_das(); - 45 |
| 581 | | op_nega(); - |
| 582 | | op_anem(); - 324 124 |
| 583 | | op_bnem(); - 267 024 |
| 584 | | op_alem(); - 324 124 |
| 585 | | op_blem(); - 267 024 |
| 586 | | op_lay(); - 118 |
| 587 | | |
| 588 | | */ |
| 589 | | |
| 590 | 581 | // handle opcode |
| 591 | 582 | switch (m_op) |
| 592 | 583 | { |
| 584 | // unknown: lay, ayy, syy, am, anem, alem, bnem, blem, nega |
| 585 | |
| 593 | 586 | case 0x118: |
| 594 | 587 | op_lay(); // probably lay |
| 595 | 588 | break; |
| 596 | | case 0x267: |
| 597 | | op_blem(); break; // bnem or blem |
| 589 | case 0x034: |
| 590 | op_am(); // probably am |
| 591 | break; |
| 592 | |
| 593 | |
| 598 | 594 | case 0x124: |
| 599 | | op_alem(); // alem or anem |
| 595 | op_illegal(); |
| 596 | //op_alem(); // alem or anem |
| 597 | //op_ayy(); |
| 600 | 598 | break; |
| 601 | 599 | case 0x324: |
| 602 | | op_anem(); break; // " |
| 600 | op_illegal(); |
| 601 | //op_anem(); // " |
| 602 | break; |
| 603 | |
| 603 | 604 | case 0x024: |
| 604 | | //op_nega(); |
| 605 | | //op_am(); |
| 606 | 605 | op_illegal(); |
| 606 | //op_nega(); |
| 607 | 607 | break; |
| 608 | |
| 609 | |
| 610 | |
| 608 | 611 | case 0x234: |
| 609 | | // sm? |
| 610 | | #if 0 |
| 611 | | m_a = ram_r() - m_a; |
| 612 | | m_s = ~m_a >> 4 & 1; |
| 613 | | m_a &= 0xf; |
| 614 | | #else |
| 615 | | op_am(); |
| 616 | | #endif |
| 617 | | break; |
| 618 | | case 0x04c: |
| 619 | 612 | op_illegal(); |
| 620 | | //m_c ^= 1; |
| 621 | | //op_lat(); |
| 613 | //op_nega(); |
| 622 | 614 | break; |
| 623 | 615 | |
| 624 | 616 | |
| 625 | 617 | |
| 626 | 618 | |
| 619 | |
| 620 | |
| 621 | |
| 627 | 622 | /* 0x000 */ |
| 628 | 623 | |
| 629 | 624 | case 0x000: case 0x001: case 0x002: case 0x003: |
| r244980 | r244981 | |
| 638 | 633 | case 0x020: case 0x021: case 0x022: case 0x023: |
| 639 | 634 | op_lbm(); break; |
| 640 | 635 | case 0x030: |
| 641 | | op_amc(); break; |
| 636 | /* ok */ op_amc(); break; |
| 642 | 637 | case 0x03c: |
| 643 | 638 | op_lta(); break; |
| 644 | 639 | |
| 645 | 640 | case 0x040: |
| 646 | 641 | /* ok */ op_lxa(); break; |
| 647 | | case 0x04b: |
| 648 | | op_rec(); break; |
| 642 | case 0x045: |
| 643 | /* ok */ op_das(); break; |
| 644 | case 0x046: |
| 645 | /* ok */ op_daa(); break; |
| 646 | case 0x04c: |
| 647 | /* ok */ op_rec(); break; |
| 649 | 648 | case 0x04f: |
| 650 | | op_sec(); break; |
| 649 | /* ok */ op_sec(); break; |
| 651 | 650 | case 0x050: |
| 652 | 651 | op_lya(); break; |
| 653 | 652 | case 0x054: |
| r244980 | r244981 | |
| 752 | 751 | case 0x225: |
| 753 | 752 | /* ok */ op_rotl(); break; |
| 754 | 753 | case 0x230: |
| 755 | | op_smc(); break; |
| 754 | /* ok */ op_smc(); break; |
| 756 | 755 | case 0x23c: |
| 757 | 756 | op_lat(); break; |
| 758 | 757 | |
| r244980 | r244981 | |
| 766 | 765 | op_dy(); break; |
| 767 | 766 | case 0x260: |
| 768 | 767 | /* ok */ op_lab(); break; |
| 769 | | case 0x264: |
| 768 | case 0x267: |
| 770 | 769 | op_db(); break; |
| 771 | 770 | case 0x270: case 0x271: case 0x272: case 0x273: case 0x274: case 0x275: case 0x276: case 0x277: |
| 772 | 771 | case 0x278: case 0x279: case 0x27a: case 0x27b: case 0x27c: case 0x27d: case 0x27e: case 0x27f: |
trunk/src/emu/cpu/hmcs40/hmcs40d.c
| r244980 | r244981 | |
| 96 | 96 | mLBM, mLBM, mLBM, mLBM, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, |
| 97 | 97 | mAMC, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mLTA, mILL, mILL, mILL, |
| 98 | 98 | /* 0x040 */ |
| 99 | | mLXA, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mREC, mILL, mILL, mILL, mSEC, |
| 99 | mLXA, mILL, mILL, mILL, mILL, mDAS, mDAA, mILL, mILL, mILL, mILL, mILL, mREC, mILL, mILL, mSEC, |
| 100 | 100 | mLYA, mILL, mILL, mILL, mIY, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, |
| 101 | 101 | mLBA, mILL, mILL, mILL, mIB, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, |
| 102 | 102 | mLAI, mLAI, mLAI, mLAI, mLAI, mLAI, mLAI, mLAI, mLAI, mLAI, mLAI, mLAI, mLAI, mLAI, mLAI, mLAI, |
| r244980 | r244981 | |
| 142 | 142 | /* 0x240 */ |
| 143 | 143 | mLASPX, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mTC, |
| 144 | 144 | mLASPY, mILL, mILL, mILL, mDY, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, |
| 145 | | mLAB, mILL, mILL, mILL, mDB, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, |
| 145 | mLAB, mILL, mILL, mILL, mILL, mILL, mILL, mDB, mILL, mILL, mILL, mILL, mILL, mILL, mILL, mILL, |
| 146 | 146 | mALEI, mALEI, mALEI, mALEI, mALEI, mALEI, mALEI, mALEI, mALEI, mALEI, mALEI, mALEI, mALEI, mALEI, mALEI, mALEI, |
| 147 | 147 | /* 0x280 */ |
| 148 | 148 | mYNEI, mYNEI, mYNEI, mYNEI, mYNEI, mYNEI, mYNEI, mYNEI, mYNEI, mYNEI, mYNEI, mYNEI, mYNEI, mYNEI, mYNEI, mYNEI, |
trunk/src/mame/drivers/cps1.c
| r244980 | r244981 | |
| 9352 | 9352 | ROM_LOAD( "ioc1.ic1", 0x0000, 0x0117, CRC(0d182081) SHA1(475b3d417785da4bc512cce2b274bb00d4cc6792) ) |
| 9353 | 9353 | ROM_END |
| 9354 | 9354 | |
| 9355 | /* B-Board 91634B-2 - all roms have 91634B on the labels */ |
| 9356 | ROM_START( cworld2jb ) |
| 9357 | ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ |
| 9358 | ROM_LOAD16_WORD_SWAP( "q5 - 23_91634b.8f", 0x00000, 0x80000, CRC(709f577f) SHA1(3e0615d01f22eb1bf75cbd26dc80ca5a6d08120e) ) |
| 9359 | ROM_LOAD16_WORD_SWAP( "q5 - 22_91634b.7f", 0x80000, 0x80000, CRC(93248458) SHA1(9dcdc6838f52efc9a0a6333fd0d734946db12dbd) ) |
| 9360 | |
| 9361 | ROM_REGION( 0x200000, "gfx", 0 ) |
| 9362 | ROMX_LOAD( "q5 - 01_91634b.3a", 0x000000, 0x80000, CRC(09d0e7ce) SHA1(ea502b975986222acce82ce8396348af72e1df72) , ROM_GROUPWORD | ROM_SKIP(6) ) |
| 9363 | ROMX_LOAD( "q5 - 02_91634b.4a", 0x000002, 0x80000, CRC(22e4ce9a) SHA1(9e49aec8e1d6d15a68da63e69765b82fd53a9562) , ROM_GROUPWORD | ROM_SKIP(6) ) |
| 9364 | ROMX_LOAD( "q5 - 03_91634b.5a", 0x000004, 0x80000, CRC(f7b3aed6) SHA1(bdfb4d5988307b07ad878ac9129954d14da8769b) , ROM_GROUPWORD | ROM_SKIP(6) ) |
| 9365 | ROMX_LOAD( "q5 - 04_91634b.6a", 0x000006, 0x80000, CRC(520c6c88) SHA1(19ba8ca3d75aae71cdf471e6307e86a5df8a2851) , ROM_GROUPWORD | ROM_SKIP(6) ) |
| 9366 | |
| 9367 | ROM_REGION( 0x18000, "audiocpu", 0 ) /* 64k for the audio CPU (+banks) */ |
| 9368 | ROM_LOAD( "q5 - 09_91634b.12a", 0x00000, 0x08000, CRC(e14dc524) SHA1(0020a9002572002458fbfe45e8a959cb90de3f03) ) |
| 9369 | ROM_CONTINUE( 0x10000, 0x08000 ) |
| 9370 | |
| 9371 | ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ |
| 9372 | ROM_LOAD( "q5 - 18_91634b.11c", 0x00000, 0x20000, CRC(d10c1b68) SHA1(2423241f3340d8ab1b6bf9514ca8c3bba1273873) ) |
| 9373 | ROM_LOAD( "q5 - 19_91634b.12c", 0x20000, 0x20000, CRC(7d17e496) SHA1(a274b94ec4f042dddc239ecb9ac2e1e2375f5eb2) ) |
| 9374 | |
| 9375 | ROM_REGION( 0x0200, "aboardplds", 0 ) |
| 9376 | ROM_LOAD( "buf1", 0x0000, 0x0117, CRC(eb122de7) SHA1(b26b5bfe258e3e184f069719f9fd008d6b8f6b9b) ) |
| 9377 | ROM_LOAD( "ioa1", 0x0000, 0x0117, CRC(59c7ee3b) SHA1(fbb887c5b4f5cb8df77cec710eaac2985bc482a6) ) |
| 9378 | ROM_LOAD( "prg1", 0x0000, 0x0117, CRC(f1129744) SHA1(a5300f301c1a08a7da768f0773fa0fe3f683b237) ) |
| 9379 | ROM_LOAD( "rom1", 0x0000, 0x0117, CRC(41dc73b9) SHA1(7d4c9f1693c821fbf84e32dd6ef62ddf14967845) ) |
| 9380 | ROM_LOAD( "sou1", 0x0000, 0x0117, CRC(84f4b2fe) SHA1(dcc9e86cc36316fe42eace02d6df75d08bc8bb6d) ) |
| 9381 | |
| 9382 | ROM_REGION( 0x0200, "bboardplds", 0 ) |
| 9383 | ROM_LOAD( "q563b.1a", 0x0000, 0x0117, NO_DUMP ) |
| 9384 | ROM_LOAD( "iob1.12d", 0x0000, 0x0117, CRC(3abc0700) SHA1(973043aa46ec6d5d1db20dc9d5937005a0f9f6ae) ) |
| 9385 | ROM_LOAD( "bprg1.11d", 0x0000, 0x0117, CRC(31793da7) SHA1(400fa7ac517421c978c1ee7773c30b9ed0c5d3f3) ) |
| 9386 | |
| 9387 | ROM_REGION( 0x0200, "cboardplds", 0 ) // checkme |
| 9388 | ROM_LOAD( "ioc1.ic7", 0x0000, 0x0117, CRC(0d182081) SHA1(475b3d417785da4bc512cce2b274bb00d4cc6792) ) |
| 9389 | ROM_LOAD( "c632.ic1", 0x0000, 0x0117, CRC(0fbd9270) SHA1(d7e737b20c44d41e29ca94be56114b31934dde81) ) |
| 9390 | ROM_END |
| 9391 | |
| 9355 | 9392 | /* B-Board 89624B-3 */ |
| 9356 | 9393 | ROM_START( varth ) |
| 9357 | 9394 | ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ |
| r244980 | r244981 | |
| 11718 | 11755 | GAME( 1992, sf2dongb, sf2ce, cps1_12MHz, sf2, cps_state, sf2dongb, ROT0, "bootleg", "Street Fighter II': Champion Edition (Dongfang Bubai protection, bootleg)", GAME_SUPPORTS_SAVE ) // 920313 - based on World version |
| 11719 | 11756 | GAME( 1992, cworld2j, 0, cps1_12MHz, cworld2j, cps_state, cps1, ROT0, "Capcom", "Adventure Quiz Capcom World 2 (Japan 920611)", GAME_SUPPORTS_SAVE ) |
| 11720 | 11757 | GAME( 1992, cworld2ja, cworld2j, cps1_12MHz, cworld2j, cps_state, cps1, ROT0, "Capcom", "Adventure Quiz Capcom World 2 (Japan 920611, B-Board 90629B-3, no battery)", GAME_SUPPORTS_SAVE ) |
| 11758 | GAME( 1992, cworld2jb, cworld2j, cps1_12MHz, cworld2j, cps_state, cps1, ROT0, "Capcom", "Adventure Quiz Capcom World 2 (Japan 920611, B-Board 91634B-2)", GAME_SUPPORTS_SAVE ) |
| 11721 | 11759 | GAME( 1992, varth, 0, cps1_12MHz, varth, cps_state, cps1, ROT270, "Capcom", "Varth: Operation Thunderstorm (World 920714)", GAME_SUPPORTS_SAVE ) // "ETC" // 12MHz verified |
| 11722 | 11760 | GAME( 1992, varthr1, varth, cps1_12MHz, varth, cps_state, cps1, ROT270, "Capcom", "Varth: Operation Thunderstorm (World 920612)", GAME_SUPPORTS_SAVE ) // "ETC" |
| 11723 | 11761 | GAME( 1992, varthu, varth, cps1_12MHz, varth, cps_state, cps1, ROT270, "Capcom (Romstar license)", "Varth: Operation Thunderstorm (USA 920612)", GAME_SUPPORTS_SAVE ) |
trunk/src/mame/drivers/psikyo.c
| r244980 | r244981 | |
| 1406 | 1406 | |
| 1407 | 1407 | ROM_END |
| 1408 | 1408 | |
| 1409 | |
| 1410 | ROM_START( btlkroadk ) |
| 1411 | |
| 1412 | ROM_REGION( 0x100000, "maincpu", 0 ) /* Main CPU Code */ |
| 1413 | ROM_LOAD32_WORD_SWAP( "4(dot).u46", 0x000000, 0x040000, CRC(e724d429) SHA1(8b5f80366fd22d6f7e7d8a9623de4fe231303267) ) // 1&0 |
| 1414 | ROM_LOAD32_WORD_SWAP( "5(dot).u39", 0x000002, 0x040000, CRC(c0d65765) SHA1(a6a26e6b9693a2ef245e9aaa4c9daa888aebb360)) // 3&2 |
| 1415 | |
| 1416 | ROM_REGION( 0x020000, "audiocpu", 0 ) /* Sound CPU Code */ |
| 1417 | ROM_LOAD( "3(k).u71", 0x00000, 0x20000, CRC(e0f0c597) SHA1(cc337633f1f579baf0f8ba1dd65c5d51122a7e97) ) |
| 1418 | |
| 1419 | ROM_REGION( 0x700000, "gfx1", 0 ) /* Sprites */ |
| 1420 | ROM_LOAD( "u14.bin", 0x000000, 0x200000, CRC(282d89c3) SHA1(3b4b17f4a37efa2f7e232488aaba7c77d10c84d2) ) |
| 1421 | ROM_LOAD( "u24.bin", 0x200000, 0x200000, CRC(bbe9d3d1) SHA1(9da0b0b993e8271a8119e9c2f602e52325983f79) ) |
| 1422 | ROM_LOAD( "u15.bin", 0x400000, 0x200000, CRC(d4d1b07c) SHA1(232109db8f6e137fbc8826f38a96057067cb19dc) ) |
| 1423 | // ROM_LOAD( "u25.bin", 0x600000, 0x100000 NOT PRESENT |
| 1424 | |
| 1425 | ROM_REGION( 0x200000, "gfx2", 0 ) /* Layers 0 + 1 */ |
| 1426 | ROM_LOAD( "u33.bin", 0x000000, 0x200000, CRC(4c8577f1) SHA1(d27043514632954a06667ac63f4a4e4a31870511) ) |
| 1427 | |
| 1428 | ROM_REGION( 0x100000, "ymsnd", 0 ) /* ADPCM Samples */ |
| 1429 | ROM_LOAD( "u56.bin", 0x000000, 0x100000, CRC(51d73682) SHA1(562038d08e9a4389ffa39f3a659b2a29b94dc156) ) |
| 1430 | |
| 1431 | ROM_REGION( 0x080000, "ymsnd.deltat", 0 ) /* DELTA-T Samples */ |
| 1432 | ROM_LOAD( "u64.bin", 0x000000, 0x080000, CRC(0f33049f) SHA1(ca4fd5f3906685ace1af40b75f5678231d7324e8) ) |
| 1433 | |
| 1434 | ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprites LUT */ |
| 1435 | ROM_LOAD( "u3.bin", 0x000000, 0x040000, CRC(30d541ed) SHA1(6f7fb5f5ecbce7c086185392de164ebb6887e780) ) |
| 1436 | |
| 1437 | ROM_REGION( 0x0400, "plds", 0 ) |
| 1438 | ROM_LOAD( "tibpal16l8.u69", 0x0000, 0x0104, NO_DUMP ) /* PAL is read protected */ |
| 1439 | ROM_LOAD( "tibpal16l8.u19", 0x0200, 0x0104, NO_DUMP ) /* PAL is read protected */ |
| 1440 | |
| 1441 | ROM_END |
| 1442 | |
| 1409 | 1443 | /*************************************************************************** |
| 1410 | 1444 | |
| 1411 | 1445 | Strikers 1945 (Japan, unprotected) |
| r244980 | r244981 | |
| 1956 | 1990 | |
| 1957 | 1991 | ***************************************************************************/ |
| 1958 | 1992 | |
| 1959 | | /* Working Games */ |
| 1960 | 1993 | GAME( 1993, samuraia, 0, sngkace, samuraia, psikyo_state, sngkace, ROT270, "Psikyo", "Samurai Aces (World)", GAME_SUPPORTS_SAVE ) // Banpresto? |
| 1961 | 1994 | GAME( 1993, sngkace, samuraia, sngkace, sngkace, psikyo_state, sngkace, ROT270, "Psikyo", "Sengoku Ace (Japan)", GAME_SUPPORTS_SAVE ) // Banpresto? |
| 1995 | |
| 1962 | 1996 | GAME( 1994, gunbird, 0, gunbird, gunbird, psikyo_state, gunbird, ROT270, "Psikyo", "Gunbird (World)", GAME_SUPPORTS_SAVE ) |
| 1963 | 1997 | GAME( 1994, gunbirdk, gunbird, gunbird, gunbirdj, psikyo_state, gunbird, ROT270, "Psikyo", "Gunbird (Korea)", GAME_SUPPORTS_SAVE ) |
| 1964 | 1998 | GAME( 1994, gunbirdj, gunbird, gunbird, gunbirdj, psikyo_state, gunbird, ROT270, "Psikyo", "Gunbird (Japan)", GAME_SUPPORTS_SAVE ) |
| 1999 | |
| 1965 | 2000 | GAME( 1994, btlkroad, 0, gunbird, btlkroad, psikyo_state, gunbird, ROT0, "Psikyo", "Battle K-Road", GAME_SUPPORTS_SAVE ) |
| 2001 | GAME( 1994, btlkroadk, btlkroad,gunbird, btlkroad, psikyo_state, gunbird, ROT0, "Psikyo", "Battle K-Road (Korean PCB)", GAME_SUPPORTS_SAVE ) // game code is still multi-region, but sound rom appears to be Korea specific at least |
| 2002 | |
| 1966 | 2003 | GAME( 1995, s1945, 0, s1945, s1945, psikyo_state, s1945, ROT270, "Psikyo", "Strikers 1945 (World)", GAME_SUPPORTS_SAVE ) |
| 1967 | 2004 | GAME( 1995, s1945a, s1945, s1945, s1945a, psikyo_state, s1945a, ROT270, "Psikyo", "Strikers 1945 (Japan / World)", GAME_SUPPORTS_SAVE ) // Region dip - 0x0f=Japan, anything else=World |
| 1968 | 2005 | GAME( 1995, s1945j, s1945, s1945, s1945j, psikyo_state, s1945j, ROT270, "Psikyo", "Strikers 1945 (Japan)", GAME_SUPPORTS_SAVE ) |
| 1969 | 2006 | GAME( 1995, s1945jn, s1945, gunbird, s1945j, psikyo_state, s1945jn, ROT270, "Psikyo", "Strikers 1945 (Japan, unprotected)", GAME_SUPPORTS_SAVE ) |
| 1970 | 2007 | GAME( 1995, s1945k, s1945, s1945, s1945j, psikyo_state, s1945, ROT270, "Psikyo", "Strikers 1945 (Korea)", GAME_SUPPORTS_SAVE ) |
| 1971 | 2008 | GAME( 1995, s1945bl, s1945, s1945bl, s1945bl, psikyo_state, s1945bl, ROT270, "bootleg","Strikers 1945 (Hong Kong, bootleg)", GAME_SUPPORTS_SAVE ) |
| 2009 | |
| 1972 | 2010 | GAME( 1996, tengai, 0, s1945, tengai, psikyo_state, tengai, ROT0, "Psikyo", "Tengai (World)", GAME_SUPPORTS_SAVE ) |
| 1973 | 2011 | GAME( 1996, tengaij, tengai, s1945, tengaij, psikyo_state, tengai, ROT0, "Psikyo", "Sengoku Blade: Sengoku Ace Episode II / Tengai", GAME_SUPPORTS_SAVE ) // Region dip - 0x0f=Japan, anything else=World |
trunk/src/mame/drivers/supdrapo.c
| r244980 | r244981 | |
| 27 | 27 | |
| 28 | 28 | - Reworked inputs to match the standard poker inputs names/layout. |
| 29 | 29 | - Hooked the payout switch. |
| 30 | | - Hooked a watchdog circuitery, that seems intended to reset |
| 30 | - Hooked a watchdog circuitry, that seems intended to reset |
| 31 | 31 | the game and/or an external device. |
| 32 | 32 | - Added machine start & reset. |
| 33 | 33 | - All clocks pre defined. |
| 34 | | - Added ay8910 interfase as a preliminary attempt to analyze the unknown |
| 34 | - Added ay8910 interface as a preliminary attempt to analyze the unknown |
| 35 | 35 | port writes when these ports are set as input. |
| 36 | 36 | - Figured out the following DIP switches: |
| 37 | 37 | Auto Bet (No, Yes). |
| r244980 | r244981 | |
| 72 | 72 | public: |
| 73 | 73 | supdrapo_state(const machine_config &mconfig, device_type type, const char *tag) |
| 74 | 74 | : driver_device(mconfig, type, tag), |
| 75 | m_maincpu(*this, "maincpu"), |
| 76 | m_gfxdecode(*this, "gfxdecode"), |
| 77 | m_palette(*this, "palette"), |
| 75 | 78 | m_col_line(*this, "col_line"), |
| 76 | 79 | m_videoram(*this, "videoram"), |
| 77 | | m_char_bank(*this, "char_bank"), |
| 78 | | m_maincpu(*this, "maincpu"), |
| 79 | | m_gfxdecode(*this, "gfxdecode"), |
| 80 | | m_palette(*this, "palette") { } |
| 80 | m_char_bank(*this, "char_bank") { } |
| 81 | 81 | |
| 82 | required_device<cpu_device> m_maincpu; |
| 83 | required_device<gfxdecode_device> m_gfxdecode; |
| 84 | required_device<palette_device> m_palette; |
| 85 | |
| 82 | 86 | required_shared_ptr<UINT8> m_col_line; |
| 83 | 87 | required_shared_ptr<UINT8> m_videoram; |
| 84 | 88 | required_shared_ptr<UINT8> m_char_bank; |
| 89 | |
| 85 | 90 | UINT8 m_wdog; |
| 86 | | DECLARE_READ8_MEMBER(sdpoker_rng_r); |
| 91 | |
| 92 | DECLARE_READ8_MEMBER(rng_r); |
| 87 | 93 | DECLARE_WRITE8_MEMBER(wdog8000_w); |
| 88 | 94 | DECLARE_WRITE8_MEMBER(debug8004_w); |
| 89 | 95 | DECLARE_WRITE8_MEMBER(debug7c00_w); |
| r244980 | r244981 | |
| 91 | 97 | DECLARE_WRITE8_MEMBER(payout_w); |
| 92 | 98 | DECLARE_WRITE8_MEMBER(ay8910_outputa_w); |
| 93 | 99 | DECLARE_WRITE8_MEMBER(ay8910_outputb_w); |
| 100 | |
| 94 | 101 | virtual void machine_start(); |
| 95 | 102 | virtual void machine_reset(); |
| 96 | 103 | virtual void video_start(); |
| 97 | 104 | DECLARE_PALETTE_INIT(supdrapo); |
| 98 | | UINT32 screen_update_supdrapo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 99 | | required_device<cpu_device> m_maincpu; |
| 100 | | required_device<gfxdecode_device> m_gfxdecode; |
| 101 | | required_device<palette_device> m_palette; |
| 105 | |
| 106 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 102 | 107 | }; |
| 103 | 108 | |
| 104 | 109 | |
| r244980 | r244981 | |
| 111 | 116 | } |
| 112 | 117 | |
| 113 | 118 | |
| 114 | | UINT32 supdrapo_state::screen_update_supdrapo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 119 | UINT32 supdrapo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 115 | 120 | { |
| 116 | 121 | int x, y; |
| 117 | 122 | int count; |
| r244980 | r244981 | |
| 171 | 176 | R/W Handlers |
| 172 | 177 | **********************************************************************/ |
| 173 | 178 | |
| 174 | | READ8_MEMBER(supdrapo_state::sdpoker_rng_r) |
| 179 | READ8_MEMBER(supdrapo_state::rng_r) |
| 175 | 180 | { |
| 176 | 181 | return machine().rand(); |
| 177 | 182 | } |
| r244980 | r244981 | |
| 251 | 256 | |
| 252 | 257 | void supdrapo_state::machine_start() |
| 253 | 258 | { |
| 259 | save_item(NAME(m_wdog)); |
| 254 | 260 | } |
| 255 | 261 | |
| 256 | 262 | |
| r244980 | r244981 | |
| 282 | 288 | AM_RANGE(0x8005, 0x8005) AM_READ_PORT("SW1") |
| 283 | 289 | AM_RANGE(0x8006, 0x8006) AM_READ_PORT("SW2") |
| 284 | 290 | AM_RANGE(0x9000, 0x90ff) AM_RAM AM_SHARE("nvram") |
| 285 | | AM_RANGE(0x9400, 0x9400) AM_READ(sdpoker_rng_r) |
| 291 | AM_RANGE(0x9400, 0x9400) AM_READ(rng_r) |
| 286 | 292 | AM_RANGE(0x9800, 0x9801) AM_DEVWRITE("aysnd", ay8910_device, data_address_w) |
| 287 | 293 | ADDRESS_MAP_END |
| 288 | 294 | |
| r244980 | r244981 | |
| 453 | 459 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 454 | 460 | MCFG_SCREEN_SIZE(256, 256) |
| 455 | 461 | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) |
| 456 | | MCFG_SCREEN_UPDATE_DRIVER(supdrapo_state, screen_update_supdrapo) |
| 462 | MCFG_SCREEN_UPDATE_DRIVER(supdrapo_state, screen_update) |
| 457 | 463 | MCFG_SCREEN_PALETTE("palette") |
| 458 | 464 | |
| 459 | 465 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", supdrapo) |
| r244980 | r244981 | |
| 600 | 606 | **********************************************************************/ |
| 601 | 607 | |
| 602 | 608 | /* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS... */ |
| 603 | | GAME( 1983, supdrapo, 0, supdrapo, supdrapo, driver_device, 0, ROT90, "Valadon Automation (Stern Electronics license)", "Super Draw Poker (set 1)", 0 ) |
| 604 | | GAME( 1983, supdrapoa, supdrapo, supdrapo, supdrapo, driver_device, 0, ROT90, "Valadon Automation / Jeutel", "Super Draw Poker (set 2)", 0 ) |
| 605 | | GAME( 1983, supdrapob, supdrapo, supdrapo, supdrapo, driver_device, 0, ROT90, "bootleg", "Super Draw Poker (bootleg)", 0 ) |
| 609 | GAME( 1983, supdrapo, 0, supdrapo, supdrapo, driver_device, 0, ROT90, "Valadon Automation (Stern Electronics license)", "Super Draw Poker (set 1)", GAME_SUPPORTS_SAVE ) |
| 610 | GAME( 1983, supdrapoa, supdrapo, supdrapo, supdrapo, driver_device, 0, ROT90, "Valadon Automation / Jeutel", "Super Draw Poker (set 2)", GAME_SUPPORTS_SAVE ) |
| 611 | GAME( 1983, supdrapob, supdrapo, supdrapo, supdrapo, driver_device, 0, ROT90, "bootleg", "Super Draw Poker (bootleg)", GAME_SUPPORTS_SAVE ) |
trunk/src/mame/drivers/suprgolf.c
| r244980 | r244981 | |
| 33 | 33 | public: |
| 34 | 34 | suprgolf_state(const machine_config &mconfig, device_type type, const char *tag) |
| 35 | 35 | : driver_device(mconfig, type, tag), |
| 36 | | m_videoram(*this, "videoram"), |
| 37 | 36 | m_maincpu(*this, "maincpu"), |
| 38 | 37 | m_msm(*this, "msm"), |
| 39 | 38 | m_gfxdecode(*this, "gfxdecode"), |
| 40 | | m_palette(*this, "palette") { } |
| 39 | m_palette(*this, "palette"), |
| 40 | m_videoram(*this, "videoram") { } |
| 41 | 41 | |
| 42 | required_device<cpu_device> m_maincpu; |
| 43 | required_device<msm5205_device> m_msm; |
| 44 | required_device<gfxdecode_device> m_gfxdecode; |
| 45 | required_device<palette_device> m_palette; |
| 46 | |
| 47 | required_shared_ptr<UINT8> m_videoram; |
| 48 | |
| 42 | 49 | tilemap_t *m_tilemap; |
| 43 | | required_shared_ptr<UINT8> m_videoram; |
| 44 | 50 | UINT8 *m_paletteram; |
| 45 | 51 | UINT8 *m_bg_vram; |
| 46 | 52 | UINT16 *m_bg_fb; |
| r244980 | r244981 | |
| 54 | 60 | UINT8 m_palette_switch; |
| 55 | 61 | UINT8 m_bg_vreg_test; |
| 56 | 62 | UINT8 m_toggle; |
| 57 | | DECLARE_READ8_MEMBER(suprgolf_videoram_r); |
| 58 | | DECLARE_WRITE8_MEMBER(suprgolf_videoram_w); |
| 59 | | DECLARE_READ8_MEMBER(suprgolf_bg_vram_r); |
| 60 | | DECLARE_WRITE8_MEMBER(suprgolf_bg_vram_w); |
| 61 | | DECLARE_WRITE8_MEMBER(suprgolf_pen_w); |
| 63 | |
| 64 | DECLARE_READ8_MEMBER(videoram_r); |
| 65 | DECLARE_WRITE8_MEMBER(videoram_w); |
| 66 | DECLARE_READ8_MEMBER(bg_vram_r); |
| 67 | DECLARE_WRITE8_MEMBER(bg_vram_w); |
| 68 | DECLARE_WRITE8_MEMBER(pen_w); |
| 62 | 69 | DECLARE_WRITE8_MEMBER(adpcm_data_w); |
| 63 | 70 | DECLARE_WRITE8_MEMBER(rom2_bank_select_w); |
| 64 | | DECLARE_READ8_MEMBER(suprgolf_vregs_r); |
| 65 | | DECLARE_WRITE8_MEMBER(suprgolf_vregs_w); |
| 71 | DECLARE_READ8_MEMBER(vregs_r); |
| 72 | DECLARE_WRITE8_MEMBER(vregs_w); |
| 66 | 73 | DECLARE_READ8_MEMBER(rom_bank_select_r); |
| 67 | 74 | DECLARE_WRITE8_MEMBER(rom_bank_select_w); |
| 68 | 75 | DECLARE_READ8_MEMBER(pedal_extra_bits_r); |
| 69 | 76 | DECLARE_READ8_MEMBER(p1_r); |
| 70 | 77 | DECLARE_READ8_MEMBER(p2_r); |
| 71 | | DECLARE_WRITE8_MEMBER(suprgolf_writeA); |
| 72 | | DECLARE_WRITE8_MEMBER(suprgolf_writeB); |
| 78 | DECLARE_WRITE8_MEMBER(writeA); |
| 79 | DECLARE_WRITE8_MEMBER(writeB); |
| 80 | DECLARE_WRITE_LINE_MEMBER(adpcm_int); |
| 81 | |
| 82 | TILE_GET_INFO_MEMBER(get_tile_info); |
| 83 | |
| 73 | 84 | DECLARE_DRIVER_INIT(suprgolf); |
| 74 | | TILE_GET_INFO_MEMBER(get_tile_info); |
| 75 | 85 | virtual void machine_start(); |
| 76 | 86 | virtual void machine_reset(); |
| 77 | 87 | virtual void video_start(); |
| 78 | | UINT32 screen_update_suprgolf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 79 | | DECLARE_WRITE_LINE_MEMBER(irqhandler); |
| 80 | | DECLARE_WRITE_LINE_MEMBER(adpcm_int); |
| 81 | | required_device<cpu_device> m_maincpu; |
| 82 | | required_device<msm5205_device> m_msm; |
| 83 | | required_device<gfxdecode_device> m_gfxdecode; |
| 84 | | required_device<palette_device> m_palette; |
| 88 | |
| 89 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 85 | 90 | }; |
| 86 | 91 | |
| 87 | 92 | TILE_GET_INFO_MEMBER(suprgolf_state::get_tile_info) |
| r244980 | r244981 | |
| 104 | 109 | m_fg_fb = auto_alloc_array(machine(), UINT16, 0x2000*0x20); |
| 105 | 110 | |
| 106 | 111 | m_tilemap->set_transparent_pen(15); |
| 112 | |
| 113 | save_item(NAME(m_bg_bank)); |
| 114 | save_item(NAME(m_vreg_bank)); |
| 115 | save_item(NAME(m_vreg_pen)); |
| 116 | save_item(NAME(m_palette_switch)); |
| 117 | save_item(NAME(m_bg_vreg_test)); |
| 118 | save_pointer(NAME(m_paletteram), 0x1000); |
| 119 | save_pointer(NAME(m_bg_vram), 0x2000*0x20); |
| 120 | save_pointer(NAME(m_bg_fb), 0x2000*0x20); |
| 121 | save_pointer(NAME(m_fg_fb), 0x2000*0x20); |
| 107 | 122 | } |
| 108 | 123 | |
| 109 | | UINT32 suprgolf_state::screen_update_suprgolf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 124 | UINT32 suprgolf_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 110 | 125 | { |
| 111 | 126 | int x,y,count,color; |
| 112 | 127 | bitmap.fill(m_palette->black_pen(), cliprect); |
| r244980 | r244981 | |
| 150 | 165 | return 0; |
| 151 | 166 | } |
| 152 | 167 | |
| 153 | | READ8_MEMBER(suprgolf_state::suprgolf_videoram_r) |
| 168 | READ8_MEMBER(suprgolf_state::videoram_r) |
| 154 | 169 | { |
| 155 | 170 | if (m_palette_switch) |
| 156 | 171 | return m_paletteram[offset]; |
| r244980 | r244981 | |
| 158 | 173 | return m_videoram[offset]; |
| 159 | 174 | } |
| 160 | 175 | |
| 161 | | WRITE8_MEMBER(suprgolf_state::suprgolf_videoram_w) |
| 176 | WRITE8_MEMBER(suprgolf_state::videoram_w) |
| 162 | 177 | { |
| 163 | 178 | if(m_palette_switch) |
| 164 | 179 | { |
| r244980 | r244981 | |
| 180 | 195 | } |
| 181 | 196 | } |
| 182 | 197 | |
| 183 | | READ8_MEMBER(suprgolf_state::suprgolf_vregs_r) |
| 198 | READ8_MEMBER(suprgolf_state::vregs_r) |
| 184 | 199 | { |
| 185 | 200 | return m_vreg_bank; |
| 186 | 201 | } |
| 187 | 202 | |
| 188 | | WRITE8_MEMBER(suprgolf_state::suprgolf_vregs_w) |
| 203 | WRITE8_MEMBER(suprgolf_state::vregs_w) |
| 189 | 204 | { |
| 190 | 205 | //printf("%02x\n",data); |
| 191 | 206 | |
| r244980 | r244981 | |
| 200 | 215 | // printf("Video regs with data %02x activated\n",data); |
| 201 | 216 | } |
| 202 | 217 | |
| 203 | | READ8_MEMBER(suprgolf_state::suprgolf_bg_vram_r) |
| 218 | READ8_MEMBER(suprgolf_state::bg_vram_r) |
| 204 | 219 | { |
| 205 | 220 | return m_bg_vram[offset+m_bg_bank*0x2000]; |
| 206 | 221 | } |
| 207 | 222 | |
| 208 | | WRITE8_MEMBER(suprgolf_state::suprgolf_bg_vram_w) |
| 223 | WRITE8_MEMBER(suprgolf_state::bg_vram_w) |
| 209 | 224 | { |
| 210 | 225 | UINT8 hi_nibble,lo_nibble; |
| 211 | 226 | UINT8 hi_dirty_dot,lo_dirty_dot; // helpers |
| r244980 | r244981 | |
| 254 | 269 | { |
| 255 | 270 | membank("bank1")->configure_entries(0, 16, memregion("user2")->base(), 0x4000); |
| 256 | 271 | membank("bank2")->configure_entries(0, 64, memregion("user1")->base(), 0x4000); |
| 272 | |
| 273 | save_item(NAME(m_rom_bank)); |
| 274 | save_item(NAME(m_msm5205next)); |
| 275 | save_item(NAME(m_msm_nmi_mask)); |
| 276 | save_item(NAME(m_toggle)); |
| 257 | 277 | } |
| 258 | 278 | |
| 259 | | WRITE8_MEMBER(suprgolf_state::suprgolf_pen_w) |
| 279 | WRITE8_MEMBER(suprgolf_state::pen_w) |
| 260 | 280 | { |
| 261 | 281 | m_vreg_pen = data; |
| 262 | 282 | } |
| r244980 | r244981 | |
| 317 | 337 | AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") |
| 318 | 338 | AM_RANGE(0x4000, 0x4000) AM_WRITE(rom2_bank_select_w ) |
| 319 | 339 | AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2") |
| 320 | | AM_RANGE(0xc000, 0xdfff) AM_READWRITE(suprgolf_bg_vram_r, suprgolf_bg_vram_w ) // banked background vram |
| 321 | | AM_RANGE(0xe000, 0xefff) AM_READWRITE(suprgolf_videoram_r, suprgolf_videoram_w ) AM_SHARE("videoram") //foreground vram + paletteram |
| 322 | | AM_RANGE(0xf000, 0xf000) AM_WRITE(suprgolf_pen_w ) |
| 340 | AM_RANGE(0xc000, 0xdfff) AM_READWRITE(bg_vram_r, bg_vram_w ) // banked background vram |
| 341 | AM_RANGE(0xe000, 0xefff) AM_READWRITE(videoram_r, videoram_w ) AM_SHARE("videoram") //foreground vram + paletteram |
| 342 | AM_RANGE(0xf000, 0xf000) AM_WRITE(pen_w ) |
| 323 | 343 | AM_RANGE(0xf800, 0xffff) AM_RAM |
| 324 | 344 | ADDRESS_MAP_END |
| 325 | 345 | |
| r244980 | r244981 | |
| 416 | 436 | PORT_DIPUNUSED_DIPLOC( 0x80, 0x00, "SW2:8" ) |
| 417 | 437 | INPUT_PORTS_END |
| 418 | 438 | |
| 419 | | WRITE8_MEMBER(suprgolf_state::suprgolf_writeA) |
| 439 | WRITE8_MEMBER(suprgolf_state::writeA) |
| 420 | 440 | { |
| 421 | 441 | osd_printf_debug("ymwA\n"); |
| 422 | 442 | } |
| 423 | 443 | |
| 424 | | WRITE8_MEMBER(suprgolf_state::suprgolf_writeB) |
| 444 | WRITE8_MEMBER(suprgolf_state::writeB) |
| 425 | 445 | { |
| 426 | 446 | osd_printf_debug("ymwA\n"); |
| 427 | 447 | } |
| 428 | 448 | |
| 429 | | WRITE_LINE_MEMBER(suprgolf_state::irqhandler) |
| 430 | | { |
| 431 | | //m_maincpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE); |
| 432 | | } |
| 433 | | |
| 434 | 449 | WRITE_LINE_MEMBER(suprgolf_state::adpcm_int) |
| 435 | 450 | { |
| 436 | 451 | m_msm->reset_w(0); |
| r244980 | r244981 | |
| 485 | 500 | MCFG_I8255_IN_PORTA_CB(IOPORT("SYSTEM")) |
| 486 | 501 | MCFG_I8255_IN_PORTB_CB(READ8(suprgolf_state, rom_bank_select_r)) |
| 487 | 502 | MCFG_I8255_OUT_PORTB_CB(WRITE8(suprgolf_state, rom_bank_select_w)) |
| 488 | | MCFG_I8255_IN_PORTC_CB(READ8(suprgolf_state, suprgolf_vregs_r)) |
| 489 | | MCFG_I8255_OUT_PORTC_CB(WRITE8(suprgolf_state, suprgolf_vregs_w)) |
| 503 | MCFG_I8255_IN_PORTC_CB(READ8(suprgolf_state, vregs_r)) |
| 504 | MCFG_I8255_OUT_PORTC_CB(WRITE8(suprgolf_state, vregs_w)) |
| 490 | 505 | |
| 491 | 506 | /* video hardware */ |
| 492 | 507 | MCFG_SCREEN_ADD("screen", RASTER) |
| r244980 | r244981 | |
| 494 | 509 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) |
| 495 | 510 | MCFG_SCREEN_SIZE(256, 256) |
| 496 | 511 | MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 191) |
| 497 | | MCFG_SCREEN_UPDATE_DRIVER(suprgolf_state, screen_update_suprgolf) |
| 512 | MCFG_SCREEN_UPDATE_DRIVER(suprgolf_state, screen_update) |
| 498 | 513 | MCFG_SCREEN_PALETTE("palette") |
| 499 | 514 | |
| 500 | 515 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", suprgolf) |
| r244980 | r244981 | |
| 504 | 519 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 505 | 520 | |
| 506 | 521 | MCFG_SOUND_ADD("ymsnd", YM2203, MASTER_CLOCK/4) /* guess */ |
| 507 | | MCFG_YM2203_IRQ_HANDLER(WRITELINE(suprgolf_state, irqhandler)) |
| 522 | //MCFG_YM2203_IRQ_HANDLER(INPUTLINE("maincpu", INPUT_LINE_NMI)) |
| 508 | 523 | MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW0")) |
| 509 | 524 | MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW1")) |
| 510 | | MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(suprgolf_state, suprgolf_writeA)) |
| 511 | | MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(suprgolf_state, suprgolf_writeB)) |
| 525 | MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(suprgolf_state, writeA)) |
| 526 | MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(suprgolf_state, writeB)) |
| 512 | 527 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) |
| 513 | 528 | |
| 514 | 529 | MCFG_SOUND_ADD("msm", MSM5205, XTAL_384kHz) /* guess */ |
| r244980 | r244981 | |
| 621 | 636 | ROM[0x6d72+(0x4000*3)-0x4000] = 0x20; //patch ROM check |
| 622 | 637 | } |
| 623 | 638 | |
| 624 | | GAME( 1989, suprgolf, 0, suprgolf, suprgolf, suprgolf_state, suprgolf, ROT0, "Nasco", "Super Crowns Golf (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL ) |
| 625 | | GAME( 1989, albatross, suprgolf, suprgolf, suprgolf, driver_device, 0, ROT0, "Nasco", "Albatross (US Prototype?)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL ) |
| 639 | GAME( 1989, suprgolf, 0, suprgolf, suprgolf, suprgolf_state, suprgolf, ROT0, "Nasco", "Super Crowns Golf (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 640 | GAME( 1989, albatross, suprgolf, suprgolf, suprgolf, driver_device, 0, ROT0, "Nasco", "Albatross (US Prototype?)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL| GAME_SUPPORTS_SAVE ) |
trunk/src/mame/drivers/suprloco.c
| r244980 | r244981 | |
| 5 | 5 | driver by Zsolt Vasvari |
| 6 | 6 | |
| 7 | 7 | TODO: |
| 8 | | - Bit 5 in suprloco_control_w is pulsed when loco turns "super". This is supposed |
| 8 | - Bit 5 in control_w is pulsed when loco turns "super". This is supposed |
| 9 | 9 | to make red parts of sprites blink to purple, it's not clear how this is |
| 10 | 10 | implemented in hardware, there's a hack to support it. |
| 11 | 11 | |
| r244980 | r244981 | |
| 25 | 25 | #include "sound/sn76496.h" |
| 26 | 26 | #include "includes/suprloco.h" |
| 27 | 27 | |
| 28 | | WRITE8_MEMBER(suprloco_state::suprloco_soundport_w) |
| 28 | WRITE8_MEMBER(suprloco_state::soundport_w) |
| 29 | 29 | { |
| 30 | 30 | soundlatch_byte_w(space, 0, data); |
| 31 | 31 | m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); |
| r244980 | r244981 | |
| 42 | 42 | AM_RANGE(0xd800, 0xd800) AM_READ_PORT("P2") |
| 43 | 43 | AM_RANGE(0xe000, 0xe000) AM_READ_PORT("DSW1") |
| 44 | 44 | AM_RANGE(0xe001, 0xe001) AM_READ_PORT("DSW2") |
| 45 | | AM_RANGE(0xe800, 0xe800) AM_WRITE(suprloco_soundport_w) |
| 46 | | AM_RANGE(0xe801, 0xe801) AM_READWRITE(suprloco_control_r, suprloco_control_w) |
| 47 | | AM_RANGE(0xf000, 0xf6ff) AM_RAM_WRITE(suprloco_videoram_w) AM_SHARE("videoram") |
| 45 | AM_RANGE(0xe800, 0xe800) AM_WRITE(soundport_w) |
| 46 | AM_RANGE(0xe801, 0xe801) AM_READWRITE(control_r, control_w) |
| 47 | AM_RANGE(0xf000, 0xf6ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") |
| 48 | 48 | AM_RANGE(0xf700, 0xf7df) AM_RAM /* unused */ |
| 49 | | AM_RANGE(0xf7e0, 0xf7ff) AM_RAM_WRITE(suprloco_scrollram_w) AM_SHARE("scrollram") |
| 49 | AM_RANGE(0xf7e0, 0xf7ff) AM_RAM_WRITE(scrollram_w) AM_SHARE("scrollram") |
| 50 | 50 | AM_RANGE(0xf800, 0xffff) AM_RAM |
| 51 | 51 | ADDRESS_MAP_END |
| 52 | 52 | |
| r244980 | r244981 | |
| 175 | 175 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(5000)) |
| 176 | 176 | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 177 | 177 | MCFG_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 0*8, 28*8-1) |
| 178 | | MCFG_SCREEN_UPDATE_DRIVER(suprloco_state, screen_update_suprloco) |
| 178 | MCFG_SCREEN_UPDATE_DRIVER(suprloco_state, screen_update) |
| 179 | 179 | MCFG_SCREEN_PALETTE("palette") |
| 180 | 180 | |
| 181 | 181 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", suprloco) |
| r244980 | r244981 | |
| 297 | 297 | |
| 298 | 298 | |
| 299 | 299 | |
| 300 | | GAME( 1982, suprloco, 0, suprloco, suprloco, suprloco_state, suprloco, ROT0, "Sega", "Super Locomotive (Rev.A)", 0 ) |
| 301 | | GAME( 1982, suprlocoo, suprloco, suprloco, suprloco, suprloco_state, suprloco, ROT0, "Sega", "Super Locomotive", 0 ) |
| 300 | GAME( 1982, suprloco, 0, suprloco, suprloco, suprloco_state, suprloco, ROT0, "Sega", "Super Locomotive (Rev.A)", GAME_SUPPORTS_SAVE ) |
| 301 | GAME( 1982, suprlocoo, suprloco, suprloco, suprloco, suprloco_state, suprloco, ROT0, "Sega", "Super Locomotive", GAME_SUPPORTS_SAVE ) |
trunk/src/mame/drivers/suprridr.c
| r244980 | r244981 | |
| 89 | 89 | #include "sound/ay8910.h" |
| 90 | 90 | |
| 91 | 91 | |
| 92 | void suprridr_state::machine_start() |
| 93 | { |
| 94 | save_item(NAME(m_nmi_enable)); |
| 95 | save_item(NAME(m_sound_data)); |
| 96 | } |
| 97 | |
| 92 | 98 | /************************************* |
| 93 | 99 | * |
| 94 | 100 | * Interrupt generation |
| r244980 | r244981 | |
| 164 | 170 | static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, suprridr_state ) |
| 165 | 171 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 166 | 172 | AM_RANGE(0x8000, 0x87ff) AM_RAM |
| 167 | | AM_RANGE(0x8800, 0x8bff) AM_RAM_WRITE(suprridr_bgram_w) AM_SHARE("bgram") |
| 168 | | AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(suprridr_fgram_w) AM_SHARE("fgram") |
| 173 | AM_RANGE(0x8800, 0x8bff) AM_RAM_WRITE(bgram_w) AM_SHARE("bgram") |
| 174 | AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(fgram_w) AM_SHARE("fgram") |
| 169 | 175 | AM_RANGE(0x9800, 0x983f) AM_RAM |
| 170 | 176 | AM_RANGE(0x9840, 0x987f) AM_RAM AM_SHARE("spriteram") |
| 171 | 177 | AM_RANGE(0x9880, 0x9bff) AM_RAM |
| r244980 | r244981 | |
| 173 | 179 | AM_RANGE(0xa800, 0xa800) AM_READ_PORT("SYSTEM") |
| 174 | 180 | AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_enable_w) |
| 175 | 181 | AM_RANGE(0xb002, 0xb003) AM_WRITE(coin_lock_w) |
| 176 | | AM_RANGE(0xb006, 0xb006) AM_WRITE(suprridr_flipx_w) |
| 177 | | AM_RANGE(0xb007, 0xb007) AM_WRITE(suprridr_flipy_w) |
| 182 | AM_RANGE(0xb006, 0xb006) AM_WRITE(flipx_w) |
| 183 | AM_RANGE(0xb007, 0xb007) AM_WRITE(flipy_w) |
| 178 | 184 | AM_RANGE(0xb800, 0xb800) AM_WRITE(sound_data_w) |
| 179 | | AM_RANGE(0xc801, 0xc801) AM_WRITE(suprridr_fgdisable_w) |
| 180 | | AM_RANGE(0xc802, 0xc802) AM_WRITE(suprridr_fgscrolly_w) |
| 181 | | AM_RANGE(0xc804, 0xc804) AM_WRITE(suprridr_bgscrolly_w) |
| 185 | AM_RANGE(0xc801, 0xc801) AM_WRITE(fgdisable_w) |
| 186 | AM_RANGE(0xc802, 0xc802) AM_WRITE(fgscrolly_w) |
| 187 | AM_RANGE(0xc804, 0xc804) AM_WRITE(bgscrolly_w) |
| 182 | 188 | AM_RANGE(0xc000, 0xefff) AM_ROM |
| 183 | 189 | ADDRESS_MAP_END |
| 184 | 190 | |
| r244980 | r244981 | |
| 223 | 229 | #define SUPRRIDR_P1_CONTROL_PORT_TAG ("CONTP1") |
| 224 | 230 | #define SUPRRIDR_P2_CONTROL_PORT_TAG ("CONTP2") |
| 225 | 231 | |
| 226 | | CUSTOM_INPUT_MEMBER(suprridr_state::suprridr_control_r) |
| 232 | CUSTOM_INPUT_MEMBER(suprridr_state::control_r) |
| 227 | 233 | { |
| 228 | 234 | UINT32 ret; |
| 229 | 235 | |
| 230 | 236 | /* screen flip multiplexes controls */ |
| 231 | | if (suprridr_is_screen_flipped()) |
| 237 | if (is_screen_flipped()) |
| 232 | 238 | ret = ioport(SUPRRIDR_P2_CONTROL_PORT_TAG)->read(); |
| 233 | 239 | else |
| 234 | 240 | ret = ioport(SUPRRIDR_P1_CONTROL_PORT_TAG)->read(); |
| r244980 | r244981 | |
| 239 | 245 | |
| 240 | 246 | static INPUT_PORTS_START( suprridr ) |
| 241 | 247 | PORT_START("INPUTS") |
| 242 | | PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, suprridr_state,suprridr_control_r, NULL) |
| 248 | PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, suprridr_state, control_r, NULL) |
| 243 | 249 | |
| 244 | 250 | PORT_START("SYSTEM") |
| 245 | 251 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) |
| r244980 | r244981 | |
| 353 | 359 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 354 | 360 | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 355 | 361 | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) |
| 356 | | MCFG_SCREEN_UPDATE_DRIVER(suprridr_state, screen_update_suprridr) |
| 362 | MCFG_SCREEN_UPDATE_DRIVER(suprridr_state, screen_update) |
| 357 | 363 | MCFG_SCREEN_PALETTE("palette") |
| 358 | 364 | |
| 359 | 365 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", suprridr) |
| r244980 | r244981 | |
| 423 | 429 | * |
| 424 | 430 | *************************************/ |
| 425 | 431 | |
| 426 | | GAME( 1983, suprridr, 0, suprridr, suprridr, driver_device, 0, ROT90, "Taito Corporation (Venture Line license)", "Super Rider", GAME_IMPERFECT_SOUND ) |
| 432 | GAME( 1983, suprridr, 0, suprridr, suprridr, driver_device, 0, ROT90, "Taito Corporation (Venture Line license)", "Super Rider", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) |
trunk/src/mame/includes/suprloco.h
| r244980 | r244981 | |
| 3 | 3 | public: |
| 4 | 4 | suprloco_state(const machine_config &mconfig, device_type type, const char *tag) |
| 5 | 5 | : driver_device(mconfig, type, tag), |
| 6 | m_maincpu(*this, "maincpu"), |
| 7 | m_audiocpu(*this, "audiocpu"), |
| 8 | m_gfxdecode(*this, "gfxdecode"), |
| 6 | 9 | m_spriteram(*this, "spriteram"), |
| 7 | 10 | m_videoram(*this, "videoram"), |
| 8 | | m_scrollram(*this, "scrollram"), |
| 9 | | m_maincpu(*this, "maincpu"), |
| 10 | | m_audiocpu(*this, "audiocpu"), |
| 11 | | m_gfxdecode(*this, "gfxdecode") { } |
| 11 | m_scrollram(*this, "scrollram") { } |
| 12 | |
| 13 | required_device<cpu_device> m_maincpu; |
| 14 | required_device<cpu_device> m_audiocpu; |
| 15 | required_device<gfxdecode_device> m_gfxdecode; |
| 12 | 16 | |
| 13 | 17 | required_shared_ptr<UINT8> m_spriteram; |
| 14 | 18 | required_shared_ptr<UINT8> m_videoram; |
| 15 | 19 | required_shared_ptr<UINT8> m_scrollram; |
| 20 | |
| 16 | 21 | tilemap_t *m_bg_tilemap; |
| 17 | 22 | int m_control; |
| 18 | 23 | |
| 19 | | DECLARE_WRITE8_MEMBER(suprloco_soundport_w); |
| 20 | | DECLARE_WRITE8_MEMBER(suprloco_videoram_w); |
| 21 | | DECLARE_WRITE8_MEMBER(suprloco_scrollram_w); |
| 22 | | DECLARE_WRITE8_MEMBER(suprloco_control_w); |
| 23 | | DECLARE_READ8_MEMBER(suprloco_control_r); |
| 24 | | DECLARE_DRIVER_INIT(suprloco); |
| 24 | DECLARE_WRITE8_MEMBER(soundport_w); |
| 25 | DECLARE_WRITE8_MEMBER(videoram_w); |
| 26 | DECLARE_WRITE8_MEMBER(scrollram_w); |
| 27 | DECLARE_WRITE8_MEMBER(control_w); |
| 28 | DECLARE_READ8_MEMBER(control_r); |
| 29 | |
| 25 | 30 | TILE_GET_INFO_MEMBER(get_tile_info); |
| 31 | |
| 26 | 32 | virtual void video_start(); |
| 27 | 33 | DECLARE_PALETTE_INIT(suprloco); |
| 28 | | UINT32 screen_update_suprloco(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 34 | DECLARE_DRIVER_INIT(suprloco); |
| 35 | |
| 36 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 29 | 37 | inline void draw_pixel(bitmap_ind16 &bitmap,const rectangle &cliprect,int x,int y,int color,int flip); |
| 30 | 38 | void draw_sprite(bitmap_ind16 &bitmap,const rectangle &cliprect,int spr_number); |
| 31 | 39 | void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 32 | | required_device<cpu_device> m_maincpu; |
| 33 | | required_device<cpu_device> m_audiocpu; |
| 34 | | required_device<gfxdecode_device> m_gfxdecode; |
| 35 | 40 | }; |
trunk/src/mame/includes/suprridr.h
| r244980 | r244981 | |
| 11 | 11 | public: |
| 12 | 12 | suprridr_state(const machine_config &mconfig, device_type type, const char *tag) |
| 13 | 13 | : driver_device(mconfig, type, tag), |
| 14 | | m_fgram(*this, "fgram"), |
| 15 | | m_bgram(*this, "bgram"), |
| 16 | | m_spriteram(*this, "spriteram"), |
| 17 | 14 | m_maincpu(*this, "maincpu"), |
| 18 | 15 | m_audiocpu(*this, "audiocpu"), |
| 19 | 16 | m_gfxdecode(*this, "gfxdecode"), |
| 20 | | m_palette(*this, "palette") { } |
| 17 | m_palette(*this, "palette"), |
| 18 | m_fgram(*this, "fgram"), |
| 19 | m_bgram(*this, "bgram"), |
| 20 | m_spriteram(*this, "spriteram") { } |
| 21 | 21 | |
| 22 | required_device<cpu_device> m_maincpu; |
| 23 | required_device<cpu_device> m_audiocpu; |
| 24 | required_device<gfxdecode_device> m_gfxdecode; |
| 25 | required_device<palette_device> m_palette; |
| 26 | |
| 27 | required_shared_ptr<UINT8> m_fgram; |
| 28 | required_shared_ptr<UINT8> m_bgram; |
| 29 | required_shared_ptr<UINT8> m_spriteram; |
| 30 | |
| 22 | 31 | UINT8 m_nmi_enable; |
| 23 | 32 | UINT8 m_sound_data; |
| 24 | | required_shared_ptr<UINT8> m_fgram; |
| 25 | | required_shared_ptr<UINT8> m_bgram; |
| 26 | 33 | tilemap_t *m_fg_tilemap; |
| 27 | 34 | tilemap_t *m_bg_tilemap; |
| 28 | 35 | tilemap_t *m_bg_tilemap_noscroll; |
| 29 | 36 | UINT8 m_flipx; |
| 30 | 37 | UINT8 m_flipy; |
| 31 | | required_shared_ptr<UINT8> m_spriteram; |
| 38 | |
| 32 | 39 | DECLARE_WRITE8_MEMBER(nmi_enable_w); |
| 33 | 40 | DECLARE_WRITE8_MEMBER(sound_data_w); |
| 34 | 41 | DECLARE_WRITE8_MEMBER(sound_irq_ack_w); |
| 35 | 42 | DECLARE_WRITE8_MEMBER(coin_lock_w); |
| 36 | | DECLARE_WRITE8_MEMBER(suprridr_flipx_w); |
| 37 | | DECLARE_WRITE8_MEMBER(suprridr_flipy_w); |
| 38 | | DECLARE_WRITE8_MEMBER(suprridr_fgdisable_w); |
| 39 | | DECLARE_WRITE8_MEMBER(suprridr_fgscrolly_w); |
| 40 | | DECLARE_WRITE8_MEMBER(suprridr_bgscrolly_w); |
| 41 | | DECLARE_WRITE8_MEMBER(suprridr_bgram_w); |
| 42 | | DECLARE_WRITE8_MEMBER(suprridr_fgram_w); |
| 43 | | DECLARE_CUSTOM_INPUT_MEMBER(suprridr_control_r); |
| 43 | DECLARE_WRITE8_MEMBER(flipx_w); |
| 44 | DECLARE_WRITE8_MEMBER(flipy_w); |
| 45 | DECLARE_WRITE8_MEMBER(fgdisable_w); |
| 46 | DECLARE_WRITE8_MEMBER(fgscrolly_w); |
| 47 | DECLARE_WRITE8_MEMBER(bgscrolly_w); |
| 48 | DECLARE_WRITE8_MEMBER(bgram_w); |
| 49 | DECLARE_WRITE8_MEMBER(fgram_w); |
| 44 | 50 | DECLARE_READ8_MEMBER(sound_data_r); |
| 51 | |
| 52 | DECLARE_CUSTOM_INPUT_MEMBER(control_r); |
| 53 | |
| 45 | 54 | TILE_GET_INFO_MEMBER(get_tile_info); |
| 46 | 55 | TILE_GET_INFO_MEMBER(get_tile_info2); |
| 56 | |
| 57 | INTERRUPT_GEN_MEMBER(main_nmi_gen); |
| 58 | TIMER_CALLBACK_MEMBER(delayed_sound_w); |
| 59 | |
| 60 | virtual void machine_start(); |
| 47 | 61 | virtual void video_start(); |
| 48 | 62 | DECLARE_PALETTE_INIT(suprridr); |
| 49 | | UINT32 screen_update_suprridr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 50 | | INTERRUPT_GEN_MEMBER(main_nmi_gen); |
| 51 | | TIMER_CALLBACK_MEMBER(delayed_sound_w); |
| 52 | | int suprridr_is_screen_flipped(); |
| 53 | | required_device<cpu_device> m_maincpu; |
| 54 | | required_device<cpu_device> m_audiocpu; |
| 55 | | required_device<gfxdecode_device> m_gfxdecode; |
| 56 | | required_device<palette_device> m_palette; |
| 63 | |
| 64 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 65 | int is_screen_flipped(); |
| 57 | 66 | }; |
trunk/src/mame/video/suprridr.c
| r244980 | r244981 | |
| 44 | 44 | m_bg_tilemap_noscroll = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(suprridr_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8,8, 32,32); |
| 45 | 45 | |
| 46 | 46 | m_fg_tilemap->set_transparent_pen(0); |
| 47 | |
| 48 | save_item(NAME(m_flipx)); |
| 49 | save_item(NAME(m_flipy)); |
| 47 | 50 | } |
| 48 | 51 | |
| 49 | 52 | |
| r244980 | r244981 | |
| 91 | 94 | * |
| 92 | 95 | *************************************/ |
| 93 | 96 | |
| 94 | | WRITE8_MEMBER(suprridr_state::suprridr_flipx_w) |
| 97 | WRITE8_MEMBER(suprridr_state::flipx_w) |
| 95 | 98 | { |
| 96 | 99 | m_flipx = data & 1; |
| 97 | 100 | machine().tilemap().set_flip_all((m_flipx ? TILEMAP_FLIPX : 0) | (m_flipy ? TILEMAP_FLIPY : 0)); |
| 98 | 101 | } |
| 99 | 102 | |
| 100 | 103 | |
| 101 | | WRITE8_MEMBER(suprridr_state::suprridr_flipy_w) |
| 104 | WRITE8_MEMBER(suprridr_state::flipy_w) |
| 102 | 105 | { |
| 103 | 106 | m_flipy = data & 1; |
| 104 | 107 | machine().tilemap().set_flip_all((m_flipx ? TILEMAP_FLIPX : 0) | (m_flipy ? TILEMAP_FLIPY : 0)); |
| 105 | 108 | } |
| 106 | 109 | |
| 107 | 110 | |
| 108 | | WRITE8_MEMBER(suprridr_state::suprridr_fgdisable_w) |
| 111 | WRITE8_MEMBER(suprridr_state::fgdisable_w) |
| 109 | 112 | { |
| 110 | 113 | m_fg_tilemap->enable(~data & 1); |
| 111 | 114 | } |
| 112 | 115 | |
| 113 | 116 | |
| 114 | | WRITE8_MEMBER(suprridr_state::suprridr_fgscrolly_w) |
| 117 | WRITE8_MEMBER(suprridr_state::fgscrolly_w) |
| 115 | 118 | { |
| 116 | 119 | m_fg_tilemap->set_scrolly(0, data); |
| 117 | 120 | } |
| 118 | 121 | |
| 119 | 122 | |
| 120 | | WRITE8_MEMBER(suprridr_state::suprridr_bgscrolly_w) |
| 123 | WRITE8_MEMBER(suprridr_state::bgscrolly_w) |
| 121 | 124 | { |
| 122 | 125 | m_bg_tilemap->set_scrolly(0, data); |
| 123 | 126 | } |
| 124 | 127 | |
| 125 | 128 | |
| 126 | | int suprridr_state::suprridr_is_screen_flipped() |
| 129 | int suprridr_state::is_screen_flipped() |
| 127 | 130 | { |
| 128 | 131 | return m_flipx; /* or is it flipy? */ |
| 129 | 132 | } |
| r244980 | r244981 | |
| 136 | 139 | * |
| 137 | 140 | *************************************/ |
| 138 | 141 | |
| 139 | | WRITE8_MEMBER(suprridr_state::suprridr_bgram_w) |
| 142 | WRITE8_MEMBER(suprridr_state::bgram_w) |
| 140 | 143 | { |
| 141 | 144 | m_bgram[offset] = data; |
| 142 | 145 | m_bg_tilemap->mark_tile_dirty(offset); |
| r244980 | r244981 | |
| 144 | 147 | } |
| 145 | 148 | |
| 146 | 149 | |
| 147 | | WRITE8_MEMBER(suprridr_state::suprridr_fgram_w) |
| 150 | WRITE8_MEMBER(suprridr_state::fgram_w) |
| 148 | 151 | { |
| 149 | 152 | m_fgram[offset] = data; |
| 150 | 153 | m_fg_tilemap->mark_tile_dirty(offset); |
| r244980 | r244981 | |
| 158 | 161 | * |
| 159 | 162 | *************************************/ |
| 160 | 163 | |
| 161 | | UINT32 suprridr_state::screen_update_suprridr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 164 | UINT32 suprridr_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 162 | 165 | { |
| 163 | | UINT8 *spriteram = m_spriteram; |
| 164 | 166 | rectangle subclip; |
| 165 | | int i; |
| 166 | 167 | const rectangle &visarea = screen.visible_area(); |
| 167 | 168 | |
| 168 | 169 | /* render left 4 columns with no scroll */ |
| r244980 | r244981 | |
| 188 | 189 | m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); |
| 189 | 190 | |
| 190 | 191 | /* draw the sprites */ |
| 191 | | for (i = 0; i < 48; i++) |
| 192 | for (int i = 0; i < 48; i++) |
| 192 | 193 | { |
| 193 | | int code = (spriteram[i*4+1] & 0x3f) | ((spriteram[i*4+2] >> 1) & 0x40); |
| 194 | | int color = spriteram[i*4+2] & 0x7f; |
| 195 | | int fx = spriteram[i*4+1] & 0x40; |
| 196 | | int fy = spriteram[i*4+1] & 0x80; |
| 197 | | int x = spriteram[i*4+3]; |
| 198 | | int y = 240 - spriteram[i*4+0]; |
| 194 | int code = (m_spriteram[i*4+1] & 0x3f) | ((m_spriteram[i*4+2] >> 1) & 0x40); |
| 195 | int color = m_spriteram[i*4+2] & 0x7f; |
| 196 | int fx = m_spriteram[i*4+1] & 0x40; |
| 197 | int fy = m_spriteram[i*4+1] & 0x80; |
| 198 | int x = m_spriteram[i*4+3]; |
| 199 | int y = 240 - m_spriteram[i*4+0]; |
| 199 | 200 | |
| 200 | 201 | if (m_flipx) |
| 201 | 202 | { |
trunk/src/mess/drivers/a7800.c
| r244980 | r244981 | |
| 117 | 117 | m_maria(*this, "maria"), |
| 118 | 118 | m_io_joysticks(*this, "joysticks"), |
| 119 | 119 | m_io_buttons(*this, "buttons"), |
| 120 | | m_io_vblank(*this, "vblank"), |
| 121 | 120 | m_io_console_buttons(*this, "console_buttons"), |
| 122 | 121 | m_cart(*this, "cartslot"), |
| 123 | | m_screen(*this, "screen") { } |
| 122 | m_screen(*this, "screen"), |
| 123 | m_bios(*this, "maincpu") { } |
| 124 | 124 | |
| 125 | 125 | int m_lines; |
| 126 | 126 | int m_ispal; |
| r244980 | r244981 | |
| 132 | 132 | int m_p2_one_button; |
| 133 | 133 | int m_bios_enabled; |
| 134 | 134 | |
| 135 | | UINT8 *m_bios; |
| 136 | | |
| 137 | 135 | DECLARE_READ8_MEMBER(bios_or_cart_r); |
| 138 | 136 | DECLARE_WRITE8_MEMBER(ram0_w); |
| 139 | 137 | DECLARE_READ8_MEMBER(tia_r); |
| r244980 | r244981 | |
| 158 | 156 | required_device<atari_maria_device> m_maria; |
| 159 | 157 | required_ioport m_io_joysticks; |
| 160 | 158 | required_ioport m_io_buttons; |
| 161 | | required_ioport m_io_vblank; |
| 162 | 159 | required_ioport m_io_console_buttons; |
| 163 | 160 | required_device<a78_cart_slot_device> m_cart; |
| 164 | 161 | required_device<screen_device> m_screen; |
| 162 | required_region_ptr<UINT8> m_bios; |
| 165 | 163 | }; |
| 166 | 164 | |
| 167 | 165 | |
| r244980 | r244981 | |
| 282 | 280 | static ADDRESS_MAP_START( a7800_mem, AS_PROGRAM, 8, a7800_state ) |
| 283 | 281 | AM_RANGE(0x0000, 0x001f) AM_MIRROR(0x300) AM_READWRITE(tia_r, tia_w) |
| 284 | 282 | AM_RANGE(0x0020, 0x003f) AM_MIRROR(0x300) AM_DEVREADWRITE("maria", atari_maria_device, read, write) |
| 285 | | AM_RANGE(0x0040, 0x00ff) AM_RAMBANK("ram0") // RAM (6116 block 0) |
| 286 | | AM_RANGE(0x0140, 0x01ff) AM_RAMBANK("ram1") // RAM (6116 block 1) |
| 283 | AM_RANGE(0x0040, 0x00ff) AM_RAMBANK("zpmirror") // mirror of 0x2040-0x20ff, for zero page |
| 284 | AM_RANGE(0x0140, 0x01ff) AM_RAMBANK("spmirror") // mirror of 0x2140-0x21ff, for stack page |
| 287 | 285 | AM_RANGE(0x0280, 0x02ff) AM_DEVREADWRITE("riot", riot6532_device, read, write) |
| 288 | | AM_RANGE(0x0480, 0x04ff) AM_MIRROR(0x100) AM_RAMBANK("riot_ram") |
| 289 | | AM_RANGE(0x1800, 0x27ff) AM_RAMBANK("main_ram") |
| 290 | | |
| 291 | | AM_RANGE(0x2040, 0x20ff) AM_RAMBANK("ram0") // mirror (6116 block 0) |
| 292 | | AM_RANGE(0x2140, 0x21ff) AM_RAMBANK("ram1") // mirror (6116 block 1) |
| 293 | | |
| 294 | | AM_RANGE(0x2800, 0x2fff) AM_RAMBANK("mirror") // these should mirror "main_ram" (according to docs) |
| 295 | | AM_RANGE(0x3000, 0x37ff) AM_RAMBANK("mirror") // but system have issues in such case... |
| 296 | | AM_RANGE(0x3800, 0x3fff) AM_RAMBANK("mirror") |
| 286 | AM_RANGE(0x0480, 0x04ff) AM_RAM AM_SHARE("riot_ram") AM_MIRROR(0x100) |
| 287 | AM_RANGE(0x1800, 0x1fff) AM_RAM AM_SHARE("6116_1") |
| 288 | AM_RANGE(0x2000, 0x27ff) AM_RAM AM_SHARE("6116_2") AM_MIRROR(0x0800) |
| 289 | // According to the official Software Guide, the RAM at 0x2000 is |
| 290 | // repeatedly mirrored up to 0x3fff, but this is evidently incorrect |
| 291 | // because the High Score Cartridge maps ROM at 0x3000-0x3fff |
| 292 | // Hardware tests show that only the mirror at 0x2800-0x2fff actually |
| 293 | // exists, and only on some hardware (MARIA? motherboard?) revisions |
| 297 | 294 | AM_RANGE(0x4000, 0xffff) AM_DEVWRITE("cartslot", a78_cart_slot_device, write_40xx) |
| 298 | 295 | AM_RANGE(0x4000, 0xbfff) AM_DEVREAD("cartslot", a78_cart_slot_device, read_40xx) |
| 299 | 296 | AM_RANGE(0xc000, 0xffff) AM_READ(bios_or_cart_r) // here also the BIOS can be accessed |
| r244980 | r244981 | |
| 322 | 319 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_PLAYER(1) |
| 323 | 320 | PORT_BIT(0xF0, IP_ACTIVE_LOW, IPT_UNUSED) |
| 324 | 321 | |
| 325 | | PORT_START("vblank") |
| 326 | | PORT_BIT(0x7F, IP_ACTIVE_LOW, IPT_UNUSED) |
| 327 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_VBLANK("screen") |
| 328 | | |
| 329 | 322 | PORT_START("console_buttons") |
| 330 | 323 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Reset") PORT_CODE(KEYCODE_R) |
| 331 | 324 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Select") PORT_CODE(KEYCODE_S) |
| r244980 | r244981 | |
| 1306 | 1299 | |
| 1307 | 1300 | void a7800_state::machine_start() |
| 1308 | 1301 | { |
| 1309 | | m_bios = machine().root_device().memregion("maincpu")->base() + 0xc000; |
| 1310 | 1302 | save_item(NAME(m_p1_one_button)); |
| 1311 | 1303 | save_item(NAME(m_p2_one_button)); |
| 1312 | 1304 | save_item(NAME(m_bios_enabled)); |
| r244980 | r244981 | |
| 1314 | 1306 | save_item(NAME(m_ctrl_reg)); |
| 1315 | 1307 | save_item(NAME(m_maria_flag)); |
| 1316 | 1308 | |
| 1309 | // set up RAM mirrors |
| 1310 | UINT8 *ram = reinterpret_cast<UINT8 *>(memshare("6116_2")->ptr()); |
| 1311 | membank("zpmirror")->set_base(ram + 0x0040); |
| 1312 | membank("spmirror")->set_base(ram + 0x0140); |
| 1313 | |
| 1317 | 1314 | // install additional handlers, if needed |
| 1318 | 1315 | if (m_cart->exists()) |
| 1319 | 1316 | { |
| r244980 | r244981 | |
| 1420 | 1417 | ***************************************************************************/ |
| 1421 | 1418 | |
| 1422 | 1419 | ROM_START( a7800 ) |
| 1423 | | ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF) |
| 1420 | ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF) |
| 1424 | 1421 | ROM_SYSTEM_BIOS( 0, "a7800", "Atari 7800" ) |
| 1425 | | ROMX_LOAD("7800.u7", 0xf000, 0x1000, CRC(5d13730c) SHA1(d9d134bb6b36907c615a594cc7688f7bfcef5b43), ROM_BIOS(1)) |
| 1422 | ROMX_LOAD("7800.u7", 0x3000, 0x1000, CRC(5d13730c) SHA1(d9d134bb6b36907c615a594cc7688f7bfcef5b43), ROM_BIOS(1)) |
| 1426 | 1423 | ROM_SYSTEM_BIOS( 1, "a7800pr", "Atari 7800 (prototype with Asteroids)" ) |
| 1427 | | ROMX_LOAD("c300558-001a.u7", 0xc000, 0x4000, CRC(a0e10edf) SHA1(14584b1eafe9721804782d4b1ac3a4a7313e455f), ROM_BIOS(2)) |
| 1424 | ROMX_LOAD("c300558-001a.u7", 0x0000, 0x4000, CRC(a0e10edf) SHA1(14584b1eafe9721804782d4b1ac3a4a7313e455f), ROM_BIOS(2)) |
| 1428 | 1425 | ROM_END |
| 1429 | 1426 | |
| 1430 | 1427 | ROM_START( a7800p ) |
| 1431 | | ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF) |
| 1432 | | ROM_LOAD("7800pal.rom", 0xc000, 0x4000, CRC(d5b61170) SHA1(5a140136a16d1d83e4ff32a19409ca376a8df874)) |
| 1428 | ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF) |
| 1429 | ROM_LOAD("7800pal.rom", 0x0000, 0x4000, CRC(d5b61170) SHA1(5a140136a16d1d83e4ff32a19409ca376a8df874)) |
| 1433 | 1430 | ROM_END |
| 1434 | 1431 | |
| 1435 | 1432 | |