Blog

  • OricHir

    Pour les développeurs en herbe, amateurs de beaux graphismes sur Oric, Grégoire a développé un programme de création graphique sur PC. Un programme dédié simulant les capacités graphiques de l’Oric (ou devrait je plutôt parler des contraintes graphiques de l’Oric tant son système vidéo rebute les peintres en herbe).

    L’outil simule la manipulation de la zone mémoire haute résolution de l’Oric et reproduit l’image Hires dans une fenêtre, et les datas nécessaires à sa réalisation.

    Les principales fonctionnalités :

    • Exploration via une grille d’affichage des octets correspondants à la mémoire HIRES
    • La récupération du listing de ‘data’ de la sélection de bloc d’octets pour le C, Basic et ASM
    • Modification de l’image : dessin en mode pixel
    • Fonctions en développement : importation d’images de type PNG, BMP ou JPG

    A l’ouverture, une fois chargée une image, la première fonctionnalité est l’affichage des octets de la page Hires dans une grille.

    On peut alors laisser libre cours à son imagination pour modifier l’image Hires, avec un crayon pour graver les pixels

    Aujourd’hui, l’importation des images est réalisée en Noir & Blanc. Une des fonctions en cours de développement permettra d’importer des images et de régler les canaux RVB

    D’autres fonctions sont en cours de développement, à l’image du travail en mode AIC de la page Hires.

    Découvrez la mise en œuvre du logiciel, présenté par Grégoire dans la vidéo du CEO Meet de Noël.
    Téléchargez l’outil construit par Grégoire sur son site web.

  • Compensation adaptative de la non-linéarité du convertisseur numérique analogique du modulateur d’amplitude du PSG AY-3-891x

    Quiconque souhaite adresser le sujet du modelage sonore sur Oric se verra tôt ou tard confronté à un des “défaut” de son générateur de son le AY-3-8912: la non linéarité du convertisseur numérique analogique utilisé dans le circuit d’enveloppe.

    Cet article présente un procédé de compensation de cette non linéarité capable de s’adapter à différents volumes sonores. Ce mécanisme de linéarisation, en plus de fournir une commande proportionnelle d’amplitude ouvre la porte à la génération d’enveloppe très précise dont la granularité s’adapte automatiquement au volume sonore choisi.

    Position du problème

    Avant de nous lancer dans le contournement d’un problème, commençons par en cerner l’essence. Quel est exactement le problème de non linéarité du machin truc ?

    Le schéma de principe ci-dessous illustre le fonctionnement de la génération sonore sur un Oric en même temps qu’il introduit les grandeurs dont il va être question dans la suite de l’article.

    Pour générer un son le PSG AY-3-891x utilise un générateur de signal carré dont il module l’amplitude proportionnellement à une tension issue de la conversion numérique analogique de la valeur d’enveloppe programmée dans le registre d’amplitude. Malheureusement, la conversion numérique vers analogique est entachée d’une non linéarité qui fait que la tension obtenue en sortie n’est pas proportionnelle à la valeur programmée dans le registre d’amplitude. Sur le schéma ci-dessus, on vois que la tension V a une forme arrondie là où la commande d’enveloppe E est en rampe rectiligne.

    Ce “problème” est clairement décrit dans les données techniques du composant AY-3-891x, à travers les figures 8 et 9 du document “PSG AY-3-8912 Data Manual” ou entre les figures 2 et 3 du datasheet du PSG AY 3 8912 reproduites ci-dessous:

    La figure ci-dessous montre clairement que, là où le générateur d’enveloppe ou la commande manuelle de l’amplitude demande un signal triangulaire (à gauche), la commande analogique en entrée du VCA (Voltage Controlled Amplifier) se trouve être d’aspect plutôt franchement parabolique (figure de droite). Et ce phénomène est pleinement assumée avec l’explication suivante:

    Since the primary use of the PSG is to produce sound for the highly imperfect amplitude detection mechanism of the human ear, the D/A conversion is performed in logarithmic steps with a normalized voltage range from 0 to 1 Volt.

    datasheet AY-3-8912

    Ce qui peut se traduire par:

    Puisque la fonction première du PSG est de produire un son à destination du mécanisme hautement imprécis qu’est l’oreille humaine, la conversion numérique analogique est effectuée à l’échelle logarithmique avec une plage de tension normalisée entre 0 et 1 volt.

    L’oreille humaine est indéniablement moins précise qu’un modem ou un oscilloscope mais elle est capable de faire la différence entre un violon qui joue un La et un piano qui joue un La .. Et la différence repose, en grande partie, sur l’enveloppe sonore dont cette phrase nous suggère qu’elle peut aisément s’accommoder d’une échelle logarithmique en lieux et place d’une échelle linéaire.

    Quelqu’un qui souhaite tenter de faire générer un son précis au AY-3-391x sera bien obligé de se poser la question suivante.

    Et dans cet article, je propose une solution qui consiste à linéariser la commande d’enveloppe par une pré-compensation logicielle de la déformation à laquelle on veut échapper.

    Pour obtenir une tension V qui soit le plus possible proportionnelle à une consigne d’enveloppe C, on peut élaborer une commande d’enveloppe E qui opère une déformation inverse à celle que va produire la conversion numérique analogique.

    Techniquement, cela consiste à appliquer une transformation à la donnée que nous voulons programmer dans le registre d’amplitude du AY-3-391x. Une transformation qui tente de compenser et d’anticiper les dégâts occasionnés lors de la conversion en analogique de notre souhait d’amplitude formulé numériquement.

    Identification de la déformation

    Dans la version General Instrument du datasheet du AY-3-391x, on trouve une version quotée de la déformation qui nous intéresse.

    Des quelques valeurs fournies sur ce graphique, on peut déterminer une tendance :

    • La valeur de 0.707V pour 14 correspond à 1/sqrt(2)
    • La valeur de 0.5 V pour 13 correspond à 1/sqrt(4)
    • La valeur de 0.25 V pour 11 correspond à 1/sqrt(16)

    Il vient assez naturellement que la tension V en sortie de convertisseur est exprimable par la formule suivante :

    V = 1 / SQRT(2(15-E))

    où :

    • E est le contenu du registre de contrôle de l’amplitude (valeur entière entre 0 et 15).
    • V est la tension (valeur réelle entre 0 et 1 V)

    Dans google, on peut vérifier que la courbe obtenue est proche de celle du modèle.

    Compensation de la déformation

    Pour inverser cette fonction (et donc compenser son effet) on devra calculer la commande d’enveloppe E par la formule suivante:

    E = 15-LOG2(1/(V2))

    où :

    • V est la tension (en volt) que nous voulons en sortie du convertisseur N/A
    • E est la commande d’enveloppe que nous devons programmer dans le PSG pour obtenir la tension V.

    La forme de cette fonction nous donne bien à penser qu’elle compensera la courbe précédente.

    Maintenant que nous avons une fonction permettant de compenser la non linéarité sur l’ensemble des valeurs possibles en sortie du convertisseur, nous allons voir comment il est possible d’adapter cette compensation à des situations où nous déciderions de limiter le volume maximum sur un canal tout en gardant la même dynamique du domaine d’entrée. Nous renoncerions aux valeurs hautes de la tension (car c’est là que les imprécisions sont les plus grandes) mais nous garderions toujours 16 valeurs possibles de consigne d’enveloppe. L’objectif est double:

    • gagner en précision absolue,
    • offrir la même expressivité d’un son quelque soit le volume sonore auquel on le restitue.

    Adaptation de la compensation en fonction du volume

    L’idée clé ici est d’associer à la consigne d’enveloppe maximale (15) un extremum de tension correspondent à un palier réel du composant physique. Ceci afin d’adapter au maximum la dynamique d’entrée au potentiel de sorti et bénéficier au maximum du surcroît de précision que nous offre le sacrifice des niveaux électriques élevés

    Nous avons vu au tout début que les paliers de tension du composant physique sont sous la forme: 1/sqrt(2^(15-E))

    En injectant cette expression dans l’équation vu précédemment, et en simplifiant, il apparaît que la commande d’enveloppe E à programmer dans le PSG s’exprime par:

    E = Volume + 2*LOG2(C)

    où :

    • Volume est une valeur entière entre 0 et 15,
    • C est la consigne d’enveloppe exprimée en 15ème du niveau électrique correspondant à Volume
    • E est la commande d’enveloppe que nous devons programmer dans le PSG pour obtenir la tension V = C*(15/Volume).

    Cette expression est d’une telle simplicité qu’elle m’a très fortement fait douter de mes calculs. J’ai donc écris un petit script python pour:

    • modéliser la déformation engendrée par le convertisseur numérique analogique,
    • calculer une table de compensation pour chaque volume sonore (de 0 à 15),
    • simuler l’effet de la pré-compensation,
    • comparer avec le cas sans compensation.

    Voilà les résultats obtenus pour le volume maximal de 15.

    Les points verts représentent la tension électrique obtenue lorsque le registre d’amplitude du circuit d’enveloppe n’est pas transformé. La valeur programmée est directement celle de l’axe des abscisses.

    La ligne en jaune représente la tension électrique idéale qui serait obtenue si la conversion numérique analogique était purement linéaire et que nous disposions d’un nombre infini de bit pour exprimer la consigne.

    Enfin, les point bleus représentent la tension électrique obtenue par la transformation de la consigne à travers une table de compensation générée par les équations fournies plus haut.

    Nous constatons que les points bleus et vert reposent bien tous sur les mêmes paliers réels du composant physique mais qu’ils sont arrangés de telle sorte que leur éloignement à la courbe idéal soit le minimum possible.

    L’effet de la linéarisation est indéniable. Voyons comment se comporte l’adaptation de la compensation pour le cas de volume maximum que nous fixerions à certains paliers du composant (paliers pour E=14 et E=12).

    L’adaptation de la compensation semble effective.

    Cette étude théorique a permis de:

    • démontrer la faisabilité mathématique d’une linéarisation acceptable du comportement du circuit d’enveloppe du PSG AY-3-391x,
    • exposer le matériel algorithmique nécessaire à mise en œuvre d’une compensation adaptative.

    Vous pouvez télécharger ci-dessous le script python qui m’a servi à générer la table de compensation, simuler son utilisation et vérifier les résultats.

  • Oric Bluetooth

    Ou comment insérer un module émetteur dans l’ORIC pour l’utiliser avec une enceinte audio Bluetooth…

    On peut se procurer facilement un module BT (BT pour Bluetooth) à un prix très raisonnable :

    Une fois la coque enlevée, voici ce module exposé :

    À gauche, le connecteur audio utile pour amener les signaux à transmettre, à droite, le connecteur USB qui sert pour l’alimentation.
    Testé tel quel avec la carte ORIC Mammouth, ça fonctionne bien…

    On peut modifier le module pour l’insérer plus facilement dans un ORIC, en lui retirant les deux connecteurs :

    Puis en coupant la partie droite qui ne sert plus…


    nb : remarquez le marquage du connecteur audio, la pastille L est celle qui sera utilisée pour transmettre le son mono de l’ORIC

    Le module est réduit à 3,5 x 2 cm…

    Quelques câbles de liaison et il ne reste plus qu’à l’installer dans l’ORIC et à tester…

    En gardant le montage de résistances/condensateurs à la sortie de l’AY-3-8912, il suffit de retirer l’amplificateur LM386 de son support.

    Il est nécessaire de filtrer le 5 volts (ici, une alimentation à découpage est utilisée et elle génère un léger grésillement dans l’enceinte BT. Après montage du filtre, tout rentre dans l’ordre

    Première option : retirer le haut-parleur et placer le module à son emplacement

    Voici un ATMOS équipé du module en place du haut-parleur interne :

    Ça fonctionne bien !
    Et la portée est impressionnante… près de 10 mètres.
    De plus, cela résoud le problème du réglage du volume sonore propre à nos chères machines…

    À suivre…

  • Oric Explorer, de la version 2.0 à la 2.3 (et au delà …)

    Par Damien P.

    Oric Explorer est un des meilleurs utilitaires permettant d’inspecter des disquettes (dsk) et cassettes (tap). Damien a revisité le logiciel et ajouté quelques fonctions.

    Retrouvez ses réalisations sur son site internet : https://www.dipisoft.com/, ainsi que la dernière version d’Oric Explorer sur https://github.com/oric-software/OricExplorer.

    Vous retrouverez ci-dessous les éléments de base de la présentation du logiciel réalisée à l’occasion de la CEO-MEET de Septembre 2020.

    Et le live du CEO-MEET …

    Téléchargement ouvert à tous

  • Manuel du débogueur d’Oricutron

    Cette version française a été établie d’après le fichier ReadMe.txt du 15/05/2020 (Oricutron version win64-20200515).  La version PDF de cet article est disponible (voir en fin d’article).

    English speaking Oricians can directly use the official Oricutron Manual (ReadMe.txt file released with Oricutron).

    Au lancement d’Oricutron, il faut presser sur F1 pour accéder au menu principal, qui permet entre autres choses, d’ajouter un clavier Oric virtuel, ce qui peut être utile, voir indispensable.

    Touches actives dans les menus en général

    Flèches           Se déplacer dans le menu

    Return            Exécuter l’option choisie

    DEL                 Revenir en arrière

    ESC     Quitter le menu (ou touche Backspace ou BACK avec la souris)

    Touches actives dans le mode émulateur

    F1                   Aller au menu principal (sortie par ESC ou Backspace ou BACK avec la souris).

    F2                   Entrer dans le mode Débugueur / Moniteur (sortie par F2).

    F3                   Reset soft (NMI)

    F4                   Reset hard (reboot)

    Shift+F4        Reset Jasmin

    F5                   Basculer entre les 3 états de la ligne d’information sous l’écran.

    F6                   Basculer entre vitesse normale / vitesse x20

    F7                   Enregistrer toutes les disquettes modifiées

    Shift+F7        Enregistrer toutes les disquettes modifiées sous un nouveau nom.

    F8                   Basculer entre mode fenêtre / mode plein écran

    F9                   Sauver le fichier tape

    F10                 Démarrer / arrêter la capture vidéo AVI

    F11                 Copier l’écran texte dans le presse-papiers.

    F12                 Coller le presse-papiers dans l’écran texte.

    Help               Aide (pour Amiga, MorphOS and AROS)

    AltGr              Modificateur supplémentaire

    L’intérêt du couple F11/F12 mérite d’être souligné, car il offre une passerelle intéressante entre Oricutron et le système hôte.

    Le débogueur / moniteur d’Oricutron

    Pour accéder au mode débogueur / moniteur d’Oricutron, vous devez presser la touche F2 (F2 est en fait une bascule entre le débogueur et l’émulateur qui peut être utilisée à tout moment sans perte, ni dans l’émulateur, ni dans le débogueur / moniteur). Un écran apparaît, structuré comme celui de la  Fig. 1 : Cet écran est composé de 4 fenêtres :

    Fig.1 Etat du débogueur apres assemblage de code LM (a $9812) et positionnement du PC (r pc $9812).

    1) Ecran de l’Oric

    2) Status du 6502 (“6502 Status”)

    3) Une zone dans laquelle alternent les 3 fenêtres suivantes : Moniteur (“Monitor”) / Débogueur (“Debug console”) / Dump mémoire (“Memory watch”). On passe d’une fenêtre à l’autre avec la touche F3.

    4) Une zone dans laquelle alternent les 2 fenêtres suivantes : Informations VIA (“VIA Status”) et Informations AY (“AY Status”). On passe d’une fenêtre à l’autre grâce à la touche F4.

    Touches actives dans le mode Débogueur / Moniteur

    Dans ce mode, outre l’écran de l’Oric, les fenêtres suivantes sont visibles :

    “6502 Status” (Fig. 1 en haut à droite).

    Fig. 2 Fenêtre “Debug console” (vide pour l’instant).

    “Monitor” (Fig. 1 en bas à gauche) ou “Debug console” (Fig. 2) ou “Memory watch” (Fig. 3).

    Fig. 3 Fenêtre “Memory watch” (ici on voit la page zéro).
    Fig. 4 Fenêtre “6502 status” (après réinitialisation de CY par F9).

    “VIA Status” (Fig. 1  en bas à droite) ou “AY Status” (Fig. 5).

    Fig. 5 Fenêtre “AY status”.

    Les touches suivantes sont actives de manière générale, sans qu’il soit nécessaire d’indiquer une fenêtre en particulier.

    F1     Aller au menu principal (retour au mode émulateur par ESC ou Backspace ou BACK avec la souris, mais F2 permet de retrouver le  Débogueur / Moniteur au même point).

    F2     Passer dans le mode émulateur (retour dans le  Débogueur / Moniteur par la touche F2).

    F3     Pour basculer entre les fenêtres Moniteur (“Monitor”) / Débogueur (“Debug console”) / Dump mémoire (“Memory watch”).

    F4     Pour basculer entre les fenêtres Informations VIA (“VIA Status”) et Informations AY (“AY Status”).

    F9     Pour réinitialiser le compteur de cycles (ligne CY= dans la fenêtre 6502) (Fig. 4).

    F10   Pour exécuter la ligne de code marquée > dans la fenêtre 6502 (Fig. 1 en haut à droite).

    F11   Comme F10, mais s’il s’agit d’un sous-programme, celui-ci est exécuté en bloc,  sans affichage du détail des lignes de ce sous-programme.

    F12   Pour sauter l’instruction marquée > et pointer sur l’instruction suivante. La paire d’écrans “VIA Status” ou “AY Status” affichent des informations en fonction du contexte et ne disposent pas de commandes spécifiques. Par contre, chacune des fenêtres “Monitor”, “Memory watch” et “Debug console”, possède des commandes propres, en plus des commandes listées ci-dessus.

    Touches actives dans le mode Console (fenêtre “Debug console”) 

    Flèches Haut / Bas     Historique des commandes.

    Touches actives dans le mode Dump Mémoire (fenêtre “Memory watch”)

    Flèches Haut / Bas                Scrolling Haut / Bas, ligne par ligne.

    Shift + Flèches Haut / Bas    Scrolling Haut / Bas, écran par écran.

    Page Up/Page Down              Idem.

    Fig. 6 Fenêtre “Memory watch” (Splitée par S).

    Chiffres hexadécimaux        Pour changer de zone mémoire à visualiser. Exemple $9800 affiche le contenu de la mémoire à partir de $9800 (Fig. 6).

    S          Activer / désactiver le mode fractionné (Split). Dans ce mode, deux demi-fenêtres “Memory watch” permettent de visualiser deux zones différentes de la mémoire (Fig. 6).

    Tab     Changer de demi-fenêtre “Memory watch” en mode fractionné. La demi-fenêtre active est indiquée par une coche dans la marge gauche. Les commandes ne sont alors effectives que sur cette demi-fenêtre (Fig. 6).

    Instructions en mode moniteur (fenêtre “Monitor”)

    En entrée les valeurs numériques sont décimales par défaut. Elles peuvent être hexadécimales si elles sont préfixées par $ ou binaires si elles sont préfixées par %. Presque toutes les sorties sont en mode hexadécimal. Là où vous pouvez entrer un nombre ou une adresse, vous pouvez transmettre un registre CPU ou VIA. (Les registres VIA sont préfixés par V, par exemple VDDRA). Là où vous pouvez entrer une adresse, vous pouvez également utiliser un symbole. En plus des commandes décrites au paragraphe “Touches actives dans le mode Débogueur / Moniteur”, voici les commandes spécifiques du mode Moniteur :

    ?           Affiche toutes les commandes disponibles (RETURN pour avoir l’écran suivant).

    Flèches Haut / Bas       Historique des commandes.

    a <addr>            Assembler le code à l’adresse <addr> (assemble) (Fig. 1). Au prompt entrer une ligne de code. L’assembleur passe à la ligne suivante, presser RETURN pour finir.

    bc <bp id>          Effacer le point d’arrêt indiqué (clear breakpoint).

    bcm <bp id>      Effacer le point d’arrêt mémoire indiqué (clear memory breakpoint).

    bl                         Lister les points d’arrêt (list breakpoints).

    blm                      Lister les points d’arrêt mémoire (list memory breakpoints).

    bs <addr> [zc]   Définir un point d’arrêt classique (set breakpoint) (pour les modificateurs zc, voir plus loin dans la partie consacrée aux points d’arrêts).

    bsm <addr> [rwc]        Définir un point d’arrêt mémoire (set memory breakpoint) (pour les modificateurs rwc, voir plus loin dans la partie consacrée aux points d’arrêts).

    bz                          Supprimer  les points d’arrêt (zap breakpoints).

    bzm                      Supprimer  les points d’arrêt mémoire (zap memory breakpoints).

    Fig. 7 Fenêtre “Monitor” (désassemblage par la commande d $9812).

    d <addr>              Déassembler à partir de l’adresse <addr> (disassemble) (Fig. 7).

    fd <addr> <end> <file>  Désassembler dans un fichier, de <addr> à <end> (disassemble to file). Ce fichier <file> est sauvé dans la racine du répertoire Oricutron. Aucune extension, ni entête, n’est ajoutée. Il ne contient que les data bruts, sans informations complémentaires (adresses, type etc.). NB. L’ancienne commande df <addr> <end> <file> n’est plus reconnue.

    fw <addr> <len> <file>  Sauver une zone mémoire sur la disquette (bin file write) (Fig. 10). Ce fichier <file> est sauvé dans la racine du répertoire Oricutron. Aucune extension, ni entête, n’est ajoutée. Il ne contient que les data bruts, sans informations complémentaires (adresses, type etc.). NB. L’ancienne commande wm (write memory to disk) n’est plus reconnue.

    fr <addr> <file>           Charge un fichier en mémoire à l’adresse <addr> (bin file read) (Fig. 10). Il s’agit d’un fichier brut préalablement sauvé dans la racine du répertoire Oricutron (ou d’un fichier similaire reconstruit). Il faut donc préciser l’adresse cible et le nom exact.

    m <addr>                       Dumper les 128 octets présents en mémoire à partir de l’adresse <addr> tout en restant dans la fenêtre Moniteur (memory) (Fig. 9). Presser la touche RETURN pour afficher la demi-page suivante. Cette commande est moins puissante que la commande mw ci-après.

    mm <addr> <valeur>  Modifier la mémoire (modify memory) (Fig. 8).

    Fig. 8 Fenêtre “Monitor” (mm modify memory).

    mw <addr>             Afficher la fenêtre Dump Mémoire et dumper à partir de l’adresse <addr> (memory watch at addr) (Fig. 3). Cette commande est plus puissante que la commande m ci-dessus (Fig. 9) (voir les nombreuses touches actives dans ce mode Dump Mémoire).

    Fig. 9 Fenêtre “Monitor” (m dump memory).

    nl <fichier>             Charger une recopie d’écran (load snapshot) (pas d’extension par défaut).

    ns <file>                 Enregistrer une recopie d’écran (save snapshot) (pas d’extension par défaut).

    r <reg> <val>         Initialiser le registre <reg> avec la valeur <val> (set register). Exemple “r pc $9812” positionne le Program Compter en $9812 (Fig. 1, fenêtre 6502 status en bas à gauche). Les touches F10 et F11 permettent d’exécuter le code qui se trouve à cette adresse.

    Fig. 10 Fenêtre “Monitor” (commandes fw et fr).

    q, x ou qm               Quitter le moniteur et retourner à l’émulateur (quit, exit, quit moniteur)

    qe                            Quitter l’émulateur (quit emulator)

    sa <nom> <addr>  Ajouter ou déplacer un symbole utilisateur (add symbol)

    sk <nom>        Supprimer un symbole utilisateur (kill symbol)

    sc                      Symboles non sensibles à la casse (symbols not case-sensitive)

    sC                      Symboles sensibles à la casse (symbols Case-sensitive)

    sl <file>            Charger les symboles utilisateur (symbols load) (pas d’extension par défaut)

    sx <file>           Exporter les symboles utilisateur (export symbols) (pas d’extension par défaut)

    sz        Supprimer les symboles utilisateur (zap symbols).

    Points d’arrêt

    Parmi les commandes listées ci-dessus, 8 sont consacrées aux points d’arrêt. C’est dire l’importance qu’ils occupent dans le débogueur / moniteur d’Oricutron. Voici quelques précisions.

    Il existe deux types de points d’arrêt. Les points d’arrêt normaux ou “classiques” se déclenchent lorsque le processeur est sur le point d’exécuter l’instruction à l’adresse du point d’arrêt. Les points d’arrêt “mémoire” se déclenchent lors de l’accès ou de la modification de l’adresse du point d’arrêt.

    Les points d’arrêt “classiques” peuvent utiliser les modificateurs z et / ou c.

    bs $0C00        Arrêt lorsque le processeur est sur le point d’exécuter du code à l’adresse $0C00

    bs $0C00 z     Idem et met le compteur de cycles à zéro

    bs $0C00 zc   Met le compteur de cycles à zéro et continue (pas d’arrêt)

    bs $0C00 c     Continue l’exécution (le point d’arrêt est désactivé)

    L’objectif principal des modificateurs z et / ou c est de faciliter le comptage des cycles.

    Si des symboles sont chargés, ils peuvent être utilisés à la place des adresses absolues.

    Les points d’arrêt “mémoire” peuvent être déclenchés de trois manières: lorsque le processeur est sur le point de lire (r pour read), ou d’écrire (w pour write) à l’adresse ou lorsque la valeur à l’adresse change pour une raison quelconque (c pour change). Le choix du modificateur c  (c pour change) n’est pas très heureux, car pour les points d’arrêt normaux, c est déjà utilisé pour continue. Voici quelques exemples d’utilisation :

    bsm $0C00 r       Arrêt lorsque le processeur est sur le point de lire à l’adresse $0C00

    bsm $0C00 rw     Arrêt lorsque le processeur est sur le point de lire ou d’écrire à l’adresse $0C00

    bsm $0C00 c       Déclenche une pause après le changement du contenu de $0C00

    bsm $0C00 rwc          Déclenche une pause juste avant que le processeur ne lise ou n’écrive à l’adresse $0C00 ou juste après le changement, pour une raison quelconque, du contenu de $0C00.

    Fig. Fenêtre “Ecran Oric” (résultat de l’exécution).

    Conclusion

    Ce manuel est certes très succinct et de nombreuses explications pourraient encore être ajoutées. Néanmoins, j’espère qu’il vous sera utile, comme il l’est pour moi. N’hésitez pas à me faire connaître les manques et les erreurs, afin que je puisse l’améliorer.

  • CEO-MAG 360

    Sommaire

    4. SOLOMON’S KEY
    8. COMPTE RENDU DE VISU MEET DE L’ÉTÉ 2020
    9. COMPTE RENDU DE VISU MEET DE L’AUTOMNE 2020
    10. INITIATION À LA TWILIGHTE BOARD V0.6
    12 L’ORIC SUR VOTRE TABLETTE ET VOTRE
    SMARTPHONE
    14. ADAPTATEUR DE JOYSTICK «STINGY» POUR ORIC
    16. GLORIC
    18. CROSSLIB
    22. LES JEUX PROPOSÉS PAR FABRIZIO, CRÉES AVEC CROSSLIB
    24. ORIC EXPLORER, VERS LA VERSION 2.3
    32. ORIC EXPLORER

    Edito

    Bonjour à tous,
    L’année 2020 nous a vraiment réservé bien des surprises et ce numéro vise à garder dans une version papier les excellentes présentations réalisées lors des visu meet de Juin et Septembre.
    L’année a été assez riche en nouveautés hardware, software et j’ai reçu quelques artciles réalisés par nos plus fidèles rédacteurs. Je les en remercie,
    et ceux ci sont déjà disponibles sur le site du CEO.
    On ne peut pas dire qu’il y ait foule sur les ceo meet mais avec le mag, les forums et les visu physiques, c’est un levier supplémentaire pour échanger à propos de notre ordinateur favori, l’Oric. Une nouvelle visu meet est d’ors et déjà prévue début décembre. Reservez vos créneaux et attention … Google ayant restreint le temps d’utilisation du service à une heure, nous n’attendrons pas les retardataires.
    Bonne lecture et à bientot. Un nouveau numéro paraitra en fin d’année, l’occasion de boucler cette année 2020 coté Oric, et intègrera les différents articles réalisés et disponibles sur le site.
    Prenez soin de vous

    [wpdm_package id=’3799′]

    [wpdm_package id=’3797′]

  • Visu Meet 2020 12 Noel

    Une nouvelle visu meet est prévue le Vendredi 11 Décembre à 21h00. Elle est prévue, comme pour les précédentes visu meet, sous la forme d’un google meet programmé le 11 Décembre de 21h00 à 22h00 (attention, la durée est raccourcie du fait des contraintes google).

    Un bon moment de détente pour tous les Oriciens passionés. En direct live, avec de nouvelles démonstrations et échanges.

    Agenda :

    • Jede : Orix
    • Grégoire : Orichir
    • Hialmar : Oricutron Online
    • Didier : De la cassette à Maxduino
    • Echanges

    Le compte rendu de la visu sera disponible sur Youtube.

    Echanges possibles sur le forum.

    Retrouvez les meilleurs moments de ces instants sur Youtube.

  • Visu Meet 2020 09 Automne

    Une nouvelle visu meet s’est tenue le Vendredi 11 Septembre à 21h00. Elle s’est déroulée, comme pour la visu meet de Juin, sous la forme d’un google meet programmé le 11 Septembre de 21h00 à 22h30

    Un bon moment de détente pour tous les Oriciens passionés. En direct live, avec réalisation de quelques démonstrations qui ont donné lieu à des échanges ouverts.

    Agenda :

    • Fabrizio : Crosslib, a massively cross-development library
    • Kenneth : DIY, un simple cordon d’adaptation pour joystick
    • Damien et Didier : Présentation d’Oric Explorer
    • Echanges

    Le compte rendu de la visu est disponible sur Youtube.

    1h30 de vidéo, le livre presque intégral de la session ceo meet autumn 2020

    Echanges possibles sur le forum (réservé aux adhérents du CEO)

    Venez nombreux…

  • Adaptateur de joystick «Stingy» pour Oric

    Pour les chanceux qui possèdent un ordinateur Oric, une solution permet de résoudre le problème d’absence de connecteur DB9 sur Oric qui gâche le plaisir de profiter de jeux plus réalistes avec une manette comme le proposaient d’autres fabricants d’ordis ou de consoles de l’époque. Maintenant, ce petit cordon permet d’adapter un joystick de type Atari ou Amstrad CPC sur un ordinateur Oric-1/Atmos.

    “Stingy” adaptateur joystick pour Oric

    L’adaptateur possède les avantages suivants :

    • Pas de circuits intégrés : On utilise des diodes.
    • Pas de circuit imprimé : Les composants sont dans la coquille de la prise DB9.
    • Pas de déformation du son pour les jeux prévus avec l’interface IJK.
    • Compatible avec la manette au standard CPC Amstrad : Le 2e bouton de tir est différencié du 1er, il n’y a pas encore de jeux pour, mais on peut détecter le 2e bouton.

    Pour réaliser l’adaptateur il faudra vous procurer :

    • 7 diodes de type 1N4148.
    • 1 connecteur DB9 mâle à souder vers fils avec sa coquille.
    • 1 nappe 20 fils avec son connecteur HE10 2×10 bornes pour connecter sur le port imprimante de l’Oric.
    • 1 morceau de 10 cm de gaine de vieux cordon chargeur USB en caoutchouc.

    Commencez par couper les pattes des diodes pour avoir une longueur totale de 12mm. Séparez les fils de la nappe sur une longueur de 25mm à l’aide d’un cutter puis coupez les fils aux longueurs indiqués sur la photo.

    Le fil le plus long sera le no1 (fil repère reconnaissable à sa couleur différente des autres). Couper la gaine en caoutchouc en morceaux de 8mm et dénudez les fils 1,3,5,7,9,11,15 de la nappe et enfilez les bouts de gaine sur les fils, soudez le coté opposé à la bague noire des diodes aux fils sauf le fil no1. Déplacez les gaines pour recouvrir les soudures et la moitié des diodes.

    • Soudez le côté restant de la diode du fil 13 sur la borne 8 du connecteur DB9 en y joignant le fil no1 de la nappe.
    • Le coté restant de la diode du fil 15 sur la borne 7.
    • Le coté restant de la diode du fil 7 sur la borne 6.
    • Le coté restant de la diode du fil 11 sur la borne 1.
    • Le coté restant de la diode du fil 9 sur la borne 2.
    • Le coté restant de la diode du fil 5 sur la borne 3.
    • Le coté restant de la diode du fil 3 sur la borne 4.

    Enroulez la nappe pour faire entrer les diodes et le connecteur DB9 dans sa coquille.

    Après avoir connecté le joystick et l’adaptateur sur le port imprimante de l’Oric, vous pouvez tester le bon fonctionnement de l’ensemble en chargeant dans l’Oric l’un des jeux suivants :

    • Don’t Press The Letter Q
    • Zebbie
    • Damzel In Distress

    Pour les jeux utilisant le joystick avec l’interface IJK, la routine du jeu procède comme suit :

    Envoi d’un « 0 » sur la sortie STROBE de l’imprimante de l’Oric, ce qui active l’interface IJK pendant une durée déterminée. L’adaptateur STINGY se comportera différemment, il restera actif pendant toute la durée du signal bas de STROBE et le joystick unique sera toujours sélectionné quelque soit le numéro de joystick choisi par la routine IJK.

    • Le bit 5 passe à 0 pour indiquer la présence de l’adaptateur.
    • Le bit 0 passe à « 0 » si manette poussée à droite.
    • Le bit 1 passe à « 0 » si manette poussée à gauche.
    • Le bit 3 passe à « 0 » si manette poussée en bas.
    • Le bit 4 passe à « 0 » si manette poussée en haut.
    • Le bit 2 passe à « 0 » si appui sur bouton de feu1.
    • Si le joystick 1 est sélectionné par la routine, le bit 6 passe à « 0 » si appui sur bouton de feu2 (CPC Amstrad).

    Vous constaterez en fouillant dans la logithèque Oric qu’il n’y a pas beaucoup de programmes qui utilisent le standard IJK pour la manette, pourtant, la connexion discrète sur le port imprimante laisse la place au port d’extension libre pour y connecter un lecteur de disquettes ou de carte SD. Le code qui permet d’utiliser les adaptateurs IJK est facilement insérable dans les logiciels qui ne marchaient qu’en mode clavier, ce qui permettra de rendre aux jeux d’action Oric le bâton de joie qui leur manque cruellement.

  • UNDEL

    Utilitaire Sedoric pour récupérer des fichiers après un DEL

    Catastrophe : Tout votre travail  est perdu à cause d’un DEL malencontreux ! Et vous étiez tellement dans l’action que, bien sûr, vous n’avez pas sauvegardé depuis un bon moment. Le piège principal (mais pas que) est dû à la commande DEL”*.*” pour laquelle il faut confirmer par Y ou N si chacun des fichiers est à supprimer ou pas. Une erreur est vite arrivée…

    Pas de panique rien n’est perdu, mais de grâce n’écrivez plus rien sur cette disquette ! Et si possible, protégez-là en écriture, faites-en une copie et opérez sur la copie.

    Petit historique

    L’envie de faire cet utilitaire m’est venue en 1995, en écrivant l’annexe n° 9 : “Que se passe-t-il lors d’un DEL ?”, à la page 511 de “Sedoric 3.0 à nu”. Et depuis lors, ce projet n’a pas bougé de ma liste “Tout doux” ! Au fil du temps, quelques Oriciens se sont adressés à moi pour récupérer leur travail effacé par erreur, ce qui a renforcé ma motivation. Mais c’est le corona qui m’a fait passer à l’acte…

    Quelques précisions

    Le programme UNDEL est écrit en Basic 1.1 et utilise plusieurs instructions Sedoric sans équivalent dans les autres DOS. Par conséquent, il ne tournera que sur un système équipé d’une Rom 1.1 et sous Sedoric. Il s’agit typiquement d’une configuration Atmos + Microdisc + Sedoric. UNDEL fonctionne avec tout système émulant cette configuration (Euphoric et Oricutron testés). Il est inutile de l’essayer avec un Oric-1 ou avec un Telestrat sous Hyper-Basic. Les instructions Sedoric PMAP, SMAP, CRESEC, FRESEC, etc. sont incontournables et si vous voulez vous en passer, il faut réécrire leur équivalent en code machine.

    Base technique du problème

    Que se passe-t-il lorsqu’on écrit un fichier avec SAVE*, ESAVE ou COPY* ? :

    Dans l’ordre : Un descripteur est créé, un ou plusieurs secteurs du fichier proprement dit sont enregistrés à la suite, les 2 secteurs de bitmap sont ajustés (plusieurs secteurs sont marqués occupés, le nombre de fichiers présents sur la disquette est incrémenté, le nombre de secteurs libres est réduit) enfin une entrée est ajoutée au directory et l’offset de la prochaine entrée libre est ajusté. Il est à noter que le descripteur est toujours écrit sur le 1e secteur libre à partir du début de la bitmap. Le ou les secteurs du programme proprement dit sont écrits, dans l’ordre, sur les secteurs libres suivants, qui ne sont pas forcément contigus lorsque la disquette a déjà subi plusieurs écritures / suppressions.

    Que se passe-t-il si on supprime un fichier avec DEL, DELBAK ou DESTROY ? :

    Lorsqu’il efface un fichier, SEDORIC ne modifie en fait que les secteurs de bitmap et de directory.

    L’entrée du directory est remplacée par des #00 et l’offset de la prochaine entrée libre est réajusté. Les 2 secteurs de bitmap sont actualisés (plusieurs secteurs sont libérés, le nombre de fichiers présents sur la disquette est réduit, le nombre de secteurs libres est augmenté). MAIS ni le secteur de descripteur, ni le ou les secteurs du fichier proprement dit ne sont modifiés.

    Ils restent intacts et sont seulement marqués “libres” dans la bitmap. Il n’y a donc aucun problème tant qu’un nouveau fichier n’est pas écrit dans ces secteurs libérés (et ce sera malheureusement en priorité sur ceux-là). Comme vous pouvez l’imaginer, il est techniquement possible de récupérer le fichier supprimé en restaurant l’entrée de directory, les secteurs de bitmap, quelques liens, etc.

    Et lorsque plusieurs fichiers ont été supprimés ? :

    Pas de problème tant qu’aucune écriture n’est opérée sur la disquette. Il faut relancer UNDEL plusieurs fois, jusqu’à ce qu’il ne trouve plus rien. Pour mes tests, j’ai effacé une disquette 80 pistes de 17 secteurs, double face qui était bourrée de fichiers de toutes sortes avec un DEL”*.*” et j’ai pu tout récupérer avec UNDEL !

    Et si malheureusement une écriture a été faite ?

    Là, il est plus hasardeux de restaurer spécifiquement le fichier qui vous intéresse. Mais ce n’est pas forcément perdu si celui-ci est mappé assez loin dans la bitmap. La localisation des fichiers dans la bitmap n’a rien à voir avec l’ordre des suppressions. En outre, après plusieurs écritures / suppressions, les fichiers sont fragmentés et la disquette est truffée de résidus. Ceci implique un algorithme de restauration assez complexe. Mais le miracle est possible !

    Le programme UNDEL pour Sedoric

    Sedoric a subi quelques modifications au fil du temps (par exemple ajout d’un 2e secteur de bitmap pour passer aux disquettes 3.5″, ajout d’un système de sous-directory, etc.). Dans un premier temps, je me suis concentré sur la version 3.0 de Sedoric, parce que c’est celle que je connais le mieux pour l’avoir dépiautée en détail. Mais quelques vérifications à postériori montrent que UNDEL marche avec les disquettes de toutes les versions de Sedoric. Il est même possible de récupérer des fichiers (simples ou mergés) de disquettes Stratsed car la structure de celles-ci est très proche de celle des disquettes Sedoric.

    Structure d’un fichier Sedoric

    Du plus simple, qui est un fichier “ordinaire” occupant moins de 123 secteurs, au plus compliqué, formés de plusieurs fichiers mergés, il est possible de dresser le schéma général suivant :

    Un fichier “ordinaire” est composé comme suit :

    -Le descripteur principal (obligatoire) du fichier, qui liste le ou les secteurs qu’il faut charger pour mettre le fichier en place dans la Ram. Si nécessaire, un lien vers un éventuel descripteur secondaire est renseigné.

    -Le ou les secteurs du fichier proprement dit, listés dans ce descripteur principal.

    -Un descripteur secondaire, s’il reste des secteurs à lister dont les coordonnées n’ont pas pu être insérées dans le ou les descripteurs précédents, faute de place.

    -Après ce descripteur secondaire, se trouvent les secteurs listés dans ce descripteur.

    -Si cela ne suffit pas, un autre descripteur secondaire est ajouté, etc.

    -Chaque descripteur est relié au suivant par un lien. Le lien du dernier descripteur du fichier est mis à zéro pour indiquer qu’il n’y a plus rien après.

    -Chacun de tous ces éléments (descripteurs et secteurs du fichier proprement dit) est écrit sur le prochain secteur libre. Après plusieurs écritures / suppressions, la disquette est parsemée de “trous” (secteurs libres isolés). Mais les divers morceaux d’un fichier sont toujours écrits dans le bon ordre, même s’ils ne sont pas forcément contigus. -Les informations propres à un fichier sont données dans l’entête de son descripteur principal. Ce sont : Le type de fichier, les adresses de début, de fin et d’exécution, le nombre total de secteurs à charger pour mettre l’ensemble de ce fichier en place. Cet entête est suivi par la liste (ou le début de la liste) des secteurs à charger. Les descripteurs secondaires ne comportent que le lien vers le descripteur suivant et la suite de la liste des secteurs à charger.

    Les fichiers “mergés” sont formés comme suit :

    Plusieurs fichiers “ordinaires” peuvent être rassemblés sous un même nom, on dit alors qu’ils sont “mergés”, ce qui est impropre car “merged” signifie “fusionnés”. Or les fichiers restent intacts et sont seulement juxtaposés. Ils sont mis à la queue-leu-leu, sans être modifiés, sauf les liens entre les différents descripteurs qui sont chaînés : Le dernier lien de chaque fichier “ordinaire” (normalement mis à zéro) est remplacé par l’adresse du descripteur principal du fichier mergé suivant. Et ainsi de suite, jusqu’au dernier descripteur dont le lien est bien sûr maintenu à zéro. Aucune autre modification n’est effectuée. La taille globale de l’ensemble ne figure qu’au niveau de l’entrée de directory correspondant à cet ensemble de fichiers mergés. Seul le nom du premier fichier est retenu et figure dans cette entrée. Les secteurs de ces différents fichiers, sont écrits à la queue-le-leu et dans le bon ordre, mais ne sont pas forcément contigus.

    Et un peu plus de détails sur ce qui se passe lors d’un DEL

    L’information cruciale est qu’après un DEL, le ou les “blocs” (descripteur + secteurs à charger) restent en place sans la moindre modification. Seuls la bitmap et le directory sont affectés : Toute trace de l’existence du ou des fichiers est complétement effacée. De plus, l’ordre des entrées est remanié pour récupérer de la place, mais pas toujours complètement remanié, car il reste des trous. Je n’entre pas dans l’explication de ce phénomène, sans intérêt pour le propos d’aujourd’hui.

    Alors quel est le bilan de la situation ?

    1) Dans la bitmap, tous les secteurs correspondant au fichier supprimé (descripteurs et secteurs) ont été marqués libres (réutilisables), bien que les secteurs en question soient toujours en place. Il faut noter que les fichiers effacés ne sont pas récupérables dans l’ordre de leur effacement, mais dans l’ordre de leur représentation dans la bitmap. La prochaine écriture sur la disquette va écraser en priorité les secteurs libérés qui figurent à partir du début de la bitmap et ce ne sont pas forcément ceux libérés par le dernier DEL. Donc, avec un peu de chance, il est PEUT-ETRE encore possible de récupérer le fichier qui vous intéresse, même si une écriture a eu lieu après le DEL. Dans la bitmap encore, le nombre de secteurs libres est bien sûr augmenté du nombre de secteurs libérés, tandis que le nombre de fichiers est décrémenté. Le nombre de secteurs de directory peut éventuellement avoir été réduit. Heureusement, toutes ces informations sont récupérables.

    2) Dans le directory, l’entrée correspondant au fichier supprimé a tout simplement été effacée, créant ainsi une entrée libre. Comme déjà indiqué, les entrées restantes ont éventuellement et partiellement été réorganisées pour gagner de la place. Une entrée supprimée, cela veut dire que les informations  suivantes ont disparu :

    -Le nom et l’extension du fichier.

    -Les coordonnées piste et secteur du descripteur principal du fichier.

    -Le nombre total de secteurs occupés par le fichier (ou les fichiers s’il s’agit de fichiers mergés). -L’attribut de protection du fichier.

    Stratégie utilisée par UNDEL

    Phase 1 : Retrouver le premier descripteur du fichier

    Coup de chance, le premier secteur libre de la disquette est forcément un descripteur principal. Si ce n’est pas le cas, soit aucun DEL n’a été effectué, soit une écriture est intervenue après le dernier DEL. On a ça par exemple lorsqu’un fichier est écrit et ne surcharge que partiellement un fichier précédemment détruit et si celui-ci était plus gros. Il reste des secteurs “libres” qui ont toutes les chances de ne pas être un descripteur. UNDEL sait gérer cette situation de manière appropriée. A l’issue de cette phase, ce premier descripteur est restauré, ainsi que les secteurs qui y sont listés. Mais le descripteur principal trouvé est-il bien celui du fichier que nous voudrions récupérer ? Si plusieurs DEL ont été effectués et que le descripteur qui nous importe ne correspond pas au premier secteur libre, il faudra recommencer l’opération de sauvetage plusieurs fois, jusqu’à ce que le bon soit trouvé et restauré.

    Phase 2 : Examiner le lien vers le descripteur suivant

    Si ce lien est nul, il n’y a aucun descripteur suivant, notamment pas de descripteur de fichier mergé. Il ne reste plus qu’à finaliser l’entrée de directory et la bitmap (voir plus bas “Phase 4”). Au contraire, si ce lien n’est pas nul, il indique la localisation piste/secteur du descripteur suivant, qui peut être soit un descripteur secondaire du même fichier, soit le descripteur principal d’un fichier mergé. Comment départager ces 2 hypothèses ?

    Phase 3 : Examiner s’il reste des secteurs à charger pour le fichier en cours

    Le descripteur principal nous a indiqué le nombre total de secteur à charger pour mettre en place le fichier en cours. Sachant qu’un descripteur principal peut lister les coordonnées de 122 secteurs et un descripteur secondaire celle de 127 secteurs, il est facile de calculer s’il reste des secteurs qui ne sont pas encore listés. Si c’est le cas, le descripteur trouvé est un descripteur secondaire. Sinon le descripteur trouvé est le descripteur principal d’un fichier mergé. En résumé, il n’y a que 3 possibilités : Soit c’est fini, soit il y a encore un descripteur secondaire, soit il y encore un descripteur principal de fichier mergé. Le programme rebouclera au niveau voulu selon le cas. Le descripteur trouvé est restauré, ainsi que les secteurs qui y sont listés. Après plusieurs éventuelles réitérations et quelle que soit sa complexité, le fichier proprement dit est entièrement restauré. Il ne reste plus qu’à finaliser l’entrée de directory et la bitmap.

    Phase 4 : Créer une entrée de directory pour ce fichier

    Lorsque le dernier descripteur du fichier ainsi que les secteurs correspondants ont été restaurés, il faut créer une entrée dans le directory. Partant du 1er secteur de directory (le secteur 4 de la piste 20) on recherche la première entrée libre. S’il n’y en a pas, on passe au secteur de directory suivant, etc. Si on atteint le dernier secteur de directory sans avoir trouvé d’entrée libre, il faudra créer un nouveau secteur de Directory dont la première entrée sera l’entrée libre voulue. On écrit alors dans l’entrée libre les informations suivantes :

    -Le nom et l’extension du fichier. Par défaut ce sera SANSNOM.COM, ce qui impliquera de renommer le fichier avant de relancer UNDEL pour en restaurer un autre.

    -Les coordonnées piste et secteur du descripteur principal du fichier. Ces données ont été trouvées lors de la phase 1.

    -Le nombre total de secteurs occupés par le fichier. C’est la somme du nombre de secteurs à charger pour mettre en place le fichier (simple ou mergé) et du nombre total de descripteurs.

    -L’attribut de protection du fichier. Par défaut, il sera positionné sur PROT (qui ne gêne pas si on veut renommer le fichier !). Finalement l’adresse de la prochaine entrée libre est mise à jour (ou à zéro si on vient d’écrire sur la dernière entrée libre du secteur de directory).

    Phase 5 : Finaliser la bitmap

    La bitmap proprement dite (représentation des secteurs en fonction de leur occupation / disponibilité) a été mise à jour au fur et à mesure de l’avancée des phases précédentes. Reste à finaliser l’entête ou plutôt les deux entêtes, car la bitmap occupe deux secteurs. Les données à mettre à jour se réduisent à :

    -Le nombre de fichiers (ancienne valeur plus un)

    -Le nombre de secteurs de directory (peut éventuellement avoir été augmenté). Le nombre de secteurs libres a été mis à jour au fur et à mesure des phases précédentes et il n’y a pas à s’en occuper.

    Phase 6 : Renommer le fichier restauré

    La récupération du fichier est terminée. L’affichage des caractéristiques de ce fichier (type de fichier, adresses de début, de fin, d’exécution et nombre de secteurs occupés) vous permettra de comprendre de quel fichier il s’agit et de le renommer correctement. S’il ne s’agit pas du fichier que vous vouliez ou si vous en avez plusieurs à récupérer, il suffit de relancer UNDEL (après avoir renommé SANSNOM.COM).

    Et si une écriture a eu lieu après le ou les DEL ?

    Je pensais au départ que l’absence d’écriture après la suppression était un impératif absolu. Mais comme je l’ai déjà indiqué, les fichiers effacés ne sont pas récupérable dans l’ordre de leur effacement, mais dans l’ordre de leur représentation dans la bitmap. D’autre part, les écritures se font à partir du début de la bitmap. Il est donc possible de récupérer un fichier effacé, s’il n’est pas en tête de bitmap. Après la suppression de plusieurs fichiers, il est possible qu’il existe encore plusieurs fichiers récupérables, même s’il y a eu écrasement de l’un d’entre eux après une écriture malheureuse ! Après avoir reçu un avertissement d’échec, vous avez la possibilité de demander à UNDEL de rechercher s’il n’existe pas encore quelque chose à restaurer sur la disquette. Les nombreux essais, que j’ai effectués, montrent que ça marche assez bien.

    Conclusion

    Que ce soit avec un Atmos réel ou avec un émulateur (Euphoric et Oricutron ont été testés), vous pouvez sans crainte récupérer tous les fichiers effacés par erreur. Et même après une écriture, il reste une chance que tout ne soit pas perdu. Le programme UNDEL est solide et je suis sûr qu’il vous donnera entière satisfaction. Bien que je n’aie jamais rencontré de problème au cours de mes très nombreux essais avec Sedoric 3.0, je vous conseille quand même de protéger votre disquette originale et de travailler sur une copie, on ne sait jamais ! Le zip qui accompagne cet article contient non seulement les fichiers Undel.dsk et Undel.tap, mais aussi des fichiers .txt très commentés,  au cas où vous voudriez retoucher le programme…