public void callGlkFunc(AdressModeData[] data) { int id = data[0].read(); int numargs = data[1].read(); int[] args = new int[numargs]; for (int i=0; i<args.Length; ++i) { args[i] = reader.pull(); } glkFunctionData dat = getData(id); data[2].write(dat.call(args)); }
public static void negate(AdressModeData[] values) { values[1].write(-values[0].read()); }
public static void multiply(AdressModeData[] values) { values[2].write(values[0].read() * values[1].read()); }
public static void modulus(AdressModeData[] values) { values[2].write(values[0].read() % values[1].read()); }
public static void devide(AdressModeData[] values) { values[2].write(values[0].read() / values[1].read()); }
public static void copy(AdressModeData[] values) { values[1].write(values[0].read()); }
public static void bitxor(AdressModeData[] values) { values[2].write(values[0].read() ^ values[1].read()); }
public static void bitshiftr(AdressModeData[] values) { values[2].write(values[0].read() >> values[1].read()); }
public static void bitnot(AdressModeData[] values) { values[1].write(values[0].read()^-1); }
public static void add(AdressModeData[] values) { values[2].write(values[0].read() + values[1].read()); }
public static void substract(AdressModeData[] values) { values[2].write(values[0].read() - values[1].read()); }
void setIOSystem(AdressModeData[] values) { ioSysData.system = (IOsys)values[0].read(); ioSysData.rock = values[1].read(); }
AdressModeData[] getAddrData(OpcodeData data, int startPos, bool setParsePos) { int inputv = data.numInVariables; int outputv = data.numOutVariables; AdressModeBase[] output = new AdressModeBase[inputv + outputv]; int parseIndex=0; for (int k = 0; k < (inputv + outputv); k++) //I is set elsewhere { parseIndex = (k) / 2; byte value; if (k % 2 == 0) { value = (byte)(mainMemory[parseIndex + startPos]%16); } else { value = (byte)(mainMemory[parseIndex + startPos] / 16); } output[k] = getAddrBase(value); } parseIndex = (inputv + outputv + 1) / 2; List<byte>[] values = new List<byte>[output.Length]; for (int k=0; k<values.Length; k++) { values[k] = new List<byte>(); } int j=0; foreach (AdressModeBase addrb in output) { for (int k=0; k < addrb.numBytes; k++) { values[j].Add(mainMemory[parseIndex + startPos]); parseIndex += 1; } j += 1; } AdressModeData[] newOutput = new AdressModeData[output.Length]; for (int k=0; k<output.Length; k++) { newOutput[k] = new AdressModeData(output[k], values[k].ToArray(), k >= inputv); } if (setParsePos) { parsePos = parseIndex + startPos; } return newOutput; }
void doNothing2(AdressModeData[] data) { }
public void execute(AdressModeData[] data) { executer(data); }