public int readFromVram() {
        address &= 0x3FFF;
        int data = cachedData;
        if (address >= 0x0000 && address <= 0x1FFF)
            cachedData = bus.readChr(address);
        else if (address >= 0x2000 && address <= 0x2FFF)
            cachedData = readFromNametable(address);
        else if (address >= 0x3000 && address <= 0x3EFF)
            cachedData = readFromNametable(address);
        else if (address >= 0x3F00 && address <= 0x3FFF) {
            data = readFromPalette(address);
        } else {
            //System.out.println(String.format("I/R: %04X", address));
        }

        if ((control & R_CONTROL_VRAM_INC) != 0)
            address += 32;
        else address++;
        return data;
    }