1

Voilà il y a longtemps quand j'avais la TI-92 j'ai commencé à développé une librairie en ASM pour casser les limites du Basic comme Flib et Vertel sur TI-92+ et TI-89 et malheuresement je ne l'ai jamais terminé. Mon programme est en nostub et très rapide. Je pense que les possésseurs de TI-92 voudrais avoir un tel programme sur leurs TI-92 et ainsi améliorer considérablement le Basic de celle-ci c'est pour ça que si quelqu'un désire reprendre ce programme pour le finir et pourquoi pas ajouter des fonctions... Dans ce cas je serait ravis d'envoyer le code source.... A savoir que c'est mon premier programme en ASM donc encore optimisable. smile
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

2

what confus
geogeo
a écrit : Voilà il y a longtemps quand j'avais la TI-92
Mon programme est en nostub

Euh... N'y-a-t'il pas une contradiction là? La TI-92 n'a pas de support assembleur natif!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

Oui tu as résond il faut obligatoirement Fargo 2.0 je n'y avait plus pensé puisque Fargo n'est pas visible en faite.

Cela peut paraître bizarre que je propose ceci mais en effet les possesseurs de TI-92 sont laissé à l'oublie et je pense qu'en reprennat BasicLib cela permetterais a des possesseurs de la TI-92 mais qui ne connaissent pas l'ASM de faire des programmes interessant en Basic avec ma librairie BasicLib donc si quelqu'un veut reprendre mon programme, il n'y a pas de problème. smile
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

4

