// Path: se/sics/mspsim/core/EmulationLogger.java
// public enum WarningType {
//     EMULATION_ERROR, EXECUTION,
//     MISALIGNED_READ, MISALIGNED_WRITE,
//     ADDRESS_OUT_OF_BOUNDS_READ, ADDRESS_OUT_OF_BOUNDS_WRITE,
//     ILLEGAL_IO_WRITE, VOID_IO_READ, VOID_IO_WRITE
// };


import se.sics.mspsim.core.EmulationLogger.WarningType;
          StateChangeListener listener = stateListener;
          if (listener != null) {
              listener.stateChanged(this, oldState, ioState);
          }
      }
  }
  
  public void reset(int type) {
  }

  // write
  // write a value to the IO unit
  public abstract void write(int address, int value, boolean word, long cycles);

  // read
  // read a value from the IO unit
  public abstract int read(int address, boolean word, long cycles);

  public String getID() {
      return id;
  }

  public String getName() {
      return name;
  }
  
  protected void log(String msg) {
      logger.log(this, msg);
  }

// Path: se/sics/mspsim/core/EmulationLogger.java
// public enum WarningType {
//     EMULATION_ERROR, EXECUTION,
//     MISALIGNED_READ, MISALIGNED_WRITE,
//     ADDRESS_OUT_OF_BOUNDS_READ, ADDRESS_OUT_OF_BOUNDS_WRITE,
//     ILLEGAL_IO_WRITE, VOID_IO_READ, VOID_IO_WRITE
// };


// Path: se/sics/mspsim/core/IOUnit.java
import se.sics.mspsim.core.EmulationLogger.WarningType;

          StateChangeListener listener = stateListener;
          if (listener != null) {
              listener.stateChanged(this, oldState, ioState);
          }
      }
  }
  
  public void reset(int type) {
  }

  // write
  // write a value to the IO unit
  public abstract void write(int address, int value, boolean word, long cycles);

  // read
  // read a value from the IO unit
  public abstract int read(int address, boolean word, long cycles);

  public String getID() {
      return id;
  }

  public String getName() {
      return name;
  }
  
  protected void log(String msg) {
      logger.log(this, msg);
  }

  protected void logw(WarningType type, String msg) {