Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation Assembleur 68K » VAT en assembleur (14 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
Onur Ecrit le: Samedi 20 novembre 2004 à 02:23 Déconnecté(e)    Voir le profil de Onur Envoyer un email à Onur Visiter le site WEB de Onur Envoyer un message privé à Onur  


voila.. dans mon programme y a des données qui prennent bcp trop de place: c'est un map, un gros-bitmap si vous voulez.. bref, je veux l'envoyer a la ti sous forme de fichier (séparé du programme lui-meme), je voudrais savoir deux choses:



1) Le contenu en binaire du fichier doit etre comment? (coté PC)
---------------------------------------------------------------
Je sais qu'il faut commencer pas "**TI89**" ou "**TI92P*" .. et finir par "ppg" par exemple si je veux qu'il apparaisse sous le nom de ppg sur la caltoche. mais je voudrais des renseignement précis sur le format. (C'est un programme sur le pc qui va le générer)




2) Comment je retrouve l'adresse de ce fichier dans le programme? (coté prog caltoche)
-------------------------------------------------------------------------------
Je sais qu'il y a la bibliotheque VAT qui permet de manipuler tout ca pour le C. Mais je m'en suis jamais servi et c'est surtout que je voudrais avoir un code en assembleur 68k, qui me permet d'avoir un pointeur vers les données de mon fichier.



Voila, je pense que c'est quelque chose de classic, les fonctions de vat.h s'utilisent tres souvent j'ai vu dans les programmes en C, en gros je voudrais l'équivalent en asm.
Comme à chaque fois, je voudrais si possible des réponses très completes avec du code (correct si possible aussi)

Je ne veux pas faire quelque chose de bien, je cherche l'excellence:ETP Studio...


et autres projets à finir avant 2010
    
./Post n°1   Marquer comme non lu.
Sasume Ecrit le: Samedi 20 novembre 2004 à 10:11 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Bah la plupart des fonctions de vat.h (si c n'est toutes) son des ROM_CALLs, donc pas de pb en ASM.
Regarde du côté de SymFindPtr.
    
./Post n°2   Marquer comme non lu.
geogeo Ecrit le: Samedi 20 novembre 2004 à 13:17 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


1) Normalement tu trouveras des infos dans le zip de 68kguide. Ou encore dans le pack de Preos.

2) Pour trouver l'adresse d'un fichier tu peux utiliser les ROM_CALLs de Vat.h en ASM. Du côté des sources de GFA-TEM ça donne:
|=========================================================================
|FILE_GenerateTIOSName
|-------------------------------------------------------------------------
|Créer un nom de fichier au format du TIOS
|-------------------------------------------------------------------------
|input:
|  dc.l   a0 = File name.
|  dc.l   a2 = Empty buffer.
|output:
|  dc.l   a2 = Buffer with the TIOS name format.
|
|destroy: d0
|=========================================================================
FILE_GenerateTIOSName:
    clr.b     (%a2)+        |buffer [0] = 0
    pea.l     (%a0)          |Source = File Name
    pea.l     (%a2)          |Destination = Buffer+1  
    ROM_CALL  strcpy        |strcpy (dest, src)
    addq.l    #4,%SP    
    ROM_CALL  strlen        |strlen (File Name)
    addq.l    #4,%SP
    adda.l    %d0,%a2        |buffer += strlen (File Name)
    rts
    
    
|=========================================================================
|FILE_GetSymByName
|-------------------------------------------------------------------------
|Renvoie un SYM ENTRY à partir d'un nom de fichier
|-------------------------------------------------------------------------
|input:
|  dc.l   a0 = File name.
|output:
|  dc.l   a0 = Pointer to structure SYM ENTRY.
|
|destroy: d0, d1, a2
|=========================================================================
_GetSymByName_hsym_TIOSName:
    movea.l   %a0,%a2
    jbra    _GetSymByName_GetHSym

FILE_GetSymByName:
    link    %a6,#-18-2        |Buffer de 18 octets
    tst.b     (%a0)          |Nom du fichier déjà au format TIOS
    jbeq      _GetSymByName_hsym_TIOSName
    lea.l     -18(%a6),%a2        |Préparation buffer
    jbsr      FILE_GenerateTIOSName      |Génére un nom de fichier au format du TIOS
_GetSymByName_GetHSym:    
    pea.l    (%a2)
    ROM_CALL  SymFind
    addq.l    #4,%SP
    movea.l    #0,%a0
    move.l    %d0,%d1
    swap    %d0          |Récupère HANDLE Folder
    tst.w    %d0          |Si HSym.Folder==H_NULL
    jbeq    _GetSymByName_HFolder_NULL
    move.l    %d1,-(%SP)
    ROM_CALL  DerefSym
    addq.l    #4,%SP
_GetSymByName_HFolder_NULL:    
    unlk      %a6
    rts


Après il suffit d'utiliser la fonction FILE_GetSymByName comme cela:

|Pointeur SymEntry
    lea.l     TokensFile_Name(%PC),%a0
    jbsr      FILE_GetSymByName
    move.l    %a0,TokensFile_SymEntry
    tst.l     TokensFile_SymEntry
    jbeq      _ERROR_file_no_found

    |Lock handle
    move.w    12(%a0),-(%SP)
    ROM_CALL  HeapLock
    move.w    %d0,TokensFile_Handle
    
    |Récupère pointeur et taille du fichier
    move.w    %d0,-(%SP)
    ROM_CALL  HeapDeref
    addq.l    #4,%SP
                                ...


FILE_GetSymByName te renvoie la structure SYM_ENTRY du fichier ou NULL en cas d'erreur!
Ensuite à partir de là pour récupèrer un pointeur tu dois utiliser HeapDeref sur le handle de la structure SYM_ENTRY. Regarde dans la doc de Ti-GCC.

A noter qu'il ne faut pas oublier de locker le handle pour éviter que le fichier bouge dans la mémoire seulement si tu ne veux pas effectuer HeapDeref à chaque fois que tu veux lire donnée, bref si tu utilises toujours un pointeur et non un handle! Et faut pas oublier de délocker l'handle à la fin!
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°3   Marquer comme non lu.
Onur Ecrit le: Samedi 20 novembre 2004 à 13:56 Déconnecté(e)    Voir le profil de Onur Envoyer un email à Onur Visiter le site WEB de Onur Envoyer un message privé à Onur  


ok cool, je vais voir ca.

et en ce qui concerne le format du fichier lui meme?? (rappel: il sera généré par un pc donc pas besoin de code)

ps: waaww!! meme pour appeler les fichier tu utilises l'asm pour ton gfa?? #chapeau#
Je ne veux pas faire quelque chose de bien, je cherche l'excellence:ETP Studio...


et autres projets à finir avant 2010
    
./Post n°4   Marquer comme non lu.
geogeo Ecrit le: Samedi 20 novembre 2004 à 14:21 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


et en ce qui concerne le format du fichier lui meme?? (rappel: il sera généré par un pc donc pas besoin de code)


Sur PC je ne sais pas mais faire un format perso ça ne doit psa être difficile!

ps: waaww!! meme pour appeler les fichier tu utilises l'asm pour ton gfa?? #chapeau#


Oui :)
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°5   Marquer comme non lu.
Invité Ecrit le: Jeudi 23 décembre 2004 à 18:01 Déconnecté(e)    
 
