No 003   0€00.
Février 2002
Belg. : 83 FB - Suisse : 3,60 FS
Pluton nous contacter

...un nouveau Fanz' CPC

.....Le seul Fanzine qui compte sur vous.

TwoLiner    

Un peu d'histoire... (non, je ne vais pas vous parler de charlemagne)

    Le Deulignes*, c'était chaque semaine des petits programmes envoyés par les lecteurs d'hebdogiciel qui, en deux lignes de code devaient faire n'importe quoi pourvu que ce soit original, drôle, ... A la clé, un soft mais surtout voir son oeuvre publiée dans son canard préféré.

Le Deulignes, c'est quoi ??

    Un deulignes* est tout simplement un programme dont le code source tient en deux lignes de Basic. Une ligne de Basic ne dépasse pas 255 caractères, y compris le numéro et l'espace obligatoire qui le suit. Il vous reste donc au maximum 506 caractères pour donner libre cours à votre imagination débordante.

Les règles :

    C'est Pas Con reprend la tradition en organisant un concours permanent. Vos oeuvres doivent respecter la règle du deulignes et fonctionner avec tous CPC. Envoyez moi le deulignes dans un fichier .bas ou .dsk J'accepte aussi les listings dans un fichier txt. Et surtout le plus important, amusez vous bien, c'est le but !!!

(*) Attention à bien respecter l'orthographe ;)

A vos claviers !


Les DEULIGNES  :

 Tous les deulignes

Fichier .dsk

en fichier .dsk

Tous les deulignes

en fichier .bas

 

    Underlin (Madram) Dazzle (Jean Buchet)
Tronib (Zik) €uro (Yann) Raster (Plissken) Shade (Plissken)
Sinus (Plissken) OFE (ofe) Extend (Beb) Stars (Jean Buchet)
Trace (Beb) JO (Phenix) Spiral (Cloudstrife) Txtaff (Zik)
Msuv (Zik) Plasmegg (OVF) Worms (OVF) Pan (Downwater)
Reflex (Totoseb) Sinusite (OVF) Effet (jrm) Bobs-3d (CSKI)

 

 

25 Février 2002

 

10 Print"Underlin

20 Print"By Madram"

Fichier en .bas

10 MODE RND:PRINT"Yes":INK 0,4:BORDER 4:LOCATE 1,25:DIM s(384):FOR x=0 TO 127:y=(COS(x/128*PI)+1)*200:s(x)=y:s(255-x)=y:s(256+x)=y:MOVE x*4,-10,c%+1:DRAW x*3+y,x*1.55:CALL &BD19:INK c%+1,7:c%=(c%+1) MOD 3:INK c%+1,3:INK ((c%+1) MOD 3)+1,16:PRINT:NEXT:b=17


20 t=128:e=RND*6:f=0.5+RND*3:WHILE t:a=a+e-(a AND 256):b=b+f-(b AND 256):MOVE s(a)+112,-10,c%+1:DRAW s(b),198:DRAW s((b*2-26) AND 255),s(a)/2:CALL &BD19:INK c%+1,7:c%=(c%+1) MOD 3:INK c%+1,3:INK ((c%+1) MOD 3)+1,16:PRINT:t=t-1:WEND:GOTO 20


Explication :
Revisite d'un classique. L'accent a été mis
sur l'exécution immédiate du programme (de mon point de vue, le but du
jeu n'est pas de démontrer conjointement la lenteur du BASIC et la
puissance des astuces "Hard" ; bonjour à Overflow !).


 

18 Février 2002

 

10 Print"Dazzle

20 Print"By jean.buchet"

Fichier en .bas

 

 


 

10 Print"Tronib

20 Print"By Zik"

Fichier en .bas

 

10 DEFINT a-z:MODE 1:INK 0,3:INK 1,24:INK 2,6:INK 3,15:BORDER 3:GRAPHICS PEN 3:DRAW 638,0:DRAWR 0,398:DRAWR -638,0:DRAWR 0,-398:x=100:y=10:u=2:PLOT x,y,1:GRAPHICS PEN 2:TAG:FOR i=1 TO 100:MOVE RND*620+2,RND*370+26:PRINT"O";:NEXT:TAGOFF:GRAPHICS PEN 1

20g=INKEY(8)+1:d=INKEY(1)+1:h=INKEY(0)+1:b=INKEY(2)+1:i=(g<>d)+1:j=(h<>b)+1:u=(u*i+2*(d-g)*(g XOR d))*j:v=v*j*i+2*(h-b)*(h XOR b):PLOT x,y:s=s+1:x=x+u:y=y+v:IF TEST(x,y)<>0 THEN PRINT"Score :";s:CLEAR INPUT:END ELSE GOTO 20


Explication :
"J'étais sûr qu'on pouvait faire un test clavier un petit peu évolué dans un deuligne sans utiliser de IF... cela dit je suis pas sûr que la méthode soit la plus simple."

 

 

15 Février 2002

 

10 Print"€uro

20 Print"By Yann"

Fichier en .bas

 

10 input"francs/euros ou euros/francs (f/e): ";e$:if e$="f" then dev=1
20 input"montant a convertir: ";m:if dev=1 then print m/6.559;" euros" else print m*6.559;" francs"

 

 

 

 

 

14 Février 2002

 

10 Print"Raster"  

20 Print"By Plissken"

Fichier en .bas

10 MODE 2:PRINT"Faire un poke &38,&c3 quand vous arretez le programme":CALL &BB18:CLS:INK 0,0:INK 1,15:POKE &0,&FB:POKE &38,&C9:FOR i=1 TO 24:PRINT" PLISSKEN ET SES RASTERS EN BASIC! "+"-O-O-O-"+" PLISSKEN ET SES RASTERS EN BASIC! ":NEXT

20 OUT &7F00,0:OUT &7F00,&54:OUT &7F00,0:OUT &7F00,&44:OUT &7F00,0:OUT &7F00,&55:OUT &7F00,0:OUT &7F00,&54:OUT &7F00,1:OUT &7F00,&4C:OUT &7F00,1:OUT &7F00,&5C:FRAME:GOTO 20 


 

10 Print"Shade"  

20 Print"By Plissken"

Fichier en .bas

10 INK 0,0:BORDER 0:MODE 1:INK 1,3:INK 2,6:INK 3,15:FOR t=0 TO 12:PRINT"PLISSKEN"+" VOUS PRESENTE SON DEULIGNE.YEAH":NEXT t:FOR x=0 TO 515 STEP 2:t=x*PI/52:y=(t+SIN(PI*t))*15:a=TEST(x,y+1):a=a+1:PLOT x,y+1,a:a=TEST(x,y-1):a=a+1:PLOT x,y-1,a 

20 a=TEST(x,y+2):a=a+1:PLOT x,y+2,a:a=TEST(x,y+3):a=a+1:PLOT x,y+3,a:a=TEST(x,y+4):a=a+1:PLOT x,y+4,a:a=TEST(x,y-3):a=a+1:PLOT x,y-3,a:a=TEST(x,y-4):a=a+1:PLOT x,y-4,a:NEXT


 

10 Print"Sinus"  

20 Print"By Plissken"

Fichier en .bas

10 MODE 2:INK 0,0:INK 1,15:INK 2,3:INK 3,26:BORDER 0:p$=" PLISSKEN ":e$=" ":RESTORE 20:FOR i=2 TO 70:READ a:LOCATE i,a:PRINT p$:LOCATE i-1,a:PRINT e$:LOCATE i,a-1:PRINT e$:FRAME:NEXT:'Hey,fo bien remplir la ligne,y'a de la place,pour dire CPC!!!

20 DATA 24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,

23,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24:'recoucou!

 

 

 

13 Février 2002

 