Voici le code source:; Programme Fargo II ;============================================================================= ; Date de création: Lundi 27 mai 2002 ; 45.8 233.32 292.0 292.0 292.0 292.0 ;============================================================================= ; Ce programme permet d'utiliser des fonctions de l'assembleur sans connaître l'assembleur avec ; une ligne de commande comportant une chaîne de caractère: ; Ex: Blib ("version") ; ; Auteur: Geoffrey ANNEHEIM ; Dernière modification: Mercredi 3 juillet 2002 ; ; Remerciements à ; Gareth James pour son fichier files.txt ; David Ellsworth pour avoir implanté Fargo et pour son fichier testfunc.asm INCLUDE "tios.h" ;Insére la bibliothèque TIOS XDEF _main ;Définit la fonction Main ;XDEF _Proc_table ;Table des fonctions XDEF _comment ;Commentaire sur BasicLib XDEF _tibasic ;Définit les adresses du TI-Basic writeStr MACRO ; X, Y, COL, STR Macro d'affichage d'un texte move.l \1,-(a7) ; Déplace le paramètre 1 (mot) dans la pile SP jsr tios::ST_showHelp ; Appelle la fonction tios@0001 lea 4(a7),a7 ; Restaure SP de 4 pointeurs soit 4=4 jsr ngetchx ; Appelle la fonction Idle_loop flib@000B ENDM ;Fin de la macro WriteStr2 MACRO ; X, Y, COL, STR Macro d'affichage d'un caractère move.w #4,-(sp) ; Déplace le nombre hexa (Long mot) dans la pile SP move.l \1,-(sp) ; Déplace le nombre hexa (Long mot) dans la pile SP ;Pea \1(PC) move.w #50,-(sp) ; Déplace le paramètre 2 (mot) dans la pile SP move.w #50,-(sp) ; Déplace le paramètre 3 (mot) dans la pile SP jsr tios::DrawStrXY ; Appele la fonction tios@0011 lea 10(sp),sp ; Restaure SP de 14 pointeurs soit 4+4+2+2+2=14 jsr ngetchx ; Appelle la fonction Idle_loop flib@000B ENDM ;Fin de la macro WriteChar MACRO MOVE.w #$00FF,-(A7) ; empile une valeur MOVE.w #$0000,-(A7) ; empile une valeur MOVE.w #$00FF,-(A7) ; empile une valeur MOVE.w #4,-(A7) ; empile la couleur MOVE.w #50,-(A7) ; empile l'ordonnée MOVE.w #50,-(A7) ; empile l'abscisse MOVE.w \1,-(A7) ; empile le code du caractère, ici '0' JSR tios::DrawCharXY ; appelle la fonction LEA 14(A7),A7 ; restaure la pile de 2+2+2+2+2+2+2=14 jsr ngetchx ENDM ;============================================================================================== ; Procédure de table ; ; Cette procédure contient les fonctions de cette librairie, max_func=Nombre maximal de fonction -1 car commence par 0 ; Exec_Table=Table d'exécution des fonction. ; ;lea.l f_fonction(pc),a0 ;Enregistre l'adresse de la fonction dans A0 pour une comparaison sur 32 Bits ;dc.b fonction ;Enregistre la chaîne de caractère dans A0 ; ;N'OUBLIEZ PAS DE CREER LES LABELS POUR UNE FONCTIONS IL EN FAUT 3. ; ;============================================================================================== _Proc_table lea.l version_str(pc),a0 bsr cmp_str tst.w d0 beq version lea.l font_str(pc),a0 bsr cmp_str tst.w d0 beq font lea.l fontgetsys_str(pc),a0 bsr cmp_str tst.w d0 beq fontgetsys lea.l off_str(pc),a0 bsr cmp_str tst.w d0 beq off lea.l contrast_str(pc),a0 bsr cmp_str tst.w d0 beq contrast lea.l getcontrast_str(pc),a0 bsr cmp_str tst.w d0 beq getcontrast lea.l showhelp_str(pc),a0 bsr cmp_str tst.w d0 beq showhelp lea.l erasehelp_str(pc),a0 bsr cmp_str tst.w d0 beq erasehelp lea.l linehelp_str(pc),a0 bsr cmp_str tst.w d0 beq linehelp lea.l stbusy_str(pc),a0 bsr cmp_str tst.w d0 beq stbusy lea.l drawstr_str(pc),a0 bsr cmp_str tst.w d0 beq drawstr lea.l pause_str(pc),a0 bsr cmp_str tst.w d0 beq pause lea.l getkey_str(pc),a0 bsr cmp_str tst.w d0 beq getkey lea.l setapd_str(pc),a0 bsr cmp_str tst.w d0 beq setapd lea.l rstapd_str(pc),a0 bsr cmp_str tst.w d0 beq rstapd lea.l clrscr_str(pc),a0 bsr cmp_str tst.w d0 beq clrscr ;S'il ne trouve aucune fonction alors afficher 'Syntaxe' et quitter bra err2 rts ;----------------------------------------------------- ;Ecriture des fonctions (de préférence en minuscule ;Pour faciliter la programmation sous le TI-Basic). version_str dc.b "version",0 font_str dc.b "font",0 fontgetsys_str dc.b "fontgetsys",0 off_str dc.b "off",0 contrast_str dc.b "contrast",0 getcontrast_str dc.b "getcontrast",0 showhelp_str dc.b "showhelp",0 erasehelp_str dc.b "erasehelp",0 linehelp_str dc.b "linehelp",0 stbusy_str dc.b "stbusy",0 drawstr_str dc.b "drawstr",0 pause_str dc.b "pause",0 getkey_str dc.b "getkey",0 setapd_str dc.b "setapd",0 rstapd_str dc.b "rstapd",0 clrscr_str dc.b "clrscr",0 ; cmp_str ; Compare des adresse et met dans D0 une valeur ; D0.w=0 s1=s2 ; D0.w<0 s1<s2 ; D0.w>0 s1>s2 cmp_str: move.l a0,str_cmp move.l str_cmp,a1 \loop tst.b (a0) beq.s \bon move.b (a0)+,(a1)+ bne.s \loop \bon move.l str_cmp,-(a7) move.l str,-(a7) jsr tios::strcmp lea 8(a7),a7 rts ; printf_nbr ; Prépare l'affichage d'un nombre sous forme d'expression ; Convertie un nombre sur 16 bits en chaîne de caractère ; INPUT: D0.B Nombre ; OUTPUT: A2.l Pointe sur la chaîne de caractère 'aff_nbr' printf_nbr: move.b #1,ind_aff_nbr clr.b d1 move.w #10,d2 cmp.w #9999,d0 ; Vérifie si le nombre dépasse 9999 car indice de multiplication ne peut pas dépasser 16 bits bls \calc_digits ; Sinon calculer digits Bra \digit5 ; Dans ce cas digits=5 D1=5 \calc_digits addq.b #1,d1 ; Ajoute 1 dans D1 car un nombre simple comporte au minimum 1 digits cmp.w d0,d2 ; Vérifie si multipliacteur D2 > à D0 bgt \suite ; Si D2 < D0 alors aller à la Conversion en chaîne de caractère mulu.w #10,d2 ; Sinon multiplier par 10 D2 bra \calc_digits ; Continuer le calcule des digits \digit5 moveq.b #5,d1 \suite clr aff_nbr lea aff_nbr(pc),a2 subq.b #1,d1 \print_loop divu #10,d0 swap d0 add.b #48,d0 move.b d0,-(a2) clr.w d0 swap d0 dbra.b d1,\print_loop bsr show_printf_nbr rts ;show_printf_nbr ;Affiche un chaîne de caractère sous forme d'expression ;INPUT: A2.l Registre ou se trouve les caractères à enregistrer show_printf_nbr moveq #0,d0 bsr PushToken \loop tst.b (a2) beq.s \bon move.b (a2)+,d0 bsr PushToken bne.s \loop \bon moveq #0,d0 bsr PushToken rts ; Affiche un texte en tant que fonction ; Input: A2.L Registre ou se trouve les caractères à enregistrer printf_str: moveq #0,d0 bsr PushToken \loop tst.b (a2) beq.s \bon move.b (a2)+,d0 bsr PushToken bne.s \loop \bon move.b #0,d0 bsr PushToken moveq #$2D,d0 bsr PushToken move.b #2,tios::globals+$126E rts ;newstr Procédure de départ ;Trouve la fonction et l'enregistre dans str ;S'arrête avant un ":" et un "|" ou fin de la chaîne ;":"=Fonctions avec paramètres ;"|"=Fonctions sans paramètres ;#0=Fin de la chaîne de caractère newstr: \loop tst.b (a0) ;Vérifie si la chaîne est atteinte beq.s \bon ;Si opérateur Z=0 alors aller à bon cmp.b #58,(a0) ;Si caractère=: beq.s \bon ;alors aller à bon cmp.b #124,(a0) ;Si caractère=| beq.s \bon ;Alors aller à bon move.b (a0)+,(a1)+ ;Copie le caractère courant dans le registre A1 8 bits (A1 est un registre temporaire, en effait il permet d'incrémenter A0 mais le caractère en enregistré dans str bra.b \loop ;Va à loop \bon clr.b (a1) ;Efface le caractère nul bra _Proc_table exit rts ;Fin de la procédure ;copy_string ;Copy un argument texte dans str jusqu'à | ou , copy_string: move.l str,a1 ; Va au caractère suivant tst.w idle_check_data ; Vérifie si l'indicateur de fichier est à 1 bne copy_string2 ; Si 1 alors aller à copy_string2 \loop move.b (a0),(a1)+ ; Déplace le caractère suivant dans A1 soit str tst.b (a0)+ ; Vérifie si la fin de la chaîne est atteinte beq.s \bon ; Si le cas alors aller à \bon cmp.b #124,(a0) ; Vérifie si le caractère en cours est un "|" beq.s \bon ; Si le cas alors aller à \bon cmp.b #44,(a0) ; Vérifie si le caractère en cours est un "," beq.s \bon ; Si le cas alors aller à \bon bne.s \loop ; Sinon copier le caractère suivant dans str soit \loop \bon clr.b (a1) ; Efface le caractère nul ou | ou , move.l str,-(a7) jsr tios::strlen lea 4(a7),a7 move.l addr_str,a0 add.l d0,a0 move.l a0,addr_str rts ; Revient au sous-programme :copy_string2 ;Copy un argument texte dans str copy_string2: \loop move.b (a0),(a1)+ ; Déplce le caractère suivant dans A1 soit str tst.b (a0)+ ; Vérifie si la chaîne de caractères est atteinte beq.s \bon ; Si le cas alors aller à \bon bne.s \loop ; Sinon continuer à \loop \bon clr.b (a1) ; Efface le caractère nul rts ; Revient au sous-programme ;convert_nbr ;Convertie un argument en nombre dans D0 convert_nbr: move.l a0,a1 ; Prépare la gestion de A0 clr.w d1 ; Efface D1 \loopn addq.l #1,d1 ; Ajoute 1 à D1 addq.l #1,a1 ; Avnce de 1 A1 tst.b (a1) ; Vérifie si la fin de la chaîne est atteinte beq.s \begin ; Si s'est le cas alors commençer le traitement cmp.b #',',(a1) ; Vérifie si le caractère en cours est un "," beq.s \begin ; Si s'est le cas alors commençer le traitement cmp.b #124,(a1) ; Vérifie si le caractère en cours est un "|" bne.s \loopn ; Si pas le cas alors revenir à \loopn \begin subq.w #1,d1 ; Soustrait de 1 d1 clr.w d0 ; Efface D0 \loop mulu #10,d0 ; Multiplie par 10 D0 add.b (a0)+,d0 ; Ajoute le caratcère en cours dans D0 tst.w idle_check_data ; Vérifie si fichier beq.s \add_check_str ; alors toujours incrémenter de 1 addr_str \suite sub.w #48,d0 ; convertie caractère en nombre entier dbra.s d1,\loop ; Si fin non atteinte alors aller à \loop rts ; Revenir au sous-programme \add_check_str: move.l addr_str,a1 ; Déplace addr_str dans A1 addq.l #1,a1 ; Incrémente de 1 A1 move.l a1,addr_str ; Redéplace A1 dans addr_str bra \suite ; Va à /suite ;check_data ;Vérifie si l'utilisateur à entrez un argument fichier,répertoire et fichier ou autre check_data: move.w #0,idle_check_data move.l a0,addr_str ; Sauvegarde A0 dans addr_str cmp.b #32,(a0) ; Vérifie si le caractère en cours est un " " beq search_read_file ; Si c'est le cas alors lire le fichier spécifié move.b #1,d0 ; Sinon mettre 1 dans le témoin D0 rts ; Revenir au sous-programme ;search_read_file ;Recherche un fichier selon folder/file ou file, place le pointeur A0 selon son type ;Input: A0 pointeur de l'argument suivant ; ;Output: D0 ; 0=Fichier non trouvé ; 0=Dépassement de capacité (EXPR > 16 bits) ; 1=Argument en cours ne spécifie pas un fichier ou dossier (check_data) ; 2=Fichier STR ; 3=Fichier PIC ; 4=Fichier LIST ; 5=Fichier EXPR search_read_file: move.w #0,idle_check_data ; Place 0 dans le témoin idle_check_data (argument fichier) addq.l #1,a0 ; Saut l'espace moveq.w #7,d7 ; Témoin pour la taille max d'un dossier et fichier lea folder_name(pc),a2 ; Charge l'adresse de folder_name dans A2 \search_folder move.l a0,a1 ; Déplace A0 dans A1 lea folder_name(pc),a3 ; Charge l'addresse de folder_name dans A3 \mode move.b (a1)+,(a3) ; Va au caractère suivant et l'enregistre dans A3 tst.b (a3) ; Vérifie si la chaîne de caractère est atteinte beq FileMode ; Si c'est le cas alors l'argument en cours est un fichier cmp.b #',',(a3) ; Vérifie si le caractère en cours est un "," beq FileMode ; Si c'est le cas alors l'argument en cours est un fichier cmp.b #'|',(a3) ; Vérifie si le caractère en cours est un "|" beq FileMode ; Si c'est le cas alors l'argument en cours est un fichier cmp.b #'\',(a3) ; Vérifie si le caractère en cours est un "\" beq DirMode ; Si c'est le cas alors l'argument en cours est un dossier\fichier addq #1,a3 ; Sinon aller au caratcère suivant pour A3 bra \mode ; Revenir à \mode FileMode: move.b #0,(a3) ; Ajoute le caractère nul dans A3 lea folder_name(pc),a3 ; Charge l'addresse de folder_name dans A3 lea file_name(pc),a4 ; Charge l'addresse de file_name dans A4 \strcpy move.b (a3),(a4)+ ; Va au caractère suivant est l'enregistre dans A4 soit file_name tst.b (a3)+ ; Vérifie si la fin de la chaîne est atteinte bne \strcpy ; Sinon revenir à \strcpy move.b #1,d5 ; Met 1 dans le témoin D5 soit fichier bra endcopy2 ; Va à endcopy2 DirMode: move.b #0,(a3) ; Ajoute le caractère nul dans A3 move.b #0,d5 ; Met 0 dans le témoin D5 soit dossier\fichier lea file_name(pc),a3 ; Charge l'addresse de folder_name dans A3 \copy2 move.b (a1)+,(a3) ; Va au caractère suivant est l'enregistre dans A3 soit file_name cmp.b #',',(a3) ; Vérifie si le caractère est un "," beq EndFileCopy ; Si cas alors aller à EndFileCopy cmp.b #'|',(a3) ; Vérifie si le cractère est un "|" beq EndFileCopy ; Si cas alors aller à EndFileCopy tst.b (a3) ; Vérifie si la fin est atteinte beq endcopy2 ; Alors aller à endcopy2 addq #1,a3 ; Va au caractère suivant dans A3 soit file_name bra \copy2 ; Revient à \copy2 EndFileCopy: move.b #0,(a3) ; Ajoute le caractère nul dans A3 endcopy2 tst.b d5 ; Vérifie si le témoin D5 est à 0 beq Arg_Folder ; Si 0 alors l'argument est du type dossier\fichier bra Arg_File ; Sinon l'argument est du type fichier Arg_Folder: pea folder_name(pc) ;Etape de restauration de addr_str jsr tios::strlen lea 4(a7),a7 move.l addr_str,a0 add.l d0,a0 addq.l #2,a0 ; Avance de 2 caractère a0 car exemple : main=n donc + 1 et \ =2 move.l a0,addr_str pea file_name(pc) jsr tios::strlen lea 4(a7),a7 move.l addr_str,a0 add.l d0,a0 move.l a0,addr_str pea folder_name(pc) ; Charge l'addresse de folder_name dans SP move.w FOLDER_LIST_HANDLE,-(a7) ; Charge le Handle de la table des dossier dans SP jsr tios::FindSymEntry ; Lance la focntion lea 6(a7),a7 ; Restaure SP de 6 soit 4+2=6 tst.b d0 ; Si D0=0 alors le dossier à était trouvé dans la table des dossier bne no_found ; Sinon aller à no_found move.w tios::SYM_ENTRY.hVal(a0),d1 ; Charge le Handle de la table des fichier du dossier spécifié dans d1 bra search_file ; Va à la recherche du fichier Arg_File: pea file_name(pc) ; Etape de restauration de addr_str jsr tios::strlen lea 4(a7),a7 move.l addr_str,a0 add.l d0,a0 addq.l #1,a0 move.l a0,addr_str move.w $05D8E,d1 ; Charge le Handle du dossier Main dans D1 search_file: pea file_name(pc) ; Identique que search_fold sauf que la recherche se fait dans la table des fichiers move.w d1,-(a7) jsr tios::FindSymEntry lea 6(a7),a7 tst.w d0 bne no_found move.w tios::SYM_ENTRY.hVal(a0),d0 tios::DEREF d0,a0 bra file_found no_found: moveq.b #0,d0 ; Met le témoin D0 à 0 lea error_5(pc),a2 ; Charge l'erreur 5 dans A2 rts ; Revient au sous-programme file_found: move.w (a0),d1 ; Enregistre la taille du type dans D1 cmpi.b #$2D,1(a0,d1) ; Si type du fichier = STRING beq is_string cmpi.b #$DF,1(a0,d1) ; Si type du fichier = PIC beq is_pic cmpi.b #$D9,1(a0,d1) ; Si type du fichier = LIST beq is_list bra is_expr ; Sinon type = EXPR soit aller à is_expr is_string: moveq.b #2,d0 ; Témoin à 2 addq.l #3,a0 ; Avance de 3 A0 soit début de la chaîne de caractère bra new_pointer is_pic: moveq.b #3,d0 bra new_pointer is_list: moveq.b #4,d0 addq.l #3,a0 bra new_pointer is_expr: moveq.b #5,d4 ; Enregistre le témoin à 5 dans d4 car d0 est utilisé bsr convert_expr ; Va convertir l'expression en nombre clr nbr_expr lea nbr_expr(pc),a0 bsr ConvStr ; Convertie le nombre dans D0 en chaîne de caractère move.b d4,d0 ; Restaure le témoin dans D0 bra new_pointer ; Va à la fin de check_data new_pointer: move.w #1,idle_check_data ; Argument en cours et du type fichier ou dossier\fichier rts ; Revient au sous-programme toobig: moveq.b #0,d4 ; Enregistre le témoin dans D4 car D0 est utilisé lea.l error_6(pc),a2 ; Charge l'erreur 6 dans a2 rts ; Revient au sous-programme ;convert_expr ;Convertie une EXPR en chiffre sur 16 bits ;INPUT: ; A0=Pointeur de début de l'expression ;OUTPUT: ; D0=Nombre sur 16 bits (attention à zero et 512) convert_expr: clr.l d0 ; Efface D0 sur 32 bits move.w (a0),d1 ; Enregistre la taille de l'EXPR dans D1 lea 1(a0,d1.w),a0 ; Se pointe au caractère d'identification du nombre cmp.b #$1F,(a0) ; Vérifie si le nombre est un entier positif bne toobig ; Sinon va à toobig (dépassement de capacité) cmp.b #2,-(a0) ; Vérifie si le nombre est sur 16 bits bhi toobig ; Sinon va à toobig (dépassement de capacité) cmp.b #1,(a0) ; Vérifie si le nombre tient sur 8 bits beq onedigit ; Va à onedigit move.b -(a0),d0 ; sinon ... lsl.w #8,d0 onedigit: move.b -(a0),d0 ; Convertie l'EXPR en nombre dans D0 rts ; Revient au sous-programme ;ConvStr ;Convertie un nombre en chaîne de caractère ;INPUT: ; D0=Le nombre en 16 bits ; A0=Pointeur de la chaîne de caractère ;OUTPUT: ; A0=Chaîne de caractère terminé par 0 ConvStr: cmp.w #512,d0 ; Il y a un BUG ici car 0=512 et 512=512 beq \nbr_is_zero ; Si trouve le nombre 512 alors convertie en 0 donc 0=0 et 512=0 move.w #10,d2 ; Indice de multiplication clr.w d1 ; Efface indice de digits D1 cmp.w #9999,d0 ; Vérifie si le nombre dépasse 9999 car indice de multiplication ne peut pas dépasser 16 bits bls \calc_digits ; Sinon calculer digits Bra \digit5 ; Dans ce cas digits=5 D1=5 \calc_digits addq.b #1,d1 ; Ajoute 1 dans D1 car un nombre simple comporte au minimum 1 digits cmp.w d0,d2 ; Vérifie si multipliacteur D2 > à D0 bgt ConvStr_suite ; Si D2 < D0 alors aller à la Conversion en chaîne de caractère mulu.w #10,d2 ; Sinon multiplier par 10 D2 bra \calc_digits ; Continuer le calcule des digits \nbr_is_zero clr.w d0 ; Efface D0 moveq.w #1,d1 ; Indicataeur de digit = 1 car 0 = 1 digit bra ConvStr_suite ; Va à la convertion en chaîne de caractère \digit5 moveq.w #5,d1 ; Déplace l'indicateur de 5 car nbr > 9999 = 5 digits ConvStr_suite: adda.l d1,a0 subq.b #1,d1 RepConv: divu #10,d0 move.l d0,d2 lsr.l #8,d2 lsr.l #8,d2 add.b #48,d2 move.b d2,-(a0) and.l #$FFFF,d0 dbra d1,RepConv rts ; arg_suite ; Va à l'argument suivant arg_suite: move.l addr_str,a0 ; Déplace la sauvegarde de la chaîne dans A0 addq.l #1,a0 ; Incrément de 1 A0 move.l a0,addr_str ; Enregistre A0 dans addr_str rts ; falc_arg ; Vérifie si l'utilisateur à entré un argument ; OUTPUT: ; D0=0 argument entré par l'utilisateur ; D0=1 argument falcultatif falc_arg: tst.b (a0) beq \arg_falc_find cmp.b #124,(a0) beq \arg_falc_find cmp.b #44,(a0) beq \arg_falc_find moveq.w #0,d0 rts \arg_falc_find moveq.w #1,d0 rts ;verify_arg ;Verifie si l'argument en cours est correcte verify_arg: move.l addr_str,a0 tst.b (a0) beq \arg_inc cmp.b #124,-(a0) beq \arg_inc moveq.w #1,d0 rts \arg_inc moveq.w #0,d0 rts ;printf_eror ;Affiche une erreur tout en sortant d'un sous-programme printf_error: bra printf_str ; MAIN ; D1 longeur de la variable ; D0 Numéro de l'erreur ; A0 Pointeur du caractère suivant _main pea ArgName(PC) ; Charge la variable dans SP move.w tios::DefTempHandle,-(a7) ; Charge le Handle du dossier temporaire dans SP jsr tios::FindSymEntry ; Lance la fonction addq.l #6,a7 ; Restaure SP de 6 car 4+2=6 move.w tios::SYM_ENTRY.hVal(a0),d0 ; D0= Handle de la variable S tios::DEREF d0,a0 ; Enregistre le poinetur de ce Handle dans A0 move.l a0,str ; Pointeur de début de la chaîne de caractère 32 bits move.l str,a1 ; Charge cette addresse dans le registre A1 soit str move.w (a0),d1 cmpi.b #$2D,1(a0,d1) ; Vérifie si la variable est du type STRING bne Error ; Si pas le cas alors aller à Error addq.l #3,a0 ; Va au début de la chaîne de caractères move.l a0,addr_str ; Enregistre A0 dans addr_str (sauvegarde) bra newstr ; Va au traitement de la chaîne Error: lea.l error_1(pc),a2 ; Charge l'erreur 1 dans A2 bra printf_str ; Affiche l'erreur rts ; Fin du programme ;********************************************************************************************** ; Table des fonctions ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- ;Pour la restauration de A0 (Lea nbr(a0),a0 ;Fonctions avec paramètres: ;nbr=Taille en lettre de la fonction sans ":" + 1 ;Avant d'éxécuter la fonction mettre :Move.l a0,addr_str ; ;Fonctions sans paramètres: ;nbr=Taille en lettre de la fonction ;Avant Bra good mettre :Move.l a0,addr_str ;********************************************************************************************** ;********************************************************************************************** ;VERSION ;Affiche la version de BasicLib ;********************************************************************************************** version lea.l _comment(pc),a2 bsr printf_str rts ;********************************************************************************************** ;FONT:[nbr] ;Sélectionne un font pour drawstr... ;********************************************************************************************** font move.l addr_str,a0 lea 5(a0),a0 move.l a0,addr_str bsr falc_arg tst.w d0 bne \arg1 bsr check_data tst.b d0 beq printf_error bsr convert_nbr cmp.w #2,d0 bgt err3 \suite1 move.w d0,-(a7) jsr tios::FontSetSys lea 2(a7),a7 bra good \arg1 move.w #1,d0 bra \suite1 ;********************************************************************************************** ;FONTGETSYS ;Renvoie le font courant ;********************************************************************************************** fontgetsys move.l addr_str,a0 lea 10(a0),a0 move.l a0,addr_str jsr tios::FontGetSys bsr printf_nbr bra good ;********************************************************************************************** ;OFF ;Eteint la TI-92 ;********************************************************************************************** off move.l addr_str,a0 lea 3(a0),a0 move.l a0,addr_str trap #4 bra good ;********************************************************************************************** ;CONTRAST:[+ ou -] ou [valeur] ;Ajuste le contrast ;********************************************************************************************** contrast move.l addr_str,a0 lea 9(a0),a0 move.l a0,addr_str bsr falc_arg tst.w d0 bne \arg_falc bsr check_data tst.b d0 beq printf_error move.b (a0),d0 cmp.b #'+',d0 ; + beq \is_up cmp.b #'-',d0 ; - beq \is_down bra \is_value \is_down bsr arg_suite moveq #10,d0 bra \trap \is_up bsr arg_suite moveq #9,d0 bra \trap \is_value bsr convert_nbr cmp.b #15,d0 bge err3 \value_arg_falc move.b d0,($05340) moveq #0,d0 trap #9 jsr (a0) bra good \arg_falc moveq.b #8,d0 bra \value_arg_falc \trap trap #9 jsr (a0) bra good ;********************************************************************************************** ;GETCONTRAST ;Renvoie la valeur du contrast en cours ;********************************************************************************************** getcontrast move.l addr_str,a0 lea 11(a0),a0 move.l a0,addr_str move.b ($05340),d0 subq.b #1,d0 cmp.b #255,d0 beq \is_zero \suite bsr printf_nbr bra good \is_zero moveq #0,d0 bra \suite ;********************************************************************************************** ;SHOWHELP:texte ;Affiche le texte dans la status ligne ;********************************************************************************************** showhelp move.l addr_str,a0 ; Permet la recherche des caractères suivant lea 9(a0),a0 ; Saute le nom de la fonction + : bsr check_data tst.b d0 beq printf_error bsr copy_string ; Enregistre l'argument texte dans str move.l str,-(a7) ; Enregistre le texte pour ST_showHelp jsr tios::ST_showHelp ; Affiche le texte lea 4(a7),a7 ; Restaure SP bra good ; Va à good ;********************************************************************************************** ;ERASEHELP ;Efface le contenu de la status ligne ;********************************************************************************************** erasehelp move.l addr_str,a0 lea 9(a0),a0 move.l a0,addr_str bra good ;********************************************************************************************** ;LINEHELP ;Dessine la ligne de la status ligne ;********************************************************************************************** linehelp move.l addr_str,a0 lea 8(a0),a0 move.l a0,addr_str bra good ;********************************************************************************************** ;STBUSY:[type] ;Met dans la status ligne le type d'indicateur ;********************************************************************************************** stbusy move.l addr_str,a0 lea 8(a0),a0 move.l a0,addr_str bsr falc_arg tst.w d0 bne \arg_falc bsr check_data tst.b d0 beq printf_error bsr convert_nbr cmp.b #3,d0 bge err3 \suite move.w d0,-(sp) jsr tios::ST_busy lea 2(a7),a7 bra good \arg_falc moveq.w #0,d0 bra \suite ;********************************************************************************************** ;DRAWSTR:[x],[y],[mode],texte ;Affiche sur l'écran le texte en mode choisit dans le font courant ;********************************************************************************************** drawstr move.l addr_str,a0 lea 8(a0),a0 move.l a0,addr_str bsr falc_arg tst.w d0 bne \arg1 bsr check_data tst.b d0 beq printf_error bsr convert_nbr move.w d0,-(a6) ;d2 \suite1 bsr arg_suite bsr falc_arg tst.w d0 bne \arg2 bsr check_data tst.b d0 beq printf_error bsr convert_nbr move.w d0,-(a6) ;d3 \suite2 bsr arg_suite bsr falc_arg tst.w d0 bne \arg3 bsr check_data tst.b d0 beq printf_error bsr convert_nbr cmp.b #5,d0 bge err4 move.w d0,-(a6) ;d5 \suite3 bsr verify_arg tst.w d0 beq err7 bsr arg_suite bsr check_data tst.b d0 beq printf_error bsr copy_string move.w (a6)+,-(a7) move.l str,-(a7) move.w (a6)+,-(a7) move.w (a6)+,-(a7) jsr tios::DrawStrXY lea 10(a7),a7 bra good \arg1 move.w #0,-(a6) bra \suite1 \arg2 move.w #0,-(a6) bra \suite2 \arg3 move.w #4,-(a6) bra \suite3 ;********************************************************************************************** ;PAUSE ;Attend l'appuye de la touche ENTER ou ESC ;Supporte l'APD ;********************************************************************************************** pause move.l addr_str,a0 lea 9(a0),a0 move.l a0,addr_str \idle_loop move.l $5b10,$5b14 clr.w $5b42 \wait_idle tst.w $5b42 beq.s \no_apd \do_apd trap #4 bra.s \idle_loop \no_apd tst.w $75Ba beq.s \wait_idle move.l $5b10,$5b14 move.w $75bc,d0 clr.w $75ba \try_key_off cmp.w #16651,d0 beq.s \do_apd cmp.w #13,d0 beq good cmp.w #264,d0 bne.s \idle_loop bra good ;********************************************************************************************** ;GETKEY ;Renvoie la touche pressé (L'APD fonctionne avec cette fonctionne) ;********************************************************************************************** getkey move.l addr_str,a0 lea 6(a0),a0 move.l a0,addr_str bra good ;********************************************************************************************** ;SETAPD:[time] ;Régle l'APD selon le temps choisit ;********************************************************************************************** setapd move.l addr_str,a0 lea 7(a0),a0 bra good ;********************************************************************************************** ;RSTAPD ;Restore l'APD à sa valeur d'usine (5 min 15 ;********************************************************************************************** rstapd move.l addr_str,a0 lea 6(a0),a0 move.l a0,addr_str bra good ;********************************************************************************************** ;CLRSCR ;Efface totalement l'écran ;********************************************************************************************** clrscr move.l addr_str,a0 lea 6(a0),a0 move.l a0,addr_str bra good ;*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/ good: ;jsr ngetchx move.l addr_str,a0 cmp.b #124,(a0) bne.s \end addq.l #1,a0 move.l a0,addr_str move.l str,a1 bra newstr \end cmp.b #'',ind_aff_nbr bne print_bon lea status_good(pc),a2 bsr show_printf_nbr ;printf_nbr rts print_bon clr.b ind_aff_nbr rts ; PushToken ; Enregistre le caractère pour les fonctions printf ; Input: D0.B PushToken: move.w d0,-(a7) jsr tios::push_quantum lea 2(a7),a7 rts ;============================================================================================== ; Data ;============================================================================================== ArgName: dc.b "s",0 ; Nom de la variable temporaire status_good dc.b 171,15,187,0 ; = "<check>" str dc.l 0 ; Contient le nom de la fonction addr_str dc.l 0 ; Contient l'adresse de départ de la chaîne EVEN str_cmp dc.l 0 EVEN aff_nbr dc.b 0 EVEN ind_aff_nbr dc.b 0 EVEN folder_name dc.b "pathname",0 EVEN file_name dc.b "filename",0 EVEN taille dc.w 0 idle_check_data dc.w 0 check_str dc.l 0 EVEN nbr_str dc.l 0 EVEN ;********************************************************************************************** ;Données pour la convertion d'expression en String car BUG!!! ;********************************************************************************************** nbr_expr dc.l 0 ;============================================================================================= ;Erreur ;============================================================================================= err2 lea error_2(pc),a2 bra printf_str err3 lea error_3(pc),a2 bra printf_str err4 lea error_4(pc),a2 bra printf_str err7 lea error_7(pc),a2 bra printf_str error_1 dc.b "Error 01: Arguments sous forme de STRING manquant.",0 error_2 dc.b "Error 02: Syntaxe dans une fonction ou argument.",0 error_3 dc.b "Error 03: Nombre invalide pour cette fonction.",0 error_4 dc.b "Error 04: Couleur invalide pour cette fonction.",0 error_5 dc.b "Error 05: Le dossier ou fichier spécifié est introuvable.",0 error_6 dc.b "Error 06: Dépassement de capacité!!!",0 error_7 dc.b "Error 07: Argument(s) incorrecte dans une fonction.",0 ;============================================================================================= ;Commentaires ;============================================================================================= _comment dc.b "BasicLib® V1.0 by Anneheim G",160,0 ; Le caractère 160 correspond à "..." ;============================================================================================== ; Function Definition ;============================================================================================== SECTION _tibasic dc.b $E9 dc.b $0F,$E4 ; EndFunc dc.b $00,$E8 ; : dc.b $17,$E4 ; Func dc.b $E5,$03 ; (s) dc.b $00,$00,$40,$DC _tibasic: END

