[Thomson] SDDRIVE

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 : Carl, Papy.G, fneck

Répondre
Daniel
Messages : 10323
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

[Thomson] SDDRIVE

Message par Daniel » 23 nov. 2017 18:05

Image

SDDRIVE est un nouveau projet de simulateur de disquettes sur carte SD pour tous les ordinateurs 8 bits Thomson (sauf le TO9).
Par rapport au contrôleur CS91-280 avec l'interface SDMOTO imaginez :
- Un boîtier externe unique comprenant le contrôleur et le lecteur de carte SD
- Une vitesse en lecture de 20000 octets par seconde

A comparer aux 5800 octets/seconde du contrôleur CS91-280 et aux 5000 octets par seconde en moyenne pour la disquette réelle. Cette vitesse accrue permet d'envisager des démonstrations beaucoup plus spectaculaires, en particulier dans le domaine de la musique, mais pas seulement.

Le premier prototype fonctionnel (23/11/2017) :
sddrive_prototype.jpg
sddrive_prototype.jpg (139.73 Kio) Vu 1454 fois

Copie d'écran :
sddrive-test.jpg
sddrive-test.jpg (161.2 Kio) Vu 1454 fois

Analyse de la liaison SPI :
sddrive_lecture.png
sddrive_lecture.png (29.22 Kio) Vu 1454 fois

Lecture d'un octet :

Code : Tout sélectionner

*------------------------------------------------------
* LECTURE D'UN OCTET (SDDRIVE) = 55 cycles
* Le registre B n'est pas preserve
* Valeur de l'octet dans le registre A en sortie
*------------------------------------------------------
RBYTE
  LDB   #$7F          initialiser B pour lecture (2)
  CMPB  <$BF          lecture bit 7              (4)
  ROLA                pousser dans A             (2)
RBYTE6                                      
  CMPB  <$BF          lecture bit 6              (4)
  ROLA                pousser dans A             (2)
  CMPB  <$BF          lecture bit 5              (4)
  ROLA                pousser dans A             (2)
  CMPB  <$BF          lecture bit 4              (4)
  ROLA                pousser dans A             (2)
  CMPB  <$BF          lecture bit 3              (4)
  ROLA                pousser dans A             (2)
  CMPB  <$BF          lecture bit 2              (4)
  ROLA                pousser dans A             (2)
  CMPB  <$BF          lecture bit 1              (4)
  ROLA                pousser dans A             (2)
  CMPB  <$BF          lecture bit 0              (4)
  ROLA                pousser dans A             (2)
  RTS                 retour octet dans A        (5)
La programmation et la conception du produit final sont en cours, et seront probablement finalisées dans les premiers mois de 2018.
Modifié en dernier par Daniel le 14 janv. 2018 08:04, modifié 1 fois.
Daniel
L'obstacle augmente mon ardeur.

Patrick
Messages : 607
Enregistré le : 16 mai 2009 09:30
Localisation : Clermont-Ferrand

Re: [Thomson] SDDRIVE

Message par Patrick » 23 nov. 2017 18:14

Bravo Daniel ! Super projet.
Patrick

Avatar du membre
Carl
Modérateur
Messages : 10026
Enregistré le : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: [Thomson] SDDRIVE

Message par Carl » 23 nov. 2017 18:39

Bravo Daniel, bientôt un nouveau périphérique à grande vitesse pour Thomson ... 8)

Carl

Avatar du membre
Totor le Butor
Messages : 1385
Enregistré le : 07 sept. 2011 16:14
Localisation : Paris

Re: [Thomson] SDDRIVE

Message par Totor le Butor » 23 nov. 2017 18:56

Ouah !!!!!!!!

Ca c'est du très lourd :D !!
Born to bricole
[Rch] Vieux composants électroniques et circuits intégrés toute époque et vieilles cartes .

Avatar du membre
fneck
Site Admin
Messages : 12018
Enregistré le : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: [Thomson] SDDRIVE

Message par fneck » 23 nov. 2017 19:53

Daniel est intarissable :D

__sam__
Messages : 3991
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] SDDRIVE

Message par __sam__ » 23 nov. 2017 23:32

bravo! L'idée ici est de ne plus passer par les port manettes, si je comprends bien. Du coup tu peux avoir un protocole de transfert adapté et bien plus efficace, c'est ca ? Par contre dans le code ASM je ne vois pas bien comment l'horloge SPI est envoyée. Ca marche comment ?
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

Daniel
Messages : 10323
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SDDRIVE

Message par Daniel » 24 nov. 2017 09:20

Depuis plusieurs années je cherchais à augmenter la vitesse de lecture des cartes SD en mode SPI.

