Ejemplo n.º 1
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");
            }
        }