Ejemplo n.º 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);
        }
Ejemplo n.º 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);
        }
Ejemplo n.º 3
0
        public static void XORLW(string commandAsString)
        {
            byte myLiteralAsByte = ConvertStringToByte(commandAsString, 2, 2); //Argument von Befehl trennen
            byte w = Registerspeicher.W;

            Registerspeicher.W = (byte)(w ^ myLiteralAsByte); // exclusive or w mit Literal
            Registerspeicher.SetZeroFlag(Registerspeicher.W);
        }
Ejemplo n.º 4
0
        public static void ANDLW(string commandAsString)
        {
            byte myLiteralAsByte = ConvertStringToByte(commandAsString, 2, 2); //Argument von Befehl trennen
            byte w = Registerspeicher.W;

            Registerspeicher.W = (byte)(w & myLiteralAsByte); // Verundung Literal mit w-Register
            Registerspeicher.SetZeroFlag(Registerspeicher.W);
        }
Ejemplo n.º 5
0
        public static void ADDLW(string commandAsString)
        {
            byte myLiteralAsByte = ConvertStringToByte(commandAsString, 2, 2); //Argument von Befehl trennen

            var w          = Registerspeicher.W;
            var resultTemp = (ushort)(myLiteralAsByte + w);
            var result     = (byte)resultTemp;

            Registerspeicher.W = (byte)(w + myLiteralAsByte); // addiere w mit Literal
            Registerspeicher.SetZeroFlag(Registerspeicher.W);
            Registerspeicher.SetCarryFlag(resultTemp);
            Registerspeicher.SetDigitCarryFlag((byte)((myLiteralAsByte & 0xF) + (w & 0xF)));
        }
Ejemplo n.º 6
0
        public static void SUBLW(string commandAsString)
        {
            byte myLiteralAsByte = ConvertStringToByte(commandAsString, 2, 2); //Argument von Befehl trennen

            var w          = Registerspeicher.W;
            var resultTemp = (ushort)(myLiteralAsByte - w);
            var result     = (byte)resultTemp;

            Registerspeicher.W = (byte)(myLiteralAsByte - w); // subtrahier w vom Literal
            Registerspeicher.SetZeroFlag(Registerspeicher.W);
            Registerspeicher.SetCarryFlag(resultTemp, true);
            Registerspeicher.SetDigitCarryFlag((byte)((myLiteralAsByte & 0xF) - (w & 0xF)), true);
        }
Ejemplo n.º 7
0
        public static void CLRF(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(2, 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, 0x00);          //Register an Adress f wird auf 0 gesetzt

            Registerspeicher.SetZeroFlag(0x00);                       //ZeroFlag wird auf 1 gesetzt
        }
Ejemplo n.º 8
0
        public static void CLRW(string commandAsString)
        {
            Registerspeicher.W = 0x00;          //Register w wird auf 0 gesetzt

            Registerspeicher.SetZeroFlag(0x00); //ZeroFlag wird auf 1 gesetzt
        }