Il est assez long donc je conseil de copier le contenu est de le coller dans notepad ou autre.

Dans BAsicLib toutes les fonctions de base comme convertir une expr en nombre... sont faite et sans bug mais il reste la partie de rajjout de fonctions pour le basic pour celle du réglages de l'APD... BasicLib au point de vue vitesse et plus puissant que Vertel et au point de vue de ligne de commande plus compressé car en faite on est pas obliger de rentrer tout les paramatrès par exemple pour la fonction contraste on peut faire ceci.

basiclib ("constrast:") Met par défaut le contraste
basiclib ("constrast:+") incrémente le constrate
basiclib ("constrast:-") décrémente le constrate
basiclib ("constrast:valeur") Fixe le constrate à valeur

basiclib peut prendre aussi plusieurs fonctions et sort des valeurs non pas dans un fichiers mais à l'écran home donc il est possible de faire basiclib ("getfontsys")->font
...

Si un possesszeurs de TI-92 reprend ce programme je pense que ceci amélioreras grandement les programmes Basic sur TI-92.

Pour plus d'informations sur des focntions ou sur l'utilisation:
geoffrey.anneheim@wanadoo.fr
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

5

geogeo a écrit :
basiclib peut prendre aussi plusieurs fonctions et sort des valeurs non pas dans un fichiers mais à l'écran home donc il est possible de faire basiclib ("getfontsys")->font


