Пример #1
0
        public static void XORWF(string commandAsString)
        {
            int    myLiteralAsNum = Convert.ToInt32(commandAsString, 16); // string zu int konvertieren
            string binary         = Convert.ToString(myLiteralAsNum, 2);  // int zu Binärstring konvertieren
            string fLiteralbinary = binary.Substring(4, 7);               //Argument, Adresse f auslesen
            string dLiteralbinary = binary.Substring(3, 1);               // Argument d auslesen ob 1 oder 0

            int  fAsInt           = Convert.ToInt32(fLiteralbinary, 2);   //Binäradresse wird als Int gespeichert
            byte fAsByteUnchecked = Convert.ToByte(fAsInt);

            byte fAsByte = CheckIndirectAddressing(fAsByteUnchecked); //Indirekte Adressierung wird überprüft

            byte w     = Registerspeicher.W;
            byte fWert = Registerspeicher.getRegisterWert(fAsByte);

            byte result = (byte)(w ^ fWert); //W wird mit f verodert

            if (dLiteralbinary == "0")
            {
                Registerspeicher.W = result;
            }
            else if (dLiteralbinary == "1")
            {
                Registerspeicher.setRegisterWert(fAsByte, result);
            }
            else
            {
                MessageBox.Show("Problem COMF - d is not defined");
            }
            Registerspeicher.SetZeroFlag(result);
        }
Пример #2
0
        public static void SUBWF(string commandAsString)
        {
            int    myLiteralAsNum = Convert.ToInt32(commandAsString, 16); // string zu int konvertieren
            string binary         = Convert.ToString(myLiteralAsNum, 2);  // int zu Binärstring konvertieren
            string fLiteralbinary = binary.Substring(3, 7);               //Argument, Adresse f auslesen
            string dLiteralbinary = binary.Substring(2, 1);               // Argument d auslesen ob 1 oder 0

            int  fAsInt           = Convert.ToInt32(fLiteralbinary, 2);   //Binäradresse wird als Int gespeichert
            byte fAsByteUnchecked = Convert.ToByte(fAsInt);

            byte fAsByte = CheckIndirectAddressing(fAsByteUnchecked); //Indirekte Adressierung wird überprüft

            var fWertvar   = Registerspeicher.getRegisterWert(fAsByte);
            var w          = Registerspeicher.W;
            var resultTemp = (ushort)(fWertvar - w);
            var result     = (byte)resultTemp;

            if (dLiteralbinary == "0")
            {
                Registerspeicher.W = result;
            }
            else if (dLiteralbinary == "1")
            {
                Registerspeicher.setRegisterWert(fAsByte, result);
            }
            else
            {
                MessageBox.Show("Problem SUBWF - d is not defined");
            }
            Registerspeicher.SetZeroFlag(result);
            Registerspeicher.SetCarryFlag(resultTemp, true);
            Registerspeicher.SetDigitCarryFlag((byte)((fWertvar & 0xF) - (w & 0xF)), true);
        }
Пример #3
0
        public static void BSF(string commandAsString)
        {
            int    myLiteralAsNum = Convert.ToInt32(commandAsString, 16); // string zu int konvertieren
            string binary         = Convert.ToString(myLiteralAsNum, 2);  // int zu Binärstring konvertieren
            string fLiteralbinary = binary.Substring(6, 7);               //Argument, Adresse f auslesen
            string bLiteralbinary = binary.Substring(3, 3);               // Argument d auslesen ob 1 oder 0

            int  fAsInt           = Convert.ToInt32(fLiteralbinary, 2);   //Binäradresse wird als Int gespeichert
            byte fAsByteUnchecked = Convert.ToByte(fAsInt);

            byte fAsByte = CheckIndirectAddressing(fAsByteUnchecked); //Indirekte Adressierung wird überprüft

            byte fWert = Registerspeicher.getRegisterWert(fAsByte);

            int  bAsInt = Convert.ToInt32(bLiteralbinary, 2); //B-binär wird als Int gespeichert
            byte result = 0;

            if (bAsInt == 0)
            {
                result = (byte)(fWert | 0x01);
            }
            else if (bAsInt == 1)
            {
                result = (byte)(fWert | 0x02);
            }
            else if (bAsInt == 2)
            {
                result = (byte)(fWert | 0x04);
            }
            else if (bAsInt == 3)
            {
                result = (byte)(fWert | 0x08);
            }
            else if (bAsInt == 4)
            {
                result = (byte)(fWert | 0x10);
            }
            else if (bAsInt == 5)
            {
                result = (byte)(fWert | 0x20);
            }
            else if (bAsInt == 6)
            {
                result = (byte)(fWert | 0x40);
            }
            else if (bAsInt == 7)
            {
                result = (byte)(fWert | 0x80);
            }
            else
            {
                MessageBox.Show("Problem BSF - b is not defined");
            }
            Registerspeicher.setRegisterWert(fAsByte, result);
        }
