Redstone Télégraphe + Mémoire + Affichage

[GISED] Link

Torches, poudre et repeaters. What else ?
4 Mars 2012
341
76
140
29
VNSA, 2740 Moutier
vnsa.ch
Le Télégraphe
Le Télégraphe

disponible sur : ThundeRed.nitroserv.eu​
avant-dernière mise à jour : 25.12.2014
Derière mise à jour : 30.07.2015

LA vidéo !! Enfin !
(Pack de texture : Minecraft PG5)

Affichage : 100%
Conversion : 100%
Clavier + filtres : 100%
Éditeur de caractère : 100%
Mémoire interne : 100%
Mémoire tampon pour séparer les mots : 100%
Port série : 80% (Prêt pour l'importation)
Affichage de l'état de la machine : 20%

La CPU interne a été abandonnée par manque de temps et aussi à cause des performances qui s'annonçaient bien inférieur à la futur génération de processeur. Cependant, je rendrai visible l'intégralité des composants que j'avais déjà créer ou importer (RAM dual read, bus interne, ALU, etc..).

Avec cette décision j'espère pouvoir me concentrer sur la véritable dimension du projet : la communication de plusieurs appareils à travers un même réseau ! Et ainsi créer le premier protocole supérieur à la couche 2 (modèle OSI) de minecraft !

CPU interne 20% (Je sais déjà comment il sera fait, où il sera, mais c'est tout !)
  • Pointeur de pil (compteur) : 100%
  • Jeu d'instruction : 80%
  • Banc de registre de 16 slots de 8 bits, BUD : 100%
  • ALU (f. logiques, add, sub, mul, div) : 80% (amélioration à apporter)
  • Stack 90%
  • Bus interne 0%
  • E/S 0%
  • Contrôle générale (à la fin) : 0%
Décor : 50%


Petite explication avec les panneaux :
155922Explicationdespanneaux.jpg

905307Vuedensembledutlgraphe.png

Vue d'ensemble du télégraphe - en cours de construction.. encore -

Le but :

On a un texte qu'on veut faire passer à quelqu'un. Voici comment ça se passe :
  1. On écrit ce texte (avec le clavier),
  2. Ce texte s'enregistre automatiquement dans la mémoire,
  3. On envoie ce texte à un autre télégraphe (avec le port série, sur un seul fil),
  4. L'autre télégraphe reçoit le texte et l'enregistre s'il le veut bien,
  5. L'autre télégraphe peut donc lire le texte !
En gros, c'est ça.

Explication

L'écran,
802746Vuedensembledelcran.png


est composé de 12 à 15 Afficheurs (ici 12)
584501Vuedunafficheur.png


Chaque afficheur fait 3 pixels de large sur 5 de haut. La vitesse est d'environ de 3 à 4 tics.
On sait maintenant que chaque caractère s'affiche sur un écran de 3x5. Pour que chaque caractère puisse rester affiché, il faut une mémoire.

La mémoire de l'affichage
474813Vuedensembledelammoiredelcran.png


C'est une mémoire de type RAM (ou EEPROM, Flash... faudra se mettre d'accord ^^), mais un peu "bridée". Effectivement, c'est gros, mais super compacté. Ses dimensions (la longueur c'est pour un emplacement !) [L x l x h] : 4 x 35 x 9. Cette mémoire possède aussi la propriété de rafraîchir l'écran (cette fonction était utile lorsque j'utilisais encore un afficheur à piston), ainsi que de faire clignoter un "under score" (tiret bas) à la position en cours d'écriture (partie vert clair, à gauche). Pour gérer cette la position en cours d'écriture, il y a

Le sélecteur de position
402457Vuedeslecteurdeposition.png


[partie rouge] Il fait seulement 4 de haut, n'utilise aucun pistons (sauf pour tout sélectionner, lorsque j'efface l'écran). Il est vraiment bien !

Il y a aussi la possibilité d'écrire en "éclairé sur fond sombre" ou en "Sombre sur fond Eclairé"
163774Vuedelaffichagengatif.png

(ici, en "sombre sur fond éclairé")

Bref, c'est pas tout, mais s'il fallait sauvegarder chaque pixel d'un caractère dans la mémoire interne ça prendrait évidemment trop de place. La meilleur solution (qui s'applique sur vos pc d'ailleur), c'est de coder ces caractères. Pour faire court, j'ai choisi de coder mes caractères sur une bases de 6 bits ce qui me laisse donc la possibilité d'avoir jusqu'à 63 caractère à disposition (pas 64 car le 000000 est inutilisable (bit nul)). Mais comme les afficheur travail avec 15 pixel à gérer, il faudra inévitablement