Héhé, j'allais créer un topic pour demander exactement la même chose que Nounours... Ba jpense que c'est bon là, merci les gars ! (le prob c'était aussi du côté de la calto, le format de fichiers PC étant décrit dans les txt qui trainent partout).

EDIT : y'aurait moyen d'avoir quelques détails sur le code svp ?? Parce que là j'ai vraiment du mal à le comprendre... merci d'avance
-Edité le Jeudi 23 décembre 2004 à 18:07 par =TnT=-
    
./Post n°6   Marquer comme non lu.
geogeo Ecrit le: Jeudi 23 décembre 2004 à 23:00 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


le code est assez simple pourtant.

Kevin_Kofler risque de raler car les sources que j'ai diffusées sont sales. :D

Voici les fonctions améliorées.

|=========================================================================
|FILE_GenerateTIOSName
|-------------------------------------------------------------------------
|Créer un nom de fichier au format du TIOS
|-------------------------------------------------------------------------
|input:
|  dc.l   a0 = File name.
|  dc.l   a2 = Empty buffer.
|output:
|  dc.l   a2 = Buffer with the TIOS name format.
|
|destroy: d0
|=========================================================================
FILE_GenerateTIOSName:
    clr.b     (%a2)+        |buffer [0] = 0
    pea.l     (%a0)          |Source = File Name
    pea.l     (%a2)          |Destination = Buffer+1  
    ROM_CALL  strcpy        |strcpy (dest, src)    
    pea.l     (%a2)
    ROM_CALL  strlen        |strlen (File Name)
    lea.l     12(%SP),%SP
    add.l     %d0,%a2        |buffer += strlen (File Name)
    rts
    
    
|=========================================================================
|FILE_GetSymByName
|-------------------------------------------------------------------------
|Renvoie un SYM ENTRY à partir d'un nom de fichier
|-------------------------------------------------------------------------
|input:
|  dc.l   a0 = File name.
|output:
|  dc.l   a0 = Pointer to structure SYM ENTRY.
|
|destroy: d0, d1, a2
|=========================================================================
_GetSymByName_hsym_TIOSName:
    movea.l   %a0,%a2
    jbra    _GetSymByName_GetHSym

FILE_GetSymByName:
    link    %a6,#-18-2        |Buffer de 18 octets
    tst.b     (%a0)          |Nom du fichier déjà au format TIOS
    jbeq      _GetSymByName_hsym_TIOSName
    lea.l     -18(%a6),%a2        |Préparation buffer
    jbsr      FILE_GenerateTIOSName      |Génére un nom de fichier au format du TIOS
_GetSymByName_GetHSym:    
    pea.l    (%a2)
    ROM_CALL  SymFind
    addq.l    #4,%SP
    movea.l    #0,%a0
    move.l    %d0,%d1
    swap    %d0          |Récupère HANDLE Folder
    |tst.w    %d0          |Si HSym.Folder==H_NULL
    jbeq    _GetSymByName_HFolder_NULL
    move.l    %d1,-(%SP)
    ROM_CALL  DerefSym
    addq.l    #4,%SP
_GetSymByName_HFolder_NULL:    
    unlk      %a6
    rts
    
    
|=========================================================================
|FILE_Find
|-------------------------------------------------------------------------
|Recherche un fichier dans tous les dossiers et renvoie son chemin complet
|-------------------------------------------------------------------------
|input:
|  dc.l   a0 = File name.
|output:
|  dc.l   a0 = Pointer of the file path.
|
|destroy: d0, d3, d4, a2
|=========================================================================
_FileFind_file_nofound:
    ROM_CALL  SymFindNext
    jbra    _FileFind_loop

_FileFind_seek_echec:
    movea.l   #0,%a0
    jbra    _FileFind_exit

FILE_Find:
    move.l    %a0,%d4        |Sauvegarde File Name
    move.w    #FO_RECURSE,-(%SP)      |SymFindFirst (NULL, FO_RECURSE)  
    clr.l     -(%SP)
    ROM_CALL  SymFindFirst
    addq.l    #6,%SP
_FileFind_loop:
    move.l    %a0,%d3        |Sauvegarde entry
    |tst.l     %d3          |While (entry)
    jbeq    _FileFind_seek_echec      |Fin du while
    move.l    %d3,-(%SP)        |strcmp (File Name, entry->name)
    move.l    %d4,-(%SP)
    ROM_CALL  strcmp
    addq.l    #8,%SP
    tst.w     %d0          |Fichier non trouvé
    jbne    _FileFind_file_nofound
    
    |Fichier trouvé
    ROM_CALL  SymFindFolderName
    pea.l     (%a0)          |strlen (folder)
    ROM_CALL  strlen
    move.l    %d0,%d3
    move.l    #17,-(%SP)        |memset (buffer, 0x00, 17)
    clr.w     -(%SP)
    lea.l     Buffer_FindFile(%PC),%a2
    pea.l     (%a2)
    ROM_CALL  memset
    lea.l     10(%SP),%SP        |memcpy (buffer, folder, len_folder)
    move.l    %d3,-(%SP)
    move.l    4(%SP),-(%SP)
    pea.l     (%a2)
    ROM_CALL  memcpy
    lea.l     16(%SP),%SP
    adda.l    %d3,%a2
    move.b    #'\\',(%a2)        |huffer [len] = '\'
    move.l    %d4,-(%SP)        |strcat (buffer, entry->name)
    pea.l     1(%a2)
    ROM_CALL  strcat
    addq.l    #8,%SP
    lea.l     Buffer_FindFile(%PC),%a0
    
_FileFind_exit:    
    rts


Après il suffit d'utiliser la fonction FILE_GetSymByName comme cela:


|Pointeur SymEntry
    lea.l     TokensFile_Name(%PC),%a0
    jbsr      FILE_GetSymByName
    lea.l     TokensFile_SymEntry(%PC),%a1
    move.l    %a0,(%a1)
    |tst.l     TokensFile_SymEntry
    jbeq      _ERROR_file_no_found

    |Lock handle
    move.w    12(%a0),-(%SP)
    ROM_CALL  HeapLock
    lea.l     TokensFile_Handle(%PC),%a0
    move.w    %d0,(%a0)
    
    |Récupère pointeur et taille du fichier
    move.w    %d0,-(%SP)
    ROM_CALL  HeapDeref
    addq.l    #4,%SP
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°7   Marquer comme non lu.
Folco Ecrit le: Vendredi 24 décembre 2004 à 12:08 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


    move.l    %a0,%d3        |Sauvegarde entry
    |tst.l     %d3          |While (entry)
    jbeq    _FileFind_seek_echec      |Fin du while 

ne s'optimise pas en:
    move.l    %a0,%d3        |Sauvegarde entry
    jbeq    _FileFind_seek_echec      |Fin du while 

?
(entre autres)

edit-> craquage dans les balises %)
-Edité le Vendredi 24 décembre 2004 à 12:09 par Martial Demolins-
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°8   Marquer comme non lu.
Lionel Debroux Ecrit le: Samedi 25 décembre 2004 à 10:10 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

