/// <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 } }
/// <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(' '); }
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 }
/// <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(); } }
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 { } }