10 Print"OFE"  

20 Print"By OFE"

Fichier en .bas

10 MODE 0:A=500:INK 0,0:INK 1,9:BORDER 0:LOCATE 1,21:PRINT"OOO FFF EEE":PRINT"O O F E":PRINT"O O FF EE":PRINT"O O F E":PRINT"OOO F EEE":FOR I=0 TO 25:PRINT:NEXT:INK 1,26:PRINT"IS BACK ON YOUR CPC":FOR I=0 TO A:NEXT:CLS:BORDER 26:BORDER 0

20 PRINT"THE":PRINT"BASIC":FOR I=0 TO A:NEXT:CLS:PRINT"IN YOUR":PRINT"FACE !":FOR I=0 TO A:NEXT:CLS:PRINT"WITH":PRINT"SOME":FOR I=0 TO A:NEXT:CLS:PRINT"COOL":PRINT"EFFECT":FOR I=0 TO A:NEXT:CLS:PRINT"BY OFE":PRINT"YEAH !!!":FOR I=0 TO A:NEXT:CLS:GOTO 20

 

 

12 Février 2002

 

10 Print"Extend"  

20 Print"By Beb"

Fichier en .bas

1 MODE 2:BORDER 0:INK 0,0:INK 1,0:FRAME:a=&BC00:b=&BD00:OUT a,1:OUT B,15:OUT a,2:OUT b,50:OUT a,7:OUT b,14:OUT a,6:OUT b,1:PRINT".please wait.":INK 1,26:FOR i=0 TO 2075:PRINT CHR$(207);:NEXT:c=&7F00:INK 0,26:OUT a,1:OUT b,50:OUT a,6:OUT b,36:POKE &38,&C9

2 FRAME:OUT c,1:OUT c,68:OUT c,85:OUT c,93:OUT c,77:OUT c,69:OUT c,76:OUT c,92:OUT c,88:OUT c,68:OUT c,68:OUT c,68:OUT c,86:OUT c,82:OUT c,67:OUT c,75:GOTO 2


 

10 Print"Stars"  

20 Print"By jean.buchet"

Fichier en .bas

10 on break gosub 20 : mode 0 : dim x%(100),y%(100):for i=1 to 100:x%(i)=rnd*640:y%(i)=rnd*400:pen (i*rnd) mod 16:plot x%(i),y%(i):next:clear:run

20:mode 2:ink 0,0:ink 1,27:paper 0:pen 1:list

 

 

 

09 Février 2002

 

10 Print"Trace"  

20 Print"By Beb"

Fichier en .bas

1 MODE 1:INK 0,1:INK 1,5:INK 2,14:INK 3,17:BORDER 1:DIM A(250),B(250),C(250):P=6:AM=30:FOR q=0 TO 200:FOR N=1 TO P:A(N)=RND*80/N:B(N)=RND*2*PI:C(N)=RND*15:NEXT:FOR X=0 TO 639 STEP 4:PLOT X,0,0:Y=10:K=2*PI*X/640:FOR N=1 TO P:Y=Y+A(N)*(1+SIN(N*K+B(N)))

2 DRAW X,Y,C(N):NEXT N,X:FOR N=1 TO P:A(N)=RND*80/N:B(N)=RND*2*PI:C(N)=RND*15:NEXT:FOR X=2 TO 639 STEP 4:PLOT X,0,0:Y=10:K=2*PI*X/640:FOR N=1 TO P:Y=Y+A(N)*(1+SIN(N*K+B(N))):DRAW X,Y,C(N):NEXT N,X:NEXT Q


10 Print"JO"  

20 Print"By Phenix"

Fichier en .bas

10 BORDER 0:MODE 0:FOR a=1 TO 150:ORIGIN 210,282:GRAPHICS PEN 10:PLOT 50*COS(a),50*SIN(a):ORIGIN 310,282:GRAPHICS PEN 5:PLOT 50*COS(a),50*SIN(a):ORIGIN 410,282:GRAPHICS PEN 3:PLOT 50*COS(a),50*SIN(a):ORIGIN 260,216:GRAPHICS PEN 12:PLOT 50*COS(a),50*SIN(a)

