[En cours] Projet MZ-700 ROM/DISK - V1.x

Placez ici vos trucs et astuces, étalez sans retenue votre savoir-faire et votre science qui va nous permettre de redonner une apparence neuve et fonctionnelle à nos bouzes.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
Falkor
Messages : 1701
Inscription : 28 juin 2010 12:09
Localisation : Cluny, Saône et Loire

Re: [En cours] Projet MZ-700 EPROM/DISK

Message par Falkor »

hlide a écrit : 13 sept. 2019 23:48@Falkor, tu m'as parlé de rajouter des capacités à chaque IC, c'est bien ça ? il faut que j'en mette un entre +5V et GND sur U1, U2 et U3 ?
Oui ! :) Au plus près du circuit concerné.

Ton résultat est chouette... N'hésites pas à ajouter un second plan de masse sur ta couche supérieure !
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [En cours] Projet MZ-700 ROM/DISK - V1.x

Message par hlide »

Hop, j'apporte des nouvelles.

J'avais reçu dans la semaine 5 circuits imprimés de la version 1.0. J'ai donc monté un.
IMG_20190928_135910-small.jpg
IMG_20190928_135910-small.jpg (718.95 Kio) Consulté 3669 fois
IMG_20190928_135957-small.jpg
IMG_20190928_135957-small.jpg (511.32 Kio) Consulté 3669 fois
Alors oui, j'avais quand même finalement un problème avec l'interrupteur de sélection d'imprimante interne/externe qui était sur la passage. j'ai donc dû placer une pile de deux socles supplémentaires pour faire remonter le circuit. Pour commencer, je n'ai testé que la partie ROM d'origine car ce serait très ennuyeux que cela ne fonctionne pas. Donc un cavalier sur B. Je n'ai raccordé que les quatre signaux de contrôle (/RD, /WR, /R1 et /RESET) quoique le /R1 n'était pas strictement nécessaire car c'est /CS sur IN A,($FF).
IMG_20190928_154206-small.jpg
IMG_20190928_154206-small.jpg (944.92 Kio) Consulté 3669 fois
Donc après mise en fonction du MZ-700, j'ai toujours bien accès à la ROM monitor d'origine. Bonne nouvelle donc.

Parallèlement à ça, j'ai récupéré le source de EmuZ-700 (un émulateur) et procédé à quelques changements pour ajouter l'émulation de cette carte avec soit une NOR-Flash de 512 Ko (SST39SF040), soit une nvRAM de 256 Ko (principalement pour tester le principe car plus simple à écrire an nvRAM qu'en Flash). Je vais dans un premier temps me contenter de la nvRAM (j'ai aussi le composant électronique) pour mettre au point les logiciels.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [En cours] Projet MZ-700 ROM/DISK - V1.x

Message par hlide »

Ah purée !

La doc du LS273 était tellement merdique que je n'ai pas pensé à vérifier que ce que le N après 273 signifiait.

Après avoir vérifié avec un TL866 que le LS273N et le SST39SF040 fonctionnaient individuellement, j'étais coincé depuis un moment sur mon projet : même en programmant la page 0 du SST39SF040 pour contenir la ROM d'origine, ça ne démarrait pas.

j'ai décidé de sortir un LA1010 qui était dans un carton pour vérifier la sortie du LS273N :

- canal 0 : signal /R1, celui qui joue le rôle de "chip select" quand on fait un LD A, page : IN A, (255) ou un LD BC,(page<<8)|255 : IN A,(C) et permet de sélectionner la page 4 Ko accessible du SST39SF040.
- canal 1 : signal de sortie Q0 du LS273N représentant le bit 0 de la page sélectionnée.
- canal 2 : signal de sortie Q1 du LS273N représentant le bit 1 de la page sélectionnée.
- canal 3 : signal de sortie Q2 du LS273N représentant le bit 2 de la page sélectionnée.
- les autres sorties Q3 à Q7 sont ignorées.

Depuis le monitor de la ROM d'orgine, j'écris un petit programme pour sélectionner la page 1 :
LS273N.png
LS273N.png (43.88 Kio) Consulté 3605 fois
les autres signaux au front montant du canal 0 sont à la bonne valeur. Ah mais, attendez ! il y a un truc qui cloche : les signaux étaient à l'état haut à l'initialisation !? grogneugneu ! chaque fois que je fais une recherche sur LS273N, j'obtiens le PDF d'un LS273 et j'ai bêtement supposé que les sorties étaient basses à l'initialisation comme l'indiquait la doc.

En vérité, le LS273N me sort une page 127 par défaut (à chaque initialisation) et donc ma machine cherchait à démarrer depuis la page 127 au lieu de la page 0 quand j'activais le SST39SF040 au lieu de la ROM d'origine.

