[MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

C'est la catégorie reine de l'ordinophile, 8 bits et pas un de plus!
Single board ou bus S-100 acceptés.

Modérateurs : Papy.G, fneck, Carl

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

[MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par hlide »

Je suis tombé sur une énigme en voyant cette modification de la ROM dans un lien eBay vendant un MZ-731:
MZ700-ROMMOD2.jpg
MZ700-ROMMOD2.jpg (77.24 Kio) Consulté 3692 fois
Avant toute chose, en $0000-$0FFF, on a la ROM monitor. D'après le lien, c'est remplacé par un IPL au démarage qui permet de choisir une action :
- lancer un programme depuis une cassette
- monitor (original)
- debuggeur/assembleur
- BASIC
- PASCAL
- Commodore Floppy (l'autre mod qui permet de lire/écrire sur un lecteur floppy de Commodore en IEC)
- etc.

Une action entraînerait une copie de pages en ROm en RAM avant lancement. Pour le monitor, ce serait sans doute une sélection directe de la page.

Premier constat : il y a très peu de composant ! et le vendeur m'a bien confirmé qu'il y a bien une sélection de 16 pages de 4Ko pour une ROM qui ne peut être accessible qu'en $0000-$0FFF ! mais sans entrer dans les détails :(.
Ok, on voit deux 74LS175 et un 27C512. Je comprend enfin que l'un des 74LS175 est l'original qui est sur la carte mère, appelé IC-4J. Or ce composant est mis à contribution pour un port parallèle/imprimante si on regarde cette partie du schéma:
IC4J.png
IC4J.png (314.15 Kio) Consulté 3692 fois
On notera qu'il n'y a que deux entrées-sorties connectées au lieu de quatre et qu'elles sont déjà utilisée. Les deux restantes sont inutilisables car non connectées a priori.

Donc en fait, la ROM s'enfiche en IC-5H et le LS175 original dans IC-4J. A quoi peut donc servir le second LS175 ?
J'ai émis une hypothèse et je vous le partage - en sachant que c'est une possibilité : le signal /WO qui rentre dans le CLOCK du premier LS175 pourait aussi rentrer dans le second LS157 (ce signal est actif quand on fait OUT ($FE),A). Ou utiliser l'une des deux sorties du premier LS175 en CLOCK (sauf que c'est idiot après coup). J'ai choisi de sélectionner une page définie dans les bits 0, 1, 2 et 3 de A. Voici un schéma se concentrant uniquement sur comment on sélectionne la page et comment on peut accéder à toutes les pages :
MZ700-64KB-ROM.png
MZ700-64KB-ROM.png (222.66 Kio) Consulté 3674 fois
C'est idiot ? ou c'est jouable ?

Ce qui me dérange par contre, c'est le conflit entre l'imprimante et la sélection de page.

EDIT: utiliser une sortie du premier LS175 en clock du second LS175 me paraît absurde après relecture. Il faut juste connecter les signaux clock entre les deux LS175 en fait.

EDIT2:
La ROM originale ne fait que 4Ko et son socle ne permet pas d'adresser au-delà de 4 Ko d'autant que le LSI (une sorte de GATE ARRAY) ne décode qu'un ROM de 4 Ko en début d'espace mémoire. En clair le signal /CS0 (ROM) n'est actif que sur $0000-$0FFF.
Dernière modification par hlide le 01 sept. 2019 18:15, modifié 6 fois.
Daniel
Messages : 17410
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par Daniel »

Ce mot anglais "schematics" dans un texte en français pourrait avantageusement être remplacé par schéma.
A chaque fois que je lis schematics ça me donne des tics, mon cerveau fait tilt et je perds le fil de la phrase.

hlide a écrit : 01 sept. 2019 14:30 on voit deux 74LS157...
On voit deux 74LS175.
Dernière modification par Daniel le 01 sept. 2019 15:25, modifié 1 fois.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
hlide
Messages : 3495
Inscription : 29 nov. 2017 10:23

Re: [MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par hlide »

c'est fait - surtout que ce n'était pas réellement un dans le sens usuel. J'utilise le mot <censuré> comme j'utilise PCB pour désigner exactement ce que c'est, schéma étant trop vague...
Avatar de l’utilisateur
hlide
Messages : 3495
Inscription : 29 nov. 2017 10:23

Re: [MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par hlide »

Après réflexion : j'ai restreint les possibilités au signal /WO entrant dans le second. Pourquoi ? parce que si je connecte ce clock sur le signal de sortie du premier, il me faudrait faire un deuxième OUT en $FE pour remettre le bit 7 (ou 6) à 0, ce qui est idiot en fin de compte. Donc il y a de très forte chance que ce soit /WO au final.
Daniel
Messages : 17410
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par Daniel »

Cambridge Dictionnary a écrit :Shematic : A drawing or plan that shows the details of how something operates or is put together
Larousse a écrit :Schéma : Dessin, tracé figurant les éléments essentiels d'un objet, d'un ensemble complexe, d'un phénomène, d'un processus et destinés à faire comprendre sa conformation et/ou son fonctionnement
Il n'y a aucune différence de sens.

Pour PCB, il existe aussi un mot français : circuit imprimé.

Le schematics du PCB, c'est ni anglais, ni français et incompréhensible pour les non initiés.
Le schéma du circuit imprimé, c'est français, compréhensible même si on n'est pas électronicien.

Tous ces mots anglais ne me choquent absolument pas s'ils sont utilisés dans des textes anglais. Par contre le mélange des langues est difficile à supporter pour les oreilles un peu chastes (comme les miennes).
Dernière modification par Daniel le 01 sept. 2019 15:48, modifié 1 fois.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
hlide
Messages : 3495
Inscription : 29 nov. 2017 10:23

Re: [MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par hlide »

Et ? tu comptes continuer sur ce registre ? j'ai déjà procédé aux modifications. Je serais plus intéressé à savoir si le schéma que j'ai dessiné fait sens ou pas pour la sélection d'une page de ROM ou si j'ai raté quelque chose.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3051
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: [MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par Papy.G »

Bon, premièrement, on va se détendre, je suis d'accord sur le fait qu'il est agaçant de voir des mots en Anglais dans un texte Français quand il existe un mot français pour l'exprimer. C'est dit, hors-sujet clos. :roll:

Par ailleurs, ayant réfléchi à différents mécanismes de sélection de pages de mémoire (RAM et ROM) pour un projet à base de 8052, il suffit d'écrire sur un port quelconque dont tu récupères les broches pour le mécanisme de sélection. Ici, ce n'est peut-être pas ce qui est fait.
Si les broches utilisées servent ultérieurement pour autre chose, tu fais en sorte que la sélection ne se fasse qu'une fois jusqu'à la mise hors tension de la machine. L'avantage de ta machine est que comme c'est une Von Neumann (Z80), tu peux passer un petit bout de code en ram qui va gérer le changement de page mémoire, puis faire une initialisation propre ensuite.

L'idéal serait d'avoir la face cuivre du CI, mais on voit qu'il y a des broches pour reprendre celles du support de ROM, et d'autres pour reprendre une empreinte similaire à celle d'un 74LSxxx. On a à disposition, non plus quatre, mais six entrées-sorties pour faire le bidouillage. Et si ils étaient utilisés en cascade comme un compteur binaire, il suffit alors d'une broche (au lieu de quatre dans ton schéma) pour ajuster la partie haute d'adresse.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Notator
Messages : 1299
Inscription : 09 août 2015 20:13

Re: [MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par Notator »

Pour la petite histoire, PCB est l'acronyme pour Printed Circuit Board, donc circuit imprimé. :D
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 : 3495
Inscription : 29 nov. 2017 10:23

Re: [MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par hlide »

@Papy.G

Dans ce cas précis, ce n'est pas mon projet mais une tentative d' "ingénierie inverse" d'une modification découverte.

Le vendeur a parlé de copies de pages en RAM pour exécuter du code, donc j'en déduis les chose suivantes :

1) La machine démarre sur une page 0 (j'imagine car au /reset les valeurs de A15..12 de la ROM doivent remises à 0) et ça lance un menu que l'on appelle IPL et qui présente une liste d'actions possibles.
2) Après avoir choisi la ligne d'action, ce dernier doit copier un code en RAM qui va préparer la copie d'une ou plusieurs pages en ROM vers la RAM à l'adresse qu'il faut pour le programme final à lancer : BASIC, PASCAL, DEBUG, etc.
3) Si l'action est de lancer le MONITOR d'origine (4 Ko), le programme aurait juste besoin de lancer un code en RAM qui va sélectionner la page contenant ce MONITOR et sauter en $0000.

Cette ROM contiendrait donc plusieurs programmes de taille variable comme si c'était un disque. Je rappelle que ces machines n'embarquent pas de BASIC ou autre langage en ROM, on les lit en RAM via une cassette, une disquette ou un quick disk en temps normal.

Donc dans tous les cas, cette prise en compte de la sélection de page est prise APRES le démarrage et peut être effectuée autant de fois que nécessaire pour copier en RAM le contenu.

Donc ce que tu décris comme méthode ne pourra pas être envisagée pour ce cas-ci. D'ailleurs, il n'y aurait aucune raison de "détourner" le LS157 si c'était le cas, je pense.

le schéma que je décris serait une explication mais je souhaiterais l'avis de professionnels pour me dire si ça se tient ou qu'il y a une autre explication en sachant que ce circuit ne peut pas avoir de composant en-dessous (sinon on verrait les trous de soudure comme on peut voir pour IC-4J et IC-5H sur le circuit et qu'il y a des composants sur la carte-mère qui font obstacle) : donc 3 composants sur le circuit, donc un récupéré depuis la carte-mère (IC-4J).
Avatar de l’utilisateur
hlide
Messages : 3495
Inscription : 29 nov. 2017 10:23

Re: [MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par hlide »

Papy.G a écrit : 01 sept. 2019 17:14 L'idéal serait d'avoir la face cuivre du CI, mais on voit qu'il y a des broches pour reprendre celles du support de ROM, et d'autres pour reprendre une empreinte similaire à celle d'un 74LSxxx. On a à disposition, non plus quatre, mais six entrées-sorties pour faire le bidouillage. Et si ils étaient utilisés en cascade comme un compteur binaire, il suffit alors d'une broche (au lieu de quatre dans ton schéma) pour ajuster la partie haute d'adresse.
Le premier LS175 ne gère que deux signaux déjà en usage pour le port parallèle. Le manuel a une sorte d'imprimé "transparent" de carte-mère qui permet de "voir" les traces des deux côtés. Il n'y a pas de traces pour les deux autres D/Q donc si quelque chose doit entrer dans l'un de ces deux signaux non utilisés, je ne vois pas ce que ça peut être depuis le socle de la ROM (seul autre fournisseur d'entrée en provenance du bus Z80).
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3051
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: [MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par Papy.G »

Donc, en fait, l' "IPL" charge un programme donné en RAM, puis remet l' "index" de la ROM sur la zone contenant le Moniteur (ROM d'origine) et lance le programme?

Sur ce genre de modif, on peut s'attendre à ne pouvoir retourner au menu une fois le choix fait, même si un programme pourrait très bien re-modifier l'index.

Si aucune trace ne mène aux deux cellules non utilisées, elles peuvent d'autant mieux être utilisées sur la carte. Par ailleurs, ce n'est pas dit qu'il n'y a que trois composants, on a déjà vu des cartes avec un TTL sous l'EPROM, rien ne dit qu'on n'aurait pas un 244, un 373 ou encore autre chose d'utile à faire de la pagination.

Dans la machine, y'a-t'il des adresses ou plages d'adresses qui ne servent jamais, ou des adresses ne servant qu'en écriture, ou qu'en lecture, où l'on pourrait écrire une valeur ou susciter une opération non autorisée?

Exemple: Le CS de ta ROM est déclenché par un appel (lecture ou écriture) dans sa plage d'adresses normal, jamais tu ne dois écrire dans cette plage d'adresses. Imagines que tu chopes le signal d'écriture (s'il vient sur ta rom), et que s'il est présent en même temps que CS, tu incrémentes un compteur (composé de plusieurs de tes cellules de LS175 en cascade). Il suffit alors que le programme de menu fasse des opérations d'écriture bidons dans la zone de la ROM pour modifier l' "index".

Je ne pense pas que des cellules flip-flop soient les plus pratiques pour faire de l'indexation en parallèle, comme sur ton hypothèse, c'est pourquoi je pense plutôt à une cascade de comptage binaire. ;)
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Avatar de l’utilisateur
hlide
Messages : 3495
Inscription : 29 nov. 2017 10:23

Re: [MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par hlide »

Bon j'ai eu la réponse par quelqu'un qui connaissait ce mod et m'a donné l'adresse d'un PDF le détaillant (en allemand) : https://original.sharpmz.org/mz-700/dow ... m_disk.pdf.

Ça confirme mon schéma et sur le fait que le premier LS275 sert juste à récupérer les signaux et à rester compatible avec l'imprimante ou du moins le traceur. A bien réfléchir, le port parallèle ne se sert que de deux signaux RDP et IRT dont le premier est mis à 1 pour signaler une transmission de donnée pendant 14,5 µs. De même quand le CPU communique avec l'imprimante, il doit mettre des 0 dans les quatre bits de poids faibles (là ou se trouve le numéro de page). Du coup, on retrouve le comportement normal : page du monitor d'origine. En réalité, la sélection d'une autre page est provisoire le temps de charger son contenu en RAM. A la fin, il doit revenir à la page 0, donc le monitor d'origine. L'IPL est dans l'une des pages non 0 : je suppose que le monitor en page 0 a été légèrement modifié pour pouvoir charger l'IPL en RAM et le lancer. Dans tous les cas, une fois le transfert de page effectué, on revient à la page 0 avant de lancer le programme copié en RAM. Au final, l'interférence entre le port parallèle et la sélection des pages vu de cette perspective reste acceptable à l'usage.
Dernière modification par hlide le 02 sept. 2019 13:35, modifié 2 fois.
Avatar de l’utilisateur
hlide
Messages : 3495
Inscription : 29 nov. 2017 10:23

Re: [MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par hlide »

Papy.G a écrit : 02 sept. 2019 12:01 Exemple: Le CS de ta ROM est déclenché par un appel (lecture ou écriture) dans sa plage d'adresses normal, jamais tu ne dois écrire dans cette plage d'adresses. Imagines que tu chopes le signal d'écriture (s'il vient sur ta rom), et que s'il est présent en même temps que CS, tu incrémentes un compteur (composé de plusieurs de tes cellules de LS175 en cascade). Il suffit alors que le programme de menu fasse des opérations d'écriture bidons dans la zone de la ROM pour modifier l' "index".
C'est la première chose à laquelle j'avais pensé pour permettre une sélection d'une page de rom : utiliser le signal /CS0 (ROM MONITOR), le signal /WR et se servir des quatre bits A3..0 pour faire la sélection. Mais j'ai écarté cette hypothèse car je ne voyais pas de fil pour capturer le signal /WR. J'ai une carte-mère donc je peux voir ce qu'il y a dans la partie cachée par le circuit : on ne peut pas capturer un signal /WR à cet endroit et il n'y a pas de fil sortant du circuit. Mais même avec un LS175, il faudrait un NOR entre /CS0 et /WR avant de passer le résultat au CLOCK de LS175. bref, ça ne collait pas trop avec la capture des signaux du LS175 original.

Autrement je cherche à imaginer la cascade dont tu parles : comment faire l'incrémentation avec deux LS157 ? bon laisse moi ça en exercice ! ;)
Xavier_AL

Re: [MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par Xavier_AL »

Salut,
Pour le "Bank switching" (modification dynamique d'espace de données numériques) le principe est simple.
Tu as une ROM avec:
-$0000: le menu.
-$xx00: le reste.
En deux mots, l'activation des banques de données se fait en forcent les bits d'adresse hautes.
64k= 65536 octets soit 64x1024octets , 32*2048 octets…
L'adressage se fait sur 16 bits : A0 -> A16
Donc, "0000 0000 0000 0000"
Pour la partitionner en 4 bloque de 4095 octets, il te reste 4 bits qui décaleront ton code:*
"xxxx 0000 0000 0000"
à "0000" lecture de 0 à 4095.
"0001" lecture + ‭4096‬
"0010" lecture + 8 192‬
etc..
Dans le temps… on ajoutait un interrupteur pour faire basculer ces sauts de pages, pour modifier la ROM à lire.
Mais, ici, cela ce fait par modules TTL.
On envoie le bit à bloquer, et un RST0 renvoie la lecture de la zone désignée.
Mais, l'arrêt de la machine remet à zéro la page sélectionnée et c'est le "menu" (première page) qui est relue.
Le choix du port imprimante est un choix opportuniste, pour sa simplicité de décodage, et pour son innocuité au démarrage de la machine.
Avatar de l’utilisateur
hlide
Messages : 3495
Inscription : 29 nov. 2017 10:23

Re: [MZ-700] Mais comment fonctionne ce mod qui donne accès à 64KO de ROM !?

Message par hlide »

@Xavier_AL
Le document PDF donne les schémas mais également les sources de celui qui a conçu ce mod :
- page 0 : ROM Monitor (l'original très légèrement modifié pour lancer le menu IPL après le transfert de ce dernier en RAM $C000)
- page 1 à 8 : BASIC
- page 9 à 14 : PASCAL
- page 15 : Debugger, IPL, etc.

Voilà ce qui est fait finalement :
La ROM monitor est altérée de quelques octets sans trop toucher à la compatibilité de ses routines pour permettre la copie d'un bout de code en RAM $1200 qui va ensuite transférer l'IPL en RAM $C000 et le lancer. Ça le fera à chaque fois que l'on saute à $0000 (le RESET en particulier).
A partir de l'IPL qui est en RAM, on choisit l'action et pareil transfert en RAM du programme souhaité à l'endroit où il est attendu (BASIC, PASCAL, Debugger en RAM $1200) et avant de le lancer on remet la page à 0 pour que $0000-0FFF pointe de nouveau sur la ROM "d'origine" (là où il a des routines pour tracer avec l'imprimante) afin de garantir la compatibilité. Dans la ROM, quand le CPU transfert une donnée en faisant OUT ($FE),A, les bits servant à sélectionner la page sont toujours à 0 donc du coup aucun problème à utiliser ces routines et la traceuse embarquée du MZ-731 du vendeur fonctionne parfaitement.

Pour moi, l’énigme n'en est plus une.
Répondre