pvbemu/src/desktop/vue/VUE.java

227 lines
8.0 KiB
Java

package vue;
// Template for emulation core implementations
public abstract class VUE {
// Static fields
private static String nativeID = null; // ID of loaded native library
///////////////////////////////////////////////////////////////////////////
// Types //
///////////////////////////////////////////////////////////////////////////
public interface OnException { int call(VUE vue, Ecxeption exp ); }
public interface OnExecute { int call(VUE vue, Instruction inst ); }
public interface OnRead { int call(VUE vue, Access access); }
public interface OnWrite { int call(VUE vue, Access access); }
///////////////////////////////////////////////////////////////////////////
// Constants //
///////////////////////////////////////////////////////////////////////////
// Memory access types
public static final int S8 = 0;
public static final int U8 = 1;
public static final int S16 = 2;
public static final int U16 = 3;
public static final int S32 = 4;
public static final int CANCEL = 5;
// System register indexes
public static final int ADTRE = 25;
public static final int CHCW = 24;
public static final int ECR = 4;
public static final int EIPC = 0;
public static final int EIPSW = 1;
public static final int FEPC = 2;
public static final int FEPSW = 3;
public static final int PIR = 6;
public static final int PSW = 5;
public static final int TKCW = 7;
// Non-standard register indexes
public static final int PC = -1;
public static final int JUMP_FROM = -2;
public static final int JUMP_TO = -3;
// Program register indexes
public static final int GP = 4;
public static final int HP = 2;
public static final int LP = 31;
public static final int SP = 3;
public static final int TP = 5;
// Instruction IDs
public static final int ILLEGAL = -1;
public static final int ADD_IMM = 0;
public static final int ADD_REG = 1;
public static final int ADDF_S = 2;
public static final int ADDI = 3;
public static final int AND = 4;
public static final int ANDBSU = 5;
public static final int ANDI = 6;
public static final int ANDNBSU = 7;
public static final int BCOND = 8;
public static final int CAXI = 9;
public static final int CLI = 10;
public static final int CMP_IMM = 11;
public static final int CMP_REG = 12;
public static final int CMPF_S = 13;
public static final int CVT_SW = 14;
public static final int CVT_WS = 15;
public static final int DIV = 16;
public static final int DIVF_S = 17;
public static final int DIVU = 18;
public static final int HALT = 19;
public static final int IN_B = 20;
public static final int IN_H = 21;
public static final int IN_W = 22;
public static final int JAL = 23;
public static final int JMP = 24;
public static final int JR = 25;
public static final int LD_B = 26;
public static final int LD_H = 27;
public static final int LD_W = 28;
public static final int LDSR = 29;
public static final int MOV_IMM = 30;
public static final int MOV_REG = 31;
public static final int MOVBSU = 32;
public static final int MOVEA = 33;
public static final int MOVHI = 34;
public static final int MPYHW = 35;
public static final int MUL = 36;
public static final int MULF_S = 37;
public static final int MULU = 38;
public static final int NOT = 39;
public static final int NOTBSU = 40;
public static final int OR = 41;
public static final int ORBSU = 42;
public static final int ORI = 43;
public static final int ORNBSU = 44;
public static final int OUT_B = 45;
public static final int OUT_H = 46;
public static final int OUT_W = 47;
public static final int RETI = 48;
public static final int REV = 49;
public static final int SAR_IMM = 50;
public static final int SAR_REG = 51;
public static final int SCH0BSD = 52;
public static final int SCH0BSU = 53;
public static final int SCH1BSD = 54;
public static final int SCH1BSU = 55;
public static final int SEI = 56;
public static final int SETF = 57;
public static final int SHL_IMM = 58;
public static final int SHL_REG = 59;
public static final int SHR_IMM = 60;
public static final int SHR_REG = 61;
public static final int ST_B = 62;
public static final int ST_H = 63;
public static final int ST_W = 64;
public static final int STSR = 65;
public static final int SUB = 66;
public static final int SUBF_S = 67;
public static final int TRAP = 68;
public static final int TRNC_SW = 69;
public static final int XB = 70;
public static final int XH = 71;
public static final int XOR = 72;
public static final int XORBSU = 73;
public static final int XORI = 74;
public static final int XORNBSU = 75;
///////////////////////////////////////////////////////////////////////////
// Static Methods //
///////////////////////////////////////////////////////////////////////////
// Produce an emulation core context
public static VUE create(boolean useNative) {
return !useNative ? new JavaVUE() :
isNativeLoaded() ? new NativeVUE() : null;
}
// Retrieve the ID of the loaded native library, if any
public static String getNativeID() {
return nativeID;
}
// Determine whether the native module is loaded
public static boolean isNativeLoaded() {
return nativeID != null;
}
// Specify the ID of the loaded native library
public static void setNativeID(String nativeID) {
VUE.nativeID = nativeID;
}
///////////////////////////////////////////////////////////////////////////
// Public Methods //
///////////////////////////////////////////////////////////////////////////
// Release any used resources
public abstract void dispose();
// Process the simulation
public abstract int emulate(int maxCycles);
// Evaluate the condition in a breakpoint
public abstract boolean evaluate(Breakpoint brk);
// Retrieve the application break code
public abstract int getBreakCode();
// Retrieve a register value
public abstract int getRegister(int index, boolean system);
// Retrieve a copy of the ROM data
public abstract byte[] getROM();
// Determine whether the context is native-backed
public abstract boolean isNative();
// Read a value from the CPU bus
public abstract int read(int address, int type);
// Read bytes from the CPU bus
public abstract boolean readBytes(int address, byte[] dest, int offset,
int length);
// Initialize all system components
public abstract void reset();
// Specify an exception breakpoint callback
public abstract void setException(OnException callback);
// Specify an execute breakpoint callback
public abstract void setExecute(OnExecute callback);
// Specify a read breakpoint callback
public abstract void setRead(OnRead callback);
// Specify a register value
public abstract int setRegister(int index, boolean system, int value);
// Provide new ROM data
public abstract boolean setROM(byte[] data, int offset, int length);
// Specify a write breakpoint callback
public abstract void setWrite(OnWrite callback);
// Write a value to the CPU bus
public abstract void write(int address, int type, int value);
// Write bytes to the CPU bus
public abstract boolean writeBytes(int address, byte[] src, int offset,
int length);
}