comparison 68kinst.c @ 1277:78416556ae02

Properly treat invalid addressing modes for PEA/LEA as invalid instructinos
author Michael Pavone <pavone@retrodev.com>
date Mon, 13 Mar 2017 00:23:58 -0700
parents 2a6049dddab0
children af26a1ce92f7
comparison
equal deleted inserted replaced
1276:2d8b9d40f5ea 1277:78416556ae02
654 decoded->op = M68K_LEA; 654 decoded->op = M68K_LEA;
655 decoded->extra.size = OPSIZE_LONG; 655 decoded->extra.size = OPSIZE_LONG;
656 decoded->dst.addr_mode = MODE_AREG; 656 decoded->dst.addr_mode = MODE_AREG;
657 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream); 657 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream);
658 istream = m68k_decode_op(istream, decoded->extra.size, &(decoded->src)); 658 istream = m68k_decode_op(istream, decoded->extra.size, &(decoded->src));
659 if (!istream || decoded->src.addr_mode == MODE_REG) { 659 if (
660 !istream || decoded->src.addr_mode == MODE_REG || decoded->src.addr_mode == MODE_AREG
661 || decoded->src.addr_mode == MODE_AREG_POSTINC || decoded->src.addr_mode == MODE_AREG_PREDEC
662 || decoded->src.addr_mode == MODE_IMMEDIATE
663 ) {
660 decoded->op = M68K_INVALID; 664 decoded->op = M68K_INVALID;
661 break; 665 break;
662 } 666 }
663 } else { 667 } else {
664 if (*istream & 0x100) { 668 if (*istream & 0x100) {
842 } 846 }
843 } else if((*istream & 0x1C0) == 0x40) { 847 } else if((*istream & 0x1C0) == 0x40) {
844 decoded->op = M68K_PEA; 848 decoded->op = M68K_PEA;
845 decoded->extra.size = OPSIZE_LONG; 849 decoded->extra.size = OPSIZE_LONG;
846 istream = m68k_decode_op(istream, OPSIZE_LONG, &(decoded->src)); 850 istream = m68k_decode_op(istream, OPSIZE_LONG, &(decoded->src));
847 if (!istream) { 851 if (
852 !istream || decoded->src.addr_mode == MODE_REG || decoded->src.addr_mode == MODE_AREG
853 || decoded->src.addr_mode == MODE_AREG_POSTINC || decoded->src.addr_mode == MODE_AREG_PREDEC
854 || decoded->src.addr_mode == MODE_IMMEDIATE
855 ) {
848 decoded->op = M68K_INVALID; 856 decoded->op = M68K_INVALID;
849 break; 857 break;
850 } 858 }
851 } 859 }
852 } 860 }