Tag: DRECALL

  • Sauvegardez vos tableaux (alphanumériques) en toute sérénité (DSTORE / DRECALL version 2)

    Dans un précédent article (voir CEO-Mag n°357), j’expliquais clairement que les commandes DSTORE / DRECALL souffraient de certaines limites dans leur version initiale :

    • Impossibilité de sauver des tableaux à plusieurs dimensions ;
    • Risque d’écrasement de la routine en cas de redéfinition du jeu de caractères alternés ;
    • Utilisation du mode TEXT uniquement.

    Avec cette nouvelle version, ces imperfections appartiennent désormais au passé :

    • La routine loge entre $9400 et $977B, ce qui permet d’utiliser le mode HIRES et de redéfinir les caractères alternés mais nécessite un HIMEM#93FF avant toute utilisation ;
    • Grâce à l’appel de la commande SAVEM de SEDORIC, les tableaux alphanumériques de grandes tailles (et de plusieurs dimensions) peuvent être stockés sur la disquette.

    La syntaxe n’a quant à elle pas évoluée :

    • DSTORE TAB, “Nom Fichier” : sauve un tableau alpha/numérique avec le nom “Nom Fichier” sur disquette
    • DRECALL TAB, “Nom Fichier” : récupère un tableau alpha/numérique portant le nom “Nom Fichier” depuis la disquette

    Le branchement sur la routine se fait désormais grâce à DOKE#4EA,#9400.

    COMMENT ÇA MARCHE ?

    La sauvegarde des caractères qui composent un tableau alphanumérique a toujours lieu en RAM Overlay, de $C400 à $C7FF :

    • $C400-$C401 : nombre d’éléments stockés.
    • $C402-$C7FF : caractères du tableau alphanumérique. Les caractères sont précédés d’un nombre qui indique la taille de la variable alphanumérique en cours de stockage.

    Lorsque l’adresse de stockage en RAM Overlay dépasse $C7FF, une première sauvegarde a lieu sur la disquette. Le stockage des éléments restants reprend alors en RAM Overlay à partir de $C400, et un nouveau fichier sera ajouté au précédent grâce à la commande SAVEM.

    Lors de la récupération des données depuis la disquette, le premier fichier est transféré en RAM Overlay de $C400 à $C7FF.

    Chaque élément du tableau alphanumérique est créé en RAM grâce à la routine $D264/RAM Overlay ($D5AB/ROM) qui réserve une chaîne dont la longueur est dans le registre A (adresse chaîne réservée en $D1-$D2, longueur en $D0).

    Les caractères sont ensuite copiés un par un, depuis la RAM Overlay vers la RAM jusqu’à obtenir la longueur finale de la chaîne en cours.

    Lorsque toutes les chaînes du fichier en cours ont été transférées en RAM, on vérifie s’il existe un fichier “mergé” et on poursuit de la même manière si tel est le cas.

    Au passage, quelques routines en ROM / RAM Overlay :

    • $EA9E (ROM) : Ajuster adresse tableau alphanumérique dans $0209-$02AA ($0C-$0D) et $02AB-$02AC.
    • $D264 ($D5AB/ROM) : Réserver chaîne de longueur A (adresse chaîne réservée en $D1-$D2, longueur en $D0).
    • $E12E (RAM Overlay) : Charger fichier mergé selon valeurs en $C102,x et $C103,x (avec valeur x fixée par le registre X).

    UN BEAU DESSIN VAUT MIEUX QU’UN LONG DISCOURS

    Ci-après, les ordinogrammes des commandes DSTORE et DRECALL afin d’y voir plus clair.

    UN P’TIT COUP DE DÉBOGUEUR POUR LA ROUTE ?

    Les copies d’écran du débogueur ci-dessous montrent le descripteur du tableau alphanumérique M$ et une portion dudit tableau stocké en RAM Overlay.

    Descripteur tableau alphanumérique M$(21)
    Descripteur tableau alphanumérique M$(21)
    Sauvegarde tableau alphanumérique M$ en RAM Overlay

    Après sauvegarde du tableau alphanumérique M$ via la commande DSTORE M$,”TABLEAUM”, un rapide ‘DIR’ permet de vérifier la présence du fichier ‘TABLEAUM’ sur la disquette et de contrôler ses adresses de début ($C400) et de fin ($C6C8) ainsi que le type de fichier ($42).

    Contenu disquette
    STREC.BIN (routine principale #C9400-#977B)
    DEMALPHA (programme de démo en Basic)
    TABLEAUM (Tableau alpha M$ sauvé en #C400-#C6C8)

    Bonnes sauvegardes !!!