def op_8xyE(self): # print("8xyE") x = get_x(self.opcode) y = get_y(self.opcode) self.register[15] = (self.register[x] >> 7) & 0x01 self.register[x] *= 2 if self.register[x] > 255: self.register[x] = self.register[x] & 0xFF
def op_8xy7(self): # print("8xy7") x = get_x(self.opcode) y = get_y(self.opcode) if self.register[y] > self.register[x]: self.register[15] = 1 else: self.register[15] = 0 self.register[x] = (self.register[y] - self.register[x]) & 0xFF
def op_8xy4(self): # print("8xy4") x = get_x(self.opcode) y = get_y(self.opcode) self.register[x] = self.register[y] + self.register[x] if self.register[x] > 255: self.register[x] = self.register[x] & 0xFF self.register[15] = 1 elif self.register[x] <= 255: self.register[15] = 0
def op_Dxyn(self): # print("Dxyn") x = get_x(self.opcode) y = get_y(self.opcode) n = get_n(self.opcode) drawable_chunk = self.get_binary_array(n) for y_index, row in enumerate(drawable_chunk): for x_index, pixel_bit in enumerate(row): current_y, current_x = self.get_coordinates( y, y_index, x, x_index) self.draw_pixel_to_array(pixel_bit, current_y, current_x)
def op_Fx0A(self): # print("Fx0A") x = get_x(self.opcode) not_pressed = True while not_pressed: for event in pygame.event.get(): self.system_relevant_keypress(event) self.game_keydown(event) self.game_keyup(event) for index, key in enumerate(self.keyboard_register): if key: self.register[x] = index not_pressed = False break
def op_Fx07(self): # print("Fx07") x = get_x(self.opcode) self.register[x] = self.delay_timer
def op_ExA1(self): x = get_x(self.opcode) # print("ExA1", f"x={x}", f"register[{x}]={self.register[x]}") if not self.keyboard_register[self.register[x]]: self.pc += 2
def op_Cxkk(self): # print("Cxkk") x = get_x(self.opcode) kk = get_kk(self.opcode) rand = randint(0, 255) self.register[x] = kk & rand
def op_4xkk(self): # print("4xkk") x = get_x(self.opcode) kk = get_kk(self.opcode) if self.register[x] != kk: self.pc += 2
def op_7xkk(self): # print("7xkk") x = get_x(self.opcode) kk = get_kk(self.opcode) self.register[x] = (kk + self.register[x]) & 0xFF
def op_Fx1E(self): # print("Fx1E") x = get_x(self.opcode) self.I_register += self.register[x]
def op_8xy6(self): # print("8xy6") x = get_x(self.opcode) y = get_y(self.opcode) self.register[15] = self.register[x] & 0x01 self.register[x] = self.register[x] >> 1
def op_8xy3(self): # print("8xy3") x = get_x(self.opcode) y = get_y(self.opcode) self.register[x] = self.register[x] ^ self.register[y]
def op_8xy2(self): # print("8xy2") x = get_x(self.opcode) y = get_y(self.opcode) self.register[x] = self.register[x] & self.register[y]
def op_8xy1(self): # print("8xy1") x = get_x(self.opcode) y = get_y(self.opcode) self.register[x] = self.register[x] | self.register[y]
def op_Fx15(self): # print("Fx15") x = get_x(self.opcode) self.delay_timer = self.register[x]
def op_Fx33(self): # print("Fx33") x = get_x(self.opcode) bcd_repr = self.get_binary_decimal(x) for index, number in enumerate(bcd_repr): self.memory[self.I_register + index] = number
def op_Fx18(self): # print("Fx18") x = get_x(self.opcode) self.music_timer = self.register[x]
def op_6xkk(self): x = get_x(self.opcode) kk = get_kk(self.opcode) # print("6xkk", f"x={hex(x)}", f"kk={hex(kk)}") self.register[x] = kk
def op_Fx29(self): # print("Fx29") x = get_x(self.opcode) self.I_register = self.register[x] * 5
def op_9xy0(self): # print("9xy0") x = get_x(self.opcode) y = get_y(self.opcode) if self.register[x] != self.register[y]: self.pc += 2
def op_Fx65(self): # print("Fx65") x = get_x(self.opcode) for index in range(0, x + 1): self.register[index] = self.memory[self.I_register + index]
def op_3xkk(self): x = get_x(self.opcode) kk = get_kk(self.opcode) # print("3xkk", f"x={hex(x)}", f"kk={hex(kk)}") if self.register[x] == kk: self.pc += 2