<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">
<meta name="TITLE" content="Apple II standard">
<meta name="OWNER" content="HACKZAPPLE.COM">
<meta name="SUBJECT" content="Collection Apple II">
; Etrange non un Y α 2 ? voir remarque NOTA 1 ci-dessous
<BR><BR>
; Prend l'octet α transformer<BR>
; Passe le bit 0 de l'octet de donnΘe en retenue(Carry)<BR>
; Passe le de C α NBUF2<BR>
; Passe le bit 1 de l'octet de donnΘe en retenue(Carry)<BR>
; Passe le de C α NBUF2<BR>
; Replace l'octet transformΘ de l'accumulateur en NBUF1<BR>
<BR><BR>
; On fait la boucle de X=0 α X=$55 compris<BR>
; RΘinitialise X<BR>
<BR>
; Voir la remarque en NOTA 1 ci-dessous<BR><BR>
; Routine pour forcer les bits 7 et 6 de NBUF2 α 0 <BR>
<BR>
; Masque binaire 0011.1111<BR>
<BR><BR>
; Pour faire aussi la valeur 0 de l'index...<BR>
<BR>
</TD>
</TR>
<TR> <TD COLSPAN="4" CLASS="PARAG1R">NOTA 1 : La boucle avec Y initialisΘ α 2 !</TD></TR>
<TR> <TD COLSPAN="4" CLASS="PARAG1K">
Ceci paraεt toujours bien Θtrange mais en examinant attentivement ce qui se passe on comprend mieux le pourquoi.
Nous avons vu que NBUF2 doit avoir la place pour 86 octets (plage de $00 α $55) de la forme 00xx.xxxx or
sachant que ce buffer contient 3 groupe de 2 bits par octets, cela signifie qu'il pourrait recevoir de quoi
coder 86 * 3 = 258 octets.
<BR><BR>
En initialisant Y α 2 nous ne faisons rien d'autre que de permettre d'avoir une boucle facile α contr⌠ler
par un classique test sur Y α 0 sans avoir une routine trΦs compliquΘe, et ce en traitant 258 octets
au lieu de 256, car 258 est un parfait multiple de 86 (3*86=258).
<BR><BR>
Sachant que la routine PRENIBB1 commence par un DEY, Y sera donc α 1 et la valeur prise dans BUF sera celle
de l'octet1, au passage suivant on va traiter l'octet 0 puis l'octet FF etc...
Quand X sera α $56 le programme va dΘrouler le test sur Y QUI NE SERA PAS A 0 au premier et
deuxiΦme passage (puisqu'il dΘcrΘmente de $FF vers $00). Par contre au troisiΦme passage Y sera α 0 et la
prΘnibbilization sera finie pour cette partie. C'est lors de ce troisiΦme passage que les octets n░1 et n░0
du buffer de donnΘes sont traitΘs (dans cet ordre) une seconde fois. Les bits 0 et 1 se retrouvent α une autre
position dans NBUF2 mais les bits 7 α 2 sont rΘΘcrits une seconde fois α la place dans NBUF1.
<BR><BR>
Notez bien que quand Y sera testΘ α 0 en bas de routine, le traitement de l'octet indexΘ 0 de NBUF
aura bien dΘjα ΘtΘ rΘalisΘ !
<BR><BR>
Le schΘma ci-dessus montre comment sont remplis les buffers.
<BR><BR>
<IMG SRC="PNIB1.PNG">
<BR><BR>
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 ?
<BR><BR>
</TD>
</TR>
<TR><TD CLASS="PARAG1K">
BUF&NBUF1<BR>
! <BR>
Y <BR>
(BUF),$01 <BR>
(BUF),$00 <BR>
(BUF),$FF <BR>
... <BR>
(BUF),$AC <BR>
<BR>
(BUF),$AB <BR>
(BUF),$AA <BR>
... <BR>
(BUF),$56 <BR>
<BR>
(BUF),$55 <BR>
(BUF),$54 <BR>
... <BR>
(BUF),$01 <BR>
(BUF),$00 <BR>
</TD>
<TD CLASS="PARAG1K">
NBUF2<BR>
!<BR>
X<BR>
$00<BR>
$01<BR>
$02<BR>
...<BR>
($55<BR>
<BR>
$00<BR>
$01<BR>
...<BR>
$55<BR>
<BR>
$00<BR>
$01<BR>
...<BR>
$54<BR>
$55<BR></TD>
<TD COLSPAN="2" CLASS="PARAG1K">
<BR><BR><BR>
<== 1ere boucle de 86 octets<BR>
<BR><BR><BR><BR><BR>
<== 2nde boucle de 86 octets<BR>
<BR><BR><BR><BR>
<== 3eme boucle de 86 octets<BR>
</TD>
</TR>
<TR> <TD COLSPAN="4" CLASS="PARAG1K">
<BR><BR>
<IMG SRC="PNIB1A.PNG">
<BR><BR>
Pour vous convaincre de la rΘalitΘ de cette dispositon, vous pouvez toujours Θcrire un petit programme qui lance
routine de prΘnibbilization d'un buffer de donnΘes que vous aurez prΘalablement initialisΘ avec vos donnΘes.
Ainsi vous allez sous le moniteur (CALL-151) et pouvez par exemple :<BR><BR>
Videz la page $1000 α $10FF <BR>
* 1000:0<BR>
* 1001<1000.1100M<BR><BR>
Entrez les donnΘes α nibbilizer en $1000<BR>
* 1000: FD FE<BR><BR>
Tapez en $2000 (c'est un exemple d'adresse) le code du programme de test <BR>