Mr ToutLeMonde et la programmation GameBoy...
+3
tetsuro
lincruste
vincent2105
7 participants
Page 1 sur 2
Page 1 sur 2 • 1, 2
Mr ToutLeMonde et la programmation GameBoy...
Salut à tous,
En parallèle de ma découverte de la NES et pour changer d'air, j'ouvre ce topic pour sa petite soeur, la GameBoy, qui m'a laissé de bons souvenirs.
La programmation est pour moi avant tout un passe-temps. Je ne me fixe pas d'objectif particulier. J'ai peu de temps à y consacrer, je suis buraliste avec les horaires qui vont avec. Je programme donc entre 2 clients ou le soir après une bonne journée de 11h . C'est pas vraiment l'idéal, mais on fait avec.
Ma petite expérience avec la NES me sera utile, et les discussions que l'on peut avoir ici avec vous Gamopats est un formidable coup de pouce
Au moment où j'écris ces lignes, je n'ai fais quasiment aucune recherche.
J'ai le souvenir d'un lien que vingazole avait posté (un tuto en français par "furrtek").
Je vais commencer par là.
En parallèle de ma découverte de la NES et pour changer d'air, j'ouvre ce topic pour sa petite soeur, la GameBoy, qui m'a laissé de bons souvenirs.
La programmation est pour moi avant tout un passe-temps. Je ne me fixe pas d'objectif particulier. J'ai peu de temps à y consacrer, je suis buraliste avec les horaires qui vont avec. Je programme donc entre 2 clients ou le soir après une bonne journée de 11h . C'est pas vraiment l'idéal, mais on fait avec.
Ma petite expérience avec la NES me sera utile, et les discussions que l'on peut avoir ici avec vous Gamopats est un formidable coup de pouce
Au moment où j'écris ces lignes, je n'ai fais quasiment aucune recherche.
J'ai le souvenir d'un lien que vingazole avait posté (un tuto en français par "furrtek").
Je vais commencer par là.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation GameBoy...
Je suis dedans en ce moment, ça tombe bien.
Mon projet est extrêmement modeste, une simple démo d'un splash-screen, une carte fixe et un personnage animé dessus qui va dans 4 directions.
Après avoir tenté l'approche frontale avec un assembleur pour Game Boy et lamentablement échoué à comprendre les concepts les plus simples, je me suis rabattu sur GBDK, un compilateur et des bibliothèques C.
Le plus chiant, c'est que la plupart des docs ou tutoriels sont sur des sites morts, il faut souvent aller à la pêche avec Internet Archive.
Encore à jour, ce lien est très utile :
https://github.com/avivace/awesome-gbdev
edit 18/09/2017:
Ajouts de liens fournis plus bas, pour retrouver facilement
Liste de lien utiles:
https://github.com/avivace/awesome-gbdev
Documentation technique souvent recommandée, les "pandocs":
http://bgb.bircd.org/pandocs.htm
Documentation de Nintendo:
http://www.chrisantonellis.com/files/gameboy/gb-programming-manual.pdf
edit 23/09/2017
Gameboy Tile Designer:
http://www.devrs.com/gb/hmgd/gbtd.html
Gameboy Map Builder:
http://www.devrs.com/gb/hmgd/gbmb.html
Tile Data Generator:
http://www.chrisantonellis.com/gameboy/gbtdg/
Mon projet est extrêmement modeste, une simple démo d'un splash-screen, une carte fixe et un personnage animé dessus qui va dans 4 directions.
Après avoir tenté l'approche frontale avec un assembleur pour Game Boy et lamentablement échoué à comprendre les concepts les plus simples, je me suis rabattu sur GBDK, un compilateur et des bibliothèques C.
Le plus chiant, c'est que la plupart des docs ou tutoriels sont sur des sites morts, il faut souvent aller à la pêche avec Internet Archive.
Encore à jour, ce lien est très utile :
https://github.com/avivace/awesome-gbdev
edit 18/09/2017:
Ajouts de liens fournis plus bas, pour retrouver facilement
Liste de lien utiles:
https://github.com/avivace/awesome-gbdev
Documentation technique souvent recommandée, les "pandocs":
http://bgb.bircd.org/pandocs.htm
Documentation de Nintendo:
http://www.chrisantonellis.com/files/gameboy/gb-programming-manual.pdf
edit 23/09/2017
Gameboy Tile Designer:
http://www.devrs.com/gb/hmgd/gbtd.html
Gameboy Map Builder:
http://www.devrs.com/gb/hmgd/gbmb.html
Tile Data Generator:
http://www.chrisantonellis.com/gameboy/gbtdg/
Dernière édition par lincruste le Sam 23 Sep 2017 - 22:58, édité 3 fois
lincruste- Interne
- Nombre de messages : 5619
Age : 45
Localisation : RP
Date d'inscription : 07/06/2014
Re: Mr ToutLeMonde et la programmation GameBoy...
Merci pour les liens
Je vais moi aussi tenter "l'approche frontale", la seule qui m'intéresse en fait.
Cet aprem, j'ai tenté d'assembler quelques lignes. Mais je m'y suis cassé les dents.
Le tuto de furrtek renvoie sur l'assembleur WLA-GB. Je n'ai aucune préférence cela dit.
Sur NES, c'est facile, il suffit d'ouvrir son fichier .asm avec l'assembleur NESASM3 et paf, on a un fichier .NES
Là, apparemment, il faut enregistrer son code en ".s" et... je cherche encore
Je vais moi aussi tenter "l'approche frontale", la seule qui m'intéresse en fait.
Cet aprem, j'ai tenté d'assembler quelques lignes. Mais je m'y suis cassé les dents.
Le tuto de furrtek renvoie sur l'assembleur WLA-GB. Je n'ai aucune préférence cela dit.
Sur NES, c'est facile, il suffit d'ouvrir son fichier .asm avec l'assembleur NESASM3 et paf, on a un fichier .NES
Là, apparemment, il faut enregistrer son code en ".s" et... je cherche encore
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation GameBoy...
En googlant, j'ai découvert l'assembleur RGBDS
http://assemblydigest.tumblr.com/post/77198211186/tutorial-making-an-empty-game-boy-rom-in-rgbds
Déjà une petite surprise, pas de directive .ORG (pour positionner du code à une adresse de départ précise) , je pense que je vais me faire avoir encore quelques fois avec le padding (combler de 0 pour atteindre l'adresse voulue).
Mais au moins j'arrive à sortir une ROM. C'est quand même frustrant de passer autant de temps la dessus, j'ai toujours pas compris comment faire de même avec WLA-GB.
http://assemblydigest.tumblr.com/post/77198211186/tutorial-making-an-empty-game-boy-rom-in-rgbds
Déjà une petite surprise, pas de directive .ORG (pour positionner du code à une adresse de départ précise) , je pense que je vais me faire avoir encore quelques fois avec le padding (combler de 0 pour atteindre l'adresse voulue).
Mais au moins j'arrive à sortir une ROM. C'est quand même frustrant de passer autant de temps la dessus, j'ai toujours pas compris comment faire de même avec WLA-GB.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation GameBoy...
Ha ça, en ASM tu peux être sûr que tu vas en suer. J'ai cherché de la doc, la référence GB ce sont les "pandocs":
http://bgb.bircd.org/pandocs.htm
Pour la programmation elle-même, j'ai trouvé plus facile de chercher directement des documentations sur le Z80, et là, le titre qui revient est celui du bouquin de Rodnay Zaks, Programming the Z80 : http://www.z80.info/zip/zaks_book.pdf
Mais au bout de deux mois je n'arrive toujours à rien, j'espère que tu auras plus de succès.
http://bgb.bircd.org/pandocs.htm
Pour la programmation elle-même, j'ai trouvé plus facile de chercher directement des documentations sur le Z80, et là, le titre qui revient est celui du bouquin de Rodnay Zaks, Programming the Z80 : http://www.z80.info/zip/zaks_book.pdf
Mais au bout de deux mois je n'arrive toujours à rien, j'espère que tu auras plus de succès.
lincruste- Interne
- Nombre de messages : 5619
Age : 45
Localisation : RP
Date d'inscription : 07/06/2014
Re: Mr ToutLeMonde et la programmation GameBoy...
Merci encore pour les liens :)
Mais du coup, tu as utilisé un assembleur ou tu as juste parcouru les docs ?
De mon coté, j'ai déjà des surprises, j'ai modifié quelques lignes dans le tuto que j'ai évoqué plus haut, et j'ai un résultat inattendu.
Exemple, si je modifie tous les octets ci dessous, le résultat est le même, on affiche quand même un joli "Nintendo" (au pif, j'avais tout mis à $44).
Je suis plutot dérouté jusque là. Pour la NES, on a un tas de tuto, c'est bien plus accessible. D'ailleurs le tuto GB dont je parle ne comporte que ce chapitre, or l'auteur avait au départ l'intention d'en faire d'autres
Je viens de trouver la doc pour RGBDS, du coup, j'ai que ça pour avancer, j'ai pas trop le choix. http://otakunozoku.com/RGBDSdocs/asm.htm
Mais du coup, tu as utilisé un assembleur ou tu as juste parcouru les docs ?
De mon coté, j'ai déjà des surprises, j'ai modifié quelques lignes dans le tuto que j'ai évoqué plus haut, et j'ai un résultat inattendu.
Exemple, si je modifie tous les octets ci dessous, le résultat est le même, on affiche quand même un joli "Nintendo" (au pif, j'avais tout mis à $44).
- Code:
; $0104 - $0133: The Nintendo Logo.
;DB $CE, $ED, $66, $66, $CC, $0D, $00, $05
;DB $03, $73, $00, $83, $00, $0C, $00, $0D
;DB $00, $08, $11, $1F, $88, $89, $00, $0E
;DB $DC, $CC, $6E, $E6, $DD, $DD, $D9, $99
;DB $BB, $BB, $67, $63, $6E, $0E, $EC, $CC
;DB $DD, $DC, $99, $9F, $BB, $B9, $33, $3E
- Spoiler:
Je suis plutot dérouté jusque là. Pour la NES, on a un tas de tuto, c'est bien plus accessible. D'ailleurs le tuto GB dont je parle ne comporte que ce chapitre, or l'auteur avait au départ l'intention d'en faire d'autres
Je viens de trouver la doc pour RGBDS, du coup, j'ai que ça pour avancer, j'ai pas trop le choix. http://otakunozoku.com/RGBDSdocs/asm.htm
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation GameBoy...
Avec des ";" avant chaque Data c'est normal non ???
Invité- Invité
Re: Mr ToutLeMonde et la programmation GameBoy...
Pardon, je me suis mal exprimé... j'suis fatigué :p
Je voulais dire qu'en remplaçant tous les octets que j'ai mis en commentaires (derrière un ";" ) par la valeur $44, ça fonctionnait quand même.
Mais c'est pas un gros problème en soit. C'est surtout surprenant :)
Je voulais dire qu'en remplaçant tous les octets que j'ai mis en commentaires (derrière un ";" ) par la valeur $44, ça fonctionnait quand même.
- Code:
;$0104 - $0133: The Nintendo Logo.
;DB $CE, $ED, $66, $66, $CC, $0D, $00, $05
;DB $03, $73, $00, $83, $00, $0C, $00, $0D
;DB $00, $08, $11, $1F, $88, $89, $00, $0E
;DB $DC, $CC, $6E, $E6, $DD, $DD, $D9, $99
;DB $BB, $BB, $67, $63, $6E, $0E, $EC, $CC
;DB $DD, $DC, $99, $9F, $BB, $B9, $33, $3E
DB $44, $44, $44, $44, $44, $44, $44, $44
DB $44, $44, $44, $44, $44, $44, $44, $44
DB $44, $44, $44, $44, $44, $44, $44, $44
DB $44, $44, $44, $44, $44, $44, $44, $44
DB $44, $44, $44, $44, $44, $44, $44, $44
DB $44, $44, $44, $44, $44, $44, $44, $44
Mais c'est pas un gros problème en soit. C'est surtout surprenant :)
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation GameBoy...
Ça m’intéresse :)
tetsuro- Patient contaminé
- Nombre de messages : 593
Age : 47
Localisation : Carcassonne
Date d'inscription : 27/12/2015
Re: Mr ToutLeMonde et la programmation GameBoy...
J'utilise WLA-DX pour l'asm sur Master System.
Pour compiler, ca se fait en 2 étapes
le .lin étant un fichier texte avec les .o à linker :
Pas mal de codeurs (en assembleur) pour Master System l'utilisent. En tout ca c'est celui qu'on retrouve sur le forum SMSpower.
PS.
pour ton exemple tu pourrais d'ailleurs faire cette manip la sous wla
Pour compiler, ca se fait en 2 étapes
- Code:
wla-z80 -o rom.asm rom.o
wlalink -s rom.lin rom.sms
le .lin étant un fichier texte avec les .o à linker :
- Code:
[objects]
rom.o
Pas mal de codeurs (en assembleur) pour Master System l'utilisent. En tout ca c'est celui qu'on retrouve sur le forum SMSpower.
PS.
pour ton exemple tu pourrais d'ailleurs faire cette manip la sous wla
- Code:
.repeat 48
.db $44
.endr
Re: Mr ToutLeMonde et la programmation GameBoy...
Merci pour les infos Ichigo :)
Je vais voir à ça. Vu que RGBDS ne permet d'assembler que pour GameBoy et quitte a fournir des efforts, autant les concentrer sur WLA. Le tuto de furrtek est vraiment pas mal je trouve, ca me ferait une bonne base pour bidouiller.
Je vais voir à ça. Vu que RGBDS ne permet d'assembler que pour GameBoy et quitte a fournir des efforts, autant les concentrer sur WLA. Le tuto de furrtek est vraiment pas mal je trouve, ca me ferait une bonne base pour bidouiller.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation GameBoy...
Attention quand même, le CPU de la gameboy a quand même beaucoup de différence avec un vrai Z80 et je ne suis pas sur que WLA assemble correctement pour le GB CPU si ce n'est pas prévu de base (déjà il faut que tu fasses attention à utiliser les instructions compatibles).
Stef- Interne
- Nombre de messages : 5087
Age : 45
Localisation : Sevres
Date d'inscription : 04/04/2007
Re: Mr ToutLeMonde et la programmation GameBoy...
T'inquiete wla-dx integre plusieurs ASM
(sinon j'aurais évité d'en parler)
la doc, au cas où : http://www.villehelin.com/wla.txt
(sinon j'aurais évité d'en parler)
- Code:
Features:
Fast
SNES support
SMS/GG support
Gameboy support
PC-Engine support
NO$GMB symbol file writing
Support for object and library files
You can patch ROM images with code
WLA GB-Z80 disassembler included
Numerous ways to comment code away
ROM image and program file compiling
Multilevel macros (actually, functions)
la doc, au cas où : http://www.villehelin.com/wla.txt
Re: Mr ToutLeMonde et la programmation GameBoy...
Alors ça au moins, je peux te l'expliquer.vincent2105 a écrit:Merci encore pour les liens :)
Mais du coup, tu as utilisé un assembleur ou tu as juste parcouru les docs ?
De mon coté, j'ai déjà des surprises, j'ai modifié quelques lignes dans le tuto que j'ai évoqué plus haut, et j'ai un résultat inattendu.
Exemple, si je modifie tous les octets ci dessous, le résultat est le même, on affiche quand même un joli "Nintendo" (au pif, j'avais tout mis à $44).
- Code:
; $0104 - $0133: The Nintendo Logo.
;DB $CE, $ED, $66, $66, $CC, $0D, $00, $05
;DB $03, $73, $00, $83, $00, $0C, $00, $0D
;DB $00, $08, $11, $1F, $88, $89, $00, $0E
;DB $DC, $CC, $6E, $E6, $DD, $DD, $D9, $99
;DB $BB, $BB, $67, $63, $6E, $0E, $EC, $CC
;DB $DD, $DC, $99, $9F, $BB, $B9, $33, $3E
- Spoiler:
Je suis plutot dérouté jusque là. Pour la NES, on a un tas de tuto, c'est bien plus accessible. D'ailleurs le tuto GB dont je parle ne comporte que ce chapitre, or l'auteur avait au départ l'intention d'en faire d'autres
Je viens de trouver la doc pour RGBDS, du coup, j'ai que ça pour avancer, j'ai pas trop le choix. http://otakunozoku.com/RGBDSdocs/asm.htm
Quand tu mets les données du logo Nintendo, ça sert d'"authentification légère". C'est à dire que quand tu allumes la GB avec une cartouche, le bootrom dans la console contient déjà les données du logo et les charge.
Ce n'est qu'ensuite qu'un comparaison est faite avec les données du logo contenues dans ton code (dans la cartouche).
Un émulateur accepte sans broncher un mauvais logo, mais ça ne passerait pas sur le hardware original.
C'était une façon pour Nintendo de se garder la possibilité d'intenter un procès à d'éventuels éditeurs de cartouches officieuses: comme ils auraient été obligés d'intégrer illégalement un logo avec la mention "", les avocats de Nintendo auraient été dans leur plein droit pour attaquer.
lincruste- Interne
- Nombre de messages : 5619
Age : 45
Localisation : RP
Date d'inscription : 07/06/2014
Re: Mr ToutLeMonde et la programmation GameBoy...
Sinon y'a un tuto de furrtek pour coder sur GB :
http://furrtek.free.fr/?a=gbasm
http://furrtek.free.fr/?a=gbasm
Invité- Invité
Re: Mr ToutLeMonde et la programmation GameBoy...
Oui, mais comme un gros boulet, je ne sais pas assembler son code. Donc je peux pas faire de bidouilles dessus
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation GameBoy...
Normalement, faut que tu fasses le truc que j'ai posté plus haut
(pour wla-dx, vu que c'est ce que Furrtek a utilisé)
Tu dois créer préalablement le fichier bpong.lin (fichier texte) et mettre dedans :
PS. je pense que logiquement se fichier lin devrait s'auto créer, mais sur mon mac/ma version de wladx que j'ai compilé je dois le faire à la main...
EDIT. sinon Furrtek avait indiqué en bas de sa page :
encore plus simple que prévu ^^
non ca doit etre un batch ... qui n'est pas présent dans le zip de la source, désolé !
(pour wla-dx, vu que c'est ce que Furrtek a utilisé)
- Code:
wla-gb.exe -o bpong.s bpong.o
wlalink.exe -s bpong.lin bpong.gb
Tu dois créer préalablement le fichier bpong.lin (fichier texte) et mettre dedans :
- Code:
[objects]
bpong.o
PS. je pense que logiquement se fichier lin devrait s'auto créer, mais sur mon mac/ma version de wladx que j'ai compilé je dois le faire à la main...
EDIT. sinon Furrtek avait indiqué en bas de sa page :
Furrtek a écrit:Assembler la source en lancant "make-gb bpong" pour avoir le ROM bpong.gb
non ca doit etre un batch ... qui n'est pas présent dans le zip de la source, désolé !
Re: Mr ToutLeMonde et la programmation GameBoy...
Ben j'ai eu aucun problème pour l'assembler, par contre j'ai modifié le fichier wla.bat inclus dans l'archive qu'il donne:
Comme tu le vois j'ai modifié la variable %WLAPATH% dans son batch par le chemin en dur.
Tu peux soit le modifier à ton tour en mettant le chemin de ton répertoire contenant l'assembleur, soit déclarer la variable %WLAPATH% plus haut dans le batch.
Après j'ai carrément copié les fichiers .s et .bin dans le même répertoire et tapé
ce qui est absolument dégueulasse et fonctionnel.
Après y'a plus qu'à organiser ça proprement, mais au moins tu auras ta ROM gb.
- Code:
@echo off
if exist object.o del object.o
"C:\dev\gb\wla-gb\wla-gb.exe" -o %1 object.o
echo [objects]>linkfile
echo object.o>>linkfile
"C:\dev\gb\wla-gb\wlalink.exe" -drvs linkfile main.gb
if exist main.gb.sym del main.gb.sym
ren main.sym main.gb.sym
if exist linkfile del linkfile
if exist object.o del object.o
Comme tu le vois j'ai modifié la variable %WLAPATH% dans son batch par le chemin en dur.
Tu peux soit le modifier à ton tour en mettant le chemin de ton répertoire contenant l'assembleur, soit déclarer la variable %WLAPATH% plus haut dans le batch.
Après j'ai carrément copié les fichiers .s et .bin dans le même répertoire et tapé
- Code:
"wla.bat bpong.s"
ce qui est absolument dégueulasse et fonctionnel.
Après y'a plus qu'à organiser ça proprement, mais au moins tu auras ta ROM gb.
lincruste- Interne
- Nombre de messages : 5619
Age : 45
Localisation : RP
Date d'inscription : 07/06/2014
Re: Mr ToutLeMonde et la programmation GameBoy...
Je viens de réussir à l'assembler à l'instant grâce au post d'Ichigo. Je vais voir ce que tu proposes. En tout cas, merci à vous
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation GameBoy...
Ok, merci @lincruste, c'est bon aussi :)
J'avoue que c'était vraiment de l'hébreu pour moi jusque là.
Voyons ce que nous réserve la suite
J'avoue que c'était vraiment de l'hébreu pour moi jusque là.
Voyons ce que nous réserve la suite
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation GameBoy...
Bon je poursuis le tuto de furrtek.
Première bonne surprise, le bus d'adresse 16 bits et 4 modes d'adressage :
On sent qu'on est un cran au dessus de la NES
Première bonne surprise, le bus d'adresse 16 bits et 4 modes d'adressage :
Et 7 registres de travail 8bits qu'on peut combiner pour former des registres 16bits... Ca c'est complètement nouveau pour moi.-Direct: on donne une valeur fixe (8 bits).
Exemple: "ADD $10" va ajouter $10 au registre A. Notez qu'on ne precise pas "ADD A,$10".
-Indirect: on donne une adresse, la valeur située à cette addresse sera utilisée. Comme l'operande est un pointeur, on met des parenthèses autour.
Exemple: "LD A,($C1B9)" va mettre la valeur située dans la case mémoire $C1B9 (RAM) dans le registre A.
-Registre: on donne le nom d'un registre, la valeur qu'il contient sera utilisée.
Exemple: "ADD B" va ajouter le contenu du registre B au registre A.
-Registre indirect: on donne le nom d'un registre qui contient une adresse, la valeur située à cette addresse sera utilisée. Comme l'argument est un pointeur, on met des parenthèses autour. Presque toutes les instructions n'acceptent que le registre HL pour ce mode.
Exemple: "ADD (HL)" va ajouter la valeur située dans la case mémoire indiquée par le registre HL, au registre A.
On sent qu'on est un cran au dessus de la NES
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation GameBoy...
J'ai vraiment pas beaucoup de temps en ce moment (déménagement imminent). Du coup si j'ai 30mn par jour c'est bien tout.
Mais vraiment faut saluer la qualité des explications de furrtek Y'a moyen de commencer en douceur. Je suis moins largué que je ne le pensais, ça sera peut-être le cas des curieux qui se pencheront sur ce bout de code et le paragraphe qui suit...
Mais vraiment faut saluer la qualité des explications de furrtek Y'a moyen de commencer en douceur. Je suis moins largué que je ne le pensais, ça sera peut-être le cas des curieux qui se pencheront sur ce bout de code et le paragraphe qui suit...
- Code:
ld b,3*8*2 ;B=48
ld de,Tiles ;DE=Adresse du label "Tiles", pointeur ROM
ld hl,$8000 ;HL=$8000, pointeur VRAM
ldt:
ld a,(de) ;A=(DE)
ldi (hl),a ;(HL)=A et incrémenter HL
inc de ;Incrémenter DE
dec b ;Décrémenter B (compteur d'itérations)
jr nz,ldt ;Sauter à ldt si B différent de 0
Furrtek a écrit:On veut ensuite charger nos graphismes en VRAM (le GPU ne peut pas aller les chercher lui meme en ROM). Nous aurons besoin que de 3 tiles en tout dans notre jeu. Un pour le fond qui sera répété, un pour la balle, et un pour la raquette (qui sera répété aussi).
Pour celà, on va devoir copier les données graphiques de ces tiles depuis notre ROM, vers la VRAM. On veut copier 3 tiles, donc 3 blocs de 8 lignes de pixels. Comme chaque ligne de 8 pixels demande deux octets, on va devoir copier 3*8*2 = 48 octets.
Pour réaliser une boucle, on charge le registre B avec le nombre d'itérations nécessaires. On utilise DE comme pointeur vers les données dans notre ROM, et HL comme pointeur vers la VRAM. $8000 est la toute première adresse de la VRAM, elle correspond au tile numéro zéro, c'est comme ça, ça bouge pas.
Les octets sont donc copiés un par un en passant par le registre A, les pointeurs HL et DE sont incrémentés et B est décrémenté à chaque fois.
L'intruction LDI est en fait un LD puis un INC. Elle ne marche qu'avec le registre HL, pour DE on est donc obligés de faire "LD A,(DE)" puis "INC DE".
L'instruction "JR NZ" indique qu'il faut sauter au label indiqué tant que la dernière instruction est différente de 0. C'est à dire: boucler jusqu'à ce que B = 0.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation GameBoy...
Tu peux changer
par
djnz décrémente b (et seulement b) et saute au label qui le suit si non égal à 0
je ne connais pas le GB, mais pour copier des blocs d'un point A à un B, tu peux le faire avec un LDIR
LDIR va incrémenter hl et de et décrémenter bc successivement jusqu'à 0
- Code:
dec b ;Décrémenter B (compteur d'itérations)
jr nz,ldt ;Sauter à ldt si B différent de 0
par
- Code:
djnz ldt
djnz décrémente b (et seulement b) et saute au label qui le suit si non égal à 0
je ne connais pas le GB, mais pour copier des blocs d'un point A à un B, tu peux le faire avec un LDIR
- Code:
ld hl, adr_depart
ld de, adr_arrivee
ld bc, nombre_a_transferer
ldir
LDIR va incrémenter hl et de et décrémenter bc successivement jusqu'à 0
Re: Mr ToutLeMonde et la programmation GameBoy...
je crois qu'il n'y a plus les port du Z80 sur GB
upsilandre- Interne
- Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015
Re: Mr ToutLeMonde et la programmation GameBoy...
si ils ont viré les meilleurs trucs... c'est complètement con
edit. j'ai cherché après coup et effectivement plus de trace de djnz et ldir... c'te loose.
edit. j'ai cherché après coup et effectivement plus de trace de djnz et ldir... c'te loose.
Re: Mr ToutLeMonde et la programmation GameBoy...
Ah oui, dommage en effet.
Et faut que je me fasse aux mnémoniques, y'a de quoi s'emmêler les pinceaux.
Je l'aime bien mon BNE... JR NZ c'est moins joli
http://www.chrisantonellis.com/files/gameboy/gb-instructions.txt
Et faut que je me fasse aux mnémoniques, y'a de quoi s'emmêler les pinceaux.
Je l'aime bien mon BNE... JR NZ c'est moins joli
http://www.chrisantonellis.com/files/gameboy/gb-instructions.txt
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation GameBoy...
ichigobankai a écrit:si ils ont viré les meilleurs trucs... c'est complètement con
edit. j'ai cherché après coup et effectivement plus de trace de djnz et ldir... c'te loose.
Je pensais qu'ils avaient viré tout les trucs inutiles :p Mais en réalité ils ont viré beaucoup plus que ce que je pensais ^^
Le CPU ressemble bien d'avantage à un 8080 qu'à un Z80... et certaines instructions du Z80 manquent quand même, comme le DJNZ ou le LDI (même si on a un bien pratique LD A, (HL)+ qui n'existait pas)
Les instructions de ports ne servaient à rien je trouve, surtout qu'ils ont ajouté les instructions suivantes :
LD A,(C) = LD A,($FF00+C)
LD C,(A) = LD ($FF00+C),A
LDH A,(a8) = LD A,($FF00+a8)
LDH (a8),A = LD ($FF00+a8),A
qui sont super pratiques :)
Stef- Interne
- Nombre de messages : 5087
Age : 45
Localisation : Sevres
Date d'inscription : 04/04/2007
Re: Mr ToutLeMonde et la programmation GameBoy...
L'idée des ports et des instructions associé c'etait je pense d'avoir un adressage 8bit avec une instruction qui prend un octet de moins et qui est plus rapide que pour le reste de l'adressage (l'equivalent de la page zero du 6502 et ses instructions associés) en plus d'eviter de découper en tranche les 64Ko.
upsilandre- Interne
- Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015
Re: Mr ToutLeMonde et la programmation GameBoy...
Je n'ai toujours pas tapé la moindre ligne de code, mais tous ces registres me donnent déjà le tournis... c'est une gymnastique différente. Moi qui voulait changer d'air, je suis servi.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation GameBoy...
Y'a aussi des instructions de transfert à travers des ports sur le hu6280, et je trouve ça vraiment utile et pratique .upsilandre a écrit:L'idée des ports et des instructions associé c'etait je pense d'avoir un adressage 8bit avec une instruction qui prend un octet de moins et qui est plus rapide que pour le reste de l'adressage (l'equivalent de la page zero du 6502 et ses instructions associés) en plus d'eviter de découper en tranche les 64Ko.
Oui ce sont 2 CPU radicalement différents .Je n'ai toujours pas tapé la moindre ligne de code, mais tous ces registres me donnent déjà le tournis... c'est une gymnastique différente. Moi qui voulait changer d'air, je suis servi.
Invité- Invité
Page 1 sur 2 • 1, 2
Sujets similaires
» [Rech] Gameboy DMG01/Gameboy color/Gameboy Advance avec écran mort
» [Estimation] Jeux Gameboy Advance et Gameboy Color (Sous blister, custom)
» Jeux GAMEBOY neufs (castlevania, nemesis..) & GAMEBOY player
» (EST) estim avant achat gameboy et gameboy color loose
» [Estim] Jeux GameBoy - GameBoy Color en boite complet
» [Estimation] Jeux Gameboy Advance et Gameboy Color (Sous blister, custom)
» Jeux GAMEBOY neufs (castlevania, nemesis..) & GAMEBOY player
» (EST) estim avant achat gameboy et gameboy color loose
» [Estim] Jeux GameBoy - GameBoy Color en boite complet
Page 1 sur 2
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum