[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

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 »

Oui c'est ça, une diode silicium c'est 0.7V.
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 rajoute en parallèle une deuxième résistance :
1) Porte AND, R1 = 10K
2) Porte OR, R2 = 2,2K et RL = 10K

J'obtiens pour une entrée de 5V, du 0,76V en sortie. Je l'accorde, c'est vraiment chaud pour obtenir une tension entre 0,7 et 0,8.

Sinon autre possibilité :

1) 0 -> FLASH./CE --- ou --- 273N.8Q AND LSI./CS0 -> FLASH./CE (2 diode et une résistance pour 5V)

2) A12 OR A13 OR A14 OR A15 OR 273N.8Q OR Z80./WR -> FLASH./WR (6 diodes et une résistance pour la masse)

3) LSI./CS0 -> FLASH./RD

Résultat :

1) Le CE su socle de la ROM d'origine est connecté à la masse. J'avais changé pour que ce soit LSI./CS0 qui alimente les CE des ROM A et B. C'est moyen de le laisse à la masse mais ai-je le choix ? sinon l'alternative permettrait de garder le LSI./CS0 pour activer le CE si 273N.8Q est 1 (cas nominal).

2) L'écriture d'un octet est conditionnée par l'adresse comprise entre $0000 et $0FFF, le bit 273N.8Q à 0 (cas exceptionnel autorisant l'écriture). Une contrainte : il ne faudra pas que la zone $0000-$0FFF soit mappé en DRAM durant l'écriture sans quoi il y aurait conflit d'accès.

3) la lecture d'un octet se fera comme à l'origine.
Dernière modification par hlide le 02 déc. 2019 13:58, modifié 1 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 »

Ou plus simplement :

1) 273N.8Q AND LSI./CS0 -> FLASH./CE (2 diode et une résistance pour 5V)

2) A12 OR A13 OR A14 OR A15 OR Z80./WR -> FLASH./WR (5 diodes et une résistance pour la masse)

3) LSI./CS0 -> FLASH./RD

Résultat :

1) Cas nominal : on active par LSI./CS0 (seulement possible en lecture ROM $0000-$0FFF). Cas exceptionnel : on active en permanence par 273N.8Q = 0. Il faudra faire attention de ne pas mettre ce 273N.8Q à 0 quand la rangée $0000-0FFF est "bank-switchée" en DRAM.

2) Ne sera effective que si 273N.8Q = 0, donc on peut maîtriser l'écriture dans un cadre exceptionnel.

3) Cas nominal d'utilisation.
Avatar de l’utilisateur
Totor le Butor
Messages : 2224
Inscription : 07 sept. 2011 16:14
Localisation : Paris - Mezels

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

Message par Totor le Butor »

Normalement le N indique un boitier DIL plastique et n'a rien à voir avec le mode de fonctionnement du circuit.

Par contre, si tu as un 1 à la sortie du 273 à l'init c'est peut être que son reset sur la patte 1 est trop rapide :shock: .
Tu peux tenter d'augmenter la durée du reset d'environ 10mS sur le 273 en connectant un petit condo de 1 µF entre la patte 1 et le 0v :wink: .
Concernant les portes OU et ET fabriquées avec des diodes, ça fonctionne bien tant qu'on n'associe pas plusieurs fonctions et que les timings ne sont pas critiques.
Les niveaux de sortie deviennent instables et sont très largement influencés par les circuits aux alentours ainsi que les temps de transfert de niveaux qui peuvent atteindre plusieurs dizaines de nanosecondes :? .

En bref, ton montage risque de ne pas être reproductible et/ou d'avoir des comportements instables :cry: .
Born to bricole
[Rch] Vieux composants électroniques et circuits intégrés toute époque et vieilles cartes .
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 »

@Totor le butor

Merci pour l'explication éventuelle sur le RESET sans doute trop rapide. Ce weekend je tenterais une analyse du /RESET et du /CLK et je posterais ici le résultat.

Pour les portes de diodes, il est est clair que je ne vais pas tenter des combinaisons. La dernière solution devrait bien séparer la porte ET et la porte OU pour que leur sorties se connectent à des entrées différentes du FLASH. Pour les niveaux timing ce devrait être bon je pense. Rien que la période d'un LSI./CS0 est aux alentours de 700 à 800 ns si je me souviens bien (insertion d'un "wait state" automatique par le LSI). L'accès du CPU est vraiment très lent par rapport au FLASH à 70ns.
gotcha
Messages : 2759
Inscription : 30 mars 2017 11:39
Localisation : Isère
Contact :

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

Message par gotcha »

Totor le Butor a écrit : 02 déc. 2019 15:14 Concernant les portes OU et ET fabriquées avec des diodes, ça fonctionne bien tant qu'on n'associe pas plusieurs fonctions et que les timings ne sont pas critiques.Les niveaux de sortie deviennent instables et sont très largement influencés par les circuits aux alentours
En effet. Pour associer/cascader des fonctions logiques simples, il faut généralement y mettre aussi quelques transistors pour s'assurer une haute impédance en entrée et une faible en sortie. De ce fait, les niveaux de tension deviennent plus ou moins indépendants de la consommation de courant en sortie et de la capacité de celui qui fournit l'entrée a délivrer du courant.

Tes ET/OU me font un peu penser à la logique DL (Diod Logic) qui a été amélioré par la DTL (Diod Transistor Logic) qui elle même est je crois l’ancêtre du TTL (Transistor Transistor Logic):
- https://en.wikipedia.org/wiki/Diode_logic
- https://en.wikipedia.org/wiki/Diode%E2% ... stor_logic

Au final, j'ai quand même l'impression qu'utiliser des portes TTL pourrait être plus simple, surtout si tu ne veux pas aller trop loin dans la compréhension de l’électronique analogique :wink:
Amstrad CPC et Goupil power :mrgreen:
Bénévole à l'association pour un conservatoire de l’informatique et de la télématique (https://www.aconit.org)
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 »

Après, au pire, ce projet pourra toujours fonctionner comme l'original (lecture uniquement, 64 Ko) mais étendu à 512 Ko et avec la possibilité de changer la page de ROM à exécuter ce que l'original ne permet pas de faire.
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 »

Je suis un idiot !

Je ne récupérais pas le bon /RESET ! je récupérais le CLK du 273 IC 4H (port de sortie data printer) au lieu du /CLR !

Bref, une fois cette bévue corrigée (je n'en reviens pas d'avoir fait cette connerie...), tout fonctionne comme prévu - à savoir que le /CLR = 0 met bien à 0 les sorties, que le front montant de /CLK met bien à jour 7Q avec la valeur de 7D.

Donc reste à trouver une solution pour l'écriture en FLASH.
LS273 correct.jpg
LS273 correct.jpg (189.58 Kio) Consulté 3300 fois
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 »

Ok...
Comme ça on comprend mieux le comportement étrange de ce circuit. :)
Avatar de l’utilisateur
Totor le Butor
Messages : 2224
Inscription : 07 sept. 2011 16:14
Localisation : Paris - Mezels

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

Message par Totor le Butor »

hlide a écrit : 08 déc. 2019 14:19 Je suis un idiot !
Alors on est 2 mais très certainement beaucoup plus :wink: , en tous cas moi aussi j'en ai fait de belles, du style... euh...non , non je ne dirais rien j'ai trop honte :lol:.
Born to bricole
[Rch] Vieux composants électroniques et circuits intégrés toute époque et vieilles cartes .
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 »

