changeset 227:42123feab62d

Added test cases for divs/divu and added divide by zero handler to test generator
author Mike Pavone <pavone@retrodev.com>
date Sun, 21 Apr 2013 16:44:10 -0700
parents 28a6697e847b
children 1ed81ef2a3a2
files gentests.py testcases.txt
diffstat 2 files changed, 19 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/gentests.py	Sun Apr 21 13:00:34 2013 -0700
+++ b/gentests.py	Sun Apr 21 16:44:10 2013 -0700
@@ -23,10 +23,21 @@
 	
 	def write_rom_test(self, outfile):
 		outfile.write('\tdc.l $0, start\n')
+		needdivzero = self.inst.name.startswith('div')
 		for i in xrange(0x8, 0x100, 0x4):
-			outfile.write('\tdc.l empty_handler\n')
-		outfile.write('\tdc.b "SEGA"\nempty_handler:\n\trte\nstart:\n')
-		outfile.write('\tmove #0, CCR\n')
+			if needdivzero and i == 0x14:
+				outfile.write('\tdc.l div_zero_handler\n')
+			else:
+				outfile.write('\tdc.l empty_handler\n')
+		outfile.write('\tdc.b "SEGA"\nempty_handler:\n\trte\n')
+		if needdivzero:
+			outfile.write('div_zero_handler:\n')
+			div_zero_count = self.get_dreg()
+			outfile.write('\taddq #1, ' + str(div_zero_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')
 		already = {}
 		self.inst.write_init(outfile, already)
 		if 'label' in already:
--- a/testcases.txt	Sun Apr 21 13:00:34 2013 -0700
+++ b/testcases.txt	Sun Apr 21 16:44:10 2013 -0700
@@ -38,7 +38,9 @@
 #mulu	w		d;(a);(a)+;-(a);(n,a);(n,a,x);(n).w;(n).l;#n;(n,pc);(n,pc,x)	d
 #move	bwl		d;a;(a);(a)+;-(a);(n,a);(n,a,x);(n).w;(n).l;#n;(n,pc);(n,pc,x)	d;(a);(a)+;-(a);(n,a);(n,a,x);(n).w;(n).l
 #movea	wl		d;a;(a);(a)+;-(a);(n,a);(n,a,x);(n).w;(n).l;#n;(n,pc);(n,pc,x)	a
-moveq	l		#(-128-127)														d
-roxl	bwl		d;#(1-8)														d
-roxr	bwl		d;#(1-8)														d
+#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