home *** CD-ROM | disk | FTP | other *** search
/ hackzapple.com / www.hackzapple.com.tar / www.hackzapple.com / DISKII / DISKIITECH02A.HTM.orig < prev    next >
Text File  |  2010-10-06  |  14KB  |  250 lines

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
  2. <HTML>
  3. <HEAD>
  4. <TITLE>HACK Z APPLE, Collection Apple II</TITLE>
  5.   <link rel="shortcut icon" type="image/x-icon" href="http://www.hackzapple.com/favicon.ico">
  6.   <meta http-equiv="imagetoolbar" content="no">
  7.   <meta name="author" content="JPL">
  8.  <meta name="KEYWORDS"    content="HACK Z APPLE, JPL, Cracking, Hacking, DISK II, DRIVES, DISQUETTES, Collection APPLE II, APPLE, Apple II, APPLE II Plus, 2+, Europlus, 2e, //e, enhanced, Platinium, Stealth,  Cortland, GS, IIGS, WOZ, IIGS WOZ, ROM 0, ROM 1, ROM 4, IIc, IIc Plus,Apple III, LISA, MAC XL, DARK VADOR, ITT 2020, APPLE BF,APPLE REV0, REVISION 0, RFI, NON RFI">
  9.   <meta name="TITLE"     content="Apple II standard">
  10.   <meta name="OWNER"     content="HACKZAPPLE.COM">
  11.   <meta name="SUBJECT"     content="Collection Apple II">
  12.   <meta name="REVISIT-AFTER"     content="10 DAYS">
  13.   <meta name="LANGUAGE" content="FR">
  14.   <meta name="ROBOTS"     content="All">   
  15. <link href="../BASIC.CSS" rel="stylesheet" type="text/css"> 
  16. </HEAD>
  17.  
  18. <BODY>
  19. <CENTER>
  20.  
  21. <A NAME="DISK09"></A>
  22. <TABLE border="0" cellspacing="0" cellpadding="0" width="700">
  23. <TR> 
  24.     <TD WIDTH="200"> </TD> 
  25.     <TD WIDTH="100"> </TD> 
  26.     <TD WIDTH="200"></TD> 
  27.     <TD WIDTH="100"></TD> 
  28.     <TD WIDTH="100"></TD> 
  29. </TR>
  30.  
  31. <TR>     <TD COLSPAN="3" valign="TOP" > <img src="../THEMAS/M3/XDISK2A.PNG" BORDER=0></TD>  
  32.     <TD COLSPAN="2" > 
  33.     <CENTER>
  34.     <A HREF="DISKIITECH02.HTM" > <img  src="../THEMAS/DIVERS/PRIOR1.PNG" BORDER=0></A>
  35.     <A HREF="DISKIITECH.HTM" > <img  src="../THEMAS/DIVERS/HOME1.PNG" BORDER=0></A>  
  36.     <A HREF="DISKIITECH03.HTM" ><img  src="../THEMAS/DIVERS/SUITE1.PNG" BORDER=0></A>
  37.     </CENTER>
  38.     </TD>
  39. </TR>
  40. <TR>     <TD COLSPAN="5" HEIGHT="10"></TD></TR>
  41. <TR>     <TD COLSPAN="5"  CLASS="PARAG1">
  42.     Le sujet des "nibbles"  est le sujet le plus dΘconcertant pour les dΘbutants alors mΩme qu'il est relativement 
  43.     simple α comprendre. Il faut cependant bien dire que ce ne sont pas les magazines qui ont simplifiΘ
  44.     la comprΘhension et l'utilisation indiffΘrenciΘe de nibbles, bytes ou octets n'a pas participΘ α l'Θdification 
  45.     des foules.
  46.     <BR><BR>    
  47.     </TD>
  48. </TR>
  49. <TR>     <TD COLSPAN="5"  CLASS="TITRE3"> <FONT COLOR="RED"><B>Mais alors qu'est-ce qu'un nibble ?</B></FONT></TD></TR>
  50. <TR>     <TD COLSPAN="5"  CLASS="PARAG1">
  51.     Normalement un nibble est un demi octet soit 4 bits. HΘlas par abus de langage, dans le cas de l'APPLE II 
  52.     et du DISK II il s'agit en fait de rien d'autre qu'un octet Θcrit sur la disquette ... (donc si on a 8 bits,
  53.     maintenant c'est un octet ? eh bien non c'est quand mΩme un nibble ! Pour assurer la confusion il n'y a 
  54.     pas mieux non? ) Mais attention si on parle d'octet α la place de nibble, ce n'est pas n'importe quel octet !
  55.     <BR><BR>
  56.     En effet il y a des <B>contraintes</B> bien spΘcifiques au lecteur de disquette (le systΦme de dΘtection de la carte
  57.      contr⌠leur en fait) qui font qu'il n'est pas possible d'Θcrire l'ensemble de la page des valeurs possibles d'un 
  58.     octet de donnΘe,    α savoir de $00 α $FF.
  59.     <BR> <BR>
  60.     Nous avons vu prΘcΘdemment dans la rubrique <A HREF="DISKIITECH02.HTM">"les types d'enregistrement"</A> qu'APPLE utilise le GCR 
  61.     et qu'il doit y avoir suffisamment d'inversions de champs magnΘtiques pour pouvoir assurer le self-clocking. 
  62.     En nous obligeant α avoir systΘmatiquement un 1 une fois sur deux et en utilisant les bits intΘrmΘdiaires comme 
  63.     seuls porteurs de signification, c'est α dire par l'utilisation d'un masque de type 1010.1010 ($AA) nous remplissons 
  64.     cette    condition et SEULES les positions 0 intermΘdiaires du dit masque sont utilisΘes soit pour des 1 soit pour des 0 ce 
  65.     qui permet une utilisation des valeurs signifiantes de 0000 α 1111 ($0 α $F) ... ce qui est prΘcisement 
  66.     un demi-octet : le NIBBLE ! (CQFD). 
  67.     <BR> <BR>
  68.     <FONT COLOR="#40FF40">On notera que les 1 du masque 1x1x.1x1x jouent alors ni plus ni moins le r⌠le de
  69.     bits d'horloge sans pour autant qu'ils soient distinguables des bits de donnΘes.</FONT>
  70.     Ces 1 ont d'ailleurs ΘtΘ prΘsentΘs dans la littΘrature technique comme Θtant de rΘels bits d'horloge 
  71.     pour permettre une comprΘhension plus aisΘe de la self-synchronisation.
  72.     <BR> <BR>
  73.     La table des valeurs qu'il est alors possible d'Θcrire sur la disquette (les NIBBLES donc !)  est  la suivante :
  74.     <BR><BR>
  75.     <CENTER><IMG SRC="../DISKII/NIBBLES44.PNG"></CENTER>
  76.     <BR><BR>
  77.     Cette table correspond α ce que l'on appelle le CODAGE 4.4 dΘtaillΘ plus loin en rubrique 
  78.     <A HREF="DISKIITECH05.HTM">"codage des donnΘes"</A> <BR>
  79.     <BR> <BR>
  80.     </TD>
  81. </TR>
  82. <TR> <TD COLSPAN="5" height="10"></TD>  </tr>
  83. <TR><TD COLSPAN="5"  ><HR color="BLUE"></td></TR>
  84. <TR>     <TD COLSPAN="5"  CLASS="TITRE3"><B>Mais WOZNIAK α fait mieux !</B> </TD></TR>
  85. <TR><TD COLSPAN="5"  ><HR color="BLUE"></td></TR>
  86.  
  87. <TR>     <TD COLSPAN="5" CLASS="PARAG1">
  88.     Il n'est pas difficile de constater que la disquette est trΦs vite remplie, Wozniak s'est aperτu qu'il y avait 
  89.     tout de mΩme bien plus de 16 valeurs qui ont le bit 7 α 1 et n'ont pas deux 0 contigus, il a donc eu l'idΘe 
  90.     d'utiliser l'ensemble de ces valeurs qui respecteraient ainsi le self-clocking sans une modification inconsidΘrΘe 
  91.     du matΘriel. Ces valeurs sont alors aisΘes α utiliser au moyen d'un  systΦme de codage et d'une table de translation. 
  92.     <BR><BR>
  93.     Rappelons donc les contraintes spΘcifiques pour les valeurs de ces "nouveaux" nibbles.
  94.     <BR><BR>
  95.     <FONT COLOR="#40FF40"><B>CONTRAINTE NUMERO 1</B></FONT> Un NIBBLE DOIT OBLIGATOIREMENT AVOIR LE BIT 7 α 1 
  96.     <BR><BR> 
  97.     <FONT COLOR="RED"> L'explication de cette contrainte gΘnΘrale pour TOUS les formats APPLE trouve sa justification dans la rubrique
  98.     <A HREF="DISKIITECH04.HTM">"synchronisation"</A>.</FONT>
  99.     <BR><BR>
  100.     De simple fait d'avoir le bit 7 α 1, l'ensemble des valeurs de $00 α $7F est ΘliminΘ ! 
  101.     <BR><BR>
  102.     Vous allez dire que c'est bien amusant car il va bien falloir trouver un moyen de les Θcrire ces valeurs... 
  103.     eh bien oui, c'est mΩme l'objet du <A HREF="DISKIITECH05.HTM">codage des donnΘes</A>,
  104.     dont la finalitΘ est de transformer les octets de donnΘes en nibbles. Comme vous vous en doutez, si vous voulez
  105.     Θcrire 256 octets variant de $00 α $FF il faudra Θcrire plus de 256 nibbles sur le disque pour pouvoir les
  106.     retrouver. 
  107.     <BR><BR> 
  108.     <FONT COLOR="#40FF40"><B>CONTRAINTE NUMERO 2 </B></FONT> 
  109.     <BR><BR>
  110.     <IMG SRC="../THEMAS/DIVERS/BULLET.GIF"><FONT COLOR="#40FF40"><B>CAS DU DOS 3.2 : </B></FONT>
  111.     <BR><BR>
  112.               <IMG SRC="../THEMAS/DIVERS/BULLET2.GIF">Un NIBBLE NE PEUT PAS AVOIR DEUX 0 DE SUITE
  113.     <BR><BR>
  114.     Voici la liste des nibbles valides pour le DOS 3.2. On constate qu'il y en a 34 dont 2 sont reservΘs pour les marqueurs
  115.     de champ... il en reste donc 32 utilisables pour rΘaliser un codage : c'est mieux que les 16 du codage 4.4 qui prΘcΦde!
  116.     <BR><BR>
  117.     <IMG SRC="../DISKII/NIBBLES32.PNG"> 
  118.     <BR><BR>
  119.     <IMG SRC="../THEMAS/DIVERS/BULLET.GIF"><FONT COLOR="#40FF40"><B>CAS DU DOS 3.3 : </B></FONT>  
  120.     <BR><BR>
  121.     En rΘalisant une lΘgΦre modification du matΘriel et du logiciel il est possible d'Θtendre au maximum 
  122.     les possibilitΘs d'enregistrement en modulation de frΘquence sur une disquette.
  123.     <BR><BR>
  124.               <IMG SRC="../THEMAS/DIVERS/BULLET2.GIF">Un NIBBLE NE PEUT PAS AVOIR PLUS D'UNE PAIRE DE 0<BR>
  125.               <IMG SRC="../THEMAS/DIVERS/BULLET2.GIF">Un NIBBLE DOIT AVOIR AU MOINS UNE PAIRE DE 1 sur les bits b0 α b6<BR>
  126.     </TD>
  127. </TR>
  128.  
  129. <TR>     <TD></TD><TD COLSPAN="4"  CLASS="PARAG1">
  130.     Concernant cette seconde rΦgle, il semble que ce soit pour Θviter le risque de rencontrer alΘatoirement dans la zone des
  131.     donnΘs des sΘquences qui donneraient la suite $D5 $AA. De ce fait vous constaterez que les nibbles :<BR>
  132.     $95 $A5 $A9 $CA $D2 $D4 sont ΘliminΘs mais pourraient Ωtre lΘgitiment utilisΘs.
  133.     <BR><BR>
  134.     </TD>
  135. </TR>
  136.  
  137. <TR>     <TD COLSPAN="5"  CLASS="PARAG1">
  138.     Examinons donc la liste des nibbles valides pour le DOS 3.3
  139.     <BR><BR>
  140.     <IMG SRC="../DISKII/NIBBLES33.PNG"> 
  141.     <BR><BR>
  142.     Subtilement vous remarquez que le premier nibble valide est $96, si vous avez utilisΘ un Θditeur de piste 
  143.     pour regarder ce qu'on y trouve vous avez certainement vu de longues zones avec ces $96 et vous vous Ωtes
  144.     demandΘ "pourquoi cette valeur?" eh bien premiΦre rΘponse c'est parce qu'il s'agit d'un nibble valide...
  145.     et surtout, seconde raison, c'est parce qu'on lui associe la valeur de l'octet de donnΘes $00 et qu'en
  146.     formattant une disquette votre buffer Θtant normalement rempli de $00 le codage vous donne $96 comme
  147.     valeur devant Ωtre Θcrite sur la disquette... habile transition pour parler maintenant de la table 
  148.     de transalation !
  149.     </TD>
  150. </TR>
  151. <TR>     <TD COLSPAN="5"  CLASS="TITRE3"> <FONT COLOR="RED"><B>La table de translation</B></FONT></TD></TR>
  152. <TR>     <TD COLSPAN="5"  CLASS="PARAG1">
  153.     La table des nibbles valides s'appelle la table de translation. Sa construction est une petite merveille de 
  154.     programmation dans le code de la PROM du contr⌠leur du lecteur de disquette.
  155.     <BR><BR> 
  156.     Son utilisation est astucieuse, il faut prendre bien garde α l'alignement du dΘbut de la table en mΘmoire
  157.     car cela peut rendre totalement impossible un dΘcodage.
  158.     <BR><BR>
  159.     La valeur codΘe sert d'index > LDA TABLE,index > A contient le NIBBLE α Θcrire  
  160.     <BR><BR>
  161.     </TD>
  162. </TR>
  163. <TR>     <TD COLSPAN="5"  CLASS="TITRE3"> <FONT COLOR="RED"><B>Comment τa marche en DOS 3.2?</B></FONT></TD></TR>
  164. <TR>     <TD COLSPAN="5"  CLASS="PARAG1">
  165.     Il va sans dire que dans le cas du DOS 3.2 le calcul est un peut diffΘrent car il n'y a que 32 nibbles 
  166.     valides (soit $20 en hexadecimal et avec 0 comptant Θgalement la valeur maximale d'index est de $1F )
  167.     les octets sont donc dΘcoupΘs sous la forme 000x.xxxx et, sachant qu'un buffer de 256 octets est 
  168.     composΘ 256 * 8 soit 2048 bits, <BR>
  169.     cela vous donnera 2048 / 5 = 409 octets + un reste de 3 bits<BR><BR>
  170.     <FONT COLOR="RED"><B>Vous devrez donc en fait Θcrire 410 ΘlΘments (nibbles) sur la disquette pour stocker les 256 octets 
  171.     de donnΘes     qui sont en mΘmoire.</B></FONT>  Le schΘma global est alors :
  172.     <BR><BR>
  173.     <CENTER><IMG SRC="../DISKII/NIBBILIZATION32.PNG"> </CENTER>
  174.     <BR><BR>
  175.     </TD>
  176. </TR>
  177. <TR>     <TD COLSPAN="5"  CLASS="TITRE3"> <FONT COLOR="RED"><B>Comment τa marche en DOS 3.3?</B></FONT></TD></TR>
  178. <TR>     <TD COLSPAN="5"  CLASS="PARAG1">
  179.     En fait vous notez que vous avez 64 nibbles valides pouvant Ωtre Θcrits sur la disquette 
  180.     soit en hexadΘcimal $40 nibbles. Votre problΦme est que vous devez Ωtre capable Θcrire les 256 
  181.     valeurs possibles d'un octet soit $00 α $FF... ce qui est donc impossible par bijection 
  182.     (en clair un nibble ne peut pas correspondre directement α un octet de donnΘe car il n'y en a pas assez). 
  183.     <BR><BR>
  184.     La solution est donc le codage ! cela consiste en DOS 3.3 α dΘcouper vos octets de donnΘes et α les 
  185.     mettre sous la forme 00xx.xxxx de faτon α ne jamais avoir une valeur supΘrieure α 0011.1111 soit $3F
  186.     qui est par magie prΘcisement le nombre maximal pour l'index d'une table de nibbles qui en comporte 
  187.     prΘcisement $40... (avant de rΓler, merci de ne pas  oublier  que l'index 0 compte.)<BR>
  188.     (l'explication technique dΘtaillΘe des codages possibles se trouve dans la partie <A HREF="DISKIITECH05.HTM">codage des donnΘes</A>
  189.     <BR><BR>
  190.     Revenons α notre DOS 3.3, sachant qu'un buffer de donnΘes est de 256 octets et que l'on admet qu'un 
  191.     secteur de disquette doit contenir 256 octets de donnΘes :<BR>
  192.     vous avez 256 * 8 = 2048 bits α organiser...<BR> 
  193.     pour en faire des tranches de 6 bits (les fameux x de 00xx.xxxx) <BR>
  194.     ce qui vous donne 2048 / 6 = 341 octets + un reste de 2 bits
  195.     <BR><BR>
  196.     <FONT COLOR="RED"><B>Vous devrez donc en fait Θcrire 342 ΘlΘments (nibbles) sur la disquette pour stocker les 256 octets 
  197.     de donnΘes qui sont en mΘmoire.</B></FONT> Et voici le schΘma global, analogue α celui du DOS 3.2 :
  198.     <BR><BR>
  199.     <CENTER><IMG SRC="../DISKII/NIBBILIZATION.PNG"> </CENTER>
  200.     <BR><BR>
  201.     </TD>
  202. </TR>
  203. <TR>     <TD COLSPAN="5"  CLASS="TITRE3K"><IMG SRC="../THEMAS/DIVERS/CRACK.BMP"> HACKING CORNER </TD></TR>
  204. <TR>     <TD COLSPAN="5"  CLASS="PARAG1K">
  205.     <FONT COLOR="RED"><B>LE NIBBLE COUNT</B></FONT> 
  206.     <BR><BR>  
  207.     Il s'agit d'un systΦme de protection consistant α compter le nombre de nibbles sur une piste, soit toute la piste
  208.     soit sur une zone particuliΦre. Ce type de protection impose souvent un paramΘtrage du programme de copie car il 
  209.     faut pouvoir conserver la longueur de la piste copiΘe le plus proche possible de celle qui est lue.
  210.     </TD>
  211. </TR>
  212. <TR>     <TD COLSPAN="5"  CLASS="PARAG1K">
  213.     <FONT COLOR="RED"><B>LE MELANGE DES NIBBLES </B></FONT>
  214.     <BR><BR>  
  215.     Il  s'agit d'une protection qui consiste α changer de place deux ou plusieurs nibbles. Les tables qui sont donnΘes
  216.     plus haut sont les tables standard en ce sens qu'elles comportent les nibbles valides dans l'ordre croissant.
  217.     Ainsi en DOS 3.3 le codage de $00 donne $96 mais si vous inversez dans votre table de nibbles le $96 avec le $EB 
  218.     ou n'importe quel autre nibble d'ailleurs, il est impossible α un DOS normal de dΘcoder les secteurs ... ou plus 
  219.     exactement il dΘcodera n'importe comment, ce qui revient au mΩme.
  220.     <BR><BR>
  221.     Bien Θvidement notre DOS modifiΘ doit avoir les tables de nibbles modifiΘes de faτon parfaitement identiques 
  222.     pour la lecture et pour l'Θcriture... et les routines de lecture/Θcriture sont elles mΩmes modifiΘes.
  223.     </TD>
  224. </TR>
  225.  
  226.  
  227.  
  228. <TR> <TD COLSPAN="5" height="10"></TD> </tr>
  229. <TR>    <TD COLSPAN="5" CLASS="PARAG1"> <CENTER> 
  230.     <A HREF="DISKIITECH02.HTM" > <img  src="../THEMAS/DIVERS/PRIOR1.PNG" BORDER=0></A>
  231.     <A HREF="DISKIITECH03.HTM" ><img  src="../THEMAS/DIVERS/SUITE1.PNG" BORDER=0></A>
  232.     </CENTER>
  233.     </TD>
  234. </TR>
  235.  
  236. <TR> <TD COLSPAN="5" height="10"></TD>  </tr>
  237. <TR><TD COLSPAN="5"  ><HR color="BLUE"></td>
  238. </TR>
  239. <TR> 
  240.     <TD COLSPAN="5">  
  241.     <CENTER>
  242.     <A HREF="javascript:history.back()"> <IMG SRC="../THEMAS/DIVERS/JSBACK.PNG"></A> 
  243.     <A HREF="DISKIITECH.HTM" > <IMG SRC="../THEMAS/DIVERS/HOMESITE.PNG"></A>
  244.     </CENTER></TD>
  245. </TR>
  246. </TABLE>
  247. </CENTER>
  248. </BODY>
  249. </HTML>
  250.