changeset 325:8db584faac4b

Fixed decoding of CHK destination
author Mike Pavone <pavone@retrodev.com>
date Sun, 12 May 2013 01:34:29 -0700
parents 4f2711899866
children d3ff30f32359
files 68kinst.c gentests.py testcases.txt
diffstat 3 files changed, 16 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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')
--- 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)+