I. Principe

PRGM2 est un programme qui donne accés à des fonctions C aux programmes Basic.

Au lancement du programme basic, PRGM2 démarre un timer. Le timer vérifie à intervalles réguliers la valeur de la variable F. Si F est différent de 0, alors la fonction correspondante à sa valeur est appelée.

II. Utilisation

Vérifier dans le menu SYSTEM (G) que vous disposez bien de la version 1.05 de PRGM2. Si ce n'est pas le cas je vous invite à le télécharger ici.

Lancez l'addin PRGM2.g1a.
Choississez un programme basic PRGM2. Et c'est parti !

Remarque : L'appui de [AC] ou l'appel de la fonction 28 arrêtent le timer. Pour relancer un programme PRGM2, vous devez donc au préalable quitter l'addin et exécuter une autre application (exemple : le menu RUN (1)).

III. Programmer

Les programmes PRGM2 se programment comme des programmes basics. Il suffit juste d'ajouter au début du programme le mot clé :
'PRGM2

Les fonctions peuvent ensuite être appelées avec la syntaxe suivante :
Paramètres_de_la_fonction
code_de_la_fonction -> F
While F:WhileEnd

Voici la liste des fonctions :

I. Gestion de l'écran

La VRAM est une mémoire vidéo. On y met les dessins avant de les afficher à l'écran. Cela permet d'éviter le clignotement de l'écran.

1ClearVRAM
Effacer la VRAM.

2ClearScreen
Efface l'écran.
Il n'est pas nécessaire d'effacer l'écran avant d'afficher la VRAM.

3DisplayVRAM
Affiche la VRAM.

4SaveVRAM
Sauvegarde la VRAM.
Paramètre :
X = numéro de la page

5RestoreVRAM
Restore la VRAM.
Paramètre :
X = numéro de la page

II. Contrôle du contraste

6SetContrast
Permet de modifier le contraste.
Paramètre :
C = valeur du contraste

7GetContrast
Retourne dans C la valeur initial du contraste. Si C=0, il s'agit de l'émulateur ou d'un modèle inconnu de calculatrice.

III. Fonctions graphiques

L'origine de la fenêtre graphique, de coordonnées (0;0), est en haut à gauche. Vous ne pouvez pas la modifier. Le point en bas à droite a pour coordonnées (127;63). Il y a donc une ligne et une colonne de plus qu'en basic.

Certaines fonctions graphiques utilisent les nombres complexes. Les nombres complexes sont composés d'une partie réelle et d'une partie imaginaire, cela permet de stocker les coordonnées de 2 points dans une seule variable.
Pour différencier la partie imaginaire de la partie réelle on utilise i ([SHIFT] [0]).
Par exemple le nombre 3+8i a pour partie réelle 3, et pour partie imaginaire 8.

Pour ce qui est de la couleur, la valeur 0 correspond au blanc, tandis que la valeur 1 correspond au noir.

Vous pouvez tout à fait utiliser les fonctions classiques dans vos programmes PRGM2. Cependant les fonctions graphiques classiques effacent la VRAM, il faut donc mieux les appeler avant les fonctions PRGM2.

Voir aussi l'aide pour le nom du fichier.

8SetPixel
Affiche un pixel dans la VRAM.
Paramètres :
X = abcisse
Y = ordonnée
C = couleur

9GetPixel
Retourne la couleur d'un pixel de la VRAM dans R.
Paramètres :
X = abcisse
Y = ordonnée

10DrawLine
Affiche une ligne dans la VRAM.
Paramètres :
X = abcisses (sous forme complexe, la partie réelle correspond à x1 et la partie imaginaire à x2)
Y = ordonnées (sous forme complexe, la partie réelle correspond à y1 et la partie imaginaire à y2)
C = couleur
Exemple : si X=12+66i et Y=24+38i alors la ligne reliera le point de coordonnées (12;24) au point de coordonnées (66;38)

