コード例 #1
0
	def parity(res):
		res = funciones.tobin(res, 8)
		cont = res.count('1')
		if ((cont % 2) == 0):
			Z80.changeFlag(2,'1')
		else:
			Z80.changeFlag(2,'0')
コード例 #2
0
	def SCF():
		flag = funciones.tobin(int(Z80.F, 16), 8)
		CY = "1"
		Z80.F = funciones.tohex(int( CY + flag[1:], 2), 8)
		Z80.changeFlag(0, "1") # Cambia a C
		Z80.changeFLag(1, "0") # Cambia a N
		Z80.changeFlag(4, "0") # Cambia a H
		""" >>>>> Banderas afectadas: C = 1, N =0  y H = 0 <<<<< """
コード例 #3
0
	def carry(res):
		res = funciones.tobin(res,16)
		pos = res.find("1")
		res = res[pos:]

		if (len(res) > 8):
			Z80.changeFlag(0,'1')
		else:
			Z80.changeFlag(0,'0')
コード例 #4
0
	def CPL():
		a = list(funciones.tobin(int(Z80.A,16), 8))
		for i in range(0,8):
			if (a[i] == "1"): a[i] = "0"
			else: a[i] = "1"
		Z80.A = funciones.tohex(int(''.join(a),2), 8)
		Z80.changeFlag(1, "1") # Cambia a N
		Z80.changeFlag(4, "1") # Cambia a H
		""" >>>>> Banderas afectadas: N = 1, H = 1 <<<<< """
コード例 #5
0
	def AND(op1, op2):
		a = getattr(Z80, op1)
		s = Z80.obtenerS(op2)
		a = list(funciones.tobin(int(a, 16), 8))
		s = list(funciones.tobin(int(s, 16), 8))
		for i in range(0, 8):
			# Si los caracteres en a y s son distintos, se cambia a 0 en el acumulador (a)
			if (a[i] != s[i]):
				a[i] = "0"
		Z80.A = int(''.join(a), 2)
		# CAMBIAR BANDERAS AQUI
		Z80.changeFlag(0, "0")
		Z80.changeFlag(1, "0")
		Z80.zero(Z80.A)
		Z80.sign(Z80.A)
		Z80.A = funciones.tohex(Z80.A, 8)
		Z80.parity(Z80.A)
		""" >>>>> C = N = 0, Z = S = H = DE ACUERDO A LA OPERACION, P/V = PARIDAD <<<<< """
コード例 #6
0
	def CCF():
		flag = funciones.tobin(int(Z80.F, 16), 8)
		CY = flag [7]
		if (CY == "0"): CY = "1"
		else: CY = "0"
		Z80.F = int( CY + flag[1:], 2)
		# CAMBIAR BANDERAS AQUI
		Z80.carry(Z80.F)
		Z80.changeFlag(1, "0")
		Z80.F = funciones.tohex(Z80.F, 8)
		""" >>>>> C = SE AFECTA DE ACUERDO A LA OPERACION, N = 0, H = DESCONOCIDO <<<<<"""