[MZ-SD2CMT] Mise au point du mode ULTRA-FAST

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 : 3456
Inscription : 29 nov. 2017 10:23

[MZ-SD2CMT] Mise au point du mode ULTRA-FAST

Message par hlide »

Actuellement, j'ai crée une organisation appellée SHARPENTIERS dans GitHub dont le but est d'ajouter les réalisations logicielles et matérielles en open-source en raport avec la série SHARP MZ. J'ai travaille tout particulièrement sur le projet MZ-SD²CMT qui n'avance que durant les weekends - et encore, quand je suis dessus.

Ce projet ne contient pas encore mes toutes dernières corrections pour la lecture normale d'un fichier binaire du type MZF/M12/MZT traduit en système PWM SHARP (comme pour les vraies cassettes) qui m'a donné pas mal de fil à retordre. Le résultat est que cela fonctionne parfaitement et que plus rien ne paraît paradoxale.

En effet :

1) les signaux READ et WRITE ont un inverseur qui faut prendre en compte : c'est la période basse de la pulsation émise par l'arduino qui doit être précise. Je pensais au début que c'était juste des diodes pour empêcher l'inversion du sens du courant.

2) j'utilise maintenant un "One-Shot Pulse" via une sortie PWM du timer3B. L'avantage est que la pulsation est émise en position bas durant la période précise voulue puis repasse en position haute pour le reste du temps jusqu'à l'on émette à nouveau une pulsation. Le plus important : une fois la pulsation programmée, c'est le hardware qui prend en charge et donc je peux déjà commencer à chercher l'octet suivant si nécessaire, à faire d'autres opérations en parallèle comme pour l'IHM dès le début de la pulsation qui est immédiate à la programmation. A la prochaine pulsation programmée, on attend quand même si le temps passé entre la pulsation précédente et celle à venir n'est pas en dessous de la période totale du signal à encoder en 1 ou 0 au cas où les opérations parallèles auraient été plus rapides à finir. Notez bien que les interruptions n'auront aucun effet sur la période basse de la pulsation - la précision de cette période est très importante car c'est elle qui déterminera un signal 1 ou 0.

Alors du coup je suis passé au mode ULTRAFAST : j'utilise le signal READ (/PC5) en signal pour SDO (serial data output)pour émettre les bits des octets d'un bloc de données. Et j'utilise le signal MOTOR (PC4, /SENSE) en signal SCK (serial clock) de la façon qui pourrait ressembler à ça :

Code : Tout sélectionner

   ____         _____         _____         _____         _____
SCK    \   0   /  1  \   0   /  1  \   0   /  1  \   0   /  1  \  ...
        \_____/       \_____/       \_____/       \_____/       \
     
      |-|++++++|-|++++|-|++++|-|++++|-|++++|-|++++|-|++++|-|++++| ...
   __         _____  _____                _____         _____
SDO  \   0   /  1  \/  1  \   0      0   /  1  \   0   /  1  \  ...
      \_____/              \_____/\_____/       \_____/       \
      |           6h              |           5h              |
L'arduino commence par changer d'abord SDO puis très rapidement SCK. Le MZ-700 peut lire PC5 et PC4 dans un seul octet et donc il n'a qu'a vérifié un changement de niveau de SCK pour prendre en compte le bit PC5 dans l'octet à composer en lecture.

Sauf que ça ne passe pas si bien.

Le signal SENSE n'est pas directement raccordé à PC4. Voic le schéma :
mz8255-mzcmtArduino.png
mz8255-mzcmtArduino.png (41.72 Kio) Consulté 3276 fois
En fait, le signal PC4 (MOTOR) n'est pas un signal carré ! il dessinne plutôt des dents de requins qui en fonction des périodes peuvent être catastrophiques. La récupération des octets ne semblent complète que si la période est au-delà de, disons, 3 ms. Plus je baisse cette période, plus j'ai des chances de rater des bits. Avec une période très courte (genre 100ms), je ne lis aucun bit et pour cause le signal de PC4 est en dent de scie dont la tension maximale ne doit pas atteindre la tension logique à 1 (on est en NMOS !).

Bref, il semblerait que tel quel, le mode ULTRAFAST se soit transformé en mode ULTRASLOW.

Néanmoins, je ne veux pas m'avouer vaincu. je peux accéder aux broches du 8255 - j'ai des pinces fines pour ça - et tout particulièrement au PC4.

Précisions:

1) Quand l'Arduino ne fait pas transfert normal, SENSE est à 1 en sortie et donc PC4 à 0 en entré.