Voici le dernier schéma électronique (j'ai supprimé le poste précédent) :

- Au revoir le signal /RD, j'utilise /CS0 ($0000-0FFF) pour affecter à la fois /OE et /CE en vue d'une lecture sur le 2732 ou le FLASH.
- Au revoir le signal /WR, j'utilise /MW (signal à 0 sur la carte mère si /WR = 0 et /MREQ = 0)et A[15..12] = 0 pour affecter /WE en vue d'une écriture sur le FLASH. Si la page sélectionnée a le bit de poids le plus fort à 1, l'écriture sur le FLASH est verrouillée (j'aurais préféré l'inverse).
- "Porte ET" : /CS0 = 0 ou LS273.8Q = 0 -> /CE = 0 sur FLASH. La lecture est protégée par la nécessité d'avoir /OE = 0 si et seulement si /CS0 = 0. L'écriture est protégée si et seulement si l'adresse n'est pas dans l’intervalle $0000-0FFF donc interdiction de faire une écriture si le mapping DRAM est activé sur cette intervalle (conflit entre DRAM et FLASH sinon).
- "Porte OU" pour créer /WE dans l’intervalle $0000-0FFF.
ROMDISK piggyback.png
ROMDISK piggyback.png (54.83 Kio) Consulté 3260 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 »

Tentative sous Fritzing (merdique à souhait à utiliser !) :
MZ-700 ROMDISK PIGGYBACK Sketch_bb.jpg
MZ-700 ROMDISK PIGGYBACK Sketch_bb.jpg (317.4 Kio) Consulté 3199 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 »

Alors, j'ai fait le circuit... et ce n'est pas très concluant. Donc j'abandonne l'idée de piggyback.

J'ai du 74LS138N. Avec ça, je pourrais détecter une tentative d'accès en $0000-$0FFF qui est habituellement la zone ROM du moniteur.

Il y a un MAIS : on peut sélectionner de la RAM à cet endroit via un OUT ou revenir à la ROM du moniteur via un autre OUT.

Je n'ai pas accès au latch qui mémorise l'inhibition DRAM à cet endroit et je n'ai pas envie d'embarquer tout un système pour l'émuler.

Par contre, si on fait une lecture à cet endroit on aura /CS0 = 0 si ROM sélectionnée ou /RAS = 0 si DRAM sélectionnée. En écriture à cet endroit on aura rien si ROM sélectionnée ou /RAS = 0 si DRAM sélectionnée.

La ROM d'origine aura le /OE et le /CE sur le signal /CS0B (si un cavalier ferme /CS0 et /CS0B).

La FLASH aura le /WE sur /MW (0 si /WR & /MREQ à 0), /OE sur /CS0A (si un cavalier ferme /CS0 et /CS0A) et /CE sur la sortie /Y0 de ce 74LS138N.

La sortie 74LS138N./Y0 est 0 si et seulement si :
- 74LS138N.A = A12 (donc 0)
- 74LS138N.B = A13 (donc 0)
- 74LS138N.C = A14 (donc 0)
- 74LS138N./G2A = A15 (donc 0)
- 74LS138N./G2B = /MREQ (donc 0)
- 74LS138N.G1 = /RAS (donc 1, c'est à dire aucun accès à la DRAM)

J'ai mesuré l'écart des signaux /MREQ et /RAS à 0 comme étant d'une période de 20 ns. La doc du SST39SF040 stipule que ses signaux /CE et /WE à 0 doivent être au minimum d'une période de 40 ns chacune pour être viables. Donc si la DRAM est sélectionnée, /Y0 passera à 0 pendant seulement 20 ns. Or non seulement le /CE du FLASH passera à 0 que pendant 20 ns mais en plus les /OE et /WE seront à 1 pendant cette période : le FLASH ne devrait pas initier une lecture ou une écriture dans ce cas précis. Autrement, si la ROM est sélectionnée, le signal /CE du FLASH sera à 0 durant toute la période où /MREQ = 0 (avec A12..15 = 0 bien sûr) et ce sera largement suffisante pour permettre une lecture ou écriture du FLASH.

@fred_72, @6502man, @Tutor le Butor : vous en pensez quoi ? j'ai bon pour l'analyse ?
temps (MREQ0 - RAS0) 20 ns, (MREQ0 - MW0) 300 ns.png
temps (MREQ0 - RAS0) 20 ns, (MREQ0 - MW0) 300 ns.png (63.44 Kio) Consulté 3174 fois
Avatar de l’utilisateur
Totor le Butor
Messages : 2224
Inscription : 07 sept. 2011 16:14
Localisation : Paris - Mezels

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

Message par Totor le Butor »

Je ne suis pas sûr d'avoir tout compris par rapport à ton souhait de base (rom et ramdisk dans une flash) :?: .

Avec le LS138 tu sélectionnes la flash (/CE de la flash sur le Y0 du ls138) uniquement dans un espace de 4K aux adresses 0 à 0FFF.
En dehors de ces adresses la flash ne sera jamais accessible :? .

[edit] Je viens de lire le datasheet de la flash et je viens d'apprendre que l'écriture ne se fait pas comme dans de la ram (présentation adresse et donnée), il faut envoyer une séquence bien précise avant de vouloir écrire.

Any Program operation requires the inclusion of aseries of three-byte sequence. The three-byte load sequence is used to initiate the Program operation,providing optimal protection from inadvertent Write operations, e.g., during the system power-up orpower-down. Any Erase operation requires the inclusion of six-byte load sequence.
Born to bricole
[Rch] Vieux composants électroniques et circuits intégrés toute époque et vieilles cartes .
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 »

@Totor le Butor

Oui la programmation se fait par une séquence d'octet et d'adresse en écrivant les octets. Tout ça, j'ai validé avec un émulateur open source EmuZ-700 que j'ai adapté pour ajouter l'émulation du SST39SF040.

Le LSI qui fait le décodage d'adresse crée le signal /CS0 = 0 dans la plage $0000-$0FFF en lecture seulement (/RD = 0) mais ne fait rien si c'est une écriture (/WR = 0). Et c'est vrai si on n'a pas fait la demande de "mapper" la DRAM à la place, parce qu'alors j'aurais /RAS = 0 au lieu de /CS0.

La lecture du FLASH sur les 128 secteurs fonctionnent. Je mets le numéro de secteur dans A et je fais IN A,($FF) et le LS273 enregistre le secteur souhaité, une lecture dans la zone $0000-$0FFF lira un octet dans le secteur souhaité de la flash. C'est possible parce que les entrées A12..18 de la flash sont fournies par les sorties du LS273.

L'écriture dans le FLASH n'est pas possible avec le signal /CS0 donc je dois pailler : décoder l'adresse quand j'ai /MREQ = 0 et /RAS = 1 (pas un accès DRAM retourné par le décodage du LSI) via le LS138 pour retourner un équivalent du /CS0 mais utilisable par la FLASH en lecture comme en écriture quand l'adresse est entre $0000 et $0FFF.
Répondre