[Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Pour parler de toutes les réalisations récentes qui ne sont pas directement destinées à être utilisées avec une machine (ou une catégorie de machines) précise.

Modérateurs : Papy.G, fneck, Carl

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

[Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par hlide »

Je ne vais parler ici que de la partie matérielle du MCLZ8 et de son impact sur le logiciel d'émulation du Z80.

Voici comment sont associées les broches entre le socle Z80 et celui du Teensys 4.1 par le biais du circuit imprimé actuel :

Code : Tout sélectionner

Pin Port        Bit Bus
0   GPIO6_DR    3
1   GPIO6_DR    2   
2   GPIO9_DR    4   /DATA_OE
3   GPIO9_DR    5   AD0_q
4   GPIO9_DR    6   AD1_q
5   GPIO9_DR    8   AD2_q
6   GPIO7_DR    10  AD3_q
7   GPIO7_DR    17  AD4_q
8   GPIO7_DR    16  AD5_q
9   GPIO7_DR    11  AD6_q
10  GPIO7_DR    0   AD7_q
11  GPIO7_DR    2   /ADDR_LATCH
12  GPIO7_DR    1   /M1
13  GPIO7_DR    3
14  GPIO6_DR    18  D4_d
15  GPIO6_DR    19  D3_d
16  GPIO6_DR    23  D2_d
17  GPIO6_DR    22  D1_d
18  GPIO6_DR    17  D0_d
19  GPIO6_DR    16  /NMI
20  GPIO6_DR    26  /INT
21  GPIO6_DR    27  CLK
22  GPIO6_DR    24  /WAIT
23  GPIO6_DR    25  /RESET
24  GPIO6_DR    12  /HALT
25  GPIO6_DR    13  /RD
26  GPIO6_DR    30  /WR
27  GPIO6_DR    31  /MREQ
28  GPIO8_DR    18  /IOREQ
29  GPIO9_DR    31  /RFSH
30  GPIO8_DR    23  A15
31  GPIO8_DR    22  A14
32  GPIO7_DR    12  A13
33  GPIO9_DR    7   A12
34  GPIO7_DR    28  A11
35  GPIO7_DR    29  A10
36  GPIO7_DR    18  A9
37  GPIO7_DR    19  A8
38  GPIO6_DR    28
39  GPIO6_DR    29  D7_d
40  GPIO6_DR    20  D6_d
41  GPIO6_DR    21  D5_d
La première colonne décrit le numéro de broche du Teensys au sens Arduino.

La deuxième décrit à quel port GPIO (donc son registre) il est rattaché.

La troisième décrit le numéro de bit du port rattaché associé à la broche.

La dernière décrit à quelle broche directe ou intermédiaire (par le biais d'un tampon) du Z80 est associée la broche Arduino :
- ADx_q désigne tantôt une adresse tantôt une donnée en sortie du Teensys. C'est multiplexé car j'imagine que c'était le cas du 8086 dont le circuit est est inspiré.
- Dx_d désigne une donnée en entrée du Teensys. Il a été choisi de faire la séparation entre entré et sortie à cause des différences de tensions 5 V et 3,3 V.

Le moins que l'on peut dire, c'est que c'est très chaotique et désordonné comme association. C'est une galère à reconstruire une adresse et une donné sur plusieurs ports au niveau logiciel.

Heureusement, il s'avère que le premier 512 Ko de RAM a 0 latence et donc l'accès à un tableau dans cette RAM ne nécessite pas de cache (de ce que j'ai lu sur leur forum). Il faut 5 tables de 256 entiers 32-bit pour construire le masque de bit des adresses et "pok-er" 3 ports chacun 32-bit pour sortir l'adresse 16-bit sur le bus. Il faut une grosse table de 65536 entiers 8-bit pour reconstruire la donnée 8-bit lue sur le bus.

Je pense que l'auteur n'a pas voulu faire le travail supplémentaire de router les associations de façon à regrouper plus efficacement les bits pour éviter tous ces reconstructions par voie logiciel.

Les signaux /BUSREQ et /BUSACK n'ont pas été connectés et donc pris en charge : en effet, il faudrait pouvoir faire du tri-state sur les bits d'adresse et de données. Ce que ne fait pas le MCLZ8 actuel.

Alors je me pose la question si on peut revoir une partie du circuit pour permettre une meilleure et plus complète émulation du Z80.

Ce sera tout pour aujourd'hui.
Dernière modification par hlide le 21 mars 2023 19:34, modifié 1 fois.
Notator
Messages : 1286
Inscription : 09 août 2015 20:13

Re: [Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par Notator »

De ce que je me souviens du sujet initial, c'est qu'il n'y avait pas assez de broches sur le Teensy pour émuler aussi les lignes /BUSREQ et /BUSACK.
Alors, si le Teensy ne dispose pas d'assez de broches pour émuler/capturer la totalité des broches du Z80, comment faire ?
Avec un circuit extension de port (j'ai oublié la référence) ?
Notator est le nom d'un programme séquenceur Midi et notation musicale pour Atari ST(e) (puis Mac).
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par hlide »

Il y a 4 broches libres en fait donc non, ce n'est pas la raison réelle. C'est juste que si l'auteur devait implémenter le /BUSREQ, ça ferait revoir l'ensemble du circuit car il serait alors obliger de recréer du troisième état Z sur le bus d'adresse, de donnée et de contrôle ! or sur ces lignes, MCLZ8 ne gère que de l'entrée (INPUT) ou de la sortie (OUTPUT) donc une utilisation de tampons supplémentaires pour mieux gérer ce cas.

D'autre part, on peut certes mettre un PULLUP sur chaque bit d'un port représentant ces lignes mais c'est un accès port bit par bit (on est déjà une trentaine à traiter là !) donc pas recommandé à faire du côté logiciel.

Je compte détailler ces choses-là, voir si et comment on peut adresser ça dans la suite.
Dernière modification par hlide le 23 mars 2023 00:03, modifié 1 fois.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par hlide »

Pour commencer, j'ai recréé les tables d'association des 4 ports GPIO6/7/8/9 :
- les numéros en haut désignent les positions de bits dans le registre.
- les numéros en bas désignent les numéros de broche à la "Arduino" du Teensys.
- La présence d'un I ou O dans une case indique la direction du port : I pour entrée et O pour sortie.
- Plus bas en zig-zag on a les noms des lignes Z80 associées.
- les cases bleues désignent un bus de donnée ou adresse.
- les cases vertes désignent un bus de contrôle.
- les cases roses désignent des broches "Arduino" non connectées et donc disponibles (/BUSREQ et /BUSACK auraient pu être connectés là s'il n'y avait pas une autre problématique de tri-state totalement occultée par l'implémentation actuelle de MCLZ8).
- les case jaunes désignent des lignes de contrôle pour le multiplexeur d'adresse et de données (AD0..7).
- les case grises désignent des bits du GPIO non associables aux broches "Arduino" et donc non associables aux lignes du Z80.
GPIO6.png
GPIO6.png (11.19 Kio) Consulté 1894 fois
GPIO7.png
GPIO7.png (9.6 Kio) Consulté 1939 fois
GPIO8.png
GPIO8.png (7.63 Kio) Consulté 1939 fois
GPIO9.png
GPIO9.png (8.09 Kio) Consulté 1939 fois
Donc déjà, il y a bien 4 broches libres.

Je ne sais pas pour vous mais je me dis que l'on pourrait mettre un peu plus d'ordre dans les bits du bus de données en entrée au niveau du port GPIO6 de façon à avoir D0-7 entre les bits 16-23 et n'avoir à faire que "(GPIO6_DR >> 16) & 255" pour lire l'octet de donnée depuis le socle Z80.

On pourrait utiliser le port de direction du GPIO6 pour sélectionner la direction I ou O (un seul registre pour modifier les 8 ) et être capable d'écrire l'octet de donnée vers le socle Z80. Mais il faut alors envisager un tampon supplémentaire pour que /DOE (connecté au /OE du tampon) puisse capturer les D0-7 et les sortir vers le socle Z80. Je me demande si d'utiliser /WR au lieu de /DOE pourrait faire l'affaire après tout. A noter que ALE doit être à 0 avant de passer /DOE à 0 pour ne pas polluer le bus d'adresse externe avec le bus de donnée externe.

On pourrait éventuellement multiplexer D0-7 en lecture avec AD0-7 en écriture et utiliser le ALE (connecté au LE d'un tampon pour activer le latch des adresses A7-0). Juste une incertitude, si j'ai LE = 0 (latch désactivé) et que les AD0-7 sont en lecture (en tant que D0-7 en lecture), est-ce que ça pose quand même un problème pour le tampon qui doit produire du A0-7 vers le socle Z80 ? peut-on juste s'assurer que LE soit mis à 1 si et seulement si les AD0-7 ont été mis en écriture (en tant que A0-7 en écriture) ?

Voilà je vais m'arrêter là pour aujourd'hui. Quand j'aurais plus de temps, je tenterais de faire un schéma avec une redistribution des lignes et des tampons nécessaires que je soumettrais à la sagacité des électroniciens de ce coin de forum.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par hlide »

Premier jet : je ne m'intéresse qu'aux bus d'adresse et de donnée.

Voici ce que pourrait être le port GPIO (le placement des bits autre que AD0..AD7 sont temporaires).
tZ80_GPIO6 (1).png
tZ80_GPIO6 (1).png (11.64 Kio) Consulté 1883 fois
Et voici le schéma (incomplet pour tout autre signal que ceux du bus d'adresse et de donnée) que j'envisage :
Schematic_tZ80_2023-03-21 (1).png
Schematic_tZ80_2023-03-21 (1).png (184.78 Kio) Consulté 1884 fois
Premier point : j'ai six signaux T41_DOEn, T41_QOEn, T41_AOEn, T41_DLE, T41_QLE et T41_ALE pour contrôler les trois tampons mais il faut les considérer comme temporaires car ils dépendent des cas qui peuvent être simplifiés. Oui, ça fait 6 mais j'en ai éliminé 8 en partageant les données lecture et écriture sur les mêmes bits du GPIO6.

Deuxième point : j'ai volontairement mimé la disposition des D0..7 du socle Z80 au niveau des tampons dans l'esprit d'éviter des croisements de lignes au niveau du circuit imprimé. L'idéal étant d'ordonner ces lignes en croisant le moins les lignes entre les tampons et le socle Z80. Au moment de la conception du circuit imprimé, il ne faudrait pas hésiter à bouger ces lignes si nécessaire.

Le logiciel doit s'assurer que le latch (Q/D/QLE) ne puisse être actif que sur l'un des trois tampons en fonction du T-state responsable de leur mise à jour, que les tampons U1 et U2 ne doivent pas être activés (/QOE et /DOE) en même temps pour ne pas avoir deux sorties actives en collision.

Ai-je bon jusqu'ici ou quelque chose ne va pas ?

Alors il manque les A8-15 que j'ai volontairement passé sous silence : le MCLZ8 les sortait directement vers le socle Z80 mais si je dois prendre en compte le /BUSREQ, il me faudra un quatrième tampon qui se partagera T41_AOEn et T41_ALE avec U3.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par hlide »

Z80_PINOUT.png
Z80_PINOUT.png (58.38 Kio) Consulté 1854 fois
Concernant le tri-state, deux cas :
BUSREQ. Bus Request (input, active Low). Bus Request contains a higher priority than NMI and is always recognized at the end of the current machine cycle. BUSREQ forces the CPU address bus, data bus, and control signals MREQ, IORQ, RD, and WR to enter a high-impedance state so that other devices can control these lines. BUSREQ is normally wired OR and requires an external pull-up for these applications. Extended BUSREQ periods due to extensive DMA operations can prevent the CPU from properly refreshing dynamic RAM.

RESET. Reset (input, active Low). RESET initializes the CPU as follows: it resets the interrupt enable flip-flop, clears the Program Counter and registers I and R, and sets the interrupt status to Mode 0. During reset time, the address and data bus enter a high-impedance state, and all control output signals enter an inactive state. RESET must be active for a minimum of three full clock cycles before a reset operation is complete.
Les seules broches concernées par le tri-state :
A15–A0. Address Bus (output, active High, tristate).
D7–D0. Data Bus (input/output, active High, tristate).
IORQ. Input/Output Request (output, active Low, tristate).
MREQ. Memory Request (output, active Low, tristate).
RD. Read (output, active Low, tristate).
WR. Write (output, active Low, tristate).
A noter que le RESET du MCLZ8 ne respecte pas le tristate demandé sur les bus d'adresse et de donnée.

Donc on a quand même la bagatelle de 28 broches qui peuvent être placées en haute impédance. Soit quand même quatre tampons minimum à gérer. Je crains que cela va nous faire monter à cinq ou six au total.
Notator
Messages : 1286
Inscription : 09 août 2015 20:13

Re: [Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par Notator »

Je remarque sur l'avant-dernier message précédent qu'il y a deux 74573 dédiés au bus de données (un pour Data in, un autre pour Data out).

Sachant que le bus de données est positionné soit en entrée, soit en sortie (mais pas les deux en même temps), ne serait-il pas plus judicieux de remplacer ces deux circuits par un unique circuit tampon tri-state bidirectionnel, du genre 74245 ? :wink:
Notator est le nom d'un programme séquenceur Midi et notation musicale pour Atari ST(e) (puis Mac).
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par hlide »

Merci, c'est le genre d'information qui me manque en électronique ;). Je vais regarder ça.

EDIT: c'est exactement ce que je voulais pour le bus de donnée - et un de moins de tampon !
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par hlide »

J'ai modifié le schéma pour intégrer un 245 au lieu de deux 573. J'ai modifié les associations des bus d'adresse et donnée dans les ports GPIO6 et GPIO7 :
GPIO6.png
GPIO6.png (11.44 Kio) Consulté 1803 fois
GPIO7.png
GPIO7.png (10.1 Kio) Consulté 1803 fois
Maintenant pour sortir une adresse, j'ai juste besoin de faire :

Code : Tout sélectionner

// positionner DDIR = 1 et ALE = 1 pour affecter une adresse au bus Z80
GPIO6_GDIR |= 0x00FF0000; // mode OUTPUT
GPIO6_DR = (GPIO6_DR & ~0xC0FF0000) | ((address & 0xC0FF) << 16);
GPIO7_DR = (GPIO7_DR & ~0x3F000000) | ((address & 0x3F00) << 16);
// Z80_D0..7 sera affecté durant ce court lap de temp de "setup" de l'adresse mais ce n'est pas grave.
Pour sortir une donnée :

Code : Tout sélectionner

// positionner DDIR = 1 et ALE = 0 pour écrire une donnée au bus Z80
GPIO6_GDIR |= 0x00FF0000; // mode OUTPUT
GPIO6_DR = (GPIO6_DR & ~0x00FF0000) | ((data& 0x00FF) << 16);
Pour lire une donnée :

Code : Tout sélectionner

// positionner DDIR = 0 et ALE = 0 pour lire une donnée depuis le bus Z80
GPIO6_GDIR &= ~0x00FF0000; // mode INPUT
data = (GPIO6_DR >> 16) & 255;
Je passe les détails sur comment positionner /DOE, /AOE, ALE et DDIR car je n'ai pas encore déterminer quel GPIO utiliser.

Et voici le nouveau schéma (toujours uniquement sur les bus d'adresse et donnée) :
Schematic_tZ80_2023-03-22 (1).png
Schematic_tZ80_2023-03-22 (1).png (118.9 Kio) Consulté 1803 fois
Concernant les contrôles, je note qu'on aura le quadruplet (/RD, /WR, /MREQ, /IOREQ) à faire passer dans un tampon pour gérer le tri-state (donc un /COE mais peut-être juste le LE de ce tampon toujours à 1). Pour le tuple (CLK, /NMI, /INT, /WAIT, /RESET, /BUSREQ), un autre tampon avec /OE = 0 et LE = 1. Ce qui fait... 5 tampons, non ?
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par hlide »

Je n'étais pas tranquille avec cette histoire de sortie d'adresse et de donnée que je trouve un peu conflictuelle. Mais j'avais un vague souvenir d'avoir lu quelque chose sur https://baltazarstudios.com/arduino-zilog-z80/.
Notice the tri-state detection - when the address or data bus is being tri-stated by Z80, the program outputs "--". In fact, the data bus is being tri-stated most of the time! This is a dump from the start of the run. The dumps are normally longer, but you get the idea.

Code : Tout sélectionner

Performing a RESET
Starting the clock
-----------------------------------------------------------+
#001H T1 AB:--- DB:-- RD                                   |
#002H T2 AB:--- DB:--                                      |
-----------------------------------------------------------+
#003H T1 AB:000 DB:-- M1                                   |
#004H T2 AB:000 DB:FB M1 MREQ RD      Opcode read from 000 -> FB
#005H T3 AB:000 DB:-- RFSH                                 |
#006H T4 AB:000 DB:-- RFSH MREQ       Refresh address 000  |
-----------------------------------------------------------+
#007H T1 AB:001 DB:-- M1                                   |
#008H T2 AB:001 DB:ED M1 MREQ RD      Opcode read from 001 -> ED
#009H T3 AB:001 DB:-- RFSH                                 |
#010H T4 AB:001 DB:-- RFSH MREQ       Refresh address 001  |
-----------------------------------------------------------+
Donc en agissant ainsi, on n'aura pas de pollution entre l'adresse et la donnée sur le T41 :
1) /DOE = 1, /AOE = 0, ALE = 1 => L'adresse présentée est enregistrée dans le tampon adresse et est visible sur le bus Z80. Le tampon donnée est en tri-state.
2) /DOE = 0, DDIR = 1, /AOE = 0, ALE = 0 => Le tampon adresse présente la dernière adresse enregistrée au bus Z80. Le tampon donnée sort la donnée en cours sur le bus Z80.
3) /DOE = 0, DDIR = 0, /AOE = 0, ALE = 0 => Le tampon adresse présente la dernière adresse enregistrée au bus Z80. Le tampon donnée lit la donnée depuis le bus Z80.
4) /DOE = 1, /AOE = 1 => les deux tampons sont en tri-state.

Quant au quadruplet (/RD, /WR, /MREQ, /IOREQ) qui ne sont en tri-state que si le /BUSACK est à 0, je me demande si un tampon est vraiment nécessaire. Après tout, je n'aurais qu'un ou deux registres pour manipuler /DOE, DDIR, /AOE et ALE.

A priori, j'aurais deux registres à affecter par broche pour mettre en mode OUTPUT ou INPUTPULLUP (tri-state) plus un accès lecture puis écriture du registre de direction pour ces 4 broches, soit un total de 11 à 12 registres à manipuler si on rajoute les registres pour manipuler /DOE, DDIR, /AOE et ALE. Ce n'est peut-être pas un si grand prix à payer sachant que ça ne sera utilisé que lorsque le /BUSACK change de valeur. Du coup, un tampon n'est plus nécessaire pour ce quadruplet.

On retomberait alors à 4 tampons seulement, le dernier étant pour convertir CLK, /NMI, /INT, /WAIT, /RESET et /BUSREQ de 5 V à 3,3 V et sera activé et "latché" en permanence.
Dernière modification par hlide le 23 mars 2023 00:09, modifié 1 fois.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par hlide »

Argh ! je me suis fait complètement avoir avec la numération du DIP48 pour le Teensys 4.1 et donc je n'ai pas la bonne numérotation et la bonne connexion aux bus d'adresse et de donnée. Je profite de cette correction pour ajouter d'autres connexions et le tampon manquant. Il restera encore d'autres signaux à câbler cependant.
Schematic_tZ80_2023-03-22 (2).png
Schematic_tZ80_2023-03-22 (2).png (142.47 Kio) Consulté 1699 fois
Je me suis rendu compte que je n'avais aucune raison de garder les 6 entrées de contrôle (CLK, /INT, /NMI, /WAIT, /RESET, /BUSREQ) dans le GPIO6 et que je pouvais les mettre en GPIO7.
GPIO6.png
GPIO6.png (10.65 Kio) Consulté 1699 fois
GPIO7.png
GPIO7.png (10.59 Kio) Consulté 1686 fois
Du coup, après l'échange entre GPIO6 et GPIO7, je peux écrire l'adresse ou lire/modifier par le seul port GPIO6 :
1) Ecrire l'adresse :

Code : Tout sélectionner

GPIO6_DR = Z80_SET_AB_MASK | (GPIO6_DR & 0x00003FF3) | (uint32_t(address) << 16);
2) Ecrire la donnée :

Code : Tout sélectionner

GPIO6_DR = Z80_SET_DB_MASK | (GPIO6_DR & 0xFF003FF3) | (uint32_t(data) << 16);
3) Lire la donnée :

Code : Tout sélectionner

GPIO6_DR = Z80_GET_DB_MASK | (GPIO6_DR & 0xFFFF3FF3);
data = ((GPIO_DR >> 16) & 255;
Notator
Messages : 1286
Inscription : 09 août 2015 20:13

Re: [Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par Notator »

Je copie ici une contribution issue d'un autre sujet (le canon pour tuer la mouche) pour ne pas y faire un hors-sujet :
hlide a écrit : 23 mars 2023 18:01
Notator a écrit : 23 mars 2023 16:09 Autre exemple, l'émulateur/sonde de Z80 MCLZ8, qui utilise un Teensy 4.1 pour ce qui est essentiellement de la capture et du multiplexage des broches du Z80.
https://microcorelabs.wordpress.com/202 ... model-iii/
Pas essentiellement de la capture et du multiplexage des broches du Z80 même si c'est à la base. Moyennant des modifications, je l'ai pu tester sur un MZ-80 K qui m'a permis de virtualiser la RAM, la ROM, de précharger des binaires depuis un µSD, etc. Je peux afficher directement une image complète dans la VRAM en deux cycles par octet et ce par trame (60 Hz) sans effet de neige. Je peux charger le BASIC instantanément en RAM depuis le SD (au lieu de lire sur la cassette). En revanche, je ne peux pas lire une cassette car l'émulateur ne respecte pas les cycles exacts non pas en raison du matériel mais parce que le firmware travaille avec des fausses informations de cycles. Je suis en train de réécrire un qui devrait respecter à la lettre le comportement et le cycle.

J'ai pu faire un programme (en ARM) qui traite directement avec le bus Z80 et reproduit mon programme qui vérifie la DRAM très visuellement : super rapide et sans effet de neige ! si ma DRAM ou ma ROM est défectueuse, je peux toujours passer par la mémoire interne du Teensys pour remplacer ces composants.

Ça "répare" donc pas seulement un Z80 mais les DRAM et ROM, d'essayer plusieurs versions de ROM. Un gain réel pour du développement croisé.

A terme on peut aussi imaginer la possibilité de déboguer via un terminal USB en ajoutant ce qu'il faut au firmware.
Vraiment, c'est très intéressant tout ça, et je suivrai l'évolution de ton travail de près. :)
Notator est le nom d'un programme séquenceur Midi et notation musicale pour Atari ST(e) (puis Mac).
Notator
Messages : 1286
Inscription : 09 août 2015 20:13

Re: [Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par Notator »

Pareil, je rapatrie ici ce qui concerne ce sujet :
pascalien a écrit : 23 mars 2023 19:16 Alors, j'ai pas bien compris ce que fait le Teensy.
Il est où le Z80?
Qui exécute les instructions?
Quand le Z80 est en place, c'est lui qui exécute les instructions, et le MCLZ8 espionne tout ce qu'il se passe sur ses broches.
Quand le Z80 n'est pas en place, le PC derrière le MCLZ8 émule le Z80 et se substitue à lui.

J'espère que j'ai bien compris là le principe de fonctionnement du MCLZ8, sinon Hlide qui maintenant le connait bien, rectifiera si besoin. :wink:

Edit : je corrige, car j'ai écrit une bêtise plus haut : en mode émulateur, le MCLZ8 est autonome (donc sans PC branché); c'est seulement en mode 'espion' que le PC est branché sur le MCLZ8.
Dernière modification par Notator le 23 mars 2023 22:49, modifié 1 fois.
Notator est le nom d'un programme séquenceur Midi et notation musicale pour Atari ST(e) (puis Mac).
Bernouilli92
Messages : 1254
Inscription : 24 déc. 2021 09:46
Localisation : Région parisienne

Re: [Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par Bernouilli92 »

Il doit aussi être possible d'émuler le z80 dans le teensy non?
Et avoir ainsi un remplacement du z80, avec certaines améliorations.
Notator
Messages : 1286
Inscription : 09 août 2015 20:13

Re: [Z80] Recréation du circuit électronique MCLZ8 souhaitable ?

Message par Notator »

Oui, son concepteur affirme que le MCLZ8 peut remplacer 'tout seul' (sans PC branché) un Z80. A vrai dire, je n'ai pas trop prêté attention à ce mode, car je ne vois pas trop l'intérêt.
Si un Z80 est douteux, il est bien plus facile d'en mettre un autre sur son support, pour tester...

Quant aux "améliorations", pas sûr. Il faudrait être sûr que le Teensy arrive à respecter les timings propres aux instructions du Z80.
Et d'après les relevés de Hlide, qui a ausculté la bête, à l'heure actuelle il y a des problèmes de timing :
viewtopic.php?f=31&t=14046&p=224798#p224798

Et puis, selon la vitesse du Z80 d'origine (il y en a pas mal qui pédalent à 4 MHz, moins souvent à 6 MHz), est-ce qu'il pourrait pédaler à la même, en émulateur ?

De plus, si jamais il pouvait tourner plus vite que le Z80 d'origine, pas sûr que les circuits derrière arriveraient à suivre (s'il faut rajouter plein de wait states pour que notamment les mémoires puissent suivre, où est l'amélioration ?). :wink:
Dernière modification par Notator le 23 mars 2023 22:37, modifié 2 fois.
Notator est le nom d'un programme séquenceur Midi et notation musicale pour Atari ST(e) (puis Mac).
Répondre