comparison 68kinst.c @ 101:d7789186ba5e

Some fixes to add/addx sub/subx decoding
author Mike Pavone <pavone@retrodev.com>
date Thu, 27 Dec 2012 22:35:26 -0800
parents dd3c680c618c
children 8b50d2c975b2
comparison
equal deleted inserted replaced
100:45cd7d3e7918 101:d7789186ba5e
800 istream = m68k_decode_op(istream, size, &(decoded->src)); 800 istream = m68k_decode_op(istream, size, &(decoded->src));
801 } 801 }
802 } 802 }
803 break; 803 break;
804 case SUB_SUBX: 804 case SUB_SUBX:
805 size = *istream >> 6 & 0x3; 805 size = (*istream >> 6) & 0x3;
806 decoded->op = M68K_SUB; 806 decoded->op = M68K_SUB;
807 if (*istream & 0x100) { 807 if (*istream & 0x100) {
808 //<ea> destination, SUBA.l or SUBX 808 //<ea> destination, SUBA.l or SUBX
809 if (*istream & 0x6) { 809 if (*istream & 0x30 || size == OPSIZE_INVALID) {
810 if (size == OPSIZE_INVALID) { 810 if (size == OPSIZE_INVALID) {
811 //SUBA.l 811 //SUBA.l
812 decoded->extra.size = OPSIZE_LONG; 812 decoded->extra.size = OPSIZE_LONG;
813 decoded->dst.addr_mode = MODE_AREG; 813 decoded->dst.addr_mode = MODE_AREG;
814 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream); 814 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream);
928 istream = m68k_decode_op(istream, decoded->extra.size, &(decoded->src)); 928 istream = m68k_decode_op(istream, decoded->extra.size, &(decoded->src));
929 } 929 }
930 } 930 }
931 break; 931 break;
932 case ADD_ADDX: 932 case ADD_ADDX:
933 size = *istream >> 6 & 0x3; 933 size = (*istream >> 6) & 0x3;
934 decoded->op = M68K_ADD; 934 decoded->op = M68K_ADD;
935 if (*istream & 0x100) { 935 if (*istream & 0x100) {
936 //<ea> destination, ADDA.l or ADDX 936 //<ea> destination, ADDA.l or ADDX
937 if (*istream & 0x6) { 937 if (*istream & 0x30 || size == OPSIZE_INVALID) {
938 if (size == OPSIZE_INVALID) { 938 if (size == OPSIZE_INVALID) {
939 //ADDA.l 939 //ADDA.l
940 decoded->extra.size = OPSIZE_LONG; 940 decoded->extra.size = OPSIZE_LONG;
941 decoded->dst.addr_mode = MODE_AREG; 941 decoded->dst.addr_mode = MODE_AREG;
942 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream); 942 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream);