Sur Atari ST, nous avons le choix d’utiliser plusieurs langages de programmation comme le GFA Basic, STOS, C ou l’assembleur.
L’avantage de l’assembleur sur ces machines est qu’il permet d’effectuer des optimisations pointues. Celles-ci sont très utiles pour les animations visuelles comme les Intros/Démos.
Voici quelques informations sur la conception d’un programme en assembleur sur ST :
Un programme Atari est segmenté en plusieurs tranches nommées section. Le plus souvent on en trouve trois : code, data, bss.
La section code contiendra l’algorithme de votre programme, la data permettra la création de variables initialisées et enfin la bss contiendra les variables dynamiques comme les pointeurs sur variables.
Cependant ceci ne suffit pas pour créer un programme. Vous aurez certainement besoin d’utiliser des composantes du TOS, à savoir le GEMDOS, BIOS et l’XBIOS.
Nous allons tenter d’écrire à présent, un petit programme nous disant « bonjour » et attendant une saisie de notre part pour y mettre fin.
De quoi allons nous avoir besoin pour réaliser ce programme :
- Afficher un texte sur l’écran
- Attente de la saisie d’une touche
- Quitter le programme
Pour afficher un programme sur l’écran, nous disposons d’une fonction du GEMDOS (Cconws()) qui permet d’afficher une chaîne de caractères à l’écran. Elle s’utilise ainsi :
; #texte1 contiendra votre texte "Bonjour"
move.l #texte1,-(a7)
; #$09 correspond a la fonction Cconws()
move.w #$09,-(a7)
; #1 ici fait référence au GEMDOS
trap #1
L’attente de saisie se fera à partir d’une autre fonction du GEMDOS (Cnecin())
;#08 correspond a la fonction Cnecin()
move.w #8,-(a7)
; #1 correspond au GEMDOS
move.w #1,(-a7)
trap #1
addq.l #2,a7
Maintenant pour rendre la main au système, la fonction Pterm0 nous sera d’un grand secours, elle s’utilise comme suit :
move.w #0,-(a7)
trap #1
Au final, votre programme ressemblera a celui ci (j’utilise Assemble comme compilateur) :
;
move.l #texte1,-(a7)
move.w #$09,-(a7)
trap #1
;
move.w #8,-(a7)
trap #1
addq.l #2,a7
; Pterm0 on retourne au gem
move.w #0,-(a7)
trap #1
section data
texte1 dc.b 'Bonjour !',0