Donc j'ai deux choix :

- changer le LS273N par un LS273, mais là je n'en ai pas et ça va coûter soit du temps (sites chinois) soit cher (mouser.fr) en terme de livraison.

- continuer avec le LS273N et réserver la page 127 pour contenir le programme de démarrage et mettre le contenu de la rom d'origine en page 0 qui n'aura plus besoin d'être "patché" pour le démarrage.
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17424
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: [En cours] Projet MZ-700 ROM/DISK - V1.x

Message par fneck »

En tout cas le circuit est très propre, c'est du beau travail 8)
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [En cours] Projet MZ-700 ROM/DISK - V1.x

Message par 6502man »

Tu as pu tester en mettant ton programme de démarrage en page 127 ?

Ca fonctionne ?
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [En cours] Projet MZ-700 ROM/DISK - V1.x

Message par hlide »

Oui, en copiant le monitor d'origine (sans patch) dans tous les pages (pour simplifier la manipulation), je démarre sans problème. La probabilité que ce soit la page 127 est assez évidente du fait qu'à l'initialisation tous les bits de sélection de page sont à 1.

Donc ce n'est pas le timing de lecture de la FLASH qui est en cause. Ça ne me dérange pas que ce soit en page 127, car je pourrais mettre une monitor d'origine en page 0. La page 127 servira d'IPL.

Par contre, je n'ai pas réessayé mon programme d'installation (Le µSD de 64 Go ne veut pas être lu avec l'Unicard et je ne retrouve pas mon µSD que j'utilisais avant et qui fonctionnait bien). Le programme d'installation se lançait en RAM et vérifiait le modèle de la FLASH après que l'on lui ait signifiée que la FLASH est active (switch A/B) : le test échouait. Je ne vois pas trop comment le problème du LS273N pourrait jouer là-dedans.

