LOCKSMITH 6.0 (C) ALPHA LOGIC BUSINESS SYSTEMS 4119 NORTH UNION ROAD, WOODSTOCK, ILL 60098 Matériel nécessaire: Apple II, Apple II+, Apple //e, Apple //c, ou compatible. Il faut au moins 48K de mémoire. On peut utiliser ce logiciel avec 1 ou 2 lecteurs de disquettes. Matériel supplémentaire en option: Cartes RAM de 16K, 32K, 64K, 128K, 256K ou toute autre carte de mémoire RAM additionnelle. Une imprimante est conseillée, mais non nécessaire. LES TOUCHES DE COMMANDES: Les commandes suivantes peuvent ètre tapées à tout moment: CTRL-Z - l'écran texte est imprimé sur l'imprimante connectée en slot1. On peut changer ce slot par le paramètre PRT.SLOT. ESC - annule l'opération en cours et vous ramène au menu précédent. RESET - reboote la disquette Note: Laissez la disquette LOCKSMITH dans le drive 1 jusqu'à ce que le programme vous avertisse que vous pouvez l'oter. Cependant, vous devrez la remettre à chaque changement d'opération (à partir du menu principal). Les 7 premières lignes affichent l'opération en cours. Les pistes sont numérotées de 0-23 (hex) soit 0-36 (decimal). On peut également utiliser les 1/4 et 1/2 pistes. MENU PRINCIPAL: Lors du boot de LS, vous arrivez dans le menu principal. Les messages en inverse vous indiquent quelles sont les touches à enfoncer pour obtenir l'option désirée. (B) BACKUP/COPY - Copie de logiciels utilisant des routines de protection. (F) FAST BACKUP - Copie rapide de logiciels non protégés. Cette option utilise la mémoire additionnelle pour accélérer le processus de copie. (/) CLR STATUS - Effacer les informations présentes sur la ligne en dessous des n° de pistes. (N) DISK EDITOR - Il s'agit du NIBBLE EDITOR permettant la lecture, la modification, la recherche .... de données situées sur la disquette (format SECTOR ou NIBBLE). On peut aussi éditer des données situées en RAM. (L) LOAD RAM CD - Permet de charger dans la RAM du slot 0 les données situées sur les pistes 12, 13 et 14 (hex) de la disquette LS. On l'utilise pour charger Inspector ou Watson. La touche I permettra ensuite d'appeler ces fonctions une fois que ces utilitaires seront en mémoire. (*) PARAMETERS - Permet de modifier les paramètres utilisés par LS. (T) TEXT EDITOR - Edition de fichiers en LANGAGE DE PROGRAMMATION LOCKSMITH (LPL), qui peuvent ètre chargés et sauvés sur le disque de paramètres. La fonction BACKUP permet alors de faire des copies de logiciels en donnant leurs noms. (R) RAMCD UTILS - Permet de tester les cartes RAM situées dans votre Apple. Il y a deux tests: un simple et un complet. Ces tests peuvent se faire de manière complète ou partielle pour déterminer une erreur précise. De plus, le contenu de chaque banc 16K de la carte RAM peut ètre copié en mémoire principale puis édité avec le DISK EDITOR et ensuite relogé en mémoire RAM. (Q) SCAN DISK - Permet d'afficher sur l'écran Haute Résolution une image de votre dique, piste par piste. Très pratique pour déterminer quelles sont les pistes réellement utilisées. (A) BOOT TRACER - C'est un débugger très sophistiqué simulant le fonctionnement du processeur 6502. Du fait de la simulation des accès disques, on peut booter un disque (protégé ou non) sous controle du debugger et suivre le boot à la trace. (C)CERTIFY DISK - Ceci permet de vérifier le bon état de la disquette en écrivant certaines informations sur les pistes. (U) 16-S UTILS - Appel un menu permettant certaines opérations sur les disques en format 16 secteurs/piste. (D) DOS3.3 UTIL - Appel d'un menu d'utilitaires DOS 3.3. (X) DSK RECOVER - Permet de lire un disque endommagé et d'en faire une copie de meilleure qualité sur une autre disquette. Très utile pour recopier une disquette écrite avec un lecteur ayant ses têtes mal alignées. (S) DISK SPEED - Permet de modifier la vitesse de rotation des lecteurs. (E) ERASE DISK - Efface tout ou partie d'une disquette. (I) INSPECTOR - Appel de Inspector ou de Watson s'ils ont été préalablement chargés par la fonction L. Backup/Copy Disk: En tapant B, on peut copier la majorité des logiciels utilisant une protection. En tapant F, on passe en copie rapide: ceci ne fonctionne qu'avec des disquettes au format standard; de plus toute la mémoire RAM disponible est utilisée. Voici les commandes disponibles: 12 Copie du lecteur 1 vers le lecteur 2 21 Copie du lecteur 2 vers le lecteur 1 11 Copie du lecteur 1 vers le lecteur 1 22 Copie du lecteur 2 vers le lecteur 2 1 Lecture du disque 1 2 Lecture du disque 2 10 Copie du lecteur 1 vers la mémoire 20 Copie du lecteur 2 vers la mémoire 01 Copie de la mémoire vers le lecteur 1 02 Copie d ela mémoire vers le lecteur 2 V Permet de mettre/oter la vérification lors de la copie (SPACE ou RETURN) pour commencer De plus on peut modifier certains paramètres ce qui permettra la lecture/écriture avec des formats non standards. Voici la liste de ces paramètres: 0007=00 N° de volume désiré ou 0 si c'est le mème que l'original 0008=00 N° de piste de départ 0009=22 N° de piste de fin 0010=08 Nombre de d'essais de lecture maximum: 1 à 9 et A à Z 0011=03 Nombre maxi de vérifications après l'écriture. 0012=10 Délai de mise en route du moteur pour la lecture. Maxi 7F. 0013=10 Délai de mise en route du moteur pour l'écriture. Maxi 7F. 0014=80 Délai de positionnement du bras (Seek Off) en lecture. Le DOS utilise FF, valeur maxi. Un délai de 00 est suffisant et permet de gagner 1s lors de la copie. 0015=80 Délai de positionnement du bras (Seek Off) en écriture. Ne pas mettre de valeur inférieure à 80 sinon le lecteur va commencer à écrire avant que le bras soit positionné. 0016=0B Nombre d'octets de synchro avant le champ adresse (il y en a toujours 5 de plus que le nombre indiqué). La valeur par défaut met 16 octets de synchro, la valeur 01 en met seulement 6. Une valeur trop basse va permettre l'écriture par dessus le champ adresse suivant; une valeur trop grande ne permettra pas d'écrire les 16 secteurs sur la piste. 0017=08 Nombre d'octets de synchro avant le champ de donnée (voir 0016). 0018=00 Ecriture alternée sur les lecteurs 1 et 2. La valeur FF permet d'écrire alternativement sur les deux disques et permet de gérer au mieux la mémoire en optimisant les duplications. Pour modifier un paramètre, taper les 4 chiffres de son adresse et taper RETURN: la valeur utilisée est affichée. Tapez alors une autre valeur. CLEAR TRACK STATUS DISPLAY: La ligne située sous les numéros de piste ne s'efface pas automatiquement. Avec la commande /, vous effectuez le rafraichissement de cette zone à volonté. EDITEUR DE DISQUE D'OCTET ET DE MEMOIRE: Avec N vous passez en mode Editeur de Disque (en fait c'est un Nibble Editor). Le curseur se déplace avec les touches I,J,K,M ou avec les flèches sur les //e et //c. Les touches '<' et '>' font avancer/reculer d'une page en mémoire. Les touches ',' et '.' permettent de se déplacer dans le buffer. CTRL-A vous activez/désactivez l'affichage ASCII. Avec 'B' vous passez du mode byte au mode nibble. En mode nibble, les octets de synchro sont en inverse. CTRL-R permet de charger une piste dans le buffer. CTRL-W va écrire le buffer sur une piste. (Si vous ne spécifiez pas les pistes de départ et de fin, LS attend que le buffer soit plein avant d'écrire). CTRL-V permet de vérifier le début de piste: placez le curseur sur le nibble à partir duquel se fera la vérification. CTRL-I permet d'insérer des nibbles dans le buffer, à droite de votre curseur. CTRL-D efface des nibbles CTRL-F recherche de nibbles. En tapant RETURN, on cherche la chaine de nibbles stockés dans PATO, 'L' vous demande la longueur (1-F). CTRL-B déplace le curseur sur le début de piste CTRL-E déplace le curseur sur la fin de piste '(' définit la position du curseur comme étant le début de piste ')' définit la position du curseur comme étant la fin de piste 'S' le nibble sous le curseur devient l'octet de synchro 'N' remet le nibble en état normal 'C' passe en mode CHANGE 'H' affiche le buffer sur l'écran HGR 'HG' imprime l'écran HGR (si l'imprimante est graphique). L'initialisation de l'imprimante se fait avec le paramètre GR.CHARS. 'G' à partir du mode texte, va afficher une représentation du buffer en mode texte. - (.) veut dire que les nibbles de la chaine sont normaux - ( ) en inverse caractérise les octets de synchro - (+) signifie une combinaison de normaux et de synchro 'D' est la commande de décodage de l'adresse en 16 secteurs. Les 4 premiers nombres sont l'adresse du buffer suivi de la lettre V et du n° de volume en hexa, un nombre à deux chiffres avec (/) puis encore une nombre à deux chiffres pour la piste/secteur. A la suite, on trouve '?', 'CS', ou '**'. Le '?' signifie que le checksum ou le prologue est incorrect. 'CS' signifie que le checksum du champ de données est incorrect et '**' signifie que les données sont incorrectes ou qu'on est en 13 secteurs. En tapant '#' on affiche la piste dans le buffer de '(' à ')'. CTRL-S effectue l'analyse du mode de lecture de la piste afin de positionner les pointeurs en vue de la prochaine écriture. CERTIFIER LES DISQUES: Cette fonction s'appelle en tapant C à partir du menu principal de LS. Cela permet de vérifier si une disquette n'est pas abimée physiquement. ATTENTION: cet utilitaire détruit le contenu de la disquette à certifier. Indiquez le lecteur de disque concerné, la piste de départ et de fin ainsi que l'incrément. Mettez la disquette à certifier et tapez ESPACE. Cette fonction écrit une suite d'octets sur chaque piste. Ensuite les pistes sont relues et si la suite d'octets qui s'y trouve n'est pas conforme à l'original, LS affiche une erreur sur la piste concernée. Il y a trois sources d'erreurs: ce peut ètre du à un mauvais fonctionnement du lecteur de disquette tant en lecture qu'en écriture, ou plus vraissemblablement il s'agit d'une altération physique de la disquette. Chaque piste correctement écrite/lue est marquée par un point (.) et les erreurs sont signalées par un (*). LES UTILITAIRES 16 SECTEURS: Ceci vous donne la possibilité de traficoter les disques au format 16 secteurs normal (Dos 3.3,Prodos,CP/M...). Ces fonctions s'appellent par 'U' à partir du menu principal. La Vérification en 16 secteurs: En tapant 'V' à partir de ce menu, vous passez dans l'utilitaire FAST DISK VERIFY. Indiquez le n° du lecteur où se trouve la disquette à tester et LS va tester les pistes 0 à $22. Chaque piste correctement lue est marquée par un point (.) et les erreurs sont signalées par un (*). S'il y a un chiffre, cela représente le nombre de fois que le lecteur a du recommencer sa lecture pour lire correctement les 16 secteurs de la piste. Sous les pistes se trouvent les indications relatives aux secteurs: - un point (.) signifie que le secteur concerné a été correctement lu du premier coup. - un 'A' inverse signifie qu'une erreur est intervenue dans la lecture des champs adresses. Un 'D' inverse signifie qu'une erreur est intervenue dans le champ données. - un nombre indique le nombre de fois que la lecture a été faite avant de décoder correctement les informations. Le Formatage en 16 secteurs: Tapez 'F' pour formatter une disquette. Cet utilitaire permet de ne formatter qu'une partie de la disquette avec le n° de volume de votre choix. Avec cet utilitaire, on peut reformater une piste abimée. Mais ATTENTION, les données situées sur la piste reformatée sont définitivement perdue. Indiquez le lecteur utilisé, la piste de départ et de fin et l'incrément puis le n° volume. Comparaison de disques 16 secteurs: Tapez 'C' pour accéder à cette fonction. Chaque secteur de la disquette est lu et un double octet (16-bit) de checksum lui est associé et est comparé au checksum du secteur original. S'ils ne correspondent pas, un 'C' apparait en regard du secteur. Lors de la première lecture, il est normal d'avoir beaucoup de C: on n'a pas de référents en mémoire. Lorsque le dique à comparer est stocké en mémoire (par ses octets de checksum), mettez la deuxième disquette et tapez ESPACE: la comparaison se fait. Chaque comparaison réussie se traduit par un point (.) en face du secteur correspondant. En cas de non identité, un 'C' est affiché. On peut aussi obtenir des 'A' ou des 'D' inverse selon qu'on a détecté ou non des erreurs dans les champs adresses ou données. Signature 16 Secteurs Synchronisée: Cet utilitaire permet de détecter la synchronisation des pistes sur un disque 16 secteurs. Indiquez le drive utilisé: la lecture commence piste $00 secteur $00, ensuite on passe à la piste 1 et le n° du premier secteur lu est affiché; on passe à la suite jusqu'à la piste $22. La signature de la synchronisation est affichée sans fin et va varier en fonction des fluctuations de vitesse de la tète de lecture. Vous quittez la fonction par ESC à tout moment. On peut aussi utiliser cette routine pour déterminer quel programme de copie a été utilisé pour dupliquer la disquette. Cette signature est normalement constituée d'une suite de chiffres hexa en sens croissant ou décroissant. Exemple: 0FEDCBA9876543210FEDCBA9876543210FE Cette progression est décroissante de (-1): chaque nombre est plus petit que son prédécesseur de 1. La table suivante donne la signature caractéristique de certains copieurs. Notez que la seule écriture sur disque ne modifie pas la signature; il faut impérativement qu'il y ait formatage. Program Signature Identificateur ------------ ------------- -------------- Dos Init 0DA741EB85... (-3) Locksmith Format 048C048C... (+4) Locksmith Fast Backup 0FEDCBA987... (-1) Penulta Copy 0ECA8... (-2) Copywriter (no verify) 0000000... (+0) Copywriter (verify) 0FEDCBA987... (-1) Disk Muncher 0D852FC964... (**) Rack Pat 0D85630DA5... (**) La signature à la mème progression uniquement si le formatage a été fait en une seule passe. Par exemple, la signature suivante a été générée par Locksmith FAST DISK BACKUP en une seule passe avec une carte 128K. 0FEDCBA9876543210FEDCBA9876543210FE Chaque nombre hexa est inférieur de 1 au précédent, conformément à la table spécifiée plus haut. Maintenant examinez la signature suivante: 0FEDCBA9873210FEDCBA6543210FED98765 ! ! ! Dans ce cas la progression est encore de (-1), sauf aux trois endroits marqués par un ! où la progression est de (-4). Ceci provient du fait que ce disque a été créé par Locksmith FAST DISK BACKUP sans carte RAM. Toutes les 10 pistes, une interruption du processus de copie se produit (on lit la disquette originale par tranche de 10 pistes). Si la copie avait été effectuée avec l'option VERIFY du Locksmith FAST DISK BACKUP, la progression aurait été de (-3). Ainsi à partir de cette signature on peut découvrir pas mal de choses interessantes sur l'origine de la disquette. LES UTILITAIRES DOS 3.3: En tapant 'D' à partir du menu principal, vous passez dans les utilitaires DOS 3.3.. Catalog Disk: L'option 'C' du menu UTILITIES permet d'afficher le catalog du disque. Les fichiers effacés sont marqués avec un"D". Load fichiers DOS en mémoire: L'option 'L' permet de charger un fichier en mémoire pour l'éditer. Le fichier est chargé entre $2000 et $7EFF. La TSL (track/sector list) est placée à partir de $7F00, ainsi on peut sauver le fichier sur disque à partir de l'éditeur. Carte d'occupation du disque: La touche 'M' affiche la carte d'occupation du disque. Les secteurs libres sont marqués par '-' et les secteurs utilisés par '#'. Les secteurs vont de bas en haut et de gauche à droite. Tapez ESPACE pour revenir au menu. Modifier le nombre de secteurs utilisés: Certaines erreurs DOS modifient le décompte des secteurs utilisés par un fichier. En tapant 'K' dans ce menu, vous corrigez automatiquement ces erreurs. Les secteurs utilisés par le fichiers sont dénombrés et le résultat est comparé avec l'information du catalogue. En cas de différence, les deux nombres sont affichés et LS vous demande de taper ESPACE pour faire les corrections (ESC permet de quitter). Vérifier la validité du VTOC: La VTOC (volume table of contents) est une bit-map des secteurs libres d'un disque. Le catalogue est la liste des noms de fichiers avec une ou plusieurs TSL (track/sector lists) par fichier indiquant quels sont les secteurs attribués à chaque fichier. Si vous faites une erreur de manipulation alors que des fichiers sont ouverts, il se peut que la VTOC et le catalogue ne correspondent désormais plus à la réalité. Avec l'option 'V', vous vérifierez la validité du VTOC/Catalog. L'affichage ressemble à celui de lacarte d'occupation (option M): il y a les "-" (secteurs libres) et les "#" (secteurs utilisés). De plus 3 types d'erreurs peuvent ètre détectés et affichés: - les secteurs marqués dans la bit-map mais non utilisés par un fichier sont notés par un "A" inverse. - les secteurs utilisés par un fichier mais non notés sont affichés par "U" inverse. Dans ce cas, certaines informations du fichier pourront ètre effacées par les prochaines sauvegardes. La seule solution consiste à ne plus utiliser la diquette pour faire des sauvegardes et à copier les fichiers sur une nouvelle disquette avec l'utilitaire FID de la disquette DOS 3.3 MASTER. - les secteurs alloués à plusieurs fichiers en mème temps sont notés par "2" inverse (2 fichiers en mèlme temps) ou "3", etc. Ceci signifie qu'un fichier est écrit par dessus un autre. Dans ce cas, copiez les fichiers sur une autre disquette avec l'utilitaire FID de la disquette DOS 3.3 MASTER. Oter le DOS du disque: En tapant 'R', vous otez le DOS du disque et libérez ainsi 32 secteurs pour sauvegarder vos fichiers. Ces 32 secteurs appartiennent aux pistes $1 et $2. On peut également libérer la piste $0, mais vous ne pourrez sauver de fichier sur cette piste, mème si elle est déclarée libre. La carte d'occupation est affichée, en tapant ESPACE, le DOS est oté, la VTOC est remise à jour et la carte d'occupation est réaffichée (avec les pistes $1 et $2 libres !) UN-DELETE un fichier: En tapant 'U' vous pourrez récupérer un fichier préalablement effacé sous réserve qu'aucune sauvegarde n'ait été effectuée depuis l'effacement du fichier. Tapez ESPACE pour revenir au menu. Trier le catalogue: Tapez 'A' pour trier le catalogue puis tapez ESPACE pour conserver ce catalogue trié sur disquette. Coder un fichier: Après avoir tapé 'E' et donné le nom du fichier à coder, le catalogue est lu pour vérifier la présence du fichier et on vous demande un mot de passe. Celui-ci n'est pas affiché et on vous demandera de le taper une deuxième fois pour confirmer. Ce mot de passe sert à coder le fichier; ne l'oubliez pas: c'est le seul moyen de décrypter le fichier ! Si vous le perdez, votre fichier ne pourra plus jamais ètre décodé. Décoder un fichier En tapant 'D' vous décoderez un fichier préalablement codé. Cette fonction est la symétrique de la précédente. Si vous ne donnez pas le mot de passe ayant servi à coder le fichier, vous obtiendrez un résultat curieux ! Notez que vous pouvez coder un fichier deux fois de suite. Par exemple une fois avec le mot de passe "LOCK" puis avec le mot de passe "SMITH", le décodage se fera en ordre inverse: d'abord avec "SMITH" puis "LOCK". Faites une copie de sécurité des fichiers cryptés: en effet toute tentative de décryptage avec un mauvais mot de passe va coder une fois de plus le fichier. Pour décoder un fichier altéré par une tentaive de décodage erronée, il faut d'abord recoder le fichier avec le mème mot de passe (et réciproquement). ADVANCED DISK RECOVERY: Lorsque des erreurs de type I/O se produisent sur votre disquette, il est temps de procéder à une analyse de celle-ci. En effet, il se peut que votre diquette a été écrite avec un drive défectueux. Locksmith Advanced Disk Recovery (ADR) permet de récupérer les informations écrites sur un disque et que vous ne pouvez plus reprendre pour une des raisons suivantes: - piste mal alignée - vitesse de rotation du lecteur non conforme - décentrage de la disquette Un mauvais alignement de la tète de lecture est un problème qui ne pourra qu'empirer avec le temps pusi qu'il est lié à l'usure du mécanisme du drive. Le réalignement de la tète de lecture ne peut se faire que par un technicien compétent. Cependant voici les signes avant-coureur d'une telle situation: une disquette écrite sur un drive ne peut ètre lue par un autre lecteur. Un décalage de 1/4 de piste est suffisant pour produire une erreur, spécialement sur les pistes centrales (pistes $20, $21, $22) où la densité des informations est plus importante. Les problèmes de décentrage (courants sur les vieux lecteurs où sur les disquettes sans anneau central de renforcement) sont imprévisibles et très graves. Lorsque vous fermez la porte du drive, le sytème d'entrainement descend au centre de la disquette. Si celle-ci est mal centrée, le sytème la repositionne correctement. Mais il arrive que la disquette reste mal positionnée: lors de la lecture, vous entendrez un bruit d'enfer; il suffit alors d'ouvrir et de refermer la porte du lecteur pour que la disquette se repositionne correctement. Cependant, si cette erreur de positionnement se fait lors du formatage ou de l'écriture, les données seront écrites avec un disque mal centré et elles ne pourront ètre relues lorsque le disque sera positionné correctement. L'écriture avec un lecteur tournant trop vite va faire que la fin d'un secteur va mordre sur le champ adresse. Donc le champ données est correct mais la disparition du champ adresse causera une erreur I/O lors de la lecture. Locksmith Advanced Disk Recovery va permettre de relire une disquette avec les pistes mal-alignées, avec un mauvais centrage ou une vitesse non conforme. Les données seront alors écrites sur un disque vierge préalablement formatté. Indiquez les disques source et destination ainsi que l'intervalle à recopier (normalement $00 à $22) et Locksmith Advanced Disk Recovery va lire le disque abimé. si vous voulez simplement voir si LS peut lire le disque altéré sans ré-écrire les informations sur un dique vierge, tapez 0 pour le n° du lecteur destination. Les pistes sont lues 6 par 6; la ligne du haut affiche le résultat du processus et la partie inférieure de l'écran affiche les secteurs lus (dans l'ordre naturel c'est à dire (0,7,E,6,D,...). Voici ce que LS va indiquer en face de chaque n° de secteur: - (.) lecture correcte sur l'original - (A inverse) prologue adresse non trouvé - (D inverse) prologue adresse trouvé, mais prologue donné non lu - (+) lecture effectuée sur le 1/4 ou 1/2 piste supérieure - (-) lecture effectuée sur le 1/4 ou 1/2 piste inférieure - (;) indique qu'il manque un champ adresse, mais que le problème est corrigé Remarquez que seuls les messages A et D inverse signifient que la lecture a été impossible. Voici un exemple de disquette décentrée dont les données ont été relues par LS: DSK RECOVER .00 .25 .50 .75 HEX 000000000000000011111111111111110000 TRK 0123456789ABCDEF0123456789ABCDEF0123 0++--.+.-.+.-+.-.+.-.+.--+.--+.--+.-0 7+.--++--.+-.+.-++--.+.-.+.--+.-.+.-7 E+.-.+.-.++-.+-.+.--.+--.+.-.+--.+--E 6+.-.+.-.+.-.+-.+.-.+.--.+--..--.+--6 D+--.+.-.+.-+.-.+.-.+.-.+.--..--+.--D 5.--++--++.-+.-++--.+.-.+.-.+.-.+.--5 C.-.+.-.++--+.-+.--.+--.+.-.+--.+.-.C 4.-.+.-.+.-.+-.+.-.+.--.+--.+--.+--.4 BD-++.-.+.-.+-.+.-.+.-.+.--.+--+.--+B 3A.++--++.-..-.+--.+.-.+.-.+.-.+.--+3 AA.+.-.++--+.-+.--+.--.+.-.+.-.+--.+A 2A.+.-.+.-.+.-+.-.+.--+.--.+.-..--.+2 9.++.-.+.-.+-.+.-.+.-.+.--+.-.+.--.+9 1.++--++.-.+-.+--.+.-.+.-.+.-.+.-.+.1 8+.+-.++--++-.+-.+.--.+.-.+.-.+--.+.8 F.+.-.+.-.+.-+.-.+.--+.--.+--+.--.+-F Il arrive qu'en relisant un disque décentré, certaines données situées sur la piste 0 ne soient pas récupérables. Ceci provient du fait qu'il faudrait lire en dessous de la piste 0, et que c'est physiquement impossible. En général cela ne pose pas de problème, puisque cette piste contient le DOS. TEST DE VITESSE: Avec 'S' vous passez en mesure de vitesse de rotation du lecteur. Il faut indiquer à quelle vitesse vous voulez effectuer le test: la première est 300 RPM. C'est la vitesse normale recommandée par le fabriquant. Le second choix sert à calibrer votre lecteur à sa vitesse optimale: c'est à dire à une vitesse plus petite que la normale (à utiliser pour les copies). Avec cette vitesse, vous ètes sur de copier toute la piste de l'original indépendamment du drive ayant servi à la créer. La troisième option sert à calibrer votre lecteur à la mème vitesse que l'original. Vous devrez insérer l'original pour que LS détermine la vitesse à laquelle les données ont été enregistrées. Ensuite vous aurez trois possibilités d'affichage des résultats. Normallement vous prendrez FINE ADJUST. Les deux autres options ne sont utilisées que pour les diques dont les vitesses sont tellement éloignées de la normale qu'on ne pourrait lire le résultat en FINE ADJUST. Ensuite indiquez le nombre de fois que la vitesse sera controlée avant que le résultat soit affiché. En principe un test par affichage suffit. Lorsque cela est fait, on vous demande de mettre un disque vierge dans le lecteur à tester et de presser ESPACE. Alors LS va écrire/lire des données sur la piste 0 (c'est pour cela qu'on utilise un disque vierge: la piste 0 sera en effet détruite). EFFACER LES DIQUES: Avec 'E' on efface tout ou partie d'une disquette. Le message de mise en garde suivant est affiché: THIS UTILITY DESTROYS DATA ON THE TARGET DISK. Lorsque le disque est effacé, les E sur la ligne du haut indiquent quelles sont les pistes effacées. Certaines protections consistent à détecter si une piste (ou plusieurs) sont vierges. La seule façon de reproduire la protection est donc d'effacer la (les) piste (s) précédemment effacées. INSPECTOR/WATSON: Si vous avez chargé Inspector/Watson en carte RAM en tapant 'L' dans le menu principal, il suffit de booter la disquette contenant ces utilitaires pour qu'ils soient chargés en RAM. Vous y accédez ensuite en tapant I à partir de Locksmith. Les programmes Inspector/Watson fonctionnent alors normalement à une exception près: lorsque Inspector/Watson redonnent le controle à LS, le buffer par défaut sera $4000 au lieu de $0800, car $800 est utilisé par LS. Si vous n'avez que Inspector, le controle sera passé à cet utilitaire. Si vous avez Inspector ET Watson, le controle sera passé à Watson. Toutes les commandes sont alors disponibles sauf ESC. Pour quitter Inspector/Watson tapez 'Ctrl C' et voius repassez à LS. Si Inspector/Watson est en RAM du slot 0, ESC permet également de revenir à LS. Si Inspector/Watson est en ROM, vous devrez utiliser 'Ctrl C' pour quitter. Pour de plus amples informations sur Inspector/Watson, veuillez consulter leurs manuels respectifs. FORMAT DES PISTES (13 et 16 secteurs): Sur Apple II, il y a plusieurs systèmes de formatages. Par exemple, on peut utiliser 13 secteurs par piste ou, sur les modèles récents utilisant des algotrithmes perfectionnés, on peut avoir 16 secteurs par piste. Ces deux formats sont fondamentalements identiques, seule la manière de coder les informations est différente. De plus les Prologues adresse diffèrent de manière à identifier le système utilisé. Puisque le format 13 secteurs est tombé en désuétude, nous perlerons du format 16 secteurs et ensuite nous pointerons les différences entre les deux sytèmes. Une piste est formée de secteurs (16 ou 13): chaque secteur contient un champ adresse et un champ données. Le champ adresse contient des informations sur le champ données qui le suit. Le schamps sont séparés par des 'vides' remplis d'octets de synchro. Ces octets sont des nibbles spéciaux qui obligent la carte controleur à se synchroniser, rendant possible la lecture du champ suivant. Les champs adresse et données contiennent chacun un Prologue, des informations et un Epilogue. Les Prologues du champ adresse sont D5 AA 96 (ou D5 AA B5 en 13 secteurs), suivis de 4 informations codées en double nibbles. Deux nibbles consécutifs indiquent le n° de volume, le n° de piste, le n° de secteur et le checksum. Ce checksum est un OU exclusif des trois autres données. Vous trouverez une table dans ce manuel pour convertir ces doubles nibbles en les valeurs qu'ils représentent. Ensuite vient l'Epilogue du champ adresse: DE AA. Après les octets de synchro, on trouve le champ de données: il y a un prologue (D5 AA AD), suivi de 342 nibbles (ou 410, en format 13 secteurs). Ces nibbles sont codés suivant une table 6 bits (voir la table "Data Field Nibble Encoding"). En 13 secteurs on utilise une table 5-bits. après les données il y a un octet de checksum puis l'épilogue DE AA. Certaines protections sont basées sur de smodifications des Prologues et Epilogues. ANALYSEUR DE BITS DE SYNCHRO (Framing Bit Analyzer): Les bits de synchro sont les bits 0 qui se trouvent entre les octets de données sur le disque. Ces nibbles sont appelés octets de synchronisation. Les disques 16 secteurs utilisent une synchro en 10-bits ou 2 framing bits. L'analyse statistique utilise un décomptage précis du temps pour décoder les données. On appelle l'analyseur par '$' à partir de l'éditeur de disque et en lisant une piste. Exemple: Passez en mode Editeur de Disque et tapez CTRL-R pour lire une piste. Placez le pointeur '(' au début du champ adresse (D5 AA 96). Descendez le curseur d'environ 10 lignes et placez le pointeur de fin ')'. Ensuite reculez le curseur sur DE AA après le début du champ adresse. L'analyseur utilise les données à partir du pointeur de départ jusqu'à l'octet immédiatement avant le curseur comme une 'clef'. Si vous mettez le '(' avant l'octet D5 et le curseur sur l'octet DE, la longueur de la clef sera de $0B octets. Passez dans l'analyseur en tapant '$'. L'affichage montre les données analysées à gauche et les statistiques à droite. Les commandes suivantes sont alors opérantes: SPACE fait une pause, vous pouvez examiner les statistiques RETURN pour recommencer < et > font défiler T passage des statistiques de timing aux nibbles A droite de l'écran, vous lirez une information du type: R=0007 F=07 ?? -- ++ 0 02 1 00 25 2 25 03 3 02 00 4 01 01 5 00 18 6 0B 00 7 00 07 8 03 La valeur R est le nombre de lectures effectuées; F= est le nombre de lectures où la 'clef' des données a été trouvée. Comme le buffer est limité, si on donne une grande zone de données il se peut que le buffer ne contienne pas totalement les données spécifiées. Le tableau représente les différences entre la donnée lue et les valeurs "idéales" 10, 20, 30, etc. Ces différences sont comprises entre -7 et +7, avec 00 comme valeur idéale. Par exemple, dans le tableau précédent, le décompte pour +1 est 25 (hex). Cela signifie qu'il y a 25 fois des nibbles avec des valeurs de timing plus grand de 1 par rapport aux valeurs idéales (11, 21, 31, etc.). Le décompte pour "8" est 03; cela signifie qu'il y 3 fois des valeurs de timing situées juste au milieu des valeurs idéales. Cela indique qu'il faut poursuivre l'analyse. Le "??" est affiché lorsque les valeurs pour les décomptes +- 6,7, et 8 sont différents de zéro et indiquent donc qu'il faut plus d'informations. Lorsque les octets sont affichés à gauche de l'écran, l'état inverse/normal des octets indique le nombre de framing bits après l'octet. Le mode normal signifie qu'il n'y a pas de framing bit, les deux chiffres en inverse pour 2 framing bits et un chiffre en inverse pour 1 framing bit. Le mode flash signifie qu'il y a au moins 3 framing bits. Si l'octet de donnée à le bit fort off, cela veut dire qu'au moins une lecture s'est produite avec la donnée qui ne correspondait pas après la clef. Cela provient parfois d'une perte de la synchro lors de la lecture ou par une clef trop petite ce qui fait que plusieurs parties de la piste sont analysées et non une seule. `LOAD RAM CARD: En tapant L à partir du menu principal, on charge les pistes $12, $13, et $14 aux adresses $D000-$FFFF de la carte RAM située dans le slot 0 (ou les 16K supérieurs des //e et //c). On peut donc charger Inspector ou Watson par ce procédé: 1. Booter Inspector ou Watson. 2. Entrer dans Inspector ou Watson, mettre le disque LS et taper: B D 0 T 1 2 CTRL-W 3. taper CTRL-I 15 fois. Ceci va écrire Inspector ou Watson sur la disquette LS. Normalement, LS contient le BASIC INTEGER et le Moniteur sur les pistes $13 et $14. Inspector/Watson sera sur la piste $12. LES PARAMETRES: En tapant '*' vous afficherez et modifierez certains paramètres en utilisant le Langage de Programmation LS. Pour afficher un paramètre, tapez "SHOW" suivi du nom du paramètre. Par exemple, pour lister le contenu du paramètre SLOT, tapez SHOW SLOT. Pour changer une valeur, tapez le nom du paramètre suivi de la nouvelle valeur: exemple SLOT 4. en cas d'erreur, LS va émettre un bip et refusera la modification. Voici un patch très pratique pour lire un disque où les secteurs sont normalement non lisibles. Ce patch de la RWTS va empècher le recalibrage du bras après une erreur I/O: BDCC 4C C1 BD. Pour remettre la valeur normale, taper BDCC 10 F3 AD. Pour remettre les valeurs originales aux paramètres, rebootez votre disquette LS. Copie avec des paramètres particuliers: La fonction Text Editeur permet de sélectionner un fichier de paramètre pour faire une copie. Pour cela tapez 'N' pour NEW (effacer le buffer) puis 'B' pour copier (Backup). Si le disque de paramètre n'est pas dans le lecteur, un message vous invite à le mettre et la liste des fichiers disponibles est affichée. Déplacez la barre lumineuse avec les flèches pour faire votre choix (ou CTRL-K, CTRL-J). CTRL-N et CTRL-P permettent de changer de page. Vous pouvez aussi taper la première lettre du nom du fichier pour vous déplacer rapidement dans la liste. Tapez RETURN pour confirmer la sélection. Charger un fichier de paramètres: Tapez 'L' pour charger un fichier de paramètres et suivez les indications pour effectuer la copie. Sauver un fichier de paramètres: 'S' va sauver le fichier sur la disquette de paramètres. Vous pouvez créer votre propre fichier ou transférer un fichier d'un disque sur un autre. New - créer un espace de travail vierge: 'N' efface l'Editeur de Texte et permet de rentrer les paramètres. l'Editeur de Texte: Pour entrer dans l'Editeur de Texte, tapez 'E'. Vous quittez l'éditeur avec ESC . Avec 'N' vous effacez la zone de travail pour saisir un autre fichier. L'Editeur de Texte est un éditeur avec numérotation des lignes: elles apparaissent automatiquement en inverse à gauche de l'écran. Elles sont exprimées en hexa et celles qui font référence à une portion du fichier avec ".I" sont exprimées en langage LPL (Locksmith Programming Language). Une ligne est constituée de 38 cractères plus les deux caratères pour la numérotation. Si une entrée doit tenir sur plusieurs lignes, la première ligne doit se terminer par le signe - Il y a deux curseurs dans l'Editeur: si le n° de la ligne clignote, le curseur est sur la ligne. Si un caractère clignote, le curseur est à cet endroit. On peut insérer des caractères à partir de la position du curseur avec CTRL-I, et en effacer avec CTRL-D. Utilisez 'X' pour vérifier la syntaxe de votre texte une fois que vous avez terminé la saisie. RAM CARD UTILITIES: Avec 'R' on sélectionne les utilitaires RAM card. Ils sont très documentés et on dispose d'un test de la RAM card avec copie de la RAM vers la mémoire principale (2000-5FFF) et réciproquement. 2000-2FFF RAM card pages D0-DF alternate 3000-3FFF " " D0-DF 4000-4FFF " " E0-EF 5000-5FFF " " F0-FF SCAN DISK: 'Q' permet de déterminer quelles sont les pistes réellement utilisées sur le dique à dupliquer. Cette option cherche les zones du disque contenant des données. L'affichage se fait en HGR et se lit du bas vers le haut. La première fois que vous utilisez cet utilitaire, prenez un disque DOS 3.3 normal pour vous familiariser avec l'affichage d'un disque normal. Les séries de points sous chaque piste correspondent aux octets de synchro entre chaque secteur. Normalement sur un disque 16 secteurs, il doit y avoir 16 ou 17 points, un disque 13 secteurs en a 13 ou 14. Sur un disque 16 secteurs, il y a un point plus gros que les autres: c'est ce qui correspond aux octets de synchro de la piste 0. Vous noterez le décalage des points d'une piste à l'autre: ceci est du au temps mis par la tète de lecture pour passer d'une piste à l'autre. Ensuite, essayez de scanner de la piste .5 à 22.5 par pas de 1. Vous verrez de longues lignes blanches sans forme particulière: cela veut dire qu'il n'y a rien sur ces pistes. Les pistes en spirales (1/4 de pistes) affichent des lignes blanches séparées par des zones noires. LE BOOT TRACER: Le Boot Tracer s'adresse aux utilisateurs chevronnés. Il simule le fonctionnement du processeur 6502 avec une vitesse permettant de suivre le déroulement des opérations lors du boot d'une disquette normale ou protégée. Vous appelez cette fonction avec 'A'; il faut une carte RAM d'au moins 16K (les 16K supérieurs des //e et //c conviennent parfaitement). LS vous demande le slot où se situe votre carte RAM: normalement vous répondez 0. L'écran est effacé et une ligne en inverse apparait en haut de l'écran. Tapez RESET pour entrer dans le debugger et bootez un disque par 6CTRL-P. Si le disque boote dans la carte RAM, cela va détruire le fonctionnement du debugger. La ligne d'informations: La ligne du haut affiche normalement: FA62 CLD A=00 X=00 Y=00 P=34 S=FD Les 4 premiers caractères sont le contenu de PC avec l'instruction à exécuter; ensuite vous trouvez les registres A, X, et Y puis le registre d'état P et la valeur du pointeur de pile. Tapez alors 'R' puis une touche de A à Z: la barre d'affichage sera placé à un autre endroit de l'écran (avec Y et Z on ote l'affichage de l'écran). Le mode Attente: Le simulateur est en mode ATTENTE. Le programme fonctionne et s'est interrompu à l'adresse indiquée. Tapez CTRL-C pour rendre opérantes les instructions du 65C02 si vous possédez un //e kitté ou un //c. La touche 'S' permet de lancer l'exécution du programme sous controle du débugger. L'affichage va changer rapidement lors de l'exécution du boot. Le "beep" que vous entendrez est différent du bip normal. Pour stopper le simulateur, tapez CTRL-Z et vous passez en mode ATTENTE. On peut redéfinir la touche d'arrèt (par ex si CTRL-Z est utilisé par votre programme). Pour cela, stopez avec CTRL-Z, puis tapez CTRL-X suivi de la touche qui servira désormais de commande d'interruption. Passez en mode ATTENTE et tapez ESPACE pour faire avancer le programme pas à pas. Un "+" ou un "-" apparait après les branchements conditionnels selon qu'ils ont été réussis ou pas. En mode ATTENTE, CTRL-Y vous fait passer en mode moniteur et vous pouvez désassembler le programme avec 'L'. Vous revenez dans le simulateur en tapant alors CTRL-Y . Avant de passer en mode moniteur, le simulateur sauvegarde les pages 00 à 07 dans la carte RAM. Lorsque vous reviendrez dans le simulateur, il re-transferrera ces pages dans la mémoire principale pour poursuivre correctement le déroulement du programme. Les autres commandes diponibles en mode ATTENTE: T - Trace jusqu'à ce qu'un JSR ou RTS soit rencontré CTRL-R - simule un RESET: le PC contient le contenu de $FFFC. CTRL-I - simule une interruption IRQ CTRL-F - déconnecte les interruptions IRQ CTRL-N - simule une interruption NMI CTRL-Q - quitter le simulateur et passer en moniteur 1 - mode single-cycle: utilisez ESPACE pour effectuer un cycle du 6502 au lieu de l'instruction complète. 0 - mode instruction: valide uniquement si une instruction est effectuée complètement B - connecte/déconnecte le beep C - connecte/déconnecte le clic CTRL-C - connecte/déconnecte le 65C02 K - place la valeur de la prochaine touche pressée dans le buffer clavier. Lorsqu'une instruction lit le clavier, cette commande permet de rentrer une commande clavier sans passer en mode EXECUTION. ESC - passer au menu du simulateur Les fenètres du simulateur: Tapez ESC à partir du mode ATTENTE: une fenètre est affichée et le curseur est positionné en haut à gauche. Utilisez RETURN et les flèches DROITE et GAUCHE pour vous déplacer dans la fenètre. Positionnez le curseur sur une valeur à changer et tapez la nouvelle valeur. Vous revenez en mode ATTENTE en tapant de nouveau ESC; à noter que CTRL-C annule les modifications faites. Sur la ligne du haut de la fenètre le PC est décalé à droite et aucune instruction n'est désassemblée. Le nombre à gauche sert à lire, écrire et éditer un octet de la mémoire. Tapez une valeur suivie de 'R' pour lire, 'W' pour écrire et 'E' pour éditer. Pour changer le mode d'affichage (texte, graphique, haute résolution ou basse résolution, page 1 ou 2, plein écran ou mixte), tapez l'adresse de commutation ($C050-$C057) puis 'R'. Lorsque vous débuggez un programme utilisant le mode graphique, placez la ligne d'information avec U, V, W, ou X et passez en mode mixte (4 lignes en bas de l'écran). Pour éditer, tapez 'E' et le contenu de la mémoire est affiché en haxa et ASCII. Déplacez le curseur avec les flèches et tapez RETURN. La seconde ligne de la fenètre contient: RU=65 0=I 1=I 2=I 3=S 4=I 5=I 6=D 7=I "RU=65" (decimal 101) est la valeur de mise à jour du registre, c'est le nombre d'instructions simulées avant que PC et les registres soient affichés à l'écran en mode EXECUTION. Si ce chiffre est petit, les registres sont mis à jour après chaque instruction. A ce moment le simulateur fonctionne beaucoup plus lentement du fait du temps mis pour les affichages fréquents. Désigner les Slots: Le reste de la seconde ligne affiche les n° de slots et leurs utilisations. Comme le simulateur est en RAM (indiqué par 'S' comme SYSTEM dans l'affichage des slots), il doit savoir où se trouvent les autres cartes pour les utiliser correctement. Au départ, les slots sont marqués 'I' (INVALID). tout accès à un de ces slots invalide va interrompre le simulateur et vous fera passer en mode ATTENTE. Les valeurs de désignation des slots sont: S - system (simulateur) I - invalid D - carte controleur de disquette A - RAM card de 16K ou 32K B - RAM card de 64K ou plus F - carte Firmware ou carte ROM T - transparent Si la désignation est T, toute commande pour le périphérique connecté à ce slot se fera sans conversion. Le mode TRANSPARENT sera utilisé pour: Les cartes ROM et RAM sélectionnant les bancs entre $D000-$FFFF, qui est utilisé par le simulateur. Les périphériques où le temps d'accès est critique (ex: les lectaurs de disque). Les périphériques utilisant des accès mémoire directs pour modifer les contenus de $0000-$07FF, puisque cette zone est utilisée par le simulateur. Comparaison d'Adresse et Stop: La troisième ligne commence par "PC": c'est la Comparaison d'Adresse et Stop. On peut mettre jusqu'à 4 valeurs de comparaisons. Si le PC contient une des valeurs indiquées, le simulateur effectue un arrèt (STOP) et passe en mode ATTENTE. De plus, une zone de comparaison peut ètre indiquée. Pour spécifier les valeurs de compraison ou la zone de comparaison, modifier la valeur (0 au départ) pour indiquer le nombre d'adresses et tapez ces adresses. Si vous remettez 0, vous annulez les comparaisons. La ligne "MR" est la ligne de 'comparaison avec la mémoire lors de la lecture pour stopper'. On peut aussi spécifier 4 valeurs et 1 zone. Lorsque le simulateur lit une de ces adresses, soit par adressage direct, indirect ou par la pile, il passe en mode ATTENTE. La ligne "MW" est la ligne de 'comparaison avec la mémoire lors de l'écriture pour stopper'. Elle fonctionne comme la ligne 'MR'. Changement du contenu du PC: La zone "PCSW" de la fenètre permet de faire des échanges de valeur dans le PC. On peut spécifier 4 paires de valeurs. Si le PC contient la première valeur d'une paire, le simulateur lui met immédiatement la deuxième et l'exécution se poursuit. Ceci est pratique pour sauter les boucles non indispensables (ex les boucles de ralentissement). Au départ, 3 paires de valeurs sont données: FCA8 FCB3 - routine d'attente moniteur BA00 BA10 - délai de calibrage du bras en DOS 3.3 BD9E BDAB - délai de mise en route du moteur en DOS 3.3 Tableau des valeurs du PC: Les 8 dernières lignes contiennent les 64 dernières valeurs du PC. Les interruptions du programme: On interrompt le déroulement du programme suivi par le simulateur et on passe en mode ATTENTE quand une des conditions suivantes est remplie: - la touche STOP est tapée - Un opcode non valide est rencontré (il est désassemblé sous la forme ???) - un JSR ou un RTS est rencontré alors qu'on est en mode "T" (trace) - lecture ou écriture sur un périphérique dont le slot est marqué "I" (invalide) - une comparaison avec une valeur de STOP pour PC, MR, ou MW est rencontrée en cours d'exécution - on essai d'écrire sur disquette - on essaie d'accèder à certaines routines d'erreurs (en particulier $C060 et $C068 pour la lecture et l'écriture) Remarques diverses: La lecture de disquette se fait en lisant une piste complète puis en passant les octets un à un au simulateur. Lorsque le simulateur a besoin d'un octet, le premier octet du buffer est envoyé. Comme le simulateur n'a pas besoin que le bit de poids fort soit analysé, les temps de framing bit ne sont pas présevés. De plus la piste lue n'est pas synchronisée avec les autres pistes. Et enfin on ne peut écrire sur disquette. Lorqu'on lit une diquette, la piste lue est conservée en RAM tant qu'une autre piste (d'un autre rang) n'est pas lue ou que le slot n'est pas changé. Ce n'est que si cette image de la piste n'est pas valide que la disquette est lue une deuxième fois. Cependant, si l'utilisateur effectue un CATALOG sous controle du debugger, puis qu'il change la disquette et qu'il fasse un deuxième CATALOG, le contenu du catalogue de la première disquette sera affiché car cette opération n'a pas obligé la tète à lire une autre piste. Pour vider le buffer, changez la désignation du slot en mettant 'I' puis 'D' lorsque le simulateur est en fonction Le simulateur est doté d'une analyse de secteur: c'est à dire que si le programme lit des octets et qu'il effectue une comparaison avec $D5, le simulateur trouve le prochain $D5 dans le buffer et le transmet au programme, au lieu d'attendre que tous les octets soient lus en attendant de trouver un $D5. Les adresses du joystick ($C064-$C067 et $C06C-$C06F) sont simulées correctement si l'instruction utilisée est semblable à la routine moniteur en $FB1E ($PREAD). Si ce n'est pas le cas, on passe en mode ATTENTE. Une dernière remarque: le simulateur RALENTI l'exécution du programme. Les 30 secondes de boot d'un disque vont durer pas loin de 40 minutes avec le débugger ! Cependant les informations ainsi obtenues sont parfois précieuses ! Il faut savoir ètre patient ! LE LANGAGE DE PROGRAMMATION LOCKSMITH: Ce langage LPL est un outil permettant de donner des directives à Locksmith. Ainsi vous pourrez définir des procédures de copie très particulières, rechercher des suites d'octets, restaurer des disques endommagés ...etc. Les commandes LPL sont tapées au clavier et stockées dans un fichier sur disque. La commande .I (Include): Les fichiers sont sauvés avec un nom rappelant leur utilité. par exemple, si un fichier de paramètres s'appelle "BRODERBUND", on peut raisonnablement supposer que cela concerne la copie de softs de cette maison d'édition. Pour utiliser ce fichier, tapez la commande .I BRODBUND Le .I doit ètre en début de ligne, puis on doit mettre un espace et enfin le nom du fichier. Pour récupérer une partie d'un fichier, indiquez les lignes de départ et de fin: .I TESTFILE,4-1F Dans cet exemple, on récupère la partie du fichier TESTFILE comprise entre les lignes 4 et 1F. On peut mettre autant de .I qu'on le désire; la seule limite étant qu'on ne peut avoir plus de $FF lignes dans le fichier. Chaque ligne du fichier LPL est numérotée en hexa (et affichée en inverse). Ces numéros ne servent qu'à référencer les lignes . Chaque ligne ne peut excéder 38 caractères. Voici un exemple de ligne LPL: FIND D5 AA 96 Ceci était une commande simple. si on met plusieurs commandes, on les sépare avec deux points: SLOT 6 : IN.DRIVE 1 : OUT.DRIVE 2 Les espaces avant et après les : ne sont pas indispensables. Si une ligne dépasse les 38 caractères, on peut la continuer sur la ligne suivante en la terminant par "-" DEPOSIT (DF) (F4) (DF) (D4) (FF) - D5 AA 96 AA AA On peut mettre des commentaires en les faisant précéder d'un astérisque (*). * SET SLOT NUMBER : SLOT 6 SLOT 6 : * SET SLOT NUMBER Ces deux lignes sont équivalentes: les deux points séparateurs indiquent que ce qui suit est une commande. Les instructions LPL: On utilise des codes pour représenter des variables, des constantes, des noms de paramètres ou des routines. On sépare ces codes par des espaces. Il y a 4 catégories de codes: les commentaires les instructions les désignations les commandes On peut précéder une instruction par une désignation de label. Ceci sert à effectuer les branchements. LABEL READ.TRACK.AGAIN : GOTO READ.TRACK.AGAIN LABEL A2:ERROR:PRT "LENGTH ERROR" GOTO A2.ERROR Les constantes: Voci les différents types de constantes utilisés en LPL: un octet en Hexa: D5 6 00 (FF) un octet entre parenthèse indique un octet de synchro plusieurs octets en hexa: (FF) D5 AA 96 00 10 20 30 40 50 60 70 80 deux octets en hexa: 1A70 ce sont en général de sadresses ou des longueurs. des valeurs de pistes en hexa: 12.5 1A.75 11.0 0. Ces valeurs contiennent un point pour indiquer qu'il s'agit de pistes. un caractère "X" 'X' on utilise les guillemets ou l'apostrophe plusieurs caratères: "DON'T FORGET TO COVER NOTCH." Si un des guillemets fait partie du message, utilisez l'autre pour la délimitation de la chaine. on peut mélanger les valeurs hexa et ASCII: 89 'GRD' 8D les valeurs spéciales: ? - représente une valeur dont on ne tient pas compte (dans une séquence de recherche par exemple) les indicateurs YES NO ON OFF Equivalents à 0-FF, mais bien plsu 'parlants' Les types de variables: Les variables sont de différents types selon leur usage. Variables pour un octet: SLOT IN.DRIVE OUT.DRIVE Variables pour plusierurs octets/caractères: GR.CHARS PAT1 SYNC.PAT Les variables Pattern/chaine sont de longueur variable et ont un octet de longueur en début. Cependant cette longueur ne peut excéder 15 (decimal). Variables pour plusieurs octets: RD.NIB.TRANS SEC.TRANS SELECT.TAB Ces variables font référence à des zones de plusieurs octets (par exemple des tables de conversion). Si vous devez utiliser un seul octet dans une variable faite pour plusieurs octets, faites précéder la référence dans la table par un plus (+) NIB.TRANS +2F Les pointeurs à deux octets START END TRK.LEN CURSOR PTR.W PTR.X PTR.Y PTR.Z ces pointeurs peuvent également représenter des longueurs les variables de pistes BEGIN.TRK END.TRK INCR.TRK SYNC.TRK on peut utiliser des valeurs entières ou par 1/4, 1/2 ou 3/4 les indicateurs SYNC COUNT SHOW.ADDR ce sont des variables à un seul octet contenant un indicateur YES/NO, ON/OFF, ou FF/0 et agissant comme des switches pouvant ètre testés et modifiés. Si vous utilisez d'autres valeurs que celles spécifiées, les résultats seront imprévisibles. Assignation de valeur: Pour donner une valeur à une variable. On peut lui donner une valeur constante ou variable. Cependant la variable et la constante doivent ètre de mème type. Par exemple, une variable pointeur ne peut étre assignée qu'à une autre variable pointeur. START CURSOR - assigne à la variable START (début de la piste de données) la variable CURSOR (position du curseur) CURSOR 2040 - la variable CURSOR pointe en 2040. SLOT 6 - la var SLOT à un octet contient 6 BEGIN.TRK 12.5 - la var de piste BEGIN.TRK contient 12.5 COUNT YES - la var indicateur contient la valeur yes. PAT4 D5 AA 96 PAT4 PAT7 - encore deux exemples corrects GR.CHARS 89 'GRD' - la var chaine GR.CHARS contient 4 octets: la valeur hexa 89 (CTRL-I) suivi des valeurs ASCII 'GRD'. DF.HDR3 B4 : AF.HDR3 DD - le 3ème octet du prologue de données contient B4 (normalement AD) et le troisème octet du prologue adresse contient DD. AF.TRL1.TEST IGNORE.TRL AF.TRL2.TEST IGNORE.TRL DF.TRL1.TEST IGNORE.TRL DF.TRL2.TEST IGNORE.TRL - permet d'indiquer à la RWTS d'ignorer les prologues Adresse et Données. AF.TRL1.TEST NORM.TRL1 DF.TRL1.TEST NORM.TRL1 - remet la RWTS avec des prologues normaux AF.CSUM.TEST IGNORE.CSUM DF.CSUM.TEST IGNORE.CSUM AF.CSUM.TEST NORM.AF.CSUM DF.CSUM.TEST NORM.DF.CSUM - pour que la RWTS ignore ou utilise les checksums des prologues Adresse et Donnée AF.HDR1 D5 AF.HDR2 AA AF.HDR3 96 AF.TRL1 DE AF.TRL1 AA DF.HDR1 D5 DF.HDR2 AA DF.HDR3 AD DF.TRL1 DE DF.TRL1 AA - la valeur par défaut des Epilogues et Prologues des Adresses et Données pour la lecture. DF.HDR1.WRT D5 DF.HDR2.WRT AA DF.HDR3.WRT DD DF.TRL1.WRT DE DF.TRL2.WRT AA DF.CSUM.SEED.WRT 00 - indique la valeur des Epilogues et Prologues Données en ecriture. La dernière instruction sert au calcul du checksum pour écrire les données. Les Routines du LPL: Ces routines LPL (les algorithmes des précédentes versions) sont accessibles par l'utilisateur. Certaines sont complexes et nécessitent l'emploi de plusieurs variables et d'autres ne nécessitent qu'une ou deux variables. Certaines routines utilisent des paramètres constitués de constantes ou de pointeurs et d'autres n'ont pas besoin de paramètres. La syntaxe exacte de ces routines est décrite en Appendix. Cependant nous allons en étudier quelques unes immédiatement. Le disque de Paramètres contient de bons exemples d'utilisation de ces routines. ABORT "DATA NOT FOUND" - interrompt l'opération en cours et revient au menu LS PAUSE "ENTER 1,2 OR 3:" - après la frappe d'une touche, la valeur de la touche est placée dans KEY.IN PRT "DISK MUST BE WRITE/ENABLED" - affiche un message à l'écran. Si le dernier caractère est un espace, le curseur reste sur la mème ligne. SHOW SLOT - affiche le contenu de la variable SLOT. Si l'indicateur SHOW.ADDR est YES ou NO, l'addresse de la variable SLOT est aussi affiché. GOTO READ.AGAIN - Branchement au label READ.AGAIN FIND D5 AA 96 - Recherche à partir de la position du curseur jusqu'au pointeur END de la séquence D5 AA 96. FIND PAT4 - identique au précédent, mais la recherche se fait sur la chaine contenue dans PAT4. ERROR '5' - le caractère '5' est placé sur la ligne d'état sous le n° de la piste PAT4 D4 DD FF PAT5 D5 AA 96 CHANGE PAT4 PAT5 - Remplace toutes les occurences de la première chaine par la deuxième chaine entre START et END. ERASE - efface la piste sur le disque Output FORWARD TRK.LEN BACK TRK.LEN - Déplace le CURSEUR en avant ou en arrière selon la valeur comprise dans TRK.LEN. On peut aussi coder ces routines avec une constante sur 2 octets: FORWARD 024E ou BACK 0042 CODE AD CUR.TRK 0A 0A 0A 0A 60 - la routine CODE est appelée, les paramètres sont décodés puis placés dans une zone mémoire et le controle est donné à une instruction JSR. PRT "ASCII TEXT TO PRINT" - la routine PRT affiche des informations à l'écran. si le dernier carctère est un espace, le curseur reste sur la mème ligne. Exemple: PRT "TRACK INCREMENT IS " : SHOW INCR.TRK Certaines routines fonctionnent différemment selon qu'on est en mode Nibble ou Byte. Si la dernière commande de lecture ou d'écriture était NREAD ou NWRITE, on passe ne mode nibble. Si la dernière commande de lecture ou d'écriture était SREAD, SWRITE, TREAD ou TWRITE on passe ne mode byte. Les routines fonctionnant différemment selon qu'on est en mode byte ou nibble sont: FIND, VER, et CHANGE. En mode nibble, une valeur nulle dans le pattern spécifié agit comme une valeur à ne pas tenir compte. On peut mettre soit "?" soit "0". En mode byte (utilisé lors de la lecture ou de l'écriture de secteurs), une valeur nulle est significative: NREAD : FIND D5 00 96 On fait une lecture de nibbles de la piste, on place le curseur sur la première valeur D5 rencontrée, suivie de n'importe quelle valeur et suivi enfin de la valeur 96. Les routines suivantes acceptent soit des variables chaine soit des constantes à plusieurs octets: FIND VER REP DEPOSIT Le mode nibble ou byte peut se changer manuellement ou en mettant l'indicateur BYTE.MODE à YES pour le mode byte et à NO pour le mode nibble. les procédures de Piste: Une procédure de piste est une séquence d'instructions LPL qui seront exécutées pour chaques pistes copiées. La procédure de piste est définie par BEGIN.PROC et END.PROC. La procédure est ensuite appelée pour chaque piste copiée par la routine appelant la procédure de piste. Il n'y a actuellement qu'une procédure permettant cela: c'est COPY. La procédure en cours est la dernière définie. Si aucune procédure n'est définie, c'est la procédure LPL par défaut qui sera utilisée: BEGIN.PROC ... ... procédure de piste A ... END.PROC COPY 12 18 2 BEGIN.PROC ... ... procédure de piste B ... END.PROC COPY 1 9 2 COPY 13 19 2 Dans cet exemple, les 2 premières procédures de copie utilisent la procédure de piste A, et les deux suivantes utilisent B. Les instructions LPL avec les procédures de piste peuvent ètre employées selon deux modes: nibble et byte. Le mode nibble avec les routines NREAD, NWRITE, NVERIFY, qui traitent les pistes sous forme de nibbles; et le mode secteur avec les routines TREAD, TWRITE, TVERIFY qui traitent les pistes sous forme de 16 secteurs séparés. La commande COPY s'utilise comme ceci: COPY . Les valeurs sont stockées dans les variables BEGIN.TRK, END.TRK, et INCR.TRK. Si les pistes doivent ètre synchronisées ou si on veut utiliser le nibble-count, mettez les variables de piste SYNC ou COUNT à YES. Ces variables SYNC et COUNT ne sont pas mis à YES comme dans la version 5.0 du LS. Les codes d'erreur du LPL: Pendant l'exécution du programme LPL, des erreurs peuvent se produire qui n'auront pas été détectées par le syntax checking. Lorsqu'une erreur se produit, le processus en cours est interrompu et le message suivant est affiché: LPL CODE ABORTED ERROR CODE xx où xx est un des numéros suivants: 01 GOTO sans LABEL correspondant 02 BEGIN.PROC rencontré alors qu'on est déja en procédure piste 03 END.PROC rencontré alors qu'on a déja quitté une procédure piste 04 COPY rencontré alors qu'on est en procédure piste. La procédure COPY fait en effet appel à une procédure piste et ne peut donc ètre utilisée dans une autre procédure piste. 05 USE.DEFAULT.PROC rencontré alors qu'on est en procédure piste. Table de Codage des Nibbles: La table de transformation suivante sert à calculer les checksums des champs données (voir le chapitre traitant la commande D) 00:96 01:97 02:9A 03:9B 04:9D 05:9E 06:9F 07:A6 08:A7 09:AB 0A:AC 0B:AD 0C:AE 0D:AF 0E:B2 0F:B3 10:B4 11:B5 12:B6 13:B7 14:B9 15:BA 16:BB 17:BC 18:BD 19:BE 1A:BF 1B:CB 1C:CD 1D:CE 1E:CF 1F:D3 20:D6 21:D7 22:D9 23:DA 24:DB 25:DC 26:DD 27:DE 28:DF 29:E5 2A:E6 2B:E7 2C:E9 2D:EA 2E:EB 2F:EC 30:ED 31:EE 32:EF 33:F2 34:F3 35:F4 36:F5 37:F6 38:F7 39:F9 3A:FA 3B:FB 3C:FC 3D:FD 3E:FE 3F:FF Table de décodage des pistes: 00:AA AA 01:AA AB 02:AB AA 03:AB AB 04:AA AE 05:AA AF 06:AB AE 07:AB AF 08:AE AA 09:AE AB 0A:AF AA 0B:AF AB 0C:AE AE 0D:AE AF 0E:AF AE 0F:AF AF 10:AA AB 11:AA BB 12:AB BA 13:AB BB 14:AA BE 15:AA BF 16:AB BE 17:AB BF 18:AE BA 19:AE BB 1A:AF BA 1B:AF BB 1C:AE BE 1D:AE BF 1E:AF BE 1F:AF BF 20:BA AA 21:BA AB 22:BB AA 23:BB AB Table de décodage des secteurs: NIBBLES VALUE NIBBLES VALUE ------- ----- ------- ----- AA AA 00 AE AA 08 AA AB 01 AE AB 09 AB AA 02 AF AA 0A AB AB 03 AF AB 0B AA AE 04 AE AE 0C AA AF 05 AE AF 0D AB AE 06 AF AE 0E AB AF 07 AF AF 0F Table de décodage des Nibbles: 0:AA AA 20:BA AA 40:AA EA 60:BA EA 80:EA AA A0:FA AA C0:EA EA E0:FA EA 1:AA AB 21:BA AB 41:AA EB 61:BA EB 81:EA AB A1:FA AB C1:EA EB E1:FA EB 2:AB AA 22:BB AA 42:AB EA 62:BB EA 82:EB AA A2:FB AA C2:EB EA E2:FB EA 3:AB AB 23:BB AB 43:AB EB 63:BB EB 83:EB AB A3:FB AB C3:EB EB E3:FB EB 4:AA AE 24:BA AE 44:AA EE 64:BA EE 84:EA AF A4:FA AE C4:EA EE E4:FA EE 5:AA AF 25:BA AF 45:AA EF 65:BA EF 85:EA AF A5:FA AF C5:EA EF E5:FA EF 6:AB AE 26:BB AE 46:AB EE 66:BB EE 86:EB AE A6:FB AE C6:EB EE E6:FB EE 7:AB AF 27:BB AF 48:AB EF 67:BB EF 87:EB AF A7:FB AF C7:EB EF E7:FB EF 8:AE AA 28:BE AA 48:AE EA 68:BE EA 89:EE AA A8:FE AA C8:EE EA E8:FE EA 9:AE AB 29:BE AB 49:AE EB 69:BE EB 90:EE AB A9:FE AB C9:EE EB E9:FE EB A:AF AA 2A:BF AA 4A:AF EA 6A:BF EA 8A:EF AA AA:FF AA CA:EF EA EA:FF EA B:AF AB 2B:BF AB 4B:AF EB 6B:BF EB 8B:EF AB AB:FF AB CB:EF EB EB:FF EB C:AE AE 2C:BE AE 4C:AE EE 6C:BE EE 8C:EE AE AC:FE AE CC:EE EE EC:FE EE D:AE AF 2D:BE AF 4D:AE EF 6D:BE EF 8D:EE AF AD:FE AF CD:EE EF ED:FE EF E:AF AE 2E:BF AE 4E:AF EE 6E:BF EE 8E:EE AF AE:FF AE CE:EF EE EE:FF EE F:AF AF 2F:BF AF 4F:AF EF 6F:BF EF 8F:EF AF AF:FF AF CF:EF EF EF:FF EF 0:AA BA 30:BA BA 50:AA FA 70:BA FA 90:EA BA B0:FA BA D0:EA FA F0:FA FA 1:AA BB 31:BA BB 51:AA FB 71:BA FB 91:EA BB B1:FA BB D1:EA FB F1:FA FB 2:AB BA 32:BB BA 52:AB FA 72:BB FA 92:EB BA B2:FB BA D2:EB FA F2:FB FA 3:AB BB 33:BB BA 53:AB FB 73:BB FB 93:EB BB B3:FB BB D3:EB FB F3:FB FB 4:AA BE 34:BA BE 54:AA FE 74:BA FE 94:EA BE B4:FA BE D4:EA FE F4:FA FE 5:AA BF 35:BA BF 55:AA FF 75:BA FF 95:EA BF B5:FA BF D5:EA FF F5:FA FF 6:AB BE 36:BB BE 56:AB FE 76:BB FE 96:EB BE B6:FB BE D6:EB FE F6:FB FE 7:AB BF 37:BB BF 57:AB FF 77:BB FF 97:EB BF B7:FB BF D7:EB FF F7:FB FF 8:AE BA 38:BE BA 58:AE FA 78:BE FA 98:EE BA B8:FE BA D8:EE FA F8:FE FA 9:AE BB 39:BE BB 59:AE FB 79:BE FB 99:EE BB B9:FE BB D9:EE FB F9:FE FB A:AF BA 3A:BF BA 5A:AF FA 7A:BF FA 9A:EF BA BA:FF BA DA:EF FA FA:FF FA B:AF BB 3B:BF BB 5B:AF FB 7B:BF FB 9B:EF BB BB:FF BB DB:EF FB FB:FF FB C:AE BE 3C:BE BE 5C:AE FE 7C:BE FE 9C:EE BE BC:FE BE DC:EE FE FC:FE FE D:AE BF 3D:BE BF 5D:AE FF 7D:BE FF 9D:EE BF BD:FE BF DD:EE FF FD:FE FF E:AF BE 3E:BF BE 5E:AF FE 7E:BF FE 9E:EF BE BE:FF BE DE:EF FE FE:FF FE F:AF BF 3F:BF BF 5F:AF FF 7F:BF FF 9F:EF BF BF:FF BF DF:EF FF FF:FF FF Table de translation Physique -> Logique: Les n° de secteurs contenus dans le champ adresse d'une disquette formatée en 16 secteurs apparaissent en ordre croissant ($0 to $F). Ces n° de secteurs physiques sont convertis par le système d'exploitataion en nombres logiques pour permettre des écritures/lectures de plusieurs secteurs à la fois. La table ci-dessous montre la relation entre les n° physiques et les n° logiques des secteurs. PHYSIQUE LOGIQUE -------- ------- 0 0 1 7 2 E 3 6 4 D 5 5 6 C 7 4 8 B 9 3 A A B 2 C 9 D 1 E 8 F F Cette DOC du 6.0 vous est offerte gracieusement par : le célèbre B.CAPSLOCK Disponible sur Apple IIc .dsk Archive par Steph & Gist : http://www.multimania.com/apple2c/