Kevin Kofler a écrit :
* On n'utilise pas de fonctionnalités kernel. Donc:
- ROM_CALLs seulement à travers le procédé officiel
- pas de RAM_CALLs, sections BSS ou librairies
- seul header autorisé: os.h. Pas de tios.h, doorsos.h etc.
* On met au début: section ".data"
* On supprime tous les xdef _ti89, xdef _ti92plus, xdef _main etc.
* On met un xdef pour chaque fonction à exporter.
* Si les fonctions sont utilisables séparément, on les met dans des fichiers .asm séparés, compilés séparéments (pas avec include!), pour que seules les fonctions réellement utilisées soient linkées dans les programmes.
* On utilise:
- dans l'IDE: Project / Options / Target: Function Archive
- en ligne de commande: tigcc -ar fichier1.asm fichier2.asm fichier3.asm -o libstat.a
geogeo a écrit :
Pour compiler je fait:
TIGCC MaLibrairie.asm ar -r MaLibrairie.a MaLibrairie.o
A savoir que ma librarie possède des fonctions de Doorsos!
move.l $c8,a0 move.l toto*4(a0),a0 jsr (a0)
geogeo
a écrit : et lorqsque je veut l'appeler dans un programme, un message d'erreur apparâit comme quoi la fonction CALCULATOR n'est pas définit. Dans le fichier ASM MaLibrairie.asm j'utilise CALCULATOR. Quand je parlait de doorsos c'était pour remplacer OS.h par Dooros.h mais ça marche pas!
geogeoEuh.. Ça n'a rien à voir, mais j'ai l'impression que tu utilises ton fichier .asm quand tu veux utiliser ta librairie. Il faut utiliser le .a !
a écrit : et lorqsque je veut l'appeler dans un programme, un message d'erreur apparâit comme quoi la fonction CALCULATOR n'est pas définit. Dans le fichier ASM MaLibrairie.asm j'utilise CALCULATOR.
geogeo a écrit :
Non j'ai trouvé le problème, toute les procédures que vous avez citait je les avit faite mais j'avais juste à remplacer la RAM_CALL CALCULATOR par un fonction :
move.l $C8,d3
swap d3
lsr.w #6,d3
move.b d3,calc
J'ai tout simplement besoin de cette fonction pour identifier la calculatrice et ainsi gérer correctement le clavier!
move.l 0xC8,%a0 /* Calculator Detection */ | At first, assume TI-92 Plus. | It takes less space to write the values into %d0 first and then check whether they are correct. moveq #1,%d0 | Move the address of the jump table to %d1. move.l %a0,%d1 and.l #0x400000,%d1 | Now %d1 is 0 on a TI-89 or V200, or 0x400000 on a TI-92+. jbne __calc_in_d0__ | Otherwise, assume TI-89. clr.w %d0 | Get the address of the ScrRect variable into a1. move.l (%a0,0x2F*4),%a1 /* ScrRect */ | If ScrRect+2 (x2) is less than 200, it is a TI-89. cmp.b #200,2(%a1) jbcs __calc_in_d0__ | Otherwise, it is a V200. moveq #3,%d0 __calc_in_d0__: | Fill __calculator now, since __calc_is_OK__ may be located at different places. lea __calculator(%pc),%a1 move.w %d0,(%a1)
geogeo
a écrit : Je voudrais savoir si la fonction SetIntVec ne modifie pas les registres...
geogeo
a écrit : La Voyage 200 à le même clavier que la TI-92 plus? Donc la fonction calculator fonctionne sur toute les calculatrices!
BiHi
a écrit : Pour le problème de la touche qui arrête la musique, tu devrais utiliser la touche ON qui ne se lit pas comme les autres touches mais qui déclenche une interruption. Il suffit de rediriger cette interruption pour arrêter la lecture.
$60001A RW :1 READ: Current status of the [ON] key, =0 if pressed :7-0 WRITE: Acknowledge [ON] key interrupt (level 6)