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 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.