======XOR class====== The XOR class implements a functioning logical XOR gate for use with our CPU simulator. =====XOR() constructor===== XOR myXorGate; ^ Function ^ Parameter(s) ^ Return value | | XOR() | none | pointer/variable instantiation of the newly allocated XOR gate | XOR() is the parameterless constructor that is responsible for creating a new instance of an XOR. =====reset()===== reset() will reset both inputs coming into the XOR to FALSE values. myXorGate.reset(); ^ Function ^ Parameter(s) ^ Return value | | void reset() | no parameters | none | =====set(bool)===== set(bool) will take the parameter and set both inputs to that value. myXorGate.set(true); ^ Function ^ Parameter(s) ^ Return value | | void set() | bool | none | =====set(bool, bool)===== set(bool, bool) will take the parameter and set each input to a unique value. bool a = true; bool b = false; ... myXorGate.set(a, b); ^ Function ^ Parameter(s) ^ Return value | | void set() | bool, bool | none | =====setvalue()===== get() will retrieve the output of the XOR. bool output = myXorGate.get(); ^ Function ^ Parameter(s) ^ Return value | | bool get(int) | none | boolean value of gate's output | \\ **xor.h**\\ #ifndef _XOR_H #define _XOR_H class XOR { public: XOR(); void set(); void set(bool); void set(bool, bool); bool get(); private: bool input1; bool input2; }; #endif \\ **xor.cc**\\ #include "xor.h" XOR::XOR() { input1 = input2 = false; } void XOR::set() { input1 = input2 = false; } void XOR::set(bool value) { input1 = input2 = value; } void XOR::set(bool val1, bool val2) { input1 = val1; input2 = val2; } bool XOR::get() { bool result = false; if ((input1 == true && input2 == false) || (input1 == false && input2 == true)) { result = true; } return (result); } \\ **xortest.cc**\\ #include #include "xor.h" int main() { bool a, b; a = true, b = false; printf("--------------------\n"); printf("TRUE is: %d\n", true); printf("FALSE is: %d\n", false); printf("--------------------\n\n"); XOR myXorGate; printf(" a b | x \n"); printf("-----+---\n"); for(int temp = 0; temp <=3; temp++) { a = temp & 0x02; b = temp & 0x01; //if (temp & 0x2) a = true; //else a = false; //if (temp & 0x01) b = true; //else b = false; ////switch(temp) ////{ //// case 0: //// a = false; //// b = false; //// break; //// case 1: //// a = false; //// b = true; //// break; //// case 2: //// a = true; //// b = false; //// break; //// case 3: //// a = true; //// b = true; //// break; ////} myXorGate.set(a, b); printf(" %d %d | %d\n", a, b, myXorGate.get()); } printf("---------\n"); return(0); } \\ **Makefile**\\ CXX = g++ $(CXXFLAGS) $(INC) CXXFLAGS = -Wall INC = -I ../../include/ SRC = xor.cc OBJ = $(SRC:.cc=.o) all: $(SRC) $(OBJ) debug: CXX += -DDEBUG -g debug: DEBUG = debug debug: $(SRC) $(BIN) .cc.o: ifneq ($(MAKECMDGOALS),debug) @printf "[B] %-20s ... " "$<" @$(CXX) -c $< && echo "OK" || echo "FAIL" else $(CXX) -c $< endif clean: rm -f *.o $(OBJ) core