Port $600501.b : Gestionnaire d’interruption.
Ce port permet de masquer une ou plusieurs interruptions (INT1 à INT7):
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Fait quoi ? Global /INT 7 /INT 6 /INT 5 /INT 4 /INT 3 /INT 2 /INT 1
Le bit 7 (Global) permet d’activer globalement toutes les interruptions. Cependant, il lit les bits 6 à bit 0 pour en déterminer le masque. Exemple : $600501 = $A0 : Toutes les interruptions sont activées à l’exception de l’interruption 6. $600501 = $FF : Toutes les interruptions sont désactivées, car toutes filtrés. $600501 = $BF : Seule l’interruption 7 est activée. $600501 = $7F : Toutes les interruptions sont désactivées, car désactivées globalement.
Pour rappel : INT 1 : ??? Timer 4 Hz ? INT 2 : « Octet reçu » port série ? INT 3 : ?? INT 4 : Clavier / Souris INT 5 : ?? est déclanché 1x si move.b #$01,($600505) à chaque lecture de $600507/$600509 INT 6 : Timer 125 Hz INT 7 : ??
Notes random :
Port $601011 (status Sprite) : si le bit 3 (#4) est levé, certains titres ne s’affichent pas correctement. (Pourquoi ?)
Port $600505 ( ???) : si le bit 1 (#1) est levé, à chaque lecture de 600507/600509 déclenchera une interruption de niveau 5. (Pourquoi ?) Port $600203 ( ??? ) :
Le coproc VTECH n’utilise pas BusRequest du 68000, ce qui veut dire, que les transferts se font dans le « dos » du CPU. (notamment, l’affichage des polices/spites à l’écran, ce qui veut dire que le chipset utilise le status du CPU pour réaliser les transferts quand le CPU à relâché le bus).
Cependant, la seule raison de BusRequest est la lecture Audio ADPCM ; celui-ci nécessite un transfert de 16 mots (32 octets/64 nibbles) pour renflouer son FIFO interne. Si le contrôle du bus n’est pas donné à temps, le lecteur ADPCM continue de lire le contenu du FIFO en boucle (64 nibbles)
NOTE HARDWARE : Généralités sur le CPU Le CPU n’est pas contrôlée par les broches /BR (bus request) et BG (bus grant). Au lieu de cela, il est contrôlé à l’aide du cycle interne du CPU. Chaque instruction exécutée est réalisée en un certain nombre de cycles d’horloge, ce qui permets au Vtech de pouvoir rafraîchir la mémoire / chercher les sprites dans arrêter l’intégralité du système (dans le dos du CPU). (https://www.bigmessowires.com/2011/08/25/68000-interleaved-memory-controller-design/) (Figure 4-4. Write-Cycle Timing Diagram) La seule utilité de ces broches provient du lecteur audio, nécessitant des arrêts asynchrones pour pouvoir remplir le buffer circulaire « FIFO ». Il est à noter que si le CPU ne donne pas la main (via BG-Bus grant), le lecteur audio continue de lire en boucle le buffer circulaire sans s’arrêter pour autant.
Généralités sur le lecteur audio Le lecteur audio possède sa propre horloge de travail. Il n’est pas synchronisé sur le quartz système (32 Mhz) ou le quartz vidéo (26,xxx Mhz). De ce fait, il est impossible de réaliser une capture parfaite (bit perfect) des fichiers audios en sortie. La seule option étant d’utiliser la broche /BR comme indicateur temporelle. Il est synchronisé sur le quartz primaire de 32 Mhz. Son diviseur interne est de 4032 (ce qui donne une vitesse d’environ 7936,5079 Khz) PS : 4096 – 4032 = 64 4096/64 = 64 4032/64 = 63 (32 000 000 / 64) / 63 = 7936,5079 Khz
Généralités sur la RAM Pas grand-chose à dire hormis qu’il n’est pas possible d’augmenter la capacité mémoire vidéo. Cela vient du fait que la DRAM possède un multiplexage de l’adresse…sur les broches d’adresse. (Row / column sur 9 bit, x2 = 256K) et que le coproc Vtech soit le seul pouvant gérer cette mémoire. Il devient donc extrêmement compliqué d’implémenter par exemple un DMA système / vidéo.
Fun fact (mais nomal) : Les accès à la RAM son lents. TODO : Temps perdu