Mercurial > repos > blastem
comparison 68kinst.c @ 136:e64554246d11
Fix some bugs in decoding cmp
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 30 Dec 2012 18:40:33 -0800 |
parents | ab50421b1b7a |
children | 18796a3b0fe2 |
comparison
equal
deleted
inserted
replaced
135:a81c548cf353 | 136:e64554246d11 |
---|---|
845 //CMPM or CMPA.l or EOR | 845 //CMPM or CMPA.l or EOR |
846 if (size == OPSIZE_INVALID) { | 846 if (size == OPSIZE_INVALID) { |
847 decoded->extra.size = OPSIZE_LONG; | 847 decoded->extra.size = OPSIZE_LONG; |
848 decoded->dst.addr_mode = MODE_AREG; | 848 decoded->dst.addr_mode = MODE_AREG; |
849 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream); | 849 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream); |
850 istream = m68k_decode_op(istream, size, &(decoded->src)); | 850 istream = m68k_decode_op(istream, decoded->extra.size, &(decoded->src)); |
851 } else { | 851 } else { |
852 istream = m68k_decode_op(istream, size, &(decoded->dst)); | 852 istream = m68k_decode_op(istream, size, &(decoded->dst)); |
853 if (decoded->src.addr_mode == MODE_AREG) { | 853 if (decoded->src.addr_mode == MODE_AREG) { |
854 //CMPM | 854 //CMPM |
855 decoded->src.addr_mode = decoded->dst.addr_mode = MODE_AREG_POSTINC; | 855 decoded->src.addr_mode = decoded->dst.addr_mode = MODE_AREG_POSTINC; |
871 } else { | 871 } else { |
872 decoded->extra.size = size; | 872 decoded->extra.size = size; |
873 decoded->dst.addr_mode = MODE_REG; | 873 decoded->dst.addr_mode = MODE_REG; |
874 } | 874 } |
875 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream); | 875 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream); |
876 istream = m68k_decode_op(istream, size, &(decoded->src)); | 876 istream = m68k_decode_op(istream, decoded->extra.size, &(decoded->src)); |
877 } | 877 } |
878 break; | 878 break; |
879 case AND_MUL_ABCD_EXG: | 879 case AND_MUL_ABCD_EXG: |
880 //page 575 for summary | 880 //page 575 for summary |
881 //EXG opmodes: | 881 //EXG opmodes: |