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 est non 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 GOTO saut syntaxe : instruction nom du label il en est de même pour le GOSUB sauf que le numéro de la ligne suivante est sauvegardé 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 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 sont introduits par un % et se finissant par un carage return V)Liste d'instructions + a b , - a b , * a b / a b , ! a b , & a b ¡ a b , MOD a b Opérations mathématiques : addition soustraction multiplication division OU ET OUexclusif modulo entre les variables a et b le résultat est stoqué dans a 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 + ) V=RND a : mise d'un nombre aléatoire dans a STOV a xx : on stocke xx dans la variable a 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 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 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 pixoff , pixon 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 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 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 7023F 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'interrompre pour utiliser les interruptions son a) Indiquer a la machine ou aller en cas d'interruptions son : GOSON label b) mettre en marche les 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 utiliser 1 niveau de RSTK