Пример #4
0
        public static void MOVWF(string commandAsString)
        {
            int    myLiteralAsNum  = Convert.ToInt32(commandAsString, 16); // string zu int konvertieren
            string binary          = Convert.ToString(myLiteralAsNum, 2);  // int zu Binärstring konvertieren
            string myLiteralbinary = binary.Substring(1, 7);               //Argument, Adresse f auslesen

            int  addressToGo      = Convert.ToInt32(myLiteralbinary, 2);   //Binäradresse wird als Int gespeichert
            byte fAsByteUnchecked = Convert.ToByte(addressToGo);

            byte fAsByte = CheckIndirectAddressing(fAsByteUnchecked); //Indirekte Adressierung wird überprüft

            Registerspeicher.setRegisterWert(fAsByte, Registerspeicher.W);
        }
Пример #5
0
        public static void RRF(string commandAsString)                    // Carry Flag hier noch Falsch!!!!!!!!!!!!!!!!!!!!!!!!!!
        {
            int    myLiteralAsNum = Convert.ToInt32(commandAsString, 16); // string zu int konvertieren
            string binary         = Convert.ToString(myLiteralAsNum, 2);  // int zu Binärstring konvertieren
            string fLiteralbinary = binary.Substring(5, 7);               //Argument, Adresse f auslesen
            string dLiteralbinary = binary.Substring(4, 1);               // Argument d auslesen ob 1 oder 0

            int  fAsInt           = Convert.ToInt32(fLiteralbinary, 2);   //Binäradresse wird als Int gespeichert
            byte fAsByteUnchecked = Convert.ToByte(fAsInt);

            byte fAsByte = CheckIndirectAddressing(fAsByteUnchecked); //Indirekte Adressierung wird überprüft

            ushort fWertvar = Registerspeicher.getRegisterWert(fAsByte);

            if (Registerspeicher.checkIfBitIsSet(Registerspeicher.STATUS, Registerspeicher.C))
            {
                fWertvar |= 0x100; //Linkeste Bit wird gesetzt, wenn Carrybit gesetzt war
                Console.WriteLine("fWertvar+: " + fWertvar.ToString("X2"));
            }

            if ((fWertvar & 0x01) != 0)                                                                                                       //Rechteste Bit wird ins Carryflag geschoben
            {
                Registerspeicher.speicher[Registerspeicher.STATUS]      |= 0x01;                                                              // C-flag wird auf 1 gesetzt;
                Registerspeicher.labels[Registerspeicher.STATUS].Content = Registerspeicher.speicher[Registerspeicher.STATUS].ToString("X2"); //X2 prints the string as two uppercase hexadecimal characters
                mainWin.CLabel.Content = "1";
            }
            else
            {
                Registerspeicher.speicher[Registerspeicher.STATUS]      &= 0xFE;                                                              // C-flag wird auf 0 gesetzt;
                Registerspeicher.labels[Registerspeicher.STATUS].Content = Registerspeicher.speicher[Registerspeicher.STATUS].ToString("X2"); //X2 prints the string as two uppercase hexadecimal characters
                mainWin.CLabel.Content = "0";
            }

            fWertvar >>= 1; //1 rechts schifften
            var result = (byte)fWertvar;

            if (dLiteralbinary == "0")
            {
                Registerspeicher.W = result;
            }
            else if (dLiteralbinary == "1")
            {
                Registerspeicher.setRegisterWert(fAsByte, result);
            }
            else
            {
                MessageBox.Show("Problem RRF - d is not defined");
            }
        }
