Vous êtes sur la page 1sur 139

Machine Translated by Google

Game  BoyMC
Manuel  du  processeur

Sources  par :  Pan  d'Anthrox,  GABY,  Marat  Fayzullin,
Pascal  Felber,  Paul  Robson,  Martin  Korth,  kOOPa,  Bowser

Contenu:

Commandes  en  langage  d'assemblage,  minutages  et  opcodes,  et  tout  
ce  que  vous  avez  toujours  voulu  savoir  sur  GB  mais  que  vous  aviez  
peur  de  demander.

CE  DOCUMENT  EST  IMPRIMÉ  SUR  DU  PAPIER  AU  FORMAT  DIN  
A5  (148  mm  x  210  mm) !

Remarque :  Game  BoyTM,  Game  Boy  PocketTM,  Super  Game  BoyTM  et  Game  Boy  
ColorTM  sont  des  marques  déposées  de  Nintendo  CO.,  LTD.  ©  1989  à  
1999  par  Nintendo  CO.,  LTD.

Version :  1.01  par  DP
Machine Translated by Google

1.  Avant­propos Manuel  du  processeur  Game  BoyTM

Table  des  matières
1.  Avant­propos............................................4

2.  Spécifications  matérielles........................5  2.1.  Vers  l'avant :.......................................5  2.2.  
Termes..................................................5  2.3.  Spécifications  du  Game  Boy..............6  2.4.  
Processeur..............................................6  2.5.  Carte  mémoire..............................8  2.5.1.  
Carte  mémoire  générale..................8  2.5.2.  Écho  de  la  RAM  interne  de  8  Ko.................9  
2.5.3.  E/S  utilisateur..................................9  2.5.4.  Emplacements  de  mémoire  
réservés.................10  2.6.  Types  de  cartouches.................................13  2.7.  Modes  
spéciaux.................................17  2.7.1.  Séquence  de  mise  sous  tension..........17  
2.7.2.  Mode  Arrêt..................................19  2.7.3.  Mode  basse  consommation.................19  
2.8.  Vidéo..........................................22  2.8.1.  Tuiles..........................................22  
2.8.2.  Lutins..................................25  2.8.3.  Bogue  de  la  RAM  des  sprites.................27  
2.9.  Son ..................................................28  2.10.  Minuterie..................................30  2.11.  
E/S  série ..................................31  2.12.  Interruptions.................................32  2.12.1.  
Procédure  d'interruption.................32  2.12.2.  Descriptions  des  interruptions.................34  
2.13.  Registres  spéciaux..................................35  2.13.1.  Registres  d'E/S..............35

Page  2 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  BoyTM 1.  Avant­propos

3.  Vue  d'ensemble  des  commandes  de  la  Game  Boy............61  3.1.  Avant­
propos..................................61  3.2.  Registres  du  
CPU..................................61  3.2.1.  Généralement..................................61  
3.2.2.  Registre  des  drapeaux..................62  3.2.3.  Compteur  de  
programme..............63  3.2.4.  Pointeur  de  pile..............................63  
3.3.  Commandes..................................65  3.3.1.  Charges  8  
bits.................................65  3.3.2.  Chargements  16  bits..............76  
3.3.3.  ALU  8  bits.................................80  3.3.4.  Arithmétique  16  
bits..................90  3.3.5.  Divers.................................94  3.3.6.  Rotations  
et  décalages..................99  3.3.7.  Opcodes  de  bits..............108  3.3.8.  
Sauts..................................111  3.3.9.  Appels..................................114  
3.3.10.  Redémarrages............................116  3.3.11.  
Retours..................................117

4.  Commandes  Super  Game  Boy..................119  4.1.  Avant­
propos..................................119  4.2.  Palettes..................................119  
4.3.  Frontière  SGB..................................120  4.4.  Fenêtre  d'action  
principale..............121  4.5.  Commandes.................................122

5.  Annexe  A................................................134  5.1.  Remarques  sur  
l'émulateur.............134  5.2.  Chronogramme  type.................................137

par  DP Page  3
Machine Translated by Google

1.  Avant­propos Manuel  du  processeur  Game  BoyTM

1.  Avant­propos
Ce  document  a  été  conçu  pour  vous  aider  à  programmer  la  Game  Boy™  
Classic,  la  Game  Boy™  Pocket,  la  Super  Game  Boy™  et  la  Game  Boy™  
Color  (bases  ­  vous  aurez  besoin  de  documents  supplémentaires  pour  la  
programmation  spécifique  à  GBC).  Il  devait  s'agir  d'un  manuel  complet  pour  
commencer  tout  de  suite  à  coder  pour  le  matériel.  Les  documents  se  
composent  de  trois  grandes  parties.

Le  premier  est  le  'GBSpec.txt' (également  connu  sous  le  nom  de  Pan  
Document)  de  Pan  of  Anthrox,  Marat  Fayzullin,  Pascal  Felber,  Paul  
Robson,  Martin  Korth,  kOOPa.  On  le  trouvera  au  paragraphe  1.

Le  second  est  un  mélange  de  plusieurs  documents  de
'Game  Boy  Assembly  Language  Primer  (GALP)  V1.0'  par  GABY  (GAmeBoY).  
Il  contient  les  opcodes,  la  durée  et  les  drapeaux  affectés  par  commande  
ASM  et  le.  Cela  se  trouve  au  paragraphe  2.

Le  troisième  est  un  résumé  des  spécifications  et  des  commandes  pour  la  
programmation  spécifique  de  Nintendo  Super  Game  Boy  par  kOOPa  et  
Bowser.  Voir  paragraphe  3.
Des  informations  sur  la  façon  d'exécuter  les  programmes  éprouvés  
de  votre  émulateur  sur  une  vraie  Game  Boy  se  trouvent  dans  l'annexe  
(merci  à  kOOPa).  En  outre,  un  chronogramme  d'une  opération  typique  de  
lecture  et  d'écriture  sur  le  bus  GB  classique  peut  être  trouvé  ici  (merci  à  
Philippe  Pouliquen).
Sur  la  dernière  page,  une  référence  rapide  des  commandes  ASM  est
inclus.
Amusez­vous!

DP

Page  4 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.  Spécifications  matérielles

2.  Spécifications  matérielles
2.1.  Avant:
Ce  qui  suit  a  été  tapé  à  des  fins  d'information  concernant  le  fonctionnement  
interne  de  la  machine  de  jeu  portable  connue  sous  le  nom  de  Game  Boy,  
fabriquée  et  conçue  par  Nintendo  Co.,  LTD.  Cette  information  est  présentée  pour  
informer  un  utilisateur  sur  le  fonctionnement  de  sa  Game  Boy  et  sur  ce  qui  la  
fait  "cocher".  GameBoy  est  la  propriété  de  Nintendo  Co.,  LTD.

Toute  référence  à  du  matériel  protégé  par  le  droit  d'auteur  n'est  pas  présentée  
pour  un  gain  monétaire,  mais  à  des  fins  éducatives  et  d'enseignement  
supérieur.

2.2.  Conditions
Go  =  GameBoy  d'origine  (GameBoy  Classic)
EUR  =  GameBoy  Pocket/GameBoy  Light
GBC  =  Couleur  GameBoy
SGB  =  Super  GameBoy

par  DP Page  5
Machine Translated by Google

2.3.  Spécifications  Game  Boy Manuel  du  processeur  Game  Boy™

2.3.  Spécifications  Game  Boy
ï  CPU :  8  bits  (similaire  au  processeur  Z80.)  ï  RAM  principale :  8K  octets  ï  
RAM  vidéo :  8K  octets  ï  Taille  de  
l'écran  2,6"  ï  Résolution :  160x144  
(20x18  tuiles)  ï  Max  #  de  
sprites :  40  ï  Max  #  sprites /ligne :  10  ï  Taille  max.  du  sprite :  
8x16  ï  Taille  min.  du  sprite :  8x8  ï  
Vitesse  d'horloge :  4,194304  MHz  
(4,295454  SGB,  4,194/8,388  MHz  GBC)  
ï  Horiz  Sync :  9198  KHz  (9420  KHz  
pour  SGB)  ï  Vert  Sync :  59,73  Hz  (61,17  Hz  
pour  SGB)  ï  Son :  4  canaux  avec  son  stéréo  ï  Alimentation :  
DC6V  0,7W  (DC3V  0,7W  pour  GB  Pocket)

Les  documents  Nintendo  décrivent  la  vitesse  du  processeur  et  des  instructions  en  
cycles  de  machine  tandis  que  ce  document  les  décrit  en  cycles  d'horloge.  Voici  la  traduction :

1  cycle  machine  =  4  cycles  d'horloge  Go  Vitesse  CPU  

NOP  Instruction  1.05MHz  1  cycle  4.19MHz  4  cycles
Cycles  de  machines
Cycles  d'horloge

2.4.  Processeur
Le  GameBoy  utilise  une  puce  informatique  similaire  à  un  Intel  8080.  Il  contient  toutes  les  
instructions  d'un  8080  sauf  qu'il  n'y  a  pas  d'instructions  d'échange.  À  bien  des  égards,  le  
processeur  ressemble  davantage  au  processeur  Zilog  Z80.  Par  rapport  au  Z80,  
quelques  instructions

Page  6 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  BoyTM 2.4.  Processeur

ont  été  ajoutés  et  certains  ont  été  supprimés.
Les  instructions  suivantes  sont  ajoutées :

AJOUTER  PS,  nn ;nn  =  octet  signé
ILD  (HL),A ;Écrire  A  dans  (HL)  et  incrémenter  HL
LDD  (HL),A ;Écrire  A  dans  (HL)  et  décrémenter  HL
ILD  A,(HL) ;Écrire  (HL)  dans  A  et  incrémenter  HL
LDD  A,(HL) ;Écrire  (HL)  dans  A  et  décrémenter  HL
LD  A,($FF00+nn)
LD  A,($FF00+C)
LD  ($FF00+nn),A
LD  ($FF00+C),A
LD  (nnnn),SP
LD  HL,SP+nn ;nn  =  octet  signé
ARRÊT ;  Arrêter  le  processeur  et  l'écran  jusqu'à  ce  
que  le  bouton  appuie
SWAP  r ;Swap  haut  et  bas  quartets  de  r

Les  instructions  suivantes  ont  été  supprimées :

Toute  commande  utilisant  les  registres  IX  ou  IY.
Toutes  les  instructions  IN/OUT.
Toutes  les  instructions  d'échange.
Toutes  les  commandes  précédées  de  ED  (sauf  RETI  remappé).
Tous  les  sauts/appels/rets  conditionnels  sur  parité/débordement  et  indicateur  de  
signe.

Les  instructions  suivantes  ont  des  opcodes  différents :

LD  A,[nnnn]
LD  [nnnn],A
RETI

par  DP Page  7
Machine Translated by Google

2.5.  Carte  mémoire Manuel  du  processeur  Game  BoyTM

2.5.  Carte  mémoire
2.5.1.  Carte  mémoire  générale

Registre  d'activation  d'interruption
­­­­­­­­­­­­­­­­­­­­­­­­­­­  FFFF
RAM  interne
­­­­­­­­­­­­­­­­­­­­­­­­­­­  FF80
Vide  mais  inutilisable  pour  les  E/S
­­­­­­­­­­­­­­­­­­­­­­­­­­­  FF4C
Ports  d'E/S
­­­­­­­­­­­­­­­­­­­­­­­­­­­  FF00
Vide  mais  inutilisable  pour  les  E/S
­­­­­­­­­­­­­­­­­­­­­­­­­­­  FEA0
Mémoire  d'attribution  de  sprite  (OAM)
­­­­­­­­­­­­­­­­­­­­­­­­­­­  FE00
Écho  de  8  Ko  de  RAM  interne
­­­­­­­­­­­­­­­­­­­­­­  E000
8  Ko  de  RAM  interne
­­­­­­­­­­­­­­­­­­­­­­­­­­­  Banque  de  RAM  commutable  
C000  8kB
­­­­­­­­­­­­­­­­­­­­­­  A000  8  Ko  de  RAM  vidéo

­­­­­­­­­­­­­­­­­­­­­­­­­­­  8000  ­­  |
Banque  de  ROM  commutable  
de  16  Ko  ­­­­­­­­­­­­­­­­­­­­­­­­­­­  4000  |=  32  Ko  Cartrigbe  Banque  de  
ROM  de  16  Ko  #0  |  ­­­­­­­­­­­­­­­­­­­­­­­­­­­  0000  
­­

*  REMARQUE :  b  =  bit,  B  =  octet

Page  8 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.5.2.  Écho  de  8  Ko  de  RAM  interne

2.5.2.  Écho  de  8  Ko  de  RAM  interne

Les  adresses  E000­FE00  semblent  accéder  à  la  RAM  interne  de  la  même  
manière  que  C000­DE00.  (Par  exemple,  si  vous  écrivez  un  octet  à  l'adresse  E000,  
il  apparaîtra  à  C000  et  E000.
De  même,  l'écriture  d'un  octet  dans  C000  apparaîtra  à  C000  et  E000.)

2.5.3.  E/S  utilisateur

Il  n'y  a  pas  d'espaces  vides  dans  la  carte  mémoire  pour  la  mise  en  
œuvre  des  ports  d'entrée,  à  l'exception  de  la  zone  de  banque  de  RAM  commutable  
(ce  n'est  pas  une  option  sur  la  Super  Smart  Card  car  sa  banque  de  RAM  est  
toujours  activée).  Un  port  de  sortie  uniquement  peut  être  implémenté  n'importe  
où  entre  A000  et  FDFF.  S'il  est  implémenté  dans  une  zone  RAM,  il  faut  veiller  à  
utiliser  une  zone  de  RAM  non  utilisée  pour  autre  chose.  (FE00  et  supérieur  
ne  peuvent  pas  être  utilisés  car  le  CPU  ne  génère  pas  de /WR  externe  pour  
ces  emplacements.)

Si  vous  avez  un  chariot  avec  un  MBC1,  une  ROM  de  4  Mbit  ou  moins  
et  une  RAM  de  8  Ko  ou  moins  (ou  pas  de  RAM),  vous  pouvez  utiliser  les  
broches  6  et  7  du  MBC1  pour  2  broches  de  sortie  numérique  à  toutes  fins  que  
vous  souhaitez.  Pour  les  utiliser,  vous  devez  d'abord  mettre  le  MBC1  en  
mode  4MbitROM/32KbyteRAM  en  écrivant  01  à  6000.  Les  deux  bits  les  moins  
significatifs  que  vous  écrivez  à  4000  seront  alors  sortis  sur  ces  broches.

par  DP Page  9
Machine Translated by Google

2.5.4.  Emplacements  de  mémoire  réservés Manuel  du  processeur  Game  BoyTM

2.5.4.  Emplacements  de  mémoire  réservés
0000 Redémarrez  l'adresse  $00  
(RST  $00  appelle  cette  adresse.)
0008 Redémarrez  l'adresse  $08  
(RST  $08  appelle  cette  adresse.)
0010 Restart  $10  Address  (RST  $10  
appelle  cette  adresse.)
0018 Redémarrez  l'adresse  $18  
(RST  $18  appelle  cette  adresse.)
0020 Restart  $20  Address  (RST  $20  
appelle  cette  adresse.)
0028 Redémarrez  l'adresse  $28  
(RST  $28  appelle  cette  adresse.)
0030 Restart  $30  Address  (RST  $30  
appelle  cette  adresse.)
0038 Redémarrez  l'adresse  $38  
(RST  $38  appelle  cette  adresse.)
0040 Adresse  de  début  d'interruption  verticale  vierge

0048 Adresse  de  début  d'interruption  d'état  LCDC

0050 Adresse  de  début  d'interruption  de  dépassement  de  temporisateur

0058 Interruption  de  fin  de  transfert  en  série
Adresse  de  départ
0060 Haut  à  bas  de  l'interruption  P10­P13
Adresse  de  départ

Une  zone  d'information  interne  est  située  à  0100­014F  dans  chaque  cartouche.  Il  contient  
les  valeurs  suivantes :

0100­0103  Il  s'agit  du  point  de  début  d'exécution  du  code  dans  un
Chariot.  Habituellement,  il  y  a  une  instruction  NOP  et  une  
instruction  JP  ici,  mais  pas  toujours.

Page  10 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  BoyTM 2.5.4.  Mémoire  réservée
Emplacements

0104­0133  Défilement  graphique  Nintendo :
CE  ED  66  66  CC  0D  00  0B  03  73  00  83  00  0C  00  0D  00  08  11  1F  88  89  00  
0E  DC  CC  6E  E6  DD  DD  D9  99  BB  BB  67  63  6E  0E  EC  CC  DD  DC  99  9F  BB  
B9  33  3E  ( PROGRAMME  NE  FONCTIONNERA  PAS  SI  MODIFIÉ !!!)

0134­0142  Titre  du  jeu  en  MAJUSCULES  ASCII.  Si  ça
contient  moins  de  16  caractères,  les  octets  restants  sont  
remplis  de  00.

0143 80  $  =  Go  de  couleur,  00  $  ou  autre  =  pas  de  Go  de  couleur

0144 Chiffre  hexadécimal  Ascii,  quartet  haut  du  code  du  titulaire  de  
licence  (nouveau).
0145 Chiffre  hexadécimal  Ascii,  petit  quartet  du  code  du  titulaire  de  
licence  (nouveau).  (Il  s'agit  normalement  de  00  $  si  [$014B]  
<>  33  $.)
0146 Indicateur  GB/SGB  (00  =  GameBoy,  03  =  fonctions  Super  GameBoy)

(Les  fonctions  Super  GameBoy  ne  fonctionneront  pas  si  
<>  $03.)  0147  
Type  de  cartouche :  0­ROM  UNIQUEMENT  
1­ROM+MBC1   12­ROM+MBC3+RAM
2­ 13­ROM+MBC3+RAM+BATTERIE
ROM+MBC1+RAM  3­ 19­ROM+MBC5
ROM+MBC1+RAM+BATT  5­ 1A­ROM+MBC5+RAM
ROM+MBC2  6­   1B­ROM+MBC5+RAM+BATTERIE
ROM+MBC2+BATTERIE  8­ 1C­ROM+MBC5+RUMBLE
ROM+RAM  9­ 1D­ROM+MBC5+RUMBLE+SRAM
ROM+RAM+BATTERIE  B­ 1E­ROM+MBC5+RUMBLE+SRAM+BATT
ROM+MMM01  C­ Appareil  photo  de  poche  1F
ROM+MMM01+SRAM  D­ FD­Bandai  TAMA5
ROM+MMM01+SRAM+BATT  FE  ­  Hudson  HuC­3

par  DP Page  11
Machine Translated by Google

2.5.4.  Emplacements  de  mémoire  réservés Manuel  du  processeur  Game  BoyTM

F­ROM+MBC3+TIMER+BATT  FF  ­  Hudson  HuC­1
10­ROM+MBC3+MINUTERIE+RAM+BATT
11­ROM+MBC3

0148 Taille  ROM :  
0  ­  256Kbit  =  32KByte  =  2  banques  1  ­  512Kbit  =  
64KByte  =  4  banques  2  ­  1Mbit  =  128KByte  =  8  banques  
3  ­  2Mbit  =  256KByte  =  16  banques  4  ­  4Mbit  =  512KByte  
=  32  banques  5  ­  8Mbit  =  1MByte  =  64  banques  6  ­  
16Mbit  =  2MByte  =  128  banques  $52  ­  9Mbit  =  1.1MByte  
=  72  banques  $53  ­  10Mbit  =  1.2MByte  =  80  banques  
$54  ­  12Mbit  =  1.5MByte  =  96  banques

0149 Taille  de  la  RAM :
0  ­  Aucun  1  
­  16kBit  =  2kB  =  1  banc  2  ­  64kBit  =  8kB  =  1  
banc  3  ­  256kBit  =  32kB  =  4  bancs  4  ­

1MBit  =128kB  =16  banques

014A Code  destinataire :
0  ­  Japonais
1  ­  Non  japonais

014B Code  du  titulaire  (ancien) :  33  ­  
Vérifiez  0144/0145  pour  le  code  du  titulaire.
79  ­  Accolade  A4  ­  
Konami  (la  
fonction  Super  GameBoy  ne  fonctionnera  pas  si  <>  $33.)

014C Numéro  de  version  de  la  ROM  du  masque  (généralement  00  $)

Page  12 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  BoyTM 2.5.4.  Mémoire  réservée
Emplacements

