Redstone [Pas à pas] Minecraft Redstone Calculator

Termynus

MazeCrafter / Redstonologue
28 Octobre 2012
18
3
3
35
[Tuto pas à pas] Minecraft Redstone Calculator

Première partie




Plan :

Préambule
I - Principe général du circuit
II - Notions de base en binaire
III - Convertisseur DTB
IV - Convertisseur BTD
V - Affichage

Préambule :
Il y'a deux jours, je me promène sur youtube et je tombe, par hasard, sur des vidéos présentant des calculateurs en redstone... Au premier abord, je suis terrassé à l'idée de la complexité de son fonctionnement, puis, au fur et à mesure des vidéos une phrase se répète dans ma tête : "Pourquoi pas moi?". Et ainsi, je crée un flatgrass, pose quelques blocs et 10 boutons, de 0 à 9...
C'est à ce moment que je me suis dis mince, par quoi commencer? *Réflexion*... Bien sûr ! La base du calculateur, c'est la conversion binaire qui me permettra de traiter des données. Je me lance donc dans un essai de convertisseur DTB (Decimal to binary) relativement simple, avant de me casser les dents sur le convertisseur inverse, le BTD (Binary to decimal)... Pas de panique ! Après quelques essais, je finis par rendre fonctionnel mes deux convertisseurs. Finalement, la seule chose manquante pour avoir un aperçu de mon travail, c'est un affichage segmentaire (le même que sur vos réveils électroniques), ce que je m'empresse de créer.
Et alors, je me dis, très bien, j'ai réussis. Et là une nouvelle phrase retentis dans ma tête : "Pourquoi pas vous?"
Je décide donc de créer ce tutoriel pas à pas que j'updaterai en fonction de ma propre progression.
Vous l'avez compris, à l'heure qu'il est je ne suis pas vraiment plus avancé que vous, votre progression et la mienne sont synchronisées si vous suivez ce tuto !

A savoir : avant d'entamer cette création, mon niveau en redstone me permettait difficilement d'actionner quelques pistons pour faire des portes cachées... autant vous dire que ce n'était pas brillant. C'est à dire que si vous n'y connaissez rien mais que vous êtes chaud pour vous lancer là dedans, pas de problème ! (Il suffit d'avoir un peu de logique)
Je ne dis pas que si vous n'avez jamais touché à de la redstone vous allez comprendre tout ce qui sera présenté dans ce tuto, mais qu'avec quelques bases, la seule difficulté à surmonter sera de comprendre le cryptage binaire, et il s'agira là de la première partie de mon tuto.

/!\ Dans ce tuto, je vais utiliser un vocabulaire qui m'est propre ainsi que des structures qui me sont propres, ce tutoriel n'est probablement pas la meilleure manière de créer un calculateur, et les noms utilisés ne sont probablement pas ceux qui sont utilisés conventionnellement.
Cela signifie aussi que ce qui se trouve sur cette map a été créé par moi même uniquement, sans l'aide d'un tuto extérieur. Cela m'appartient donc, merci de ne pas vous l'approprier !
De plus, je n'inclus pas de screens dans ce tuto, puisque vous disposez de la map en téléchargement en bas de ce post. Et je m'y rapporterai souvent au cours du tuto.

I - Principe général du circuit
Le premier circuit que je vais uploader est purement inutile, il est plus complexe qu'il ne devrait, je m'explique, voici le schéma du circuit actuel :
Input (décimal) -> Encrypteur DTB -> Décrypteur BTD -> Traduction décimal/affichage ->
Affichage
Comme vous voyez, on pourrait passer directement de l'input décimal à l traduction en segments d'affichages, mais l'idée ici est de comprendre le cryptage binaire !
Nous allons donc voir comment convertir une entrée décimal en binaire et inversement.