Pas sous AMS 2.0x pur, #manuel# de TIGGC!
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

6

Sauf que c'est pas pour AMS quel qu'il soit justement grin
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

7

geogeo a écrit :
basiclib peut prendre aussi plusieurs fonctions et sort des valeurs non pas dans un fichiers mais à l'écran home donc il est possible de faire basiclib ("getfontsys")->font ...

Ça ne sera pas linkable avec ld-tigcc, ça. sad (Du moins pas avec la version actuelle.) SECTION _tibasic n'est pas implémenté.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

je parle de basiclib celui que j'avais commencais de creer pour les TI-92 et je ne parle pas du tout des TI-89 et TI-92+. Les utilisateurs de TI-92 se sente délaissé car pour le Basic... il n'y plus de nouveaux programmes qui sorte dessus donc je propose ce programme pour enfin que ceux qui veulent programmer en Basic sans connaître l'ASM peuvent le faire sur leurs TI-92. Bien sûr il n'est pas terminé il manque encore beaucoup de fonctions. smile
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

9

Kevin-> Je parle des TI-92 et non de la TI-92+ et TI-89 donc TIGCC n'existe pas dans ce cas il faut utiliser les commandes DOS et bien sûr FARGO pour qu'il fonctionne comme je le dis les utilisateurs de TI-92 se sente un peut délaissé et donc je pense que si quelqu'un reprend mon programme que ca feras un peu plus d'heureux chez les possesseurs de TI-92.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

