_____ ______ _ _ ______ / ___| | ___| | | | | ___ \ v1.3.2 BETA \ `--. ___ __ _| |_ __ _ _ _| | |_| |_/ / __ ___ __ _ `--. \/ _ \/ _` | _/ _` | | | | | __| __/ '__/ _ \ / _` | /\__/ / __/ (_| | || (_| | |_| | | |_| | | | | (_) | (_| | \____/ \___|\__, \_| \__,_|\__,_|_|\__\_| |_| \___/ \__, | __/ | __/ | |___/ |___/ Repository du projet : http://www.depotware-network.net/segfaultprog ================================================================================ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. http://www.gnu.org/licenses/gpl.html ================================= DOCUMENTATION ================================ SegFaultProg 1.3.2 SegFaultProg 1.3.2 NOM segfaultprog VERSION 1.3.2 DESCRIPTION Pour comprendre le projet SegFaultProg, il faut remonter aux années 2007/2008. Tout à commencé dans un petit village de la plaine jurassienne, dans une campagne rurale qui n'a strictement rien à voir avec le fond de l'histoire. Passé ces considérations rhétoriques, le problème peut être développé : Quand on parle de programmation, on pense tout de suite au C ou à l'assembleur (du moins quand on sait de quoi on parle), voir au Lisp, au Perl, etc... Tous ces langages, et les autres, ont leur lots de points forts, et de points faibles, qui correspondent à leur domaine d'utilisation respectifs. On peut facilement s'accorder sur un point : le langage parfait n'existe pas. Le C et l'assembleur sont parfaits pour des applications puissantes, légères, et pointues, mais ils ont la fâcheuse tendance de devoir être compilés pour la machine sur laquelle ils sont utilisés, ce qui les rends au final assez peut souples en terme de partage et de portabilité instantanée. On peut alors se tourner vers des langages en machine virtuelle, comme le Java, le Python, le Ruby... Mais très vite, les besoins considérables de ces langages en terme de ressource évincent toute une gamme de supports très utilisés dans les domaines du bricolage, ou du DIY. Le SegFaultProg est destiné à ce genre d'applications. Il utilise une Machine virtuelle applicative simple et légère. C'est un langage dérivé du BrainFuck, un langage minimaliste très peut ergonomique permettant une gestion efficace d'un système logique de base (une zone de mémoire, un pointeur, et des instructions d'Entrée/Sortie), et y intègre un jeu d'instruction plus léger, plus ergonomique, tout en conservant son coté « bas niveau », et sa simplicité d'interprétation. NOTES INSTRUCTIONS > (OPTIONS) : Incrémente le pointeur mémoire (de OPTION cases) < (OPTIONS) : Décrémente le pointeur mémoire (de OPTION cases) * [ARGUMENT] : Place le pointeur à l'adresse ARGUMENT + (OPTIONS) : Incrémente la valeur de l'octet (de OPTION unités) - (OPTIONS) : Décrémente la valeur de l'octet (de OPTION unités) [ : Commence une boucle ] : Retour au [ correspondant si la valeur de l'octet courant est nulle . : Ecrit la valeur de l'octet courant sur la sortie. , : Demande une saisie utilisateur x ! [ARGUMENT] : Réservé pour les instructions spécifiques x # : Réservé pour les instructions de configuration --- ERRATA 02/10/10 x ( : Création d'une subroutine. x ) : Equivalent de "return()" met fin à une subroutine. x : : Appel d'une subroutine. ------------------------------------------------------------------------ x: instructions non implémentées dans cette distriution. FICHIERS ./sfp_core.c ./sfp_core.h AUTHORS Gery DUBIEF Tixlegeek http://www.tixlegeek.com TRADUCTION fr seulement. sfp_vma 23-08-10 SegFaultProg 1.3.2 ================================= ANNEXE ======================================= PLAN MEMOIRE ACCESSIBLE VIA LA FONCTION "dump()" DUMP SEGFAULTPROG BUFFER Taille : 128 Erreurs : 0 0x000:0x000; 0x001:0x000; 0x002:0x000; 0x003:0x000; 0x004:0x000; 0x005:0x000; 0x006:0x000; 0x007:0x000; 0x008:0x000; 0x009:0x000; 0x00A:0x000; 0x00B:0x000; 0x00C:0x000; 0x00D:0x000; 0x00E:0x000; 0x00F:0x000; 0x010:0x000; 0x011:0x000; 0x012:0x000; 0x013:0x000; 0x014:0x000; 0x015:0x000; 0x016:0x000; 0x017:0x000; 0x018:0x000; 0x019:0x000; 0x01A:0x000; 0x01B:0x000; 0x01C:0x000; 0x01D:0x000; 0x01E:0x000; 0x01F:0x000; 0x020:0x000; 0x021:0x000; 0x022:0x000; 0x023:0x000; 0x024:0x000; 0x025:0x000; 0x026:0x000; 0x027:0x000; 0x028:0x000; 0x029:0x000; 0x02A:0x000; 0x02B:0x000; 0x02C:0x000; 0x02D:0x000; 0x02E:0x000; 0x02F:0x000; 0x030:0x000; 0x031:0x000; 0x032:0x000; 0x033:0x000; 0x034:0x000; 0x035:0x000; 0x036:0x000; 0x037:0x000; 0x038:0x000; 0x039:0x000; 0x03A:0x000; 0x03B:0x000; 0x03C:0x000; 0x03D:0x000; 0x03E:0x000; 0x03F:0x000; 0x040:0x000; 0x041:0x000; 0x042:0x000; 0x043:0x000; 0x044:0x000; 0x045:0x000; 0x046:0x000; 0x047:0x000; 0x048:0x000; 0x049:0x000; 0x04A:0x000; 0x04B:0x000; DOMAINES NOMMÉS * 0x04C:0x000; 0x04D:0x000; 0x04E:0x000; 0x04F:0x000; 0x050:0x000; 0x051:0x000; 0x052:0x000; 0x053:0x000; 0x054:0x000; 0x055:0x000; 0x056:0x000; 0x057:0x000; 0x058:0x000; 0x059:0x000; 0x05A:0x000; 0x05B:0x000; 0x05C:0x000; 0x05D:0x000; 0x05E:0x000; 0x05F:0x000; 0x060:0x000; 0x061:0x000; 0x062:0x000; 0x063:0x000; 0x064:0x000; 0x065:0x000; 0x066:0x000; 0x067:0x000; 0x068:0x000; 0x069:0x000; 0x06A:0x000; 0x06B:0x000; 0x06C:0x000; 0x06D:0x000; 0x06E:0x000; 0x06F:0x000; 0x070:0x000; 0x071:0x000; 0x072:0x000; 0x073:0x000; 0x074:0x000; 0x075:0x000; 0x076:0x000; 0x077:0x000; 0x078:0x000; 0x079:0x000; 0x07A:0x000; 0x07B:0x000; 0x07C:0x000; 0x07D:0x000; 0x07E:0x000; 0x07F:0x000; * il est possible de sélectionner directement les octets en fin de buffer en utilisant l'instruction "*". Exemple: *A+5 : l'octet nommé A est incrémenté de 5. = 'A+=5' *B[-]+5 : l'octet nommé B est remis à 0, puis incrémenté de 5. = 'B=5' -------------------------------------------------------------------------------- DEFINITIONS DES VALEURS PAR DEFAUT DANS ./sfp_core.h #define WATCHDOG_INIT 10000 // Watchdog #define REGSIZE 128 // Taille du buffer de travail #define REGADDR REGSIZE-52 // Offset direct de la mémoire nommée #define SUBLOOPS 10 // Nombre de boucles imbriquées #define MAX_IN_SIZE 12 // Taille maximale d'une saisie -------------------------------------------------------------------------------- EXEMPLE DE CODE SOURCE FONCTIONNEL >120+19[>+5<-]+3[>-4<-]>+.<+3[>+7<-]>.<+3[>+5 <-]>.<+3[>-4<-]>.<++[>-3<-]>-.++.--..<++[>+3<-]>.[-]<+6[>+7 <-]>+4.<+6[>+9<-]>-.<+5[>++<-]>++.--. SORTIE: Tixlegeek.com ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *A+H.[-]+e.+7..+3.*B+32.*A+8.-8.+3.[-]+d. SORTIE: Hello world --------------------------------------------------------------------------------