En générant l'horloge par soft avec le 6809, nous avons atteint le maximum. Toutes les optimisations possibles ont été faites.
On peut utiliser le 6309 : moins de cycles par instruction et des registres supplémentaires. J'ai réalisé un prototype, le gain est d'environ 30%.
Malheureusement, dans le monde entier il n'y a que trois Thomson équipés du 6309 (dont un de mes MO5). Peu de collectionneurs sont capables de dessouder le 6809 pour le remplacer. L'expérimentation du 6309 est très intéressante, mais ce n'est pas la bonne solution :wink:

Reste la génération de l'horloge par des moyens matériels. Je l'étudiais depuis quelques mois, j'ai fini par trouver une solution satisfaisante :

- L'horloge est générée par un circuit de décodage d'adresse, en l'occurrence $A7BF (ou $E7BF pour les TO). Quand cette adresse est détectée sur le bus on génère un front descendant d'horloge, quand elle n'est plus présente on génère un front montant. Le décodage d'adresse est en logique TTL très basique : un 74LS00 et un 74LS133 suffisent.

- Le bus de données (en réalité deux bits seulement, le bit 0 pour l'écriture et le bit 7 pour la lecture) est interfacé par un buffer à trois états 74LS125 : une porte dans un sens pour le bit 0, une porte dans l'autre sens pour le bit 7. Chaque porte est commandée par un circuit NAND, avec en entrée le signal d'horloge inversé et le signal READ pour l'un, le signal d'horloge inversé et le signal WRITE (inverse de READ) pour l'autre.

Une seule instruction d'écriture génère le top d'horloge et envoie le bit 0, une seule instruction de lecture génère le top d'horloge et lit le bit 7. En voyant le schéma cette solution paraît évidente, mais c'est en fait le résultat de pas mal d'heures de réflexion. Avec 50 cycles pour lire un octet on arrive pas loin du maximum théorique pour la vitesse de lecture bit par bit.

Les prévisions :

- Dans un premier temps terminer la mise au point du prototype.
Au début il y avait un fonctionnement assez aléatoire : l'analyseur logique montrait de temps en temps un glitch de quelques nanosecondes sur le signal de l'horloge. J'ai résolu ce problème en m'inspirant du schéma de l'extension MO5 : un filtre sur chaque ligne du bus d'adresse avec une résistance de 100 ohms et un condensateur de 100pF. Il n'y a plus aucun glitch.
Ensuite j'ai eu d'autres problèmes de fonctionnement aléatoire. A l'oscilloscope on observait une grosse instabilité sur la ligne MOSI quand le 74LS125 était dans son état "haute impédance". Une résistance pull-up de 10K a supprimé l'anomalie. Je continue les tests intensifs pour détecter d'autres problèmes éventuels et arriver au schéma définitif.

- Ensuite développer le soft du contrôleur.
Il sera stocké dans une EPROM de 2K octets. Je vais m'inspirer fortement du contrôleur CS91-282, en essayant d'intégrer le programme de sélection dans l'EPROM pour éviter d'avoir à mettre sur la carte SD le fichier boot.sd. La grosse difficulté sera de faire tenir dans 2K octets le contrôleur et le programme SDSEL. Il n'y aura probablement pas la place pour mettre le logo SDDRIVE en haut de l'écran.

- Enfin réaliser un circuit imprimé et le montage dans un boîtier externe.
Il est prévu un boîtier plastique de 100x60x25 mm, relié par une nappe souple au connecteur d'extension Thomson. En option il y aura sur la nappe un connecteur supplémentaire (le même que dans mon tripleur de bus) pour un autre contrôleur Thomson. Une belle étiquette SDDRIVE, une fente pour la carte SD, une LED de mise sous tension et une LED d'activité compléteront le boîtier.
Daniel
L'obstacle augmente mon ardeur.

jasz
Messages : 360
Enregistré le : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [Thomson] SDDRIVE

Message par jasz » 24 nov. 2017 09:55

Alors la, chapeau bas!
C'est un projet qui a terme sera plus pratique que la version sdmoto. C'est vraiment une très bonne initiative... 8)

Avatar du membre
Falkor
Messages : 597
Enregistré le : 28 juin 2010 12:09
Localisation : Cluny, Saône et Loire

Re: [Thomson] SDDRIVE

Message par Falkor » 24 nov. 2017 11:15

Chouette projet !

__sam__
Messages : 3991
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] SDDRIVE

Message par __sam__ » 24 nov. 2017 11:28