Le décodeur 6 bit vers 15 pixels (police d'écriture en faite)
796573Vuegnraledudcodeur.png


En vert, c'est le bus interne de 6 bits. En orange, c'est le décodeur 6 bits vers 64. En rouge/vert, c'est la conversion en pixel, "la police d'écriture" quoi. ça prends relativement énormément de place :D mais c'est le prix à payer pour gagner du temps et de la place en générale. pour convertir un code de 6 bit, il lui faut un peu près 5 à 6 tics. Mais, pour pouvoir écrire facilement un caractère et pas devoir le coder à la main, nous avons

Le clavier
719693Vuedesboutonsduclavier.png


Le clavier sert de... clavier (ou d'interface homme-machine pour être précis). Composé de 32 boutons et d'une ligne de plaques de pression pour la touche ctrl, elle permet d'avoir accès au 63 caractère utilisable sur le télégraphe. D'autres boutons sont disponible mais ils sont pour la gestion de l'affichage. Un bouton pour tout effacer, un autre pour effacer un caractère (le dernier) et un dernier pour rafraîchir l'écran (inutile désormais, mais servait quand l'afficheur était en piston). Il y a aussi un levier pour choisir si on veut écrire en clair sur fond sombre ou l'inverse.

Le reste
Il y a évidemment encore beaucoup de travail à faire. Pour le moment le projet ressemble plus à un word processor qu'à un vrai télégraphe. Mais beaucoup d'éléments (tel que le port sériel, la mémoire interne) sont déjà au point, mais qu'il reste encore quelques adaptations avant de les placer sur le télégraphe. Notamment, ce petit bijou là :

L'éditeur de caractère
928694VueduGPU.png


Vous voulez envoyer un coeur ? ou un bonhomme heureux ? Avec l'éditeur, ce sera chose possible. Cependant, oublier tout de suite de pouvoir changer la police avec, faut pas pousser mémé dans les orties non plus !
Quelques détailles en plus

caractères supportés :

ABCDEFGHIJKLMNOPQRSTUVWXYZ (26 lettres de l'alphabet, plus ou moins en majuscule selon la police ^^) = 26
+ 1234567890 (les 10 chiffres) = +10
+ + - x / > < . , ( ) : ; { } _ " ! ? \ ç % ' ° = tiret et espace = +26
+ un caractère de commande (pour faire des choses internes, je vous en reparlerez) =+1
on arrive à un totale de 63 ! (donc, 6 bits)

Pour la suite :
  • Éditeur de caractères (okay)
  • Mémoire EEPROM de 256 emplacements de 6 bits ! (déjà ok, ne reste que l'optimisation de l'adressage)
  • Port sériel ( tout okay, sera installé une fois la EEPROM installé)
  • Des témoin pour visualiser l'état du système (en cours d'envoie, réception, mémoire pleine, creeper dans le système, que des trucs banals quoi)
  • un petit afficheur sept segments de 2 digits sera peut-être ajouté pour afficher à quelle adresse on se trouve en ce moment dans la (EEP-)ROM (en hexadécimale)
  • CPU pour gérer tout le gros bordel que va être la lecture de la mémoire, les commandes... Bref de la merde.
  • Des petits plus tel qu'une calculatrice, une vraie RAM pour faire du copier coller, du capture d'écran, etc... Mais ce sera pour plus tard
  • une extension pour faire un jeu du pendu ? XD
MERCI d'avoir lu ce très long message qui est résumé dans une vidéo !
N'hésitez pas à poster des commentaires, tout commentaire est la bien venu.
 
Très beau travail !
Bon travail aussi dans le compactage !
Pour l'instant aucun commentaire négatif. Si tu veux je pourrai t'aider à trouver des bugs ou des erreurs de programmation, car dans des machines aussi imposante la marge d'erreurs est importante :).
Ha et au faite combien va prendre de tics le délai entre le clic du bouton et l'affichage?
 
T'a réussi mon rêve de Minecraft :D
Evidemment je ne pensai pas faire tout les systèmes, donc je me serai un peu perdu ^^
Surtout pour le décodeur (qui doit être le plus dur système :confused:)
Et ta RAM et le clavier sont très compact, c'est super pour le manque de place :D
En tout cas bravo, tu pourra le upload pour que je vois la bête (lol) et le temps d'affichage que Zilack3 a demandé ?
 
Je me disais : tu pourrais aussi ajouter un routeur pour pouvoir brancher plus de deux télégraphes ensemble.
 
Je suis vivant et je réponds. J'ai simplement attendu quelques réactions afin de pouvoir de limiter les postes.

Première grande question : le temps entre l'appuie d'un bouton et son apparition :
réponse : un peu décevant mais c'est entre 2,5 et 3 secondes (difficile à dire précisément).

une des grande pertes de temps provient du clavier, et du filtre qui le suit. Je suis en ce moment même en train de bosser sur ce filtre, qui permettra normalement d'enchainer la frappe sans trop de problème, mais évidemment c'est très délicat et il faut parfois sauvegarder des information à 2 tics d'intervalle. Donc, un grand travail mais qui sera très utile.

seconde question : Le routeur.

Oui, c'est déjà prévu. De plus, j'ai prévu 2 caractères de contrôle pour faire une demande de connexion et un autre pour accepter une demande. Le fil d'envoie est aussi bidirectionnel (rien de miraculeux), et l'envoie en série est déjà prêt.

Prochaine grandes étapes :

Ce fichu filtre à faire (déjà bien 6h que je bosse là-dessus)
La mémoire interne à installer
Et l'éditeur de caractère à installer aussi, qui a désormais 3 emplacements mémoires dédiés !

Noter aussi que je vais (tenter) de faire des vidéos sur les différents composants, après les points ci-dessus.

Prenez aussi ces 2 vidéos en exemple (si vous avez le temps) pour bien situer mon projet sur ce qui existe déjà (c'est pas la crème !)

 
Il est fait, ENFIN !!! CE P***** DE FILTRE est fait !!!!!!!!!

après plus de 12 heures de recherches intensives.. d'échecs en échecs ... Je suis enfin arrivé à faire un filtre digne de ce nom !

Il désormais possible d’enchaîner des caractères à une cadence moyenne de 0.7 tics. De plus, il est possible d'appuyer sur 2 boutons rapidement, à au moins 2 tics (valeur théorique) d'intervalle, Cependant il faudra attendre un délai d'au moins 0.7 tics (environ) pour pouvoir appuyer sur une nouvelle touche.

Ce filtre se compose de 2 jeux de bascules D de 6 bit, qui retient chacun son tour un caractère (voilà pourquoi 2 caractères rapide ça passe mais pas plus !). Il y a aussi une bascule T pour géré le changement entre les 2 "jeux". Il y a aussi une clock pour gérer la vitesse de lecture, qui est à 0.5 tics !!! Ce qui veut dire qu'il est théoriquement possible de garantir une lecture de RAM à une cadence de 0.5 tic/caractères !

Je pense que le terme technique de ce filtre est "buffer", en tout cas ça fonctionne comme tel.

Prochaine étape, la dernière pour finir la partie "édition", c'est évidemment d'ajouter l'éditeur de caractère !! De plus, il est presque prêt. Je dois juste le refaire en miroir afin qu'il s'adapte mieux à l'ensemble de l'infrastructure. (je viens de trouver la commande world edit, c'est effectivement plus simple XD)

EDIT !!! Le jeux de mémoire se compose de 2 jeux de mémoire D (et pas T)
 
L'écran est passé de 12 caractères à 15 ! Je pourrais encore augmenter, mais je pense que 15 (utilisable sur 4 bit) est le mieux. Peut-être je passerai à 16, si les dimensions me le permettront !

J'ai aussi quelques problème pour installer l'éditeur de caractères. En effet, celui-ci est un peu gros quand même XD. Je dois copier tout ce que j'ai fait et le coller plus loin, pour pouvoir faire quelques essaies de place etc...

Evidemment le télégraphe est visible sur le serveur de la Redlight, qui devrait un jour supprimer la white list afin que quiconque croit en lui ne péri... Enfin puisse aller sur le serveur :meatcooked:.
 
Hum si il est sur serveur demande un backup au cas ou ;), ca gacherai ton travail.
Pour redlight j'ai pas été esclave, ils m'ont ban...donc du coup prendre un autre pseudo juste pour ton travail ca me tente pas trop :D.
Pour la place n'hésite pas à faire grand. Tu pourra toujours réduire ton système quand tu l'aura fini ;)
 
Des niouses ? des niouses ?

Bon, pour le backup, si je perds tout ce sera pas grave. Je commencerai autre chose.

Sinon, j'ai eu mes premières leçons d'assembleurs, et je dois avouer que ce langage de programmation m'a satisfait. Je vais donc faire en sorte que mon télégraphe se programme en une sorte d'assembleur... Ou plutôt directement en byte code :). En mode programmation, on pourra simplement taper les bytes codes les uns après les autres (soit 255 bytes codes). Lorsque qu'on reçoit un texte, un programme ou autre, il sera possible d'exécuter des commandes allant jusqu'à 15 (ou 14) bytes code (la taille de la vraie RAM embarquée).

Pour ce faire je vais créer 4 registres de 6 bits, dont on peut les coupler 2 par 2 pour former 2 emplacement de 12 bit afin de pouvoir faire une recherche de 2 caractères différents (surtout pour chercher un /M#, # étant le n° du message enregistré dans la mémoire interne, si jamais on veut pas se taper tout le message précédent).

Plus tard, j'automatiserai certaines fonctions pour qu'elles s'exécutes automatiquement (par exemple /F pour faire une recherche dans la mémoire).

En ce moment je bosse encore sur la mémoire, j'ai du un peu refaire mais maintenant on est bon. Ne reste plus qu'à adresser, placer, relier, tester, et c'est okay ! Habituellement il y a un bus d'adresse et un bus de données, chez moi il sera possible d'avoir ces 2 bus doubler, respectivement un de chaque pour l'écriture et un de chaque pour la lecture. Mais c'est encore à voir...