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 |