20 ORIGIN 360,216:GRAPHICS PEN 9:PLOT 50*COS(a),50*SIN(a):NEXT:LOCATE 4,3:PRINT"SALT LAKE CITY":LOCATE 7,17:PRINT"JO 2002":PAPER 6:WINDOW 8,9,20,25:CLS:PAPER 2:WINDOW 10,11,19,25:CLS:PAPER 3:WINDOW 12,13,21,25:CLS:FOR A=1 TO 999999:NEXT

 


Explication :
     Ce n'est  pas très compliqué. J'ai utilisé pour tracer les cercles (en mode 0) du point par point avec plot. La fonction Origin donne la  position du curseurs graphiques et graphics pen les couleurs des cercles (couleur officiel des JO ;). 

     Ensuite pour  le "podium", j'ai utilisé un window avec une couleur de papier suivit d'un petit cls. Et enfin un petite boucle pour ne pas voir apparaître le curseur dans la dernière fenêtre.

 

 

 

07 Février 2002

 

10 Print"spiral"  

20 Print"By cloudstrife"

Fichier en .bas

10 MODE 2:A=INT(RND*25)/10:PRINT A:X=320:Y=200
20 PLOT 320,200:FOR R=0 TO 200 STEP A:DRAW R*SIN(R)+X,R*COS(R)+Y:NEXT:END


Explication :
X et Y sont les coordonnée du centre de la figure
Changer A pour changer la figure desiré
(La elle est en Aléatoire de 0.1 à 2.5 et la valeur est afficher pour pouvoir refaire la figure si vous l'aimer ;)


 

10 Print"Txtaff"  

20 Print"By Zik"

Fichier en .bas

10 c$="...engilueD":MODE 2:TAG:DEG:DEFINT a-z:OUT &BC00,6:OUT &BD00,6:FOR i=1 TO LEN(c$):a$=MID$(c$,i,1)


20 FOR x=-7 TO 120-8*i:t=t XOR 1:y=SIN(3*x)*40+358:MOVE x,y+96*(t=0):PRINT a$;:OUT &BC00,13:OUT &BD00,-240*(t=0):MOVE x-1,z+96*(t=1):PRINT" ";:z=y:NEXT:MOVE x-1,y:PRINT a$;:NEXT:a$=INKEY$:WHILE a$="":a$=INKEY$:WEND:MODE 2:OUT &BC00,6:OUT &BD00,25


Explication :

TXTAFF  :
Affiche un texte de manière un peu originale.
Amusant à programmer, je suis assez content du résultat.
Pour ce deuligne j'ai utilisé des OUTs (j'avoue) mais je suis abstenu pour
les CALLs !


 

10 Print"Musv"  

20 Print"By Zik"

Fichier en .basMusv1.bas

10 ENV 1,2,2,1,4,-1,2:SOUND 1,239/(2^(x/12)),10,11,1
20 x=(x+4) MOD (29-4*((x MOD 4)<>0)):GOTO 10

 


 

Fichier en .basMusv2.bas

10 ENV 1,2,2,1,4,-1,2:SOUND 1,239/(2^((x+y)/12)),10,11,1
20 t=t+1 AND 7:x=(x+(t=0)) AND 3:y=(y+4) MOD 32:GOTO 10


Explication :

MUSV1 :
Joue un petit motif musical...
Je me suis dit qu'il n'y aurait sûrement pas beaucoup de programmes sonores,
alors, vu mon pseudo...


 

 

 

06 Février 2002

 

10 Print"Plasmegg"  

20 Print"By OVF"

Fichier en .bas

1 MODE 1:BORDER 0:FOR h=0 TO 319:FOR v=0 TO 55:x=(((318+h*10.95-v*2.65)MOD 320)-160)/160:y=(((v*10+h/4)MOD 512)/10-25.6)/25.6:a=((h MOD 32)-16)/16:b=(((v*10+h/4+32)MOD 512)/10-25.6)/25.6:PLOT h*2,399-v*2,5*SQR(x*x+y*y)+2*SQR(a*a+b*b):NEXT v,h


2 INK 0,0:INK 1,17:INK 2,8:INK 3,4:FOR x=&C200 TO &C7FF:FOR z=0 TO 7:POKE x+z*&800,PEEK(x-&200+z*&800):NEXT z,x:t=&BD00:OUT t-1,7:OUT t,35:OUT t-1,6:OUT t,35:OUT t-1,13:WHILE 1:FRAME:OUT t,o:o=(o+4)MOD 256:WEND

 

 

 

04 Février 2002

 

10 Print"PAN SUR ENVAHISSEURS DE L'ESPACE

20 Print"By Downwater"

Fichier en .bas

10 FOR A=0 TO &3FFF
20 POKE &C000,A AND 255:SOUND 128+7,(a AND 255) * 10:NEXT

 

 

 

03 Février 2002

 

10 Print"Worms"  

20 Print"By OVF"

Fichier en .bas

1 MODE 1:INK 0,0:INK 1,8:INK 2,17:INK 3,4:WINDOW 1,1,12,17:PRINT"WORMS":DEG:FOR z=0 TO 19:MOVE 10+z*32,287:DRAWR 0,112,3,0:FOR x=0 TO 6:FOR y=0 TO 55:t=TEST(x*2,239-(y+z*0.4)*2):PLOT 7+2*x+z*32+7*SIN(360*(y/32+z/16)),399-y*2,(1+x/6)*t,1-t:NEXT y,x,z


2 BORDER 0:OUT &BC00,7:OUT &BD00,35:OUT &BC00,6:OUT &BD00,35:FOR x=&C000 TO &C1FF:FOR y=1 TO 3:FOR z=0 TO 7:POKE x+y*&200+z*&800,PEEK(x+z*&800):NEXT z,y,x:WINDOW 1,40,1,25:OUT &BC00,13:CLEAR INPUT:WHILE INKEY$="":FRAME:o=(o+254) MOD 256:OUT &BD00,o:WEND

 

 

 

02 Février 2002

 

10 Print"Reflex"  

20 Print"By tototeseb"

Fichier en .bas

10 MODE 0:INK 3,26,0:PEN 1:PRINT"Reflex By Sebus":PRINT"press espace":FOR t=1 TO RND*999:IF INKEY(47)=0 THEN PEN 4:PRINT"Tricheur !":SOUND 3,800,90:CALL &BB09:CALL &BB06:RUN:ELSE SOUND 3,t/2,1:NEXT:x=RND*498+25:y=RND*310+25:t=TEST(x,y):PLOT x,y,13:t=TIME:

20 IF INKEY(47)=0 THEN temp=(TIME-t)/300:PEN 11:PRINT"Temps:";temp:CALL &BB09:CALL &BB06:RUN:ELSE IF (TIME-t)/300>10 THEN INK 13,26,0:PEN 12:PRINT"ICI bordel !":FOR t=1 TO 1000:SOUND 3,t,1:NEXT:RUN:ELSE GOTO 20

 

 


Explication :
Dès qu'un pixel blanc apparait, il fait presser "espace"... les "tricheurs" sont gérés et si on ne voit pas le point (!) il se montrera...

Ajoutez à ça un peu de son...c'est du allégé, mais ça fonctionne top !...


 

10 Print"sinusite"  

20 Print"By OVF"

Fichier en .bas

