public int PC_J() { int[] bus_bits = busModule.busBits; for (int i = bus_bits.Length - 5; i >= 0; i--) { pcBits[i] = bus_bits[i + 4]; if (pcBits[i] == 1) { pcBitGameObj[i].GetComponent <Renderer>().material.SetColor("_Color", Color.green); } else { pcBitGameObj[i].GetComponent <Renderer>().material.SetColor("_Color", Color.white); } } bits = externalFunc.convertIntArrayToInt(bus_bits); return(bits); }
public void RAM_MI() { int bus_bits = externalFunc.convertIntArrayToInt(busModule.busBits); memoryAddress = bus_bits; }
// 4-Bit Adder Logic int arithmeticRegisterContents(int index_reg_A, int index_reg_B, bool add, bool sub) { int reg_A_bits_to_int = externalFunc.convertIntArrayToInt(gameObjRegs[index_reg_A].GetComponent <RegisterModule>().bits); int reg_B_bits_to_int = externalFunc.convertIntArrayToInt(gameObjRegs[index_reg_B].GetComponent <RegisterModule>().bits); int carry = 0; int sum = 0; if (add) { for (int i = 0; i < 8; i++) { bool bit_regA_i = (reg_A_bits_to_int & (1 << i)) != 0; bool bit_regB_i = (reg_B_bits_to_int & (1 << i)) != 0; int bit_A = bit_regA_i == true ? 1 : 0; int bit_B = bit_regB_i == true ? 1 : 0; int res_xor_AB = bit_A ^ bit_B; int res_and_AB = bit_A & bit_B; // Sum if ((res_xor_AB ^ carry) == 1) { sum += 1 * (int)Math.Pow(2, i); // sum += 1 * 2^i carry = 0; } if (((carry & res_xor_AB) ^ res_and_AB) == 1) { carry = 1; } } if (carry == 1) { Debug.Log("Overflow Detected"); } } else if (sub) { carry = 1; // need to carry in one bit for two's compliment for (int i = 0; i < 8; i++) { bool bit_regA_i = (reg_A_bits_to_int & (1 << i)) != 0; bool bit_regB_i = (reg_B_bits_to_int & (1 << i)) != 0; int bit_A = bit_regA_i == true ? 1 : 0; int bit_B = bit_regB_i == true ? 0 : 1; // invert bits for 2's compliment int res_xor_AB = bit_A ^ bit_B; int res_and_AB = bit_A & bit_B; // Sum if ((res_xor_AB ^ carry) == 1) { sum += 1 * (int)Math.Pow(2, i); // sum += 1 * 2^i carry = 0; } if (((carry & res_xor_AB) ^ res_and_AB) == 1) { carry = 1; } } Debug.Log(sum); if (carry == 1) // result of subtraction is positive or zero { Debug.Log("Result of Sub. is positive or zero"); } else { Debug.Log("Value is represented in unsigned interpretation"); Debug.Log("Signed Rep:"); Debug.Log(-256 + sum); } } return(sum); }