1) Compilation
2) Différence
ion/83
3) librairies
4) Règles/Ajouts
5) Un prgm Ion sans
le shell
6) Les Modules
7) Exemples de conversions
Ion permet facilement de créer des programmes pour ti83+ et ti83 sans beaucoup de syntaxe en plus.
Les préparatifs : placez Ion (ion.inc et asm.bat au moins doivent être présent), Tasm, et Devpac83 ds le même répertoire (iondev par exemple).
Placez votre fichier .z80 ou .asm ds ce rep.
Allez sous dos, tapez
cd \ [enter]
cd \iondev [enter]
asm X (nom du fichier sans l'extension)
Les erreurs vous seront indiqués par un message "There were errors".
Deux fichiers seront générés, un avec l'extension
.83p (pour la ti83) et un autre .8xp (pour la ti83+)
Le programme sera détecté par ion.
Voici un prgm pour effacer l'écran. Notez bien les diffèrences.
.nolist
#include "ion.inc" ; ion.inc est utilisé
à la place de ti83asm.inc
.list
#idef Ti83p
.org progstart-2 ; partie pour
la ti83+
.db $BB,$6D
#else
.org progstart ; partie pour la ti83
#endif
ret
jr nc,start ; va au label start.
Ce sera la première commande exec par le prgm
.db "Efface Ecran" ; titre du
prgm
start
bcall(_clrlcdfull) ; efface l'écran
bcall(_getkey) ; saisie d'une touche, ici utilisé
pour faire pause
ret
.end
La programmation pour ion est presque similaire à la programmation pour ti83 simple.
Il existe quelques différences de syntaxe ou de commande qui ont un nom diffèrent. Pour cela je vous conseille d'avoir sous la main les fichiers ti83asm.inc (ou squish.inc), ion.inc et ti83plus.inc. Ils vous permettront de retrouver la commande pour chaque calculatrice.
bcall marche uniquement pour app une routine système, pour app un label, call suffit.
call _grbufcpy_v sur ti83 -- call _grbufcpy pour ion.
_pushop1/op3 et _pushop1/op3 sont déjà définies dans ion.inc.
Une grande différence est pour la mémoire. La ti83+ est structuré diff de la 83.
Pour créer vos propre variable :
#define (cursav) $8265 sur 83 -- cursav = saferam1.
Avec Ion, vous pouvez utilisez trois zones de mémoires definies dans ion.inc :
- saferam1 768 octets (APD buffer, APD = automatic powerdown)
-saferam2 512 octets (Mémoire statistique)
-saferam3 128 octets (Textshadow)
Il existe 7 librairies qui sont incluses dans ion.
Pour appeler une librairie, call <librairie>
IonVersion : Retourne le numéro de la version de ion dans hl
(256 = version 1.0...) et dans e le nombre de librairies. Détruit
les registres a, de et hl
Cette librairie n'a d'utilité que si votre programme nécessite
absolument une version de ion particulière.
IonRandom : génère un nombre aléatoire compris
entre zéro et le nombre dans le registre b. Ce nombre est stocké
dans le registre a. Le registre b est mis à zéro.
Ionfastcopy : équivalent à la commande grbufcpy_v mais
plus rapide, détruit les registres af, bc , de, hl.
Ionputsprite : équivalent de la routine de Movax.
Entrée : b -- la hauteur du sprite en pixel <=8, a -- coord
x, l --coord y, ix -- sprite. Les registres af, bc, de, hl, ix sont détruits.
Sortie : Le sprite est dessiné (Xor) dans Plotsscreen (pour
afficher le sprite à l'écran, il faut effectué un
_grbufcpy ou Ionfastcopy).
Ionlargepsprite : Pour dessiner des sprites de n'importe quelles
dimensions.
Entrée : ix -- sprite, a -- coord x, l -- coord y, b -- hauteur
du sprite en pixel, c -- b/2
Sortie : Le sprite est dessiné (Xor) dans Plotsscreen (pour
afficher le sprite à l'écran, il faut effectué un
_grbufcpy ou Ionfastcopy). Les registres af, bc, de, hl, ix, af' sont détruit..
Iongetpixel : Cette commande permet d'agir au pixel près.
Entrée : a --- x coord, e -- y coord
Sortie : hl -- offset (adresse memoire en héxa ) du pixel dans
plotscreen, a mask du pixel, détruit af, bc, de, hl.
Iondetect : ??
Entrée : hl -- place mémoire ou chercher, ix -- chaîne
à détecter
Sortie : hl -- instruction du programme, le flag est mis à jour(Z
= échec, NZ = succès)
Iondecompress :??
Entrée : hl --données compressées, de -- place
ou il faudra charger les données décompressées, longueur
des données compressées, c --facteur de compression.
Un programme pour ti83+ ne peut normalement excéder 8196 octets (7000 si les librairies sont utilisées). Si vous voulez excéder cette limite, il faut désactiver les interruptions avec la commande di et les réactiver à la fin du programme avec la commande ei (Quelqu'un pourrait m'aider à ce sujet ??).
Rappeler vous que les programmes doivent marcher pour les deux calculatrices
(83 et 83+) donc tester votre programme.
Si il y a du code spécifique à une calculatrice, il faut
le déclarer entre les parties #ifdef Ti83p et #else.
Exemple :
#ifdef ti83p
; mettez ici votre code pour la ti83+
#else
; mettez ici votre code pour ti83
#endif
Il peut arriver que certaines routines aient besoin d'une modification pour marcher avec l'une ou l'autre des calculatrices.
5) Un programme avec ion sans passer par l'interface
Il est possible de réaliser des programmes avec ion sans que
le shell détecte ce programme. Pour lancer le programme sur une
Ti83+, asm(prgm_xxxx). Attention vous ne pourrez
pas utilisez les librairies.
Voici un "hello world" : Le programme est dans sa forme originale
tel que l'on me l'a envoyé.
;pour être compatible avec le shell ION, il suffit de rajouter
la ligne suivante :
;#DEFINE SHELL
;Uniquement valable pour TI83+
#DEFINE TI83P
#INCLUDE "ion.inc"
.org progstart-2
.db $BB,$6D ;identification d'un prog asm par la
TI83+
#IFDEF SHELL
ret
jr nc,debut
.db "Hello World !" ;titre du prog
#ENDIF
debut:
bcall(_clrlcdfull)
bcall(_indicatorOff)
ld HL,$0202
ld (currow),HL
ld HL,String
bcall(_puts)
loop:
bcall(_GetK)
cp $37 ;touche MODE (pas présent dans ion.inc)
jp nz,loop
bcall(_clrscrf) ;efface l'écran
bcall(_homeup) ;curseur en haut à gauche
ret
String:
.db "Hello World !",0
.end
Seul un fichier pour ti83+ sera généré. Si vous ne voulez plus avoir des erreurs, il faut modifier le fichier asm.bat comme ceci :
@echo off
echo ----- Assembling %1 for the TI-83 Plus...
echo #define TI83P >temp.z80
if exist %1.z80 type %1.z80 >>temp.z80
if exist %1.asm type %1.asm >>temp.z80
tasm -80 -i -b temp.z80 %1.bin
if errorlevel 1 goto ERRORS
devpac83 %1
if exist %1.8xp del %1.8xp
rename %1.83p %1.8xp
goto DONE
:ERRORS
echo ----- There were errors.
:DONE
del temp.z80 >nul
del temp.lst >nul
del %1.bin >nul
Je remercie la personne qui me l'a envoyé.
Les modules sont des programmes réagissant à certaines touches pressées.
.nolist
#include "ion.inc"
.list
#ifdef TI83P
.org sram-2
.db $BB,$6D
#else
.org sram
#endif
ret
.db 1
start:
; placez ici le code de votre module
ld a,1 ; retour normal
ret
Avant d'exécuter un module, Ion initialise certaines variables.
Dans le registre a, le code de la touche pressées ( a contient
255 au démarrage de ion et 55 à la fermeture)
Dans op1, le nom du programme.
Règles :
Vous devez seulement utilisez saferam2 si vous en avez besoin.
Si votre module modifie du code après $BFFF, il faut désactiver
les interruptions avec di.
A la fin du module, Ion attend une valeur de retour dans le registre
a. Si a contient 0, Ion redémarre.
Vous ne pouvez utilisez les librairies de ion dans votre module.
Votre module ne doit pas excéder 768 octets.