10

geogeo
a écrit : Kevin-> Je parle des TI-92 et non de la TI-92+ et TI-89 donc TIGCC n'existe pas dans ce cas il faut utiliser les commandes DOS et bien sûr FARGO pour qu'il fonctionne comme je le dis les utilisateurs de TI-92 se sente un peut délaissé et donc je pense que si quelqu'un reprend mon programme que ca feras un peu plus d'heureux chez les possesseurs de TI-92.

Tu n'es pas du tout au courant de l'évolution de TIGCC, toi. smile Le nouveau linker de TIGCC (ld-tigcc) qui va être dans TIGCC 0.95 bêta 1 permet de linker des programmes Fargo II. Mais pas toutes les fonctionnalités de FLinker sont implémentées, et certaines ne le seront jamais (on ne peut pas, et on ne pourra très probablement jamais, installer le kernel Fargo dans un backup avec ld-tigcc). En revanche, il y a le support pour les fichiers objet COFF générés par GCC, donc possibilité de programmer en C pour Fargo II. J'ai déjà porté Backgammon.

PS: C'est moi qui ai codé le code d'exportation au format Fargo II pour ld-tigcc, donc je sais quand-même un minimum de quoi je parle. grin
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

11

Ouah, c'est formidable ça avant quand j'avais vu TIGCC mais que je ne pouvais pas programmer j'était deçu. Excuse moi Kevin je ne savais pas mais je trouve ça formidable enfin programmer en C sur TI-92 certe j'ai une TI-92+ maintenant mais ça va beaucoup aider ce qui ont une TI-92. smile

