Trimmer un fichier ( gba rom tools ) : reduire la taille d'un fichier en supprimant les octets inutiles de la fin du fichier

Soyez le premier à donner votre avis sur cette source.

Vue 18 128 fois - Téléchargée 361 fois


Description

Une autre procédure tiré de GBATOols (qui sera posté d'ici peu ici) qui permet de reduire la taille
d'un fichier en supprimant les octets inutiles de la fin du fichiers.
Moi cela m'interessait pour les roms gba.
Beaucoup de roms finissent par des centaines d'octets FF ou 00 pour faire une taille ronde (1,2,4,8,16,32,64,128,256...Mbits)
Mais que ce soit les emulateurs ou les flashs cards, aucuns ne se preoccupent de ces octets inutiles.
Ce qui permet donc, par exemple, sur la rom 0628 (0624 - Yoshi's Island - Super Mario Advance 3 (E)) de gagner
+ de 3,5Mo (28Mbits) ce qui n'est negligeable par aucuns utilisateur de flash cards.
(flash card : cartouche reinscriptible permettant d'y mettre ses backup de roms sur une seule cartouche... ;) )

Je parle de fichier rom gba, mais cela s'applique aussi à toutes les autres roms d'autres
consoles, et surement à d'autres types de fichiers.

Pour l'exemple de yoshi, je vous accorde que 3.5Mo c'est assez exceptionnel, cette roms semblant être overdumpée,
mais vous gagnerez assez souvent entre 10Ko (lol...c'est toujours ça non?) et 1Mo.
Si vous voulez d'autres exemples, je vous donnerais ça de suite.

Source / Exemple :


Public Function rom_end_offset(ByVal filez As String)
        Dim arrz() As Byte
        Dim i As Integer = FileLen(filez) - 1
        Dim y As Integer
        Dim n As Integer
        Dim endrom As Integer
        Dim hbread As New BinaryReader(File.OpenRead(filez))
        ReDim arrz(i)
        hbread.Read(arrz, 0, i)
        hbread.BaseStream.Flush()
        hbread.Close()
        y = arrz(i - 1)
        n = y
        Do While n = y
            i -= 1
            n = arrz(i)
        Loop
        endrom = ((i \ 16) + 1) * 16
        Return endrom
    End Function

    Public Sub rom_trim(ByVal pathz As String, ByVal offsetend As Integer)
        Dim arrz() As Byte
        Dim i As Integer = FileLen(pathz)
        Dim hbread As New BinaryReader(File.OpenRead(pathz))
        ReDim arrz(i - 1)
        hbread.Read(arrz, 0, i)
        hbread.BaseStream.Flush()
        hbread.Close()
        ReDim Preserve arrz(offsetend - 1)
        Dim hbwrite As New BinaryWriter(File.OpenWrite(pathz.ToLower.Replace(".gba", ".trimmed.gba")))
        hbwrite.BaseStream.Seek(0, SeekOrigin.Begin)
        hbwrite.Write(arrz)
        hbwrite.BaseStream.Flush()
        hbwrite.Flush()
        hbwrite.Close()
    End Sub

'on l'appelera ensuite comme ceci : rom_trim(pathtxt.Text, rom_end_offset(pathtxt.Text))

Conclusion :


commentaires?

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Golog
Messages postés
224
Date d'inscription
jeudi 31 janvier 2002
Statut
Membre
Dernière intervention
22 décembre 2009
-
C kler que c pas mal , connaisans les rooms, il doit y en avoir pas mal comme celle que tu décris ! et puis , ac ta méthode faut voir si d'autre fichier fréquament utilisé ne son po ossi comme cela.

A testé ^^
cs_Benouille
Messages postés
216
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
7 septembre 2007
1 -
8/10
Rohja
Messages postés
5
Date d'inscription
vendredi 3 février 2006
Statut
Membre
Dernière intervention
29 octobre 2007
-
Pour ma part je le fait directement avec HexEditor mais si ce soft peu automatisé cette fonctione, ça peu ètre pratique ! :)
hvb
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
1 -
j'espere pour toi qu'il y a une fonction préfaite dans HexEditor (perso j'utilise hexworkshop), parcque selectionner 3Mo de char(0) ça doit pas être pratique ^^
Rohja
Messages postés
5
Date d'inscription
vendredi 3 février 2006
Statut
Membre
Dernière intervention
29 octobre 2007
-
Evitons le flood ok ?

[Je trouve le debut des FF FF FF.... je selectionne disont, une ligne, je descent jusque a la fin et en maintenant la touche shift, je click sur le dernier FF ce qui selectionne tout ! ]

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.