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?
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.