Пример #1
0
        public void timerCount(uint cycles)
        {
            RegArrayHandler regArrayHandler = new RegArrayHandler();

            if ((regArrayHandler.getRegArray(0x81) & 0b00001000) == 0)
            {
                if ((regArrayHandler.getRegArray(0x81) & 0b00100000) == 0)
                {
                    Console.WriteLine("Timer mit Befehlstakt erhöht!");
                    if ((DataStorage.prescalerCount + cycles) >= DataStorage.prescalerValue)
                    {
                        if (regArrayHandler.getRegArray(0x01) == 255)
                        {
                            regArrayHandler.setRegArray(0x0B, regArrayHandler.getRegArray(0x0B) | 0b00000100);
                            //triggerInterrupt();
                            regArrayHandler.setRegArray(0x01, 0);
                            DataStorage.prescalerCount = 0;
                        }
                        else
                        {
                            regArrayHandler.setRegArray(0x01, (regArrayHandler.getRegArray(0x01) + 1));
                            DataStorage.prescalerCount = 0;
                        }
                    }
                    else
                    {
                        DataStorage.prescalerCount = DataStorage.prescalerCount + (int)cycles;
                    }
                }
Пример #2
0
 public void checkInterrupt()
 {
     if ((regArrayHandler.getRegArray(0x0B) & 0x80) == 0x80)
     {
         //Timer
         if (((regArrayHandler.getRegArray(0x0B) & 0x20) == 0x20) && ((regArrayHandler.getRegArray(0x0B) & 0x04) == 0x04))
         {
             DataStorage.stack1.SetValueToStck(Pcl.getPCL());
             Pcl.setPCL(0x04 - 1);
             regArrayHandler.setRegArray(0x0B, (regArrayHandler.getRegArray(0x0B) & 0b01111111));
         }
         //RB0
         if (((regArrayHandler.getRegArray(0x0B) & 0x10) == 0x10) && ((regArrayHandler.getRegArray(0x0B) & 0x02) == 0x02))
         {
             DataStorage.stack1.SetValueToStck(Pcl.getPCL());
             Pcl.setPCL(0x04 - 1);
             regArrayHandler.setRegArray(0x0B, (regArrayHandler.getRegArray(0x0B) & 0b01111111));
         }
         //Rb7-4
         if (((regArrayHandler.getRegArray(0x0B) & 0x08) == 0x08) && ((regArrayHandler.getRegArray(0x0B) & 0x01) == 0x01))
         {
             DataStorage.stack1.SetValueToStck(Pcl.getPCL());
             Pcl.setPCL(0x04 - 1);
             regArrayHandler.setRegArray(0x0B, (regArrayHandler.getRegArray(0x0B) & 0b01111111));
         }
     }
 }
Пример #3
0
        public void nextCommand()
        {
            uint oldCycles;
            uint cycleDiff;

            if (PCL.getPCL() < DataStorage.commandList.Count)
            {
                Console.WriteLine(DataStorage.commandList.ElementAt((int)PCL.getPCL()).command);
                oldCycles = DataStorage.cycleCount;

                handleCommand();

                cycleDiff = DataStorage.cycleCount - oldCycles;
                timer0.timerCount(cycleDiff);
                interrupts.checkInterrupt();
                Watchdog.checkWatchdog(cycleDiff);
            }

            regArrayHandler.setRegArray(0x02, PCL.getPCL());
        }
Пример #4
0
        private void FileRegister_CellEditEnding(object sender, System.Windows.Controls.DataGridCellEditEndingEventArgs e)
        {
            var    editingTextBox = e.EditingElement as TextBox;
            string newValue       = editingTextBox.Text;

            if (e.EditAction == DataGridEditAction.Commit)
            {
                if (newValue.Length <= 2)
                {
                    try
                    {
                        byte b = (byte)int.Parse(newValue, System.Globalization.NumberStyles.HexNumber);
                        editingTextBox.Text = b.ToString("X2");
                        regArrayHandler.setRegArray((uint)(e.Row.GetIndex() * 8 + e.Column.DisplayIndex), b);
                        UpdateSFR();
                        UpdateFileRegisterUI();
                        UpdatePin();
                    }
                    catch
                    {
                        e.Cancel = true;
                        (sender as DataGrid).CancelEdit(DataGridEditingUnit.Cell);
                        MessageBox.Show("Invalid hexadecimal value", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
                else
                {
                    e.Cancel = true;
                    (sender as DataGrid).CancelEdit(DataGridEditingUnit.Cell);
                    MessageBox.Show("Only one hexadecimal byte allowed", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
        }
Пример #5
0
        public static void otherReset()
        {
            uint tmr0value   = DataStorage.regArray[0x01];
            uint statusvalue = DataStorage.regArray[0x03] & 0b00000111;
            uint fsrvalue    = DataStorage.regArray[0x04];
            uint portavalue  = DataStorage.regArray[0x05];
            uint portbvalue  = DataStorage.regArray[0x06];
            uint eedatavalue = DataStorage.regArray[0x08];
            uint eeadrvalue  = DataStorage.regArray[0x09];
            uint intconvalue = DataStorage.regArray[0x0B] & 0b00000001;

            initPCL();
            for (int i = 0; i < DataStorage.regArray.Length; i++)
            {
                DataStorage.regArray[i] = 0b00000000;
            }

            regArrayHandler.setRegArray(0x01, tmr0value);
            regArrayHandler.setRegArray(0x03, statusvalue);
            regArrayHandler.setRegArray(0x04, fsrvalue);
            regArrayHandler.setRegArray(0x05, portavalue);
            regArrayHandler.setRegArray(0x06, portbvalue);
            regArrayHandler.setRegArray(0x08, eedatavalue);
            regArrayHandler.setRegArray(0x09, eeadrvalue);
            regArrayHandler.setRegArray(0x0B, intconvalue);
            regArrayHandler.setRegArray(0x81, 0b11111111);
            regArrayHandler.setRegArray(0x85, 0b00011111);
            regArrayHandler.setRegArray(0x86, 0b11111111);
            initStartCounter();
            initWatchdog();
        }