[Projet] Ace Script
Posted: 17 Sep 2014, 17:59
Bonjour à tous !
Récemment, j'ai en l'idée de créer un nouveau language de programmation simple qui permettrait, une fois compilé, de réaliser toutes sortes de programmes pour TI z80 ou du moins pour TI-83 Plus...
Concrètement, il serait compilé en C avec z88dk et convertit avec devpac8x, le problème est que je ne saurais jamais convertir de l'Ace Script en Asm z80 (qui est bien trop compliqué pour moi même si j'ai appris à l'utiliser), donc je propose ce projet à qui sera interessé et pourrait m'aider à créer le compilateur Ace Script...
Je vous montre tout de suite la syntaxe de l'Ace Script : (attention la colorisation n'est pas bonne puisque ti planet ne connait pas l'ace script il croit que c'est du javascript ou du c
Comme vous pouvez le constater, il possèdera une bibliothèque de fonctions détaillées ci-dessous.
Les noms de fonctions tels que Screen.write() correspond en réalité à la fonction S_Screen_Write(), les variables V_nomdelavariable, les fonctions F_nomdelafonction,
Les nombres seront gérés en 16 bits (de 0 à 65535), soit 2 octets. Les opérations mathématique seront comme en Axe (sauf qu'on ne pourra assigner de valeurs à des variables dans une op. mathématique)
Pour l'instant, pas de sprites, pas de maps, ni même d'hexadécimal, j'attends vos avis sur le projet pour implémenter des fonctions pour utiliser des tiles, des tilesmap et des fonctions pour gérer l'hexa (genre une fonction qui convertit un sprite hexa en md_int pour dessiner ensuite le sprite, je sais pas trop)
Mon but principal est de gérer les jeux en tout genre, donc ces fonctions-là viendront de toute façon si je crée un compilateur Ace Script.
Compilation
Très simple : on fait du C.
On crée un fichier compile.c, on mets dedans les header + les fonctions de la bibliothèque nécessaires pour le programme + le code du prog. Ace Script convertit en asm z80.
Au niveau de l'éditeur, je suis prêt à me lancer dans la conception d'un logiciel qui fairait IDE, compilateur et émulateur de programmes AceScript.
A noter que pour l'instant, je ne songe qu'à faire un compilateur PC pour Windows, si le projet est mené à terme pourquoi pas ne pas faire des compilateurs Linux et Mac voire même un compilateur on-calc !
J'ai uniquement besoin de vos avis (j'espère qu'ils seront positifs ) et d'un gentil petit développeur qui voudrait bien m'aider à créer un programme pour convertir du code AceScript en code Asm z80 (idem pour la bibliothèque AceScript).
Voilà ! Dites-moi ce que vous en pensez et si quelqu'un souhaite se lancer avec moi dans ce gros projet...
EDIT : je vous donne le lien de la discussion espace ti hihi quelle nouille je fais j'avais oublié http://espace-ti.forumactif.com/t1080-ace-script
Récemment, j'ai en l'idée de créer un nouveau language de programmation simple qui permettrait, une fois compilé, de réaliser toutes sortes de programmes pour TI z80 ou du moins pour TI-83 Plus...
Concrètement, il serait compilé en C avec z88dk et convertit avec devpac8x, le problème est que je ne saurais jamais convertir de l'Ace Script en Asm z80 (qui est bien trop compliqué pour moi même si j'ai appris à l'utiliser), donc je propose ce projet à qui sera interessé et pourrait m'aider à créer le compilateur Ace Script...
Je vous montre tout de suite la syntaxe de l'Ace Script : (attention la colorisation n'est pas bonne puisque ti planet ne connait pas l'ace script il croit que c'est du javascript ou du c
- Code: Select all
#define msg
#define nb
function msg(nb) {
nb++;
Screen.write(nb + ': ' + msg);
return nb;
}
msg = 'Bonjour !';
nb = msg(nb);
Comme vous pouvez le constater, il possèdera une bibliothèque de fonctions détaillées ci-dessous.
Syntaxe
- Code: Select all
// Définir une variable
#define nom_de_la_variable
// Modifier une variable
variable = 'texte';
variable = "texte";
variable = 1;
variable++; // variable = 2
variable--;
variable *= 2; // variable = 2
variable = 'a';
variable += 'b'; // variable = 'ab'
variable = int_array(1, 2);
variable = int[1, 2];
variable = string_array('a', 'b');
variable = string['a', 'b'];
variable = hex_array(0, 57, 255);
variable = hex[0, 57, 255];
// Les tableaux de type hex possèdent une fonction toString();
variable = md_int_array(int_array(1, 2), int_array(3), int_array(4));
variable = md_int[int[1, 2], int[3], int[4]];
// Un tableau int ne pourra contenir que des nombres
// Un table md_int ne pourra contenir que des tableaux int
// Supprimer une variable
#undefine nom_de_la_variable
// Définir une fonction
function nom_de_la_fonction(argument_1, argument_2, argument_3) {
// Code
return "dutexte";
}
// Exécuter une fonction
fonction('coucou', 2, false);
// Conditions
if(variable1 == 'texte') {
// Code
} elseif(!variable1 == 'texte...') {
// Code
} else {
// Code
}
// Boucles
#define fornb
for(fornb = 0; fornb < 50; fornb++) {
// Code
}
while(false == false) {
// Code
}
// Labels
:nom_du_label
// Code
goto nom_du_label
Bibliothèque
Les noms de fonctions tels que Screen.write() correspond en réalité à la fonction S_Screen_Write(), les variables V_nomdelavariable, les fonctions F_nomdelafonction,
- Code: Select all
#define false = 0;
#define true = !false;
Screen // Permet d'utiliser l'écran
Screen.write(text); // Affiche un texte à l'écran
Screen.read(); // Lit le texte afficher à l'écran et le retourne sous forme d'une chaîne de caractères
Screen.output(x, y, text); // Affiche le texte à une position déterminée (x = 0 to 15 and y = 0 to 7)
Screen.clear(); // Efface l'écran
Screen.graph // Permet d'utiliser l'écran graphique
Screen.graph.on(x, y); // Allume un pixel de l'écran graphique
Screen.graph.off(x, y); // Éteint un pixel de l'écran graphique
Screen.graph.get(x, y); // Permet de savoir si un pixel de l'écran graphique est allumé
Screen.graph.clear(); // Efface l'écran graphique
Screen.graph.show(); // Efface l'écran texte puis affiche l'écran graphique
Screen.graph.use(scr); // Spécifie l'utilisation de l'un des cinq écrans (tous des md_int) qui seront ensuite affichés
Screen.graph.line(x, y, nx, ny); // Trace une ligne sur l'écran graphique
Screen.graph.circle(x, y, radius); // Trace un cercle sur l'écran graphique
Screen.graph.rect(x, y, nx, ny); // Trace un rectangle vide sur l'écran graphique
Screen.graph.fillRect(x, y, nx, ny); // Trace un rectangle plein sur l'écran graphique
Keyboard // Permet d'utiliser le clavier, les codes de touches sont les mêmes qu'en TI-Basic
Keyboard.get(); // Permet de récupérer la touche actuellement pressée
Keyboard.last(); // Permet de récupérer la dernière touche pressée par l'utilisateur
Keyboard.bas(); // L'équivalent de getKey en TI-Basic (mémorise la dernière touche puis s'efface)
Files // Permet d'utiliser le système de fichiers
Files.write(name, value); // Écrit dans un programme
Files.writeHex(name, value); // Écrit un contenu hexadécimal dans un programme, value doit être un tableau hex
Files.read(name); // Lit le contenu d'un programme, false si erreur
Files.exists(name); // Permet de savoir si un programme existe
Files.delete(name); // Supprimer un programme
Files.list(); // Retourne un tableau de string contenant le nom de tous les programmes existants
Files.archive(name); // Mets un programme en mémoire d'archive
Files.unarchive(name); // Mets un programme en mémoire vive
Files.isarchived(name); // Permet de savoir si un programme est archivé
Files.appvar // Permet d'utiliser les appvar, les fonctions sont les mêmes que pour Files
Files.prgm // L'équivalent de Files, mais permet de mieux s'y retrouver quand on code
Files.apps // Permet d'utiliser les applications, je ne sais pas quelles fonctions j'y mettrais...
// Files.apps n'existera que si ça doit vraiment servir puisque l'Ace Script est à la base pour les jeux vidéos
Maths
Les nombres seront gérés en 16 bits (de 0 à 65535), soit 2 octets. Les opérations mathématique seront comme en Axe (sauf qu'on ne pourra assigner de valeurs à des variables dans une op. mathématique)
Sprites & Maps
Pour l'instant, pas de sprites, pas de maps, ni même d'hexadécimal, j'attends vos avis sur le projet pour implémenter des fonctions pour utiliser des tiles, des tilesmap et des fonctions pour gérer l'hexa (genre une fonction qui convertit un sprite hexa en md_int pour dessiner ensuite le sprite, je sais pas trop)
Mon but principal est de gérer les jeux en tout genre, donc ces fonctions-là viendront de toute façon si je crée un compilateur Ace Script.
Compilation
Très simple : on fait du C.
On crée un fichier compile.c, on mets dedans les header + les fonctions de la bibliothèque nécessaires pour le programme + le code du prog. Ace Script convertit en asm z80.
Au niveau de l'éditeur, je suis prêt à me lancer dans la conception d'un logiciel qui fairait IDE, compilateur et émulateur de programmes AceScript.
A noter que pour l'instant, je ne songe qu'à faire un compilateur PC pour Windows, si le projet est mené à terme pourquoi pas ne pas faire des compilateurs Linux et Mac voire même un compilateur on-calc !
Pour résumer
J'ai uniquement besoin de vos avis (j'espère qu'ils seront positifs ) et d'un gentil petit développeur qui voudrait bien m'aider à créer un programme pour convertir du code AceScript en code Asm z80 (idem pour la bibliothèque AceScript).
Voilà ! Dites-moi ce que vous en pensez et si quelqu'un souhaite se lancer avec moi dans ce gros projet...
EDIT : je vous donne le lien de la discussion espace ti hihi quelle nouille je fais j'avais oublié http://espace-ti.forumactif.com/t1080-ace-script