Z80 flashing leds / NOP test board

Cet espace concerne les composants électroniques, les techniques de réalisation, le soudage, la mesure et ses divers instruments, les programmateurs ou encore votre laboratoire. Recueille également les éventuelles ventes, achat, dons ou recherches.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: Z80 flashing leds / NOP test board

Message par hlide »

Allez encore une pensée pour le Z80 : si l'Arduino peut fournir une fréquence de 2, 4, 8 ou 16 MHz sur un pin, on peut utiliser le signal /WAIT à 0 qui fera que le "fetch opcode" attendra sur ce signal. Le cycle sera bien sur 2, 4, 8 ou 16 MHz.

Deux possibilités :

1) La boucle Arduino pourra détecter ce "fetch opcode" (/M1 = 0, /MREQ = 0 et /RD = 0), il pourra alors présenter l'octet (NOP ou autre chose en fonction du test) et passer le /WAIT à 1 très brièvement (une bascule en somme) pour permettre au CPU d'exécuter l'instruction qu'on lui a donné. La clé ici, ce n'est pas d'exécuter 4 / N instructions NOP sur une fréquence N donnée mais de s'assurer que le Z80 exécute bien ces NOP avec la fréquence en question même si le nombre de NOP sera bien moindre que si le /WAIT était toujours à 0. On peut faire un PWM oneshot qui mettrait /WAIT = 0 sur un cycle. C'est quelque chose que j'ai déjà expérimenté.

2) On génère un PWM qui montre 1 cycle avec /WAIT = 1 puis N - 1 autres cycles (où N est le prescaler dont 8 est le minimum) avec /WAIT = 0, et ce en continue. Et on fait compter le nombre de fronts de /M1 pour vérifier qu'il s'incrémente bien.
Dernière modification par hlide le 22 nov. 2021 12:54, modifié 1 fois.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: Z80 flashing leds / NOP test board

Message par hlide »

Je me dis que mon dernier message ne doit pas être compréhensible alors je vais expliquer autrement.

Un NOP s'exécute en quatre cycles : [T1][T2][T3][T4].

T1 et T2 fait partie de l'accès mémoire pour obtenir le code de l'opération (ici, "glander"). On a /M1 = 0 et /RFSH = 1.

T3 et T4 exécute l'opération et sort l'adresse pour le rafraichissement DRAM. On a /M1 = 1 et /RFSH = 0.

A cause de l'accès mémoire, on peut avoir autant de cycles d'insertion d'attente : [T1][T2](N x [Tw])[T3][T4].

On peut donc exécuter un NOP en 100 cycles au lieu de 4 en maintenant autant de [Tw] (i.e, avec un /WAIT = 0) nécessaires, soit N = 100 - 4 = 96 cycles supplémentaires.

Maintenant imaginez que /WAIT soit un motif de 100 cycles répété sous la forme : [1](96 x [0]), vous cadencez alors les NOP à 100 cycles ronds comme le GA de l'Amstrad cadence toutes ses instructions à 4 cycles ronds avec un motif répété pour /WAIT de [1][0][0][0]. En fait, vu qu'une instruction fait au minimum 4 cycles, on peut étendre le nombre de cycles de /WAIT = 1 à 2 ou 3 cycles : (n = 1 ou 2 ou 3 x [1])((100 - n) x [0]) car le prochain passage de /M1 à 0 de l'instruction suivante ne peut avoir lieu qu'après 4 cycles minimum de l'instruction précédente. Cette extension donnerait un peu plus de répit à l'Arduino de capturer un /M1 = 0.

Donc d'un côté, vous faites fonctionner le Z80 à, disons, 16 MHz et les T-states sont bien à cette fréquence mais vous permettez à l'Arduino de capturer le passage de /M1 à 0. Si on détermine que les /M1 "clignotent" alors c'est que le CPU est en mesure de fonctionner à cette fréquence.
Avatar de l’utilisateur
pascalien
Messages : 965
Inscription : 21 janv. 2019 23:40
Localisation : 93200 ST DENIS
Contact :

Re: Z80 flashing leds / NOP test board

Message par pascalien »

https://hackaday.io/project/159973-z80- ... ions-title

Utilise un ATMEGA pour piloter le Z80 mais je ne comprends pas comment cela fonctionne
les broches d'adresses n'étant pas connectées sauf A0.


https://hackaday.io/project/15942-z80-s ... controller
Celui la utilise un Teensy, pour celui çi je ne comprends pas comment qui gère l'horloge du Z80.

A priori, faire fonctionner un Z80 à 8MHz serait possible?
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: Z80 flashing leds / NOP test board

Message par hlide »

Le premier lien, en regardant le schéma et le source INO :

1) Première étape : on maintient le Z80 à l'état /RESET = 0 et /WAIT = 0 pour qu'il n'interfère pas avec l'Arduino. Il récupère la configuration, demande via la liaison série quel boot on veut effectuer, etc. Une fois les choix faits, l'Arduino active la banque SRAM où charger le boot, prend le contrôle du Z80 pour lui présenter directement les octets sans tenir compte de l'adresse et faire exécuter "LD HL,$0000" (en SRAM, et je simplifie ici) et une suite de "LD (HL),n : INC HL" qui va permettre de stocker les octets n du programme de boot puis enfin relancer le Z80 avec une /RESET. L'Arduino n'a pas besoin de l'adresse pour faire exécuter cette séquence d'instruction et il contrôle directement l'horloge en le basculant de lui-même (et en jouant sur le bus de contrôle et de donnée).

2) l'Arduino qui tourne à 16 MHz émet avec le TIMER 2, une fréquence à 4 ou 8 MHz (il semblerait que le maximum soit 16 MHz / 2, soit 8 MHz). A partir de là, l'Arduino devient une contrôleur I/O. L'A0 permet de savoir quel est le registre I/O concerné par une écriture ou une lecture (STORE OPCODE, EXECUTE WRITE OPCODE, SERIAL RX ou EXECUTE READ OPCODE) - rien à avoir avec l'opcode Z80 bien sûr. Alors comment on accède à ces registres ? ben il y a un circuit qui récupère le signal /IORQ du Z80 pour le rebalancer en /WAIT = 0 (le Z80 attend du coup), ce /WAIT = 0 est également lu par l'Arduino avec le signal A0 -> donc n'importe que adresse de port I/O de $00 à $FF permet l'accès à ces registres en détrompant uniquement avec A0. Tout simple. A noter qu'il y a un FF pour faire basculer le /WAIT à 1 et permettre au Z80 de continuer.
Avatar de l’utilisateur
pascalien
Messages : 965
Inscription : 21 janv. 2019 23:40
Localisation : 93200 ST DENIS
Contact :

Re: Z80 flashing leds / NOP test board

Message par pascalien »

Je viens de comprendre que si le MPU contrôle le Z80, en le mettant en veille et en écrivant dans la ram le programme Z80,
il n'y a plu aucune raison de lui faire exécuter du code.
Il suffit de le démarre et il va exécuter le code mis dans la ram.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: Z80 flashing leds / NOP test board

Message par hlide »

L'autre lien, même topo: TIMER 2 fournit la fréquence que tu veux mais 16 MHz / 2 au maximum, soit 8 MHz.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: Z80 flashing leds / NOP test board

Message par hlide »

pascalien a écrit : 23 nov. 2021 20:18 Je viens de comprendre que si le MPU contrôle le Z80, en le mettant en veille et en écrivant dans la ram le programme Z80,
Et tu comptes écrire dans la RAM comment si tu ne te sers pas du Z80 ? l'AVR contrôle le Z80 pour qu'il aille stocker le programme en RAM avant de lui laisser le champ pour l'exécuter. Mais dans les faits, il y a bien exécution d'une séquence par le Z80 juste en présentant les opcodes Z80 qu'il faut pour écrire en RAM. C'est ça qui est vraiment fort et subtile dans le premier lien.
Avatar de l’utilisateur
pascalien
Messages : 965
Inscription : 21 janv. 2019 23:40
Localisation : 93200 ST DENIS
Contact :

Re: Z80 flashing leds / NOP test board

Message par pascalien »

Dans le deuxième schéma, le Teensy contrôle les lignes d'adresses.
Zebulon
Messages : 2788
Inscription : 02 nov. 2020 14:03

Re: Z80 flashing leds / NOP test board

Message par Zebulon »

J'ai de nouveau édité mon post initial pour mentionner qu'avec deux Z80 opérationnels la diode M1 clignote comme attendu. Il est donc intéressant d'avoir quelques diodes "de service" en plus de celles du bus d'adresse à définir selon le processeur pour visualiser qu'il y a de la vie en plus de la stricte incrémentation des adresses.
Zebulon
Messages : 2788
Inscription : 02 nov. 2020 14:03

Re: Z80 flashing leds / NOP test board

Message par Zebulon »

J'ai maturé la chose de mon côté et je procéderais comme suit.

Le PCB NOP TESTER contenant:
- la prise d'alimentation 5v USB
- la circuiterie autour du NE555 pour l'horloge de base avec sa diode témoin
- un réseau de pull-up
- un réseau de pull-down
- une série de 8 led pour les adresses A0-A7 et 3 ou 4 de plus pour des signaux spécifiques que l'on voudrait suivre sur tel ou tel CPU
- un support ZIF de 40 broches pour accueillir les CPUs
- un support EDGE de 86 broches pour accueillir les cartes filles PCB CPU

Les PCB CPU contenant:
- juste des pistes pour la plupart des CPU
- d'éventuels composants nécessaires pour produire des signaux complexes pour l'horloge par exemple

Ainsi il y a une carte de base à construire et les cartes filles ne seront que des sortes de carte "programmes" faisant les jonctions entre les "services" proposés sur la carte de base et les pins du processeur. Les plus simples ne nécessiteront que d'être fabriquées par JLCPCB. Les plus complexes nécessiteront l'ajout de quelques composants. Leur hauteur sera minimaliste pour une carte simple.

J'imagine qu'il existe un composant high-tech programmable permettant de remplacer ce concept de "câblage" mais hors de mes connaissances/compétences.
Avatar de l’utilisateur
bubulemaster
Messages : 1082
Inscription : 01 juil. 2014 13:48
Localisation : Nantes

Re: Z80 flashing leds / NOP test board

Message par bubulemaster »

J'ai regardé plusieurs schémas de test de Z80, certains sont faux (diode dans le mauvais sens, mis à la masse pour désactivé des pins actives à l'état bas...).
J'ai donc, relu la doc des différents composants, j'ai relié toutes les pins du Z80 car à priori (mais là je ne suis pas sûr), certaines versions n'aiment pas les pins flottantes (rien en interne pour forcé en pull up).

Vos retours sont les bienvenues.
Pièces jointes
z80_simple_tester.jpg
z80_simple_tester.jpg (255.03 Kio) Consulté 3480 fois
Dernière modification par bubulemaster le 12 déc. 2021 12:17, modifié 1 fois.
Le 80286 et suivant sont des processeurs beaucoup trop évolués qui n'auraient jamais dû être inventés :-).
Vinted | Le bon coin | Ebay
Fred_72
Messages : 1131
Inscription : 22 mai 2019 13:10
Localisation : Sarthe

Re: Z80 flashing leds / NOP test board

Message par Fred_72 »

Il reste quelques erreurs sur ton schéma.
La sortie (3) du 555 ne doit pas être connectée aux autre pattes du circuits. La 7 doit aller seulement sur le potentiomètre.

Les pattes RFSH, HALT, MREQ, IORQ, BUSACK sont des sorties donc elles doivent être laissée en l'air (ou avec une led)
Tu peux utiliser des réseaux de résistances pour réduire l'encombrement et le nombre de soudure.
Avatar de l’utilisateur
bubulemaster
Messages : 1082
Inscription : 01 juil. 2014 13:48
Localisation : Nantes

Re: Z80 flashing leds / NOP test board

Message par bubulemaster »

Bien vu, je suis pas très réveillé le dimanche matin. Désolé, j'ai corrigé.
Le 80286 et suivant sont des processeurs beaucoup trop évolués qui n'auraient jamais dû être inventés :-).
Vinted | Le bon coin | Ebay
Avatar de l’utilisateur
pascalien
Messages : 965
Inscription : 21 janv. 2019 23:40
Localisation : 93200 ST DENIS
Contact :

Re: Z80 flashing leds / NOP test board

Message par pascalien »

J'avais calculé que la fréquence était de moins de 5Hz,
c'est ce qui explique que l'on puisse voir de visu le clignotement des leds.
Plutot qu'un potentiométre, je pensais à mettre un ou deux boutons poussoirs pour sélectionner
une fréquence beaucoup plus haute.
Je ne sais pas jusqu'a quelle fréquence on voit le clignotement de A15.
Fred_72
Messages : 1131
Inscription : 22 mai 2019 13:10
Localisation : Sarthe

Re: Z80 flashing leds / NOP test board

Message par Fred_72 »

@ bubulmaster: Ne sois pas désolé, c'est normal de faire des erreurs, on est là pour t'aider. Il reste quelques connexions oubliées aux intersections (points verts) et quelques connexions inutiles (points verts au milieu d'un segment).

A15 va clignoter à une fréquence 1/32768 de celle de A0.
Donc à 5Hz A0 va clignoter à 1.25Hz (période= 0.8s) et pour A15 la période va être d'environ 7h16min. :shock:
A 1MHz ça fait une fréquence de 3.8Hz pour A15.

Toutefois sur le Z80, il y a le rafraîchissement qui va venir mettre la pagaille dans le comptage de A0 à A7.
Dernière modification par Fred_72 le 12 déc. 2021 16:30, modifié 1 fois.
Répondre