Donc comme tu le dis il n'est pas possible de le compiler à cause de la référence en bas à TI-BASIC!

avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

12

En effet. Pour l'instant, seul le fork TI-BASIC standard est supporté, les forks TI-BASIC personnalisés ne le sont pas. sad
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

13

Au fait: geogeo, Ximoon, et toutes les autres personnes intéressées par le support pour Fargo dans TIGCC: nous somme en recherche de personnes intéressées par le maintien des headers et de la librairie statique (c'est-à-dire d'une version "light" de TIGCCLIB) pour Fargo. Je compte faire le minimum nécessaire pour lancer le projet (avec l'aide de Sebastian Reichelt, qui compte intégrer la gestion des headers Fargo dans notre système automatisé de gestion de headers et de documentation), mais je ne pense pas que j'aurai le temps de le maintenir régulièrement, d'autant plus que je n'ai même pas de TI-92 sans + (juste une TI-89 HW1 et une TI-92+ HW2).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

14

hmmm faut faire quoi au juste?
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

15

Ben, il faut compléter les headers, porter/réécrire le plus de fonctions de TIGCCLIB possible et réimplémenter le plus de fonctions de AMS qui ne sont pas disponibles sous Fargo possible en termes de ce qui est disponible (ce qui peut très bien être un accès à des variables globales internes; les offsets par rapport à tios::globals sont étonemment stables entre les versions de la ROM des TI-92).

Regarde le répertoire lib dans la source du portage de Backgammon pour voir le style du travail à faire (d'ailleurs, l'existence-même de ce répertoire montre l'état triste en lequel le support Fargo de TIGCC se trouve actuellement: on ne peut même pas faire un bête memcpy sans déclarer le ROM_CALL soi-même sad).

Mais avant de commencer de travailler sur les headers, il faut absolument attendre que Sebastian ait fini d'adapter le système d'autogénération headers/documentation, sinon on risque de devoir refaire tout le travail 2 fois (une fois avec les headers faits à la main et une deuxième fois avec le système d'autogénération).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

16

Il n'y a pas de problème pour ça mais je n'ai plus de TI-92 je l'ai vendu pour pouvoir m'acheter la TI-92+ donc faut t'il vraiment une TI-92 ou un émulateur suffit?
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.