11DrawRectangle
Affiche un rectangle dans la VRAM.
Paramètres :
X = abcisses (sous forme complexe, la partie réelle correspond à x1 et la partie imaginaire à x2)
Y = ordonnées (sous forme complexe, la partie réelle correspond à y1 et la partie imaginaire à y2)
C = couleur

12DrawCircle
Affiche un cercle dans la VRAM.
Paramètres :
X = abcisse
Y = ordonnée
R = rayon
C = couleur

13DrawFilledCircle
Affiche un cercle plein dans la VRAM.
Paramètres :
X = abcisse
Y = ordonnée
R = rayon
C = couleur

14Bmp
Affiche un sprite, depuis un fichier contenu dans la mémoire de stockage, dans la VRAM.
Paramètres :
M = nom du fichier
B = numéro du sprite compris entre 0 et 99
X = abcisse (sous forme complexe, la partie imaginaire de X correspond à la largeur du sprite)
Y = ordonnées (sous forme complexe, la partie imaginaire de Y correspond à la hauteur du sprite)
C = mode d'affichage (0 = or, 1 = and, 2 = xor)
Par défault je vous conseil d'utiliser le mode or sur fond blanc, et xor sur fond noir.

Les sprites sont codés au format bitmap. Ils sont affichés avec clipping, et peuvent donc être affichés même si ils ne sont pas complétement sur l'écran.
Pour plus de précisions sur les modes et sur le codage des sprites référez vous à la documentation de MonochromeLib.
Vous pouvez aussi utiliser mon utilitaire pour coder vos sprites on-calc.
Une fois le sprite codé, voici comment insérer le code dans un programme :
'SPRITE0={60,126,251,253,253,255,126,60}
Remplacer 0 par le numéro de votre sprite et le tableau par celui de votre sprite.
Attention, la dimension du tableau doit correspondre à celle indiquée dans X et Y.
Transférez ensuite le programme dans le dossier PRGM2 de votre mémoire de stockage.

15Text
Affiche un texte, depuis un fichier contenu dans la mémoire de stockage, dans la VRAM.
Paramètres :
M = nom du fichier
B = numéro du texte compris entre 0 et 99
X = abcisse
Y = ordonnées
C = mode d'affichage (sous forme complexe)
Si la partie réelle de C = 0, le texte est affiché comme en locate, la forme comlexe de C correspond alors à la couleur du texte (0 = noir, 1 = blanc).
Si la partie réelle de C = 1, le texte est affiché comme un texte en basic, et la partie complexe peut alors prendre 4 valeurs différentes (0 = and noir, 1 = or noir, 2 = and blanc , 3 = or blanc).

Voici comment insérer le code dans un programme :
'TEXT0="HELLO WORLD"
Remplacer 0 par le numéro de votre texte.
Transférez ensuite le programme dans le dossier PRGM2 de votre mémoire de stockage.

Si certains caractères ne s'affichent pas, signalez le moi, je les ajouterai.

16Number
Affiche un nombre dans la VRAM.
Paramètres :
B = nombre
X = abcisse
Y = ordonnées
C = mode d'affichage (sous forme complexe)
Si la partie réelle de C = 0, le texte est affiché comme en locate, la forme comlexe de C correspond alors à la couleur du texte (0 = noir, 1 = blanc).
Si la partie réelle de C = 1, le texte est affiché comme un texte en basic, et la partie complexe peut alors prendre 4 valeurs différentes (0 = and noir, 1 = or noir, 2 = and blanc , 3 = or blanc).

17HorizontalScroll
Décale horizontalement tous les pixels de la VRAM.
Paramètre :
X = scroll
Si X est positif les pixels dont décalés vers la droite, si X est négatif les pixels sont décalés vers la gauche. Les pixels qui sortent de l'écran sont replacés de l'autre cotés.

18VerticalScroll
Décale verticalement tous les pixels de la VRAM.
Paramètre :
Y = scroll
Si Y est positif les pixels dont décalés vers le bas, si Y est négatif les pixels sont décalés vers le haut. Les pixels qui sortent de l'écran sont replacés de l'autre cotés.

