LES ROM_CALLS version 1.01
INDEX
:
*
PETITE INTRODUCTION
*
UTILISATION
*
ROM CALL SANS PARAMETRE
*
ROM CALL AVEC PARAMETRES
*
NOTATION DES ROM_CALLS
*
PROGRAMMATION
*
A NOTER
*
L'AUTEUR
PETITE
INTRODUCTION
Des bases sur
la programmation en 68k sont necessaires pour comprendre parfaitement
ce chapitre. Les Rom Calls sont de comme leur nom l'indique des
"appels en ROM". Il s'agit donc de fonctions qui ont ete programmees
par Texas Instruments, donc présentes dans l'OS (Operating System).
La plupart sont utilises tres frequemment par l'OS, par exemple:
- pour effacer l'écran (completement ou en partie), - éteindre la
TI, - exécuter les programmes, - modifier les Handles, - gérer la
mémoire, - faire les calculs... Ils peuvent s'avérer très utiles
pour la programmation: - pour gagner de la place, - pour ne pas
utiliser de librairie pour les fonctions de bases, - pour comprendre
l'OS, - pour la rapidité? Considérez donc que ce sont tous les points
importants de l'OS. Ils sont au nombre de 972 sur 89/92+. Je ne
sais pas encore leur nombre sur 92 I et II.
UTILISATION
La plupart
des Rom Calls modifient les registres d0, d1, d2, a0, a1 lors de
leur exécution. Aussi, il est preferable de toujours sauvegarder
ces registres avant d'appeler un Rom Calls. Mais c'est surtout si
les valeurs qu'ils contiennent sont essentielles au bon fonctionnement
de votre programme. Il suffit de faire : movem.l d0-d2/a0-a1,-(a7)
Puis pour les restaurerez : movem.l (a7)+,d0-d2/a0-a1 Mais vous
pouvez tout aussi bien sauvegarder tous les registres par : movem.l
d0-d7/a0-a6,-(a7) Et les restaurer par : movem.l (a7)+,d0-d7/a0-a6
La plupart des Rom Calls ont besoin de paramètres pour fonctionner.
De même, certains retournent des valeurs après leur exécution (par
exemple pour confirmer son succès ou son échec, un emplacement en
mémoire, un numero de handle...).
ROM
CALL SANS PARAMETRE
C'est à dire
qu'il n'a pas besoin de paramètres pour remplir sa fonction. Prenons
par exemple le _ROM_CALL_051, il permet d'attendre l'appuis d'une
touche au clavier. Ce Rom_Call est très utile, et de plus il permet
d'utiliser le graph-link en attendant que l'on presse une touche.
Il n'a pas besoin de paramètres pour s'exécuter, mais par contre
il retourne la valeur de la touche appuyé en d0.w
ROM
CALL AVEC PARAMETRES
Cela signifie
que ce Rom_Calls a besoin de paramètres pour fonctionner correctement.
Nous devons faire passer les paramètres par l'intermédiaire de la
pile ( n'oubliez pas qu'elle est à l'envers). Prenons un exemple
: move.w #2,-(a7) ; utilise la taille #2 (large) jsr tios::FontSetSys
; change la taille add.l #2,a7 ; remet à jour la pile Il s'agit
du _ROM_CALL_18F.
NOTATION
DES ROM_CALLS
Comme la ROM
a été écrite en langage C, David Ellsworth a décidé de donner les
paramètres à la façon du langage C. Depuis ce jour, toutes les notations
des ROM_CALLS ont été faite ainsi. Personnellement, je note les
ROM_CALLS ainsi:
;--------------------------------------------------------------
; Function
: la fonction avec entre parenthèse les paramètres ;
; Use : utilisation
; Note: divers notes sur le RC ;
;Input> les
paramètres d'entrée
;Out> les valeurs
retournées ;
--------------------------------------------------------------
XXXX::YYYY equ
_ROM_CALL_ZZZ
;--------------------------------------------------------------
Dans notre premier
exemple:
;--------------------------------------------------------------
; Function :
ngetchx ( void ) ;
; Use : Sort
of Idle_Loop which returns the key press. ; Note: You can send and
receive programs during.
; And take ScreenShot
(not all the time) ;
;Input> nothing
;
Out> d0.w =
the key pressed
;--------------------------------------------------------------
doorsos::ngetchx
equ _ROM_CALL_51
;--------------------------------------------------------------
Ici, dans d0
(taille word), il y a la valeur de la touche retournée Dans notre
second exemple:
;---------------------------------------------------------
; Function
: FontSetSys (BYTE font) ;
; Use : sets
the current system font to {font} ;
;Input> d0.b
= font to put
;Output> d0.b
= font before function was called
;---------------------------------------------------------
doorsos::FontSetSys
equ _ROM_CALL_18F
;---------------------------------------------------------
PROGRAMMATION
Pour l'utiliser,
il suffit juste d'écrire: jsr XXXX::YYYY Sur 92 : XXXX = tios Sur
89/92+ : XXXX = tios ou doors Sur 89/92+ on peut aussi écrire :
jsr _ROM_CALL_ZZZ où ZZZ = numéro du RC Sur 89/92+, on utilise une
macro: ROM_CALL macro move.l ($C8),a4 add.l #\1*4,a4 move.l (a4),a4
jsr (a4) endm Pour l'utiliser, il suffit de l'ajouter à une lib
ou à votre programme. En fait, sur 89/92+, il existe une table pour
qui regroupe tous les ROM_CALLS. L'adresse de cette table se situe
en ROM et en RAM. En RAM à l'adresse est $C8. Il suffit donc de
faire ($C8) et on obtient l'adresse exacte où commence la table.
Le reste, je pense que vous le comprenez. On peut aussi taper à
chaque fois: move.l ($C8),a4 add.l #\1*4,a4 <<<< remplacez le \1
par le numéro de RC que move.l (a4),a4 <<<< vous comptez utiliser.
jsr (a4) C'est long mais indispensable pour les programmes en mémoire
Flash. Sur TI92, il n'existe pas de table, d'où un réel problème.
On doit utiliser la deuxième méthode pour appeler un RC. Elle consiste
à utiliser les adresses exactes des ROM_CALLS, hélas dans la plupart
de cas, il faut les chercher (car personne n'a à ma connaissance
cherché toutes ces adresses). Il vous suffit juste après de les
appeler, toujours dans l'exemple précedent: pour le _ROM_CALL_051,
c'est : jsr $4cc47a Le problème de cette méthode est que les RC
n'occupent pas la même place sur les toutes les Rom, ce qui entrainent
sur les autres ROM des bugs. D'où l'intéret d'utiliser la macro,
mais hélas elle n'est valable que sur 89 et 92+. Dans mon exemple,
c'était pour la TI92+, Rom 1.01
A
NOTER
La plupart des
paramètres et le but des RC sont inconnus des utilisateurs (même
les plus expérimentés) de calculatrices Texas Instruments à ce jour.
Ceci est dû au manque de documentation. Texas Instruments a juste
diffusé une vague liste d'entre eux. Personnellement, je fais des
recherches, principalement sur TI89/92+. Forcément certains des
RC sur 89/92+ doivent exister aussi sur 92 I et II, il reste juste
à savoir lesquels et leur ordre exact pour pouvoir les utiliser.
Vous pouvez les trouver/chercher si vous possèdez votre ROM sur
votre PC, mais c'est très fastidieux. Mais l'intérêt y est et actuellement
je travaille là dessus. Si vous ne savez pas comment procéder pour
les trouver, dites le moi. J'espère avoir été assez clair, sinon
demandez-moi.
L'AUTEUR
WORMHOLE programmeur
sur TI92+ principalement. Je fais des recherches sur: - actuellement
sur FARGO et la TI92, - la commande Exec pour 89/92+, - les RC sur
89/92+, - sur la Flash Rom... Comment me contacter: par email: wormhole@multimania.com
par ICQ : 3695 6490 Site Web : http://www.multimania.com/wormhole
Vous n'avez pas le droit diffuser cette documentation sans mon accord
au préalable. Copyright WORMHOLE, 1998-2000
©Tous les programmes presents
sur ce site sont soumis à l'autorisation de leur programmeurs
respectifs pour toutes modifications. et dsistribution. La mise
en page a necessité un certain travail, il serait donc plus
correct de ne pas la plagier.
|