Un Anti-Reset est un programme dont le rôle est de contrer et d'annuler les effets dévastateur d'un ALL RESET . En effet, le FX-850P dispose d'une touche escamotée, à droite du bouton POWER, appelée ALL RESET. Une pression sur cette touche remet le FX à zéro en effaçant les informations qu'il content (données et programmes), de sorte à le remettre dans le même étant que lors de sa toute première utilisation. Pour faire une analogie avec les ordinateurs personnels, c'est comme formater le disque dur et réinstaller le système d'exploitation.
Il s'agit ici à n'en pas douter du plus beau coup d'éclat d'OISAC. La réalisation d'un tel tour de force a demandé des semaines de dur labeur ponctuées de crises de nerf en pagaille pour un résultat final qui émerveille à chaque fois que l'on vient à l'utiliser !
Nous ignorions si une telle prouesse était possible. Il s'agissait juste d'un doux rêve que nous caressions en secret. Le besoin d'une telle application provenait du fait que les étudiants, qui se servaient du FX-850P pour emmagasiner leurs cours et autres anti-sèches lors des examens, n'étaient pas à l'abri de se faire reseter leur machine par un surveillant zélé le jour de l'examen…
Avant de détailler le mécanisme de ce programme, précisons que c'est à Alain Bourdier que reviennent les lauriers de la mise au point de ce programme, et des différentes versions de l'époque. La dernière version datant d'octobre 2008 à quant à elle été développée par Christophe Bulla, sur les bases de celles d'Alain Bourdier, apportant optimisation du code, fiabilité et validation sur toutes les configurations possible de mémoire de 8Ko sur un FX-850P jusqu'à 64Ko sur un FX-880P avec un RP-33.
Le ALL RESET ne met pas à plat la totalité de la mémoire du FX lorsqu'il est actionné. Et c'est tant mieux puisque notre programme exploite cette remise à zéro partielle. Sont donc effacés :
D'autres segments de la mémoire sont aussi écrasés (variables, zone CALC, etc) mais cela n'a aucune incidence sur notre affaire et il n'est donc pas nécessaire de s'en préoccuper.
En résumé, et pour faire l'analogie avec un disque dur d'ordinateur, lors d'un ALL RESET, la mémoire du CASIO ne subit qu'un “formatage rapide”. Les données sont intactes (sauf les 11 premiers octets qui se sont envolés), ainsi que la table d'allocation des fichiers qui a été écrasée.
Voici le listing du programme en version 32 colonnes reprenant la présentation sur l'écran du CASIO afin d'en faciliter la saisie :
1 'OISAC' 10 VAC:DEFSEG=0:F=(PEEK1715+PEEK 1716*256+PEEK1717*65536)/1024:FO RI=1TO5:READA,D,E:IFF=A GOTO20 E LSENEXT:PRINT"UNKNOW MEMORY STAT E";:END 20 B=A*1024-E-3121:C=A*1024-165: $="BACKUP":T$="* ANTI-RESET (C)2 008-OISAC *":Y=FRE2:Z=FRE1:IFY>D AND Y<E;PRINT"OUT OF MEMORY. CL EAR"E+1;:END ELSEIF Z=B;$="RESTO RE" 30 CLS:PRINTCSR2 T$;TAB(4)F"Ko - "$" (Y/N):";:INPUT@1;A$:LOCATE0 ,0:IFA$="Y"AND$="RESTORE";U=1 EL SEIFA$<>"Y";CLS:END 40 CLS:PRINTCSR2 T$;TAB(2);$;:LO CATE10,1:PRINT"[ ]"; :LOCATE11,1:N=C-70:I=1706:J=1:GO SUB50:I=2944+Y:J=11:GOSUB50:FORH =0 TO10:I=C+H*15:J=4:GOSUB50:NEX T:BEEP:PRINT"] Ok !";:$=INPUT$(1 ,@):CLS:IFU=0;PRINT"CLEAR"Y"& PO KE"C+150",";PEEK(C+150)+12; 45 END 50 FORM=I TOI+J:IF U;POKEM,PEEKN ELSEPOKEN,PEEKM 60 N=N+1:NEXT:PRINT"*";:RETURN:D ATA 8,900,1535,16,900,1535,32,75 00,8191,40,7500,8191,64,7500,819 1
anti-reset-2008-v3.cas : Dernière mise à jour 28.10.08 / 838 octets.
Le programme a deux modes de fonctionnement. Le premier lorsque votre machine est “pleine” de données, et le second lorsque la machine vient d'être fraichement effacée. Dans tous les cas, le programme détecte l'état de votre FX, et adapte automatiquement son comportement.
| IMPORTANT : Il est absolument OBLIGATOIRE de stocker le programme ANTI-RESET en P0, et en aucun cas dans une autre zone de programme. |
|---|
C'est la partie “BACKUP” du programme que vous devez impérativement lancer à chaque fois que vous avez fait des modifications dans la machine (programme ou MEMO). Lors de son exécution, il affiche “BACKUP”, ce à quoi vous répondez “Y” (pour Yes - oui).
La sauvegarde démarre :
Après quelques secondes, une fois les informations vitales sauvegardées dans une zone mémoire qui ne sera pas touchée par le ALL RESET, le programme emmétra un BIP et vous affichera “Ok !”.
Appuyez ensuite sur n'importe qu'elle touche, et s'afficheront 2 informations CAPITALES qui vous faudra noter ou mémoriser : CLEAR x et un POKE y,z :
Ces 2 instructions sont votre sésame pour restaurer la machine à la suite d'un ALL RESET.
| J'insiste : Dès que vous faites la moindre modification, quelqu'elle soit, dans un programme, ou dans le MEMO, relancez systématiquement l'ANTI-RESET et faites un BACKUP. En effet, si avant le ALL RESET vous omettez de le faire, vous restaurerez des informations erronées qui mettront votre machine dans un état instable, et donc pas exploitable. |
|---|
Après le ALL-RESET, tapez votre CLEAR x …
et votre POKE y,z …
Prenez soin de remplacer les symboles x, y et z par les chiffres que votre CASIO vous aura donné lors de la dernière sauvegarde.
Comme par magie, le programme P0 revient. Vérifiez-le en rentrant en MODE 1 :
A son exécution, le programme va identifier que la mémoire de la machine est vierge, et que vous souhaitez restaurer son état d'avant le ALL-RESET. A la question “RESTORE”, répondez “Y” :
Le programme fait son oeuvre et restaure les octets nécessaires à la remise en état de la mémoire de votre FX :
Quelques secondes plus tard, il affiche “Ok !” en émettant un BIP :
La restauration est désormais achevée. Vous avez complètement récupéré TOUS vos programmes ainsi que le contenu du MEMO.
Après un ALL RESET, comment un CLEAR et un POKE arrivent à restaurer le programme en P0 ?
Elémentaire : la ligne 1 du programme est totalement indispensable, bien que s'agissant d'un simple commentaire. En effet, cette ligne fait exactement 11 octets. Exactement le même nombre d'octets que ceux qui sont effacés par le ALL RESET… Donc en clair, lors d'un ALL RESET, cette ligne totalement inutile est effacée, pas le reste ! Voila pourquoi cette ligne est absolument fondamentale et ne doit être occultée sous aucun prétexte !
Vient ensuite l'instruction CLEAR qui redonne la même taille à la zone de stockage des variables que celle qu'elle avait avant le RESET. Là aussi, instruction indispensable, mais vu que le 'CLEAR x' n'est pas très utilisé, en règle générale, il ne change que si l'utilisateur l'a expressément demandé.
Enfin, le clou du spectacle, le 'POKE y,z' déplace le pointeur de début du programme P0 à 12 octets plus loin que ce qu'il faudrait… Juste là où le ALL RESET n'a pas effacé la mémoire. D'ailleurs, si après avoir tapé le POKE vous allez en MODE 1, et que vous éditez le code présent en P0, vous vous apercevrez que le programme est bien là, mais qu'il commence à la ligne 10 !
Lancez l'ANTI-RESET, restaurez, éditez de nouveau le programme : le pointeur de début de P0 a été remis à sa place initiale, la ligne 1 est réapparue, ainsi que la totalité des autres programmes et des données du MEMO.
Le programme a été testé et validé comme étant 100% fonctionnel avec les machines suivantes :
Je présume qu'il fonctionne aussi parfaitement sur les machines suivantes, mais n'en disposant pas, je n'ai pas pu le tester :
Enfin, il a été testé et validé avec certains FX, mais son fonctionnement reste partiel (uniquement pour le MEMO et les programmes BASIC) sans traiter les programmes réalisés dans d'autres languages (CASL, ASM) :
Pour les autres modèles, je n'ai pas encore pu tester ou étudier la portée de son action.