Mercurial > repos > blastem
changeset 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 | 2d8b9d40f5ea |
children | 34d3cb05014d |
files | 68kinst.c |
diffstat | 1 files changed, 10 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/68kinst.c Thu Mar 09 23:50:46 2017 -0800 +++ b/68kinst.c Mon Mar 13 00:23:58 2017 -0700 @@ -656,7 +656,11 @@ decoded->dst.addr_mode = MODE_AREG; decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream); istream = m68k_decode_op(istream, decoded->extra.size, &(decoded->src)); - if (!istream || decoded->src.addr_mode == MODE_REG) { + if ( + !istream || decoded->src.addr_mode == MODE_REG || decoded->src.addr_mode == MODE_AREG + || decoded->src.addr_mode == MODE_AREG_POSTINC || decoded->src.addr_mode == MODE_AREG_PREDEC + || decoded->src.addr_mode == MODE_IMMEDIATE + ) { decoded->op = M68K_INVALID; break; } @@ -844,7 +848,11 @@ decoded->op = M68K_PEA; decoded->extra.size = OPSIZE_LONG; istream = m68k_decode_op(istream, OPSIZE_LONG, &(decoded->src)); - if (!istream) { + if ( + !istream || decoded->src.addr_mode == MODE_REG || decoded->src.addr_mode == MODE_AREG + || decoded->src.addr_mode == MODE_AREG_POSTINC || decoded->src.addr_mode == MODE_AREG_PREDEC + || decoded->src.addr_mode == MODE_IMMEDIATE + ) { decoded->op = M68K_INVALID; break; }