private int readAddress()
    {
        AddressingMode addrMode = OPADDRESSING[readMemory(getLPC())];

        switch (addrMode)
        {
            case Absolute: return readAbsolute(readMemory(getLPC() + 2), readMemory(getLPC() + 1));
            case AbsoluteX: return readAbsoluteX(readMemory(getLPC() + 2), readMemory(getLPC() + 1));
            case AbsoluteY: return readAbsoluteY(readMemory(getLPC() + 2), readMemory(getLPC() + 1));
            case Indirect: return readIndirect(readMemory(getLPC() + 2), readMemory(getLPC() + 1));
            case IndirectX: return readIndirectX(readMemory(getLPC() + 1));
            case IndirectY: return readIndirectY(readMemory(getLPC() + 1));
            case ZeroPage: return readZero(readMemory(getLPC() + 1));
            case ZeroPageX: return readZeroX(readMemory(getLPC() + 1));
            case ZeroPageY: return readZeroY(readMemory(getLPC() + 1));
        }

        return 0;
    }