Program: 5600
Project: 5600
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;
  if (maxCycles > 0) {
    while (cycles < maxCycles && !(emuOP=emulateOP(maxCycles))) {
    }
  }
  if (emuOP) {
    if ((instCtr % 10000007) == 0 && !debug) {
      printCPUSpeed(reg[PC]);
    }
    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) {
    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;
}