[Asm] ouverture d’un fichier + sauvegarde données

Forum Amiga Coding [Asm] ouverture d’un fichier + sauvegarde données

  • Ce sujet contient 7 réponses, 4 participants et a été mis à jour pour la dernière fois par stc, le il y a 4 semaines.
  • Créateur
    Sujet
  • #126852
    stc
    • Level 2
    • Messages : 35

    Bonjour j’ai fait une petite routine de decrunchage d’image iff que je transforme en mon propre format pour réutilisation, ça marche maintenant il faut que je sauvegarde, avec le peu que j’ai trouvé sur internet j’ai sortie une routine mais j’ai un guru meditation à l’appel de open (le premier jsr) voici ma routine :
    save_data:
    move.l 4,a6
    move.l #1006,d2 ;mode new
    move.l #filename,d1
    jsr -30(a6) ;open (file)
    move.l d0,file_handle
    ;
    move.l 4,a6
    move.l file_handle,d1
    move.l result,d2
    move.l result_size,d3
    jsr -48(a6) ;write data
    ;
    move.l 4,a6
    move.l file_handle,d1
    jsr -36(a6) ;close (file)
    rts
    […]

    filename: dc.b « new.iff »,0
    even
    Si vous avez des idées.. Merci !

    HeMoroiDs

7 réponses de 1 à 7 (sur un total de 7)

Partager sur vos réseaux sociaux préférés :
Facebooktwitterredditpinterestlinkedintumblrmail

  • Auteur
    Réponses
  • #126853
    astrofra
    • Level 4
    • Messages : 108

    J’imagine que le Load s’est bien déroulé ? :) et que la DOS library est toujours ouverte ?

    ce qui peut bloquer un accès fichier c’est le fait d’avoir figé le système (disable/forbid), bloqué le DMA ou éventuellement d’avoir réservé exclusivement le blitter qui est utilisé pour les I/O disque je crois.

    mais si ça plante au jump, ça doit être plus fondamental… tu es certain de tes offsets ?

    www.astrofra.com | fra.planet-d.net



    #126858
    Bill
    • Level 1
    • Messages : 16

    dans ce qui est écrit, c’est l’execlib qui est en a6 (move.l 4,a6) au lieu de la dos.library…..

    il faudrait :

    move.l dosbase(pc),a6

    si doslib déjà ouverte

    ou un openlib dos:

    move.l 4,a6
    lea doslib,a1
    jsr openlib(a6)
    move.l d0,a6 ; dosbase

    doslib: dc.b « dos.library »

    #126902
    slack
    • Level 5
    • Messages : 236

    Pour compléter les propos de Bill, il y a plusieurs bibliothèques sous amigaos. On obtient l’adresse de l’exec.library par :

    move.l    4.w, a6

    Ensuite, il faut ouvrir les autres bibliothèques avant de pouvoir utiliser leurs fonctions.

    Tu peux consulter :

    http://obligement.free.fr/articles/assembleur_amigados_fichiers_repertoires.php

    @bill : la fonction openlib n’a pas besoin de numéro de version minimum de la bibliothèque ? Je n’ai pas le temps de regarder la documentation de cette fonction exec.

    #126909
    Bill
    • Level 1
    • Messages : 16

    oui la fonction openlib a besoin d’un numero de version dans d0
    move.l 4.w,a6
    lea dosname(pc),a1
    moveq #0,d0 ; par defaut
    jsr -552(a6)

    possible d’utiliser oldopenlib -408 issue du KS 1.0, et pas besoin de d0

     

    #126918
    stc
    • Level 2
    • Messages : 35

    Merci pour vos réponse il fallait en effet utiliser dosbase en A6 pour toutes les opérations sur les fichier et ça marche voici le code final (une balise code serait la bienvenue)

    move.l 4,a6
    lea dos_name,a1
    moveq #0,d0
    jsr -552(a6)
    move.l d0,dosbase ; dosbase
    move.l dosbase,a6
    move.l #1006,d2 ;mode new
    move.l #filename,d1
    jsr -30(a6) ;open (file)
    move.l d0,file_handle
    ;
    move.l dosbase,a6
    move.l file_handle,d1
    move.l result,d2
    move.l result_size,d3
    jsr -48(a6) ;write data
    ;
    move.l dosbase,a6
    move.l file_handle,d1
    jsr -36(a6) ;close (file)
    move.l dosbase,a1
    move.l 4,a6
    jsr -414(a6) ;closeLib

     

    Merci !

    HeMoroiDs

    #126919
    slack
    • Level 5
    • Messages : 236

    Après le
    move.l d0,dosbase ; dosbase
    il serait bien de tester la valeur de d0. Si l’ouverture de la dos.library a échoué, d0 contient la valeur zéro et dans ce cas, il ne faut pas appeler les fonctions de la bibliothèque mais sauter à l’instruction qui suit la ligne
    jsr -414(a6) ;closeLib

    Sinon, guru assuré.

    #126920
    stc
    • Level 2
    • Messages : 35

    Après le move.l d0,dosbase ; dosbase il serait bien de tester la valeur de d0. Si l’ouverture de la dos.library a échoué, d0 contient la valeur zéro et dans ce cas, il ne faut pas appeler les fonctions de la bibliothèque mais sauter à l’instruction qui suit la ligne jsr -414(a6) ;closeLib Sinon, guru assuré.

    oui c’est pas faux mais bon la c une routine perso que moi seul vais utiliser c pas bien grave

    HeMoroiDs

Partager sur vos réseaux sociaux préférés :
Facebooktwitterredditpinterestlinkedintumblrmail
7 réponses de 1 à 7 (sur un total de 7)
  • Vous devez être connecté pour répondre à ce sujet.