Lire le header d'une rom de gameboy

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

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.