@Override
	public void executeInstruction(boolean stopAtBreakpoint, TaskMonitor monitor)
			throws CancelledException, LowlevelError, InstructionDecodeException {
		if (!(lastError == null || lastError instanceof InterruptPcodeExecutionException)) {
			throw lastError;
		}
		try {
			emu.setSoftwareInterruptMode(stopAtBreakpoint ? SwiMode.ACTIVE : SwiMode.IGNORE_ALL);
			isExecuting = true;
			if (thread.getFrame() != null) {
				thread.finishInstruction();
			}
			else {
				thread.stepInstruction();
			}
			lastError = null;
		}
		catch (RuntimeException e) {
			lastError = e;
		}
		finally {
			emu.setSoftwareInterruptMode(SwiMode.ACTIVE);
			isExecuting = false;
		}
	}
An adapter to keep track of the filter chain

<p>
We don't actually invoke this adapter's set/getChunk methods. Instead, we just use it to
track what filters are installed. The {@link AdaptedBytesPcodeExecutorState} will invoke the
filter chain and then perform the read or write itself.
Ghidra/Framework/Emulation/src/main/java/ghidra/app/emulator/AdaptedEmulator.java