GAMOPAT
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Mr ToutLeMonde et la programmation GameBoy...

+3
tetsuro
lincruste
vincent2105
7 participants

Page 1 sur 2 1, 2  Suivant

Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Mr ToutLeMonde et la programmation GameBoy...

Message par vincent2105 Sam 16 Sep 2017 - 10:57

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  I don\'t want that . 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 sunglass

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
vincent2105
Patient incurable

Masculin Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par lincruste Sam 16 Sep 2017 - 11:38

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/


Dernière édition par lincruste le Sam 23 Sep 2017 - 22:58, édité 3 fois
lincruste
lincruste
Interne
Interne

Masculin Nombre de messages : 5619
Age : 45
Localisation : RP
Date d'inscription : 07/06/2014

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par vincent2105 Sam 16 Sep 2017 - 21:33

Merci pour les liens Wink 
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  Razz
vincent2105
vincent2105
Patient incurable

Masculin Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par vincent2105 Dim 17 Sep 2017 - 8:52

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.
vincent2105
vincent2105
Patient incurable

Masculin Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par lincruste Dim 17 Sep 2017 - 9:51

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.
lincruste
lincruste
Interne
Interne

Masculin Nombre de messages : 5619
Age : 45
Localisation : RP
Date d'inscription : 07/06/2014

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par vincent2105 Dim 17 Sep 2017 - 21:46

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"  Mr ToutLeMonde et la programmation GameBoy... 418468 (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  Sad

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
vincent2105
Patient incurable

Masculin Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par Invité Dim 17 Sep 2017 - 22:01

Avec des ";" avant chaque Data c'est normal non ???  scratch
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par vincent2105 Dim 17 Sep 2017 - 22:09

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.
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
vincent2105
Patient incurable

Masculin Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par tetsuro Dim 17 Sep 2017 - 22:16

Ça m’intéresse :)
tetsuro
tetsuro
Patient contaminé

Masculin Nombre de messages : 593
Age : 47
Localisation : Carcassonne
Date d'inscription : 27/12/2015

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par ichigobankai Dim 17 Sep 2017 - 22:26

J'utilise WLA-DX pour l'asm sur Master System.
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 Wink
Code:
.repeat 48
.db $44
.endr
ichigobankai
ichigobankai
Patient incurable

Masculin Nombre de messages : 1922
Age : 45
Localisation : 49
Date d'inscription : 04/04/2011

https://www.2minds.fr

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par vincent2105 Lun 18 Sep 2017 - 9:16

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.
vincent2105
vincent2105
Patient incurable

Masculin Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par Stef Lun 18 Sep 2017 - 11:44

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
Stef
Interne
Interne

Masculin Nombre de messages : 5087
Age : 45
Localisation : Sevres
Date d'inscription : 04/04/2007

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par ichigobankai Lun 18 Sep 2017 - 11:50

T'inquiete wla-dx integre plusieurs ASM Wink
(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)
http://www.villehelin.com/wla.html

la doc, au cas où : http://www.villehelin.com/wla.txt
ichigobankai
ichigobankai
Patient incurable

Masculin Nombre de messages : 1922
Age : 45
Localisation : 49
Date d'inscription : 04/04/2011

https://www.2minds.fr

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par lincruste Lun 18 Sep 2017 - 13:32

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"  Mr ToutLeMonde et la programmation GameBoy... 418468 (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  Sad

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
Alors ça au moins, je peux te l'expliquer.
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
lincruste
Interne
Interne

Masculin Nombre de messages : 5619
Age : 45
Localisation : RP
Date d'inscription : 07/06/2014

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par Invité Lun 18 Sep 2017 - 14:48

Sinon y'a un tuto de furrtek pour coder sur GB :

http://furrtek.free.fr/?a=gbasm
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par vincent2105 Lun 18 Sep 2017 - 14:51

Oui, mais comme un gros boulet, je ne sais pas assembler son code. Donc je peux pas faire de bidouilles dessus Confused   Boulet
vincent2105
vincent2105
Patient incurable

Masculin Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par ichigobankai Lun 18 Sep 2017 - 15:16

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é)

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
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é !
ichigobankai
ichigobankai
Patient incurable

Masculin Nombre de messages : 1922
Age : 45
Localisation : 49
Date d'inscription : 04/04/2011

https://www.2minds.fr

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par lincruste Lun 18 Sep 2017 - 16:49

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:
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
lincruste
Interne
Interne

Masculin Nombre de messages : 5619
Age : 45
Localisation : RP
Date d'inscription : 07/06/2014

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par vincent2105 Lun 18 Sep 2017 - 16:54

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 Wink
vincent2105
vincent2105
Patient incurable

Masculin Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par vincent2105 Lun 18 Sep 2017 - 17:24

Ok, merci @lincruste, c'est bon aussi :)
J'avoue que c'était vraiment de l'hébreu pour moi jusque là. Embarassed
Voyons ce que nous réserve la suite  Mr. Green
vincent2105
vincent2105
Patient incurable

Masculin Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par vincent2105 Lun 18 Sep 2017 - 22:23

Bon je poursuis le tuto de furrtek.
Première bonne surprise, le bus d'adresse 16 bits et 4 modes d'adressage : 
-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.
Et 7 registres de travail 8bits qu'on peut combiner pour former des registres 16bits... Ca c'est complètement nouveau pour moi.

On sent qu'on est un cran au dessus de la NES
vincent2105
vincent2105
Patient incurable

Masculin Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par vincent2105 Jeu 21 Sep 2017 - 10:30

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 thumleft  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
vincent2105
Patient incurable

Masculin Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par ichigobankai Jeu 21 Sep 2017 - 11:24

Tu peux changer

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 Wink

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

ichigobankai
ichigobankai
Patient incurable

Masculin Nombre de messages : 1922
Age : 45
Localisation : 49
Date d'inscription : 04/04/2011

https://www.2minds.fr

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par upsilandre Jeu 21 Sep 2017 - 11:38

je crois qu'il n'y a plus les port du Z80 sur GB
upsilandre
upsilandre
Interne
Interne

Masculin Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par ichigobankai Jeu 21 Sep 2017 - 11:41

si ils ont viré les meilleurs trucs... c'est complètement con Razz

edit. j'ai cherché après coup et effectivement plus de trace de djnz et ldir... c'te loose.
ichigobankai
ichigobankai
Patient incurable

Masculin Nombre de messages : 1922
Age : 45
Localisation : 49
Date d'inscription : 04/04/2011

https://www.2minds.fr

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par vincent2105 Jeu 21 Sep 2017 - 13:57

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  Razz
http://www.chrisantonellis.com/files/gameboy/gb-instructions.txt
vincent2105
vincent2105
Patient incurable

Masculin Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par Stef Jeu 21 Sep 2017 - 14:41

ichigobankai a écrit:si ils ont viré les meilleurs trucs... c'est complètement con Razz

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
Stef
Interne
Interne

Masculin Nombre de messages : 5087
Age : 45
Localisation : Sevres
Date d'inscription : 04/04/2007

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par upsilandre Jeu 21 Sep 2017 - 15:34

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
upsilandre
Interne
Interne

Masculin Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par vincent2105 Jeu 21 Sep 2017 - 17:46

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
vincent2105
Patient incurable

Masculin Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation GameBoy... Empty Re: Mr ToutLeMonde et la programmation GameBoy...

Message par Invité Jeu 21 Sep 2017 - 18:25

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.
Y'a aussi des instructions de transfert à travers des ports sur le hu6280, et je trouve ça vraiment utile et pratique .

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. 
Oui ce sont 2 CPU radicalement différents .
avatar
Invité
Invité


Revenir en haut Aller en bas

Page 1 sur 2 1, 2  Suivant

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum