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')
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 <<<<< """
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')
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 <<<<< """
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 <<<<< """
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 <<<<<"""