014D Vérification  complémentaire  (LE  
PROGRAMME  NE  FONCTIONNERA  PAS  SUR  GB  SI  CE  N'EST  PAS  CORRECT !!!)
(Il  fonctionnera  sur  Super  GB,  cependant,  s'il  est  
incorrect.)

014E­014F  Somme  de  contrôle  (octet  supérieur  en  premier)  produite  par
en  ajoutant  tous  les  octets  d'une  cartouche  à  l'exception  de  
deux  octets  de  somme  de  contrôle  et  en  prenant  deux  
octets  inférieurs  du  résultat.  (GameBoy  ignore  cette  valeur.)

2.6.  Types  de  cartouches
Les  éléments  suivants  définissent  l'octet  à  l'emplacement  du  panier  0147 :

ï  ROM  UNIQUEMENT

Il  s'agit  d'une  ROM  de  32  Ko  (256  Ko)  et  occupe  0000­7FFF.

ï  MBC1  (contrôleur  de  banque  de  mémoire  1)
MBC1  a  deux  modes  de  mémoire  maximum  différents :  16  Mbit  
ROM/8  Ko  de  RAM  ou  4  Mbit  ROM/32  Ko  de  RAM.

Le  MBC1  utilise  par  défaut  le  mode  16Mbit  ROM/8KByte  RAM  à  la  
mise  sous  tension.  L'écriture  d'une  valeur  (XXXXXXXS  ­  X  =  Indifférent,  
S  =  Sélection  du  modèle  de  mémoire)  dans  la  zone  6000­7FFF  
sélectionnera  le  modèle  de  mémoire  à  utiliser.  S  =  0  sélectionne  le  mode  
16/8.  S  =  1  sélectionne  le  mode  4/32.

L'écriture  d'une  valeur  (XXXBBBBB  ­  X  =  ne  s'en  soucie  pas,  B  =  bits  
de  sélection  de  banque)  dans  la  zone  2000­3FFF  sélectionnera  une  
banque  ROM  appropriée  à  4000­7FFF.  Les  valeurs  0  et  1  font  la  même  
chose  et  pointent  vers  la  banque  ROM  1.

par  DP Page  13
Machine Translated by Google

2.6.  Types  de  cartouches Manuel  du  processeur  Game  BoyTM

La  banque  Rom  0  n'est  pas  accessible  à  partir  de  4000­7FFF  et  ne  peut  être  lue  
qu'à  partir  de  0000­3FFF.

Si  le  modèle  de  mémoire  est  réglé  sur  4/32 :  
L'écriture  d'une  valeur  (XXXXXXBB  ­  X  =  Indifférent,  B  =  bits  de  sélection  
de  banque)  dans  la  zone  4000­5FFF  sélectionnera  une  banque  de  RAM  
appropriée  à  A000­C000.  Avant  de  pouvoir  lire  ou  écrire  dans  une  banque  
de  RAM,  vous  devez  l'activer  en  écrivant  un  XXXX1010  dans  la  zone  
0000­1FFF*.  Pour  désactiver  les  opérations  de  banque  de  RAM,  écrivez  
n'importe  quelle  valeur  sauf  XXXX1010  dans  la  zone  0000­1FFF.  La  
désactivation  d'une  banque  de  RAM  protège  probablement  cette  banque  des  
fausses  écritures  lors  de  la  mise  hors  tension  de  la  GameBoy.  
(REMARQUE :  Nintendo  suggère  des  valeurs  de  0 $  pour  activer  et  de  00 $  
pour  désactiver  la  banque  de  RAM !)

Si  le  modèle  de  mémoire  est  réglé  sur  le  mode  16/8 :  
L'écriture  d'une  valeur  (XXXXXXBB  ­  X  =  Indifférent,  B  =  bits  de  sélection  
de  banque)  dans  la  zone  4000­5FFF  définira  les  deux  lignes  d'adresse  ROM  
les  plus  significatives.

*  REMARQUE :  La  Super  Smart  Card  ne  nécessite  pas  cette  opération  car  
sa  banque  de  RAM  est  TOUJOURS  activée.
Incluez  quand  même  cette  opération  pour  permettre  à  votre  code  de  
fonctionner  avec  les  deux.

ï  MBC2  (Memory  Bank  Controller  2) :  Ce  contrôleur  
de  mémoire  fonctionne  un  peu  comme  le  contrôleur  MBC1  avec  les  
exceptions  suivantes :  MBC2  fonctionnera  avec  des  tailles  de  
ROM  jusqu'à  2Mbit.
L'écriture  d'une  valeur  (XXXXBBBB  ­  X  =  ne  s'en  soucie  pas,  B  =  bits  de  
sélection  de  banque)  dans  la  zone  2000­3FFF  sélectionnera  une  banque  
ROM  appropriée  à  4000­7FFF.
La  commutation  de  RAM  n'est  pas  fournie.  Contrairement  au  MBC1  qui  
utilise  une  RAM  externe,  le  MBC2  possède  512  x  4  bits  de

Page  14 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  BoyTM 2.6.  Types  de  cartouches

RAM  qui  se  trouve  dans  le  contrôleur  lui­même.  Cependant,  il  nécessite  
toujours  une  batterie  externe  pour  enregistrer  les  données  pendant  la  mise  
hors  tension.
Le  bit  le  moins  significatif  de  l'octet  d'adresse  supérieur  doit  être  zéro  
pour  activer/désactiver  la  RAM  du  chariot.  Par  exemple,  les  adresses  
suivantes  peuvent  être  utilisées  pour  activer/désactiver  la  RAM  du  
chariot :  0000­00FF,  0200­02FF,  
0400­04FF, ...,  activer/désactiver  est  0000­00FF.  La   1E00­1EFF.
plage  d'adresses  suggérée  à  utiliser  pour  la  RAM  MBC2  Le  bit  le  moins  
significatif  de  l'octet  d'adresse  supérieur  
doit  être  un  pour  sélectionner  une  banque  ROM.  Par  exemple,  les  
adresses  suivantes  peuvent  être  utilisées  pour  sélectionner  une  banque  ROM :  
2100­21FF,  2300­23FF,  2500­25FF, ...,  3FFF.  La  plage  d'adresses  suggérée  à  
utiliser  pour  la  sélection  de  banque  de  ROM  MBC2  est  2100­21FF. 3F00­

ï  MBC3  (contrôleur  de  banque  de  mémoire  3) :  ce  
contrôleur  est  similaire  au  MBC1,  sauf  qu'il  accède  à  tous  les  16 mbits  
de  ROM  sans  nécessiter  d'écriture  dans  la  zone  4000­5FFF.

L'écriture  d'une  valeur  (XBBBBBBB  ­  X  =  Indifférent,  B  =  bits  de  sélection  
de  banque)  dans  la  zone  2000­3FFF  sélectionnera  une  banque  ROM  
appropriée  à  4000­7FFF.
En  outre,  ce  MBC  dispose  d'une  horloge  en  temps  réel  (RTC)  intégrée,  
sauvegardée  par  batterie,  que  l'on  ne  trouve  dans  aucun  autre  MBC.  Certains  
chariots  MBC3  ne  le  supportent  pas  (version  WarioLand  II  non  couleur)  
mais  certains  le  font  (Harvest  Moon/version  japonaise).

ï  MBC5  (Memory  Bank  Controller  5):  Ce  contrôleur  
est  le  premier  MBC  qui  est  garanti  pour  fonctionner  en  mode  double  vitesse  
GameBoy  Color,  mais  il  semble  que  les  autres  MBC  fonctionnent  également  
bien  en  mode  GBC  double  vitesse.

par  DP Page  15
Machine Translated by Google

2.6.  Types  de  cartouches Manuel  du  processeur  Game  BoyTM

Il  est  similaire  au  MBC3  (mais  pas  de  RTC)  mais  peut  accéder  jusqu'à  
64  Mbits  de  ROM  et  jusqu'à  1  Mbit  de  RAM.
Les  8  bits  inférieurs  de  la  sélection  de  banque  ROM  9  bits  sont  écrits  dans  
la  zone  2000­2FFF  tandis  que  le  bit  supérieur  est  écrit  dans  le  bit  le  moins  
significatif  de  la  zone  3000­3FFF.

L'écriture  d'une  valeur  (XXXXBBBB  ­  X  =  Indifférent,  B  =  bits  de  sélection  
de  banque)  dans  la  zone  4000­5FFF  sélectionnera  une  banque  de  RAM  
appropriée  à  A000­BFFF  si  le  chariot  contient  de  la  RAM.  Les  tailles  de  
RAM  sont  de  64kbit,  256kbit  et  1mbit.

De  plus,  c'est  le  premier  MBC  qui  autorise  la  banque  rom  0
pour  apparaître  dans  la  gamme  4000­7FFF  en  écrivant  000  $  à  la  sélection  
de  la  banque  rom.

ï  Rumble  Carts :  les  
chariots  Rumble  utilisent  un  contrôleur  de  banque  de  mémoire  MBC5.
Les  chariots  Rumble  ne  peuvent  avoir  que  jusqu'à  256  kbits  de  RAM.
La  ligne  d'adresse  RAM  la  plus  élevée  qui  autorise  1  Mbit  de  RAM  sur  les  
chariots  sans  grondement  MBC5  est  utilisée  comme  moteur  marche/arrêt  
pour  le  chariot  de  grondement.
L'écriture  d'une  valeur  (XXXXMBBB  ­  X  =  Indifférent,  M  =  moteur,  B  =  bits  
de  sélection  de  banque)  dans  la  zone  4000­5FFF  sélectionnera  une  banque  
de  RAM  appropriée  à  A000­BFFF  si  le  chariot  contient  de  la  RAM.  Les  
tailles  de  RAM  sont  de  64kbit  ou  256kbits.  Pour  allumer  le  moteur  de  
grondement,  réglez  M  =  1,  M  =  0  l'éteint.

ï  HuC1  (Banque  Mémoire /  Contrôleur  Infrarouge):
Ce  contrôleur  fabriqué  par  Hudson  Soft  semble  être  très  similaire  à  un  MBC1  
à  la  différence  principale  qu'il  prend  en  charge  l'entrée/sortie  LED  infrarouge.

Le  chariot  japonais  "Fighting  Phoenix" (nom  interne  du  chariot :  SUPER  B  
DAMAN)  est  connu  pour  contenir  cette  puce.

Page  16 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  BoyTM 2.7.  Mode  spécial

2.7.  Mode  spécial
2.7.1.  Séquence  de  mise  sous  tension

Lorsque  la  GameBoy  est  mise  sous  tension,  un  programme  de  256  octets  
commençant  à  l'emplacement  mémoire  0  est  exécuté.  Ce  programme  
est  situé  dans  une  ROM  à  l'intérieur  du  GameBoy.  La  première  chose  que  
fait  le  programme  est  de  lire  les  emplacements  des  cartouches  de  104  $  
à  133  $  et  de  placer  ce  graphique  d'un  logo  Nintendo  sur  l'écran  en  haut.  Cette  
image  défile  ensuite  jusqu'à  ce  qu'elle  soit  au  milieu  de  l'écran.  Deux  notes  
de  musique  sont  alors  jouées  sur  le  haut­parleur  interne.  Encore  une  
fois,  les  emplacements  de  cartouche  $104  à  $133  sont  lus  mais  cette  
fois  ils  sont  comparés  à  une  table  dans  la  rom  interne.

Si  un  octet  ne  se  compare  pas,  alors  le  GameBoy  arrête  de  comparer  les  
octets  et  arrête  simplement  toutes  les  opérations.

Poche  Go  &  Go :
Ensuite,  le  GameBoy  commence  à  ajouter  tous  les  octets  de  la  
cartouche  de  134 $  à  14 d$.  Une  valeur  de  25  décimales  est  ajoutée  à  
ce  total.  Si  l'octet  le  moins  significatif  du  résultat  n'est  pas  un  
zéro,  la  GameBoy  cessera  de  faire  quoi  que  ce  soit.

Super  GB :  
même  si  le  GB  et  le  GBP  vérifient  les  emplacements  de  
mémoire  de  134 $  à  14 d$,  le  SGB  ne  le  fait  pas.

Si  les  vérifications  ci­dessus  réussissent,  la  ROM  interne  est  désactivée  
et  l'exécution  du  programme  de  la  cartouche  commence  à  l'emplacement  
$100  avec  les  valeurs  de  registre  suivantes :

AF=$01­GB/SGB,  $FF­GBP,  $11­GBC
F  =$B0

par  DP Page  17
Machine Translated by Google

2.7.1.  Séquence  de  mise  sous  tension Manuel  du  processeur  Game  BoyTM

BC=$0013
DE=$00D8
HL=$014D
Pointeur  de  pile=$FFFE
[$FF05]  =  $00 ;  TIMA
[$FF06]  =  $00 ;  TMA
[$FF07]  =  $00 ;  TAC
[$FF10]  =  $80 ;  NR10
[$FF11]  =  $BF ;  NR11
[$FF12]  =  $F3 ;  NR12
[$FF14]  =  $BF ;  NR14
[$FF16]  =  $3F ;  NR21
[$FF17]  =  $00 ;  NR22
[$FF19]  =  $BF ;  NR24
[$FF1A]  =  $7F ;  NR30
[$FF1B]  =  $FF ;  NR31
[$FF1C]  =  $9F ;  NR32
[$FF1E]  =  $BF ;  NR33
[$FF20]  =  $FF ;  NR41
[$FF21]  =  $00 ;  NR42
[$FF22]  =  $00 ;  NR43
[$FF23]  =  $BF ;  NR30
[$FF24]  =  77$ ;  NR50
[$FF25]  =  $F3 ;  NR51
[$FF26]  =  $F1­GB,  $F0­SGB ;  NR52
[$FF40]  =  $91 ;  LLCM
[$FF42]  =  $00 ;  SCY
[$FF43]  =  $00 ;  SCX
[$FF45]  =  $00 ;  LYC
[$FF47]  =  $FC ;  BGP
[$FF48]  =  $FF ;  OBP0
[$FF49]  =  $FF ;  OBP1
[$FF4A]  =  $00 ;  Wyoming
[$FF4B]  =  $00 ;  WX
[$FFFF]  =  $00 ;  C'EST  À  DIRE

Page  18 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.7.1.  Séquence  de  mise  sous  tension

Ce  n'est  pas  une  bonne  idée  de  supposer  que  les  valeurs  ci­dessus  
existeront  toujours.  Une  version  ultérieure  de  GameBoy  pourrait  contenir  
des  valeurs  différentes  de  celles­ci  lors  de  la  réinitialisation.
Définissez  toujours  ces  registres  sur  la  réinitialisation  plutôt  que  de  
supposer  qu'ils  sont  comme  ci­dessus.
Veuillez  noter  que  la  RAM  interne  du  GameBoy  à  la  mise  sous  tension  
contient  des  données  aléatoires.  Tous  les  émulateurs  GameBoy  ont  
tendance  à  définir  toute  la  RAM  sur  une  valeur  de  00  $  à  l'entrée.

Cart  RAM  la  première  fois  qu'il  est  accédé  sur  un  vrai  GameBoy  contient  
des  données  aléatoires.  Il  ne  contiendra  des  données  connues  que  si  le  
code  GameBoy  l'initialise  à  une  certaine  valeur.

2.7.2.  Mode  d'arrêt

La  commande  STOP  arrête  le  processeur  et  l'écran  GameBoy  
jusqu'à  ce  qu'un  bouton  soit  enfoncé.  L'écran  GB  et  GBP  devient  
blanc  avec  une  seule  ligne  horizontale  sombre.  L'écran  GBC  
devient  noir.

2.7.3.  Mode  basse  consommation

Il  est  recommandé  d'utiliser  l'instruction  HALT  autant  que  possible  pour  
réduire  la  consommation  d'énergie  et  prolonger  la  durée  de  vie  des  batteries.  
Cette  commande  arrête  l'horloge  système  en  réduisant  la  consommation  
d'énergie  du  CPU  et  de  la  ROM.

Le  CPU  restera  suspendu  jusqu'à  ce  qu'une  interruption  se  produise,  à  
quel  point  l'interruption  est  traitée,  puis  l'instruction  suivant  immédiatement  
l'ARRÊT

par  DP Page  19
Machine Translated by Google

2.7.3.  Mode  basse  consommation Manuel  du  processeur  Game  Boy™

est  exécuté.  Si  les  interruptions  sont  désactivées  (DI),  l'arrêt  ne  
suspend  pas  l'opération,  mais  le  compteur  de  programme  arrête  
de  compter  pour  une  instruction  sur  le  GB,  le  GBP  et  le  
SGB,  comme  mentionné  ci­dessous.

Selon  le  temps  CPU  requis  par  un  jeu,  l'instruction  HALT  peut  prolonger  
la  durée  de  vie  de  la  batterie  de  5  à  50%  ou  éventuellement  plus.

AVERTISSEMENT :  L'instruction  qui  suit  immédiatement  l'instruction  
HALT  est  «  ignorée  »  lorsque  les  interruptions  sont  désactivées  
(DI)  sur  le  GB,  le  GBP  et  le  SGB.  Par  conséquent,  mettez  toujours  
un  NOP  après  l'instruction  HALT.  Ce  saut  d'instruction  ne  se  produit  
pas  lorsque  les  interruptions  sont  activées  (EI).

Ce  "saut"  ne  semble  pas  se  produire  sur  la  GameBoy  Color,  
même  en  mode  GB  normal.  (143  $  =  00  $)

EXEMPLES  de  Martin  Korth  qui  a  documenté  ceci
problème :  
(en  supposant  que  les  interruptions  sont  désactivées  pour  tous  les  exemples)

1)  Ce  code  provoque  l'incrémentation  du  registre  'a'  
DEUX  FOIS.  76  halte  
3C  inc  a

2)  L'exemple  suivant  est  un  peu  plus  difficile.
Le  code  suivant  76  stop  
FA  34  12  ld  a,(1234)

est  effectivement  exécuté  comme

76 arrêt

Page  20 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.7.3.  Mode  basse  consommation

FA  FA  34  ld  a,(34FA)  12  ld  (de),a

3)  Enfin  un  effet  secondaire  intéressant  stop  stop
76  
76

Cette  combinaison  bloque  le  processeur.
Le  premier  HALT  provoque  la  répétition  du  second  HALT,  ce  
qui  entraîne  donc  la  répétition  de  la  commande  suivante  (=  elle­
même)  ­  encore  et  encore.
Placer  un  NOP  entre  les  deux  arrêts  entraînerait  la  répétition  du  NOP  une  
fois,  le  deuxième  HALT  ne  verrouillerait  pas  le  processeur.

Vous  trouverez  ci­dessous  un  code  suggéré  pour  les  programmes  Game  Boy :
****  Boucle  de  jeu  principale  **** ;
Principal:
arrêt ;  arrêter  l'horloge  système ;  
revenir  de  halte  quand ;  
interrompu ;  (Voir  
non AVERTISSEMENT  ci­dessus.)

ld a,(VblnkFlag)
ou un ;  Interruption  V­Blanc ?
jr z,  principal ;  Non,  un  autre ;  
interrompre

xor un

ld (VblnkFlag),a ;  Effacer  le  drapeau  V­Blank

appeler   Contrôles ;  entrées  de  bouton ;  


appeler Jeu fonctionnement  du  jeu

jr Principal

par  DP Page  21
Machine Translated by Google

2.7.3.  Mode  basse  consommation Manuel  du  processeur  Game  Boy™

****  Routine  d'interruption  V­Blank  **** ;
Vblnk :
pousser  af  
pousser  bc  
pousser  de  
pousser  hl

appel SpriteDma ;  Faire  des  mises  à  jour  de  sprite

ld   un,1
ld (VblnkFlag),a

pop   hl  
pop   de  
pop   bc  
pop   af
reti

2.8.  Vidéo
2.8.1.  Carrelage

Le  tampon  d'écran  principal  GameBoy  (arrière­plan)  se  compose  de  256x256  pixels  
ou  de  32x32  tuiles  (8x8  pixels  chacune).
Seuls  160x144  pixels  peuvent  être  affichés  à  l'écran.
Les  registres  SCROLLX  et  SCROLLY  contiennent  les  coordonnées  du  fond  à  afficher  
dans  le  coin  supérieur  gauche  de  l'écran.  L'arrière­plan  s'enroule  autour  de  l'écran  (c'est­
à­dire  qu'une  partie  de  celui­ci  sort  de  l'écran,  il  apparaît  sur  le  côté  opposé.)

Une  zone  de  VRAM  appelée  Background  Tile  Map  contient  le  nombre  de  tuiles  à  
afficher.  Il  est  organisé  en  32  lignes  de  32  octets  chacune.  Chaque  octet  contient  un

Page  22 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.8.1.  Carrelage

