Attention les enfants leçon très importante. Nous allons voir des commandes absolument nécessaire pour tout prgm qui se respecte.
saisie d'une touche :
_getkey : attend qu'une touche soit pressée et renvoie le code
correspondant ds le registre a. Regardez à la fin de cette leçon
pour les codes correspondants.
_getky : équivalent de la commande getkey en basic. Retourne
le code de la touche dans Op2 (voir leçon suivante). Voyez votre
manuel de ti pour les codes des touches.
La commande _getkey autorise à changer les contrastes, éteindre
la calculatrice, se mettre en mode 2nd ou Alpha
la commande _getky est très utile pour un jeu par exemple mais
à l'inconvénient de reduire la durée de vie des batteries.
comparaison :
cp : cp permet d'effectuer une comparaison.
exemple :
cp 121 : compare 121 et a.
cp b : compare a et b
call _cphlde : compare hl et de
Le problème qui se pose maintenant est de savoir comment utiliser cette comparaison. En fait lorsque la comparaison s'effectue, le nbre ou le registre qui suit est soustrait de a. Donc si le résultat est 0, les deux nbres sont égaux et inversement. Mais cp indique aussi si le résultat est positif, négatif, paire, impaire. Ces résultat sont stockés dans le registre f, on dit aussi que le "flag" est mis à jour
C'est à ce moment qu'interviennent les sauts conditionnels. Ce sont des commandes qui suivant la condition qui les suit vont sauter jusqu'à une portion de code et l'exécuter. Il s'agit de jr et jp
Un petit programme exemple :
....début standard..........
call _clrlcdfull
call _homeup
ld a,4
ld b,2
cp b ;soustrait b de a
jp p,positive ;si le résultat est positif
on saute jusqu'au label positif
jp m,minus ; la même chose mais pour le résultat
négatif
positive:
ld hl,$0404
ld (currow),hl
ld hl,message1
call _puts
ret
minus:
ld hl,$0404
ld (currow),hl
ld hl,message2
call _puts
ret
message1:
.db "positif",0
message2:
.db "negatif",0
.end
END
Dans ce programme, la ti affichera positif (4-2=2), amusez-vous à changer les valeurs de a et b et de changer les conditions (par exemple pour zero : z et diff de zero : nz)
jr et jp ne sont pas les seules commandes conditionels. Voyez ce petit tableau
jp C NC
Z NZ PE PO
M P
jr C NC
Z NZ
call C NC
Z NZ PE PO
M P
ret C NC
Z NZ PE PO
M P
z : zéro, nz : non zéro, pe : impaire, po : paire, m : négatif, p : positif
Je devine votre question : et pour Le C et NC? Là, c'est un peu plus compliqué.
Lors des opérations mathématiques, il arrive que le résultat de l'opération soit codé sur un nombre supérieur de bits. le bit en trop est placé dans C. C'est tout ce que je pourrais vous dire, si quelqu'un pouvais m'aider sur ce sujet.
Attention, il y a une différence entre jp et jr. Lorsque le programme est compilé, tasm indique de combien d'octets, il faut avancer ou reculer pour atteindre le label. Jr ne peut effectuer des sauts sup à 128 octets, jp n'a pas de limite. Par contre en utilisant jr, le programme sera plus rapidement compilé et prendra moins de place.
Call permet aussi d'appeler un label sans faire de saut.
..début standard.......
call lbl ; appelle le label lbl1
call _clrlcdfull
call _homeup
ret
lbl1:
ld hl,$0202
ld (currow),hl
ld hl,str1
call _puts
ret
str1:
.db "ASMTI8X",0
.end
END
le ret à la fin du label lbl1 indique à la ti qu'il faut revenir du label et continuer les instructions qui suivent. Attention si vous effectuer un saut (jp,jr) jusqu'à ce label le programme se terminera car il y a un ret.
Codes des touches : extrait de la doc de texas
----------
1er fonction
-------------
kDown 04h | kClear
09h | kLParen 85h| kLN
BFh
kLeft 02h | kCos
B9h | kLOG C1h
kRight 01h | kChs
8Ch | kPrgm 20h |
kSQUARE BDh
kUp 03h | k3
91h | kStat 31h |
kINV B6h
k6 94h | k0 8Eh
| kMATH 32h
k9 97h | k1 8Fh
kRParen 86h | k4 92h
| kGRAPH 44h
kTan BBh | k7
95h | kTRACE 5Ah
kEnter 05h | kVARS
35h | kCOMMA 8Bh
| kZOOM 2Eh
kAdd 80h | kSin
B7h | kWINDOW 48h
kSub 81h | kDecPnt
8Dh | kMATRIX 37h
| kYEQU 49h
kMul 82h | k2
90h | kVarx B4h|
kDiv 83h | k5
93h | kMODE 45h
kExpon 84h | k8
96h | kStore 8Ah
| kDEL 0Ah
2nd
-------------
kDown 04h | KCLEAR
09h | kLBRACE ECh
| kEXP C0h
kBOL 0Eh | kACos
BAh | kALOG C2h
kEOL 0Fh | kANS
C5h | kDRAW 2Fh |
kSQRT BEh
kUp 03h | kL3A
F5h | kLIST 3Ah |
kFIN 3Ch
kL6A F8h | kCATALOG
3Eh | kTEST 33h
kWNA FBh | kL1A
F3h|
kRBracE EDh | kL4A
F6h | kTABLE 4Ah
kATan BCh | kUNA
F9h | kCALC 3Bh
kLastEnt 0Dh | kDIST
38h | kEE 98h | kFORMAT
57h
kMem 36h | kASin
B8h | kTBLSET 4Bh
kRBRACK 88h | ki
EEh | kANGLE 39h
| kSPLOT 30h
kLBRACK 87h | kL2A
F4h | kLinkIO 41h|
KCONSTeA EFh | kL5A
F7h | kQuit 40h
kPi B5h | kVNA
FAh | kRecall 0Ch
| kINS 0Bh
alpha :
----------------
kALPHADOWN 08h | kClear
09h | kCapL A5h |
kCapV AFh
kLeft 02h | kCapM
A6h | kCapW B0h
kRight 01h | kQUEST
CAh | kcapN A7h |
kCapX B1h
kALPHAUP 07h | kTHETA
CCh | kSTAT 31h |
kCapY B2h
kCapE 9Eh | kSPACE
99h | kCapZ B3h
kCapF 9Fh | kCapO
A8h|
kCapG A0h | kCapP
A9h | kGRAPH 44h
kCapH A1h | kCapQ
AAh | kTRACE 5Ah
kALPHAENTER 06h | kVARS
35h | kCapR ABh |
kZOOM 2Eh
kQUOTE CBh | kCapS
ACh | kWINDOW 48h
kCapA 9Ah | kcolon
C6h | kCapT ADh |
kYEQU 49h
kCapB 9Bh | kCapI
A2h | kVarx B4h
kCapC 9Ch | kCapJ
A3h | kMODE 45h
kCapD 9Dh | kCapK
A4h | kCapU AEh |
kDEL 0Ah
----------------------------------------------------------------------------------------------