1 MODE 1:BORDER 0:INK 0,0:INK 1,24:INK 2,15:INK 3,6:LOCATE 1,10:PRINT"CPC":DEG:l=51:m=l*INT(256/l):FOR x=0 TO (m+48)*8:FOR y=0 TO 7:PLOT x*2 MOD 640,384-16*INT(x/320)+(56*COS(x*360/(m*8))+y*2+64) MOD 16,TEST(x*2 MOD l,240+y*2)*(3-INT(y/2.7)):NEXT y,x


2 FOR x=1 TO 9:READ y:OUT &BC00,x:OUT &BD00,y:NEXT:OUT &BC00,13:WHILE INKEY$="":x=(x+1) MOD m:FRAME:OUT &BD00,x*INT(l/16) MOD m:WEND:OUT &BD00,0:FOR x=1 TO 9:READ y:OUT &BC00,x:OUT &BD00,y:NEXT:DATA 48,50,13,8,24,1,5,0,31:DATA 40,46,14,38,0,25,30,0,7

 

 

 

01 Février 2002

 

10 Print"Effet de lignes"  

20 Print"By jrm45"

Fichier en .bas

5 mode 2:deg


10 i=i+5.3:j=j+3.2:plot 500*cos(i),400+500*sin(i):draw 640+700*cos(j),700*sin(j),1:goto 10



Explication :
Hop ! Voila le comment :)

1ere ligne :   hum ben je crois que c' est assez compréhensible comme ça :)

2eme ligne : Ben le principe est tout simple : On définit deux grand cercles dépassant de l' écran (ou le coupant, c' est ce qui est fait ici), ici n cercle de centre le coin
haut gauche de rayon 500 pixels et un autre de centre le coin heut droite de l' écran et de rayon 700 (centres et rayons ont été adoptés après quelques essais...)
ensuite, on définit un angle pour chaque cercle (les variables i et j), et on trace la droite entre les deux points du cercle définis par l'intersection du cercle avec la droite
faisant l' angle en question avec l' horizontale. Ensuite chaque angle est incrémenté d' une constante (ici 5.3 pour i et 3.2 pour j, toujours déterminés au pifometre...) et on
recommence...

Bientôt, peut être la fougère de Barnsley ou autre fractale assimilée... :)

 

 

 

31 Janvier 2002

 

10 Print"bobs-3d

20 Print"By CSKI"

Fichier en .bas

10 MODE 1:DEG:TAG:DEFINT a-z:DIM x(11,180),y(11,180):FOR a=1 to 11:READ px,py:FOR b=0 to 179:x(a,b)=(px*COS(b*2)-py*SIN(b*2))*18:y(a,b)=(py*COS(b*2)+ps*SIN(b*2))*COS(b*4)*18:NEXT b,a:WINDOW#3,1,8,1,8:WINDOW#2,1,8,9,16:k=&BC00:l=&BD00:w=2:c=51:d=64:v=214 


20 OUT k,6:OUT l,8:PAPER#2,0:FOR b=0 TO 179:FRAME:CLS#w:FOR a=1 TO 11:MOVE 54+x(a,b),v+y(a,b):PRINT"O";:NEXT:OUT k,12:OUT l,c XOR w:OUT k,13:OUT l,d:d=d XOR 64:w=w XOR 1:v=v XOR 384:NEXT:GOTO 20:DATA 0,0,-1,2,-2,2,1,2,2,2,0,-1,-2,-2,2,-2,-1,-3,0,-3,1,-3

 

Deulignes : Rotation de bobs en 3D, le pourquoi du comment. 

 


Explication :


La ligne 10 contient toutes les initialisations du programme : On efface l'écran, on définit les windows, etc. y(a,b) et x(a,b) sont précalculés, on aura enregistré 180 positions pour chacun des 11 points constituant notre petit smiley en bobs (dont les coordonnées de départ sont stockées à la fin de la ligne 20).

Pour information, voici la formule pour les rotations 3D :

