public void executeInstruction() throws ProgramException {
        short instruction = rom.getValueAt(PC.get());
        boolean pcChanged = false;

        if ((instruction & 0x8000) == 0)
            bus.send(rom, PC.get(), A, 0);
        else if ((instruction & 0xe000) == 0xe000) {
            computeExp(instruction);
            setDestination(instruction);
            pcChanged = checkJump(instruction);
        }
        else if (instruction != AssemblyTranslator.NOP)
            throw new ProgramException("At line " + PC.get() +
									   ": Illegal instruction");

        if (!pcChanged) {
            short newPC = (short)(PC.get() + 1);
            if (newPC < 0 || newPC >= Definitions.ROM_SIZE)
                throw new ProgramException("At line " + PC.get() +
										   ": Can't continue past last line");
            PC.setValueAt(0, newPC, true);
        }

        time++;
    }