package dcpu; public class DcpuConstants { public static final int REG_A = 0; public static final int REG_B = 1; public static final int REG_C = 2; public static final int REG_X = 3; public static final int REG_Y = 4; public static final int REG_Z = 5; public static final int REG_I = 6; public static final int REG_J = 7; public static final int GP_REG_COUNT = 8; public static int INDIRECT(int reg) { return reg+0x8; } public static int INDIRECT_OFFSET(int reg) { return reg+0x10; } public static final int PUSH = 0x18; public static final int POP = 0x18; public static final int PUSHPOP = 0x18; public static final int PEEK = 0x19; public static final int PICK = 0x1a; public static final int SP = 0x1b; public static final int PC = 0x1c; public static final int EX = 0x1d; public static final int LIT_IND = 0x1e; public static final int LONG_LIT = 0x1f; public static final int SHORT_LIT_MIN = -1; public static final int SHORT_LIT_MAX = 30; public static int SHORT_LIT(int lit) { return lit+0x21; } public static final int ADV = 0x00; public static final int SET = 0x01; public static final int ADD = 0x02; public static final int SUB = 0x03; public static final int MUL = 0x04; public static final int MLI = 0x05; public static final int DIV = 0x06; public static final int DVI = 0x07; public static final int MOD = 0x08; public static final int MDI = 0x09; public static final int AND = 0x0a; public static final int BOR = 0x0b; public static final int XOR = 0x0c; public static final int SHR = 0x0d; public static final int ASR = 0x0e; public static final int SHL = 0x0f; public static final int IFB = 0x10; public static final int IFC = 0x11; public static final int IFE = 0x12; public static final int IFN = 0x13; public static final int IFG = 0x14; public static final int IFA = 0x15; public static final int IFL = 0x16; public static final int IFU = 0x17; public static final int ADX = 0x1a; public static final int SBX = 0x1b; public static final int NOOP1=0x1c; public static final int NOOP2=0x1d; public static final int STI = 0x1e; public static final int STD = 0x1f; public static final int JSR = 0x01; public static final int ADVNOOP0=0x02; public static final int ADVNOOP1=0x03; public static final int ADVNOOP2=0x04; public static final int ADVNOOP3=0x05; public static final int ADVNOOP4=0x06; public static final int WFI = 0x07; public static final int INT = 0x08; public static final int IAG = 0x09; public static final int IAS = 0x0a; public static final int RFI = 0x0b; public static final int IAQ = 0x0c; public static final int ADVNOOP6=0x0c; public static final int ADVNOOP7=0x0d; public static final int ADVNOOP8=0x0e; public static final int ADVNOOP9=0x0f; public static final int HWN = 0x10; public static final int HWQ = 0x11; public static final int HWI = 0x12; public static final int ADVNOOPa=0x13; public static final int ADVNOOPb=0x14; public static final int ADVNOOPc=0x15; public static final int ADVNOOPd=0x16; public static final int ADVNOOPe=0x17; public static final int ADVNOOPf=0x18; public static final int ADVNOOP10=0x19; public static final int ADVNOOP11=0x1a; public static final int ADVNOOP12=0x1b; public static final int ADVNOOP13=0x1c; public static final int ADVNOOP14=0x1d; public static final int ADVNOOP15=0x1e; public static final int ADVNOOP16=0x1f; public static boolean IS_IF(int val) { return (val>=IFB && val <=IFU); } public static char ASSEMBLE(int op, int b, int a) { return (char)(op | (b << 5) | (a<<10)); } public static int sign_extend(char c) { return (c & 0x8000) != 0 ? 0xFFFF0000 | c : c; } public static Dcpu mkcpu(int...init_memory) { Dcpu d = new Dcpu(); for (int i=0; i<init_memory.length; i++) { d.memory.set((char)i, (char)init_memory[i]); } return d; } }