Exemplo n.º 1
0
        /// <summary>
        /// Verifie que le fichier Rom est valide
        /// </summary>
        /// <param name="FileName">Chemin vers le fichier (path)</param>
        /// <returns>Retourne true si le fichier rom est un fichier de type Super Nintendo</returns>
        public static bool isValid(string FileName)
        {
            if (File.Exists(FileName))
            {
                //Variable de Verification pour determiner de quel type est la rom a charge
                string CheckLow1     = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("81DC", "81DD", FileName, true));
                string CheckLow2     = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("81DE", "81DF", FileName, true));
                string CheckLow1b    = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("7FDC", "7FDD", FileName, true));
                string CheckLow2b    = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("7FDE", "7FDF", FileName, true));
                string CheckHigh1    = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("101DC", "101DD", FileName, true));
                string CheckHigh2    = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("101DE", "101DF", FileName, true));
                string CheckHigh1b   = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("FFDC", "FFDD", FileName, true));
                string CheckHigh2b   = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("FFDE", "FFDF", FileName, true));
                long   ValCheckLowb  = Convertir.HexaToDecimal(CheckLow1b) + Convertir.HexaToDecimal(CheckLow2b);
                long   ValCheckHigh  = Convertir.HexaToDecimal(CheckHigh1) + Convertir.HexaToDecimal(CheckHigh2);
                long   ValCheckHighb = Convertir.HexaToDecimal(CheckHigh1b) + Convertir.HexaToDecimal(CheckHigh2b);
                long   ValCheckLow   = Convertir.HexaToDecimal(CheckLow1) + Convertir.HexaToDecimal(CheckLow2);

                //Fichier Valide ?
                if (ValCheckLow == 65535)
                {
                    return(true);                                        //LowRom 1
                }
                if (ValCheckLowb == 65535)
                {
                    return(true);                                        //LowRom 2
                }
                if (ValCheckHigh == 65535)
                {
                    return(true);                                        //HighRom
                }
                if (ValCheckHighb == 65535)
                {
                    return(true);             //HighRom
                }
                return(false);                //Fichier non valide
            }
            else
            {
                return(false);                //Fichier non trouver donc pa valide
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Decode l'entrée suivant les propriétés de l'objet
        /// </summary>
        public void Decode()
        {
            string DataBrut = ExtractData.AspireString(PositionHexa,
                                                       Convertir.DecimalToHexa(this._position + this._length - 1), this._file, true);

            string[] Data       = Convertir.StringHexa_LittleEndian(DataBrut, true).Trim().Split(new char[] { ' ' });
            string   DecodedDTE = "";
            string   Find       = "";

            for (int i = 0; i < Data.Length; i++)
            {
                Find = this._tbl.FindTBLMatch(Data[i], true);
                if (Find == "#")
                {
                    DecodedDTE += "<" + Data[i] + ">";
                }
                else
                {
                    DecodedDTE += Find;
                }
            }

            txtValue.Text = DecodedDTE.TrimEnd(' ');
        }
Exemplo n.º 3
0
        private void ExtractString(int MinTaille, long StartPos, long StopPos, short Performance, string FindString)
        {
            if (File.Exists(this._FileName))
            {
                if (File.Exists(tblCombo1.SelectedItem.Tag.ToString()))
                {
                    //Vide la liste de rechercher
                    lvFind.Items.Clear();

                    //Ouverture du fichier
                    FileInfo info = new FileInfo(this._FileName);
                    HexEdit.Load(ref this._FileName, (int)info.Length);

                    TBLStream tbl = new TBLStream(tblCombo1.SelectedItem.Tag.ToString());
                    tbl.Load();

                    int  ChunkSize = Performance * 10000;
                    long DataLen   = StopPos - StartPos;

                    if (DataLen > 0)
                    {
                        int i = (int)StartPos;
                        pb.Maximum = (int)DataLen;

                        string   buffer = "";
                        string[] bufferSplittedHexa;
                        string   dte    = "";
                        string   str    = "";
                        long     StrPos = 0;

                        //Commancement de la recherche des chaine
                        do
                        {
                            if (this._Cancel)
                            {
                                break;
                            }

                            buffer             = HexEdit.GetDataChunk(i);
                            bufferSplittedHexa = Convertir.StringHexa_LittleEndian(buffer, true).Trim().Split(new char[] { ' ' });
                            for (int j = 0; j < bufferSplittedHexa.Length; j++)
                            {
                                dte = tbl.FindTBLMatch(bufferSplittedHexa[j]);
                                if (dte != "#")
                                {
                                    str += dte;
                                }
                                else
                                {
                                    if (str.IndexOf(FindString, 0) != -1)
                                    {
                                        if (str.Length >= MinTaille)
                                        {
                                            ListViewItem item = new ListViewItem(Convertir.DecimalToHexa(StrPos));
                                            item.SubItems.Add(str);
                                            lvFind.Items.Add(item);
                                        }
                                    }
                                    str    = "";
                                    StrPos = i + j + 1;
                                }

                                if ((i + j) > DataLen)
                                {
                                    break;
                                }

                                if (j % 10000 == 0)
                                {
                                    pb.Value = i + j;
                                }
                            }
                            //Assignation
                            i += ChunkSize;
                        }while(i < DataLen);

                        //Reinitialise a 0
                        this.pb.Value         = 0;
                        this._Cancel          = false;
                        tbButtonFind.Enabled  = true;
                        tblButtonStop.Enabled = false;
                        panelParam.Enabled    = true;

                        if (lvFind.Items.Count == 0)
                        {
                            MessageBox.Show(this, this._String_NoItemFound,
                                            "Message",
                                            MessageBoxButtons.OK,
                                            MessageBoxIcon.Information);
                        }
                        else
                        {
                            MessageBox.Show(this, lvFind.Items.Count + " " + this._String_TotalItem,
                                            "Message",
                                            MessageBoxButtons.OK,
                                            MessageBoxIcon.Information);
                        }
                    }     // Datalen > 0
                }         // TBL
            }             //Filename
        }
Exemplo n.º 4
0
        /// <summary>
        /// Chargé en mémoire le fichier Rom spécifier par this._FileName
        /// </summary>
        /// <returns>Return true si le fichier est bien chargé</returns>
        public bool Load()
        {
            if (File.Exists(this._FileName))
            {
                if (SnesRom.isValid(this._FileName))                   //Verifie si le fichier Rom valide
                //Variable de Verification pour determiner de quel type est la rom a charg
                {
                    string CheckLow1     = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("81DC", "81DD", this.FileName, true));
                    string CheckLow2     = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("81DE", "81DF", this.FileName, true));
                    string CheckLow1b    = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("7FDC", "7FDD", this.FileName, true));
                    string CheckLow2b    = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("7FDE", "7FDF", this.FileName, true));
                    string CheckHigh1    = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("101DC", "101DD", this.FileName, true));
                    string CheckHigh2    = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("101DE", "101DF", this.FileName, true));
                    string CheckHigh1b   = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("FFDC", "FFDD", this.FileName, true));
                    string CheckHigh2b   = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("FFDE", "FFDF", this.FileName, true));
                    long   ValCheckLowb  = Convertir.HexaToDecimal(CheckLow1b) + Convertir.HexaToDecimal(CheckLow2b);
                    long   ValCheckHigh  = Convertir.HexaToDecimal(CheckHigh1) + Convertir.HexaToDecimal(CheckHigh2);
                    long   ValCheckHighb = Convertir.HexaToDecimal(CheckHigh1b) + Convertir.HexaToDecimal(CheckHigh2b);
                    long   ValCheckLow   = Convertir.HexaToDecimal(CheckLow1) + Convertir.HexaToDecimal(CheckLow2);

                    //Extraire les informations sur la rom dependant du type de rom
                    if (ValCheckLow == 65535)                     //LowRom 1
                    {
                        this._RomType       = RomType.LowRom_School_1;
                        this._RomName       = ExtractData.AspireString("81C0", "81D4", this.FileName).TrimEnd(new char[] { ' ' });
                        this._PostitionName = (int)Convertir.HexaToDecimal("81C0");
                        this._InfoCart      = (InformationCartouche)
                                              Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("81D6", "81D6", this.FileName, true)));
                        this._RomSizeMB = (ROMSize)
                                          Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("81D7", "81D7", this.FileName, true)));
                        this._RamSizeKB = (RAMSize)
                                          Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("81D8", "81D8", this.FileName, true)));
                        this._Country = (Country)
                                        Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("81D9", "81D9", this.FileName, true)));
                        this._Compagnie = (Compagnie)
                                          Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("81DA", "81DA", this.FileName, true)));
                        this._Version      = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("81DB", "81DB", this.FileName, true));
                        this._CompChecksum = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("81DC", "81DD", this.FileName, true));
                        this._Checksum     = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("81DE", "81DF", this.FileName, true));
                        this._NmiVblVector = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("81EA", "81EB", this.FileName, true));
                        this._ResetVector  = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("81FC", "81FD", this.FileName, true));
                    }
                    else if (ValCheckLowb == 65535)                      //LowRom 2
                    {
                        this._RomType       = RomType.LowRom_School_2;
                        this._RomName       = ExtractData.AspireString("7FC0", "7FD4", this.FileName).TrimEnd(new char[] { ' ' });
                        this._PostitionName = (int)Convertir.HexaToDecimal("7FC0");
                        this._InfoCart      = (InformationCartouche)
                                              Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("7FD6", "7FD6", this.FileName, true)));
                        this._RomSizeMB = (ROMSize)
                                          Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("7FD7", "7FD7", this.FileName, true)));
                        this._RamSizeKB = (RAMSize)
                                          Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("7FD8", "7FD8", this.FileName, true)));
                        this._Country = (Country)
                                        Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("7FD9", "7FD9", this.FileName, true)));
                        this._Compagnie = (Compagnie)
                                          Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("7FDA", "7FDA", this.FileName, true)));
                        this._Version      = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("7FDB", "7FDB", this.FileName, true));
                        this._CompChecksum = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("7FDC", "7FDD", this.FileName, true));
                        this._Checksum     = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("7FDE", "7FDF", this.FileName, true));
                        this._NmiVblVector = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("7FEA", "7FEB", this.FileName, true));
                        this._ResetVector  = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("7FFC", "7FFD", this.FileName, true));
                    }
                    else if (ValCheckHigh == 65535)                      // HighRom
                    {
                        this._RomType       = RomType.HighRom;
                        this._RomName       = ExtractData.AspireString("101C0", "101D4", this.FileName).TrimEnd(new char[] { ' ' });
                        this._PostitionName = (int)Convertir.HexaToDecimal("101C0");
                        this._InfoCart      = (InformationCartouche)
                                              Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("101D6", "101D6", this.FileName, true)));
                        this._RomSizeMB = (ROMSize)
                                          Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("101D7", "101D7", this.FileName, true)));
                        this._RamSizeKB = (RAMSize)
                                          Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("101D8", "101D8", this.FileName, true)));
                        this._Country = (Country)
                                        Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("101D9", "101D9", this.FileName, true)));
                        this._Compagnie = (Compagnie)
                                          Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("101DA", "101DA", this.FileName, true)));
                        this._Version      = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("101DB", "101DB", this.FileName, true));
                        this._CompChecksum = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("101DC", "101DD", this.FileName, true));
                        this._Checksum     = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("101DE", "101DF", this.FileName, true));
                        this._NmiVblVector = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("101EA", "101EB", this.FileName, true));
                        this._ResetVector  = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("101FC", "101FD", this.FileName, true));
                    }
                    else if (ValCheckHighb == 65535)                      // HighRom
                    {
                        this._RomType       = RomType.HighRom;
                        this._RomName       = ExtractData.AspireString("FFC0", "FFD4", this.FileName).TrimEnd(new char[] { ' ' });
                        this._PostitionName = (int)Convertir.HexaToDecimal("FFC0");
                        this._InfoCart      = (InformationCartouche)
                                              Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("FFD6", "FFD6", this.FileName, true)));
                        this._RomSizeMB = (ROMSize)
                                          Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("FFD7", "FFD7", this.FileName, true)));
                        this._RamSizeKB = (RAMSize)
                                          Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("FFD8", "FFD8", this.FileName, true)));
                        this._Country = (Country)
                                        Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("FFD9", "FFD9", this.FileName, true)));
                        this._Compagnie = (Compagnie)
                                          Convertir.HexaToDecimal(
                            Convertir.StringHexa_LittleEndian(
                                ExtractData.AspireString("FFDA", "FFDA", this.FileName, true)));
                        this._Version      = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("FFDB", "FFDB", this.FileName, true));
                        this._CompChecksum = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("FFDC", "FFDD", this.FileName, true));
                        this._Checksum     = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("FFDE", "FFDF", this.FileName, true));
                        this._NmiVblVector = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("FFEA", "FFEB", this.FileName, true));
                        this._ResetVector  = Convertir.StringHexa_LittleEndian(ExtractData.AspireString("FFFC", "FFFD", this.FileName, true));
                    }

                    //Format d'affichage
                    if (this._Country.ToString() == "Japon" ||
                        this._Country.ToString() == "USA")
                    {
                        this._FormatAffichage = FormatAffichage.NTSC;
                    }
                    else
                    {
                        this._FormatAffichage = FormatAffichage.PAL;
                    }

                    //MD5 hashing
                    this._MD5 = HashFile.GetMD5Hexa(this._FileName);

                    #region DEBUG INFOS : Informations sur la Rom
