Esempio n. 1
0
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
Esempio n. 2
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
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
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
Esempio n. 6
0
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
Esempio n. 7
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
Esempio n. 8
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
Esempio n. 9
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
Esempio n. 10
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
Esempio n. 11
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
Esempio n. 12
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
Esempio n. 13
0
def ADC(cpu: CPU6502):
    fetched = cpu.fetch()
    _add(cpu, fetched)
    return 1
Esempio n. 14
0
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
Esempio n. 15
0
def SBC(cpu: CPU6502):
    value = cpu.fetch()
    value = (value & 0xffff) ^ 0x00ff
    _add(cpu, value)
    return 1
Esempio n. 16
0
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
Esempio n. 17
0
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