def INC(cpu: CPU6502): value = cpu.fetch() value += 1 cpu.cpu_write(cpu.state.addr_abs, value & 0xff) cpu.state.set_flag(Flags6502.Z, (value & 0xff) == 0x00) cpu.state.set_flag(Flags6502.N, value & 0x0080) return 0
def LAX(cpu: CPU6502): value = cpu.fetch() & 0xFF cpu.state.a = value cpu.state.x = value cpu.state.set_flag(Flags6502.Z, value == 0x00) cpu.state.set_flag(Flags6502.N, value & 0x80) return 1
def CPY(cpu: CPU6502): fetched = cpu.fetch() temp = cpu.state.y - fetched cpu.state.set_flag(Flags6502.C, cpu.state.y >= fetched) cpu.state.set_flag(Flags6502.Z, (temp & 0x00ff) == 0x00) cpu.state.set_flag(Flags6502.N, temp & 0x80) return 1
def BIT(cpu: CPU6502): fetched = cpu.fetch() temp = cpu.state.a & fetched cpu.state.set_flag(Flags6502.Z, (temp & 0x00FF) == 0x00) cpu.state.set_flag(Flags6502.N, fetched & (1 << 7)) cpu.state.set_flag(Flags6502.V, fetched & (1 << 6)) return 0
def CMP(cpu: CPU6502): fetched = cpu.fetch() temp = cpu.state.a - fetched cpu.state.set_flag(Flags6502.C, (cpu.state.a & 0xFF) >= fetched) cpu.state.set_flag(Flags6502.Z, (temp & 0x00ff) == 0x00) cpu.state.set_flag(Flags6502.N, temp & 0x80) return 1
def RRA(cpu: CPU6502): m = cpu.fetch() carry = m & 0x01 m = (cpu.state.get_flag(Flags6502.C) << 7) | (m >> 1) m &= 0xFF cpu.state.set_flag(Flags6502.C, carry) _add(cpu, m) cpu.cpu_write(cpu.state.addr_abs, m & 0xFF) return 0
def RLA(cpu: CPU6502): fetched = cpu.fetch() & 0XFF fetched = (fetched << 1) | cpu.state.get_flag(Flags6502.C) cpu.state.set_flag(Flags6502.C, fetched & 0xFF00) cpu.state.a = cpu.state.a & fetched cpu.state.set_flag(Flags6502.Z, cpu.state.a == 0x00) cpu.state.set_flag(Flags6502.N, cpu.state.a & 0x80) cpu.cpu_write(cpu.state.addr_abs, fetched & 0xFF) return 0
def SLO(cpu: CPU6502): m = cpu.fetch() & 0xFF m <<= 1 cpu.state.a |= (m & 0xff) cpu.state.set_flag(Flags6502.C, m & 0xFF00) cpu.state.set_flag(Flags6502.Z, cpu.state.a == 0x00) cpu.state.set_flag(Flags6502.N, cpu.state.a & 0x80) cpu.cpu_write(cpu.state.addr_abs, m & 0xFF) return 0
def SRE(cpu: CPU6502): m = cpu.fetch() & 0xFF cpu.state.set_flag(Flags6502.C, m & 0x01) m = (m >> 1) & 0xFF cpu.state.a ^= m cpu.state.set_flag(Flags6502.Z, cpu.state.a == 0x00) cpu.state.set_flag(Flags6502.N, cpu.state.a & 0x80) cpu.cpu_write(cpu.state.addr_abs, m & 0xFF) return 0
def LSR(cpu: CPU6502): fetched = cpu.fetch() & 0xFF cpu.state.set_flag(Flags6502.C, fetched & 0x01) fetched = (fetched >> 1) & 0xFF cpu.state.set_flag(Flags6502.Z, fetched == 0x00) cpu.state.set_flag(Flags6502.N, 0) if lookup[cpu.state.opcode].addr_mode == IMP: cpu.state.a = fetched else: cpu.cpu_write(cpu.state.addr_abs, fetched) return 0
def ROL(cpu: CPU6502): fetched = cpu.fetch() & 0XFF fetched = (fetched << 1) | cpu.state.get_flag(Flags6502.C) cpu.state.set_flag(Flags6502.C, fetched & 0xFF00) fetched &= 0xFF cpu.state.set_flag(Flags6502.Z, fetched == 0x00) cpu.state.set_flag(Flags6502.N, fetched & 0x80) if lookup[cpu.state.opcode].addr_mode == IMP: cpu.state.a = fetched else: cpu.cpu_write(cpu.state.addr_abs, fetched) return 0
def ROR(cpu: CPU6502): fetched = cpu.fetch() carry = fetched & 0x01 fetched = (cpu.state.get_flag(Flags6502.C) << 7) | (fetched >> 1) fetched &= 0xFF cpu.state.set_flag(Flags6502.C, carry) cpu.state.set_flag(Flags6502.Z, fetched == 0x00) cpu.state.set_flag(Flags6502.N, fetched & 0x80) if lookup[cpu.state.opcode].addr_mode == IMP: cpu.state.a = fetched else: cpu.cpu_write(cpu.state.addr_abs, fetched) return 0
def ADC(cpu: CPU6502): fetched = cpu.fetch() _add(cpu, fetched) return 1
def LDY(cpu: CPU6502): cpu.state.y = cpu.fetch() & 0xFF cpu.state.set_flag(Flags6502.Z, cpu.state.y == 0x00) cpu.state.set_flag(Flags6502.N, cpu.state.y & 0x80) return 1
def SBC(cpu: CPU6502): value = cpu.fetch() value = (value & 0xffff) ^ 0x00ff _add(cpu, value) return 1
def AND(cpu: CPU6502): fetched = cpu.fetch() cpu.state.a = cpu.state.a & fetched cpu.state.set_flag(Flags6502.Z, cpu.state.a == 0x00) cpu.state.set_flag(Flags6502.N, cpu.state.a & 0x80) return 1
def ORA(cpu: CPU6502): m = cpu.fetch() cpu.state.a |= (m & 0xff) cpu.state.set_flag(Flags6502.Z, cpu.state.a == 0x00) cpu.state.set_flag(Flags6502.N, cpu.state.a & 0x80) return 1