Voici ce qu'il faut dfinir si l'on souhaite crer un nouveau mode 
pour un nouveau langage :



###########################################################################
Identification du langage :
---------------------------

  
Nom du mode : asmTMS (assembleur TMS)
 
Comment reconnait-on un tel fichier
(suffixe, premiere ligne, ...)

###########################################################################
Autres caracteristiques du langage :
------------------------------------

pas de differenciation entre majuscule et minuscule, ...

###########################################################################
Commentaires
------------

- lignes commencant par *
- tout caractere d'une ligne apres un ";"

; COULEUR : green1


###########################################################################
Structure du fichier 
-------------------

- les titres, label, procdures, ??

Le label peut avoir un ":" mais n'est pas utilise pour la reference,
par contre il peut contenir des / _ chiffres

###########################################################################
Instructions :
--------------

Une instruction est toujours prcde par ou plusieurs espaces 
ou tabulation.

Plus gnralement : par quoi reconnait-on un mots :
   # Morceau de patterne dfinissant un sparateur de mots cls
   set stead(wordSeparator) {[^a-zA-Z0-9_\.]}



###########################################################################
Directives :
------------

Une directive est une instruction commencant par un point
 
Exemples : 

ad_ai_B1        .set    0FCA0h  ; definition de constante
compteur        .word   0       ; initialisation de memoire
d_tab_in:       .space  1264    ; reservation memoire

    .ds 700h    ; zone donnees a partir de l'adr 700h
    .ps 8000h    ; zone programme a partir de l'adr 8000h
    .ps 0FB00h
    .entry

     .include "rint.asm"     ; recopie du fichier rint.asm

###########################################################################

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; exemple de branchement :
        B       test
        B       test
        B       test
        B       test
        BANZ    AMDF_algo,*-,AR3
        BGZ     test
        BGEZ    test
        BACC    test
        BBNZ    test
        BBZ     test
        BC      test
        BNC     test
        BNV     test
        BV      test
        BNZ     test
        BZ      test
        BIOZ    test
        BLZ     test


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; exemple d'appel de sous programmes
        CALL label
        CALA
; exemple de retour de sous programmes
        RET

###########################################################################
Exemple de <programme> en asmTMS
--------------------------------

label instruction liste_de_parametres_sans_espace ;commentaires

label: instruction liste_de_parametres_sans_espace ;commentaires

label: instruction ;commentaires

label  

    instruction liste_de_parametres_sans_espace ;commentaires
    instruction liste_de_parametres_sans_espace

    instruction  liste_de_parametres_sans_espace ;commentaires

    instruction    liste_de_parametres_sans_espace        ;commentaires
    instruction    liste_de_parametres_sans_espace

    instruction    liste_de_parametres_sans_espace        ;commentaires
    instruction    liste_de_parametres_sans_espace   ;commentaires

###########################################################################

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; vrai exemple

AMDF    ZAC                     ;"0" -> ACCU
        LDPK    AMDF_coef
        LRLK    AR1,AMDF_coef   ;AR1 pointe sur les coef. AMDF

AMDF_algo
        ;BANZ    AMDF_algo,*-,AR3 ;si >0 AMDF_algo
        ADDH    *-
        BANZ    AMDF_algo,*-,AR3 ;si >0 AMDF_algo

minimum
        MAR     *+              ;inc du pointeur de tab.
        BGZ     test            ;test si ACCU=AMDF_coef-min > 0
        LARP    AR1
test    LARP    AR3
        MAR     *-
        BANZ    minimum,*,AR1   ;si AR3>0 on branche

        B       fin_racine

more:   SAR     AR2,*   ;AR2 -> guess
        LT      *       ;guess -> T
        BGZ     too_hi,*BR0+,AR2 ;si ACCU>0 on branche "too_hi"

too_low MAR     *0+,AR0
        BANZ    more,*,AR1      ;si AR2<>0 on branche "more"
        B       done2

too_hi: MAR     *0-,AR0

high    BANZ    more,*,AR1      ;si AR2<>0 on branche "more"
        LARP    AR2

done2:  LDPK    ad_cor
        SAR     AR2,ad_cor      ;racine(C(0)) -> @C(0)                                ;index / 819 -> ACCU
        SPM     1

;calcul du residuel a genere V/NV voise ou non-voise
V/NV
        SUBK    76              ;si index>76 alors son /voise
        BGEZ    /voise
        ADDK    52              ;76-24 si index<24 son /voise
        BGEZ    /voise

        SUB     delta_i         ;|index - old_index | - delta_i -> ACCU
        BGZ     /voise          ;si >0   NV

voise
        SUBK    80              ;index + position -80 -> ACCU
        BGEZ    ok_position     ;si >0 ok_position sinon "0" -> ACCU
        ZAC
ok_position
        LDPK    p_relative
        BGZ     fin_position    ;il n'est plus possible de placer un pic
        ADDK    80              ;index+p_relative-> ACCU
        B       ok_position
fin_position
        SACL    old_index       ;index -> old_index
        RET

/voise
        LARP    AR1
continue
        LAC     bruit_1         ;b1 -> ACCU
        BANZ    continue,*-,AR1 ;on boucle temps que 80 ech. non pas ete calcule
        RET
        
        