Exemplo n.º 1
0
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
Exemplo n.º 2
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
Exemplo n.º 3
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
Exemplo n.º 4
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
Exemplo n.º 5
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