2) Quand l'arduino fait un tranfert normal, SENSE est à 0 en sortie et donc PC4 à 1 en entrée.

3) Quand l'arduino fait un tranfert ULTRAFAST, je prévois de mettre SENSE à 1 pour que PC4 recoive 0 en entrée si aucune pince n'est accrochée.

4) J'utilise un nouveau pin autre que celui du SENSE de l'arduino que j'accroche au PC4 avec une pince.

5) J'utilise ce nouveau pin comme SCK et je le fais alterner entre 0 et 1 pour faire alterner PC4 entre 0 et 1 avec un signal bien carré et sans delai.

6) Eventuellement, je peux changer l'entrée Arduino MOTOR en sortie à 0 pour bloquer l'arrivé du signal SCK de ce côté-ci.

Question :

A) Pensez-vous que cela peut fonctionner ainsi ? je présume que l'IC 7E (LS74) ne laissera pas entrer du courant vers Q et donc le signal SCK ira principalement vers PC4.

B) Quoiqu'il y ait aussi l'IC 8C (7417) qui pourrait laisser conduire le signal SCK vers le signal MOTOR de l'Arduino. Pour l'Arduino, ce n'est pas vraiment un problème. Mais est-ce bon de laisser ça ? sachant que j'imagine que j'aurais la même tension en PC4 et l'Arduino MOTOR ?

C) En mode normal, je place SCK en entrée.

Voici le schéma que je veux réaliser :

Code : Tout sélectionner

_____
     |      
     |                            IC 3C CD4069    
  PC5+-<------------------------------0<|-------------------------------<- Arduino: READ / SDO en sortie        
     |
  PC4+-<--------------------------------+-------------------------------<- Arduino: SCK en sortie       
     |                                  |
     |                                  |
     |       _________________          |
     |      |                 |         |            IC 8C 7417
     |      |                Q+->-------+----------------|>------------->- Arduino: MOTOR en entrée
     |      |   IC 7E+1B+1C   |
     |      | LS74+LS00+LS04  |
     |      |               CK+-<----------------------------------------- Arduino: SENSE forcé à 1 en sortie
     |      |_________________|
IC 8E|
8255 |      
_____|
Eventuellement, je peux mettre le signal Arduino MOTOR en signal 0 en sortie durant le transfert ULTRAFAST dans l'espoir que le signal SCK ira directement vers PC4 et que Q et MOTOR en sortie avec tension 0 ne peuvent recevoir ce signal.

Code : Tout sélectionner

_____
     |      
     |                            IC 3C CD4069    
  PC5+-<------------------------------0<|-------------------------------<- Arduino: READ / SDO      
     |
  PC4+-<--------------------------------+-------------------------------<- Arduino: SCK     
     |                                  |
     |                                  |
     |       _________________          |
     |      |                 |         |            IC 8C 7417
     |      |                Q+->-------+----------------|>-------------<- Arduino: MOTOR en sortie
     |      |   IC 7E+1B+1C   |
     |      | LS74+LS00+LS04  |
     |      |               CK+-<----------------------------------------- Arduino: SENSE forcé à 1 en sortie
     |      |_________________|
IC 8E|
8255 |      
_____|
Dernière modification par hlide le 19 juil. 2018 12:16, modifié 1 fois.
Avatar de l’utilisateur
hlide
Messages : 3456
Inscription : 29 nov. 2017 10:23

Re: [MZ-SD2CMT] Mise au point du mode ULTRA-FAST

Message par hlide »

J'ai rajouté dans le schéma les raccords à l'Arduino pour mieux voir ce que je souhaite faire.
Avatar de l’utilisateur
hlide
Messages : 3456
Inscription : 29 nov. 2017 10:23

Re: [MZ-SD2CMT] Mise au point du mode ULTRA-FAST

Message par hlide »

Et pour les curieux qui se demandent de quoi je parle, j'obtiens ce signal rouge au lieu du bleu quand je veux faire basculer l'état de PC4 depuis l'Arduino :
PC4.png
PC4.png (26.5 Kio) Consulté 3256 fois
Ce signal m'oblige à utiliser une période beaucoup trop longue pour être viable. Donc je cherche à "bypasser" ça sans charcuter la carte mère.
Avatar de l’utilisateur
hlide
Messages : 3456
Inscription : 29 nov. 2017 10:23

Re: [MZ-SD2CMT] Mise au point du mode ULTRA-FAST

Message par hlide »