Une seule instruction d'écriture génère le top d'horloge et envoie le bit 0, une seule instruction de lecture génère le top d'horloge et lit le bit 7.
C'est très astucieux!
En voyant le schéma cette solution paraît évidente, mais c'est en fait le résultat de pas mal d'heures de réflexion.
Oui ca parait simple dire qu'il suffit d'envoyer 'l'horloge au moment où l'on accède à l'adresse. Encore fallait-il y penser!

Perso j'aime bien SDSEL sur la D7 ca permet de pouvoir le remplacer en cas de bug. Mais si tu as besoin de compresser, il y a toujours EXOMIZER2 dont le décodeur 6809 ne prend que 181 octets si j'ai bonne mémoire ici/rawdecrs/6809. Bon par contre le code s'auto-modifie et il faudra l'adapter pour l'usage en rom.

[EDIT] Le montage ultime serait de carrément lire/écrire l'octet en $BF. J'imagine que là il faut de l'électronique bien plus complexe.
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

Daniel
Messages : 10323
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SDDRIVE

Message par Daniel » 24 nov. 2017 14:37

Pour lire 8 bits en parallèle le plus simple est d'avoir un Arduino en interface. Comme il est plus rapide que le 6809 (16 MHz au lieu de 1 MHz) il peut lire les 8 bits dans le même temps que le 6809 lit un octet. Et alors la vitesse de lecture de la carte SD devient identique à la vitesse de lecture de la RAM. Un MO5 avec 32 Go de RAM, en quelque sorte. Ca fait rêver, et je crois bien que ça pourrait être le sujet d'un prochain projet. Ce serait l'équivalent du montage pour SDANIM7, mais sans passer par le 6821, directement sur le bus. Et avec l'écriture en plus.

Mais ne brûlons pas les étapes. Dans un premier temps je termine la mise au point de SDDRIVE, c'est une grosse avancée technique et il faut absolument la finaliser. Aujourd'hui le prototype fonctionne parfaitement bien, les dernières anomalies relevées n'étaient en fait que des mauvais contacts vite réparés. J'attaque maintenant la programmation...
Daniel
L'obstacle augmente mon ardeur.

Avatar du membre
6502man
Messages : 8933
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Thomson] SDDRIVE

Message par 6502man » 24 nov. 2017 14:58

Ouah superbe :D

Bravo et félicitations pour ce nouveau périphérique Thomson :D

J'aimerais maîtriser aussi bien l’électronique que toi pour concevoir des extensions pour nos vieux ordis, j'ai déjà du mal à faire fonctionner une extension avec seulement de la RAM et de la ROM, alors un périphérique !!!!
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Daniel
Messages : 10323
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SDDRIVE

Message par Daniel » 24 nov. 2017 15:20

Oh non, je ne maîtrise pas, je suis totalement autodidacte. J'ai pourtant fait des études, mais l'électronique n'était pas au programme. C'est comme toutes les techniques, on apprend avec l'expérience et petit à petit on arrive à des résultats. Mon premier émetteur Petites Ondes date de 1960, avec le jeu "Le Jeune Radio à l'Ecoute du Monde" de Gégé. Je l'ai encore, avec son unique transistor et son tube alimenté en 18V. Depuis j'ai nettement progressé. J'aime bien l'électronique, car contrairement à l'informatique il y a des phénomènes physiques subtils, particulièrement aux hautes fréquences. Il est simple de mettre au point un programme, plus difficile de supprimer un glitch dans un signal TTL. Heureusement il y avait de bons ingénieurs chez Thomson, je me suis inspiré de leur schéma du contrôleur de QDD de l'extension MO5. Sinon j'aurais eu beaucoup plus de mal.
Daniel
L'obstacle augmente mon ardeur.

jasz
Messages : 360
Enregistré le : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [Thomson] SDDRIVE

Message par jasz » 24 nov. 2017 16:57

Daniel a écrit :
24 nov. 2017 14:37
Un MO5 avec 32 Go de RAM, en quelque sorte. Ca fait rêver, et je crois bien que ça pourrait être le sujet d'un prochain projet. Ce serait l'équivalent du montage pour SDANIM7, mais sans passer par le 6821, directement sur le bus. Et avec l'écriture en plus.
Enfin 1mo aurait déjà était très bien. C'est aussi un formidable projet. Mais...
Comment un simple 8bits qui ne comprend un système d'adressage que sur 16bits va réussir à lire dans une mémoire qui sera forcément sur 32bits? :shock:

Lesarthois
Messages : 131
Enregistré le : 13 mai 2016 22:21

Re: [Thomson] SDDRIVE

Message par Lesarthois » 24 nov. 2017 17:20

Question sûrement idiote, mais ce périphérique sera-t-il uniquement Thomson, ou serait-il adaptable sur d'autres machines?

Répondre