Les deux lignes suivantes permettent de faire tourner l'image suivant l'axe des Z (celui qui sort perpendiculairement de l'écran). Pour les rotations suivant l'axe X, il faut remplacer les "x" de la formule par des "z", et les "angleZ" par des "angleX". Même chose pour la rotation suivant l'axe Y.
x'=x*cos(ngleZ) - y*sin(angleZ)
y'=y*cos(angleZ)+x*sin(angleZ)

Les matheux et les observateurs remarqueront deux choses : L'objet ne tourne que suivant deux axes, et on optimise furieusement grâce au fait que l'objet et plat, par conséquent toutes ses coordonnées Z sont à 0.

Note : Pourquoi utilise-t'on les windows 2 et 3 au lieu d'utiliser la 1 et la 2, par exemple ? Parce que le papier par défaut de la fenêtre 3 est de couleur zéro par défaut. On gagne donc une instruction "PAPER#3,0".

La ligne 20 du programme utilise à fond le principe de bascule : Comme le programme fonctionne par flipping (Je calcule une image, je l'affiche, pendant qu'elle apparait à l'écran j'en calcule une autre que je dessine une fois qu'elle est terminée, etc), on doit afficher en alternance 2 parties de la RAM vidéo, et on doit dessiner l'image à deux endroits de l'écran. Le principe de la bascule est simple : Plutôt que de faire deux routines, l'une affichant les images paire, et l'autre se chargeant des images impaires, on utilise des variables qui contiendront les paramètres qui nous intéressent. Par exemple, si on veux afficher un pixel alternativement en colonne 0 et en colonne 1, on utilisera une variable qui prendra alternativement ces deux valeurs. Pour passer facilement de l'une à l'autre, on utilise la fonction XOR qui est parfaite pour cela : Pour passer de la valeur A à la valeur B et vice versa, la valeur avec laquelles XORer notre variable est égale à A XOR B. Ainsi, si A XOR B = C et que la variable toto=A, alors toto XOR C nous donnera toto=B, si on réitère le calcul, toto XOR C nous redonne A ! La vie est belle.

Les outs qui se trouvent dans le programme sont très utiles : Le out &BC00,6:out &BD00,8 indique au CRTC qu'il devra afficher seulement 8 lignes de texte à l'écran. Attention, c'est de la programmation hard, le système considèrera qu'il a toujours à sa disposition un écran de 25 lignes ! Et on compte bien là-dessus. Les registres 12 et 13 du CRTC permettent de changer l'adresse de départ de l'écran. par exemple, si on envoie &3000 (respectivement &30 dans le reg 12, et &00 dans le reg 13), l'écran débute en &C000. Si on envoie &3001, l'écran débute en &c002, toutes les lignes de texte sont décalées d'un caractère vers la gauche ! Pour notre animation, comme on veut afficher une fois l'écran en &C000 et la portion d'écran qui se trouve huit lignes plus bas, on devra envoyer dans les registres 12 et 13 alternativement des &3000 et des &3000+8lignes*40 caractères, c'est à dire &3140, on devra envoyer alternativement les valeurs 49 et 50 dans le registre 12, et 0 et 64 dans le registre 13. Les variables C et d contiennent alternativement ces valeurs. En fait, c contient en permanence 49 xor 2, c'est pourquoi on envoie dans le registre 12 les valeurs c xor w. w, lui est une bascule. Pour quelle raison avoir fait cette pirouette ? Parce que Pour passer de 49 à 50 on doit faire un xor 1. Or w, qui passe de 2 à 3 a lui aussi besoin d'un xor 1 pour passer entre ses deux états. En utilisant que w comme bascule, on évite d'avoir à calculer c à chaque affichage (c=c xor 1).

A propos de l'instruction TAG : Cette dernière permet de positionner des caractères d'une manière plus fine qu'avec un simple locate. Grâce à TAG, on peut utiliser l'instruction MOVE plus placer les caractère au pixel près ! Attention, au moment du PRINT il faut toujours que la chaine se termine par un ";", sinon on verra apparaitre des caractères parasites à l'écran.