Lire le header d'une rom de gameboy

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 818 fois - Téléchargée 43 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
Messages postés
2107
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
19 février 2021
2
Dans un projet avec Option Explicit y a pas mal de bug.

Pourrait-tu revoir le code ?

Merci
Messages postés
3
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
26 octobre 2003

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
Messages postés
42
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
24 août 2015

ta source ma été utile
Messages postés
22
Date d'inscription
mardi 22 octobre 2002
Statut
Membre
Dernière intervention
9 avril 2003

Pas mal
Messages postés
9
Date d'inscription
samedi 2 février 2002
Statut
Membre
Dernière intervention
27 juin 2002

c pas mal, continue dans cette voie...

@+

GiZmO
Afficher les 9 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.