home *** CD-ROM | disk | FTP | other *** search
/ hackzapple.com / www.hackzapple.com.tar / www.hackzapple.com / DISKII / DISKIITECH05A.HTM.orig < prev    next >
Text File  |  2010-10-06  |  9KB  |  249 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.  
  22. <A NAME="DISK06"></A>
  23. <TABLE border="0" cellspacing="0" cellpadding="0" width="700">
  24. <TR>     <TD WIDTH="40"></TD> 
  25.     <TD WIDTH="120"></TD> 
  26.     <TD WIDTH="320"></TD>
  27.     <TD WIDTH="280"></TD> </TR>
  28.  
  29. <TR>     <TD COLSPAN="4" valign="TOP" > <img src="../THEMAS/M3/XDISK5A.PNG" BORDER=0></TD> </TR> 
  30. <TR>    <TD COLSPAN="4" CLASS="PARAG1K"> 
  31.     <BR> 
  32.     <IMG SRC="SECTEUR0.PNG">
  33.     <BR><BR>
  34. La prΘnibbilization est l'opΘration qui consiste α transformer une page de 256 octets de donnΘes (de $00 α $FF)
  35. en valeurs de la forme 00xx.xxxx. Sachant que nous avons 256 octets il y a donc 256 * 8 = 2048 bits en tout α classer.
  36. <BR><BR>
  37. Donc si je dois avoir des octets de la forme 00xx.xxxx, avec mes 2048 bits je devrais avoir 2048/6 = 341 octets pour 
  38. les ranger et il me restera 2 bits α placer. En fait il me faudra donc 342 octets (341+1) pour rΘaliser la chose.  
  39. <BR><BR>
  40. Techniquement pour ce faire on prΘvoit donc deux buffers de destination NBUF1 et NBUF2 qui recevront les valeurs 
  41. issues de la transformation. <BR>
  42. <IMG SRC="../THEMAS/DIVERS/BULLET.GIF"> NBUF1 recevra 6 bits sur 8 (les bits 7 α 2) <BR>
  43. <IMG SRC="../THEMAS/DIVERS/BULLET.GIF"> NBUF2 recevra 2 bits sur 8 (les bits 1 et 0).<BR>
  44. La taille de ces buffers sera donc de 256 pour NBUF1 (une plage de $00 α $FF) et de 342-256 = 86 (une plage de $00 α $55) pour NBUF2.
  45. <BR><BR>
  46. VΘrifions : <BR>
  47. NBUF1 pourra stocker 256 * 6 = 1536 bits <BR>
  48. NBUF2 pourra stocker   86 * 6 =  516 bits <BR>
  49.             
  50.      soit bien un total de 2052 bits
  51. <BR><BR>
  52. Petit dΘtail technique : sur 342 octets dont j'utilise 6 bits cela me fait 2052 bits or nous venons de voir que 2048
  53. seulement sont α placer ! mais en fait pour la programmation c'est PARFAIT.
  54. <BR><BR>
  55. En DOS 3.3 le buffer NBUF1 est en mΘmoire de$BB00 α $BBFF et NBUF2 de $BC00 α $BC56
  56. <BR><BR>
  57. </TD></TR>
  58. <TR>    <TD COLSPAN="4" CLASS="PARAG1R"><B>Voici le source de la routine de prΘnibbilization  qui se trouve 
  59. en $B800 pour le DOS 3.3</B></TD>
  60. </TR>
  61. <TR>    <TD CLASS="PARAG1K"> 
  62.     PRENIBB<BR><BR>PRENIBB1<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>
  63.     PRENIBB2<BR><BR><BR><BR><BR><BR>
  64.     </TD>
  65.     <TD CLASS="PARAG1K"> 
  66.     LDX #$00<BR>
  67.     LDY #$02<BR>
  68.     DEY<BR>
  69.     LDA (BUF),Y<BR>
  70.     LSR<BR>
  71.     ROL NBUF2,X<BR>
  72.     LSR<BR>
  73.     ROL NBUF2,X<BR>
  74.     STA NBUF1,Y<BR>
  75.     INX<BR>
  76.     CPX #$56<BR>
  77.     BCC PRENIBB1<BR>
  78.     LDX #$00<BR>
  79.     TYA<BR>
  80.     BNE PRENIBB1<BR>
  81.     <BR>  
  82.     LDX #$55<BR>
  83.     LDA NBUF2,X<BR>
  84.     AND #$3F<BR>
  85.     STA NBUF2,X<BR>
  86.     DEX<BR>
  87.     BPL PRENIBB2<BR>
  88.     RTS<BR>
  89.     </TD>
  90.      <TD COLSPAN="2" CLASS="PARAG1K"> 
  91.     ; On initialise les index<BR>
  92.     ; Etrange non un Y α 2 ? voir remarque NOTA 1 ci-dessous
  93.     <BR><BR>
  94.     ; Prend l'octet α transformer<BR>
  95.     ; Passe le bit 0 de l'octet de donnΘe en retenue(Carry)<BR>
  96.     ; Passe le de C α  NBUF2<BR>
  97.     ; Passe le bit 1 de l'octet de donnΘe en retenue(Carry)<BR>
  98.     ; Passe le de C α  NBUF2<BR>
  99.     ; Replace l'octet transformΘ de l'accumulateur en NBUF1<BR>
  100.     <BR><BR>
  101.     ; On fait la boucle de X=0 α X=$55 compris<BR>
  102.     ; RΘinitialise X<BR>
  103.     <BR>
  104.     ; Voir la remarque en NOTA 1 ci-dessous<BR><BR>
  105.     ; Routine pour forcer les bits 7 et 6 de NBUF2 α 0 <BR>
  106.     <BR>
  107.     ; Masque binaire 0011.1111<BR>
  108.     <BR><BR>
  109.     ; Pour faire aussi la valeur 0 de l'index...<BR>
  110.     <BR>
  111.     </TD>
  112. </TR>
  113. <TR>    <TD COLSPAN="4" CLASS="PARAG1R">NOTA 1 : La boucle avec Y initialisΘ α 2 !</TD></TR>
  114. <TR>    <TD COLSPAN="4" CLASS="PARAG1K"> 
  115.     Ceci paraεt toujours bien Θtrange mais en examinant attentivement ce qui se passe on comprend mieux le pourquoi.
  116.     Nous avons vu que NBUF2 doit avoir la place pour 86 octets (plage de $00 α $55) de la forme 00xx.xxxx or
  117.     sachant que ce buffer contient 3 groupe de 2 bits par octets, cela signifie qu'il pourrait recevoir de quoi
  118.     coder 86 * 3 = 258 octets. 
  119.     <BR><BR>
  120.     En initialisant Y α 2 nous ne faisons rien d'autre que de permettre d'avoir une boucle facile α contr⌠ler
  121.     par un classique test sur Y α 0 sans avoir une routine trΦs compliquΘe, et ce en traitant 258 octets 
  122.     au lieu de 256, car 258 est un parfait multiple de 86 (3*86=258). 
  123.     <BR><BR>
  124.     Sachant que la routine PRENIBB1 commence par un DEY, Y sera donc α 1 et la valeur prise dans BUF sera celle
  125.     de l'octet1, au passage suivant on va traiter l'octet 0 puis l'octet FF etc... 
  126.     Quand X sera α $56 le programme va dΘrouler le test sur Y QUI NE SERA PAS A 0 au premier et 
  127.     deuxiΦme passage (puisqu'il dΘcrΘmente de $FF vers $00). Par contre au troisiΦme passage Y sera α 0 et la 
  128.     prΘnibbilization sera finie pour cette partie. C'est lors de ce troisiΦme passage que les octets n░1 et n░0 
  129.     du buffer de donnΘes sont traitΘs (dans cet ordre) une seconde fois. Les bits 0 et 1 se retrouvent α une autre 
  130.     position dans NBUF2 mais les bits 7 α 2 sont rΘΘcrits une seconde fois α la place dans NBUF1.
  131.     <BR><BR>
  132.     Notez bien que quand Y sera testΘ α 0 en bas de routine, le traitement de l'octet indexΘ 0 de NBUF
  133.     aura bien dΘjα ΘtΘ rΘalisΘ !
  134.     <BR><BR>
  135.     Le schΘma ci-dessus montre comment sont remplis les buffers.
  136.     <BR><BR>
  137.     <IMG SRC="PNIB1.PNG">
  138.     <BR><BR>
  139.     Voici par ailleurs une explication plus claire que vous devez α JM Boutillon, dont j'admire la patience et la perspicacitΘ pour la relecture de ces chapitres ... alors merci qui ?
  140. <BR><BR>
  141.     </TD>
  142. </TR>
  143. <TR><TD CLASS="PARAG1K"> 
  144.     BUF&NBUF1<BR>
  145.  !      <BR>
  146.  Y      <BR>
  147. (BUF),$01    <BR>
  148. (BUF),$00    <BR>
  149. (BUF),$FF    <BR>
  150.       ...    <BR>
  151. (BUF),$AC    <BR>
  152. <BR>
  153. (BUF),$AB    <BR>
  154. (BUF),$AA    <BR>
  155.       ...    <BR>
  156. (BUF),$56    <BR>
  157. <BR>
  158. (BUF),$55    <BR>
  159. (BUF),$54    <BR>
  160.       ...    <BR>
  161. (BUF),$01    <BR>
  162. (BUF),$00    <BR>    
  163. </TD>  
  164.     <TD CLASS="PARAG1K"> 
  165. NBUF2<BR>
  166.  !<BR>
  167. X<BR>
  168. $00<BR>
  169. $01<BR>
  170. $02<BR>
  171. ...<BR>
  172. ($55<BR>
  173. <BR>
  174. $00<BR>
  175. $01<BR>
  176. ...<BR>
  177. $55<BR>
  178. <BR>
  179. $00<BR>
  180. $01<BR>
  181. ...<BR>
  182. $54<BR>
  183. $55<BR></TD>
  184. <TD COLSPAN="2" CLASS="PARAG1K"> 
  185. <BR><BR><BR>
  186. <== 1ere boucle de 86 octets<BR>
  187. <BR><BR><BR><BR><BR>
  188. <== 2nde boucle de 86 octets<BR>
  189. <BR><BR><BR><BR>
  190. <== 3eme boucle de 86 octets<BR>
  191. </TD>
  192. </TR>
  193.  
  194. <TR>    <TD COLSPAN="4" CLASS="PARAG1K"> 
  195.     <BR><BR>
  196.     <IMG SRC="PNIB1A.PNG">
  197.     <BR><BR>
  198.     Pour vous convaincre de la rΘalitΘ de cette dispositon, vous pouvez toujours Θcrire un petit programme qui     lance
  199.     routine de prΘnibbilization d'un buffer de donnΘes que vous aurez prΘalablement initialisΘ avec vos donnΘes.
  200.     Ainsi vous allez sous le moniteur (CALL-151) et pouvez par exemple :<BR><BR>
  201.     Videz la page $1000 α $10FF <BR>
  202.     * 1000:0<BR>
  203.     * 1001<1000.1100M<BR><BR>
  204.     Entrez les donnΘes α nibbilizer en $1000<BR>
  205.     * 1000: FD FE<BR><BR>
  206.     Tapez en $2000 (c'est un exemple d'adresse) le code du programme de test <BR>
  207.     * 2000: A9 00 85 3E A9 10 85 3F 20 00 B8 60<BR><BR>
  208.     ce qui correspond au programme donnΘ plus bas et que vous lancez par la commande<BR>
  209.     * 2000G<BR><BR>
  210.     ensuite vous examinez les valeurs dans les buffers NBUF1 de $BB00 α $BBFF et NBUF2 de $BC00 α BC56<BR><BR>
  211.     </TD>
  212. </TR>
  213. <TR>    <TD COLSPAN="4" BGCOLOR="BLUE"></TD></TR> 
  214. <TR>    <TD CLASS="PARAG1K"> 
  215.     <BR>PROGTEST</TD>
  216.     <TD CLASS="PARAG1K"> 
  217.     <BR>LDA #$00<BR>
  218.     STA $3E<BR>
  219.     LDA #$10<BR>
  220.     STA $3F<BR>
  221.     JSR $B800<BR>
  222.     RTS</TD>
  223.     <TD COLSPAN="2" CLASS="PARAG1K"> 
  224.     <BR>
  225.     ; adresse basse du buffer des donnΘes<BR>
  226.     <BR>
  227.     ; adresse haute du buffer des donnΘes<BR>
  228.     <BR>
  229.     ; active la prΘnibbilization<BR>
  230.     ; revient au moniteur<BR>
  231.  
  232. </TD>
  233. </TR>
  234.  
  235.  
  236. <TR> <TD COLSPAN="4" height="10"></TD>  </tr>
  237. <TR><TD COLSPAN="4"  ><HR color="BLUE"></td>
  238. </TR>
  239. <TR> 
  240.     <TD COLSPAN="4">  
  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></CENTER>
  247. </BODY>
  248. </HTML>
  249.