Retro-ingénierie d'une carte Z80 : partie 2

Bonjour à tous,

Il n'y a peu, je me penchais sur la "Récupération: du Z80 dans une vieille centrale téléphonique analogique" et la "Retro-ingénierie d'une carte Z80".

Le projet à poursuivit son court avec un schéma complet et décodage de l'espace d'adressage.

C'est fou ce que l'on apprend et développe ses techniques lorsque l'on fait de la rétro-ingénierie (du décodage de carte).

Schéma suite et fin

Il fallait s'y attendre, suivre les pistes nécessitait de retirer les composant pour avoir accès aux Vias. Par chance, les circuits sont montés sur sockets :-)

Il aura également été nécessaire de retirer/démonter certains éléments pour suivre certaines pistes faisant des virages vicieux ou plaqués sous la sérigraphie.


Cela a permis de terminer le schéma qui à maintenant une toute autre allure.

Image 5000x3500.
Ouvrir dans un nouvel onglet pour pleine résolution

Espace d'adressage

Le tout remonté, il fallait ensuite disposer de l'espace d'adressage et savoir comment passer d'une ROM à l'autre, utiliser la RAM.

La circuiterie n'était pas forcement évidente à comprendre (dans ses finesses).
J'ai donc:

  • Retirer le Z80 pour simuler le bus d'adresse
  • Retirer le PIO2 pour prendre le contrôle des signaux romSel0, romSel1 et rom23High
  • Monté des LEDs (rouge) sur les /CE (chip enable) des ROMs - pour identifier la ROM/RAM active.
  • Monté une LED (jaune) sur le signal /OE (output enable) qui s'active lorsque l'on fait un accès mémoire (/mreq + /rd)

Etude du système d'adressage

Ce qui permet d'établir la table d'adressage

Table d'adressage

C'est le bit A15=1 qui décident s'il faut utiliser romSel1 & romSel2 pour sélectionner la ROM1, 2, 3.

Il est intéressant de noter que A15 est aussi un bit valide pour l'adressage lorsque l'on travaille sur la ROM1. Dans le cas de la ROM 2 & 3, il faudra manipuler le signal rom23High pour accéder à la partie haute de la mémoire.

Un truc génial:
Comme la RAM est en 0x2000-0x2700, le bit A15 est forcement à 0... donc on tombe inévitablement sur la RAM... peu importe la ROM active :-)

Watchdog 

J'ai aussi décodé le circuit du WatchDog. Comme il n'y en a pas sur le Z80, ce dernier est créé à l'aide d'un NE556 qu'il faut réinitialiser à intervalle régulier... sinon il déclenche un Reset au bout de 4 secondes.

Dans le cas de la présente carte, ce WatchDog est alimenté par les interruptions.
S'il n'y a plus d'interruption, c'est que la carte ou le programme à planté. Plus de traitement = plus de nouvelles interruptions => il faut réinitialiser le carte CPU!

Plus de détails sur son fonctionnement dans le dépôt du projet (section doc).

Remarque:
Un WatchDog basé sur le système d'interruption c'est un peu trop High Tech pour faire du hacking/apprentissage Z80. J'ai donc désactivé la fonctionnalité en enlevant le NE556 pour que le WatchDog ne deviennent pas un frein d'apprentissage :-) 

Dépôt GitHub

Il y a maintenant assez d'information pour les publier dans le dépôt kicad-public-projects .

Ensuite...

Voici ce que j'envisage pour la suite:

  • Lecture et sauvegarde des ROM en place.
  • Substituer avec une EEPROM (ce sont actuellement des ROM UV).
  • M'équiper du matériel de programmation ROM
  • Compiler mon premier code Z80 et le tester
  • Créer une interface Homme-Machine la plus simple possible.
    Pour le moment je ne sais pas comment voir si mon programme fonctionne!

Aucun commentaire