# HG changeset patch # User Mike Pavone # Date 1368347669 25200 # Node ID 8db584faac4b0466c8719cd28ec734529716a52e # Parent 4f2711899866fb034ae9318c0fddc5ea9fad121b Fixed decoding of CHK destination diff -r 4f2711899866 -r 8db584faac4b 68kinst.c --- a/68kinst.c Sun May 12 01:34:17 2013 -0700 +++ b/68kinst.c Sun May 12 01:34:29 2013 -0700 @@ -480,7 +480,7 @@ #endif } decoded->dst.addr_mode = MODE_REG; - decoded->dst.addr_mode = m68k_reg_quick_field(*istream); + decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream); istream = m68k_decode_op(istream, decoded->extra.size, &(decoded->src)); if (!istream) { decoded->op = M68K_INVALID; diff -r 4f2711899866 -r 8db584faac4b gentests.py --- a/gentests.py Sun May 12 01:34:17 2013 -0700 +++ b/gentests.py Sun May 12 01:34:29 2013 -0700 @@ -24,9 +24,12 @@ def write_rom_test(self, outfile): outfile.write('\tdc.l $0, start\n') needdivzero = self.inst.name.startswith('div') + needchk = self.inst.name.startswith('chk') for i in xrange(0x8, 0x100, 0x4): if needdivzero and i == 0x14: outfile.write('\tdc.l div_zero_handler\n') + elif needchk and i == 0x18: + outfile.write('\tdc.l chk_handler\n') else: outfile.write('\tdc.l empty_handler\n') outfile.write('\tdc.b "SEGA"\nempty_handler:\n\trte\n') @@ -35,6 +38,11 @@ div_zero_count = self.get_dreg() outfile.write('\taddq #1, ' + str(div_zero_count) + '\n') outfile.write('\trte\n') + if needchk: + outfile.write('chk_handler:\n') + chk_count = self.get_dreg() + outfile.write('\taddq #1, ' + str(chk_count) + '\n') + outfile.write('\trte\n') outfile.write('start:\n\tmove #0, CCR\n') if needdivzero: outfile.write('\tmoveq #0, ' + str(div_zero_count) + '\n') diff -r 4f2711899866 -r 8db584faac4b testcases.txt --- a/testcases.txt Sun May 12 01:34:17 2013 -0700 +++ b/testcases.txt Sun May 12 01:34:29 2013 -0700 @@ -41,6 +41,11 @@ #moveq l #(-128-127) d #roxl bwl d;#(1-8) d #roxr bwl d;#(1-8) d -divs w d;(a);(a)+;-(a);(n,a);(n,a,x);(n).w;(n).l;#n;(n,pc);(n,pc,x) d -divu w d;(a);(a)+;-(a);(n,a);(n,a,x);(n).w;(n).l;#n;(n,pc);(n,pc,x) d +#divs w d;(a);(a)+;-(a);(n,a);(n,a,x);(n).w;(n).l;#n;(n,pc);(n,pc,x) d +#divu w d;(a);(a)+;-(a);(n,a);(n,a,x);(n).w;(n).l;#n;(n,pc);(n,pc,x) d +chk w d;(a);(a)+;-(a);(n,a);(n,a,x);(n).w;(n).l;#n;(n,pc);(n,pc,x) d +cmp bwl d;a;(a);(a)+;-(a);(n,a);(n,a,x);(n).w;(n).l;#n;(n,pc);(n,pc,x) d +cmpa wl d;a;(a);(a)+;-(a);(n,a);(n,a,x);(n).w;(n).l;#n;(n,pc);(n,pc,x) a +cmpi bwl #n d;(a);(a)+;-(a);(n,a);(n,a,x);(n).w;(n).l +cmpm bwl (a)+ (a)+