numéro  d'une  vignette  à  afficher.  Les  motifs  de  tuiles  sont  tirés  du  tableau  
de  données  de  tuiles  situé  soit  à  8000­8FFF  ou  à  8800­97FF.  Dans  le  
premier  cas,  les  motifs  sont  numérotés  avec  des  nombres  non  signés  de  0  à  
255  (c'est­à­dire  que  le  motif  n°  0  se  trouve  à  l'adresse  $8000).  Dans  le  second  
cas,  les  motifs  ont  des  nombres  signés  de  ­128  à  127  (c'est­à­dire  que  le  motif  
n°  0  se  trouve  à  l'adresse  $9000).  L'adresse  Tile  Data  Table  pour  l'arrière­
plan  peut  être  sélectionnée  via  le  registre  LCDC.

Outre  l'arrière­plan,  il  existe  également  une  "fenêtre"  recouvrant  
l'arrière­plan.  La  fenêtre  n'est  pas  déroulante,  c'est­à­dire  qu'elle  
est  toujours  affichée  à  partir  de  son  coin  supérieur  gauche.  L'emplacement  
d'une  fenêtre  sur  l'écran  peut  être  ajusté  via  les  registres  WNDPOSX  et  
WNDPOSY.  Les  coordonnées  d'écran  du  coin  supérieur  gauche  
d'une  fenêtre  sont  WNDPOSX­7,WNDPOSY.  Les  numéros  de  mosaïque  de  
la  fenêtre  sont  stockés  dans  la  table  de  données  de  mosaïque.  Aucun  des  
carreaux  de  fenêtres  n'est  jamais  transparent.  L'arrière­plan  et  la  fenêtre  
partagent  la  même  table  de  données  de  mosaïque.

L'arrière­plan  et  la  fenêtre  peuvent  être  désactivés  ou  activés  séparément  via  
des  bits  dans  le  registre  LCDC.

Si  la  fenêtre  est  utilisée  et  qu'une  interruption  de  ligne  de  balayage  la  
désactive  (soit  en  écrivant  dans  LCDC,  soit  en  réglant  WX  >  166)  et  qu'une  
interruption  de  ligne  de  balayage  un  peu  plus  tard  l'active,  la  fenêtre  réapparaîtra  
à  l'écran  à  la  position  exacte  de  la  fenêtre  où  il  s'est  arrêté  plus  tôt.  Ainsi,  
même  s'il  n'y  a  que  16  lignes  de  graphiques  utiles  dans  la  fenêtre,  vous  
pourrez  afficher  les  8  premières  lignes  en  haut  de  l'écran  et  les  8  lignes  
suivantes  en  bas  si  vous  le  souhaitez.

par  DP Page  23
Machine Translated by Google

2.8.1.  Carrelage Manuel  du  processeur  Game  Boy™

WX  peut  être  modifié  pendant  une  interruption  de  ligne  de  balayage  (pour  
provoquer  un  effet  de  distorsion  graphique  ou  pour  désactiver  la  fenêtre  
(WX>166) )  mais  les  modifications  apportées  à  WY  ne  sont  pas  
dynamiques  et  ne  seront  remarquées  qu'au  prochain  rafraîchissement  de  
l'écran.
Les  images  de  tuiles  sont  stockées  dans  les  tables  de  motifs  de  
tuiles.  Chaque  image  8x8  occupe  16  octets,  où  chaque  2  octets  représente  une  
ligne :

Tuile: Image:

.33333..   .33333..  ­>  01111100  ­>  $7C  01111100  
22...22.   ­>  $7C  22...22.  ­>  
11...11.   00000000  ­>  $00  11000110  ­>  $C6  
2222222.  <­­  chiffres   11...11.  ­>  11000110  
33...33.  représentent  22...22.   ­>  $C6  00000000  ­>  $00  2222222.  ­>  
couleur  11...11.  Nombres 00000000  ­>  $00  
11111110  ­>  $FE  33...33.  ­>  11000110  
........ ­>  $C6  11000110  ­>  
$C6  22...22.  ­>  00000000  ­>  $00  
11000110  ­>  $C6  
11...11.  ­>  11000110  ­>  $C6  00000000  
­>  $00  ­>  00000000  
­>  $00  00000000  ­>  $00

........

Comme  il  a  été  dit  précédemment,  il  existe  deux  tables  de  modèles  de  
tuiles  à  8000­8FFF  et  à  8800­97FF.  Le  premier  peut  être  utilisé  pour  les  sprites,  
l'arrière­plan  et  l'affichage  de  la  fenêtre.  Ses  tuiles  sont  numérotées  de  
0  à  255.
La  deuxième  table  peut  être  utilisée  pour  le  fond  et  l'affichage  de  la  fenêtre  
et  ses  tuiles  sont  numérotées  de  ­128  à  127.

Page  24 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.8.2.  Lutins

2.8.2.  Lutins
Le  contrôleur  vidéo  GameBoy  peut  afficher  jusqu'à  40  sprites  en  8x8  ou  
en  8x16  pixels.  En  raison  d'une  limitation  matérielle,  seuls  
dix  sprites  peuvent  être  affichés  par  ligne  de  balayage.  Les  
motifs  de  sprite  ont  le  même  format  que  les  tuiles,  mais  ils  sont  tirés  du  
tableau  des  motifs  de  sprite  situé  à  8000­8FFF  et  ont  une  numérotation  
non  signée.  Les  attributs  de  sprite  résident  dans  la  table  d'attributs  de  
sprite  (OAM  ­  Object  Attribute  Memory)  à  $FE00­FE9F.  OAM  est  
divisé  en  40  blocs  de  4  octets  dont  chacun  correspond  à  un  sprite.

En  mode  sprite  8x16,  le  bit  le  moins  significatif  du  numéro  de  modèle  
de  sprite  est  ignoré  et  traité  comme  0.

Lorsque  des  sprites  avec  des  valeurs  de  coordonnées  x  
différentes  se  chevauchent,  celui  avec  la  plus  petite  coordonnée  x  (plus  
proche  de  la  gauche)  aura  la  priorité  et  apparaîtra  au­dessus  de  tous  
les  autres.

Lorsque  des  sprites  avec  les  mêmes  valeurs  de  coordonnées  
x  se  chevauchent,  ils  ont  la  priorité  selon  l'ordre  du  tableau.  
(c'est­à­dire  $FE00  ­  le  plus  élevé,  $FE04  ­  le  plus  élevé  suivant,  etc.)

Veuillez  noter  que  Sprite  X=0,  Y=0  cache  un  sprite.  Pour  afficher  un  
sprite,  utilisez  les  formules  suivantes :

SpriteScreenPositionX  (Coin  supérieur  gauche  du  sprite)
=  SpriteX  ­  8
SpriteScreenPositionY  (Coin  supérieur  gauche  du  sprite)
=  SpriteY  ­  16

par  DP Page  25
Machine Translated by Google

2.8.2.  Lutins Manuel  du  processeur  Game  Boy™

Pour  afficher  un  sprite  dans  le  coin  supérieur  gauche  de  l'écran,  définissez  
le  sprite  X=8,  Y=16.

Seuls  10  sprites  peuvent  être  affichés  sur  une  même  ligne.
Lorsque  cette  limite  est  dépassée,  les  sprites  de  priorité  inférieure  
(priorités  listées  ci­dessus)  ne  seront  pas  affichés.
Pour  empêcher  les  sprites  inutilisés  d'affecter  les  sprites  à  l'écran,  définissez  
leur  coordonnée  Y  sur  Y  =  0  ou  Y  =>  144  +  16.  Le  simple  fait  de  
définir  la  coordonnée  X  sur  X  =  0  ou  X  =>  160  +  8  sur  un  sprite  le  
masquera,  mais  cela  affectera  toujours  les  autres  sprites  partageant  les  
mêmes  lignes.

Les  blocs  ont  le  format  suivant :

Byte0  Position  Y  sur  l'écran
Byte1  Position  X  sur  l'écran
Byte2  Numéro  de  modèle  0­255  (contrairement  à  certaines  tuiles
nombres,  les  numéros  de  motif  de  sprite  ne  sont  pas  signés.
LSB  est  ignoré  (traité  comme  0)  en  mode  8x16.)
Indicateurs  d'octet 3 :

Priorité  Bit7  Si  ce  
bit  est  défini  sur  0,  le  sprite  est  affiché  au­dessus  
de  l'arrière­plan  et  de  la  fenêtre.
Si  ce  bit  est  défini  sur  1,  le  sprite  sera  caché  derrière  
les  couleurs  1,  2  et  3  de  l'arrière­plan  et  de  la  fenêtre.  
(Sprite  ne  prévaut  que  sur  la  couleur  0  de  BG  &  win.)

Bit6  Y  flip  Le  
motif  de  Sprite  est  inversé  verticalement  si  ce  bit  est  
défini  sur  1.
Le  motif  Bit5  X  
flip  Sprite  est  inversé  horizontalement  si  ce  bit  est  
défini  sur  1.

Page  26 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.8.2.  Lutins

Numéro  de  palette  Bit4
Les  couleurs  des  sprites  sont  extraites  de  OBJ1PAL  si  ce  bit  est  
mis  à  1  et  de  OBJ0PAL  sinon.

2.8.3.  Bogue  de  la  RAM  des  sprites

Il  existe  une  faille  dans  le  matériel  GameBoy  qui  provoque  l'écriture  de  corbeille  
dans  la  RAM  OAM  si  les  commandes  suivantes  sont  utilisées  alors  que  leur  
contenu  16  bits  est  compris  entre  $FE00  et  $FEFF :

inc  xx  déc   (xx  =  bc,de  ou  hl)
xx

ldi  a,(hl)  ldd  a,
(hl)

ldi  (hl),a  ldd  (hl),a

Seuls  les  sprites  1  &  2  ($FE00  &  $FE04)  ne  sont  pas  concernés  par  ces  instructions.

par  DP Page  27
Machine Translated by Google

2.9.  Son Manuel  du  processeur  Game  Boy™

2.9.  Son
Deux  canaux  audio  sont  connectés  aux  bornes  de  sortie  SO1  et  SO2.  Il  y  
a  également  une  borne  d'entrée  Vin  connectée  à  la  cartouche.  Il  peut  être  
acheminé  vers  l'une  ou  l'autre  des  deux  bornes  de  sortie.  Les  circuits  
GameBoy  permettent  de  produire  du  son  de  quatre  manières  différentes :

Modèles  d'ondes  quadrangulaires  avec  fonctions  de  balayage  et  
d'enveloppe.  Modèles  d'ondes  quadrangulaires  avec  fonctions  
d'enveloppe.  Modèles  d'ondes  volontaires  à  partir  de  la  RAM  d'ondes.
Bruit  blanc  avec  une  fonction  d'enveloppe.

Ces  quatre  sons  peuvent  être  contrôlés  indépendamment  puis  mixés  
séparément  pour  chacune  des  bornes  de  sortie.

Les  registres  sonores  peuvent  être  réglés  à  tout  moment  pendant  
la  production  du  son.

Lors  de  la  définition  de  la  valeur  initiale  de  l'enveloppe  et  du  redémarrage  
du  compteur  de  longueur,  définissez  le  drapeau  initial  sur  1  et  initialisez  les  
données.

Dans  les  situations  suivantes,  le  drapeau  Sound  ON  est  réinitialisé  et  la  
sortie  audio  s'arrête :
1.  Lorsque  la  sortie  du  son  est  arrêtée  par  la  longueur
comptoir.
2.  Lorsqu'un  débordement  se  produit  en  mode  addition  alors  que  le  
balayage  fonctionne  au  son  1.

Lorsque  le  flag  Sound  OFF  pour  le  son  3  (bit  7  de  NR30)  est  mis  à  0,  
l'annulation  du  mode  OFF  doit  se  faire  en  mettant  le  flag  son  OFF  à  1.  En  
initialisant  le  son  3,  il  démarre  sa  fonction.

Page  28 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.9.  Son

Lorsque  le  drapeau  All  Sound  OFF  (bit  7  de  NR52)  est  défini  sur  0,  les  registres  
de  mode  pour  les  sons  1,  2,  3  et  4  sont  réinitialisés  et  la  sortie  du  son  
s'arrête.  (REMARQUE :  Le  réglage  de  chaque  registre  de  mode  sonore  doit  
être  effectué  après  l'annulation  du  mode  All  Sound  OFF.  Pendant  le  mode  
All  Sound  OFF,  chaque  registre  de  mode  sonore  ne  peut  pas  être  réglé.)

REMARQUE :  PENDANT  LE  MODE  ALL  SOUND  OFF,  LA  CONSOMMATION  
D'ÉLECTRICITÉ  EN  GO  CHUTE  DE  16 %  OU  PLUS !  PENDANT  QUE  VOS  PROGRAMMES  
N'UTILISENT  PAS  LE  SON,  PLACEZ  LE  DRAPEAU  ALL  SOUND  OFF  SUR  0.  IL  EST  PAR  
DÉFAUT  SUR  1  SUR  LA  RÉINITIALISATION.

Ce  sont  généralement  les  deux  équations  les  plus  importantes  dans  la  
conversion  entre  les  registres  de  fréquence  Hertz  et  GB :  (les  sons  auront  
une  fréquence  supérieure  de  2,4 %  sur  Super  GB.)

Go  =  2048  ­  (131072 /  Hz)
Hz  =  131072 /  (2048  ­  Go)

par  DP Page  29
Machine Translated by Google

2.10.  Minuteur Manuel  du  processeur  Game  Boy™

2.10.  Minuteur
Parfois,  il  est  utile  d'avoir  une  minuterie  qui  s'interrompt  à  intervalles  réguliers  
pour  les  routines  qui  nécessitent  des  mises  à  jour  périodiques  ou  
précises.  La  minuterie  du  GameBoy  a  une  fréquence  sélectionnable  de  4096,  
16384,  65536  ou  262144  Hertz.  Cette  fréquence  incrémente  le  compteur  de  
minuterie  (TIMA).  Lorsqu'il  déborde,  il  génère  une  interruption.  Il  est  
ensuite  chargé  avec  le  contenu  du  Timer  Modulo  (TMA).  Voici  des  
exemples :

;Cette  minuterie  d'intervalle  interrompt  4096  fois  par  seconde

ld  a,­1  ld  
($FF06),a  ld  a,4  ld   ;Définit  TMA  pour  diviser  l'horloge  par  1
($FF07),a
;Régler  l'horloge  sur  4096  Hertz

;Cette  minuterie  d'intervalle  interrompt  65536  fois  par  seconde

ld  a,­4  ld  
($FF06),a  ld  a,5  ld   ;Régler  TMA  pour  diviser  l'horloge  par  4
($FF07),a
;Régler  l'horloge  sur  262144  Hertz

Page  30 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.11.  E/S  série

2.11.  E/S  série
Le  port  d'E/S  série  de  la  Gameboy  est  une  configuration  très  simple  et  
grossière  par  rapport  aux  ports  série  standard  RS­232  (IBM­PC)  ou  RS­485  
(Macintosh).  Il  n'y  a  pas  de  bits  de  démarrage  ou  d'arrêt,  le  programmeur  doit  
donc  être  plus  créatif  lors  de  l'utilisation  de  ce  port.

Lors  d'un  transfert,  un  octet  est  décalé  en  même  temps  qu'un  octet  est  
décalé.  Le  taux  de  décalage  est  déterminé  par  le  fait  que  la  source  d'horloge  
est  interne  ou  externe.  S'ils  sont  internes,  les  bits  sont  décalés  à  
une  vitesse  de  8192  Hz  (122  microsecondes)  par  bit.  Le  bit  le  plus  
significatif  est  déplacé  vers  l'intérieur  et  vers  l'extérieur  en  premier.

Lorsque  l'horloge  interne  est  sélectionnée,  elle  pilote  la  broche  d'horloge  
sur  le  port  de  liaison  du  jeu  et  elle  reste  élevée  lorsqu'elle  n'est  pas  utilisée.  
Pendant  un  transfert,  il  passera  huit  fois  à  l'état  bas  pour  synchroniser  chaque  
bit.

Un  programmeur  lance  un  transfert  série  en  définissant  le  bit  7  de  $FF02.  Ce  
bit  peut  être  lu  et  est  automatiquement  mis  à  0  à  la  fin  du  transfert.  Une  fois  ce  
bit  défini,  une  interruption  se  produira  huit  horloges  de  bit  plus  tard  si  l'interruption  
série  est  activée.

Si  l'horloge  interne  est  sélectionnée  et  que  l'interruption  série  est  activée,  cette  
interruption  se  produit  122*8  microsecondes  plus  tard.

Si  l'horloge  externe  est  sélectionnée  et  que  l'interruption  série  est  activée,  une  
interruption  se  produira  huit  horloges  de  bit  plus  tard.

Le  lancement  d'un  transfert  série  avec  une  horloge  externe  attendra  
indéfiniment  si  aucune  horloge  externe  n'est  présente.  Ce

par  DP Page  31
Machine Translated by Google

2.11.  E/S  série Manuel  du  processeur  Game  Boy™

permet  une  certaine  synchronisation  avec  chaque  port  série.

L'état  du  dernier  bit  décalé  détermine  l'état  de  la  ligne  de  sortie  jusqu'à  ce  
qu'un  autre  transfert  ait  lieu.

Si  un  transfert  série  avec  horloge  interne  est  effectué  et  qu'aucune  GameBoy  
externe  n'est  présente,  une  valeur  de  $FF  sera  reçue  lors  du  transfert.

Le  code  suivant  provoque  le  décalage  de  75 $  vers  le  port  série  et  le  
décalage  d'un  octet  vers  $FF01 :

ld  a,75  $  ld  
($FF01),a  ld  a,81  
$  ld  ($FF02),a

2.12.  Interruptions

2.12.1.  Procédure  d'interruption
Le  drapeau  IME  (interrupt  master  enable)  est  réinitialisé  par  DI  et  interdit  
toutes  les  interruptions.  Il  est  défini  par  EI  et  acquitte  le  paramètre  
d'interruption  par  le  registre  IE.

1.  Lorsqu'une  interruption  est  générée,  le  drapeau  IF  sera
ensemble.

2.  Si  l'indicateur  IME  est  défini  et  que  l'indicateur  IE  correspondant  est  défini,  
les  3  étapes  suivantes  sont  effectuées.
3.  Réinitialisez  l'indicateur  IME  et  empêchez  toutes  les  interruptions.
4.  Le  PC  (compteur  de  programme)  est  poussé  sur  la  pile.
5.  Sauter  à  l'adresse  de  début  de  l'interruption.

Page  32 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.12.1.  Procédure  d'interruption

La  réinitialisation  du  registre  IF,  qui  était  la  cause  de  l'interruption,  est  
effectuée  par  le  matériel.

Pendant  l'interruption,  la  poussée  des  registres  à  utiliser  doit  être  effectuée  par  
la  routine  d'interruption.

Une  fois  le  service  d'interruption  en  cours,  toutes  les  interruptions  seront  
interdites.  Cependant,  si  le  drapeau  IME  et  le  drapeau  IE  sont  contrôlés,  
un  certain  nombre  de  services  d'interruption  peuvent  être  rendus  
possibles  par  l'imbrication.

Le  retour  à  partir  d'une  routine  d'interruption  peut  être  effectué  par  l'instruction  
RETI  ou  RET.

L'instruction  RETI  active  les  interruptions  après  avoir  effectué  une  opération  
de  retour.

Si  un  RET  est  utilisé  comme  instruction  finale  dans  une  routine  
d'interruption,  les  interruptions  resteront  désactivées  à  moins  qu'un  EI  ait  
été  utilisé  dans  la  routine  d'interruption  ou  soit  utilisé  ultérieurement.  
L'interruption  sera  acquittée  pendant  la  période  d'extraction  de  
l'opcode  de  chaque  instruction.

par  DP Page  33
Machine Translated by Google

2.12.2.  Descriptions  des  interruptions Manuel  du  processeur  Game  Boy™

2.12.2.  Descriptions  des  interruptions
Les  interruptions  suivantes  ne  se  produisent  que  si  elles  ont  été  activées  dans  le  
registre  Interrupt  Enable  ($FFFF)  et  si  les  interruptions  ont  effectivement  été  
activées  à  l'aide  de  l'instruction  EI.

1.  V­Blanc
L'interruption  V­Blank  se  produit  ~  59,7  fois  par  seconde  sur  un  Go  normal  et  ~  
61,1  fois  par  seconde  sur  un  Super  GB  (SGB).  Cette  interruption  se  produit  au  
début  de  la  période  V­Blank.  Pendant  cette  période,  le  matériel  vidéo  n'utilise  pas  
de  RAM  vidéo,  il  peut  donc  être  librement  accessible.  Cette  période  
dure  environ  1,1  ms.

2.  Statut  du  LLCM
Il  existe  diverses  raisons  pour  que  cette  interruption  se  produise,  comme  
décrit  par  le  registre  STAT  ($FF40).  Une  raison  très  populaire  est  d'indiquer  à  
l'utilisateur  quand  le  matériel  vidéo  est  sur  le  point  de  redessiner  une  ligne  LCD  
donnée.  Cela  peut  être  utile  pour  contrôler  dynamiquement  les  registres  SCX/
SCY  ($FF43/$FF42)  afin  d'effectuer  des  effets  vidéo  spéciaux.

3.  Débordement  de  la  minuterie

Cette  interruption  se  produit  lorsque  le  registre  TIMA  ($FF05)  passe  de  $FF  à  $00.

4.  Achèvement  du  transfert  en  série
Cette  interruption  se  produit  lorsqu'un  transfert  série  est  terminé  sur  le  port  
de  liaison  du  jeu.

Page  34 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.12.2.  Descriptions  des  interruptions

5.  Élevé  à  faible  de  P10­P13
Cette  interruption  se  produit  lors  d'une  transition  de  l'une  des  lignes  d'entrée  
du  clavier  de  haut  en  bas.  En  raison  du  fait  que  le  "rebond"*  du  clavier  est  
pratiquement  toujours  présent,  le  logiciel  doit  s'attendre  à  ce  que  cette  
interruption  se  produise  une  ou  plusieurs  fois  pour  chaque  pression  sur  un  
bouton  et  une  ou  plusieurs  fois  pour  chaque  relâchement  d'un  bouton.

*
­  Le  rebond  a  tendance  à  être  un  effet  secondaire  de  tout  bouton  
établissant  ou  rompant  une  connexion.  Pendant  ces  périodes,  il  
est  très  courant  qu'une  petite  oscillation  entre  les  états  haut  et  bas  se  
produise.

2.13.  Registres  spéciaux
2.13.1.  Registres  d'E/S

1.  FF00  (P1)
Nom  ­  Contenu  P1  
­  Enregistrez­vous  pour  lire  les  informations  sur  la  manette  et  
déterminer  le  type  de  système. (L/E)

Bit  7  ­  Non  utilisé
Bit  6  ­  Non  utilisé
Bit  5  ­  Port  de  sortie  P15
Bit  4  ­  Port  de  sortie  P14
Bit  3  ­  P13  dans  le  port
Bit  2  ­  P12  dans  le  port
Bit  1  ­  P11  dans  le  port
Bit  0  ­  P10  dans  le  port

par  DP Page  35
Machine Translated by Google

2.13.1.  Registres  d'E/S Manuel  du  processeur  Game  Boy™

Voici  la  disposition  matricielle  du  registre  $FF00 :

P14   P15  
| |
P10­­­­­­­O­Droit­­­­OA
| |
P11­­­­­­­O­Gauche­­­­­OB
| |
P12­­­­­­­O­Up­­­­­­­O­Select  |
|
P13­­­­­­­O­Down­­­­­O­Start
| |

Exemple  de  code :

Jeu :  Mme  Pacman  
Adresse :  $3b1

LD  A,  20 $ <­  bit  5  =  20  $
LD  ($FF00),A  <­  sélectionner  P14  en  le  réglant  bas
LD  A,($FF00)
LD  A,($FF00)  <­  attendre  quelques  cycles
CPL  <­  complément  A
AND  $0F  <­  n'obtient  que  les  4  premiers  bits
SWAP  A  <­  échangez­le
LD  B,A  <­  stocker  A  dans  B
LD  A,  10 $
LD  ($FF00),A  <­  sélectionner  P15  en  le  réglant  bas
LD  A,($FF00)
LD  A,($FF00)
LD  A,($FF00)
LD  A,($FF00)
LD  A,($FF00)
LD  A,($FF00)  <­  Attendez  quelques  cycles  de  PLUS

Page  36 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.13.1.  Registres  d'E/S

CPL  <­  complément  (inversé)
ET  $0F  <­  obtenir  les  4  premiers  bits
OU  B  <­  mettre  A  et  B  ensemble
LD  B,A  <­  stocker  A  dans  D
LD  A,($FF8B)  <­  lire  les  anciennes  données  de  joie  de  la  RAM
XOR  B  <­  bascule  avec  le  bit  de  bouton  actuel
ET  B  <­  récupère  le  bit  de  bouton  actuel
LD  ($FF8C),A  <­  enregistrer  dans  le  nouveau  stockage  Joydata
LD  A,B  <­  mettre  la  valeur  d'origine  dans  A
LD  ($FF8B),A  <­  le  stocker  en  tant  qu'anciennes  données  de  joie
LD  A,$30  <­  désélectionner  P14  et  P15
LD  ($FF00),A  <­  RESET  Joypad
RET <­  Retour  du  sous­programme

Les  valeurs  des  boutons  utilisant  la  méthode  ci­dessus  sont  telles :

80  $  ­  Début 8  $  ­  Vers  le  bas
40  $  ­  Sélectionner 4  $  ­  Jusqu'à
20  $  ­  B $2  ­  Gauche
10  $  ­  Un $1  ­  Droit

Disons  que  nous  avons  maintenu  A,  Start  et  Up  enfoncés.  La  valeur  
renvoyée  dans  l'accumulateur  A  serait  de  94  $.

2.  FF01  (SB)
Nom ­SB
Contenu  ­  Données  de  transfert  série  (R/W)

8  bits  de  données  à  lire/écrire

3.  FF02  (SC)
Nom ­  SC
Contenu  ­  Contrôle  SIO  (R/W)

par  DP Page  37
Machine Translated by Google

2.13.1.  Registres  d'E/S Manuel  du  processeur  Game  Boy™

Bit  7  ­  Indicateur  de  début  de  transfert
0 :  Pas  de  transfert
1 :  Démarrer  le  transfert

Bit  0  ­  Décalage  de  l'horloge
0 :  Horloge  externe  (500 kHz  max.)
1 : Horloge  interne  (8 192 Hz)

Le  transfert  est  lancé  en  définissant  l'indicateur  de  
début  de  transfert.  Ce  bit  peut  être  lu  et  est  automatiquement  
mis  à  0  en  fin  de  transfert.

La  transmission  et  la  réception  de  données  série  se  font  
simultanément.  Les  données  reçues  sont  automatiquement  
stockées  dans  SB.

4.  FF04  (DIV)
Nom ­DIV
Contenu  ­  Registre  diviseur  (R/W)

Ce  registre  est  incrémenté  de  16384  (~16779  
sur  SGB)  fois  par  seconde.  L'écriture  de  n'importe  quelle  
valeur  la  définit  sur  00 $.

5.  FF05  (TIMA)
Nom ­  TIMA
Contenu  ­  Compteur  de  minuterie  (R/W)

Ce  temporisateur  est  incrémenté  d'une  fréquence  
d'horloge  spécifiée  par  le  registre  TAC  ($FF07).  Le  
temporisateur  génère  une  interruption  lorsqu'il  déborde.

Page  38 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.13.1.  Registres  d'E/S

6.  FF06  (TMA)
Nom ­TMA
Contenu  ­  Minuterie  Modulo  (R/W)

Lorsque  le  TIMA  déborde,  ces  données  seront  chargées.

7.  FF07  (TAC)
Nom ­TAC
Contenu  ­  Contrôle  de  la  minuterie  (R/W)

Bit  2  ­  Arrêt  du  temporisateur
0 :  Arrêter  la  minuterie
1 :  Démarrer  la  minuterie

Bits  1+0  ­  Sélection  de  l'horloge  d'entrée  
00 :  4,096  KHz  (~4,194  KHz  SGB)
01 :  262,144  kHz  (~268,4  kHz  SGB)
10 :  65,536  KHz  (~67,11  KHz  SGB)
11 :  16,384  KHz  (~16,78  KHz  SGB)

8.  FF0F  (SI)
Nom ­  SI
Contenu  ­  Indicateur  d'interruption  (R/W)

Bit  4 :  Transition  de  haut  à  bas  du  numéro  de  broche  P10­
P13
Bit  3 :  transfert  d'E/S  série  terminé
Bit  2 :  dépassement  de  temporisateur
Bit  1 :  LCDC  (voir  STAT)
Bit  0 :  V­Blanc

La  priorité  et  l'adresse  de  saut  pour  les  5  ci­dessus

par  DP Page  39
Machine Translated by Google

2.13.1.  Registres  d'E/S Manuel  du  processeur  Game  Boy™

les  interruptions  sont :

Interrompre Priorité  1  2 Adresse  de  départ  


V­Blanc $0040
Statut  du  LLCM $0048  ­  Modes  0,  1,  2
LYC=LY  coïncide  
(sélectionnable)
Débordement  de  la  minuterie 3   0050  $  
Transfert  en  série 4 0058  $  ­  lors  du  transfert
est  terminé  $0060
Salut­Lo  de  P10­P13 5

*  Lorsque  plusieurs  interruptions  se  produisent  en  même  temps,  seule  
l'interruption  avec  la  priorité  la  plus  élevée  peut  être  acquittée.  Lorsqu'une  
interruption  est  utilisée,  un  '0'  doit  être  stocké  dans  le  registre  IF  avant  que  le  
registre  IE  ne  soit  défini.

9.  FF10  (NR  10)
Nom ­  NR  10
Contenu  ­  Registre  Mode  Son  1,
Registre  de  balayage  (R/W)

Bit  6­4  ­  Temps  de  balayage
Bit  3  ­  Augmentation/diminution  du  balayage
0 :  Addition  (la  fréquence  augmente)
1 :  Soustraction  (la  fréquence  diminue)
Bit  2­0  ­  Nombre  de  décalage  de  balayage  (n :  0­7)

Temps  de  
balayage :  000 :  balayage  désactivé  ­  pas  de  
changement  de  fréquence  001 :  
7,8  ms  (1/128  Hz)  010 :  15,6  ms  
(2/128  Hz)  011 :  23,4  ms  (3/128  Hz)

Page  40 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.13.1.  Registres  d'E/S

100 :  31,3  ms  (4/128  Hz)  101 :  
39,1  ms  (5/128  Hz)  110 :  46,9  
ms  (6/128  Hz)  111 :  54,7  ms  
(7/128  Hz)

Le  changement  de  fréquence  (NR13,NR14)  à  chaque  
décalage  est  calculé  par  la  formule  suivante  où  X(0)  est  la  
fréquence  initiale  et  X(t­  1)  est  la  dernière  fréquence :

X(t)  =  X(t­1)  +/­  X(t­1)/2^n

10.  FF11  (NR  11)
Nom ­  NR  11
Contenu  ­  Registre  du  mode  sonore  1,  durée  du  son/taux  d'onde  (R/W)

Seuls  les  bits  7­6  peuvent  être  lus.

Bit  7­6  ­  Service  de  modèle  de  vague
Bit  5­0  ­  Données  de  durée  du  son  (t1 :  0­63)

Utilisation  des  vagues :  (par  
défaut :  10)  00 :  12,5  %  ( _­­­­­­­­_­­­­­­­­_­­­­­­­­ )  01 :  25  %  
( __­­­  ­­­­__­­­­­­­__­­­­­­­ )  10 :  50  %  ( ____­­­­­____­­­­­
____­­­­­ )  11 :  75  %  ( ______­­­______­­­______­­­ )

Durée  du  son  =  (64­t1)*(1/256)  secondes

par  DP Page  41
Machine Translated by Google

2.13.1.  Registres  d'E/S Manuel  du  processeur  Game  Boy™

11.  FF12  (NR12)
Nom ­  NR  12
Contenu  ­  Registre  Mode  Son  1,  Enveloppe  (R/W)

Bit  7­4  ­  Volume  initial  de  l'enveloppe  Bit  3  ­  Enveloppe  UP/
DOWN  0 :  Atténuation  1 :  Amplification  Bit  
2­0  ­  Nombre  de  
balayages  
d'enveloppe  (n :  0­7)  (Si  zéro,  arrête  l'opération  
d'enveloppe.)

Le  volume  initial  de  l'enveloppe  est  de  0  à  $F.  Zéro  étant  pas  de  
son.

Durée  de  1  pas  =  n*(1/64)  secondes

12.  FF13  (NR  13)
Nom ­  NR  13
Contenu  ­  Registre  Mode  sonore  1,  Fréquence  lo  (W)

8  bits  inférieurs  de  fréquence  11  bits  (x).
Les  3  bits  suivants  sont  dans  NR  14  ($FF14)

13.  FF14  (NR  14)
Nom ­  NR  14
Contenu  ­  Registre  Mode  Son  1,  Fréquence  haute  (R/W)

Seul  le  bit  6  peut  être  lu.

Bit  7  ­  Initial  (lorsqu'il  est  défini,  le  son  redémarre)

Bit  6  ­  Compteur/sélection  consécutive

Page  42 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.13.1.  Registres  d'E/S

Bit  2­0  ­  3  bits  supérieurs  de  la  fréquence  (x)

Fréquence  =  4194304/(32*(2048­x))  Hz
=  131072/(2048­x)Hz

Sélection  compteur/consécutive
0  =  Indépendamment  de  la  longueur,  les  données  du  
son  NR11  peuvent  être  produites  
consécutivement.
1  =  Le  son  est  généré  pendant  la  période  définie  par  les  
données  de  longueur  dans  NR11.  Après  cette  
période,  le  drapeau  son  1  ON  (bit  0  de  NR52)  est  
réinitialisé.

14.  FF16  (NR  21)
Nom ­  NR  21
Contenu  ­  Registre  Sound  Mode  2,  Sound  Length;  Vague
Service  de  modèle  (R/W)

Seuls  les  bits  7­6  peuvent  être  lus.

Bit  7­6  ­  Service  de  modèle  d'onde
Bit  5­0  ­  Données  de  durée  du  son  (t1 :  0­63)

Utilisation  des  vagues :  (par  
défaut :  10)  00 :  12,5  %  ( _­­­­­­­­_­­­­­­­­_­­­­­­­­ )  01 :  25  %  
( __­­­  ­­­­__­­­­­­­__­­­­­­­ )  10 :  50  %  ( ____­­­­­____­­­­­
____­­­­­ )  11 :  75  %  ( ______­­­______­­­______­­­ )

Durée  du  son  =  (64­t1)*(1/256)  secondes

par  DP Page  43
Machine Translated by Google

2.13.1.  Registres  d'E/S Manuel  du  processeur  Game  Boy™

15.  FF17  (NR  22)
Nom ­  NR  22
Contenu  ­  Registre  Mode  sonore  2,  enveloppe  (R/W)

Bit  7­4  ­  Volume  initial  de  l'enveloppe  Bit  3  ­  
Enveloppe  UP/DOWN  0 :  Atténuation  
1 :  Amplification  
Bit  2­0  ­  
Nombre  de  balayages  d'enveloppe  (n :  0­7)  (Si  
zéro,  arrête  l'opération  
d'enveloppe.)

Le  volume  initial  de  l'enveloppe  est  de  0  à  $F.  Zéro  étant  
pas  de  son.

Durée  de  1  pas  =  n*(1/64)  secondes

16.  FF18  (NR  23)
Nom ­  NR  23
Contenu  ­  Registre  du  mode  sonore  2,  données  de  fréquence  
lo  (W)

Les  8  bits  inférieurs  de  la  fréquence  des  données  11  
bits  (x).  Les  3  bits  suivants  sont  dans  NR  14  ($FF19).

17.  FF19  (NR  24)
Nom ­  NR  24
Contenu  ­  Registre  du  mode  sonore  2,  données  de  fréquence  
hautes  (R/W)

Seul  le  bit  6  peut  être  lu.

Bit  7  ­  Initial  (lorsqu'il  est  activé,  le  son

Page  44 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.13.1.  Registres  d'E/S

redémarre)
Bit  6  ­  Compteur/sélection  consécutive
Bit  2­0  ­  3  bits  supérieurs  de  la  fréquence  (x)

Fréquence  =  4194304/(32*(2048­x))  Hz
=  131072/(2048­x)Hz

Sélection  compteur/consécutive
0  =  Indépendamment  de  la  longueur,  les  données  
dans  le  son  NR21  peuvent  être  
produites  consécutivement.
1  =  Le  son  est  généré  pendant  la  période  définie  par  
les  données  de  longueur  dans  NR21.  Après  
cette  période,  le  drapeau  son  2  ON  (bit  1  de  NR52)  
est  réinitialisé.

18.  FF1A  (NR  30)
Nom ­  NR  30
Contenu  ­  Registre  du  mode  sonore  3,  son  activé/désactivé  (R/W)

Seul  le  bit  7  peut  être  lu

Bit  7  ­  Son  désactivé
0 :  arrêt  de  la  sortie  du  son  3
1 :  Sortie  son  3  OK

19.  FF1B  (NR  31)
Nom ­  NR  31
Contenu  ­  Registre  Sound  Mode  3,  durée  du  son  (R/W)

Bit  7­0  ­  Durée  du  son  (t1 :  0  ­  255)

Durée  du  son  =  (256­t1)*(1/2)  secondes

par  DP Page  45
Machine Translated by Google

2.13.1.  Registres  d'E/S Manuel  du  processeur  Game  Boy™

20.  FF1C  (NR  32)
Nom ­  NR  32
Contenu  ­  Registre  du  mode  sonore  3,  sélection  du  niveau  de  sortie  
(R/W)

Seuls  les  bits  6­5  peuvent  être  lus

Bit  6­5  ­  Sélectionner  le  niveau  de  sortie
00 :  Muet
01 :  Produire  de  la  RAM  de  modèle  d'onde
Données  telles  qu'elles  sont  (longueur  de  4  bits)
10 :  Produire  de  la  RAM  de  modèle  d'onde
données  déplacées  une  fois  vers  le
DROITE  (1/2)  (longueur  de  4  bits)
11:  Produire  des  données  RAM  Wave  
Pattern  décalées  deux  fois  vers  le
DROITE  (1/4)  (longueur  de  4  bits)
* ­  La  RAM  Wave  Pattern  est  située  entre  $FF30  et  $FF3f.

21.  FF1D  (NR  33)
Nom ­  NR  33
Contenu  ­  Registre  du  mode  sonore  3,  données  inférieures  de  la  
fréquence  (W)

8  bits  inférieurs  d'une  fréquence  de  11  bits  (x).

22.  FF1E  (NR  34)
Nom ­  NR  34
Contenu  ­  Registre  du  mode  sonore  3,  données  supérieures  de  la  
fréquence  (R/W)

Seul  le  bit  6  peut  être  lu.

Page  46 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.13.1.  Registres  d'E/S

Bit  7  ­  Initial  (lorsqu'il  est  défini,  le  son  redémarre)
Bit  6  ­  Compteur/drapeau  consécutif  Bit  2­0  ­  
Les  3  bits  supérieurs  de  la  fréquence  (x).

Fréquence  =  4194304/(64*(2048­x))  Hz
=  65536/(2048­x)Hz

Sélection  compteur/consécutive
0  =  Indépendamment  de  la  longueur,  les  données  
dans  le  son  NR31  peuvent  être  
produites  consécutivement.
1  =  Le  son  est  généré  pendant  la  période  définie  par  
les  données  de  longueur  dans  NR31.  Après  
cette  période,  le  drapeau  son  3  ON  (bit  2  de  NR52)  
est  réinitialisé.

23.  FF20  (NR  41)
Nom ­  NR  41
Contenu  ­  Registre  Sound  Mode  4,  durée  du  son  (R/W)

Bit  5­0  ­  Données  de  durée  du  son  (t1 :  0­63)

Durée  du  son  =  (64­t1)*(1/256)  secondes

24.  FF21  (NR  42)
Nom ­  NR  42
Contenu  ­  Registre  Sound  Mode  4,  enveloppe  (R/W)

Bit  7­4  ­  Volume  initial  de  l'enveloppe
Bit  3  ­  Enveloppe  HAUT/BAS
0 :  Atténuer
1 :  Amplifier

par  DP Page  47
Machine Translated by Google

2.13.1.  Registres  d'E/S Manuel  du  processeur  Game  Boy™

Bit  2­0  ­  Nombre  de  balayages  d'enveloppe  (n :  0­7)  (Si  
zéro,  arrête  l'opération  d'enveloppe.)

Le  volume  initial  de  l'enveloppe  est  de  0  à  $F.  Zéro  étant  pas  de  
son.

Durée  de  1  pas  =  n*(1/64)  secondes

25.  FF22  (NR  43)
Nom ­  NR  43
Contenu  ­  Registre  Sound  Mode  4,  compteur  polynomial  (R/W)

Bit  7­4  ­  Sélection  de  l'horloge  de  décalage
fréquence  du  polynôme
comptoir

Bit  3  ­  Sélection  du  pas  du  compteur  polynomial  Bit  2­0  ­  
Sélection  du  rapport  de  
division  des  fréquences :  000 :  f  *  1/2^3  *  2  001 :  f  *  1/2^3  *  1  010 :  f  *  
1/  2^3  *  1/2  011 :  f  *  
1/2^3  *  1/3  100 :  f  *  1/2^3  *  1/4  
101 :  f  *  1/2^3  *  1/5  110 :  f  *  
1/2^3  *  1/6  111 :  f  *  1/2^3  *  1/7  f  
=  4,194304  Mhz

Sélection  du  pas  du  compteur  polynomial :  0 :  15  pas  1 :  7  pas

Page  48 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.13.1.  Registres  d'E/S

Sélection  de  la  fréquence  d'horloge  de  décalage  du  compteur  
polynomial :

0000 :  rapport  de  division  des  fréquences  *  1/2  0001 :  rapport  de  
division  des  fréquences  *  1/2^2  0010 :  rapport  de  division  des  fréquences  
*  1/2^3  0011 :  rapport  de  division  des  fréquences  *  1/2^4

: :
: :
: :
0101 :  rapport  de  division  des  fréquences  *  1/2^14  1110 :  code  interdit  
1111 :  code  interdit

26.  FF23  (NR  44)
Nom ­  NR  44
Contenu  ­  Registre  Sound  Mode  4,
compteur/consécutif ;  initiale  (R/W)

Seul  le  bit  6  peut  être  lu.

Bit  7  ­  Initial  (lorsqu'il  est  défini,  le  son  redémarre)
Bit  6  ­  Compteur/sélection  consécutive

Compteur/Sélection  consécutive  0  =  
Indépendamment  de  la  longueur,  les  données  dans  le  son  NR41  
peuvent  être  produites  consécutivement.
1  =  Le  son  est  généré  pendant  le  temps
période  définie  par  les  données  de  longueur  dans  NR41.
Après  cette  période,  le  drapeau  sonore  4  ON  (bit  3  de  NR52)  
est  réinitialisé.

par  DP Page  49
Machine Translated by Google

2.13.1.  Registres  d'E/S Manuel  du  processeur  Game  Boy™

27.  FF24  (NR  50)
Nom ­  NR  50
Contenu  ­  Contrôle  des  canaux /  ON­OFF /  Volume  (R/W)

Bit  7  ­  Vin­>SO2  ON/OFF
Bit  6­4  ­  Niveau  de  sortie  SO2  (volume)  (#  0­7)
Bit  3  ­  Vin­>SO1  ON/OFF
Bit  2­0  ­  Niveau  de  sortie  SO1  (volume)  (#  0­7)

Vin­>SO1  (Vin­>SO2)

En  synthétisant  le  son  des  sons  1  à  4,  l'entrée  vocale  
de  la  borne  Vin  est  éteinte.  0 :  pas  de  sortie  1 :  
sortie  OK

28.  FF25  (NR  51)
Nom ­  NR  51
Contenu  ­  Sélection  de  la  borne  de  sortie  audio  (R/W)

Bit  7  ­  Son  de  sortie  4  vers  la  borne  SO2
Bit  6  ­  Son  de  sortie  3  vers  la  borne  SO2
Bit  5  ­  Son  de  sortie  2  vers  la  borne  SO2
Bit  4  ­  Son  de  sortie  1  vers  la  borne  SO2
Bit  3  ­  Son  de  sortie  4  vers  la  borne  SO1
Bit  2  ­  Son  de  sortie  3  vers  la  borne  SO1
Bit  1  ­  Son  de  sortie  2  vers  la  borne  SO1
Bit  0  ­  Son  de  sortie  1  vers  la  borne  SO1

Page  50 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.13.1.  Registres  d'E/S

29.  FF26  (NR  52)
Nom ­  NR  52  (Valeur  au  reset :  $F1­GB,  $F0­SGB)
Contenu  ­  Son  activé/désactivé  (R/W)

Bit  7  ­  Tous  les  sons  activés/désactivés
0 :  arrêter  tous  les  circuits  sonores  1 :  
activer  tous  les  circuits  sonores
Bit  3  ­  Drapeau  Son  4  ON
Bit  2  ­  Indicateur  Son  3  ON
Bit  1  ­  Indicateur  Son  2  ON
Bit  0  ­  Son  1  indicateur  ON

Les  bits  0  à  3  de  ce  registre  sont  censés  être  des  bits  d'état  
à  lire.  L'écriture  sur  ces  bits  n'active/désactive  PAS  le  
son.

Si  vos  programmes  GB  n'utilisent  pas  de  son,  écrivez  00 $  
dans  ce  registre  pour  économiser  16 %  ou  plus  sur  la  
consommation  d'énergie  en  GB.

30.  FF30  ­  FF3F  (RAM  à  motif  d'onde)
Nom ­  RAM  à  motif  d'onde
Contenu  ­  Stockage  de  forme  d'onde  pour  des  données  sonores  arbitraires

Cette  zone  de  stockage  contient  32  échantillons  de  4  bits  
qui  sont  lus  d'abord  les  4  bits  supérieurs.

31.  FF40  (LCDC)
Nom ­  LCDC  (valeur  91$  à  la  réinitialisation)
Contenu  ­  Contrôle  LCD  (R/W)

Bit  7  ­  Fonctionnement  de  la  commande  LCD  *

par  DP Page  51
Machine Translated by Google

2.13.1.  Registres  d'E/S Manuel  du  processeur  Game  Boy™

0 :  arrêt  complet  (pas  d'image  à  l'écran)  1 :  fonctionnement

Bit  6  ­  Sélection  de  l'affichage  de  la  carte  des  tuiles  de  fenêtre
0 :  9 800 $  à  9 BFF
1 :  9 000 $  à  9 FFF
Bit  5  ­  Affichage  de  la  fenêtre  0 :  
désactivé  
1 :  activé
Bit  4  ­  Sélection  de  données  BG  et  fenêtre  Tile
0 :  8 800 $  à  97 FF
1 :  8  000  $  ­  8  FFF  $  <­  Même  zone  que  OBJ
Bit  3  ­  Sélection  de  l'affichage  de  la  carte  des  tuiles  BG
0 :  9 800 $  à  9 BFF
1 :  9 000 $  à  9 FFF
Bit  2  ­  OBJ  (Sprite)  Taille  0 :  8*8  1 :  8*16  

(largeur*hauteur)
Bit  1  ­  Affichage  OBJ  (Sprite)  0 :  désactivé  1 :  
activé

Bit  0  ­  Affichage  de  la  glycémie  et  de  la  fenêtre  0 :  
désactivé  
1 :  activé

*
­  L'arrêt  du  fonctionnement  LCD  (bit  7  de  1  à  0)  doit
être  effectué  pendant  V­blank  pour  fonctionner  correctement.  V­  blank  peut  
être  confirmé  lorsque  la  valeur  de  LY  est  supérieure  ou  égale  à  144.

32.  FF41  (STATIQUE)

Nom ­  STAT
Contenu  ­  Statut  LCDC  (R/W)

Bits  6­3  ­  Sélection  d'interruption  par  état  LCDC

Page  52 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.13.1.  Registres  d'E/S

Bit  6  ­  Coïncidence  LYC=LY  (sélectionnable)
Bit  5  ­  Mode  10
Bit  4  ­  Mode  01
Bit  3  ­  Mode  00
0 :  Non  sélection
1 :  Sélection
Bit  2  ­  Indicateur  de  coïncidence
0 :  LYC  différent  de  LCDC  LY
1 :  LYC  =  LCDC  LY
Bit  1­0  ­  Indicateur  de  mode
00 :  Pendant  H­Blanc
01 :  Pendant  V­Blank
10 :  Pendant  la  recherche  OAM­RAM
11 :  Pendant  le  transfert  de  données  vers
Pilote  LCD

STAT  indique  l'état  actuel  du  contrôleur  LCD.
Mode  00 :  Lorsque  le  drapeau  est  00,  c'est  le  H­Blank
période  et  le  CPU  peut  accéder  à  la  RAM  d'affichage  (8  000  
$  ­  9  FFF).
Mode  01 :  Lorsque  le  drapeau  est  01,  c'est  le  V­Blank
période  et  le  CPU  peut  accéder  à  la  RAM  d'affichage  (8  000  
$  ­  9  FFF).
Mode  10 :  Lorsque  le  drapeau  est  10,  l'OAM  est  utilisé  ($FE00­$FE9F).  La  
CPU  ne  peut  pas  accéder  à  l'OAM  pendant  cette  période  
Mode  11 :  Lorsque  le  drapeau  est  11,  
l'OAM  et
la  RAM  d'affichage  est  utilisée.  La  CPU  ne  peut  accéder  ni  à  
l'un  ni  à  l'autre  pendant  cette  période.

Les  éléments  suivants  sont  typiques  lorsque  l'affichage  est  activé :

par  DP Page  53
Machine Translated by Google

2.13.1.  Registres  d'E/S Manuel  du  processeur  Game  Boy™

Mode  0 :  
000___000___000___000___000___000___000________________

Modalité  
1 :  _________________________________________11111111111111__

Mode  2 :  
___2_____2_____2_____2_____2_____2___________________2_

Mode  3 :  
____33____33____33____33____33____33__________________3

Le  drapeau  de  mode  passe  par  les  valeurs  0,  2  et  3  à  un  cycle  
d'environ  109uS.  0  est  présent  à  environ  48,6 uS,  2  à  environ  19 uS  
et  3  à  environ  41 uS.
Celle­ci  est  interrompue  toutes  les  16.6ms  par  le  VBlank  (1).  Le  
drapeau  de  mode  reste  à  1  pendant  environ  1,08  ms.  (Le  mode  0  est  
présent  entre  201­207  clics,  2  environ  77­83  clics  et  3  environ  169­175  
clics.  Un  cycle  complet  à  travers  ces  états  prend  456  clics.  VBlank  
dure  4560  clics.  Un  rafraîchissement  complet  de  l'écran  se  produit  
toutes  les  70224  clics. )

33.  FF42  (SCY)
Nom ­SCY
Contenu  ­  Défilement  Y  (R/W)

Valeur  8  bits  $00­$FF  pour  faire  défiler  la  position  de  l'écran  
BG  Y.

Page  54 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.13.1.  Registres  d'E/S

34.  FF43  (SCX)
Nom ­  SCX
Contenu  ­  Défilement  X  (R/W)

Valeur  8  bits  $00­$FF  pour  faire  défiler  la  position  de  l'écran  
BG  X.

35.  FF44  (LY)
Nom ­LY
Table  des  matières  ­  LCDC  Coordonnée  Y  (R)

Le  LY  indique  la  ligne  verticale  sur  laquelle  les  données  actuelles  
sont  transférées  au  pilote  LCD.  Le  LY  peut  prendre  n'importe  
quelle  valeur  entre  0  et  153.  Les  valeurs  entre  144  et  
153  indiquent  la  période  V­Blank.

L'écriture  réinitialisera  le  compteur.

36.  FF45  (LYC)
Nom ­  LYC
Contenu  ­  Comparaison  LY  (R/W)

Le  LYC  se  compare  au  LY.  Si  les  valeurs  sont  les  mêmes,  cela  
amène  le  STAT  à  définir  l'indicateur  de  coïncidence.

37.  FF46  (DMA)
Nom ­DMA
Contenu  ­  Transfert  DMA  et  adresse  de  début  (W)

Le  transfert  DMA  (40*28  bits)  depuis  la  ROM  interne  ou
RAM  ($0000­$F19F)  vers  l'OAM  (adresse  $FE00­$FE9F)

par  DP Page  55
Machine Translated by Google

2.13.1.  Registres  d'E/S Manuel  du  processeur  Game  Boy™

peut  être  effectuée.  Il  faut  160  microsecondes  pour  le  transfert.

40*28  bits  =  #140  ou  #$8C.  Comme  vous  pouvez  le  constater,  il  ne  transfère  que  
8 000  $  d'octets  de  données.  Les  données  OAM  ont  une  longueur  de  $A0  octets,  
de  $0  à  $9F.

Mais  si  vous  examinez  les  données  OAM,  vous  voyez  que  4  bits  ne  sont  pas  
utilisés.

40*32  bits  =  #$A0,  mais  puisque  4  bits  pour  chaque  OAM  ne  sont  pas  utilisés,  
c'est  40*28  bits.

Il  transfère  toutes  les  données  OAM  vers  la  RAM  OAM.

L'adresse  de  début  de  transfert  DMA  peut  être  désignée  tous  les  100  $  à  
partir  de  l'adresse  $0000­$F100.  Cela  signifie  0000 $,  0100 $,  0200 $,  
0300 $...

Comme  on  peut  le  voir  en  regardant  le  registre  $FF41  Sprite  RAM  ($FE00  ­  
$FE9F)  n'est  pas  toujours  disponible.  Une  routine  simple  que  de  nombreux  
jeux  utilisent  pour  écrire  des  données  dans  la  mémoire  Sprite  est  illustrée  ci­
dessous.  Puisqu'il  copie  les  données  dans  la  RAM  du  sprite  aux  moments  
appropriés,  il  supprime  cette  responsabilité  du  programme  principal.

Tout  l'espace  mémoire,  à  l'exception  de  la  RAM  élevée  ($FF80­
$FFFE),  n'est  pas  accessible  pendant  le  DMA.  Pour  cette  raison,  la  routine  ci­
dessous  doit  être  copiée  et  exécutée  en  mémoire  vive.  Il  est  généralement  appelé  
à  partir  d'une  interruption  V­blank.

Exemple  de  programme :

org  $40  jp  
VBlank

Page  56 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.13.1.  Registres  d'E/S

org  $ff80  
VBlank :  
push  af  ld   <­  Save  A  reg  &  flags
a,BASE_ADRS  <­  transfert  de  données  depuis  BASE_ADRS  ld  ($ff46),a  <­  
place  A  dans  les  registres  DMA  ld  a,28h  <­  longueur  de  la  boucle  
Attendre :  <­  Nous  devons  attendre  160  ms.  dec  
a  <­  4  cycles  ­  diminuer  A  de  1  jr  nz,Wait  <­  12  cycles  ­  branche  si  Pas  
zéro  à  Attendre  pop  af  reti

<­  Restaurer  un  registre  et  des  drapeaux
<­  Retour  d'interruption

38.  FF47  (BGP)
Nom ­BGP
Table  des  matières  ­  BG  &  Window  Palette  Data  (R/W)

Bit  7­6  ­  Données  pour  les  données  de  points  11
(Normalement  la  couleur  la  plus  foncée)
Bit  5­4  ­  Données  pour  les  données  de  points  10
Bit  3­2  ­  Données  pour  les  données  de  point  01
Bit  1­0  ­  Données  pour  les  données  de  points  00
(Normalement  la  couleur  la  plus  claire)

Cela  sélectionne  la  nuance  de  gris  à  utiliser  pour  l'arrière­plan  
(BG)  et  les  pixels  de  la  fenêtre.
Étant  donné  que  chaque  pixel  utilise  2  bits,  la  nuance  
correspondante  sera  sélectionnée  à  partir  d'ici.

par  DP Page  57
Machine Translated by Google

2.13.1.  Registres  d'E/S Manuel  du  processeur  Game  Boy™

39.  FF48  (OBP0)
Nom ­OBP0
Contenu  ­  Palette  d'objets  0  Données  (R/W)

Cela  sélectionne  les  couleurs  pour  la  palette  de  
sprites  0.  Cela  fonctionne  exactement  comme  
BGP  ($FF47)  sauf  que  chaque  valeur  de  0  est  
transparente.

40.  FF49  (OBP1)
Nom ­  OBP1
Contenu  ­  Données  de  la  palette  d'objets  1  (R/W)

Cela  sélectionne  les  couleurs  pour  la  palette  de  
sprites  1.  Cela  fonctionne  exactement  comme  
OBP0  ($FF48).  Voir  BGP  pour  plus  de  détails.

41.  FF4A  (WY)
Nom ­WY
Contenu  ­  Position  Y  de  la  fenêtre  (R/W)

0  <=  WY  <=  143  
WY  doit  être  supérieur  ou  égal  à  0  et  doit  être  inférieur  ou  
égal  à  143  pour  que  la  fenêtre  soit  visible.

42.  FF4B  (WX)
Nom ­WX
Contenu  ­  Position  de  la  fenêtre  X  (R/W)

0  <=  WX  <=  166

WX  doit  être  supérieur  ou  égal  à  0  et

Page  58 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 2.13.1.  Registres  d'E/S

doit  être  inférieur  ou  égal  à  166  pour  que  la  fenêtre  soit  
visible.

WX  est  décalé  de  7  par  rapport  aux  coordonnées  
absolues  de  l'écran.  Régler  la  fenêtre  sur  WX=7,  WY=0  placera  
le  coin  supérieur  gauche  de  la  fenêtre  aux  coordonnées  absolues  
de  l'écran  0,0.

Disons  WY  =  70  et  WX  =  87.
La  fenêtre  serait  positionnée  comme  suit :

0 80 159
______________________________________
0  |  |  |  |  

Affichage  en  arrière­plan
Ici

­
|  |  |  70  |  |  |   |  |  |  |  |  |  |  +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­|  
|  80,70  |  |  |

|  Vitrine  |  |
Ici  |  |  |  |  |  143  |
___________________|
|  |  |  | __________________|

Les  personnages  OBJ  (Sprites)  peuvent  toujours  entrer  dans  la  
fenêtre.  Aucune  des  couleurs  de  la  fenêtre  n'est  
transparente,  donc  toutes  les  tuiles  d'arrière­plan  sous  la  fenêtre  sont  
masquées.

par  DP Page  59
Machine Translated by Google

2.13.1.  Registres  d'E/S Manuel  du  processeur  Game  Boy™

43.  FFFF  (IE)
Nom ­  C'EST  À  DIRE

Contenu  ­  Interrupt  Enable  (R/W)

Bit  4 :  Transition  de  Haut  à  Bas  du  numéro  de  broche  P10­
P13.
Bit  3 :  Transfert  d'E/S  série  terminé  Bit  2 :  
Débordement  du  temporisateur  
Bit  1 :  LCDC  (voir  STAT)
Bit  0 :  V­Blanc

0 :  désactiver  
1 :  activer

page  60 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.  Présentation  des  commandes  Game  Boy

3.  Présentation  des  commandes  Game  Boy

3.1.  Avant­propos

Étant  donné  que  les  livres  sur  le  Z80  deviennent  de  plus  en  plus  difficiles  à  
trouver,  j'espère  que  les  informations  ici  pourraient  être  utiles  à  ceux  qui  
essaient  de  comprendre  le  langage  d'assemblage  spécifique  à  
GameBoy.

3.2.  Registres  du  processeur

3.2.1.  En  général
Le  GameBoy  a  des  instructions  et  des  registres  similaires  aux  microprocesseurs  
Intel  8080,  Intel  8085  et  Zilog  Z80.  Il  possède  huit  registres  8  bits  A,  B,  C,  D,  E,  F,  
H,  L  et  deux  registres  16  bits  SP  &  PC :

15..8  7..0
UN F
B C
D E
H L
PS
PC

Cependant,  certaines  instructions  vous  permettent  d'utiliser  les  registres  
A,  B,  C,  D,  E,  H  et  L  comme  registres  16  bits  en  les  associant  de  la  
manière  suivante :  AF,  BC,  DE  et  HL.  Le  registre  F  est  indirectement  accessible  
par  le

par  DP Page  61
Machine Translated by Google

3.2.1.  En  général Manuel  du  processeur  Game  Boy™

programmeur  et  est  utilisé  pour  stocker  les  résultats  de  diverses  opérations  
mathématiques.  Le  registre  PC,  ou  Program  Counter,  pointe  vers  la  
prochaine  instruction  à  exécuter  dans  la  mémoire  de  la  Game  Boy.  Le  
registre  SP,  ou  Stack  Pointer,  pointe  vers  la  position  actuelle  de  la  pile.

3.2.2.  Registre  des  drapeaux

Le  registre  Fleg  se  compose  des  bits  suivants :
7  6  5  4  3  2  1  0
ZNHC  0  0  0  0

•  Zero  Flag  (Z) :  ce  
bit  est  défini  lorsque  le  résultat  d'une  opération  mathématique  est  zéro  
ou  que  deux  valeurs  correspondent  lors  de  l'utilisation  de  
l'instruction  CP.

ï  Indicateur  de  soustraction  
(N) :  ce  bit  est  défini  si  une  soustraction  a  été  effectuée  dans  la  dernière  
instruction  mathématique.

ï  Half  Carry  Flag  (H):
Ce  bit  est  défini  si  un  report  s'est  produit  à  partir  du  quartet  inférieur  
lors  de  la  dernière  opération  mathématique.
ï  Porter  le  drapeau  (C) :
Ce  bit  est  défini  si  un  report  s'est  produit  à  partir  de  la  dernière  
opération  mathématique  ou  si  le  registre  A  est  la  plus  petite  valeur  lors  
de  l'exécution  de  l'instruction  CP.

Page  62 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.2.3.  Compteur  de  programme

3.2.3.  Compteur  de  programme
À  la  mise  sous  tension,  le  compteur  de  programme  GameBoy  
est  initialisé  à  100  $  (100  hex)  et  l'instruction  trouvée  à  cet  emplacement  dans  la  
ROM  est  exécutée.
Le  compteur  de  programme  à  partir  de  ce  point  est  contrôlé,  indirectement,  par  
les  instructions  de  programme  elles­mêmes  qui  ont  été  générées  par  le  
programmeur  du  chariot  ROM.

3.2.4.  Pointeur  de  pile

Une  grande  clé  pour  comprendre  la  programmation  en  langage  assembleur  
sur  GameBoy  est  de  comprendre  le  concept  de  pointeur  de  pile.  Une  familiarité  
avec  le  langage  d'assemblage  pour  d'autres  processeurs  aide  grandement  car  
les  concepts  sont  les  mêmes.

Le  GameBoy  Stack  Pointer  est  utilisé  pour  garder  une  trace  du  haut  de  la  "pile".  
La  pile  est  utilisée  pour  enregistrer  des  variables,  enregistrer  des  
adresses  de  retour,  transmettre  des  arguments  à  des  sous­programmes  et  
diverses  autres  utilisations  pouvant  être  conçues  par  le  programmeur  individuel.

Les  instructions  CALL,  PUSH  et  RST  placent  toutes  des  
informations  sur  la  pile.  Les  instructions  POP,  RET  et  RETI  retirent  toutes  des  
informations  de  la  pile.
(Les  interruptions  placent  une  adresse  de  retour  sur  la  pile  et  la  suppriment  
également  à  leur  achèvement.)

Au  fur  et  à  mesure  que  les  informations  sont  placées  sur  la  pile,  la  pile  grandit  
vers  le  bas  dans  la  mémoire  RAM.  Par  conséquent,  le  pointeur  de  pile  doit  
toujours  être  initialisé  à  l'emplacement  le  plus  élevé  de  l'espace  RAM  qui  a  été  
alloué  pour  être  utilisé  par  la  pile.
Par  exemple,  si  un  programmeur  souhaite  localiser  le  pointeur  de  pile  en  
haut  d'un  espace  RAM  faible  ($C000­$DFFF),  il  définira  le  pointeur  de  pile  sur  
$E000  en  utilisant  le

par  DP Page  63
Machine Translated by Google

3.2.4.  Pointeur  de  pile Manuel  du  processeur  Game  Boy™

commande  LDSP,$E000.  (Le  pointeur  de  pile  décrémente  automatiquement  avant  de  
mettre  quelque  chose  sur  la  pile,  il  est  donc  parfaitement  acceptable  de  lui  attribuer  une  
valeur  qui  pointe  vers  une  adresse  mémoire  située  un  emplacement  après  la  fin  de  la  
RAM  disponible.)

Le  pointeur  de  pile  GameBoy  est  initialisé  à  $FFFE  à  la  mise  sous  tension,  mais  un  
programmeur  ne  doit  pas  se  fier  à  ce  paramètre  et  doit  plutôt  définir  explicitement  
sa  valeur.

Page  64 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.  Commandes

3.3.  Commandes
Le  processeur  GameBoy  est  basé  sur  un  sous­ensemble  du  microprocesseur  
Z80.  Un  résumé  de  ces  commandes  est  donné  ci­dessous.
Si  'Flagsaffected'  n'est  pas  donné  pour  une  commande  alors  aucun  n'est  
affecté.

3.3.1.  Charges  8  bits

1.  LD  nn,n
Description :  
Mettre  la  valeur  nn  dans  n.

Utiliser  
avec :  nn  =  B,C,D,E,H,L,BC,DE,HL,SP  n  
=  valeur  immédiate  8  bits

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes  
LD B,n 06  8
LD C,n 0E  8  16  8
LD D,n
LD E,n 1E  8  26  8
LD H,n
LD L,n 2E  8

par  DP Page  65
Machine Translated by Google

3.3.1.  Charges  8  bits Manuel  du  processeur  Game  Boy™

2.  LD  r1,r2
Description :  
Mettre  la  valeur  r2  dans  r1.

Utiliser  avec:
r1,r2  =  A,B,C,D,E,H,L,(HL)

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
LD Un,  un 7F  4  78  4  79  4
LD UN  B
LD Un,C
LD PUBLICITÉ 7A  4
LD Un,E 7B  4
LD Un,  H 7C  4
LD AL 7D  4
LD A,(HL) 7E  8  40  4  41  4  42  4  
LD B,B 43  4  44  4  45  4  46  8  
LD AVANT  JC 48  4  49  4
LD B,D
LD ÊTRE
LD B,H
LD B,L
LD B,(HL)
LD C,B
LD C,C
LD CD 4A  4
LD C,E 4B  4
LD C,H 4C  4
LD C,L 4D  4
LD C,(HL) 4E  8  50  4  51  4
LD D,B
LD D,C

Page  66 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.1.  Charges  8  bits

LD J,D 52   4  


LD D,E 53   4  
LD J,H 54   4  
LD D,L 55   4  
LD D,(HL) 56   8  
LD E,B 58   4  
LD E,C 59 4  
LD E,D 5A 4  
LD E,E 5B 4  
LD E,H 5C 4  
LD E,L 5D 4  
LD E,(HL) 5E   8  
LD H,B 60   4  
LD H,C 61   4  
LD HAUTE  DÉFINITION
62   4  
LD IL 63   4  
LD H,H 64   4  
LD H,L 65   4  
LD H,(HL) 66   8  
LD KG 68   4  
LD L,C 69 4  
LD L,D 6A 4  
LD L,E 6B 4  
LD L,H 6C 4  
LD LL 6D 4  
LD L,(HL) 6E   8  
LD (HL),B 70   8  
LD (HL),C 71   8  
LD (HL),D 72   8  
LD (HL),E 73   8  
LD (HL),H 74   8  
LD (HL),L 75   8  
LD (HL),n 36 12

par  DP Page  67
Machine Translated by Google

3.3.1.  Charges  8  bits Manuel  du  processeur  Game  Boy™

3.  LD  A,n
Description :  Mettez  
la  valeur  n  dans  A.

Utiliser  avec:
n  =  A,B,C,D,E,H,L,(BC),(DE),(HL),(nn),#  nn  =  valeur  immédiate  de  
deux  octets.  (L'octet  LS  en  premier.)

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
LD Un,  un 7F  4  78  4  79  4
LD UN  B
LD Un,C
LD PUBLICITÉ 7A  4
LD Un,E 7B  4
LD Un,  H 7C  4
LD AL 7D  4
LD ABC) 0A  8
LD A,(DE) 1A  8
LD A,(HL) 7E  8
LD A,(nn) FA  16
LD UN,# 3E  8

Page  68 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.1.  Charges  8  bits

4.  LD  n,A
Description :  Mettre  
la  valeur  A  dans  n.

Utiliser  avec:
n  =  A,B,C,D,E,H,L,(BC),(DE),(HL),(nn)  nn  =  valeur  immédiate  
de  deux  octets.  (L'octet  LS  en  premier.)

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
LD Un,  un 7F  4  47  4
LD B,A
LD CALIFORNIE 4F  4  57  4
LD D,A
LD E,A 5F  4  67  4
LD HA
LD LA 6F  4  02  8  12  8  77  8
LD (C.­B.),A
LD (BRIGADE  DES  STUPÉFIANTS

LD (HL),A  
LD (nn),A EA  16

par  DP Page  69
Machine Translated by Google

3.3.1.  Charges  8  bits Manuel  du  processeur  Game  Boy™

5.  LD  A,(C)
Description :  
Mettre  la  valeur  à  l'adresse  $FF00  +  registre  C  dans  A.
Identique  à :  LD  A,($FF00+C)

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
LD A,(C) F2  8

6.  LD  (C),A
Description :  
Mettez  A  dans  l'adresse  $FF00  +  registre  C.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
LD ($FF00+C),A E2  8

Page  70 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.1.  Charges  8  bits

7.  LD  A,(HLD)
Description :  Identique  à :  LDD  A,(HL)

8.  LD  A,(HL­)
Description :  Identique  à :  LDD  A,(HL)

9.  LDD  A,(HL)
Description :  
Mettre  la  valeur  à  l'adresse  HL  dans  A.  Décrémenter  HL.
Identique  à :  LD  A,(HL)  ­  DEC  HL

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
LD A,(DHN) 3A  8
LD A,(HL­) 3A  8
LDD A,(HL) 3A  8

par  DP Page  71
Machine Translated by Google

3.3.1.  Charges  8  bits Manuel  du  processeur  Game  Boy™

10.  LD  (HLD),A
Description :  Identique  à :  LDD  (HL),A

11.  LD  (HL­),A
Description :  Identique  à :  LDD  (HL),A

12.  LDD  (HL),A
Description :  
Mettez  A  dans  l'adresse  mémoire  HL.  Décrémenter  HL.
Identique  à :  LD  (HL),A  ­  DEC  HL

Opcodes :

Paramètres  d'instructions Cycles  de  code  opération  
LD (DHN),A 32  8  32  8  32  8
LD (HL­),A
LDD (HL),A

Page  72 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.1.  Charges  8  bits

13.  LD  A,(HLI)
Description :  Identique  à :  LDI  A,(HL)

14.  LD  A,(HL+)
Description :  Identique  à :  LDI  A,(HL)

15.  ILD  A,(HL)
Description :  
Mettre  la  valeur  à  l'adresse  HL  dans  A.  Incrémenter  HL.
Identique  à :  LD  A,(HL)  ­  INC  HL

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
LD A,(HLI) 2A  8
LD A,(HL+) 2A  8
LDI A,(HL) 2A  8

par  DP Page  73
Machine Translated by Google

3.3.1.  Charges  8  bits Manuel  du  processeur  Game  Boy™

16.  LD  (HLI),A
Description :  Identique  à :  LDI  (HL),A

17.  LD  (HL+),A
Description :  Identique  à :  LDI  (HL),A

18.  LDI  (HL),A
Description :  
Mettez  A  dans  l'adresse  mémoire  HL.  Incrémenter  HL.
Identique  à :  LD  (HL),A  ­  INC  HL

Opcodes :

Paramètres  d'instructions Cycles  de  code  opération  
LD (HLI),A 22  8  22  8  22  8
LD (HL+),A
LDI (HL),A

Page  74 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.1.  Charges  8  bits

19.  LDH  (n),A
Description :  
placez  A  dans  l'adresse  mémoire  $FF00+n.

À  utiliser  
avec :  n  =  valeur  immédiate  d'un  octet.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
LD ($FF00+n),A E0  12

20.  LDH  A,(n)
Description :  
Mettre  l'adresse  mémoire  $FF00+n  dans  A.

À  utiliser  
avec :  n  =  valeur  immédiate  d'un  octet.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
LD A,($FF00+n) F0  12

par  DP Page  75
Machine Translated by Google

3.3.2.  Charges  16  bits Manuel  du  processeur  Game  Boy™

3.3.2.  Charges  16  bits

1.  LD  n,  nn
Description :  
Mettre  la  valeur  nn  dans  n.

Utiliser  
avec :  n  =  
BC,DE,HL,SP  nn  =  valeur  immédiate  16  bits

Opcodes :

Paramètres  d'instructions Cycles  de  code  opération  
LD C.­B.,  nn 01  12  11  12  21  12  31  
LD DE,  nn 12
LD HL,nn
LD SP,  nn

2.  SP  LD,  HL
Description :  
placez  HL  dans  le  pointeur  de  pile  (SP).

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
LD PS,HL F9  8

Page  76 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.2.  Charges  16  bits

3.  LD  HL,SP+n
Description :  Identique  à :  LDHL  SP,n.

4.  SP  LDHL,n

Description:
Mettez  SP  +  n  adresse  effective  dans  HL.

Utiliser  avec:
n  =  valeur  immédiate  signée  d'un  octet.

Drapeaux  concernés :  
Z  ­  Reset.
N  ­  Réinitialiser.
H  ­  Réglage  ou  remise  à  zéro  selon  fonctionnement.
C  ­  Réglage  ou  remise  à  zéro  selon  fonctionnement.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
LDHL SP,n F8  12

par  DP Page  77
Machine Translated by Google

3.3.2.  Charges  16  bits Manuel  du  processeur  Game  Boy™

5.  LD  (nn),SP

Description :  Placez  
le  pointeur  de  pile  (SP)  à  l'adresse  n.

Utiliser  avec:
nn  =  adresse  immédiate  à  deux  octets.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes  08  20
LD (nn),SP

6.  APPUYER  nn

Description :  Poussez  
la  paire  de  registres  nn  sur  la  pile.
Décrémenter  le  pointeur  de  pile  (SP)  deux  fois.

Utiliser  avec:
nn  =  AF,  BC,  DE,  HL

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
POUSSER UN  F F5  16
POUSSER avant  JC C5  16
POUSSER DE D5  16
POUSSER HL E5  16

Page  78 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.2.  Charges  16  bits

7.  POP  nn
Description :  éjecter  
deux  octets  de  la  pile  dans  la  paire  de  registres  nn.
Incrémentez  le  pointeur  de  pile  (SP)  deux  fois.

Utiliser  avec:
nn  =  AF,  BC,  DE,  HL

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
POPULAIRE UN  F F1  12
POPULAIRE avant  JC C1  12
POPULAIRE DE D1  12
POPULAIRE HL E1  12

par  DP Page  79
Machine Translated by Google

3.3.3.  ALU  8  bits Manuel  du  processeur  Game  Boy™

3.3.3.  ALU  8  bits

1.  AJOUTER  A,n

Description :  Ajouter  n  
à  A.

Utiliser  avec:

n  =  A,B,C,D,E,H,L,(HL),#

Drapeaux  affectés :  Z  ­  Défini  
si  le  résultat  est  zéro.
N  ­  Réinitialiser.

H  ­  Activé  si  report  du  bit  3.
C  ­  Activé  si  report  du  bit  7.

Opcodes :

Paramètres  d'instructions Cycles  de  code  opération  
AJOUTER Un,  un 87  4  80  4  81  4  82  4  83  
AJOUTER UN  B 4  84  4  85  4  86  8
AJOUTER Un,C
AJOUTER PUBLICITÉ

AJOUTER Un,E
AJOUTER Un,  H
AJOUTER AL
AJOUTER A,(HL)
AJOUTER UN,# C6  8

Page  80 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.3.  ALU  8  bits

2.  CAN  A,n
Description :  
Ajoutez  n  +  Carry  flag  à  A.

Utiliser  avec :  
n  =  A,B,C,D,E,H,L,(HL),#

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H  ­  Activé  si  report  du  bit  3.
C  ­  Activé  si  report  du  bit  7.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
ADC Un,  un 8F  4  88  4  89  4
ADC UN  B
ADC Un,C
ADC PUBLICITÉ 8A  4
ADC Un,E 8B  4
ADC Un,  H 8C  4
ADC AL 8D  4
ADC A,(HL) 8E  8
ADC UN,# CE  8

par  DP Page  81
Machine Translated by Google

3.3.3.  ALU  8  bits Manuel  du  processeur  Game  Boy™

3.  SOUS  n

Description :  
Soustraire  n  de  A.

Utiliser  avec:
n  =  A,B,C,D,E,H,L,(HL),#

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Ensemble.
H  ­  Défini  si  aucun  emprunt  du  bit  4.
C  ­  Définir  si  aucun  emprunt.

Opcodes :

Paramètres  d'instructions Cycles  de  code  opération  
SOUS UN 97  4  90  4  91  4  92  4  
SOUS B 93  4  94  4  95  4  96  8
SOUS C
SOUS D
SOUS E
SOUS H
SOUS L
SOUS (HL)  #
SOUS D6  8

Page  82 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.3.  ALU  8  bits

4.  CCS  A,n
Description :  
Soustraire  n  +  Carry  flag  de  A.

Utiliser  avec:
n  =  A,B,C,D,E,H,L,(HL),#

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Ensemble.
H  ­  Défini  si  aucun  emprunt  du  bit  4.
C  ­  Définir  si  aucun  emprunt.

Opcodes :

Paramètres  d'instructions Cycles  de  code  opération  
CCS Un,  un 9F  4  98  4  99  4  9A  4  
CCS UN  B 9B  4  9C  4  9D  4  9E  
CCS Un,C 8 ?? ?
CCS PUBLICITÉ

CCS Un,E
CCS Un,  H
CCS AL
CCS A,(HL)
CCS UN,#

par  DP Page  83
Machine Translated by Google

3.3.3.  ALU  8  bits Manuel  du  processeur  Game  Boy™

5.  ET  n
Description :  ET  
logiquement  n  avec  A,  donne  A.

Utiliser  avec:
n  =  A,B,C,D,E,H,L,(HL),#

Drapeaux  affectés :  Z  
­  Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Ensemble.
C  ­  Réinitialiser.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
ET UN A7  4
ET B A0  4
ET C A1  4
ET D A2  4
ET E A3  4
ET H A4  4
ET L A5  4
ET (HL)   A6  8
ET # E6  8

Page  84 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.3.  ALU  8  bits

6.  OU  n
Description :  OU  
logique  n  avec  le  registre  A,  résultat  A.

Utiliser  avec:
n  =  A,B,C,D,E,H,L,(HL),#

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Réinitialiser.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
OU UN B7  4
OU B B0  4
OU C B1  4
OU D B2  4
OU E B3  4
OU H B4  4
OU L B5  4
OU (HL)   B6  8
OU # F6  8

par  DP Page  85
Machine Translated by Google

3.3.3.  ALU  8  bits Manuel  du  processeur  Game  Boy™

7.  OU  exclusif  n

Description :  OU  
exclusif  logique  n  avec  le  registre  A,  résultat  en  A.

Utiliser  avec:
n  =  A,B,C,D,E,H,L,(HL),#

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Réinitialiser.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
XOR UN AF  4
XOR B A8  4
XOR C A9  4
XOR D AA  4
XOR E AB  4
XOR H CA  4
XOR L AD  4
XOR (HL) EA  8
XOR * EE  8

Page  86 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.3.  ALU  8  bits

8.  CP  n
Description :  
Comparez  A  avec  n.  Il  s'agit  essentiellement  d'une  instruction  de  
soustraction  A  ­  n  mais  les  résultats  sont  jetés
loin.

Utiliser  avec:
n  =  A,B,C,D,E,H,L,(HL),#

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.  (Défini  si  A  =  n.)
N  ­  Ensemble.
H  ­  Défini  si  aucun  emprunt  du  bit  4.
C  ­  Set  pour  aucun  emprunt.  (Définir  si  A  <  n.)

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
CP UN BF  4
CP B B8  4
CP C B9  4
CP D BA  4
CP E BB  4
CP H BC  4
CP L BD  4
CP (HL)   ÊTRE  8

CP # FE  8

par  DP Page  87
Machine Translated by Google

3.3.3.  ALU  8  bits Manuel  du  processeur  Game  Boy™

9.  INC  n
Description :  
Registre  d'incrémentation  n.

Utiliser  
avec :  n  =  A,B,C,D,E,H,L,(HL)

Drapeaux  affectés :  
Z  ­  Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H  ­  Activé  si  report  du  bit  3.
C  ­  Non  affecté.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
Inc UN 3C  4  04  4
Inc B
Inc C 0C  4  14  4
Inc D
Inc E 1C  4  24  4
Inc H
Inc L 2C  4  34  12
Inc (HL)

Page  88 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.3.  ALU  8  bits

10.  DEC  n
Description :  
Décrémenter  le  registre  n.

Utiliser  avec :  
n  =  A,B,C,D,E,H,L,(HL)

Drapeaux  affectés :  Z  ­  
Défini  si  reselt  est  égal  à  zéro.
N  ­  Ensemble.
H  ­  Défini  si  aucun  emprunt  du  bit  4.
C  ­  Non  affecté.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
DÉC UN 3D  4  05  4
DÉC B
DÉC C 0D  4  15  4
DÉC D
DÉC E 1D  4  25  4
DÉC H
DÉC L 2D  4  35  12
DÉC (HL)

par  DP Page  89
Machine Translated by Google

3.3.4.  Arithmétique  16  bits Manuel  du  processeur  Game  Boy™

3.3.4.  Arithmétique  16  bits

1.  AJOUTER  HL,n

Description :  Ajouter  
n  à  HL.

Utiliser  avec :  
n  =  BC,DE,HL,SP

Drapeaux  affectés :  Z  ­  
Non  affecté.
N  ­  Réinitialiser.
H  ­  Activé  si  report  du  bit  11.
C  ­  Activé  si  report  du  bit  15.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes  09  8  
AJOUTER HL,  C.­B. 19  8  29  8  39  8
AJOUTER HL,  DE
AJOUTER HL,  HL
AJOUTER HL,SP

Page  90 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.4.  Arithmétique  16  bits

2.  AJOUTER  SP,n

Description :  
Ajouter  n  au  pointeur  de  pile  (SP).

Utiliser  avec:
n  =  valeur  immédiate  signée  d'un  octet  (#).

Drapeaux  concernés :  
Z  ­  Reset.
N  ­  Réinitialiser.
H  ­  Réglage  ou  remise  à  zéro  selon  fonctionnement.
C  ­  Réglage  ou  remise  à  zéro  selon  fonctionnement.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
AJOUTER PS,# E8  16

par  DP Page  91
Machine Translated by Google

3.3.4.  Arithmétique  16  bits Manuel  du  processeur  Game  Boy™

3.  INC  nn
Description :  
Incrémenter  le  registre  nn.

Utiliser  avec:
nn  =  BC,  DE,  HL,  SP

Drapeaux  concernés :  
aucun.

Opcodes :

Paramètres  d'instructions Cycles  de  code  opération  
Inc avant  JC 03  8  13  8  23  8  33  8
Inc DE
Inc HL
Inc PS

Page  92 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.4.  Arithmétique  16  bits

4.  DEC  nn
Description :  
Décrémenter  le  registre  nn.

Utiliser  avec:
nn  =  BC,  DE,  HL,  SP

Drapeaux  concernés :  
aucun.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
DÉC avant  JC 0B  8
DÉC DE 1B  8
DÉC HL 2B  8
DÉC PS 3B  8

par  DP Page  93
Machine Translated by Google

3.3.5.  Divers Manuel  du  processeur  Game  Boy™

3.3.5.  Divers

1.  SWAP  n
Description :  
Échangez  les  nibles  supérieurs  et  inférieurs  de  n.

Utiliser  avec :  
n  =  A,B,C,D,E,H,L,(HL)

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Réinitialiser.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
ÉCHANGER UN CB  37  8
ÉCHANGER B CB  30  8
ÉCHANGER C CB  31  8
ÉCHANGER D CB  32  8
ÉCHANGER E CB  33  8
ÉCHANGER H CB  34  8
ÉCHANGER L CB  35  8
ÉCHANGER (HL) CB  36  16

Page  94 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.5.  Divers

2.  DAA
Description :  
Registre  de  réglage  décimal  A.
Cette  instruction  ajuste  le  registre  A  de  sorte  que  la  représentation  
correcte  du  décimal  codé  binaire  (BCD)  soit  obtenue.

Indicateurs  
concernés :  Z  ­  Activé  si  le  registre  A  est  à  zéro.
N  ­  Non  affecté.
H­Réinitialiser.
C  ­  Réglage  ou  remise  à  zéro  selon  fonctionnement.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes  
DAA ­/­ 27  4

3.  CPL
Description :  
Compléter  un  registre.  (Retournez  tous  les  bits.)

Drapeaux  affectés :  
Z  ­  Non  affecté.
N  ­  Ensemble.
H­Ensemble.
C  ­  Non  affecté.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
PCL ­/­ 2F  4

par  DP Page  95
Machine Translated by Google

3.3.5.  Divers Manuel  du  processeur  Game  Boy™

4.  CCF
Description :  
Complément  porte­drapeau.
Si  le  drapeau  C  est  défini,  réinitialisez­le.
Si  le  drapeau  C  est  réinitialisé,  réglez­le.

Drapeaux  concernés :
Z  ­  Non  affecté.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Complétée.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
FCC ­/­ 3F  4

5.  FCS
Description :  Set  
Carry  flag.

Drapeaux  concernés :
Z  ­  Non  affecté.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Ensemble.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes  37  
FCS ­/­ 4

Page  96 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.5.  Divers

6.  NON

Description :  
Aucune  opération.

Opcodes :

Paramètres  d'instructions Cycles  de  code  opération  
NON ­/­ 00  4

7.  ARRÊT

Description :  
éteignez  la  CPU  jusqu'à  ce  qu'une  interruption  se  produise.  Utilisez­le  chaque  
fois  que  possible  pour  réduire  la  consommation  d'énergie.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes  76  
ARRÊT ­/­ 4

8.  ARRÊTER

Description :  
arrête  l'affichage  CPU  et  LCD  jusqu'à  ce  que  le  bouton  soit  enfoncé.

Opcodes :

Paramètres  d'instructions Cycles  de  code  
ARRÊT ­/­ opération  10  00  4

par  DP Page  97
Machine Translated by Google

3.3.5.  Divers Manuel  du  processeur  Game  Boy™

9.  DI
Description :  
cette  instruction  désactive  les  interruptions,  mais  pas  immédiatement.  
Les  interruptions  sont  désactivées  après  l'exécution  de  
l'instruction  après  DI.

Drapeaux  concernés :  
aucun.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
DI ­/­ F3  4

10.  AE
Description :  
Activer  les  interruptions.  Cette  instruction  active  les  interruptions  mais  pas  
immédiatement.  Les  interruptions  sont  activées  après  l'exécution  de  
l'instruction  après  EI.

Drapeaux  concernés :  
aucun.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
IE ­/­ FB  4

Page  98 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.6.  Rotation  et  décalages

3.3.6.  Rotation  et  décalages

1.  RLCA
Description :  
Rotation  A  vers  la  gauche.  Ancien  bit  7  pour  porter  le  drapeau.

Drapeaux  affectés :  Z  
­  Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Contient  les  anciennes  données  du  bit  7.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes  07  
RLCA ­/­ 4

2.  RLA
Description :  
Tourner  A  à  gauche  en  portant  le  drapeau.

Drapeaux  affectés :  Z  
­  Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Contient  les  anciennes  données  du  bit  7.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes  17  
RLA ­/­ 4

par  DP Page  99
Machine Translated by Google

3.3.6.  Rotation  et  décalages Manuel  du  processeur  Game  Boy™

3.  CRR
Description :  Faites  
pivoter  A  vers  la  droite.  Ancien  bit  0  pour  Porter  le  drapeau.

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Contient  les  anciennes  données  du  bit  0.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
RRCA ­/­ 0F  4

4.  RRA
Description :  Faites  
pivoter  A  jusqu'au  bout  Portez  le  drapeau.

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Contient  les  anciennes  données  du  bit  0.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
RRA ­/­ 1F  4

Page  100 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.6.  Rotation  et  décalages

5.  RLC  n
Description :  
Rotation  n  vers  la  gauche.  Ancien  bit  7  pour  porter  le  drapeau.

Utiliser  avec :  
n  =  A,B,C,D,E,H,L,(HL)

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Contient  les  anciennes  données  du  bit  7.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
RLC UN CB  07  8
RLC B CB  00  8
RLC C CB  01  8
RLC D CB  02  8
RLC E CB  03  8
RLC H CB  04  8
RLC L CB  05  8
RLC (HL) CB  06  16

par  DP Page  101
Machine Translated by Google

3.3.6.  Rotation  et  décalages Manuel  du  processeur  Game  Boy™

6.  RL  n
Description :  
Rotation  n  vers  la  gauche  via  Porter  le  drapeau.

Utiliser  avec :  
n  =  A,B,C,D,E,H,L,(HL)

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Contient  les  anciennes  données  du  bit  7.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
RL UN CB  17  8
RL B CB  10  8
RL C CB  11  8
RL D CB  12  8
RL E CB  13  8
RL H CB  14  8
RL L CB  15  8
RL (HL) CB  16  16

Page  102 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.6.  Rotation  et  décalages

7.  CRR  n
Description :  
Rotation  vers  la  droite.  Ancien  bit  0  pour  Porter  le  drapeau.

Utiliser  avec :  
n  =  A,B,C,D,E,H,L,(HL)

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Contient  les  anciennes  données  du  bit  0.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
CRR UN CB  0F  8
CRR B CB  08  8
CRR C CB  09  8
CRR D Disjoncteur  0A  8

CRR E CB  0B  8
CRR H CB  0C  8
CRR L CB  0D  8
CRR (HL) CB  0E  16

par  DP Page  103
Machine Translated by Google

3.3.6.  Rotation  et  décalages Manuel  du  processeur  Game  Boy™

8.  RR  n
Description :  Faites  
pivoter  n  vers  la  droite  Portez  le  drapeau.

Utiliser  avec :  
n  =  A,B,C,D,E,H,L,(HL)

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Contient  les  anciennes  données  du  bit  0.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
RR UN CB  1F  8
RR B CB  18  8
RR C CB  19  8
RR D Disjoncteur  1A  8

RR E CB  1B  8
RR H CB  1C  8
RR L CB  1D  8
RR (HL) CB  1E  16

Page  104 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.6.  Rotation  et  décalages

9.  SLA  n
Description :  Maj n  
vers  la  gauche  dans  Carry.  LSB  de  n  mis  à  0.

Utiliser  avec :  
n  =  A,B,C,D,E,H,L,(HL)

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Contient  les  anciennes  données  du  bit  7.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
SLA UN CB  27  8
SLA B CB  20  8
SLA C CB  21  8
SLA D CB  22  8
SLA E CB  23  8
SLA H CB  24  8
SLA L CB  25  8
SLA (HL) CB  26  16

par  DP Page  105
Machine Translated by Google

3.3.6.  Rotation  et  décalages Manuel  du  processeur  Game  Boy™

10.  SRA  n
Description :  Shift  
n  à  droite  dans  Carry.  MSB  ne  change  pas.

Utiliser  avec :  
n  =  A,B,C,D,E,H,L,(HL)

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Contient  les  anciennes  données  du  bit  0.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
SRA UN CB  2F 8  
SRA B CB  28 8  
SRA C CB  29 8  
SRA D CB  2A 8  
SRA E CB  2B 8  
SRA H CB  2C 8  
SRA L CB  2D 8  
SRA (HL) CB  2E 16

Page  106 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.6.  Rotation  et  décalages

11.  SRL  n
Description :  Shift  
n  à  droite  dans  Carry.  MSB  mis  à  0.

Utiliser  avec :  
n  =  A,B,C,D,E,H,L,(HL)

Drapeaux  affectés :  Z  ­  
Défini  si  le  résultat  est  zéro.
N  ­  Réinitialiser.
H­Réinitialiser.
C  ­  Contient  les  anciennes  données  du  bit  0.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
SRL UN CB  3F  8
SRL B CB  38  8
SRL C CB  39  8
SRL D CB  3A  8
SRL E CB  3B  8
SRL H CB  3C  8
SRL L CB  3D  8
SRL (HL) CB  3E  16

par  DP Page  107
Machine Translated by Google

3.3.7.  Opcodes  binaires Manuel  du  processeur  Game  Boy™

3.3.7.  Opcodes  binaires

1.  TBI  b,r

Description :  
test  du  bit  b  dans  le  registre  r.

Utiliser  
avec :  b  =  0  ­  7,  r  =  A,B,C,D,E,H,L,(HL)

Drapeaux  
concernés :  Z  ­  Activé  si  le  bit  b  du  registre  r  est  à  0.
N  ­  Réinitialiser.
H­Ensemble.
C  ­  Non  affecté.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
BIT b,A   CB  47  8
BIT b,B   CB  40  8
BIT b,C   CB  41  8
BIT b,D   CB  42  8
BIT b,E   CB  43  8
BIT b,H   CB  44  8
BIT b,L   CB  45  8
BIT b,(HL) CB  46  16

Page  108 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.7.  Opcodes  binaires

2.  RÉGLER  b,r

Description :  Définir  
le  bit  b  dans  le  registre  r.

Utiliser  avec:
b  =  0  ­  7,  r  =  A,B,C,D,E,H,L,(HL)

Drapeaux  concernés :  
aucun.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
ENSEMBLE b,A   CB  C7  8
ENSEMBLE b,B   CB  C0  8
ENSEMBLE b,C   DJ  C1  8
ENSEMBLE b,D   CB  C2  8
ENSEMBLE b,E   CB  C3  8
ENSEMBLE b,H   CB  C4  8
ENSEMBLE b,L  b, CB  C5  8
ENSEMBLE (HL) CB  C6  16

par  DP Page  109
Machine Translated by Google

3.3.7.  Opcodes  binaires Manuel  du  processeur  Game  Boy™

3.  SER  b,r
Description :  
Réinitialise  le  bit  b  dans  le  registre  r.

Utiliser  avec:
b  =  0  ­  7,  r  =  A,B,C,D,E,H,L,(HL)

Drapeaux  concernés :  
aucun.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
RES b,A   CB  87  8
RES b,B   CB  80  8
RES b,C   CB  81  8
RES b,D   CB  82  8
RES b,E   CB  83  8
RES b,H   CB  84  8
RES b,L   CB  85  8
RES b,(HL) CB  86  16

Page  110 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.8.  sauts

3.3.8.  sauts
1.  JP  nn
Description :  
Sauter  à  l'adresse  nn.

Utiliser  avec:
nn  =  valeur  immédiate  de  deux  octets.  (L'octet  LS  en  premier.)

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
JP nn C3  12

2.  JP  cc,  nn
Description :  
Sauter  à  l'adresse  n  si  la  condition  suivante  est  vraie :  cc  =  NZ,  Sauter  si  le  
drapeau  Z  est  réinitialisé.  cc  =  Z,  sauter  si  le  
drapeau  Z  est  défini.  cc  =  NC,  sauter  si  le  
drapeau  C  est  réinitialisé.  cc  =  C,  sauter  si  le  
drapeau  C  est  défini.

Utiliser  avec:
nn  =  valeur  immédiate  de  deux  octets.  (L'octet  LS  en  premier.)

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
JP Nouvelle­Zélande,  nn C2  12
JP Z,nn CA  12
JP NC,nn D2  12
JP C,nn AD  12

par  DP Page  111
Machine Translated by Google

3.3.8.  sauts Manuel  du  processeur  Game  Boy™

3.  JP  (HL)
Description :  
Aller  à  l'adresse  contenue  dans  HL.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
JP (HL) E9  4

4.  JR  n
Description :  
Ajoutez  n  à  l'adresse  actuelle  et  sautez­y.

Utiliser  avec:
n  =  valeur  immédiate  signée  d'un  octet

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes  18  
JR n 8

Page  112 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.8.  sauts

5.  JR  cc,n
Description:
Si  la  condition  suivante  est  vraie,  ajoutez  n  à  l'adresse  actuelle  et  sautez  
dessus :

Utiliser  avec:
n  =  valeur  immédiate  signée  d'un  octet  cc  =  NZ,  
sauter  si  le  drapeau  Z  est  réinitialisé.  cc  =  Z,  
sauter  si  le  drapeau  Z  est  défini.  cc  =  NC,  
sauter  si  le  drapeau  C  est  réinitialisé.  cc  =  C,  
sauter  si  le  drapeau  C  est  défini.

Opcodes :

Paramètres  d'instructions Cycles  de  code  opération  
JR Nouvelle­Zélande,* 20  8  28  8  30  8  38  8
JR Z,*
JR NC,*
JR C,*

par  DP Page  113
Machine Translated by Google

3.3.9.  Appels Manuel  du  processeur  Game  Boy™

3.3.9.  Appels

1.  APPELER  nn

Description :  
Pousser  l'adresse  de  l'instruction  suivante  sur  la  pile  puis  sauter  à  l'adresse  nn.

Utiliser  avec:
nn  =  valeur  immédiate  de  deux  octets.  (L'octet  LS  en  premier.)

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
APPEL nn CD  12

Page  114 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.9.  Appels

2.  APPELER  cc,nn

Description :  Appeler  
l'adresse  n  si  la  condition  suivante  est  vraie :  cc  =  NZ,  Appeler  si  le  drapeau  Z  est  
réinitialisé.  cc  =  Z,  appel  si  le  drapeau  Z  est  défini.  cc  =  NC,  
appel  si  le  drapeau  C  est  réinitialisé.  cc  =  C,  appel  si  
l'indicateur  C  est  défini.

Utiliser  avec:
nn  =  valeur  immédiate  de  deux  octets.  (L'octet  LS  en  premier.)

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
APPEL Nouvelle­Zélande,  nn C4  12
APPEL Z,nn CC  12
APPEL NC,nn D4  12
APPEL C,nn DD  12

par  DP Page  115
Machine Translated by Google

3.3.10.  Redémarre Manuel  du  processeur  Game  Boy™

3.3.10.  Redémarre

1.  TVD  n
Description :  
Pousser  l'adresse  actuelle  sur  la  pile.
Aller  à  l'adresse  $0000  +  n.

Utiliser  avec:
n  =  00 $,  08 $,  10 $,  18 $,  20 $,  28 $,  30 $,  38 $

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
TVD 00H C7  32
TVD 08H FC  32
TVD 10H D7  32
TVD 18H DF  32
TVD 20H E7  32
TVD 28H EF  32
TVD 30H F7  32
TVD 38H FF  32

Page  116 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 3.3.11.  Retour

3.3.11.  Retour

1.  RET
Description :  
extraire  deux  octets  de  la  pile  et  accéder  à  cette  adresse.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
RET ­/­ C9  8

2.  RET  cc
Description:
Renvoie  si  la  condition  suivante  est  vraie :

Utiliser  avec:
cc  =  NZ,  retour  si  le  drapeau  Z  est  réinitialisé.  cc  =  Z,  
Retourne  si  le  drapeau  Z  est  défini.  cc  =  NC,  retour  
si  le  drapeau  C  est  réinitialisé.  cc  =  C,  Retourne  si  
l'indicateur  C  est  défini.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
RET Nouvelle­Zélande C0  8
RET Z C8  8
RET NC J0  8
RET C D8  8

par  DP Page  117
Machine Translated by Google

3.3.11.  Retour Manuel  du  processeur  Game  Boy™

3.  RETI
Description :  
Popez  deux  octets  de  la  pile  et  accédez  à  cette  adresse,  puis  activez  les  
interruptions.

Opcodes :

Paramètres  d'instructions Cycles  d'opcodes
RETI ­/­ D9  8

Page  118 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 4.  Commandes  Super  Game  Boy

4.  Commandes  Super  Game  Boy
4.1.  Avant­propos
Commandes  Super  GameBoy,  extraites  par  kOOPa,  15  février  1998
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  ­­­

Dernière  mise  à  jour  par :  Bowser,  13  juin  1998

Mises  à  jour:
Codes  de  contrôle  du  mode  Zone  de  blocage  ($04)  mis  à  jour
Mode  ligne  ($05)  écrit
Mode  de  division  ($06)  écrit
Mode  1CHR  ($07)  écrit

Un  transfert  de  commande  SGB  est  de  128  bits  +  un  bit  zéro.  Les  cinq  premiers  bits  du  
premier  octet  constituent  l'octet  de  commande.
Les  3  derniers  bits  du  premier  octet  représentent  le  nombre  de  paquets  de  128  bits  à  
envoyer.  Les  bits  inutilisés  dans  un  transfert  de  commande  SGB  doivent  être  définis  sur  
0.
La  plupart  des  commandes  répertoriées  ci­dessous  ne  transfèrent  qu'un  seul  package.  
Les  octets  de  commande  ci­dessous  sont  précédés  du  caractère  #  pour  vous  rappeler  qu'ils  
doivent  être  décalés  trois  fois  vers  la  gauche  avant  d'être  utilisés.

4.2.  Palettes
Il  existe  plusieurs  types  de  palettes  dans  le  SGB.  Un  type  est  la  palette  de  couleurs  
système.  C'est  une  palette  virtuelle  plutôt  qu'une  palette  matérielle.  La  palette  de  
couleurs  matérielles  est  affichée  au  bas  de  ce  document  et  contient  ce  qu'on  appelle  
les  palettes  de  couleurs  SGB  ainsi  que  la  palette  de  bordure  SGB.

En  ce  qui  concerne  les  couleurs  à  l'écran  SGB,  il  y  a
vraiment  deux  types  de  palettes :  les  palettes  de  couleurs  SGB  et

par  DP Page  119
Machine Translated by Google

4.2.  Palettes Manuel  du  processeur  Game  Boy™

la  palette  de  bordure  SGB.
La  palette  de  bordure  SGB  est  configurée  à  l'aide  de  la  commande  $14.
Il  y  a  64  couleurs  dans  cette  palette.

Les  palettes  de  couleurs  SGB  peuvent  être  définies  directement  à  l'aide  
des  commandes  $00­$03.  Il  y  a  un  total  de  quatre  de  ces  palettes  et  
elles  déterminent  quelles  couleurs  sont  utilisées  dans  la  fenêtre  d'action  
principale  du  jeu.  La  couleur  du  bit  00  sera  la  même  pour  toutes  les  palettes  
de  couleurs  SGB.
La  couleur  la  plus  récemment  stockée  dans  le  bit  00  sera  utilisée.

Les  palettes  de  couleurs  SGB  peuvent  être  définies  indirectement  à  l'aide  
des  palettes  de  couleurs  système  à  l'aide  des  commandes  $0a­$0b.
Il  y  a  un  total  de  512  de  ces  palettes.

4.3.  Frontière  SGB
La  bordure  SGB  est  souvent  affichée  sous  forme  de  graphiques  colorés  qui  
entourent  la  fenêtre  d'action  principale  du  jeu.  La  vérité  est  que  la  bordure  SGB  
couvre  en  fait  tout  l'écran  de  visualisation  et  a  la  priorité  de  visualisation  la  plus  
élevée.  La  raison  pour  laquelle  il  semble  n'être  qu'une  "bordure"  autour  de  la  plupart  
des  jeux  est  due  au  fait  qu'une  boîte  de  160x144  pixels  de  large  est  généralement  
dessinée  au  centre  de  la  "bordure"  SGB  en  utilisant  la  couleur  0.

Étant  donné  que  cette  couleur  est  transparente,  la  fenêtre  d'action  principale  du  
jeu  en  dessous  est  visible.

La  création  d'un  programme  pour  convertir  un  GIF  16  couleurs  en  bordure  SGB  
est  relativement  simple  et  a  été  réalisée  pour  DOS.  (iegif2sopt.exe)  Ce  qui  
n'est  pas  si  facile,  c'est  de  convertir  un  GIF  64  couleurs  en  bordure  SGB  car  
chaque  tuile  n'a  accès  qu'à  16  couleurs.  La  palette  de  16  couleurs  à  laquelle  la  
vignette  a  accès  est  déterminée  par  l'octet  d'attribut  de  vignette.

L'octet  d'attribut  de  tuile  est  décrit  dans  la  commande  'Transfert  d'image' ($14)  
ci­dessous.

Page  120 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 4.4.  Fenêtre  d'action  principale

4.4.  Fenêtre  d'action  principale
La  cartouche  SGB  qui  se  branche  sur  la  SNES  contient  un  processeur  GB.  
Le  SNES  est  capable  de  capturer  la  sortie  vidéo  de  ce  processeur  GB  et  de  
l'afficher  à  l'écran  en  tant  que  fenêtre  d'action  principale  du  jeu.  Étant  donné  
que  le  SNES  ne  fait  qu'une  capture  vidéo  brute,  il  ne  connaît  qu'environ  4  
niveaux  de  gris  provenant  du  processeur  GB.  Afin  d'ajouter  plus  de  4  couleurs  à  
la  fenêtre  d'action  principale  du  jeu,  le  logiciel  SGB  vous  permet  d'attribuer  1  
des  4  palettes  de  couleurs  SGB  pour  chaque  position  de  tuile  8x8  dans  cette  
fenêtre.

"Bloc"($4),  "Ligne"($5),  "Divide"($6),  "1Chr"($7)  et  "Set  Attr  from  ATF"($15)  
sont  tous  des  moyens  différents  pour  définir  les  palettes  pour  chaque  tuile  8x8  
emplacement.
Lors  de  la  réinitialisation,  chaque  position  de  mosaïque  8x8  est  définie  par  défaut  sur  
la  palette  de  couleurs  SGB  0.

Les  commandes  $4­$7  sont  diverses  méthodes  pour  paramétrer  en  bloc  les  
palettes  de  couleurs  des  tuiles  8x8.  Le  "Set  Attr  from  ATF" (15  $)  vous  permet  
de  sélectionner  1  des  45  "fichiers  ATtribute".
Chaque  "fichier  ATtribute"  contient  90  octets  (20x18x2  bits).
En  sélectionnant  un  "fichier  ATtribute",  vous  pouvez  sélectionner  
exactement  1  des  4  palettes  de  couleurs  SGB  pour  chaque  emplacement  
de  tuile  8x8  car  ces  fichiers  contiennent  2  bits  d'informations  pour  chaque  
emplacement  de  tuile  8x8.

par  DP Page  121
Machine Translated by Google

4.5.  Commandes Manuel  du  processeur  Game  Boy™

4.5.  Commandes
1.  Définir  les  palettes  de  couleurs  SGB

0  &  1  (00  $,  données)  ­  Télécharger  les  palettes  de  couleurs  0  &  
1  2  &  3  (01  $,  données)  ­  Télécharger  les  palettes  de  couleurs  2  
&  3  0  &  3  (02  $,  données)  ­  Télécharger  les  palettes  de  couleurs  
0  &  3  1  &  2  (03  $) ,data)  ­  Télécharger  les  palettes  de  couleurs  1  &  2
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Voici  des  exemples  de  données  pour  définir  les  palettes  de  
couleurs  SGB  0  et  1 :

DW  $7fff ;blanc ;bit  00  couleur

;Palette  0
DW  $7c00 ;bit  01  couleur ;bit  
DW  $03e0 10  couleur ;bit  11  
DW 0000 $ ;bleu ;vert ;noir couleur

;Palette  1
DW  $03ff ;bit  01  couleur ;bit  
DW  $001f 10  couleur ;bit  11  
DW 0000 $ ;jaune ;rouge ;noircouleur

Veuillez  noter  que  les  quatre  palettes  de  couleurs  SGB  partagent  la  même  
couleur  bit  00.  La  couleur  la  plus  récemment  stockée  dans  le  bit  00  sera  
utilisée.
Les  informations  pour  le  calcul  de  la  valeur  de  couleur  DW  sont  
données  plus  loin  dans  ce  texte.
Lors  de  l'utilisation  des  quatre  commandes  Palette  Direct  Set  suivantes,  
l'image  GameBoy  sera  modifiée  (couleurs  modifiées)  même  si  vous  avez  
utilisé  la  commande  GameBoy  Window  Mask  pour  figer  l'écran.  Utilisez  
donc  des  arguments

Page  122 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 4.5.  Commandes

noir  ou  blanc  avec  la  commande  Window  Mask  avant  d'utiliser  les  quatre  
commandes  suivantes.  Si  vous  souhaitez  figer  l'écran,  envoyez  les  données  de  
la  palette  avec  le  fichier  d'attributs  ATF0­ATF44.  Si  vous  modifiez  l'écran  en  envoyant  des  
données  d'attribut  et  des  données  de  couleur  en  même  temps,  utilisez  la  commande  
Set  SGB  Palette  Indirect.

2.  Mode  de  désignation  de  zone  "bloc" (04  $)
(autres  données  présentées  ci­dessous)

$00  ­  %00100xxx  xxx  =  
nombre  de  paquets

$01  ­  %///xxxxx
xxxxx  =  #  d'ensembles  de  données  ­  Un  ensemble  de  données  est  le  code  de  
contrôle,  la  désignation  de  la  palette  de  couleurs  et  les  coordonnées.

$02  ­  %/////xxx  xxx  =  
Code  de  contrôle
000  =  ne  s'en  soucie  pas
001  =  set  pal  (à  l'intérieur  du  bloc  +  environnant
ligne  de  bloc)  à  'zz'  de  $03  010  =  définir  le  
pal  de  la  ligne  de  bloc  environnante  sur  'yy'  de  $03  011  =  définir  le  pal  
à  l'intérieur  du  
bloc  sur  'yy'  et  la  ligne  de  bloc  environnante  sur  'yy'  100  =  
définir  le  pal  à  l'extérieur  du  bloc  sur  '  xx'  101  =  
définir  pal  à  l'intérieur  de  'zz'  et  à  l'extérieur  du

bloc  à  'xx'  110  =  
définir  pal  à  l'extérieur  du  bloc  à  'xx'  111  =  définir  pal  à  l'intérieur  
du  bloc  tp  'zz'  +  ligne  environnante  à  'yy'  +  à  l'extérieur  du  
bloc
à  'xx'

par  DP Page  123
Machine Translated by Google

4.5.  Commandes Manuel  du  processeur  Game  Boy™

$03  ­  %//xxyyzz
Désignation  de  la  palette  de  couleurs  
xx  =  palette  de  couleurs  à  l'extérieur  de  la  zone  entourée  yy  =  
palette  de  couleurs  sur  la  ligne  de  bloc  environnante  zz  =  palette  de  
couleurs  à  l'intérieur  de  la  zone  entourée

$04  ­  %///xxxxx  xxxxx  =  point  de  départ  H  $05  ­  %///xxxxx  
xxxxx  =  point  de  départ  V  $06  ­  %///xxxxx  xxxxx  =  point  final  
H  $07  ­  %///xxxxx  xxxxx  =  point  final  V

$08­$0d  Répétition  des  données  $02­$07  si  nombre  d'ensembles  de  données  >  1.
Si  le  nombre  de  paquets  est  1,  définissez  $0e  &  $0f  sur  $00.

3.  Mode  de  désignation  de  zone  "Ligne" (05  $)
$00  ­  %00101xxx
xxx  =  #  paquets

$01  ­  %xxxxxxxx
nombre  d'ensembles  de  données  ($1  ­  $6E),  un  ensemble  de  
données  contrôle :  code,  désignation  de  la  palette  de  couleurs  et  
coordonnées.

$02  ­  %xyyzzzzz  code  
de  contrôle  1er  ensemble  de  données
X =  Mode  (0  =  Ligne  horizontale,  1  =  Ligne  verticale)  yy  =  Numéro  de  
palette  zzzzz  =  Numéro  de  ligne

Un  jeu  de  données  est  de  1  octet  tout  comme  $02.  Si  #  ensembles  de  données  =  1,  
remplissez  avec  des  0  jusqu'à  $0F.

Page  124 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 4.5.  Commandes

4.  Mode  de  désignation  de  zone  "Diviser" (06  $)
$00  ­  %00101001
(le  nombre  de  paquets  doit  être  1)

$01  ­  %/vxxyyzz  code  
de  contrôle
v =  Mode  (0  =  diviser  horizontalement,
1  =  Diviser  verticalement)
xx =  Palette  de  couleurs  sur  la  ligne  de  division
aa =  Palette  de  couleurs  AU­DESSUS  ET  À  GAUCHE  de  la  
zz division  =  Palette  de  couleurs  AU­DESSUS  ET  À  DROITE  de  la  division

$02  ­  %///xxxxx  xxxxx  =  
Numéro  de  la  ligne  de  caractères  à  diviser  au  remplissage  avec
0  à  0 $ F

5.  Mode  de  désignation  de  zone  "1CHR" (07  $)
$00  ­  %00111xxx
xxx  =  nombre  de  paquets  ($01  ­  $06)

$01  ­  %///xxxxx
Coordonnée  X  de  début

$02  ­ %///aaaaa
Coordonnée  Y  de  début

$03  ­  %xxxxxxxx
Nombre  de  jeux  de  données,  2  bits  =  1  jeu  de  données

$04  ­  %///////x
MSB  de  données  dans  $03.  Nombre  maximal  =  360.

05  $  ­  %///////x

par  DP Page  125
Machine Translated by Google

4.5.  Commandes Manuel  du  processeur  Game  Boy™

Style  d'écriture  ( 0  =  Gauche  ­>  droite,  1  =  haut  ­>  bas)

$06  ­  %vvxxyyzz  data  vv  =  pal  
pour  le  jeu  de  données  1  xx  =  pal  
pour  le  jeu  de  données  2  yy  =  pal  
pour  le  jeu  de  données  3  zz  =  pal  
pour  le  jeu  de  données  4

$07  ­  %vvxxyyzz  données
etc...

6.  Son  marche/arrêt  (08  $)

7.  Transférer  le  son  PRG/DATA  (09  $)
Cela  transfère  les  données  de  votre  score  (au  format .GAK).
Définir  la  palette  SGB  indirecte  ($0a)

Page  126 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 4.5.  Commandes

8.  Définir  les  données  de  la  palette  de  couleurs  du  système  ($0b)

9.  Activer/désactiver  le  mode  d'attraction  ($0c)

10.  Fonction  de  vitesse  ($0d)

11.  Fonction  SGB  (0e  $)

12.  Transfert  Super  NES  WRAM  1  (0f  $)

13.  Transfert  Super  NES  WRAM  2  (10  $)

14.  Demande  du  contrôleur  2  (#11)  (00  $)  ­  Demande  1  jeu

15.  Demande  de  contrôleur  2  (#11)  ($01)  ­  Demande  de  jeu  2

Est  utilisé  pour  déterminer  si  le  système  est  SGB  ou  GB  normal.

16.  Réglez  le  compteur  de  programme  (12  $)

17.  Transfert  de  jeu  de  caractères  (13  $)

(%00000xyy)  (x=Type  de  caractère :  0=BG,1=OBJ  y=CharSet
Plage :  0=00­7f,1=80­ff)

Les  tuiles  téléchargées  sur  le  SNES  pour  la  bordure  sont  des  tuiles  GB  
régulières  qui  ont  été  modifiées  pour  des  couleurs  supplémentaires.  Chaque  tuile  
se  compose  de  32  octets.  Le  format  est :

16  octets  ­  Jeu  de  caractères  GB  4  couleurs  standard  16  octets  
­  Informations  de  couleur  étendues

De  la  même  manière  que  Go  utilise  deux  octets  pour  transmettre  8  pixels  
et  les  4  couleurs  pour  chaque  pixel,  la  couleur  étendue

par  DP Page  127
Machine Translated by Google

4.5.  Commandes Manuel  du  processeur  Game  Boy™

info  utilise  la  même  technique  pour  déterminer  les  couleurs  étendues.  Cela  indique  au  SNES  
quelle  palette  de  couleurs  utiliser  pour  afficher  chaque  pixel.  Cela  permet  un  total  de  16  
couleurs  par  tuile.  Étant  donné  que  les  bordures  SGB  prennent  en  charge  jusqu'à  64  couleurs,  
l'accès  aux  autres  couleurs  est  obtenu  en  modifiant  le  numéro  de  la  palette  principale  dans  la  
carte  de  mosaïque  de  transfert  d'image.

Page  128 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 4.5.  Commandes

18.  Transfert  d'images  (14  $)  ­  Téléchargez  la  bordure  sur  SNES.

La  bordure  (ou  carte  de  tuiles)  qui  est  téléchargée  est  de  32x28  tuiles  ou  
256x224  pixels.  L'écran  GB  standard  s'adapte  en  plein  milieu  comme  ceci :

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
XXXXXX....................XXXXXX  
XXXXXX....................XXXXXX  
XXXXXX ....................XXXXXX  
XXXXXX..................XXXXXX  
XXXXXX...... ..............XXXXXX  
XXXXXX..............XXXXXX  
XXXXXX............ ........XXXXXX  
XXXXXX..................XXXXXX  
XXXXXX.................. ..XXXXXX  
XXXXXX..................XXXXXX  
XXXXXX..................XXXXXX  
XXXXXX.. ..................XXXXXX  
XXXXXX..................XXXXXX  
XXXXXX........ ............XXXXXX  
XXXXXX..................XXXXXX  
XXXXXX.............. ......XXXXXX  
XXXXXX..................XXXXXX  XXXXXX..................  
XXXXXX  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

par  DP Page  129
Machine Translated by Google

4.5.  Commandes Manuel  du  processeur  Game  Boy™

La  carte  de  tuiles  se  compose  d'un  octet  de  numéro  de  tuile  et  d'un  octet  
d'attribut  de  tuile  à  chaque  position  sur  la  carte.  Un  total  de  32  lignes  sont  
téléchargées  même  si  les  4  dernières  lignes  ne  sont  pas  visibles.  Cela  
équivaudrait  à  64  octets  par  ligne  et  à  un  total  de  2048  octets  par  carte.  
Ensuite,  une  palette  de  couleurs  de  64  x  2  octets  pour  la  carte  est  
téléchargée.  La  première  couleur  d'entrée  de  la  palette  est  
transparente.  Utilisez  cette  couleur  pour  afficher  l'écran  GB  normal  en  
dessous.

Le  numéro  de  vignette  vient  avant  l'attribut  de  vignette  de  chaque  
position.  Il  peut  y  avoir  jusqu'à  1024  tuiles  parmi  lesquelles  sélectionner.  Le  
SGB  ne  prend  en  charge  que  256,  donc  les  bits  0  et  1  de  l'attribut  de  tuile  
doivent  être  définis  sur  0.  Voici  les  attributs  de  tuile  que  je  comprends  
jusqu'à  présent :

Bit  7  ­  Tuile  à  retournement  vertical  
Bit  6  ­  Tuile  à  retournement  horizontal  
Bit  5  ­  Ne  fait  rien  (Réglé  sur  0.)
Bit  4  ­  Sélectionner  la  palette  majeure  MSB  (généralement  défini  sur  1.)
Bit  3  ­  Sélectionner  la  palette  principale  ­  
Bit  2  ­  Sélectionner  la  palette  principale  LSB  
Bit  1  ­  Mosaïque  #  MSB  (Bit  le  plus  significatif)  (Réglé  sur  0.)
Bit  0  ­  Tile  #  NSB  (Prochain  bit  le  plus  significatif)  (Réglé  sur
0.)

Ceci  est  souvent  appelé  la  bordure  SGB,  mais  en  fait,  il  couvre  tout  
l'écran  SNES.  La  sélection  de  la  palette  majeure  a  8  réglages  différents.  
Seuls  les  4  à  7  derniers  sont  normalement  utilisés  pour  accéder  aux  
64  couleurs  transférées  avec  cmd  (#14).

(REMARQUE :  Si  vous  utilisez  'gif2sopt.exe'  pour  générer  une  bordure,  
la  plage  des  sélections  de  palette  est  de  1  à  8,  sélectionnez  donc  la  
palette  5  car  ce  programme  n'autorise  que  16  couleurs  maximum.)

Page  130 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 4.5.  Commandes

19.  Définir  l'attribut  de  l'ATF  (15  $)

Les  données  de  45  fichiers  d'attributs  sont  transférées  avec  cette  commande.  
Chaque  fichier  ATtribute  fait  90  octets,  donc  90x45  ou  4050  octets  de  
données  sont  transférés.  Chaque  fichier  d'attributs  utilise  5  octets  par  
ligne  horizontale  8x8  (20  x  4  caractères/octet  x  2  bits/palette)  pour  
décrire  les  palettes  de  couleurs  d'une  ligne.

Exemple  de  données  ATF :

DB  $ff,$00,$00,$00,$02 ;  Ligne  1
DB  $ff,$00,$00,$00,$02 ;  Ligne  2
DB  $ff,$00,$00,$00,$02 ;  Ligne  #3
.....
DB  $ff,$00,$00,$00,$02 ;  Ligne  #18

Le  fichier  ATtribute  ci­dessus  définirait  la  sélection  de  la  palette  de  
couleurs  SGB  sur  3  pour  les  4  premières  colonnes  de  la  fenêtre  
d'action  principale  du  jeu.  La  dernière  colonne  aurait  la  palette  de  
couleurs  SGB  2  sélectionnée.  Toutes  les  autres  colonnes  auraient  la  
palette  0  sélectionnée.

20.  Définir  les  données  de  l'ATF  (16  $)  (données)

Transférer  le  fichier  ATtribute  spécifié  vers  la  fenêtre  GameBoy.

données :  %/
xyyyyyy  x  ­  0  =  Pas  de  changement,  1  =  Annuler  le  masque  après  transfert  
ATF  yyyyyy  =  Numéro  de  fichier  ATtribute  ($00­$2c)

21.  Masque  de  fenêtre  GameBoy  (17  $)  (données)

données :  $00  
=  Désactivé  $01  =  Transfère  la  VRAM  vers  SNES  jusqu'à  annulation.

par  DP Page  131
Machine Translated by Google

4.5.  Commandes Manuel  du  processeur  Game  Boy™

$02  =  Masque  pour  que  tous  les  codes  de  couleur  dans  SGB
la  palette  de  couleurs  est  noire.
$03  =  Masque  pour  que  tous  les  codes  de  couleur  dans  SBG
la  palette  de  couleurs  est  blanche.

22.  Mode  Super  NES  OBJ  (18  $)

23.  Informations  sur  la  palette  de  couleurs  SNES

La  Nintendo  Super  Famicom  est  capable  d'afficher  256  couleurs  à  partir  d'une  
palette  de  32  768.  Ces  256  couleurs  sont  réparties  en  16  palettes  de  16  couleurs  
chacune.  Seules  8  de  ces  palettes  sont  accessibles  par  la  SGB.

Les  données  de  couleur  sont  composées  de  3  composantes  (Rouge,  Vert,  Bleu)  
chacune  de  5  bits  (L'Amiga  utilise  exactement  le  même  système,  mais  en  utilisant  
seulement  4  bits  par  composante).

00000  00000  00000  \ /  \ /  \ /  
\ /  \ /  \ /

B g R

Exemples :  
00000  10111  11100
11111  00000  00000  =  $7C00  (Bleu  Vif)
00000  11111  00000  =  $03E0  (vert  vif)
00000  00000  11111  =  $001F  (rouge  vif)
00000  00000  00000  =  0000  $  (noir)
11111  11111  11111  =  7  FFF  (Blanc)

Page  132 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 4.5.  Commandes

24.  Sélection  de  la  palette  SGB

Il  n'y  a  en  fait  qu'une  seule  palette  de  couleurs  dans  le  SNES  mais  elle  est  divisée  en  
plusieurs  sections  pour  différentes  fonctions  SGB.  Ces  sections  sont  
appelées  sections  majeures  (M)  0­7.  Certaines  fonctions  SGB  ont  même  divisé  certaines  de  
ces  sections  en  sections.  Ces  sections  sont  appelées  sections  mineures  (m).  Les  
grands  blocs  ci­dessous  représentent  les  sections  ou  palettes  majeures  et  les  plus  
petits  en  dessous  représentent  les  palettes  mineures.

Il  y  a  4  couleurs  par  palette  mineure  et  16  couleurs  par  palette  majeure :

+­­­­+­­­­+­­­­+­­­­+­­­­+­­­­+­­­­+­­­­+
|  0  |  1 |  2  |  3  |  4  |  5  |  6  |  7  |
+­­­­+­­­­+­­­­+­­­­+­­­­+­­­­+­­­­+­­­­+
^ ^
|0123|
+­­­­+ | |
^ ^ +­­­­­­­­+­­­­­­­­+
+­­+­+
| |  |

Définir  avec  des  commandes Ensemble  avec  64  couleurs  dans  l'image
#00,  #01,  #02,  &  #03  Transfert  (#14)
(contient  les  couleurs  SGB  Border)

par  DP Page  133
Machine Translated by Google

5.  Annexe  A Manuel  du  processeur  Game  Boy™

5.  Annexe  A
5.1.  Remarques  sur  l'émulateur

Notes  pour  obtenir  des  programmes  en  langage  assembleur  qui  s'exécutent  sur  un  
émulateur  pour  qu'ils  s'exécutent  sur  un  vrai  Go  (par  kOOPa,  2­Jan­98)

1.  Les  émulateurs  ont  tendance  à  régler  toute  la  RAM  sur  00  $  à  la  mise  sous  tension.
Les  vrais  Go  n'initialisent  PAS  la  RAM  à  la  mise  sous  tension.  La  RAM  est  
remplie  de  valeurs  aléatoires  à  la  mise  sous  tension.  Vous  devez  l'effacer  vous­
même  si  vous  souhaitez  qu'il  soit  réglé  sur  une  valeur  connue.

2.  Le  vrai  matériel  se  moque  de  la  ROM
somme  de  contrôle  ($14e,  $14f)  mais  la  vérification  du  complément  ($14d)
DOIT  être  correct  ou  les  programmes  se  "verrouilleront"  après  avoir  fait  
défiler  le  logo  Nintendo.
Utilisez  RGBFIX  ­V  dans  le  système  de  développement  RGBDS  pour  définir  la  
somme  de  contrôle  et  l'octet  de  complément  après  chaque  compilation  de  
code  source.  Peu  importe  que  vous  programmiez  en  C  ou  en  assembleur,  ce  
programme  le  résoudra.

3.  Le  graphique  de  défilement  Nintendo  de  104  $  à  133  $  doit  être  exact.  Si  un  octet  
est  modifié,  vos  programmes  se  "verrouilleront"  après  avoir  fait  défiler  ce  logo  
graphique.

4.  Lorsque  l'écran  LCD  est  éteint  (bit  7  de  $ff40  réglé  sur  0),  vous  pouvez  écrire  dans  la  
mémoire  vidéo  à  tout  moment  sans  restriction.  Tant  qu'il  est  activé,  vous  ne  
pouvez  écrire  dans  la  mémoire  vidéo  que  pendant  H­Blank  et  V­Blank.  Un  code  
similaire  à  celui­ci  fonctionnera :

;  Écrire  B  dans  l'emplacement  de  la  RAM  vidéo  HL
WriteVRAM :  di
;  désactiver  les  interruptions

Page  134 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 5.1.  Remarques  sur  l'émulateur

Write1 :  
ldh  a,[$41]  et  2   ;lire  $ff41
jr  
nz,Write1  ld  [hl],b  
ei
;  activer  les  interruptions
ret

Il  ne  devrait  pas  y  avoir  beaucoup  d'instructions  entre  le  "jr  nz"  et  l'écriture  en  
mémoire  "ld  [hl],b".  Un  pire  cas  de  64  cycles  d'horloge  CPU  est  disponible  pour  
accéder  à  la  mémoire  vidéo  principale  (pas  OAM !)  Suite  à  la  commande  
"jr  nz".

Les  commandes  "di"  et  "ei"  ci­dessus  ne  sont  requises  que  si  vous  utilisez  
des  interruptions  série,  minuterie  ou  Hi­2­Lo.

5.  L'écran  LCD  est  allumé  à  la  réinitialisation  (bit  7  de  $ff40  réglé  sur  bit  7  de  $ff40  
réglé  sur  1).  Avant  que  l'écran  LCD  puisse  être  éteint,  vous  devez  attendre  V­
Blank.  Une  façon  populaire  de  le  faire  est  la  suivante :

;  Éteindre  l'écran  LCD
LCDOff :  
ldh  a,[$44h]  cp   ;  $ff44=Pos  Y  LCDC ;  90  $  
$90  jr   et  plus  =  en  VBL
nz,LCDOff ;  Boucle  jusqu'à  =  90  $
xou  un
ldh  [$41],  un  ret ;  Éteindre  l'écran  LCD

Notez  que  vous  devez  désactiver  les  interruptions,  si  elles  sont  activées,  
avant  d'exécuter  le  code  ci­dessus,  sinon  le  test  de  $ff44  pourrait  s'avérer  
invalide.

L'activation  de  l'écran  LCD  peut  être  effectuée  à  tout  moment.

par  DP Page  135
Machine Translated by Google

5.1.  Remarques  sur  l'émulateur Manuel  du  processeur  Game  Boy™

6.  Si  vous  utilisez  des  sprites,  vous  ne  devez  pas  utiliser  les  commandes  
suivantes  lorsque  leur  contenu  de  registre  est  compris  entre  $fe00  et  
$feff.

inc  bc  
inc  de  
inc  hl  
déc  bc  
déc  de  
déc  hl

Si  vous  ne  suivez  pas  cette  règle,  la  corbeille  de  sprite  sous  la  forme  
d'un  "clignotement"  de  sprite  affectera  vos  sprites  de  manière  
aléatoire.
7.  Normalement,  vous  ne  devriez  apporter  des  modifications  à  Sprite  
RAM  que  pendant  V­Blank,  sauf  si  vous  êtes  un  expert  et  savez  
exactement  ce  que  vous  faites.  La  manière  courante  de  procéder  
consiste  à  utiliser  le  registre  GB  DMA  ($ff46)  pour  effectuer  une  
copie  rapide  de  votre  table  de  sprites  dans  la  RAM  vers  $fE00­$fe9f.
A.  Vous  avez  besoin  d'une  table  de  sprites  en  RAM  avec  un
adresse  de  XX00 $  et  d'une  longueur  de  160 $a0.  Beaucoup  utilisent  
souvent  $c000­$c09f  à  cette  fin,  mais  n'importe  où  dans  la  RAM  
commençant  par  $XX00  convient.
B.  Vous  devez  créer  une  routine  d'interruption  VBlank  qui
contient  la  commande  DMA,  suivie  d'un  court  délai  pour  permettre  au  
DMA  de  se  terminer,  et  copie  cette  routine  dans  la  mémoire  vive  
élevée  ($ff00­$fffe).  La  commande  DMA  NE  FONCTIONNERA  PAS  
dans  la  ROM  ou  la  RAM  faible  car  elles  sont  désactivées  pendant  
le  DMA.
C.  Après  avoir  copié  cette  routine  dans  une  RAM  élevée,  vous  devez  
ensuite  activer  l'interruption  VBLANK,  puis  activer  les  
interruptions.

Page  136 Version  1.01
Machine Translated by Google

Manuel  du  processeur  Game  Boy™ 5.2.  Chronogramme  typique

5.2.  Chronogramme  type
(Basé  sur  un  e­mail  de  Philippe  Pouliquen)

Le  graphique  montre  une  écriture  suivie  de  deux  lectures  (mesurées  
sur  une  GameBoy  normale) :

_________ _________ _________ ___


CL :____/ \_________/ \_________/ \_________/
_________________
/RD :______/ \___________________________________________
______________ _______________________________________________
/WR : \_______/
__________ _____ _____ ___
/CS : \_____________/ \_____________/ \_____________/
Adr :_______  ___________________  ___________________  __________________  _
Autobus :_______X___________________X___________________X__________________X_
Données : _________ _________ _________
Autobus :­­­­­­­­­­­­­<_________>­­­­­­­­­<_________>­­­­­­­­­<_________>­­­
^  ^  ^ ^ ^^
Temps: a  B  c  d e  fg

Horaire:
a :  0ns  
c'est  le  point  auquel  CLK  passe  à  l'état  haut,  à  partir  duquel  les  autres  temps  
sont  mesurés.
b :  140ns  
point  auquel /RD  montera  avant  une  écriture.  C'est  également  le  point  auquel  
l'adresse  sur  le  bus  d'adresse  change.  c :  240ns

point  auquel /CS  passe  au  niveau  bas  (c'est  la  broche  5  du  connecteur)  
d :  480ns

point  auquel  CLK  devient  bas.  C'est  également  le  point  auquel /WR  passe  
au  niveau  bas  pour  une  écriture  et  le  GameBoy  commence  à  piloter  le  
bus  de  données.
e :  840ns

par  DP Page  137
Machine Translated by Google

5.2.  Chronogramme  type Manuel  du  processeur  Game  Boy™

point  auquel /WR  passe  à  l'état  haut  après  une  écriture.  f :  
960ns
point  auquel  CLK  devient  élevé.  C'est  également  le  point  auquel /CS  
monte  et  le  GameBoy  arrête  de  piloter  le  bus  de  données.  g :  
point  de  990 ns  auquel /RD  
passe  à  
l'état  bas  pour  une  lecture  (30 ns  après  que  CLK  passe  à  l'état  haut).

(Mesures  arrondies  à  la  dizaine  de  ns  la  plus  proche)

"Certains  appareils  (comme  les  puces  de  contrôleur  de  disque)  exigent  que  
l'adresse  soit  valide  avant  d'y  accéder  (avec  une  impulsion  de  lecture  
ou  d'écriture).
Le  problème  est  que /RD  ne  monte  pas  entre  les  lectures  
consécutives,  et  le  deuxième  problème  est  que  lorsque /RD  effectue  une  
transition,  il  le  fait  en  même  temps  (ou  avant)  que  l'adresse  change.  
Le  résultat  est  que  du  point  de  vue  de  l'appareil,  une  transition  d'adresse  
ressemble  à  un  tas  de  lectures  à  partir  d'adresses  aléatoires.  Ces  fausses  
lectures  sont  correctes  pour  la  RAM  et  la  ROM,  mais  peuvent  vraiment  
gâcher  les  choses  pour  les  appareils  dotés  de  tampons  internes,  car  ils  
peuvent  être  trompés  en  pensant  que  vous  avez  lu  plus  de  données  
que  vous  n'en  avez  réellement.

La  façon  de  résoudre  ce  problème  est  de  faire  passer  CLK  et /RD  par  
une  porte  OU.  L'inconvénient  est  que  cela  raccourcit  votre  temps  de  
lecture  autorisé.

Page  138 Version  1.01
Machine Translated by Google

COMMANDANT  X Manuel  du  processeur  Game  Boy™

Commande Page Commande Page Commande Page

CAN  A,n  81 LD  (HL­),A  72 RET  117


AJOUTER  A,n  80 LD  (HLD),A  72 RET  cc  117
AJOUTER  HL,n  90 LD  (HLI),A  74 RETI  118
AJOUT  SP,n  91 LD  (nn),SP  78 ARL  99
ET  n  84 LD  A,(C)  70 RLCA  99
TBI  b,r  108 LD  A,(HL+)  73 RLC  n°  101
APPELER  cc,  nn  115 LD  A,(HL­)  71 RL  n  102
APPELEZ  le  114 LD  A,(HLD)  71 RRA  100
CCF  96 LD  A,(HLI)  73 RRCA  100
CPL  95 LD  A,n  68 RRC  n  103
PC  n°  87 LDD  (HL),A  72 RR  n°  104
DAA  95 LDD  A,(HL)  71 RST  n  116
DÉC  n  89 LDH  (n),A  75 SBC  A,n  83
DÉC  nn  93 LDH  A,(n)  75 FCS  96
DI  98 ILD  (HL),A  74 JEU  b,r  109
AE  98 ILD  A,(HL)  73 SLA  n  105
ARRÊT  97 LD  n,A  69 SRA  n°  106
CNI  n°  88 LD  n,nn  76 SRL  n°  107
INC  nn  92 LD  nn,n  65 ARRÊT  97
JP  (HL)  112 DL  r1,r2  66 SOUS  n°  82
JP  cc,nn  111 LD  SP,  HL  76 SWAP  n°  94
JP  nn  111 NOP  97 XOR  n  86
JR  cc,n  113 OU  n  85 LD  HL,SP+n  77
JR  n°  112 POP  nn  79 LDHL  SP,n  77
LD  (C),A  70 POUSSEZ  nn  78
LD  (HL+),A  74 RES  b,r  110

par  DP Page  139

Vous aimerez peut-être aussi