Site

. Les News
. Le Forum
. L'équipe et les projets
. Les Tutoriaux
. IRC
. La boite à outils
. Les routines et algos indispensables
. Les liens


Les News de TI-FR






 

 



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.