Nom du programme : CS
Version : 1.00 beta 1
Date : 14 décembre 2003
Auteur : Matthieu Gallet
Plate-forme : TI-92Plus, V200, TI-89
Fonction : gestionnaire de fichiers (entre autres)
Sommaire :
0
Présentation générale
1 Définitions
2 Comme se servir
de CS
3 Documentation des différentes fonctions
4 CSlaunch
5 Editeur hexadécimal
6 CSdata
7 Remerciements
8 Bugs connus
9 A venir
10 Historique
0 Présentation générale
CS est un puissant gestionnaire de fichiers, doublé de fonctions inédites pour
gérer de nombreuses autres types d'objets sur la calculatrice. Il s'agit d'une
version totalement refondue d'un autre de mes programmes, XCS (eXpérimental CS),
qui m'avait servi à apprendre à programmer en assembleur 68000 et à voir
comment développer un shell. J'ai ici volontairement repris l'interface du VAR-LINK
à la fois pour des raisons de praticité (mêmes combinaisons de touches) et de
taille.
Principales caractéristiques :
- installation en tant qu'application flash !
- éditeur hexadécimal / désassembleur / désinstalleur de TSR
intégrés !
- explorateur de handles !
- nombreuses informations sur les objets présents sur la
calculatrice ou sur la calculatrice elle-même !
- fonction chercher permettant d'exécuter ou de gérer les
fichiers trouvés !
- récupération des archives effacées en RAM !
- reconnaissance des formats de compression acf, KOMP,
PEP et ZIP
!
- gestion des fichiers GRP, KOMP, PEP et ZIP !
- CS décompresse automatiquement les fichiers en RAM avant de
les exécuter (formats ZIP, KOMP, PEP)!
- lecteurs de textes et d'images internes !
- gestion des TSR (format evHk et EvHk)
- désassembleur de programmes _nostub / kernel !
... ... ...
Avertissement :
Je ne peux être tenu pour responsable de dommages et/ou de
pertes
données résultant directement ou indirectement de l'utilisation de CS (ou de
CSlaunch).
Vous n'êtes pas autorisés à redistribuer ce package ou une de ses
parties sans mon autorisation.
Cette documentation n'est pas du tout finie, alors ne m'en voulez pas
s'il manque des choses dans les remerciements, dans la présentation, dans les
fonctions des touches... De la même façon, certaines captures d'écran peuvent ne plus
correspondre à l'affichage actuel.
1 DEFINITIONS
Contrairement à la plupart des shells, CS n'est pas restreint à la gestion des
fichiers mais permet de manipuler différents objets :
- les fichiers : il s'agit des variables
créées par l'utilisateur, telles que des programmes PRGM/FUNC, des textes, des
images...
- les répertoires ou dossiers
- les handles : il s'agit des blocs de
mémoire. Reportez-vous à n'importe quel tutorial sur l'assembleur 68000 pour en
savoir plus, mais il ne vaut mieux pas y toucher quand on ne sait pas trop ce
qu'on fait : le risque de planter la TI n'est pas négligeable. Tous ne sont pas
reconnus, mais il y en a en général moins d'une dizaine d'inconnus (sinon c'est
pas normal je pense).
- les applications flash (FlashApp)
- les TSR (Terminate and Stay Resident) :
certains programmes assembleurs restent en mémoire pour pouvoir être utilisés à
tout moment. Certains (ceux respectant la convention de Kevin Kofler) peuvent
être désinstallés en toute sécurité à partir de CS.
- la poubelle (j'aurais bien aimé l'appeler
'Corbeille', comme sur un OS pour PC bien connu, mais il me fallait un nom de
moins de 8 lettres) : les fichiers archivés peuvent être récupérés à tout
moment, du moment qu'aucun 'Garbage memory' (réorganisation des archives) n'a eu
lieu.
2 COMMENT S'EN SERVIR
Pour se servir de CS, il faut
envoyer à la calculatrice le fichier principal cs.9xz (si c'est pour une TI-92Plus,
sinon c'est cs.89z pour les TI89 et cs.v2z pour les V200). Il y a un autre
fichier facultatif : cslaunch.9xz. Pour plus de précisions sur ce programme,
reportez-vous à la fin du texte. Seul CSLaunch permet d'utiliser CS au maximum
de ses possibilités, mais ça ne marche pour l'instant que sur les TI-92Plus AMS 2.xx.
Sur les TI-92Plus, il n'a besoin d'aucun programme extérieur
pour être lancé (ni kernel du genre DoorsOS, Universal OS ou Preos, ni
patch du type hw2patch ou h220xtsr, ni même lanceur du type ttstart).
Des programmes externes sont requis pour (dé-)compresser :
format ZIP : un kernel qui soit installé (je conseille
Universal OS 1.30 - sur AMS < 2.05 - ou PreOS 0.67 sinon), ainsi que les bibliothèques ziplib,
graphlib, filelib et userlib,
format KOMP : flib2 (de F. Leiber),
format ppg : ttstart (de la TICT).
format PEP : pepzip.
Au premier lancement, CS affiche la liste des répertoires présents sur la
calculatrice et est en mode icônes. Avec ESC, on peut remonter d'un niveau et on
obtient alors :

"HOME" correspond à la liste des répertoires, "POUBELLE" à la liste des fichiers
effacés de l'archive, "ARCHIVE" à la liste complète des fichiers présents dans
l'archive, "HANDLES" à la liste des handles, "TSR" à la liste des TSR présents
sur la calculatrice, et enfin "FLASHAPP" aux applications Flash installées sur
la calculatrice.
3 LES
DIFFÉRENTES FONCTIONS
J'ai choisi de les documenter en fonction des touches utilisées pour y accéder
et en précisant au besoin quels étaient les objets concernés. Certaines touches
sont classiques, mais d'autres combinaisons sont beaucoup plus rares, c'est
pourquoi il est utile de tout lire.
[ESC]
: remonter d'un niveau dans le programme, jusqu'à le quitter.
[Gauche] (mode liste) : remonter d'un niveau dans
le programme, mais ne permet pas de le quitter.
[Droite] (mode liste) :
dossier / fichier GRP : affiche la liste des variables de ce
dossier / de ce fichier GRP.
(dossier)
(groupe)
[Enter] :
dossier : affiche la liste des variables de ce dossier.
fichier : exécute le programme associé au type de variable.
Les fichiers de type
EXE/ASM/PRGM/FUNC sont exécutés directement s'il n'y a pas d'association
adaptée.
Les images (PIC) sont affichées à
l'écran s'il n'y a pas d'association adaptée.
Les textes (TEXT) sont lus avec le
lecteur interne s'il n'y a pas d'association adaptée.

Les groupes (GRP) sont ouverts comme
des dossiers s'il n'y a pas d'association adaptée.
Quelques exemples pour bien comprendre comment marchent les associations :
ASM si 'ASM' n'est pas défini dans les associations -> on
exécute directement folder\file()
ASM si 'ASM' est associé, par exemple avec ttstart ->
folder\ttstart("folder\file") est exécuté.
TEXT si 'TEXT' est associé à txtrider et ASM à ttstart -> on exécute
folder\ttstart("folder\txtrider","folder\text")
Comme on peut le voir, les
associations s'appliquent aussi au lanceur, mais CS vérifie quand même que le
lanceur n'essaie pas de se lancer lui-même. Pour chercher un lanceur de lanceur,
CS ne fait pas la différence entre ASM, EXE, LIB, ni entre PRGM/FUNC.
Les fichiers compressés au format KOMP, PEP ou ZIP sont automatiquement
décompressés pour l'exécution (si les programmes externes sont présents) et
compressés après.
[Haut] / [Bas] (mode
liste) :
change la variable sélectionnée pour celle du haut .. ou
celle du bas.
[Haut] / [Bas] /
[Gauche] / [Droite] (mode
icônes) :
ai-je vraiment besoin de détailler ?
[Maj] + [Haut] /
[Bas] / [Gauche] / [Droite]
:
sélectionne la variable surlignée tout en se déplaçant.
[Diamant] + [Haut] /
[Bas] :
aller au début ou à la fin de la liste
[2nd] + [Haut] /
[Bas] (mode liste) :
monter / descendre de 10 variables.
[LOCK] + [Gauche] / [Droite] :
dossier / secteur d'archive : replier le dossier ou le
secteur d'archive. Replier un dossier n'a d'importance quand dans le VAR-Link.
Par contre, replier les secteurs d'archive peut être agréable.

[2nd] + [ENTER] :
fichier : propose différentes options pour l'exécution d'un
programme :
réarchiver :
si le programme a été modifié, l'archive correspondante est réactualisée
(pratique pour sauvegarder des high-scores, par exemple)
libérer la
RAM : cette option ne fonctionne que si CS est archivé et qu'il est exécuté
depuis le HOME, et permet de libérer un maximum de mémoire pour l'exécution de
programmes gourmands en RAM (jeux...). N'a pas d'effet si CS est exécuté en tant
qu'application Flash.
surveiller la
RAM : cette option affiche une liste des handles "perdus" pendant l'exécution du
programme.
setfold :
change de répertoire pour se placer dans le répertoire où se trouve la variable
le temps de l'exécution.
fonction :
exécute "Disp folder\program()" au lieu de "folder\program()" et permet
d'afficher d'éventuels résultats.
attendre :
fait une pause (qu'on peut abréger en appuyant sur [ON]) après l'exécution du
programme, ce qui permet de lire les messages dans la Status Line.

[Diamant] + [ENTER] :
fichier / dossier : insère le nom du dossier ou du répertoire
dans l'application en cours, puis quitte CS. C'est l'équivalent de [ENTER] dans
le VAR-LINK.
[2nd] + [ESC] :
quitte le programme.
[Diamant] + [ESC] :
quitte le programme sans désélectionner les variables.
[MODE] :
bascule entre les modes 'ICONES' et 'LISTE'.

[2nd] + [STO] :
fichier : insère le contenu du fichier sélectionné dans
l'application en cours, puis quitte le programme. C'est l'équivalent de la
touche RCL, sauf qu'elle marche avec des variables PEPées, KOMPressées et ZIPées.
[STO] :
fichier : insère le contenu du fichier sélectionné dans le
ClipBoard (buffer utilisé par le Copier-Coller usuel).
[Diamant] + [A] :
fichier : archive un fichier. cf. le manuel de la TI, chapitre VAR-LINK.
[Diamant] + [C] :
fichier : copie le fichier.
[Diamant] + [E] :
fichier : décompresse un fichier au format ZIP, PEP ou KOMP.
dans la poubelle ou un fichier GRP : recrée la variable
sélectionnée en RAM.
[Diamant] + [F] :
dossier : choisi le répertoire surligné comme étant le
répertoire courant.
[Diamant] + [K] :
fichier : compresse le fichier sélectionné au format KOMP. Le
programme FLIB2 doit être présent sur la calculatrice.
[Diamant] + [K] :
fichier : compresse le fichier sélectionné au format KOMP. Le
programme FLIB2 doit être présent sur la calculatrice.
[Diamant] + [L] :
fichier / dossier / AppFlash / handle : cf. le manuel de la
TI, chapitre VAR-LINK.
[Diamant] + [P] :
fichier : compresse le fichier sélectionné au format PEP. Le
programme pepzip doit être présent sur la calculatrice.
[Diamant] + [Q] :
quitte CS.
[Diamant] + [S] :
fichier : envoie le fichier via le link. cf. le manuel de la TI, chapitre VAR-LINK.
[[Diamant] + [X] :
fichier : coupe le fichier. Il ne sera effectivement effacé
que quand le "coller" aura été fait.
[Diamant] + [V] :
fichier / dossier : colle les fichiers précédemment coupés /
copiés dans le dossier choisi.
[Diamant] + [Z] :
fichier : compresse le fichier sélectionné au format ZIP. Les
programmes cslaunch, ZIPLIB, FILELIB, USERLIB, GRAPHLIB ainsi qu'un kernel doivent
être présents sur la calculatrice.
[Diamant] + [ON] :
éteint la calculatrice.
[2nd] + [ON] :
éteint la calculatrice puis quitte le programme.
[APPS] :
lance l'éditeur hexadécimal.

[<-] , [F1] +
[1]
(effacer) :
fichier : efface le fichier. Il ne sera pas désarchivé mais
effacé directement dans l'archive.
dossier : efface le dossier, qui doit être vide.
handle : efface le handle. S'il est dans l'archive,
EM_Abandon sera appelé pour l'effacer.
FlashApp, TSR : ...
 
On peut également effacer les fausses applications flash
créées par ID d'ExtendeD
[F1] + [2] (copier) :
fichier : cf. le manuel de la TI, chapitre VAR-LINK.
[F1] + [3] (renommer) :
fichier / dossier : cf. le manuel de la TI, chapitre
VAR-LINK. Toutes les variables d'un dossier renommé seront désarchivées puis
archivées pour éviter qu'elles ne réapparaissent sous leur
ancien nom après un reset (bug du VAR-LINK) .
handle : change la taille du handle.
[F1] + [4] (déplacer) :
fichier : cf. le manuel de la TI, chapitre VAR-LINK.
handle : déplace le handle avec HeapMoveHigh en fin de RAM.
[F1] + [5] (créer un répertoire) :
cf. le manuel de la TI, chapitre VAR-LINK.
handle : crée un handle de taille taille.
[F1] + [6] (verrouiller) :
fichier / dossier / AppFlash / handle : cf. le manuel de la
TI, chapitre VAR-LINK.
[F1] + [7] (déverrouiller) :
fichier / dossier / AppFlash / handle : cf. le manuel de la
TI, chapitre VAR-LINK.
[F1] + [8]
(archiver) :
fichier : cf. le manuel de la TI, chapitre VAR-LINK.
[F1] + [9] (désarchiver) :
fichier : cf. le manuel de la TI, chapitre VAR-LINK.
archive : désarchive le fichier associé.
[F1] + [A] (cacher) :
fichier / dossier / AppFlash : cache la variable du VAR-LINK.
Il ne vaut mieux pas trop le faire avec des fichiers, mais cela ne pose aucun
problème avec les dossiers ou avec des AppFlash.
[F1] + [B] (décacher) :
fichier / dossier / AppFlash : décache les fichiers (!)
[F1] + [C] (KOMPresser) :
fichier : compresse le fichier sélectionné au format KOMP. Le
programme FLIB2 doit être présent sur la calculatrice.
[F1] + [D] (ZIPer) :
fichier : compresse le fichier sélectionné au format ZIP. Les
programmes ZIPCS, ZIPLIB, FILELIB, USERLIB, GRAPHLIB ainsi qu'un kernel doivent
être présents sur la calculatrice.
[F1] + [E] (extraire) :
fichier : décompresse un fichier au format ZIP, PEP ou KOMP.
dans la poubelle ou un fichier GRP : recrée la variable
sélectionnée en RAM.
[F1] + [F] (PEP) :
fichier : compresse le fichier sélectionné au format PEP. Le
programme pepzip doit être présent sur la calculatrice.
[F2] + [1] (setup) :
permet de choisir quelles doivent être les variables
affichées.
La première colonne correspond au dernier octet de chaque
fichier. Ils sont donc tous d'un des ces 13 types. Cependant, des informations
supplémentaires peuvent être disponibles à l'intérieur du fichier pour préciser
la signature. Les plus courantes sont dans la seconde colonne. Contrairement au
type, il y un grand nombre de signatures possibles, et j'ai donc choisi de
permettre de changer les différentes signatures filtrées avec [CLEAR].
 
[F2] + [2] (associations) :
permet de choisir quel programme sera utilisé pour exécuter
un fichier.

[F2] + [3] (chercher) :
cherche tous les fichiers dont le nom correspond. * et ? sont
reconnus.
 
[F2] + [4] (état mémoire) :
quelques informations sur la mémoire...

[F2] + [5] (options) :

Cela permet de choisir d'entrer directement dans un
répertoire donné au lancement de CS, et d'autoriser l'effacement de variables
archivées (sans les désarchiver au préalable), temporaires, ou cachées.
[F2] + [6] (vider la corbeille) :
Provoque un garbage memory (réorganisation des archives) qui
effacera les fichiers de la poubelle.
[F2] + [7] (effacer l'ID List) :
fichier : cf. le manuel de la TI, chapitre VAR-LINK.
[F2] + [8] (Self-Test) :
Exécute le self-test de la TI. De façon générale, on peut
également l'obtenir en entrant dans l'écran IO, puis [diamant], [ ) ], [S], sauf
que là ça redessine la barre en bas de l'écran.
[F2] + [9] (A propos) :
Donne la version actuelle de CS. Le Product ID n'est pas
totalement inutile, il me permet de savoir quelles sont les options d'assemblage
choisies (version kernel / _nostub, 89/92+, bien sûr, mais il y a d'autres
options moins visibles). Pratique quand on repère un bug. En plus, ça fait joli
:)
[F3] + [1] (envoyer) :
fichier : cf. le manuel de la TI, chapitre VAR-LINK.
[F3] + [3] (envoyer vers TI-92) :
fichier : cf. le manuel de la TI, chapitre VAR-LINK.
[F3] + [6] (envoyer l'ID List) :
fichier : cf. le manuel de la TI, chapitre VAR-LINK.
[F4] :
sélectionner la variable en cours.
[F5] + [1] (tout sélectionner) :
fichier : cf. le manuel de la TI, chapitre VAR-LINK.
[F5] + [2] (tout désélectionner) :
fichier : cf. le manuel de la TI, chapitre VAR-LINK.
[F5] + [3] (sélectionner) :
fichier : cf. le manuel de la TI, chapitre VAR-LINK.
[F5] + [4] (développer les dossiers) :
cf. le manuel de la TI, chapitre VAR-LINK. Si on est dans la
section "Archive", cette commande développe tous les secteurs d'archive.
[F5] + [5] (replier les dossiers) :
cf. le manuel de la TI, chapitre VAR-LINK. Si on est dans la
section "Archive", cette commande développe tous les secteurs d'archive.
[F5] + [6] (sélectionner le dossier) :
dossier : choisi le répertoire surligné comme étant le
répertoire courant.
[F6] (infos) :
fichier / dossier :
affiche le type, l'adresse du fichier
dans la VAT, l'adresse du fichier dans la mémoire, son handle, sa taille, la
taille de son handle, sa taille d'origine pour les fichiers compressés (aux
formats PEP, ZIP, KOMP, ppg, acf), sa dimension pour les PIC et les PV, les arguments
des PRGM/FUNC, les bibliothèques requises par les fichiers EXE/LIB, le nombre de
fichiers dans les GRP, le nombre de fichiers d'un dossier...
  
  
FlashApp :
affiche le nom officiel, le nom
interne, la taille (4 pour les apps d'origine comme le Home), le TaskID,
l'adresse du certificat, les flags... Plein de choses inutiles, quoi !

1ère ligne :
affiche quelques informations sur la
calculatrice : la version actuelle, le Product ID, la version du boot code, le
kernel installé, le hardware, la présence de hw2patch ou de h220xtsr...

Handles :

TSR :

Handle :
  
Les handles reconnus sont :
markers : les 4 premiers handles qui servent (je crois) à
marquer le début de la heap.
Estack : la pile d'expression (Expression Stack)
ACB : bloc créé pour une application flash permettant
d'enregistrer des données (Application Control Block)
ERD : Handle utilisé pour des sauvegardes d'écran par les
boîtes de dialogue d'erreur
Clip : handle utilisé par le ClipBoard (Copier coller)
VAT : handle correspondant à une variable
Sysvar : handle utilisé pour gérer les variables système (qui
n'ont pas de VAT)
custom : handles utilisé pour les menus personnalisés
(custom)
DskTop : handle utilisé par le Desktop pour classer les
applications flash
CmdLine : ligne de commande du Home
app : handle utilisé par une application flash pour ses
variables
window : sauvegarde d'écran
HOME : handle utilisé par le Home, mais je sais pas à quoi il
sert.
CS : handle utilisé par CS, le gros (taille >= 2000o)
correspond à la liste des handles.
kernel : bin, c'est le kernel installé !
HOOK, evHk, EvHk : Tsr installés
h220xtsr : handle de h220xtsr...
IDList : cf. le var-link
node : créé à chaque nouvelle entrée dans l'historique du
home
entry : calcul demandé entré dans l'historique du home
ans : réponse au calcul précédent.
LIB : bibliothèque en cours d'utilisation
EXE : programme en cours d'utilisation
[F7] + [1] (transformer
en fonction)
fichiers de type PRGM : modifie le type et le transforme en
FUNC. C'est la seule méthode que j'ai trouvée pour pouvoir utiliser les
commandes ClrIO, popup, Disp "texte",... dans les fonctions. Les fonctions ne
pourront toujours pas modifier des variables globales (donc pas de boîtes de
dialogue), mais ça rajoute quand même quelques instructions, qui peuvent être
pratique pour débuguer une fonction.
[F7] + [2] (aperçu)
fichier : cela fait à peu près la même chose que le F6 du
VAR-LINK, sauf qu'il marche avec les fichiers compressés
 
[F7] + [3] (éditeur hexadécimal)
lance l'éditeur hexadécimal.
[F7] + [4] (VAT doctor :)
fichier : Il peut toujours avoir des erreurs dans la
structure des fichiers de la TI, par exemple après un crash mal récupéré, ou si
des programmes écrasent des variables existantes. Cette option vérifie donc :
- si il y a un handle,
- si le handle n'est pas effacé,
- si le bit ¤ est armé pour une
variable archivée,
- si l'archive n'est pas effacée,
- si le nom d'archive est le même que celui de la variable (le nom
d'archive est celui sous lequel la variable sera récupérée après un reset) pour
les AMS 2.xx,
- si le bit ¤ n'est pas armé alors qu'il ne devrait pas l'être,
- si le handle est verrouillé (attention, c'est normal qu'il le soit ssi
il s'agit d'un programme en cours d'utilisation)
- si le handle est beaucoup plus grand que la variable
- si la variable est plus grande que son handle
dans l'archive :
- si le bloc archivé ne correspond ni à une variable ni à un
handle, il propose de recréer les deux,
- si le bloc ne correspond pas à un handle mais que la variable
correspondante existe, il propose de marquer le bloc comme effacé,
- si le bloc a un handle mais n'est pas attribué à une variable, et que
la variable correspondante existe, il propose de l'effacer,
- si le bloc a un handle mais n'est pas attribué à une variable, et que
la variable correspondante n'existe pas, il propose de recréer la variable. Ce
genre de problème peut arriver si vous déverrouiller une variable archivée puis
que vous l'effacez depuis le VAR-LINK,
- MAIS si jamais le bloc est attribué à une variable, il ne vérifie pas que
c'est la bonne (on peut le faire depuis l'entrée en VAT).
[F7] + [5] (Exécuter)
cf. [2nd] +
[ENTER].
[F7] + [6] (désassembler)
sur un fichier de type STR, ASM, EXE ou LIB non compressé :
désassemble le programme (!). Cette fonction est en cours de développement. Pour
l'instant, on ne peut pas choisir toutes les options de désassemblage. Si jamais j'y arrive (a priori oui, j'ai fait le plus
dur), les options seront les suivantes :
- désassemblage linéaire : oui | non -> désassemble tout le
texte à la bourrin, sans faire gaffe aux données
- envoyer les sources : oui | non -> envoie la source
désassemblée dès qu'un fichier est plein, puis le supprime (la mémoire risque
d'être trop petite si le programme est vraiment gros)
- décalage en hexadécimal : oui | non -> écrit $x(an) au lieu
de x(an)
- constantes en hexadécimal : oui | non -> écrit #$x au lieu
de #x
- considérer les lea comme du code : oui | non ->
désassemblera les parties atteintes par un lea comme du code et non comme des
données
- archiver les sources : oui | non -> archive un fichier
source dès qu'il est plein (pour libérer la RAM)
- désassembler comme _nostub -> force un fichier kernel à
être désassemblé comme un fichier _nostub
- ajouter des points d'entrées -> vous permet d'ajouter
des adresses ou des offsets qui devront être désassemblées comme du code et non comme des
données
Pour ajouter des points d'entrées, on écrit les offsets en décimal (ou en hexa
précédé de '$') séparés par des virgules ; ex : 120,$C0,48
CS ne vérifie pas si les données sont correctes, je trouve
que cela ne sert à rien. Ceux qui savent vraiment se servir d'un désassembleur ont d'autres
choses à faire que planter leur TI pour s'amuser.
Le désassembleur prend en compte :
en nostub : _nostub, _ti92plus, _ti89, _v200, les
ROM_CALL en F-Line, ER-Throw, le relogement d'EX_Patch
en kernel : _exit, _main, _comment, _library, les ROM_CALL, les RAM_CALL,
les fonctions exportées et importées, les BSS, les ROM_CALL en F-Line, ER_Throw,
le relogement kernel standard. Par contre, il ne prend pas en compte le
relogement d'EX_Patch. J'aurais pu le faire, mais c'est inutile car un programme
kernel n'a pas le relogement nostub.
La source qui en sortira sera normalement compatible avec a68k (l'assembleur que
j'utilise). Tous les fichiers source seront nommés src_x (où est x est un
entier), aucune précaution n'est prise pour les créer, s'il existe déjà, il sera
effacé ! Il y a également un fichier de type scc_x. Il contient toutes les
définitions et les include des header files. On obtient ainsi une source directement compatible avec a68k
/ TI-GCC.
A l'origine, je pensais donner le choix entre A68K/TI-GCC, as92 et as, mais as92
et as ne reconnaissent pas toujours très bien les commandes ASM (par exemple, il
faut écrire mulu.w #x,<ea> pour as92 alors que mon désassembleur donne mulu #x,<ea>).
Pour les chaînes STR, CS ne va accepter de désassembler que celles qui
ressemblent à une chaîne EXEC (i.e. avec des caractères dans
{0,...,9,A,...,F} avec un nombre pair de caractères)
[F7] + [7] (grouper)
fichier (en général toute une sélection) : regroupe les
variables en une seule, de type GRP. La taille totale ne doit pas dépasser 64ko.
Cette fonction est assez pratique car elle évite d'avoir des répertoires pleins
de variables dont on ne se sert pas souvent. On peut les extraire ultérieurement
avec [F1] + [E].
[F7] + [8] (ajouter à un groupe)
fichier : ajoute la variable à un groupe déjà existant (il ne
faut pas qu'il soit archivé).
[F7] + [9] (lire le
texte)
fichier de type TEXT : utilise le lecteur de texte interne
pour lire le texte. Je l'utilise pour lire des sources ASM, car quand je fais
[ENTER], c'est txtrider qui est lancé et il fait n'importe quoi quand il lit des
sources ASM.
[F8] (aperçu)
fichier : cela fait à peu près la même chose que le
[F6] du VAR-LINK, sauf qu'il marche avec les fichiers compressés
4
CSLaunch
C'est un petit programme
qui me sert à faire différentes choses :
- lancé sans argument [cslaunch()],
Sur les TI-92Plus :
il exécute CS en
mémoire archive, comme cela, CS ne consomme plus beaucoup de RAM. Avant de l'exécuter, il
grossit artificiellement CS jusqu'à atteindre la taille de 65510o puis l'archive
- si ce n'est pas déjà le cas. Ne soyez pas surpris s'il y a le message "Warning
! About to garbage collected archive memory" au 1er lancement. CS n'a alors
besoin de rien pour pouvoir se lancer (ni kernel, ni hw2patch, ni h220xtsr...).
Seul problème insoluble, on ne peut plus compresser avec ziplib pour la bonne
raison que c'est cslaunch qui se charge de l'appel ziplib et qu'il est déjà en
cours d'utilisation. Deux solutions : faire une copie de cslaunch et l'utiliser
pour lancer CS, ou installer CS comme application flash (voir plus bas).
Sur les TI-89 / V200 :
il exécute CS en RAM, il permet d'outrepasser la limite de taille des programmes
ASM existante sur certaines AMS. On ne peut alors plus compresser avec ziplib,
mais ce n'est pas grave car si la limite de taille existe, c'est aucun kernel
n'est installé, rendant impossible l'utilisation de ziplib. Il vaut donc mieux
utiliser un kernel.
Cette fonction, que je trouve un peu inutile, va probablement disparaître.
- avec une syntaxe de type
cslaunch("zip:folder\file"), cslaunch s'exécute en mode kernel (il faut donc un
kernel comme Universal OS (AMS <= 2.05) ou PreOS (tous AMS) installé) et compresse le fichier grâce à la
bibliothèque ziplib (qui doit être présente sur la calculette).
- avec la syntaxe cslaunch("acb"), cslaunch
archive en lui faisant prendre cette taille de 65510o puis crée une fausse
application Flash. On peut alors exécuter CS comme une application Flash
normale. Cette méthode ne marche pour l'instant que sur les TI-92Plus AMS 2.xx,
mais c'est la meilleure : presque pas de RAM utilisée, et besoin d'aucun programme
externe pour le faire marcher (moi je m'en fous, j'ai toujours un kernel, mais
je dis ça pour les fanatiques du mode _nostub).

Cette méthode permet de ne consommer
que très peu de RAM, et ce, même pendant l'exécution de CS.
- avec la syntaxe
cslaunch("uninst"),
cslaunch supprime l'application flash créée avec cslaunch("acb").
5
Éditeur hexadécimal / Désassembleur
CS possède un éditeur hexadécimal intégré, auquel on peut
accéder avec la touche [APPS] ou avec [F7]+[3].
Il est de base en mode normal (on ne peut pas éditer). Pour l'instant, il n'est
pas adapté à la 89, j'ai un peu la flemme de faire les conversions
nécessaires...
Les touches sont alors :
[haut] /
[bas] :
monte / descend d'un écran.
[2nd] /
[diamant] / [shift] /
[Lock] + [haut] /
[bas] :
monte / descend de 0x100, 0x1000, 0x10000, 0x 100000.
[F1] ...
[F8] :
aller à l'adresse enregistrée n° 1 ... 8.
[diamant] +
[F1] ... [F8] :
enregistrer l'adresse actuelle en tant que F1 ... F8.
[ESC] :
quitter l'éditeur
hexadécimal.
[A] :
ajouter un offset à
l'adresse actuelle.
[B] :
repasser en mode bitmap.
[D] :
passer en mode désassembleur.
[E] :
passer en mode EDIT.
[F] :
chercher.
[G] :
va à une adresse précise.
[H] :
va à un handle précis. La
mémoire correspondant à ce handle sera écrite en blanc sur noir au lieu de noir
sur blanc. Si vous remontez d'une ligne, les deux octets précédents seront aussi
surlignés car ils concernent aussi le handle, mais je déconseille TRÈS fortement
de les modifier, sous peine de ruiner la heap.
[I] :
regarde si l'adresse actuelle
correspond à un ROM_CALL. Sinon, essaie d'identifier le handle dans lequel est
située l'adresse.
[R] :
va à un ROM_CALL.
[S] :
soustraire un offset.
[T] :
rafraîchit l'écran (le
redessine, quoi).
[V] :
chercher de nouveau.
[diamant] +
[P] (Protected Memory Violation) :
protège / déprotège la mémoire en
dessous de 0x120 (un petit verrou est affiché lorsque la mémoire est protégée).
En mode EDIT :

[haut] /
[bas] :
monte / descend le curseur.
[MODE] :
bascule entre les modes
ASCII et HEX.
[A] ...
[Z], [0] ... [9]
(mode ASCII) :
écrit le caractère voulu. Rien ne se passe si l'adresse
est inférieure à 0x120 et que PVM est activée.
[A] ...
[F], [0] ... [9]
(mode HEX) :
écrit la valeur voulue. Rien ne se passe si l'adresse est
inférieure à 0x120 et que PVM est activée.
[diamant] +
[A] (mode HEX) :
permet d'écrire directement dans la
mémoire archive. Demande une première fois la valeur à inscrire, puis fait un
AND logique avec la valeur actuelle et affiche la valeur qui sera réellement
inscrite. Appuyer sur [ENTER] confirmera l'écriture. Attention, cette opération
n'est pas réversible !
[diamant] +
[P] (Protected Memory Violation) :
protège / déprotège la mémoire en
dessous de 0x120.
[diamant] +
[0] ... [7] :
inverse
le bit 0 ... 7 de l'adresse actuelle.
En mode DÉSASSEMBLEUR :

[haut] /
[bas] :
monte / descend d'une ligne.
[2nd] /
[diamant] / [shift] /
[Lock] + [haut] /
[bas] :
monte / descend de 0x100, 0x1000, 0x10000, 0x 100000.
[F1] ...
[F8] :
aller à l'adresse enregistrée n° 1 ... 8.
[diamant] +
[F1] ... [F8] :
enregistrer l'adresse actuelle en tant que F1 ... F8.
[ESC] :
quitter le désassembleur.
[ENTER] :
page suivante.
[A] :
ajouter un offset à
l'adresse actuelle.
[B] :
passer en mode bitmap.
[E] :
repasser en mode éditeur hexadécimal.
[G] :
va à une adresse précise.
[H] :
va à un handle précis.
[R] :
va à un ROM_CALL.
[S] :
soustraire un offset.
En mode BITMAP :
La mémoire est affichée telle quelle à l'écran. Ce mode
permet notamment de repérer des images dans des séquences de bits
incompréhensibles par d'autres moyens. Dans la status line, la largeur en octets
par rapport à la largeur de l'écran est inscrite en bas de l'écran.

Par exemple, la fin de CS (là où sont stockées les icônes)
est affichée, avec une largeur de 3 octets (soit 3*8=24 pixels)
[haut] /
[bas] :
monter / descendre d'une ligne.
[gauche] /
[droite] :
décaler l'image d'un byte à gauche /
à droite.
[diamant] + [gauche]
/ [droite] :
diminuer / augmenter la largeur de
l'image d'un octet (on peut afficher des images d'une largeur comprise entre 8
et 8000 pixels).
[2nd] + [bas]
/ [haut] :
descendre / monter d'un écran.
[D] :
passer en mode désassembleur.
[E] :
repasser en mode éditeur hexadécimal.
6 CSdata
CSdata est un petit fichier automatiquement créé par CS lors de son exécution,
qui lui permet d'enregistrer les options. Si CSdata est archivé, les options ne
pourront pas être sauvegardées, il vaut donc mieux le laisser dans la RAM. Les
informations spécifiques au filtrage et aux associations sont écrites dans
CSdata ET dans CS (s'il n'est pas archivé), ainsi, si vous effacez CSdata, ces
informations seront reprises pour la création de CSdata. Je conseille donc
d'exécuter CS une fois depuis la ligne de commande du HOME sans l'archiver pour
enregistrer les options puis de l'archive, et de laisser CSdata dans la RAM.
7
Remerciements
D'abord, Albert, Stan, XDanger, Bizuth,
ExtendeD, DeadBird, Geogeo, Nerick, Patou, Thibaut, Pollux, Kevin Kofler pour leurs
nombreux commentaires et remarques constructives.
Ensuite, tous ceux qui m'ont permis de programmer en 68000
(Jimmy Mardell pour son 68k guide, l'équipe de TIGCC, tous ceux qui ont
programmé un Shell et à qui j'aurais pris des idées)
Tous ceux que j'ai oublié
Enfin, tous ceux qui vont utiliser CS !
8 Bugs
connus
- Exécution des programmes assembleur. La calc se bloque quand
elle exécute un programme kernel. J'ai un peu de mal avec ce
bug car il ne se produit pas sur VTI, ni sur ma 92+ 2.08 (hw2patchée), ni sur ma V200 2.09 (avec h220xtsr).
Si le bug se produit entre les messages "NG_execute [ROM Call 0x25D]..." et "removing
error frame...", ce n'est pas de la faute de CS.
- Les programmes compressés au format PEP qui sont archivés
sont recompressés après exécution, alors que cela ne devrait pas être le cas.
- En mode "libérer la RAM", CS a tendance à exécuter
deux fois de suite le programme. J'ai oublié si j'ai supprimé de façon
satisfaisante ce bug, mais il me semble que oui.
- Sur ma V200, quand CS est lancé avec shift-on grâce à PreOS,
une erreur se produit quand on essaie d'insérer du texte dans l'application
flash en cours (avec [diamant]+[ENTER])
- Sur PedroM, le répertoire Handles plante la calc, et les
menus ne s'affichent pas correctement (à cause d'un bug de MenuOn de PedroM)
- Il y a encore quelques bugs graphiques sur AMS 1.xx (et
peut-être quelques bugs tout court)
- CS n'a jamais été testé sur PedroM 89.
- il doit rester pas mal de bugs graphiques sur la version 89
(j'ai pas de 89 chez moi, donc c'est pas top pour tester)
j'en ai repéré au moins un : l'aperçu d'une image ou d'un
texte n'est pas assez grand.
9 A faire
Plein de choses :
-> peut-être un désassembleur (plus complet que l'actuel)
-> l'envoi d'applications flash et la fonction réception, mais c'est
compliqué et cela prend beaucoup de place pour peu d'intérêt.
-> l'exécution des applications flash si CS est lancé en mode AppFlash
-> lecteur de textes au format txtrider (en plus du lecteur actuel) ? J'en ai
commencé un on-calc, mais un bug toujours inexpliqué m'a empêché d'aller plus
loin.
-> un anticrash ? je n'en vois pas trop l'utilité, à part peut-être pour
pallier la relative instabilité de CS.
-> un éditeur de textes ??? L'éditeur de base est suffisamment performant je
trouve.
-> des sous répertoires. C'est maintenant théoriquement possible, mais il
faudrait écrire toutes les fonctions pour stocker les infos dans une variable.
-> possibilité de trier les fichiers (par type, taille, nom...)
-> afficher la corbeille sous forme de liste triée (c'est en cours de
réalisation)
-> peut-être des menus dans l'éditeur hexadécimal.
-> remplacer l'éditeur hexadécimal actuel (mon hexview2) pour un nouveau
(hexview3) plus compact.
-> la possibilité de stopper un désassemblage
-> gérer la compression XPACK
-> gérer les fichiers 68cA (pack archive)
-> ajouter le nom des ROM_CALL au désassembleur (ça se fera à partir d'un
fichier externe)
J'ai actuellement plusieurs problèmes pour le désassembleur kernel :
- un bug qui veut pas se laisser trouver avec les ROM_CALL (mais j'ai
l'impression qu'il a été éliminé :))
- je ne vois pas comment distinguer code et données parmi les fonctions
exportées par une bibliothèque.
10 Historique
Désolé, je commence l'historique à la bourre, donc il manquera beaucoup
de choses...
12/02/2004 version 1.00.84.6 : quelques corrections
(qui ne sont pas finies) pour faire tourner CS sur PedroM et sur les AMS 1.xx.
J'ai corrigé également plusieurs bugs graphiques sur le viewer de textes intégré
des versions 89.
08/12/2003 version 1.00.84.1 : début du codage du
désassembleur d'AMS, correction de deux bugs qui pouvaient se produire quand il
y avait plus de 2000 handles.
30/11/2003 version 1.00.83.14 : correction de
divers bugs dans le désassembleur de fichiers kernel (dans le relogement), dans
le désassembleur général (dans l'adressage de type x(an,xr.s)), j'ai rajouté
l'en-tête des fichiers kernel, enfin !
ça avance un peu moins vite
maintenant, à cause de mon intégration...
au passage j'ai supprimé les
menus dans l'éditeur hexa, car ça marchait pas très bien :(
14/09/2003 version 1.00.83.9 : correction de bugs
dans le désassembleur
12/09/2003 version 1.00.83.8 : j'ai un peu changé l'éditeur hexa et le
désassembleur pour laisser
apparents les menus et la status line, afin de pouvoir utiliser les menus dans
les éditeurs hexa (pour ne plus avoir à connaître par coeur les touches).
L'entrée des adresses se fait maintenant aussi dans la status line, et j'ai
changé le "PVM" tout moche par un petit verrou, toujours dans la status line.
Dans le graph-ripper, j'ai rajouté dans la status line le nombre d'octets
affichés par ligne par rapport à la largeur de l'écran (30o), et on peut
maintenant afficher plus que 30o par lignes. J'ai également corrigé un défaut de
ma nouvelle routine d'effacement de TSR.
Dans l'éditeur hexa, j'ai corrigé les infos obtenues par
[i], cela n'affiche plus n'importe quoi maintenant. Une partie des
relogements kernel était oubliée : CS ne prenait en compte que les relogements
qui donnaient une adresse (codée sur un longint), alors qu'il faut également
prendre en compte les adresses codées sur un word et les valeurs immédiates. Ces
relogements viennent d'être rajoutés, et il y a désormais les offsets ajoutés aux
relogements (i.e. CS reconnaît les #_RAM_CALL0005+1, par exemple).
06/09/2003 version 1.00.83.2 : ça y est, CS peut effacer correctement les TSR
correspondant au nouveau standard EvHk (et non plus seulement ceux au standard
evHk).
05/09/2003 version 1.00.82.31 : en fait, le bug précédent d'exécution n'est pas
corrigé, un programme archivé compressé en PEP est re-compressé après l'exécution
alors qu'il ne devrait pas l'être. Va falloir que je retravaille tout ça. J'ai rajouté des infos sur un
secteur d'archive et sur la mémoire archive elle-même. Correction d'un bug dans
le désassemblage des _ROM_CALL en F-Line.
04/09/2003 version 1.00.82.30 : Il y avait un bug dans l'exécution de programmes compressés au
format PEP, et il est maintenant corrigé (je pense).
31/08/2003 version 1.00.82.29 : Maintenant, quand on crée un handle, on ne revient plus au
menu précédent. La poubelle est triée par ordre alphabétique (pas encore très
bien, mais ça avance) et les fichiers les
plus récents sont en premier (j'ai entièrement recodé la routine pour récupérer
les archives et la poubelle).
08/08/2003 version 1.00.82.26 : j'ai rajouté l'affichage de la RAM libre en haut à droite. J'ai
codé une routine d'insertion d'objet dans une VAT, ce qui ouvre de nouveaux
horizons (sous répertoires, notamment)
29/07/2003 : CSlaunch a été modifié, l'appflash CS ne plante plus depuis
le desktop et CSlaunch peut maintenant lancer CS en RAM sur les 89 et V200 (mais
je vais peut-être retirer cette fonction, elle fait tout planter).
24/07/2003 version 1.00.82.25 : le format de compression PEP est géré comme les
formats ZIP et KOMP. Le désassembleur peut désassembler différentes parties du
stub des programmes kernel (bibliothèques importées / exportées, RAM_CALL,
ROM_CALL, _main, _exit, _comment). Désassemblage de chaînes EXEC ! Le curseur
reprend sa vitesse d'origine quand la calculatrice est éteinte. L'option de
désassemblage "considérer les lea comme du code" est faite.
15/07/2003 version 1.00.82.16 : CS a 1 an ! affichage des commentaires sur les TSR compatibles,
le désassembleur reconnaît les Line 1011 Emulator et Line 1010 Emulator. Plus de bug possible quand on
affiche les infos sur les applications flash d'ID, on peut même les
effacer désormais. J'ai enfin commencé les options de désassemblage (ajouter des
offsets)
12/07/2003 version 1.00.82.10 ; début de l'historique.
28/08/2002 : TI m'envoie une nouvelle 92+ et retour de vacances : je commence
faire l'affichage des infos (F6)
20/08/2002 : j'ai une V200, je commence à écrire des routines qui serviront plus
tard (désassembleur)
03/08/2002 version 0.6.x.x : dans la continuité des essais d'exécution, crash
total de ma 92+ (blue screeen pendant quelques secondes, puis le sympathique
écran : 'Press [I] to reinstall a product code' et enfin à 99%, 'corrupted
certificate') -> calc morte :(
31/07/2002 version 0.6.x.x : premiers essais d'exécution avec libération
maximale de la RAM. 1ère conséquence : crash de l'AMS 2.05 de ma 92+ (ER_Throw à
chaque reboot), mais j'arrive à réinstaller une AMS (ouf !)
28/08/2002 version 0.5.x.x : crash de disque dur, perte du code :( J'ai
désassemblé la version qui était sur ma 92+ pour récupérer la source...
21/07/2002 version 0.1.0.0 : portage du code sur TIGCC.
15/07/2002 version 0.0.0.0 : début du code de YCS sur as92 entre un oral de
maths :) et un de physique :( à Centrale.
|