| Previous | 199869 Revisions | Next |
| r36461 Tuesday 17th March, 2015 at 20:09:39 UTC by Michael Zapf |
|---|
| (MESS) ti99: Added a sanity check for disk format detection and a non-locking Alphalock |
| [src/emu/cpu/hmcs40] | hmcs40.c hmcs40op.inc |
| [src/lib/formats] | ti99_dsk.c |
| [src/mame] | mame.lst |
| [src/mame/drivers] | psikyo.c |
| [src/mess/drivers] | ti99_4x.c |
| r244972 | r244973 | |
|---|---|---|
| 570 | 570 | m_i = BITSWAP8(m_op,7,6,5,4,0,1,2,3) & 0xf; // reversed bit-order for immediate param |
| 571 | 571 | increment_pc(); |
| 572 | 572 | |
| 573 | // handle opcode | |
| 574 | switch (m_op) | |
| 575 | { | |
| 576 | 573 | /* |
| 577 | 574 | |
| 578 | 575 | op_ayy(); - |
| r244972 | r244973 | |
| 588 | 585 | op_blem(); - 267 024 |
| 589 | 586 | op_lay(); - 118 |
| 590 | 587 | |
| 591 | ||
| 592 | 588 | */ |
| 593 | 589 | |
| 590 | // handle opcode | |
| 591 | switch (m_op) | |
| 592 | { | |
| 594 | 593 | case 0x118: |
| 595 | 594 | op_lay(); // probably lay |
| 596 | 595 | break; |
| 597 | ||
| 598 | case 0x046: | |
| 599 | op_daa(); | |
| 600 | break; | |
| 601 | case 0x045: | |
| 602 | op_das(); | |
| 603 | break; | |
| 604 | ||
| 605 | ||
| 606 | 596 | case 0x267: |
| 607 | op_blem(); // bnem or blem | |
| 608 | break; | |
| 609 | ||
| 597 | op_blem(); break; // bnem or blem | |
| 610 | 598 | case 0x124: |
| 611 | 599 | op_alem(); // alem or anem |
| 612 | 600 | break; |
| 613 | 601 | case 0x324: |
| 614 | op_anem(); // " | |
| 615 | break; | |
| 616 | ||
| 602 | op_anem(); break; // " | |
| 617 | 603 | case 0x024: |
| 618 | 604 | //op_nega(); |
| 619 | 605 | //op_am(); |
| 620 | 606 | op_illegal(); |
| 621 | 607 | break; |
| 622 | ||
| 623 | case 0x04b: | |
| 624 | op_illegal(); | |
| 625 | //op_rec(); | |
| 608 | 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 | |
| 626 | 617 | break; |
| 627 | 618 | case 0x04c: |
| 628 | op_rec(); | |
| 619 | op_illegal(); | |
| 620 | //m_c ^= 1; | |
| 621 | //op_lat(); | |
| 629 | 622 | break; |
| 630 | 623 | |
| 631 | case 0x030: | |
| 632 | op_amc(); | |
| 633 | break; | |
| 634 | case 0x034: | |
| 635 | //op_illegal(); | |
| 636 | op_amc(); // mirror? | |
| 637 | break; | |
| 638 | 624 | |
| 639 | case 0x230: | |
| 640 | op_smc(); | |
| 641 | break; | |
| 642 | case 0x234: | |
| 643 | //op_illegal(); | |
| 644 | op_smc(); // mirror? | |
| 645 | break; | |
| 646 | 625 | |
| 647 | 626 | |
| 648 | ||
| 649 | ||
| 650 | ||
| 651 | ||
| 652 | ||
| 653 | 627 | /* 0x000 */ |
| 654 | 628 | |
| 655 | 629 | case 0x000: case 0x001: case 0x002: case 0x003: |
| r244972 | r244973 | |
| 663 | 637 | /* ok */ op_lmiiy(); break; |
| 664 | 638 | case 0x020: case 0x021: case 0x022: case 0x023: |
| 665 | 639 | op_lbm(); break; |
| 640 | case 0x030: | |
| 641 | op_amc(); break; | |
| 666 | 642 | case 0x03c: |
| 667 | 643 | op_lta(); break; |
| 668 | 644 | |
| 669 | 645 | case 0x040: |
| 670 | 646 | /* ok */ op_lxa(); break; |
| 647 | case 0x04b: | |
| 648 | op_rec(); break; | |
| 671 | 649 | case 0x04f: |
| 672 | 650 | op_sec(); break; |
| 673 | 651 | case 0x050: |
| r244972 | r244973 | |
| 773 | 751 | /* ok */ op_rotr(); break; |
| 774 | 752 | case 0x225: |
| 775 | 753 | /* ok */ op_rotl(); break; |
| 754 | case 0x230: | |
| 755 | op_smc(); break; | |
| 776 | 756 | case 0x23c: |
| 777 | 757 | op_lat(); break; |
| 778 | 758 |
| r244972 | r244973 | |
|---|---|---|
| 662 | 662 | if (o & 0x100) |
| 663 | 663 | { |
| 664 | 664 | // B3 B2 B1 B0 A0 A1 A2 A3 |
| 665 | m_a = BITSWAP8(o,7,6,5,4,0,1,2,3) & 0xf; | |
| 665 | m_a = BITSWAP8((UINT8)o,7,6,5,4,0,1,2,3) & 0xf; | |
| 666 | 666 | m_b = o >> 4 & 0xf; |
| 667 | 667 | } |
| 668 | 668 | if (o & 0x200) |
| 669 | 669 | { |
| 670 | 670 | // R20 R21 R22 R23 R30 R31 R32 R33 |
| 671 | o = BITSWAP8(o,0,1,2,3,4,5,6,7); | |
| 671 | o = BITSWAP8((UINT8)o,0,1,2,3,4,5,6,7); | |
| 672 | 672 | write_r(2, o & 0xf); |
| 673 | 673 | write_r(3, o >> 4 & 0xf); |
| 674 | 674 | } |
| r244972 | r244973 | |
|---|---|---|
| 835 | 835 | have_vib = true; |
| 836 | 836 | } |
| 837 | 837 | |
| 838 | // Do we have a broken VIB? The Pascal disks are known to have such incomplete VIBs | |
| 839 | if (heads == 0 || sector_count == 0) have_vib = false; | |
| 840 | ||
| 838 | 841 | // We're also checking the size of the image |
| 839 | 842 | int cell_size1 = 0; |
| 840 | 843 | int sector_count1 = 0; |
| r244972 | r244973 | |
|---|---|---|
| 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 | ||
| 1443 | 1409 | /*************************************************************************** |
| 1444 | 1410 | |
| 1445 | 1411 | Strikers 1945 (Japan, unprotected) |
| r244972 | r244973 | |
| 1990 | 1956 | |
| 1991 | 1957 | ***************************************************************************/ |
| 1992 | 1958 | |
| 1959 | /* Working Games */ | |
| 1993 | 1960 | GAME( 1993, samuraia, 0, sngkace, samuraia, psikyo_state, sngkace, ROT270, "Psikyo", "Samurai Aces (World)", GAME_SUPPORTS_SAVE ) // Banpresto? |
| 1994 | 1961 | GAME( 1993, sngkace, samuraia, sngkace, sngkace, psikyo_state, sngkace, ROT270, "Psikyo", "Sengoku Ace (Japan)", GAME_SUPPORTS_SAVE ) // Banpresto? |
| 1995 | ||
| 1996 | 1962 | GAME( 1994, gunbird, 0, gunbird, gunbird, psikyo_state, gunbird, ROT270, "Psikyo", "Gunbird (World)", GAME_SUPPORTS_SAVE ) |
| 1997 | 1963 | GAME( 1994, gunbirdk, gunbird, gunbird, gunbirdj, psikyo_state, gunbird, ROT270, "Psikyo", "Gunbird (Korea)", GAME_SUPPORTS_SAVE ) |
| 1998 | 1964 | GAME( 1994, gunbirdj, gunbird, gunbird, gunbirdj, psikyo_state, gunbird, ROT270, "Psikyo", "Gunbird (Japan)", GAME_SUPPORTS_SAVE ) |
| 1999 | ||
| 2000 | 1965 | 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 | ||
| 2003 | 1966 | GAME( 1995, s1945, 0, s1945, s1945, psikyo_state, s1945, ROT270, "Psikyo", "Strikers 1945 (World)", GAME_SUPPORTS_SAVE ) |
| 2004 | 1967 | 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 |
| 2005 | 1968 | GAME( 1995, s1945j, s1945, s1945, s1945j, psikyo_state, s1945j, ROT270, "Psikyo", "Strikers 1945 (Japan)", GAME_SUPPORTS_SAVE ) |
| 2006 | 1969 | GAME( 1995, s1945jn, s1945, gunbird, s1945j, psikyo_state, s1945jn, ROT270, "Psikyo", "Strikers 1945 (Japan, unprotected)", GAME_SUPPORTS_SAVE ) |
| 2007 | 1970 | GAME( 1995, s1945k, s1945, s1945, s1945j, psikyo_state, s1945, ROT270, "Psikyo", "Strikers 1945 (Korea)", GAME_SUPPORTS_SAVE ) |
| 2008 | 1971 | GAME( 1995, s1945bl, s1945, s1945bl, s1945bl, psikyo_state, s1945bl, ROT270, "bootleg","Strikers 1945 (Hong Kong, bootleg)", GAME_SUPPORTS_SAVE ) |
| 2009 | ||
| 2010 | 1972 | GAME( 1996, tengai, 0, s1945, tengai, psikyo_state, tengai, ROT0, "Psikyo", "Tengai (World)", GAME_SUPPORTS_SAVE ) |
| 2011 | 1973 | 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 |
| r244972 | r244973 | |
|---|---|---|
| 8773 | 8773 | gunbirdk // (c) 1994 |
| 8774 | 8774 | gunbirdj // (c) 1994 |
| 8775 | 8775 | btlkroad // (c) 1994 |
| 8776 | btlkroadk // (c) 1994 | |
| 8777 | 8776 | s1945 // (c) 1995 |
| 8778 | 8777 | s1945a // (c) 1995 |
| 8779 | 8778 | s1945j // (c) 1995 |
| r244972 | r244973 | |
|---|---|---|
| 351 | 351 | PORT_START("ALPHA") /* one more port for Alpha line */ |
| 352 | 352 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Alpha Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE |
| 353 | 353 | |
| 354 | /* another version of Alpha Lock which is non-toggling; this is useful when we want to attach | |
| 355 | a real TI keyboard for input. For home computers, the Alpha Lock / Shift Lock was a physically | |
| 356 | locking key. */ | |
| 357 | PORT_START("ALPHA1") | |
| 358 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Alpha Lock non-toggle") PORT_CODE(KEYCODE_RWIN) | |
| 359 | ||
| 354 | 360 | INPUT_PORTS_END |
| 355 | 361 | |
| 356 | 362 | |
| r244972 | r244973 | |
| 462 | 468 | // the line enough to make the TMS9901 sense the low level. |
| 463 | 469 | // A reported, feasible fix was to cut the line and insert a diode |
| 464 | 470 | // below the Alphalock key. |
| 465 | if ((ioport("ALPHABUG")!=0) && (m_model!=MODEL_4)) answer |= ioport("ALPHA")->read(); | |
| 471 | if ((ioport("ALPHABUG")!=0) && (m_model!=MODEL_4)) answer |= (ioport("ALPHA")->read() | ioport("ALPHA1")->read()); | |
| 466 | 472 | } |
| 467 | 473 | else |
| 468 | 474 | { |
| r244972 | r244973 | |
| 470 | 476 | } |
| 471 | 477 | if (m_check_alphalock) // never true for TI-99/4 |
| 472 | 478 | { |
| 473 | answer &= ~(ioport("ALPHA")->read()); | |
| 479 | answer &= ~(ioport("ALPHA")->read() | ioport("ALPHA1")->read()); | |
| 474 | 480 | } |
| 475 | 481 | answer = (answer << 3); |
| 476 | 482 | if (m_int1 == CLEAR_LINE) answer |= 0x02; |
| https://github.com/mamedev/mame/commit/d498d5cedfaa93a485f41ce85482114d1ffe916e |
| Previous | 199869 Revisions | Next |