[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 3 années et 9 mois.
  • Créateur
    Sujet
  • #126852
    STC
      • Level 2
      • Messages : 44

      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 !

      STC/HeMoroiDs - https://www.hemoroids.ovh

    Affichage de 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 : 126

        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 : 22

          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 7
            • Messages : 465

            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 : 22

              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 : 44

                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 !

                STC/HeMoroiDs - https://www.hemoroids.ovh

                #126919
                slack
                  • Level 7
                  • Messages : 465

                  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 : 44

                    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

                    STC/HeMoroiDs - https://www.hemoroids.ovh

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