HP Mad vous présente le                               Language Evolué Hp Mad VERSION 2.1 Le lehm est un language évolué conçut pour que toute personne sachant un tant soit peu programmer puisse faire des jeux rapides sans avoir à les programmer en laguage assembleur , "Chiant" par excellence I)En lehm on dispose de 16 variables nommées A B C D E F G H I J K L M N O P Ces variables (codées sur 2 quartets) peuvent prendre toute valeurs hexadecimales comprises entre 0 et FF (0 et 255) II) Il existe différents test : d'égalité, d'inégalité, de superiorité, de nulité, de non nulité. Si le test n'est pas vérifié on saute une instruction III) De 16 drapeaux (flags) numérotés de 0 a F que l'on peut mettre à 0 ou 1 , que l'on peut inverser (si le flag est à 0 il passe a 1 et vice-versa) et que l'on peut controler par des test : de nulité, de non nulité IV) Syntaxe de AS.LEHM Les instructions doivent être séparées - soit par un espace - soit par un carage return (retour a la ligne) Une instruction nécessitant des paramètres doit être écrite avant les paramètres (en Hexa) séparés les un des autres par un espace Les sauts Il existe 2 types de sauts -les GOTO :syntaxe, instruction nom du label -les GOSUB:syntaxe, instruction nom du label sauf que, pour le GOSUB le numéro de la ligne suivante est sauvegardé et, lors d'un RTN on revient a cette ligne (On est limité a 4 GOSUB imbriqués) Tout programme doit se finir par un carage return ( retour a la ligne ) et un arobas @ (shift bleu enter) Les labels: Un label est repéré par un # suivit du label lui même (un label comporte au maximum 6 charactères) Les macros: Un macro est une chaîne de charactère d'un nombre pair de charactère Ces chaînes devrons être stockées dans des variables de 6 charactères maximum dans un directory en HOME nommé MacroL On les appelles en mettant un _ suivit du nom du macro les commentaires: ils sont introduits par un % et se finissent par un carage return V)Liste d'instructions Opérations mathématiques : + a b , - a b , * a b / a b , ! a b , & a b ¡ a b et MOD a b addition, soustraction, multiplication, division, OU, ET OUexclusif, modulo sur les variables a et b, le resultat est stoque dans a exemple + D E additionerat les contenus de variables D et E, le resultat serat stoque dans D NOT a , NOT-1 a SIN a , COS a , MODY a , MODX a: NON logique , Complémentation à 2 de a , Sinus de a Cosinus de a , Modulation par 64 de a (Hauteur de l'écran) , Modulation par 128 de a (Largeur de l'écran) P+C xx , P-C xx D+C xx , D-C xx Incrémentation et décrémentation de P et D de xx P+V a , P-V a D+V a , D-V a Incrémentation et Décrémentation de P et de D du contenu de la variable a (pour D , a est converti en décimal) COPY a b : copie le contenu de b dans a PEEK a : a = nombre pointé par P ?= a b, ?# a b, ?=0 a ?#0 a , ?> a , ?>= a ?FL= 0 , ?FL=1 Test de variables ou de flag ( si le test n'est pas vérifié : saut d'une instruction) ?KEY a b:la touche sur la ligne a colonne b est elle appuyée ( on compte a partir de la touche + ) KEYW : attente d'appuie sur une touche NKEYW : literalement Non Key Wait ( attente de non appuie sur une touche ) V=RND a : mise d'un nombre aléatoire dans a STOV a xx : on stocke xx dans la variable a V+C a xx , V-C a xx :; incremente a de xx ( Varioable + Constante D= xxx : mise a xxx de D P= label : pointe sur le label P=N xxx : on stoque xxx dans P LIT a , LOAD1 , LOAD2 on lit sur la pile un binaire qui est stocké soit dans la variable a soit dans les 8 première variables soit encore dans les 8 dernières ECRI a , SAVE1 , SAVE2 on écrit sur la pile un binaire représentant soit la variable a soit les 8 première variables soit encore les 8 dernières variables END : Fin d'exécution de Lehm FLG=0 a , FLG=1 a mise a 0 ou a 1 du flag a S S S S 4*S 4*S 4*S 4*S scroll lignes ( il y a une fleche dans une de 4 directions apres chaque S pour indiquer la directiondu scrool ) CLS : efface l'écran /LCD : vidéo inverse de l'écran ?PIX x y : le pixel dont les coordonées sont en x et y est il allumé AFD x y : on affiche la variable décimale aux coordonnées x et y POF x y , PON x y, /PIX x y pixoff , pixon, NOT pix VBL atente de fin de balayage ecran AF x y z affiche le graphique pointé par P , de hauteur z+1 aux coordonnées stoquées dans les variables x et y l'affichage est réalisé en XOR , de ce fait en affichant 2 fois le même graphique aux mêmes coordonnées il s'efface le flag F est mis à 1 si le graphique affiché mord sur un graphique déjà existant REPL x y z idem mais en REPL et sans le flag LINE x1 x2 Trace une ligne de coordonee x1 y1 x2 y2 sachant que y1 est la variable suivant immediatement x1 ( Exemple LINE A F trace une ligne entre les points xa yb xf yg) si le flag 0 est a 1 la ligne est effacee sinon elle est afichee CIRCLE x1 r cercle de rayon r de centre dans les variables x1 et x1+1 Pour toute les instruction graphiques les coordonnées X et Y sont modulées par 128 et 64 pour éviter tout débordement GOTO label saut à un label GOSUB label appèl de sous programmes RTN retour de sous programmes SONON , SONOF permet ou interdit les interruptions son GOSON label : indique à la machine l'emplacement de la routine de traitement des interruptions son BEEP a b : émet un beep dont la durée de pause est contenue dans la variable a durant b 16ème de secondes . à la fin du beep , si les interruptions son sont armées il y aura un gosub en routine de traitement d'interruption son GOSASM : GOSUB à un programme assembleur. ce programme doit se finir par un RTN n'utiliser au maximum que 6 niveaux de RSTK. au lancement du programme les interruptions sont interdites R0a : @ écran R1a : @ prochaine instruction a executer R2a : P R3a : @ début prog en Lehm R4a : Ps 70200 vars A a P sur 2 quartets chacune 70225 compteur du beep 70230 goson 70235 D de 7023F a 70253 lehmRSTK 70260 : Flag de 0 a F sur 1 quartet chacun 70270 : compteur pause ST 0 : Utilisé en interne 1 : son inton? 2 : son off? 3 : Utilisé en interne 4 : Utilisé en interne 5 : son actuellement émit 6 : Utilisé en interne 7 : Pause en cour VI) Le son En Lehm il y a 2 possibilitées pour le son 1) l'émission de Beep dans le programme 2) la possibilitée d'interruptions son a) Indiquer a la machine ou aller en cas d'interruptions son : GOSON label b) mettre en marche des interruptions son : SONON c) faire un premier beep pour lancer la première interruption son soit BEEP a b soit GOSUB label (label : routine de traitement de l'interruption son) toute routine de traitement des interruptions son doit se finir par un RTN et utilise 1 niveau de RSTK Exemples de programes en lehm Cercles concentriques CLS % efface l'ecran STOV A 40 % coordonee X du centre du cercle STOV B 20 % coordonee Y du centre du cercle FLG=0 0 % pour dire que l'on veut aficher le cercle et non l'efacer STOV C 01 % rayon original STOV D 7F % valeure maximale pour le rayon #BOUCLE % label CIRCLE A C % on afiche le cercle V+C C 01 % on incremente le rayon de 1 ?> D C % si le rayon est inferieur a 7F GOTO BOUCLE % alors on reboucle #FIN GOTO FIN % on attend un apui sur une des touches de controle @ Ligne en temps reel CLS % efacer l'ecran STOV A 00 % coordonee X1 de la ligne STOV B 00 % coordonee Y1 de la ligne STOV C 40 % coordonee X2 de la ligne STOV D 20 % coordonee Y2 de la ligne #BOUCLE FLG=1 0 LINE A C % j'eface la ligne ?KEY 8 2 V-C B 01 % si on appuie sur la touche haut, je monte de 1 ?KEY 7 2 V+C B 01 % si on appuie sur bas , je dessent de 1 ?KEY 7 3 V-C A 01 % bouge a gauche ?KEY 7 1 V+C A 01 % bouge a droite FLG=0 0 LINE A C % j'afiche la ligne KEYW % j'attend qu'il y ait une touche appuiee GOTO BOUCLE % pour recomencer @ Cercles au hazard CLS FLG=0 0 % on afiche les cercles #BOUCLE V=RND A V=RND B V=RND C % on fixe des valeures aleatoires pour Xc, Yc, r CIRCLE A C % on trace le cercle GOTO BOUCLE % on reboucle @ Une sinusoide jolie CLS STOV A 00 % X1 de la ligne STOV C 00 % on vas prendre le sinus de C STOV D 40 % X2 de la ligne STOV E 20 % Y2 de la ligne FLG=0 0 % on afiche la ligne #BOUCLE COPY B C SIN B % on met en B le sinus de C sans modifier C LINE A D % on trace une ligne de X2,Y2 a X1,sinC V+C A 01 % on incremente X1 V+C C 02 % on incrémente la valeure dont on vas prendre le sinus GOTO BOUCLE @ Aficher a l'ecran vous venez donc de cree un graphique de 16*z, editez le enlevez le "GROB 16 XX " et mettez un " " " devant les codes hexadicimeaux. faites enter, convertisez la chaine exa en une chaine ascii ( avec H>S de la dev par exemple ) cree un repertoire MacroL en HOME dans lequel vous stoqurez la chaine ( le nom sous lequel vous la stoquerez doit farie moins de 6 charactere ).( le graphique ferat z<17 pixel en hauteure ) CLS % efface l'ecran P= GRAPHI % fait pointer P sur le graphique STOV A 00 VTOV B 00 % met a 0 le X et le Y AF A B z-1 % on aficfe le graphique #BOUCLE KEYW % on attend l'appuye sur une touche AF A B z-1 % on eface le graphique ?KEY 8 2 V-C B 01 % si haut, Y=Y-1 ?KEY 7 2 V+C B 01 % si bas Y=Y+1 ?KEY 7 3 V-C A 01 % si gauche X=X-1 ?KEY 7 1 V+C A 01 % si droite X=X+1 AF A B z-1 % on reafiche le graphique GOTO BOUCLE % on reboucle #GRAPHI % label sur le graphique _NOM.GR % on appele le macro @ Developeurs en LEHM, dites mois se qui vous manque dans ce langage, je l'y meterait. ( vous pouvez aussi coriger le fautes d'ortografe !!!! metez la note en rubrique programation sur le 36 15 .STORM )