diff cpu_dsl.py @ 1725:89ee53a149ea

Miscellaneous small fixes to new Z80 core
author Michael Pavone <pavone@retrodev.com>
date Fri, 01 Feb 2019 22:16:56 -0800
parents b757ebc59851
children b0e01e64d76d
line wrap: on
line diff
--- a/cpu_dsl.py	Thu Jan 31 23:55:09 2019 -0800
+++ b/cpu_dsl.py	Fri Feb 01 22:16:56 2019 -0800
@@ -258,9 +258,30 @@
 		self.outOp = (2,)
 		return self
 	def cUnaryOperator(self, op):
-		def _impl(prog, params):
-			return '\n\t{dst} = {op}{a};'.format(
-				dst = params[1], a = params[0], op = op
+		def _impl(prog, params, rawParams, flagUpdates):
+			dst = params[1]
+			decl = ''
+			if op == '-':
+				if flagUpdates:
+					for flag in flagUpdates:
+						calc = prog.flags.flagCalc[flag]
+						if calc == 'carry':
+							needsCarry = True
+						elif calc == 'half-carry':
+							needsHalf = True
+						elif calc == 'overflow':
+							needsOflow = True
+				if needsCarry or needsOflow or needsHalf:
+					size = prog.paramSize(rawParams[1])
+					if needsCarry:
+						size *= 2
+					decl,name = prog.getTemp(size)
+					dst = prog.carryFlowDst = name
+					prog.lastA = 0
+					prog.lastB = params[0]
+					prog.lastBFlow = params[0]
+			return decl + '\n\t{dst} = {op}{a};'.format(
+				dst = dst, a = params[0], op = op
 			)
 		self.impls['c'] = _impl
 		self.outOp = (1,)