ThundeRed - ThundeRed.nitroserv.eu
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le deal à ne pas rater :
Cartes Pokémon EV6.5 : où trouver le Bundle Lot 6 Boosters Fable ...
Voir le deal

Interpréteur de Brainfuck

Aller en bas

Interpréteur de Brainfuck Empty Interpréteur de Brainfuck

Message par Spiikesan Sam 18 Oct - 11:09

Bonjour à tous, je vous expose un projet commun dont le développement pourrait être intéressant : Un interpréteur de Brainfuck.

Commençons par le début :

Le Brainfuck :

C'est un langage inventé dans les années 90. Il est Turing-complet, ce qui signifie qu'il peux faire tout ce qu'une machine de turing peux faire (Les langages C ou Java par exemple sont eux aussi Turing-complet)
Certes, il n'est pas très pratique pour de gros programmes, mais une chose fait sa force : Il ne comporte que 8 opérateurs.

L'opérateur 1000 < permet de décaler le pointeur vers la gauche.
L'opérateur 1001 > permet de décaler le pointeur vers la droite.
L'opérateur 1010 [ est permet de sauter au ] correspondant si la valeur pointée vaut 0.
L'opérateur 1011 ] est permet de sauter au [ correspondant si la valeur pointée vaut 0.
L'opérateur 1100 + permet d'incrémenter (+1) la valeur pointée.
L'opérateur 1101 - permet de décrémenter (-1) la valeur pointée.
L'opérateur 1110 . permet d'afficher (ASCII) la valeur pointée.
L'opérateur 1111 , permet de rentrer une valeur utilisateur dans la case pointée.

Cet ordinateur sera composé de 4 bits pour les instructions, et celles décrites ci dessous sont tous de la forme "1xxx".
Touts le opérateur de la forme "0xxx" seront ce qu'on appelle des macros, c'est à dire des fonctions qui permettent de simplifier et d'accélérer le traitement. Celles-ci seront définies plus tard, et ne sont pas présentes dans le langage originel.

Le Projet :

Ce post sera mis à jour au fur et à mesure des compléments d'informations, et de l'avancée du projet.

Pour le moment, seule une ram basique (servant de ROM) de 16 slots de 8 bits est créée, et sert pour les tests.
Un système d'interface est mis en place pour écrire dans cette ram de façon spécifique : par paire d'opcode (opérateur)
Cette interface permet la sélection de la case mémoire à lire (via bouton) / écrire (automatique après avoir sélectionné une paire d'opcode), d'afficher sur quel élément de la paire on est, d'annuler une saisie en cours (si 1 seul opcode / 2 sélectionné), d'informer lors de l'écriture en ram (après selection), et bien évidement de choisir l'opcode via 8 boutons, et un levier (mode normal/macro)
L'opcode "0000" peut être écrit mais est réservé.
Le système se réinitialise tout les 2 opcodes, après l'écriture, afin de pouvoir recommencer.
La mémoire n'est pour le moment pas automatiquement décalée.

La ram (servant de ram cette fois) sera obligatoirement une ram à 8 bits, car les cases pointées vont de 0 à 255.
La technologie de cette ram est encore en attente, elle sera soit à pistons (comme ce qui sers de rom), soit à comparateurs (tel que sur la parcelle dans le monde des projets.)
L'avantage des comparateurs est l'incrémentation ou la décrémentation facile et rapide de la valeur pointée. Le désavantage est la taille du système.
Tout doit être mis en oeuvre pour avoir une vitesse d'exécution la plus rapide et fiable possible.
Spiikesan
Spiikesan
Admin

Serveur Redstone : thundered.nitroserv.eu
Messages : 5
Date d'inscription : 27/09/2014

https://thundered.forumgaming.fr

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum