

include "tios.h" ; Header du Ti-os
xdef _main
xdef _comment
xdef _ti92plus
xdef _ti89
include "genlib.h" ; Header de Genlib.
_main: ; Point d'entrée du programme
jsr genlib::init ; Initialisation de Genlib
genlib::PUSH_DSCREEN d0 ; Alloue un DScreen sur la pile
move.l d0,DScr1 ; sauvegarde son adresse dans DScr1.
jsr genlib::set_dscreen_function ; D0.l = Adresse du DScreen
jsr genlib::set_dscreen_int ; D0.l = Adresse du DScreen
jsr genlib::cls ; Efface le DScreen courant
jsr genlib::init_dscreen ; Alloue un autre DScreen (Heap)
tst.w d0 ; Vérifie que le DScreen a bien été alloué
beq.s quit ; Sinon quitte
jsr genlib::push_hd ; Sauvegarde le handle dans la pile interne
move.l a0,DScr2 ; Sauvegarde l'adresse du deuxième DScreen dans DScr2
bsr lets_start ; [...] programme [...]
jsr genlib::free_hd ; Libère tous les handles
genlib::POP_DSCREEN ; Dépile le premier DScreen
jsr tios::PortRestore ; Si vous avez utilisé PortSet (Ti-92+ / Ti-89 only !)
jmp genlib::quit ; Fin du programme
SwapBuffer: ; Cette fonction va échanger le buffer.
move.w ts(pc),d1 ; Lit ts
move.l DScr1(pc,d1.w),d0 ; Sélectionne l'adresse de l'un des DScreen
jsr genlib::set_dscreen_int ; Définit ce DScreen comme celui étant affiché
eor.w #4,d1 ; Prochain DScreen
move.w d1,ts ; Sauvegarde ts
move.l DScr2(PC,d1.w),d0 ; Sélectionne l'adresse de l'autre DScreen
jmp genlib::set_dscreen_function ; Fixe les fonctions graphiques à ce DScreen
DScr1 dc.l 0 ; DScreen 1
DScr2 dc.l 0 ; DScreen 2
ts dc.w 0 ; Temps
Wait15: ; Cette fonction va fixer une fréquence constante (fps, Frames par seconde) (15Hz)
clr.l genlib::timer
cmp.w #1,genlib::frame_timer
bls.s Wait15
clr.w genlib::frame_timer
rts
Wait30: ; Cette fonction va fixer une fréquence constante (fps, Frames par seconde) (30Hz)
clr.l genlib::timer
tst.w genlib::frame_timer
beq.s Wait30
clr.w genlib::frame_timer
rts
; Cette fonction va attendre jusqu'à ce que vous puissiez dessiner sans problème.
; Vous devez la rajouter avant la première fonction graphique.
Ready:
tst.l genlib::timer
beq.s Ready
rts
lets_start:
; Programme principal
; ....
rts
_comment dc.b "GenLib Exemple",0
end