示例#1
0
        //Eingelesene Zeile aufteilen in einzelne Komponente fuer Uebersichtlichkeit
        private Befehlszeile parseLine(String sLine, int lineNr)
        {
            Befehlszeile line = new Befehlszeile();

            string[] myStrings = sLine.Split(new Char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

            if (myStrings.Length > 2 && myStrings[0].Length == 4)
            {
                line.PclAsString    = myStrings[0];
                line.Pcl            = int.Parse(myStrings[0], NumberStyles.AllowHexSpecifier);
                line.OpCodeAsString = myStrings[1];
                line.OpCode         = int.Parse(myStrings[1], NumberStyles.AllowHexSpecifier);
                line.State          = "";
                line.LineNr         = lineNr;
                for (int i = 3; i < myStrings.Length; i++)
                {
                    if (myStrings[i].StartsWith(";"))
                    {
                        break;
                    }
                    line.Command += myStrings[i] + " ";
                }

                return(line);
            }

            // zeilennummer + state vorhanden (zeilennummer + kommentare ausschließen)
            if (myStrings.Length == 2 && myStrings[1] != ";")
            {
                line.PclAsString    = "";
                line.Pcl            = 99999;
                line.OpCodeAsString = "";
                line.OpCode         = 99999;
                line.State          = myStrings[1];
                line.Command        = "";
                line.LineNr         = lineNr;

                return(line);
            }

            return(null);
        }
示例#2
0
        //Datei einlesen
        public void readFile()
        {
            Befehlszeile codeLine     = new Befehlszeile();
            StreamReader streamReader = new StreamReader(this.m_sDateiPfad);
            String       sLine        = "";
            int          lineNr       = 0;

            while (sLine != null)
            {
                sLine = streamReader.ReadLine();
                if (sLine != null)
                {
                    codeLine = parseLine(sLine, lineNr);
                    if (codeLine != null)
                    {
                        BefehlszeilenSatz.Instanz.addBefehlszeile(codeLine);
                        lineNr++;
                    }
                }
            }
        }
示例#3
0
 //Befehlszeile zur Befehlszeilen-Liste hinzufuegen
 public void addBefehlszeile(Befehlszeile aLine)
 {
     m_BefehlszeilenList.Add(aLine);
 }
示例#4
0
 //übergibt das aktuelle Kommando zum Auführen an den Decoder
 public void executeCommand(Befehlszeile aCodeLine)
 {
     decodeOpCode(aCodeLine.OpCode);
 }
示例#5
0
        public void LoadCommand(Befehlszeile aktuelleZeile)
        {
            if (aktuelleZeile == null)  // Falls Programm nicht läuft Start-Button = Enable
            {
                InvokeIfRequired(btn_Start, (MethodInvoker) delegate()
                {
                    btn_Start.Enabled = true;
                });
                return;
            }


            //Vorherige Zeile entmarkieren
            InvokeIfRequired(List, (MethodInvoker) delegate()
            {
                if (m_letzteZeile != null)
                {
                    List.Items[m_letzteZeile.LineNr].BackColor = Color.White;
                }
            });
            //Aktuelle Zeile markieren
            InvokeIfRequired(List, (MethodInvoker) delegate()
            {
                List.Items[aktuelleZeile.LineNr].BackColor = Color.LightSkyBlue;
                m_letzteZeile = aktuelleZeile;
                List.EnsureVisible(aktuelleZeile.LineNr);
            });

            //GUI Updaten
            GUI_UPDATE();

            //Auf Breakpoints ueberpruefen
            InvokeIfRequired(List, (MethodInvoker) delegate()
            {
                if (List.Items[aktuelleZeile.LineNr].Checked == true)
                {
                    List.Items[aktuelleZeile.LineNr].Checked = false;
                    btn_Start.Enabled = true;
                    m_tCommandExecutor.Abort();
                    return;
                }
            });

            //TRISA und TRISB zwischenspeichern fuer Latch
            m_oPIC.cachedTrisA = m_oPIC.getRegisterValue(0x85);
            m_oPIC.cachedTrisB = m_oPIC.getRegisterValue(0x86);

            //AssemblerBefehl der aktuellen Zeile ausfuehren
            m_oPIC.executeCommand(aktuelleZeile);

            //Ueberpruefen ob TRISA und TRISB vertauscht wurden (Latch Logik)
            if (m_oPIC.cachedTrisA != m_oPIC.getRegisterValue(0x85))
            {
                m_oPIC.writeLatchToPort(m_oPIC.getRegisterValue(0x85), 0x05, m_oPIC.LatchA);
            }

            if (m_oPIC.cachedTrisB != m_oPIC.getRegisterValue(0x86))
            {
                m_oPIC.writeLatchToPort(m_oPIC.getRegisterValue(0x86), 0x06, m_oPIC.LatchB);
            }

            //Ueberpruefen ob WatchDog an
            if (checkWatchDog)
            {
                m_oPIC.incWatchDog();
            }

            //Taktfrequenz - 250ms warten bis zum naechsten Befehl
            m_oPIC.timeOut(m_oPIC.Speed);

            //Ueberpruefen ob der Schrittmodus aktiv ist
            if (m_oPIC.Step == false)
            {
                //Rekursiver aufruf dieser Funktion ( naechster Schritt)
                LoadCommand(BefehlszeilenSatz.Instanz.getNextBefehlszeile(m_oPIC.ProgramCounter));
            }
            else
            {
                //Anhalten bis Next gedrueckt
                m_tCommandExecutor.Abort();
                return;
            }
        }