//					#if DEBUG //Informations de debuggage
//						Debug.WriteLine("DEBUG INFOS START : VRS.Library.Console.SuperNintendo.SnesRom.Load()");
//						Debug.WriteLine("CheckLow1        :" + CheckLow1);
//						Debug.WriteLine("CheckLow2        :" + CheckLow2);
//						Debug.WriteLine("CheckLow1b       :" + CheckLow1b);
//						Debug.WriteLine("CheckLow2b       :" + CheckLow2b);
//						Debug.WriteLine("CheckHigh1       :" + CheckHigh1);
//						Debug.WriteLine("CheckHigh2       :" + CheckHigh2);
//						Debug.WriteLine("CheckHigh1b      :" + CheckHigh1b);
//						Debug.WriteLine("CheckHigh2b      :" + CheckHigh2b);
//						Debug.WriteLine("ValCheckLowb     :" + ValCheckLowb);
//						Debug.WriteLine("ValCheckHigh     :" + ValCheckHigh);
//						Debug.WriteLine("ValCheckHighb    :" + ValCheckHighb);
//						Debug.WriteLine("ValCheckLow      :" + ValCheckLow);
//						Debug.WriteLine("this._RomName    :" + this._RomName);
//						Debug.WriteLine("this._InfoCart   :" + this._InfoCart.ToString());
//						Debug.WriteLine("this._RomSizeMB  :" + this._RomSizeMB.ToString());
//						Debug.WriteLine("this._RamSizeKB  :" + this._RamSizeKB.ToString());
//						Debug.WriteLine("this._Country    :" + this._Country.ToString());
//						Debug.WriteLine("this._Compagnie  :" + this._Compagnie.ToString());
//						Debug.WriteLine("this._version    : 1." + this._Version);
//						Debug.WriteLine("this._CompChecksum :" + this._CompChecksum);
//						Debug.WriteLine("this._Checksum :" + this._Checksum);
//						Debug.WriteLine("this._ResetVector :" + this._ResetVector);
//						Debug.WriteLine("this._NmiVblVector :" + this._NmiVblVector);
//						Debug.WriteLine("this._FormatAffichage :" + this._FormatAffichage);
//						Debug.WriteLine("this._MD5 :" + this._MD5);
//						Debug.WriteLine("DEBUG INFOS END : VRS.Library.Console.SuperNintendo.SnesRom.Load()");
//					#endif
                    #endregion

                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                throw new FileNotFoundException();
            }
        }
