L'Anti-Reset

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 !

Génèse

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.

Que se passe t'il lors d'un ALL RESET ?

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 :

  • Les 11 premiers octets de la zone de programme BASIC.
  • La table des pointeurs de stockage de programmes et du MEMO.

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.

Le code

Le Listing

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

Téléchargement du source

anti-reset-2008-v3.cas : Dernière mise à jour 28.10.08 / 838 octets.

Fonctionnement de l'Anti-Reset

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.

Avant le ALL-RESET

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).

fx-850p-ss-0001.jpg

La sauvegarde démarre :

fx-850p-ss-0002.jpg

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 !”.

fx-850p-ss-0003.jpg

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 :

fx-850p-ss-0004.jpg

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

Après le ALL-RESET, tapez votre CLEAR x …

fx-850p-ss-0005.jpg

et votre POKE y,z …

fx-850p-ss-0006.jpg

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 :

fx-850p-ss-0007.jpg

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” :

fx-850p-ss-0009.jpg

Le programme fait son oeuvre et restaure les octets nécessaires à la remise en état de la mémoire de votre FX :

fx-850p-ss-0010.jpg

Quelques secondes plus tard, il affiche “Ok !” en émettant un BIP :

fx-850p-ss-0011.jpg

La restauration est désormais achevée. Vous avez complètement récupéré TOUS vos programmes ainsi que le contenu du MEMO.

fx-850p-ss-0012.jpg

Explication du code

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.

Compatibilité

Le programme a été testé et validé comme étant 100% fonctionnel avec les machines suivantes :

  • FX-850P (8Ko, 16Ko, 40Ko)
  • FX-880P (32Ko, 40Ko, 64Ko)
  • VX-1 (8Ko, 16Ko, 40Ko)

Je présume qu'il fonctionne aussi parfaitement sur les machines suivantes, mais n'en disposant pas, je n'ai pas pu le tester :

  • FX-860P

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) :

  • FX-870P
  • VX-3

Pour les autres modèles, je n'ai pas encore pu tester ou étudier la portée de son action.

 
anti-reset.txt · Dernière modification: 2010/05/01 19:50 (édition externe) · [Anciennes révisions]
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki