def IZX(cpu: CPU6502): t = cpu.cpu_read(cpu.state.pc) cpu.state.pc += 1 lo = cpu.cpu_read((t + cpu.state.x) & 0x00ff) hi = cpu.cpu_read((t + cpu.state.x + 1) & 0x00ff) cpu.state.addr_abs = (hi << 8) | lo return 0
def IND(cpu: CPU6502): ptr_lo, ptr_hi = cpu.cpu_read_2(cpu.state.pc) cpu.state.pc += 2 ptr = (ptr_hi << 8) | ptr_lo if ptr_lo == 0x00ff: # Simulate page boundary hardware bug cpu.state.addr_abs = ( cpu.cpu_read(ptr & 0xff00) << 8) | cpu.cpu_read(ptr + 0) else: cpu.state.addr_abs = (cpu.cpu_read(ptr + 1) << 8) | cpu.cpu_read(ptr + 0) return 0
def IZY(cpu: CPU6502): t = cpu.cpu_read(cpu.state.pc) cpu.state.pc += 1 lo = cpu.cpu_read(t & 0x00ff) hi = cpu.cpu_read((t + 1) & 0x00ff) addr = ((hi << 8) | lo) + cpu.state.y cpu.state.addr_abs = addr & 0xFFFF if (addr & 0xff00) != (hi << 8): return 1 else: return 0
def REL(cpu: CPU6502): cpu.state.addr_rel = cpu.cpu_read(cpu.state.pc) cpu.state.pc += 1 if cpu.state.addr_rel & 0x80: cpu.state.addr_rel |= 0xff00 return 0
def ZPY(cpu: CPU6502): cpu.state.addr_abs = cpu.cpu_read(cpu.state.pc) + cpu.state.y cpu.state.pc += 1 cpu.state.addr_abs &= 0x00ff return 0