Exemplo n.º 5
0
        private void LoadPosition(string Position)
        {
            try {
                //Preparation de la fonctions
                long StartPos = Convertir.HexaToDecimal(Position);
                long hauteur  = this.Font.Height;
                this._TotalLine = picAdresse.Height / hauteur; //Total de ligne a charger
                long   DataLenght = this._TotalLine * _ColumnSize;
                string EndPos     = Convertir.DecimalToHexa((StartPos + DataLenght) - 1);

                htbPosition.HexaValue = Position;
                dtbPosition.Valeur    = htbPosition.DecimalValue;
                sbValue.Value         = (int)Convertir.HexaToDecimal(Position);

                //Verifie que l'adresse de fin est bien au maximum de la fin
                if (Convertir.HexaToDecimal(EndPos) > this._FileLen)
                {
                    EndPos = Convertir.DecimalToHexa(this._FileLen);
                }

                //Extraction des données et preparation avant de les dessiners
                string   DataBrut = ExtractData.AspireString(Position, EndPos, this._FileName, true);
                string   DataView = ExtractData.AspireString(Position, EndPos, this._FileName, false);
                string[] Data     = Convertir.StringHexa_LittleEndian(DataBrut, true).Trim().Split(new char[] { ' ' });

                string[] Adresse = new string[this._TotalLine];
                if (!this._DecimalMode)
                {
                    //Creation des chaines de position en hexadecimale

                    long tempPos = StartPos;
                    Adresse[0] = String.Format("{0, 8:0}", Convertir.DecimalToHexa(tempPos));  //Premiere position
                    Adresse[0] = Adresse[0].Replace(' ', '0');
                    for (int i = 1; i < Adresse.Length; i++)
                    {
                        tempPos   += _ColumnSize;
                        Adresse[i] = String.Format("{0, 8:0}", Convertir.DecimalToHexa(tempPos));  //String.Format()
                        Adresse[i] = Adresse[i].Replace(' ', '0');
                    }
                }
                else
                {
                    //Creation des chaines de en decimale
                    long tempPos = StartPos;
                    Adresse[0] = String.Format("{0, 8:0}", tempPos);  //Premiere position
                    Adresse[0] = Adresse[0].Replace(' ', '0');
                    for (int i = 1; i < Adresse.Length; i++)
                    {
                        tempPos   += _ColumnSize;
                        Adresse[i] = String.Format("{0, 8:0}", tempPos);  //String.Format()
                        Adresse[i] = Adresse[i].Replace(' ', '0');
                    }
                }

                //Dessiner les position
                Graphics gfxAdresse = picAdresse.CreateGraphics();
                gfxAdresse.CompositingQuality = CompositingQuality.HighSpeed;
                gfxAdresse.Clear(Color.Gray);
                PointF ptAdr = new PointF(0, 0);
                for (int i = 0; i < Adresse.Length; i++)
                {
                    gfxAdresse.DrawString(Adresse[i], this.Font, Brushes.White, ptAdr, StringFormat.GenericDefault);
                    ptAdr.Y += this.Font.Height;
                }


                //Dessiner le Data
                Graphics gfxData = picData.CreateGraphics();
                gfxData.CompositingQuality = CompositingQuality.HighSpeed;
                gfxData.Clear(Color.White);
                PointF ptData = new PointF(0, 0);
                int    cnt    = 0;
                for (int i = 0; i < Adresse.Length; i++)
                {
                    for (int j = 0; j < _ColumnSize; j++)
                    {
                        if (cnt % 2 == 0)
                        {
                            gfxData.DrawString(Data[cnt] + " ", this.Font, Brushes.Black, ptData, StringFormat.GenericDefault);
                        }
                        else
                        {
                            gfxData.DrawString(Data[cnt] + " ", this.Font, Brushes.Blue, ptData, StringFormat.GenericDefault);
                        }

                        ptData.X += 20;
                        cnt++;
                    }

                    ptData.X  = 0;
                    ptData.Y += this.Font.Height;
                }

                //Affiche le Data en fonction de la TBL ou non
                if (this.UseTBL)
                {
                    if (this._ShowColor)
                    {
                        DrawTBLDataColorDTE(Data, Adresse.Length);
                    }
                    else
                    {
                        DrawTBLData(Data, Adresse.Length);
                    }
                }
                else
                {
                    DrawSimpleData(DataView, Adresse.Length);
                }
            }
            catch { }
        }