home *** CD-ROM | disk | FTP | other *** search
/ hackzapple.com / www.hackzapple.com.tar / www.hackzapple.com / DISKII / DISKIITECH06B.HTM.orig < prev    next >
Text File  |  2010-10-06  |  24KB  |  839 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="340"></TD>
  27.     <TD WIDTH="200"></TD> </TR>
  28.  
  29. <TR>     <TD COLSPAN="4" valign="TOP" > <img src="../THEMAS/M3/XDISK6B.PNG" BORDER=0></TD>  </TR>
  30. <TR>    <TD COLSPAN="4" CLASS="PARAG1K"> 
  31.     Voici le source de la routine d'Θcriture de la zone de donnΘes en DOS 3.3, elle se trouve α l'adresse $B82A. 
  32.     Il s'agit d'Θcrire :<BR>
  33.     <IMG SRC="../THEMAS/DIVERS/BULLET.GIF">les marqueurs (markers) <FONT COLOR="MAGENTA">$D5 $AA $AD</FONT>,<BR> 
  34.     <IMG SRC="../THEMAS/DIVERS/BULLET.GIF">puis les 342 nibbles,<BR> 
  35.     <IMG SRC="../THEMAS/DIVERS/BULLET.GIF">puis le checksum,<BR>
  36.     <IMG SRC="../THEMAS/DIVERS/BULLET.GIF">puis les marqueurs finaux <FONT COLOR="MAGENTA">$DE $AA $EB</FONT> et enfin 
  37.     un dernier $FF (enfin ... pas tout α fait, on le verra plus loin).<BR>
  38. <BR><BR>
  39. <IMG SRC="SECTEUR.PNG">
  40. <BR><BR>
  41. Nous avons vu comment le buffer de donnΘes (une PAGE de 256 octets) Θtait transformΘ en deux buffers NBUF1 et NBUF2 pour 
  42. obtenir les 342 valeurs de la forme 00xx.xxxx dans la routine de <A HREF="DISKIITECH05A.HTM">PRENIBBILIZATION</A>
  43. <BR><BR>
  44. </TD></TR>
  45. <TR>    <TD COLSPAN="4" BGCOLOR="#003030" CLASS="PARAG1K"> 
  46. <FONT COLOR="RED"><B>TRES IMPORTANT :</B></FONT>
  47. L'Θcriture de ces 342 valeurs n'est pas une Θvidence biblique.
  48. <BR><BR>
  49. 1. Les buffers sont enregistrΘs dans un ordre prΘcis : NBUF2 puis NBUF1. <BR>
  50. 2. Les valeurs prises dans les buffers sont prises dans l'ordre DECROISSANT POUR NBUF2 et CROISSANT pour NBUF1.<BR>   
  51. 3. Ce ne sont pas ces valeurs qui sont translatΘes en nibble mais le rΘsultat d'une opΘration EOR entre chaque
  52.    valeur et celle qui la prΘcΦde. Dans le cas de la premiΦre valeur l'EOR se fait sur elle-mΩme. 
  53. <BR><BR>
  54. Le dΘtail des opΘrations EOR est dΘcrite dans la rubrique <A HREF="DISKIITECH06D.HTM">EORING DES VALEURS</A> afin de bien
  55. comprendre la rΘelle symΘtrie entre Θcriture et lecture. 
  56. <BR> <BR>
  57. Le dΘtail du fonctionnement des tables est dΘcrit dans la rubrique 
  58. <A HREF="DISKIITECH06C.HTM">TABLES DE TRANSLATION DES NIBBLES</A>. 
  59. <BR><BR>
  60. Plus fort : PRODOS Θcrit des secteurs absolument identiques α ceux du DOS 3.3 mais avec des routines totalement 
  61. diffΘrentes mais surtout beaucoup plus rapides... voir la rubrique <A HREF="DISKIITECH06E.HTM">LA METHODE PRODOS</A>
  62. <BR><BR>
  63. </TD></TR>
  64. <TR>    <TD COLSPAN="4" CLASS="PARAG1K"> 
  65. <BR>  
  66. <IMG SRC="SECTEUR1.PNG">
  67. <BR><BR>
  68. <IMG SRC="EORNIBL3.PNG">
  69. <BR><BR>
  70. </TD></TR>
  71. <TR>    <TD COLSPAN="4" CLASS="TITRE1">LA ROUTINE D'ECRITURE</TD></TR>
  72. <TR>    <TD COLSPAN="4" CLASS="PARAG1K"> <BR></TD></TR>
  73. <TR>    <TD CLASS="PARAG1K">
  74.     WRIT16<BR>
  75.     <BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>
  76.     WSYNC<BR>
  77.     <BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>
  78.     WDATA1<BR>
  79.     L1<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>
  80.     WDATA2<BR>
  81.     <BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>
  82.     WEXIT<BR>
  83.     <BR><BR><BR><BR>
  84.     WNIBL9<BR>
  85.     WNIBL7<BR>
  86.     <BR>
  87.     WNIBBLE<BR>
  88.     </TD>
  89.     <TD CLASS="PARAG1K">
  90.     SEC<BR>
  91.     STY SLOTABS<BR>
  92.     LDA $C08D,X<BR>
  93.     LDA $C08E,X<BR>
  94.     BMI WEXIT<BR>
  95.     LDA NBUF2<BR>
  96.     STA WTEMP<BR>
  97.     LDA #$FF<BR>
  98.     STA $C08F,X<BR>
  99.     ORA $C08C,X<BR>
  100.     PHA<BR>
  101.     PLA<BR>
  102.     NOP<BR>
  103.     LDA #$04<BR>
  104.     PHA<BR>
  105.     PLA<BR>
  106.     JSR WNIBL7<BR>
  107.     DEY<BR>
  108.     BNE WSYNC<BR>
  109.     LDA #$D5<BR>
  110.     JSR WNIBL9<BR>
  111.     LDA #$AA<BR>
  112.     JSR WNIBL9<BR>
  113.     LDA #$AD<BR>
  114.     JSR WNIBL9<BR>
  115.     TYA<BR>
  116.     LDY #$56<BR>
  117.     BNE L1<BR>
  118.     LDA NBUF2,Y<BR>
  119.     EOR NBUF2-1,Y<BR>
  120.     TAX<BR>
  121.     LDA NIBL,X<BR>
  122.     LDX SLOTZ<BR>
  123.     STA $C08D,X<BR>
  124.     LDA $C08C,X<BR>
  125.     DEY<BR>
  126.     BNE WDATA1<BR>
  127.     LDA WTEMP<BR>
  128.     NOP<BR>
  129.     EOR NBUF1,Y<BR>
  130.     TAX<BR>
  131.     LDA NIBL,X<BR>
  132.     LDX SLOTABS<BR>
  133.     STA $C08D,X<BR>
  134.     LDA $C08C,X<BR>
  135.     LDA NBUF1,Y<BR>
  136.     INY<BR>
  137.     BNE WDATA2<BR>
  138.     TAX<BR>
  139.     LDA NIBL,X<BR>
  140.     LDX SLOTZ<BR>
  141.     JSR WNIBBLE<BR>
  142.     LDA #$DE<BR>
  143.     JSR WNIBL9<BR>
  144.     LDA #$AA<BR>
  145.     JSR WNIBL9<BR>
  146.     LDA #$EB<BR>
  147.     JSR WNIBL9<BR>
  148.     LDA #$FF<BR>
  149.     JSR WNIBL9<BR>
  150.     LDA $C08E,X<BR>
  151.     LDA $C08C,X<BR>
  152.     RTS<BR>
  153.     <BR>
  154.     <BR>
  155.     CLC<BR>
  156.     PHA<BR>
  157.     PLA<BR>
  158.     LDA $C08D,X<BR>
  159.     ORA $C08C,X<BR>
  160.     RTS<BR>
  161. <BR>
  162. <BR>
  163.     </TD>
  164.     <TD COLSPAN="2" CLASS="PARAG1K">
  165.     ; anticipe une erreur de Write Protect<BR>
  166.     ; sauve le n░ de slot  l'adresse $678<BR>
  167.     ; TEST WRITE PROTECT<BR>
  168.     <BR>
  169.     ; Erreur la disquette est protΘgΘe contre l'Θcriture<BR>
  170.     <FONT COLOR="YELLOW">; Charge en A le 1er nibble du buffer auxiliaire NBUF2<BR>
  171.     ; sauvegarde le pour calcul ultΘrieur $BC00 EOR $BB00 <BR></FONT>
  172.     ; la valeur des nibbles de synchronisation sera $FF.<BR>
  173.     ; 5 cycles - Enclenche l'Θcriture<BR>
  174.     ; 4 cycles - Shift<BR>
  175.     ; 3 cycles juste pour timing<BR>
  176.     ; 4 cycles juste pour timing<BR>
  177.     ; 2 cycles juste pour timing<BR>
  178.     ; 2 cycles - Nombre de nibbles de synchronisation (5)    <BR>
  179.     ; 3 cycles juste pour timing<BR>
  180.     ; 4 cycles juste pour timing<BR>
  181.     ; 6 cycles + 7 cycles VOIR NOTE 1 ci -dessous<BR>
  182.     ; 2 cycles <BR>
  183.     ; 3 cycles si on boucle et 2 cycles si on continue<BR>
  184.     ; 2 cycles <BR>
  185.     ; 6 cycles + 9 cycles VOIR NOTE 2 ci-dessous<BR>
  186.     ; VOIR NOTE 2 ci-dessous<BR><BR>
  187.     ; VOIR NOTE 2 ci-dessous<BR><BR>
  188.     ; Y=0 donc A =0<BR>
  189.     ; initialise la borne supΘrieure de l'index pour NBUF2<BR> 
  190.     ; 3 cycles : LE BRANCHEMENT SE FAIT TOUJOURS !<BR>
  191.     <FONT COLOR="RED">; <--- boucle d'Θcriture de NBUF2 sur le disque<BR>; <- <BR>; <- <BR>; <- <BR>; <- <BR>; <- <BR>; <- <BR>; <- <BR> ; <--- boucle d'Θcriture de NBUF2 sur le disque<BR></FONT>
  192.     <FONT COLOR="YELLOW">; valeur de $BC00 en page 0 (cf. dΘbut de routine)<BR></FONT>
  193.     ; juste pour le timing des 32 cycles<BR>   
  194.     <FONT COLOR="MAGENTA">; <--- boucle d'Θcriture de NBUF1 sur le disque<BR>
  195.     ; <- <BR>; <- <BR>; <- <BR>; <- <BR>; <- <BR>; <- <BR>; <- <BR>
  196.     ; <--- boucle d'Θcriture de NBUF1 sur le disque <BR></FONT>
  197.     ; checksum<BR>
  198.     <BR>
  199.     <BR><BR> 
  200.     ; marqueurs finaux $DE AA EB<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>
  201.     <BR><BR><BR>
  202.     ; 2 cycles juste pour timing et enlever l'erreur<BR>
  203.     ; 3 cycles juste pour timing<BR>
  204.     ; 4 cycles juste pour timing<BR>
  205.     ; 5 cycles Chargement DATA REGISTER<BR>
  206.     ; 4 cycles Shift DATA REGISTER<BR>
  207.     ; 6 cycles <BR>
  208.     </TD>
  209. </TR>
  210.  
  211. <TR> <TD COLSPAN="4" CLASS="TITRE1">NOTES EXPLICATIVES DETAILLANT LE CODE EN DEROULE</TD></TR>    
  212. <TR> <TD COLSPAN="4" height="10"></TD>  </tr>
  213.  
  214. <TR> <TD COLSPAN="4" CLASS="PARAG1R" BGCOLOR="#202020"><B> NOTE 1 : ECRITURE DES $FF DE SYNCHRONISATION</B></TD></TR>    
  215. <TR> <TD COLSPAN="4" CLASS="PARAG1K"><FONT COLOR="#FFFF00"><B>Ecriture du premier $FF de synchronisation</B></FONT>
  216.     <BR><BR>
  217.     Voici le code qui se dΘroule pour cette Θcriture... comptons les cycles</TD></TR>    
  218. <TR>    <TD CLASS="PARAG1K">
  219.     <BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>
  220.     <BR>
  221.     WNIBL7<BR>
  222.     </TD>
  223.     <TD CLASS="PARAG1K">
  224.     STA $C08F,X<BR>
  225.     ORA $C08C,X<BR>
  226.     PHA<BR>
  227.     PLA<BR>
  228.     NOP<BR>
  229.     LDA #$04<BR>
  230.     PHA<BR>
  231.     PLA<BR>
  232.     JSR WNIBL7<BR>
  233.     <BR>
  234.     <BR>
  235.     PHA<BR>
  236.     PLA<BR>
  237.     </TD>
  238.     <TD COLSPAN="2" CLASS="PARAG1K">
  239.     ; 5 cycles - Enclenche l'Θcriture<BR>
  240.     ; 4 cycles - Shift<BR>
  241.     ; 3 cycles juste pour timing<BR>
  242.     ; 4 cycles juste pour timing<BR>
  243.     ; 2 cycles juste pour timing<BR>
  244.     ; 2 cycles - Nombre de nibbles de synchronisation (5)    <BR>
  245.     ; 3 cycles juste pour timing<BR>
  246.     ; 4 cycles juste pour timing<BR>
  247.     ; 6 cycles <BR>
  248.     <BR><BR>
  249.     ; 3 cycles juste pour timing<BR>
  250.     ; 4 cycles juste pour timing<BR>
  251.     <FONT COLOR="RED">-- TOTAL 40 CYCLES -------------</FONT>
  252. <BR>
  253. </TD>
  254. </TR>
  255. <TR> <TD COLSPAN="4" CLASS="PARAG1K"><FONT COLOR="#FFFF00"><B>ECRITURE DES $FF DE SYNCHRONISATION DANS LA BOUCLE</B></FONT>
  256.     <BR><BR>
  257.     Voici le code qui se dΘroule pour cette Θcriture... comptons les cycles en repartant de la suite de WNIBL7
  258.     (qui correspond en fait WNIBBLE).
  259.     </TD>
  260. </TR>    
  261. <TR>    <TD CLASS="PARAG1K">
  262.     WNIBBLE<BR><BR><BR><BR><BR><BR><BR>WSYNC<BR>
  263.     <BR><BR><BR>
  264.     WNIBL7<BR>
  265. </TD>
  266.     <TD CLASS="PARAG1K">
  267.     LDA $C08D,X<BR>
  268.     ORA $C08C,X<BR>
  269.     RTS<BR>
  270.     <BR>
  271.     DEY<BR>
  272.     BNE WSYNC<BR>
  273.     <BR>
  274.     PHA<BR>
  275.     PLA<BR>
  276.     JSR WNIBL7<BR>
  277.     <BR>
  278.     PHA<BR>
  279.     PLA<BR>
  280.     </TD>
  281.     <TD COLSPAN="2" CLASS="PARAG1K">
  282.     ; 5 cycles Chargement DATA REGISTER<BR>
  283.     ; 4 cycles Shift DATA REGISTER<BR>
  284.     ; 6 cycles <BR>
  285.     <BR>
  286.     ; 2 cycles <BR>
  287.     <FONT COLOR="MAGENTA">; 3 cycles car on boucle </FONT><BR>
  288.     <BR>
  289.     ; 3 cycles juste pour timing<BR>
  290.     ; 4 cycles juste pour timing<BR>
  291.     ; 6 cycles <BR>
  292.     <BR>
  293.     ; 3 cycles juste pour timing<BR>
  294.     ; 4 cycles juste pour timing<BR>
  295.     <FONT COLOR="RED">-- TOTAL 40 CYCLES -------------</FONT>
  296.     </TD>
  297. </TR>
  298. <TR> <TD COLSPAN="4" CLASS="PARAG1K">  
  299.     <FONT COLOR="#FFFF00"><B>ECRITURE DU DERNIER $FF DE SYNCHRONISATION : IL SORT DE LA BOUCLE</B></FONT>
  300.     <BR><BR>
  301.     Voici le code qui se dΘroule pour cette Θcriture, il faut bien comprendre qu'encore une fois nous comptons 
  302.     les cycles en repartant de la suite de WNIBL7 (qui correspond en fait WNIBBLE).
  303.     </TD>
  304. </TR>    
  305. <TR>    <TD CLASS="PARAG1K">
  306.     WNIBBLE<BR><BR><BR><BR><BR><BR><BR><BR><BR>
  307.     WNIBL9<BR>
  308.     </TD>
  309.     <TD CLASS="PARAG1K">
  310.     LDA $C08D,X<BR>
  311.     ORA $C08C,X<BR>
  312.     RTS<BR>
  313.     <BR>
  314.     DEY<BR>
  315.     BNE WSYNC<BR>
  316.     LDA #$D5<BR>
  317.     JSR WNIBL9<BR>
  318.     <BR>
  319.     CLC<BR>
  320.     PHA<BR>
  321.     PLA<BR>
  322.     </TD>
  323.     <TD COLSPAN="2" CLASS="PARAG1K">
  324.     ; 5 cycles Chargement DATA REGISTER<BR>
  325.     ; 4 cycles Shift DATA REGISTER<BR>
  326.     ; 6 cycles <BR>
  327.     <BR>
  328.     ; 2 cycles <BR>
  329.     <FONT COLOR="MAGENTA">; 2 cycles car ON NE BOUCLE PAS</FONT><BR>
  330.     ; 2 cycles <BR>
  331.     ; 6 cycles <BR>
  332.     <BR>
  333.     ; 2 cycles juste pour timing<BR>
  334.     ; 3 cycles juste pour timing<BR>
  335.     ; 4 cycles juste pour timing<BR>
  336.     <FONT COLOR="RED">-- TOTAL 36 CYCLES ------------- 
  337.     SacrΘ DOS 3.3, toujours pas fichu d'Θcrire 40 cycles ici... mais ce n'est pas un rΘel problΦme 
  338.     car nous sommes synchronisΘs avec 4 $FF. Ne perdons pas de vue que nous avons dΘcodΘ le champ adresse et qu'en 
  339.     bonne logique le programme 6502 a admis qu'il fallait lire les donnΘes. La synchronisation est donc largement
  340.     aisΘe α obtenir.</FONT>
  341.     </TD>
  342. </TR>
  343. <TR> <TD COLSPAN="4" CLASS="PARAG1">Pendant cette routine A est chargΘ avec $D5 de faτon α ce que cette valeur 
  344.     soit prΩte α Ωtre placΘe dans le DATA REGISTER dΦs le dΘbut de routine suivante.
  345.     </TD></TR>
  346. <TR> <TD COLSPAN="4" CLASS="PARAG1R" BGCOLOR="#202020"><B> NOTE 2 : ECRITURE DU CHAMP $D5 $AA $AD</B></TD></TR>    
  347. <TR> <TD COLSPAN="4" CLASS="PARAG1K"><FONT COLOR="#FFFF00"><B>ECRITURE DU MARKER $D5</B></FONT>
  348.     <BR><BR>
  349.     Voici le code qui se dΘroule pour cette Θcriture, il faut bien comprendre qu'encore une fois nous comptons 
  350.     les cycles en repartant de la suite de WNIBL9 (qui est d'ailleurs commun α NIBL7 et correspond en fait WNIBBLE).
  351.     </TD>
  352. </TR>
  353. <TR>     <TD CLASS="PARAG1K">
  354.     WNIBBLE<BR><BR><BR><BR><BR><BR><BR>
  355.     WNIBL9<BR>
  356.     </TD>
  357.     <TD CLASS="PARAG1K">
  358.     LDA $C08D,X<BR>
  359.     ORA $C08C,X<BR>
  360.     RTS<BR>
  361.     <BR>
  362.     LDA #$AA<BR>
  363.     JSR WNIBL9<BR>
  364.     <BR>
  365.     CLC<BR>
  366.     PHA<BR>
  367.     PLA<BR>
  368.     </TD>
  369.     <TD COLSPAN="2" CLASS="PARAG1K">
  370.     ; 5 cycles Chargement DATA REGISTER<BR>
  371.     ; 4 cycles Shift DATA REGISTER<BR>
  372.     ; 6 cycles <BR>
  373.     <BR>
  374.     ; 2 cycles <BR>
  375.     ; 6 cycles <BR>
  376.     <BR>
  377.     ; 2 cycles juste pour timing<BR>
  378.     ; 3 cycles juste pour timing<BR>
  379.     ; 4 cycles juste pour timing<BR>
  380.     <FONT COLOR="RED">-- TOTAL 32 CYCLES -------------</FONT>
  381.     </TD>
  382. </TR>
  383. <TR> <TD COLSPAN="4" CLASS="PARAG1">Pendant cette routine A est chargΘ avec $AA de faτon α ce que cette valeur 
  384.     soit prΩte α Ωtre placΘe dans le DATA REGISTER dΦs le dΘbut de routine suivante.
  385.     </TD></TR>
  386. <TR> <TD COLSPAN="4" CLASS="PARAG1K"><FONT COLOR="#FFFF00"><B>ECRITURE DU MARKER $AA</B></FONT>
  387.     <BR><BR>
  388.     Voici le code qui se dΘroule pour cette Θcriture, il est absolument identique α celui dΘroulΘ pour $D5.
  389.     </TD>
  390. </TR>
  391. <TR>     <TD CLASS="PARAG1K">
  392.     WNIBBLE<BR><BR><BR><BR><BR><BR><BR>
  393.     WNIBL9<BR>
  394.     </TD>
  395.     <TD CLASS="PARAG1K">
  396.     LDA $C08D,X<BR>
  397.     ORA $C08C,X<BR>
  398.     RTS<BR>
  399.     <BR>
  400.     LDA #$AD<BR>
  401.     JSR WNIBL9<BR>
  402.     <BR>
  403.     CLC<BR>
  404.     PHA<BR>
  405.     PLA<BR>
  406.     </TD>
  407.     <TD COLSPAN="2" CLASS="PARAG1K">
  408.     ; 5 cycles Chargement DATA REGISTER<BR>
  409.     ; 4 cycles Shift DATA REGISTER<BR>
  410.     ; 6 cycles <BR>
  411.     <BR>
  412.     ; 2 cycles <BR>
  413.     ; 6 cycles <BR>
  414.     <BR>
  415.     ; 2 cycles juste pour timing<BR>
  416.     ; 3 cycles juste pour timing<BR>
  417.     ; 4 cycles juste pour timing<BR>
  418.     <FONT COLOR="RED">-- TOTAL 32 CYCLES -------------</FONT>
  419.     </TD>
  420. </TR>
  421. <TR> <TD COLSPAN="4" CLASS="PARAG1">Pendant cette routine A est chargΘ avec $AD de faτon α ce que cette valeur 
  422.     soit prΩte α Ωtre placΘe  dans le DATA REGISTER dΦs le dΘbut de routine suivante.
  423.     </TD></TR>
  424. <TR> <TD COLSPAN="4" CLASS="PARAG1K"><FONT COLOR="#FFFF00"><B>ECRITURE DU MARKER $AD</B></FONT>
  425.     <BR><BR>
  426.     Voici le code qui se dΘroule pour cette Θcriture. 
  427.     </TD>
  428. </TR>
  429. <TR>     <TD CLASS="PARAG1K">
  430.     WNIBBLE<BR><BR><BR><BR><BR><BR><BR>
  431.     <BR>L1<BR>
  432.     </TD>
  433.     <TD CLASS="PARAG1K">
  434.     LDA $C08D,X<BR>
  435.     ORA $C08C,X<BR>
  436.     RTS<BR>
  437.     <BR>
  438.     TYA<BR>
  439.     LDY #$56<BR>
  440.     BNE L1<BR>
  441.     <BR>
  442.     EOR NBUF2-1,Y<BR>
  443.     TAX<BR>
  444.     LDA NIBL,X<BR>
  445.     LDX SLOTZ<BR>
  446.     </TD>
  447.     <TD COLSPAN="2" CLASS="PARAG1K">
  448.     ; 5 cycles Chargement DATA REGISTER<BR>
  449.     ; 4 cycles Shift DATA REGISTER<BR>
  450.     ; 6 cycles <BR>
  451.     <BR>
  452.     ; 2 cycles <BR>
  453.     ; 2 cycles <BR>
  454.     <FONT COLOR="MAGENTA">; 3 cycles car le branchement se fait OBLIGATOIREMENT</FONT><BR>
  455.     <BR>
  456.     ; 5 cycles : 4 cycles  + 1 pour changement de page !!!<BR>
  457.     ; 2 cycles juste pour timing<BR>
  458.     ; 4 cycles<BR>
  459.     ; 3 cycles (c'est un chargement en page 0)<BR>
  460.     <FONT COLOR="RED">-- TOTAL 36 CYCLES -------------<BR>
  461.     DΘcidΘment ce DOS Θcrit bizarrement mais c'est correct et en fait la routine est optimale pour la suite.</FONT>
  462.     </TD>
  463. </TR>
  464. <TR> <TD COLSPAN="4" CLASS="PARAG1">Pendant cette routine A est chargΘ avec la premiΦre valeur de NBUF2 
  465.     de faτon α ce que cette valeur soit prΩte α Ωtre placΘe dans le DATA REGISTER dΦs le dΘbut 
  466.     de routine suivante. 
  467.     <BR><BR>
  468.     NOTA TRES IMPORTANT : Remarquez avec attention que c'est ici que dΘmarre le calcul du checksum et que 
  469.     le premier EOR se fait entre A=0 et la valeur de NBUF2 qui est bien la derniΦre car l'index Y=$56 et on prend cette
  470.     derniΦre valeur en se basant sur l'adresse NBUF2-1 ... ce qui au passage ajoute un cycle car on change de page.
  471.     <BR><BR>
  472.     Pour plus de dΘtails sur les opΘrations EOR voir la rubrique <A HREF="DISKIITECH06D.HTM">LE CALCUL D'EOR</A> 
  473.     et pour l'utilisation des tables de translataion voir la rubrique <A HREF="DISKIITECH06C.HTM">TABLES DE TRANSLATION</A> 
  474.     </TD></TR>
  475. <TR> <TD COLSPAN="4" CLASS="PARAG1R" BGCOLOR="#202020"><B> NOTE 3 : ECRITURE DES 342 NIBBLES</B></TD></TR>    
  476. <TR> <TD COLSPAN="4" CLASS="PARAG1K">Le secteur Θcrit sur la disquette contient d'abord NBUF2 puis NBUF1.<BR>
  477.     </TD></TR>
  478. <TR> <TD COLSPAN="4" CLASS="PARAG1K"><FONT COLOR="#FFFF00"><B>ECRITURE DE NBUF2</B></FONT>
  479.     <BR>
  480.     NBUF2 est le petit buffer auxiliaire de $56 octets dans lequel on a placΘ les bits 0 et 1 des octets de donnΘes du buffer.
  481.     principal sous la forme 00xx.xxxx. Cette opΘration Θtait rΘalisΘe par la 
  482.     <A HREF="DISKIITECH05A.HTM">PRENIBBILIZATION</A><BR><BR>
  483.     </TD>
  484. </TR>
  485. <TR>     <TD CLASS="PARAG1K">
  486.     <BR><BR><BR><BR><BR>WDATA1<BR>
  487.     <BR><BR>
  488.     </TD>
  489.     <TD CLASS="PARAG1K">
  490.     STA $C08D,X<BR>
  491.     LDA $C08C,X<BR>
  492.     DEY<BR>
  493.     BNE WDATA1<BR>
  494.     <BR>
  495.     LDA NBUF2,Y<BR>
  496.     EOR NBUF2-1,Y<BR>
  497.     TAX<BR>
  498.     LDA NIBL,X<BR>
  499.     LDX SLOTZ<BR>
  500.     </TD>
  501.     <TD COLSPAN="2" CLASS="PARAG1K">
  502.     ; 5 cycles Chargement DATA REGISTER<BR>
  503.     ; 4 cycles Shift DATA REGISTER<BR>
  504.     ; 2 cycles Y avait ΘtΘ initialisΘ α $56 limite de NBUF2<BR>
  505.     <FONT COLOR="MAGENTA">; 3 cycles Le branchement se fait toujours pour l'instant</FONT><BR>
  506.     <BR>
  507.     ; 4 cycles <BR>
  508.     ; 5 cycles : 4 cycles  + 1 pour changement de page !!!<BR>
  509.     ; 2 cycles <BR>
  510.     ; 4 cycles<BR>
  511.     ; 3 cycles (c'est un chargement en page 0)<BR>
  512.     <FONT COLOR="RED">-- TOTAL 32 CYCLES -------------<BR> </FONT>
  513.     </TD>
  514. </TR>
  515. <TR> <TD COLSPAN="4" CLASS="PARAG1">NOTA TRES IMPORTANT : Remarquez maintenant que ce qui sert de valeur d'index pour 
  516.     aller chercher le nibble dans la table de translation est le rΘsultat d'un EOR entre deux valeurs successives du
  517.     buffer.
  518.     <BR><BR>
  519.     Par ailleurs faites attention ici le code est prΘsentΘ en dΘroulΘ pour faciliter le comptage des cycles 
  520.     et qu'il boucle plusieurs fois sur lui mΩme mais que la sortie se fait effectivement sur le teste BNE 
  521.     qui malheureusement se trouve au beau milieu du dΘroulΘ...
  522.     </TD></TR>
  523. <TR> <TD COLSPAN="4" CLASS="PARAG1K"><FONT COLOR="#FFFF00"><B>ECRITURE DU DERNIER ELEMENT DE NBUF2</B></FONT>
  524.     <BR>
  525.     Il s'agit du cas ou Y = 0, le branchement sur WDATA1 ne se fait donc plus.<BR><BR>
  526.     </TD>
  527. </TR>
  528. <TR>     <TD CLASS="PARAG1K">
  529.     <BR><BR><BR><BR><BR><BR>
  530.     <BR><BR>
  531.     </TD>
  532.     <TD CLASS="PARAG1K">
  533.     STA $C08D,X<BR>
  534.     LDA $C08C,X<BR>
  535.     DEY<BR>
  536.     BNE WDATA1<BR>
  537.     LDA WTEMP<BR>
  538.     NOP<BR>
  539.     EOR NBUF1,Y<BR>
  540.     TAX<BR>
  541.     LDA NIBL,X<BR>
  542.     LDX SLOTABS<BR>
  543.     </TD>
  544.     <TD COLSPAN="2" CLASS="PARAG1K">
  545.     ; 5 cycles Chargement DATA REGISTER<BR>
  546.     ; 4 cycles Shift DATA REGISTER<BR>
  547.     ; 2 cycles Y avait ΘtΘ initialisΘ α $56 limite de NBUF2<BR>
  548.     <FONT COLOR="MAGENTA">; 2 cycles le branchement vient de s'arrΩter</FONT><BR>
  549.     ; 3 cycles <FONT COLOR="YELLOW">chargement α partir de la page 0 (valeur de $BC00)</FONT><BR>
  550.     ; 2 cycles juste pour le timing<BR>
  551.     ; 4 cycles  (mΩme page)<BR>
  552.     ; 2 cycles <BR>
  553.     ; 4 cycles<BR>
  554.     ; 4 cycles (adresse $678)<BR>
  555.     <FONT COLOR="RED">-- TOTAL 32 CYCLES -------------<BR> </FONT>
  556.     </TD>
  557. </TR>
  558. <TR> <TD COLSPAN="4" CLASS="PARAG1">NOTA TRES IMPORTANT : Admirez la grande astuce qui a consistΘ α sauvegarder 
  559.     la valeur de $BC00 en page zΘro tout en dΘbut de routine d'Θcriture (juste aprΦs le test de write protect)
  560.     et de le reprendre ici pour faciliter le timing.
  561.     </TD></TR>
  562.  
  563.  
  564.  
  565.  
  566. <TR> <TD COLSPAN="4" CLASS="PARAG1K"><FONT COLOR="#FFFF00"><B>ECRITURE DE NBUF1</B></FONT>
  567.     <BR>NBUF1 est le buffer auxiliaire de $100 octets dans lequel on a placΘ les bits 7 α 2 des octets de donnΘes du buffer.
  568.     principal sous la forme 00xx.xxxx. Cette opΘration Θtait rΘalisΘe par la 
  569.     <A HREF="DISKIITECH05A.HTM">PRENIBBILIZATION</A><BR><BR>
  570.     </TD>
  571. </TR>
  572.  
  573. <TR>     <TD CLASS="PARAG1K">
  574.     <BR><BR><BR><BR><BR><BR>
  575.     WDATA2<BR><BR>
  576.     </TD>
  577.     <TD CLASS="PARAG1K">
  578.     STA $C08D,X<BR>
  579.     LDA $C08C,X<BR>
  580.     LDA NBUF1,Y<BR>
  581.     INY<BR>
  582.     
  583.     BNE WDATA2<BR>
  584.     <BR>
  585.     EOR NBUF1,Y<BR>
  586.     TAX<BR>
  587.     LDA NIBL,X<BR>
  588.     LDX SLOTABS<BR>
  589.     </TD>
  590.     <TD COLSPAN="2" CLASS="PARAG1K">
  591.     ; 5 cycles Chargement DATA REGISTER<BR>
  592.     ; 4 cycles Shift DATA REGISTER<BR>
  593.     ; 4 cycles <BR>
  594.     ; 2 cycles (Y ira maintenant jusqu'α $FF puis $00 pour la fin de test) <BR>
  595.     <FONT COLOR="MAGENTA">; 3 cycles car LE BRANCHEMENT SE FAIT</FONT><BR>
  596.     <BR>
  597.     ; 4 cycles  (mΩme page)<BR>
  598.     ; 2 cycles <BR>
  599.     ; 4 cycles<BR>
  600.     ; 4 cycles (adresse $678)<BR>
  601.     <FONT COLOR="RED">-- TOTAL 32 CYCLES -------------<BR> </FONT>
  602.     </TD>
  603. </TR>
  604. <TR> <TD COLSPAN="4" CLASS="PARAG1K"><FONT COLOR="#FFFF00"><B>ECRITURE DU DERNIER ELEMENT DE NBUF1</B></FONT>
  605.     <BR>
  606.     Il s'agit du cas ou Y = 0, le branchement sur WDATA2 ne se fait donc plus.<BR><BR>
  607.     </TD>
  608. </TR>
  609. <TR>     <TD CLASS="PARAG1K">
  610.     <BR><BR><BR><BR><BR><BR>
  611.     <BR><BR>
  612.     </TD>
  613.     <TD CLASS="PARAG1K">
  614.     STA $C08D,X<BR>
  615.     LDA $C08C,X<BR>
  616.     LDA NBUF1,Y<BR>
  617.     INY<BR>
  618.     BNE WDATA2<BR>
  619.     TAX<BR>
  620.     LDA NIBL,X<BR>
  621.     LDX SLOTZ<BR>
  622.     JSR WNIBBLE<BR>
  623.     <BR>
  624.  
  625.  
  626.     </TD>
  627.     <TD COLSPAN="2" CLASS="PARAG1K">
  628.     ; 5 cycles Chargement DATA REGISTER<BR>
  629.     ; 4 cycles Shift DATA REGISTER<BR>
  630.     ; 4 cycles<BR>
  631.     ; 2 cycles <BR>
  632.     <FONT COLOR="MAGENTA">; 2 cycles le branchement vient de s'arrΩter</FONT><BR>
  633.     ; 2 cycles  <BR>
  634.     ; 4 cycles<BR>
  635.     ; 3 cycles (chargement en page 0)<BR>
  636.     ; 6 cycles  <BR>
  637.     <FONT COLOR="RED">-- TOTAL 32 CYCLES -------------<BR> </FONT>
  638.     </TD>
  639. </TR>
  640. <TR> <TD COLSPAN="4" CLASS="PARAG1">Pendant cette routine A est chargΘ avec le checksum.
  641.     </TD></TR>
  642.  
  643. <TR> <TD COLSPAN="4" CLASS="PARAG1R" BGCOLOR="#202020"><B> NOTE 4 : ECRITURE DU CHECKSUM</B></TD></TR>    
  644.  
  645. <TR>     <TD CLASS="PARAG1K">
  646.     <BR><BR><BR><BR><BR>
  647.     <BR><BR>WNIBL9<BR>
  648.     </TD>
  649.     <TD CLASS="PARAG1K">
  650.     STA $C08D,X<BR>
  651.     ORA $C08C,X<BR>
  652.     RTS<BR>
  653.     <BR>
  654.     LDA #$DE<BR>
  655.     JSR WNIBL9<BR>
  656.     <BR>
  657.     CLC<BR>
  658.     PHA<BR>
  659.     PLA<BR>
  660.     
  661.     </TD>
  662.     <TD CLASS="PARAG1K">
  663.     ; 5 cycles Chargement DATA REGISTER<BR>
  664.     ; 4 cycles Shift DATA REGISTER<BR>
  665.     ; 6 cycles<BR>
  666.     <BR>
  667.     ; 2 cycles<BR>
  668.     ; 6 cycles<BR>
  669.     <BR>
  670.     ; 2 cycles<BR>
  671.     ; 3 cycles<BR>
  672.     ; 4 cycles<BR>
  673.     <FONT COLOR="RED">-- TOTAL 32 CYCLES -------------<BR> </FONT>
  674.     </TD>
  675. </TR>    
  676. <TR> <TD COLSPAN="4" CLASS="PARAG1">Pendant cette routine A est chargΘ avec le premier close marker : $DE.
  677.     </TD></TR>
  678.  
  679. <TR> <TD COLSPAN="4" CLASS="PARAG1R" BGCOLOR="#202020"><B> NOTE 5 : ECRITURE DES MARQUEURS DE FIN</B></TD></TR>    
  680.  
  681. <TR> <TD COLSPAN="4" CLASS="PARAG1K"><FONT COLOR="#FFFF00"><B>ECRITURE DE $DE</B></FONT>
  682.     <BR><BR>
  683.     </TD>
  684. </TR>
  685. <TR>     <TD CLASS="PARAG1K">
  686.     <BR><BR><BR><BR><BR>
  687.     <BR><BR>WNIBL9<BR>
  688.     </TD>
  689.     <TD CLASS="PARAG1K">
  690.     STA $C08D,X<BR>
  691.     ORA $C08C,X<BR>
  692.     RTS<BR>
  693.     <BR>
  694.     LDA #$DE<BR>
  695.     JSR WNIBL9<BR>
  696.     <BR>
  697.     CLC<BR>
  698.     PHA<BR>
  699.     PLA<BR>
  700.     
  701.     </TD>
  702.     <TD CLASS="PARAG1K">
  703.     ; 5 cycles Chargement DATA REGISTER<BR>
  704.     ; 4 cycles Shift DATA REGISTER<BR>
  705.     ; 6 cycles<BR>
  706.     <BR>
  707.     ; 2 cycles<BR>
  708.     ; 6 cycles<BR>
  709.     <BR>
  710.     ; 2 cycles<BR>
  711.     ; 3 cycles<BR>
  712.     ; 4 cycles<BR>
  713.     <FONT COLOR="RED">-- TOTAL 32 CYCLES -------------<BR> </FONT>
  714.     </TD>
  715. </TR>    
  716. <TR> <TD COLSPAN="4" CLASS="PARAG1">Pendant cette routine A est chargΘ avec le second close marker : $AA.
  717.     </TD></TR>
  718.  
  719. <TR> <TD COLSPAN="4" CLASS="PARAG1K"><FONT COLOR="#FFFF00"><B>ECRITURE DE $AA</B></FONT>
  720.     <BR><BR>
  721.     </TD>
  722. </TR>
  723. <TR>     <TD CLASS="PARAG1K">
  724.     <BR><BR><BR><BR><BR>
  725.     <BR><BR>WNIBL9<BR>
  726.     </TD>
  727.     <TD CLASS="PARAG1K">
  728.     STA $C08D,X<BR>
  729.     ORA $C08C,X<BR>
  730.     RTS<BR>
  731.     <BR>
  732.     LDA #$EB<BR>
  733.     JSR WNIBL9<BR>
  734.     <BR>
  735.     CLC<BR>
  736.     PHA<BR>
  737.     PLA<BR>
  738.     
  739.     </TD>
  740.     <TD CLASS="PARAG1K">
  741.     ; 5 cycles Chargement DATA REGISTER<BR>
  742.     ; 4 cycles Shift DATA REGISTER<BR>
  743.     ; 6 cycles<BR>
  744.     <BR>
  745.     ; 2 cycles<BR>
  746.     ; 6 cycles<BR>
  747.     <BR>
  748.     ; 2 cycles<BR>
  749.     ; 3 cycles<BR>
  750.     ; 4 cycles<BR>
  751.     <FONT COLOR="RED">-- TOTAL 32 CYCLES -------------<BR> </FONT>
  752.     </TD>
  753. </TR>    
  754. <TR> <TD COLSPAN="4" CLASS="PARAG1">Pendant cette routine A est chargΘ avec le dernier close marker : $EB.
  755.     </TD></TR>
  756.  
  757. <TR> <TD COLSPAN="4" CLASS="PARAG1K"><FONT COLOR="#FFFF00"><B>ECRITURE DE $EB</B></FONT>
  758.     <BR><BR>
  759.     </TD>
  760. </TR>
  761. <TR>     <TD CLASS="PARAG1K">
  762.     <BR><BR><BR><BR><BR>
  763.     <BR><BR>WNIBL9<BR>
  764.     </TD>
  765.     <TD CLASS="PARAG1K">
  766.     STA $C08D,X<BR>
  767.     ORA $C08C,X<BR>
  768.     RTS<BR>
  769.     <BR>
  770.     LDA #$EB<BR>
  771.     JSR WNIBL9<BR>
  772.     <BR>
  773.     CLC<BR>
  774.     PHA<BR>
  775.     PLA<BR>
  776.     
  777.     </TD>
  778.     <TD CLASS="PARAG1K">
  779.     ; 5 cycles Chargement DATA REGISTER<BR>
  780.     ; 4 cycles Shift DATA REGISTER<BR>
  781.     ; 6 cycles<BR>
  782.     <BR>
  783.     ; 2 cycles<BR>
  784.     ; 6 cycles<BR>
  785.     <BR>
  786.     ; 2 cycles<BR>
  787.     ; 3 cycles<BR>
  788.     ; 4 cycles<BR>
  789.     <FONT COLOR="RED">-- TOTAL 32 CYCLES -------------<BR> </FONT>
  790.     </TD>
  791. </TR>    
  792. <TR> <TD COLSPAN="4" CLASS="PARAG1">Pendant cette routine A est chargΘ avec $FF.
  793.     </TD></TR>
  794.  
  795. <TR> <TD COLSPAN="4" CLASS="PARAG1K"><FONT COLOR="#FFFF00"><B>ECRITURE D'UN $FF TERMINAL (enfin presque...)</B></FONT>
  796.     <BR><BR>
  797.     </TD>
  798. </TR>
  799. <TR>     <TD CLASS="PARAG1K">
  800.     <BR><BR><BR><BR><BR>
  801.     </TD>
  802.     <TD CLASS="PARAG1K">
  803.     STA $C08D,X<BR>
  804.     ORA $C08C,X<BR>
  805.     RTS<BR>
  806.     <BR>
  807.     LDA C08E,X<BR>
  808.     LDA C08C,X<BR>
  809.     RTS<BR>
  810.     </TD>
  811.     <TD CLASS="PARAG1K">
  812.     ; 5 cycles Chargement DATA REGISTER<BR>
  813.     ; 4 cycles Shift DATA REGISTER<BR>
  814.     ; 6 cycles<BR>
  815.     <BR>
  816.     ; ArrΩt de l'Θcriture<BR>
  817.     <FONT COLOR="RED">-- TOTAL 15 CYCLES !!! -------------<BR> </FONT>
  818.     </TD>
  819. </TR>    
  820. <TR> <TD COLSPAN="4" CLASS="PARAG1">Lα encore on constate que ce $FF n'est pas Θcrit en 32 cycles, 
  821.     mais cela n'a aucune importance car il n'est pas testΘ en relecture. Etonnant ce DOS 3.3 !?.
  822.     </TD></TR>
  823.  
  824.  
  825. <TR> <TD COLSPAN="4" height="10"></TD>  </tr>
  826. <TR><TD COLSPAN="4"  >
  827.     <HR color="BLUE"></td>
  828. </TR>
  829. <TR> 
  830.     <TD COLSPAN="4">  
  831.     <CENTER>
  832.     <A HREF="javascript:history.back()"> <IMG SRC="../THEMAS/DIVERS/JSBACK.PNG"></A> 
  833.     <A HREF="DISKIITECH.HTM" > <IMG SRC="../THEMAS/DIVERS/HOMESITE.PNG"></A>
  834.     </CENTER></TD>
  835. </TR>
  836. </TABLE></CENTER>
  837. </BODY>
  838. </HTML>
  839.