changeset 2622:adff015dc94f

Implement chk and trapv in new 68K core
author Michael Pavone <pavone@retrodev.com>
date Sat, 22 Feb 2025 19:29:18 -0800
parents ce9386a7b21e
children 07faf0f5466f
files m68k.cpu
diffstat 1 files changed, 49 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/m68k.cpu	Sat Feb 22 01:31:51 2025 -0800
+++ b/m68k.cpu	Sat Feb 22 19:29:18 2025 -0800
@@ -2630,6 +2630,48 @@
 	
 	m68k_prefetch
 
+0100DDDZZ0MMMRRR chk
+	invalid M 1
+	invalid M 7 R 5
+	invalid M 7 R 6
+	invalid M 7 R 7
+	invalid Z 0
+	invalid Z 1
+	local tmp 8
+	local src_alt 32
+	switch Z
+	case 2
+		meta size 2
+	case 3
+		meta size 1
+	end
+	m68k_fetch_src_ea M R size
+	if src_is_mem
+		src_alt = src
+		meta src src_alt
+	end
+	m68k_prefetch
+	cmp dregs.D src size
+	update_flags NZVC
+	tmp = vflag
+	tmp |= nflag
+	cmp 0 dregs.D size
+	update_flags NZV0C0
+	if tmp
+		# D > src (signed)
+		pc -= 2
+		m68k_trap 6
+	else
+		cycles 2
+		if nflag
+			# D < 0
+			pc -= 2
+			m68k_trap 6
+		else
+			cycles 2
+		end
+	end
+
 0100DDD111MMMRRR lea
 	invalid M 0
 	invalid M 1
@@ -2716,6 +2758,13 @@
 	cycles 4
 	m68k_prefetch
 
+0100111001110110 trapv
+	if vflag
+		m68k_trap 7
+	else
+		m68k_prefetch
+	end
+
 0100111001110111 rtr
 	#Read saved CCR
 	scratch1 = a7