II - Notions de bases en binaire
Le binaire, je vais pas vous faire tout un cours dessus, du moins pas dans ce début de tuto dans lequel je vais essayer de vous épargner mes réflexions un peu trop étranges (Auxquels vous aurez droit quand je posterai le tuto suivant sur l'addition).
En quelques mots voilà donc ce que vous avez à retenir : (Issu de ce site : http://villemin.gerard.free.fr/Wwwgvmm/Numerati/BINAIRE/Debutant.htm)
Le binaire c'est une suite d'impulsion, soit 0 (inactif/off/éteint), soit 1 (actif/on/allumé). Ca tombe bien, la redstone répond aux mêmes paramètres, soit allumée, soit éteinte. On va donc pouvoir coder n'importe quoi en binaire en utilisant la redstone.
On va donc transformer des entrées du système décimal, c'est à dire les chiffres de 0 à 9 en système binaire donc en 1 ou 0. Pour coder un chiffre décimal, on aura besoin au maximum de 4 données binaires, que l'on note dans l'ordre M, C, D et U (Milliers, Centaines, Dizaines, Unités).
Je vous mets les valeurs utiles pour ce tuto, pour ceux que ça interesse, le site explique comment les calculer (Vous n'aurez pas besoin de comprendre comment les calculer pour ce tuto) :

Chiffre_décimal___Binaire___
____________M_C_D_U_
_____1_______0_0_0_ 1_
_____2_______0_0_1_0_
_____3_______0_0_1_1_
_____4_______0_1_0_0_
_____5_______0_1_0_1_
_____6_______0_1_1_0_
_____7_______0_1_1_1_
_____8_______1_0_0_0_
_____9_______1_0_0_1_
_____0_______0_0_0_0_

(Wah, quelle superbe mise en page ! Et oui, j'aurai pu coller une image mais bon...)
Ok, donc vous voyez que chaque chiffre décimal correspond à un nombre binaire unique composé soit de 0 ou de 1, donc soit activé, soit désactivé.
On va maintenant voir comment transcrire ça sur minecraft, à vos cubes !

III - Convertisseur DTB
Bien ! On va pouvoir passer aux choses sérieuses !
Alors, le convertisseur DTB, qu'est ce que c'est que ce nom barbare? C'est comme ça que j'ai appelé la première unité présentée sur la map, c'est à dire celle qui est juste derrière le panneau de contrôle, elle est encadrée en vert.
Le panneau de contrôle nous envoie donc des informations de type décimal, 0 à 9 et on veut passer à soit 0 soit 1 sur le câble redstone qui correspond à U, soit 0 soit 1 sur D, pareil sur C et M.
Comment faire? Un convertisseur dans minecraft, ça se fait sur un schéma assez simple, il suffit de "croiser" autant d'entrées qu'on a avec autant de sorties qu'on veut, et dire quel paramètre correspond à quoi, explication :
Je prends le 5 en exemple, il s'écrit 0101 en binaire, donc M=0, C=1, D=0, U=1.
Donc si j'active 5 sur le panneau de contrôle, le câble redstone input correspondant au niveau du DTB devra activer uniquement les sorties C et U !
Pour faire ça, c'est très simple comme vous pouvez le voir sur la map, il suffit de placer une torche redstone sur le côté de l'input, torche qui agit comme un inverseur, lorsque l'on baisse un levier décimal, le câble input s'inverse et devient inactif, donc l'inverseur du DTB s'inverse lui aussi et devient actif, donc le câble output du DTB devient actif. Si les torches sont en face des bonnes correspondances binaire, notre signal est convertis !

EDIT : J'ai oublié de mentionner que pour des raisons techniques j'avais convertis 0 décimal en 1111 au lieu de 0000 binaire, 1111 correspondant normalement au 15, mais nous n'en aurons pas besoin (je l'espère, au moment où j'écris ça)

IV - Convertisseur BTD
C'est la seconde unité, elle est encadrée en bleu sur la map.
Celui-ci demande déjà un peu plus de connaissances en redstone, rien de bien méchant.
L'idée est donc ici de convertir un input à 4 entrées binaires, en output à 9 entrées décimales. Seulement voilà, chaque code binaire correspond à un seul chiffre décimal...
Nous allons donc avoir besoin d'une porte conditionnelle qui va nous dire : exemple avec le 5 :
"Si M=0 ET C=1 ET D=0 ET U=1, ALORS il s'agit du 5 décimal, SINON il ne s'agit pas du 5 décimal" et ce pour chaque entrée décimal, jusqu'à ce qu'il comprenne de quel chiffre il s'agit.
En fait, le ALORS correspondra à l'activation du câble qui part en direction de l'unité suivante, le SINON correspond à aucun changement, c'est à dire que le câble restera inactif.
Voyons comment réaliser cette porte :
Tout d'abord, vous voyez que chaque câble qui arrive a ses données copiées vers le bas par un double inverseur en colonne, il est inutile au programme, il permet juste de faire "descendre" la redstone.
La partie intéressante se situe après, vous trouverez sous les inputs une sorte de râteau avec soit juste de la redstone, soit une torche. Encore une fois la torche va correspondre à 1 et la redstone va correspondre à 0, il nous suffit juste de replacer correctement les torches en fonction de la correspondance binaire du décimal qu'on essaye de décrypter, et le tour est joué.
Si la séquence binaire correspond en tout point, chaque torche sera désactivée, le râteau sera désactivé, l'inverseur jouera son rôle et sera activé, le signal sera transmis.
Si la séquence binaire ne correspond pas, soit on aura activé un ou plusieurs 0, donc le râteau sera activé, l'inverseur restera inactif, soit on aura pas désactivé une ou plusieurs torche(s), donc le râteau sera activé, inverseur désactivé, vous voyez le truc.
Si vous avez tout bien suivi, félicitations, vous avez compris comment crypter/décrypter le décimal en binaire !

V - Affichage
Je ne m'étendrai pas plus sur le principe de l'affichage, je vous laisse examiner mon circuit (Il est très moche je sais, mais je fais ce que je peux hein !).
De plus, si vous avez compris le principe de codage DTB/BTD, vous êtes maintenant capable de coder selon n'importe quel système vers n'importe quel système.
Tout ce que je vous dirai sur l'affichage c'est que chaque input correspond à un décimal, chaque output à un segment de l'écran.

Voilà pour cette première partie de tutoriel sur les (super) calculateurs minecraft !
Je le répète, tout ce qui est présenté ici, je l'ai imaginé et mis en oeuvre moi même, donc pas de cri au plagiat si ça ressemble à quelque chose qui existe déjà (Auquel cas je suis désolé), si mon système ressemble à un préexistant, c'est juste la preuve qu'il n'y a pas tant de manières de le faire.

Prochaine étape : On intercalera une fonction addition entre les 2 convertisseurs ! (Là ils seront utiles) Attention, l'addition commence à être très compliquée par rapport à ce qui est présenté dans cette première partie. J'ai réussis à la faire fonctionner hier après 6 heures de boulot dessus non stop, sachant que ma méthode personnelle d'addition n'est sans doute pas la meilleure (Mais je suis fier du résultat x') )

V Download Link ! V
 

Fichiers joints

  • J'aime
Reactions: Pachyderme
Bravo !
Tutoriel bien construit quoi que un peu trop long pour ce que c'est. Mise en page parfaite. Rien a redire, j'ai hâte de voir ton système d'addition en lui même !
Je trouve ton décodeur binaire (BTD) très intéressent !
Mais je te trouve un peu trop "matérialiste"(c'est pas le bon mot mais c'est pas grave xD), ce système ne t’appartient pas, a tu mis un copy-right dessus ? Si tu l'a posté sur ce forum c'est pour le partager. Tous le monde est endroit de reproduire en en totalité ou en parti "ton" système (ce que je vais surement faire pour ton décodeur ;)) sans avoir a mentionné ton nom.
Bref, très très bonne idée ! Bonne continuation dans ta calculatrice ;)
 
Way, je ne ne prohibe pas la copie, au contraire ! Désolé si j'ai paru possessif (Sans doute le mot que tu cherchais ;) ), c'était juste pour dire de ne pas me "piquer" ma map en prétendant l'avoir faite soi même, après si des gens s'en inspirent, même pour l'améliorer, au contraire vous m'en verrez flatté :)
Pour ce qui est de la complexité, effectivement il n'y a rien de bien compliqué au niveau du circuit en lui même, mais j'avais peur d'être trop léger dans les explications, ce tuto a quand même, je le rappelle, une visée tout public, c'est à dire qu'il doit être compréhensible par des gens qui n'auraient pas forcément un excellent niveau en maths/redstone (Même si y'a pas encore trop de maths là, je concède.)
Le système d'addition est déjà au point, et celui là, étant donné que j'ai conceptualisé moi même le principe de la fonction comme vous le verrez lorsque je l'uploaderai, est beaucoup plus complexe (Dans le sens ou après l'avoir terminé, j'avoue avoir moi même du mal à le lire. Et fun fact : il est plus puissant que je le pensais, mais vous comprendrez aussi lorsque je l'uploaderai.).
Si tu as du courage, tu peux déjà le voir au sol sous le panneau de contrôle, il a juste les entrées et la sortie en binaire pour le moment, je le raccorderai au reste pour un affichage plus humainement compréhensible quand j'en aurai le temps :)
Restez à l'écoute pour la prochaine partie !
 
Je doit t'avouer que je n'ai pas tout compris a ton système d'addition, mais il me semble qu'il reprend plus ou moins les mêmes bases que le système classique avec les full-adders. Je soupçonne même que tu les aient inclus dans ton système sans t'en rendre compte. Autrement, cela serais très surprenant.
 
Les full-adders, je ne connais pas lol, mon système d'addition comprend (De mon point de vue) uniquement des portes XOR et AND/NAND je sais pas trop, faut dire qu'en redstone je bidouille un peu dans mon coin sans trop m’intéresser à ce qui se fait conventionnellement. De plus le système est assez trash pour l'instant, je crois qu'il y'a une redondance monstrueuse dans les sorties m'enfin, je l'ai bouclé à 2h du mat' donc faut pas trop m'en vouloir.

EDIT : J'irai peut être bien jeter un oeil à ton histoire de full-adder des fois que ça me permette de compacter un peu le système.
 
  • J'aime
Reactions: Pachyderme
C'est ça ^^ un full-adder est un mix entre quelques portes bien connus, mais agencé d'une telle manière que une foie fini on ne peu plus distinguer une porte d'un autre. Je considère donc le full-adder comme une porte bien propre a elle même. Bref, je vais essayer de te montrer ce que ton système peu donner avec des full-adder. Je le garanti pas pour ce soir, je ne sais pas faire les full-adder sans model.
 
  • J'aime
Reactions: Termynus
Ok merci, j'y regarderai aussi histoire d'en comprendre le fonctionnement ;)
 
C'est bien de prendre des initiatives comme ca :) (moi qui suis un gros flemmard XD).
Vais essayer d'apprendre ça vu que les calculettes j'ai jamais essayé ;D.
EDIT: Je vois que ta map est bien avancée ;)
 

Fichiers joints

  • 2012-11-01_22.33.29.png
    2012-11-01_22.33.29.png
    577.5 KB · Vues : 349
  • 2012-11-01_22.33.42.png
    2012-11-01_22.33.42.png
    705.3 KB · Vues : 369
Pachyderme je te conseille mediafire il faut juste s'inscrire et le download est rapide ;)
Par contre c'est quoi ces portes logiques j'ai jamais vu ca :eek: