Love Me Logo de Love Me
Maj 2015 :
Les définitions de ce langage datant de 1987, il nous à paru judicieux de dépoussiérer un peu ce langage. Pour ce faire, nous avons développé un émulateur pour les systèmes actuels. N'hésitez pas à revivre un des moments les plus forts de l'ère de la création de la micro-informatique personelle ! Téléchargement de l'émulateur pour des systèmes récents
Le Love Me est un langage de programmation sur une plateforme virtuelle : la LoveMeMachine (LMM). Son principe est simple, tout est plus fun avec des smileys ! Alors, laissez vous embarquer dans cette folle aventure qui vous propulsera avec cette machine déjà mythique aux fins fonds des paradigmes de programmation les plus avancés ! Le MS Basic et le Fortran peuvent aller se rhabiller !

Architecture

La version 1 du hardware est déjà fixée ! Elle permet de faire beaucoup de choses, même avec les 1Ko minimums. Il est néanmoins préférable de disposer d'au moins 2Ko de mémoire RAM. Cela permettra des programmes plus imposants, et laisser plus de place pour vos ressources. L'architecture accepte jusqu'à 64 Ko de mémoire au total ! Du jamais vu sur une machine personnelle ! La ROM de 1Ko est réservé au système et contiens toutes les routines permettant au LoveMe d'être simple et facile d'utilisation. Les technologies D.E.R.P (Data Enhanced Registering Patent) seront bientôt supportées, et les drivers pour les périphériques WOM et WORN sont déjà en développement dans nos labos !

Généralités

Comme précisé précédemment, il est plus que recommendé de disposer de 2Ko de mémoire dans votre système. La répartition mémoire se fait comme suit : (pour rappel, 0x400 = 1Ko) _____ 0x??FF Programme utilisateur, de 1 à 63Ko. 0x0400 _____ 0x03FF LOW RAM (libre sur les systèmes bas de gamme.) 0x0300 _____ 0x02FF RAM Système 0x0000 _____

Détails de la RAM graphique

La RAM graphique est accessible à l'utilisateur de manière transparente. Il devient d'une simplicité enfantine de créer des programmes colorés et attractifs en quelques instructions ! L'écran est constitué de 15 lignes de 20 caractères. Les caractères sont codés sur 7 bits, le 8eme étant gardé pour un usage futur. Merci de le conserver autant que possible à 0. Chaque caractère accepte une couleur et fond ET une couleur d'avant plan ! Les résultats sont magnifiques, lisibles et colorés ! Chacune de ces couleurs est codé sur 4 bits, indiquant la position dans la palette de 6 bits à utiliser pour l'affichage. Le premier plan en poids fort, l'arrière plan en poids faible. Le set de police de texte Le set de police graphique

Détails de la mémoire

Afin de faciliter encore plus la programmation en LoveMe, des mnémoniques simples et claires ont été pensées pour fluidifier la rédaction et accélérer l'apprentissage. Les mnémoniques commençant par underscore '_' sont en lecture seule. Voici la carte mémoire :
AddHex Offset Size Mnémo Data
0x0000 0 300 STAD Buffer texte + attribut
0x012C 300 300 SCAD Buffer Couleurs
0x0258 600 16 PLAI Indexes Palette utilisée
0x0268 616 20 _FH_ Pile pour les fonctions (function heap)
0x027C 636 2 GPRA General purpose register A
0x027E 638 2 GPRE General purpose register E
0x0280 640 2 GPRI General purpose register I
0x0282 642 2 GPRO General purpose register O
0x0284 644 2 GPRU General purpose register U
0x0286 646 2 GPRY General purpose register Y
0x0288 648 2 _PC_ Program counter
0x028A 650 2 PNTR Pointeur
0x028C 652 2 _HP_ Pointeur du tas
0x028E 654 64 HEAP Tas
0x02CE 718 50 SYSR RAM Système (un peu trop de bordel là dedans...)
0x0300 768 256 LRAM Low RAM pour les systèmes très (trop) économes en mémoire
0x0400 1024 64511 PRGM 15Ko RAM for User

Codes d'opération (OpCodes)

Un programme LoveMe suit une structure très simple. A chaque code d'opération une valeur est fournie, cela permet d'utiliser toutes les fonctions de la machine ! Mais c'est également très intuitif ! On dit en langage courant "je mange une pomme." Que mange-je ? Une pomme ! Le Love Me fonctionne tout pareil. On précise l'argument puis la fonction, à raison d'une par ligne, et le tour est joué !

Codes

Bytecode Mnémonique Nom simple Explication Traduction
00 *_* NOPE Ne fait rien
0B HCF HACF Bloque l'execution et fait prendre feu à la machine Halt (And) Catch Fire
0C Ô_ò EYUP Ne fait rien non plus... Ethernal Yoga Uppon Processor
10 v_v PSET Pointe vers l'adresse indiquée
11 v_+ PADD Incrémente le pointeur de la valeur indiquée
12 v_- PSUB Décrémente le pointeur de la valeur indiquée
13 v.v PFIL Stocke la valeur indiquée à l'adresse pointée
14 v.+ PFAD v.v puis incrémente le pointeur de 2 octets
15 u_u PPST Pointe vers l'adresse pointée
16 u.+ PVAD Incérmente la valeur pointée de la valeur indiquée
17 u.- PVSU Décrémente la valeur pointée de la valeur indiquée
18 u.u PVST Stocke la valeur pointée à l'adresse indiquée
19 u_+ PVSA u.u puis incrémente le pointeur de 2 octets
20 +.v PVAV Additionne la valeur indiquée et la case pointée
21 -.v PVSV Soustrait la valeur indiquée à la case pointée
22 *.v PVMV Multiplie la case pointée par la valeur indiquée
23 /.v PVDV Divise la case pointée par la valeur indiquée
24 +.+ PVAP Additionne la case indiquée et la case pointée
25 -.- PVSP Soustrait la case indiquée à la case pointée
26 *.* PVMP Multiplie la case pointée par la case indiquée
27 /./ PVDP Divise la case pointée par la case indiquée
2E ?_? JWRN Stocke l'octet indiqué à une addresse aléatoire Jam With Ram Now
2F ?.? RAND Stocke un octet aléatoire dans la case indiquée Random And Nonsens Data
30 -_- JUMP On va executer la case indiqué Jump Until Moot Perish
31 °_° ZJMP Si [GPRA] est à zéro, on va executer la case indiqué Zero Ever Jump Party
32 o_o NZJP Si [GPRA] n'est pas à zéro, on va executer la case indiqué Non Zero Jump Proportional
33 ô_ô AEBJ Si [GPRA] est égal à [GPRB], on va executer la case indiqué A Equal B Jump
34 ö_ö ASBJ Si [GPRA] est supérieur à [GPRB], on va executer la case indiqué A Superior B Jump
35 ò_ò AIBJ Si [GPRA] est inférieur à [GPRB], on va executer la case indiqué A Inferior B Jump
3F °?° RNDJ Va executer l'instruction à une case mémoire aléatoire Random Notification During Jump
40 >.> HSVL Balance la valeur à la case indiquée sur le tas Heap Store Value Lol
41 <.< HGVL Choppe la valeur du tas et la stoque dans la case indiquée Heap Get Value Lol
42 >_< HSTZ Reset le tas (mais pas les valeurs) Heap Set To Zero
43 <_> HRAN Efface toutes les valeurs du tas et reset le compteur Heap Reset And Nulify
50 ^_^ SUBR Vas executer le code à l'addresse indiquée (sous-routine) Subtile User Beta Request
51 ^.^ RBUS Reviens à l'addresse d'execution juste après le ^_^ appelé. Met la valeur indiquée dans [GPRA]. Return Between Unified Subroutine
F0 ô.ô RINP Demande à l'utilisateur de manière graphique une valeur décimale. Sera tronquée si l'utilisateur donne une valeur trop grande ou petite. Mais [0000] retiendra un code : 0 ok; 1 trop grand; FF : trop petit
F1 ò.ò TINP Demande à l'utilisateur de manière graphique une chaine de texte. Débordera sur les cases suivantes tant que l'utilisateur donne du texte
F2 ö.ö SINP Lits autants d'octets qu'indiqué dans la liaison série (IN.TXT)
F3 ê_ê ROUT Affiche la valeur de la case indiquée.
F4 è_è TOUT Affiche le texte à partir de la case indiquée.
F5 ë_ë SOUT Ecrit autants d'octets qu'indiqué dans la liaison série (OUT.TXT)