Nibbles

Dernière mise à jour: lundi 03/12/2007.

Introduction

Mon projet FASTDSK de création rapide de disques images avance bien, même si c’est de façon irrégulière.
J’ai fini une version beta 256k permettant de créer un disk image .DSK en une seule passe plus rapidement que DSK2FILE (idem pour la version 128k en 2 passes qui fonctionne aussi). J’ai comparé le résultat de 2 .DSK produits par ces outils à partir du même disk d’origine et le contenu est identique. L’interface est quant à elle aussi achevée et les 2 fonctionnalités originales (nom automatique et fichier log résultat) sont aussi opérationnelles.

J’ai fait la programmation à partir de l’émulateur Apple Oasis en utilisant pour le moment que le format .DSK pour le disk lu que je souhaite transformer en disque image. De ce fait, je n’ai pas encore été confronté au cas des disks physiques contenant des problèmes de démagnétisation, de bad checksums ou encore des originaux plombés avec des formats exotiques (de toute façon, je dis clairement que mon outil ne travaille qu'avec des disquettes 16 secteurs mais des personnes pourraient être tentées de faire le test, aussi je dois prévoir une gestion propre des anomalies).

Pour avancer dans les tests de ces cas de figure (tout en restant sous émulateur), je vais devoir utiliser non plus des .DSK en entrée mais des fichiers au format .NIB que j’aurai modifié pour créer artificiellement des anomalies.

Je vais dans cette page web vous parler du format .NIB pour expliquer ce qu’il est possible de faire (dans le cadre d'une duplication basique avec Locksmith Fast Copy et aussi avec FASTDSK) et aborder le programme Nibbles Away ][ qui permet de travailler les nibbles bruts d’une disquette (au niveau d'une piste complête) sur un vrai Apple II.
Je précise "un vrai Apple II" car suivant les émulateurs, la fonction d'écriture d'un .NIB est plus ou moins bien supportées.
C'est pour cela que je préfère utiliser un éditeur hexa (sur ma machine linux) pour opérer les changements dans les .NIB.
Nibbles Away ][ me permettra de faire la même chose sur mon Apple IIe.

Le format .NIB

Comme vous le savez déjà, le format le plus répandu pour les disks images Apple II est le .DSK.
Il ne contient que les données des secteurs, c'est à dire 35 pistes de 16 secteurs avec chacun 256 octets.
La taille de ce format est donc de 35*16*256 = 143360 octets.

Pour la plupart des usages, c'est suffisant car le DOS utilisé est standard et c'est l'émulateur qui fait un supplément de travail pour ramener ce format .DSK à quelque chose plus proche de la réalité afin que les programmes en langage machine émulé accédant au drive via les jeux de softswitchs et les instructions habituelles de type LDA $C08C,X etc... se déroulent sans accroc (émulation du controleur du lecteur de disquettes).

Prenons par exemple l'émulateur Applewin dont le source est ouvert.
Ce qu'il faut savoir, c'est que cet émulateur travaille au niveau de la piste.
Prenons le cas où j'ai mis un .DSK dans le lecteur 1 de l'émulateur et ai booté Applewin.
A chaque fois qu'il rencontre un jeu d'instructions LM faisant déplacer la tête de lecture, il sauvegarde la piste en cours (s'il y a eu des changements) et charge la piste suivante. Cette nouvelle piste n'est pas conservée dans son état actuel (portion de datas du .DSK) mais elle est transformée en nibbles via une routine appelée NibblizeTrack (le source la contenant s'appelle aw_image.cpp).

Applewin construit de A à Z une structure proche du contenu réel d'une disquette physique.
Il rajoute les champs adresse (markers + infos adresses en codage 4-4), les gaps, les champs datas (markers + checksum) et transforme les octets du .DSK en nibbles codés selon la méthode 6-2.
D'ailleurs il est à noter que c'est lors de cette phase de rajout du champ adresse qu'il assigne lui même la valeur du volume à 254, ce qui déplait fortement à certains programmes gérant une autre valeur (l'idéal aurait été de mettre un paramètre externe pour laisser cette liberté à l'utilisateur).

Voila le bout de code en question où il fait cette transposition (langage C++). C'est une suite d'instructions qui alimentent son buffer avec la structure nibblizée. Il commence par 48 nibbles de gap et traite ensuite les 16 secteurs qui se trouvent séparés à chaque fois par 27 autres nibbles de gap:

//===========================================================================
DWORD NibblizeTrack (LPBYTE trackimagebuffer, BOOL dosorder, int track) {
  ZeroMemory(workbuffer+4096,4096);
  LPBYTE imageptr = trackimagebuffer;
  BYTE   sector   = 0;

  // WRITE GAP ONE, WHICH CONTAINS 48 SELF-SYNC BYTES
  int loop;
  for (loop = 0; loop < 48; loop++)
    *(imageptr++) = 0xFF;

  while (sector < 16) {

    // WRITE THE ADDRESS FIELD, WHICH CONTAINS:
    //   - PROLOGUE (D5AA96)
    //   - VOLUME NUMBER ("4 AND 4" ENCODED)
    //   - TRACK NUMBER ("4 AND 4" ENCODED)
    //   - SECTOR NUMBER ("4 AND 4" ENCODED)
    //   - CHECKSUM ("4 AND 4" ENCODED)
    //   - EPILOGUE (DEAAEB)
    *(imageptr++) = 0xD5;
    *(imageptr++) = 0xAA;
    *(imageptr++) = 0x96;
    *(imageptr++) = 0xFF; <- volume 254 (1er octet 4-4)
    *(imageptr++) = 0xFE; <- volume 254 (2nd octet 4-4)
#define CODE44A(a) ((((a) >> 1) & 0x55) | 0xAA)
#define CODE44B(a) (((a) & 0x55) | 0xAA)
    *(imageptr++) = CODE44A((BYTE)track);
    *(imageptr++) = CODE44B((BYTE)track);
    *(imageptr++) = CODE44A(sector);
    *(imageptr++) = CODE44B(sector);
    *(imageptr++) = CODE44A(0xFE ^ ((BYTE)track) ^ sector);
    *(imageptr++) = CODE44B(0xFE ^ ((BYTE)track) ^ sector);
#undef CODE44A
#undef CODE44B
    *(imageptr++) = 0xDE;
    *(imageptr++) = 0xAA;
    *(imageptr++) = 0xEB;

    // WRITE GAP TWO, WHICH CONTAINS SIX SELF-SYNC BYTES
    for (loop = 0; loop < 6; loop++)
      *(imageptr++) = 0xFF;

    // WRITE THE DATA FIELD, WHICH CONTAINS:
    //   - PROLOGUE (D5AAAD)
    //   - 343 6-BIT BYTES OF NIBBLIZED DATA, INCLUDING A 6-BIT CHECKSUM
    //   - EPILOGUE (DEAAEB)
    *(imageptr++) = 0xD5;
    *(imageptr++) = 0xAA;
    *(imageptr++) = 0xAD;
    CopyMemory(imageptr,Code62(sectornumber[dosorder][sector]),343);
    imageptr += 343;
    *(imageptr++) = 0xDE;
    *(imageptr++) = 0xAA;
    *(imageptr++) = 0xEB;

    // WRITE GAP THREE, WHICH CONTAINS 27 SELF-SYNC BYTES
    for (loop = 0; loop < 27; loop++)
      *(imageptr++) = 0xFF;

    sector++;
  }
  return imageptr-trackimagebuffer;
}

Cette manipulation permet au final de gagner de la place en s'épargnant la sauvegarde des informations toujours identiques et en ne gardant que les informations différentes d'un .DSK à un autre, à savoir le contenu des secteurs de données.

Mais il est des cas de figure où cette reconstruction pose des problèmes car elle ne donne pas une image exacte de ce que contenait la véritable disquette.
C'est pour celà qu'en plus du format .DSK, il y a un autre format (.NIB) qui prend plus de place certes mais permet de conserver certaines des informations perdues par le .DSK. (A la base, le format .DSK considère que le contenu de la disquette est au format d'un DOS standard).
Le .NIB permet de gérer ces disquettes au format non standardisé.

Le .DSK est rangé bien proprement. Les secteurs se suivent dans l'ordre et tout est pour le mieux dans le meilleur des mondes.
Dans la pratique, sur un vrai Apple II, quand la tête de lecture commence à lire une piste concentrique, elle peut tomber n'importe où. Par exemple sur le secteur $0D.
De la même façon, le format .NIB n'impose pas d'ordre des secteurs.

Il se contente en effet de définir pour chaque piste une taille identique de 6656 octets, soit $1A00 en hexa.
Après on met ce qu'on veut dans chacun de ces espaces représentant une piste.

Le .NIB est donc une succession d'espaces fixes de 6656 octets de long. Cette définition de taille fixe sert surtout à ne pas rendre trop compliquée l'exploitation du .NIB en l'organisant un minimum (découpage piste).
Comme un .NIB contient lui aussi 35 pistes et a donc 35*6656 = 232960 octets, soit une taille de 62,5% plus importante que le .DSK.
Note: si un jour vous rencontrez un .NIB de 266240 octets, il s'agit d'une image de 40 pistes.


Chacun de ces espace contient un nombre variable d'informations significatives.
En effet sur une vrai disquette, il n'y a pas sur chaque piste le même nombre de nibbles.
Comme dans le .NIB on gère un espace fixe par piste, cela signifie que l'espace est rempli de nibbles bidons pour compléter (ex: des $FF).

Maintenant concernant le contenu de chacun de ces espaces (pistes), pour les disquettes non standards: il n'y a pas vraiment de rêgles. Chaque programme gérant les entrées/sorties sur sa disquette retrouve ses petits selon la manière dont les informations sont codifiées.

Sur un .NIB pas trop bidouillé, on a quelque chose de similaire à cela pour chaque secteur dans un espace de piste:

Le nombre de gaps peuvent varier tout en conservant certains minimas propres à assurer un bon fonctionnement sur un vrai Apple II.

Si votre .NIB est un 18 secteurs, alors vous aurez une toute autre structure.
On rentre ici dans du cas par cas qu'il n'est pas question de traiter ici.


Concernant les gaps:

Un émulateur n'a pas vocation à remplacer des éléments électromagnétiques complexes d'un lecteur de disquettes.
Il y a donc au moins une notion qui disparait dans un .NIB par rapport à une vraie disquette: il n'y a pas de self synchro dans ce format de fichier. Je ne parle ici que des extra-bits car on trouve bien des nibbles de gap.
Vous ne trouverez pas les séquences de 10 bits 1111111100 écrits en 40 cycles assurant cette fonctionnalité sur un vrai drive. On ne trouve dans le .NIB que des séquences de 8 bits à 1 ($FF).
Un .NIB est un fichier et les octets sont bien définis (il n'y a pas le soucis de la tête de lecture qui peut commencer à lire sur un bit qui n'est pas le 1er d'un octet).

A noter une autre différence aussi par rapport à une vraie disquette: il n'y a pas de synchro entre les pistes (à ma connaissance).


Si vous avez créé un .NIB qui ne fonctionne pas, gardez toujours en mémoire que le soucis n'est pas forcément lié au format proprement dit mais peut-être aussi dû à l'émulateur lui-même. Il est donc prudent d'essayer un .NIB sur plusieurs émulateurs avant de le déclarer HS. Si vous avez le temps, boote tracez-le! Dès fois il suffit de changer pas grand chose pour le rendre opérationnel (idem pour les .DSK).

Sachez aussi que malgré ses avantages sur le .DSK, le format .NIB n'est pas la panacée.
A plusieurs reprises, des personnes dans les forums de discussion ont voulu lancer un nouveau format de nibbles (avec une taille variable des pistes + une organisation du disk + taille max piste > $1A00 + commentaires + etc..., une finesse allant qu'au 1/4 de piste *quarter track*, etc... ) et remanier l'outil SST (évoqué plus loin) mais à ce jour aucun n'a vu le jour.

A noter aussi que le format .2MG (surtout en vogue sur les émulateurs d'Apple IIGS) permet de faire des choses sympas mais ce format n'est pas souvent supportés sur les émulateurs d'Apple II ou alors l'émulation est très incomplète pour les particularités qui justement font son intérêt.


Un remarque évidente mais comme chacun le sait, "ça va sans dire, mais ça va mieux en le disant":

Il ne sert pas à grand chose d'utiliser des outils dédiés à la gestion des nibbles (ex: Nibbles Away ][) avec un émulateur sur un .DSK. Car d'une part le format est sans surprise et d'autre part si vous faites un changement sur autre chose que les datas du champ de données, il ne restera pas trace de cette modification si vous sauvegardez puis rechargez la piste (ces informations n'existant pas dans le format .DSK et étant reconstruites "on the fly").

Création et modification d'un .NIB

Pour créer un .NIB sur un Apple II, prenez de préférence l'outil Saltine's Super Transcopy (programmé par Bob Colbert - aka le pirate nord américain Saltine - à partir de la routine disk d'EDD 4). Il a fait ses preuves.
Je crois me souvenir qu'à la base, ce programme avait été créé pour permettre aux crackers de transformer un original plombé en données facilement échangeables par BBS...
Pour chaque face de disquette physique 5,25", vous obtiendrez 2 .DSK que vous reconstruirez ensuite soit à partir de votre émulateur soit avec des outils comme CiderPress.

Il peut néanmoins surgir des problèmes.
Par exemple si votre original a été écrit avec un drive lent et contient beaucoup de nibbles (exemple Trinity d'Infocom).
Il peut arriver qu'en créant un .NIB, SST affiche la lettre "L" dans l'état d'avancement.
Cela signifie qu'il a rencontré le problème: il y a trop d'informations sur la piste et il a du la tronquer.
Le "L" signifie "piste Longue": SST n'a pas pu stocker la piste dans l'espace de ses $1A00 octets.
Attention, ceci n'est pas forcément génant: si les données perdues n'avaient pas de signification propre (gaps ou déchêts).

Il est possible de créer un .NIB directement à partir d'un émulateur.
Mettez un .DSK dans le 1er lecteur, une copie d'un .NIB existant dans le 2nd lecteur et lancer un copieur!
Essayez aussi de créer un .NIB rempli de $FF et formattez-le à partir d'un outil émulé.

Voici les modifications de .NIB que je vous propose d'aborder ici:


1) Modification d'un header de champ adresse

Je me propose de changer un prologue D5 AA 96 en D5 AA 97 par exemple sur le secteur physique $09 de la piste $06.
Les informations de cette piste commence à partir de $06 * $1A00 = $9C00.
Le secteur physique $09 est codé en 4-4 par les valeurs AE AB.
Ce secteur physique correspond au secteur logique $03. Comme Locksmith Fast Copy et FASTDSK n'utilise que la notion de secteur logique, si j'altère ce secteur physique $09, je verrai l'effet sur le secteur logique $03.
Modification sur le .NIB:

.NIB

Résultat de la copie avec Locksmith Fast Copy et de la création du .DSK avec FASTDSK: le secteur est bien indiqué en erreur.
A noter que sur les Fast Boot normaux (SAM, ...) l'anomalie sur un header de champ adresse n'est pas gérée et le disk II lit en continu (boucle sans fin) la piste dans l'attente de ce secteur. J'ai utilisé la rêgle de gestion suivante: si je lis successivement 32 champs adresses de secteurs qui ont déjà été traités alors je considère que les secteurs non encore traités ne peuvent pas l'être et je les déclare en anomalie.

Locksmith
FASTDSK


2) Modification d'un header de champ data

Je me propose de changer un prologue D5 AA AD en AA AA AD par exemple sur le secteur physique $04 de la piste $01.
Les informations de cette piste commence à partir de $01 * $1A00 = $1A00.
Le secteur physique $04 est codé en 4-4 par les valeurs AA AE.
Ce secteur physique correspond au secteur logique $0D. Comme Locksmith Fast Copy et FASTDSK n'utilise que la notion de secteur logique, si j'altère ce secteur physique $04, je verrai l'effet sur le secteur logique $0D.
Modification sur le .NIB:

.NIB

Résultat de la copie avec Locksmith Fast Copy et de la création du .DSK avec FASTDSK: le secteur est bien indiqué en erreur.

Locksmith
FASTDSK


3) Modification des trailers de champs

Exemple d'un .NIB avec des trailers de champs modifiés:
Le pack de copieurs The Black Power From T[[ (qui bien entendu se copie uniquement sur un vrai Apple II avec des softs ne vérifiant pas les trailers comme Disk Muncher).

.NIB

Sa particularité:

>>Champ Adresse:
Prologue: D5 AA 96
Epilogue: DF AA F5 (au lieu de DE AA EB)
>>Champ donnée:
Prologue: D5 AA AD
Epilogue: DE AA AC (au lieu de DE AA EB)

Avec Locksmith Fast Copy, cela ne passe pas et on obtient l'erreur totale:

T[[
T[[
T[[

Ceci n'est pas un problème pour FASTDSK car il ne contrôle pas les trailers du champ adresse et ne vérifie en fait que le 1er nibble du trailer du champ datas (DE) tout comme ProDOS.
Donc la création d'un .DSK pour cette disquette passe sans problème.
Maintenant si le fast boot dessus lui contrôle ces trailers, c'est encore autre chose...


4) Altération du 1er nibble des trailers du champ data

Test sur le secteur physique $00 de la piste $22.
Les informations pour cette piste commencent en $22 * $1A00 = $37400.
Secteur physique $00 = secteur logique $00 codé en 4-4 par les valeurs AA AA.
Je remplace le nibble DE par DD:

.NIB

Résultat de la copie avec Locksmith Fast Copy et de la création du .DSK avec FASTDSK: le secteur est bien indiqué en erreur:

Locksmith
FASTDSK


5) Un secteur HS à cause d'un bad checksum

Il suffit avec un éditeur hex de modifier l'octet du checksum dans un champ de données.
J'ai modifié le secteur physique $0F de la piste $11.
La piste débute en $11 * $1A00 = $1BA00.
Le secteur physique $0F = secteur logique $0F aussi.
Son codage en 4-4 est AF AF.
Il y avait comme valeur de checksum $96 sur ce secteur et j'ai mis un $FF à la place:

.NIB

Résultat de la copie avec Locksmith Fast Copy et de la création du .DSK avec FASTDSK: le secteur est bien indiqué en erreur.
Le contenu du secteur avec un mauvais checksum est rempli de zéro.

Locksmith
FASTDSK

Subtilité avec FASTDSK: il est possible dans la configuration de préciser que l'on ignore les erreurs de checksum.
Lors de son traitement, FASTDSK va quand même mentionné qu'il a trouvé une erreur (le caractère C en vidéo inversée) mais vous constatez que le status de la piste indique qu'il n'y a pas d'erreur. Par ailleurs, le contenu du secteur du .DSK est bien celui que j'ai laissé intact dans le .NIB.

FASTDSK
FASTDSK


6) Diskette non formattée (.NIB vide)

Voici un exemple qui illustre 2 cas de figures: une piste non formattée ou une piste pour laquelle il n'est pas possible de détecter un header champ adresse D5 AA 96 après la lecture d'un nombre fixe (et important) de nibbles.
Pour cela, j'ai modifié un .NIB en remplissant sa piste $1B de valeurs $96.
La piste commence en $1B * $1A00 = $2BE00 et se termine en ($1C * $1A00) -1 = $2D7FF.

.NIB
.NIB

Résultat de la copie avec Locksmith Fast Copy et de la création du .DSK avec FASTDSK: la piste est bien signalée en erreur.

Locksmith
FASTDSK


7) Disquette protégée (ex: Trinity)

La disquette boote parfaitement:

Trinity
Trinity
Trinity

Mais le contenu est incopiable du fait du format interne particulier des pistes. Ici copies en cours en erreur et résultat avec FASTDSK:

Trinity
Trinity
Trinity

Regardez par exemple ici la tête du champ de datas d'un mega "secteur" de la face 2:

Trinity




Maintenant que j'ai fait le tour de ce que je pouvais tester avec les émulateurs, il va falloir tester grandeur nature sur un vrai Apple IIe!!

A suivre...


hr nibbles




Sommaire Annexe


Lien Contenu
Voir Nibbles Away.
Voir Nibble News vol 1, issue #1 (08/1982).
Voir Nibble News vol 1, issue #2 (09/1982).
Voir Nibble News vol 1, issue #3 (10/1982).
Voir Nibble News vol 1, issue #4 (11/1982).
Voir Nibble News vol 1, issue #5 (12/1982).
Voir Nibble News vol 2, issue #1 (01/1983).
Voir Nibble News Vol 3, issue 6 (1985).
Voir Nibble News Vol 4, issue 2 (1985).
Voir Nibble Parms.
Voir Ressources Nibbles Away III et son langage NADOL.
Voir Quelques tables utiles en annexe.


Note: J'ai récupéré auprès de mon vendeur US préféré d'autres numéros de Nibble News.
Je les scannerai à réception. FAIT LE 05/12/2006.
D'ici là je n'ai qu'une photo à vous proposer!

Ce sont les références suivantes:
Vol 1 #3 (Oct 1982)
Vol 1 #4 (Nov 1982)
Vol 1 #5 (Dec 1982)
Vol 2 #1 (Jan 1983)


Nibble News


hr nibbles


Nibbles Away.

L'univers des bit copiers sur Apple II ne fut pas de tout repos...

Le logiciel Nibbles Away, bien qu'ayant évolué dans le temps, a eut du mal à se faire une place à coté de son grand concurrent Locksmith de Omega Microware, Inc (qui fut ensuite racheté par Alpha Logic Business Systems quand Omega mis la clef sous la porte).
Il suffit de comparer l'espace publicitaire de ces 2 produits pour avoir un ordre d'idée.
Presque rien pour Nibbles Away et des placards partout dans tous les magazines à partir de 1981 (environ) pour Locksmith.

Mais comme je l'aime bien, j'ai décidé d'en parler un peu, ce qui n'est pas un mal compte tenu de la pauvreté des informations que l'on peut trouver sur internet à son sujet. Je précise néanmoins que j'en ai bavé (passé du temps) pour réunir matière à faire ces quelques lignes!!!

Au final, j'ai tout de même pu mettre la main sur des pubs indirectes: celles d'un revendeur, Micro-Ware Dist. Inc., avec son personnage signé Mr Hoppy clamant bien fort à qui veut l'entendre "I made a copy with NIBBLES AWAY II". (N'oublions pas qu'à cette époque pour toucher le jackpot il fallait que le programme soit capable de copier des softs comme le 1er tableur du marché - Visicalc - qui faisait un véritable tabac).

Le nom de Nibbles Away figurait aussi de temps en temps sur des listes de logiciels vendus par correspondance (destinées aux pirates???) mais je n'ai à ce jour pas vu un seul encart publicitaire de l'éditeur proprement dit.

Bref, c'est dans le registre "plus que discret".

Ad Nibbles Away
Pirates
Ad Nibbles Away II

D'ailleurs, cette discretion va jusqu'à omettre sur l'écran du programme le nom de l'éditeur et celui de son auteur!!!!
Démarche pour la moins curieuse...

Je vais rectifier ici cet "oubli" impardonnable!

La société éditrice est COMPUTER : Applications, Inc .

L'auteur des Nibbles Away est l'américain Randy Ubillos.
Si ce nom vous dit quelque chose, c'est normal!
Plus tard, Randy Ubillos s'est illustré avec les logiciels suivants: ][ in a Mac (un émulateur d'Apple II pour mac 68k copyrigthé de 1985 à 1987 toujours chez COMPUTER : Applications, Inc), et surtout il est connu pour Adobe Premier et Final Cut Pro!!
Bref, ce n'est pas un monsieur tout le monde qui a fait un soft de déplombage et a disparu de la circulation du jour au lendemain ;-))

Dans sa jeunesse, Randy Ubillos s'est fortement intéressé à la protection des logiciels, comme l'atteste cet article de Craig Crossman intitulé "Copy Protection II" (paru dans le magazine Nibble Vol 2, numéro 6 de 1981).
On y voit en effet la remarque suivante:

Thanks Randy Ubillos

Nibble
Nibble
Nibble

A noter qu'il est rigolo de voir qu'en 1981, la protection en piste $23 était déjà évoquée (pour y loger la VTOC et le catalog déplacé)... et que la relecture laissait à désirer avec un joli copier/coller qui traine!

Un rapide tour d'horizon:

Nibbles Away, 1er du nom, n'était qu'un bit copier. Il proposait juste de modifier le paramétrage (slot, drive, 1ère et dernière piste, et d'autres comme les demi-pistes ou encore une copie synchronisée -pistes??-) puis enchaînait tout de suite avec la phase de duplication.
Il n'y a que sur cet opus que j'ai pu voir une légère référence au nom de la société: le logo CA de COMPUTER : Applications, Inc.

Nibbles Away
Nibbles Away
Nibbles Away

Incontestablement, c'est l'opus ][ de ce logiciel qui est le plus connu.
Sur tous les packs de copieurs que l'on peut glaner sur les disquettes du passé, c'est toujours le ][ que l'on retrouve, avec un numéro de version sur 2 caractères composés d'une lettre et d'un chiffre.
J'ai retrouvé les versions de Nibbles Away ][ A1, B1 et C3.
La C3 est celle qui est considérée comme la dernière de l'opus ][ (dans l'Underground français tout au moins).
J'ai rassemblé ces versions sur un disk image quand elles étaient en catalog.
Sinon la version B1 se trouve sur le pack de copieurs du déplombeur (probablement américian): The Jerk. Ce pack (le seul que je possède de lui) est le: " The Jerk's Favorite Copiers V5 ".
La version C3 récupérée est celle du pirate français Kristo (groupe Ze Enfoiré) acceptant $23 pistes (au lieu des habituelles $22 tracks).

Le second opus apporte des nouveautés sympas comme l'examen d'une piste complète (track/bit editor) et un panel d'outils d'audit (sector editor, ...).
Le soft était accompagné d'une documentation sous forme de manuel utilisateur. Son titre: Instruction manual for Nibbles Away  ][ avec la date: 1981.

Nibbles Away
Nibbles Away
Nibbles Away
Nibbles Away

Floppy
DOS 3.3
Download Nibbles Away 1 & ][ (gzipped)
Floppy
Jerk's boot
Download The Jerk's Favorite Copiers V5 (gzipped)

Nibbles Away
Nibbles Away
Nibbles Away


Deux reviews parues dans la presse américaine:

Review Nibbles Away
Review Nibbles Away


Ce que l'on sait rarement (du fait d'une distribution confidentielle), c'est que COMPUTER : Applications, Inc. a édité une lettre régulière sur Nibbles Away intitulée: Nibble News. D'ailleurs il faut noter qu'Omega Microware, Inc. a fait exactement la même chose pour ses produits de déplombage - euh pardon d'aide à la copie dans le cadre d'un backup personnel conformément à la législation :-)))) - à savoir une newsletter dédiée à Inspector, Watson et Locksmith.

Cette newsletter de Nibbles Away comportait des articles sur le soft (généralités, aide à l'usage) et surtout, pour continuer à tenir le client par les bretelles, une liste réactualisée des paramètres à utiliser pour copier les derniers logiciels sortis sur le marché...

Vous trouverez les scans complets des 2 premiers numéros sur cette page, bande de petits chanceux!!!!


Je ne sais pas grand chose de l'opus III. D'ailleurs je recherche des informations à son sujet et une copie du soft.
J'ai bien vu indiqué " Nibbles Away III " sur des listes de revendeurs encore en 1986 mais c'est de l'introuvable dans mes stocks.
Je connais au moins une personne qui a des infos dessus, toujours le même crack, j'ai nommé Jean-Pierre.

Note du 03/12/2007: J'ai eu une proposition de Jonno Downes (que je remercie au passage) mais j'ai fini par récupérer un original de mon côté. Je vous fais cadeau de ce soft extrèmement rare sous sa forme complète!!!

Bref, ce qu'il faut savoir sur cette version, c'est qu'elle intègre un langage de programmation!!! Si si... même qu'il s'appelait le NADOL (pour Nibbles Away Disk Optimized Language). Randy Ubillos avait eut l'idée d'associer ses routines de bas niveau avec un langage plus évolué pour le rendre plus accessible. Voir sur cette page une doc trouvée sur internet et signée par Mr. Wiz (probablement un sympatique homme du département de la Justice voulait apporter sa pierre à l'édifice de la sauvegarde personnelle...)
Je me demande si finalement il y a de celà 2 ans je n'avais pas vu une pub sur ce NADOL dans un magazine...
Mais c'est aux oubliettes car si mes souvenirs sont bons, j'avais du scanner ça pour mon dossier des outils des pirates, dossier qui a été enterré suite à la mort vicieuse et inattendue de ma cartouche Zip de backup alors que je venais juste de lancer un reformattage de mon disque dur pour un upgrade d'O/S. Quelle saloperie de malchance quand j'y repense... tout ce boulot perdu :-(((

Hacker cradingue

Doc tapée récupérée sur le freeware de l'Underground intitulé: Archives 3.
J'aurai préféré une version en anglais car la traduction tapée par un non connaisseur (ou alors fatigué) a introduit pas mal d'erreurs. J'ai corrigé des trucs mais il y a surement encore des coquilles.
Je n'ai pas pu mettre la main sur un original. Quelqu'un a ça en stock????


----------------------------------------
>> file control < > track association <<
----------------------------------------


      fait le: 15 avril 1985 à PAU
 
                      
      NOTICE  DE  NIBBLES  AWAY II  



     * 0.0  TABLE DES MATIERES
         

       - 1.0  NIBBLES AWAY II

       - 2.0  COPIER

       - 3.0  MODIFIER

       - 4.0  TRACK / BIT EDITEUR

       - 5.0  TRACK / SECTEUR EDITEUR

       - 6.0  DIAGNOSTIQUES

       - 7.0  FILER

       - 8.0  CE QU'IL FAUT CONNAITRE
      
                               


      ==============================



     1.0    NIBBLES AWAY

      1.1 Editeur de piste comprenant :
              
       1) Possibilité de modifier les datas en mémoire, et de les sauver. 
       2) Possibilité de sortir ces datas sur imprimante.
       3) Option "search" permettant de rechercher une certaine chaine.
       4) Possibilité d'analyser des datas sous le mode éditeur.

      1.2 Editeur piste / secteur :
  
       1) Permet de lire / editer / écrire n'importe quel secteur DOS 3.2 ou DOS 3.3.
       2) Possibilité de lister un secteur en langage assembleur.

      1.3 Disk dianostics :
         
          Cette option permet de déterminer la vitesse du lecteur de disquette, de vérifier
          l'état de surface des disquettes, et d'initialiser ces dernières.
       
      1.4 File manager :

       1) Sauver sur disquette certains paramètres
       2) Option "auto-load" permettant de charger des données nécessaires à la copie.
 
      1.5 Modification des paramétres :
   
          S.C.P.L.M. (Sans Commentaire Pour Le Moment)
       
      1.6 Pourquoi Nibbles Away II
             
          Ce programme de copie a été conçu pour protéger votre investissement "software".
          De même vous pourrez déplomber tous les logiciels vendus dans le commerce.
          Nibbles Away II comporte de nombreuses techniques que l'on ne retrouve pas dans des programmes
          similaires, et ses routines on été écrites dans un souci d'efficacité maximale tout en restant
          transparentes pour un utilisateur courant.


     2.0    COPIER

      2.1 Nibbles Away (option "N")

          En choisissant "NIBBLES AWAY", une liste d'option est alors affichée avec les valeurs prises
          par defaut si vous n'en spécifiez pas d'autre lors de la question "CHANGE DEFAUT VALUES".
          Une reponse affirmative est indiquée par "Y", une frappe sur la touche "return" prenant la
          lettre "N" par defaut.

       2.1.1 Les paramètres

          - Disk Drive Slot : C'est le slot ou doivent etre branchés les deux drives servant à faire la copie.
                              L'utilisation d'un seul lecteur est possible.
          - Source Drive : Drive dans le quel est placée la disquette à copier.
          - Destination Drive : C'est l'autre

          - Starting Track : C'est la première piste à copier, on peut specifier une demi-piste.(ex: 02.5)
          - Ending Track : C'est la dernière piste à copier.
          - Track Increment : Normalement, la valeur est de 1, elle peut etre changée en ce que l'on veut.
                              Par exemple, un incrément de 1.5 et Starting Track de 00 copiera les pistes
                              00, 1.5, 03, 4.5, etc...

          - Data Mover : Si cette option est selectionnée, elle permet à NIBBLES AWAY II de ne pas analyser
                         les datas rencontrées, mais de les copier directement. Cette option est rarement utilisée
                         et peut occasionner des tentatives répétées avant de parvenir à copier une piste.
                         L'usage de cette option supprime les questions suivantes puisqu'elle ne permet plus
                         d'utiliser les autres options.
          - Synchronisation : Cette option permet de synchroniser les pistes copiées selon le même schema que
                              l'original sur la piste 00, c'est à dire que les datas seront fidèlement recopiées
                              mais dans un certain ordre. Une tentative de copier une disquette synchronisée
                              sans l'usage de cette option ne produira pas forcemment d'erreurs lors de la copie,
                              mais la disquette cible pourra ne pas booter.
          - Erase Destination Track : Permet d'effacer les pistes qui vont être copiées sur la disquette cible
                                      avant leur écriture. Surtout utile en combinaison avec l'option suivante si
                                      la disquette cible n'est pas vierge.
          - Auto Half Tracks : Force NIBBLES AWAY à lire et écrire par pas de 0.5. Utile si on ignore sur quelles
                               pistes se trouvent les datas à copier.
          - Reduced Error CHK : Diminue le nombre de re-essais auquel se livre NIBBLES AWAY lors d'une tentative
                                de copie. Gagne du temps, mais certaines pistes se copient seulement apres 3 ou 4 essais.

       2.1.2 Lors de la copie

  Ce que vous voyez sur l'ecran :
 (quelque chose du genre de ceci)

----------------------------------
               READING

TRACK = 21.5

 TRACK HLF   TRACK HLF   TRACK HLF
------ ---  ------ ---  ------ ---
00-Y00      0C-YOO      18-Y00
01-Y00      0D-Y00      19-N50 Y00
02-Y00      0E-Y00      1A-    Y00
03-Y00      0F-Y00      1B-    N50
04-Y00      10-Y00      1C-N50 Y00
05-N50      11-Y00      1D-    N50
06-    Y50  12-Y00      1E-N50 Y00
07-    N50  13-Y00      1F-    Y00
08-Y00      14-Y00      20-    Y00
09-Y00      15-Y00      21-
0A-Y00      16-Y00      22-
0B-Y00      17-Y00
----------------------------------

          L'operation en cours est affichée en haut de l'écran.
          La piste traitée est indiquée juste en dessous.
          Les pistes copiées avec succès sont indiquées avec un Y en mode inverse, la lettre N indique que
          la piste n'a pu être copiée, mais ne vous désespérez pas trop vite car cela peut être simplement dû
          au fait qu'elle ne comporte pas de data.
          Les demi-pistes sont indiquées sous les colonnes HLF.
          Les chiffres après les lettres N et Y indiquent le nombre d'erreurs.
          Le premier chiffre indique les erreurs de lecture, le deuxième les erreurs d'écriture.

          En cours d'exécution de NIBBLES AWAY, certaines touches vous permettent de reprendre le controle :

          < ESC > Arrête toutes opérations en cours.

          <  G  > Passe en mode graphique, permet de visualiser avec un peu d'habitude les pistes vides ou pleines.

          <  T  > Repasse en mode text.

          <SPACE> Permet "oublier" la piste en cours de copie et de passer à la piste suivante selon l'incrément choisi.


     3.0   MODIFIER

          Pour accéder à ce sous-programme, appuyer sur la touche "M" depuis le Master Menu, vous verrez apparaitre ceci :

--------------------------
PARAMETER SET MODIFICATION

        B - BACKUP

        C - CONTROL

        F - FILTER

        E - ERASE

        S - SYNC ADD

        G - GLOBAL

ENTER SET TO MODIFY ->
--------------------------

     BACKUP : Une pression sur "B" vous permet de changer les paramètres de copie.
              La question "USE ADDRESS MARK ->" apparait et vous autorise à changer les bytes de début
              de champ. Une réponse affirmative "Y" vous permet d'inscrire une nouvelle adresse (généralement
              indiqués sur la feuille de paramètre fournie avec NIBBLES AWAY). Par la suite, une réponse négative
              à cette question refixera la valeur originale. Une question similaire apparait ensuite concernant
              "INSERT MARK", la marche à suivre est la même. Ces opérations sont expliquées plus loin dans ce
              mode d'emploi.

          Exemple :
------------------------
      BACKUP PARAMETERS

   USE ADDRESS MARK ->

   USE INSERT MARK  ->

OVERIDE NIBBLE FILTER ->
OVERIDE GLITCH DETECT ->
USE NIBBLE COUNTER    ->
OVERIDE SYNC CONVERT  ->
OVERIDE STANDARDIZER  ->

------------------------

     On peut utiliser la flèche "<-" à tout moment pour revenir en arrière.
     Après avoir répondu à toutes les questions, on retourne au menu de modification de paramètres.
     Les 5 questions ci-contre permettent de mettre en fonction les options correspondantes décrites plus loin.
     Une pression sur la touche "Q" retourne au menu de modification des paramètres.

     CONTROL : Depuis le "MODIFIER MENU", une pression sur "C" vous donnera accès au controle de modification
               de paramètres (controle parameter modifier). Une liste de paramètres et leur valeurs apparaitront
               alors à l'écran avec de petites flèches à coté des chiffres.
               Placez ces flèches face au paramètre que vous voulez modifier et appuyez sur la barre d'espace
               pour voir apparaitre la question "ENTER NEW VALUE ->".
               Tapez la nouvelle valeur du paramètre.
               Puis tapez <return>.
               Plusieurs paramètres peuvent être changés de cette façon.
               Une pression sur la touche... "Q" ramène au "Modifier Menu".
    Exemple :
--------------------------------
        CONTROL PARAMETERS

FIND MAX ->0C<-    DATA LIM   65
DEL BYTE   30      DATA MIN   13
GAPBYTE1   FE      DATA MAX   1D
GAPBYTE2   00      SYNC SIZ   09
RDERR MX   05      FIX AMNT   08
WRERR MX   07      FIX VALU   7F
SYERR MX   05      PAGE LEN   42
GAP SIZE   0C      LF VALUE   0A
FALSE LO   0A      SHIFT N+   00
FALSE HI   1B      SHIFT N-   08
GAP HIGH   48      OFFSET +   00
TOLERANC   00      OFFSET -   00
--------------------------------

Note Deckard: sur la version C3, il y a aussi "TRK CHOP" et "MATCH NM".

     Les flèches sont deplacées avec les flèches du clavier, ce qui parait logique.
     Une pression sur la barre d'espace vous demande d'inscrire une nouvelle valeur à valider avec <return>.

     FILTER : Depuis le "Modifier Menu" , une pression sur "F" affichera dans le bas de l'écran
              le "Nibble Filter" actuel. Les touches "<-" et "->" sont utilisables pour déplacer les flèches
              sur l'écran à travers les différentes valeurs indiquées.
              Les touches "I","J","K","M" également et selon leurs fonctions usuelles.
              Une pression sur la barre d'espace occasionnera la commutation de la valeur choisie en mode
              inverse / Normal. Cette valeur sera alors filtrée et séparée des autres datas que
              NIBBLES AWAY ecrira sur la disquette "cible". C'est à dire qu'elle ne sera pas écrite; cela
              permet donc à l'utilisateur d'éliminer les bytes qui ne lui reviennent pas.
              Une pression sur les touches "1","2","3" activera les filtres "STANDARD","DOS 3.3 et DOS 3.2
              respectivement. Les valeurs qui apparaissent en mode Inverse avec chacune de ces options
              sont celles qui ne peuvent pas etre considérées valides.
              Le filtre "STANDARD" est pris par défaut par NIBBLES AWAY et ne prend pas en considération
              les valeurs incompatibles avec les drives de l'Apple. User des autres filtres avec précaution
              car ils peuvent tout aussi bien filtrer des datas correctes.
              Une pression sur "Q"... et on revient au "Modifier Menu".

     ERASE : depuis le "Modifier Menu", une pression sur "E" vous fera accéder à l'option "Erase Buffer".
             Ce dernier est une collection de 128 bytes qui seront les derniers à être inscrits sur une disquette
             lors d'un processus d'effacement.
             Les flèches sont déplacées comme pour le "Nibble Filter" et une pression sur la barre d'espacement
             vous demandera la nouvelle valeur à placer à cet endroit dans le buffer.
             Une valeur de moins de $80 sera représentée en Inverse additionné de $80 et représentera le
             byte à incrire sur le disque à ceci près que ces valeurs en Inverse seront inscrites comme bytes de
             synchro (sync-bytes).
             Touchez la lettre "Q" pour changer et sortir de l'option.

SYNC ADD : exemple :

-------------------------------
      SYNC ADD PARAMETRES

>80< 90  A0  B0  C0  D0  E0  F0
 81  91  A1  B1  C1  D1  E1  F1
 82  92  A2  B2  C2  D2  E2  F2
 83  93  A3  B3  C3  D3  E3  F3
 84  94  A4  B4  C4  D4  E4  F4
 85  95  A5  B5  C5  D5  E5  F5
 86  96  A6  B6  C6  D6  E6  F6
 87  97  A7  B7  C7  D7  E7  F7
 88  98  A8  B8  C8  D8  E8  F8
 89  99  A9  B9  C9  D9  E9  F9
 8A  9A  AA  BA  CA  DA  EA  FA
 8B  9B  AB  BB  CB  DB  EB  FB
 8C  9C  AC  BC  CC  DC  EC  FC
 8D  9D  AD  BD  CD  DD  ED  FD
 8E  9E  AE  BE  CE  DE  EE  FE
 8F  9F  AF  BF  CF  DF  EF  FF
-------------------------------

     Pression sur "S" depuis le "Modifier Menu" pour arriver ici.
     Les valeurs en Inverse se seront converties en sync à chaque fois qu'elles apparaitront.
     Les flèches bougent comme d'habitude et la barre d'espace permet d'alterner entre mode Inverse
     et Normal. A l'origine, aucune valeur n'apparait Inversée.

     GLOBAL : Depuis le "Modifier Menu", une pression sur la touche "G" vous donnera accés au "Modificateur Global".
              Le programme vous demandera un numéro de bytes; il indiquera la valeur actuelle de ce dernier et vous
              demandera la nouvelle valeur à lui assigner. Une pression sur "Return" gardera la valeur d'origine
              (CF INFRA). Et bien sur, pression sur "Q" vous ramène au menu.
     Note importante : Tous les changements apportés aux paramètres resteront actifs jusqu'à ce que NIBBLES AWAY
                       soit rebooté. Si vous voulez sauver les valeurs que vous avez changées, utilisez l'option
                       "Save" du "Filer", vous pourrez ensuite les retrouver avec l'option "Load".

     LES PARAMETRES :

  NOM     VALEUR DEFAUT
--------  -------------

FIND MAX      $0C        Ce byte indique le nombre minimun de bytes qui doivent etre justes
                         pour verifier la validité des datas.

DEL BYTE      $30        Ce byte controle la durée utilisée par les drives en cherchant de
                         piste en piste. Plus le chiffre sera petit, moins la durée sera longue.

GAPBYTE1      $FE        Le plus petit Gap-Byte rencontré.

GAPBYTE2      $00        Le  "   grand  "    "    "   "  , +1.

RDERR MX      $05        Le plus grand nombre d'erreur de lecture autorisées avant de passer à
                         la piste suivante.

WRERR MX      $07        Pareil avec les erreurs d'ecritures.

SYERR MX      $05        Pareil avec les erreurs de synchro.

GAP SIZE      $0C        Le nombre minimum de bytes nécessaires pour reconnaitre un gap.

FALSE LO      $0A        Nombre de bytes placé avant pour détecter un "Gap faut".

FALSE HI      $1B        Nombre de bytes placé avant pour détecter la fin d'un "Gap faut".

GAP HIGH      $4B        Le byte haut de la plus haute adresse ou chercher un Gap.

DATA LIN      $65        Le byte haut de la limite effective du buffer de lecture.

DATA MIN      $13        Nombre minimum de pages en avant ou chercher un Gap.

DATA MAX      $1D        Nombre maximum de pages en avant ou chercher un Gap.

TOLERANC      $00        Nombre maximum de bytes qui peuvent ne pas etre similaires à ceux de "Nibble Count".

SINC SIZ      $09        Indiquer la longueur des bytes de syncro écrits sur le disque par increment de 1.
                         Seules les valeur $09 et $0A sont prises en considération.

FIX AMNT      $08        Nombre de gapbytes qui sont convertis en synchro à chaque Gap.

FIX VALU      $7F        Valeur de synchro utilisée pour remplacer le Gapbyte de conversion synchro.

PAGE LEN      $42        Longueur de page utilisée dans le Track / Bit Editor durant un dump de la memoire.

LF VALUE      $0A        Montée d'une ligne durant un dump de la memoire.
                         Mettre cette valeur à $00 si votre imprimante produit un double espace.

PRT SLOT      $01        Numéro du slot de l'imprimante.

MATCH NM      $03        Le nombre de fois qu'un Nibble Count doit atteindre pour etre valide.

SHIFT N+      $00        Voir appendice sur le Nibble Count.

SHIFT N-      $08        Idem.

OFFSET +      $00

OFFSET -      $00

     4.0   TRACK / BIT EDITOR


     Ce sous-programme permet de déterminer les valeurs des paramètres decrits dans le chapitre 3.0
     et relatifs aux méthodes de copie de certaines disquettes protégées tres vicieusement.
     Il procure surtout à l'utilisateur la possibilité de lire / éditer / écrire ces valeurs sur une disquette.
     Pour entrer dans le Track / Bit Editor depuis le "Master Menu", pressez la touche "T".
     Le drive #1 se mettra à tourner et cherchera la piste 00, l'écran affichera alors 256 bytes de mémoire
     avec leurs adresses respectives indiquées sur la gauche.
     Les touches "<-" et "->" vous permetteront alors d'afficher la mémoire par pas de 256 bytes, ceci de $2000 à $7FFF.
     Deux lignes apparaitront au-dessus de l'aire d'affichage des datas.
     Entre ces lignes on trouvera les informations actuelles sur le Track / Bit Editor;
     sur la gauche de l'ecran, le mot PTR apparaitra suivi d'un nombre à quatre chiffres, qui est l'adresse mémoire
     dont se servira NIBBLES AWAY comme début lors d'un ordre d'écriture (l'adresse de fin est $8000).
     Au centre, le mot ADDR sera suivi par un nombre à quatre chiffres représentant la position actuelle du
     curseur dans le buffer de lecture / écriture. A droite, le numéro de piste.

     Voici la liste des commandes disponibles dans le Track / Bit Editor :

I,J,K,M...Déplacement du curseur.
<-,->.....Saut de toute une page.

A chaque déplacement, ADDR est réactualisé avec la position courante.

R.........Lecture de la piste actuelle (numéro derrière TRK) et stockage dans le buffer.
W.........Ecriture dans le buffer, adresse de debut PTR & adresse de fin $8000.
          Ecriture sur la disquette après avoir répondu "Y" à la question "Verify"
<SPACE>...Entrée dans le mode EDIT.
          Commandes:
           0-9,A-F...Inscrit une valeur hexadécimale dans la fenètre d'édition au-dessus de la ligne status.
           <RETURN>..Ecrit la valeur affichée à la fenètre d'édition dans le buffer à la position du curseur,
                     et quitte le mode EDIT.
           <-,->.....Déplace le curseur en avant et en arrière dans le buffer.
           <SPACE>...Bouge le curseur en avant, mais écrit d'abord la valeur affichée dans la fenètre d'édition.
;..........Augmente d'une demi piste.
-..........Diminue d'une demi piste.
T..........Permet d'entrer directement un numéro de piste.
P..........Permet de changer la valeur PTR.
A..........Entrée dans le mode ADD.
           Les bytes à Insérer peuvent être tapés dans la fenêtre d'édition.
           "Return" entre la nouvelle valeur et quitte cette option ou "Space" entre la nouvelle valeur et
           déplace le curseur sur la case suivante.
D..........Efface le byte placé sous le curseur (et décalage).
G..........Affiche "GO TO ->" et demande l'adresse où envoyer le curseur qui doit être comprise entre
           $2000 et $7FFF. Une pression sur "P" placera le curseur sur la valeur PTR, une pression sur
           "B","E" l'enverra au debut ou à la fin du buffer.
H..........Alterne le plus haut bit de la valeur du curseur (passage en vidéo-inversé).
Z..........Active les routines d'analyse, place les datas analysées à la fin du buffer et fixe à PTR
           l'adresse de début des datas. Les erreurs d'analyse Apparaissent eventuellement.
Q..........Retourne au menu principal (ou ctrl-C).
S..........Permet de rechercher une chaine de bytes, indiquée par groupes de 2 chiffres hexadécimaux (D5 AA 96,
           par exemple). Une pression sur "S" garde la précédente chaine. Si une chaine n'est pas trouvée,
           un bruit intervient et le curseur ne bouge pas. En cas de succès, le curseur se positionne sur la
           chaine en question.
O..........Permet d'imprimer sur papier tout ou une partie du buffer. Indiquez les adresses de début et de fin,
           le titre et pressez une touche pour commencer. Appuyer sur "Q" pour stopper l'impression.

           Exemple d'impression :
---------------------------------------
             TRACK EDITOR
---------------------------------------
PTR=2000      ADDR=2000        TRK=00
---------------------------------------

            PRINT FUNCTION

     STARTING ADDRESS ->2000

     ENDING ADDRESS   ->8000

 TITLE ->ANY TITLE MAY GO HERE


    POSITION PRINTER AT TOP OF PAGE
      THEN PRESS ANY KEY TO START
---------------------------------------


     Exemples de pistes editées :


---------------------------------------
             TRACK EDITOR
---------------------------------------
PTR= 6734    ADDR=4643         TRK=00
---------------------------------------
4600-D7EDF6BE B5AEBBAC BDDDEBAE BBACB9FE
4610-CDEAAC9E D6E7EDF7 F7BECFF9 DEADE99E
4620-DFEBDCDA DDECFDD3 B3FDEAD3 FDFAB2BE
4630-FF9AB5B9 D9FFA7F3 FFBE9ABC 9ADFF7F7
4640-DAFAE9DB DEAAEBEB FFFFFFFF FFFFFFFF
4650-FFFFFFFF FFFFFFFF FFFFFFD5 AA96FFFE
4660-AAAAAFAF FAFBDEAA E6DFCFDF E7F9FEFF
4670-FFD5AAAD E6E6F9F2 9BFCF4DA DAEDFFFD
4680-E9F6E7E9 B297EAD3 CDADB2BE CBEDD7BD
4690-9AD9F4BC B6AFBA9D BEFCE6DA B3F3EDEB
46A0-CFF7EEB3 FDE9BEFD ABF9B59B F9BB9FFC
46B0-CD9AD9D9 EFBFA7DF F7DDDDD7 F39EFAEF
46C0-FFFFA7F7 EED7FAEB FCE7D6E7 96F2D39F
46D0-BBFCB7FA B2AEE796 EFB5BCF4 ABCFFFFA
46E0-F59AF3D9 BDE69BFD 97FC7DD9 D3FEAFDE
46F0-E5E6B2AE DFBBFDE7 E5BEDECE BEEEFAF3
----------------------------------------
Disquette DOS 3.3 standard
19 $FF utilisés comme gapbytes.
Adresse de début D5 AA 96
Début de datas   D5 AA AD


----------------------------------------
             TRACK EDITOR
----------------------------------------
PTR=6846      ADDR=4016         TRK=01.5
----------------------------------------
4000-9F9FAEFB EEF4DDF2 979BEDF3 9E96CE9F
4010-BFBAD7EF F7F7FAD4 D7FEFBBF B7FDD3FB
4020-BBBCAEDE D5EAD6F3 FDEEDDF4 979EEDE5
4030-BECDE7D7 AE9BFFED DDF4979E EDFADFFD
4040-9796AF9B FBFFDDF4 979EEDE5 BECB9797
4050-AE9BFAFE DDF4979E EDEEDFCD 97F6AF9E
4060-FEFFB9F6 EBBE9F9D F5F29A97 EDEF9BBE
4070-9F97B5FB FFFBDDEE 9DA6F2F2 96F6A6FF
4080-BEDDCDFF FADDF4F7 9EEDEFB6 DEAAEBF1
4090-D7DFAAAA AAAAAAAA AAAAAAAA AAAAAAAA
40A0-AAAAAAAA D5AB96FF FEAFAAAE ABFEFFDE
40B0-ADEBFDFA A9ABAAAA AAAAAAD5 AAAEBFFF
40C0-B6EFBDED FFFBF7B7 DBFAFBF7 B5BBBBF5
40D0-BBBEFDFF F7D7ADE2 EFEFBDAD DFF7A8CF
40E0-FCCBEFF5 B2F5BEB5 BED697B2 D6D7DBAD
40F0-EBB78FDE FFF9BAD4 DFDDBDFE FAFBFFGF
----------------------------------------
Disquette utilisant des $AA dans les gaps comme protection.
Adresse de début changée en D5 AB 96
Début de datas              D5 AA AE


----------------------------------------
             TRACK EDITOR
----------------------------------------
PTR=6987      ADDR=7700         TRK=03
----------------------------------------
7700-AAAAAAAA AAAAAAAA AAAAAAAA AFFBFFFF
7710-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
7720-FFFFFDFC E1BFE7FF FFFFFFFF FFFFFFFF
7730-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
7740-FFFFFFFF FFFFFFF3 F4E7F6FF FFFFFFFF
7750-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
7760-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
7770-FFFFFFFF FFFFFFFF FFFFFFFF FFE7F9FE
7780-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
7790-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
77A0-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
77B0-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
77C0-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
77D0-FFFFFFFF FFFFFFFF FFFFFFDD ADDAAAFA
77E0-AAFAAAFA EAFAEAFA EAFEEAFE EAFAEAFA
77F0-EAFAEAFA AAFAAAFA AAFAAAFA AAFAAAFA
----------------------------------------
Disquette protégée n'utilisant pas de second gap.
Gap vraiment long.
Ne pas utiliser FALSE LO &FALSE HI.
Gap seul avant adresse début DD AD DA



----------------------------------------
             TRACK EDITOR
----------------------------------------
PTR=6763      ADDR=5250         TRK=1F.5
----------------------------------------
5200-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
5210-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
5220-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
5230-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
5240-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
5250-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
5260-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
5270-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
5280-FFFFFFFF FFFFFFFF FFFFFFFF FFD5AAB5
5290-FFFEABAB AEAEFAFB DEAAEBFF FFFFFFFF
52A0-FFFFFFFF FFFFFFFF FFDSAAAD ABABABAE
52B0-BDDEEAAF AFBDBBBE B7BAAEA7 BDFBF5BA
52C0-EBBFDAFE FEFEFFDB F5EEBDDB AEF7DDBB
52D0-EFBEABBE EEEDDBB7 ABABABAB ABABABAF
52E0-EADDBED7 DAD6BEDB ABB6FEDF B5ADB6DA
52F0-BBEAAEBA BEB5BBBD BDBBB5FA EEEAEEAD
----------------------------------------
Disquette DOS 3.2
Gap important
Adresse de début D5 AA B5
Deuxième gap
Début de datas  D5 AA AD

Notes de Deckard:
- la touche crtl-R permet de faire comme la touche R mais en affichant les sync-bytes en
  vidéo-inversé. On voit ainsi les zones de synchro du 1er coup d'oeil.
  A noter qu'avec ma version d'Applewin sous wine, cette option provoque un bug: la disparition d'un nibble sur 2!!!
  Par exemple, l'écran affiche D5 96 au lieu de D5 AA 96!!!
- L'option O peut s'utiliser avec Apple Oasis de manière à faire des pseudo-impressions dans le presse papier.
- Il y a aussi les touches:
    C = count
   


     5.0   TRACK / SECTOR EDITOR


     On peut accéder à cette option depuis le Master Menu en tapant sur la lettre "S".
     Elle permet à l'utilisateur de lire / éditer / écrire n'importe quel secteur d'une disquette
     DOS 3.2 ou DOS 3.3. Les datas peuvent etre affichées en code hexadécimal ou ASCII.
     Le checksum utilisé par les routines internes de lecture / écriture peut ne pas être utilisé pour
     permettre de lire / écrire des disquettes n'utilisant pas de checksum standard.

     Ce qui apparait sur votre écran sous le Track / Sector Editor. Voici une liste des commandes disponibles.

I,J,K,M...Déplacement du curseur.
<-,->.....Déplacement du curseur D/G
A.........Permet d'afficher à l'ecran soit des codes hexa, soit ASCII, alternativement.
R.........Lecture du secteur indiqué.
W.........Ecriture du secteur indiqué.
T.........Indication d'un numéro de piste particulier.
S.........Idem pour un numéro de secteur.
O.........Accéde à la liste d'option suivante :
          S....Augmente le numéro du slot.
          D....Alterne le numéro du drive.
          F....Alterne le format du disque (13/16 secteurs par piste).
          C....Active ou non le Checksum. Permet de lire une disquette dont les bytes de fin de secteur ont été modifiés.
               Attention : Si le Checksum est activé, les secteur ECRITS utiliseront des bytes de fin standards.
<RETURN>.......Quitte ces options.
L.........Appelle la fonction désassembleur. Les datas seront affichées en language assembleur 6502.
          La touche "Return" termine cette fonction.
B.........Cette touche permet d'utiliser 8 buffers différents. Ces buffers sont numérotés de 0 à 7.
          Si des datas sont lues dans un buffer, les autres ne bougent pas. Très utile pour déplacer des
          secteurs d'une place à une autre.
<SPACE>...Entre dans le mode EDIT :
          0-9,A-F...Pour inscrire une valeur hexadécimale dans la fenètre d'édition.
          <SPACE>...Ecrit les valeurs indiquées à la position du curseur, et déplace le curseur d'un cran.
          <-,->.....Déplacement du curseur à gauche et à droite.
          <RETURN>..Quitte le mode EDIT.
+.........Augmente le numéro secteur. Refaire R après.
-.........Diminue       "       "   . Refaire R après.
Q.........Retourne au menu principal.

Exemple :

----------------------------------------
             SECTOR EDITOR
----------------------------------------
TRK=00                            SEC=01
----------------------------------------
00- 8EE9B78E F7B7A901 8DF8B78D EAB7ADE0
10- B78DE1B7 A9028DEC B7A9048D EDB7ACE7
20- B7888CF1 B7A9018D F4B78A4A 4A4A4AAA
30- A9009DF8 049D7804 2093B7A2 FF9A8EEB
40- B74CC8BF 2089FE4C 849DADE7 B738EDF1
50- B78DE1B7 ADE7B78D F1B7CEF1 B7A9028D
60- ECB7A904 8DEDB7A9 028DF4B7 2093B7AD
70- E7B78DFE B6186909 8DF1B7A9 0ASDE1B7
80- 38E9018D FFB68DED B72093B7 60000000
90- 000000AD E5B7ACE4 B720B5B7 ACEDB788
A0- 1007A00F EAEACEEC B78CEDB7 CEF1B7CE
B0- E1B7D0D7 60087820 00BDB003 28186028
C0- 3860ADBC B58DF1B7 A9008DF0 B7ADF9B5
D0- 49FF8DEB B760A900 A89142C8 D0FB6000
E0- 1B020A1B E8B700B6 016002FE 0001FBB7
F0- 00B70000 0202FE60 02000000 01EFD800
----------------------------------------
DOS 3.3 Slave diskette.
Le curseur est en mode inverse.
Les valeurs peuvent être éditées et écrites sur la disquette.


----------------------------------------
             SECTOR EDITOR
----------------------------------------
TRK=00        DISASSEMBLE         SEC=01
----------------------------------------
   0000-   8E E9 B7    STX   $B7E9  
   0003-   8E F7 B7    STX   $B7F7
   0006-   A9 01       LDA   #$01
   0008-   8D F8 B7    STA   $B7F8
   000B-   8D EA B7    STA   $B7EA
   000E-   AD E0 B7    LDA   $B7E0
   0011-   8D E1 B7    STA   $B7E1
   0014-   A9 02       LDA   #$02
   0016-   8D EC B7    STA   $B7EC
   0019-   A9 04       LDA   #$04
   001B-   8D ED B7    STA   $B7ED
   001E-   AC E7 B7    LDY   $B7E7
   0021-   88          DEY
   0022-   8C F1 B7    STY   $B7F1
   0025-   A9 01       LDA   #$01
   0027-   8D F4 B7    STA   $B7F4
----------------------------------------
Le même secteur que précédemment désassemblé avec l'option "L".
Les premiers $28 bytes de ci-dessus en language assembleur 6502.

Note de Deckard: Sur la version C3, il y a aussi l'option D : Disk Skan pour faire une recherche
de chaine sur tout le disk ou un morceau en fonction du paramétrage sélectionné.
Le programme affiche alors les références trouvées sous la forme TT/SS.BB (TT=track, SS=sector, BB=byte).
H=recherche hexa, A=recherche alpha, L=recherche mnemonic.


     6.0   DIANOSTIQUES

         
     Après avoir sélectionné le Disk Dianostics depuis le Master Menu, voici ce qui apparait :

----------------------------------------

            DISK DIANOSTICS


           S - SPEED TEST
        
           M - MEDIA VERIFY

           D - DEGAUSS DISK

     ENTRER SELECTION ->              

----------------------------------------
              
              Une pression sur "S" vous permet de verifier la vitesse de votre drive.
              Attention, toutes les données qui pourraient être sur la disquette servant au test
              seront effacées. Le petit dessin ci-dessous est suffisamment explicite pour se passer
              de commentaires, cependant n'importe quelle valeur entre -5 et +5 est normale.
              La vitesse peut également varier un petit peu.

----------------------------------------

             DISK SPEED TEST


    
       (SLOW)               (FAST)

                    O
 <---!----!----!----!----!----!----!--->
 
                   !
                -------
                >-0002<
                -------


           PRESS <ESC> TO EXIT

----------------------------------------


     L'option "D" dégauss Disk permet d'effacer complétement un disque. Un bruit retentit à la fin l'opération.

     L'option "M" Média Vérify indique si la disqette testée est exempte d'erreurs de surface.

          
     7.0   FILER

    
     Depuis le Master Menu, taper sur la touche "F" pour accéder au Filer et faire apparaitre le menu suivant :

-----------------------------------------

      FILER MENU

L - LOAD PARAMETER FILE

S - SAVE PARAMETER FILE

D - DELETE PARAMETER FILE

I - INITIALIZE DISKETTE

X - EXECUTE EXEC FILE

----------------------------------------

     Le filer a deux fonctions précises :

     La première est de permettre à l'utilisateur de sauver sur une disquette certains paramètres
     nécessaire à la copie de programmes donnés. Ainsi lors de copies ultérieures (on n'est jamais
     trop prudent...), les paramètres seront chargés automatiquement et l'utilisateur n'aura pas à
     les retaper laborieusement.
     La deuxième est la fonction "Auto-Load" qui permet de charger automatiquement les données fournies
     sur la disquette originale de NIBBLES AWAY nécessaires à la copie d'une foule de programmes.
     Ainsi, si la copie d'une disquette contenant des datas sur les pistes 00-04 et 5.5-9.5 nécessite
     le changement de 5 paramètres, la fonction "Auto-Load" s'occupera de tout ça automatiquement et
     l'utilisateur aura plus qu'à se tourner les pouces. Toutes ces fonctions automatiques s'afficheront
     à l' ecran de la même manière que si elles étaient tapées manuellement.
     Pour charger des paramètres depuis le "Filer Menu", tapez "L".
     NIBBLES AWAY affichera les noms des programmes dont il connait les paramètres.
     Vous pourrez choisir avec les touches "<-" et "->" et validez votre entrée avec "Return" selon le
     processus connu.

     Note : Les paramètres chargés et sauvés concernent BACKUP, CONTROL, FILER, ERASE BUFFER et SYNC ADD.
     Ceux ayant rapport avec le GLOBAL Modifier doivent etre ré-entrés à chaque fois.
     Avant de sauver certains paramètres, il vous faut initialiser une disquette depuis NIBBLES AWAY
     avec l'option "I" du filer Menu. Les noms que vous donnerez à vos listes de paramètres ne pourront excéder
     28 caractères.
     ATTENTION : Si vous effacez une liste de paramètres depuis NIBBLES AWAY, elle ne pourra pas etre récupérée.   
        

     8.0   CE QU'IL FAUT CONNAITRE


      8.1 Quelques "trucs" simples

     Si un disque refuse de se laisser facilement copier, la première chose à faire est de regarder sur
     quelles pistes se produisent des erreurs. Si le nombre de ces dernières est important, l'option "Auto-Half Track"
     peut etre utilisée.
     Si le disque original est protégé par synchronisation, la copie ne bootera pas, mais la tête de lecture
     du drive fera de violents et bruyants mouvements d'avant en arrière.
     L'option "Syncro" peut donner de bons résultats dans de tels cas.
     Il est en général nécessaire de recopier la piste 00 à la fin de la procédure de copie.
     Si le résultat n'est pas toujours celui escompté, il faut entrer dans le Track / Bit Editor et
     rechercher les adresses de debut de secteurs. Si on peut les repérer, il faut ensuite les inscrire dans
     le Backup Modifier.  

      8.2 Avis aux utilisateurs avertis

     Voici tout d'abord quelques explications sur la manière dont sont conservées les informations sur une disquette:

     Au début de chaque secteur, on trouve des bytes de synchro qui sont normalement des FF, mais cela à pu être
     changé (par exemple en FE). On doit ensuite trouver le marker du secteur qui permet de le reconnaitre, et
     les datas proprement dites. Ces datas sont parfois codées de telle manière qu'elles ne peuvent etre écrites.
     Après les datas, il y a des bytes de fin puis on recommence avec les bytes de synchro.
     Les sections de bytes de synchro sont appelées gap, et les bytes qui les composent les gapbytes.
     Ils sont en général facilement reconnaissables car ils sont par groupe de 10 ou 15.
     NIBBLES AWAY est conçu pour reconnaitre les gapbytes composés de FF ou de FE. Si ces gapbytes sont d'une
     autre sorte, vous devez en informer NIBBLES AWAY. Les paramètres Gapbyte 1 et Gapbyte 2 doivent alors être
     saisis de manière à avoir:
     Gapbyte 1 = la valeur la plus petite des Gapbytes rencontrés
     Gapbyte 2 = la valeur la plus grande des Gapbytes rencontrés.

     Si l'échelle de ces valeurs est trop importante, NIBBLES AWAY peut prendre des datas pour des Gapbytes.
     Par exemple si une disquette utilise des gapbytes AA, le gapbyte 1 devra etre fixe à AA et le gapbyte 2 à AB.  
    
     NIBBLES AWAY peut aussi directement chercher le marker de début de secteur (exemple : D5 AA 96) qui peut
     lui-même etre indiqué dans le Backup Modifier. Cette méthode est plus fiable que la précédente et se
     révèle indispensable si les Gapbytes sont différents tout au long de la disquette.
     Les markers de secteur doivent normalement avoir une longueur minimum de $OC bytes, et s'ils sont moins longs,
     cela doit etre indiqué dans Find Max. La valeur minima de Find Max est $03 bytes.
     Pour constituer un Gap, il faut normalement au moins $0F bytes, mais cela peut etre plus (dans le cas d'un
     DOS 3.2 par exemple) ou moins pour certaines disquettes protégées. Ce ne sera cependant jamais moins que $0C
     bytes par suite de limitations techniques dues aux drives Apple. Nibbles Away recherche des Gapbytes
     d'au moins $0C de longueur mais on peut spécifier moins par l'intermédiaire du Gap Size.
     Les Gapbytes peuvent etre différents tout au long de la disquette et Nibbles Away utilise une routine interne
     qui détecte cette anomalie dans la plupart des cas. Elle peut être modifiée si on le désire avec
     False Hi et False Loo, où False Lo est le nombre de bits que Nibbles Away recherchera pour déterminer
     si un Gapbyte existe et False Hi le nombre de bits où il déterminera qu'il n'y a pas de Gapbytes.
     Cette fonction peut etre supprimée dans le cas d'interférences avec les autres en répondant "N" à la
     question "OVERIDE GLITCH DETECT" dans le backup Modifier.
     Rappelez vous lorsque vous êtes dans le Track/Bit Editor qu'il doit TOUJOURS y avoir au moins une piste
     ne contenant pas de datas entre deux pistes en contenant.
     Les valeurs prises par défaut pour Data Min et Data Max sont respectivement $13 et $1D, ce qui signifie
     qu'une piste est reconnue valide par Nibbles Away si elle a une longueur minimum de $1300 bytes et
     maximum de $1D00 bytes. Ces valeurs conviennent pour la majorité des cas.
     La longueur des bytes de synchro est déterminée par Sync Size. Si ce paramètre est fixe à 9, 9 bytes de
     synchro seront écrits dans les Gaps et ailleurs, toute autre valeur fixera ce paramètre à 10.
     Le paramètre Fix Amnt controle le nombre de Gapbytes placés avant le marker du secteur qui devront être
     convertis en synchro. Si on répond "Y" à la question "OVERIDE SYNC CONVERT", ils ne seront pas convertis
     en synchro.
     Le paramètre Fix Valu controle en quoi les Gaps sont convertis quand le synchro est ajouté.
     Si on répond "Y" à la question "OVERIDE STANDARDIZER", les valeurs contenues dans les Gaps seront
     utilisées comme synchros sans autre forme de procès. Les bits qui seront ou non convertis en synchro
     peuvent etre choisis avec l'option "H" du Track/Bit Editor.
     Certains schémas de protection utilisent la méthode dite du "bit-insert" qui est difficile à détecter.
     Cela signifie qu'un byte de synchro est inséré au milieu de bytes normaux.
     L'option "USE INSERT MARK" a été prévue dans cette perspective.
     L'endroit où sera inséré ce byte de synchro peut etre déterminé manuellement avec Offset + et Offset -.


Retour sommaire

hr nibbles


Nibble News vol 1, issue #1 (08/1982).

Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News



Retour sommaire

hr nibbles


Nibble News vol 1, issue #2 (09/1982).

Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News


Retour sommaire

hr nibbles


Nibble News vol 1, issue #3 (10/1982).

Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News


Retour sommaire

hr nibbles


Nibble News vol 1, issue #4 (11/1982).

Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News




Retour sommaire

hr nibbles


Nibble News vol 1, issue #5 (12/1982).

Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News


Retour sommaire

hr nibbles


Nibble News vol 2, issue #1 (01/1983).

Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News




Retour sommaire

hr nibbles


Nibble News Vol 3, issue 6 (1985).

Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News




Retour sommaire

hr nibbles


Nibble News Vol 4, issue 2 (1985).

Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News
Scan Nibble News


Retour sommaire

hr nibbles


Nibble Parms.

Scan Nibble Away II parms
Scan Nibble Away II parms
Scan Nibble Away II parms
Scan Nibble Away II parms
Scan Nibble Away II parms
Scan Nibble Away II parms
Scan Nibble Away II parms



Retour sommaire

hr nibbles


Nibbles Away III et son langage NADOL.


Nadol
Nadol
Nadol
Nadol
Nadol
Nadol
Nadol
Nadol

Computer Applications Inc
Nadol Disk
Nadol Disk
Computer Applications Inc
Nadol


Floppy
Bootable
Download Nadol Master Disk version 1.00 (gzipped)
Floppy
Not bootable
Download Nadol Library for Nadol 1.00 (gzipped)
Floppy
Bootable
Download Nadol Master Disk version 1.26C (gzipped)
Floppy
Not bootable
Download Nadol Library for Nadol 1.26C (gzipped)
PDF
Format A5 (5 MBytes)
Download Nadol User's Manual


Doc trouvée sur internet:

                     **************************************
                    *                                      *
                   *             NIBBLES AWAY III           *
                  *                                          *
                 *            Complete Documentation          *
                  *                    by                    *
                   *                Mr.  Wiz                *
                    *                                      *
                     **************************************

     Nibbles Away III utilizes a unique programming language called NADOL, the
Nibbles Away Disk Optimized Language.  This program can be modified by the user
at will.  This allows NAIII to remain current, no matter what new developments
in copy-protection take place.  An added benefit is that users can create their
own programs under this powerful language.  A few examples would be programs
which can convert DOS 3.3 files to CP/M, or one which could display a color
disk map of files on a disk.  NADOL is used in much the same way as Applesoft,
so, if you can program in Applesoft, you should feel comfortable with NADOL.

     All of the screens, menus and prompts you will use with NAIII were created
with the NADOL language.


Using NADOL
-----------
     NADOL is an interactive language that can have 2 distinct modes.  The
first is "immediate" mode where commands are executed as they are typed in.
The second is "deferred" mode, where a series of commands is typed in and
executed later.  From the Main Menu prompt choose the NADOL option.  This will
display a period (.), which is the prompt for the NADOL immediate mode.  Try
this command:
                    PRINT "HELLO" <return>
The word HELLO is printed on the screen.  Numeric expressions work in the same
manner, such as:
         PRINT 5*4 <return> which will print 20 on the screen.
     Some commands require variables be passed to their parameters.  The
variables must first be defined.  In this example, the following sequence of
commands will read in and display data from sector 5 on track 4:

DEFINE INTEGER TRACK,SECTOR,COUNT,ERR
TRACK=4
SECTOR=5
COUNT=1
RSECT(RBUF,TRACK,0,SECTOR,COUNT,6,1,ERR)
DISPLAY(RBUF,256)

The DEFINE statement creates the four variables which are needed to pass to the
RSECT routine.  Then the track and sector numbers are assigned to the variables
with the "=" operator.  The variable COUNT is set to 1 since only one sector is
to be read.  The RSECT procedure is called to perform the actual read
operation.  Then the DISPLAY procedure is called to show the data which was
just read in.  The predefined variable RBUF is a section of memory normally
used for raw data reads, but it can be used for any other purpose.  In this
case, we used it for a temporary storage buffer for the data that was read and
displayed.
     At any time NADOL is waiting for a response (with the blinking cursor),
the CTRL-P key will print the contents of the screen to the printer.  The
predefined variable PRTSLOT (printer slot) is set to 1 but may be changed with
the configuration menu.
     Integer variables can range from -32767 to +32768.  For some operations,
byte variables are desirable.  They range from 0 to 255.  Integers occupy 2
bytes in memory, bytes occupy 1 byte.
     NADOL also allows the use of arrays or groupings of variables.  They are
referred to by the same name, with the "subscript" distinguishing them.  Below
is an example of how to create and use an integer array:

DEFINE INTEGER[10] MINE
MINE[0]=1
MINE[4]=5
PRINT MINE[0]+MINE[4]

This would print 6, since the 2 values would be added together. Note that on
the Apple II and II+ the right bracket can be entered with shift-M and the left
bracket with shift-N from NADOL.
     All data managed by NADOL is stored in either integers or bytes or
arrays.  Many times it is desired to store text data in a program.  NADOL has
provisions for handling this.  Text is stored in byte arrays in a special
format.  The text starts at element 0, with each additional character in the
next sequential location.  The last element should be zero indicating the end
of the text string.
     Normally when an array variable is specified in a PRINT statement, the
value of the first element is displayed.  In order to print the text contained
in a byte array, an exclamation point should be placed in front of its name in
the PRINT statement:

DEFINE BYTE[30] STRING
STRING[0]="H"
STRING[1]="I"
STRING[2]=0
PRINT !STRING

Would print HI on the screen.
     NADOL uses a number of built-in mathematical expressions including
addition (+), subtraction (-), multiplication (*), and division (/); as well as
logical operators, <>, <=, =>, =, etc.  The order of precedence means that the
expression:

5*6+3*4

will result in 42.  NADOL first evaluates the 2 multiplcations, since they have
highest precedence, then the addition will be performed.  Parentheses may also
be used in mathematical operations.  Logical operators include: AND, OR, XOR.
The comparison will return a 1 or 0 depending on the result of the logical
operation.
     The ASCII value of a character can be used in an expression or
comparison.  This is accomplished by enclosing the ASCII character in double
quotes ("), such that "A" would result in the hexadecimal value 65 being used.

The Editor
----------
     NADOL's built-in editor allows scanning of a program as well as insertion
and deletion of lines or characters.  The editor can handle lines up to 250
characters in length and supports horizontal scrolling to allow long lines to
be displayed.  The standard editor uses the 40-column display but versions are
included to support many 80-column displays.
     If no program is in memory, the cursor will be at the top of the screen
with [END OF PROGRAM] displayed.  This shows that there are no lines of program
currently stored.
     The editor is invoked by typing EDIT at the '.' prompt.  This will display
the current program and place the cursor at the top of the screen.  The
commands of the editor and their descriptions follow:

left arrow  Move cursor left one space
right arrow Move cursor right one space
ctrl-A      Selects Add mode.  All subsequent characters will be
            inserted into the current line.
ctrl-B      Move to Beginning of line.
ctrl-C      Page downwards.
ctrl-D      Delete character to right of cursor.
ctrl-E      Cursor up one page.
ctrl-F      Restores previous contents of line.  Undo any changes.
ctrl-I      Tab to next tab stop.  Tab stops are set every 2 characters.
ctrl-L      Insert a new Line at cursor position.
ctrl-N      Moves to End of line.
ctrl-Q      Quit editor and return to NADOL.
ctrl-R      Scroll page upwards.
ctrl-W      Move cursor upwards.
ctrl-X      Move cursor downwards.
ctrl-Y      Deletes the line which the cursor currently occupies.
ctrl-Z      Scroll downwards.

NADOL
-----
     NADOL is a structured language borrowing from Pascal, Basic, and C.
Programs are arranged as one statement per line.  Branching is allowed to
another part of the program.  Programs are entered using the Editor function
and executed with the RUN command.
     There are 4 options that NADOL can use depending upon the program line
contents:

1. Statement - "PRINT (5*6)/3"
2. Assignment - "I=5"
3. Procedure call - "DISPLAY($800,40)"
4. Flow control - IF/ELSE/ENDIF, GOTO, WHILE/ENDWHILE, etc.

Entering the following sample program:

DEFINE INTEGER ME
ME=0
WHILE ME<5
   PRINT ME
   ME=ME+1
ENDWHILE
PRINT "DONE"

and running it with RUN would procduce:

0
1
2
3
4
5
DONE

The WHILE/ENDWHILE lines are called a block.  As long as the contents of the
block remain true, the program will stay within the block.  In the above
example, when ME became greater than 5, the program jumped out of the block.
Multiple blocks, or nesting of blocks, are allowed with 8 blocks deep being the
maximum.
     Several sample programs are contained on the disk.  Try running them and
changing them to see how the editor and NADOL work together.

Procedures and Functions
------------------------
     NADOL has 2 different ways to create subroutines in a program.  Procedures
perform a set of instructions and return to the main program.  Functions pass
back a value to the main program.
     A sample of a Procedure follows:

DEFINE INTEGER J

PROCEDURE TIMESTWO
   J=J*2
ENDPROC

J=8
PRINT J
TIMESTWO
PRINT J

When RUN the results 8 and 16 would be printed.
     Functions operate in much the same way as Procedures, except they act as
expressions rather than statements.  Example:

DEFINE INTEGER J

FUNCTION OURS
   %1 = %1 + 1
   RESULT = %1 * %1
ENDFUNC

PRINT OURS(7)
J=OURS(6)
PRINT J

As shown, a function is used on the right side of an equate, and returns a
value.

NADOL Built-In Statements
-------------------------
The following layout will help explain each statement:

NAME                    TYPE
---------------------------------------
 Purpose
 Syntax (optional fields in parentheses)


AUXMOVE                  Procedure
 To move data to or from auxiliary memory in a IIe or IIc.
 AUXMOVE(apple addr,aux addr,length,direction)

BEEP                     Procedure
 Sounds a tone.
 BEEP(tone,time) range 0-255

CALL                     Procedure
 Executes a machine-language subroutine.
 CALL(address,accumulator,X-reg,Y-reg,status)


CATALOG                  Statement
 Display the catalog of a data disk and free space remaining.
 CATALOG

CLEAR                    Statement
 Clears all variables.
 CLEAR

CLREOL                   Statement
 Clears all text to right of cursor.
 CLREOL

CLREOP                   Statement
 Clears all text to right of cursor to end of current page.
 CLREOP

COLOR=                   Statement
 Sets the color used in lo-res graphics.
 COLOR=expression (0-15)

CONVERT                  Procedure
 Convert a byte array containing ASCII text into an array of hex or
 decimal values.
 CONVERT(source,destina,type,size,count1,count2)

COPY                     Procedure
 Copies a block of data from one location to another.
 COPY(source,destina,length)

DEFINE                   Statement
 Allocates space for one or more variables.
 (DEFINE) type (n) name (,name)..

DELAY                    Statement
 Pauses for a specific amount of time.
 DELAY(expression) in milliseconds

DELETE                   Command
 Removes a file from work disk.
 DELETE filename

DISASM                   Statement
 Displays a disassembled listing of machine code.
 DISASM(start,label,lines,offset)

DISPLAY                  Procedure
 Displays a block of data in hex.
 DISPLAY(start,length)

EDIT                     Command
 Invokes the built-in program editor.
 EDIT

FILL                     Procedure
 Fills a section of memory with a value.
 FILL(start,length,value)

FIND                     Procedure
 Finds a specified pattern with the ability to ignore bit 7 and
 perform wildcard matching.
 FIND(start,length1,pattern,length2,7 flag,wild flag,offset)

FLASH                    Statement
 Sets flash mode for printed characters.
 FLASH

FILTER                   Procedure
 Copies data into a write buffer, passing it through a 'filter' to
 remove unwanted values.
 FILTER(start,length,table,number)

FORMAT                   Procedure
 Formats a range of tracks.
FORMAT(first,last,volume,interleave,nsect,slot,drive,error)
  interleave=name of byte array containing numbers for sectors on tracks
  to be formatted

FREE                     Function
 Returns the amount of space available for programs and data.
 variable=FREE(x) where x is a dummy expression, usually 0.

GOTO                     Statement
 Transfers program execution to another location.
 GOTO labelname

GOTOXY                   Procedure
 Moves cursor to a new location on screen.
 GOTOXY(x,y)

HCOLOR                   Procedure
 Sets color for high-res plotting.
 HCOLOR=expression   (0-7)

HEXPACK                  Statement
 Reads HEX data into byte array, with optional checksum.
 HEXPACK name WITH "text" (,checksum)

HIRES                    Statement
 Initializes hi-res graphics mode.
 HIRES

HLINE                    Procedure
 Draws a line on lo-res screen.
 HLINE(x1,y1,x2)

HOME                     Statement
 Clears screen and places cursor in upper left corner.
 HOME

HPLOT                    Statement
 Plots points or draws lines on hi-res screen.
 HPLOT(x,y) (TO x,y)...

HSCRN                    Function
 Returns value of a dot on hi-res screen.
 variable=SCRN(x,y)

IF, ELSE, and ENDIF      Statement
 Alters program flow based on a condition.
 IF expression
   .
   (statement executed on true)
 (ELSE)
   .
   (statement executmd on false)
   .
 ENDIF

IN#                      Statement
 Takes program input from a peripheral slot.
 IN#expresion (1-7)

INIT                     Command
 Formats a blank disk for storage.
 INIT name

INPUT                    Procedure
 Reads ASCII data from keyboard into a byte array.
 INPUT(name,max,count)  where max is maximum characters allowed, and
 count is name of variable.

INVERSE                  Statement
 Sets inverse mode for all printed characters.
 INVERSE

LABEL                    Statement
 Sets a location which can be branched to with a GOTO statement.
 LABEL name

LCMOVE                   Procedure
 Moves data to or from the language card.
 LCMOVE(mem address,lc address,length,,direction)
 where if direction=0 then from LC, if 1 then to LC

LENGTH                   Function
 Returns the length of the text in a byte aray.
 variable=LENGTH(name)

LIST                     Command
 Displays the current program.
 LIST

LOAD                     Command
 Loads a file from current workdisk.
 LOAD filename (AT address)

LORES                    Statement
 Initializes lo-res graphics.
 LORES

LSCRN                    Function
 Returns the color of a point on screen.
 variable=LSCRN(x,y)

MAKE                     Procedure
 Creates a filter in the specified array.
 MAKE(address,length,start,num zeroes,bit length)

MASK                     Procedure
 Sets and clears bits in range of memory.
 MASK(start,length,or value, and value)

NEW                      COMMAND
 Erases current program and clears variable space.
 NEW

NOT                      Function
 Returns the logical inverse of a value.
 variable=NOT(expression)

NORMAL                   Statement
 Returns text display to normal characters.
 NORMAL

PACK                     Procedure
 Places a text string into a byte array.
 PACK name WITH "text"

PDL                      Function
 Reads a game paddle.
 variable=PDL(expression)

PLOT                     Procedure
 Plots a dot on lo-res screen.
 PLOT(x,y)

PR#                      Command
 Sends all text output to perpherial slot.
 PR#expression (1-7)

PRBLOCK                  Procedure
 Displays a section of memory in a variety of formats.
 PRBLOCK(start,length,label,digits,format,count1,count2,space)
 where:
  length=# of bytes to display
  label=first # to show on left margin of screen
  digits=# of digits to show of label above (0-4).
  format-0=ASCII, 1=HEX, 2=HEX with bytes <$80 in inverse.
  count1=# of bytes displayed per line.
  count2=# of bytes displayed per grouping on line.
  space=# of bytes displayed between groupings on a line.

PRINT                    Procedure
 To display data on screen.
 PRINT (expression)(,)(;)(expresion)(,)(;)...

PRINTBYTE                Statement
 Prints 8 bit hex values.
 PRINTBYTE(expression)(,)(;)...

PRINTHEX                 Statement
 Print 16 bit hex values.
 PRINTHEX(expression)(,)(;)...

PROCEDURE                Statement
 Defines a user subroutine.
 PROCEDURE name

RECAL                    Procedure
 Moves read/write disk head to track 0.
 RECAL(slot,drive)

RENAME                   Command
 Changes name of disk file.
 RENAME oldname,newname

READ                     Function
 Reads a character from keyboard.
 variable=READ(expression)

RBLOCK                   Procedure
 Reads 1 or more blocks from a ProDOS format disk.
 RBLOCK(address,block,count,slot,drive,error)

RESULT                   Statement
 Evaluates expression to be returned as the result of a user defined
 function.
 RESULT=expression

RSECT                    Procedure
 Reads 1 or more sectors from a disk.
 RSECT(address,track,half,sector,count,slot,drive,error)

RTRACK                   Procedure
 Reads raw data from a specified track into the read buffer.
 RTRACK(address,track,half,slot,drive)

RSYNC                    Procedure
 Functionally identical to RTRACK, except that a reference mark on
 track 0 is checked before reading.
 
WSYNC                    Procedure
 Functionally identical to RTRACK, except a reference mark on track 0
 is checked before writing.

WTRACK                   Procedure
 Writes a section of raw data to a disk from write buffer.
 WTRACK(sync size,pre fill,track,half,slot,drive,error)
 where pre fill=# of sync bytes to write prior to data.

RUN                      Command
 Begins the execution of a user program.
 RUN

SAVE                     Command
 Stores programs or data on disk.
 SAVE filename (AT address,length)

SETFORMAT                Procedure
 Selects the format, address header, data header, and interleave for
 RSECT, WSECT and FORMAT procedures.
 SETFORMAT(type,address header,data header,interleave)

SIZEOF                   Function
 Determines size of a NADOL disk file.
 variable=SIZEOF(filename)

STOP                     Statement
 Terminates a program.
 STOP

TEXT                     Statement
 Switches off graphics mode and return to full screen text.
 TEXT

VLINE                    Procedure
 Draws a vertical line on lo-res screen.
 VLINE(x1,y1,y2)

WBLOCK                   Procedure
 Writes 1 or more blocks to a PorDOS disk.
WBLOCK(address,block,count,slot,drive,error)

WHILE/ENDWHILE           Statement
 Causes a section of a program to be executed repeatedly until a
 condition is met.
 WHILE expression
   .
   .
   (executable statement)
   .
   .
 ENDWHILE

WORKDRIVE                Statement
 Defines drive for file operations.
 WORKDRIVE(slot,drive)

WSECT                    Procedure
 Writes 1 or more sectors to a disk.
WSECT(address,track,half,sector,count,slot,drive,error)


Predefined Variables
--------------------
These are predefined and always avaliable for the user in immediate mode.

MEMORY                   Byte Array
 An array which encompasses the entire Apple memory range. MEMORY[0] is
 memory location $0. MEMORY[4000] is memory location $4000.

BREAK                    Byte
 Controls operation of Ctrl-C.  If set to 0 then Ctrl-C will halt a
 program. If set to 1, will not halt and reset will cause current
 program to start executing from beginning.

ERROR                    Byte
 Contains number of any error that occurred. 0=no errors.

PRTSLOT                  Byte
 Slot number of printer interface card.

MACHID                   Byte
 Indicates type of Apple used, set during boot:
 0=Apple II     1=Apple II+     2=AppleIIe     3=Apple IIc

HASLC                    Byte
 Indicates presence of 16K RAM card in slot 0.

HASAUX                   Byte
 Indicates presence of additional 64K memory in IIe or IIc.

RBUF                     Byte Array
 Read buffer used for raw nibble reads.  $3FFF in length.

WBUF                     Byte Array
 Write buffer used for raw data writing. $29FF in length.

ADDR16                   Byte Array
 Contains normal address mark for 16-sector disks (D5 AA 96 DE AA EB)

DATA16                   Byte Array
 Contains normal data mark for 16-sector disks (D5 AA AD DE AA EB)

ADDR13                   Byte Array
 Contains normal address mark for 13-sector disk (D5 AA B5 DE AA EB)

DATA13                   Byte Array
 Contains normal data mark for 13-sector disk (D5 AA AD DE AA EB)

FORM16                   Byte Array
 Contains the numbers for the sectors on a normally interleaved
 16-sector disk. (00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F)

FORM13                   Byte Array
 Contains the numbers for the sectors on a normally interleaved
 13-sector disk. (00 0A 07 04 01 0B 08 05 02 0C 09 06 03)

WNDLEFT                  Byte
 Value of left margin of screen, normally 0.

WNDWIDTH                 Byte
 Value of width of screen, normally 40.

WNDTOP                   Byte
 Value of upper line of screen, normally 0.

WNDBOT                   Byte
 Value of bottom line of screen, normally 23.



                                Nibbles Away III
                                  Docs Part  2
                                       by
                                     Mr. Wiz

Using Nibbles Away III Copier
-----------------------------
     Option #1 from the Main Menu enters the Bit Copier.  A menu if presented
to allow toggling or changing items.  They are self-explanatory.  At any time,
pressing Ctrl-P will cause the screen to be sent to your printer VIA whatever
slot you have specified in the Configuration section (default=slot 1).
     During the copy process, several keys can be pressed to invoke special
functions.  They are:

Q - Abort current copy process
S - Skip to next track
G - Enable hi-res graphics display mode
T - Disable hi-res graphics, back to text screen

     Included in NAIII is a Fast Sector Copy program to copy standard DOS 3.3,
Pascal, and CP/M disks.  If you have an Apple IIe or IIc with additional
memory, then the additional memory will be used to speed up the copy process.

Track Editor
------------
     This option is used to view raw data present on any track.  Several
options are available to allow the data to be scanned or modified, and then
written back to disk.
     When first selected, this function will display several hundered bytes of
information from the start of the read buffer.  A blinking cursor will appear
in the upper left corner of the data.  In the upper right corner is the track
number.
     Different keys invoke different functions.  They are:

arrows - Move cursor in appropriate direction.
     I - Move cursor up 1 line.
     J - Move cursor left 1 byte.
     K - Move cursor right 1 byte.
     M - Move cursor down 1 line.
     > - Move cursor down 1 page.
     < - Move cursor up 1 page.
     + - Increment track number.
     - - Decrement track number.
     T - Asks for a new track number to be entered.
     O - Shows Options page for different slot/drive.
     F - Asks for HEX string to Find.  The cursor will move to that
         location if found.
     C - Shows count of the number of bytes to next occurence of bytes
         at cursor location.
     P - Shows print menu.
     S - Sets the 'Track Start' value to the cursor location.
     E - Sets the 'Track End' value to the current location.
     M - Moves the currently marked track into the write buffer.
     / - Toggles between read and write buffers.
     G - Prompts for new location for cursor.
     R - Reads current track into buffer.
     W - Writes data in write buffer to disk.
     Q - Quit track editor.
 SPACE - Enters modify mode.  Once entered:
           Typing HEX values will change value of byte.
           Space Bar will move to next value.
           RETURN will accept current value.
           Arrows move cursor.
           ESC will abort modify function.

Data which has its high bit clear will be written as SYNC bytes, and will
display as inverse on screen.

Sector Editor
-------------
     Option #4 will invoke the Sector Editor.  DOS 3.2, DOS 3.3, Pascal, and
CP/M disks can be viewed and modified.  A disassembly of the data may be
presented.
     The following keys will perform certain functions:

arrows - Move cursor in appropriate direction.
     I - Move cursor up 1 line.
     J - Move cursor left 1 byte.
     K - Move cursor right 1 byte.
     M - Move cursor down 1 line.
     + - Increment sector number
     - - Decrement sector number.
     > - Increment track number.
     < - Decrement track number.
     / - Toggle between HEX and ASCII display.
 SPACE - Enter modify mode:
           HEX digits are accepted on HEX side, space moves to next
           value.
           ASCII characters may be entered directly on ASCII side.
           Arrows move cursor.
           RETURN accepts current value.
           ESC aborts modify mode.
      R - Read current sector.
      W - Write current sector.
      D - Disassemble data in buffer from cursor. RETURN to abort.
      T - Prompt for new track number.
      S - Prompt for new sector number.
      F - Selects Find mode.
           1 - Prompt for start track.
           2 - Prompt for starting sector.
           3 - Prompt for end track.
           4 - Prompt for ending sector.
           5 - Toggle HEX/ASCII searching.
           6 - Switches search direction between ascending and
               descending.
           7 - Prompt for search string (32 characters maximum)
               RETURN to start search.
               Q to abort search.
       O - Display Options screen.
       Q - Quit sector editor.

NADOL Error Messages
--------------------
 1 - Syntax error
 2 - ()Mismatch error
 3 - Parameter count error
 4 - Stack overflow error
 5 - Duplicate variable error
 6 - Duplicate Proc/Func error
 7 - Symbol table full error
 8 - Undefined symbol error
 9 - Unexpected end of file error
11 - Value range error
13 - Nested label error
14 - Subscript error
15 - No begin error
16 - Wrong type of parameter error
17 - Read only error
19 - Immediate only error
20 - No language card error
21 - No auxiliary memory error
22 - IF/ENDIF mismatch error
23 - WHILE/ENDWHILE mismatch error
24 - Program too large error
25 - I/O error
26 - Disk full error
28 - File not found error
29 - No Applesoft error

                                NADOL Memory Map
---------------------------------------------------------------------$FFFF
                                    Monitor                          $F800
---------------------------------------------------------------------$F7FF
                                                                         .
                                   Applesoft                             .
                                                                         .
---------------------------------------------------------------------$D000
                                   System I/O                        $C000
---------------------------------------------------------------------$BFFF
                                                                         .
                                                                         .
                               NADOL Program Code                        .
                                                                         .
                                                                         .
---------------------------------------------------------------------$8000

                                   Read Buffer

---------------------------------------------------------------------$4000

                                  Write Buffer

---------------------------------------------------------------------$2700

                                  User Program

---------------------------------------------------------------------    .

                               Data for Variables

---------------------------------------------------------------------    .

                                   Free Space

---------------------------------------------------------------------

                                  Symbol Table

---------------------------------------------------------------------$0C00
                                 NADOL Workspace
---------------------------------------------------------------------$0800
                          Zero page, Stack and Screen
---------------------------------------------------------------------$0000


Retour sommaire

hr nibbles


Quelques tables utiles.


Quand on commence à inspecter les nibbles, il devient urgent d'avoir sous le coude une liste des $23 valeurs de piste et des $10 valeurs de secteur possibles en représentation avec la méthode 4-4.

Trk / Sect / 2* 4-4 bytes (hexa)

$00 / $00  : AA AA
$01 / $01  : AA AB
$02 / $02  : AB AA
$03 / $03  : AB AB
$04 / $04  : AA AE
$05 / $05  : AA AF
$06 / $06  : AB AE
$07 / $07  : AB AF
$08 / $08  : AE AA
$09 / $09  : AE AB
$0A / $0A  : AF AA
$0B / $0B  : AF AB
$0C / $0C  : AE AE
$0D / $0D  : AE AF
$0E / $0E  : AF AE
$0F / $0F  : AF AF
$10        : AA BA
$11        : AA AB
$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


Table passage valeur $00-$3F -> nibble
DOS: $BA29.$BA68

$00 : 96  $10 : B4  $20 : D6  $30 : ED
$01 : 97  $11 : B5  $21 : D7  $31 : EE
$02 : 9A  $12 : B6  $22 : D9  $32 : EF
$03 : 9B  $13 : B7  $23 : DA  $33 : F2
$04 : 9D  $14 : B9  $24 : DB  $34 : F3
$05 : 9E  $15 : BA  $25 : DC  $35 : F4
$06 : 9F  $16 : BB  $26 : DD  $36 : F5
$07 : A6  $17 : BC  $27 : DE  $37 : F6
$08 : A7  $18 : BD  $28 : DF  $38 : F7
$09 : AB  $19 : BE  $29 : E5  $39 : F9
$0A : AC  $1A : BF  $2A : E6  $3A : FA
$0B : AD  $1B : CB  $2B : E7  $3B : FB
$0C : AE  $1C : CD  $2C : E9  $3C : FC
$0D : AF  $1D : CE  $2D : EA  $3D : FD
$0E : B2  $1E : CF  $2E : EB  $3E : FE
$0F : B3  $1F : D3  $2F : EC  $3F : FF


Table passage nibble -> valeur $00-$3F
DOS: $BA96.$BAFF

                4    *==============================*
                5    *                              *
                6    *    Denibblizing table #1     *
                7    *    Nibble to 6-bits byte     *
                8    *      translation table       *
                9    *         (00XXXXXX)           *
                10   *                              *
                11   *===============================
                12  
                13   * Translate a valid nibble to 6-bits byte 00XXXXXX.
                14   *
                15   * 1 nibble: value from $96 to $FF (=$6A=106 disk bytes) but
                16   *           only $40=64 disk bytes are valids. They have to
                17   *           respect the rules:
                18   *           - bit 7 (high bit) on
                19   *           - at least 2 adjacent bits set excluding bit 7
                20   *           - not a reserved byte ($AA, $D5)
                21   *           - no more than 2 consecutive zero bits
                22   * 6 bits are required to have $40 values.
                23  
                24   DECTBL                   
                25  
                26   *               Index           <== disk byte
                27   *              %00XXXXXX
                28  
BA96: 00        29            DFB   %00000000  ; $00 <== $96
BA97: 01        30            DFB   %00000001  ; $01 <== $97
BA98: 00        31            DFB   0          ;     <== $98 invalid
BA99: 00        32            DFB   0          ;     <== $99 invalid
BA9A: 02        33            DFB   %00000010  ; $02 <== $9A
BA9B: 03        34            DFB   %00000011  ; $03 <== $9B
BA9C: 00        35            DFB   0          ;     <== $9C invalid
BA9D: 04        36            DFB   %00000100  ; $04 <== $9D
BA9E: 05        37            DFB   %00000101  ; $05 <== $9E
BA9F: 06        38            DFB   %00000110  ; $06 <== $9F
BAA0: 00        39            DFB   0          ;     <== $A0 invalid
BAA1: 00        40            DFB   0          ;     <== $A1 invalid
BAA2: 00        41            DFB   0          ;     <== $A2 invalid
BAA3: 00        42            DFB   0          ;     <== $A3 invalid
BAA4: 00        43            DFB   0          ;     <== $A4 invalid
BAA5: 00        44            DFB   0          ;     <== $A5 invalid
BAA6: 07        45            DFB   %00000111  ; $07 <== $A6
BAA7: 08        46            DFB   %00001000  ; $08 <== $A7
BAA8: 00        47            DFB   0          ;     <== $A8 invalid
BAA9: 00        48            DFB   0          ;     <== $A9 invalid
BAAA: 00        49            DFB   0          ;     <== $AA invalid
BAAB: 09        50            DFB   %00001001  ; $09 <== $AB
BAAC: 0A        51            DFB   %00001010  ; $0A <== $AC
BAAD: 0B        52            DFB   %00001011  ; $0B <== $AD
BAAE: 0C        53            DFB   %00001100  ; $0C <== $AE
BAAF: 0D        54            DFB   %00001101  ; $0D <== $AF
BAB0: 00        55            DFB   0          ;     <== $B0 invalid
BAB1: 00        56            DFB   0          ;     <== $B1 invalid
BAB2: 0E        57            DFB   %00001110  ; $0E <== $B2
BAB3: 0F        58            DFB   %00001111  ; $0F <== $B3
BAB4: 10        59            DFB   %00010000  ; $10 <== $B4
BAB5: 11        60            DFB   %00010001  ; $11 <== $B5
BAB6: 12        61            DFB   %00010010  ; $12 <== $B6
BAB7: 13        62            DFB   %00010011  ; $13 <== $B7
BAB8: 00        63            DFB   0          ;     <== $B8 invalid
BAB9: 14        64            DFB   %00010100  ; $14 <== $B9
BABA: 15        65            DFB   %00010101  ; $15 <== $BA
BABB: 16        66            DFB   %00010110  ; $16 <== $BB
BABC: 17        67            DFB   %00010111  ; $17 <== $BC
BABD: 18        68            DFB   %00011000  ; $18 <== $BD
BABE: 19        69            DFB   %00011001  ; $19 <== $BE
BABF: 1A        70            DFB   %00011010  ; $1A <== $BF
BAC0: 00        71            DFB   0          ;     <== $C0 invalid
BAC1: 00        72            DFB   0          ;     <== $C1 invalid
BAC2: 00        73            DFB   0          ;     <== $C2 invalid
BAC3: 00        74            DFB   0          ;     <== $C3 invalid
BAC4: 00        75            DFB   0          ;     <== $C4 invalid
BAC5: 00        76            DFB   0          ;     <== $C5 invalid
BAC6: 00        77            DFB   0          ;     <== $C6 invalid
BAC7: 00        78            DFB   0          ;     <== $C7 invalid
BAC8: 00        79            DFB   0          ;     <== $C8 invalid
BAC9: 00        80            DFB   0          ;     <== $C9 invalid
BACA: 00        81            DFB   0          ;     <== $CA invalid
BACB: 1B        82            DFB   %00011011  ; $1B <== $CB
BACC: 00        83            DFB   0          ;     <== $CC invalid
BACD: 1C        84            DFB   %00011100  ; $1C <== $CD
BACE: 1D        85            DFB   %00011101  ; $1D <== $CE
BACF: 1E        86            DFB   %00011110  ; $1E <== $CF
BAD0: 00        87            DFB   0          ;     <== $D0 invalid
BAD1: 00        88            DFB   0          ;     <== $D1 invalid
BAD2: 00        89            DFB   0          ;     <== $D2 invalid
BAD3: 1F        90            DFB   %00011111  ; $1F <== $D3
BAD4: 00        91            DFB   0          ;     <== $D4 invalid
BAD5: 00        92            DFB   0          ;     <== $D5 invalid
BAD6: 20        93            DFB   %00100000  ; $20 <== $D6
BAD7: 21        94            DFB   %00100001  ; $21 <== $D7
BAD8: 00        95            DFB   0          ;     <== $D8 invalid
BAD9: 22        96            DFB   %00100010  ; $22 <== $D9
BADA: 23        97            DFB   %00100011  ; $23 <== $DA
BADB: 24        98            DFB   %00100100  ; $24 <== $DB
BADC: 25        99            DFB   %00100101  ; $25 <== $DC
BADD: 26        100           DFB   %00100110  ; $26 <== $DD
BADE: 27        101           DFB   %00100111  ; $27 <== $DE
BADF: 28        102           DFB   %00101000  ; $28 <== $DF
BAE0: 00        103           DFB   0          ;     <== $E0 invalid
BAE1: 00        104           DFB   0          ;     <== $E1 invalid
BAE2: 00        105           DFB   0          ;     <== $E2 invalid
BAE3: 00        106           DFB   0          ;     <== $E3 invalid
BAE4: 00        107           DFB   0          ;     <== $E4 invalid
BAE5: 29        108           DFB   %00101001  ; $29 <== $E5
BAE6: 2A        109           DFB   %00101010  ; $2A <== $E6
BAE7: 2B        110           DFB   %00101011  ; $2B <== $E7
BAE8: 00        111           DFB   0          ;     <== $E8 invalid
BAE9: 2C        112           DFB   %00101100  ; $2C <== $E9
BAEA: 2D        113           DFB   %00101101  ; $2D <== $EA
BAEB: 2E        114           DFB   %00101110  ; $2E <== $EB
BAEC: 2F        115           DFB   %00101111  ; $2F <== $EC
BAED: 30        116           DFB   %00110000  ; $30 <== $ED
BAEE: 31        117           DFB   %00110001  ; $31 <== $EE
BAEF: 32        118           DFB   %00110010  ; $32 <== $EF
BAF0: 00        119           DFB   0          ;     <== $F0 invalid
BAF1: 00        120           DFB   0          ;     <== $F1 invalid
BAF2: 33        121           DFB   %00110011  ; $33 <== $F2
BAF3: 34        122           DFB   %00110100  ; $34 <== $F3
BAF4: 35        123           DFB   %00110101  ; $35 <== $F4
BAF5: 36        124           DFB   %00110110  ; $36 <== $F5
BAF6: 37        125           DFB   %00110111  ; $37 <== $F6
BAF7: 38        126           DFB   %00111000  ; $38 <== $F7
BAF8: 00        127           DFB   0          ;     <== $F8 invalid
BAF9: 39        128           DFB   %00111001  ; $39 <== $F9
BAFA: 3A        129           DFB   %00111010  ; $3A <== $FA
BAFB: 3B        130           DFB   %00111011  ; $3B <== $FB
BAFC: 3C        131           DFB   %00111100  ; $3C <== $FC
BAFD: 3D        132           DFB   %00111101  ; $3D <== $FD
BAFE: 3E        133           DFB   %00111110  ; $3E <== $FE
BAFF: 3F        134           DFB   %00111111  ; $3F <== $FF
 


Conversion Hexa / binaire

$00 : %00000000  $40 : %01000000  $80 : %10000000  $C0 : %11000000
$01 : %00000001  $41 : %01000001  $81 : %10000001  $C1 : %11000001
$02 : %00000010  $42 : %01000010  $82 : %10000010  $C2 : %11000010
$03 : %00000011  $43 : %01000011  $83 : %10000011  $C3 : %11000011
$04 : %00000100  $44 : %01000100  $84 : %10000100  $C4 : %11000100
$05 : %00000101  $45 : %01000101  $85 : %10000101  $C5 : %11000101
$06 : %00000110  $46 : %01000110  $86 : %10000110  $C6 : %11000110
$07 : %00000111  $47 : %01000111  $87 : %10000111  $C7 : %11000111
$08 : %00001000  $48 : %01001000  $88 : %10001000  $C8 : %11001000
$09 : %00001001  $49 : %01001001  $89 : %10001001  $C9 : %11001001
$0A : %00001010  $4A : %01001010  $8A : %10001010  $CA : %11001010
$0B : %00001011  $4B : %01001011  $8B : %10001011  $CB : %11001011
$0C : %00001100  $4C : %01001100  $8C : %10001100  $CC : %11001100
$0D : %00001101  $4D : %01001101  $8D : %10001101  $CD : %11001101
$0E : %00001110  $4E : %01001110  $8E : %10001110  $CE : %11001110
$0F : %00001111  $4F : %01001111  $8F : %10001111  $CF : %11001111
$10 : %00010000  $50 : %01010000  $90 : %10010000  $D0 : %11010000
$11 : %00010001  $51 : %01010001  $91 : %10010001  $D1 : %11010001
$12 : %00010010  $52 : %01010010  $92 : %10010010  $D2 : %11010010
$13 : %00010011  $53 : %01010011  $93 : %10010011  $D3 : %11010011
$14 : %00010100  $54 : %01010100  $94 : %10010100  $D4 : %11010100
$15 : %00010101  $55 : %01010101  $95 : %10010101  $D5 : %11010101
$16 : %00010110  $56 : %01010110  $96 : %10010110  $D6 : %11010110
$17 : %00010111  $57 : %01010111  $97 : %10010111  $D7 : %11010111
$18 : %00011000  $58 : %01011000  $98 : %10011000  $D8 : %11011000
$19 : %00011001  $59 : %01011001  $99 : %10011001  $D9 : %11011001
$1A : %00011010  $5A : %01011010  $9A : %10011010  $DA : %11011010
$1B : %00011011  $5B : %01011011  $9B : %10011011  $DB : %11011011
$1C : %00011100  $5C : %01011100  $9C : %10011100  $DC : %11011100
$1D : %00011101  $5D : %01011101  $9D : %10011101  $DD : %11011101
$1E : %00011110  $5E : %01011110  $9E : %10011110  $DE : %11011110
$1F : %00011111  $5F : %01011111  $9F : %10011111  $DF : %11011111
$20 : %00100000  $60 : %01100000  $A0 : %10100000  $E0 : %11100000
$21 : %00100001  $61 : %01100001  $A1 : %10100001  $E1 : %11100001
$22 : %00100010  $62 : %01100010  $A2 : %10100010  $E2 : %11100010
$23 : %00100011  $63 : %01100011  $A3 : %10100011  $E3 : %11100011
$24 : %00100100  $64 : %01100100  $A4 : %10100100  $E4 : %11100100
$25 : %00100101  $65 : %01100101  $A5 : %10100101  $E5 : %11100101
$26 : %00100110  $66 : %01100110  $A6 : %10100110  $E6 : %11100110
$27 : %00100111  $67 : %01100111  $A7 : %10100111  $E7 : %11100111
$28 : %00101000  $68 : %01101000  $A8 : %10101000  $E8 : %11101000
$29 : %00101001  $69 : %01101001  $A9 : %10101001  $E9 : %11101001
$2A : %00101010  $6A : %01101010  $AA : %10101010  $EA : %11101010
$2B : %00101011  $6B : %01101011  $AB : %10101011  $EB : %11101011
$2C : %00101100  $6C : %01101100  $AC : %10101100  $EC : %11101100
$2D : %00101101  $6D : %01101101  $AD : %10101101  $ED : %11101101
$2E : %00101110  $6E : %01101110  $AE : %10101110  $EE : %11101110
$2F : %00101111  $6F : %01101111  $AF : %10101111  $EF : %11101111
$30 : %00110000  $70 : %01110000  $B0 : %10110000  $F0 : %11110000
$31 : %00110001  $71 : %01110001  $B1 : %10110001  $F1 : %11110001
$32 : %00110010  $72 : %01110010  $B2 : %10110010  $F2 : %11110010
$33 : %00110011  $73 : %01110011  $B3 : %10110011  $F3 : %11110011
$34 : %00110100  $74 : %01110100  $B4 : %10110100  $F4 : %11110100
$35 : %00110101  $75 : %01110101  $B5 : %10110101  $F5 : %11110101
$36 : %00110110  $76 : %01110110  $B6 : %10110110  $F6 : %11110110
$37 : %00110111  $77 : %01110111  $B7 : %10110111  $F7 : %11110111
$38 : %00111000  $78 : %01111000  $B8 : %10111000  $F8 : %11111000
$39 : %00111001  $79 : %01111001  $B9 : %10111001  $F9 : %11111001
$3A : %00111010  $7A : %01111010  $BA : %10111010  $FA : %11111010
$3B : %00111011  $7B : %01111011  $BB : %10111011  $FB : %11111011
$3C : %00111100  $7C : %01111100  $BC : %10111100  $FC : %11111100
$3D : %00111101  $7D : %01111101  $BD : %10111101  $FD : %11111101
$3E : %00111110  $7E : %01111110  $BE : %10111110  $FE : %11111110
$3F : %00111111  $7F : %01111111  $BF : %10111111  $FF : %11111111


Retour sommaire