Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
articles:casio-fx:modex [2024/08/27 09:21] – supprimée - modification externe (Date inconnue) 127.0.0.1 | articles:casio-fx:modex [2024/11/09 17:22] (Version actuelle) – frater | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Casio FX : Les appels système MODEx ====== | ||
+ | |||
+ | Des instructions totalement méconnues existent dans les programmes des libs, il s'agit des MODEx. | ||
+ | |||
+ | Il s'agit d' | ||
+ | |||
+ | Pour se faire, voici en substance la façon de procéder : | ||
+ | |||
+ | - Définir les valeurs des paramètres d' | ||
+ | - Mémoriser puis détourner le pointeur de zone de contrôle du dernier programme lancé (1771 à 1773) afin de le positionner sur la librairie qui exploite l' | ||
+ | - Lancer l' | ||
+ | - Restaurer les valeurs initiales du pointeur de zone de contrôle du dernier programme lancé | ||
+ | - Poursuivre l' | ||
+ | |||
+ | Il existe une autre méthode pour détourner ces appels systèmes, celle employée des espagnols (voir le manuel d' | ||
+ | |||
+ | Ainsi, il devient dès lors possible d' | ||
+ | |||
+ | ===== MODE32 ===== | ||
+ | |||
+ | ==== Fonction ==== | ||
+ | |||
+ | Ajoute 33 à la valeur ASCII de chaque composante d'une chaine de caractère. Pas de réelle application à cette fonction, il faut bien le reconnaître, | ||
+ | |||
+ | Exemple : A → b , B → c, etc. | ||
+ | |||
+ | ==== Paramètres ==== | ||
+ | |||
+ | Un seul paramètre qui correspond à la chaine de caractère à traiter. | ||
+ | |||
+ | ==== Où le trouver ? ==== | ||
+ | |||
+ | Le seul appel au MODE 32 exploitable est celui de la LIB 0900, ligne 50 car il est suivi d'un RETURN nous permettant de retourner dans un le programme qui l'a appelé. | ||
+ | |||
+ | ==== Code source : Mise en oeuvre ==== | ||
+ | |||
+ | <WRAP round important> | ||
+ | Il est IMPERATIF de respecter dans le source suivant la case des variables (les minuscules et majuscules). | ||
+ | </ | ||
+ | |||
+ | <code zxbasic> | ||
+ | 10 DEFSEG=0: | ||
+ | 20 INPUT " | ||
+ | 25 POKEX, | ||
+ | 30 GOSUB50 | ||
+ | 35 POKEX, | ||
+ | 40 PRINT g$;:END | ||
+ | </ | ||
+ | |||
+ | ==== Explication du code ==== | ||
+ | |||
+ | * Ligne 10 : Mémorise le pointeur de la zone de programme actuellement chargé en mémoire. Sera utile pour remettre ce pointeur en état, vu que nous allons jouer avec ! | ||
+ | * Ligne 20 : Enregistrement des paramètres souhaités. | ||
+ | * Ligne 25 : Positionnement du pointeur de la zone du programme chargé en mémoire vers la LIB 0900. A partir d'ici, l' | ||
+ | * Ligne 30 : On se branche sur la ligne 50 par le biais d'un GOSUB, ce qui nous garanti un retour à notre programme d' | ||
+ | * Ligne 35 : De retour dans notre programme, on remet le pointeur de la zone du programme tel qu'il était à l' | ||
+ | |||
+ | ===== MODE33 ===== | ||
+ | |||
+ | ==== Fonction ==== | ||
+ | |||
+ | Permet de copier un bloc d' | ||
+ | |||
+ | ==== Paramètres ==== | ||
+ | |||
+ | Trois paramètres interviennent dans ce mode : | ||
+ | |||
+ | - L' | ||
+ | - L' | ||
+ | - L' | ||
+ | |||
+ | ==== Où le trouver ? ==== | ||
+ | |||
+ | Le seul appel au MODE 33 exploitable est celui de la LIB 0900, ligne 2090 car il est suivi d'un RETURN nous permettant de retourner dans un le programme qui l'a appelé. | ||
+ | |||
+ | ==== Code source : Mise en oeuvre ==== | ||
+ | |||
+ | <WRAP round important> | ||
+ | Il est IMPERATIF de respecter dans le source suivant la case des variables (les minuscules et majuscules). | ||
+ | </ | ||
+ | |||
+ | <code zxbasic> | ||
+ | 10 DEFSEG=0: | ||
+ | 15 INPUT" | ||
+ | 20 n=F-d: | ||
+ | 25 POKEX, | ||
+ | 30 GOSUB2090 | ||
+ | 35 POKEX, | ||
+ | 40 PRINT" | ||
+ | </ | ||
+ | |||
+ | ==== Explication du code ==== | ||
+ | |||
+ | * Ligne 10 : Mémorise le pointeur de la zone de programme actuellement chargé en mémoire. Sera utile pour remettre ce pointeur en état, vu que nous allons jouer avec ! | ||
+ | * Ligne 15 : Enregistrement des paramètres souhaités. | ||
+ | * Ligne 20 : Préparation des variables qui vont être sollicitées à la ligne 2090 de la LIB 0900. | ||
+ | * Ligne 25 : Positionnement du pointeur de la zone du programme chargé en mémoire vers la LIB 0900. A partir d'ici, l' | ||
+ | * Ligne 30 : On se branche sur la ligne 2090 par le biais d'un GOSUB, ce qui nous garanti un retour à notre programme d' | ||
+ | * Ligne 35 : De retour dans notre programme, on remet le pointeur de la zone du programme tel qu'il était à l' | ||
+ | |||
+ | ==== Exemple d' | ||
+ | |||
+ | On a pas besoin tous les jours de copier des blocs d' | ||
+ | |||
+ | L' | ||
+ | |||
+ | - Allumez le FX-850P | ||
+ | - Appuyez sur la touche IN pour purger le contenu de votre CALC. | ||
+ | - Placez vous en BASIC en appuyant sur MODE puis 1. | ||
+ | - Apparait la liste de vos programmes… C'est la première ligne que nous allons copier. | ||
+ | - Placez vous dans la plage mémoire où vous avez saisi le programme MODE33. | ||
+ | - Exécutez-le en tapant RUN. | ||
+ | - Début de bloc : 0 (la mémoire de l' | ||
+ | - Fin de bloc : 31 (on tire jusqu' | ||
+ | - Destination : 1024 (c'est l' | ||
+ | - L' | ||
+ | - Repassez en MODE 0, et appuyez sur la touche OUT, et admirez le résultat. | ||
+ | |||