Forum tama's team
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Forum tama's team

cp: ne peut évaluer `brain': Aucun fichier ou dossier de ce type
 
AccueilPortailGalerieRechercherDernières imagesS'enregistrerConnexion
Connexion
Nom d'utilisateur:
Mot de passe:
Connexion automatique: 
:: Récupérer mon mot de passe
Derniers sujets
» Numbers
[ASM 83+/84+] VAT Icon_minitimepar Ver2guerre Dim 02 Avr 2023, 00:47

» Mort ?
[ASM 83+/84+] VAT Icon_minitimepar godbod Dim 22 Aoû 2021, 12:23

» Network, essai 1
[ASM 83+/84+] VAT Icon_minitimepar godbod Dim 09 Juil 2017, 02:18

» GODBOD
[ASM 83+/84+] VAT Icon_minitimepar godbod Sam 08 Juil 2017, 14:05

» mon humeur
[ASM 83+/84+] VAT Icon_minitimepar Ver2guerre Sam 30 Juil 2016, 19:44

» [A voir] Programme de traduction original : WikiTranslate
[ASM 83+/84+] VAT Icon_minitimepar AdRiWeB Lun 01 Fév 2016, 04:50

» Reprise ?
[ASM 83+/84+] VAT Icon_minitimepar Emyl Jeu 14 Juin 2012, 21:17

» Euh, ah ?
[ASM 83+/84+] VAT Icon_minitimepar Ver2guerre Dim 27 Mai 2012, 12:11

» Problème TI 89 Titanium non visible après mise à jour
[ASM 83+/84+] VAT Icon_minitimepar abdoukid Mer 23 Mai 2012, 13:37

» Y'a quelqu'un ?
[ASM 83+/84+] VAT Icon_minitimepar Ver2guerre Sam 21 Avr 2012, 23:10

Quick message
Qui est en ligne ?
Il y a en tout 12 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 12 Invités

Aucun

Le record du nombre d'utilisateurs en ligne est de 367 le Dim 18 Oct 2009, 00:16
-40%
Le deal à ne pas rater :
Tefal Ingenio Emotion – Batterie de cuisine 10 pièces (induction, ...
59.99 € 99.99 €
Voir le deal

Partagez | 
 

 [ASM 83+/84+] VAT

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
tama
Admin
Admin
tama

Nombre de messages : 12376
Age : 32
Localisation : DTC ? :triso:
Humeur : =)
items : o
Personalized field : huh ? oO
Réputation : 3
Points : 9427
Date d'inscription : 08/08/2007

Profil
TI: 84+, 89 tita, 89 tita
TO: infini :p
Spécialité: C 68k

[ASM 83+/84+] VAT Vide
MessageSujet: [ASM 83+/84+] VAT   [ASM 83+/84+] VAT Icon_minitimeSam 05 Juil 2008, 16:59

Ouép j'suis à fond dessus en ce moment, après la manipulation de la VAT sur 68k en C, voici quelques trucs utiles pour la VAT sur z80, en ASM
Mais avouez que c'est intéressant quand même de pouvoir :

  • Créer des "AppVars" pour stocker des données, impossibles à modifier par la voie "classique" comme un programme ou une liste
  • Créer n'importe quelle variable à condition de connaitre sa structure
  • Effacer tous les programmes d'une TI rien qu'avec quelques lignes Very Happy
  • etc...
Bon, si ça vous intéresse, on continue, sinon bah précédent/quitter (en haut à droite !)




J'ai la flemme de faire un tuto bien structuré comme il faut, alors j'vais faire un tuto un peu en vrac :p

La fonction qui nous intéresse est la fonction "ChkFindSym", cette fonction retourne beaucoup d'informations sur une variable qu'on lui a passé (de façon particulière), mais en contrepartie détruit tous les registres (pensez à les sauvegarder à l'aide de PUSH)

Cette fonction prend en entrée le registre OP1, qui contiendra le nom de la variable qu'on veut manipuler

Citation :

X : euh, mais
Code:

LD OP1,"MAVAR"
ça marche pas ?

Evidemment, il y a une façon particulière d'entrer le nom dans OP1
D'abord, il faut passer par le registre HL pour ensuite entrer le nom dans OP1 grâce à l'instruction Mov9ToOP1 qui revient à l'instruction RST 20h, plus légère (préférez toujours l'instruction RST au BCALL lorsque cela est possible)

Citation :

On va donc passer par HL, mais que stocker dans HL ?

Bonne question.
On va stocker les données dans un label, un peu comme lorsque vous mettez du texte à afficher avec PutS ensuite :
On commence donc par .DB

Et ensuite ?
Le deuxième octet du label indique le type de variable à laquelle on souhaite accéder, ce type peut s'étendre sur 2 octets dans le cas d'une chaine ou d'une liste par exemple.
Vient ensuite les octets pour le nom de la variable, puis il faut terminer tout ça par un 0

Si vous voulez créer une variable, il faut ensuite indiquer la taille de la variable dans HL avant de faire appel à la fonction adéquate (Createxxx)

Voici ce qu'il faut entrer pour les types de variables les plus courants :
Programme
HL = taille en octets
(CreateProg)
ProgObj,nom,0
Exemple : .db ProgObj,"TUTO",0 pour le programme nommé "TUTO"
Chaine de caractères
HL = taille en octets
(CreateString)
StrngObj,tVarStrng,tchaine,0
Exemple : .db StrngObj, tVarStrng, tStr2,0 pour la chaine Str2
AppVar
HL = taille en octets
(CreateAppVar)
AppVarObj,nom,0
Exemple : .db AppVarObj,"MirageOS",0 pour la variable de l'application du même nom
Image
(CreatePic)
PictObj, tVarPict, timage,0
Exemple : .db PictObj,tVarPict,tPic8,0 pour l'image 8
Programme protégé (contre l'édition)
HL = taille en octets
(CreateProtProg)
ProtProgObj,nom,0
Exemple : .db ProtProgObj,"PROT",0
Liste
HL = nombre d'éléments
(CreateRList)
ListObj,nom,0
Exemple : .db ListObj,"RAND",0 pour la liste RAND
Si vous créez une variable, l'appel à la fonction correspondante renverra généralement :

  • HL qui pointe sur la partie de la VAT correspondant à cette variable pour les informations (archivé ? caché ? type ...)
  • DE qui pointe sur le premier octet pour pouvoir ensuite écrire dedans
  • OP4 qui contient le nom entré dans OP1
/!\ En général, les registres AF, BC, OP1 et OP2 seront détruits /!\




Si c'est pour lire, vous pouvez, une fois ceci fait, faire appel à l'instruction ChkFindSym
Celle-ci renvoie un pointeur vers la VAT dans HL, vers les données dans DE, B permettra de savoir si la variable est archivé (flash : 1) ou dans la RAM (0), C la taille du nom de la variable
Attention pour DE : elle pointe sur la 1ère donnée, mais les 2 premiers octets d'une variable correspondent à sa taille ! Il faut donc penser à incrémenter 2 fois DE à l'aide de "INC DE"
Elle retourne le "flag" C (carry) si la variable n'a pas été trouvée


Voici ainsi un exemple pour chercher si un programme portant le nom entré en Str1 existe :
Code:

;headers etc...

LD HL,Str1_name
RST 20h                                ;=bcall(_Mov9ToOP1)
bcall(_ChkFindSym)
RET C                                    ;quitte si Str1 n'a pas été trouvé

INC DE                                  ;saute les 2 octets de taille
INC DE

LD HL,Program+1                    ;HL pointe sur le premier 0 de Program

Copy:                                    ;copie les données de Str1 dans
                                            ;program
LD HL,(DE)                              ;copie une donnée de "Str1" vers
                                            ;Program
INC DE
LD A,(DE)
CP 0                                      ;compare la donnée suivante à 0
JR NZ,COPY                              ;si elle est non nulle on revient à
                                                                ;Copy

;maintenant c'est gâteau : il ne reste plus qu'à vérifier à l'aide de ChkFindSym :

bcall(_ChkFindSym)
JR C,NO                                ;flag C : non, elle n'existe pas
                                          ;on saute au label "NO"

LD HL,yes_msg                      ;oui, elle existe : on l'affiche
bcall(_PutS)
RET                                      ;quitte

NO:                                    ;non, elle n'existe pas
LD HL,no_msg
bcall(_PutS)
RET                                    ;quitte

Str1_name :
.db StrngObj,tVarStrng,tStr1,0

Program:
.db ProgObj,0,0,0,0,0,0,0,0,0      ;on laisse suffisamment de 0
                                            ;pour le nom du programme (8
                                            ; car. max) + 0 de fin

yes_msg:
.db "Oui",0

no_msg:
.db "Non",0

(non testé, il peut y avoir des erreurs)
Revenir en haut Aller en bas
tama
Admin
Admin
tama

Nombre de messages : 12376
Age : 32
Localisation : DTC ? :triso:
Humeur : =)
items : o
Personalized field : huh ? oO
Réputation : 3
Points : 9427
Date d'inscription : 08/08/2007

Profil
TI: 84+, 89 tita, 89 tita
TO: infini :p
Spécialité: C 68k

[ASM 83+/84+] VAT Vide
MessageSujet: Re: [ASM 83+/84+] VAT   [ASM 83+/84+] VAT Icon_minitimeSam 05 Juil 2008, 17:10

La deuxième fonction qui nous intéresse maintenant est la fonction
FindAlphaUp (ou FindAlphaDown) qui est l'équivalent de la fonction
SymFindFirst() et SymFindNext() (ou SymFindPrev()) en C pour 68k
Elle sert, une fois le type de variable à trouver communiqué à la variable, à trouver la variable suivante de ce type
Le type de variable doit également être communiqué dans OP1, avec
éventuellement "la suite" dans le cas d'une liste par exemple :

Le code suivant permet d'effacer tous les programmes présents dans la calculatrice :
Code:

;headers et tout le bazar

bcall(_ZeroOP1)                ;initialise la recherche : met OP1 à zéro
LD A,ProgObj                    ;on cherche des programmes
LD (OP1),A
FindPrgm:                        ;boucle pour la recherche
bcall(_FindAlphaUp)          ;cherche le programme suivant
bcall(_DelVarArc)              ;efface la variable
RET C                            ;oops, plus de programmes trouvés, on quitte
JR FindPrgm

Je ne sais pas si cela efface toutes les variables ou seulement celles
dont le nom est avant celui du programme (par ordre alphabétique), j'ai
pas envie de tester en tout cas Very Happy




Bon, j'crois que c'est à peu près tout pour le moment, on verra si j'ai d'autres infos par la suite ^^

N'hésitez pas à laisser des commentaires, remarques, ou à poster si vous ne comprenez pas quelque chose ^^

tama
05/07/08
Revenir en haut Aller en bas
Ver2guerre
chasseur en chef
chasseur en chef
Ver2guerre

Nombre de messages : 3145
Age : 113
Localisation : Partout en même temps (V2g quantique)
Loisirs : #pkill boulet
Humeur : Happy :)
items : [ASM 83+/84+] VAT V2gqe7
Personalized field : 12 jetons
Réputation : 8
Points : 7516
Date d'inscription : 15/09/2007

Profil
TI: (TI-89Tita)^2+TI83Plus
TO: 50 [2380 - 2%] {54}
Spécialité: Autres

[ASM 83+/84+] VAT Vide
MessageSujet: Re: [ASM 83+/84+] VAT   [ASM 83+/84+] VAT Icon_minitimeSam 05 Juil 2008, 17:16

Ah là là !! Si je maîtrisais les z80, je comprendrai ce tuto. Et dans ce cas, j'aurais honte pour toi, et je te refairais ton tuto, en "bien organisé et tout et tout"... Mais je ne maîtrise pas les z80.
Revenir en haut Aller en bas
tama
Admin
Admin
tama

Nombre de messages : 12376
Age : 32
Localisation : DTC ? :triso:
Humeur : =)
items : o
Personalized field : huh ? oO
Réputation : 3
Points : 9427
Date d'inscription : 08/08/2007

Profil
TI: 84+, 89 tita, 89 tita
TO: infini :p
Spécialité: C 68k

[ASM 83+/84+] VAT Vide
MessageSujet: Re: [ASM 83+/84+] VAT   [ASM 83+/84+] VAT Icon_minitimeSam 05 Juil 2008, 17:17

lol ^^
Sipho il devrait être capable de corriger les (nombreuses) erreurs Very Happy
Revenir en haut Aller en bas
Contenu sponsorisé




[ASM 83+/84+] VAT Vide
MessageSujet: Re: [ASM 83+/84+] VAT   [ASM 83+/84+] VAT Icon_minitime

Revenir en haut Aller en bas
 

[ASM 83+/84+] VAT

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum tama's team :: TI :: TI z80 :: Tutoriels-
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit