trunk/src/emu/cpu/hmcs40/hmcs40.c
r244971 | r244972 | |
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 | { |
573 | 576 | /* |
574 | 577 | |
575 | 578 | op_ayy(); - |
r244971 | r244972 | |
585 | 588 | op_blem(); - 267 024 |
586 | 589 | op_lay(); - 118 |
587 | 590 | |
| 591 | |
588 | 592 | */ |
589 | 593 | |
590 | | // handle opcode |
591 | | switch (m_op) |
592 | | { |
593 | 594 | case 0x118: |
594 | 595 | op_lay(); // probably lay |
595 | 596 | break; |
| 597 | |
| 598 | case 0x046: |
| 599 | op_daa(); |
| 600 | break; |
| 601 | case 0x045: |
| 602 | op_das(); |
| 603 | break; |
| 604 | |
| 605 | |
596 | 606 | case 0x267: |
597 | | op_blem(); break; // bnem or blem |
| 607 | op_blem(); // bnem or blem |
| 608 | break; |
| 609 | |
598 | 610 | case 0x124: |
599 | 611 | op_alem(); // alem or anem |
600 | 612 | break; |
601 | 613 | case 0x324: |
602 | | op_anem(); break; // " |
| 614 | op_anem(); // " |
| 615 | break; |
| 616 | |
603 | 617 | case 0x024: |
604 | 618 | //op_nega(); |
605 | 619 | //op_am(); |
606 | 620 | op_illegal(); |
607 | 621 | break; |
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 |
| 622 | |
| 623 | case 0x04b: |
| 624 | op_illegal(); |
| 625 | //op_rec(); |
617 | 626 | break; |
618 | 627 | case 0x04c: |
619 | | op_illegal(); |
620 | | //m_c ^= 1; |
621 | | //op_lat(); |
| 628 | op_rec(); |
622 | 629 | break; |
623 | 630 | |
| 631 | case 0x030: |
| 632 | op_amc(); |
| 633 | break; |
| 634 | case 0x034: |
| 635 | //op_illegal(); |
| 636 | op_amc(); // mirror? |
| 637 | break; |
624 | 638 | |
| 639 | case 0x230: |
| 640 | op_smc(); |
| 641 | break; |
| 642 | case 0x234: |
| 643 | //op_illegal(); |
| 644 | op_smc(); // mirror? |
| 645 | break; |
625 | 646 | |
626 | 647 | |
| 648 | |
| 649 | |
| 650 | |
| 651 | |
| 652 | |
627 | 653 | /* 0x000 */ |
628 | 654 | |
629 | 655 | case 0x000: case 0x001: case 0x002: case 0x003: |
r244971 | r244972 | |
637 | 663 | /* ok */ op_lmiiy(); break; |
638 | 664 | case 0x020: case 0x021: case 0x022: case 0x023: |
639 | 665 | op_lbm(); break; |
640 | | case 0x030: |
641 | | op_amc(); break; |
642 | 666 | case 0x03c: |
643 | 667 | op_lta(); break; |
644 | 668 | |
645 | 669 | case 0x040: |
646 | 670 | /* ok */ op_lxa(); break; |
647 | | case 0x04b: |
648 | | op_rec(); break; |
649 | 671 | case 0x04f: |
650 | 672 | op_sec(); break; |
651 | 673 | case 0x050: |
r244971 | r244972 | |
751 | 773 | /* ok */ op_rotr(); break; |
752 | 774 | case 0x225: |
753 | 775 | /* ok */ op_rotl(); break; |
754 | | case 0x230: |
755 | | op_smc(); break; |
756 | 776 | case 0x23c: |
757 | 777 | op_lat(); break; |
758 | 778 | |
trunk/src/emu/cpu/hmcs40/hmcs40op.inc
r244971 | r244972 | |
662 | 662 | if (o & 0x100) |
663 | 663 | { |
664 | 664 | // B3 B2 B1 B0 A0 A1 A2 A3 |
665 | | m_a = BITSWAP8((UINT8)o,7,6,5,4,0,1,2,3) & 0xf; |
| 665 | m_a = BITSWAP8(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((UINT8)o,0,1,2,3,4,5,6,7); |
| 671 | o = BITSWAP8(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 | } |