Lire le header d'une rom de gameboy

0/5 (9 avis)

Snippet vu 4 100 fois - Téléchargée 44 fois

Contenu du snippet

Salut !

Bon voila si il y en a qui comme moi s'interesse a la programmation d'emulateur, ce module peut etre utile, meme si ce n'est qu'un debut. Je ne connais personnellement pas grand chose en matiere de prog' d'emulateur, mais j'ai trouve qq documents sur le fonctionnement des ROMS de GameBoy qui m'a permis d'ecrire ce (petit) module...

Voici les fonctions du module :
gbGetRomName : Cette fonction vous donne le nom de la ROM, autrement dit le nom du jeu.
gbGetScrollingCode : C'est le code du scrolling de la ROM du logo Nintendo - a comparer ensuite avec le code universel.
gbGetExeCode : Permet d'avoir le code d'execution
getSizeROM : Taille de la ROM
getSizeRAM : " " " RAM
getTypeCartridge : defini le type de cartouche, par exemple si la cartouche du jeu de gameboy contient une batterie, etc...

Bon voila c'est tout ! Je sais c'est assez complique et seuls ce qui ont qq bases sur l'emulation comprendront. Mais l'utilisation du module est tres simple :)

Par Exemple vous mettez :
variable1=gbGetRomName("C:\Asterix.gb")

Et voila, le nom du jeu de gameboy est inscrit dans variable1.

Source / Exemple :


Function gbGetRomName(RomFile As String) As String
    ' Déclarations
    Dim romnameCurrentByte(16) As Byte
    Dim RomName As String
    Dim b, i As Integer
    Dim a As String
    
    ' Ouverture de la ROM
    Open RomFile For Binary Access Read As #1
        For i = 309 To 309 + 16
            Get #1, i, romnameCurrentByte(i - 309)
        Next
        For b = 0 To 16
            If romnameCurrentByte(b) <> &H0 Then
            a = Chr(romnameCurrentByte(b))
            RomName = RomName & a
            End If
        Next
    Close #1
    
    gbGetRomName = RomName
End Function

Function gbGetScrollingCode(RomFile As String) As String
    Dim scrollingCurrentByte(48) As Byte
    Dim d As String
    Open RomFile For Binary Access Read As #1
            For c = 261 To 261 + 47
                Get #1, c, scrollingCurrentByte(c - 261)
               d = Hex(scrollingCurrentByte(c - 261))
                gbGetScrollingCode = gbGetScrollingCode & " " & d
            Next
    Close #1
End Function

Function gbGetExeCode(RomFile As String) As String
     Dim execodeCurrentByte(4) As Byte
     Dim e As String
     Dim f(4) As String
     Open RomFile For Binary Access Read As #1
     For e = 257 To 257 + 3
        Get #1, e, execodeCurrentByte(d - 4)
        f(e - 257) = Hex(execodeCurrentByte(d - 4))
    Next
    Close #1
    gbGetExeCode
End Function

Function getSizeROM(RomFile As String) As String
     Dim sizeROM As Byte
     Open RomFile For Binary Access Read As #1
        Get #1, 329, sizeROM
    Close #1
    Select Case sizeROM
        Case 0: getSizeROM = "32 Ko"
        Case 1: getSizeROM = "64 Ko"
        Case 2: getSizeROM = "128 ko"
        Case 3: getSizeROM = "256 ko"
        Case 4: getSizeROM = "512 ko"
        Case 5: getSizeROM = "1 Mo"
        Case 6: getSizeROM = "2 Mo"
        Case 52: getSizeROM = "1.1 Mo"
        Case 53: getSizeROM = "1.2 Mo"
        Case 54: getSizeROM = "1.5 Mo "
        Case Default: getSizeROM = "Erreur"
    End Select
End Function

Function getSizeRAM(RomFile As String) As String
    Dim sizeRAM As Byte
    Open RomFile For Binary Access Read As #1
        Get #1, 330, sizeRAM
    Close #1
    Select Case sizeRAM
        Case 0: getSizeRAM = "Aucune"
        Case 1: getSizeRAM = "2 Ko"
        Case 2: getSizeRAM = "8 ko"
        Case 3: getSizeRAM = "32 ko"
        Case Default: getSizeRAM = "Erreur"
    End Select
End Function

Function getTypeCartridge(RomFile As String) As String
    Dim cartridge As Byte
    Open RomFile For Binary Access Read As #1
        Get #1, 328, cartridge
    Close #1
    Select Case cartridge
        Case 0: getTypeCartridge = "ROM seulement"
        Case 1: getTypeCartridge = "ROM + MBC1"
        Case 2: getTypeCartridge = "ROM + MBC1 + RAM"
        Case 3: getTypeCartridge = "ROM + MBC1 + RAM + BATTERIE"
        Case 5: getTypeCartridge = "ROM + MBC2"
        Case 6: getTypeCartridge = "ROM + MBC2 + BATTERIE"
        Case 8: getTypeCartridge = "ROM +  RAM"
        Case 9: getTypeCartridge = "ROM + RAM + BATTERIE"
        Case 255: getTypeCartridge = "ROM+HuC1+RAM+BATTERIE"
        Case Default: getTypeCartridge = "Erreur"
    End Select
End Function

Conclusion :


Si vous avez des questions, ou si vous n'avez pas compris qqchose, n'hesitez pas a me demander " rpgsephiroth666@aol.com
Je me ferai un plaisir de repondre :)

@+

A voir également

Ajouter un commentaire Commentaires
cs_PaTaTe Messages postés 2107 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 2
26 juil. 2004 à 16:44
Dans un projet avec Option Explicit y a pas mal de bug.

Pourrait-tu revoir le code ?

Merci
cs_calbo Messages postés 3 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 26 octobre 2003
17 oct. 2003 à 15:54
pas mal comme source je regarde attentivemen pour voir se ki a moyen d'en faire par apres allez si j'y arrive je te previen bye
cs_clad87 Messages postés 42 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 24 août 2015
27 févr. 2003 à 17:41
ta source ma été utile
cs_RbbR Messages postés 22 Date d'inscription mardi 22 octobre 2002 Statut Membre Dernière intervention 9 avril 2003
24 oct. 2002 à 04:01
Pas mal
cs_GiZmO Messages postés 9 Date d'inscription samedi 2 février 2002 Statut Membre Dernière intervention 27 juin 2002
5 mai 2002 à 16:48
c pas mal, continue dans cette voie...

@+

GiZmO

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.