private opperateResultStruct SHL(short Data) { Console.WriteLine("CPU: SHL, Data: " + Data); opperateResultStruct result = new opperateResultStruct(); result.result = Convert.ToByte(Convert.ToByte(ACC) << Convert.ToByte(Data)); result.isACCValue = true; return(result); }
private opperateResultStruct LDA(short Data) { Console.WriteLine("CPU: LDA, Data: " + Data); opperateResultStruct result = new opperateResultStruct(); result.result = Data; result.isACCValue = true; return(result); }
private opperateResultStruct DIV(short Data) { Console.WriteLine("CPU: DIV, Data: " + Data); opperateResultStruct result = new opperateResultStruct(); result.result = (short)(ACC / Data); //TODO: Double check this result.isACCValue = true; //setCC(); return(result); }
private opperateResultStruct MUL(short Data) { Console.WriteLine("CPU: MUL, Data: " + Data); opperateResultStruct result = new opperateResultStruct(); result.result = (short)(ACC * Data); //TODO: account for overflow result.isACCValue = true; //setCC(); return(result); }
private opperateResultStruct SUB(short Data) { Console.WriteLine("CPU: SUB, Data: " + Data); opperateResultStruct result = new opperateResultStruct(); result.result = (short)(ACC - Data); result.isACCValue = true; //setCC(); return(result); }
private opperateResultStruct NOTA() { Console.WriteLine("CPU: NOTA"); try { opperateResultStruct result = new opperateResultStruct(); result.result = Convert.ToByte(Convert.ToByte(ACC) ^ 255); result.isACCValue = true; return(result); } catch (System.OverflowException e) { System.Windows.Forms.MessageBox.Show("ACC is not a valid number for NOTA\nExecution Halted"); HLT(); return(new opperateResultStruct()); } }
private opperateResultStruct STA(short Data) { Console.WriteLine("CPU: STA, Data: " + Data); opperateResultStruct result = new opperateResultStruct(); result.location = (byte)Data; result.result = (short)ACC; result.isACCValue = false; return(result); /*try * { * RAM.setDataAt(Convert.ToByte(Data), Convert.ToInt16(ACC)); * } * catch(System.OverflowException e) * { * System.Windows.Forms.MessageBox.Show("ACC does not fit into memory\nExecution Halted"); * HLT(); * }*/ }
public void Execute() { while (!done) { executeEvent.WaitOne(); if (executeRuns) { Console.WriteLine("In Execute"); store.IRInstruction = execute.IRInstruction; store.IRData = execute.IRData; opperateResultStruct result = opperate(execute.IRInstruction, execute.IRData); store.result = result.result; store.location = result.location; store.isACCValue = result.isACCValue; } if (OnExecuteDone != null) { OnExecuteDone(this, new OperationEventArgs(ThreadType.Execute, this.IR)); } } }
public opperateResultStruct opperate(byte Instruction, byte Data) { opperateResultStruct result = new opperateResultStruct(); Console.WriteLine("CPU: Operate: Instruction: " + Instruction + " Data: " + Data); if (Instruction == 0) { NOP(); } else if (Instruction == 128) { result = LDA(Data); } else if (Instruction == 129) { result = LDA(RAM.getDataAt(Data)); } else if (Instruction == 64) { result = STA(Data); } else if (Instruction == 192) { result = ADD(Data); } else if (Instruction == 193) { result = ADD(RAM.getDataAt(Data)); } else if (Instruction == 32) { result = SUB(Data); } else if (Instruction == 33) { result = SUB(RAM.getDataAt(Data)); } else if (Instruction == 144) { result = MUL(Data); } else if (Instruction == 145) { result = MUL(RAM.getDataAt(Data)); } else if (Instruction == 80) { result = DIV(Data); } else if (Instruction == 81) { result = DIV(RAM.getDataAt(Data)); } else if (Instruction == 208) { result = AND(Data); } else if (Instruction == 209) { result = AND(RAM.getDataAt(Data)); } else if (Instruction == 48) { result = OR(Data); } else if (Instruction == 49) { result = OR(RAM.getDataAt(Data)); } else if (Instruction == 176) { result = SHL(Data); } else if (Instruction == 240) { result = NOTA(); } else if (Instruction == 8) { result = BA(Data); } else if (Instruction == 136) { result = BE(Data); } else if (Instruction == 72) { result = BL(Data); } else if (Instruction == 200) { result = BG(Data); } else if (Instruction == 40) { result = BA(Data); } else if (Instruction == 168) { result = HLT(); } else { throw new ArgumentException("Invalid Instruction"); } return(result); }