Si, c'est bien pour ça qu'il a commenté la ligne tst.l d3.
Lionel Debroux - membre de TICT.
    
./Post n°9   Marquer comme non lu.
Folco Ecrit le: Dimanche 26 décembre 2004 à 10:58 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


mdr, c'est quoi cette syntaxe où '|' est un commentaire =) Je ne code que pour a68k, désolé =)
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°10   Marquer comme non lu.
Lionel Debroux Ecrit le: Dimanche 26 décembre 2004 à 16:52 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

Ben, c'était pourtant facile à deviner: par quoi les commentaires de fin de ligne sont-ils précédés ?
Lionel Debroux - membre de TICT.
    
./Post n°11   Marquer comme non lu.
Kevin Kofler Ecrit le: Mercredi 29 décembre 2004 à 01:20 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Martial Demolins :
mdr, c'est quoi cette syntaxe où '|' est un commentaire =)

Assembleur GNU.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°12   Marquer comme non lu.
Invité Ecrit le: Mercredi 29 décembre 2004 à 15:34 Déconnecté(e)    
 
Assembleur GNU.


Ouais, vive les normes officielles...
    
./Post n°13   Marquer comme non lu.
Folco Ecrit le: Mercredi 29 décembre 2004 à 18:11 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


#boulay#
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°14   Marquer comme non lu.
Lionel Debroux Ecrit le: Jeudi 30 décembre 2004 à 09:53 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

Assez d'accord #13. gas, dans ses différents backends et frontends, supporte souvent les autres syntaxes, qui ne sont en général pas uniques (c'est flagrant pour les 68k) et de toute façon pas normalisées (au sens strict de norme).

L'assembleur GNU pour ARM attend des @ pour les commentaires.
Lionel Debroux - membre de TICT.
    
  :: Index » Forum Ti68K » Programmation Assembleur 68K » VAT en assembleur (14 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 39.51ms avec 20 requetes