 Puis s'asseoir à la prochaine conférence, je suis vraiment hâte de l'avoir et je sais pourquoi la plupart d'entre vous sont ici. Parce que moi aussi j'ai très vraiment hâte. Moi aussi j'ai une Game Boy et je suis super fière et je l'ai toujours dans mon appartement et puis de temps en temps je la sors. Bon la plupart du temps j'utilise comme un amulateur et j'ai encore des rômes, des cartouches que j'ai, j'en ai encore chez moi. C'est comme ça que c'est censé marcher non ? Alors j'ai vraiment hâte de cette conférence. Alors moi mon jeu préféré sur la Game Boy c'était le premier. Pour qu'on soit clair. La première Game Boy. C'était Megaman 2, Mario Land et Le Stick West. Et si quelqu'un n'est pas d'accord avec moi c'est que vous me connaissez pas assez bien. Alors pour cette conférence c'est la conférence ultime sur la Game Boy et j'ai vraiment hâte. Ouais. Alors aujourd'hui on a aujourd'hui Michael Stiles comme présentateur. Il avait aussi une super conférence au CCC 25 et donc il va nous faire une deuxième conférence aujourd'hui. La plupart du temps, la journée, il travaille sur des systèmes de connotation. La nuit il travaille sur des systèmes obsolètes et dans sa vie d'avant il travaillait sur des consoles de jeu. Il haquait les consoles de jeu. Bonjour tout le monde. Alors je suis Michael Stiles. C'est le conférence ultime sur la Game Boy. Alors l'idée de cette conférence c'est de pouvoir parler le plus possible de tous les détails hardware sur la Game Boy, le plus possible que je peux mettre en 60 minutes. Alors j'ai à peu près 200 slides et à peu près plein de gens ont aidé. Alors bon ce sera très très intense mais on va commencer très vite. Alors cette conférence c'est parti d'une série de conférences que j'ai commencé avec le Commodore 64, ensuite le Atari, ensuite le Galaxy A donc maintenant c'est mon tour après toutes ces conférences encore mon tour et donc j'ai décidé de faire ça sur la Game Boy. Alors pourquoi la Game Boy est si intéressante ? Parce qu'au final c'est, ils ont sorti plein plein de systèmes différents, ils ont fait la Game Boy Advance, sans en soi-même compter la Game Boy Micro. Alors au final ils ont sorti 197 millions de systèmes mais ils ont sorti plus de 1589 jeux différents et en 1989 à 2003 ils ont sorti plein de jeux, ils ont mis plein de jeux sur le en Vibit, ça fait beaucoup beaucoup de jeux en toutes ces années. Il y a aussi d'autres de la compétition bien sûr à l'époque de la Game Boy, il y a la Atari Lynx, il y a la Game Gear et la Turbo Express. Alors la chose en commun qu'elles avaient c'était le fait qu'elles avaient un écran en couleur, ce qui était pas mal mais c'était aussi le temps de batterie qui tenait vraiment pas longtemps, ça tenait une dizaine d'heures. Mais bon ça avait, ça avait un écran qui ressemble à ça et on pouvait jouer directement dès qu'on le commençait. Il y a plein de modèles de Game Boy, le premier design qui a été produit le plus longtemps était le DMG qui veut dire Dot Matrix Game, matrice de jeu à point, après ça ils ont fait ça un écran plus petit et bien meilleur, après ça ils ont fait une Game Boy Lite qui a été sorti au Japon et ensuite ils ont fait la couleur qui avait beaucoup plus de RAM, deux fois plus de RAM et des couleurs bien sûr. Ensuite ils ont sorti la Game Boy Advance, c'était complètement différent, l'architecture était vraiment différent, c'était un CPU, un processeur ARM mais les jeux étaient toujours combattibles avec les anciens jeux. Alors il y a deux modèles qui existent, celui bien voulait prendre le AGS101 qui a un rétro éclairage au lieu d'un éclairage par le devant. Ce que vous pouvez voir c'est que Nintendo était déjà un amant sur ce jeu, non seulement ils ont fait une version qui était en or rosé mais ils ont aussi fait un adaptateur pour pouvoir brancher des écouteurs. Si vous voulez jouer à des jeux Game Boy sur une télé normale, il y a deux façons pour ça avec les super Game Boy. Alors le premier, jouer pas les jeux assez vite, donc c'est pour ça qu'il y a une deuxième génération, il y a aussi le Game Boy Player qui peut fonctionner avec une GameCube. L'idée du Game Boy Player c'est juste que ça envoie ses propres pixels dans le système sur lequel il est accroché et ça s'est envoyé sur l'écran. Alors quoi ça ressemble ? Vous avez un indicateur de batterie, un joypad, un speaker, un haut-parleur, vous aviez des écouteurs, un link connecteur pour pouvoir connecter plusieurs Game Boy ensemble et un droit pour mettre le game pack, un droit pour mettre la batterie, un droit pour mettre le jeu et c'est à ça que ressemblait les jeux. C'est dessus qu'il y a une ROM, il n'y a pas grand chose d'autre à dire dessus. Parlons des specs. Alors les specifications sont un peu compliquées parce qu'il y a différentes générations de Game Boy mais on va comparer avec d'autres consoles. Alors le CPU sur la Game Boy fait 1 MHz. Les gens n'ont pas d'accord, ils disent souvent non c'est 4 MHz, mais je vais expliquer un peu ce que je veux dire quand je dis que c'est 1 MHz. Alors il y avait 8KHz RAM, ce qui était plutôt pas mal pour des jeux de ce style-là. La VRAM et de RAM vidéo est de 8KHz, ce qui n'est pas énorme. La résolution est de 160% 144 et peut faire jusqu'à 4 couleurs sur les années, donc c'est 4 niveaux de gris, jusqu'à 10 Pride par ligne. Si vous vous comprenez tout ça aux autres systems ici, c'est clair que la Game Boy est bien plus avancée que par exemple la batterie de 1600, mais que c'est très en-dessous d'une Super Nintendo. Donc c'est un petit peu quelque part entre une Super Nintendo et un Commodore 64. Alors ce qui est intéressant c'est que la NES et le Commodore 64 ont été sortis dans les années début de 1980 et la Game Boy est de 1989. Et ça c'est quand même une console qui a été supportée et qui est sortée jusqu'en 2009. Donc c'est pour montrer que c'est quand même un thème au sien et c'était le tout dernier des systèmes 8 bits qui est resté en usage commun. Alors parlons de l'intérieur, ce qu'on voit à droite c'est pas très intéressant, si on regarde le devant par contre c'est là où on connecte l'écran LCD, voilà où on met le haut-parleur, voilà où on met les boutons. Par contre ce qu'on voit sur l'arrière c'est bien plus intéressant. C'est là on peut voir trois puces, donc ça c'est sur une DMG, la board originale de Game Boy. Donc il y a deux puces RAM, une pour la RAM CPU, une pour la RAM vidéo et ça c'est donc le CPU. On appelle ça le DMG CPU et c'est un SOC, un système on chip. Donc là vous vous attendriez d'habiter d'avoir pas mal de puces sur un système comme ça, d'autre genre là. Ici il y en a un seul et tout est intégré dans ce SOC. Comparons ça avec d'autres boards, d'autres consoles. Donc ça c'est la Super Game Boy, il y a plus de puces mais ça ressemble quand même beaucoup. La Game Boy Pocket qui est un petit peu plus optimisée, qui a seulement une puce de RAM pour les deux usages. La Game Boy Lite n'est pas différente, c'est un autre MGB de la série MGB comme la Game Boy Pocket mais avec un truc l'arrage et le Super Game Boy II qui est basé sur la Game Boy Pocket et voilà à quoi ressemble une Game Boy Color. Tous avaient cette puce gigantesque au milieu qui fait à peu près tout. Et celui-ci, qu'est-ce que c'est ? C'est un peu spécial, vous le reconnaissez peut-être pas à partir de l'écriture. Ça s'appelle la GB Boy. Alors il y a eu plein d'entreprises qui ont essayé de cloner la Game Boy. Et c'est bon dans la particulier, c'est un clone parfait qui a été fait en décapant et en photographant et en refaisant le masque du SOC original de la Game Boy. Donc ça c'est une Game Boy chinoise que vous pouvez toujours acheter aujourd'hui pour 30, 40 dollars sur eBay. Alors c'est un petit peu dommage parce que le Quartz est 30% trop rapide donc aucun jeu n'est jouable dessus. Reparlons des plus, enfin des bordes. Donc le DMG CPU c'est celui qui nous intéresse ici. Alors qu'est-ce qu'il y a dedans ? Donc on a d'abord un cœur de CPU, un contrôleur d'interruption, vous vous attendez à ça. Et tous les périphériques, toutes LIO, par exemple pour le joypad, pour le port série, pour le câble link et un contrôleur de son. Donc parlons d'abord du CPU, du processeur. Historiquement à la base la Game Boy est sortie entre la NES et la Super NES, Super Nintendo. La NES venait avec un processeur 6502. La Super NES venait avec un 65816 qui est la version 16-bit du 6502. La Game Boy elle est sortie donc logiquement avec un Sharp LR35902. Alors qu'est-ce que c'est qu'un Sharp LR35902 ? Ça ressemble pas du tout à une similition 102. Ça ressemble un petit peu à une Intel 8080 et à un Z-LOG Z580. Alors ça c'est intéressant parce que le Intel 8080 s'était utilisé dans le Altair 1.800, le premier ordinateur pour lequel Bill Gates a créé des logiciels pour et l'IME-SAI 8080 qui ne contenait pas de 6502. Donc si vous regardez les fonctionnalités d'un Intel 8080 et les fonctionnalités d'un Z80, vous pouvez voir comment ça ressemble. Donc le Z80 est rétrocompatible avec le 8080 et voilà les fonctionnalités du CPU de la Game Boy. Le coeur de l'architecture est identique à ce qu'on trouve dans le 8080, que ce soit les registres, l'encodage d'instruction, tout ça c'est pareil. Mais il y a quelques fonctionnalités qui ne sont pas supportées. Mais ça supporte quelques fonctionnalités du Z80, mais pas la plupart d'entre elles. Et en plus de ça il y a d'autres fonctionnalités en plus. Alors on va lister tout ça. Parlons du coeur de l'architecture d'un 8080. Il a ses registres, il y a des accumulators. Ça c'est des registres un type spéciaux. On peut faire cette opération logique qu'on ne peut pas faire avec d'autres registres. Un registre de flingue, donc il y a des flingues dedans, zéro et le carri sur la Game Boy, on n'utilise que ça. Le reste est utilisé normalement pour légitimement desissimo. Et ce qui est bien avec les registres ici, c'est qu'on peut combiner par exemple BSC avec en BC ou DE en DE. Donc on a 16 registres qu'on peut utiliser comme des pointeurs. Donc au total on a 4 registres à 16 bits qui peuvent faire des choses spéciales. Et 7 registres qu'il peut utiliser pour des choses spécifiques comme par exemple l'emplacement en mémoire vers lequel le registre HL est en train de pointer. Donc ça peut être utilisé comme 7 et ça peut être utilisé dans n'importe quelle instruction. Ça c'est pas mal. Donc voilà les instructions. Le chargement en store est plutôt classique. On peut stocker des immédiats, des directs. La stack marche par 16 bits par 16 bits. On ne peut pas toucher que des données de 16 bits. Voici toute la partie arithmétique et logique. La plupart peuvent être fait sur du 16 bits sauf incrémentation et décrémentation qui peuvent faire que sur du 8 bits. Des instructions de rotation, contrôle le flux pour sauter, retourner, saut conditionnel. Et puis quelques instructions un petit peu spéciales comme par exemple pour changer le flag de carri, nop, arrêter et pour activer et désactiver les interruptions. Alors comment ça marche les interruptions ? Sur la plupart des systèmes de cette époque, il y a généralement un vecteur d'interruptions. Mais dans le cas de cette console, c'est pas un vecteur et c'est pas forcément un. Au lieu de sauter à partir d'un vecteur, on saute à un emplacement qui est fixé au début de la RAM et pour différents types d'interruptions, on saute à des endroits différents. Donc il y a aussi une notion d'interruptions software. On peut sauter à ce endroit-là des instructions spéciales. Et l'IRQ 0, c'est un peu spécial. C'est la même chose qu'un reset. Quand vous allumez un CPU 8080, ça commence à l'emplacement 0. Donc parlons des fossilités de 8080 qui ne sont pas supportées. Donc ça c'était les flags de la Game Boy et ça c'est les flags en vrai sur le 8080. Il y a deux flags, le flag de signe qui est assez utile et le flag de parité qui n'est pas utile du tout. Donc ça c'est des flags qui ne sont pas supportés. Voilà les instructions qui ne sont pas supportées non plus, pour être quelqu'un qui n'a décidé de pas implémenter ça. Tout ce qui est des instructions de DIO sur les ports, vous connaissez peut-être ça à partir des 8086. Ici il n'y en a pas. À la place on utilise de DIO qui est mappé en mémoire. Le Z80 a beaucoup d'instructions de rotation et de shift et de test et de set de bits. Tout ça c'est supporté. Ça supporte aussi les instructions de SO relatives qui sont des SO un petit peu plus optimisées et le retour depuis interruption. Voilà tout ce que c'est supporté. Tout ce qui n'est pas supporté c'est tout ce qui est intéressant sur un Z80, un set de registres supplémentaires, des registres en plus des instructions pour utiliser ces registres, des registres alternatifs, des instructions pour copier de la mémoire, des instructions arithmétiques mais il y a quelques fonctionnalités à la place qui peuvent remplacer une partie de ça. Par exemple on a des instructions d'incrémentation ou d'incrémentation avant ou après une instruction. Si vous voulez accéder une partie en mémoire vous pouvez préincrémenter ou postincrémenter le registre de pointeur HL. Alors parlons des fonctionnalités. Une fonctionnalité c'est que la page 0 c'est pas la première c'est la dernière page en mémoire. Alors ça ce que ça veut dire c'est qu'il y a une instruction qui est optimisée qui permet d'accéder la mémoire qui est dans cette page qui est à la fin de la RAM. Alors dans ce cas au lieu de charger de la page FF0 donc qui est à la fin on peut l'écrire comme ça et ça ça prend que 2 octets et 3 cycles au lieu de 4 cycles. Donc il y a des instructions de stack et ça c'est critique ils ont ajouté quelques instructions pour stocker des données en RAM, des instructions pour échanger des morceaux de données et une instruction qui permet d'économiser de la puissance. Donc là voilà un jeu d'instruction et ça vous pouvez vous dire en regardant le code couleur que ces instructions sont assez orthogonal. Il y a aussi quelques opcodes qui sont pas là dedans parce qu'ils crash le système donc ça c'est un design intéressant. Par exemple voilà l'opcode cb et ça c'est un prefix qui donne accès à une nouveau 26 opcodes supplémentaires donc ça c'est une notion qui a été empruntée aux Z80 par exemple c'est là-dedans qu'on peut trouver aussi l'instruction swap qui a été ajouté sur le CPU de la Gameboy. Parlons de cette instruction là aussi donc ça c'est pour charger depuis une address fixe, l'autre depuis une address fixe, ça ça dit que ça prend 3 octets et 16 cycles d'horloge à 4 MHz. Alors l'internet est pas d'accord pour ce qu'on devrait parler de 4 MHz ou 1 MHz parce que tous les durées d'horloge sont divisibles par 4. Ça c'est parce que tout le système est limité par l'accès en mémoire donc il peut calculer aussi, il peut calculer que aussi vite que les accès mémoires sont possibles. Donc c'est à dire que pour y dire que c'est un CPU qui tourne à 1 MHz et que ça prend 4 octets d'horloge pour exister cette information, pour exister cette instruction. Et l'avantage de ça c'est que ça nous permet de comparer cette instruction sur ce système à d'autres systèmes. Donc c'est pour ça qu'on dit que le CPU fait 4 MHz mais en vrai comme la RAM est à 1 MHz, le PPU celui qui écrit l'épicel sur l'écran est à 4 MHz et il est connecté à la RAM vidéo qui tourne à 2 MHz. Donc c'est assez compliqué parce que le système n'est pas à la même fréquence mais en général la plupart de ces nombres peuvent être exprimés sous forme de 1 MHz. Donc pour être exact c'est pas vraiment 1 MHz, c'est un Mibihertz, c'est à dire 1024 x 1024 MHz. Donc ils ne sont pas basés sur la base 10, ils sont basés sur la base 2, c'est joli. Et donc maintenant quand je parle de cycles, je veux dire les cycles de la machine, c'est à dire la machine entière à 1 MHz. Donc voilà le CPU, c'est un CPU 16 bits en natif qui a 8 bits d'adressage à cause des pointeurs. Donc voilà les 64 kilos, c'est tout ce qu'ils peuvent voir. Alors les premiers 8 kilos c'est la RAM, ça ça vient directement de la cartouche qu'on met dedans. On a une ROM, on parle plus tard la RAM vidéo qui est mappée ici, une RAM externe qui peut optionnellement être montée ici, la RAM interne et ici on commence à avoir un peu plus de trucs vers la fin. On peut voir qu'il y a une nouvelle page de RAM OAM qui est une RAM vidéo avec un but spécial, c'est distinct de la vidéo, la RAM vidéo spéciale normale. On va parler plus tard. La dernière page qui est la page 0 contient toutes les informations d'IO pour les périphériques, par exemple le son, la vidéo et tout à la fin on a de la RAM qui est distincte du reste de la RAM. Donc ça ça veut dire que les jeux peuvent uniquement avoir 32 kilos octets. Alors il y a des jeux qu'on vous enquête ça, cette liste marche très bien sur 32 kilos octets, c'est plutôt simple à fabriquer mais d'autres jeux peuvent avoir besoin. Alors il n'y a pas de limites théoriques mais il y a des jeux qui vont jusqu'à 2 mega octets, celui-ci par exemple à 128 kilos octets. La façon de faire ça c'est d'avoir un contrôleur de mémoire qui est ajouté sur la cartouche et ce contrôleur peut changer les banques de mémoire et ça c'est assez commun dans ce genre de système. Alors ces contrôleurs de mémoire peuvent être assez différents mais la plupart d'entre eux marchent de cette façon-là. La banque la plus basse est toujours mappée à la ROM en banque 0 et les 16 kilos octets au-dessus sont mappés à la banque qui va bien sur le pôle moment, la banque 1, 2, 3, etc. Donc ça c'est contrôlé en écrivant des valeurs magiques à des adresses en ROM, ça ça va être intercepté par le contrôleur et il va échanger les banques. Alors c'est aussi pour ça qu'on a une RAM externe, la cartouche peut par exemple exposer une RAM externe par exemple pour faire des sauvegarde, une RAM qui est alimentée par une batterie et ça se permet d'enregistrer les jeux et c'est pareil peut avoir plusieurs banques, même modèle. Alors qu'est-ce que c'est que ça ? La RAM, la boot ROM, la ROM démarrage. Quand le CPU démarre avec cette adresse 0 en mémoire, la boot ROM c'est ce qui fait ça, ce qui dessine ça et qui fait le petit dingue. Alors cette boot ROM contient ça, ça a pris un certain temps avant que ce DOM soit extrait, c'était assez difficile. Donc voilà ça c'est la ROM complète, ça initialise la RAM, le son, ça affiche le logo, enfin ça prépare le logo, ça décode le logo, ça scrolle dans le logo, ça joue le petit son et ça c'est intéressant, ça compare le logo parce que les jeux ont besoin d'avoir une copie de ce logo. Si cette copie ne marche pas, le jeu ne se lance pas. Alors ça, ça permet de contrôler quel jeu sont autorisés sur cette plateforme. Ça permet d'éviter les jeux qui sont des versions de copyright, mais aussi des violations de marque déposées. Si vous n'avez pas le bon logo, c'est une violation de marque déposée. Après ça, vous avez une vérification des haideurs pour s'assurer qu'on n'a pas besoin de souffler sur les pins du connecteur de la cartouche et ensuite on saute sur la ROM et on continue l'exécution là-bas. Alors, ce logo, il a fiché à partir de la cartouche, c'est-à-dire que si vous démarrez un logo sans la cartouche, vous verrez ça. Mais ça, ça ne veut pas dire qu'une application ou un jeu peut mettre n'importe quel logo là-dedans parce que ça peut être comparé et à ce moment-là, ça ne démarrerait pas. Et grâce à ça, en fait, il n'y a pas vraiment de cleanup. C'est pas vraiment vérifié. Donc il y a certains jeux qui ont hacké, qui ont rajouté des petits personnages, tout ce qui est autour. Ils pouvaient jouer avec, en fait. Le Nintendo logo est sur l'écran. C'est ce qui compte. Donc on peut faire autre chose maintenant avec. Ce qui est plutôt pas mal. Alors, ça load jusqu'à la dernière inscription et c'est l'instruction qui éteint le boot ROM. Alors au final, la première page de la RAM est utilisée pour ficher les données du jeu. Donc ça continue à tourner jusqu'à la prochaine inscription du jeu. Et justement, il y a souvent un show ici parce qu'il y a un header qui est placé à cet endroit-là. Ce header contient le logo Nintendo et le checksum parce que c'est très important pour checker la data. Mais au final, le jeu ne vérifie pas le reste. Donc après ça, on peut vraiment avoir les données du jeu. Alors une autre chose qu'on n'a pas regardé, c'est l'entrée sortie qui est la dernière page du système. C'est la page 0. C'est la page qu'on peut accéder très facilement. Alors les tout premiers 21 ici sont la RAM externe. Et le reste, on peut voir les différents devices. Voilà. Ça, c'est tous les registres qu'il y a dans le système. On peut voir le serial, timer. Tout ça sont surtout les composants dont on va parler maintenant. Alors le joypad input, c'est vraiment facile. On voit toutes les entrées qu'on peut avoir. Donc il y a quatre boutons et quatre directions. Donc on pourrait dire qu'on peut avoir huit entrées sorties. Mais en fait, on peut le faire avec six entrées sorties parce que c'est deux colonnes avec trois lignettes. Donc on peut tester directement avec ces lignes-là et on peut voir directement les boutons qui ont été effrécés. Donc on peut le faire avec justice. Donc c'est plutôt simple, il n'y a que ça. Donc le transfert de data, on peut directement le faire avec un lien, un link cable comme vous avez dû voir. Alors il y en a un qui va dans une direction et une pour la formation qui va dans l'autre sens. Et il y en aura un, il y a un câble aussi qui sera utilisé pour les cycles d'horloge. On doit savoir lequel est envoie à l'horloge et lequel reçoit l'horloge. Alors c'est toujours à huit kilohertz et ce qui reçoit les cycles d'horloge peut être n'importe quoi. Partez au moment où le transfert commence, les deux cycles d'horloge vont toujours en même temps sur les deux câbles. Alors le timer, il n'y aura toujours qu'un seul timer sur le système. Le TMS, le registre TMS, c'est là où on met la valeur de départ et c'est là où on peut sélectionner les différentes vitesses. Quand on commence, ça monte jusqu'à ce que ça overflows et quand ça overflows, ça reloade le module et ça peut générer une interruption. On parle d'interruption, il y a aussi un contrôleur d'interruption. Il y en a quatre différentes de registres pour gérer ça. On va parler de ça plus tard. On a vu le timer déjà, on a vu parler du serial, du joypad et du timer. Ça c'est un autre register, le flag register sur lequel on peut savoir lequel interruption est encore en attente. Donc ça, ce sont toutes les adresses sur lesquelles ils peuvent sauter. Donc on n'a pas besoin de savoir lequel c'est parce qu'en fait il sait les différentes locations sur lesquelles il peut aller. Alors le contrôleur de son. Le contrôleur de son, il n'y a aucun autre qui a autant de registres. Il y a énormément de registres pour le son. Alors on peut regarder les registres pour le son. Il y a quatre voies différents et ils ont cinq registres chacun. Et donc les registres ont des... une signification différente. Alors les significations des quatre voies sont pas forcément les mêmes. Il y en a deux qui sont à peu près les mêmes. C'est la pulse et l'autre qui est la voie. Et l'autre qui est le bruit. Donc si on regarde les bits ici, ils sont similaires mais ils sont pas exactement les mêmes. Et c'est ce qui fait savoir lequel est lequel. On peut regarder ceux qui sont en commun. Donc toutes les voices, les voies, on va avoir le trigger. Donc celui qui va le lancer. On peut les tourner, un peu les allumer tout ensemble. Mais il y a aussi celui de la longueur. Et donc on peut éteindre celui-là après quelques secondes. Donc on peut regarder celui de la wave, donc la vague, la sonde. Donc ce qui est pratique, c'est qu'on peut vraiment lancer n'importe quel son d'onde. Il y a 32 entrées de quatre bits chacun. Et on peut dans tous ces slots, on peut ranger toutes ces informations. Donc on peut par exemple créer ce son-là, qui est plutôt facile. C'est une sonde plutôt facile. On peut aussi avoir ce signe-là. Ou on peut faire n'importe quoi au final. N'importe quel on. Donc c'est plutôt flexible. Puis ensuite il y a la fréquence qui peut permettre le pitch. Et plus 2 pour le volume. Donc 100% ou 20% où on peut le couper carrément. Les deux autres, c'est la pulse. Donc ils sont très similaires. Tous ces bits sont les mêmes et réagissent de la même façon. On peut pas vraiment faire la forme de l'onde. Ça va toujours être une pulse. C'est soit haut soit bas et des ratios différents. Mais ces deux bits définissent le ratio entre haut et bas. Donc il n'y a que ça. Donc ça c'est 12.5 pour le haut et le reste est plus bas. Et là c'est 25%. La 50%. Et 75%. C'est exactement la même chose que 25%. Mais c'est juste inversé. Donc on peut faire avec ces deux registres. Mais on peut aussi utiliser le volume sweep. Comme ça on peut utiliser le volume qui va plus fort ou moins fort. Alors c'est assez standard d'utiliser ça pour les instruments où on peut aller un peu plus fort avec les volumes. Ça fait un effet intéressant. Et le premier de la pulse, des deux pulses, a ce concept de volume pulse. Et grâce à ça on peut aller plus haut ou on peut aller plus bas. Donc on peut voir que c'est vraiment juste pour des effets de son. Donc voilà quelques effets qu'on peut faire avec. C'est ce qu'on peut faire avec tous ces registres. Et donc il y a aussi le quatrième voie qui peut aussi faire du bruit. Donc ça c'est juste pour faire des nombres aléatoires. Donc selon si c'est en mode 7 bits ou en mode 8 bits, on peut pouvoir faire deux types d'ondes différentes. Donc ça c'est 15 et 7. Donc c'est 15 et 7. Donc encore tous les registres qu'on a, une deuxième fois les voies. Donc ces registres là en en en pour le canal droite et gauche. Alors ils ont chacun leur propre contrôleur audio avec un signal analog. Mais les jeux n'ont jamais vraiment utilisé ça. Il y a aussi un autre registre ici pour dire est-ce que la voie doit être à droite ou à gauche ou sur les deux ou sur aucun. Et ça c'est celui pour la batterie, pour dire si c'est allumé ou éteint le son. C'est pour gagner de la batterie. Alors les sons de Game Boy n'ont souvent utilisé que pour les jeux. Il y a encore des gens qui font de la musique avec. Donc par exemple il y a Sound DJ qui est encore utilisé aujourd'hui pour faire de la musique. On va parler de l'unité qui s'occupe des pixels. Alors cette unité s'occupe de faire les graphismes et ça n'a pas beaucoup de rochistes. Mais au final on va regarder les spécifications. Alors 160 par 144 pixels, c'est pas beaucoup. Il n'y a que quatre nuances de gris, ce qui n'est pas beaucoup. Au final ça faisait plutôt des nuances de verre au final. Mais les Game Boy après c'est un peu mieux. C'est des tiles qui sont séparés et il y a 8 kb. Alors ce que je veux dire par des tiles de 8 par 8, si on regarde Texas par exemple on peut voir que tout est basé sur ces blocs. Mais pareil sur Zelda on peut voir qu'il y a un pattern qui se répète et tout est aligné. Pareil pour Super Mario c'est encore plus évident surtout parce qu'on voit beaucoup ces différents tiles. Ça se voit même sur Donkey Kong au final. Si on met la gris, on peut vraiment voir les répétitions qui sont sur cette gris. Ils ont bien caché mais ça au final on le voit quand même. Comme certains jeux on peut le voir directement, ils jouent avec ce concept de tiles. Alors qu'est ce que c'est une tile ? Alors une tile c'est 8 par 8 pixels avec 4 couleurs comme le reste du système. Ces couleurs sont encodées 0 0 0 1 0 1. Donc on va afficher ça sur les pixels. Donc on peut voir comment faire si on regarde la première ligne ici donc ça va être 0 2 ou F F en exodécimales. Donc on peut voir discrime, décrire du coup directement la gris avec ces nombres exodécimales. Donc ça ne fait pas forcément du sens, c'est l'ordre de cette palette. On peut choisir ce qu'on veut au final. Il y a deux bits qui sont storés pour afficher ça et donc les couleurs natives sont 0 0, c'est blanc et noir c'est 1 1. 0 0 c'est noir et 1 1 c'est blanc. On peut voir que ça fait des effets directement comme ça. Il y a 256 tiles dans le système. Donc qu'est ce que vous reconnaissez celle-là par exemple ? Alors ça c'était Tetris. Si vous les reconnaissez pas les petits personnages en fin, c'est que vous n'avez pas encore fini le jeu Tetris. Ça c'est Zelda et ça c'est Super Mario Land qui en utilise pas beaucoup juste en 28. Est-ce que vous reconnaissez ça ? Alors on va les utiliser pour afficher quelque chose. C'est un jeu de tennis. C'est 20 par 18 tiles pour afficher le cran mais c'est pas tout ce qui est parce qu'au final dans la vidéo il y en a 32 par 32 et ça c'est ce qu'on voit quand on voit le fond complet. Et en fait ce qu'on voit c'est juste un point de vue sur ce fond complet. Donc c'est 32 par 32 et c'est sur 256 par 256 pixels qui est plutôt pratique. Et en fait c'est facile on peut juste bouger cette vue autour. Donc en pratique on peut le voir et on peut voir sur le background, sur cette image on peut voir ce qui se passe exactement. Donc c'est vraiment une caméra au final qui se balade dessus sur une map de 32 par 32. Alors ça c'est pour les jeux qui sont par 32 par 32 mais sur les jeux infinis par exemple, sur le Super Mario. Alors on peut avoir toutes ces colonnes et on peut le bouger comme ça. Mais qu'est-ce qui se passe quand on arrive à la fin ? Alors en fait ça va repartir au début en fait. Et si on redessine les colonnes assez vite au final on peut avoir un monde infini et ça se voit pas. Donc on peut le voir très clairement sur l'écran qu'on voit qui n'est pas affiché, que je vous affiche à droite. On peut voir les colonnes et on peut voir que ça marche bien. Par exemple sur Donkey Kong on peut le voir aussi. Alors ça utilise les colonnes directement, ça les utilise là où ça va aller. Donc ça c'est impressionnant. Alors ça c'est juste un calque qu'on peut voir juste là. Donc ça c'est juste le fond et donc il y a aussi un autre calque qu'on peut mettre par dessus et ça peut se mettre à la position x et y et ça va le dessiner ici. Alors il n'y a pas vraiment de transparence, de concept de transparence. C'est vraiment juste, tu le mets à un endroit ou à un autre et ça dépend du paramètre de scrolling. Donc c'est par exemple si on affiche le score, c'est là qu'on va utiliser. Donc c'est très facile pour les jeux. On peut aussi le mettre sur la droite. Donc ça c'est des jeux de Game Boy Color mais c'est pareil, ça marche aussi sur l'ancienne Game Boy. Alors il y a aussi un autre calque en plus que ça qui est les sprites. Les sprites c'est les petits objets qui sont sur l'écran qui ne rentrent pas sur le 8x8 et on peut les positionner comme on veut. Donc on a plusieurs registres pour ça. Ils appellent ça des OBJ mais bon nous on a appris à ces sprites parce que tout le monde dit sprites. Alors tous les sprites dans ce système sont mis dans le OAM donc la map d'attribuie des objets et il a toutes ses valeurs. Alors la une d'entre elles c'est la position X si on le met tout à gauche de l'écran on peut se dire que c'est 0. Alors pourquoi c'est 8 ? Parce qu'en fait si on le met à 0 c'est pas visible et si on le met à 0 c'est encore moins visible. Donc il faut en fait la raison pour laquelle c'est comme ça c'est pour pouvoir faire rentrer des objets directement. Alors la première position où on le voit complètement c'est 16 parce que ça peut aller jusqu'à 16 pixels d'autor. Donc c'est une position naturelle ici par exemple. Ce qu'on peut regarder c'est à quoi ça devrait ressembler. Donc c'est toujours 8x8 c'est le même encodage. Donc ça code 00 pour la transparence. Donc c'est le même encodage c'est le même genre de tiles et il y a aussi 32x32 donc comme l'autre et on peut voir que ici celui là est positionné ici sur l'agric. Donc ici il y a aussi le bit qui permet de flip. Alors il y en a un qui est à droite on peut l'afficher à un horizontal haut vertical c'est pour ça qu'il y a deux flips X et Y. Si on le flip orientalier horizontalement on peut voir qu'il est mort. Alors le prochain bit c'est la palette. Alors une combinaison de bits ça parle de transparence donc au final il ne reste plus que trois et c'est pas bon. Donc il ne voulait plus avoir à forcer les trois couleurs. Donc pour les sprites plutôt que d'avoir qu'une couleur sur trois il voulait qu'on puisse utiliser toutes les couleurs. Donc ils ont fait deux palettes en fait et c'est pour ça qu'il y a aussi ce flag pour est-ce que c'est une palette 0 ou la palette 1 pour pouvoir avoir accès à toutes les couleurs. Et c'est comme ça que ça ressemble le reste si on l'est changé. Alors il y a un bit qui est pour la priorité. Alors c'est pour savoir si ça commence à afficher par rapport au fond. Alors ça va s'afficher au dessus de ses pixels et voilà ça fichera du coup derrière les blancs. Ce n'est pas forcément blanc au final. C'est pour ça qu'existe la palette. C'est parce que c'est la palette qui a 0. Donc si tu choisis une autre palette alors ce serait dessiner sur une autre palette. Si on met 0 ce serait dessiner surtout sauf bien sûr la transparence. Alors les sprites priorités tu ne peux pas décider c'est toujours fixé. Et là c'est parce que la position horizontal est plus bas que l'autre. Alors à partir du moment où il est plus bas c'est celui qui gagne en fait. Ils sont dans la mémoire comme ça et c'est celui que ça fiche comme ça. Quand le rond va être un peu plus bas et du coup il va s'afficher plus devant. Et c'est pour ça que des fois on voit ce espèce de clignotement dans certains jeux aussi. Il y a 40 sprites totale sur l'écran. On peut en avoir 40 au total sur l'écran en même temps. Et par ligne on peut en afficher que 10. Donc si on a un 11 ici on peut voir que cela par exemple ne serait pas dessiné. Ça là ils ne seront jamais dessinés même pour cette ligne et l'autre. Ce tout à gauche sont les 11 qui seront visibles dans l'ordre que le programme a décidé. Alors ça c'est l'entrée complète sur OAM. Donc voilà sur la mémoire une entrée OAM. C'est là où c'est stocké. Donc il y en a 40 pour les 40 sprites. Donc c'est l'OAM RAM donc c'est la RAM dont on a parlé tout à l'heure. Et ça ne fait pas partie de la vidéo RAM. C'est vraiment juste pour ça. Donc une autre chose que je voudrais sur les sprites c'est que même le tout petit Mario c'est vraiment le plus petit. Il est quand même trop grand pour les 4. Donc on peut le faire sur 4 et c'est ce que le jeu fait. Et il y a aussi un autre mode sur lequel on peut avoir des sprites de 8 par 16. Donc c'est comme ça qu'ils font pour celui-là. Donc on a vu les différents calques. Il y a encore une autre chose qu'on peut faire c'est complètement éteindre l'écran et donc ça c'est une autre couleur en fait. C'est un peu plus clair que blanc. Bon c'est pas très utile parce qu'il faut complètement éteindre l'écran. Donc si on éteint, si on allume l'écran alors du coup ça devient autre chose. Là on peut remplacer encore pour pour gris. Donc on peut afficher une vidéo par-dessus. Et donc on peut afficher les deux. Et on voit pas vraiment de différence sur le sprite. Ça ne fiche pas différemment. Donc on voit pas vraiment des différences sur le sprite. Donc comment ça marche avec la VRAM, donc la memory mode. Alors il y a 4 pour les sprites, 4 pour le background et 1 pour le background mode. Et il y en a aussi un qui le bat pour la map window. Mais c'est pas vraiment le plus efficace mais bon c'est ça qu'ils ont fait parce que c'était plus facile. On n'a que 8 kilobits de video RAM. Donc si on met ça ici, si on met les sprites et les backgrounds ici, on n'a plus de place. Donc on essaie de se remercier. Si on met ces mails sprites ici, le background et le window mode ici. Où est-ce qu'on fait ? Mais les backgrounds, on va les faire overlap en fait. Et il y a différentes configurations ici. Donc on peut m'avoir les 3 bits complètement overlap ou juste en vraiment. Ou alors on peut les bouger ou les avoir au même endroit. Alors qu'est-ce que ça veut dire overlap au final ? Alors ça c'est les backgrounds et c'est le sprite. Donc ils sont stockés dans le même format. Donc vite par pixel. Et donc ils peuvent partager les mêmes tiles. Mais on peut aussi les afficher comme ça. Donc si on affiche le premier et les derniers. Donc le background serait 2 et ceux de milieu seraient utilisés par les deux. Du coup. Donc Super Mario par exemple ici on peut voir que les deux premiers tiers sont utilisés pour les tiers et que les derniers par contre sont utilisés pour le fond. Prochaine étape. Le timing vertical. Alors comme dans les écrans CRT, voilà comment un écran CRT affiche son image. Bon là c'est forcément très ralenti. Ça les écrit de haut en bas, de gauche à droite. Et même chose sur la Gameboy. Ça a continué à écrire l'image. 70 fois par seconde, de haut en bas, ligne par ligne, de gauche à droite. Alors ça ça a été fait parce qu'ils ont réutilisé des anciens composants. Ils ont complètement reconçu le système. Mais bon ils voulaient quand même avoir un écran qui sera affiché 60 fois par seconde. Donc ils l'ont fait comme ça. Et ça c'est important à savoir si vous voulez savoir certains effets que vous ne pouvez pas forcément faire. Par exemple vous pouvez voir ici que des morceaux différents de l'écran se comportent différemment. Et si on regarde la ligne de la ville comme ça qui défile, ce serait plus facile d'avoir ça qui défile tout seul sur le grand écran. Mais on veut seulement l'avoir qui défile sur une partie de l'écran. Donc si vous regardez comment marchent les registres, si vous regardez comme dans 64 vous connaissez ce truc. Si on veut savoir est-ce qu'une ligne est en train d'être dessinée. Et donc plutôt que de simplement attendre que ce soit dessiné, on peut aussi mettre une interruption et ça nous réveillera au moment où la ligne sera en train d'être dessinée. Donc mettons une interruption ici à la ligne 8. Donc là ça va commencer à écrire jusque là et à ce moment là on va commencer à afficher le scroll. Et on va mettre une interruption à 42, ligne 42 et du coup on va continuer à dessiner avec notre mode d'affichage 23. Puis après la ligne 42 on met un autre mode ici jusqu'à la ligne 80 et quelques. Et ensuite on dessine le dessin qui lui n'a aucun type de défilement. Et ensuite on fait la même chose pour le prochain affichage à nouveau. Alors dans cet exemple c'est pas forcément que en fonction du scrolling horizontal. Là ce que vous pouvez voir c'est que ce qui est en haut à droite c'est une fenêtre. On en a parlé avant. Les fenêtres s'affichent à partir d'un endroit donné faire la droite et juste qu'en bas de l'écran. Ça veut pas afficher que sur une partie de l'écran. Mais si on peut, on se déclenche à ligne 0, on affiche la fenêtre et qu'on arrive à la ligne 40, on éteint la fenêtre. Et du coup en dessous de la ligne 40 le ppu se dit que fenêtre qu'elle fenêtre, qu'il n'y a pas de fenêtre. Et du coup ils ne m'affichent pas. Et on peut voir ça dans toutes sortes de jeux. Un truc comme ça ça peut être fait par exemple avec les fenêtres. Ça peut aussi être fait avec d'autres techniques de découpage d'écran. Si vous ne vous déclenchez pas seulement sur certaines lignes mais sur toutes les lignes vous pouvez faire un truc comme ça. Donc à gauche vous pouvez voir ce qui s'affichait à l'écran et à droite vous pouvez voir ce qui est affiché dans la rame vidéo. Si vous changez le décalage de X sur chaque ligne, voilà la courbe qui est utilisée comme fonction de transformation sur l'image et ça c'est simplement utilisé à chaque frame. La courbe est générée à chaque frame. Et du coup ce qu'il a à faire c'est simplement que pour chaque ligne il suffit de regarder le registre CX qui décalent du coup l'affichage. Donc par exemple dans cet effet pour les jeux de course c'est plus de moins la même chose. Voilà ce qu'on peut voir dans la rame vidéo. C'est juste une ligne droite et ça c'est déformé pendant l'exécution pendant qu'on affiche l'image. Donc voilà ça c'est la source et voilà ce qu'on peut voir sur l'écran. Si on ignore l'esprit ici, voilà la courbe qui est utilisée pour déformer et voilà les offsets de SCX. Donc si on continue à mettre un jour SCX à chaque ligne on peut le courber comme ça, courber la route comme ça. Alors ce qu'il faut voir c'est que le milieu il y a un pattern et ça c'est fait en changeant la palette toutes les quelques lignes. Et on peut même continuer à aller plus loin. Ce jeu peut carrément faire des bosses dans la route et ça c'est fait non pas seulement en changeant le registre de scroll horizontal mais aussi en changeant le registre scroll vertical à chaque ligne. Donc ça se permet d'upliquer des lignes et d'en passer, d'en skipper. Et si vous mettez à jour votre registre scroll vertical au milieu du ligne, vous pouvez faire ces défaits de s'agigottes là, qui se faire deux dimensions. Alors allons un petit peu plus loin sur le sujet, parlons du timing horizontal. Qu'est-ce qui se passe pendant qu'une ligne se est en train de traficher ? Donc c'est pour ça qu'il y a le mode de transfert du pixel du PPU. Normalement ça prend 43 cycles d'horloge et il y a 144 lignes. Donc on ne veut pas imaginer qu'à la fin de la première ligne on va commencer immédiatement à dessiner le pixel suivant de la ligne suivante. Le premier pixel de la ligne suivante. Ça c'est pourquoi c'est parce qu'il y a au début de chaque ligne une recherche dans le registre dans la rame OM qui prend 20 cycles et à la fin il y a aussi un nettoyage horizontal qui prend 51 cycles. À la fin de toutes ces lignes il y a aussi un nettoyage vertical pendant 10 lignes. Donc faisons les calculs. 114 x 154 cycles d'horloge à 1 MHz. Ça nous fait 17000 et quelques cycles d'horloge par écran et ça nous fait qu'on a une fréquence de rafraîchissement de 59,7 Hz. Donc si vous avez accès au registre du PPU vous pouvez lire ces informations et le CPU a accès à ça. Alors pourquoi est-ce que le CPU a accès à ça ? Enfin, regardez d'abord ce que font ces différents modes. Alors pourquoi est-ce qu'on regarde des informations dans la rame OM au début de chaque ligne ? Pour chaque ligne le PPU doit décider de quel sprite sont visibles pour cette ligne. Alors on a 50 sprites disponibles dans le système et il doit être filtré. Il faut trouver les sprites qui sont visibles sur cette ligne et les mettre dans un arrêt de 10 sprites qui peuvent être visibles sur cette ligne. La logique pour ça c'est que la position X peut pas être zéro parce que ça ne serait pas visible et la ligne qu'on est en train de dessiner doit être entre la première ligne du sprite et la dernière ligne du sprite. Et si c'est le cas c'est ajouter à les listes à l'arrêt des sprites qui sont visibles. Alors dans la Game Boy original il y avait un bug intéressant là-dedans si vous faites quelques calculs que ce soit sur 16 bits avec des nombres entre FE00 et FEFF qui est le pointeur vers la rame OM même si vous n'accédez pas à la rame du tout ça va effacer la rame pendant la recherche dans la rame OM. Alors pour quelle autre raison est-ce qu'on pourrait s'intéresser à ce qui se passe là-dedans dans le PPU. Le CPU est connecté à la rame et le PPU est connecté à la rame vidéo et la rame OM est aussi connecté à ça. Le CPU pourrait être connecté aussi à la rame vidéo directement et ça pourrait bien être décrire directement la rame vidéo mais on ne fait pas ça comme ça. Il faudrait une rame vidéo qui serait double vitesse donc il y a de combien de réponses 4 fait ça comme ça mais dans la Game Boy non il faut passer par le PPU donc ça se permet de dire le PPU peut dire non c'est pas le moment de décrire alors ça veut dire que rien de mauvais peut se passer là-dedans mais ce n'est pas très utile parce qu'il faut attendre que le PPU soit dans le bon mode pour pouvoir accéder à la rame. Par exemple pendant le transfert du pixel on ne peut pas accéder à la rame par contre pendant la recherche dans l'OM ou dans les blancs là on peut accéder à la VRAM. Si vous voulez accéder à la rame OM vous ne pouvez pas le faire pendant la recherche OM ou pendant le transfert du pixel parce que c'est pendant qu'on va être dessiné les sprites donc le PPU a besoin de ça vous pouvez uniquement y accéder pendant ces moments là. Donc il faut faire très attention à ces moments là pendant qu'on dessine l'écran. Donc globalement tout ça c'est pas un bon moment pour le CPU il ne faudrait pas qu'il fasse quoi que ce soit d'important à ce moment là. Donc par exemple si vous voulez bouger une nouvelle colonne dans le background vous devriez faire ça pendant le V blanc là où vous avez le plus de temps tranquille et dans ces jeux là toute cette logique là peut être faite pendant que l'écran est en train d'être dessiné mais un truc important c'est qu'on ne peut pas écrire non plus de nouveaux sprites dans l'OM parce qu'à ce moment là l'OM n'est pas accessible. Donc ce que font les joueurs en général c'est généralement qu'ils ont une copie de l'OM dans l'OM du CPU et que pendant le V blanc il copie cette copie dans le vrai OOM. Donc ils vont copier un bloc de ça vers l'OM qui est à son endroit là. Ça c'est pas à l'échelle bien sûr. Alors le CPU a pas besoin de faire ça lui-même. Il y a une fonction, le jeu on ne pas besoin de faire ça mais il y a une fonction qui permet de faire exactement ça qui permet de copier en 160 cycles un emplacement vers un autre emplacement et pendant cette copie le CPU continue à tourner et alors il ne peut pas accéder les données dans l'espace d'adressage d'origine de cette instruction. Donc il faut attendre. Cette attente doit être faite d'autres ailleurs. Le seul que l'on peut le mettre c'est pendant la H-RAM, dans la H-RAM. C'est un bon moyen de utiliser la H-RAM. Parlons du pipeline de Pixel et on va aller en profondeur là-dedans. Et donc ça c'est de la recherche nouvelle. Il y a des choses là-dedans qui n'ont pas été divulguées au public avant. Donc le FIFO de Pixel c'est un composant central de comment ce que la Game Boy dessine ces images. On a des pixels, donc il y a des pixels sur le LCD. Il y y en a déjà cinq qui sont décalés et qui sont envoyés au LCD. Dans le FIFO imaginons qu'on a ces pixels là. Alors pour chaque étape, pour chaque pas de 4 MHz, on décale un pixel et on l'envoie au LCD. À chaque cycle on décale un pixel, on l'envoie au LCD. Alors là vous pouvez voir que le bouton vert vient de devenir rouge et ça c'est parce que le FIFO de Pixel doit contenir au moins 8 pixels pour voir envoyer des pixels. Pourquoi on va en parler ? Alors ça veut dire qu'on a besoin de balancer les nouvelles données dans le FIFO. Comment on fait ça ? Et bien il y a un feature. Le feature c'est celui qui va récupérer les tiles du fond. Donc lui il connaît la position dans la map où il va aller chercher. Et à un cycle il va aller lire l'information de la tile. Au cycle suivant il va aller lire la première partie de données. En du cycle suivant la deuxième partie des données. Ça ça vient de la RAM ou sont les tiles. Et c'est parce que chaque ligne d'une tile fait 16 bits. C'est pour ça que ça prend 3 cycles. Et du coup après ça revient, ça lira les informations sur l'emplacement de la tile et ces données sont poussées dans le FIFO. Et comme ça le FIFO peut continuer à balancer des pixels vers le LCD. Alors bien sûr tout ça se fait en même temps en parallèle parce que en même temps qu'on est en train d'ajuster ces données, le FIFO est en train de les pousser vers le LCD. Donc le Fetch peut se faire une étape. Donc ça ça pousse, ça pousse. Et là on lit la première partie des données, pousse, pousse. Et là on lit la deuxième partie des données. Et à ce moment-là ça ne peut pas mettre les données dans le FIFO. Parce que le FIFO n'est pas encore vide. Donc là le Fetch attend que cet indicateur devienne rouge et que le FIFO soit idle pendant un moment. Et là il peut mettre les données dedans. C'est pour ça que si vous regardez les paternes d'accès du PPU sur la V-RAM, c'est pour ça que vous allez voir trois lectures à chaque cycle. Donc le Fetch pousse jusqu'à 8 pixels par trois clocks. Et ça fait une pause pendant le quatrième cycle d'horloge à moins qu'il y ait déjà de la place dans le FIFO. Le scrolling, le défilement, c'est fait très simple. Si on décale SCX deux par trois pixels, les trois pixels sont juste jetés. Et le prochain pixel vient ici sur le LCD. Donc à la fin de la ligne, ça devient intéressant. Parce qu'ici on veut déclencher quelque chose qu'on arrive à 160. Mais là ça pourrait contenir les pixels qu'on ne va pas vraiment dessiner. Parce qu'on est peut-être déjà en train de charger la prochaine tile dont on se fiche ici. Donc c'est pour ça que ici ils se rencontrent que ça a fait trop de travail. Et c'est pour ça qu'on va entrer dans le mode H-blanc, le blanc horizontal. Et c'est pour ça que du coup les cycles d'horloge sont comme ça et que ça ne prend pas forcément exactement 40 cycles d'horloge qu'on va pas s'attendre. Alors pour les fenêtres, ici, imagine donc qu'on a une fenêtre qui doit s'afficher à partir de la clé de l'horloge 26. Et quand on arrive à 26, on va complètement effacer le FIFO et le FIFO va s'arrêter parce qu'on ne veut plus les pixels qu'il y ait dedans. Et là on va du coup passer à la map des fenêtres ici et le Fetch va être redémarré. Donc il va fêcher la taille, il va fêcher la data 0, la data 1 et dès qu'il a fait ça, il peut immédiatement mettre les données dans le FIFO de Pixel. Donc dès qu'on arrive à entrer sur la fenêtre, les pixels de fenêtres sont balancés dedans. Si on arrive sur des sprites, alors on a le comparateur. On compare est-ce qu'on est entre la position début X et la position fin de X ? Si oui, on sait qu'il y a le sprite. Alors la proche chose qu'on fait dans ce cas là, c'est qu'on arrête le FIFO pour qu'il arrête de pousser des pixels supplémentaires. On dit au Fetch de nous récupérer une ligne du sprite. Donc là on exécute le Fetch, on récupère une ligne et là on le superpose avec les 8 premiers pixels et on le mixe dedans. Et ça c'est pour ça que le FIFO a toujours besoin d'avoir 8 pixels. C'est parce que comme ça il peut mélanger un sprite avec les 8 prochains pixels qui vont arriver. Alors ça c'est vraiment différent de ce qu'il se fait sur les autres systèmes. On pousse les pixels à une fréquence donnée jusqu'à ce qu'on arrive à une fenêtre. Quand c'est le cas, on efface le FIFO et du coup on ne pousse pas de pixels pendant un long moment jusqu'à ce que le FIFO ait les données de la fenêtre à nouveau et à ce moment-là on peut ré-envoyer des pixels. Et ça ça peut prendre jusqu'à 53 cycles. Ça peut être assez long. Donc ça c'est sur un système LCD. On peut faire ça. On peut arrêter d'envoyer des pixels. Sur un système qui est basé sur du CRT, on ne peut pas. Donc par exemple sur un C64, la ligne doit toujours avoir exactement 40 cycles d'enloge parce que tous les pixels qui arriveront trop tard seront décalés à droite visuellement. Donc ce n'est pas complètement exact de dire qu'on a 40 cycles pour l'épicé-transfer. C'est généralement 43 et plus. Et le hage blanc c'est juste le reste de la ligne. Et en pratique ça ressemble plutôt généralement à ça. Parce que ça dépend du nombre de sprites et de backgrounds qu'on a. Alors j'ai pas été complètement honnête à propos de comment ça marche. Et ça ne stocke pas réellement la couleur des pixels. Ce que ça stocke c'est l'information originale de combinaisons de bits et la source. Donc ça ça dit voilà ça c'est neuf pixels de backgrounds. Et les couleurs de pixels, le Fetch pareil ne ramène pas non plus les couleurs de pixels. Il ramène aussi la combinaison de bits et la source de quel palette de sprites c'était. Donc si on mélange ces trucs là ensemble, le sprite a la priorité 0, c'est à dire qu'il est dessiné au-dessus du fond d'écran. Le sprite 1, 0, 0, ça c'est transparent donc le fond d'écran gagne. Pour cela par contre le sprite n'est pas transparent donc c'est le sprite qui gagne. Et pour le dernier l'anacholone on voit que c'est un sprite avec palette 1. C'est transparent également donc c'est le fond qui gagne. Faisons ça avec un autre sprite qui est au même endroit. Dans le premier cas le sprite avec une palette 0 écrit au-dessus du fond et gagne. Et dans ce cas si le nouveau sprite ne gagne pas par rapport à l'ancien sprite donc c'est l'ancien sprite qui va être affiché. Et c'est vrai pour tout et c'est pour ça que les sprites qui sont affichées à droite ne dessinent pas par-dessus les sprites qui sont plus à gauche. Et vice-versa. Alors pour appliquer les palettes, ça c'est quelque chose qui fait tout à la fin quand les pixels sont envoyés. Donc on regarde la combinaison de bit, on convertit ça en une couleur et ça nous donne une intensité pour le LCD. On lit, on convertit, intensité, on envoie, c'est noir. Et c'est comme ça que on fait sur les systèmes en couleur. Donc à partir de la Super Game Boy les jeux existants qui avaient pas vraiment de couleur, on pouvait être colorisé. Et la façon de faire ça, c'est que les palettes qui existaient pouvaient devenir du RGB. Tout le reste dans le système reste identique, mais dès qu'on décale ça, ça regarde ici, on trouve une couleur en RGB, ça c'est un pixel rose sur l'écran, ça c'est 11s1, ça c'est ici noir. Un autre exemple, 01 de S1 parce que c'est un sprite de palette 1, on le met à l'écran. Et voici la fin de la partie technique. Alors on a 5 minutes supplémentaires. On va parler du développement. Au cas où vous soyez intéressés pour le développement sur Game Boy. Alors il y a des outils très pratiques, il y a des outils en ligne de commandes que vous pouvez utiliser avec n'importe quel de vos éditeurs, ou si vous voulez débuguer, vous pouvez utiliser l'émulateur bgb qui peut marcher sur Windows, qui est défait pour Windows, mais on peut l'utiliser sur Linux ou sur OS X avec un émulateur, et ça on peut voir la vidéo directement, c'est vraiment très pratique pour faire des démons et voir vraiment ce qui se passe à l'intérieur. Si vous voulez le faire marcher sur du vrai hardware, il y a par exemple l'everdrive dans lequel on peut mettre une carte SD. Et on a 4 autres minutes, donc on va parler de mon périphérique préféré de la Game Boy, la caméra de la Game Boy. Alors on va parler de l'appareil photo, à quel point c'est un un périphérique super intelligent. Alors on peut prendre des super photos, on peut les imprimer sur l'imprimante de Game Boy si on va sur du papier, si vous pouvez toujours acheter ce papier. Et on peut prendre des super photos comme celle-là. Alors on va zoomer un petit peu. Alors quelle belle photo. Chaque photo a été basée sur le LCD qui a des 48 pixels et une superbe profondeur de 2. Alors la prochaine fois que vous allez en voyage, assurez-vous de prendre une Game Boy. N'oubliez pas votre super appareil photo de Game Boy et ce petit câble de link que vous pouvez... qu'on peut plus malheureusement acheter sur eBay. Merci beaucoup à tous ces gens qui ont aidé à débuguer la Game Boy et m'ont aidé sur cette présentation. Et ces gens-là qui m'ont aidé de plein de façons différentes. Alors dans cette série d'ultimes conférences, c'était le 5e, qu'est-ce qu'on aura à prochainement ? Il devrait y en avoir un l'année prochaine. Je vais nominer quelques conférences pour le prochain 34e. Je nomine Dominic Wagner pour nous parler des arcs Nord Archimedes et je nomine Janice Harder pour la Super Nintendo, Ultimate Super Nintendo Conférence. C'est votre choix. Vous pouvez les faire. Vous pouvez juste mettre un saut de grâce au-dessous de votre tête, comme vous voulez. Merci d'avoir écouté et on se voit l'année prochaine.