Ben c'est pas compliqué : (extrait du tutorial d'assembleur _nostub de Kevin)
include "OS.h"
xdef _nostub
xdef _ti89
xdef _ti92plus
movem.l d4/a5,-(a7) ;sauvegarde d4 et a5
move.l $c8,a5 ;place la table des ROM_CALLs en a5
pea.l 3840 ;taille à allouer
;(même chose que move.l #3840,-(a7), mais plus optimisé)
move.l HeapAllocPtr*4(a5),a0
jsr (a0) ;alloue les 3840 octets
move.l a0,d4 ;sauvegarde l'adresse du bloc alloué en d4
tst.l d4
beq nomem ;si le pointeur est nul, quitte le programme
move.l #3840,(a7) ;taille à copier
;Cette instruction n'est pas vraiment nécessaire puisque HeapAllocPtr ne modifiera
;pas la valeur qui est déjà sur la pile, mais mieux vaut ne pas se fier.
pea.l $4c00 ;source: adresse de l'écran
move.l d4,-(a7) ;destination: adresse du bloc alloué
move.l memcpy*4(a5),a0
jsr (a0) ;sauvegarde l'écran
lea.l 12(a7),a7 ;nettoie la pile
;début du programme principal
move.l ScreenClear*4(a5),a0
jsr (a0) ;efface l'écran
move.w #4,-(a7) ;cherche dans main
pea.l sym(PC) ;symbole à chercher
move.l SymFindPtr*4(a5),a0
jsr (a0) ;cherche la variable
addq.l #4,a7
move.w 12(a0),(a7) ;Le handle du symbole se trouve à l'offset 12 de la structure SYM_ENTRY.
move.l HeapDeref*4(a5),a0
jsr (a0) ;déréférence le handle
move.w #4,(a7) ;passe l'attribut A_REPLACE en argument
pea.l 3(a0) ;saute la taille de la variable et l'octet nul au début de la chaîne de caractères
clr.l -(a7) ;passe x=0 et y=0 en argument (On efface 4 octets, dont 2 pour x et 2 pour y.)
move.l DrawStr*4(a5),a0
jsr (a0) ;affiche le contenu de la chaîne de caractères
lea.l 10(a7),a7 ;nettoie la pile
move.l ngetchx*4(a5),a0
jsr (a0) ;attend l'appui d'une touche
;fin du programme principal
pea.l 3840 ;taille à copier
;(même chose que move.l #3840,-(a7), mais plus optimisé)
move.l d4,-(a7) ;source: adresse du bloc alloué
pea.l $4c00 ;destination: adresse de l'écran
move.l memcpy*4(a5),a0
jsr (a0) ;restaure l'écran
addq.l #8,a7
move.l d4,(a7)
move.l HeapFreePtr*4(a5),a0
jsr (a0) ;libère le bloc alloué
nomem:
addq.l #4,a7 ;nettoie la pile
movem.l (a7)+,d4/a5 ;restaure d4 et a5
rts
dc.b 0,'datafile'
sym: dc.b 0
;Le format des symboles est particulier: Il faut mettre un octet nul au début et à la fin,
;et le pointeur doit pointer sur le 0 final, pas sur le début.
L'idée, c'est d'utiliser les librairies statiques déjà existantes (TIGCCLIB pour les niveaux de gris, ttunpack ou packlib (cf. le lien du message n°4) pour la décompression).
Les arguments passés au prog, je crois que tu les retrouves successivement dans d0, d1,... si ce sont des nombres, ou dans A0, A1,... si ce sont des pointeurs.
Et si il y a plein d'arguments, le reste est dans la pile.
PpHd Le 24/06/2002 à 09:26 Tres mauvaise idee. Si les libs dynamiques existent, c'est pour qu'on s'en serve.
=> Plusieurs versions des fonctions sur ta calc (perte de place).
=> Plus difficile de mettre a jour.