Program: 5595
Project: 5595
Buggy source:
public long stepMicros(long jumpMicros,long executeMicros) throws EmulationException {
  if (isRunning()) {
    throw new IllegalStateException("String_Node_Str");
  }
  if (jumpMicros < 0) {
    throw new IllegalArgumentException("String_Node_Str" + jumpMicros);
  }
  if (!microClockReady) {
    System.out.println("String_Node_Str" + cycles);
    lastMicrosCycles=cycles;
    microClockReady=true;
  }
  lastMicrosDelta+=jumpMicros;
  long maxCycles=lastMicrosCycles + (lastMicrosDelta * dcoFrq) / 1000000;
  if (cpuOff) {
    if (maxCycles > nextEventCycles) {
      lastMicrosDelta-=jumpMicros;
      throw new IllegalArgumentException("String_Node_Str" + maxCycles + "String_Node_Str"+ cycles);
    }
  }
 else   if (maxCycles > cycles) {
    lastMicrosDelta-=jumpMicros;
    throw new IllegalArgumentException("String_Node_Str" + maxCycles + "String_Node_Str"+ cycles);
  }
  maxCycles=lastMicrosCycles + ((lastMicrosDelta + executeMicros) * dcoFrq) / 1000000;
  System.out.println("String_Node_Str" + cycles + "String_Node_Str"+ (jumpMicros)+ "String_Node_Str"+ executeMicros+ "String_Node_Str"+ maxCycles);
  if (debug) {
    if (servicedInterrupt >= 0) {
      disAsm.disassemble(reg[PC],memory,reg,servicedInterrupt);
    }
 else {
      disAsm.disassemble(reg[PC],memory,reg);
    }
  }
  boolean emuOP=false;
  while (cycles < maxCycles) {
    if (emuOP=emulateOP(maxCycles)) {
      if (execCounter != null) {
        execCounter[reg[PC]]++;
      }
      if (trace != null) {
        trace[tracePos++]=reg[PC];
        if (tracePos > trace.length)         tracePos=0;
      }
    }
  }
  if (cpuOff) {
    lastReturnedMicros=(1000000 * (nextEventCycles - cycles)) / dcoFrq;
  }
 else {
    lastReturnedMicros=0;
  }
  return lastReturnedMicros;
}

Fixed version (ground truth):
public long stepMicros(long jumpMicros,long executeMicros) throws EmulationException {
  if (isRunning()) {
    throw new IllegalStateException("String_Node_Str");
  }
  if (jumpMicros < 0) {
    throw new IllegalArgumentException("String_Node_Str" + jumpMicros);
  }
  if (!microClockReady) {
    lastMicrosCycles=maxCycles;
  }
  lastMicrosDelta+=jumpMicros;
  if (microClockReady) {
    maxCycles=lastMicrosCycles + (lastMicrosDelta * dcoFrq) / 1000000;
    if (cpuOff) {
      if (maxCycles > nextEventCycles) {
        lastMicrosDelta-=jumpMicros;
        throw new IllegalArgumentException("String_Node_Str" + maxCycles + "String_Node_Str"+ cycles);
      }
    }
 else     if (maxCycles > cycles) {
      lastMicrosDelta-=jumpMicros;
      throw new IllegalArgumentException("String_Node_Str" + maxCycles + "String_Node_Str"+ cycles);
    }
  }
  microClockReady=true;
  maxCycles=lastMicrosCycles + ((lastMicrosDelta + executeMicros) * dcoFrq) / 1000000;
  if (debug) {
    if (servicedInterrupt >= 0) {
      disAsm.disassemble(reg[PC],memory,reg,servicedInterrupt);
    }
 else {
      disAsm.disassemble(reg[PC],memory,reg);
    }
  }
  boolean emuOP=false;
  while (cycles < maxCycles || (cpuOff && (nextEventCycles < cycles))) {
    if (emuOP=emulateOP(maxCycles)) {
      if (execCounter != null) {
        execCounter[reg[PC]]++;
      }
      if (trace != null) {
        if (tracePos > trace.length) {
          tracePos=0;
        }
        trace[tracePos++]=reg[PC];
      }
    }
  }
  if (cpuOff) {
    lastReturnedMicros=(1000000 * (nextEventCycles - cycles)) / dcoFrq;
  }
 else {
    lastReturnedMicros=0;
  }
  if (cycles < maxCycles) {
    throw new RuntimeException("String_Node_Str" + cycles + "String_Node_Str"+ maxCycles);
  }
  if (lastReturnedMicros < 0) {
    throw new RuntimeException("String_Node_Str" + lastReturnedMicros);
  }
  return lastReturnedMicros;
}