Пример #1
0
        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);
        }
Пример #2
0
        private opperateResultStruct LDA(short Data)
        {
            Console.WriteLine("CPU: LDA, Data: " + Data);
            opperateResultStruct result = new opperateResultStruct();

            result.result     = Data;
            result.isACCValue = true;
            return(result);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
 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());
     }
 }
Пример #7
0
        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();
             * }*/
        }
Пример #8
0
 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));
         }
     }
 }
Пример #9
0
        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);
        }