Bon, il semblerait que surveiller le signal SENSE au lieu de MOTOR était une très mauvaise idée de ma part. J'ai bien un signal carré sur PC4 mais toujours des pertes de bit à l'émission. Entre temps, je me suis apperçu que le signal READ (PC5) était toujours à plat quand je stoppe le timer du one-shot pulse même si je change l'état de PC5 "à la main". J'ai trouvé la parade en n'arrêtant pas le timer et en inversant ou non le niveau hors pulsation à chaque émission du bit et j'obtiens bien maintenant des octets mais avec toujours des ratés au niveau des bits. Donc, pas la peine de tenter de bypasser le PC4. Je vais peut-être avoir besoin du signal WRITE pour une synchro des deux côtés.
Avatar de l’utilisateur
hlide
Messages : 3456
Inscription : 29 nov. 2017 10:23

Re: [MZ-SD2CMT] Mise au point du mode ULTRA-FAST

Message par hlide »

Affaire réglée : avec ou sans le signal WRITE pour synchro (MZ qui demande à l'Arduino de passer au suivant) et sans l'ajoût du cable bleu sur le PC4, j'obtiens un transfert rapide de 19797 baud. J'ai galéré avec les synchronisations initiales qui me bloquaient tantôt du côté MZ tantôt du côté Arduino. Je garde la synchro WRITE car ça me donne la meilleure vitesse sans besoin de "tuner" les "timings" sans elle (l'Arduino risque d'aller trop vite) et surtout parce que c'est compatible avec toute la famille issue du MZ-80 K dont les fréquences peuvent varier.
Avatar de l’utilisateur
tahitibub
Messages : 89
Inscription : 18 juin 2022 08:35
Localisation : Lille et la Côte d'Opale

Re: [MZ-SD2CMT] Mise au point du mode ULTRA-FAST

Message par tahitibub »

Bonjour,

Je viens de visiter le site https://github.com/SHARPENTIERS et je trouve génial d’y trouver toutes ces ressources sur les vieux ordis SHARP, et notamment les PDF des publications du club.

Concernant le projet MZ-SD²CMT, pourrais-tu publier des photos du montage terminé, voire une video sur YT ?

Concernant le testeur DRAM pour MZ-80 K, peux-tu préciser quel type d’eprom on doit utiliser (et où la placer dans l’ordi) ?

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

Re: [MZ-SD2CMT] Mise au point du mode ULTRA-FAST

Message par hlide »

Euh ça date un peu... :)

Il faut savoir que MZ-SD²CMT est très modulaire mais reste un prototype avec tout plein de fils donc pas "vendable" en tant que tel. Donc des photos... et quant à la vidéo, je ne sais pas en faire correctement.

Néanmoins je connais une personne qui s'est fait un boitier (et qui m'a conduit à plus de modularité avec l'addition d'une télécommande IR) et une autre qui s'est fait une variante pour le MZ-80 K:
- https://www.marcuslausch.de/2019/02/05/ ... mz-sd2cmt/
- https://twitter.com/crtmaster/status/13 ... 9289839616

Quand j'ai commencé ce projet, je ne savais même pas créer un PCB.

Malheureusement, j'ai bien peur qu'ici on n'est pas assez nombreux pour lancer un projet de construction de MZ-SD²CMT de la même manière que ceux de @Fred_72.

1) Je connecte directement l'Arduino MEGA sur le connecteur interne TAPE de la carte-mère qui est en signal TTL 5V et non par les prises extérieures qui dégraderaient considérablement les signaux (et j'ai besoin de SENSE et MOTOR). De fait, avec l'Arduino en extérieur, ça complique un peu l'esthétique de la liaison.

2) L'Arduino MEGA (et NANO) ont un gros "défaut" : ils ne sont pas conçu pour être alimenté en 5V par l'une des broches avec l'USB qui alimente également en 5V. Il faudrait couper une liaison sur la carte de l'Arduino pour éviter que l'USB ne l'alimente.

3) J'ignore si l'alimentation 5V par la carte-mère MZ est suffisante pour alimenter l'Arduino et ses modules IHM. Il faut dire que j'avais tendance à les mettre tous.

Quant à la DRAMTest, je présume que l'on parle de la série K/A. Ça dépend donc de la machine (il faut aller voir leur service manual). Après je conçois que c'est ROM peuvent être difficile à trouver et à programmer. Il faut alors passer par un petit PCB ou une bidouille pour accepter une EEPROM plus facile à programmer. Honnêtement, ce n'est pas mois qui ait vérifier sur des vrai ROM mais mes bêta-testeurs anglais et japonais.
Répondre