Utilise plutôt cet exemple-là:
include "OS.h"
xdef _nostub
xdef _ti89
xdef _ti92plus
plane0 equ __D_plane ;On ne doit pas accéder directement à des variables
plane1 equ __L_plane ;commençant par __.
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 principal (premier plan)
bsr GrayOn ;active les niveaux de gris
move.l #$ef007f,-(a7)
move.l plane1(PC),-(a7)
move.l PortSet*4(a5),a0
jsr (a0) ;active le deuxième plan
addq.l #8,a7
move.l ScreenClear*4(a5),a0
jsr (a0) ;efface le deuxième plan
move.l #20*$1000000+20*$10000+40*$100+40,-(a7)
move.w #1,-(a7)
move.l ScrRect*4(a5),a0
pea.l (a0)
pea.l 6(a7)
move.l ScrRectFill*4(a5),a0
jsr (a0) ;dessine un rectangle rempli en gris clair
move.l #80*$1000000+20*$10000+100*$100+40,10(a7)
move.l ScrRectFill*4(a5),a0
jsr (a0) ;dessine le plan clair d'un rectangle rempli en noir
lea.l 14(a7),a7
move.l #$ef007f,-(a7)
move.l plane0(PC),-(a7)
move.l PortSet*4(a5),a0
jsr (a0) ;active le premier plan
addq.l #8,a7
move.l #50*$1000000+20*$10000+70*$100+40,-(a7)
move.w #1,-(a7)
move.l ScrRect*4(a5),a0
pea.l (a0)
pea.l 6(a7)
move.l ScrRectFill*4(a5),a0
jsr (a0) ;dessine un rectangle rempli en gris foncé
move.l #80*$1000000+20*$10000+100*$100+40,10(a7)
move.l ScrRectFill*4(a5),a0
jsr (a0) ;dessine le plan foncé d'un rectangle rempli en noir
lea.l 14(a7),a7
move.l ngetchx*4(a5),a0
jsr (a0) ;attend l'appui d'une touche
bsr GrayOff
;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