Soit il y a un problème avec le timing d'écriture en FLASH pour les commandes. Soit mes commandes sont fausses même si j'ai repris à partir de leur documentation (source en C et 8086). De souvenir, il y a 150 µs à attendre après la suite de commandes avant de lire le modèle : j'utilise la détection du toggle bit (un graphe de la documentation semblait indiquer qu'on pouvait l'utiliser après l'accès à l'ID du FLASH) - ça peut être ça le problème et donc il faudrait que j'attende réellement plus de 150 µS (je déteste les solutions qui comptent les cycles du CPU pour faire une pause et je voyais ce toggle bit comme un moyen raisonnable de s'en affranchir).
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [En cours] Projet MZ-700 ROM/DISK - V1.x

Message par hlide »

J'ai reçu mes circuits imprimés V1.2.
IMG_20191129_234953.jpg
IMG_20191129_234953.jpg (845.36 Kio) Consulté 3548 fois
IMG_20191129_234948.jpg
IMG_20191129_234948.jpg (960.19 Kio) Consulté 3548 fois
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [En cours] Projet MZ-700 ROM/DISK - V1.x

Message par hlide »

Raaaaahhhh je suis dépité !!!

J'ai trouvé la raison pour laquelle toute opération requérant une écriture d'un octet sur le SST39SF040 est vouée à l'échec. En analysant les signaux suivants :

Code : Tout sélectionner

- canal 0 : Z80./WR  -> SST39SF040./WR 
- canal 1 : Z80.A0   -> SST39SF040.A0
- canal 2 : Z80.A1   -> SST39SF040.A1
- canal 3 : Z80.D0   -> SST39SF040.D0
- canal 4 : Z80.D1   -> SST39SF040.D1
- canal 5 : Z80./RD  -> SST39SF040./OE
- canal 6 : LSI./CS0 -> SST39SF040./CE
je me suis aperçu que le signal LSI./CS0 ne se met à l'état bas actif que lors des lectures d'octet et n'est pas actif lors des écritures. Effectivement le schéma fonctionnel assez rudimentaire du LSI le stipule. Le nom du signal étant RDN, je n'avais pas fait le rapprochement avec /RD. :sigh:

Donc pour le moment je ne peux pas ajouter la fonctionnalité de la programmation in situ du SST39SF040. :evil:

Soit dit en passant, je n'utilise que 7 bits sur les 8 pour la sélection de page. Le bit du poids le plus fort n'est pas utilisé car il n'y a pas de SST39SF080 (1 Mo) donc il est libre. J'imaginerais bien l'utiliser pour indiquer une écriture, genre si je mets ce bit à 0, j'indique une volonté d'écrire :
  • bit 7 à 0: Z80./WR -> SST39SF040./CE
  • bit 7 à 1: LSI./CS0 -> SST39SF040./CE
Par défaut ce bit est à 1 (74LS273N -> 1 en sortie par défaut).

Du coup, j'aurais quelque chose comme : LSI./CS0 AND (Z80./WR OR 74LS273N.8Q) -> SST39SF040./CE.

Quelqu'un aurait une idée plus subtile n'imposant pas l’ajout de 74xx (je sais par exemple que l'on peut obtenir un ET avec des diodes en parallèle...) ?
no_cs0_active_when_wr_active.png
no_cs0_active_when_wr_active.png (131.37 Kio) Consulté 3529 fois
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [En cours] Projet MZ-700 ROM/DISK - V1.x

Message par hlide »

Sauf si quelqu'un a une bien meilleure idée, je viens de voir que je peux faire une porte ET et OU de la façon suivante :
Porte ET avec diodes.png
Porte ET avec diodes.png (5.35 Kio) Consulté 3526 fois
Porte OU avec diodes.png
Porte OU avec diodes.png (4.96 Kio) Consulté 3526 fois
Donc il me faudrait 4 diodes et 2 résistances pour faire LSI./CS0 AND (Z80./WR OR 74LS273N.8Q). Les résistances ne sont pas un problème. Les diodes je sais que j'en ai, il faut juste les retrouver.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [En cours] Projet MZ-700 ROM/DISK - V1.x

Message par hlide »

Donc j'imagine couper la trace entre le LSI./CS0 et FLASH./CE pour insérer ce petit circuit :
LSI.CS0n AND (273N.8Q OR Z80.WRn).png
LSI.CS0n AND (273N.8Q OR Z80.WRn).png (8.63 Kio) Consulté 3514 fois
Ça vous semble bien ? bien évidemment, au niveau code, il faudra que je m'assure de ne pas de faire des écritures ailleurs que dans le FLASH quand le bit du poids le plus fort du sélecteur de page est à 0 et avec les interruptions désactivées. L'écriture des pages du FLASH doit être exceptionnel (il ne faudrait pas en abuser) et le bit devra être à 1 dans le cas nominal.
Fred_72
Messages : 1131
Inscription : 22 mai 2019 13:10
Localisation : Sarthe

Re: [En cours] Projet MZ-700 ROM/DISK - V1.x

Message par Fred_72 »

Non ça ne marche pas :(
Les 2 résistances forment un pont diviseur de tension et donc au lieu de 0V pour FLASH /CE lorsque LSI /CS0=1 et 273N=0 et Z80 /WR=0 tu as environ Vcc/2 (en supposant que la flash ne consomme pas de courant).
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [En cours] Projet MZ-700 ROM/DISK - V1.x

Message par hlide »

Ah si ça ne marche pas, il faut que je fasse quoi pour éviter le recours aux 74xx ?

Edit: je vois effectivement le pont diviseur si du courant passe entre le +5 et la masse, on a une tension divisé par 2. :(
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [En cours] Projet MZ-700 ROM/DISK - V1.x

Message par hlide »

Bon si je mets une résistance 75K en R1 (5V) et je garde 10K en R2 (GND), j'aurais une sortie de 0.59 V or d'après la documentation du FLASH, on a un VIL avec une tension en dessous de 0,8V. C'est bon ?

Code : Tout sélectionner

--------+-------+-------+---------
LSI./CS0|Z80./WR|273N.8Q|FLASH./CE
 0      |0      | 0     | impossible         
 0      |0      | 1     | impossible        
 0      |1      | 0     | 0 (~0V)         
 0      |1      | 1     | 0 (~0V)         
 1      |0      | 0     | 0 (~0,59V)         
 1      |0      | 1     | 1 (~5V?)         
 1      |1      | 0     | 1 (~5V?)         
 1      |1      | 1     | 1 (~5V?)         
--------+-------+-------+---------
Fred_72
Messages : 1131
Inscription : 22 mai 2019 13:10
Localisation : Sarthe

Re: [En cours] Projet MZ-700 ROM/DISK - V1.x

Message par Fred_72 »

Non car tu oublies que la diode a une tension de seuil de 0.7V donc en réalité tu as 1.2V. De plus, on suppose que la FLASH n'absorbe pas de courant ce qui n'est pas forcément vrai selon sa technologie de fabrication.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [En cours] Projet MZ-700 ROM/DISK - V1.x

Message par hlide »

Bon ok, je ne suis pas électronicien. Pour que le courant passe dans une diode il faut non seulement qu'elle soit dans la bonne direction mais aussi que la tension soit supérieure à 0,7 V à cause du silicium ? et donc il faudrait que j'ai une tension de sortie comprise en 0,7 V et 0,8 V pour que cela puisse transiter entre les 5V et la masse et que ça soit considéré comme un état 0 de sortie par le FLASH ?
Dernière modification par hlide le 02 déc. 2019 13:30, modifié 1 fois.
Répondre