IV. Communication entre calculatrices

19SerialOpen
Ouvre le port 3pin.
Retourne 0 dans R si le port est ouvert.

20SerialClose
Ne pas oublier de fermer le port 3pin.

21SerialRead
Reçoit des données.
Retourne 0 dans R si la réception est accomplie.
B contient la valeur reçue.

22SerialWrite
Envoie des données.
Paramètre :
B = valeur à envoyer

V. Gestions des fichiers externes

Les fichiers externes sont stockées dans le dossier PRGM2 de la mémoire de stockage.
Voir aussi l'aide pour le nom du fichier.

23FileCreate
Crée un fichier dans le dossier PRGM2 de la mémoire de stockage.
Paramètres :
M = nom du fichier
X = taille du fichier (c'est à dire le nombre de valeurs que pourra contenir le fichier)

24FileRead
Lis une valeur dans un fichier contenu dans le dossier PRGM2 de la mémoire de stockage.
Retourne 0 dans R si la lecture est accomplie.
B contient la valeur lue.
Paramètres :
M = nom du fichier
X = emplacement de la valeur à lire (la première valeur est à l'emplacement 0, la seconde à 1...)

25FileWrite
Ecrit une valeur dans un fichier contenu dans le dossier PRGM2 de la mémoire de stockage.
Paramètres :
M = nom du fichier
X = emplacement de la valeur à écrire (la première valeur est à l'emplacement 0, la seconde à 1...)
B = valeur à écrire

VI. MultiGetkey

26MultiGetkey
Permet de tester plusieurs touches simultanément.
Retourne dans R, un 1 à la position des touches enfoncées, sinon 0.
Voici les positions des touches détectées : 10e0 = DROITE, 10e1 = HAUT, 10e2 = BAS, 10e3 = GAUCHE, 10e4 = ALPHA, 10e5 = SHIFT

VII. Overclock

27Overclock
Augmente la fréquence du processeur et donc accélère certaines fonctions.
La calculatrice fait un reset à la fin du programme.

VIII. Arrêt du timer

28TimerStop
Arrête le timer.
Je vous conseille fortement de l'utiliser à la fin du programme pour éviter d'éventuels plantages.

IX. Gestion du temps réel

29RealTime
Retourne dans R le temps en minute depuis la premier appel.
Paramètre :
M = nom du fichier (il permet de différencier plusieurs programmes utilisant le temps réel).

Aides :

I. Nom des fichiers

Certaines fonctions utilisent un fichier stocké dans le dossier PRGM2 de la mémoire de stockage.
Le nom du fichier doit être composé de 4 lettres ou chiffres, transcris selon la table ASCII et rentrés les uns à la suite des autre dans la variable M.
Exemple : pour le fichier DEMO, on a selon la table ASCII : D = 68, E = 69, M = 77 et O = 79
La variable M doit donc contenir 68697779.

II. Table ASCII

32 48 49 50 51 52 53 54 55 56 57 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
espace 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

IV. Important

A la fin de certains programmes, la calculatrice s'éteint brutalement, et se rééteint dès que vous l'allumez. Ne vous inquiétez pas, c'est seulement le timer d'extinction qui est modifié. Ce bug a une probabilité d'environ 2%.
Pour le corriger il faut, entre deux allumages, aller dans le menu System [G], puis faire [F2] et enfin [F1].

Parfois la calculatrice plante, elle ne réagi plus lorsque vous pressez les touches et l'image reste fixe. Ce bug a une probabilité de 20%.
Pour le corriger il faut appuyer sur le bouton RESTART au dos de votre calculatrice, cela n'abime en aucun cas votre calculatrice.

Evitez d'utiliser les labels !

Faites donc des sauvegardes régulières de vos programmes et signalez moi les bugs.
D'une manière générale, il faut éteindre la calculatrice pour sauvegarder les modifications apportées aux programmes.