Пример #6
0
        private static void IncreaseTimer()
        {
            if (tempTMRO == 0xFF) //wenn TMRO überläuft wird TOIF gesetzt.
            {
                tempTMRO++;
                Registerspeicher.setRegisterWert(Registerspeicher.TMR0, tempTMRO);

                //intcon wird ausgelesen und im nächsten Schritt mit 0x04 verodert, damit das TOIF (2.Bit) gesetzt wird für Interrupt
                byte tempINTCON = Registerspeicher.getRegisterWert(Registerspeicher.INTCON);
                Registerspeicher.setRegisterWert(Registerspeicher.INTCON, (byte)(tempINTCON | 0x04));
                Interrupt.CallTimerInterrupt();
            }
            else
            {
                tempTMRO++;
                Registerspeicher.setRegisterWert(Registerspeicher.TMR0, tempTMRO);
            }
        }
Пример #7
0
        public static void SWAPF(string commandAsString)
        {
            int    myLiteralAsNum = Convert.ToInt32(commandAsString, 16); // string zu int konvertieren
            string binary         = Convert.ToString(myLiteralAsNum, 2);  // int zu Binärstring konvertieren
            string fLiteralbinary = binary.Substring(5, 7);               //Argument, Adresse f auslesen
            string dLiteralbinary = binary.Substring(4, 1);               // Argument d auslesen ob 1 oder 0

            int  fAsInt           = Convert.ToInt32(fLiteralbinary, 2);   //Binäradresse wird als Int gespeichert
            byte fAsByteUnchecked = Convert.ToByte(fAsInt);

            byte fAsByte = CheckIndirectAddressing(fAsByteUnchecked); //Indirekte Adressierung wird überprüft

            byte fWert = Registerspeicher.getRegisterWert(fAsByte);   //Inhalt aus adresse f holen

            string fWertHex = fWert.ToString("X2");                   // als Hexwert auslesen

            string fWertA = fWertHex.Substring(0, 1);                 // Hexwert teilen
            string fWertB = fWertHex.Substring(1, 1);                 // Hexwert teilen

            string swap      = string.Concat(fWertB, fWertA);         //beide substrings in getauschter Reihenfolge zusammenfügen
            int    swapAsInt = Convert.ToInt32(swap, 16);             //zu decimal konvertieren

            string swapDec = swapAsInt.ToString("D2");

            byte result = Byte.Parse(swapDec); //string wird als byte gespeichert

            if (dLiteralbinary == "0")
            {
                Registerspeicher.W = result;
            }
            else if (dLiteralbinary == "1")
            {
                Registerspeicher.setRegisterWert(fAsByte, result);
            }
            else
            {
                MessageBox.Show("Problem SUBWF - d is not defined");
            }
        }
Пример #8
0
        public static void INCFSZ(string commandAsString)
        {
            int    myLiteralAsNum = Convert.ToInt32(commandAsString, 16); // string zu int konvertieren
            string binary         = Convert.ToString(myLiteralAsNum, 2);  // int zu Binärstring konvertieren
            string fLiteralbinary = binary.Substring(5, 7);               //Argument, Adresse f auslesen
            string dLiteralbinary = binary.Substring(4, 1);               // Argument d auslesen ob 1 oder 0

            int  fAsInt           = Convert.ToInt32(fLiteralbinary, 2);   //Binäradresse wird als Int gespeichert
            byte fAsByteUnchecked = Convert.ToByte(fAsInt);

            byte fAsByte = CheckIndirectAddressing(fAsByteUnchecked); //Indirekte Adressierung wird überprüft

            byte fWert = Registerspeicher.getRegisterWert(fAsByte);

            fWert++;

            if (fWert == 0)
            {
                Commands.NOP();
                MainWindow.CommandCounter++;
                MainWindow.numberOfCycles = 2;
            }
            else
            {
                if (dLiteralbinary == "0")
                {
                    Registerspeicher.W = fWert;
                }
                else if (dLiteralbinary == "1")
                {
                    Registerspeicher.setRegisterWert(fAsByte, fWert);
                }
                else
                {
                    MessageBox.Show("Problem RRF - d is not defined");
                }
            }
        }