Home
Le Livre du 64 - Benoit MICHEL Home page
Contents
1. 1 2 19287 19288 REM SAISIE DU JOYSTICK PORT IL 19290 DIR PEEK 56320 19298 REM TEST SI TIR 19300 1 IF DIR 111 THEN 19460 19308 REM QUE LES POSITIONS SANS TIR 1932 1 DIR DIR 117 IF DIR lt O THEN 19290 19318 REM CALCULE LES NOUVELLES COORDONNEES 19320 EID SPP PX T DIE 13339 YA XD SP 19338 REM LIMITE LE DEPLACEMENT A LA GRILLE 19340 IF XA lt 42 THEN 42 19350 IF gt 78 THEN XA 78 19360 IF lt 216 THEN YA 216 103771 IF YAD244 THEN 244 19378 REM APPEL DEPLACEMENT JOYSTICK ET FIN DE BOUCLE EE GOSUB 12214 GOTO 19290 19398 REM ENTREE POIGNEES 194 7 GOSUB 1810 19408 REM CALCUL DES COORDONEES 19410 XA INT 204542 19120 1 1 25 4 216 19428 REM APPEL DEPLACEMENT POIGNEES 19430 GOSUB 12510 19438 REM TEST SI TIR ET BOUCLAGE POIGNEES 19440 IF 56321 lt 255 THEN 19460 19450 6 GOTO 19400 19458 REM TEST SI SORTIE A DROITE i IF XA 78 THEN XA 88 YA 226 19500 19468 REM TEST SI SORTIE A GAUCHE 19470 IF XA 42 THEN XA 40 YA 226 GOTO 19500 LE LIVRE DU 64 275 LE LIVRE DU 64 276 19477 19478 REM APPEL PROGRAMMATION MEMOIRE 119 GOSUB 19814 19488 REM BOUCIA SOUS ROUTINE 19490 GOTO 19250 19497 19498 REM TEST SI POIGN ES EC IF PL l THEN 19540 19508 REM To DEPLACEMENT 2 19510 FOR I 0 T 19520 EX PxA 2 PYSINT PY 1 amp 2 19540 RETURN 19600 REMA ke eee RAR dede dede dee ARR RARE
2. LE LIVRE DU 64 LES GRAPHIQUES MULTI MODES Les diff rents modes graphiques du CBM 64 affectent normalement tout l cran Il existe cependant une possibilit d avoir plusieurs modes diff rents pr sents simultan ment La cl de ce secret s appelle interruption de balayage en anglais RASTER INTERRUPT Le contr leur d cran VIC II ne peut g n rer des images que conform ment un seul mode la fois Or l affichage d une image n est pas instantan Une ligne s crit en 64 microsecondes Il suffit donc de changer la programmation du VIC II La fin d une ligne pour obtenir deux modes diff rents simultan s un au dessus et l autre en dessous de la ligne o passe cette commutation Dn obtient ainsi un cran partag en anglais SPLIT SCREEN Le balayage de l cran s effectue 50 fois par seconde et chaque fois le VIC II g n re 270 lignes horizontales superpos es dont 200 forment la partie utile de l cran Le num ro de la ligne de balayage peut donc se coder sur 9 bits accessibles dans deux registres du VIC II bits 0 7 registre 53266 D012 bit 8 registre 53265 0011 bit 7 On peut les lire ainsi 10 PEEK 53265 AND 128 PEEK 53266 20 GOTG 10 On constate que ces nombrent varient sans cesse mais le BASIC est bien trop lent pour suivre un tel ph nom ne qui se modifie plus de 10 000 fois par seconde Seul un programme en langage machine est assez rapide pour cela Un programm
3. 6 1 2100 VIDEO XX REM POS N X 205 LE LIVRE DU 64 2200 POKE VIDEO 1 YY REM POS EN Y 2990 RETURN 2999 dekik kikiki kikk 3000 REM SPRITEO INVISIBLE 3990 POKEVIDEO 21 0 RETURN 3999 Fieke kekeke ek dokekokekekekdodelekekediekekdeieiekedek 4000 REM SPRITEO CRAYON ET POINTE 4010 POKE 2040 13 REM ADRESSE SPRITEO 4990 POKE VIDEO 21 1 RETURN REM SPRITE VISIBLE 4999 A kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk k 5000 REM SPRITEO CRAYON SANS POINTE 5010 POKE2040 14 REM ADRESSE SPRITEO 5990 21 L RETURN REM SPRITE VISIBLE EE 6000 SPRITEO GOMME 6010 POKE2040 15 REM ADRESSE SPRITEO 6990 POKEVIDEO H21 1 RETURN REM SPRITE VISIBLE 6999 7000 ECRIT 7010 ee EE CH 1 2 4 00 8 NUM DU 7020 POKECU AC CHORCL 7900 Ricci 8000 REM EFFACE 8010 U X 23 V X 2 T CH U X V 0 4 V 1 REM CH 1 2 4 00 8 NUM DU CARRE 8020 IFCLANDCHTHENPOKE CU A CLAND 15 CH 8900 RETURN 8999 ek dree 10000 DATAO 0 0 0 0 0 0 0 0 22 0 0 22 10010 DATA128 0 26 160 0 42 168 0 10 170 10020 DATAO 2 170 128 0 170 160 0 42 10030 DATA168 0 10 168 0 2 168 0 0 160 10040 DATAO 0 0 0 0 0 0 b O 0 0 0 0 0 0 10050 DATAO 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10060 DATAO 42 0 0 42 128 0 42 160 0 42 10070 DATA168 0 10 170 0 2 170 128 0 170
4. HO OmnoOoomoooooooecitmmo QR cO Q ROLO O Oc 8828899548898 88 SRZSERTZESZZAROS Kc Or OCIO ga c 45209383283448 EE A AONAN D Fo CQ O 84535459 838285358 agdoegomuaeogunogseodgrugounioodo doxo MONO E cA ea fa e RISO OS AO t NO 00 ri f CI SO C IOS O OA et ON ON CLOS ri O eL OS ri ON et eie EN EN OY esr ruin ADO PSS 000v BBBSBBBBSSBSSSBBSSBS 09A M 0409 A M 0459 E M 0469 B M 0 71 0 9 6 243 LE LIVRE DU 64 4 0 00 Oo ooOOnggooOoOoOOOomnoomnogmogooooo oooOodgQmm bi HOONNONONMOATOLOONNOSTS Len 305828ZZ8589 89 253893298889 2S88HP 8ERSSSSSSESSSSSIEDBERSESSBSSULSSTSSSRSOSSSASZSSERSSSSS fM pnmo 90 iu Oo Qo QO Q O E La O soo QQA OO Ek CC CHE DE CO CH NDOOO 1610 e EXSHQSEDSSHESZSSSEERSOSSSSSOSQOSSSSSSSISESSS amp 8SSSSSERRSSSRERSQOSOSSSESRSSORSESSSg C QoloOOQOdOo Om c epi tiu ii Q 409 un OO lt M lt lt lt OUYOO0 lt lt Q 0000 a iO Ci Q O O Q incor qO O cs GREEN DUO O oom CO oa sr ch 6 00 000000 A ON ON co O VO CHEN o cud aou 58 9 558595958 5 5 3555880865 5985 ZG E Ce E MNNOO lt O Q O Q cu oo lt oo UY UY Im O O O MO E 3 O OO O O e O O i r OOO f Q O fe 00 Q O Co O SO O OI e Q 00 a 40 DO LOC SS OM
5. 48 200 DA PE RENE D INT D DA 16 R DA D 1 6 220 Ou D D H8 ORMS RETURN 290 GOSUB 100 300 IF NO OR N gt 22 THEN 290 310 V H N IF V 1 THEN 290 00 OC F R I 0 TO 3 420 V LNT AL 16 9 I Ee 4 1 16 430 OC OC D V 9448 PRINT CS RETURN 999 REM 1000 AFFICHAGE SAISIE kk 1000 DATA 0 1 2 3 4 5 6 7 8 9 17 18 19 20 21 22 1010 DATA 0 1 2 3 4 5 6 7 8 9 3 21 5 1 215 21 21 10 11 12 13 14 15 1020 DIM n 15 8 Q2 V 3 1030 FOR 1 0 TO 15 READ D NEXT I 1040 FOR mo IR 22 READ H I 1050 PRINT 119 e M FOR 12 0103 GOSUB100 GOSUB 300 1060 DD DD Ge 3 1 1110 1 7 1120 FOR AD AL TO FF GOSUB 200 PRINT OC 1130 RINT C GAUCHE C TE an caucar 1140 F Hd 2 1 1 HE 1150 IF I 2THEN PRINT 001011 1155 GOSUB100 1160 IF E THEN IF I OTHEN IF ADDAL THEN AD AD 2 PRINI C GAUCHE C G C GAUCHE a QUCHE C GAUCHE C GAUCHE 60701210 1170 AD F 01210 1180 GOSUB 300 V I N 1190 NEXT I POKE AD DA 1210 NEXT AD AL AL 1220 PRINT PRINT 60508400 GOTO1110 1998 REM 2000 5 SOMME DE VERIF DU MONITEUR 2000 J 2 1 N 0 AD 2049 REM DEBUT DU MONITEUR MON 2010 FOR K AD T04586 REM FIN DU MONITEUR MON 2 247 LE LIVRE DU 64 2020 J J 1 N N PEEK IFJQ 5560702060 2050 GOSUB2100 AD AD425 6 J 1 N 0 2060 NEX NEX K IF JO255THEN GOSUB 2100 2100 PRINI SOMME BIOC ui g
6. 53276 AND 255 2 N REM MONOCHROME 1190 POKE53287 N CL COULE 1200 PET 53264 AND255 2 N OR 2 N X2255 REM COORD X 9EME 255 LE LIVRE DU 64 1210 POKE53248 2 N XAND255 REM COORD X 8 BITS 1220 53249 2 N Y REM COORD Y 1230 POKE2040HN BL REM POINTEUR DU NL 1240 23269 PEEK 53269 JOR 2 N REM AUTORISE LUTIN N 2000 REM DESSINNE LE 2130 FOR I 0TO20 READ A POR K OTO2 1 0 FOR J 0707 B 0 2131 IF MIDS AS JAK 8 1 1 Q THEN B 1 NEXT J E T NEXTK I 2135 9 2999 RETURN 10010 DATA 10020 DATA 0009 10030 DATA 990000 10040 DATA 00000 10050 DATA 00 10060 DATA Q Qod QQ 10080 DATA Qu 10090 DATA An E 7 10110 DATA 0990 EE d 10120 DATA s 440 10130 DATA do 0000400 10140 DATA Q 000000 10150 DATA 996000 10160 DATA 009 0170 DATA ee 10180 DATA dod EE 55555 SAVE G0 LUTIN 8 READY MELODIE M lodie param trable o les volumes ADSR formes d onde largeurs d impulsion sont modifiables volont ce qui permet de juger de l effet de chacun de ces param tres 236 10 MELODIE 20 5 54272 GOSUB1000 30 VL 1 5 INPUT VOLUME 0 15 40 AR 16 1NPUT FORME D pk der 32 64 80 96 128 An R DESARHL 50 IF AR AND64 64THENPH 8 INPU T dee N 0 15 60 3 INPUT TEMPO EN 1 32 DE SECONDES T EUN 65 AA 8 DD 6 SS 1 2 RR 6 70 INPUT A D S R 4 VALEURS ENTRE
7. x zee MODE HAUTE RESOLUTION MULTICOLORE RAM N COULEUR N COULEUR POINTS 1 COULEUR DE FOND e o cm r coo N ECRAN AN N RULTICOLDRE 1 1 me 1 1 0 107 LE LIVRE DU 64 Le choix de la couleur de chaque point est cependant limit En effet les informations de couleur sont contenues dans la m moire RAM Couleur et dans la m moire POINTEURS deux zones longues de 1000 octets sera donc limit choisir les couleurs globalement pour une zone de 8 x 8 Pixels la zone couverte par un caract re en mode normal MODES CARACTERES ETENDUS En sacrificiant le nombre de caract res possibles l cran qui passe de 256 64 on r cup re 2 bits par octet de la RAM PQINTEURS que l on peut affecter au choix de la couleur de fond de ce caract re C est de loin le mode le plus simple utiliser pour obtenir des r sultats spectaculaires sans sacrifier la vitesse d ex cution du programme sa qualit comme en mode BITMAP Voir le programme SVP MODES MULTICOLORES En sacrifiant encore davantage la r solution qui est alors r duite de moiti en horizontal on dispose d une palette de couleurs deux fois plus tendue COMMENT PROGRAMMER L ADRESSE DE L ECRAN ET DU GENERATEUR DE CARACTERES Le choix des adresses possibles pour ces deux zones de m moire est fort vaste Cependant peu sont vraiment utili
8. HOME THEN 40 25 CURSEUR HOME 130 IF d 029295 70 REM EFFACE ECRAN 140 IF THEN X X 1 REM CURSEUR A GAUCHE 150 IF A 4 DROPTE THEN XXH REN CURSEUR DROITE 160 IF AS C EU THEN E Y Y 1 REM CURSEUR EN HAUT 170 IF A EE Ce HEN Y REM CURSEUR EN BAS 180 IF AS CHR S 133 THEN 1 REM Fl SORT LA PLUME 185 IF A 134 THEN BIC 2 5 RENTEN LA PLUME 187 AS CHRS 135 THEN BIC 3 BEN F 188 136 BIC 0 RIEN DU TOUT IF A 200 IF X XMAX THEN 1 210 IF X40 THEN X 0 220 IF Y YMAX THEN 1 230 IF lt 0 THEN Y 0 245 S INT X 2 T INT Y 2 250 CUZHOME XMAX 2 TH5 CL AA PEEK CU 260 GOSUB 2000 360 IF AS GOTO 100 370 ON BIC 1 GOSUB 3000 4000 5000 6000 380 IF BIC l THEN GOSUB 7000 REM ECRIT 390 IF BIC 3 THEN GOSUB 8000 REM EFFACE 990 GOTO 100 999 HR HR HR 1000 REM CONFIGURE SPRITES 13 14 15 1020 VIDEO 53248 1030 832 1130 FORH 832T01022 READA POKEH A NEXTH 1140 POKEVIDEO429 L REN EXPANS HOR IZ 1150 POKEVIDEO423 1 EXPANS VERTIC 1160 POKEVIDEO 8 1 REM MULTICOLORE 1170 POKEVIDEO 37 O REM COULEUR l NOIR 1180 POKEVIDEO 38 4 REM COULEUR 2 MAUVE 1190 POKEVIDEO 39 1 SPRITE BLANC 1999 kkkkkk kkkkkkkkkkkkkkkkkkkkkkkkkkk 2000 REM POSITIONNE LE SPRITE 0 2010 XA XX XX 21 X 4 2020 YA YY YY 45 Y 4 2030 EE 0 2100 2040 25 6
9. A JOUR X Y U V 400 XSCHOC Y Y YY 420 IFXXOTHENX 0 U U 1 IFUXOTHENU 0 430 IFYCOTHENY 0 V N 1 IFV THENV O 450 99 U U H LFUDSOTHENU 39 450 IFY 2ATHENY 2 4 V 4 1 IFV 91 STHENV 5 599 GOTO 10 REM kkkkk4kkkkkkk kk FIN DE BOUCLE PRINCIPALE 720 V I l IFV2lSTHENV 15 REM SCROLL EN BAS 721 Y Y 1 IF YCOTHENY 0 729 GOTO 10 730 U U l IFUXOTHENU 0 REM SCROLL A DROITE 731 X X 1 IFX239THENX 39 739 GOTO 10 740 V J 1 IFVXOTHENVsO REM SCROLL EN HAUT 741 Y Y 1 IFY22 24 749 GOTO 10 750 U U L IFUD3OTHENU 39 REM SCROLL A GAUCHE 751 X X 1 IFX THENX 0 759 GOTO 10 760 PRINT CLR EFFACEMENT C BAS C BAS SUR 0 N INPUTAS IFA 0 THEN 999 01010 1000 REM R EREE INIT TEXTE amp MEMOIRE EN 7000 1010 POKES 5 0 56 98 1030 DIM 39 B 1255 HS 255 0 28512 1050 FORI 11039 280 1080 53280 15 Pes 328 6 PRINT oa JAUNE XX 1 YY 0 1100 POKE649 2 POKE650 255 REM TOUCHES REPETITI 1200 5 0 RORI 2892870289 8983 READA POKEI A E e NEXTI 1210 PRINT IFCSC 7643THENSTOP 1220 FORT 391907029971 READA POKET A CS CS4A NEXT 1225 PRINT 4 IFCS lt gt 1 107 THENSTOP 1230 PRINT SUM POKE 53272 1240 2900 MR NN PEEK 46 REM AD FIN PRG 1255 PRINP C Bas 1 5 BAS C BAS C BAS 1260 PRINT IMAGES C BAS C BAS C BAS 1400 FORI 1TO20 READF EE NOI 1410 FORI 64T09
10. Appel par JSR RESTOR FF8D VECTOR FF90 SETMSG FF93 SECOND LE LIVRE DU 64 Cette routine tablit ou lit les vecteurs du KERNAL Si le flag C CARRY vaut 1 en entr e les vecteurs les 32 octets situ s en 0514 et suivants sont lus 0514 et en m moire l adresse qui tait contenue dans les registres X et Y en entr e partie basse dans X partie haute dans Y Si en entr e le flag C CARRY vaut 0 la table de 32 octets dont l adresse est fournie dans les registres X et Y partie basse partie haute est recopi e en 0514 A utiliser pour modifier un ou plusieurs vecteurs simultan ment Il faut tout d abord lire la table la copier dans une zone provisoire la modifier puis la r crire sa place l aide de cette routine Ceci pour viter des erreurs dues aux routines d interruptions qui se servent de ces vecteurs Mettre les vecteurs en 2000 LDX 00 PARTIE BASSE LDY 20 PARTIE HAUTE SEC JSR VECTOR Etablir les vecteurs partir de la table en 3000 LDX 00 LDY 30 CLC JSR VECTOR Cette routine contr le l impression des messages du KERNAL Elle tablit le type de messages qui doivent tre envoy l cran en fonction des circonstances mode direct ou mode RUN Elle utilise l accumulateur en entr e Le bit 6 1 signifie que l on doit utiliser les messages de la table en FO0BD Si le bit 7 vaut 1 on doit utiliser les messages de la table e
11. bas haut depuis l octet 1 inclus jusqu au dernier octet du tableau inclus Octet 5 Nombre d indices 1 255 du tableau Octets 6 et 7 Valeur maximale du premier indice Noter que l l ment 0 est utilisable L indice va rie donc de 0 inclus la valeur stock e dans ces deux octets inclue Cette valeur est sous la forme bas haut Octets B 5 2N Valeur limite des indices suivants si N est sup rieur l Octets 6 2N fin El ments du tableau rang s dans l ordre croissant des indices 0 0 0 1 0 0 2 0 0 0 1 0 ETC Les l ments d un tableau ont une longueur diff rente sui vant le type de variable Pour les nombres flottants 5 octets pour les entiers 2 octets pour les cha nes 3 octets Format d un l ment de tableau Flottant Octet octet Voir la d finition haut MSB 5 1 58 des nombres flot tants ci dessus 32 LE LIVRE DU CBM 64 Entier Le bit 7 du premier octet repr sente le signe Cha ne Longueur Adresse cha ne de la cha ne bas haut Pour rendre plus clair l emploi de 1 zone tableaux il est ici aussi possible d utiliser le programme LISTVARIABLES annexe Notez bien que toutes les variables utilis es dans LISTVARIABLES doivent tre d clar es avant d entrer dans le prog ramme sinon les pointeurs des diff rentes zones se modifient sans cesse Maintenant que la structure des variables est connue
12. 19601 REM SOUS ROUTINE PROG GRILLE 19602 19604 VARIABLES EMPLOYEES DANS LA SOUS ROUTINE 19605 7 COORDONNEES DANS LA GRILLE 19606 REM PK POSITION DU CARACTERE DANS LA GRILLE 19607 REM OG ADRESSE DE L ORIGINE DE LA GRILLE 51019 19608 REM PU DONNE LA VALEUR DES DEUX BITS DANS UN 19609 REM OCTET DE LA RAM CARACTERE CORRESPONDANTS 19610 REM A UN CARACTERE DANS LA GR LLE 19611 REM EXEMPLE 00 0000 48 19612 D1 D2 ADRESSE DES DEUX OCTETS CONCERNES DANS LA RAM CARACTER 12017 REM 1 2 VALEUR DES DEUX BITS CONCERNES DANS 19614 REM CHAQUE OCTETS DU CARACTERE GRACE A PU 19615 REM BI 15 TABLEAU PERMETTANT LA CONVERSION DES 19616 REM BITS SELECTONNES EN UN CARACTERE QUART 19612 REM DE MAILLE 19619 REM DEBUT DE LA BOUCLE DE PROGRAMMATION SE FOR 0 3 FOR J 0 TO 3 19623 REM POSITION DU CARACTERE 10050 PK 0G HI 40 XT 19627 REM CALCUL POUR ISOLER PAR lt AND gt LES 2 BITS CONCERNES 12539 PU 3 2 6 2 1 19637 REM RECHERCHE DES DEUX OCTETS 19638 REM CONCERNES DANS LA RAM CARACTERE 19640 D1 PEEK CA 8 CP J32 13020 D2 PEEK CA 8 CP J 2 L 19657 REM ISOLE LES DEUX BITS DANS 19658 REM CHAQUE OCTET ET CALCULE BI N 19660 El D1 AND PU U 12670 E E2 D2 AND PU M 3 PU 4 19678 REM POKE LE CARACTERE DANS LA GRILLE 19680 POKE PK BI EL 2 19688 REM DE LA BOUCLE DE PROGRAMMATION 19690 NEXT J RETURN 19800 SE LR RR 19801 REM
13. 2 Clavier avec SHIFT ECO3 Clavier avec LOGO Cz EC78 Clavier avec CTRL Table de d codage du clavier normal 64 octets 1 octet de valeur FF signifiant fin de table Chaque octet repr sente le code ASCII de la touche correspondante de la matrice d interrupteurs dont est form le clavier FF dans la table signifie que la touche correspondante ne doit g n rer aucun code ASCII Idem pour le clavier avec SHIFT Idem pour le clavier avec LOGO Cz Idem pour le clavier avec CTRL Portion de la routine IRQ qui g re les codes ASCII sp ciaux tels que 8 9 14 et 142 Table des 47 valeurs par d faut utilis es lors de la programmation initiale du VIC II La table est en fait trop courte d un octet et c est le L du mot LOAD voir ci dessous qui sert de pointeur de couleur pour le lutin num ro 7 ce qui le programme en gris clair Erreur b nigne mais erreur tout de m me de la part de COMMODORE 77 LE LIVRE DU 64 ECE7 ECFO JSR JSR JSR JSR JSR JSR 78 EDO9 EDOC 40 EDB9 EDC7 EDDD Message LOAD lt RETURND RUN lt RETURND gt Ce message se mettra d office dans le tampon de clavier l enfoncement de le touche STOP RUN simultan ment avec SHIFT Une bonne fa on de modifier ceci est d crire un autre message plus court que le tampon de clavier n importe en m moire RAM et le KERNAL aura t recopi en RAM de modifier le pointeur ve
14. 2 REM INITIALISATION DES VARIABLES 23 POKE 1022 45 POKE 1023 46 FL 1 24 PG 0 1 0 J 0 K 0 L CC 1 1 F0 DE 1 9 CP 46 25 Bl 0 REM CHOIX BANK 3 26 50176 1 16 REM ECRAN 50176 27 C0 55296 REM COULEUR EN 55296 28 49152 1 O REM CARACT EN 49152 9 DIMAS B VIC 53248 06 51 301 DIMX 5 XD 5 YA 5 TOR Zeg 10 15 2 159 OM Aj Zug L De VERT L d URPRE 3 VERT R L L Cu L ERE d OIR Dette VERT Bel DA E 35 AS G vi BU ERI je Sg ds IU LIE 1 Si VER I el PE ig T L V RT L TOUS rk ei Le pite vns 36 Aer BIANC RT L D L VERT L POURPRE L VERT L ew d L dui mls SUI AN SS L BLEU B D 37 45 G re L Wen Tuis L BLEU il BLEU JH VERT L I VERT L B et 1 Ti BLEU L VERT L BLE KS 112 Jat B E 38 id S VERT L P VERTI L BLEU JQ VERT L BLEU R V R JS VERT M GE 39 Gr Da U VERT LI Bm RT L VON VERT L BLEU X VE BLEU VERT L B ELE L BLEU VERT L BLEU Pr UJ VERT L d n di TL 17 eeh xd rtc ici pm 4l A L BLEU 2 L WC T VERT n SIVERT LL BL vex LI EI WIER 38 TVERT dE 42 AS 8 VER VERT L R UGE 1 VERT L RT L AR Au T L 43 AG SE VERT L Wees VERT L ROUGE 6 VERT L Kiss ROUGE 8 VERT L paap VERT L ROUGE 1 1 OUGE ji L
15. 221 LE LIVRE DU 64 29 PRINT EIN qup cayos 60 RS 1288832 GE f 7 X6 GOTO 1000 Q0 NEXT I 102 109 RCI 1000 PRINT A C8 L CO TO 199 1010 PRINT 4 CHR Z L AND CA ICB 1020 Z L Ly cheek GES FRINT 4 040 IF RC 1050 CLOSE 4 END 1051 2000 REM LECTURE D UN OCTET DU BITMAP J I LIGNE K 2040 65 320 7 8 2050 2224 RETURN 999 3000 REN LECTURE D UN OCTET DU CARACTERE J I LIGNE K DANS LE GENERATEU 3040 MI PEEK ECH 440 x REM CODE ECRAN DU CARACTERE 3050 4 1 84 OCTET DU GENERATEUR 3998 RETURN 4000 REM LECTURE D UN OCTET DU CARACTERE J I LIGNE 4040 PEEK EC I 40 XJ 63 REM CODE DU CARACTERE SUR 6 BITS 4050 M PEEK GB4M1 CBHK REM OCTET DU GENERATEUR 4998 RETURN 55554 END 55555 SAVE 00 IMPRIME HR 8 READY INIMEM Redescend le bas de m moire en 16584 pour prot ger du BASIC le banc m moire 1 du VIC II aux fins d utilisations graphiques Il reste 20K de libre pour le BASIC A utiliser entre autres avant de lancer PETITMON qui permet de charger le programme MON en m moire basse 19 REM INITIALISE BAS DE BASIC 30 POKE 16384 0 POKE43 1 POKE 44 64 60 NEW 55555 SAVE C0 INIMEM 8 READY ITALIQUES Recopie 64 caract res de ROM en RAM et modifie ensuite ces caract res de normal en italique en multipliant par 2 pour les d caler vers la droite les octets de la moiti inf rieure
16. 24 1580 IF YA lt 50 THEN YA 50 1590 IF gt 336 THEN XA 336 1600 IF gt 242 THEN YA 242 1608 APPEL DEPLACEMENT JOYSTICK FIN DE BOUCLE PEL GOSUB 12214 GOTO 1520 1626 REM DEBUT DE LA BOUCLE POIGNEES 1628 REM APPEL ENTR E PADDLES 1630 GOSUB 1810 1637 1638 REM CALCUL POSTITON LUTIN 1640 XA INT 5 8 24 1650 YA INT P 8 8 50 1628 REM TEST SI TIR 1660 IF 56321 lt 255 THEN 1690 1668 REM APPEL DEPLACEMENT PADDLES ET FIN DE BOUCLE 1070 GOSUB 12510 1630 1688 CALCUL POSITION CARACTERE 1690 SE 8 1700 50 8 1710 RET URN 1800 REMK amp kkkkkkkkkkkkkkkkkkkkikikikih 1801 REM SOUS ROUTINE ENTREE POIGNEES Mike 1804 REM VARIABLES EMPLOYEES DANS LA SOUS ROUTINE 1802 s XP YP VALEURS DES PADDLES DU PORT I 1808 REM LECIURE POIGNEE X PORT 1 1810 SYS 679 744 1818 REM TEST DES LIMITES DE LECTURE 1820 IF lt 25 THEN 25 LE LIVRE DU 64 267 LE LIVRE DU 64 268 1830 IF XP gt 224 THEN XP 224 1838 VALEUR DE XP ENTRE 0 ET 199 1840 XP XP 25 7 1848 LECTURE POIGNEE Y PORT 1 1552 SYS 679 746 1858 REM TEST DES LIMITES DE LECTURE 1860 IF YPQ25 THEN YP 25 1870 IF YP 224 THEN YP 224 1878 REM VALEUR DE YP ENTRE O ET 199 1880 YP YP 25 0 RETURN 2000 REMX KKKKKKKRKARARAARARRRRRERERERE 2001 REM DEBUT DU PROGRAMME PRINCIPAL 2002 2004 REM
17. 0285 645 0286 646 180 DESCRIPTION Pointeur vers le nom du fichier en cours Octet en cours d criture sur cassette Aussi parit mission RS 232 Compteur de phases pour criture cassette Octet en cours de lecture sur cassette Drapeau moteur cassette en marche Adresse de la zone p riph riques Pointeur utilitaire pour le KERNAL Derni re touche enfonc e sans d codage Nombre de caract res dans tampon clavier Drapeau 0l criture invers e 0 0 1 Pointeur de fin de ligne pour INPUT Position X Y du curseur avant INPUT Drapeau criture avec SHIFT Drapeau 00zcurseur clignotant Compteur clignotement curseur Caract re sous le curseur Drapeau curseur invers normal Drapeau INPUT ou GET Pointeur de ligne cran en cours Position du curseur dans la ligne Drapeau 00 Mode quote Longueur ligne cran en cours 40 80 Num ro de ligne de 40 c sous le curseur Somme de v rification pour cassette Nombre de caract INSERT remplir Table des poids forts des adresses de lignes de l cran Pointeur fin de derni re ligne cran l Pointeur vers curseur dans la RAM couleur Vecteur de d codage clavier Pointeur tampon d entr e RS 232 Pointeur tampon de sortie RS 232 ESPACE LIBRE EN PAGE ZERO Octet provisoire pour BASIC Zone de conversion flottant cha ne Table des erreurs en cours de r cup ration en lecture cassette PILE DU MICROPROCESSEUR 6510 Tampon d entr e du KERNAL pour CHRIN Table des fichiers
18. 40640 IFL 6THEN40700 REM LIGNE COMPLETE 40650 1 41 TLS L 1 1 40660 IFMIDS VIS i5 THEN40700 REM FIN DE LA VARIABLE VIS 40670 Bai 1 TL L JL ACELAS COLDS 1 1 1 REM CARACTERE DANS SEC 40680 I I H J J 1 IFJ 63THEN40640 REM FIN D DE LIGNE 40690 GOTO40660 REM CONTINUE REMPLIR LA S 40700 ee FRINT 3 TLS I 1 NEXT RN TRS 128 REM IMPRESSIO 40710 RETURN 55555 SAVE IMPRIME 120 8 READY EBBSEBBEEESEEEBBE MAN p lt lt HI Ed rg ZZ t Ca B LU O3 PV EN z G tA O O ZS F Q Er OP LE LIVRE DU 64 IMPRIME HR Ce programme recopie l cran sur l imprimante quel que soit le mode graphique utilis caract res normaux programmables modes tendus modes BITMAP modes couleur Soyez cependant attentifs aux quelques remarques suivantes 1 Pour les caract res normaux il faut au pr alable recopier le g n rateur de caract res en RAM 2 Pour les images situ es derri re les ROM BASIC ou KERNAL il faut remplacer les PEEK du programme par USR et charger en m moire la routine USR PEEK 5 Les modes couleurs peuvent donner des r sultats bons ou mauvais Les meilleurs r sultats sont obtenus lorsque les couleurs claires sont repr sent es dans le BITMAP par les deux bits 00 les couleurs de luminosit moyenne par des 01 et 10 les couleurs sombres par ll Ceci n est pas toujours possible avec les programmes commerciaux 4 Pour recopier une image cran
19. BAS C SAT Eh ee E RYS Sp Zi ONTER L 43 PRINT RVS ON VS OFF de POUR LA FAIRE DESCENDRE 4 PRINT 5 ON 15 49152 S OFF POUR RELANCER APRES STOP RESTORE 45 PRINT T DU PR E MODE MIXTE CONTINUE 46 PRINT STOP RESTORE AVANT TOU TOUT ACCES UN PERIPHERIQUE 49 5549152 DEMARRE LE MODE MIXTE 50 SYS 49363 REM EFFACE BITMAP ECRAN ET RAM COULEUR 55 A 113 REM NUMERO DE LIGNE FRONTIERE ENTRE MODES 57 FORI OTO 3 1 47 29 UM Wk kikiki BOUCLE PRINCIPALE 91 POKE49268 1 REM COULEUR FOND 92 POKE49269 5 REM COULEUR FOND TEXTE 93 POKE49276 14 REM COULEUR BORD 94 POKE49277 7 REM COULEUR BORD TEXTE 95 REM POUR PARTIE SUPERIEURE ECRAN 96 REM POKE 49360 VALEUR DE REMPLISSAGE RAM COULEUR 97 REM POKE 49361 VALEUR DE REMPLISSAGE ECRAN TEXIE 98 REM POKE 49362 VALEUR DE REMPLISSAGE BIIMAP 100 2 30 010159 SINUS 110 9 60508300 REM TEST CLAVIER 1 130 Le 80 X 80 140 Y2 INT 30 Y 145 FOR Y Y1 TO Y2 STEP SGN Y2 Y1 150 W GOSUB 200 160 NE 170 KEEN 180 FORY 24T029 W 85 GOSUB400 NE 182 FORY 301035 W 00 GOSUB4OO NE 184 FORY 36T041 W 1 70 GOSUB 400 NE 186 FORY 4 2104 7 W 25 5 GOSUB4OO NE 237 LE LIVRE DU 64 190 NEXT CH 198 GOSUB300 GOTO 198 REM FIN DE PROGRAMME 199 REM nn n a 2 OU 3 200 ECRIT EN MODE 7 VALEUR 201 REM An 210 CHIN RE LN Y AND 220 BY B
20. LE LIVRE DU 64 par B Michel BCM 1984 LE LIVRE DU 64 AUTRES OUVRAGES EDITES CHEZ B C M s c Le Livre du VIC C puis par MICHEL Le Livre du amp 4 par MICHEL Le Livre du MSX par D MARTIN Les Dessous du SPECTRAVIDEO par D MARTIN Le Livre du MS FC DOS par F PIETTE Le Livre de 1 AMSTFAD par D MARTIN et JADOUL Ecrire en dBASE par MICHEL DISQUETTES DISTRIBUEES FAR B C M s c Les disquettes contiennent les programmes des livres concern s Le Disque du 64 format 15412 Le Disque du MS FC D0S Le Disque de 1 AMSTEAD Le Disque de dBASE Le Disque du MSX EN PREPARATION Le Livre de 1 AMSTRAD Tome 2 Disques et p riph riques Le Livre de l ATARI 520 ST Le Livre de l AMIGA Le Livre du 2 me dition Mai 1986 Imprim en Belgique par BON TON 4600 CHENEE D pot l gal D 15984 3827 2 Copyright B C M s c 24 route de la Sapini re B 4960 BANNEUX BELGIQUE ISBN 2 87111001 80 Toute reproduction non r serv e l usage du copiste d un extrait quelconque de ce livre par quelque proc d que ce soit est interdite sans l autorisation crite de l auteur Distribu par FSI Diffusion 86 F 7704z LAGNY s MARNE cedex FRANCE PSI BENELUX 17 rue du Doyenn B 1050 BRUXELLES BELGIQUE LE LIVRE DU 64 INTRODUCTION Cet ouvrage est consacr la programmation du COMMODORE 64 Fruit d une troite collaboration avec les membres du club li geois d informa
21. PEEK ZC 2 2 128 128 93512 REM CALCUL SI NOMBRE NEGATIF 6200 1 IFZKTHENZ J PEEK ZC 2 256 PEEK ZC4 65536 607063240 63223 REM CALCUL SI NOMBRE POSITIF 63230 2 ZJ PEEK ZC42 256tPEEK ZC43 63235 REM RETOUR SI TABIEAU 03230 1 IFZSDOTHENRETURN et AFFICHAGE DU NOMBRE 63250 GOSUB63070 PRINT 2J ZJ 0 PRINT C HAUT C HAUT RETURN 63252 REM re dede jede eee dede RE jede 63253 REM DEBUT DU TABLEAUX 63254 63255 63256 REM DEFINITION DE TOUTES LES 63257 REM VARIABLES EMPLOYEES DANS LE 63258 REM PROGRAMME POUR EVITER LA 63259 REM MODIFICATION DES POINTEURS REM DURANT L EXECUTION DU 63292 2 ZB ZM 0 ZN 0 ZL 1 Z0 0 ZQ 0 ZS 0 DIMZP 4 ZQ 4 63267 REM ZB ADRESSE DEBUT TABLEAUX 63270 2 48 256 47 63271 63273 REM ZM ADRESSE FIN DES TABLEAUX 6327 R REM ZN ADRESSE DEBUT DU TABLEAU 63280 2 ZMPEEK 50 2 56 49 ZN ZB 63283 REM TESTE SI FIN DES TABLEAUX 63290 1 IFZN ZMTHENEND 63293 REM ZO NOMBRE D INDICES Se 20 25 03302 REM dei 63310 FORZF 1TOZO ZP ZF PEEK ZNHH2 ZF PEEK ZNH342 ZF 256 1 ZQ ZF Z P ZF NEXT 63323 REM CALCUL DU TYPE DE TABLEAU 63324 REM ZD 0 FLOTTANT 233 LE LIVRE DU 64 234 63325 ZD 1 CHAINE 63326 REM ZD 3 ENTIER 62200 2 ZD PEEK ZN AND128 1 28 2 PEEK ZNH1 JAND128 1 28
22. cran le clavier la cassette etc sont situ s dans le KERNAL Les plus importantes de ces routines sont accessibles aux adresses de la table de JMP situ e en FF81 FFF5 il s agit de 39 sauts JMP ou JMP indirect vers les routines principales du KERNAL La plupart de ces routines portent un nom attribu par COMMODORE ou par certains prog rammeurs J BUTTERFIELD HAMPSHIRE etc Nous reprenons ici les noms les plus courants Une des rou Lines du KERNAL est cependant particuli re la routine CHRGOT prend un caract re dans le texte stock en m moire normalement un programme BASIC l endroit du pointeur de caract re puis elle incr mente ce pointeur Cette routine est d usage extr mement fr quent et pour tre tr s rapide doit tre situ e en 0 en RAM qui la rend ainsi auto modifi able voir plus bas et galement ais ment modifiable par un programme ext rieur au KERNAL Les programmes comme 1 terpr teur de langage FORTH un langage rapide fort diff rent du BASIC le DOS SUPPORT ou des programmes ajoutant des commandes suppl mentaires au BASIC comme SIMON S BASIC utisent tous des versions propres de la routine CHRGOT AUTO START Au d marrage le KERNAL ex cute une s rie d op rations d initialisation L adresse de la routine de RESET est toujours avec le 6510 situ e en FFFC et FFFD Pour 1e CBM64 1e contenu de cette adresse est FCE2 A ce moment le KERNAL initialise l
23. de ADSR d croissance D de ADSR 54277 0406 maintien de ADSR rel chemen R de ADSR 54278 VOIX 2 VOIX 3 COMME LA VOIX 1 COMME LA VOIX 1 FREQ BAS 0407 54279 D40E 54286 FREQ HTE 0408 54280 D40F 54287 IMPULS B 0409 54281 40410 54288 IMPULS H 040 54282 0411 54289 MODES D40B 54283 D412 54290 A D D40C 54284 D413 54291 5 R D40D 54285 0414 54292 FILTRES D415 0 2 54293 bit 0 0416 54294 bit 3 ze GE 54295 i exter voix 3 2 voix 1 54296 voix 3 haut REGISTRES A LECTURE SEULE D419 ENTREE POT X 54297 D41A NTR POT Y RR D41B VALEUR DE LA SORTIE DE L OSCILLATEUR were ccc Se D41C ALE R NY su 148 LE LIVRE DU 64 COMMENT PROGRAMMER UN SON 7 Un son est principalement caract ris par 1 son volume 2 sa fr quence 3 sa forme d onde 4 son enveloppe La programmation du son sur le CBM 64 n cessite d abord d allumer l emplificateur sonore en tournaht le bouton de vo lume Pratiquement on modifie les 4 bits inf rieurs du registre 24 du SID F 0 volume fond 54296 15 volume 0 POKE 54296 0 La fr quence de chacune des trois voix est programmable sur deux octets soit de 0 65555 La notation habituelle BEES basse partie haute est utilis e ici Soit F la valeur de fr quence programmer FH l octet de poids fort et FL l octet de poids faible Nous crirons dans
24. il suffit de faire SEC flag CARRY 1 pour JSR MEMTOP lire le pointeur DEY d cr mente la partie DEY haute 2 fois CLC sflag CARRY 0 JSR MEMTOP r crit le pointeur sdiminu Note Le registre n est pas modifi Routine double usage Elle lit ou tablit le pointeur de bas de zone BASIC Ce d but de zone est normalement en 0800 2048 Le mode d emploi est identique celui de la routine MEMTOP Le pointeur qui est modifi est en 0281 et 0282 FF9F SCNKEY FFA2 5 0 FFA5 ACPTR LE LIVRE DU 64 Ces pointeurs en 0281 0284 sont l usage du KERNAL Ne pas les confondre avec les pointeurs de m moire en page 0 qui sont utilis s uniquement par l interpr teur BASIC Routine de balayage du clavier Elle ne peut tre utilis e qu apr s un appel IOINIT Elle modifie les registres A X et Y On peut l utiliser ind pendamment des routines d interuptions Par exemple dans un programme o les interruptions sont interdites ce qui permet d avoir acc s au clavier malgr tout En sortie le caract re ventuellement frapp au clavier est rang dans le tampon de clavier Ne pas utiliser cette routine si les interruptions normales sont en service Pour lire un caract re au clavier il faut appeler GETIN apr s avoir balay le clavier par SCNKEY ou GETIN seul si les interruptions normales sont en service Appel par JSR SCNKEY Exemple lecture d une touche
25. 00 2 001 49283 REM HE ES 15955 DE 29152 A 49283 49312 DATAL6 5 02 1 07 2 16 5 020 07 2 032 247 49320 183 160 000 120 169 053 133 001 49328 DATAL7 7 020 168 169 05 5 13 3 00 1 088 49336 DATA104 133 020 104 133 021 076 162 49344 DATA179 49345 REM CHECKSUM 3356 DE 49312 A 49344 49360 DATAOO0 038 000 169 000 133 098 169 49368 DATA216 133 099 169 000 133 100 169 49376 DATA220 133 10 L 17 3 208 19 2 160 000 49384 DATAO32 030 193 208 251 169 000 133 49392 DATAO98 169 224 133 099 169 000 133 49400 DATAL00 169 000 133 101 173 210 192 49408 DATAO32 030 193 208 25 L 169 000 133 49416 DATAO98 169 204 133 099 169 000 133 49424 DATA100 169 208 133 10 1 17 3 209 192 49432 DATAO32 030 193 208 251 096 145 098 49440 DATA230 098 208 002 230 099 166 099 49448 DATA228 101 208 004 166 098 228 100 49456 DATAO96 169 49457 REM CHECKSUM 12821 DE 49360 A 49457 KA MEN wow 55554 END 55555 SAVE GO MODES MIXTES 8 READY 238 00070 00071 00072 00075 8 8 u8zgg9 z98 5585859585653 La 83 o8239888 55 SosUuSBS585Doas aSm zg 096 3906 g 88888888888888888 S LE LIVRE DU 64 GRAPHIQUES MULTI MODES DH ATTENTION DANS CE LISTING PLUS GRAND QUE EST DONNE PAR 7 PLUS PETIT QUE EST DONNE PAR 0514 RASTER 0012 CR 0
26. 1 OCTET HEX 2 D W 13 CR IFAX10RA 3 O o nos y F7IRVS OFF POUR CONTINUER 20 ET 7 pu j 100 INPUT AD COSUB 1000 PRINT ADS 40 300 TNPUT HEX 0C3 IFLEN 00 52 GOTO 10 310 GOSUB 4000 PRINT 0 0010 40 400 INPUT HEX AD E 010 10 410 GOSUB 3000 PRINT AD 40 500 GETW IFW 010500 599 RETURN 999 END 1000 AD D AD REM OCTETS DEC DHEX 1010 IFD 0GOTO1040 1020 A INT D 16 AD MIDS 0123456789ABCDEF 1 D A 16 1 1030 D A 6 n 2040 ADS RIGHTS 0000 ADS 4 RETURN s OCTET DEC 2010 IFD 0GOTO2040 EE 2020 A INT D 16 0C MID 0123456789ABCIEF L Da 163 5 5 HD A 16 1 HOC 2040 DEER 00 40C 2 RETURN 3000 0 2 OCTETS 3020 FORICLTO4 APASCCMIDSCADS 1 48 3030 D D 1634 A 9 J NEXT ADD RETURN 4000 D 0 1 OCTET 4010 FORI 1TO2 IE OCS I dar 48 RAR D D 1 6tA A gt 9 NEXT 0C7D RETURN 55555 SAVE 0 HEXA 8 READY IMPRIME 120 Apr s un certain d lai pour l tablissement des tables internes le programme envoie en mode graphique une chaine de caract res l imprimante MPS801 ou 1526 Un g n rateur de caract res plus troit permet de loger 120 caract res l o normalement 80 seulement prenaient place REM kkkkkkkkkkkkkkkkk 4 40010 REM AU
27. 10080 DATA160 0 42 168 0 10 165 0 2 168 0 10090 DATAO 160 0 0 0 0 0 0 0 0 0 0 0 0 10100 DATAO 0 0 0 0 0 0 0 0 0 0 0 0 O 10110 DATAO 21 80 0 23 244 597253 10120 DATAO 31 127 654 7 223 208 1 247 10130 DATA244 0 125 85 0 29 253 0 5 253 10140 DATAO 1 85 0 0 0 0 0 0 0 0 0 0 0 0 10150 DATAO 0 0 0 0 0 0 0 0 0 0 0 0 0 0 55555 SAVE BO DESSIN MOYRES A READY e DESSIN MULTI HOY Programme de dessin en mode caract res multicolores avec joystick en r solution moyenne 40 80 points Les 256 caract res programmables sont utilis s en mode multicolore qui permet des dessins en 4 couleurs sans aucune erreur Les 4 couleurs sont modifiables en ligne 40 206 LE LIVRE DU 64 La s lection de la couleur de trac se fait avec le bouton de tir L cran peut s effacer avec la touche CLR ou HOME Notez l utilisation de 6 boucles FOR NEXT imbriqu es pour programmer les 256 caract res 2 8 DESSIN 50 80 EN 4 COULEURS 10 POKE 51 0 52 26 NO 30 EC 1024 Oe 10555296 VIC 53248 A0 Dix 10 10 53 G 41 F 0 1 F 1 2 Er 25 EC REM CHOIX DES COULEURS 42 P 0 4 Or 64 SEC P 3 16 50 1 1 1 1 1 0 0 1 1 1 1 1 0 51 DATAO 0 0 1 0 1 0 0 60 FOR 1 0 TO 10 71 1 NEXTI 20 lt 1000 100 FOR I CO TO 0 999 POKE I F 3 8 NEXT RETURN 200 FOR I EC TO EC4999 0 NEXT 210 X 0 Y 0 RETURN 29
28. 10270 POKET 30 POKEI 1 30 GN 937 POKEI 3 237 POKEI 4 173 5 1 3 10280 POKE 109 7 109 POKEI 8 45 POKEI49 45 10300 POREECATA 237 POKEEC 75 173 76 199 77 45 10310 POKEEC L1 5 17 3 POKEECH116 109 POKEECH 17 45 10320 156 109 157 45 197 10330 RETURN 11000 REMF XAX KKARRERAER ERRRRRRRARREUR 1005 REM SOUS ROUTINE EFFACE ECRAN 11002 REM kkkkkkkkkkkkkkkkkkkkkkkkikkki 11009 REM RETABLIT LA TABLE DES ADRESSES LIGNES MOIS FOR 1 0 TO 25 PRINT NEXT I 11019 REM EFFACE L ECRAN 11020 SYS 51324 11028 11030 REM AFFICHE LE MENU 11040 GOSUB 13010 11050 RETURN 12000 REMF kkkkkkkkkkikkikkkkkkkkkkkkikk 12001 REM SOUS ROUTINE DEMO LUTINS 12002 REMX dcdedekefe desk dede dede dede de dese eee dfeededefedek 12008 REM MISE EN PLACE LUTIN 5 12010 SP 5 XA 24 YA 50 GOSUB 12214 12018 REM MISE EN PLACE LUTIN 1 12020 8 SP 1 XA 48 amp YA 50 GOSUB 12214 12028 REM MISE EN PLACE LUTIN 12030 SP 2 XA 7 2 YA 50 GOSUB 12214 12038 REM MISE EN PLACE LUTIN 3 12008 SP 3 XA 96 YA 50 GOSUB 12214 12048 REM MISE EN PLACE LUTIN 4 13020 SP 4 XA 120 YA 50 GOSUB 12214 12058 REM DEFINITION DES LUTINS d 269 LE LIVRE DU 64 270 12060 FOR I CA 512 895 12070 READ A POKE I A 12080 NEXT I 12087 12088 REM DEPLACEMENT LUTIN 5 SP 5 XA 266 GE OH KE 12510 12098 REM DEPLACEMENT LUTIN 12
29. 219 suivi de RETURN 2 mettre le curseur sur la ligne imprim e par l et taper RETURN et inhiber STOP RESTORE POKE 808 234 ou STOP par POKE 808 239 ou SAVE POKE 808 225 818 32 3 Une protection suppl mentaire contre LIST POKE 775 167 10 SES See PROGRAMME UN PROGRAMME 20 PRINT IST BLE EXECUTER D D ABORD 30 PRINT PROTECTEUR PUIS CHARGER LE 40 PRINT PROGRAMME PROTEGER EN MEMOIRE 30 PRINT Y AJOUTER LA LIGNE 999 CI DESSOUS 60 PRINT TAPER RUN 999 LE PROGRAMME 70 PRINT DEVIENT INLISTABLE ET INSAUVABLE 90 PRINT PROGRAMME PROTEGE NE PEUT SE 91 PRINT CHARGER QUE PAR LOAD NOM 8 1 ET 92 PRINT IL DEMARRE DES QU IL EST CHARGE 93 PRINT SANS DEVOIR FAIRE RUN PRINT PRINT PRINT 110 FORI 828T0897 READA POKEI A CS CS4A NEXT 120 IFCS lt gt 66 2 7THENSTO 828 DATA169 175 141 7007 003 141 051 003 836 DATA169 008 14 1 006 003 14 1 050 003 844 DATA169 254 141 023 003 141 025 003 852 DATA169 105 14 1 022 003 14 1 024 003 860 DATA169 082 141 119 002 169 213 141 868 DATA120 002 169 01 3 14 1 121 002 169 876 DATAOO3 133 198 169 202 141 038 003 884 DATA169 24 1 141 039 003 169 001 133 892 DATAO43 169 008 133 044 096 893 REM CHECKSUM 6027 si 828 897 998 LIST 999 999 PR sito dk s 108843 38 POKE 44 3 POKE 806 60 POKE 807 3 SAVE 0 PROG END 55555 SAVE O PROTECTEUR 8 READY 250 LE LIVRE DU 64
30. 40 FORI UTOMAX POKERAM HI ROMH 50 POKEL PEEK 1 JORA 60 POKES 334 56334 JOR1 99 END 55555 SAVE 30 COPIECARA BAS 8 READY COPIE ROM Ce programme en langage machine est charg par quelques lignes de BASIC dans le tampon cassette Une fois utilis il peut tre effac L ordinateur continue fonctionner mais avec les ROMS BASIC et KERNAL hors service et remplac es par une copie de leur contenu en RAM aux m amp mes adresses utiliser avant de tenter des modifications dans le BASIC ou le KERNAL Peut tre r activ par SYS 828 apr s une perte de contr le par STOP RESTORE 10 REM RECOPIE LES ROM BASIC ET KERNAL 20 REM EN RAM ET LES DECONNECTE 30 REM LE BASIC EST DONC MODIFIABLE 40 5 0 FORI 82 8TO88 2 READA POKEI A 50 CS CSJA NEXT 60 IFCS lt gt 606 ITHENSTOP 70 5 5828 80 PRINT PLUS DE ROM EN SERVICE END 195 LE LIVRE DU 64 76 SE 003 201 249 238 23 879 REM CHECKSUM 6061 dE 828 882 55555 SAVE Q0 COPTEROM 8 READY COULEUR Petit programme permettant de modifier le choix des couleurs de fond et de bord de l cran IR BORD FOND POKE 53280 53281 B Nor RV V ON NI 0 i 1 s ROUGE RYS VS ON 2 CYAN RVS ON 3 30 PRINT POUSSER KS POUR FINIR 31 IFA GOTO 31 32 IFA THEN END 99 RUN 55555 SAVE 0 COULEUR 8 READY DATAMAKER Transformation d une zone m moire en lignes d
31. 40320 DATA191 192 191 128 191 248 191 128 40330 DATA247 136 247 128 135 248 135 128 40340 DATA24 1 201 1 199 128 255 193 193 128 40350 DATA254 213 195 128 193 193 255 128 40360 DATA130 255 130 128 136 156 136 128 40370 DIMICS 256 TLS 6 1 R M TCS T ABLEAU CARATERES TL TABLEAU LICN 40380 FORI 32T095 READA B REM DANS CODE ASCII CARACTERES A 40390 TM c CS D NEXT REM DEFINITION DU CA 40400 ER REM DEFINITION 40410 OPEN3 4 PRINT 3 CHRS 8 REM IMPRIMANTE CHR 8 MODE GRAPHIQUE 40420 REM le ie Rte 40430 REM DEMONSTRATION 40440 REM w kkkkkkkkkkkkkkkkkkkKkikikikk 40450 VI O 0 0 0 0 0 0 40460 VI VISe 0 0 0 i 1 1 40470 GOSUB40630 40480 VI O 1 2 3 A 5 6 40490 VISNIS 7 8 9 9 1 2 40500 GOSUB4063 40510 1 25296789012345678901234567890123456789012345678901234567890 23456 40520 vI VI 789012345678901234567890123456789012345678901234567890 40530 GOSUB40630 40540 EE DE CARACTERES MCHRSQGAM amp 40550 D er 3456789 lt gt 1 CABCDEFGHIJKLM 40560 VI 5 R E 40570 VIS S T VW X Y Z N 0050840630 PRINT 3 CHR 15 CLO SE 3 END 40580 REM KA RREREAARERRER ERARERERERRRE 40590 REM VIS VARIABLE DE LA ROUTINE CONTENANT CHAINE IMPRIMER 40600 REM TLS 6 1 6 SECTIONS DE LIGNE POUR UNE LIGNE D IMPRESSION 40610 REM I CCMPT UR DE CARACTERES DANS VIS 40 0620 REM kkkkkkkkkkkkkkkkkkkkkkkkkkkk 40630 L 0 1 1
32. 6 255 5 255 49840 DATA 255 17 255 255 20 13 29 136 49848 DATA 133 134 135 17 51 90 81 52 49856 DATA 87 83 60 1 53 82 68 54 49864 67 10 84 88 55 8b 71 56 49872 DATA 66 72 85 86 57 73 74 48 49880 DATA 63 75 79 78 190 80 76 164 49888 DATA 47 77 64 46 62 42 37 19 49896 DATA 1 61 222 43 49 95 4 50 49904 DATA 32 2 65 3 255 148 141 157 5 158 159 145 34 122 113 49920 DATA 39 119 115 101 1 40 114 100 102116 120 183 121 103 49936 DATA 33 58 104 117 118 188 105 106 49944 DATA 182 44 107 111 110 4 1 11 2 108 49952 DATA 45 58 109 191 59 60 35 184 49960 DATA 147 1 61 36 61 38 95 4 49968 DATA 185 32 2 97 131 255 255 255 49976 DATA 255 255 255 255 255 25 5 255 255 55555 SAVE GD AZERTY B 189 LE LIVRE DU 64 BALAYAGE D monstration du SID employ en balayage de phase et en inversion de phase d faut d tre musical ce programme d montre quelques fantastiques possibilit s sonores du 64 20 REM BALAYAGE DE 5 5 20 5 54272 GOSUB 500 VL 1 5 AR 64 DE AR 1 40 PRINT NORMAL 1 PRINT PHASE ALEATOIRE 2 So PRINT INVERSION DE PHASE 3 PRINT BALAYAGE DE PHASE 9 0 2 3 4 QU O FIN 70 IF B 0 THEN ED 80 PL 128 POKES42 PL 90 AD 3 16 2 SR 14 16 5 POKE S424 VL 100 RESTORE POKE 5 5 POKE 5 6 Se 110 READ N D IF N OIHEN GOSUBSOO RUN 120 POKE su KES 4 DE 130 ON B COS B 300 600 760 800 140 POKE 5 4 AR 150 ON B sosie 300 600 700
33. 600 POKE631 19 POKE 632 13 POKE 633 13 POKE 198 3 END 880 DATA162 1 32 198 255 160 1 177 71 133 890 DATA99 200 17 7 7 1 133 100 162 32 32 207 900 DATA258 Zo 22 gt 20 0819 48 32 2 255 201 910 DATA34 240 5 2 0 208 db 510 39 160 920 DATA 32 207 Ecg 2L 52 252 5 REES 99 0300 930 DATA208B 244 32 207 255 240 10 20 1 80 208 940 DATA247 160 16 145 99 208 241 32 204 255 950 DATA96 55555 SAVE G0 SD 8 READY SIBOFF Ce tout petit programme en langage machine met hors service une cartouche d extension BASIC SIMON S BASIC par exemple en r tablissant les pointeurs BASIC normaux Cette proc dure permet de sortir du SIMON S BASIC sans couper le courant Toutefois l effet est assez semblable au RESET Pour r cup rer un ventuel programme en m moire il faut utiliser une version de DE NEWM 256 LE LIVRE DU 64 correspondant la bonne adresse de d part de BASIC avant l ex cution de SIBOFF Cette adresse d pend du programme en cartouche que l on veut inhiber 10 REM INHIBE SIMON S BASIC 30 REM PAR B MICHEL 50 REM REAUTORISE SIMON S BASIC PAR 70 REM SYS 33106 80 REM 199 EOR FOR 200 TO 907 READ A POKE I A NEXT I 300 DATA 162 255 120 154 216 76 239 252 999 END 55555 SAVE 0 SIBOFF 8 READY SILENCE Ce tout petit programme en langage machine coupe le son g n r par le SID proprement c est dire sans g n rer de parasites Il peut tre red plac n importe
34. BAS as Ii UR SUE EE PRINT HOME JSAVE KN B 1 0 8 1 POKE43 1 POKE 44 8 GOTO3100 POKE4 3 4 8 POREA 76 POKEA6 11 1 REM DEBU TSF IN 196 2 POKE 631 8 SE 13 REM TAMPON CLAVIER POREA3 1 POKE 44 8 POKE4 5 ER a POKE46 6 PEEK 29001 PRINT JAUNE L PRINT BLANC JLo ic CBAS ic kkkkkkkkkkkkkkkkkkkk LOAD N INPUT NIMERO s FIGURE N 2 IP LEN NS 0 GO T 0 n ENS RINT NT CIR BIAN C LOAD PRINT C BAS UR TAPER GOTO 10 PRINT C BAS C MS E BAS BAS JGOTO 10 PRINT C BAS C BAS C C BAS PATIENCE PRINT HOME C BAS C BAS C BAS C BAS LOAD T 8 1 END p CLRIPRINT kkkkkkkkkkkkkkkkkkkk k PRINT TEXTE PRINT C BAS JETES VOUS AU SOMMET DE PAGE GETAS 5050 Ze 0 GOTO 10 E GOTO 5100 N 0 INPUT NUMERO DE FIGURE N GOTO 5070 OPEN TS FIGURE FOR I 0 TO 35 MS a FOR J 78 2 5 1 IF PEEK A I 4J 32 THEN JJ JJ 1 NEXT J PRINT 4 N N1 FOR J TO JJ mU EE NEXT J PRINT 4 N2 S NEXT PR Ha NLS TS FORI Qr036 PRINT A NEXT I CLOSE4 REM FONCTIONS SPECIALES FOR I I 1T070 GET A IF ASC GOTO6220 PRINT C RVS ONJFONCTIONS SPECIALES ENS BAS CBA BAS C BAS RVS ONJA RVS OFF COIN SUPERIEUR GAUC PRINT RW RVS OFF COIN INFERIEUR DROIT DUN RECTANGLE PRINT RVS VS OFF EFF
35. ET 15 AA DD SS RR 80 AD AA L 4DD eg 110 RESTORE POKE S45 AD PORE S 6 SR 115 POKE S 24 VL S43 120 READ N D D DU D POKE Gd N POKES H DE 130 FOR TD OTOD NEXT POKES AR 140 FOR TD OTOlO T NEXP IF 120 150 PRINT PRINT VOL FORME TEMPO VL AR 160 IF AR AND64 64THEN PRINT PRINT ice PH 170 PRINT PRINT ADSR AA DD SS RR 180 PRINT INPUT 2505 SE FIN 3 5A 190 ON A 6010 110 30 999 200 DATA25 2 28 25 4 210 DATA25 2 28 2 3 12 25 A 220 DATA2B 4 19 4 19 2 19 2 LE LIVRE DU 64 230 DATA21 1 24 1 25 4 240 DATA19 4 LE 999 GOSUBI OO END i ELEME FOR TS TO S42 1999 Rm RETURN 4 T O NEXT 55555 SAVE G0 MELODIE 8 READY MODES MIXTES MODES MIXTES SRC Programme en langage machine et d monstration en BASIC des modes mixtes Voir le chapitre 5 ce sujet 10 REM MODES GRAPHIQUES MELANGES 11 REM MODEL CARACTERES 12 REM MODE7 BITMAP MULTICOLORE L REM LIGNE FRONTIERE MOD IFIABLE 30 FOR 1 491521049283 READ A CS CS A POKE I A NEXT 21 ORAN STOP REM MODES 5 CS 33 FOR 1249312T049344 READ A CS CS4A POKE I A NEXT 3125 IF E 3356THEN STOP REM USR PEEK 36 FOR R 1 49 3607049457 READ A CS CS4A I A NEXT 37 IF 8 lt 212821 STOP REM EFFACEMENT BITMAP 38 BASE 57344 REM ADRESSE DU BITMAP A0 POKE785 160 POKE 786 192 REM VE VECTEUR LUS 45 AAT a SE C PATIO BAS C BAS C BAS C
36. POKE 49 128 POKE 50 159 POKE 51 0 52 160 20049 REM SAISIE DU NOM DU DESSIN 20050 PRINT C BAS C BAS C BAS EST LE NOM DU DESSIN SAUVER 20051 PRINT MAX 16 CARACTERES 20060 T 198 0 INPUT M IF LEN gt 16 THEN 20020 20079 REM LE DESSIN SUR DIS QUE Sch DV PEEK 1020 W 0 9 5 SAVE NM DV l 20089 REM REMET LES POINTEURS DE 20090 43 51456 e Teen 51457 20091 POKE 45 PEEK 51458 46 51459 20092 47 51460 48 PEEK 20093 POKE 49 PEEK 51462 POKE 50 PEEK 20098 20099 REM APPEL ECRAN DESSIN 20100 GOSUB 20410 RETURN 20200 REMK XRKkKAKRRRERERRRERRRARRRRERE 20201 REM SOUS ROUTINE LOAD IMAGE 20202 BEME k kk kkk kkk kelke ERA 20209 REM APPEL ECRAN NORMAL zoa lO G GOSUB 20510 20212 REM OPTION DISQUE OU CASSETTE 20213 PRINT C BAS DISQUE OU CASSETTE POKE 198 0 20214 GET AS IF THEN 20214 20215 IF AS C THEN DV l 20216 DV 8 IF AC H THEN20213 20217 POKE 1020 07 20219 REM SAISIE DU NOM DU DESSIN 20220 PRINI C BAS C BAS C BAS QUEL EST LE NOM DU DESSIN A CHARGER 20230 POKE 198 0 INPUT MM IF LEN NM gt 16 THEN 20220 51461 51463 277 LE LIVRE DU 64 278 20238 20239 REM CHARGE LE DESSIN DU DISQUE 20240 1020 10 0 LOAD MS DV 1 20248 REM CONNECTION DE LA LIGNE 0 GOTO 20250 AIRES LOAD 20249 REM RETABLIT LES POINTEURS DE
37. PRINT FRE 0 B Pour visualiser l occupation m moire d un tableau ne pas oublier l existence des l ments pour lesquels l indice st On a vu ci dessus que CLR efface toutes les variables et les tableaux Il est possible de se cr er soi m me une commande CLR TABLEAUX qui n efface que les tableaux POKE 49 PEEK 47 POKE 50 PEEK 48 Cette instruction modifie le pointeur de fin de tableaux de mani re annuler la longueur de la zone tableaux La commande READ est la seule utiliser les zones de donn es cr ees par la commande DATA READ lit une valeur d une zone de DATA et la range dans la variable sp cifi e L adresse 55 LE LIVRE DU CBM 64 de la valeur lire est connue tout instant car READ met jour chaque fois deux pointeurs en 65 et 64 3F 40 se trouve le num ro de la ligne BASIC contenant la commande DATA en cours Une partie de la routine READ est partag e avec l instru ction INPUT il s agit de la recherche du param tre et du transfert de la valeur dans la variable param tre La diff rence est dans l adresse de lecture de la valeur Pour INPUT elle est dans le tampon d entr e pour READ elle est dans le corps du programme A noter les cha nes de caract res dans DATA ne doivent pas obligatoirement tre entre guillemets La commande LET tant tr s fr quemment utilis e les concep teurs de BASIC l ont rendue optionnelle c est dire que lors de la recherche d un mot cl d
38. ception IEEE s rie Compteur d impulsions dans les blocs d en t te sur cassette Pointeur d octet dans le tampon cassette Bits lus sur RS 232 Compteur de bits lus sur RS 232 Drapeau Bit START sur RS 232 0 N Octet lu sur RS 232 Parit de l octet lu sur R5 2232 Pointeur pour d calage d cran Adresse de fin de chargement cassette Correction de vitesse pour cassette Octet prov pour calcul vitesse cassette Pointeur de d but de tampon cassette Compteur de bits envoy s sur RS 232 Bit envoyer sur RS 232 Octet envoyer sur RS 232 Longueur du nom de fichier en cours Num ro du fichier logique en cours Adresse secondaire du fichier en cours Num ro de p riph du fichier en cours 179 LE LIVRE DU 64 ADRESSES HEXA DECIMAL 0088 008C 187 188 008D 189 00BE 190 00BF 191 00C0 192 00C1 00C2 193 194 00C3 00C4 195 196 00C5 197 00C6 198 00C7 199 00C8 200 00C9 00CA 201 202 00CB 205 00CC 204 00CD 205 00CE 206 00CF 207 00D0 208 0001 0002 209 210 0003 211 0004 212 0005 215 0006 214 0007 215 0008 216 0009 00 0 217 240 00F1 00F 2 241 242 00F3 00F4 243 244 00 5 00 6 245 246 00F7 00F8 247 248 00F9 00FA 249 250 00FB 00FE 251 254 00FF 255 0100 010 256 266 0100 013E 256 318 0100 01FF 256 511 0200 0258 512 600 0259 0262 601 610 0265 026C 611 620 026D 0276 621 630 0277 0280 631 640 0281 0282 641 642 0283 0284 643 644
39. e on peut utiliser le programme calcul son en annexe Pour programmer la fr quence d une voix il suffit d crire les valeurs FL et FH dans les deux premiers des sept registres de contr le de cette voix S 54272 Fr quence voix 1 POKE S 0 FL POKE S 1 FH Fr quence voix 2 POKE S 7 FL S 8 FH Fr quence voix 3 S 14 FL POKE S 15 FH Il faut noter que les registres 0 24 du S I D ne peuvent pas tre lus mais seulement crits WRITE ONLY La forme d onde est le dessin qu on peut obtenir en regar dant le signal sonore l aide d un oscilloscope La modification de la forme d onde change le nombre d harmoniques du son et donc son timbre Qu est ce qu une harmonique peut dire qu une onde sonore est une superposition d un grand nombre d ondes simples sinusoidales de fr quence croissante que l on appelle les harmo niques Plus une forme d onde est proche de la sinusoide plus elle est pure Le CBM 64 peut g n rer des ondes triangulaires qui se rapprochent assez bien de la sinusoide ne sont pr sentes que les harmoniques impaires la l re la 3 me etc Ceci donne une sonorit proche de la fl te Il peut g n rer aussi des ondes en dents de scie qui contiennent toutes les harmoniques paires et impaires avec des amplitudes importantes ce qui donne une sono rit fort riche trompette etc Une troisi me forme d onde est possible c est la forme rectang
40. k dk ed kedek deee kk k kkk LE LIVRE DU 64 10010 PRINT 10020 PR INT 0009 2000000000000000000000000000 10030 BUNT NOIR Gemeng ROUGE 0000000000 Iuba 10000000 NOIR 10040 SE ROTR JOAAAAAAAAOBAAOO ORANGE 0000000000 NOIR 100000000 C YA 10050 PRIN JAUNE 0000000000 NOIR 1000000000 POU 10060 NOTR JO AAAAAAAABOAOO VERT 0000000000 NOIR 110000000000 JAU 10070 PRINT NOTR JOAACCOAAAGCAAO0 BLEU 0000000000 NOIR 100000000000 BL 10080 mur NOIR OHGGG FOHFOHFOOO POUR FRE J0000000000 NOIR 100000000000 10090 PRINT NOIR 10 666600000000 00000000000000 ACDGUGACDB CBACDUGGAC DCDACDUGAO00 10110 SH OAAOOOAAADF AAAAOOOAAADGFOAAOBAAHF AKO 10120 PRINT OAAGCAAAADAAAAA GCAAA 10130 PRINT OAAHAAAAAAAAAAAHAAAAA DFOOAAABOAOAAAQO000 10140 PRINT OAAAAAAA GOAAAAAAAA AC AAA GCAAOAAADOOO 0 10150 PRINT OHFOHF OH CGG FORFOHFOH COG FOHF ORFOOHFOOOQQO 10160 PR GE SE o 00000000000000000000 10180 PRINTO PKO PX NV POWZWORUQ Q 00000000000 NT obag 210100 VIWTW ON IO QU 1950000 TAN 187000 10200 Gest E EE E US 5 5700 10210 PRINT NOIR 000000000000000000000000000000000 Kale 10220 m NOIR JO Z Z CHR 34 27 CHRS 34 5 00000600 CY 10230 PRINT Lana CHRSQAY 7 0080 ZZZ Z802020 O0000000000000000 10240 PRINT d 0000000000000000 10250 E 10260 FOR I EC 56 TO EC4256 STEP
41. la fin du mot cl La fin d un mot cl se recon na t parce que le bit 7 du dernier caract re de chaque mot cl vaut 1 dans la table Dans le cas d une diff rence l interpr teur de commande continue la recherche dans la table jusqu la d couverte du mot cl correct ou jusqu la fin de la table Dans ce dernier cas 11 en conclut que le caract re analys ne fait pas partie d un mot cl Ce peut tre un nom de variable par exemple Si le caract re test fait bien partie d un mot cl l interpr teur remplace tous les caract res du mot cl par un seul caract re dont le bit 7 vaut 1 code compact ou TOKEN en anglais La valeur de ce caract re est simple trouver 11 s agit de la position du caract re dans la table en comptant partir de 0 laquelle ajoute 80 pour mettre le bit 7 l et ne pas avoir de conflit avec un caract re alphanum rique Comme il y a 76 mots cl s BASIC dans le CBM les codes TOKEN sont donc compris entre 128 et 205 inclus de 80 CB A la fin de cette op ration de compactage sur tout le tam pon d entr e la taille d une commande est r duite son opti mum La commande BASIC est maintenant sous sa forme utilisa ble Une derni re constatation propos de 1 m thode de recherche des mots cl s dans la table s impose l interpr teur de commande d tecte la fin d un mot cl BASIC en faisant la diff rence du code caract re dans le tampon d entr e et dans la
42. le au sous programme correspondant L interpr teur appelle CHRGOT qui lui renvoie un caract re TOKEN de valeur comprise entre 80 et CB en d duisant 80 il trouve le num ro du mot cl dans la table des mots cl s en 09 Mais il existe dans la m moire morte du CBM 64 une autre table qui contient sur deux octets chaque fois l adresse de chacun des programmes correspondant aux mots cl s Cette table est situ e en A00C Soit le mot cl PRINT code 99 ou 153 le num ro du mot cl est 155 128 25 Chaque l ment de la table ayant deux octets de long l adresse de la routine PRINT est situ e en A00C4142 25 AG3E et A00C4 l 2 25 1 A03F La valeur lue en A03E est 9F et en C03F on trouve AA L interpr teur ayant trouv ainsi 1 adresse AAO9F la d pose dans la pile et par l instruction RTS fait un saut l adresse en question effet l instruction RTS retour de sous programme retourne l adresse qui suit celle qui avait t mise dans la pile par l instruction JSR Ceci explique que les adresses dans la table en 00 ne sont pas les adresses des programmes mais bien les adresses des programmes l Notez le dernier mot cl de la table des mots cl s 60 ce qui permet l criture de GO TO en deux mots On peut difficilement passer en revue par le d tail tous les sous programmes d interpr tation mais la structure g n rale qu ils emploient est toujours identique Le transfert e
43. n rateur de dessins en couleurs absolument extraordinaire BOM sc 24 route de la Sapini re 4960 Banneux Belgique ISBN 2 87111001 8
44. ne doit tre dans l accumulateur lors de l appel de la routine La chaine ne peut d passer une longueur de 255 caract res Message EXTRA IGNORED suivi de 00 Message REDO FROM START suivi d un 00 Routine utiliser pour prendre dans le corps du texte BASIC une valeur num rique comprise entre 0 et 65535 En sortie le r sultat se retrouve en 14 et 15 sous la forme d un nombre entier non sign sur deux octets Dans ce cas l appel de la routine se fera par JSR AD9E JSR 86 JSR AEF7 JSR AEFA ISR AEFD JSR JSR AF28 ISR AF84 LE LIVRE DU 64 JSR AD8A JSR B7F7 RTS Prends une valeur num rique dans le texte BASIC l o est le pointeur courant de CHRGOT utiliser partir de SYS xxx suivi de param tres Le r sultat est en sortie dans l accumulateur flottant principal Cette routine accepte toute expression BASIC m me tr s complexe utilisant les parenth ses des variables etc Cette routine acquiert dans le texte BASIC une valeur num rique l endroit du pointeur courant de CHRGOT La valeur acqu rir ne peut tre qu une variable simple ou le caract re PI En sortie le r sultat est situ e dans l accumulateur flottant principal l accu FLP Valeur du nombre PI en flottant sur 5 octets Cette routine teste si le caract re courant est une parenth se ferm e et si oui incr mente le pointeur de caract re dans CHRGOT
45. on dispose d un jeu de caract res normaux mais modifiables aux adresses 8192 10259 Modifions le caract re A 11 est donc en 8192 1 8 8200 10 FOR I 0 TO 7 READ A POKE I A NEXT I 20 DATA 12 18 18 60 36 72 72 0 PRINT nous donne maintenant un A en italique 120 LE LIVRE DU 64 1 8 A z 12 2 16 2 18 3 16 2 18 4 32 16 8 4 60 5 32 A 36 6 64 8 72 7 54 8 72 8 9 0 Tous les nombres d finissant un dessin de caract re sont des octets Ils sont donc compris entre 0 et 255 inclus Le programme italiques en annexe nous donne un exemple de programmation des caract res La ligne 170 qui modifie le dessin des caract res d origine d cale vers la gauche la moiti inf rieure de chaque caract re en multipliant sa valeur par 2 tout simplement Si comme presque tout le monde vous utilisez un t l viseur couleur ordinaire il convient d employer pour les lignes verticales des barres de 2 PIXELS de largeur faute de quoi l affichage des couleurs est rarement correct LE MODE GRAPHIQUE NUMERO 3 Le mode 5 est encore une volution du pr c dent La diff rence r side dans le choix de la couleur du caract re programmable qui est plus complexe et n autorise plus que des caract res d finis en 4 8 PIXELS L avantage du mode 3 est qu il permet l emploi des couleurs avec plus de souplesse En mode 1 ou 2 un caract re ne peut poss der que 2 teintes la fois une c
46. on testera l autre JOYSTICK JOYSTICK B CONTROL PORT 1 PRINT PEEK 56321 AND 31 166 LE LIVRE DU 64 LA SELECTION DES ENTREES ANALOGIQUES Nous avons vu que les adresses 5 24 et 5 25 du SID permettent de lire deux valeurs analogiques r nous pouvons connecter deux poign es de jeu chaque port de contr le ou encore une tablette graphique KOALA une SOURIS comme la COLOR COMPUTER MOUSE de TANDY en modifiant sa connexion dans chaque port 11 y a donc quatre entr es analogiques sur le CBM 64 Le secret de tout ceci s appelle multiplexage Le fait de mettre 1 l un ou l autre des bits 6 et 7 du port s lectionne l une ou l autre paire d entr es analogiques soit POT AX et POT AY soit POT BX et POT BY pour les connecter aux entr es analogiques X et Y du SID C est cause du balayage de clavier qui modifie ces deux bits soixante fois par seconde que le BASIC est incapable de lire correctement ces valeurs Il faut donc utiliser une petite routine en langage machine qui suprime les interruptions le temps d une lecture le programme POIGNEES en annexe r alise ceci Cette m thode est d autre part utilis e dans le programme SVP qui cl ture cet ouvrage LES MINUTERIES DU CIA IRGQ Les minuteries A et B du CIA sont programmables chacune sur 16 bits Leurs fonctions sont fort complexes et le cadre de ce livre est trop troit pour les y expliquer toutes Sachons toute fois que plusieurs modes de comptage sont
47. puisque le BASIC est en fait r parti dans les deux m moires Enlever la ROM A000 et conserver le KERNAL est par contre tr s int ressant il nous reste un ordinateur avec son syst me d exploitation et 56 K de m moire ce qui est id al pour des programmes comme le traitement de texte les tableaux de calcul Mess CALC ou d autres langages comme le FORTH le C le LOGO etc LE LIVRE DU 64 Nous avons vu que la pr sence de la m moire ROM devant la RAM emp che de lire cette derni re Mais une m moire ROM ne peut par d finition tre modifi e Donc crire dans une m moire ROM est impossible et inutile c est pourquoi l lectronique du 64 d rive les instructions d criture les POKE adress es une m moire ROM vers la m moire RAM situ e derri re elle Cette particularit tr s int ressante est v ritablement unique parmi les micro ordinateurs usuels Elle est la cl de nombreuses possibilit s de modification du BASIC ou du KERNAL IL suffit de lire tous les octets des deux ROM et de les r crire la m me adresse puis de mettre les deux m moires ROM hors ser vice nous reste ce moment un BASIC et un KERNAL en RAM et donc ais ment modifiables souhait On peut voir des exemples de ceci avec les programmes BASIC FR et AZERTY en annexe On trouvera galement en fin de volume le programme COPIEROM crit en langage machine dans un souci de rapidit d ex cution qui recopie les 16 K
48. r t utiliser ceci en multi voix car une seule des voix synchronis es produit un signal utile coutable Sauf exceptions LA MODULATION EN ANNEAU Nous venons de voir comment pour la voix l par exemple nous pouvons choisir une fr quence impos e par la voix 3 et une dur e de la partie utile de la note impos e par la voix 1 Nous nous proposons maintenant de garder la fr quence de la voix 1 normalement mais de d clencher non la forme d onde normale triangle par exemple mais une autre forme d onde plus sp ciale ce sera la forme d une onde de la voix l suivie d une onde de la voix 5 suivie d une onde de la voix l etc qui constitueront la sortie de la voix 1 Cette modulation en anneau produira suivant le moment o la note d marre d but d une onde voix 1 milieu d une onde voix 2 une structure harmonique tr s complexe et tr s variable on qualifie d ailleurs ce type de modulation par le terme super position non harmonique tant sa d composition en harmoniques est changeante et complexe On obtient comme pour la synchronisa tion cet effet en modifiant un bit ici le bit 2 de valeur 4 du registre de contr le le quatri me de chaque voix La voix 1 peut tre modul e en anneau avec la voix 5 La voix 2 peut tre modul e en anneau avec la voix 1 La voix 3 peut tre modul e en anneau avec la voix 2 157 LE LIVRE DU 64 Le choix se fait en rempla ant les valeurs DE et AR par DE 2
49. re cl qui ouvre une tr s large porte sur le fonctionnement du BASIC Jusqu ici part la 14 LE LIVRE DU 64 m thode de recopie et de modification directe des programmes en ROM nous n avons ouvert des portes que sur le KERNAL CHRGOT est une tr s courte routine qui est situ e en RAM aux adresses 0073 et suivantes C est la portion de l interpr teur BASIC qui prend un caract re dans le texte BASIC et le transf re l interpr teur proprement dit Le fait que cette routine est en m moire vive est une n cessit car il s agit d un programme qui se modifie lui m me En effet il contient l adresse du caract re lire il lit le caract re puis il ajoute 1 l adresse du caract re lire et se modifie ainsi lui m me Si bien qu l appel suivant de il renvoie le carac t re suivant Cette m thode a t choisie car c est la plus rapide C est une des principales causes de la grande rapidit des interpr teurs BASIC COMMODORE Quant nous nous y trouvons un avantage CHRGOT est ais ment modifiable On peut ainsi modifier CHRGOT pour intercepter de nouveaux mots cl BASIC CHRGOT tant modifiable volont mais avec prudence il est donc facile apr s avoir pris un caract re dans le texte BASIC de v rifier s il appartient un nouveau mot cl un de ceux que l on a rajout et pas un de ceux du BASIC d ori gine Sinon on continue normalement Si le caract re ne d signe pas un mot cl
50. tiseur musical int gr au CBM 64 Il poss de trois voix un g n rateur de bruit et de tr s nombreux registres de contr le permettant le choix de quatre formes d onde par voix le choix de l amplitude sur 48 dB Les quatre param tres principaux de l enveloppe la forme globale de chaque voix sont galement programmables Des fonctions plus complexes encore peuvent tre obtenues par un contr leur de modulation en anneau un synchronisateur et trois filtres programmables De plus une entr e audio permet de mixer des signaux ext rieurs avec la sortie du synth tiseur Le SID contient aussi deux entr es analogiques d nomm es POT X et POT Y qui permettent de mesurer la position angulaire de deux potentiom tres ext rieurs en anglais PADDLES Le SID est contr l par 29 registres 8 bits Les 25 premiers sont des registres criture seulement WRITE ONLY et les 4 derniers sont lecture seulement READ ONLY L usage exact de chaque bit de ces registres est d crit dans le tableau r capitulatif de la page suivante 147 LE LIVRE DU 64 pue afore efre ze afore afore afose afore ol VOIX 1 D400 partie basse de la fr quence d oscjllation bits O 7 54272 D401 partie haute de la f Zquenc d osc llation bits 8 815 54273 5 9 D402 argeur impulsion bi 54274 D403 rien largeur d impulsion e 0404 bruit rect TEST modui sync DE AR 0405 attaque
51. tre Cette routine r initialise la table des vecteurs du BASIC partir de la table ci dessus Message BASIC BYTES FREE suivi d un 00 Message COMMODORE 64 BASIC V2 64 K RAM SYSTEM suivi de 00 Zone de m moire morte inutilis e qui peut tre employ e si le BASIC est recopi en RAM 55 octets sont libres ROM 000 SYSTEME D EXPLOITATION KERNAL JSR E4DA EAEC JSR 500 JSR 505 ISR 50 ISR 518 74 Cette routine efface un octet de la RAM couleur F3 et F4 doivent contenir en entr e le pointeur vers la ligne cran de la RAM couleur Le registre Y doit contenir la position du caract re dans la ligne l octet en question est alors remis la couleur de fond 0 Table des valeurs sur 2 octets n cessaires pour programmer la minuterie RS 232 10 valeurs existent pour les vitesses de 50 75 110 134 5 150 300 600 1200 1800 et 2400 bauds Ces valeurs sont celles convenant aux 64 avec contr leur VIC II au standard PAL le mod le euro p en Cette routine charge dans les registres X et Y partie basse partie haute l adresse du CIA soit 0 00 Cette routine met dans le registre X le nombre de colonnes et dans le registre Y le nombre de lignes de l cran normal soit 40 et 25 Cette routine lit ou positionne le curseur en X Y dans l cran Si le flag C est 1 en entr e on lira la position du curseur verticale dans X de 0 24 horizon
52. 0 007063510 63201 SEENEN D ICUL 63509 Se RER ARR RUE 63506 ZO NEXIZF 6 63512 REM TOUCHE PRESSEE 63513 zt 63520 GETZA IFZA THEN 63520 CET LE PRINCIPALE 63254 Wi CERRAR 63526 63530 NEXTZS 63531 63533 REM CALCUL DE L ADRESSE DU 63534 REM TABLEAU SUIVANT 63535 202040 7121 63290 9251 AR 63544 REM SOUS PROGRAMME 63545 AFFICHACE DE CHAINE 63546 REMXXRRRR ERRERERARARARRRRREREERER 63547 p SEH 03219 FORZF ZET0ZE4Z G 1 PRINTOHRS PEEK ZF NEXT PRINT RETURN 3 27 3 63574 REM SOUS PROGRAMME 63575 REM AFFICHAGE DU NOM 63576 RE DE L ELEMENT 63577 REM eekdekkeieekdekdekekdekekekekck 63578 DU apego 63600 FORZE ZOTOISTEP 1 PRINTZP ZF C GAUCHE NEXT PRINT C GAUCHE T H READY LUTIN D monstration d une fa on simple de stocker des images de lutins en DATA et de programmer le VIC II pour les faire appara tre 10 PRINT JET LIB IANG ILOTTN SC PAR B MICHEL LE LIVRE DU 64 20 2721 40 REM COULEUR 8LANC 50 SCH NUMERO 0 7 60 BL 14 DANS BLOC 13 15 70 GOSUB 1000 REM PROGRAMME LE 50 2m 2000 REM DESSINNE LE LUTIN So ee 1000 PROGRAMME LE DANS LE 1140 53277 53277 REM REM EXP HORIZ 1150 POKE5327 1 PEEK 53271 OR 2 N REM EXP VERTIC 1160 53276
53. 000 000 000 699 REM DEFINITION LUTIN CASSETTES 700 REM fe dee e dee eee dede ede dede fe 701 000 032 000 000 096 028 056 702 DATA22 4 034 068 252 034 068 252 028 703 DATAO56 224 008 016 096 007 224 032 704 DATAOOO0 000 000 000 000 000 000 006 705 000 000 000 000 000 000 000 706 DATAOO0 032 000 000 048 02 8 056 090 707 DATAO34 068 252 034 068 252 028 056 708 DATAO5 6 008 016 048 007 224 032 000 799 REM DEFINITION LUTIN IMPRIMANTE 800 REM dee dede eee dede eee deed kde ede 801 DATAOOO 000 000 000 000 000 000 000 802 DATAO00 000 000 000 003 248 000 005 803 DATAO04 000 008 130 000 008 804 DATA063 131 000 049 004 128 041 252 805 DATAO64 036 000 032 034 000 016 017 806 DATA25 5 248 009 000 008 004 128 004 807 DATAOO2 128 004 001 064 002 000 255 808 DATA254 000 000 000 000 000 000 000 899 REM DEFINITION LUTIN POUBELLE 900 REMAR ee he ee ke dede dese fe e eee ee eee eee dede 901 DATAOOO 127 000 000 255 128 001 255 LE LIVRE DU 64 265 LE LIVRE DU 64 266 902 DATA128 001 255 000 000 254 000 000 903 DATA254 000 001 129 128 002 000 064 904 DATAO02 000 064 003 129 192 003 255 905 DATA192 003 255 192 003 255 192 003 906 DAT 255 192 003 255 192 003 255 192 907 DATAOO3 255 192 003 255 192 003 255 908 DATA192 001 255 240 000 126 048 000 913 REM DEFINITION L 91
54. 0r0 79 FOR 1 17 TO 38 6670 POKE ACT MI eg H NEXI 6673 PRIN PRINT 3 P KE A 39 4J 32 NEXI J 6690 REM INSERER COLONNE 6695 FOR J 0 TO 39 FORI 78 X4U 5 1 6700 A J WW PEEK A J NEXT I 6703 PRINT POK AC LA 32 NEXT J 6705 GOTO 10 6720 REM O SUPPRIME COLONNE 6725 FOR J 0 TO 39 FOR I X4U TO 78 6730 POKE A J ut HIH NEXT I 6733 PRINT POKE A JM79 32 NEXT J 6735 GOTO 10 6800 REM 1 9 DEPLACEMENTS CURSEUR 6810 X K A X Y 214 LE LIVRE DU 64 6820 IF X lt 0 THEN U U4X X O IF U lt 0 THEN U 0 6830 IF Y lt THEN V V Y Y 0 IF V lt THEN N 0 6840 IF X239 THEN 0 04 39 X 39 IF 0239 THEN U 39 6850 IF Y224 THEN V 43 24 Y 24 1F VOL5 THEN V 15 0922 GOTO 10 9000 REM AFFICHE COORD RECTANGLE 9005 I TROP PETIT EN Y GOTO9100 9006 2 1 lt 5 PETI TEN X G0TO9100 9010 PRINT PRINT X Y e X1 Y1 gt X2 12 9020 PRINT Les 0 OFF SI OK SINON KVS ON ESPACE RVS OFF 9030 GETA IFAS RETURN 9100 6 t RETURN 10000 LE SENS DU DEPLACEMENT EST DEFINI PAR 10020 LES TOUCHES CRSR LA DIRECTION EST 10030 MEMORISEE JUSQU AU CHANGEMENT SUIVANT 10040 LE PROG LANGAGE MACHINE RECOPIE LA 10050 PORTION ES IDOINE DANS LA ZONE ECRAN 10060 REMET A JOUR LA RAM ULEUR 28928 DATA173 134 002 162 000 Q0 137 00 0 216 28936 DATAL5 7 000 21 7 157 000 218 157 000 28944 DATA219 232
55. 13 221 41 16 201 16 208 247 169 0 133 144 238 89 206 17 3 89 206 201 7 2 48 221160 0 140 89 206 185 108 207 201 0 240 7 32 167 205 200 76 211 205 206 89 206 96 162 37 221 90 206 240 6 202 224 255 208 246 95 142 88 206 160 1 96 162 255 232 189 128 206 240 3 76 250 205 206 88 206 17 3 88 206 201 255 208 237 169 91 32 167 205 232 189 128 206 20 1 0 240 6 35 167 205 76 18 206 169 93 76 167 205 3215 243 240 3 7 6 1 247 32131 243 165 186 201 4 240 3 76 80 242 76 117 242 32 20 243 540 3 75 150 242 32 31 243 138 7 2 105 186 201 4 240 3 26 157 542 16 241 242 0 0 0 0 0 5 8 9 14 17 18 19 20 28 29 30 31142 144 145146 147 148 156 157 158 159 129 149 150 151 152 153 154 155 133 137 134 138 135 Q 6b 5 78 0 e RIS Mono sl 000 005 co ee w w w e www M oio ien E E BA DE rm Ei eech No np e wl ww e ww vw o LA sl n OO C ROLON SOS Nwy F yor Re wv AD m v Que wv tN oO vw hante 225 LE LIVRE DU 64 RAR RE ERR SERRES MEME 00002 0000 3 GESTION D IMPRIMANTE PARALLELE 00003 0000 00004 0000 3 SUR PORT UTILISATEUR POUR LE 00005 0000 00006 0000 64 INITIALISE PAR 00007 0000 00008 0000 SYS52525 00009 0000 00010 0000 LISTER EN UTILISAN
56. 224 000 208 239 096 169 28952 DATAO3 2 16 2 048 134 100 162 099 134 28960 DATA101 160 000 145 100 230 100 208 28968 DATA002 230 101 166 100 224 17 6 208 28976 DATA242 166 101 224 111 208 236 096 28977 REM CHECKSUM 7043 DE 28928 A 28983 29184 162 Ze 134 101 162 000 134 100 29192 DATA160 000 17 7 190 145 100 200 192 29200 DATAO40 208 247 032 027 114 144 240 29208 DATAO7 6 069 114 165 100 02 4 10 5 040 29216 DATA133 100 165 101 105 000 133 101 29224 DATA165 190 056 233 080 133 190 165 29232 DATA191 233 000 133 191 165 100 201 29240 DATA232 208 008 16 5 10 1 201 007 208 29248 DATAO02 056 096 025 096 169 005 162 29249 REM CHECKSUM 8443 DE 29184 A 20251 29256 DATAO34 157 000 216 232 224 040 208 29264 DATA248 152 152 14 2 03 4 004 23 2 142 29272 DATAO37 004 096 29273 REM CHECKSUM 9113 29200 29275 30000 DATA147 19 17 145 29 157 13 18 146 133 134 30010 DATAL37 138 140 135 139 136 20 148 95 55555 SAVE GO FIG RES 8 READY FILTRES Programme de d monstration des diff rents types de filtres du 510 Il y 1 possibilit de faire un balayage cyclique de 1 fr quence du filtre A ne pas couter si vous tes m lomane 10 REM FILTRES 30 PRINT NORMAL 1 35 PRINT FILTRE PASSE BAS 2 40 PRINT FILTRE PASSE HAUT 3 45 PRINT FILTRE PASSE BANDE 4 50 PRINT FILTRE REJECTION 5 55 PRINT FILTRE E 6 60
57. 3 THEN NE 110 PRINI J INT I 256 POKE 256 J 257 1 7 256 120 PRINT DELAI D ATTENTE SUIVANT LONGUEUR DU PROGRAMME A RECUPERER 130 PRINT POKE 46 256 47 PEEK 257 Hp OU AU MOINS CLR 800909 C EST 469 FRINT 4 CLOSEA CUPERE E 55555 SAVE 0 DE NEW 8 READY DE NEW AUTO Petit programme en langage machine charg par 16 lignes de BASIC Il se loge en 32768 32798 Apr s avoir redescendu le sommet de BASIC pour se prot ger ce qui diminue la zone BASIC de 8K il attend tranquillement que le bouton RESET soit enfonc Ce programme est la principale motivation de ceux qui prendront la peine d installer ce bouton 198 LE LIVRE DU 64 D s que le RESET a lieu le KERNAL teste l adresse 52768 pour y d tecter une ventuelle cartouche ROM DE NEW AUTO simule cette derni re s y m prendre pour un 6510 en tout cas Le KERNAL passe donc le contr le DE NEW AUTO qui r cup re le programme BASIC en m moire Pour essayer ex cutez DE NEW AUTO puis essayez de le lister c est impossible car il s est effac par le NEW de la ligne 30 Enfoncez RESET et tapez LIST le programme est de nouveau l Le revers de la m daille est malheureusement d sagr able La proc dure DE NEW AUTO ne r initialise pas toutes les variables en page 0 Si d s lors certaines de celles ci taient d truites par erreur elles ne seraient pas restaur es DE NEW AUTO fonction
58. 800 160 6 GOTO110 200 DATA25 4 28 4 25 4 25 4 25 2 28 210 DATA32 12 25 4 25 4 10 E 230 DATAZL 1 D 135 194 3 15 0 0 29 399 FOR TD 0TO70 D NEXT RETURN REM NORMAL 200 d FORT S TO S424 0 NEXT RETURN REM SILENCE 600 FOR 0 06 POKE 43 I5 RND 0 W ATN W REM ALEATOIRE 610 N NE XT RETURN 700 FOR TD O TO2 D REM INVERSIO 710 PORE 5 3 4 W ATN W FORESTA 11 W ATN W e NEXT TD 800 FOR K OTOD FOR TD OTOl5STEP2 REM BALAYAGE 810 POKE S 3 TD NEXT TD K RETURN 899 55555 SAVE GO BALAYAGE 8 READY BASIC FR Transformation de l interpr teur BASIC apr s recopie de la ROM RAM 11 faut taper RUN et attendre une bonne minute pour rendre actif BASIC FR De petits points appara ssent l cran chaque modification qui s effectue dans l interpr teur Le message PRET qui remplace le READY habituel vous signale que BASIC FR est actif Si STOP RESTORE d sactive BASIC FR on peut le r tablir par POKE 1 54 Essayez par exemple PRINT SQR 3 pour admirer un message d erreur en fran ais 190 LE LIVRE DU 64 6 REM BASIC FRANCAIS PAR RECOPIE 4 REM ET MODIFICATION DE LA ROM BASIC REM 10 FORI 40960TO49151 REM RECOPIE EN RAM 20 30 GOSUB 1000 REM MODIFIE LE BASIC A0 POKEl 54 END REM MISE EN SERVICE 999 REM Ae ededeseeesededededee dede Jede dese kk kkk RE kkkk 1000 REM MODIFIE LE BASIC 1010 41842 69 REM IN g
59. A OTHEN END 20 F INT A 038 2535 5 30 FH INT F 25 6 40 FL F FH 256 20 EINE F FL FH F FL FH 39538 S SAVE CALCUL SON 8 READY CENTRO BAS Programme permettant de tester la connection parall le 5 entre le port utilisateur et une imprimante Le brochage du c ble est indiqu en remarque dans le texte du programme Noter que les broches M du port utilisateur sont les connections inf rieures REM IMPRIMANTE PARALLELE SUR PORT UTILISATEUR POUR CBM 64 CE CABLE EST COMPATIBLE AVEC VIZAWRITE SSES PRINTER 64 55 244 84 44 EELER SEL Eeer BEBEBS E a z S c 3 B RT DATA 0 7 U PORT BERE 19 SE GOSUB 110 REM INITIALISATION 40 DT 20 AS A94CHRS L3 HES 10 10 E 0 LEN AS OSASC MIDS AS T 1 GOSUB 170 NEXT 90 1007 110 REM INITIALISE REGISTRES DU CIA 192 LE LIVRE DU 64 120 V 56576 REM ADRESSE DU CIA 2 130 POKE 3 255 POKE V L 0 REM PORT B EN SORTIE DONNEES 140 POKE V 2 PEEK V 2 JOR4 REM PORTA BIT2 EN SORTIE STROB 170 SEN CARACTERE CODE ASCII C 180 POKE V 1 C REM CARACTERE ENVOYER 190 SSsPEEK V REM ENVOI DE L IMPULSION STROBE SUR LE PORT A BIT 2 200 POKE y sS AND 251 210 POKE V 220 EE IFCO16 010220 REM ATTEND IMPULSION ACK 55555 SAVE CENTRO BAS 8 READY CLAVIER SONORE Petit programmme en langage machine qui se charge dans le tampon de cassette Il g
60. AND PLAY ON TAPE LOADING SAVING VERIFYING 1 2 5 4 5 6 7 8 9 Cette routine crit un message du KERNAL si l on est en mode direct entr e le num ro de 79 LE LIVRE DU 64 message doit tre dans le registre du 6510 ISR F12F Cette routine crit un message du KERNAL en mode direct ou en mode programme entr e le num ro de message doit tre dans le registre Y du 6510 ER F 13E Cette routine prends un caract re dans le p riph rique courant en entr e prise au vol comme avec un GET en BASIC ISR F157 Cette routine prends un caract re en entr e avec la gestion du RETURN effectu e comme dans un INPUT en BASIC JSR F199 Prise d un caract re dans le tampon de cassette JSR F1B5 Prise d un caract re sur le bus IEEE s rie JSR F1B8 Prise d un caract re sur l RS 232 258 F1CA Envoi d un caract re sur un p riph rique de sortie ISR F20E Cette routine tablit le num ro du p riph rique d entr e courant En entr e le registre X contient le num ro du fichier logique Si fichier n a pas t correctement ouvert 1 rou tine envoie le message FILE NOT OPEN ERROR JSR F250 Cette routine tablit le num ro du p riph rique de sortie courant Comme ci dessus le registre X contient le num ro du fichier logique De m me la routine renvoie le message d erreur si le fichier n a pas t correctement ouvert JSR F291 Fermeture d un fichier logique En entr
61. BASIC mais bien un de ceux que nous avons ajout au syst me nous ex cutons la t che appropri e Et le retour au BASIC normal ne se fait qu avec le premier caract re suivant la commande sp ciale La cartouche ARROW fonctionne suivant ce principe Les mots cl sp ciaux commencent tous par une fl che gauche ce qui rend le test ajout CHRGOT tr s simple et rapide Un autre exemple est le programme DOS SUPPORT qui reconnait les comman des simplifi es de la disquette Les programmes qui modifient CHRGOT sont appell s WEDGE en anglais LE CBM 64 DU POINT DE VUE DE L ELECTRONICIEN Le microprocesseur 6510 fait partie de la famille du 6502 et son fonctionnement est tout fait similaire Le rythme des op rations dans tout l ordinateur d pend d une horloge quartz de pr cision rigoureuse L horloge oscille la fr quence de 17 75 MHz 17 millions de fois par seconde pour les CBM 64 europ ens tandis qu aux U S A elle est de 14 51 MHz La raison en est que cette fr quence est n cessaire au fonctionnement des t l viseurs qui servent d cran l europe utilise le syst me PAL et les U S A le syst me NTSC Ces fr quences tant trop lev es pour le microprocesseur on les divise 18 en syst me PAL et par 14 en syst me NTSC qui nous donne les fr quences de fonctionnement de 1 0227 MHz aux U S A contre 0 985 MHz en europe 15 LE LIVRE DU 64 La diff rence de vitesse de 4 entre les deu
62. CLR et HOME fonctionnent galement La fonction CLR efface l cran mais commme il s agit d un programme BASIC le temps d ex cution est de l ordre de 60 secondes Les touches de fonction modifient le type de curseur Fl crayon avec pointe F2 crayon sans pointe F3 gomme F4 curseur invisible Le dessin est en noir et blanc avec une r solution de 320 200 0 M PROGRAMME DE DESSIN POUR 64 2 REM ECRAN DE X POINTS HORIZONTAUX 3 REM ET Y POINTS VERTICAUX 5 BEM HR RIRE RIRE Are RIRE 6 REM REM HAUTE RESOLUTION MONOCHROME 9 REM s STARS CE HU REA ERE ERES 10 1l 12 13 20 PRINT INSTANT S V P REM EFFACE L ECRAN 30 34 320 m UB 1000 65 POKE 53265 53265 08 32 MODE BIT MAP 67 HO 8192 PORE 5327 2 PE K 53272 08 8 BEN ADRESSE BIT MAP 70 FOR 0 TO 7999 P KE HO4C 0 NEXIC REM EFFACE L ECRAN 80 FOR 0 TO 999 POKECO4C 1 NEXTC REM NOIR SUR BLANC 90 X XM 2 Y YM 2 BIC 95 A GOTO 120 99 E TR SERRE m REM BOUCLE PRINCIPALE 0 GE 111 nm 120 IF AS HOME THEN 0 0 CURSEUR 130 IF A CLR GOTO 70 REM EFFACE ECRAN 140 IF AS C G UCHE THEN X X l REM CURSEUR A GAUCHE 150 IF A C DROITE THEN X X 1 REM CURSEUR DROITE 160 IF A C HAUT Y X l CURSEUR EN HAUT 170 IF C BAS THEN Y y41 CURSEUR EN BAS 180 IF 133 THEN BIC l REM Fl SORT LA PLUME 185 IF 134 THEN 2 REM RENTRE LA PLU
63. ERREUR INSTRUCTION NEXT NON PRECEDEE DE FOR 10110 DATA ERREUR DE SYNTAXE 10120 DATA ERREUR INSTRUCTION RETURN NON PRECEDEE DE GOSUB 10130 DATA ERREUR PLUS DE DONNEES 10140 DATA ERREUR VALEUR NON AUTORISEE 10150 DATA ERREUR DE DEBORDFMENT 10160 DATA ERREUR PLUS DE MEMOIRE LIBRE 10170 DATA ERREUR NUMERO DE LIGNE INEXISTANT 10180 DATA ERREUR INDICE NON VALABILE 10190 DATA ERREUR TABLEAU REDIMENSIONNE 10200 DATA ERREUR DIVISION PAR ZERO 10210 DATA ERREUR INTERDIT EN MODE DIRECT 10220 DATA ERREUR TYPE NON CONCORDANT 10230 DATA ERREUR CHAINE DE CARACTERE TROP LONGUE 10240 DATA ERREUR DE DONNEE DANS LE FICHIER 10250 DATA ERREUR FORMULE TROP COMPLEXE 10260 DATA IMPOSSIBLE DE CONTINUER APRES CE TYPE D ERREUR 10270 DATA ERREUR FONCTION NON DEFINIE 10280 DATA ERREUR VERIFICATION INCORRECTE 10290 DATA ERREUR DE CHARGEMENT 10300 DATA ARRET PROVOQUE REM UN ESPACE A LA FIN 55555 SAVE BASIC FR READY 191 LE LIVRE DU 64 CALCUL SON Ce programme calcule les valeurs crire dans les registres du SID en fonction de la fr quence d sir e Le r sultat affich est donn sous la forme valeur partie basse partie haute en d cimal les fr quences sup rieures 3848 HZ ne peuvent pas tre utilis es Entrer la valeur 0 pour sortir du programme 5 REM CALCUL LES VALEURS HAUTE ET BASSE 6 REM A ECRIRE DANS LES REGISTRES DE REM FR QUENCE DU CBM 64 EUROPEEN 5 10 INPUT FR QUENCE
64. En entr e les ad resses AC et AD contiennent partie basse par tie haute l adresse de la ligne cran source D1 et D2 1 adresse de la ligne destination AE et AF l adresse de la ligne couleur source F5 et F4 l adresse de la ligne couleur destination Cette r utine calcule l adresse d une ligne cran En entr e le registre X contient le num ro de 1 ligne cran et le pointeur en 0288 contient le num ro de la page cran adresse 256 En sortie le r sultat est en D1 et D2 partie basse partie haute et ainsi pr t pour la routine ci dessus Cette routine efface la ligne cran dont le num ro est dans le registre X L appel en BASIC peut s effectuer par 781 11 SYS 59903 Ceci est tr s pratique dans les programmes qui r alisent des saisies de don es l cran Cette routine crit un caract re l endroit du curseur sur l cran En entr e le code du caract re doit tre dans l accumulateur A et la couleur de trac dans le registre X Elle ne d place pas le curseur mais transf re directement la valeur de l accumulateur dans l cran comme le POKE du BASIC et non comme le PRINT L acc s en BASIC se fait par POKE 780 car POKE 781 couleur SYS 59932 Cette routine tablit l adresse de la ligne de RAM couleur correspondant la ligne cran courante En entr e l adresse de la ligne cran doit tre en 01 et 02 partie basse partie haute sortie l adresse
65. KERNAL 60 LE LIVRE DU 64 Les routines d crites ci dessous sont pr c d es de leur adresse donn e en HEXADECIMAL car elles ne sont la plupart du temps utilisables qu en assembleur La conversion de ces adresses en d cimal pourra s effectuer l aide du programme HEXA en an PAGE ZERO ROUTINE CHRGOT JSR 0073 ou JSR CHRGOT Appel de la routine de lecture du 0073 CHRGOT 0075 0077 0079 POINTEUR 007C 007E 0080 0082 0084 0085 0087 0088 008A FIN caract re courant dans le texte BASIC Cette routine incr mente le pointeur de caract re 007A et 007B dans le corps de la routine elle m me JSR 0079 ou JSR CHRI Appel de la m me routine sans incr mentation du pointeur de carac t res INC POINTEUR METS A JOUR LE POINTEUR DE BNE CHRI CARACTERES POINTEUR I LDA xxxx PRENDS LE CARACTERE 007A CMP 5A 3TESTE SI CARACTERE gt 9 BCS FIN CMP 20 3 IGNORE TOUS LES BLANCS BEQ CHRGOT SEC TESTE SI CARACTERE lt 0 SBC 30 5 SBS D0 RESTAURE LE CARACTERE LU RTS SA VALEUR DANS A Noter l astuce VALEUR 20 30 D0 VALEUR Un appel par JSR 0073 incr mente Le pointeur de l interpr teur BASIC et mets le caract re dans l accumulateur du 6510 sortie le flag CARRY flag C vaut 1 si le caract re est un chiffre le flag ZERO flag 2 vaut 1 si le caract re est un 00 Le pointeur de caract re
66. L ADRESSE 00048 107 DO 02 BNE 2 00049 109 63 INC 565 00050 CIO 65 P K2 LDX 63 COMPARE AVEC L ADRESSE DE EIN 00051 CID 65 65 00052 CI DO 04 BNE PCKRTS 00053 111 A6 62 LDX 62 00054 C113 E4 64 CPX 64 00055 115 60 FOKRTS RTS CODE ECRAN Petite routine qui boucle pour vous afficher en permanence le code ASCII et le code d une touche frapp e au clavier Les caract res qu on ne peut afficher par donnent le code cran 32 espace Pour sortir du programme taper RETURN 194 LE LIVRE DU 64 5 CODE ECRAN 6 REM 7 REM AFFICHE UN CARACTERE SON CODE ASCII 8 REM SON CODE ECRAN POUR 10 6o FORI 67910730 READA POKEI A CS CS4A 20 ICS lt 2766 STHENSTOP SYS 679 DATA 32 228 255 240 251 170 201 13 687 DATA 208 1 96 169 147 32 210 255 695 DATA 169 255 133 212 138 32 210 255 703 DATA 169 32 32 210 255 169 0 32 711 DATA 205 189 109 32 32 210 255 169 719 DATA 0 133 21 2 17 4 0 4 32 205 727 DATA 189 232 208 204 55554 END I 55555 SAVE O CODE ECRAN 8 READY COPIE CARA BAS Recopie du g n rateur de caract res de ROM en RAM Les param tres RAM ROM sont les adresses de destination et de d but du d placement MAX est la taille du bloc recopier Ces param tres sont bien s r modifiables volont 10 20000 ROM 53248 MAX 1 6 20 POKE 56334 PEEK 56334 AND254 30 1 1 JAND251
67. LIGNE 63675 63682 REA HR 63683 REM DEBUT DE BOUCLE PRINCIPALE 63684 KREE SE 63685 SS FORI CAD45 TO SAD 2 63693 REM SAISIE DU CARACTERE DANS LA 63694 REM LIGNE BASIC 63696 63700 CHAR PEEK 1 63703 REM TEST DE GUILLEMETS OUVRANTS 63704 REM ASC 34 CODE DES GUILLEMETS 63705 REM QUOTE O ENTRE GUILLEMETS 63706 R REM QUOTE 1 HORS GUILLEMETS 63710 IF IF CHAR 34 AND QUOTE O THEN QUOTE 1 GOTO 63730 63713 R REM TEST DE GUILLEMETS FERMANTS 63720 1 IF CHAR 34 AND QUOTE L THEN QUOTE O 63723 REM SI HORS GUILLEMETS ET 63724 REM 127 lt CODE ASCII lt 204 63723 R REM ALORS MOT CLEF BASIC 63730 1 IF QUOTE 0 AND CHAR gt 127 AND CHAR 204 THEN 63800 63733 REM SI HORS GUILLEMETS 63 34 REM IMPRIME CARACTERE TEL QUEL 63740 IF QUOTE O THEN PRINTCHRS CHAR 63743 REM SI ENTRE GUILLEMETS APPEL 63744 REM AU SOUS PROGRAMME GUILLEMETS 6 63750 IF QUOTE L THEN GOSUB 63900 63753 REM kkkkk kkkkkkkkkkkkkkkkkkkkkkk 63754 FIN DE LA BOULE PRINCIPALE 63755 63760 I 63763 REM APRES SORTIE DE LA BOUCLE 63764 REM PRINCIPALE RETOUR A LA LIGNE 63765 POUR LA LI NE SUIVANTE 63770 PRINT 63773 REM REMISE A JOUR DE L ADRESSE 63774 REM DEBUT DE LIGNE 259 LE LIVRE DU 64 63776 63780 CAD SAD 1 63781 63782 REM kkkkkkkkkkkkkkkkkkkkkkkkkkkkk 63783 REM FIN DU PROGRAMME 63784 REMXKRRRRRERAR RERRRRRRR KE kk kkk k 63786 931
68. LISTE DES VARIABLES EMPLOYEES DANS LE PROGRAMME 2005 REM SP NUMERO DU LUTIN 2006 xr PERMET DE SAVOIR SI L ON SE TROUVE DANS LA BOUCLE PRINC 2008 REM PE DE VALEUR DU CARACTERE SOUS CURSEUR 2009 REM XA YA POSITION DU LUTIN 2010 REM DS PERMET DE SAVOIR SI L ON SE TROUVE DANS 2011 REM LA PARTIE DESSIN OU DANS LE MENU 2028 REM MISE A JOUR DES VARIABLES 2030 FOR 1 0 TO 10 READ PX I PY I 2040 NEXT I 2050 FOR I 0 TO 15 READ BI I NEXT I EE SP 5 2066 REM DEBUT DE LA BOUCLE PRINCIPALE 2068 REM APPEL ENTREE MOUVEMENT 2070 IF 10 THEN 20210 REM LOAD 2071 GOSUR 1514 2073 REM TEST CTRL POUR OOPS 2074 IF PEEK 653 4 THEN SYS 51203 2078 REM VALEUR DU CARACTERE SOUS CURSEUR 2080 PE PEEK ECHEY 40 1 2087 TEST SI DESSIN OU OPTION GE REM SI OUI APPEL DEFINITION LUTIN 2020 D lt 210 THEN DS 1 GOSUB 15020 GOTO 2070 2092 REM SAUVETAGE DE L ECRAN 2093 SYS 51200 6 2097 REM TRAITEMENT DU CAS PARTICULIER 2098 REM CARACTERE PLEIN lt gt DU FOND 2100 IF XA 328 AND YA 226 THEN 2110 2102 REM TEST SI FOND 2105 IF 30 AND THEN 2070 2108 REM SI OPTION APPEL OPTIONS 2110 1 IF lt 88 THEN GOSUB 14012 GOTO 2070 2118 REM TEST DE CHOIX DE COULEUR 2120 IF PE gt 61 THEN GOSUB 16013 GOTO 2070 2128 REM APPEL DEFINITION LUTIN 2130 DEsPE DS 0 GOSUB 15020 2138 REM FIN DE LA BOUCLE PRINCIPALE 2140 GOTO 2070 10000 REMA kkkkkkkkkkkkkkkkkkkkkkkkkkkk 10001 REM SOUS ROUTINE PAGE DEMO 10002 REMY
69. NLIN Y 300 BEQ ENDDIT JR DIAL iNY MP DIAL2 ENDDI1 DEC NCAR ENDD12 RTS D 3ENVOI UNE CHAINE PAR DIALI OU UN CARACTERE 3SEUL AVEC DIAL SEUL DIAL TOTALISE LE DE CARACTERE SA IGNE 3S1 RETOUR CHARIOT 3L ENVOYER REMET A ZERO LE COMPTEUR DE CARACTERES 3QUAND ON VA A LIGNE 3SUIVI DE AVANCE PAPIER ECRIRE LE CARACTERE ENVOYER METTRE ZERO LE BIT 2 DU PORT A REMETTRE A UN LE BIT 2 DU PORT A LIRE LE BIT 4 DU REGISTRE JET ATTENDRE QU IL PASSE A UN 3CE QUI SIGNIFIE ACK RECU REMISE A ZERO DU ST STATUS 351 TRANSMISSION SANS ERREUR 3COMPTE LE NOMBRE DE CARACTERES DANS LA LIGNE 51 FIN DE LIGNE REMETTRE LE OOMPTEUR DE CARACTERES ZERO 3ENVOI DU DEBUT DE LA LIGNE SUITE POUR COMPENSER LE RETOUR CHARIOT IHHHHBUOHHPHHOHHHOHOHHHHHHHOEOHHHPHHHHHHHHHHHBEHHHHHHBHHHNHNC D CONVER LDX TABLEN DESCH OMP TABLE X BEQ FOUND DEX FF 3CODE TROUVE X POSITION DU CODE DANS LA TABLE 227 LE LIVRE DU 64 00146 00147 00148 00149 00150 00151 00152 00153 00154 0015 00156 00157 00158 00159 00160 00161 00162 00165 00164 00165 00166 00167 00168 00169 00170 00171 00172 00175 00174 00175 00176 00177 00178 00179 00180 00181 00182 00185 00184 00185 00186 00187 00188 00189 00190 00191 00192 00195 00194 00195 001 00197 00198 0019 00200 00201 00202 00205 00204 00205 00206 00207 00208 00209 00210 00211 00212 00213 00214 002
70. OFF 299 300 m 2 3 SE OERS TIB ms 160 303 5 554212 EE SA 30 306 E EE LOS CHRS 14 280 LE LIVRE DU 64 307 310 POKE212 0 cris A GETBS 315 IFAS BE 970500 320 IFBS FISTHEN PRINT JAUNE L J CLR A A FRE 0 0070310 330 IFBSQ THEN PRINT 5 89 335 IFAS LOS 6070310 340 PRINT C GAUCHE C GAUCHE A GOTO310 500 REM MUSIQUE POUR BELL 510 POKE Stl 44 POKES 4 17 520 POKES 44 16 FORI 0TO100 NEXT 530 S 1 1 0 GOTO310 3000 DATA32992 048 048 024 12 06 003 003 0 REM BACKSLASH 3100 DATA3301 6 000 000 000 00 00 12 7 12 7 0 REM UNDERSCORE 3200 DATA33280 012 012 006 00 00 000 000 0 REM BACK QUOTE 3300 DATA33496 006 012 012 24 12 012 006 0 REM ACCOL ADE 3400 DATA33504 012 012 012 00 12 012 012 O REM VERTICAL BAR 3500 DATA3351 2 02 4 01 2 01 2 06 1 2 01 2 02 4 0 ACCOLIADE EE gt READY TOUCHE PROG Programmation des touches fonctions 4 fonctions par touche normal shift logo et CTRL Les cha nes de caract res affect es aux touches ne peuvent exc der 8 caract res La remplace le RETURN dans les cha nes Celles ci sont accessibles dans les lignes DATA en 1000 1030 L ordre F5 F1 F3 F7 des touches est n cessaire pour simplifier la routine d interruption qui g re ceci Cette routine occupe les adresses 00 CDAO et peut tre relanc e par SYS 52224 apr s un STOP RESTORE ou RESET REN
71. Or un microprocesseur classique comme le 6510 qui quipe le CBM 64 n adresse que 64 K octets simultan ment Comment proc de t il alors La solution du probl me passe par l emploi d une s rie d interrupteurs command s par le micro processeur et qui mettent en service tour tour l une ou l au tre m moire Nous allons th oriquement du moins construire un CBM 64 Prenons huit circuits 4164 Ce sont des m moires de 65536 x 1 bit Mises en parall le elles nous donnent 64 K octets de m moire 1 K 2 la puissance 10 soit 1024 octets Ajoutons un microprocesseur 6510 un contr leur d cran VIC II et une m moire morte ROM de 4 K octets qui contient le g n ra teur de caract res Cette derni re m moire ne contient donc pas un programme mais bien le dessin de chacun des 512 caract res diff rents possibles l usage du contr leur d cran Couche E S AUR Couche Couche A 0000 000 C000 D000 E000 En l tat actuel notre 64 poss de aucun programme en m moire et aucun moyen d en transf rer un depuis une source ext rieure Les p riph riques qui permettront la communication avec le monde ext rieur nous allons tout simplement les d poser par dessus la m moire RAM De fa on ce que le microprocesseur regardant par au dessus son espace m moire voit les p riph ri ques et non plus la m moire cet endroit Ici nous faison
72. POKE 5 1 4 REM FIXE POKE S 15 128 GOTO300 REM PROP AU VOLUME POKES H 8 17 FOR 0105 5 14 14 PEEK S 28 4 NEXT RE REM FIN PROP AU VOLUME FOKES 18 16 GOTO 820 FOR T S TO S424 POKE T 0 NEXT RETURN 55 SAVE Q0 ANNEAU 8 READY 185 LE LIVRE DU 64 APPENDISK Concat ne deux programmes sauv s sur disque bout bout Attention la num rotation des programmes doit tre pr vue en cons quence R pondre Successivement aux questions premier programme deuxi me programme et programme destination Attention ce dernier existe d j il sera cras par le nouveau programme cr par APPENDISK 186 L op ration peut tre ex cut e plusieurs fois 10 PRINT Walen DE PROGRAMMES 150 PRINT PROGRAMME d EH Z A 160 PRINT C BAS NOM 2 PROGRAMME 170 OPEN15 8 15 GEN Il OPEN 5 8 5 A P R 190 COSUB370 210 PRINT C BAS NOM PROGRAMME DESTINATION INPUTCS 220 OPEN6 8 6 CBE P W 230 GOSUB 370 240 5 D IFSTCOTHEN 280 250 IrDS 0 260 IFFTHENPRINTY6 E 270 Fe 1 E D GOTO2 280 CLOSE5 OPEN5 8 5 BS P R 300 GOSUB370 310 GET 5 AS 5 320 GET 5 05 330 Get emt 340 PRINTH6 D 350 IFT OTH 351 PRINT C BAS g as BAS TIG 345 356 PRINTZS c 359 FORTD 1T0500 NEXT 360 CLOSE 5 CLOSE 6 CLOSEL 5 GOTO1000 361 REMA k kk 370 INPUT 15 ER ERS ET ES 380 TFEROOTHEN 59
73. PRINT INPUT 1 2 3 4 5 00 O FIN B 61 IF 0 THE 65 PRINT INPUT GI ON 5 66 1 6 1 IFA THE 70 5 54272 GOSUB 500 VA AR 16 DEARH 80 7 16 5 58 12 16 3 POKE S 24 VL 90 ON B GOSUB 1100 1200 1300 150 T500 1600 1100 110 RESTORE POKE SL5 AD POKE S 6 SR 120 READ N D IF N OTHEN COSUB 200 RUN 215 LE LIVRE DU 64 125 POKE S 1 N POKES 4 DE 130 ON GOSUB 600 700 140 PORES 4 AR 150 ON C GOSUB 600 700 550 GN 28 4 25 4 25 4 25 2 28 2 DAT e 5 5 500 FOR T 5 5424 k b NE XE RE RETURN 509 FOR 10 07050 NEXT RETURN 5 REM BALAYAGE FREQUENCE DE FILTRAGE 710 FOR 01020 720 IFF gt L5S9THENF 1 16 730 IF BOTHENFl 16 740 F F4F1 780 S422 F 790 NEXT 799 RETURN 1100 POKE 424 VL 2 REM VOLUME MOYEN 1199 RETURN 1200 REM INIT PASSE BAS 1210 POKE S42A4 VL L6 REM PASSE BAS 1220 POKE S423 15 16 1 REM RESONANCE FORTE VOIX 1 1230 POKE S422 4O REM FREQUENCE 1299 RETURN 1300 REM INIT PASSE HAUT 1310 POKE S42A VLF64 REM PASSE HAUT 1320 POKE S423 15 16 L REM RESONANCE FORTE VOIX 1 1330 POKE 9422 60 REM FR QUENCE 1399 RETURN 1400 REM INIT PASSE BANDE 1410 POKE S424 VL432 REM PASSE BANDE 1420 POKE 9423 15 16 H REM RESONANCE FORTE VOIX 1 1430 POKE S422 60 FREQUENCE 1499 RETURN 1500 REM INIT REJECTION 1510 POKE S424 VLTl6t64 REM REJECTION 1520 POKE 5 23 15 16 1 RESONANCE FORTE VOIX 1 1530 POKE 9 22 50
74. PRINT 4 2030 IFC 4THENPRINT 4 NOTE FREQUENCE 2040 TFC 4THENPRINT 4 F FL FH RINT 4 Ce 10000 DATA DO 0 RE RE FA FA 10010 DATA SOL SOL LA IA SI 55555 SAVE 0 FREQUENCES 8 READY GLITCH Ce programme montre la diff rence entre un simple changement de couleur de fond de l cran et la m thode plus sophistiqu e ou l on attend la fin d un balayage d image pour changer de couleur Le GLITCH en anglais est le parasite le d faut de l image que l on observe lors d un changement de couleur non synchronis 1 REM CHANGEMENT DE COULEUR ECRAN 2 REM AVEC SYNCHRONISATION SUR LE 3 REM BALAYAGE DE L IMAGE 5 POKE53281 6 6 GOSUB600 8 PRINI CIR BIANC io PRINT HOME SYNCHRO FOR 47015 20 POKE 81 1 9 15679 30 FOR TD lTO100 NEXI TD 40 GETAS IFAS THEN NEXT I GOTO 10 20 15 100 REM MODE NORMAL POUR COMPARER 110 PRINT HOME INORMAL FORI 41015 120 POKE 53281 130 FOR TD ITOLOO NEXT GETAS IFAS THEN NEXT L GOTO 110 150 1 15 217 LE LIVRE DU 64 199 0070 5 600 DEM CHARGE LE SYNCHRONISATEUR 610 RESTORE CS 0 FORI 67 970698 0 READ A POKEI A CS CSHA NEXT I 630 5 lt gt 27677 STOP 679 DATA120 173 017 208 041 128 208 249 687 DATAL7 3 017 208 04 1 128 240 249 142 695 DATAO33 208 088 696 REM CH CHECKSUM 2767 DE 679 698 700 REM ON PEUT SYNCHRONISER L ECRITURE 701 REM DANS N IMPORTE QUEL REGISTRE 702 REM AVEC LE BALA
75. RECOPIE Ce programme de recopie d cran en mode 1 n accepte ni les minuscules ni les inverses mais voyez sa longueur 2 RECOPIE D ECRAN NORMAL 30 OPEN3 3 OPENA 4 PRINT HOME 7 FOR 1 070999 9 AS PRINT 4 AS NEXT L CLOSE 3 CLOSE 4 END 55555 0 RECOPIE 8 READY REORG Ce programme trie le catalogue d une disquette ins r e dans le lecteur 1541 par ordre alphab tiqque vous N essayez ce programme que sur une copie de test avant de y fier Une faute de frappe pourrait tre fatale la m thode de tri utilis e est le tri bulle BUBBLE SORT 20 REM PAR THIERRY SALOME 98 IFPEEK 2 OTHENPOKE2 8 99 DIMTS 224 TTS 28 T 28 Q CHRS 34 110 PRINT CLR TRIE LE CATALOGUE DU DISQUE 130 NP 8 DR 0O 300 PRINT C BAS JENTREZ LA DISQUETTE 320 198 0 PRINT ET POUSSER ENTER 330 WAIT198 1 GETAS CH 4 T218 521 CP O 1000 OPEN1 5 8 15 10 OPEN4 8 4 i 1015 PRINT cin CATALOGUE 1020 PRINT 15 Ul A 0 T S PRINT L5 B P 4 0 GET A C19 C2 1050 NT ASC ClS CHRS 0 E 1055 T NT S NS TTS CP 8 CHRS NT TS CP 8 CHRS NS 1060 FORI 1T08 Z 2 FORJ 1T030 1090 Das ASC CHCHRS 0 2 6 HR H 1100 SRE LD OA I4CP Z PRINT C DROITE Q MIDS Z 4 1110 T I4CP 1120 GET A COS CLS NEXTI 1130 IFNT lt SOTH NCP CP 8 GOTO1020 1131 MX CPH A TEMX OTHENPRINT CIR REPERTOIRE VIDE GOT01290 1132 1 1
76. ROUGE C VERT L ROUGE 44 A CH VERT L AS ASILI EE 46 8 123 FAUNE 77 ROUGE JUUUU JAUNE Sn o n EE 48 A CL G JAUNE au ROUGE JAUNE ROUGE Mag Ur IM Lg E JAUNE ROUGE 1 JAUNE ROUGE 2 JAUNE ROUGE 3 JAUNE ROUGE AUNE GE 50 5 16 ROUGE JUUUU JAUNE 30 pur ji JAUNE 72 ROUGE JUUUO JAUNE 52 AS 18 JAUNE MM 29 AS 19 JAUNE 4 RAM 55 REM CREATION DES ROUTINE EN L M 3 GOSUB 30010 58 REM INITIALISATION DU PROCRAMME GE GOSUB 1010 0 61 REM DEBUT DU PROGRAMME 22 4 GOTO 2030 64 REM DATA POUR ROUTINE POIGNEES 65 DATA162 001 120 173 002 220 141 231 66 DATAO02 169 192 141 002 220 169 128 67 DATAL4 1 000 220 160 128 234 136 016 68 DATA252 173 025 212 157 232 002 173 0 We d Kr VERT L ROUGE O 265 LE LIVRE DU 64 264 100 DATAO26 21 2 157 234 002 17 3 000 220 DATAOO9 128 141 236 002 169 06 202 SE DATA POUR ROUTINE S UVE ECR N DATAO76 006 200 076 015 200 169 076 DATAL33 106 169 200 076 02 1 200 169 DATA100 133 106 169 200 120 133 107 DATA162 000 160 000 17 7 106 133 095 DATA200 177 106 133 096 200 177 106 DATA133 090 200 17 7 106 133 09 1 200 DATA 177 106 133 088 200 177 106 133 DATAO8 9 200 138 07 2 152 07 2 032 191 DATA163 104 168 104 170 232 224 004 DATA208 210 088 096 000 196
77. SOUS ROUTINE PROG MEMOIRE 19802 REMk kkkkkkkkkkkkkkkkkkkkkkkkkkkik 19804 REM VARIABLES EMPLOYEES DANS IA SOUS ROUTINE 19805 REM GX GY COORDONNEES DANS LA GRILLE 19806 REM ER YA COORDONNEES DU LUTIN 19807 REM CARACTERE A PROGRAMMER 19809 REM ADRESSE DE LA RAM CARACTERE 12515 REM TEST A PROGRAMMER 19812 REM INDICE HORIZONTAL 1954 7 XA 46 amp LE LIVRE DU 64 19818 REM INDICE ERTIGA 1052726 GY YA 216 4 19828 REM CALCUL DE L OCTET A PROGRAMMER 19830 PK CA 8 CP4GY 19838 REM TEST BIT A PROGRAMMER 19640 TEST PEEK PK AND 2 GX 19848 REM SI BIT 0 ALORS BIT l 19850 IF TEST O THEN POKE PK PEEK PK OR 2 GX 19858 REM SI BIT l ALORS BIT 12500 1 IF TEST THEN POKE PK PEEK PK AND 255 2 GX 19868 REM APPEL PROGRAMMATION GRILLE 19870 GOSUB 19621 RETURN 20000 REMA 20001 REM SOUS ROUTINE SAVE IMAGE 59800 20002 BEN kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk 20009 REM APPEL ECRAN NORMAL 20010 4 GOSUB 20510 20012 REM OPTION DISQUE OU CASSETTE 20013 PRINT C BAS JDISQUE OU CASSETTE POKE 198 0 20014 GET AS IF A THEN 20014 20015 IF AS C THEN DV l 20016 DV 8 IF ASQ D THEN20013 20017 F POKE 1020 DV 20019 REM SAWE LES POINTEURS DE BASIC 22 FOR I 0 TO 7 POK 51456 1 PEEK 4341 NEXT I 20029 REM AJUSTE LES POINTEURS POUR SAUVER LE DESSIN 20030 POKE 43 0 POKE 44 152 PORE 45 128 POKE 46 159 POKE 47 128 20040 E 48 159
78. THEN PAGE 0 GOSUB 13010 GOTO 14150 14018 REM APPEL MENU PAG 1 14020 IF XA 24 AND YA 242 THEN 1 GOSUB 13010 14150 14028 REM APPEL EFFACE ECRAN 14030 IF XA 56 AND YA 226 THEN GOSUB 11010 GOTO 14150 14040 IF XA 56 AND YA 234 THEN GOSUB 11010 GOTO 14150 14050 IF XA 56 AND 242 THEN GOSUB 11010 GOTO 14150 14058 REM APPEL OPTION ENTREES SORTIES 14060 IF 40 AND YA 234 OR 0 THEN GOSUB 17020 14150 14070 IF XA 32 AND YA 234 OR YA 242 THEN GOSUB 17020 GOTO 14150 14078 REM TEST CHOIX DES FONDS 14080 IF gt 218 THEN 14150 14088 REM TEST SI PROGRAMATION OU CHOIX DU FOND 14090 IF YA 210 THEN 1 14100 Ir YA 218 THEN 0 14110 IF XA 24 THEN FO 0 GOS 18013 GOTO 14150 14118 REM APPEL FOND AVEC FO 1 14120 IF XA 40 THEN FO 1 GOSUB 18013 GOTO 14150 14128 REM APPEL FOND AVEC FO 2 14130 IF XA 56 THEN FO 2 GOSUB 18013 GOTO 14150 14138 REM APPEL FOND AVEC FO 3 IF XA 72 THEN FO 3 GOSUB 18013 15500 RETURN MEER 13001 REM SOUS ROUTINE DEF LUTIN 15002 BEN kde de A RIRE e eee ee ede 15004 REM VARIABLES UTILISEES DANS LA SOUS ROUTINE 15005 REM EY COORDONNEES DU CARACTERE SOUS CURSEUR 15006 REM DS PERMET DE SAVOIR SI L ON EST DANS 15007 REM LE MENU OU DANS LE DESSIN 15008 REM DE CARACTERE SOUS CURSEUR 15009 REM FO FOND UTILISE 15010 REM CC COULEUR COURANTE 15011 REM CA ADRESSE RAM CARACTERES 15012 REM EC ADRESSE RAM ECRAN 15013 1 REM CO ADRESS
79. TOUCHES PROGRAMMABLES POUR 64 12 REM 4 FONCTIONS PAR TOUCHE 13 REM RM NORMAL SHIFT 1060 CTRL 20 BU 52480 FOR I OTO15 READ AS 30 L LEN Dun IF L gt LOTHEN STOP 40 FORJ IF J gt LTHEN 0 60 50 BUHE J 1 1 IR THEN P 13 s0 POKE SDV P NEXT J I 5 igne CURE TOUSE EROS LANG ote x A 90 5 lt 214456 STOP on SYS 52224 999 REM DONNEES POUR TOUCHES PROGRAMMABLES 1000 teen a EAN RUSSSDON HUET REM Fl A F7 1010 FON EA MCN F REM F2 F8 1020 DATA C F5 G ME C F7V REM AVEC 1060 1030 DATA CEV Ed SE AVEC CRD 040 REM TOUJOURS DANS L ORDRE es F1 F3 F7 1050 REM LIVRE SIGNIFIE RETURN QU CHR 13 281 LE LIVRE DU 64 1060 REM EX ON A PROGRAMME F7 AVEC LIST 1070 REM Fl AVEC RUN 55555 1999 REM PARTIE LANGAGE MACHINE EN CCOO CDAO 52224 DATA 120 169 13 141 20 3 169 204 52232 DATA 141 21 5 85 96 72 138 72 52240 DATA 152 72 165 197 197 251 208 8 52248 DATA 104 168 104 170 104 76 49 234 52256 DATA 133 25 1 17 3 14 1 2 201 4 240 52264 DATA 23 201 2 240 14 201 1 240 52272 DATA 5 162 0 7 6 66 204 10 2 32 52280 DATA 75 66 204 162 64 76 66 204 52288 DATA 162 96 160 6 132 254 165 197 52296 DATA 197 254 240 13 138 24 105 8 52304 DATA 170 136 192 2 208 238 7 6 24 52312 DATA 204 138 133 252 109 205 133 253 52320 DATA 160 0 17 7 252 153
80. VARIABLES UTILISEES DANS LA SOUS ROUTINE 17005 REM PG RMET DE SAVOIR SI L ON SE TROUVE DANS 17006 REM LA BOUCLE PRINCIPALE 17007 REM SP NUMERO DU LUTIN 17008 REM XA YA COORDONNEES D ARRIVEE DU LUTIN 17009 R REM PAGE CHOIX DU MENU 17011 REM er EN PLACE DES LUTINS 17020 5 1 24 186 GOSUB 12510 17030 5 2 XA 48 YA 186 GOSUB 12510 17040 SP 3 72 YA 186 GOSUB 12510 17030 SP 5 XA 56 YA 194 GOSUB 12510 17056 REM DEBUT DE LA BOUCLE DE TEST 17058 REM APPEL ENTREE MOUVEMENT 17060 GOSUB 1514 17067 17068 APPEL MENU PAG 0 17949 IF XA 24 AND YA 186 THEN PA 0 GOSUB 13010 GOTO 17130 17088 REM APPEL SAVE IMAGE 1200021 IF lt 64 OR XA 48 AND YA 186 THEN GOSUB 20010 GOTO 17130 17098 REM APPEL LO 100 1 IF lt 64 OR Kg AND YA 202 THEN 10 GOTO 17130 17108 APPEL PRINT ET FIN DE BOUCLE DE TEST 17110 IF 80 AND YA 194 THEN GOSUB 20610 GOTO 17130 17129 GOTO 17060 17128 REM ge DES LUTINS EN PLACE 17130 5 1 24 226 GOSUB 12510 17140 SP 2 24 250 GOSUB 12510 17150 5 3 24 250 GOSUB 12510 17160 SP 5 XA 40 YA 234 GOSUB 12510 17170 PG 1 17180 RETURN 18000 REMkK 2 kkkkkkkkkkkkkkkkkkkkkkkkkik 18001 REM SOUS ROUTINE FOND 18002 REME KARKEAA AARAA ARR RAR RER RER 18004 REM VARIABLES UTILISEES DANS LA SOUS ROUTINE 18005 REM PM 0 SELECTIONNE LE CHOIX DU FOND 18006 REM 1 SELECTIONNE LA PROGRAMMATION DU FOND 1800
81. X interne la fonction peut coexister sans probl mes avec une variable X d finie ailleurs dans le programme La commande POKE est excessivement simple interpr ter car tr s proche dans sa signification des instructions du 6510 POKE est quivalent LDA B STA A Le BASIC v rifie la pr sence des deux arguments puis convertit le premier en un entier sur deux octets l adresse Le second est converti en entier sur un octet la valeur Cette valeur est ensuite rang e sa place en m moire La commande LIST est une commande particuli re car ses arguments ligne de d but ligne de fin sont optionnels Si un des param tres est omis BASIC le remplace par 0 pour le premier 63999 pour le second Avec un seul argument LIST ne liste qu une ligne sauf pour LISTO qui affiche non la ligne 36 LE LIVRE DU CBM 64 0 seule mais tout le programme comme LIST sans argument Les mots cl s tant en m moire sous une forme non directement lisible une conversion est n cessaire cette fin la routine LIST se sert de 1 table des mots cl s A09E pour le transco dage Une version BASIC de LIST est disponible en annexe SUPERLIST 64 SUPERLIST 64 ex cute les m mes op rations de transcodage que LIST Admirez la diff rence de vitesse entre BASIC et langage machine 5 LES COMMANDES DE BRANCHEMENT INCONDITIONNEL permettent l utilisation de sous programmes et le retour une branche unique de programme apr s un o
82. au vol ISR SCNKEY 1 clavier JSR GETIN 311 le caract re JSR CHROUT l crit a l cran Exemple attente de la frappe d un RETURN au clavier ATTEND JSR SCNKEY JSR GETIN CMP 0D est ce un RETURN BEQ ATTEND si non boucler Cette routine tablit le d lai d attente pour bus IEEE parall le Sur les CBM 64 non quip s d une carte d extension IEEE 488 parall le cette routine n est d aucune utilit Le d lai d attente maxi est de 64 millisecondes sur les p riph riques parall les Le d lai est infini si en entr e l accumulateur A contient FF Acquisition d un octet sur le bus IEEE s rie Pour lire un octet d un fichier su disque par exemple En sortie l accumulateur A contient l octet lu Bien entendu pour le lecteur de disques il faut avoir envoy au pr alable la commande TALK Si n cessaire cette routine doit tre suivie de JSR 87 LE LIVRE DU 64 FFA8 CIOUT FFAB UNTLK FFAE FFBI 88 UNLSTN LISTEN TKSA pour communiquer au lecteur le num ro de tampon utiliser l adresse secondaire Cette routine modifie les registres A et X Appel par JSR ACPTR Cette routine envoie un octet sur le bus IEEE s rie Elle doit tre pr c d e de LISTEN et ven tuellement de SECOND En entr e l accumulateur A doit contenir le caract re envoyer Pour lire une ventuelle erreur il faut ensuite utiliser la routine READST Cette routine maintient en permanence u
83. caract res 0 lt 1 lt 256 Les cha nes sont donc sauv es dans la zone cha nes au sommet de la m moire disponible et les retrouver reste ais car l adresse du premier caract re et la longueur de la cha ne suffisent pour les retrouver Ceci n cessite 3 octets dans la variable elle m me La variable cha ne ne contient jamais les caract res eux m me mais seulement un pointeur ler caract re 2me caract re long MSB du nom bas haut 0 0 bit7 1 adresse de 2 OCTETS la chaine INUTILES 4 Les fonctions FN Les fonctions FN sont d finies par l instruction DEF Exemple DEFFNAA X PEEK X 256 PEEK X 1 La valeur rendue dans B par BzFNAA Y est l adresse en d cimal qui est log e en m moire sous la forme BAS HAUT sur deux octets l adresse Y Par exemple l adresse de la fon ction USR en 0511 et 0312 785 et 786 s obtient par PRINT FNAA 785 Dans les cas simples o il n y a qu un param tre transmettre une sous routine les fonctions FN sont tr s 30 LE LIVRE DU CBM 64 efficaces et tr s rapides Dans l exemple ci dessus la variab le X n est utilis e que dans la fonction et n a pas d autre usage Lors de l appel de la fonction par B FNAA Y la valeur de la variable Y est transf r e dans la variable locale pour l ex cution et r ciproquement en fin de calcul de la fonction 11 faut noter que le pointeur de la variable locale pointe directe ment vers la valeur de la variable et non ver
84. choisi une forme d onde et une fr quence Avant de lancer une note il nous reste d finir l enveloppe L enve loppe sonore d une note est la fa on dont le volume s amplifie puis d croit au d but ATTACK et DECAY en anglais L enveloppe sonore se poursuit ensuite un certain niveau plus ou moins puissant c est le niveau de maintien SUSTAIN en anglais L enveloppe termine par un rel chement de la note du niveau de maintien jusqu au silence La vitesse de ce rel chement s ap pelle le taux de d croissance RELEASE en anglais Les initiales des mots ATTACK DECLAY SUSTAIN RELEASE ont donn lieu la contraction ADSR qui d signe chez COMMODORE le g n rateur d enveloppe Le cinqui me param tre de l enveloppe est la dur e de main tien Cette dur e n est pas programmable dans le S I D mais doit etre contr l e par une boucle de d lai dans le programme Pour le programmeur c est la dur e de la note bien que en r alit la dur e de la note soit la somme de la dur ee de maintien et de la dur e de rel chement Voyons d abord comment programmer les param tres ADSR pour les trois voix du S I D Chaque param tre A D S et R poss de 16 valeurs possibles et n cessite donc 4 bits soit un demi octet Le SID regroupe donc les param tres d enveloppe dans 2 registres par voix l un pour et D l autre pour S et R Attaque d croissance et rel chement sont des dur es Le niveau de maintien est une vale
85. cl SAVE Par contre en langage machine la longueur du nom peut atteindre 254 carac t res Cette particularit est utilis e dans certains programmes qui chargent uniquement un nom de programme qui est en fait le programme lui m me L avantage est de ne modifier aucun octet de la zone BASIC lors du LOAD C est int ressant dans certains cas par exemple pour prot ger des logiciels de la copie illicite A cause de la structure du VIC II l cran doit tre teint lors des instructions SAVE et LOAD La pr sence de lutins l cran pendant les LOAD et SAVE sur disquettes pose aussi quel quefois des probl mes La solution est simple Il suffit 175 LE LIVRE DU 64 d teindre les lutins avant le SAVE par POKE 53269 0 SAVE PROG 8 De m me avant un LOAD si des lutins sont l cran POKE 53269 0 L0AD PROG 8 Un dernier truc concernant le lecteur de cassettes est le d couvert il y a plusieurs ann es par le sp cialiste du PET Jim Butterfield Cette technique permet d entrer des lignes de programme partir d un fichier sp cial sauv sur cassette Il ne s agit pas ici de coller un morceau de programme derri re celui qui est en m moire mais bien d effectuer le m me travail que si les lignes taient tap es au clavier Tout d abord 11 faut pr parer la bande avec Les lignes qui seront incluses dans le programme par l op ration de MERGE Introduire ces lignes m moire normalemen
86. d sire acc der l cran par POKE Cependant en mode 1 et 2 il est souvent plus ais d utiliser PRINT E n employant PRINT on peut utiliser le truc suivant pour positionner le curseur un endroit pr cis de l cran POKE 211 X 0 lt lt 59 POKE 214 0 lt lt 24 SYS 58732 Comme on l a vu plus haut le dessin d un caract re occupe 8 octets L adresse du premier octet du dessin d un caract re se calcule donc comme suit adresse adresse g n car 8 code du caract re Le code du caract re A commercial est le code 0 A et B ont le code 1 et 2 etc Donc soit le g n rateur recopi en 8192 Nous pouvons lire le dessin du A 819248 et les 7 octets qui suivent 119 LE LIVRE DU 64 ADRESSE DESSIN VALEUR oo 00011000 0000 00111100 01100110 000000 01111110 01100110 01100110 oo oo 01100110 128 B cm 32 16 On peut voir qu chaque octet correspond une ligne de 8 points et chaque PIXEL ou point d une ligne correspond un bit f DH Dans un octet le bit le plus droite vaut 1 si le point est allum et 0 sinon Le bit suivant vaut 2 ou 0 le suivant 4 ou DO etc 0n peut aussi dire qu un point vaut 2 lev la puissance N o est la position du PIXEL dans l octet partir de la gauche En effet 2 puissance 0 1 et 2 puissance 7 128 Reprogrammons donc un nouveau caract re En utilisant le programme COPIECARA
87. d un programme de jeu ou autre programme commercial il suffit de rep rer dans le program me l adresse des zones cran et g n rateur utilis es Ensuite on lance le jeu puis au moment d sir on effectue un RESET on charge ensuite IMPRIME HR et le tour est jou 5 On peut inverser l image en n gatif en rempla ant CHR par CHR 255 dans les lignes 55 et 1010 6 Les crans rang s sur disque avec le programme KOALA PAINTER peuvent tre imprim s en les chargeant par LOAD 8 1 Le premier caract re du nom est un CHR 129 A la question adresse bitmap r pondre 24576 0 REM IMPRIME HR L REM RECOPIE L ECRAN 2 REM SUR IMPRIMANTE 1526 OU MPS 801 3 REM LES MODES SUPPORTES SONT BITMAP CARACTERES PROGRAMMABIES 4 REM CARACTERES ETENDU 5 REM POUR LES CARACTERES NORMAUX RECOPIER LE GENERATEUR EN RAM 6 REM NOTER QUE L IMAGE SERA TOURN E DE 90 DEGRES 7 VERS LA DROITE PAR RAPPORT L ECRAN 10 OPENA 4 DIM Z 199 C8 CHRS 8 5 11 INPUT C BAS BAS JBLIMAP 1 CARACTERES 2 ETENDU 3 N 12 IF N LPHEN 5 0192 INPUT ADRESSE RET RN BIO2 5 13 IF N 2THEN EC 3481 6 INPUT ADRESSE ECRAN RETURN 34816 EC 14 IF N 2 OR N 3 THEN GB 32768 INPUT ADRESSE GEN CAR RETURN 32768 GB 15 CO 0 C1 1 C77 C8 8 CA 1 27 CB 128 16 FORI OTO7 H L 2 1 NEXT 20 FOR 39 TO STEP 1 PRINT A C8 FOR J COTO24 30 FOR 0 TO C7 Q J C84K 40 ON N GOSUB 2000 3000 4000
88. de bus s rie IEEE 1a prise disquette imprimante L INDICATEUR DE LECTURE DE LA CASSETTE Le lecteur de cassette C2N est muni d une tresse de masse Commencez par la couper bien ras flle ne sert rien et repr sente un risque permanent de court circuits Ensuite connectez entre masse et fil de lecture du c ble cassette une diode lectroluminescente LED avec sa r sistance de 1 Kohm Ce petit voyant lumineux vous indiquera les d buts et fins de programmes sur la cassette C est tr s pratique pour le rep rage Les broches du connecteur sont rep r es de gauche droite A B creux de rep rage C D E F La masse est en A et le fil de lecture READ en D 286 Lt LIVRE DU 64 NOTICE TECHNIQUE La composition de ce livre a t r alis e sur un micro ordinateur CP M fabriqu au Canada par MEGATEL Le programme de traitement de textes qui a t utilis est le bien connu WORDSTAR 5 0 de MICROPRO L impression a t effectu e par une imprimante marguerite DAISY M 50 quip e d une roue d impression FRENCH PRESTIGE Le jeu de caract res employ ne contient pas le symbole di se qui est remplac dans l ensemble du texte par le symbole Les programmes de l annexe 1 ont t list s par un COMMODORE 64 interfac l imprimante DAISY au moyen du programme LISTING d crit dans ce livre Pour les programmes l imprimante tait quip e d une roue d impression PRESTIGE ELITE 287 LE LIVR
89. de retrouver des fichiers par leur nom et non seulement par leur position physique r elle Dans les autres cas le texte est transmis au p riph rique en question en lui laissant le soin de le g rer comme il l entend Par exemple pour le p riph rique 2 c est le KERNAL qui intercepte les deux caract res du nom de fichier pour initialiser les param tres de transmission A la r ception de 1 commande l interpr teur BASIC sauvegarde dans la table en m moire en 601 259 les num ros de fichiers les adresses primaires et les adresses secon daires Ces valeurs permettront dans la suite d aiguiller cor rectement les donn es vers le p riph rique convenable La commande CLOSE n a qu un param tre le num ro de fichier La commande CLOSE envoie sur le p riph rique concern les octets qui lui sont destin s et qui n ont pas encore t transmis cas d une sortie ou cesse de recevoir des octets cas d une entr e puis retire de la table en 601 les param tres relatifs au fichier referm Le pointeur en 152 98 qui indique tout moment le nombre de fichiers ouverts est remis jour Les instructions d entr e GET INPUT INPUT s adressent toutes un p riph rique d entr e GET et INPUT re oivent directement des caract res du p riph rique d entr e par d faut normalement le clavier dont le num ro se trouve en 153 99 INPUT ou GETE re oivent des caract res en provenance du fichier ouvert dont
90. e lire READ se sert d un pointeur en 3F et 40 qui indique le num ro de ligne DATA en cours et d un pointeur en 41 42 qui indique physi quement l adresse r elle de la prochaine donn e lire L instruction RESTORE remet simplement ces pointeurs leurs valeurs de d part 0 pour le num ro de ligne et pour le pointeur l adresse de d but de programme 1 On voit tout de suite Le parti tirer de cette situation Pour red marrer un RESTORE n importe quelle ligne il suffit de faire quelques POKE apres avoir utilis SUPERLIST 64 pour conna tre les bonnes adresses REM est fort semblable DATA pour l interpr teur mais ici il ignorera toute la ligne m me si elle con tient contrairement DATA 2 LES COMMANDES BASIC AVEC ARGUMENTS sont au nombre de six e DIM READ LET DEF et LIST D autres commandes BASIC n cessitent des arguments mais sont caract ris es autrement voir les types 5 4 et 5 La commande DIM est une commande d initialisation qui cr e un tableau de taille donn e au format d fini plus haut Les variables tableau sont rang es dans la m moire par ordre chronologique de cr ation Cons quence de ceci les tableaux d clar s les premiers par DIM sont les plus rapidement lus car BASIC recherche une variable ou un tableau dans la m moire par ordre croissant d adresses On constate que les variables tableaux occupent beaucoup d espace m moire Essayez BzFRE O DIM A 4 4 4
91. e l accumulateur contient le num ro d un fichier logique Si celui ci n a pas t pr alablement ouvert il n y a pas d action effectu e mais la routine ne produit aucun message d erreur dans ce cas JSR F30F Cette routine v rifie que la valeur contenue dans le registre X existe bien dans la table des fichiers logiques ouverts aux adresses 0259 et suivantes JSR F31F Acquisition des param tres d un fichier logique En entr e le registre X indique la position du fichier consid r dans la table des fichiers ouverts en 0259 Elle d pose les param tres lus dans cette table dans les descripteurs de p riph riques courants 80 JSR JSR JSR JSR JSR JSR JSR JSR JSR JSR JSR F 32F F 333 34A F 483 49 F 500 657 F 695 F 69B F 600 F6EA LE LIVRE DU 64 En 988 le num ro de fichier logique En BA le num ro de p riph rique physique En 89 l adresse secondaire de ce p riph rique Fermeture de tous les fichiers logiques Cette fonction n existe pas en BASIC o l on doit toujours pr ciser le num ro du fichier refermer par CLOSE xx On peut y acc der par SYS 62255 En anglais cette routine s appelle CLALL ou CLOSE ALL Cette routine restaure les p riph riques d entr e et de sortie par d faut le clavier et l cran Routine OPEN ouverture d un fichier logique Initialisation du CIA 2 Cette routine effectue la
92. effectue le test indice lt limite fin de boucle si inc positif indice gt limite fin de boucle si inc n gatif Si le test est pass avec succ s le contr le passe la ligne suivante sinon l ex cution reprend l instruction qui suit le FOR Apr s tre sorti d une boucle la variable indice a une valeur gale valeur de d part incr ment nombre de Al LE LIVRE DU CBM 64 fois que la boucle a t parcourue aux erreurs d arrondi pr s Cette valeur n est donc pas gale la limite de fin de boucle Essayez FOR Iz 1 TO 15 STEP 0 2 NEXT I PRINT I Un bloc FOR dans la pile contient 18 octets et il y a 240 emplacements utilisables environ dans la pile ce qui explique que l on ne peut imbriquer un nombre illimit de boucles avant de remplir 1 pile QUT MEMORY ERROR Bloc FOR ler octet 81 octets 2 5 pointeur variable indice de boucle octets 4 8 incr ment en flottant octets 9 signe de l incr ment octets 10 14 fin de boucle en flottant octets 15 16 num ro de ligne FOR octets 17 18 pointeur vers le premier caract re qui suit l instruction FOR La meilleure mani re de sortir pr cocement d une boucle FOR est de modifier l indice et d ex cuter NEXT ce qui supprime le bloc FOR de la pile Sinon on s expose des erreurs Notamment la rencontre du prochain NEXT sans nom de variable Exemple 10 FORI 0T0100 20 50 IFI 47THENIz101 NEXT GOTO1000 40 NEXT
93. est en 007 et 007B dans le corps m me de la routine Un appel par JSR 0079 fait la m me chose sans avancer le pointeur ce qui est tr s pratique pour que l ac cumulateur et les flags puissent refl ter l tat du caract re courant avant d appeller une des routines de l interpr teur BASIC 61 LE LIVRE DU 64 Il est possible d installer un WEDGE c est dire de modifier CHRGOT pour tester la pr sence de caract res sp ciaux par exemple le gt du programme 005 SUPPORT Dans ce cas on d posera un JMP xxxx vers 1 routine suppl mentaire de test en 007C La rou tine de test ins r e dans CHRGOT doit bien entendu supl er aux octets que le JMP a remplac Le JMP peut aussi remplacer SBC et RTS en 0088 Le code de la routine CHRGOT est rang initiale ment ROM en E3A2 E3B9 Il est recopi en RAM en page z ro l allumage de la machine ROM 000 INTERPRETEUR BASIC 00 09 19 A328 JSR A3BF 62 Table des 76 adresses des mots cl BASIC Les adresses 1 sont en fait donn es car l appel des programmes correspondants se fait par l instruc tion RTS Table des 76 mots cl du BASIC La fin de chaque mot cl est rep r e par le bit7 du caract re qui vaut 1 Noter que si on modifie cette table apr s l avoir recopi e en RAM elle ne peut d passer une longueur de 256 octets car elle est utilis e par des instructions index es Table des messages d erre
94. et 4 bien entendu Pour mettre 0 un de ces bits et donc interdire l interruption correspondante il faut mettre dans le registre la valeur 2 bit POKE 56333 2 bit o comme ci dessus bit est un chiffre entre 0 et 4 Cette m thode non usuelle permet de modifer un bit sans se soucier des autres et sans les perturber La lecture du registre d interruption par PEEK ou LDA rend une valeur o les bits O 4 qui valent 1 indiquent qu ils ont g n r s une interruption Ceci a lieu pour que le processeur puisse tester quelle est la source d une interruption Cette op ration de lecture est destructive elle remet 0 tous les bits d avertissement d interruption La valeur lue doit donc tre utilis e faute de quoi l information est perdue La programmation des interruptions n a pas elle t modifi e lors de cette lecture LE CONTROLE GENERAL DES FONCTIONS Les adresses 56554 et 56555 contiennent l6 bits qui d finis sent les types de comptage et les modes de fonctionnement des minuteries Retenons seulement que 56354 DCOE bit 7 l gt 50 Hz 0 gt 60 Hz 56335 DCOF bit 7 s l gt programmer le r veil 0 gt programmer l horloge Ce bref survol des fonctions du CIA IRQ pourrait sembler insuffisant certains Si vous voulez utiliser et programmer les minuteries et le registre d calage procurez vous chez votre revendeur COMMODORE 1 documentation technique du 6526 c est assez r bar
95. g n rale Le langage est toujours le langage BASIC MICROSOFT version II et le noyau du systeme le KERNAL est toujours compatible avec celui des PET et VIC Si certaines fonctions ont t ajout es aucune n a t supprim e ni d plac e Le CBM 64 est un ordinateur BASIC D S l allumage de 1 machine le message READY bien connu est affich Comme pour de nombreuses autres machines le langage BASIC et le syst me op ra toire Le KERNAL en terminologie COMMODORE sont intimement mel s e Regardons de plus pr s les programes internes du CBM 64 deux m moires de 8 K 8192 octets contiennent tout 1e logiciel n cessaire au fonctionnement de la machine soit 9 K de BASIC et 7 K de KERNAL L enti ret du BASIC et une grande partie du KERNAL sont identiques la version existant dans le VIC l ex ception de la gestion directe des p riph riques l g rement dif f rents L cran par exemple poss de 25 lignes de 40 caract res au lieu de 22 seulement dans le VIC L architecture interne du CBM 64 est elle totalement ori ginale Il contient en effet 64 K de m moire RAM m moire que l on peut lire et crire volont mais qui s efface si le courant est coup et 20 K de m moire ROM READ ONLY MEMORY ou m moire que l on peut lire mais pas modifier ni effacer LE LIVRE DU 64 Ajoutons cela les p riph riques qui occupent une zone de 4K et le CBM 64 se retrouve propri taire de 88 K octets con tr ler
96. kkkkkkkkkkkkkikkkkkkkkkkkkkk 12501 REM SOUS ROUTINE DEPL PADDLES 12502 REMk kkkkkkkkkkkkkkkkkkkichikickikk 12507 REM CALCUL DES INDICES POUR 12508 REM APPEL DEPLACEMENT LUTIN 12510 X XA Y YA 12520 GOSUB 12713 12530 RETURN 12700 REMA ARRXRRREEARARRERARRERERERRIE LE LIVRE DU 64 12701 REM SOUS ROUTINE DEPL LUTINS 12702 REM k kkkkkkkkkkkkkkkkkkkkkkkkkkkk 12704 REM VARIABLES UTILISEES DANS LA SOUS ROUTINE 12705 REM X2 PARTIES ENTIERE ET DECIMALE DE X 256 12706 REM X Y COORDONNEES DU LUTIN 12707 REM SP NUMERO DU LUTIN 12708 REM PG PERMET DE SAVOIR SI L ON SE TROUVE DANS 12709 REM LA BOUCLE PRINCIPALE 12711 REM CALCUL DE X SUR DEUX OCTETS 12713 INT X 256 12720 2 1 256 12727 SI DANS DEMO UN LUTIN 12728 REM SINON DEUX LUTINS 0 SP 1551 IF PG 0 THEN 12780 12737 REM PROGRAMMATION DU BIT DE POIDS FORT 12738 REM DU LUTIN O DANS LE REGISTRE VIC 16 12740 IF X1 0 THEN POKE VIC 16 PEEK 12569 AND 254 12750 IF X1 1 THEN POKE VICH 6 PEEK VIC H6 OR 1 12757 REM PROGRAMMATION DES REGISTRES DE POSITION 12758 REM POUR LE LUTIN O 12760 POKE VIC X2 He POKE VIG Y 12777 REM PROGRAMMATION DU BIT DE POIDS FORT 12778 REM DU LUTIN SP DANS LE REGISTRE VICH6 12780 IF X1 0 THEN POKE VICH6 16 AND 255 2 8P 12790 3 IF Xl l THEN POKE VICH 6 PEEK VIC 16 OR 275 12797 REM PROGRAMMATION DES REGISTRES DE POSITION 12798 REM POUR LE LUTIN SP 12800 POKE VIC42 SP X2
97. l inversion couleur caract re couleur de fond On peut bien entendu acc der directement l cran pour y inscrire un caract re avec l instruction POKE Si on ne travaille qu en une seule couleur il est tr s simple de noircir d abord toute la RAM couleur par CO 55296 NOIR 0 FOR I TO 004999 POKE I NOIR NEXT I L criture d un caract re position de l cran s effectue alors par BASE 1024 REM ECRAN NORMAL CAR 42 REM ASTERISQUE POKE BASE X 40 Y CAR L adresse d criture varie toujours entre BASE et BASE 999 Si l cran n a pas t express ment dispos ailleurs BASE 1024 Si on d sire dessiner en plusieurs couleurs il faut crire le code couleur dans ia RAM COULEUR en m me temps que dans l cran CAR 42 VERT 5 REM ASTERISQUE VERTE BASE 1024 CO 55296 POKE BASE X 40 Y CAR POKE CO X 40 Y VERT Nous avons vu plus haut comment modifier le pointeur de d but de BASIC pour le reporter en 16384 pour prot ger le banc m moire 0 du VIC II Il est aussi possible de travailler en mode 1 dans le banc m moire 2 du VIC II Pour cela notre programme doit commencer par POKE 55 0 POKE 56 128 CLR 114 LE LIVRE DU 64 ceci pour prot ger la zone m moire 2 du BASIC A ce moment plusieurs adresses sont possibles pour l cran voir le paragraphe comment programmer l adresse de l cran Par exemple pour avoir l cran au d but du
98. la compatibilit des futures machines de la gamme avec le CBM 64 semble assur e Les noms des routines reprises ci dessous sont les noms officiels que COMMODORE donne ces routines Routine d initialisation de l diteur d cran et du VIC II Elle modifie les registres A X et Y et ne n cessite pas de param tres en entr e A utili ser par exemple en fin d un programme qui modifie fortement la configuration de l cran ou la page 0 Appel par SYS CINT Routine d initialisation des p riph riques Elle modifie les registres A X et Y et ne n cessite pas de param tres en entr e utiliser en sortie d un programme qui modifie fortement la page 0 ou les registres des 6526 les 2 CIA Appel par JSR IOINIT Cette routine initialise la m moire RAM alloue le tampon de clavier et les adresses d cran Appel par JSR RAMTAS Elle modifie les registres A X et Y et remet z ro les octets 0000 B 0101 et 0200 03FF Elle initialise les pointeurs en page 0 et 5 pour l cran et la cassette Elle test ensuite la pr sence de m moire RAM sans en effacer le contenu Routine de restauration des vecteurs du KERNAL Les 16 vecteurs des routines principales du KERNAL sont des pointeurs indirects vers les routines correspondantes Ces vecteurs sont en m moire RAM en 0514 et suivants Apr s un programme qui a modifi certains pointeurs on peut les r tablir leurs valeurs initiales par un appel cette routine
99. le bas de la zone BASIC qui sera occup e par le moniteur MON Au d marrage du programmme la lettre M apparait Si on introduit au clavier une adresse hexad cimale sur 4 caract res par exemple 0801 d but de MON les 8 octets situ s en m moire partir de cette adresse sont affich s Chaque lt RETURN gt affiche les B suivants Si avant de frapper RETURN on introduit des chiffres hexa ils remplacent les 8 octets affich s Apr s chaque octet entr en deux caract res on peut reculer avec la touche DEL 246 LE LIVRE DU 64 Pour changer l adresse de travail pousser sur la touche STOP et taper RUN En arr tant le programme par RUN STOP et en tapant GOTO 2000 on entre dans un programme de v rification qui calcule les sommes de contr le du moniteur MON par bloc de 256 octets de 2049 4588 que vous pouvez comparer aux valeurs correctes Voir MON En arr tant le programme par RUN STOP et tapant GOTO 3000 on peut sauver M N sur cassette Pour utiliser une disquette remplacer 1 1 par 8 1 en ligne 3110 Si vous r utilisez PETITMON pour continuer crire un MON d j commenc proc dez comme suit 1 allumer le 64 2 LOAD INIMEM et RUN 5 LOAD MON 1 1 et NEW 4 LOAD PETITMON et RUN 3 REM REN 7 PAR P BRUNET 1984 Dieren CD64THENPRINT EMPLOYEZ INIMEM S V NEW OTO l 100 198 0 110 A IF A TEN 11 110 120 5
100. le caract re est un espace 20 CHRGOT l ignore et prend le caract re suivant Deuxi mement le flag CARRY du 6510 est affect par le type de caract re lu le CARRY est mis un si le caract re est alphab tique ou num rique Le programme appelant peut ainsi voir en une seule instruction ou BCS si le caract re que CHRGOT lui renvoie est alpha b tique CHRGOT est de tr s loin la routine la plus employ e 25 LE LIVRE DU CBM 64 de tout le 64 ce qui explique le soin extr me apport sa r alisation La routine CHRGOT ne pourrait tre aussi efficace et aussi courte 24 octets ailleurs qu en page z ro L interpr tation d une commande BASIC commence toujours en 0200 d but du tampon d entr e Cependant certaines comman des comme RUN GOTO et GOSUB modifient les variables de l inter pr teur BASIC de mani re diriger l interpr tation vers la ligne dont le num ro est sp cifi dans l instruction Ces trois mots cl s sont les seuls pouvoir faire sortir le pointeur d interpr tation de la zone du tampon d entr e Pour s en convai ncre il suffit de lire la valeur de ce pointeur par des PEEK aux adresses 7A B ou 122 et 123 en d cimal en mode direct La valeur lue est toujours dans la zone 0200 puis par programme La routine principale d interpr tation est celle qui la fin de l ex cution du programme correspondant une commande BASIC d code le mot cl lui m me et passe le contr
101. le d but de 1 ROM BASIC en A000 qui contient les messages et les mots cl du BASIC Voir l exemple du programme BASIC FR Voici un autre exemple POKE 41122 65 transforme le mot cl LIST en LAST 11 Bien s r LIST ne donne plus qu un bien connu SYNTAX ERROR On peut toujours r cup rer le BASIC d origine avec un POKE 1 55 ou en enfon ant simultan ment STOP et RESTORE Signalons ici l existence de l excellent ouvrage WHAT S REALLY INSIDE THE COMMODORE 64 publi par DATACAP et qui donne le texte complet des ROM BASIC et KERNAL 11 existe encore deux autres interrupteurs de pagination nomm s EXROM et GAME Ces deux interrupteurs ne sont pas accessi bles par programme il faut connecter physiquement un interrup teur entre les broches 8 GAME 9 EXROM et la broche 1 MASSE du connecteur d extension ROM Ces interrupteurs font toujours partie des cartouches d extension ROM comme FORTH ou SIMON S BASIC 1 Normalement GAME et EXROM valent 1 Quand ils sont tous deux 0 les 8 K de m moire RAM de 8000 AFFF sont recouverts par une m moire ROM externe pr sente dans la cartouche d exten sion si le reste de la m moire est normal LOMEM 1 et HIMEM 1 Si la ROM BASIC est hors service LOMEM 0 et que la cartouche externe bascule 0 les interrupteurs GAME et EXROM les adresses A000 BFFF sont occup es par une m moire ROM dans le cartouche externe Ceci permet des cartouches ext rieures qui n
102. le num ro est pr cis comme argument GET ou GET prennent un seul caract re ou aucun s il n y en a pas de disponible cet instant en provenance d un p ri ph rique Pour savoir si un caract re est disponible au clavier avant d effectuer un GET il faut lire la valeur KBDPTR en 198 6 qui indique le nombre de caract res disponibles Pour les autres p riph riques il faut tester l octet ST STATUS en 144 90 INPUT prend une suite de caract res au clavier jusqu la frappe d un RETURN INPUTZ fait de m me sur un p riph rique quelconque Attention par exemple avec INPUT 2 A si vous recevez des caract res d un autre ordinateur par RS 232 effet l autre aura probablement mis en fin de ligne un RETURN suivi d un LINEFEED c est dire que vos INPUT 2 vont rendre partir de la deuxi me fois des cha nes de caract res contenant un CHR I10 LINEFEED en premi re position Dans le cas de INPUT 2 A ce n est pas encore trop grave mais pour des nombres cela conduit des r sultats erron s Il faut noter que GET est dans la table des mots cl s tandis que GETE n y est pas L instruction GET est donc cod e sur deux octets INPUT et INPUT sont cod s chacun sur un seul octet A NOTER L instruction INPUT se bloque irr m diablement si elle ne rencontre pas un caract re RETURN 46 LE LIVRE DU CBM 64 CHR 13 avant 80 caract res Faites donc atten tion la taille des enregistrem
103. les deux accumulateurs flottants Table des co fficients pour le d veloppement en s rie du SIN C est une fonctions d ordre 5 Cette routine E30E E33D ex cute Cette fonction tant tr s peu utilis e il est possible de la remplacer par une autre si le BASIC et le KERNAL ont t recopi s en RAM ATN tant peu utilis voici un endroit tout trouv pour dissimuler une routine de 47 octets On pourra en profiter pour modifier galement le nom de la bE33E JMP E378 JMP E388 IMP 394 JMP E3BF JSR 422 E447 LE LIVRE DU 64 fonction ATN Ce nom est pr sent sous la forme des valeurs 41 54 et CE le bit 7 du dernier caract re du nom est un en A174 4176 dans la table des mots cl du BASIC Le polyn me d valuation de est le plus complexe Calculer c est un polyn me d ordre 11 C est pourquoi on peut employer ATN x comme sous programme de d lai court En effet ATN est le plus lent des mots cl du BASIC Table des co fficients pour le d veloppement en s rie de ATN ordre du polyn me 11 Cette table occupe les adresses E33E 376 Cette routine simule l enfoncement simultan des touches 5 et RESTORE et revient toujours BASIC READY Routine de retour BASIC READY avec impression d un message d erreur du BASIC Le num ro du message doit tre dans le registre X lors de l appel de la routine Si le contenu de X a le bit 7
104. leur VIC II C est particuli rement vital lors des calculs n cessaires l criture et la lecture sur la cassette ce qui explique que le KERNAL interrompt l image pendant les acc s cassette LES INTERRUPTIONS DU VIC II La notion d interruption n est qu re utilisable en BASIC qui est un langage trop lent pour pouvoir utiliser ce concept efficacement C est par contre une des cl s du suc s de nombreux programmes crits en assembleur Une interruption comme son nom l indique interrompt la t che en cours dans le microprocesseur pour lui faire ex cuter une autre t che urgente A la fin de celle ci il reprend son ouvrage l o il l avait laiss Dans le CBM 64 il y a deux interruptions la NMI et la IRQ Seule cette derni re est utili sable en pratique Nous en verrons un usage tr s surprenant dans le paragraphe suivant concernant les modes graphiques mixtes Plusieurs causes peuvent provoquer une interruption IRQ le clavier par exemple interrompt le 6510 tous les 1 60 de seconde Comment savoir quelle est la source de l interruption Le programme assembleur appel routine d interruption voir l exemple du programme MODEMIXTE SRC en annexe passe en revue les registres d interruption des p riph riques susceptibles d tre les g nerateurs de la demande de service Cette technique s appelle en anglais le POLLING Le VIC II poss de un tel registre l adresse 53273 Seuls 5 des 8 bits nous int ressent IRQ
105. logiques ouverts Table des n de p riph des fichiers Table des adresses sec des fichiers TAMPON DE CLAVIER 10 caract res Pointeur de bas de m moire pour KERNAL Pointeur haut de m moire pour KERNAL sert d finir l adresse des tampons pour RS 232 D lai d attente KERNAL pour IEEEparal Couleur de trac en cours ADRESSES HEXA DECIMAL 0287 647 0288 648 0289 649 028 650 0288 651 028C 652 028D 653 028E 654 028F 0290 655 656 0291 657 0292 658 0293 659 0294 660 _ 0295 0296 661 662 0297 663 0298 664 0299 029A 665 666 0298 667 029C 668 029D 669 029E 670 029F 02A0 671 672 02A1 673 02 2 674 02A3 675 02 4 676 02 5 677 02 6 678 02A7 02FF 679 767 0300 0301 768 769 0302 0303 770 771 0304 0305 772 775 0306 0307 774 775 0508 0309 776 777 030A 0308B 778 779 050C 780 0300 781 030E 782 030F 783 0310 0312 784 786 0313 787 0314 0315 788 789 0316 0317 790 791 0318 0319 792 793 031A 031B 794 795 031C 031D 796 797 LE LIVRE DU 64 DESCRIPTION Couleur de fond sous le curseur Num ro de page cran 42127 pour BASIC Taille du tampon clavier Drapeau 80zTouches r p tition Vitesse de r p tition des touches D lai avant l re r p tition Type de table d codage clavier en cours Dernier enfoncement touche SHIFT Vecteur de d codage clavier Drapeau 00zpas de SHIFT 80zSHI
106. mes de fabrication du SID chez COMMODORE les effets obtenus avec les filtres peuvent varier fortement d un 64 l autre Ceci a t r cemment notifi par COMMODORE aux soci t s de programmation L usage de filtres de diff rents types permet de modifier le contenu harmonique d une m lodie ou d un bruit Le SID est un synth tiseur particuli rement volu ce point de vue Les filtres peuvent tre utilis s soit un un soit combin s et on peut filtrer une ou plusieurs des voix au choix 158 LE LIVRE DU 64 Le choix de la voix filtr e et la puissance de filtrage la r sonance se programment par le m me registre S 23 Soit RE la force de r sonance des filtres 0 15 Fl 1 si la voix 1 doit tre filtr e sinon F1z0 F2 2 2 sinon F2z0 F3 4 3 sinon F3z0 FX 8 si l entr e ext rieure doit tre filtr e POKE S 23 16 YRE Fl F2 F3 FX L entr e ext rieure c est le signal audio que l on peut injecter de l ext rieur dans le COMMODORE 64 par la broche 5 de la prise DIN AUDIO VIDEO En pratique ceci est tr s peu utilis La fr quence de coupure des filtres se programme sur ll bits avec des valeurs de 0 2047 Lees 11 bits de fr quence sont r partis entre S 21 et S 22 5 22 contient les 8 bits de poids fort de la fr quence S 21 contient les 3 bits de poids faible dans ses bits 0 1 et 2 Les effets obtenus l aide des filtres ne n cessitent pas le choix d
107. n re un BIP chaque frappe de touche Attention il n y a qu un seul BIP pour les touches r p tition Si l activation est perdue par STOP RESTORE on peut r activer par SYS 828 D sactiver avant tout acc s la cassette bien entendu 10 REM CLAVIER SONORE 15 REM kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk 20 FOR AD 828 TO 883 READ A 30 CS CS4A POKE AD A NEXT AD 9 pes 61 6183 PRINT ERREUR STOP 60 REM kkkkkkkkkkkkkkkkkkkkkkk kkkkkkkk 828 DATA120 169 07 3 14 1 143 002 169 003 836 DATAL amp L 144 002 088 096 165 197 205 844 DATA12 6 00 3 24 0 03 2 14 1 126 003 169 852 DATAO10 141 024 212 141 005 212 169 860 DATAO0 4 14 1 006 212 169 033 LA 1 001 868 DATA212 141 000 212 141 004 212 169 876 DATAO32 14 1 004 21 2 07 6 07 2 235 001 877 REM CHECKSUM DE 828 A 883 6183 55555 SAVE GO CLAVIER SONORE 8 READY CLEAR SRC 11 s agit de la source assembleur d une routine d initiali sation d image haute r solution On peut assembler ce programme avec l assembleur standard vendu par COMMODORE Une version as sembl e de ce programme est utilis e dans MODES MIXTES 193 LE LIVRE DU 64 00002 0000 PROGRAME CLE R OBJ 00003 0000 3 EFFACE L ECRAN BITMAP ET LA S 00004 0000 3 RAM COULEUR A UNE VALEUR PREDEFINIE 00005 0000 2 ACCES PAR POKE 49360 COULEUR SYS 4936 00007 0000 ATTENTION DANS CE LISTING 00008 0000 3 PLUS GRAND QUE EST REPRESENTE PAR 00009 0000 PL
108. nombre de colonnes de l cran se retrouvera en sortie dans le registre X et le nombre de lignes dans le registre Y Appel par JSR FFED Cette routine lit ou tablit la position du curseur dans l cran En l appellant avec le flag C mis 1 les coordonn es horizontale et verticale sont lues dans les registres num ro de colonne dans Y et num ro de ligne dans X X peut donc tre compris entre 0 et 24 Y entre 0 et 79 En effet si le curseur est dans une ligne suite sa position se compte dans la ligne logique qui est quivalente deux lignes physiques de 40 caract res Ceci arrive lors de l utilisation de l diteur d cran quand le curseur d passe une fin de ligne A ce moment l diteur d cran maintient en m moire le fait que les deux lignes sont coBid rer comme une seule en mettant 1 le bit 7 de l octet de poids fort de l adresse de ligne dans latable en RAM ce qui explique que le BASIC ne supporte pas d cran des adresses sup rieures 32767 Elle modifie les registres A X et Y Appel par SEC jsr FFFO Si en entr e le flag C est mis 0 le contenu de X et Y est consid rer comme une nouvelle position imposer au curseur En entr e X contient le num ro de ligne et Y le num ro de colonne 97 LE LIVRE DU 64 Appel par CLC JsR FFFO Note concernant le CBM SX 64 Le Commodore SX 64 portable est compatible 99 avec le CBM 64 Toutes les routines du syst me sont donc u
109. on imprimera le message d erreur num ro x Si le bit 7 vaut 0 seul le message READY sera imprim Routine de RESET ou r initialisation du CBM 64 A le m me effet que l enfoncement du bouton RESET Elle peut tre appell e en BASIC par SYS 58260 y tout de m me une diff rence avec le vrai RESET La couleur du curseur n est pas remise sa valeur par d faut bleu clair Il faut donc r tablir celle ci en envoyant l cran le code de contr le appropri Initialisation de l interpr teur BASIC On peut utiliser cette routine en sortie d un programme qui a modifi ou d truit des valeurs en RAM utiles au BASIC telles que pointeurs de d but et de fin de programme vecteurs d USR etc Recopie 1 routine CHRGOT en page z ro 0073 Cette routine remplace NEW tout en tant plus s re car l interpr teur est vraiment ici remis neuf Cette routine crit le message de d but COMMODORE 64 BASIC puis effectue NEW et retourne BASIC READY Si le BASIC a t recopi en RAM on peut remplacer le JMP A644 qui est 444 par un RTS 60 pour revenir au programme appellant en langege machine Table des vecteurs du BASIC qui est recopi e RAM lors de l initialisation en 0300 050 messages d erreur d marrage chaud compactage des mots cl impression des mots cl ex cution 75 LE LIVRE DU 64 JSR 457 E Aen 479 E4B7 E4D9 d une commande acquisition d un param
110. pen dent physiquement des p riph riques Les p riph riques internes ont leurs num ros d finis dans les routines KERNAL qui les pilotent DRIVERS Ainsi le clavier porte le num ro 0 le lecteur de cassette le 1 l interface s rie RS232 le 2 l cran le 5 Les autres p riph riques sont suppos s se trouver sur le BUS IEEE s rie o les num ros autoris s vont de 4 31 Usuel lement les imprimantes portent le num ro 4 le lecteur de dis quettes le 8 mais il est modifiable par programme le modem t l phonique le 9 Le canal d entr e et le canal de sortie sont d di s par d faut au clavier 0 et l cran 5 mais les commandes d en tr es sorties peuvent les d vier vers d autres Quand aucun fichier n est ouvert le clavier et l cran sont les seuls p riph riques actifs et il n y a donc pas lieu d ouvrir un 44 Lt LIVRE DU CBM 64 fichier pour se servir des p riph riques 0 et 5 bien que parfois cela repr sente des avantages entre autres une criture de programmes g n rale et ind pendante du p riph rique en cours d utilisation ainsi qu une suppression du en entr e OPEN et CLOSE Open ouvre un fichier c est dire qu il cr e une correspondance entre un num ro logique utilis par GET PRINT INPUT ou CMD et un p riph rique physique Exemple OPEN 1 8 1 DATA S R num ro de fichier num ro de p riph rique adresse secondaire du p riph rique nom de fichier Les deux
111. port B du CIA Les 2 ports A et B sont deux groupes de 8 fils qi peuvent etre individuellement programm s en entr e ou en sortie Les registres 0 00 et DCO0l correspondent aux ports et B La direction de chacun des fils des ports A et B se programme gr ce aux adresses 0 02 et 0 05 qui contiennent les indications de direction correspondantes Le port tant programm tout en sortie pendant la dur e de la lecture du clavier nous avons donc le registre DC02 qui vaut FF tandis que le port B tout en entr e n cessite 1 valeur 00 en DC05 La lecture du cla vier s effectue en modifiant les valeurs du port en 0 00 et en relisant ensuite le port B en 0 01 Si on crit la valeur 1 sur un seul des fils du port A la lecture du port B va rendre une valeur comprise entre 0 et 255 qui nous indiquera quels fils ont pris la valeur 1 Par exemple la lecture du nombre 65 nous informe que les bits 1 et 6 ont la 162 LE LIVRE DU 64 valeur 1 On en d duit ais ment que les deux interrupteurs situ s l intersection du fil colonne 1 et des fils ligne 1 et ligne 6 sont ferm s Heureusement pour nous une routine de la ROM du 64 se charge du fastidieux travail de lecture du clavier et de la conversion de cette lecture en un code caract re utilisable Il s agit de la routine SCNKEY en FF9F Cette routine s ex cute 60 fois par seconde et son r sultat est lisible en BASIC l aide des instru ctions GET e
112. possibles comptage continu ou unique comptage de l horloge du 6510 ou d une entr e horloge ext rieure le fil CNT Le compteur B peut de plus compter les impulsions de sortie du compteur A ce qui permet de cha ner les 2 compteurs et de r aliser ainsi des comptages sur 4 octets Chaque compteur peut tre tout moment relu MINUTERIE 1 56524 256 PEEK 56325 MINUTERIE 2 PEEK 56325 256 PEEK 56326 La troisibme minuterie est une v ritable horloge les quatre registres qui la composent contiennent une s rie de compteurs qui totalisent heures minutes secondes et dixi mes de secondes Le comptage de l horloge est s quenc par les impulsions du secteur 220 Volts qui on le sait poss de une fr quence tr s stable de 50 Hz Cette horloge interne est programmable en mode 60 Hertz ou 167 LE LIVRE DU 64 50 Hertz Par d faut l allumage de la machine la program mation est sur 60 Hertz Pour passer 50 Hertz la fr quence en usage en Europe on utilise ceci 50 Hertz POKE 56334 PEEK 56334 OR 128 60 Hertz POKE 56334 PEEK 56334 AND 127 Les registres sont programmables par POKE et relisibles par sans probl me De plus l horloge poss de la propri t g n rer une interruption pour une valeur pr programm e des re gistres Heures et Minutes C est le bit 7 du registre 56555 qui d termine si les critures dans les registres sont destin es l horloge ou la programm
113. premiers arguments sont obligatoires les autres sont des options n cessaires pour dialoguer avec les p riph riques les plus complexes L adresse secondaire est un para m tre retransmis au p riph rique pour lui signaler une carac t ristique sp ciale du transfert Les adresses secondaires n ont de signification que pour le p riph rique concern Le lecteur de disques 8 peut utiliser les adresses secon daires 1 2 35 7 pour sp cifier quel tampon m moire RAM doit amp tre utilis l int rieur du lecteur de disques on peut ouvrir plusieurs fichiers la fois vers le lecteur De m me pour le lecteur de disques l adresse secondaire 15 signifie ceci est une commande pour le lecteur de disques Le lecteur de cassette se sert de l adresse secondaire d une fa on particuli re L adresse secondaire pour la cassette peut prendre les valeurs 0 1 2 ou 3 Pour les fichier on n utilise en g n ral que 1 et 3 l signifie bloc de donn es ordinaires 3 signifie bloc de donn es avec marqueur 0 c est dire fin de bande Lors de la recherche d une information sur cassette EOT signale au CBM 64 que 1 fin de bande est atteinte et que la recherche se termine Voir LOAD et SAVE pour les autres usages des adresses secondaires 0 1 2 et 3 Le nom fichier est un param tre indispensable pour le lecteur de disques et tr s utile pour le lecteur de cassettes 45 LE LIVRE DU CBM 64 car il permet
114. quelle adresse et occupe l4 octets 10 REM SILENCE 20 30 REM ARRETE LE SON DU CBM 64 A0 REM L ADRESSE DU PROGRAMME PEUT ETRE 50 REM MODIFIEE SANS PROBLEME 60 70 51 49152 80 5 0 51 TO SI 13 READA FOREI A CS CS4A NEXT 39 2194 STHENSTOP 110 SYS SI 0 END 19152 DATA120 169 000 170 15 000 212 232 49160 DATA22 4 02 5 208 248 0 6 49161 REM CHECKSUM 1949 DE 49152 A 49165 55555 SAVE GO SILENCE 8 READY SUPERLIST 64 Ce programme commence 1a ligne 50000 Il est pr vu pour tre ajout voir APPENDISK un autre programme et il le liste comme le ferait le LIST de 1a ROM BASIC Le programme hybride tant en m moire il suffit de lancer SUPERLIST 64 par GOTO 65500 257 LE LIVRE DU 64 Son int r t pratique est faible mais il permet de comprendre comment est structur le BASIC en m moire voir le chapitre 2 Pour avoir le r sultat l imprimante r pondre 0 la question Toutefois sur l imprimante COMMODORE il liste les codes de contr le tels que CLEAR ou HOME en Blair et non sous forme de graphiques plus lisibles On pr f re lire 3 CRS BAS que de voir invers 50000 END 55555 SAVE 0 SUPERLIST 64 8 55556 END 63500 REM Eeer 63502 REM SUPERLIST 63503 REM 63504 REM PAR P BRUNET 63505 REM COPYRIGHT 1983 BCM 63506 REMFXR HR e 63507 63508 REM OPTION IMPRIMANTE 63509 258 63510 PRINT BLANC VOULEZ VOUS L
115. r l interpr teur BASIC proprement dit Avant d analyser le fonctionnement de l interpr teur BASIC prop rement dit il convient de bien conna tre ce qu il doit inter pr ter L interpr teur n a acc s qu deux zones distinctes en m moire le tampon d entr e o il interpr te une commande en mode direct puis rend le contr le l interpr teur de commande et la zone texte o le corps d un programme est enregistr C est l encodage du texte BASIC dans cette zone que nous allons examiner maintenant Le KERNAL initialise le CBM 64 avec la ZONE TEXTE d butant en 0801 D taillons le contenu de la m moire dans laquelle ont t introduites les lignes BASIC suivantes 10 PRINT A 20 GOTO 10 Dans ce cas le CBM 64 contient en m moire les valeurs suivantes Adresse Valeur 0800 00 Le caract re qui pr c de le texte BASIC doit toujours tre un 00 0801 08 0808 adresse de la ligne BASIC suivante 0802 08 0803 0A 000A z10 num ro de ligne 0804 00 0805 99 80 19 25 me mot cl de la table PRINT 0806 41 A en ASCII 0807 00 signifie fin de ligne Basic 22 LE LIVRE DU CBM 64 0808 10 0810 adresse de la ligne BASIC suivante 0809 08 080 514 0014 20 num ro de ligne 0808 00 080C 89 89 80 9 mot cl de 1 table GOTO 080D 31 71 en ASCII 080 30 0 en ASCII 080F 00 signifie fin de ligne BASIC 0810 00 Adresse de la ligne BAS
116. riph rique Elle ne modifie que l accumulateur Appel par LDA 08 08 disque JSR TALK commande TALK Cette routine lit le registre ST STATUS qui indique les erreurs des p riph riques IEEE s rie et CASSETTE Elle modifie l accumulateur A qui contiendra en sortie la valeur de l octet ST 11 faut utiliser cette routine apr s tout acc s un p riph rique pour v rifier la validit des transactions effectu es Par exemple apr s un SAVE sur disquette pour savoir si le disque n tait pas prot g en criture etc Apr s l appel l octet ST est dans l accumulateur A et en 90 en page 9 Cet octet s interpr te bit par bit Appel par JSR READST sen assembleur o par PEEK 144 REM en BASIC ou 5 2 ST SIGNIFICATION DES 5 DE L OCTET ST STATUS ES VALEUR SIGNIFICATION D lai d pass lecture IEEE par Bloc trop court sur cassette Bloc trop long sur cassette Erreur fatale en lecture Erreur v rification cassette Fin de fichier rencontr e Fin de bande sur cassette ou p riph rique IEEE absent 1 2 3 A 5 6 7 Il peut y avoir plusieurs erreurs simultan ment Par exemple si PRINT ST donne un r sultat de 48 apr s un LOAD sur cassette c est que la cassette est ce point mauvaise que les donn es lues sont 89 LE LIVRE DU 64 FFBA SETLFS 90 irr cup rables noter que 48 32 16 soit les 2 erreurs 16 et 32 la fois Cette routine tablit les adresses primaires et s
117. s simple Le registre 4 de chaque voix contient dans son bit 0 la cl de nos probl mes D s que ce bit passe de 0 1 le cycle Attaque et D croissance d marre puis le niveau sonore se stabilise la valeur de maintien exprim e comme on l a vu en seizi mes du volume sonore maximum D s que le bit 0 du registre 4 repasse 0 la seconde partie de l enveloppe c est dire la d croissance se d clenche Pour d clencher une note il faut utiliser les instructions suivantes S 54272 DE 17 ou 33 65 129 81 97 AR 16 ou 32 64 128 80 96 DU 250 dur e de la note en millisecondes Voix 1 POKE S 4 DE FOR T 0 TO DU NEXT POKE S 4 AR Voix 2 POKE 5 LI DE FOR 0 TO DU NEXT POKE S 11 DE Voix 3 POKE S 18 DE FOR T 0 TO DU NEXT POKE S 18 AR Nous pouvons maintenant faire de la musique on trouvera en annexe le programme MELODIE Modifiez en tous les param tres et vous serez tonn s des sonorit s diff rentes que l on peut en tirer Le programme MELODIE n utilise qu une seule voix Il est bien certain que l on peut d clencher et arr ter ind pendamment 154 LE LIVRE DU 64 des notes sur chacune des trois voix pour cr er des accords ou des sons plus complexes verra un exemple d utilisation de plusieurs voix dans le programme HELICO qui simule sur la voix 2 le sifflement de la turbine de l h licopt re et sur la voix 1 le bruit des pales avec une forme d
118. sont des variables cha nes LEN A donne la longueur de la chaine argument lue dans le descripteur de la variable c est le 3me octet des 7 qui d finissent la cha ne LEN est toujours compris entre 0 et 255 inclus ASC A prend le premier caract re de la cha ne et donne sa valeur num rique c est dire son code ASCII Attention la cha ne argument ne peut pas tre vide VAL A convertit une cha ne de caract res repr sentant un nombre en une valeur flot tante Pour tre certain d viter la cha ne nulle on peut utiliser 54 LE LIVRE DU CBM 64 AzASCCAS CHR O Exemples de chaines pouvant convenir POUR VAL 10 10 3 2 05 10 2 4 Les fonctions cha nes ont des valeurs chaines leur nom se termine donc par comme pour les variables STR et CHR sont des instructions de conversion STR convertit la valeur flottante d une expression en cha ne de caract res CHR cr e une cha ne de longeur unitaire l argu ment num rique tant consid r comme le code ASCII du caract re LEFT RIGHTS et MID sont des fonctions d extraction Ces trois fonctions ont un argument cha ne A suivi d un argument num rique X 2 pour MID Y et X La valeur de la fonction est une sous cha ne de A dont la longueur est X L argument Suppl mentaire de MID indique quelle position commence la sous cha ne Il peut tre omis dans ce cas BASIC prendra la fin de la chaine 4 monadique
119. sont donn es ci dessous Adresse de bloc somme de v rification Le dernier bloc est plus court que 256 octets 240 LE LIVRE DU 64 Mode d emploi de MON LOAD puis RUN installation du moniteur qui se reloge seul en haut de m moire et se prot ge du BASIC On l appelle ensuite par SYS 2 ou SYS 8 SYS 38893 apr s STOP RESTORE ou RESET Instructions de MON d assemble une instruction langage machine avec la syntaxe COMMODORE Exemple 5000 LDA 15 D d sassemble partir d une adresse et jusqu une autre adresse ou la fin de l cran Exemple D 5000 D 5000 5100 eF remplissage de la m moire avec une valeur donn e Exemple F 5000 5FFF 00 6 ex cute un programme en langage machine Exemple G 5000 H recherche une cha ne d octets en m moire d une premi re une derni re adresse Exemple H 5000 5FFF 00 cherche 00 H A000 BFFF READ cherche READ H A000 FFFF 20D2 cherche 20 D2 L charge une zone m moire de la cassette ou du disque Ne modifie aucun pointeur du BASIC Exemple L MON 08 L MON 01 affiche le contenu d une zone m moire d une premi re une derni re adresse Exemple 000 080 R affiche le contenu des registres du 6510 Exemple R 5 sauve une zone m moire sur cassette d une premi re une derni re adresse Exemple S M0N 08 0801 11EB Il faut donner comme adresse de fin
120. sont les op rateurs alg briques cla ssiques Tous sauf le dernier poss dent deux op randes situ s respectivement gauche et droite du signe op ratoire A noter la diff rence entre le de soustraction qui poss de deux op randes on soustrait la seconde de la premi re du monadique de n gation qui ne fait que changer le signe de l op rande AND DR et NOT ces op rateurs logiques ont un double but les manipulations logiques de valeurs enti res et l utilisa tion dans les instructions conditionnelles ou dans les expres sions conditionnelles Cependant cause de la valeur des op randes conditionnels O FAUX lt gt 0 VRAI les op rations effectuer dans les deux cas sont identiques Ces op rations portent toujours sur des entiers sign s sur deux octets c est dire que les op randes sont compris entre 32767 et 32768 et sont cod s sur seize bits dont le bit 15 sert indiquer le signe 1 n gatif 0 positif Les instructions AND et OR sont tr s souvent utilis es pour modifier des bits l int rieur d un octet donn Illustrons ceci par un exemple soit une valeur incon nue cod e sur 8 bits ce peut tre le contenu d un registre du circuit VIC II ou d un CIA par exemple dont on d sire posi tionner le bit 5 1 Cette op ration consiste prendre la valeur des 7 bits ne pas modifier et superposer cette 59 LE LIVRE DU CBM 64 valeur un octet dont seul le bit 5 vau
121. table en A09E Si la diff rence vaut 80 c est que les codes caract res sont identiques sauf les bits 7 qui sont diff rents 21 LE LIVRE DU CBM 64 Or il peut y avoir deux causes cette diff rence ou bien le bit 7 du caract re dans la table vaut 1 et c est la fin du mot cl dans la table ou bien le bit 7 du caract re dans le tampon d entr e vaut 1 et c est parce que ce caract re a t frapp avec la touche SHIFT enfonc e peut ne pas tre le dernier caract re du mot cl dans la table Ceci explique pour quoi l interpr teur BASIC accepte que l on frappe des abr via tions aux mots cl s comme R shift U au lieu de RUN Dans le cas o deux mots cl s commencent par les deux m mes caract res READ et RESTORE par exemple l abr viation en deux carac t res donne une comparaison avec succ s d s le premier des deux mots cl s rencontr dans la table dans notre exemple READ L abr viation du second peut done s obtenir en 3 ou A caract res comme R shift 5 ou R E S shift T pour RESTORE La derni re phase de l action de l interpr teur de com mande consiste regarder dans le tampon d entr e si le premier caract re est num rique ou non S il est num rique il en d duit que la commande commen ant par un num ro doit tre consid r e comme une ligne de programme ranger en m moire Dans le cas contraire il s agit d une commande interpr ter directement et le contr le est transf
122. tre du WAIT la valeur de masque Cette routine ajoute la valeur 0 5 en flottant au contenu de l accumulateur flottant principal Cette routine soustrait d une valeur flottante rang e en m moire et dont le pointeur est dans les registres et partie basse partie haute la valeur contenue dans l accumulateur flottant principal Le r sultat de la soustraction se retrouve en sortie dans l accumulateur flottant principal Cette routine ajoute au contenu de l accumulateur flottant principal la variable dont le pointeur est constitu par les registres et Y partie basse partie haute Le r sultat de l op ration se retrouve dans l accumulateur flottant secondaire Les deux accumulateurs flottants sont utilis s Valeur 1 en flottant sur 5 octets Valeur 0 5 SQR 2 en flottant sur 5 octets Valeur SQR 2 en flottant sur 5 octets Valeur 0 5 en flottant sur 5 octets Valeur LOG 2 en flottant sur 5 octets 67 LE LIVRE DU 64 JSR 8 Cette routine copie le nombre flottant point par les registres et partie basse partie haute dans l accumulateur flottant secondaire en 6A 6F JSR BAE2 Effectue la multiplication par 10 de la valeur rang e dans l accumulateur flottant principal En sortie le r sultat est rang dans l accumulateur flottant principal BAF9 Valeur 10 en flottant sur 5 octets JSR BAFE Effectue la division de la valeur rang e dans l accumulateur flottant principal par 1
123. trouve le curseur 40 ou 80 caract res si le curseur est pass une fois la ligne sont transf r s dans le tampon d entr e du BASIC en 200 Cette routine est peu de choses pr s I INPUT du BASIC quand l aiquillage est sur le canal du clavier Les appels successifs CHRIN retournent au programme appellant les caract res successifs rang s ce moment dans le tampon d entr e jusque et y compris le caract re RETURN Un appel de plus CHRIN et le processu recommence Elle ne modifie que et X On peut donc utiliser Y comme index dans une cha ne de caract res entrer par exemple Appel par JSR FFCF Ecriture d un caract re sur le canal de sortie Normalement c est l cran mais ce peut tre un autre p riph rique si l on a utilis pr c demment OPEN et CHKOUT Attention ne pas avoir laiss de canaux ouverts en sortie sur le bus IEEE car si plusieurs sont ouverts simultan ment et que l appel CLRCHN n a pas t effectu tous les p riph riques concern s regevront les donn es mises par CHROUT Elle ne modifie que l accumulateur A Appel par LDA CARAC JSR FFD2 Cette routine charge la m moire partir d un p riph rique Elle ne peut utiliser les p riph riques 0 2 et 3 Clavier RS232 et cran Elle peut effectuer au choix un chargement ou une v rification LOAD ou VERIFY 95 LE LIVRE DU 64 94 En entr e si l accumulateur contient 0 on effectuera LOAD s il c
124. une fr quence de coupure bien pr cise si bien que usuellement on se contentera de faire varier les 8 bits de poids forts en utilisant 5 22 uniquement Pour ces 8 bits une valeur de 5 22 de 0 ou 255 donne des fr quences de coupures de 350 Hz 12000Hz Le type de filtre peut tre s lectionn gr ce aux bits 4 5 et 6 du registre S 24 On se rappellera que les bits 0 3 de 5 24 contiennent la valeur VL du volume sonore tandis que le bit 7 contient l indicateur de coupure de la voix 5 Les trois types de filtres possibles sont passe bas passe haut et passe bande Le SID autorise le choix de plusieurs filtres la fois ce qui permet de s lectionner passe bas et passe haut simultan ment on obtient un filtre r jection Un filtre passe bas est un filtre qui ne laisse passer que les fr quences inf rieures la fr quence de coupure Un filtre passe haut c est bien entendu l inverse Un filtre passe bande ne laisse passer que les fr quences avoisinant la fr quence de coupure tandis que le filtre r jection laisse passer toutes les fr quences sauf celles qui avoisinent la fr quence de cou pure 159 LE LIVRE DU 64 Programmation de S 24 soit VL volume sonore 0 15 03 128 pour supprimer la sortie de la voix 5 sinon 0 FI 0 pas de filtrage FI 16 si on d sire un filtre passe bas FI 32 si on d sire un filtre passe bande FI 64 si on d sire un filtre passe haut FI 80 si
125. vo yons l utilisation qu en fait l interpr teur BASIC L inter pr teur BASIC est congu pour ex cuter un et un seul ordre la fois Le d tail de chacun de ces ordres se trouve dans les 76 programmes dont les adresses sont dans la table A00C Les 76 instructions BASIC sont s parer en deux groupes distincts Les 35 commandes BASIC et les 41 fonctions BASIC les commandes sont les 35 premi res instructions de la table en A00C Les commandes BASIC repr sentent des ordres effectuer tandis que les fonctions repr sentent des valeurs tout comme les variables Les commandes BASIC peuvent n cessiter des argu ments Les arguments sont des valeurs soit des variables soit des constantes soit des fonctions BASIC Nous regrouperons les commandes en cing groupes sans argument avec arguments branchemment inconditionnel et conditionnel commandes d entr es sorties 1 LES COMMANDES SANS ARGUMENT sont au nombre de 8 END REM DATA RESTORE STOP CONT CLR NEM Nous allons d tailler ici leur fonction l int rieur de l interpr teur BASIC sans expliciter particuli rement l usage de cette instruction en tant que mot de vocabulaire du langage BASIC Cette approche plus directe de la r alit des choses aide par ailleurs r viser nombre d id es pr con ues sur BASIC et son fonctionnement 55 LE LIVRE DU CBM 64 END CONT NEW 54 et STOP Quand 11 rencontre une de ces instructions BASIC teste c
126. 0 160 2 160 2 R R H COULEUR MODEZ 4 8 MODES ETENDUE COULEUR DU CARACTERE 0 15 LE d d COULEUR DE FOND 9 N Mem N COULEUR DE FOND 1 N COULEUR 2 COULEUR DE FOND 2 COULEUR DE FOND 3 SRM 87 3118 82 RN DN RRM M 1 4 DU GENERRTEUR bc ES SES mericocose o 29 ime LE 1 1 x zoe 208 106 LE LIVRE DU 64 MODES HAUTE RESOLUTION 6 7 L cran du CBM 64 peut tre consid r comme une carte MAP en anglais de 320 points horizontaux sur 200 points verticaux soit 64 000 points A raison d un bit par point ou PIXEL de PICture ELement ou l mment de dessin et de 8 bits par octet on comprend la n cessit d occuper 8 000 octets pour repr senter un cran 11 faut donc crire huit octets dans l cran pour obtenir un dessin de 8 x 8 Pixels ce qui est bien plus lent que l emploi d un seul caract re conmme dans les modes 1 5 Mais l avantage de cette solution est qu il n y a plus de comtraintes sur la position des points allum s ou teints Dans les modes caract res il est impossible d avoir plus de 256 caract res diff rents En mode 6 on peut en cr er 65556 MODE HAUTE RESQUJTION BITMAF COULEUR POINTS COULEUR COULEUR POINTE BITMAP Se SE N NUT LA ECRRH SOS SOS mee 1 mee 1 1 Evenou e Evenou e e 328 X
127. 0 5 165 00A4 164 00A5 165 0046 166 00A7 167 00A8 168 00A9 169 00AA 170 00AB 171 00AC 00AD 172 00AE 00AF 174 00BO0 176 0081 177 00B2 00B3 178 00B4 180 00B5 181 0086 182 00B7 183 00B8 184 00B9 185 00BA 186 114 158 123 145 162 175 175 179 LE LIVRE DU 64 DESCRIPTION Signe accumulateur flottant secondaire Produit des signes des accu flottants Bit de garde accumulateur flottant sec Pointeur vers tampon cassette CHRGOT routine de prise de caract re Point d entr e de CHRGOT sans incr men tation du pointeur de caract res Pointeur du caract re courant dans le texte BASIC Valeur de calcul pour RND OCTET ST STATUS tat des p riph riques Resultat du balayage clavier rang e qui contient STOP SHIFT CTRL Correction de vitesse pour cassette Drapeau 00 1 01z VERIFY Drapeau octet retenu en m moire par la routine de sortie IEEE s rie 0 N retenu par routine de sortie IEEE Drapeau Synchronisation obtenue sur cas sette 0 N Sauvegarde de registre par le KERNAL Nombre de fichiers ouverts P riph rique d entr e par d faut 0 1 P riph de sortie par d faut 3z cran Parit du caract re lu sur cassette Drapeau octet re u sur cassette 0 Drapeau 00zmode progr 80 mode direct Compteur d erreurs cassette l re passe Compteur d erreurs cassette 2 m passe Horloge TI sur 3 octets Compteur de bits re us sur IEEE s rie Octet en cours de r
128. 0 801 0322 0323 802 803 0524 0525 804 805 0326 0327 806 807 0328 0329 808 809 052 052 810 811 052C 032D 812 813 032E 032F 814 815 0330 0331 816 817 0332 0333 818 819 0334 033B 820 827 033C 03FB 828 1019 03FC 03FF 1020 1023 0400 07E7 1024 2023 07 8 07 2024 2047 0800 9FFF 2048 40959 8000 9FFF A000 BFFF CO00 CFFF D000 DFFF 000 52768 40959 40960 49151 49152 53247 53248 57343 57344 65535 Pour le d tail des chapitre correspondent ROM BASIC ROM KERNAL CONTROLEUR D ECRAN VIC II CONTROLEUR SONORE SID CIA IRQ CIA NMI 182 e o 6 9 9 se 44 0 4 se e 4 e q eq eee DESCRIPTION de de de de de de de de de CHKIN CHKOUT CLRCHN CHRIN CHROUT STOP GETIN CLALL USR LOAD SAVE routine routine routine routine routine routine routine routine routine routine routine Vecteur Vecteur Vecteur Vecteur Vecteur Vecteur Vecteur Vecteur Vecteur Vecteur de Vecteur de Inutilis Tampon de cassette Inutilis M moire cran l allumage du 64 Pointeurs de lutins l allumage du 64 ZONE MEMOIRE POUR BASIC TEXTE VARIABLES TABLEAUX ESPACE LIBRE CHAINES ZONE
129. 0 En sortie le r sultat est rang dans l eccumulateur flottant principal JSR BBOF Cette routine divise le nombre flottant point par les registres A et Y partie basse partie haute par la valeur du contenu de l accumulateur flottant principal sortie le r sultat est rang dans l accumulateur flottant principal JSR BBA2 R alise la recopie du nombre flottant point par les registres A et Y partie basse partie haute dans l accumulateur flottant principal JSR 7 R alise la recopie de la valeur contenue sur 5 octets dans l accumulateur flottant principal dans les 5 octets de m moire dont le pointeur est rang en page z ro en 5C et 5D partie basse partie haute JSR BBCA Routine identique la pr c dente mais avec le pointeur de destination rang en 57 et 58 ISR BBD4 Routine identique la pr c dente mais avec le pointeur de destination rang dans les registres X et Y partie basse partie haute JSR BBFC Cette routine recopie le contenu de l accumulateur flottant secondaire dans l accumulateur flottant principal JSR 8C2B Cette routine r alise le test de signe de l accumulateur flottant principal En sortie si la valeur tait nulle l accumulateur A du 6510 vaudra 00 Si elle est positive il vaudra 01 et si elle est n gative il vaudra FF soit 1 en notation compl ment 2 ISR BC3C Cette routine prends la valeur contenue dans l accumulateur A du 6510 et la conver
130. 00 000 000 000 000 DATA240 240 240 240 000 000 000 000 DATAOL5 015 015 015 000 000 000 000 DATAOO0 000 000 000 015 015 015 015 DATAODO 000 000 000 240 240 240 240 DATA255 255 255 255 000 000 000 000 DATA240 240 240 240 015 015 015 015 DATA240 240 240 240 240 240 240 240 DATAO1 5 015 015 015 015 015 015 015 210 DATAOL5 015 015 015 240 240 240 240 DATAOOO 000 000 000 255 255 255 255 DATA255 255 255 255 015 015 015 015 DATA255 255 255 255 240 240 240 240 DATA240 240 240 240 255 255 255 255 DATAO1 5 015 015 015 255 255 255 255 255 255 255 255 255 255 255 255 REM JEU DE CARACTERES NUMERO 3 E DATA160 080 160 080 000 000 000 000 DATAO10 005 010 005 00 DATAOO0 000 000 000 010 005 010 005 DATAO00 000 000 000 160 080 160 080 DATA1 70 085 170 085 000 000 000 000 306 DATA160 080 160 080 010 005 010 005 307 DATA160 080 160 080 160 080 160 080 308 DATAOLO 005 010 005 010 005 010 005 309 DATAOLO 005 010 005 160 080 160 080 310 DATAOO0 000 000 000 170 085 170 085 311 DATAL70 085 170 085 010 005 010 005 312 DATA170 085 170 085 160 080 160 080 313 DATA160 080 160 080 170 085 170 085 314 DATAOLO 005 010 005 170 085 170 085 315 DATA170 085 170 085 170 085 170 085 399 REM JEU DE CAR CTERES PROG 400 eg 401 DATA255 126 060 024 000 000 000 000 402 DATAOO1 003 00 7
131. 015 01 5 00 7 003 001 403 DATAOO0 000 000 000 024 060 126 255 404 DATA128 192 224 240 240 224 192 128 408 DATAOO 1 003 007 015 03 1 063 L2 7 255 409 DATA129 195 231 255 255 231 195 129 410 DATAL28 192 224 240 248 252 254 255 411 DATA255 127 063 031 031 063 127 255 412 DATA255 255 255 255 255 231 195 129 413 DATA255 254 252 248 248 252 254 255 413 DATA129 195 231 255 255 255 255 255 415 DATAO00 060 112 066 066 112 060 000 416 DATAO00 060 126 126 126 De 060 000 417 DATAOOO 126 036 036 066 066 126 000 418 DATAO00 126 060 060 126 126 126 000 499 REM DEFINITION LUTIN CARACTERE 500 ee 501 000 000 000 000 000 000 000 502 DATAOO0 000 000 000 000 000 000 000 503 DATAOO0 000 000 000 000 000 000 000 504 DATAOO0 000 000 000 000 000 000 000 505 DATAOO0 000 000 000 000 000 000 506 DATAOO0 000 000 000 000 000 000 600 507 DATAO0O 000 000 000 000 000 000 000 508 DATAO00 000 000 000 000 000 000 000 599 REM DEFINITION LUTIN MENU 600 HEU SUITE 601 DATAO24 000 000 060 000 000 126 000 602 DATAOO0 25 5 000 000 02 4 000 000 024 603 000 024 000 000 024 063 240 604 DATAO2 4 080 008 000 07 2 004 000 056 605 DATAOO4 000 008 004 024 016 008 024 606 DATAOL 6 008 02 4 016 008 024 008 004 607 DATAO24 007 255 255 000 000 126 000 608 DATA000 060 000 000 02 4
132. 016 ADRES 0018 VICIRQ 019 IRMK BORD 020 CFOND 0021 022 0022 00 5 0025 CIAICR DCCD BANC DDO0 MIRQ FINIRQ FEBC NMDE 301 COMPTE FB INIT ei STA IRQVECH c RTS MIX VICIRQ STA VICIRQ AND 01 EEQ INTRT DEC COMTE VECTEUR D INTERR EN RAM 3VIC 11 CONTROLE 1 REGISTRE DE BALAYAGE 3VIC 11 CONTROLE 2 ADRESSE ECRAN POUR VIC 1 3VIC 11 CONTROLE D INTERRUPT ON 3FLAGS D INTERRUPTIONS OOULEUR DU BORD 3VIC 11 COULEUR DU FOND 3VIC L1 COULEUR AUX NUMERO 2 VIC 1 1 COULEUR AUX NUMERO 5 REG D INTERRUPTION DU CIA 2 3VIA 2 CONTROLE DU BANC MEMOIRE DU VIC II 3ROUTINE D INTERRUPTION NORMALE 3SORTIE D INTERRUPTION NORMALE NOMBRE DE MODES DESIRES SIMULTANEMENT 01 POUR 2 MODES 02 POUR 3 MODES ETC NUMERO DE LA PROCHAINE INTERRUPTION 3 NTERDIT LES INTERRUPTIONS ARRETE LES INT DU CIA 2 SAUTORISE LES INT DE BALAYAGE VALEUR DE DEPART DU NUMERO D INTERR MODIFIE LE VECTEUR D INTERRUPTION vs ue ws ve 3EFFACE LA DEWE D 5ERR JEN COURS S PAS BALAYA 3 FIN SINCN LE COMPTER 351 LE DERNIER REDEMARRE COMPTAGE POSITION DANS LA TABLE COULEUR DE FOND BANC MEMOIRE VIC I iic CONTROLE 1 W CONTROLE 2 STE DU BORD COULEUR AUX NUMERO 2 ICOLEUR AUX NUMERO 3 ADRESSES ECRAN ET GEN DE CARACTERES N LIGNE DE BALAYAGE JOU ON VA CHANGER DE MODE 3 259 LE LIVRE DU 64 00075 065 3 IL NE RESTE PLUS QU A S OCCUPER DE L
133. 0160 DATA DATA 20180 DATA 20190 DATA 20200 DATA END 55555 SAVE GO DESSIN 8 RO 820 Bo 28 8 U 2 E E DESSIN MOYRES Au chargement un petit d lai est n cessaire pour la construction des lutins Ensuite le lutin crayon appara t au centre de l cran Il trace en noir et blanc avec une r solution de 50 80 points en mode graphique l en utilisant des quarts de caract res Les touches CRSR sont fonctionnelles ainsi que CLR et HOME bien que cette derni re ram ne le curseur au centre de l cran Les touches de fonction modifient le type de curseur 204 LE LIVRE DU 64 mn La D crayon avec pointe cayon sans pointe gomme curseur invisible E N N es Noter la fa on plus tass e et plus rapide de codage des lutins par rapport au programme DESSIN 6 REM KkKkkkkkKkkkkkkkkkkkkkkkkikkikkkkkkkk 7 REM DESSIN POUR COMMODORE 64 EN 8 REM MOYENNE RESOLUTION MONOCHROME 9 REM 20 PRINT CLR UN INSTANT S V P REM EFFACE L ECRAN 30 XMAX 80 50 40 HOME 1024 50 CO 55296 51 DIMA 15 FORI OTO15 READA T NEXT 52 DIMAA 255 FORI OTIO15 AMARI NEXT 60 PRINT as FOR I CO TO CO H024 70 POKE I O NEXT I REM REMPLIT LA RAM COULEUR 80 GOSUB 1000 85 40 25 92 GE 126 194 226 123 97 255 236 108 127 225 251 98 252 254 160 25 MEO ER 100 REM sed PRINCIPALE 110 GET 120 IF
134. 032 199 DATAO32 155 000 216 032 219 064 158 DATAO32 208 037 208 112 158 112 193 DATAOO0 194 000 159 000 152 032 155 DATAO3 2 199 032 15 5 064 158 032 219 DATA107 158 112 158 037 208 112 158 DATAOO 0 159 000 REM POUR DUTINE EFFACE ECRAN DATAOO1 169 060 133 098 169 204 133 DATAO99 169 000 133 100 169 208 133 DATA101 17 3 124 200 160 000 032 175 DATA 200 208 251 169 000 133 098 169 DATAL96 133 099 169 232 133 100 169 DATA199 133 101 169 015 032 175 200 DATA208 251 09 6 14 5 098 230 098 208 9 DATAO02 230 099 166 099 228 101 208 002 166 098 228 100 096 120 REM DE CAR CTERES NUMERO 10 121 REM esee desee ede ede fede jede deiode seek 122 DATA255 000 000 000 000 000 000 000 3 DATA128 128 128 128 128 128 128 128 124 DATA128 064 032 016 00 8 004 002 2 001 DATA001 00 2 004 008 016 0325064128 DATA255 128 128 128 128 128 128 128 DATA25 5 064 032 O16 008 004 002 001 DATA255 002 004 008 016 032 06 128 DATA1 28 192 160 144 136 132 130 129 130 DATA129 130 132 136 144 160 192 128 DATA129 066 036 024 024 036 066 129 DATA255 192 160 144 136 132 130 129 DATA255 130 132 136 144 160 192 128 DATA255 066 036 024 024 036 066 129 DATA129 194 164 152 152 164 194 129 DATA255 194 164 152 152 164 194 129 REM JEU DE CARACTERES NUMER SE DATA000 000 000 0
135. 079 004 162 014 157 024 959 DATAO04 202 208 250 169 058 14 1 068 967 DATAOOA 141 071 004 169 046 151 074 975 DATAO04 169 01 3 14 1 07 8 004 17 3 134 983 DATAO02 162 013 157 065 216 202 208 216 991 DATA250 07 6 167 00 2 120 169 049 141 999 DATAO20 003 169 234 141 021 003 088 1007 096 1008 REM CHECKSUM 15275 DE 839 A 1007 2000 REM INIT ET REGLAGE HORLOGE 2010 CS 0 FOR 1 67 910753 020 READ POKEI A CS CS4A NEXT 2030 IF 5 lt 58000 THEN STOP 2040 CS 0 FOR 1 839T01007 2050 READ A POKE I A CS CS A NEXT 2060 IF 5015275 STOP s LE LIVRE DU 64 2070 INPUT E PUT QUE MOS ED BAS JMATIN 9 OU APRES MIDI P AS 2080 PRINT S ei 2090 PRINT INPUT QUELLE MINUTE 0 59 2100 IFH gt 9THENH HF6 2110 45 1 1 128 2120 56328 IC POKEC 1 0 2130 M M INT M 10 2140 POKEC 2 d 0 5 5839 2998 R RETURN 3000 REM REGLAGE DU REVEIL MATIN 3010 PRINT PRINT HREGLAGE DU REVEIL MATIN 3020 PRINT INPUT MATIN QU AIRES MIDI 3030 PRINT INPUT HEURE 0 1 15i 3040 AS LEFTS AS 1 it ex 128 5 7 3050 PRINT INPUT M NUTE 0 59 3060 M LHNTOMLOS 6 3070 POKECH7 136 POKECH2 M POKEC 1 POKEC 7 8 3080 POKE5427 3 99 POKE5427 8 240 E lee 3090 54287 2 POKE 54290 17 3998 RETURN 3999 55555 SAVE REVEIL MATIN 8 READY SAUVEUR par A SURNY Ce programme en langage machine est lo
136. 1 391 S aus BAS C BAS C BAS C BAS C BAS C BAS RVS ON sl Ee AE 7 400 410 FORTD 1T0500 N 420 PRINT C BAS C as 1000 E C BAL EEE 00 NON 1010 GETAS FA 601010 1020 IF O GOTO15 1030 60101200 1040 50701010 1200 PRINI C BAS C BAS C BAS C B S C BAS C BAS C BAS AU REVOIR 1210 F RI ITO350 NEXT 1220 PRINT Kal NEW 55555 SAVE ENDISK 8 READY LE LIVRE DU 64 ARC EN CIEL Affichage de 256 couleurs l cran par un mixage proportionnel des 16 couleurs de fond avec les 16 couleurs de trac Bel exemple d utilisation du mode caract re tendu 0 MODE GRAPHIQUE 6 5 DIM A 7 3 COS 15 10 REM PREND ROM LES DE COULEURS 12 FOR I 0015 REA DC COS I CHRS C NEXTI 14 REM COPIE 64 CARACTERES ROM gt RAM 15 RA 3276 8 R0 5324 8 MA 64 8 16 PRINT SIR sel INSTANT 5 20 5633 Deh 30 FORI OTO MA PORE PEEK SCH 40 NEXT 1 Poke PREK 1 ORA 206563 4 1 60 55 0 POK 56 128 70 POKE 56376 197 R M VIC LT Kr Pad 90 0 53272 32 REM 34816 GEN 32768 110 REM DIT U KERNAL OU EST L ECRAN 120 POKE648 3481672563 PRINTCHRS 147 130 PRINT AE Z amp 210 POKE53265 91 REM PASS EN MODE TENDU 215 POKE53280 ll REM COULEUR BORD 220 POKE53281 11 POKE 53282 12 POKE 53283 15 POKE 53284 1 230 REM MODIF E LES CARACT RES Zei 240 FOR I
137. 1 687 DATAO02 169 192 141 002 220 169 128 633 DATA141 000 220 160 128 234 136 016 703 DATA252 173 025 212 157 232 002 173 711 DATAO26 212 157 234 002 17 000 719 009 128 141 236 002 2175 064 9220 727 016 222 173 23 002 141 1 002 220 735 17 3 00 1 220 TAN 237 00 2 08 8 096 736 REM CHECRSUM 8274 AS 679 742 55555 SAVE 00 POIGNEES READY 248 LE LIVRE DU 64 PRESS RETURN 1 ET PRESS RETURN 2 Deux petites routines en langage machine qui attendent la frappe de la touche RETURN avec un changement des couleurs de fond et de bord tr s rapide plus de 10 000 fois par seconde et moins rapide environ 1000 fois par seconde Dans PRESS RETURN 1 on peut remplacer le code ASCII 013 du RETURN par une autre valeur 51223 fin 1 ligne 51216 Par exemple employer 48 pour tester la touche 0 Modifier en cons quence la valeur CS en ligne 20 La m me manoeuvre est possible dans PRESS RETURN 2 en 51228 au lieu de 51223 L REM ATTEND FRAPPE DE RETURN s 8 REM AVEC EFFETS SPECIAUX ECRANS 10 5 0 512007051238 READ A 5 8 20 5 lt gt 6268 5 9 PRINT GIR BAS C BAS TAPEZ RETURN 50 END 80 REM CETTE ROUTINE MARCHE N IMPORTE OU EN MEMOIRE 90 REM FAIRE SYS DEBUT ROUTINE 51200 DATA173 032 208 141 254 199 173 033 51208 DATA208 14 1 255 199 200 140 032 208 51216 DATA140 0
138. 1 AR 20 En effet la modulation en anneau n est disponible que sur les formes d ondes triangulaires A nouveau le seul param tre de la voix annexe qui est utilis ici est la fr quence Les deux paragraphes ci dessus nous am nent conclure qu il est souvent ind sirable d couter la voix 3 lorsque seule sa fr quence nous int resse pour synchroniser ou moduler la voix 1 Nous verrons plus loin que la voix 1 est en fait privil gi e car il est possible gr ce au registre 24 du S I D de couper totale ment la sortie du 3 me oscillateur qui nous sert moduler ou synchroniser la voix 1 La modulation en anneau ne peut se concevoir raisonnablement avec l un ou l autre des oscillateurs impliqu s ayant une fr quence nulle Usuellement on fera varier simultan ment les fr quences des deux canaux intermodul s On verra des exemples de ceci en annexe dans le programme ANNEAU L INTERACTION DE L ENVELOPPE AVEC UN AUTRE PARAMETRE Le registre 28 du SID permet de lire tout moment l ampli tude de l enveloppe de la voix 3 valeurs de 0 255 Cette valeur peut servir par exemple modifier la fr quence d une des voix suivant l intensit de la note Les possibilit s de ceci sont tr s nombreuses voir entre autre un exemple dans le prog ramme ANNEAU 11 est possible ainsi par exemple de changer la forme d onde pour les amplitudes inf rieures une valeur donn e LES FILTRES IT ATTENTION cause de probl
139. 100 SP 1 XA 2 4 YA 22 8 00508 12510 12101 GOSUB 12510 12108 REM DEPLACEMENT LUTIN 2 12110 SP 2 XA 2 4 YA 250 GOSUB 12510 12118 REM DEPLACEMENT LUTIN 3 12120 Sp 3 XAF22 3 E GOSUB 12510 12128 REM DEPLACEMENT LUTIN 4 12130 Sp 4 X SP 4 XA 4 8 YA 228 GOSUB 12510 12200 Zeta 12201 REM SOUS ROUTINE DEPL JOYSTICK 12202 REMXXRARRRRRAERRRRRRAREXRERERERAE 12204 REM VARIABLES UTILISEES DANS LA SOUS ROUTINE 12205 REM SX SY INCREMENT DE DEPLACEMENT DU LUTIN 12206 REM COORDONNEES D ARRIVEE 12207 REM XD YD COORDONNEES DE DEPART 12208 REM X X COORDONNEES DE TRAVAIL POUR 12209 REM APPEL DEPLACEMENT LUTIN ege REM SP NUMERO DU LUTIN 12213 REM INITIALISATION DES VARIABLES 15 215 SY 2 SX 2 XA SP XA YA SP YA 12218 REM TEST SI DEPLACEMENT NEGATIF 12220 IF TAE lt THEN SX 2 2222741 IF YA SP lt YD SP THEN SY 2 12238 REM INITIALISE VARIABLES DE TRAVAIL 15240x X XD SP Y YD SP 125405 REM DEBUT DE LA BOUCLE DE MOUVEMENT 12248 REM TEST DE FIN DE MOUVEMENT HORIZONTAL 12239 1 IF X XA SP THEN SX 0 12258 REM TEST DE FIN DE MOUVEMENT VERTICAL 12250 IF Y YA SP THEN 5 0 12268 REM CALCUL DES NOUVELLES COORDONEES 15559 45 Y Y4SY 12278 REM APPEL DEPLACEMENT LUTIN 1220 GOSUB 12713 12288 REM TEST ET FIN DE BOUCLE MOUVEMENT 12290 IF SX 0 AND SY 0 THEN 12310 12300 5 GOTO 12250 123 12308 REM NOUVELLES COORDONNEES DE DEPART 12310 egere 12320 YD SP YA SP 12330 RETURN 12500 REMS
140. 12810 POKE VIC 2 SP 1 Y 12820 RETURN 13000 BE kkkkkkkkkkkkkkkkkkkkkkkkkkkkk 13001 REM SOUS ROUTINE MENU 13002 REMA kkkkkkkkkkkkkkkkkkkkkkkkkkkk 13004 REM VARIABLES UTILISEES DANS LA SOUS ROUTINE 13005 REM PAGE 0 MENU NORMAL 13006 REM 1 PROGRAMMATION DES CARACTERES 13007 REM AS 19 TABLEAU CONTENANT LES MENUS 13008 REM MISE N PLACE DU CURSEUR 13010 POKE 211 0 POKE 214 20 SYS 58732 13018 REM BOUCLE D AFFICHACE 13020 FOR 1 0 TO 9 13030 PRINIASCHPAGPMIO J 13040 N NEXT 13047 REM AFFICHAGE DU DERNIER CARACTERE ET DE LA POUBELLE 13050 POKE 999 30 13060 IF THEN POKE 04999 13 POKE VIC49 228 13070 1 IF PAGE 1 THEN POKE CO 999 7 POKE VIC 9 250 13077 REM DANS LA PAGE O MISE A JOUR DES COULEURS DE FOND 13080 TE PAGETO THEN FOR I 0 TO 2 POKE 802 2 1 PEEK VIC43441 T 13081 EE THEN FOR 1 0 TO 2 POKE CO484242 I PEEK VIC434 I T 13087 13088 REM SI 1 APPEL PROGRAMMATION DES CARACTERES 13090 IF 1 THEN GOSUB 19016 13100 RETURN 14000 REM kkkkkkkkkkkkkkkkkkkkkkkkikkk 14001 REM SOUS ROUTINE OPTIONS 14002 REMA k kA kkk kik kkk kkk kikk RRK 14004 REM VARIABLES UTILISEES DANS LA SOUS ROUTINE 14005 REM XA YA POSITION DU LUTIN 14006 REM D FAIT LA DIFFERENCE ENTRE LA PROGRAMMATION 271 LE LIVRE DU 64 14007 REM OU LE CHOIX DE LA COULEUR DE FOND EEN NUMERO DU FOND CONCERNE 14010 REM APPEL MENU 0 14012 IF XA 24 AND YA 226
141. 15 00215 228 DO F6 60 58 CE AD 01 A2 FF g BD 80 CE FO 05 4C FA CD 8868 8385 Ram A9 5B 20 A7 CD ER S 553908 25 55586 8 R8 A E Ul 858838955588 32388E2S9g59 43 NIS 89 CHERCH SI PAS TROUVE RETOUR ET IMPRESSION 5 RTS 3ORDINAIRE Y EST A ZERO FOUND STX CNT 1CNT POS DU MESSAGE DANS LA TABLE LDY 01 RTS Y 1 SIGNIF IE QUE LA CONVERSION A EU LIEU PPEHIHEHHHHEH HHHEBHHHEHEHHEHUHHOHHOHHHHH KKK DIALI LDX FF Y A UN 00 DEVANT CHAQUE MESSAGE DI3 IX LDA MSG X BEQ ZERO JON COMTE LES MESSAGES MP 013 ZERO DEC CNT 3EN DECREMENTANT A CHAQUE FOIS CNT LDA CNT 3EST CE LE BON MESSACE 7 BNE 013 381 NON CONTINUER A DECOVPTER PE 351 ENVOI DU CROCHET DE DEBUT DE MESSAGE JSR DIAL JENVOI DU CARACTERE DI4 INX POINTE VERS LE DEBUT DU BON MESSAGE LDA 56 00 351 FIN DE MESSAGE BEQ 015 SON SORT JSR DIAL 3SINON ENVOI D UN CARACTERE DU MESSAGE AP 014 JET RECOMENCER POUR LE CARACTERE SUIVANT 015 1 ENVO DU CROCHET DE FIN DE MESSAGE AP DIAL LE MESSAGE COMPLET EST ENVOYE Q THEHHHEBHHHBHHHHHHEHHBHHDHHHHHHEHHHHHHHHOHHHHHHHHHHHHHHHHHHHHHK SROUTINE INITIALISATION DU CANAL DE SORTIE S01 F F ICHIER EXISTE BEQ 502 MP F701 3SINON IL Y A ERREUR S02 LIT N DE FERIPH LDA DEVICE 3EST CE L IMPRIMANTE QP CANAL BEQ 505 SINON ON ENVOIE Ap SOT AU KERNAL S05 F275 3METTRE SON NUMERO EN 9A iHHBHHHOHHHHOPHHHH
142. 150 POKE VIC 24 PEEK VIC 24 AND 240 OR 1128 REM CREATION DES CARACTERES 1130 FOR I 0 TO 511 1140 READ A POKE CAHI A paesi 1158 REM CREATION DES POINTEURS DE LUTINS 1160 FOR I 0 TO 5 1170 FOT 8 1180 NE 1187 1188 REM ALLUMAG DES LUTIN ESAE POKE 21 63 REM 00111111 1198 REM CHOIX COULEURS LUTINS 1200 POKE 39 11 POKE VICH 40 6 POKE VICH 1 6 1210 POKE VICH42 6 POKE VICH43 2 POKE VIC H44 10 1217 1218 REM MISE EN PLACE DES LUTINS 1220 GOSUB 12010 1227 1228 REM EFFACE LA PAGE DEMO 1230 GOSUB 11010 RETURN 1500 REM k kiok kkk kiok iek ok kkk kkk kk kk kk 1501 REM SOUS ROUTINE ENTREE MOUVEMT 1502 REM Adekdekdekedededeiekejekdedsededede dee edededesesek 1504 REM VARIABLES EMPLOYEES DANS LA SOUS ROUTINE 1505 REM PL TEST PADDLES OU JOYSTICK 1506 REM DIR SAISIE DU PORT II JOYSTICK 1507 REM XA YA COORDONNEES POUR APPEL DEPL JOYSTICK 1508 REM PX PY INCREMENT AUX COORDONNEES 1509 REM XP YP VALEURS DES POIGNEES DU PORT I eg REM EXEY COORDONNEES DU CARACTERE DANS L ECRAN 1512 TEST SI POIGNEES OU JOYSTICK ie IF PL 1 THEN 1630 1318 REM DEBUT DE LA BOUCLE JOYSTICK 1518 REM LECTURE PORT II DU JOYSTICK 13201 DIR PEEK 56320 1528 REM TEST SI TIR 1530 IF DIR lll THEN 1690 1538 REM TEST DE MVT SANS TIR 1540 DIR DIR 117 IF DIR O THEN 1520 1548 REM CALCUL DE LA POSITION DU LUTIN 1550 el 1560 YA ND S PHPY DIR 1568 REM TEST DE LIMITES ECRAN 1570 IF XAQ24 THEN
143. 16 K du VIC II 4 Ajouter 16384 num ro du banc m moire VIC II Parall lement la RAM Couleur d adresse immuable 55296 poss de 1000 quartets de longueur Un quartet est un demi octet ou groupe de 4 bits Les valeurs d un quartet vont donc de 0 2 exposant 4 1 soit 15 Chaque quartet contient donc 4 informa tions pr cisant quelles couleurs sont utilis es pour repr senter le caract re dont le pointeur a une position similaire dans la zone POINTEURS Pour faciliter la compr hension des exemples de ce livre d finissons d abord comment calculer la position en m moire du pointeur d un caract re dont on conna t les coordonn es dans l cran si l adresse du d but de la zone POINTEURS s appelle BASE l ad resse d un pointeur se calcule ainsi POINTEUR BASE X 40 Y avec X compris entre 0 et 39 inclus et compris entre 0 et 24 inclus De m me COULEUR 55296 X amp 40 Y 105 LE LIVRE DU 64 MODES 1 ET 2 CARACTERES TSIN N RAM N COULEUR COULEUR DE FOND 9 8 COULEUR CARACTERE 8 15 e GENERRTEUR DESSIN 8 DE CRRRCTERES ROM RAM UNE COULEUR RU CHOIX ENTRE B ET 7 COULEUR DE FOND 8 COULEUR DE FOND 1 COULEUR DE FOND 2 LES BITS 0 2 DON NENT LES COULEURS CARACTERE 9 7 VOIR MODES 1 amp 2 im RRM N BENERRTEUR Ee DE CRRRCTERES Ir N N RN si armes D I eeu e 16
144. 2 CLOSE CLOSE 2 END 1500 PRINIQ SSQS QUEL NUMERO 605083000 IFA 0 1030 REM EFFACE 1520 PRINTQSSSS Q ON EFFACE RVS OFF n 1525 O0 Ro J NSCA TRYS ONJ 1530 PRINT 2 S0 N A RUN 1700 PRINTQS SSQS QUEL NUMERO GOSUB3000 IFA 0 1030 REM LOAD NO 1710 53280 254 POKE 53281 246 1720 PRINI RVS OFFlICLR CYAN LOAD CHR 34 N A CHRS 34 8 298 LE LIVRE DU 64 1730 631 19 632 13 POKE198 2 CLOSE L CLOSE 2 END 1800 PRINT wes DE FIN 256 PEEK 6 H PEEK A5 END 2000 GET 1 AS AS AS BS REM LIT UNE LIGNE 2090 GET L BS IF ST lt gt 0 GOTO1000 REM FIN 2110 GETAL RS 1 CHE AT THEN N H N H B GOTO 2110 2120 GET 1 CS 1F 82958542 THEN Ee 2140 GET L CS IFSTCO 1000 2160 GET 1 B IF B lt gt 2160 2999 RETURN 3000 GOSUB4000 5 9 COSUBA000 A VAL BSHAS RETURN REM 2 CHIFFRES 4000 198 O WAIT198 1 GETAS PRINTAS RETURN 55555 SAVE G DIR 8 i GE READY ENVELOPPES Programme de d monstration des enveloppes sonores complexes du SID Les enveloppes complexes sont obtenues en modifiant pendant la dur e de la note la valeur du bit DE AR de d clen chement arr t de l enveloppe tr molo etc 1 REM ENVELOPPES COMPLEXES l 20 5 54272 GOSUB500 VL 15 AR 16 DE AR 1 80 AD 8 16 6 SR 12 L6 6 POKE S 24 VL 90 PRINT 1 ENVELOPPE NORMALE 91 PRI
145. 2 0 2 0 49520 DATA 12 56 60 102 126 96 60 0 E AT 49544 DATA 0 60 96 96 96 60 12 56 49552 DATA 28 3 28 34 28 2 28 0 49560 DATA 0 28 34 28 0 0 0 0 49568 DATA 24 60 102 d 0 0 49576 DATA 255 255 255 255 255 255 255 255 40584 DATA 20 13 29 136 133 134 135 17 49592 DATA 34 122 113 39 119 11 49600 DATA 40 114 100 189 99 102 116 120 49608 DATA 183 121 103 33 98 104 11 7 118 49616 DATA 188 105 106 182 44 107 111 110 49624 DATA 41 112 108 45 58 109 181 50 49632 DATA 60 35 184 19 1 61 36 61 49640 DATA 38 95 4 185 32 2 07 3 49648 DATA 255 148 141 157 140 137 138 139 0 81 52 87 83 69 49672 DATA 85 55 85 71 56 49680 DATA 86 57 73 7 79 49688 DATA 78 190 80 76 10 4 47 77 64 49696 DATA 46 62 42 37 147 1 61 222 49704 DATA 43 49 95 4 50 32 5 65 49712 DATA 131 255 148 141 157 144 141 142 49720 DATA 143 145 150 219 176 151 17 3 174 49728 DATA 178 1 152 221 186 153 169 192 95 154 172 165 155 162 161 49744 DATA 181 171 41 179 92 48 167 187 49752 DATA 180 1 0 166 175 182 220 6 2 91 49760 DATA 164 60 168 223 03 147 1 61 49768 DATA 222 63 129 95 4 149 160 2 49776 DATA 177 131 255 255 255 255 255 255 49784 DATA 255 255 255 28 23 1 159 26 49792 DATA 19 5 255 156 18 4 30 3 6 20 24 31 25 7 158 2 49808 DATA 8 21 22 1879 10 146 13 49816 DATA 11 15 14 255 16 12 255 255 49824 DATA 27 0 255 28 255 29 255 255 49832 DATA 31 30 255 144
146. 20 GOTO 63630 63793 REME d er dree dree Ari 63794 REM SOUS PROGRAMME 63795 REM MOTS CLEFS BASIC 63796 REMfcckdckkiekokokkclededekdodekeolelckedekeekk 63797 REM T INDICE DE RECHERCHE 63798 REM D NUMERO DU MOT CLEF BASIC 63799 63800 T TB D CHAR 128 0 0 63801 63803 REM SI NUMERO DU MOT EST 63804 REM NUL ALLER A L IMPRESSION 63810 Ir D 0 THEN 63850 63813 REM SAISIE D UN CARACTERE DANS 63814 REM LA TABLE DES MOTS CLEFS 63820 P PEEK T 63823 REM SORTIE DE CETTE LIGNE SI 63830 IF PX128 THEN T I41 GOTO 63820 63833 REM REMISE A JOUR DES INDICES 63832 R REM ET RETOUR AU MOT CLEF SUIVANT 63840 T T 1 D D 1 63810 63843 REM SAISIE DU BON CLEF TEST 63844 REM DE FIN DE MOT CLEF SI OUI 63845 REM ALORS 0 1 63847 63850 P PEEK T IF gt 127 THEN P P 128 0 1 63953 REM IMPRESSION DU MOT CLEF BASIC 63860 1 PRINT CHRS P fait 63863 REM SI FIN DE MOT CLEF RETOUR AU 925222 PROGRAMME PRINCIPAL 63870 Q 1 THEN 63750 63871 63873 REMA 63874 FIN DU SOUS PROGRAMME 63875 REMA deiere jede LR RARE 63877 63880 GOTO 63850 63881 63882 REM AXAR kkk kk kk kk eese fefe ese kk kkk kk 63883 REM SOUS PROGRAMME 63884 REM GUILLEMETS 63885 REMA kkkkkkkkkkkkkkkkkkkkkkkkkkk 63887 63891 63893 REM TEST SI CARACTERE DE CONTROLE 63900 CHAR 28 JOR CHARD159 AND CHAR lt 256 THEN PRINICHRS C 63901 M 63903 RE
147. 2445 POKE VIC 32 7 POKE VIC 33 5 20569 REM EXTINCTION DES LUTINS 20570 POKE VIC42 1 0 20578 20579 REM EFFACE L ECRAN 20580 PRINT CLR NOIR RETURN 20600 REM 7 4xkXyke dedeckoekelekokeiekoielek 20601 REM SOUS ROUTINE PRINT IMAGE kkkkkkkkkkkkkkkkkkkkkkkkkkkkk 20610 OPEN4 4 CBS CHRS 8 E 5017 6 G 49152 REM ECRAN GENERATEUR 20620 0 0 01 1 62 2 20630 FOR 1 0 TO 7 P 1 22 20640 FOR 1 39 TO CO STEP L PRINT 4 C8 FOR J CO TO 19 FOR 0 TO C7 LE LIVRE DU 64 20650 G re MPEEK G HPEEK EHL HOR JAND63 CBHK 20660 Z Q Z Q e D 20670 PRINI A GER G lt lt AND 12 127 4128 pu i 20680 2 0 2 JE 206 90 D SE EIU GOTO 20710 2079 Zei FOR L CO TO 159 PRINT A CHRS Z L ANDI27 128 20720 Z L 12 128 58 NEXT PRINT PRINT 4 20730 IF R C 20740 CLOSE 4 RET 20 30000 REM seedesese ek dee de efe ede ek eee deese eee 30001 REM CREATION DES ROUTINES EN LM 30002 REM kkkikkkkkkkkkkkkkkkkkkkkkkkk 30004 REM LECTURE POIGN ES SYS 679 30005 REM RESULTATS PORTl 744 Y 746 TIR 749 30010 CS 0 FOR 1 679 TO 742 RE D A P KE I A CS CS A NEXT I 30020 IF 828274 THEN STOP 30102 REM SAUVE L ECRAN SYS 51200 30103 REM RECUPERE L ECRAN SYS 51203 30110 CS 0 FOR 1 51200 TO 51323 READ CS CS4A NEXT I 30120 1 IF 5 lt gt 15304 THEN STOP 30202 REM EFFACE L ECRAN SYS 5 30210 CS 0 FOR 1 51324 TO 51393 POKE I A CSzCS4A NEXT 30220 IF
148. 251 p 45 4C BYTE DEL 00 00232 CEB9 52 4F ROUGE 00 00255 CEBF 45 BYTE C DROITE 00 00254 CEC8 56 45 BYTE VERT 00 00255 CECD 42 4C BYTE BLEU 00 00256 CED2 4D 41 BYTE MAJUS 800 00237 CED9 4 4 NOIR 00 00238 CEDE 45 BYTE C HAUT 00 00259 CEE5 2 56 RVS OFF 00 00240 CEED 43 4 52 BYTE CLR 00 229 LE LIVRE DU 64 00240 00241 49 4E 00241 CF5 00 00242 CEF6 50 4F 00242 00243 00245 00244 00244 00245 CFO 43 59 00245 CF11 00 4F 52 45 4A 41 CF19 4F 52 52 4F 43 59 50 4F 00 56 45 CF45 42 4C 00 00255 CF4B 4A 41 CF54 46 51 46 32 46 55 CFD 46 34 CF60 46 35 CF65 46 36 00 CF66 46 57 CF69 46 38 230 BYTE BYTE BYTE BYE BYE NLIN BYTE INST 00 POURFRE 00 C GAUCHE 00 JAUNE 00 CYAN 500 ORANGE 00 ORANGE L 00 ROSE 00 CYAN L 00 POURFRE 1 00 WERT L 00 BLEU L 00 JAUNE L 00 F1 00 F2 00 F3 900 F4 00 F5 500 F6 00 7 500 F8 00 JHHPHPHHOHHEHBHRBHHOHHHHHHOHHOHHH HHHHHHHHHHRBHHOHHHHHHRHHHERRF DEBUT DE LIGNE SUITE 51 NIE CARACTERES A IMPRIMER SLINLEN 00 0A 20 20 20 20 20 20 00 LE LI
149. 3 201 49240 DATA 217 208 242 169 243 133 254 169 49248 DATA 136 133 253 169 48 133 251 169 49256 DATA 1932133252 17 7 25 1 14 5 253 230 49264 DATA 251 230 253 208 246 165 254 201 49272 DATA 251 240 4 109 23 1 208 222 132 49280 DATA 251169 240 133 252 169 244 133 49288 DATA 254 177 25 1 7 3 255 145 253 230 49296 DATA 251 230 253 208 244 230 252 230 49304 DATA 254 240 12 165 254 201 248 208 49312 DATA 232 133 252 169 252 208 224 140 52 5 165 208 141 145 2 169 DATA 195 141 144 2 165 1 9 6 49336 DATA 133 1 85 96 234 23 4 234 234 49344 DATA 76 06 235 70 72 235 76 19 49352 DATA 235 234 234 234 234 234 234 234 49360 DATA 173 141 2 201 6 208 13 205 49368 DATA 142 2 240 228 17 3 24 208 73 49376 DATA 4 1417 24 208 173 24 208 41 49384 DATA 4 201 4 208 214 17 3 141 2 49392 DATA 201 3 240 210 201 5 208 16 49h00 DATA 205 12 22240 19 5 17 3 5 2 3 49408 DATA 73 B 141 52 3 76 224 234 49416 DATA 10 201 8 144 2 169 6 13 PAR A SURNY 1984 188 LE LIVRE DU 64 49424 DATA 52 3 170 189 32 193 133 245 49432 DATA 189 33 193 153 246 76 224 234 49440 DATA 176 193 241 193 50 194 115 194 49448 DATA 180 194 24 5 194 50 19 4 11 5 194 49456 DATA 60 55 60 6 62 102 02 0 49464 DATA 60 65 60 102 126 96 60 0 49472 DATA 60 65 0 56 24 24 60 0 49480 DATA 60 6 5 60 102 102 102 60 0 eg 49504 DATA 48 28 60 102 126 96 60 0 49512 DATA 48 28 102 102 102 10
150. 33 208 032 228 255 201 013 51224 DATA208 242 17 3 254 199 14 1 03 2 208 51232 DATA173 255 199 141 033 208 096 51233 REM CHECKSUM 6268 DE 31200 51238 35553 SAVE D PRESS RETURN READY 1 REM ATTEND FRAPPE DE RETURN SC REM AVEC AUTRES EFFETS SPECIAUX ECRANS 10 CS 0 FORI 5 12007051249 READ A 5 5 20 IFCS lt gt 765 STHENST 30 PRINT RAS IC BAS TAPEZ RETURN A0 SYS 51200 50 LIST 60 REM L ADRESSE 51245 CONTIENT LA VALEUR DELAI 70 REM QUI DONNE L LARGEUR DES BANDES DE COULEUR 80 REM ROUTINE MARCHE N IMPORTE 00 EN MEMOIRE 90 REM 51200 Ga 93 Lb ec 11199 173 51208 DATA208 199 17 2 018 208 1 51216 DATAO32 208 120 033 208 032 044 00 51224 DATAO3 2 228 255 201 013 208 237 173 51232 DATA254 199 141 032 208 173 255 199 51240 DATAL4 1 033 208 096 16 2 000 202 208 51248 DATA253 096 51249 REM CHECKSUM 7658 DE 51200 51249 55555 SAVE GO PRESS RETURN2 8 READY 249 LE LIVRE DU 64 PROTECTEUR Programme auto explicatif qui rend un programme BASIC sur disque inlistable incopiable et qui d marre seul lorsqu on le charge LOAD PROG 8 1 Le LOAD normal donne rien bien s r Le nouveau nom du programme peut tre modifi volont Ne convient pas pour les cassettes Pour tre prot g efficacement un programme doit emp cher LIST par le truc sui vant 1 PRINT O REM CHR
151. 330481033104S TEPB8 C C 1 250 FOR J I TO I 7 POKEJ O REM OCTET J 260 FOR 0 TO 7 REM BIT 270 IF RND 0 7 gt C THEN PORE J PEEK TOR 2 B 290 PRINT ix 300 REM LE TABLEAU DES GRIS 310 AD 102 4 FORI OIO 7 FORJ orol 320 ie J CHRS 5 133128 330 5 AS I 3712 0185 18 4 8 1 J HCHRS 146 345 DESSIN PALETTE DES COULEURS 350 FORK OT0 3 FOR 1 0103 360 FOR 0703 PRINTCOS 4 4C 370 FOR 0107 390 PRINTAS J D NEXTJ C PRINT NEXTI K 410 PRINT POUSS R ES PACE 420 GETAS IFA GOTO 420 450 PRINT CLR FORK 0TO 3 FOR 1 0103 460 FOR 0 03 FORJ 0TO7 490 PRINICOS 4 0 t 500 PRINT POUSSER E 997 GETAS IFA GOTO 9 998 PORE 96576 199 10825327 2 21 648 A 999 POKE53265 27 RINT SE 1000 DATAL44 5 28 159 156 30 31 158 1010 DATA129 149 150 151 152 153 154 155 55555 SAVE QD ARC EN CIEL 8 READY AZERTY Programme en langage machine occupant les adresses 49152 49985 charg en m moire par un programme BASIC il est activ ou r activ apr s STOP RESTORE par SYS 49152 187 LE LIVRE DU 64 Apr s ex cution du programme le 64 est touj 3 oujours QWERTY L fait d enfoncer simultan ment les touches LOGO C et CTRL fait passer le clavier en mode AZERTY La frappe des lettres donne les minuscules Avec SHIFT on obtient les majuscules Les touches de la rang e sup rieure donne norma
152. 4 Ee 915 DATAOOO 000 000 000 000 000 031 255 916 DATA192 039 255 224 039 255 248 031 917 DATA255 252 000 031 255 000 063 255 918 DATAOOO 063 255 000 03 L 25 5 000 063 919 DATA255 000 063 255 000 031 255 000 920 DATAO63 254 000 063 252 000 031 248 921 DATA000 007 2 000 000 000 000 00 922 DATA000 000 000 000 000 000 000 000 952 e DANS UNE MAILLE CARACTERE Ge 8 8 8 0 0 0 8 8 8 8 8 0 0 0 0 8 0 8 0 0 32 REM DEFINITION DES CARACTERES PROGRAMMABLE 100 DATA15 17 16 20 18 23 21 26 19 24 22 27 29 28 30 1009 REM SOUS ROUTINE INITIALISATION 1002 REM kkkkkkkkkkkkkkkkkkkkkkkkkkkkk 1008 REM SELECTION DU BANC NUMERO 3 POUR VIC II 1010 POKE 56578 PEEK 56578 OR 3 1020 P POKE 56576 PEER 56576 AND 252 OR Bl 1028 REM SELECTION DE L ECRAN EN BANC 3 1024 1030 POKE VIC 24 PEEK VIC 24 AND 15 OR El 1038 REM PASSAGE EN MODE ETENDI 1040 P POKE VICH7 PEER QU IC HD A OR 64 1048 REM DEFINITION COULEUR DE BORD 1050 POKE VIC 32 1 REM BLANC 1058 REM DEFINITION COULEURS DE FOND 1060 PORE VIC 33 L REM 3 BLANC 1070 POKE VICH 15 REM O GRIS 3 CIAIR 1080 POKE VICH35 12 REM 1 GRIS 2 MOYEN 1090 POKE VIC H36 ll REM 2 GRIS 1 FONCE 1098 REM MISE A PER ADRESSE ECRAN 50176 1100 POKE 648 196 1102 1107 1108 REM ECRITURE PAGE DEMO 1110 6 GOSUB 10010 1118 REM SELECTION DE LA RAM CARACTERES 1
153. 41 00142 00143 00144 00145 8 8 RAR uswSGSuUogSUASS 8Sa5mes5s56gBQasmg 99988 R SEAS guss 1989 88 58 Q e 998298 8 8 8 8 88 NN u ASS5S8o505581558 8928989 589583535688 5595 9585885 88855858 545589 55288 7 RFN R LDA RTS H LE LIVRE DU 64 ANNULE LE DRAFEAU 51 NECESSAIRE C EST TOUT JHEHHHBHHHHHBHHHHHOBHHHHHHBPHHHHHHCHHHEHHBHCOBHHOPHBHHHBHHHHBHHHHEF D PRINT STA CAR STX XPROV STY YPROV FERI CANAL BNE FIN LDY 00 JSR OONVER JSR DIALOG LDA CAR LDX XPROV LDY YPROV RTS FIN LDA CAR LDX XPROV LDY YPROV WRT SAUE LE CARACTERE REGISTRE X JET LE REGISTRE Y LE CANAL DE SORTIE EST IL LE BON 25 NON ON NE FAIT RIEN 51 OUI PRENDRE LE CARACTERE 351 Y RESTE ZERO APRES CONVER IL N Y A PAS EU CONVERSION DES OODES ECRAN ENVOI DU DES CARACTERE S EN MODE CENTRONICS RECUPERE LE CARACTERE REQUFERE LE REGISTRE X RECUPERE LE REGISTRE Y CARRY 0 CAR PAS D ERREUR JET C EST TOUT SORTIE SI PAS POUR LE 3CANAL IMPRIMANTE JOHBHOOOHHOHHHHHHHHHOYHOHHEHCHHOPHHHCHHHHHHHHHHHOPH HHHHHHHHHHHHE DIALOG 00 BN DIALI 00 DE DIAL JSR DIAL LDY 00 STY NCAR LDA 0 D DIAL STA PORTB LDA PORTA AND STA PORTA ORA 04 STA PORTA LOOP LDA ICR AND 10 10 DE LOOP 00 5 STATUS INC NCAR LDA NCAR L INLEN BMI ENDDI2 LDY 00 STY NCAR DIAL2 LDA
154. 5 AND 223 POKE 53270 PEEK 53270 AND 239 LE DEFILEMENT le CBM 64 poss de un atout vis vis de nombreux autres ordinateurs de sa cat gorie le d filement en douceur 5MOOTH SCROLLING en anglais Le d filement de l cran lors d un LIST par exemple ou dans le programme FIGURES en annexe se produit caract re par caract re c est dire 8 pixels la fois Le VIC II est programmable d une fa on diff rente l cran change de taille et passe de 25 40 24 58 caract res et la bordure s accro t d autant Mais l image est toujours pr sente en m moire sous la forme 25 40 caract res dont une partie seulement sont visibles Pour donner une impression de d filement doux d un texte le VIC II d place l g rement l image cran d un pixel la fois 128 LE LIVRE DU 64 derri re la fen tre que repr sente le bord de l cran Ce contr le du d filement est r alis par les registres 53270 et 53265 du VIC II Proc dure suivre l r duire la taille de l cran soit en horizontal soit en vertical soit les deux mode 38 colonnes POKE 53270 PEEK 53270 AND 247 mode 24 lignes POKE 53265 PEEK 53265 AND 247 2 positionner le registre de d filement fond gauche avant un d filement vers la droite Position de d filement en X 0 lt lt 7 POKE 53270 PEEK 53270 AND 248 OR X Position de d filement en Y 0 lt lt 7 POKE 53265 PEEK 53265 AND 248 OR Y 3 crire par PO
155. 5 lt 29585 THEN STOP 30999 RETURN 55555 SAVE SvP 8 READY SYNCHRO D monstration des effets de synchronisation sonore du S I D Les effets de tr molo xylophone et harmonica sont quelques unes des possibilit s de cet aspect du S I D 10 REM SYNCHRO ET TREMOLO 20 PRINT PRINT 30 PRINT NORMAL FLUTE 10 PRINT TREMOLO 2 45 PRINT PRINT SYNCHRONISATION PRINT 50 PRINT AIGUE XYLOPHONE 3 55 PRINT PROPORTIONELLE HARMONICA 60 PRINT INPUT 1 2 3 4 OU O FIN 70 B THEN END 80 5 54272 50518500 VL VL 15 AR 1 6 DE AR H 90 IF B gt 2 THEN ARA 100 DE RH SR 12 16 6 POKE S424 VL 110 RESTORE POKE S 5 AD POKE S 6 SR 120 READ N D IF N OTHEN GOSUB 500 RUN 123 Ir B2 THEN EN 55 N POKE 130 ON B GOS B 800 500 800 900 140 POKES 4 AR 150 ON B GO UB 600 700 800 900 160 6 GOTO120 200 DATA2S 4 28 4 25 4 25 4 25 2 210 D1432 1 25 28 ATE I 500 FOR 5 To 5424 TEM p de xt RETURN 600 FOR TD OTO50 D NEXI RETURN REM AL 279 LE LIVRE DU 64 099 700 REM 710 FOR V 0TO D FORTD 1 5101 ISTEP 2 720 POKES424 ID NEXT TD 725 FORTD 1 1101 5STEP2 780 2 24 TD NEXT TD V RETURN 800 REM SYNCHRO AIGUE 810 POKE S 1 N 4 COTO600 899 900 REM SYNCHRO PROPORTIONELLE 910 POKE S 1 N 1 4 GOTO600 999 55555 SAVE G0 SYNCHRO 8 READY TREMOLO TERMINAL Ce programme transforme le 64 en terminal RS 252 Les caract res programmables sont utilis
156. 6 B I T 64 NE 1430 PRINT 39210255 BI 1 128 NEXT 1450 PRINT FORI 9 9510191 B I SE NEXT 1470 PRINT FORI 32TO63 195 NEXP B 34 44 PRINT f 1490 7 1 115 2 2 107 253 Jil IA 11 4 722 1500 tat 46 XL 0 32 79 Y1 0 Y2 39 1505 152 2129 0 8 1510 ee Si 1520 H 128 1 R 48 1 Dex FRINT 5 1530 FORI 32T063 SU CHR G 1540 H 1 128 85 915 1 HROS N XT PRINT 1550 647095 HS L SCER 1432 1560 HS 15128 R HiS 1 HROS NEXT PRINT 1570 FORI 96T012 5 CHRS 146 CR 1580 6 1 128 8525 PRINT 1590 PAINT Cla LEN C BAS RVS N N RVS OFF ORMAL OU RVS ON OFF JECUPE TION 1600 INPUT A d Ee r 1999 SYS28951 Or EEN dxckkkkkikkkk EFFACE MEMOIRE TEXTE 2000 FOR I X4U C O07 8 POKEA Y V LAT PEEK A Y N H H NEXT 2499 SST 79 32 GOTO 10 2500 IF PEER AC HV 3178652532 GOTO 10 2520 FORI 78TOX4U 1STEP 1 2530 POREA Y N I PEEK A 1 NEXT 2999 POKEA Y N MECHT 32 3000 PRINT CLRISAVE C BAS BAS IREM k amp k amp kkkkkkkkkkkkkkkkkkkkkkk SA VE TE 3015 IF LEN 9 NOM ACTUEL N TES 3017 PRINT IC BAS C BAS RS ON DDR OFF RETOUR DESSIN RVS ON JRE TURN RVS OFF POUR LE 212 3020 3025 6300 6310 LE LIVRE DU 64 M LNPUT RIT 51 C BAS 5 M IFM D GOTO So GOTO 3030 IF d n y MM PRINT CIR c BAS C BAS Te
157. 63333 REM 286 NOM DU TABLEAU 03200 2 ZBS CHRS PEEK ZN AND127 HCHR PEEK ZNH AND127 FIN DE NOM SI CHAINE 633 63350 1 IFZD 1THENZB ZB S 63353 REM FIN DE NOM SI ENTIER 63354 63360 1 IFZD 3THENZB ZB Z 63363 REM AFFICHAGE DU NOM DU TABLEAU 63364 R REM AVEC SES INDICES MAXIS 63370 PRINT DIM GOSUB63580 PRINT 63373 REM CALCUL DE ZL NOMBRE 63274 REM D ELEMENTS DU TABLEAU 63380 FORZF 1T0Z0 Z1 ZL ZP ZF 1 NEXT 93387 REM INITIALISATION DES INDICES 63390 FORZF 1TOZ0 ZP ZF 0 NEXT 63393 REM ZC PARAMETRE D ADRESSE POUR 63394 REM APPEL 3395 1 6257 C ZN 2 Z0 3 BEN ee ee eee ee A 63403 REM DEBUT BOUCLE PRINCIPALE 63404 REM UX 63405 ARR NRRNRRR HR RER RER kkk 63410 FORZS 1TOZL 63413 REM AFFICHE LE NOM DE L ELEMENT 63420 GOSUB63590 63423 REM CALCUL DE LA VARIABLE 63424 REM CALCUL DE ZC SI FLOTTANT 63430 IFZD OTHENGOSUB 63080 ZC ZC 5 63433 REM CALCUL ADRESSE ET LONGUEUR 63434 REM DE LA CHAINE LES IMPRIME 63435 REM ET CALCULE 76 63440 IFZD lTHENCOSUB 63140 GOSUB 63550 ZC Z C43 63443 REM CALCUL DE LA VARIABLE re REM CALCUL DE ZC SI ENTIER 63450 IFZD 3THENGOSUB63210 ZC ZC 2 63453 REM AFFICHE LE NOMBRE 63454 63460 IFZDOLlTHENPRINT ZJ EE REM 2 ee RH RAR IR RH Xe 63464 DEBUT BOUCLE DE CALCUL 63465 DES NDICES 63466 ig 63467 63470 FORZF ZOTOISTEP 1 LE LIVRE DU 64 63480 ZP ZE ZP ZF tl Sc DZ Q ZF THENZ P ZF
158. 7 REM FO NUMERO DU FOND CONCERNE 18008 REM CC COULEUR COURANTE 18009 ADRESSE RAM COULEUR 273 LE LIVRE DU 64 274 18011 REM INTERDIT DE PROGRAMMER LE FOND BLANC 18013 IF PM l AND THEN 18070 18018 REM OPTION CHOIX DE FOND 18020 IF M THEN 18060 18028 REM PROGRAMATION COULEUR FOND 18030 POKE VIC4334FO CC 18038 REM PROG COULEUR BOUTEILLE 18040 POKE CO 800 2 FO CC 18050 F POKE 840 2 CC 18058 REM PROG COULEUR DU BORD 18060 POKE VIC 32 PEEK VIC4334FO 18070 RETURN 19000 REME kkkkkkkkkkkk kkkkkkkkkkkkkk 19001 REM SOUS ROUTINE PROG CARA 19002 HR RAR AR RC ARR RER Ke 19004 REM VARIABLES UTILISEES DANS LA SOUS ROUTINE 19005 REM EX EY COORDONNEES DU CARACTERE SOUS CURSEUR 19006 REM CC COULEUR COURANTE 19007 REM DE CARACTERE SOUS CURSEUR 19008 REM CP CARACTERE A PROGRAMMER 19009 REM DS TESTE SI CURSEUR EST DANS MENU OU DESSIN 19011 REM XA YA COORDONNEES DU LUTIN 19013 REM EC ADRESSE RAM ECRAN 19014 REM INITIALISATION VARIABLES 19016 0 DS 0 DE 15 19017 19018 REM APPEL DEFINITION LUTINS 19020 GOSUB 15020 7 19028 REM COULEUR LUTIN 0 NOIR 19030 POKE VIC 39 CC 19035 10050 DEBUT DE LA BOUCLE DE MOUVEMENT 19038 REM APPEL ENTREE MOUVEMENT 19040 GOSUB 1514 19047 19048 REM DANS MENU 120501 IF lt 218 THEN 19040 19058 REM TEST SI GRILLE OU MENU 0 e 7 XA lt 72 THEN 19110 19068 REM
159. 9 300 GET A 330 RETURN 399 400 DIR PEEK 56320 410 IF DIR 11l THEN 480 430 DIR DIR 117 440 IF DIR gt 0 THEN DX X DIR DY DIR 460 GOTO 510 480 CL CLH IF CL gt 3 THEN CL 0 500 FOR K 0 TO 200 NEXT K 510 R RETURN 1000 FOR 1 0 70 3 FOR J O TO 3 FOR 0 TO 3 1030 PRINT 1040 FOR 1 0 1o 3 1050 C1 ANE 16 64 I 1060 FOR M 0 TO 1 1070 IF 0 THEN PK K 5 16 L 5 1080 IF M l THEN PK I 5 16 J 5 1090 FOR N 0 TO 3 1100 POKE CAR Gei AM N PK 1110 NEXT N M L K 1120 POKE VICA ODEER V C424 AND 240 OR 14 1130 POKE VIC 22 PEEK VIC422 HE 1140 FOR I 0 TO 2 PORE VICH33H et NEXT I 1150 GOSUB 100 GOSUB 200 3000 CL 0 3010 GOSUB 300 REM BOUCLE PRINCIPALE 3020 GOSUB 400 3025 POKE VIC 32 F CL 3040 IF 19 THEN GOS B 200 3050 X X4DX YsY4DY 3060 IF 40 THEN X 0 3070 IF 279 THEN 79 3080 IF Y lt O THEN Y 0 3090 IF Y 49 THEN Y 49 3100 C1 C INT 72 40 INT X 2 3110 PO P 2 ZE Y INT Y 2 2 3120 PK PFEK Cl 3130 PK AND EE 3140 PK PK OR CL P0 3150 POKE Cl PK 3160 coro 3010 55555 SAVE GD DESSIN MULTI MOY 8 READY 207 LE LIVRE DU 64 DIR Le programme DIR affiche le nom du disque et les noms des fichiers situ s sur celui ci raison de 44 programmes au maximum Ensuite comme l indique la ligne du bas d cran le 64 attend la frappe d une touche de fonction Fl affiche le message d erreur ventuel du disque attend ensuite
160. 9 dekdeekkdeokdedekedek dekdekdekdekdekdekdckedekdekekoedek 4000 REM SPRITEO CRAYON ET POINTE 4010 POKE 2040 13 REM ADRESSE SPRITEO 4990 POKE VI421 l RETURN REM SPRITE VISIBLE 4999 FOKE RETURN RM SPRITE VISIB 5000 REM SPRITEO CRAYON SANS POINTE 5010 POKE2040 14 REM ADRESSE SPRIT30 5990 POKEVI 21 1 REIURN REM SPRITE VISIBLE 5999 POKEVI 21 1 RETURN REM SPRITE VISIBL 6000 REM SPRITEO GOMME 6010 POKE2040 15 REM ADRESSE SPRITEO 6990 POKEVI 21 l RETURN REM SPRITE VISIBLE 6999 edeedede desee ede dee dee desee eee eee jede dede jede e 7000 REM ECRIT UN POINT 7020 8 POKE BY PEEK BY OR 2 B 7999 8000 REM EFFACE 8020 PORE KE BY PEEK BY AND 255 2 B 8900 RE 8999 EEN 9999 10000 DATA 10010 DATA 10020 DATA 10030 DATA Q 10040 DATA Q 10050 DATA QQ 10060 DATA 10070 Q 10080 DATA 10090 DATA 10100 DATA 10110 DATA 10120 DATA 10130 DATA 10140 DATA 7 10150 DATA 10160 DATA 10170 DATA 205 LE LIVRE DU 64 10180 DATA 10190 DATA T un e D e H gt gt 1 AO 20030 DATA 20040 DATA DATA 20060 DATA 20070 DATA 20080 DATA 20090 DATA 20100 DATA 20110 DATA 20120 DATA 20130 DATA 20140 DATA 20150 DATA 2
161. A een EM TRE Rl peut alors s lectionner 4 6 ce qui donne acc s deux zones diff rentes de la ROM B 4 rend active la zone 1000 17FF qui contient les 256 caract res disponibles l allumage de la machine majuscules graphiques 6 donne acc s la zone 1800 1FFF qui contient les caract res accessibles apr s la frappe simultan e de C et de SHIFT au clavier majuscules minuscules Le g n rateur peut tre d compos en huit zones de 64 cara ct res On en verra la raison plus bas le mode caract re tendu n acc de en effet qu 64 caract res diff rents la fois 110 LE LIVRE DU 64 NUMERO DE ZONE ADRESSE ADRESSE CONTENU DE 64 CARACT POUR VIC II POUR 6510 Majuscules Graphiques Majuscules inverses Graphiques inverses Minuscules Ma juscules graphiques Minuscules inverses Maj graph inverses 0 1 2 5 4 5 6 7 L adresse du g n rateur de caract res en ROM est la m me que celle des circuits d Entr e Sortie Ceci s explique bien entendu par le ph nom ne de la commutation des bancs m moire Normalement la zone D000 ne contient donc pas le g n rateur de caract res Il est cependant tr s utile de pouvoir lire cette ROM pour la recopier en RAM dans le but d obtenir une base de d part pour un g n rateur de caract res programmable On doit donc mettre les E S hors circuit brancher la ROM la lire et remettre ensuite les E S e
162. A ROUTINE CLAY IER HORLOGE 00076 0065 AD D DC CIAIR 5Y A T IL UNE DEMANDE 00077 0068 29 01 AND 00078 CO6A 05 BEQ CLAHOR 3SINON 00079 006 00080 4C BC FE MP FINIRO 3SORTIE D INTERR EN ROM 00081 OF 00082 CO6F 4C 31 EA CEMIRQ 351 OUI GERE CLAVIER ET HORLOGE 00085 0072 00084 0072 IL FAUT NMCDE T VALEURS PAR LIGNE DANS LA TABLE 0008 0072 1E RASTBL BYT 050 170 LIGNE DEBUT DE MODE 00085 0075 AA 00086 0074 BYT 015 006 COULEUR DE FOND 00086 0075 6 00087 076 CRITBL BYT 059 027 MODES ETENDUS BITMAP SCROLL Y 00087 0077 B 00088 0078 08 CR2TEL BYT 216 200 MCDE MULTICOLORE SCROLL X 00088 0079 8 00089 007A 78 ADRTBL BYT 120 021 ADRESSE EORANHGEN DE CARACTERES 00089 08 15 00090 or F BORTEL BYT 015 014 COULEUR DE BORD 0000 E 00091 94 BANTBL BYT 148 151 BANC MEMOIRE DU 00091 COT 97 00092 0080 01 CO2TBL BYT 001 002 POUR LE MODE COULEUR ETENDU 00092 0081 02 00095 0082 02 CO3TBL BYT 002 001 POUR LE COULEUR ETENDU 00095 0085 01 00094 0084 MON MON est une version modifi e de EXTRAMON un programme moniteur con u l origine pour le PET par un groupe d utilisa teurs canadiens Pour entrer MON dans le 64 il faut un autre moniteur Le programme ci dessous PETITMON est suffisant pour cela De plus il calcule les sommes de v rification Les sommes de tous les blocs de 256 octets de MON
163. A5 2E 85 FC A9 M 0819 DO 85 FE AO 00 84 FD Bl M 0821 FB 91 FD A5 FE C9 CE DO M 0829 06 A5 FD C9 OO FO 13 A5 M 0831 FB DO 02 C6 FC A5 FD DO M 0839 02 C6 FE C6 FB C6 FD 38 M O841 BO DD 4C O0 CE OO 00 00 0849 00 00 00 00 00 00 00 9 0851 FO 8D 11 03 9 8D 12 254 LE LIVRE DU 64 0 00 B Bl 400 09 100 lt A lt ovo 9553955899949 HANN CO ed Cd uu OS LOL e AD rt RON OO EE din 240 40 LO na Par OUT Qr DOHEEM pd e pu iy OU LL D O Q O NO dO O O00 00 00 a Or OS p MIMI 00 CN EN PAD NO NNV SONO Q iO en fu fr UY 100 N OU O OQ lt lt lt O O0 OG O 00990 O Qe O O O 610 Oo0 O t pi OO ON ANNO An lt lt HOO DAGMAALMO Fra Pa OD fu Fu UC 00 3 IO UY pa Qu OS ON O MO 5 OmO 4 mima Oo O e Om oO SESEEDSS ooo OO LOMHAANEHOO MOO r3 Es Ba DU lt Da fa qO O CO 05 00 nosi 39998254 829985899 Cr pa ON COND EN pu Net rt MO QUO e Our 535 SSSE ROO frate T 2288665855 mxiYzzzizixmuzx CLA On Qu E de Deel AO lt 0869 5 M 0959 8 0421 OD M HAHHAA M SD Il sera gage machine et partiellement son num ro d ordre pertoire complet d un disque et vous ctement 95 Si a 298 e E er E aut ASE DE gu D 9 az E gut 229 R
164. ACER LE RECTANGLE PRINT RVS VS OFF EFFACER LE CONTENU DU RECTANGLE PRINT VS OFF INVERSER LE RECTANGLE PRINT RVS VS OFF TRACER LE RECTANGLE COINS ARRONDIS PRINT JRVS VS OFF TRACER LE RECTANGLE COINS VIFS PRINT RVS VS OFF CURSEUR A FOND A GAUCHE PRINT IRVS ONJI RVS OFF CURSEUR A FOND A DROITE PRINT RVS ON J RVS OFF CURSEUR A FOND EN HAUT PRINT IRVS ON K RVS OFF CURSEUR A FOND EN BAS PRINT RVS ON L RVS OFF INSERER UNE LIGNE PRINT JRVS VS OFF SUPPRIMER UNE LIGNE PRINT RVS ON N VS OFF INSERER UNE COLONNE PRINT JRVS S OFF SUPPRIMER UNE COLONNE PRINT RVS ND RVS OFF DEPLACE CURSEUR DE POSITIONS PRINT C BAS N RVS OFF RVS ON RETOUR AU DESSIN RVS OFF GETAS IFAS GOTOG210 PRINTAS ASC AS 48 TF ACLO SAND 6800 REM DEPL CURSEUR 16 IFA gt 15 10 ON 6300 6330 6360 6390 6420 6450 6480 6510 REM ON 8 GOTO 6540 657 0 6600 6630 6660 6690 6720 REM 1 0 REM A COIN SUP GAUCHE XHU 34V GOTO10 213 LE LIVRE DU 64 6330 REM B COIN INF DROIT 6340 X2 X4U Y2 Y V COTO10 6351 GOSUB 9000 REM AFFICHE COORD RECTANGLE 6352 IFASC gt GOTO 10 6360 REM C EFFACER RECTANGLE 6363 GOSUB 9000 REM AFFICHE COORD RECTANGLE 6372 IFASO 10 6373 FORI Y1TOY2 X1 32 POKEA I X2 32 NEXT 6374 1 0 2 POKEA Y 1 32 2 1 32 6390 REM D EFFACE CONTENU RECTANG
165. ASE RO 5320 8 CH H N BI ABS x AND3 298 POKE BY USR BY R BCBI 299 REM skickikeksekdeieiok 300 REM TEST DES TOUCHES Fl ET F3 301 REM kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk kk 310 GETAS IFAS CHRS JTHENA A 8 255 255 320 IFAS a 33 IHENA A 8 IFA lt 9THENA 9 20 POKE4926 RETURN 9 REM REN 400 REM TRACE UN OCTET MULTICOLORE W 0 A 255 EN CH Y 401 REM dekesfededek fe de dede desee fede dek dede de defe dede dee 402 REM CH VARIE DE O A 39 410 RO INT Y 8 LN Y AND7 420 BY BASEJdRO 8 20 B CEHLN 430 POKE BY W GOSUB300 RETURN 499 REM Ve 30000 REM N DE LIGNE ADRESSE REELLE 49152 BATALO 165 127 141 013 220 49158 DATAL6 9 00 1 141 026 208 169 49164 DATAOO1 133 251 169 027 141 49170 DATAO20 003 169 192 141 49176 DATAOO3 088 096 17 3 025 49182 DATALA1 02 5 208 04 L 00 1 240 49188 DATAO71 198 251 016 004 169 49194 DATAOO 1 133 251 166 25 1 189 49200 DATA116 192 141 033 208 189 49206 DATA126 192 14 1 000 22 1 189 49212 DATAL18 192 141 017 208 189 49218 DATA120 192 141 022 208 189 49224 DATA124 192 141 032 208 189 49230 DATA128 192 14 1 034 208 189 49236 DATA130 192 141 035 208 189 49242 DATAL2 2 192 14 1 024 208 189 49248 DATA114 192 141 018 208 173 49254 DATAOL 3 220 04 1 00 1 240 003 49260 DATAO76 188 254 076 049 234 49266 DATAO3 3 000 01 5 00 5 059 027 49272 DATA216 200 056 021 015 007 49278 DATAL4 8 1 1 00 2
166. BASI 20250 POKE 45 EK S1458 POKE 16 IEER 51459 20259 REM APPEL ECRAN DESSIN 20260 GOSUB 20410 GOTO 2070 20400 RAA RRRRRARRA RIRE RIRE 20401 REM SOUS ROUTINE ECRAN DESSIN 20402 20409 SELECTION BANC 3 II 20410 56578 PEEK 56578 56576 5657 AND 252 20419 REM SELECTION ECRAN EN BANC 3 1 POKE VIC424 PEEK VIC 24 AND 159 Ki 16 20429 REM MISE JOUR ADRESSE ECRAN 50176 20430 648 196 20438 20439 REM 55 MODE ETENDU POKE 1 17 PEEK VIC 17 OR 64 20449 REM SELECTION DE LA RAM CARACTERI 20522 1 POKE VIC424 PFEK VIC424 AND GH OR 0 20459 REM ALLUMAG DES LUTINS ACE POKE VIC 21 63 REM 00111111 20469 REM EFFACE L ECRAN 20470 GOSUB 11010 20478 20479 REM RETABLIT LE DESSIN 20480 SYS 51203 RETURN 20500 REMk kkkkkkkkkkkkkkkkkkkkkkkikikik 20501 REM SOUS ROUTINE ECRAN NORMAL 20502 REM Xk kikik AR 20509 REM SAUVE LE DESSIN 20919 s SYS51200 20519 REM SELECTION BANC O POUR VIC II 20520 56578 56578 OR 3 20221 56576 56576 AND 252 OR 3 20529 REM SELECTION ECRAN CARACTERES NORMAUX 20220 POKE VIC424 21 0538 20539 REM MISE A JOUR ADRESSE ECRAN 1024 20540 POKE 648 4 20548 20549 REM PASSAGE EN MODE NORMAL 21524 VIC 17 PEEK VIC 17 AND 191 20559 REM SELECTION COULEUR 2
167. C00 lt OO Pafe O ON Da XO Or DAQTATFNAOOER 55555555555555555555555555665 mzzixmmixxxixxxxxmxzxmxxmxIx xxx xxx Qe polo ru UN 00 AO fn AO E 1051 C1 1059 20 M 1061 A9 1069 C2 M 1071 41 M 1079 05 M 1081 A8 M 41 20 A M 245 LE LIVRE DU 64 1089 FO OE 86 1C A6 1D DD 10 1091 02 08 E8 86 1D A6 1C 28 1099 60 C9 30 90 03 C9 47 60 1041 38 60 40 02 45 03 DO 08 10A9 40 09 30 22 45 33 DO O8 8 e Q N pA e w gt P B w gt E m Kai Ki N o 8 N Q 8 gt 1189 CA 26 48 44 AA A2 C8 3A 1191 3 52 4D 47 58 4 53 54 1199 46 48 44 50 2C 41 42 F9 C 11A9 F8 00 56 F9 00 89 F9 00 l1B1 F4 F9 00 OC FA 00 11B9 OO 92 FB OO CO FB OO 38 11C1 FC 00 5B FD 00 8A FD 00 E e ut rrj t2 gt to e 11 1 43 20 58 52 20 59 52 20 11E9 53 50 GEET N ri N gt o gt N PETITMON PETITMON est une version BASIC du moniteur MON limit e la commande qui permet de charger la m moire en hexad cimal Son seul usage pr vu est l entr e en m moire du v ritable MON ci avant Il est obligatoire d utiliser INIMEM avant de charger PETITMON en m moire pour lib rer
168. E C GAUCHE C GAUCHE 120 IFA363 GOTO 130 Te Cid rmm C BAS PAGE INTERDITE GENERATEUR DE CAR 185 LE LIVRE DU 64 140 4 B 2040 150 53277 15 EXPANSION X 160 FOR 0 03 I 170 FOR 0703 POKE5328 I 1 NEXT I REM OUR 180 POKE53269 15 REM AUTORISE LUTINS 0 1 200 FOR I 0TOJ O32484281 39 NEXT I t PosrTION x 220 53264 15 MS 240 FOR 1 0T03 SE NEXT I REM POSIT Y 260 53277 15 EXPANSI N X 280 POKE53271 15 REM EXPANSION Y 300 FOR 1 0105 53287 1 1 I REM COULEUR 320 IF A 0 1000 330 PRINT C ee SR 335 AOATHEN PRINT 1 BAS BAS JRUN HOME EI 340 PRINT CECI EST LA P LE SOMET DE PILE EST 345 PRINT C BAS 350 PRINT C BAS EN BAS EN 512 360 PRINT C BAS C BAS C BAS RUN C HAUT C HAUT C HAUT END 1000 PRINT CLR RVS ON JAUNE PAGEO ACTIVITE MEMOIRE RVS OFF JAUNE L 1010 PS E FORI OTO28 iT X DROLTE NEXTI P 1020 EO FORTHE 1102 1035 PRINTLEPT 1040 PRINTLEFT 1050 pee HOME ARIGHIS P 36 1060 PRI SEA QOL SELECTION 1070 PRINILEPTS PS22161 DE BANC MEMOIRE 1080 PRINTLEFT 26 160 HORLOGE AU 1090 PRINTLEFT 7 1 60 DE SEC 1100 PRINTLEFIS PS 31 205 207 GESTION PRINILEFTS 3 32 DU CURSEUR 1999 PRINT FIN 55554 END 55555 SAVE GO ACTIVITE 8 READY REM c Bisi 2405 128 P 509 255 ADRESSE DISQUE do
169. E DU 64 LE DISQUE DU 64 Conscient de la somme de travail que repr sente la frappe des programmes de l annexe 1 BCM a d cid de proposer ses lecteurs une copie de ceux ci sur disquette au format 1541 Le disque du 64 peut tre obtenu contre l envoi d un mandat postal international si n cessaire d un montant de 1800 FB l ordre de B C M S C et muni de 1a mention le disque du 64 ainsi que de l adresse pr cise de destination Adresse B C M S C 24 ROUTE DE LA SAPINIERE B 4960 BANNEUX BELGIQUE 288 INTRODUCTION CHAPITRE 1 CHAPITRE 2 CHAPITRE 5 CHAPITRE 4 TABLE DES MATIERES LE SYSTEME LE LIVRE DU 64 LES PROGRAMMES INTERNES DU 64 L interpr teur BASIC Le KERNAL 9 w a e e 9 9 9 9 O O Description des routines BASIC Description des routines KERNAL Note concernant le CBM SX 64 Le GESTION DE L ECRAN mode mode mode mode mode mode mode graphique graphique graphique graphique graphique graphique graphique num ro num ro num ro num ro num ro num ro num ro OON Mi M SO IE Les registres cran du VIC II Les graphiques multi modes Inhiber les erreurs de synchronisation LES LUTINS Les registres de cont
170. E RAM COULEUR 15016 REM SI DANS DESSIN 04 POKE DANS 15017 REM L ECRAN SINON ON PROGRAMME LE 15018 REM LUTIN NUMERO 0 19020 IF DS 1 THEN 15080 15026 REM PROGRAMMATION DU LUTIN 0 15027 REM LE CARACTERE EST DECALE D UN 15028 REM BIT VERS LA DROITE 15030 FOR I 0 T 15040 POKE EE VS GE JAND 254 22 15050 4 4966443 14 K CA 83DE3T AND1 128 15067 15068 REM FIN PROGRAMATION LUTIN 0 15012 GOTO 15110 15078 REM POKE LE CARACTERE DANS L ECRAN 15080 P POKE EC4EY 4OJEX DE 15088 REM POKE LA COULEUR DE FOND 15090 POKE ECMEY 404EX AND 63 OR FO 64 272 LE LIVRE DU 64 15097 15098 REM POKE LA DER ee DU CARACTERE 15100 POKE C 15110 RETURN 16000 BE 16001 REM SOUS ROUTINE COULEUR 16002 REMX 16004 VARIABLES UTILISEES DANS LA SOUS ROUTINE 16005 REM PE SOUS CURSEUR 16007 REM CC COULEUR COURANTE 16008 REM EX EY COORDONNEES DU CARACTERE SOUS CURSEUR ADRESSE RAM COULEUR 16011 REM TEST POUR COULEUR BLANCHE 100121 IF PE 62 THEN 1 16030 16018 REM TEST POUR AUTRES COULEURS 16020 COJEY 404X 16028 REM CHANGE LA COULEUR DU LUTIN 0 16030 VIC 39 CC 16040 RETURN 17000 REM Jkdokkekdedecdokdekekdok ek descdokededek de 17001 REM SOUS ROUTINE ENTREE SORTIE 17002 REMA kkkkkkkkkkkkkkkkkkkkkkkkkkkkk 17004 REM
171. EK 56576 AND 252 0R 3 BN BN est bien entendu le num ro de Banc M moire repris au tableau ci dessus Si on d sire travailler dans le banc 0 il est pr f rable de relever le pointeur de bas de BASIC pour le mettre en 4000 16384 Ceci rend le premier bloc de 16 K intouchable par BASIC et permet donc d viter nombre de f cheuses interf rences entre BASIC et VIC II Le programme ci dessous est utiliser dans ce cas avant tout usage du BASIC On pr servera ainsi les images graphiques au maximum La zone r serv e au texte BASIC perd ainsi 14 K mais avec 24 K on peut d j cr er un norme programme Voir aussi le programme INIMEM en annexe Pour d placer le bas de BASIC en 16384 soit 64 256 10 POKE 16384 0 POKE 44 64 20 NEW Il existe une seconde particularit int ressante du d codage d adresse du VIC II le dessin des caract res standard du CBM 64 est contenu en m moire ROM dans le banc 3 en 0000 DFFF Mais 102 LE LIVRE DU 64 ceci n est valable que pour le 6510 En effet pour le VIC II cette ROM g n rateur de caract res est pr sente dans les bancs m moire D et 2 aux adresses 1000 11 est donc compr hensible que m me en utilisant le banc 0 on dispose ainsi des caract res normaux d s l allumage de la machine L cran standard est programm en Mode 1 voir plus loin c est dire que l cran est subdivis en 1000 octets 25 lignes de 40 caract res qui sont p
172. F7 B7 JSR 87F7 CONVERSION FLOTTANT ENTIER EN 14 0 00 LDY 00 78 Sel A9 35 LDA 55 85 01 STA 01 BANK ROM HORS SERVICE 14 LDA 14 Y FEEK AB SAUVE LA VALEUR LUE A9 37 LDA 55 85 01 STA 01 BANK ROM EN SERVICE 58 68 PLA 85 14 STA 14 68 PLA 85 15 STA 15 4C A2 B3 MP 8342 CONVERSION ENTIER EN 14 2 FLOTTANT END 283 LE LIVRE DU 64 284 LE LIVRE DU 64 ANNEXE 2 IRUCS POUR ELECTRONICIENS Ces quelques petites additions au c blage de votre 64 vous faciliteront grandement la t che Si toutefois vous ne vous trouvez pas assez comp tent pour les r aliser vous m me faites vous aider car le r sultat en vaut la peine ESET INDICHTEUR DE LECTURE POUR CRSSETTE EOUTON POUSSQIR gt MASSE DU CEMEA LE v Pan LECTUFE CASSETTE DIODE LED FOUGE 04224 285 LE LIVRE DU 64 LE BOUTON DE RESET Pour provoquer le red marrage du microprocesseur il suffit de court circuiter temporairement le fil RESET la masse Un petit bouton poussoir de type normalement ouvert doit tre raccord d une part la masse et d autre part 1a broche RESET du 6510 Cette derni re est la broche num ro 27 du 6510 La masse est entre autre disponible sur le p le n gatif du gros condensateur de 2200 microfarads sur la broche 1 des 6526 ou encore la broche 21 du 6510 Dn peut trouver aussi RESET sur la broche 6 et la masse sur la broche 2 du connecteur
173. FDB SETTIM LE LIVRE DU 64 Cette routine sauve sur un p riph rique une zone de la m moire Les p riph riques 0 2 et 3 ne peuvent pas tre utilis s Le nom de fichier est obligatoire sauf pour la cassette p riph rique 1 Elle doit tre pr c d e de SETLFS et SETNAM Ele modifie les registres A X et Y L erreur ventuelle peut tre lue ensuite par READST L adresse de d but de zone sauver doit tre rang e dans deux adresses cons cutives partie basse partie haute en page 0 et l accumulateur A doit contenir en entr e le pointeur vers cette adresse en page 0 En entr e les registres X et Y contiennent l adresse partie basse partie haute du dernier octet sauver 1 Appel par SOIT LE POINTEUR DE DEPART EN 64 3DANS L ACCUMULATEUR FLOTTANT ON SAUVERA LES MEMOIRES DE 4000 A 3 42B0 SUR DISQUETTE COMME PAR UN 3 SAVE ESSAI 8 D DEBUT 4000 FIN 4281 LDA 08 DISQUETTE JSR SETLFS LDA 05 LONGUEUR DU NOM LDX lt NOM gt NOM ADRESSE DU NOM JSR SETNAM LDA lt DEBUT PARTIE BASSE STA 64 LDA DEBUT PARTIE HAUTE STA 65 LDA 64 POINTEUR DE DEBUT LDX FIN PARTIE BASSE gt FIN PARTIE HAUTE JSR FFD8 SAVE Remise jour de l horloge TI Cette routine utilise et modifie A X et Y La valeur de l horloge TI est d crire en entr e sur 5 octets Partie haute dans partie moyenne dans X et partie basse dans Y La valeur s exprime en soixanti
174. FREQUENCE 1599 RETURN 1600 REM INIT SUIVEUR 1610 POKE S424 VL 32 REM PASSE BANDE 1620 POKE 9423 15 16 1 REM RESONANCE FORTE VOIX 1 1030 FOKE 5 422 N 2 REM FREQUE 35555 SAVE 0 FILTRES 8 READY FREQUENCES Ce programme calcule la table des fr quences des diff rentes notes de 00 0 LA di se 7 La table est list e l cran ou l imprimante sous la forme Num ro de gamme nom de la note fr quence en Hertz valeur de F sur 16 bits de FL et FH partie basse et partie haute de F 100 REM AFFICHAGE DES 8 OCTAVES 110 REM UTILISABLES SUR 64 120 REM AVEC VALEURS POUR LES REGISTRES 130 REM DE FREQUENCE 216 LE LIVRE DU 64 160 rue QU IMPRIMANTE 4 C 170 lt 3 JOR CD4 JTHEN160 180 OPENA C DlM N S 11 190 FORI O TO 11 READ NOS I NEXT 300 GOSUB 2000 15 4338531 0 11 0 1 500 REM BOUCLE PRINCIPALE 520 F F 2 1 12 FISINT F 05872535 5 530 FHZINT F1 256 FL FI FH 256 540 U U 1 1FU 12THEN U 0 G G 570 GOSUB 1000 PRINT 4 G NOS U 600 PRINT 4 FSIFIS FLS PH 990 IF gt 36 0 CLOSE 4 END 992 GETAS IFASO THEN GOSUB 2000 998 IF F lt 3690 GOTO 500 999 1000 REM FORMATTE F FI FL FH 1010 F RIGHTS ISTR 5 8 1020 FIS RIGHIS HSTRS FI 8 1030 FLS RIGHIS ASTRS FL 1040 FHS RIGHTS STRS FH 6 T Sas 2000 PRINT PRINT POUSSEZ SUR ESPACE PRINT 2010 IFAS GOTO2010 2020 PRINT NOTE FR QUENCE FL FH
175. FT autor Drapeau 00 d calage cran vers le bas autoris RS 232 REGISTRE DE CONTROLE RS 252 REGISTRE DE COMMANDE Vitesse non standard pour RS 232 RS 252 REGISTRE D ETAT RS 252 Nombre de bits restant envoyer Dur e d un bit sur 1 R5 232 en microsec RS 232 pointeur fin du tampon d entr e RS 232 Num ro de page du tampon d entr e RS 232 Num ro de page tampon de sortie RS 232 pointeur fin de tampon de sortie Sauvegarde du vecteur d interruption pendant les op rations cassette Registre interne pour l RS 232 Sauvegarde du registre d interruption du CIA NMI pendant op rations cassette Stockage temporaire en lecture cassette Sauvegarde du registre de controle du CIA NMI pendant op rations cassette Nombre de caract res entre curseur et d but de ligne de 40 car suivante TYPE DE CBM64 00zUSA 01 EUROPE ZONE LIBRE Vecteur Vecteur Vecteur Vecteur impression mess erreurs BASIC red marrage du BASIC compactage de ligne BASIC de LIST pour mot cl compact Vecteur d ex cution de mot cl Vecteur d valuation d expression Sauvegarde de l accumulateur pour SYS Sauvegarde de X pour SYS Sauvegarde de Y pour SYS Sauvegarde des drapeaux du 6510 pour SYS Saut JMP vers routine USR Inutilis Vecteur routine d interruption IRQ Vecteur routine de BREAK BRK Vecteur routine d interruption NMI Vecteur d OPEN Vecteur de CLOSE 181 LE LIVRE DU 64 ADRESSES HEXA DECIMAL 031E 031F 798 799 0320 0321 80
176. HHHOHHBHHHHHBHHHHEBEHHBHHHHHHFHHHEOHHBHHHEEHHBHE ROUTINE DE CLOSE FERME LE FICHIER LOGIQUE Om JSR 9314 F ICHIER OUVERT BEQ 102 3SINON FIN EN MP F296 jERREUR FILE NOT OFEN JR F31F TXA FHA LDA DEVICE SI CE N EST PAS CP KANAL iL IMPRIMANTE BEQ CLOS AP 929 3FIN DU CLOSE NORMAL C05 I EEHHHHHHHHEBHHHEHRHHHHHHHHHHHOOOOHROHHOHUHHHOHOHE CR 1 XPROV Si YFROV 1 CNT mi NCAR 1 TABLE 5 8 9 14 17 18 19 20 LE LIVRE DU 64 00215 5C 09 00215 D E 00215 CES 11 00215 F 12 00215 een 13 00215 0 61 14 00216 62 1C BYTE 28 29 9 31 142 144 145 146 00216 CE63 10 i 00216 64 1E 00216 CE65 IF 00216 CE66 amp 00216 CE67 90 00216 CE68 91 00216 CE6O 92 00217 95 147 148 156 157 158 159 129 149 00217 B 94 00217 9C 00217 CE 00217 00217 F F 00217 81 00217 95 00218 CE72 96 00218 675 97 00218 74 98 00218 0 75 99 00218 9A 00218 CET 9B 00218 85 150 151 152 153 154 155 133 137 00219 E7A 86 BYTE 134 138 135 139 136 140 D 00223 00 MSG 00 3DEBUT DE LA TABLE DES MESSAGES 00224 EB 42 BLANC 00 00225 E87 55 55 BYTE SUPP SHIC 00 00226 CE92 41 55 BYTE AUT SHC 00 00227 CE 40 49 MINUS 00 00228 CEA3 5 C BAS 500 00229 EA9 52 56 BYTE RVS ON 00 00230 CEBO 48 4F BYTE HOME 00 00
177. I WAIT est une instruction de branchement conditionnel particuli re bien le branchement ne s effectue pas et l on passe l instruction suivante ou bien le branchement s effectue sur le d but de l instruction elle m me et il y a bouclage Attention ce bouclage s effectue enti rement en langage machine et si la condition ne se r alise pas seul STOP RESTORE permet de sortir de la boucle La condition est une expression calcul e pertir des trois param tres de WAIT WAIT A B C Le premier argument est une adresse valeur 0 655535 Le deuxi me et le troisi me sont des octels valeur 0 255 WAIT attend que la condition se r alise c est dire que la 42 LE LIVRE DU CBM 64 valeur lue l adresse soit nulle apr s passage par les op rations logiques XOR OU EXCLUSIF avec le troisi me argument qui vaut 0 s il n est pas cit explicitement suivi de AND B ET avec le deuxi me argument Par exemple 10 WAIT 198 3 1 est semblable 10 IF PEEK 198 AND 3 OR 1 GOTO 10 L usage de WAIT est simple pour attendre une certaine configuration binaire d un octet pr cis on fournit en premier argument l adresse de l octet et en second argument la valeur des bits que l on veut tester Dans l exemple ci dessus AND 3 signifie je ne m int resse qu aux bits 0 et 1 car 5200000011 en binaire et seuls les bits 0 et 1 valent 1 La valeur du troisi me argument permet de d finir si le ou les bit s que l o
178. IC ARROW etc L inconv nient de cette adresse est que le PEEK du BASIC ne peut pas relire ce que l on a crit ces adresses Il faut donc utiliser le USR PEEK voir en annexe Dans un but didactique nous avons laiss le programme DESSIN BITMAP en 8192 pour bien montrer le principe Mais dans un vrai programme utile employez toujours USR PEEK et les adresses hautes pour l cran Banc M moire 5 du VIC II LA COULEUR EN BITMAP Les informations de couleur ne sont pas pr sentes en nombre suffisant pour autoriser le choix de 16 couleurs par points En effet seulement de m moire 1 RAM ECRAN contient ces informations Comme en modes 1 5 chaque octet de 1 RAM cran est associ un bloc de B 8 points de l cran Il contient la couleur de tous les points allum s de ce bloc bit 1 dans les 4 bits sup rieurs La couleur de tous les points teints bit 0 d un m me bloc est contenue dans les 4 bits inf rieurs du m me octet de la RAM ECRAN 125 LE LIVRE DU 64 octet 312 u 2 DI T octet 219 H D u BITMAP y octet 7688 octet 8000 Pour d marrer le mode haute r solution il nous faut quelques l ments de base pour programmer convenablement dans ce mode il nous faut pouvoir allumer et teindre un point du BITMAP effacer tout le BITMAP remplir la m moire cran avec des couleurs de trac d termin es etc Consid rons l exem
179. IC suivante La valeur 0000 signifie fin de programme 0811 00 annexe trouvera le programme SUPERLIST64 qui donne les num ros et les adresses des lignes BASIC en m moire La n cessit des pointeurs de lignes est bien claire l interpr teur de commandes connaissant ainsi les adresses de d but et de fin de chaque ligne en m moire peut ins rer une ligne sa place par ordre croissant de num ros I1 peut aussi remplacer une ligne par une autre de longueur diff rente et m me supprimer une ligne Apr s avoir rang une ligne BASIC sa place en m moire l interpr teur de commande revient son point de d part Par contre s il a re u une commande directe apr s compactage de la commande il transf re le contr le l interpr teur BASIC L interpr teur BASIC est constitu de nombreuses routines diff rentes pour g rer les diff rentes commandes fonctions etc Toutes ces routines comme 1 routine principale d inter pr tation ont tr s souvent besoin de prendre en m moire un ou plusieurs caract res cons cutifs pour les interpr ter L op ration de prise d un caract re est l oeuvre du sous programme CHRGOT qui est situ en m moire RAM en page z ro de 73 8A Voir en annexe le texte de la routine CHRGOT CHRGOT a deux fonctions prendre un caract re en m moire ce qui implique que CHRGOT contienne un pointeur de caract re courant qui doit se modifier chaque appel De plus si
180. IFTS lt J T G JJH 1134 NEXTI FORI JTOMX TS 1 1135 MX J 1 CP INT MX 8 IFMX B INT MX 8 THENCP CP 1 1136 TIS CP CHR 0 TS CP CHR 255 1145 PRINT CLR ERI 1150 1160 FORJST ITOMX PRINT HOME E Bas 1 C BAS HO ELE Ae PET PS BAS T u 1170 IM T 4 16 lt MIDS 1 4 16 THENZS TS J T J TS 1 T5 1 1180 NEXIJ 1 18 5 1 PRINT CLR JECRITURE 1200 FORI TOCP Z0 FORJ 1104 1215 IFTS 1 84J TT THENFORK L TO30 Z0 Z OSHCHR 0 NEXTK 00701221 251 LE LIVRE DU 64 121 20200 sem NERTI 1230 Z15 i FORJ ST 1231 Ee Z1 Z 1 CHR 0 NEXTK GOTO1236 1236 Dee 1 Z IS4CHR 0 HCHR 0 1240 BUS B P 0 PRINT 4 TT 1 T8 1 209 218 PRINT A5 U2 4 0 1250 T ASC TTS I HCHRS 0 S ASC TSS I HCHR 0 NEXTI 1290 G n Ee 55555 SAVE 0 REORG 8 READY REVEIL MATIN Ce programme charge et d marre une routine d interruption qui affiche l heure exacte celle de l horloge temps r el du 6526 et non l horloge TI peu fiable De plus la fonction r veil est programmable sur 24 heures La sonnerie audio visuelle dure une minute et ne g nee nullement les programmes BASIC qui tournent ce moment m me pendant un INPUT Pour arr ter la sonnerie pousser sur Fl La couleur de l affichage est celle du curseur tout moment En cas de perte d affichage par STOP RESTORE relancer l affi
181. ISTER SUR IMPRIMANTE 63513 REM MISE A ZERO BUFFER CLAVIER 63515 63520 198 0 63521 63523 REM TOUCHE PRESSEE 63525 53530 AS IF A THEN 63530 63533 REM 1 SI OPTION IMPRIMANTE 63540 IF A O THEN IMP L GOTO 63570 63543 REM IMP O SI OPTION ECRAN 63545 63550 IF AS N THEN IMP 0 GOTO 63570 63560 63530 63563 REM TB ADRESSE MOTS CLEF BASIC 02295 TAS LISTE DES CONTROLES 63570 TB 41118 DIM TA 62 63573 F REM CREATION DES TABIEAUX 652201 FOR I l TO 62 READ TAS T NEXT 63593 REM SI OPTION IMPRIMANTE 63594 REM OUVERTURE DU CANAL DE SEN REM SORTIE IMFRIMANTRE EE IF THEN OPEN A 4 CMD4 63608 REM RETOUR DEBUT DE PAGE 63609 63610 PRINT GIRL 63611 ikikikiki kkk 63612 REM DEBUT DU PROGRAMME 63613 EE 63614 REM CAD ADRESSE DEBUT BASIC O 63615 REM NL NUMERO DE LIGNE 63616 REM ADRESSE DEBUT LIGNE ce qui rend les liste de programmes bien des Q sur fond LE LIVRE DU 64 63617 REM SAD ADRESSE LIGNE SUIVANTE 92015 NL NUMERO DE LIGNE 19 63620 CAD PEEK A3 PEEK 44 256 1 63630 SAD PEEK CAD 1 PEEK SE Ko NL PEEK CAD H3 PEEK CAD 4 256 VE TEMA REM EMPECHE DE LISTER LE PGM 930204 IF NL lt 63500 THEN 63680 63653 REM FIN DU PROGRAMME FERMETURE 63660 IF 1 THEN 63670 END 63671 63673 REM IMPRIME NUMERO DE
182. ISTING BAS ET LISTING SRC Programme en langage machine qui occupe les adresses 52525 53108 Il modifie le KERNAL pour la gestion du p riph rique num ro 4 l imprimante La sortie se fait alors sur la porte parall le vers une imprimante au standard CENTRONICS C est avec ce programme que la plupart des listes de ce livre ont t imprim es Les codes sp ciaux COMMODORE sont traduits en clair et les lignes suite sont d cal es pour augmenter la lisibilit Pour r aliser le c ble n cessaire voir les remarques du programme CENTRO BAS 10 5 0 FORI 52525T053108 READA 5 54 20 IFCSC25 16 7THENSTOP 30 5 552525 52525 DATA 169 100 141 38 3 169 205 141 DATA 39 5 169 37 141 32 3 169 52541 DATA 206 141 33 3 169 60 141 28 52549 DATA 3 169 206 141 29 3 169 255 52557 DATA 141 3 221 169 0 141 1 221 52565 DATA 141 80 206 17 3 2 221 0 4 52573 DATA 141 2 221 173 13 221 96 141 52581 DATA 85 206 14 2 86 206 140 87 206 52589 DATA 165 154 201 4 208 22 173 85 52597 DATA 206 160 0 3 2 229 205 32 149 52605 DATA 205 173 85 206 174 80 206 172 52613 DATA 87 206 24 96 17 3 85 206 174 224 LE LIVRE DU 64 52621 DATA 86 206 172 87 206 76 202 241 DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA 192 0 508 395 201 13 208 10 32 167 205 160 0 140 89 206 169 10 141 1 221 173 0 221 41 251 141 0 221 9 4 141 0 221 173
183. JSR AAAO JSR ABIE LDA LEN JSR AB21 ACFC ADOC JSR AD8A 64 texte De plus si la valeur lue est sup rieure 65999 alors le retour s effectue BASIC READY avec le message d erreur SYNTAX ERROR Convertit le contenu de l accumulateur flottant principal en entier sur deux octets et le r sultat est mis sous la forme partie basse partie haute l adresse indiqu e par le pointeur en page z ro en 49 et 44 Ex cute le PRINT du BASIC Comme toute instruction BASIC l accumulateur et les flags doivent refl ter l tat du premier caract re de la liste d arguments employer dans un SYS COUCOU exemple Respcte tous les codes de d placement de curseur de changement de couleurs etc Peut tre employ pour imprimer n importe quelle liste d arguments tels que cha nes de caract res variables BASIC l int rieur d un programme appell par SYS ou USR La liste des param tres doit suivre imm diatement l instruction SYS ou USR dans le corps du texte BASIC Ecrit une cha ne de caract res dont 1 pointeur est dans les registres X et partie basse dans X partie haute dans Y La cha ne de caract res doit se terminer par un octet 00 Exemple LDX lt MESSAG LDY MESSAG JSR ABIE RTS MESSAG BYTE COUCOU 00 Ecrit une cha ne de caract res sur le p riph rique courant L adresse de la cha ne doit tre rang e en 622 et 23 et la longueur de la cha
184. KE ou PRINT le texte voulu dans la colonne ou la ligne cach e par le bord 4 effectuer une boucle FOR Y 0 TO 7 ou FOR Y 7 TO 0 STEP 1 pour un d calage dans l autre sens en modifiant chaque fois la valeur Y donn e au point 2 Bien entendu il faut remplacer Y par X pour le d calage horizontal 5 Quand l image cran s est d plac e d un caract re entier dans une direction il faut simultan ment remettre dans les registres les valeurs de d part et recopier l cran un caract re plus loin dans la direction du d calage se retrouve subitement au point 2 et ainsi de suite Notons bien le mot simultan ment dans la phrase ci dessus la seule solution possible est de d caler l image par un programme en langage machine seul langage assez rapide pour donner une illusion de simultan it L ARRET D AFFICHAGE est possible d interrompre le fonctionnement du VIC II par programme pas d affichage POKE 55265 PEEK 53265 AND 239 e affichage POKE 55265 PEEK 53265 OR 16 129 LE LIVRE DU 64 Quand l affichage est arr t tout l cran apparait de la couleur du bord L int r t de ce mode est qu il arr te tout acc s la m moire par le VIC II Or comme on l a vu ce dernier vole des temps de cycle au microprocesseur 6510 0n peut donc ainsi acc l rer le microprocesseur Bien plus important encore le 6510 ne peut r aliser des d lais de dur e tr s pr cise que pendant l arr t du contr
185. L inconv nient est que le nombre de carac t res utilisables est r duit de 256 64 Les bits 6 et 7 du code caract re code CHR ne font en effet plus partie du pointeur de caract re mais sont consid r s comme un pointeur 4 valeurs possibles vers un des quatre registres de couleur de fond Passage en mode tendu modes 4 et 5 POKE53265 PEEK 53265 0R64 Retour en mode 1 ou 2 POKE53265 55265 0191 En mode 4 on dispose donc toujours des caract res standard et de 16 couleurs de caract res Les 4 couleurs de fond se programment dans les quatre registres couleur de fond D 5 en 55281 53284 Les caract res de code 0 65 auront le m me dessin qu en mode 1 et 1a couleur de fond du registre 52281 Les caract res de code 64 127 auront le m me dessin que les codes 0 65 en mode 1 et la couleur de fond du registre 55282 etc code caract re adresse du registre adresse couleur de fond hexa Nous savons que le VIC II est un processeur 12 bits En modes 1 et 2 8 bits servent d finir l adresse du dessin du caract re et 4 bits la couleur du caract re Un seul registre commun tout l cran indique la couleur de fond En modes 4 et 5 la r partition des bits entre les pointeurs est diff rente 125 LE LIVRE DU 64 6 bits d finissent l adresse du dessin du caract re On n a donc plus que 64 possibilit s 64 276 Les six bits restants d fi nissent les couleurs d afficha
186. LE 6393 GOSUB 9000 REM AFFICHE COORD RECTANGLE 6395 IFASO 10 6400 FOR FOR IYTHTO Y2 1 FOR J K1 ATO 2 1 POKE 32 2 1 6420 REM E INVERSE LE CONTENU DU RECTANGLE 6421 GOSUB 9000 REM AFFICHE COORD RECTANGLE 6422 IFA lt gt GOTO 10 6430 SE S TOY FORJ XLHTO X2 1 A A I HJ 6435 B PEEK A IFB gt 127 GOTO 6442 6420 POKEA B4128 00706445 6442 POKEA B 128 6445 NEXT Jj I GOTO 10 6450 REM F TRACE RECTANGLE ARRONDI 6451 GOSUB 9000 REM AFFICHE COORD RECTANGLE 6452 IFAS GOTO 10 6453 FORI XITOX2 ENT HI 64 2 1 64 NEXTI 6454 POREA I 1 93 POKEA I 4X2 93 NEXTI 6455 1 KL 85 6456 uy 73 6457 POREA Y2 XI 74 6458 POREAQD 4X2 75 6459 GOTO 10 6480 SEM PAG TRACE RECTANGLE VIF 6481 GOSUB 9000 REM AFFICHE COORD RECTANGLE 6482 IFASO 10 6491 FORI XITOX2 POREACTI 1 64 2 64 NEXTI 6492 FORI YITOY2 POKEACI 3X 1 9 3 POKEA I K 2 9 3 NEXTT 6493 1 1 112 6494 X2 110 6495 POKEA Y2 M X1 109 6496 POKEA Y2 HX2 125 6497 GOTO 10 6510 REM H CURSEUR A GAUCHE 6520 U 0 X 0 GOTO 10 6540 REM 1 CURSEUR DROITE 6560 U 39 X 39 GOTO 10 6570 REM J CURSEUR EN HAUT 6580 V 0 Y 0 GOTO 10 6600 REM K CURSEUR EN BAS 6610 V 15 Y 24 GOTO 10 6630 REM L INSERE LIGNE DECALE EN BAS 552 S KEE E I 6643 PRINT POKEA YHV AS 32 NEXT J 6645 GOTO 10 6660 REM M SUPPRIME LIGNE DECALE EN HAUT 6665 FOR J
187. LE D INTERRUPT ION 00042 0000 TABLEN 37 NOMBRE DE CODES A CONVERTIR 00045 0000 LINLEN 72 NOMERE DE CARACTERES PAR LIGNE 2 00044 0000 00045 0000 p ABB 00046 0000 00047 0000 DEBUT CD2D 00048 0000 00049 0000 SHPEHBHUBHRHHHEHHHHHHHHHEROHHEHHHOHEOHERHHHHHONHHRKERSN 00050 0000 00051 0000 DEBUT 00052 CD20 00053 CD2D 9 64 LDA PRINT 3INITIALISE LE VECTEUR 00054 OF 26 03 STA VECWRT SORTIE D UN CARACTERE 00055 052 A9 CD PRINT VERS LA ROUTINE CI DESSOUS 00056 CD34 27 05 STA 00057 0057 A9 25 sol 3 INIT VECTEUR 00058 CD39 20 05 STA VECSOT SORTIE 00059 A9 01 00060 QE 21 03 STA VECSOT 00061 CDAI A9 XC LDA 0101 s INIT VECTEUR 00062 CD43 IC 05 STA VEOCLO CLOSE 00065 046 A9 CE 0101 00064 CD4B 10 05 STA VECCLOH 00065 CD B 9 FF LDA FF PROGRAMME LE PORT B EN SORTIE 00066 05 DD STA DDRB 00067 CD50 A9 00 LDA 00 REMET A ZERO LE PORT DE SORTIE 00068 CD52 801 DD STA FORTB 00069 CD55 8D 59 CE STA NCAR 00070 CD58 AD O2 DD LDA DORA PROGRAME LE 2 DU FORT A 00071 09 04 ORA 04 JEN SORTIE 00072 CDD 02 DD STA DDRA 226 00100 00101 00102 00103 00104 00105 00106 00107 00108 00109 00110 00111 00112 00115 00114 00115 00116 00117 00118 00119 00120 00121 00122 00125 00124 00125 00126 00127 00128 00129 00130 00151 00132 00133 00134 00135 001 00137 00138 00139 00140 001
188. LE LIVRE DU 64 580 CLOSE8 CLOSE9 CLOSE 15 PRINT PRINT PROGRAMME 229 PRINT F2 CREE SUR DISQUE END 1000 REM LIT LE CANAL ERREUR DISQUE 1010 INPUT LS W XS Y Z IF W OTHEN RETURN 1095 PRINT ERREUR W X Y Z Q0TO 160 999 2000 DATA10 0 67 83 178 48 58 129 73 178 2010 58 135 65 58 151 73 44 65 58 67 83 2020 DATA178 67 83 170 65 58 130 73 0 58 2030 DATA8 20 0 130 67 8 3 179 177 2999 55555 SAVE DATA SUR DISQUE 8 READY DE NEW Ce programme imprime sur l imprimante ou sur l cran la suite d instructions n cessaires pour r cup rer un programme BASIC en m moire apr s NEW ou RESET Cette suite d instructions est introduire en mode direct Sous forme de programme le fonctionnement est impossible car le fait de charger un programme d truirait le texte r cup rer encore pr sent en m moire Une bonne id e est de recopier ce texte et de le garder port e de main cela peut toujours servir 10 INPUT ECRAN 3 OU IMPR 4 20 OPEN A A CDS CR 30 PRINT 40 PRINT ERENT PRINT DENEN RECUPERATION D UN PROGRAMME BASIC EN MEMO 50 PRINT PRINT APRES RESET OU NEW PRINT PRINT 55 PRINT A INTRODUIRE EN MODE DIRECT BIEN ENTENDU 111 60 PRINT PRINI POKEA6 159 CIR 2 70 PRINT FOR 1 2054 T 2136 IF PEEK I 1 THEN NEXT 80 PRINT J INT I 256 POKE 2050 J POKE 2049 1 9256 90 PRINT LIST MAIS PAS ENCORE RUN 100 PRINT FOR 1 2056 TO 159 256 1F PEEK I L FPEEK I 2 PEEK I
189. LL9 2 200 52328 DATA 192 8 208 246 132 198 76 24 52336 DATA 204 55554 END 55555 SAVE 80 TOUCHE PROG 8 READY USR PEEK ET USR PEEK SRC Cette routine en langage machine se substitue PEEK pour aller lire la m moire derri re les ROMS KERNAL et BASIC Ne pas utiliser pour lire le reste de la m moire Se charge en m moire en 0 0 282 30 REM USR PEEK 40 REM 20 REMPLACE PEEK POUR MEMOIRE RAM 19 REM DERRIERE LES ROM 0 100 FORI 49312T049344 6 5 A NEXT IFCS 3356THENSTOP 105 POKE785 160 POKE786 192 REM MODIFIE L VECTEUR D USR 110 PRINT CLR POKE USR C BAS C BAS 120 FORI 64000106420 TEP20 130 A INT 255 RND 0O POKEI A 140 PRINTA PEEK 1 USR I 150 NEXT I 160 PRINT PRINT ON VOIT QUE PEEK RELIT LA ROM ET QUE 170 PRINT PRINT USR RELIT CE QU ON A ECRIT EN RAM 49000 49312 DATA165 021 072 165 020 072 032 247 49320 DATA183 160 000 120 169 053 133 001 49328 DATA177 020 168 169 055 133 001 088 49336 DATA104 133 020 104 133 021 076 162 49344 DATA179 252 REM CHECKSUM 3356 DE 49312 A 49344 55554 END 55555 SAVE G0 USR PEEK 8 READY LE LIVRE DU 64 USR POUR REMPLACER LIT LA RAM EN ESCH DES ROM KERNAL ET BASIC d FAUT INITIALISER LE VECTEUR USR EN 785 786 SC 5 15 USRPIK LDA 15 FROTEGE LES VALEURS 48 FHA 14 ET 15 A5 14 LDA 14 48 FHA 14 ET 15 20
190. LR POUSSER ESPACE 70 5 5427 2 GOSUB500 AR 3 2 DE AR L 80 AD O SR 15 16 0 ADSR VOIXL 90 PORE 5 24 15 128 32 SUPP VOIX3 PASSE BANDE 100 POKE 5424 15 16 1 REM FILTRE VOIX 1 110 POKE S 5 D POKE S 6 SR 120 POKE SH 1l R M FREQ BALAYAGE 121 POKE 418 16 REM TRIANGLE VOIX 3 125 POKES 4 D REM DEBUT SON 130 GOSUB600 REM BALAYAGE 140 POKES 4 AR REM FIN DE SON 160 GOSUBSOD END 200 FOR T S TOS424 FOKE O NEXT RETURN 600 REM DELAI BALAYAGE FILTRE 610 POKES422 PEEK S427 60 AND25 5 REM FREQ FILTRE 620 POKE 541 IOGANDPEEK S 427 REM FREQ VOIX 1 630 IF S 610 RETURN 55555 SAVE EXTRATERRESTRE 8 READY FIGURES Dessin avec fen tre sur 80 colonnes Ce programme est l image ce que le traitement de texte est au texte Il permet de cr er modifier sauver rappeler et imprimer des figures utilisant les caract res majuscules et graphiques du 64 Ce programme a t utilis pour g n rer certaines figures de ce livre La taille maximum du dessin est de 79 40 caract res Les fonctions de d calage scrolling horizontal et vertical sont r alis es en langage machine Au d marrage la question R cup ration ou normal permet de r cup rer une image ventuellement toujours en m moire La premi re fois il faut toujours r pondre 210 LE LIVRE DU 64 Le curseur est un petit T dont le pied indique la direc tion du prochain d place
191. La cha ne comprend un blanc ou le signe en premi re position Conversion de la valeur contenue dans l accumu lateur A du 6510 consid r e comme un entier non sign compris entre 0 255 cha ne de caract res En sortie le r sultat se retrouve aux adresses 0100 et suivantes La cha ne g n r e se termine un 00 plus sortie les registres A et Y pointent vers le d but de la cha ne de caract res partie basse partie haute soit 00 dans et 01 dans Valeur en flottant de 0 5 69 LE LIVRE DU 64 BF16 BF52 BF70 Table des valeurs des puissances de 10 en flottant sur 5 octets 180000000 10000000 1000000 100000 1000 100 10 1 Cette zone de la m moire N est utilis e par BASIC ni par le KERNAL Si vous recopiez le BASIC en RAM il possible d utiliser cette zone pour de petites corrections Longueur de cette zone 30 octets JSR 8F71 Cette routine calcule la racine carr e la valeur de l accumulateur flottant principal En sortie le r sultat est dans l accumulateur flottant principal BFE1 Valeur en flottant de 1 ROM 000 SUITE DE L INTERPRETEUR BASIC JSR 059 Cette routine calcule une fonction consid r e 70 comme un d veloppement en s rie polynomiale et est utilis e pour les fonctions BASIC SIN COS EXP etc En entr e les registres et Y pointent vers la table des coefficients Pn du polyn me et l accumu lateur
192. M SP NUMERO DU CARACTERE 63904 REM NB NOMBRE DE CARACTERES 63905 REM IDENTIQUES 260 LE LIVRE DU 64 ds 0347 SP CHAR NB 1 63913 REM BOUCLE DE CALCUL DU NOMBRE 63912 D ELEMENTS IDENTIQUES 63920 gem SP PEEK I THEN NB NB l 63920 63955 RECALCUL DES INDICES gt 128 52547 SP gt 128 THEN SP SP 97 82252 REN IMPRESSION DU NBRE D ELEMENTS 63210 IF NB21 THEN PRINTSTRS NB 63943 REM IMPRESSION DU CONTROLE 63950 PRINT TAS SP 63953 REMK2 kkkkkkkkkkkkkkkkkkkkkkkkikkk 63954 REM FIN DU SOUS PROGRAMME 63955 REM k kk kkkkkkkkkkkkkkkkkkkkikk 63960 RETURN l 63963 REM Jeckdekdedek ee des dedek de ARR RER 63964 REM ELEMENTS DE LA TABLE DES 63965 REM CARACTERES DE CONTROLE 63966 8 63980 DATACTRL A CTRL B CTRL C CTRL D BIANC CTRL F CTRL G CTRL H 63981 DATACTRL I CTRL J CIRL K CIRL L CTRL M CTRL N CIRL O CTRL P 63982 DATACRS BAS RVS ON DELETE CTRL U CTRL V CTRL W CTRL X 63983 DATACTRL Y CTRL Z CTRL ROUGE CRS DROITE VERT BLEU C 63984 DATA F l F 3 F 5 F 7 P 2 63985 6 F B NOIR CRS HAUT 63986 DATARVS OFF CLE R INSERT C 2 3 C 4 C 5 C 6 63987 DATAC 7 C 8 POURPRE CRS GAUCHE JAUNE CYAN READY S V P Apr s r ponse la question JOYSTICK ou POIGNEES le message UN MOMENT S IL VOUS PLAIT JE TRAVAILLE appara t Les 10 niveaux de gris possibles sur T V noir et blanc et 30 parmi l
193. M coord Y POKE 53264 PEEK 53264 AND 255 2 N O0R 2 N X 255 5 Choisir la taille du lutin En effet chaque lutin peut tre agrandi d un facteur 2 soit en horizontal soit en vertical soit les 2 la fois Agrandir le lutin N horizontalement 0 lt lt 7 55277 PEEK 53277 OR 2 N 141 LE LIVRE DU 64 Taille normale en horizontal POKE 55277 PEEK 53277 AND 255 2 N De m me pour agrandir verticalement POKE 53271 PEEK 53271 OR 2 N Taille normale en vertical POKE 53271 PEEK 53271 AND 255 2 N Les positions minimales et maximales des lutins donn es dans de nombreux ouvrages am ricains sont inexactes en Europe o le contr leur VIC II existe en version PAL et non NTSC les standards de t l vision sont diff rents ainsi que les tailles et nombres de lignes des crans Ceci pose par ailleurs certains probl mes avec des programmes made in USA Pour qu un lutin soit enti rement visible il faut qu il ne d passe pas les limites suivantes Largeur normale 24 lt X lt 320 pour un lutin totalement visible 6 lt X lt 343 pour un lutin partiellement visible Hauteur normale 50 lt Y lt 229 pour un lutin totalement visible 30 lt Y lt 249 pour un lutin partiellement visible Largeur double 23 lt X lt 296 pour un lutin totalement visible X lt 341 pour un lutin partiellement visible Hauteur double 49 lt Y lt 288 pour un lutin totalement visible 8 lt Y lt 255 pour un lutin partiellemen
194. ME 187 IF HRS l135 THEN BIC 3 REM F5 GOME 188 IF AS CHRS l36 THEN BIC O REM F7 RIEN DU Td 200 IF X XM THEN X XM 1 210 IF THEN 0 220 IF Y YM THEN Y YM l 230 IF Y O THEN 0 250 R INT Y 8 C INT X 8 L Y AND 7 7 AND 7 BY HO4R 3204C 8 H 202 LE LIVRE DU 64 GOSUB 722000 370 ON BICH GOSUB 3000 4000 5000 6000 380 IF BIC 1 THEN GOSUB 7000 REM ECRIT 390 IF 3 THEN GOSUB 8000 REM EFFACE 990 999 kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk 1000 REM CONFIGURE LES 3 SPRITES 1020 VI 53248 1030 PL 832 REM SPRITE BLOCS NUMEROS 13 14 ET 15 1125 FOR H OT02 1130 FOR 1 0 020 A POR K OTO2 T 0 FOR 0 07 0 1131 IFMIDS AS Bee ek Q THENB 1 5 T T32H8 NEXT J PR POKE 832464 8 1 Aug T NEXTK I H 1140 POKEVI 2 9 0 REM ERANS ON HORIZONTALE 1150 POKEVI 23 0 REM EXPANSION VERTICALE 1160 POKEVI 28 1 MODE MULTICOLORE 1170 POKEVI 37 0 REM COULEUR 1 NOIR 1180 POKEVI 38 4 REM COULEUR 2 MAUVE 39 9 REM COULEUR BLANC 1999 kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkikkik 2000 REM POSITIONNE LE SPRITE 0 2010 23 X 2020 YA YY YY 46 Y 2030 S THENPOLE 416 0 GOTO 2100 2040 XX XX 256 POKEVI 16 1 2100 FORXB XATOXXSTEPSGN rA POKE VI XB NEXT REM POS EN X 2200 FOR YB YATOY YSTE PSCN POKE YB NEXT REM POS EN Y 2999 k kkkkkkkkkkkkkkkkkkkkkkkkkkkikhkkkkkk 3000 REM SPRITEO INVISIBLE 3990 POKEVI421 0 RETURN REM SPRITE INVISIBLE 399
195. NT C HAUT C HAUT RETURN 63132 RIRE RER RE AIRE 63133 REM SOUS PROGRAMME 63134 REM CHAINES CARACTERES 63135 RE ME k kke kkk kikk kkhk kikik kik 6 23137 CALCULE ADRESSE DE LA CHAINE 5259 ZE PEEK ZC H4 2 5G PEEK ZC43 63143 REM CALCULE LONGEUR DE LA CHAINE 63144 REM FIN DU S P SI TABLEAU 5 63120 ZG PEEK ZC42 25 gt OTHENRETURN 63153 REM AFFICHE LE NOM DE LA CHAINE 63154 REM SON ADRESSE ET SA LONGUEUR 63155 62160 6 6050863070 PRINT AD ZE L ZG 63163 REM AFFICHE LE NOM DE LA CHAINE 63170 GOSUB 63070 PRINT 63173 REM AFFICHE LA CHAINE 63180 F FORZF ZETOZE Z G L PRINTCHRS PEEK ZF NEXT RETURN SE REMY dede deese dede eee ee Re 63183 SOUS PROGRAMME 63184 FONCTIONS 63185 REMk 5 kkkkkkkkkkkikikk kkkikkichikikk 63186 63187 REM AFFICHE ADR DE LA DEFINITION 232 LE LIVRE DU 64 931202 DE LA FONCTION 9 PRINT GOSUB63070 PRINT DEF PEEK ZC 2 2 43 256 63193 REM AFFICHE ADR DE LA VARIABLE 63194 REM EMPLOYEE DANS LA FONC TION 63195 63200 PRINT FN GOSUB63070 PRINT VARe PEEK ZC 4 FPEEK ZC45 256 FR INT C HA T C HAUT RETURN 23502 1 REMA Aide ek kee dreck dekk kek eee 63203 REM SOUS PROGRAMME 63204 REM VARIABLES ENTIERES 63205 REMk kkkkkkkkkkkkkkkkkkkkkkkkkk 63206 63207 REM ZK 1 NOMBRE NEGATIF 63208 ZK 0 NOMBRE POSITIF 62102 ZK
196. NT 2 ENVELOPPE SPECIALE CROISSANTE 92 PRINT 3 ENVELOPPE SPECIALE DECROISSANTE 93 PRINT 4 ENVELOPPE SPECIALE TREMOLO PRINT 94 INPUT l 2 3 4 OU O FIN A 95 IF 0 THEN GOSUB 500 END 110 RESTORE POKE S 5 AD POKE S46 SR 120 READ N D IF N 0 THEN GOSUBSOD RUN 125 POKE SH N 130 ON A GOS B 600 700 800 900 140 FOR TD 0104 0 N XT GOTO120 200 DATA25 4 28 4 25 4 25 4 25 2 28 2 200 OE EL A 500 FORT S TO S324 D NE XP RETURN 600 REM ENVELOPPE NORMALE 610 POKE S 4 DE FOR TD 01050 D NEXT 698 POKE 5 4 AR RETURN 700 REM ENVELOPPE SPECIALE 1 710 FOR T OTO 7 POKESt4 AR 715 FOR TD T TO OSTEP 1 NEXT TD 720 POKES 4 DE 725 FOR TD f TO 1 TD T Pad FOKE ST4 AR RETURN 800 REM ENVELOPPE SPECIALE 2 810 FOR 0 0 7 POKES 4 AR 815 FOR 0 TO 820 POKES 4 DE 825 FOR TD TO T NEXT TD T 898 POKE St AR RETURN 900 REM ENVELOPPE SPECIALE 3 910 FOR T OTO 5 POKES 4 AR 915 FOR TD O TO 2 T NEXI TD 209 LE LIVRE DU 64 920 POKES 4 DE 925 FOR TD 2 T TO 1 TD T 998 POKE S4 AR RETURN 999 55555 SAVE 0 ENVELOPPES 8 READY EXTRATERRESTRE Programme de d monstration sonore o l on montre les effets sp ciaux obtenus par un balayage cyclique de la fr quence du filtre passe bande effet haut parleur tournant 10 REM CONCERT EXTRATERRESTRE 15 REM BALAYAGE DE FREQUENCE DU FILTRE PASSE BANDE 20 30 PRINT C
197. POUR PROGRAMMES AUTO START en RAM ou en cartouche ROM externe ROM BASIC 8K ZONE LIBRE RAM COULEUR ou ENTREES SORTIES ROM KERNAL 8K entr es sorties et des ROM consulter le 62 74 pages 152 et 145 page 148 page 164 page 165 6 LE LIVRE DU 64 ANNEXE 1 PROGRAMMES DEMONSTRATIFS ACTIVIT affiche le contenu d une page m moire de 256 octets bit par bit l aide de lutins Ce programme une fois activ reste en fonction et n occupe AUCUN octet en m moire Il n utilise ni interruptions ni langage machine Curieux n est ce pas i REM MONITEUR D ACTIVITE POUR CBM 64 REM 8 REM PAR B MICHEL LE LIVRE DU CBM 64 9 REM 10 PRINT CLR JAUNE MONITEUR D ACTIVITE MEMOIRE 20 PRINT C B S c As eranc CE PROGRAMME UNE FOIS ACTIVE UTILISE 30 PRINT C BAS POUR AFFICHER LE CONTENU DES 35 PRINT C BAS 256 OCTETS D UNE PAGE MEMOIRE A CHOISIR 40 PRINI C BAS DANS LES 16K INFERIEURS 50 PRINT C BAS JC BAS BAS LA PAGE 1 CONTIENT LA PILE DES ADRES 55 5 9 5 DE 19081 DES SOUS ROUTINES 60 PRINT C BAS LA PAGE 0 QUI CONTIENT NOMBRE D INFOR 65 PRINI C BAS JMATIONS VITALES EST DONNEE EN DETAILS 70 PRINT CBAS CBAS C BAS C BAS JPOUSSEZ RVS ON RETURN RVS OFF PO ONTI 90 POKE198 O WAIT198 1 GETAS 100 INPUT CLR NUMER DE PAGE 0 255 O C GAUCH
198. Par contre la liaison existante entre le BASIC et le syst me d exploitation KERNAL est tr s intelligemment orchestr e Les portes restent donc ouvertes de nombreuses additions Les programmes SIMON S BASIC SUPEREXPANDER SUPER GRAPHIC 64 et autres ne se privent d ailleurs pas de modifier les connexions BASIC KERNAL Les portes ouvertes les plus connues sont les instructions SYS et USR qui donnent acc s des programmes crits en langage 15 LE LIVRE DU 64 machine et ext rieurs au BASIC Les quatre autres possibilit s d alt ration du BASIC sont les suivantes Modifier les vecteurs en page 3 Modifier les routines d interruptions Modifier la routine CHRGOT Recopier en RAM et modifier le BASIC ou le KERNAL Voici qui introduit des notions qui nous sont trang res Le syst me d exploitation KERNAL est un ensemble de programmes qui g rent les p riph riques crire un caract re l cran lire le clavier lire et crire sur la cassette sur 1 porte s rie IEEE pour les lecteurs de disquettes ou l imprimante sur la porte s rie RS232 pour la t l communication etc Chacun de ces programmes contient une instructions de saut JMP l quivalent en langage machine du GOTO vers une des 15 lignes de la table des vecteurs en page 3 Avant d tudier le pourquoi de la chose voyons le comment D s l allumage de la machine le KERNAL remplit la table des vecteurs avec la liste des adresses de ses 13 routin
199. Q LE PHOTOSTYLE Le photostyle est un crayon photo sensible qui point vers l cran envoie une impulsion au VIC II d s que le point lumineux du balayage cran passe devant lui A ce moment le VIC II verrouille les coordonn es du point dans deux registres et g n re ventuellement une interruption Ces deux registres dont les valeurs peuvent varier de O 255 se lisent comme suit x n PEEK 53267 lt PEEK 53268 Attention l achat d un photostyle exigez toujours une tr s bonne qualit en effet si le phototransistor est un l ment bas prix son temps de r ponse est insuffisant et la lecture de la coordonn e X sera impr cise l cran est balay de gauche droite 64 microsecondes seulement Il faut donc un 151 LE LIVRE DU 64 l ment r pondant une fr quence de l ordre de 10 m gahertz LES REGISTRES ECRAN DU VIC II reg mode bit autor d ca DOll balay j tendu map image 25 23 lage 55265 0012 registre de balayage 53266 0015 entr e photostyle X 55267 D014 entr e photostyle Y 53268 multi rien reset colore 38 40 d calage horiz cran g n rateur caract adl 12 adll ad10 ad13 ad12 adll rien photo collisions IRQ detect interp 5 style jlutin lutin balay lutin bord photo collisions style lutin lutin balay lutin bord 0016 53270 DO18 53272 0019 55275 D01A 53274 autorisation interpupt
200. RAM aux adresses 0000 et suivantes jusqu en DFFF Ils occupent donc 000 0000 1000 octets soit 4096 octets ou 4 K Il a dans le CBM 64 4 p riph riques principaux le VIC II contr leur d cran le SID ou SOUND INTERFACE DEVICE contr leur sonore et deux CIA ou COMPLEX INTERFACE ADAPTER Ces derniers sont essentiellement constitu s de portes d entr e sor tie bidirectionelles Chaque CIA poss de deux portes paral les 8 bits quelques signaux de contr le pour g rer les mouvements par les portes deux minuteries et une horloge Le contr leur d cran VIC II occupe 48 adresses de D000 D02F Ce sont ces adresses qui permettent le dialogue entre le VIC II et le microprocesseur Mais quand le VIC II affiche une image il va chercher en m moire RAM les informations n cessaires cr er l image Le num ro du caract re et la couleur du carac t re Le dessin du caract re lui provient d une zone m moire qui peut tre en RAM et c est ce qu on appelle les caract res programmables Mais le plus souvent comme c est le cas l allu mage de la machine le dessin provient du g n rateur de carac t res cette m moire ROM que nous avons voqu e pr c demment Cette ROM est l adresse D000 Mais direz vous nous venons de mettre cette adresse nos p riph riques LE LIVRE DU 64 Eh bien reconstruisons notre empilage Sur la RAM nous posons le g n rateur de caract res c est la couche B de la fig
201. RAMME DEBUT DE VARIABLES Pointeur de de cha nes d but de zone tableaux Pointeur de fin de tableaux 1 Pointeur de bas de zone cha nes Pointeur vers partie de la zone cha nes pour ramassage d ordures POINTEUR DE SOMMET DE MEMOIRE POUR BASIC Num ro de 1 ligne BASIC en cours Num ro de ligne BASIC pr c dente Pointeur d instruction BASIC pour CONT Num ro de ligne DATA en cours Pointeur vers adresse de la DATA en cours Vecteur d INPUT Nom de la variable BASIC en cours Pointeur d adresse de la valeur de la variable en cours Pointeur de variable indice de boucle FOR aussi N de p riph N de fichier Pointeur provisoire Octet provisoire Zone de stockage temporaire pour KERNAL Valeur de STEP par d faut 1 Vecteur pour calcul de fonctions Vecteur pour calcul de fonctions Zone de stockage temporaire Accumulateur flottant principal exposant Accumulateur flottant principal mantisse Signe accumulateur flottant principal Pointeur vers table de polyn me Bit de garde accumulateur flottant princ Accumulateur flottant secondaire exposant Accumulateur flottant secondaire mantisse ADRESSES HEXA DECIMAL 006 110 006F 111 0070 112 0071 0072 113 0073 008A 115 0079 121 007A 007B 122 0088 008F 159 0090 144 0091 145 0092 146 0093 147 0094 148 0095 149 0096 150 0097 151 0098 152 0099 153 009A 154 009B 155 009C 156 009D 157 009E 158 009F 159 00A0 00A2 160 0
202. REM ZD 0 VAR FIOTTANTES 63025 REM ZD 1 CHAINE DE CARACTERES 63026 REM ZD 2 FONCTIONS 63021 R REM ZD 3 VAR ENTIERES 6302 Re ZD PEEK ZC AND128 128 2 PEEK ZC H AND128 128 63033 REM CHOIX DES DIF ROUTINES 63034 REM SUIVANT LA VALEUR DE ZD 6 Ger ONZDHL 6051863080 63140 63190 63210 63043 REM TOUCHE PRESSEE 63045 8352 GETZAS IFZAS THEN63050 63053 REMA kiok ddolokedoiok ioke kk kikk kk 63054 FIN BOULE PRINCIPALE 63055 REM k kk amp kkkkkkkkkkkkkkkkkkkkkk 231 LE LIVRE DU 64 63057 nue PRINT NEXTZC 001063260 63063 REMAKE RAA ARR ekk kkk RE AE 63064 REM SOUS PROGRAMME 63065 REM IMPRESSION NOM VARIABLE 63066 REM kikk kk kk k kiok kkk 63067 63070 PRINTCHRS PEEK ZC AND127 CHR PEEK ZC JAND127 RETURN E ERT 63074 SOUS PROGRAMME 63075 REM VARIABLES FLOTTANTES 6307 6 REM kkkkkkkkkkkkkkkkkkkkkkkkkkk 63077 EE REM CALCUL DE L EXPOSANT 630007 ZE PEEK ZC 2 128 EE REM CALCUL DE LA MANTISSE 63090 ZJ 5F PEE D Nr 256 2 4 256 2 2 5 256 3 GEN EK ZC 6 25 63093 REM RECHERCHE DU SIGNE 63094 REM ZK 1 SIGNE NEGATIF 63095 B REM ZK 1 SIGNE POSITIF 63100 D NEIT 310 2 43 412 8THENZK 1 63113 REM CALCUL DU NOMBRE 63114 REM FIN DU S P SI TABLEAU 0102 ZJ ZK ZJ 2 ZE IFZS YOTHENRETURN 82154 REM AFFICHE LE NOMBRE 63130 GOSUB63070 PRINT ZJ ZJ 0 RI
203. RITE MULTICOLORE 1170 POKE VIDEO437 0 REM COULEUR 1 NOIR 1180 POKE VIDEOJ38 4 REM COULEUR 2 MAUVE 1190 POKE VIDEO439 1 REM COULEUR SPRITE BLANC 1990 RETURN 1999 2000 REM POSITIONNE LE SPRITE 0 2010 XX 244X 8 YY 50Y 8 2030 IF XX lt 256 THEN POKE VIDEO 6 0 2100 2040 XX XX 256 POKE VIDEOHL6 1 2100 POKE VIDEO XX REM HORIZ MIN 24 MAX 336 2200 POKE VIDEO 1 YY REM VERT MIN 50 MAX 242 2990 RETURN 2999 kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk 3000 REM SPRITEO INVISIBLE 3990 POKE VIDEO 2 RETURN 3999 PEU MAT EE uginn 4000 REM SPRITEO CRAYON ET POINTE 4010 POKE 2040 13 REM ADRESSE SPRITEO 4990 POKE VIDEO 2 1 1 RETURN LE LIVRE DU 64 4999 kkkkkkkkkkkkhkkkkkkkkhkkikikkkkikkikikkiki 5000 REM SPRITEO CRAYON SANS POINTE 5010 POKE 2040 14 E ADRESSE SPRITEO 5990 POKE VIDEOH21 1 RETURN 5999 ERRARE MAREA aeren 6000 REM SPRITEO GOMME 6010 POKE 2040 i Deg ADRESSE SPRITEO FEN POKE VIDE RETURN 699 MME 200000 DATA E 20200 DATA 55555 SAVE O DESSIN 8 READY 201 LE LIVRE DU 64 DESSIN BITMAP Au chargement une petite p riode d attente est n cessaire pendant que le 64 construit ses lutins Ensuite l cran haute r solution est effac puis la RAM couleur est remise blanc Le crayon appara t au centre de l cran et se d place avec les touches CRSR Les touches
204. Remet le pointeur de pile sa valeur de d part et revient malgr cela au programme appellant Routine tr s utile en d but d un programme contenant de nombreuses sous routines et ne devant revenir finalement qu BASIC READY Effectue le LIST du BASIC Avant l appel du programme il faut ranger le num ro de la premi re ligne BASIC lister 5F et 6 partie basse partie haute et le num ro de la derni re ligne BASIC lister en 14 et 15 Rend toujours le contr le la routine BASIC READY Execute le RESTORE du BASIC Ex cute le END du BASIC Ex cute le RUN du BASIC Ne revient jamais au programme appellant mais bien BASIC READY Acquiert une valeur d cimale dans le corps du programme BASIC Doit faire partie de la sous routine SYS xxx qui pr c de le nombre Le r sultat est sur deux octets en 14 et 15 Lors de l appel l accumulateur et les flags doivent refl ter l tat du premier caract re du nombre comme en sortie de n importe quelle routine de l interpr teur BASIC C est dire que l accumu lateur doit contenir le dernier caract re que la routine CHRGOT saisi dans le corps du texte BASIC De m me les flags CARRY et ZERO doivent indi quer comme en sortie de CHRGOT l tat num rique ou nul du caract re En sortie l accumulateur et les flags refl tent l tat du premier caract re non num rique qui suit la valeur acquise dans le 65 LE LIVRE DU 64 ISR A9C4
205. Si non elle affiche le message SYNTAX ERROR et retourne au BASIC READY En entr e l accumulateur doit contenir le caract re courant Les flags doivent galement refl ter son tat comme en sortie de CHRGOT routine que ci dessus mais pour v rifier la pr sence dans le texte BASIC de la parenth se ouverte M me routine que ci dessus mais pour v rifier la pr sence dans le texte BASIC de 1 virgule Il est indispensable d utiliser cette routine si on d sire acqu rir dans le texte BASIC plusieurs param tres dans une routine du genre SYS 12 34 56 par exemple On utilisera alors alternativement les routines AD9E et AEFD pour lire les valeurs et les virgules de s paration indispensables pour discerner l un de l autre les param tres Ecrit l cran le message SYNTAX ERROR Prends le nom d une variable BASIC l endroit du pointeur de caract re courant dans CHRGOT et range la valeur de cette variable num rique dans l accumulateur flottant Cette routine met la valeur des trois octets de l horloge interne TI dans l accumulateur flottant principal en 65 64 et 65 65 LE LIVRE DU 64 JSR B113 Cette routine teste si l octet pr sent dans l accumulateur A du 6510 est bien alphab tique Si oui elle met 1 le flag C CARRY Si non elle le met 0 JSR Conversion d un nombre rang en notation flottante dans l accumulateur flottant principal en nombre entier sur deu
206. T CECI 00011 0000 00012 0000 SYS 52525 0PEN 4 4 CMD 4 LIST 00013 0000 00014 0000 CE PROGRAMME EST SITUE EN CD2D 52525 00015 0000 00016 0000 A UTILISER POUR CREER DES LISTINGS 00017 0000 SUR UNE IMPRIMANTE CLASSIQUE 00018 0000 LES CODES ECRAN SFECIAUX DU 64 SONT LISTES EN CLAIR ENTRE CROCHETS 00019 0000 SEET 00020 0000 ATTENTION DANS LISTINS 00021 0000 PLUS GRAND QUE EST DONNE PAR 7 00022 0000 PLUS PETIT EST DONNE PAR 00023 0000 3 00024 0000 00025 0000 LF AVANCE PAPIER 00026 0000 CR 00 RETOUR CHARIOT 00027 0000 CANAL 04 NUMERO DU CANAL UTILISE 00028 0000 STATUS 90 OCTET ST STATUS 00029 0000 PERL 9A ADRESSE DU NUMERO DE PERIPH DE SORTIE 00030 0000 DEVICE BA N FERIPH DE SORTIE 00031 0000 VECCLO 051C VECTEUR DE CLOSE 00052 0000 VECSOT 0320 VECTEUR INIT SORTIE 00053 0000 VECHRT 0326 DE SORTIE D UN CARACTERE 00034 0000 WRT FICA SORTIE D UN CARACTERE 00035 0000 SOT F250 ROUTINE INIT SORTIE 00036 0000 COS 291 ROUTINE DE CLOSE 00057 0000 PORTA DDOO A DU CIA 2 POUR HANDSHAKE 00038 0000 PORTB 001 PORT B DU CIA 2 PORT UTILISATEUR 00039 0000 DORA 0002 REGISTRE DE DIRECTION A 00040 0000 DDRB 9005 REGISTRE DE DIRECTION B 00041 IR 800 REGISTRE DE CONTRO
207. TEUR THIERRY SALOME 40030 REM DATA DES CARACTERES 40040 REM kkkkkkkkkkkkkkkkkkkkkk 40050 DATA128 128 128 128 128 223 128 128 40060 DATA135 128 135 128 252 168 252 128 40070 DATA198 255 177 128 241 136 199 128 40080 DATA182 233 246 128 128 135 128 128 40090 DATA156 162 193 128 193 162 156 128 40100 DATA1S2 188 140 128 136 188 136 128 40110 DATA192 176 128 128 136 136 136 128 40120 DATA128 192 2 128 128 240 136 135 128 REM 40130 DATA255 221 255 128 132 130 255 128 REM O ET 40140 DATA24 3 201 231 128 193 201 182 158 REM 2 ET BEEBBBES SHHBHHH Hex OSC ERA 40170 255 201 255 128 207 201 255 128 REM 8 ET 40180 DATA128 200 128 128 192 180 128 128 REM ET 40190 DATA144 168 196 128 168 168 168 128 REM lt 219 LE LIVRE DU 64 220 40200 DATA196 168 144 128 130 217 134 128 80210 DATA251 217 255 128 254 137 254 128 40220 DATA255 197 186 128 190 19 3 193 128 40230 DATA255 193 190 128 255 201 193 128 40240 255 137 12 128 190 193 249 128 40250 DATA255 136 255 128 193 255 193 128 40260 DATA193 25 5 129 128 255 136 246 128 40270 255 192 192 128 255 130 255 128 40280 DATA25 5 188 255 128 190 19 180 128 40290 DATA255 137 134 128 190 225 254 128 40300 DATA25 5 153 230 128 198 201 177 128 40310 DATA129 255 129 128 255 192 255 128
208. US PETIT QUE EST REPRESENTE PAR 00010 0000 5 HHHHOHEHHHEHHHHHHHHHHHHHHHHHHHOHHEHHHHHHHHE 00011 0000 i 00012 0000 0000 ICI 49360 00013 C000 00014 0000 BOCH ADRESSE DE LA RAM COULEUR 00015 0000 FINCOU 0000 ADRESSE FIN DE RAM COULEUR i 00016 000 EORAN 5000 ADRESSE DEBUT ECRAN BITMAP 00017 FINEC 0000 ADRESSE DE FIN D ECRAN BITMAP 1 00018 00019 000 03 COLOR BYT 05 31L FAUT POKER ICI LA COULEUR DE L ECRAN 00020 ACCES PAR SYS 49361 00021 001 A9 3C CLEAR LDA OOUL 00022 0005 85 62 STA 62 ADRESSE DE TRAVAIL 00025 0005 A9 CC 00024 0007 85 63 STA 563 00025 009 A9 00 LDA FINCOU ADRESSE DE FIN 000206 COD 85 64 5 64 00027 0000 A9 DO F INCOU 00028 CON 85 65 STA 65 00029 QE AD DO CO LDA COLOR 00030 COE4 00 00 00051 Q0E6 20 035 C JSR PKTST ECRIT INCREMENTE AER TESTE 00032 C 9 DO FB BNE CLEAR 00033 A9 00 LDA Z ECRAN 00034 C D 85 62 STA 62 00035 A9 EO f ECRAN 00036 CO1 85 63 STA 63 00037 A9 00 LDA Z FINEC 00058 C F5 85 64 STA 64 00039 O7 A9 00 LDA F INEC ET DE MEME POUR LA REMISE 00040 CO9 85 65 STA 65 ZERO DE L ECRAN 00041 OFB A9 00 LDA 00 00042 20 03 CI CLEAR2 JSR POKTST EFFACE UN OCTET ECRAN 00043 C100 DO FB BNE CLEAR2 S 00044 C102 60 RTS 00045 C103 00046 105 91 62 STA 62 Y PE 00047 105 6 62 INC 62 INCREMENTE
209. V2 0 0pDp Ces diff rences sont fort mineures mais attention les programmes qui utilisent la cassette ne peuvent fonctionner D autre part les programmes qui utilisaient une couleur d criture 6 bleu pour crire des mots non visibles l cran auront leur texte bien visible en bleu sur fond blanc C est le cas des programmes chargeurs de routines en langage machine qui crivent des caract res dans le tampon clavier 99 LIVRE ou 6 100 LE LIVRE DU 54 CHAPITRE 3 LA GESTION DE L ECRAN Le g n rateur d image du CBM 64 le circuit 6567 est fort complexe et autorise une grande vari t d effets visuels tr s spectaculaires Ce circuit est usuellement appel VIC II ce qui signifie Video Interface Chip num ro 2 le VIC I tant le contr leur d cran du VIC 20 Le fonctionnement interne du VIC II est bien sur terriblement complexe Le VIC II contient environ deux fois plus d l ments internes que le microprocesseur 6510 lui m me Il existe en deux versions le 6567 pour l Europe avec le codage couleur PAL et le 6566 pour les Etats Unis avec le codage couleur NTSC De plus le brochage de ces deux mod les est diff rent FONCTIONNEMENT DU VIC II Du point de vue de l lectronicien le VIC II est connect au 6510 de deux c t s diff rents Tout d abord 47 registres sont consid r s par le 6510 comme des cases m moires ordinaires Ce sont les valeurs de ces 47 registres qui contr lent en
210. VAL Exemple 1074 FNACX 2 A l impression 1 valeur d une expression est pr c d e d un espace si sa valeur est positive et est toujours suivie d un espace La ponctuation les virgules et les point virgules Lle r le du point virgule est de s parer deux l ments cons cutifs de la ligne et ne provoque aucune impression PRINT ne sert rien mais est valable PRINT A B C est valable PRINT A 2B 5 n est pas valable PRINT A 2 B 3 est valable On voit que le reste obligatoire pour s parer les exp ressions non simples Le en fin d instruction signifie que la 47 LE LIVRE DU CBM 64 liste n est pas finie la suite est dans le prochain PRINT l absence de en fin de PRINT BASIC envoie le caract re CHR 13 RETURN et le caract re CHR 10 LINE FEED Donc pour ne pas envoyer de CHR 10 dans un fichier il faut marquer la fin de la ligne ainsi PRINT X A B HR 13 La virgule repr sente l avance au tabulateur suivant sa rencontre BASIC envoie un nombre d espaces variable de fa on ce que le caract re suivant se trouve au d but de la zone d im pression suivante c est dire au ler 11 21eme 2leme caract re de la liste etc Les fonctions de liste sont SPC X et TAB X SPC X repr sente X caract res espace Cette fonction permet d conomiser de nombreux octets dans un programme TAB X envoie au p riph rique de sortie usuellement l cran le nombr
211. VALEUR DU CARACTERE PROGRAMMER 1907 CP PEEK EC H4OXEY4EX DE CP 19078 REM REFUSE LE CARACTERE PLEIN nU IF CP 30 THEN 19040 19088 REM APPEL DEFINITION LUTIN ET FIN DE BOUCLE MOUVEMENT 19090 GOSUB 15020 GOTO19040 19108 REM SORTIE DE LA ROUTINE 19110 IF 24 AND YA 226 THEN 19140 19117 REM APPEL CANC DIE FREE 19118 REM SI LUTIN DANS GRI 10127 IF XA 40 THEN GOSUB 19215 19128 REM FIN DE LA BOUCLE DE MOUVEMENT AVEC PROGRAMMATION 19130 GOTO 19040 19137 19138 REM APPEL MENU PA 0 19140 PAGE O 19150 GOSUB 13010 19160 RETURN 19200 REMAKE RAR RAR A ARR RER eieiei 19201 REM SOUS ROUTINE DEPL GRILLE 19202 2 REMA HR HR AR ek ARR AR 19204 REM VARIABLES UTILISEES DANS LA SOUS ROUTINE 19205 REM 2 NOUVELLES COORDONNEES DU LUTIN 19206 REM XD YD ANCTENNES COORDONNEES DU LUTIN 19207 REM PX PY VALEURS DE DEPLACEMENT DU LUTIN 19208 REM CARACTERE SOUS CURSEUR 19209 REM PL TEST SI PADDLES OU JOYSTICK 19210 REM DIR SAISIE DU PORT II DU JOYSTICK 1022 REM VALEUR DES PADDLES 19213 REM ENVOI VERS DEFINITION LUTIN 1901 DE 15 GOSUB 15020 19218 REM APPEL PROGRAMMATION GRILLE 19220 Gees 19621 7 19228 REM COORDONNEES DU HOME DANS LA GRILLE 11240 2 XA 46 216 19238 REM APPEL DEPLACEMENT POIGNEES T3519 GOSUB 12510 19248 REM TEST SI POIGNEES 13250 IF PL 1 THEN 19400 19257 REM MISE A JOUR DES INDICES DE DEPLACEMENT 19258 REM DU LUTIN PAR 4 PIXELS 19259 19260 F 19270 PX EH
212. VIC II REGISTRE 53273 0019 le bit num ro indique la cause 0 balayage cran valeur atteinte 1 collision cran lutin 2 collision lutin lutin 5 photostyle 7 IRQ VIC II Si le bit 7 vaut 1 cela signifie que l interruption provient du VIC II La cause peut alors tre d termin e en 130 LE LIVRE DU 64 regardant les autres bits du m me registre Le bit 0 indique que la ligne cran en cours de balayage est celle dont la valeur a t indiqu e au VIC II voir plus bas Le bit 1 indique qu une collision eu lieu entre lutins Le bit 2 indique qu une collision a eu lieu entre un lutin et les donn es de l cran Le bit 3 indique que le balayage de l cran vient de passer devant le crayon lumineux photostyle Chaque bit du registre d interruption ne peut tre remis z ro qu en crivant un l dans ce bit Cette m thode peut para tre curieuse mais elle vite de devoir garder en m moire les bits que la routine d interruption n a pas encore eu le temps d exploiter D s la fin d une routine d interruption il faut videmment remettre z ro les bits qui ont caus celle ci De structure semblable au registre ci dessus le registre d autorisation d interruption D01A 53274 ne mo ifie en rien le fonctionnement du registre D019 mais permet de n autoriser que les sources d interruptions voulues Chaque bit 1 dans le registre DO0l1A autorise l v nement correspondant g n rer une interruption IR
213. VRE DU 64 LISTVARIABLES Ce programme peut tre ajout avec APPENDISK un autre programme Il liste chaque frappe de 1a barre d espace une variable du BASIC avec son type entier flottant chaine Pour les cha nes de caract res il liste la chaine donne son adresse et sa longueur Les fonctions FN sont list es adresse du texte de la fonction adresse de la variable locale Les tableaux sont donn s avec d abord leurs dimensions puis les valeurs de chaque l ment Les tableaux de cha nes donnent les chaines les adresses et les longueurs 1 123 321 2 AX 123 82 321 3 AS COUCOU BS AS A TOUS A D FFNAB B 2 B41 5 DIMAB 2 3 4 TN 9 5 BZG MO LM 6 FORI 104 ABC LJ THON HE NEXTK J I 7 FORI 1TO5 19 el r Deeg SCH zBYIMW2 I NEXII 62990 REMk d kkk E ede 6299 REM LISTVARIABLES 62992 REM 62993 REM PAR P BRUNET 62994 REM COPYRIGHT BCM 1983 62995 62996 62997 REM ZA ADRESSE DEBUT VARIABLES 62998 PAUL E PRINT BIANC ZA PEEK 46 256FPEEK 45 63003 T REM ZB ADRESSE DEBUT TABLEAUX 6300 690104 ZB PEEK 48 256 47 63013 REMA Akk ekk okk kkk RAR RAR ARR ARR Ee REM DEBUT BOUCLE RANG PERLE VARIABLE 6301 03018 EE AA e dence 63017 63018 REM ZC INDICE DE BOUCLE 63019 03021 s FORZC ZATOZB 1STEP7 63022 REM ZD BS DES MEE DES DEUX RES 63024
214. YACE D ECRAN METTRE 703 REM L ADRESSE PARTIE BASSE PARTIE 704 REM HAUTE DANS LES DATA 695 ET 696 705 REM ACTUELLEMENT IL Y A 33 ET 208 706 REM SOIT DO21 COULEUR DE FOND O 707 REM MODIFIER AUSSI CS EN LIGNE 630 708 59555 SAVE GLITCH 8 READY HELICO Bruitage d h licopt re La voix 1 du S I D g n re le bruit des pales tandis que la voix 2 simule le sifflement de la turbine Pousser sur la barre d espace pour arr ter 19 REM BRUITA HELICOPTERE POUR CBM 64 100 51 54272 52 8147 GOSUB 500 0 REM 120 POKE Slt 5 32 REM A 2 D O 130 POKE S1 6 160 REM 5 15 0 140 VOIX 2 150 52 1 255 REM FREQ AIGU 160 POKE S2 5 0 REM A O D 0 170 POKE 52 6 80 REM S 5 R 0 180 150 51424 15 REM VOLUME FOND 200 REM DEBUT VOIX 1 210 POKE 51 4 129 REM BRUIT 0 REM VOIX 1 22 DEBUT VOIX 2 207 52 4 17 REM TRIANGLE 240 250 FOR 22 0 OSTEP 4 POKE 51 1 260 FOR 1 070 44STEP2 POKE 51 I NEXT 270 A IFA 240 299 GOSUB500 LIST 500 FOR I 0T024 POKE 5111 O NEXT RETURN 55555 SAVE GO HELICO 8 READY HEXA Programme de conversion d cimal gt hexa et hexa gt d cimal Cette derni re conversion couvre les nombres hexad cimaux cod s Sur 2 ou sur 4 caract res 218 LE LIVRE DU 64 10 PRINT CLR CONVERSIONS DECIMAL HEXA C BAS AS J C BAS C BAS 20 PRINT RVS ON F1 RVS OFF 22 PRINT RVS ON F3 RVS OFF
215. a o H GF 2 m E charg et ex cut dire 255 LE LIVRE DU 64 11 faut mettre ce programme sur chacune de vos disquettes elles deviennent tellement plus faciles utiliser 10 PRINT eu NOIR 100 DIMES 224 120 FORX 880T0950 READZ POKE X Z CS CS4Z NEXT 130 IFCS lt gt 10432THENPRINT CLR RVS ON JERREUR DE DATA END 160 PRINTTARQ 2 RWS ON TABLE DES MATIERES RVS OFF C BAS C BAS 200 315 I0 GOSUB 290 210 OPEN1 8 D 0 GOSUB290 220 H E SY5880 230 IF ST THEN CLOSEL CLOSELS GOTO 340 250 urgens Lis Ke LEFTS FS 16 280 REM ERREUR DISQUE 290 INPUTZLS EN EM ES IFEN OTHENRETURN 300 PRINTEN MS ET S 310 CLOSE L n END REM MENU 340 IFF OORF CTHENS 1 F C IFCHOTHENF 40 GOTO 360 350 IFCPFTHENS 5 20 F C 25 2 OTHENF S 19 360 1 0 370 PRINT CIR RVS ONJNOM DU DIS VS OFF H C BAS 380 FORX STOS a WE R 1 390 L L 395 Enn POTE OS 410 PRINI RVS ON RIGHTS STRS X 2 RVS OFF CHRS 95 430 PRINT 440 PRINT R PRINT R VS ON ESPACE SUITE OU VALEUR QU POUR FIN GER OFF 450 PRINTTAB 9 m VOTRE CHOIX RVS OFF 500 IFG END 510 G GAL 6 550 REM 560 F G 570 EESO 1 THENE ES RS GOTO 570 580 PRINT CLR LO D 590 PRINT C E IC BAS C Stret BAS 4CHR 34 CIR amp CHR 34 yr RU
216. a a c OI O1 04 O EO 00 CILE ANANN lt G f N d CX ri SEBXSZERB ASSSANSGRQOROs DES As EE EE NONNACOO NN lt t O MAH lt PA D O O m O MIO d lt 00 uy MOT lt lt lt 10 MO Le C O ENEE EE EE KEE lt CAO DO O O O O C m O CO 000 CO MEN ON CO pou O in pio DO pa x u HIT 0 f UN Er 00 CO Fret En 00 O O 4 O O O O O co 1 00 O E M LNO A EE EE E BIO E oomemoo oido tmoonomnnrme MINOR A 169 pu ft 60 p co AN NN Ea d CIE Q O VO lt pa fa AO ON OG fu et ae rt EE EE BS8BSESBSSSESSSBESESBSBSEESSSSBBSSESSBSSBSSS 88868888868888885858888588888855888588 SSES EES EES EE EE EE EE XIX EE EE 244 LE LIVRE DU 64 88 9 82 A UNOD d C GON MO A fu DON onto 59 NAN par r ISET Io MAA Qua o O NDO amp AS OO mnm AO OT Bases O t t m 0 QOO EE o10 000 COS NNO BODNNOOMN FH CQlOOQdlcioO ooa lt O40O00moo NAOOONO SERIAS RLO SKRT aO oO Or OON DS Ee EE E E SRE 585598 emo coocouno E300 A AN 22928852919 g 38 mo r a p 00 CO TO P CO CO O rry Homo Ll BOBRERSRRR GIE OO 0 OC OON O O m A MO ri ON EE EE EE i p M O O A ARE Qu Ou NK ON 4 EA ON a OMR CHE 40 LH O ED CHE in faa pO
217. acent en effet apr s deux milli mes de seconde seulement Heureusement pour viter ces amn sies ind sirables il existe une m thode fort simple Il suffit de lire ces m moires et elles retrouvent une nouvelle p riode de deux millisecondes de stabilit Si les m moires du CBM 64 nous paraissent stables c est que le VIC II s occupe de les relire successivement sans rel che Jusqu ici pas de probl mes entre le microprocesseur et le VIC II A chacun sa phase 16 LE LIVRE DU 64 Mais les choses se compliquent quand on apprend que en plus du g n rateur de caract res et de la m moire rafra chir le VIC II doit aussi toutes les 8 lignes de balayage de l cran afficher 40 nouveaux caract res Il lui faut donc effectuer 40 lectures de la m moire d cran toutes les 8x64 microsecondes une ligne de balayage TV dure environ 64 microsecondes Or il est d ja occup lors de toutes les phases 1 disponibles Dernier probl me l affichage des lutins n cessite aussi un acc s la m moire chaque ligne de balayage pour lire l adresse du lutin et trois acc s la m moire par ligne afficher pour g n rer le dessin du lutin lui m me Pour effectuer ces acc s suppl mentaires le VIC II vole des phases 2 au microprocesseur et lui interdit ainsi de temps en temps l acc s la m moire Pour l utilisateur cela signifie qu il n est pas possible de se fier une boucle de comptage dans un programme pour c
218. adresses 14 et 15 ensuite le test du caract re suivant sera effectu Ce doit obligatoirement tre une virgule Ensuite on acquiert une seconde valeur num rique comprise entre 0 et 255 inclus Cette derni re valeur se retrouve dans le registre X du 6510 Cette routine est entre autres utilis e par la commande 66 JSR JSR JSR JSR JSR JSR JSR 8 7F7 8 80D 8824 8 82D 8849 8850 8867 B9BC B9D6 B9DB B9E0 B9E5 LE LIVRE DU 64 Cette routine convertit un nombre flottant dans l accumulateur flottant principal en nombre entier non sign sur deux octets Le r sultat se retrouve en 14 et 15 en page z ro Tr s importante routine pour acqu rir la valeur du param tre transmis du BASIC un sous programmee USR xxx crit en langage machine Evalue la fonction PEEK du BASIC Il faut en entr e avoir dans l accumulateur flottant principal 1 valeur de l argument de la fonction Le r sultat est en sortie rang en flottant dans l accumulateur flottant principal Ex cute la commande POKE avec en entr e l adresse en 14 et 15 partie basse partie haute et la valeur transf rer en m moire dans le registre X Execute la commande WAIT avec l adresse en 14 et 15 partie basse partie haute et la valeur du second param tre dans le registre X du 6510 Prends ensuite le caract re courant dans le texte BASIC pour le consid rer comme troisi me param
219. angente ATN qui exige un nombre de termes important pour donner un r sultat correct poss de l or dre le plus lev Onze ce qui explique que ce soit le mot cl BASIC le plus lent ex cuter La fonction USR est le second interface apr s SYS entre BASIC et langage machine USR est une v ritable fonction Le param tre l USR est valu par EVAL sa valeur est donc dans l accu Puis le contr le est pass la routine de l utilisateur dont l adresse BAS HAUT doit tre crite en 511 et 512 785 et 786 A 1a fin de la routine utilisateur RTS la valeur contenue dans l accu FLP1 est la valeur de la fon ction L utilisateur peut donc cr er sa propre fonction qui modifie l ACCU La fonction FRE a un argument bidon DUMMY qui n est l que par souci d uniformisation En effet cette fonction n a pas d argument Son but est d valuer la place disponible en m moire pour le programme utilisateur mais elle a aussi l effet d augmenter la m moire effectivement disponible un moment donn elle provoque le ramassage d ordures GARBAGE COLLECTION La fonction FRE vaut apr s valuation le nombre d octets libres en m moire soit la diff rence entre Le pointeur bas de zone cha nes en 33 et le pointeur fin de tableaux 31 Le ramassage d ordures effectu pr alablement efface de la m moire les zones cha nes inutilis es Celles ci sont nom breuses surtout si on a effectu de no
220. anim es Autre usage possible Apr s avoir affich un cran qui occupe l attention de l utilisateur pendant quelques dizaines de secondes le programme cr e dans une autre zone m moire le dessin de l image suivante Le temps apparent d ex cution de l image devient ainsi virtuellement nul En annexe on trouvera le programme DESSIN qui n emploie que deux caract res ordinaires pour tracer des figures l cran 115 LE LIVRE DU 64 De le programme DESSIN MOYRES n utilise que 16 caract res diff rents Ces programmes sont assez comment s pour tre compris ais ment Passons maintenant en revue les caract res graphiques les plus utiles Les caract res barrettes RC o ene O a fond en haut fond gauche fond en bas fond droite Les caract res 8 points il y a quatre sous groupes les caract res noircis sur toute la hauteur mais seulement sur n huiti mes de la largeur cadr s gauche ou droite et ceux noircis sur toute la largeur mais seulement sur n huiti mes de la hauteur cadr s partir du haut ou du bas noircis partir de la gauche noircis partir de la droite 116 LE LIVRE DU 64 noircis partir du bas noircis partir du haut 1 8 100 164 1 8 175 185 162 184 183 163 32 sur fond invers pr c d REV et suivi de OFF Les caract res blocs 4 4 points Le CBM 64 contient tous
221. ans la table si le mot cl n est pas trouv on consid re qu il s agit d un nom de variable Ce nom de variable est alors consid r comme l argument de l in struction LET que LET ait t pr sent ou non dans le texte BASIC teste ensuite la pr sence du signe z S il est absent il y a erreur de syntaxe S il est pr sent BASIC value l ex pression qui le suit et modifie ou cr e la variable en lui affectant la valeur de l expression L emploi de l instruction LET explicite est avantageuse un seul point de vue la rapidit d ex cution En effet l interpr teur ne scrute qu une partie de la table des mots cl s LET est en neuvi me position La commande DEF a une fonction quasi identique LET elle attribue une valeur une variable de type FONCTION Exemple DEF FNAB X SIN X cr e la fonction AB De plus DEF cr e une variable ici X Cr er une fonction consiste ins rer dans la zone VARIABLES une zone de 7 octets contenant les pointeurs vers la variable et vers la zone o la fonction est d finie ici l adresse du caract re SIN dans le corps du programme SIN est cod comme un seul octet bien entendu DEF utilise une variable locale qui n existe pas vraiment Son pointeur est remplac par celui de la variable r ellement utilis e lors de l appel de la fonction Le nom de cette variable n a de signification qu l int rieur de la d finition de la fonction Dans l exemple ci dessus la variable
222. arenth ses Avant de passer la routine en langage machine de l utilisateur SYS effectue les transferts suivants Ranger dans le registre la valeur 030C Ranger dans le registre X la valeur 030D Ranger dans le registre Y la valeur en 030E Ranger dans le registre d tat les flags la valeur en 030F Le transfert 1 routine de l utilisateur s effectue par un saut indirect l adresse qui a t convertie en provenance du texte BASIC et rang e en 14 et 15 partie basse partie haute Donc une routine appell e par SYS peut relire l adresse de son point d entr e en 14 et 15 Une sortie de SYS par une instruction RTS ram ne normalement l adresse 147 qui mets jour les valeurs en 030C 030F avec les contenus des registres en fin de la routine de l utilisateur Si le BASIC a t recopi RAM peut intercepter la routine 1 modifiant en E130 o le param tre du SYS est converti en entier On peut aussi l intercepter en bE147 pour r cup rer la sortie de la routine SYS Cette routine ex cute le SAVE du BASIC en prenant les param tres dans le corps du texte BASIC 71 LE LIVRE DU 64 JSR 165 JSR 168 JSR 200 ISR E206 JSR 20 JSR E264 JSR E26B ISR E2B4 E2EF JSR E3OE 72 l endroit du pointeur de CHRGOT Ex cution de la commande VERIFY du BASIC Ex cute la fonction LOAD du BASIC et affiche un message ventuel si n cessair
223. ation du r veil bit 7 de 56335 1 pour r veil 0 pour horloge Heures PRINT PEEK 56331 AND 127 Minutes PRINT PEEK 56330 Secondes PRINT PEEK 56329 Dixi mes PRINT PEEK 56328 AM PM PRINT PEEK 56331 AND 128 Le compteur d heures poss de comme on peut le voir ci dessus un indicateur avant midi apre s midi dans son bit 7 Une programmation classique de ces registres est donn e en annexe avec le programme REVEIL MATIN LE REGISTRE A DECALAGE ET LES CONTROLES D INTERRUPTION Le registre d calage 56532 n est pas utilis dans le 64 le contr le des interruptions indique la ou les sources internes d interruptions qui sont autoris es Ce contr le est r alis par les bits 0 4 du registre 56333 56333 DCOD bit D minuterie A bit 1 minuterie B bit 2 r veil matin bit 5 registre d calage bit 4 lecture cassette La fa on de programmer ce registre est tout le moins sp ciale Nous ne programmerons que le bit 2 qui est le seul pr senter un int r t pratique pour le d clenchement de l horloge La gestion des bits 0 1 et 4 est r serv e au KERNAL pour les acc s la cassette et la minuterie par 1 60me de seconde qui provoque le balayage du clavier 168 LE LIVRE DU 64 Pour mettre 1 un des bits O 4 ce qui autorise la source d interruption correspondante il faut mettre dans le registre la valeur 128 2 bit POKE 56333 128 2 bit o bit est une valeur entre
224. avons donc transform les coordonn es absolues X Y en adresse physique octet BY bit B Dn avait bien s r 0 lt lt 319 0 lt lt 199 HO lt BY lt HO 7999 0 8B lt 7 Pour allumer mettre 1 un point Ligne 8020 POKE BY PEEK BY OR 2 B Pour teindre mettre 0 un point Ligne 8020 POKE BY PEEK BY AND 255 2 B 127 LE LIVRE DU 64 LE MODE GRAPHIQUE NUMERO 7 Aussi appel mode haute r solution multicolore le mode 7 sacrifie la r solution de l image la vari t des couleurs La grille BITMAP est constitu e de 160 200 pixels chaque pixel tant deux fois plus large qu en mode 6 Mais pour chaque bloc de A sur 8 pixels on dispose non plus de 2 mais de 4 couleurs Une de ces couleurs est la couleur de fond 0 commune tout l cran Les 3 autres ne d pendent que du bloc et sont rang es dans la RAM couleur la partie haute et la partie basse de l octet correspondant de la m moire cran A chaque pixel de l cran correspondent maintenant 2 bits Les 4 combinaisons possibles donnent acc s aux 4 couleurs bits Valeur La couleur du pixel vient de 00 0 couleur de fond 0 01 1 A bits sup rieurs m moire cran 10 2 4 bits inf rieurs m moire cran 11 3 RAM couleur VOIR LE TABLEAU AU DEBUT DU CHAPITRE On acc de au mode 7 par POKE 55265 PEEK 53265 OR 32 multicolore POKE 53270 PEEK 53270 OR 16 bitmap On sort du mode 7 par POKE 53265 PEEK 5326
225. banc 2 en 32768 Adresse cran 22768 gt A 0 Adresse cran dans le banc 2 du VIC II 0 Adresse g n rateur de caract res normal gt B 4 pour le VIC II 4096 POKE 55272 A B Les adresses utilisables en BASIC dans le banc 2 du VIC II vont de 32768 40960 soit 8 K Pour le VIC II 2 K sont occup s par le g n rateur de caract res qu il voit aux adresses 4096 6143 du bloc 2 Restent donc disponibles comme crans utilisables les quatre premiers et les deux derniers blocs de 1 K du banc 2 A 0 16 32 48 96 et 112 dans la formule ci dessus Attention la RAM COULEUR tant commune tous ces crans on ne peut passer sans probl me de l un l autre que si la RAM COULEUR est au pr alable noircie voir ci dessus Attention toutefois le BASIC n appr cie pas ce d placement d cran brutal car il utilise des pointeurs d cran que nous n avons pas modifi s lors de la manipulation ci dessus De plus l diteur d cran et donc les instructions PRINT ne fonctionnent pas si l cran est une adresse gale ou sup rieure 352768 Conservons donc l cran normal en 1024 pour le travail avec PRINT tandis que les zones dans le banc 2 peuvent servir de pages graphiques acc d es par POKE seulement Une seule instruction BASIC POKE est n cessaire pour changer l adresse de l cran Avec 6 crans possibles que l on peut commuter rapidement la porte est ouverte la r alisation d images
226. batif mais tr s complet Une explication un peu mais pas tr s plus claire de ce circuit est donn e dans le livre Programmer s reference guide de COMMODORE 169 LE LIVRE DU 64 LE CIA NMI Le second CIA occupe les adresses 0000 DDOF et ne g n re que des interruptions NMI Il y a donc deux sources d interruptions NMI dans le CBM 64 le CIA NMI et la touche RESTORE La fonction STOP RESTORE est obtenue gr ce un test de la touche STOP lors de la routine de gestion de l interruption NMI Ce test peut tre interdit voir le programme PROTECTEUR Cependant la routine NMI elle ne peut jamais tre interdite Or elle dure un certain temps Veillez donc ne jamais pousser sur la touche RESTORE seule pendant que le 64 r alise des fonctions dont les t amp ches doivent avoir des dur es tr s pr cises telles que les acc s la cassette ou au bus s rie IEEE les r sultats peuvent tre catastrophiques Les fonctions principales du CIA NMI sont la gestion du bus IEEE s rie celle de l RS232 le contr le du banc m moire pour le VIC II et le port utilisateur disponible sur le connecteur ar ri re droit du 64 La gestion de l RS 232 et de Il IEEE s rie sont tr s complexes Nous n analyserons pas leur fonctionnement ici car tout le n cessaire ce sujet est fait et bien fait par le KERNAL dont nous utiliserons ici d s lors les routines Par contre les adresses 56577 port B et 56579 direction du port B sont d u
227. chage par SYS 859 RESET lui d programme l horloge Avant un acc s cassette arr ter le r veil par SYS 995 et le relancer ensuite en rechargeant le programme et en n ex cutant que le SYS 839 L horloge n aura pas perdu une seconde 100 REM REVEIL MATIN POUR CBM 64 110 REM 120 REM 130 REM SYS839 REM RANIME L AFFICHAGE 140 REM SYS995 REM STOPPE L AFFICHAGE 150 REM POKE982 CL REM COULEUR HORLOGE 160 REN POUSSER F1 ARRETE LE REVEIL 180 REM 190 COSUB 2000 REM HORLOGE 200 GOSUB3000 REM RE VEIL MATIN 210 END 220 579 DATA173 013 220 041 004 240 003 141 7 DATA235 002 17 3 235 002 240 050 173 695 DATA 162 000 106 106 106 041 012 141 703 DATAO32 208 04 1 004 141 024 21 2 240 711 DATAOL7 162 006 SE 721 DATA208 241 173 735 DATA008 14 2 23 5 00 743 DATA198 076 049 234 000 O18 SE 022 751 DATAOO 5 009 012 732 8 REM CHECKSUM 7842 DE 679 753 252 839 DATA120 162 089 142 020 003 162 00 847 DATAL4 2 02 1 003 169 129 14 1 014 99 855 DATAO88 096 173 011 220 170 041 015 863 DATAO2 4 10 5 048 14 1 06 7 004 138 016 pr T 3 5 DU 06 429 ORA gt 903 DATA138 074 074 074 074 024 105 048 911 141 069 004 17 3 009 220 170 041 919 DATAOL5 105 048 141 073 004 138 074 927 DATAO7 4 07 4 07 4 02 4 105 048 14 1 072 935 004 173 008 220 105 048 141 075 943 DATAOO amp 169 032 14 1 06 5 004 14 1 076 951 DATAOO4 141
228. commande LOAD partir du p riph rique d entr e courant L adresse de d but de chargement doit tre en entr e en C5 et C6 partie basse partie haute Routine SAVE sur le p riph rique courant Cette routine effectue la commande SAVE sur cassette En entr e les registres X et Y pointent vers le tampon cassette partie basse dans X partie haute dans Y Cette routine envoie l cran le message SAVING nom de programme Cette routine incr mente l horloge TI d un soixanti me de seconde Dn peut utiliser cette routine pour tenir jour l horloge pendant les instants o les interruptions normales sont interdites ou bien l int rieur d une routine d interruption qui remplace totalement celle d origine Cette routine lit l heure dans le compteur TI la partie haute est en sortie dans le registre Y la partie moyenne dans le registre X et la partie basse dans le registre A Cette routine crit l heure en m moire dans le compteur TI en A0 A1 et A2 En entr e les trois registres contiennent la valeur crire sur trois octets et exprim e en soixanti mes de secon des L ordre des octets est identique celui de la routine ci dessus 81 LE LIVRE DU 64 JSR JSR JSR JSR JSR JSR JSR JSR JSR JSR JMP JSR F 72C F 82E 841 864 FB97 FCD1 CDB FCE2 FD15 FD30 82 Cette routine teste
229. compliqu e exemple FOR 0 TO 60 PRINT MID TI 4 2 NEXTI Il faut donc permettre au programmeur de voir ce qu il crit de corriger une faute ventuelle avant de transmettre la commande l interpr teur BASIC C est pourquoi l inter pr teur de commande fait appel 60 fois par seconde un pro gramme de lecture de clavier et parall lement un programme appel EDITEUR D ECRAN ces deux programmes font partie du KERNAL Le premier met en m moire dans le tampon de cla vier les caract res successivement frapp s au clavier le second les recopie dans l cran sauf les caract res dits d di tion qui lui sont destin s d placements de curseur inser tion effacement changements de couleurs etc dont il tient compte imm diatement pour donner au message en cours de frappe l aspect l cran d sir par le programmeur Un probl me se pose videmment comment transmettre l interpr teur BASIC les caract res sp ciaux de curseur codes couleur etc C est ici qu intervient un des l ments les plus d routants pour le d butant le mode GUILLEMETS En effet apr s avoir regu un nombre impair de fois le caract re l di teur d cran n interpr te pas pour son propre compte les carac teres sp ciaux mais les transmet directement sous forme d un caract re graphique l cran Le mode GUILLEMETS est galement activ apr s la frappe du caract re sp cial Inser tion Ensuite d
230. contraintes sur les couleurs du fond du bord etc Les LUTINS se programment de facon fort semblable l cran du CBM 64 Ils peuvent tre cr s en mode monochrome ou multico lore et poss dent leur propre zone de d finition de couleurs et de formes Le CBM 64 est capable d afficher en plus de son cran gra phique huit lutins simultan ment sans particuli re Mais en utilisant une technique semblable au mode mixte du 157 LE LIVRE DU 64 chapitre pr c dent il est possible de d finir 8 lutins par zone de l cran C est ce moment un programme d interruption qui modifie cycliquement les contenus des registres LUTINS En utilisant cette possibilit assez impressionnante le nombre de lutins pr sents l cran simultan ment peut atteindre 32 Les huit lutins sont num rot s de 0 7 et poss dent un ordre de priorit le lutin 0 est le plus important car il passe toujours devant les 7 autres Le lutin 1 passe toujours devant les lutins 2 7 mais est chaque fois masqu par le 0 s il passe devant lui La priorit de passage d un lutin devant ou derri re les points allum s de l cran est programmable Un lutin est d fini sur une grille de 24 points horizontaux sur 21 points verticaux 12 points horizontaux pour les lutins multicolores Chaque groupe de 8 points horizontaux se d finit par un octet Un lutin occupe donc 3x21 63 octets Chaque lutin occupe donc en m moire un bl
231. coop 24 route de la sapini re B 4960 LOUVEIGNE BELGIQUE D 1984 3827 2 P109 P122 P225 P226 P256 P277 P277 P286 erratas du livre du 64 ligne 6 2048 devient 1024 ligne 11 2270 devient 53270 ligne 52769 80 devient 91 ligne 00035 F250 devient 5 25 ligne 340 devient 340 IF C gt X 1 THEN S S 20 supprimer lignes 350 360 et 390 ligne 440 ESPACE devient RETURN ligne 20015 ajouter au bout GOTO 20017 ligne 20215 ajouter au bout GOTO 20217 ligne 1 du paragraphe 1 remplacer 27 par 40 Parution originale 1984 Errata 1987 Editeur Editions B C M s c ISBN 2 87111001 8 Auteur Benoit Michel www benoitmichel be benoit michel gmail com Comprendre le fonctionnement interne du COMMODORE 64 transformer le clavier en AZERTY accentu et le BASIC en francais utiliser diff rents modes graphiques en m me temps l cran raccorder un bouton de RESET ou une imprimante parall le utiliser les 7 modes graphiques en 256 couleurs programmer les lutins et transformer un programme en langage machine en BASIC D couvrez avec ce livre tout ce que vous n avez jamais r v de r aliser sur votre 64 LE LIVRE DU 64 Convient tous les possesseurs de CBM 64 ou SX 64 Tous les sujets sont abondamment comment s et accompagn s de tr s nombreux programmes d exemples en BASIC et en langage machine Vous y trouverez m me plusieurs programmes g n rateurs d images dont S V P un g
232. curseur en X Y voir ci dessous en mode graphique 2 LE MODE GRAPHIQUE NUMERO 2 Le mode 2 est le mode caract res programmables Le fonctionnement est identique au mode 1 ceci pr s que le dessin des caract res est programmable Le dessin est donc en m moire RAM Il faut comme en mode 1 r server une zone de 2 K cet 118 LE LIVRE DU 64 usage Plusieurs emplacements sont bien entendu possibles mais la meilleure des zones est le banc 3 du VIC c est dire les 16 K sup rieurs de la machine Nous avons vu que POKE permet d crire dans cette zone derri re la m moire ROM du KERNAL L instruction PEEK ne permettant pas de relire la RAM ces adresses on utilisera la fonction USR dans ce but 11 faut pour cela changer en m moire le programme USR PEEK Autre possibilit comme d crit plus haut on peut relever le bas de BASIC et placer le g n rateur en 2000 8192 Derni re solution placer le g n rateur de caract res en 3000 12288 et n employer que de courts programmes BASIC n utilisant pas plus de 10200 octets pour le texte et les variables N utiliser cette m thode que pour des essais car elle est peu s re Si on ne d sire pas reprogrammer le dessin de tous les caract res il est tr s simple de recopier le g n rateur d origine en tout ou en partie l adresse voulue voir COPIECARA en annexe Comme dans le mode l il ne faut pas oublier de noircir la totalit de 1 RAM COULEUR si on
233. d inter ruption reli e l entr e IRQ du 6510 Cette entr e d interrup tion pr vient le microprocesseur qu une t che l attend sur un p riph rique Toutefois l interruption IRQ est masquable c est dire qu on peut l inhiber par programme C est donc sur le CIA IRQ que sont connect es les entr es et les sortiees les moins vitales du syst me Il s agit en l occurence de la lecture sur 161 LE LIVRE DU 64 cassette de la lecture du clavier et des JOYSTICKS L entr e CIA que nous nommerons CIA NMI est comme son nom l indique connect l entr e NMI du microprocesseur L inter ruption NMI est non masquable et aucun programme ne peut donc l inhiber On lui a consacr les t amp ches les plus importantes Cette fois c est la connexion IEEE s rie qui est vis e La s lection de banc m moire du VIC II et la porte parall le USER S PORT y sont galement raccord es LE CIA IR Il occupe les adresses 0 00 DCOF 56320 56335 16 registres ont des fonctions bien pr cises que nous allons d crire l une apr s l autre LE DECODAGE DU CLAVIER Chaque touche du clavier est un interrupteur A l exception de la touche RESTORE chaque touche met en court circuit un fil vertical et un fil horizontal d une matrice de 8 sur 8 fils Les 8 fils verticaux colonne 0 colonne 7 sont connect s aux 8 sorties du PORT du CIA Les 8 fils horizontaux rang e 0 rang e 7 sont connect s aux 8 entr es du
234. daire ou FF si pas d adresse secondaire FFBD SETNAM FFCO FFC3 FFC6 CLOSE LE LIVRE DU 64 Appel par JSR SETLFS Cette routine tablit le nom d un fichier avant un OPEN SAVE ou LOAD En entr e l accumulateur A contient le nombre de caract res du nom le regis tre X la partie basse de l adresse du nom et le registre Y la partie haute Le lecteur de disquettes refuse les noms de plus de 16 caract res Le lecteur de cassette accepte les noms de programmes jusqu 255 caract res ce qui peut tre fort utile Cela permet en effet de sauver de petits programmes crits en langage machine dans un bloc d en t te sur cassette sans charger deprogrammeproprementdit Appel par JSR SETNAM Cette routine ouvre un fichier logique et doit etre pr c d e de SETNAM et SETLFS pour faire en langage machine la m me chose qu OPEN en BASIC L erreur ventuelle peut tre lue ensuite par JSR READST Par exemple OPEN 1 8 2 PROG S R peut tre remplac par OUVRE LDY gt NOMFIC ADRESSE HAUTE DU NOM LDX NOMFIC 3ADRESSE BASSE DU NUM LDA 08 LONGUEUR DU NOM JSR FFBD SETNAM LDA 01 NUMERO DE FICHIER LDY 02 ADRESSE SEECONDAIRE LDX 08 NUMERO DE PERIPHERIQUE JSR SETLFS 358 FFCO 3 OPEN RTS NOMFIC BYTE PROG S R NOM DU FICHIER Cette routine referme un fichier logique et peut tre suivie d un appel READST pour lire l erreur ventuelle Elle modifie les re
235. de 222 LE LIVRE DU 64 chaque caract re Pousser sur STOP pour conserver les caract res modifi s jusqu au prochain STOP RESTORE REM CARACTERES ITALIQUES POUR CBM 64 224 10 REM RECOPIE 64 CARACTERES DE ROM RAM 15 RAM 3276 8 RCM 5324 8 MAX 256 8 16 PRINT JE UN PETIT INSTANT S V P 20 POKE5633 K 56334 AND254 POKE 1 PREEK 1 AND251 30 SE RERAMH PEEK ROM T SN 40 POKEL PEEK 1 EECH Sen PEEK 56334 50 REM PROTEGE LE SOMMET DE M MOIRE EN 3 768 60 55 0 0 56 128 70 REM PROGRAMME L VIC II POUR LE BANC 2 80 POKE5657 6 197 0 REM ECRAN EN 34816 GEN CAR EN 32768 100 5327 2 32 110 REM DIT KERNAL OU EST L ECRAN 120 POKE648 34816 2560 FRINICHRS 147 130 PRINT ABCDEF JKLMNOPQRSTIT 135 PRINT C BAS CMS VW XYZ 140 PRINT C BAS Cus 1934 56 7 145 C BAS 4 CHR 34 150 PRINT C BAS C BAS gt Ww 160 FORJ 3276 8103276864 8STEP 170 FORI 4TO7 POKET J PEEK I 2 JAND255 180 NEXTI J 190 PRINT C BAS BASI BAS POUSSER SUR LA BARRE D ESPACE 200 PRINT M U STOP POUR CONSERVER LES CARACTERES CM 220 GE 220 210 PRINT INCHANGES 230 POKE 6576 199 53272 21 POKE 648 4 PRINT CLR 240 END 55555 SAVE GO ITALIQUES 8 READY JOYSTICK D monstration de la mani re d utiliser le JOYSTICK pour d placer le curseur dans l cran Le curseur laisse une trace derri re lui sauf
236. de ROM en RAM et effectue le basculement des interrupteurs n cessaires A titre d exemple nous allons corriger une erreur de l in terpr teur BASIC La commande PRINT ASC donne comme r sultat le message suivant ILLEGAL QUANTITY ERROR Dans tout autre BASIC la r ponse aurait t 0 Corrigeons cette erreur et pour cela rendons le BASIC modifiable en le recopiant en RAM avec COPIEROM ou par le programme BASIC sui vant qui est quivalent 10 FOR I 40960 TO 49151 20 POKEI PEEK I NEXT I REM IL Y EN A POUR UNE MINUTE Nous avons donc copi la ROM A000 en RAM 30 POKE 46991 5 REM AU LIEU DE 8 DANS LA ROM ORIGINALE Ceci corrige l interpr tation du mot BASIC ASC 40 POKE 1 54 Ceci met hors service la ROM BASIC et nous pouvons mainte nant essayer notre BASIC modifi Pour exp rimenter ce domaine il est conseiller de repren dre le programme COPIEROM d y ajouter les POKE de correction et de les sauver sur cassette ou sur disquette avant d essayer la modification Le risque de ne pas r cup rer un ordinateur en bon tat de fonctionnement est lev 10 LE LIVRE DU 64 11 faut alors couper l alimentation ou pousser sur le bouton de RESET installez le vite si ce n est pas encore fait pour r cup rer la situation Le programme tant m me dans ce cas souvent perdu on comprend tout de suite l avantage de l avoir sauvegard avant de l essayer Une zone int ressante exp rimenter est
237. de la ligne couleur est en F3 et F4 Il convient d utiliser cette routine avant celle en E9D2 ROUTINE D INTERRUPTION IRQ NORMALE Elle s occupe du balayage de clavier de 1 gestion de l horloge du clignotement de ISR EA87 EB 79 EB81 bEBC2 ECO3 78 JMP 6 8 ECB9 LE LIVRE DU 64 curseur et de la mise en marche ou de l arr t du moteur de cassette en fonction de l enfoncement des interrupteurs du lecteur de cassettes Routine de balayage du clavier 5i une touche est valablement enfonc e le code ASCII de la touche est rang dans le tampon de clavier Le nombre de caract res pr sents dans le tampon est mis jour en C6 La taille maximale du tampon est rang e 0289 et si elle est d pass e le tampon est vid et son remplissage recommence Si le KERNAL a t recopi en RAM le pointeur vers la table de d codage peut tre modifi voir la table ci dessous EB79 11 est galement possible de modifier soit les valeurs dans cette table soit le contenu des tables directement On trouvera en annexe dans le programme AZERTY un exemple modification du d codage clavier qui adapte celui ci aux accents du fran ais Table des adresses des quatre tables de d codage correspondant aux 4 couches du clavier normal avec SHIFT avec LOGO et avec CTRL enfonc s En 79 valeur En EB7B valeur EB7D valeur En EB7F valeur 81 Clavier normal
238. des bit s correspondant chaque forme d onde dans le registre de contr le de chaque voix Comme on le verra plus loin on d marre une note en crivant une valeur appel e DEBUT ou DEI dans le registre de contr le arr te la note en crivant la valeur ARRET ou AR dans le registre de con tr le Pour une forme d onde donn e DE et AR ont des valeurs pr cises 32 65 64 riangle 55 128 dents de scie rectangle bruit Les formes d ondes ne sont pas additives mais si plusieurs sont s lectionn es la forme r sultant de l enveloppe est un ET logique des diverses formes choisies Les seules configurations de ce type qui sont int ressantes ne font pas appel la forme 151 LE LIVRE DU 64 d onde bruit car dans cas le S I D peut tomber dans un mode ind fini dont il ne peut sortir que gr ce un RESET portion riangle portion ds dent de scie Pour ces deux formes d onde la portion de triangle ou de dents de scie les registres de largeur d impulsion ont une importance fondamentale Les largeurs d impulsion doivent tre comprises entre 0 8 approximativement pour que les 2 formes d onde ci dessus soient utilisables Les sonorit s ainsi obtenues sont assez plaisantes genre banjo mais le volume sonore est plus faible qu avec les 4 formes d ondes simples Il est noter que ces deux derni res formes d ondes ne sont pas document es par COMMODORE Nous avons
239. e Les op rations math matiques alg briques logiques et trigonom triques sont toutes effectu es en notation flottante c est dire que les variables sont toujours converties dans le CBM 64 dans un format standard se rapprochant de ce que l on nomme g n ralement la NOTATION SCIENTIFIQUE Un nombre est ainsi cod sur 5 octets qui repr sentent une valeur comprise entre 1 et 1 la MANTISSE et un octet qui repr sente la partie exponentielle l EXPOSANT Le bit de poids fort de la mantisse repr sente le signe de la mantisse lzn gatif D positif La mantisse est en notation compl ment 2 La valeur de l exposant est gale la puis sance de 2 par laquelle il faut multiplier la mantisse Dans l exposant le bit 7 repr sente le signe Il vaut 1 pour un nombre n gatif et D pour un nombre positif 80 repr sente donc l exposant nul qui est la marque d un nombre nul De nombreux exemples sont repris dans la description d taill e en fin de chapitre Comment d coder un nombre en format flottant Tout d abord l exposant d duire 81 de sa valeur obtient la puissance de 2 comprise d s lors entre 126 et 129 129 5 lt 126 La mantisse tant binaire et normalis e sur 32 bits est comprise en valeur absolue entre 1 et 2 1 lt M lt 2 La valeur du bit 51 repr sente le signe Les valeurs d ci males fractionnaires de chaque bit sont reprises au tableau ci apr s 25 LE LIVRE DU CBM 64 Oct
240. e Cette routine teste la pr sence d une virgule dans le corps du texte BASIC puis acquiert une valeur num rique enti re sur un octet En sortie le r sultat est dans le registre X du 6510 Cette importante routine sert acqu rir un caract re dans le corps du texte BASIC par appel CHRGOT L accumulateur A et les flags sont affect s de fa on correcte pour les routines de l interpr teur BASIC Elle est n cessaire avant l appel d un grand nombre de routines du BASIC Si le caract re lu dans le texte est un 00 de fin de ligne BASIC la routine ex cute deux instructions PLA pour enlever l adresse de retour de la pile et retourner directement l interpr teur BASIC Cette routine prends le caract re suivant dans le texte BASIC apr s avoir test la pr sence d une virgule la virgule n est pas pr sente le message SYNTAX ERROR sera affich e et le retour se fera l interpr teur BASIC Cette routine ex cute la fonction COS en ajoutant 0 5 PI la valeur pr sente dans l accumulateur flottant principal puis en effectuant la fonction SIN Cette routine calcule la fonction SIN de la valeur contenue dans l accumulateur flottant principal Elle utilise la m thode du d veloppement en s rie polynomiale d crite en E059 Cette routine calcule la fonction TAN avec la valeur contenue dans 1 accumulateur flottant principal en appellant successivement les routines SIN puis COS et enfin division Elle utilise
241. e COMMODORE recommande l emploi d une petite routine en langage machine On trouvera une version de cette routine dans le programme POIGNEES en annexe Ce programme interdit les interruptions puis cr e le petit d lai n cessaire une lecture stable des entr es POT X et POT Y Apr s commutation vers le deuxi me jeu d entr es le processus se r p te et les r sultats sont rang s en m moire pour tre lus par PEEK de fa on tout fait classique 160 LE LIVRE DU 64 CHAPITRE 6 LES ENTREES SORTIES PARALLELES Le CBM 64 poss de deux circuits 6526 aussi appel s CIA Com plex Interface Adapter qui r alisent eux deux toutes les fonctions d entr es sorties l exception du son et de l image Un CIA est en fait un interface entre le microprocesseur et une s rie de fils lectriques qui entrent ou sortent du syst me Il peut imposer un tat 0 Volt ou un tat 5 Volts 0 ou 1 sur chacun de ces fils ou encore lire l tat d un fil dont la tension est impos e par un circuit ext rieur Chaque CIA contient de plus une circuiterie complexe consti tu e d une horloge dite temps r el de deux compteurs et d un registre d calage les CIA peuvent galement g n rer des inter ruptions pour signaler au microprocesseur qu une t che d entr e sortie urgente est requise Les deux circuits CIA sont identiques mais ils sont connect s diff remment au microprocesseur Le CIA no 1 que nous appelerons CIA IRQ a sa sortie
242. e de lt curseur droite gt n cessaire pour que le caract re suivant soit en position X dans la ligne d impression X doit tre compris entre 0 et 255 mais BASIC ne tient compte que de X modulo 40 c est dire le reste de la division enti re de X par 40 Apr s avoir ainsi ramen la valeur entre 0 et 59 TAB fait avancer la position d impression cet endroit si c est possible en avan ant vers la droite Sinon TAB passe la ligne cran suivante puis avance ensuite du nombre de caract res demand Exemple PRINT SPC 15 PRINT TAB 15 La commande CMD d finit quel est le p riph rique de sortie par d faut Au d marrage de l interpr teur BASIC l quivalent de CMD3 est ex cut c est dire que par d faut le canal de sortie envoie les caract res l cran Pour modifier la routine de sortie CHROUT et lui donner comme sortie un autre p riph rique il faut 1 ouvrir un fichier d clarant ce p riph rique avec OPEN X 2 attribuer CHROUT le p riph rique de ce fichier avec CMD X Exemple lister sur l imprimante OPEN1 4 CMDI LIST Exemple lister sur un fichier disque OPEN 1 8 1 O LISTING SEQ WRITE CMD 1 LIST Pour r tablir le p riph rique par d faut comme tant 48 LE LIVRE DU CDN 64 l cran il faut 1 Vider le tampon de sortie par PRINTEX 2 Refermer le fichier concern par CLOSE X Si ce n est pas ex cut l cran ne fonctionne pas co
243. e DATA La somme de v rification de la zone est galement calcul e En fin de programme les lignes de DATA sont pr sentes l cran En poussant quelquefois RETURN les lignes sont entr es en m moire Il suffit ensuite de taper 1 RETURN 2 RETURN 3 lt RETURN gt 4 RETURN 5 lt RETURN gt 6 RETURN 555555 RETURN pour effacer les lignes du DATAMAKER et ne conserver en m moire que les lignes g n r es 196 LE LIVRE DU 64 0 INPUT NOIR CLR JDEBUT FIN D F PRINT BAS C BAS 1 GE INT I DATA FORJ OT06 2 GOSUB S NE XJ GOSUB 3 RINT NEXTI END AS area S PER PE EEN A LEN AS 1 CS CS PEEK IHJ 2 it ZA 3 PRINTA 5 E PRINT RINTIH REM C YAN CHECKSUM CS DE D A F CM END 6 RETURN 55555 SAVE GO DATAMAKER 8 READY DATA SUR DISQUE Ce programme BASIC est un g n rateur de programmes Il saisit un programme enregistr sur disque et le transforme en un nouveau programme BASIC qui contient sous forme de DATA la suite des octets du programme lu Ce programme est utiliser pour transformer un programme en langage machine en m moire haute en un chargeur BASIC On pourra ventuellement reprendre ces lignes dans un programme BASIC qui utilise la routine en ques tion Apr s r ponse la question nom de programme lire un nouveau programme est g n r qui porte le m me nom suivi de D Une premi re
244. e d interruption lui m me D crivons la logique du programme Celui ci se s pare en deux un morceau initialise la proc dure d interruption l autre est la routine d interruption proprement dite MODES MIXTES Premi re partie le d marrage l L instruction SEI est employ e pour interdire les interruptions pendant le cours de la routine 2 Autoriser l interruption de balayage en mettant 1 le bit 0 du registre 001 3 Modifier le vecteur d interruption c est dire indiquer au microprocesseur o se trouve la routine ex cuter lors d une interruption L adresse de la routine ci dessous doit donc tre plac e en 314 315 soit 788 et 789 en d cimal Cette adresse est au format habituel c est dire partie basse en 788 et partie haute en 789 4 interdire les interruptions clavier crivant 127 56333 DCOD 9 5 R autoriser les interruptions et c est tout Seconde partie l interruption l allumage de 1 machine il existe d j une routine d interruption qui avance l horloge TI et qui lit le clavier Cette interruption est provoqu e par une minuterie Nous avons interdit cette interruption au point 4 ci dessus Notre programme se terminera donc par un saut la routine d interruption clavier horloge si la minuterie a termin son d comptage Pour obtenir deux modes diff rents en simultan l cran il faut bien deux modifications de la programmation du VIC II chaque balayage d
245. e entre ces deux mais celui en deux mots occupe dans la m moire deux octets de plus au moins que la version simple Cela d pend du nombre de blancs entre GO et TO RUN effectue le branchement inconditionnel comme GOTO mais apr s avoir r alis CLR La diff rence est tr s marqu e car toutes les variables et tous les tableaux sont remis z ro par RUN RUN 30 est quivalent CLR GOTO 50 De plus RUN referme tous les fichiers ouverts En mode direct on frappe usuellement RUN pour ex cuter un programme mais parfois GOTO en mode direct peut s av rer fort utile entre autres pour la mise au point des programmes SYS est une instruction de branchement inconditionnel vers un sous programme crit en langage machine En fin de sous programme l interpr teur BASIC red marre et passe l in struction suivante L adresse d ex cution de l interpr teur 37 LE LIVRE DU CBM 64 BASIC ne doit donc pas tre perdue Cette adresse est sauv e dans la PILE d o elle est r cup r e par l instruction RTS La pile est la zone m moire de 256 octets qui commence en 511 1FF et d cro t jusque 256 100 au maximum Cette zone est r serv e au stockage de valeurs temporaires gr ce un pointeur indiquant l adresse du premier octet libre dans la pile Ce pointeur est c bl l int rieur du 6510 lui m me c est le registre SP La pile est mise jour en respectant le principe LIFO LAST IN FIRST OUT c est dir
246. e figure Ce num ro sera repris en bas du dessin sur l imprimante 3 REM TRAITEMENT D IMAGES EN RIS CARACTERES GRAPHIQUES COMMODORE REM 10 0 1000 15 REM kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk RECOPIE D ECRAN 16 PT A V 0 P2 INT PT 256 PL PT P2 256 17 POKE 190 Pl POKE 191 P2 1528928 SYS 29184 18 5 PEEK 29000 POKEA 6 PEEK 29001 20 REM R ARKKERKRRR ERREAAR RRER REEERR AFFICHE X Y CURSEUR 2 C1 2x U C2 INT C1 10 POKE1059 17642 22 2 10 2 POKE 1060 176 23 Cl YHV C2 INT C1 10 POKE 106 2 176 4C2 24 C2 C1 10 C2 P KE 1063 1761C2 25 REM kkkkkkkk4ktkkkkkkkkk LIT LE CARACTERE SOUS CURSEUR 26 1024 40 POKE 542724 0 27 POKEP Z Z 4R GETAS IFA lt gt 31 29 POKEP B G TAS IFAS GOTO 27 REM LECTURE DU CLAVIER 30 POKE P Z Z R 31 Ach SCT AS 32 TF D A 0 et R B A 0070400 40 07050 51 52 53 54 55 56 60 70 720 730 42 OND 4c 116010 70 150 760 3000 4000 5000 2000 2500 6000 V GOTO10 REM HOME 53 XX 0 YY 1 Z 3 GOTO400 REM CRSR HAUT 54 XX 1 YY 0 Z 2 GOTO400 REM CRSR DROTTE 211 LE LIVRE DU 64 55 XX 1 YY 0 Z 1 G0T0400 REM CRSR GAUCHE 56 X 1 U 0 Y Y 1 YY 0 XX 71 272 R 0 57 IFY224THENY 2 4 IF V 1 STHENV 15 58 GOTO 420 REM RETURN 60 R 128 GOTO420 REM RVS 70 R 0 010420 REM OFF 399 REM k kkkkkkkkkkkkkkkkkkkkkikkkkkkkkk
247. e l cran une au d but de chacune des deux zones La routine d interruption doit donc l programmer l cran pour l un ou l autre mode 2 reprogrammer l interruption de balayage pour repasser au premier mode l interruption suivante 154 LE LIVRE DU 64 3 si n cessaire effectuer la routine clavier Notre exemple s pare l cran en deux zones la sup rieure en haute r solution l inf rieure en mode texte Les param tres des deux modes sont d finis dans 1 table en fin de programme Un POKE ces valeurs modifie instantan ment les r glages de l cran Il est bien entendu possible de repasser au mode texte normal par STOP RESTORE Pour sortir du mode mixte dans un programme employez le petit programme suivant en langage machine EFFACE SEI speut se mettre n importe o JSR FD15 ren m moire JSR FDA3 JMP 518 ou encore 10 DATA 120 32 21 253 32 163 253 76 24 229 20 REM CHECKSUM 1203 30 FOR I 49458 TO 49467 READA POKE I A NEXT 40 SYS 49458 INHIBER LES ERREURS DE SYNCHRONISATION Lorsque l on modifie un registre du VIC II comme couleur de fond ou couleur de bord on observe souvent un d crochage ind sirable de l image L id al consiste attendre la fin du balayage de l cran pour effectuer le POKE L effet est ainsi bien plus beau De plus l cran semble ainsi changer de couleur instantan ment sans que l on apergoive un cran bicolore pendant une fraction de seconde Ce
248. e m me tr s rapide n tant cependant pas instantan on constate parfois des bizarreries sur la ligne o le changement de mode se produit Comment d terminer quand doit se produire la commutation Heureusement le VIC II a tout pr vu il existe une possibilit de le programmer pour qu il pr vienne cela s appelle une interruption le microprocesseur 6510 que la bonne ligne d cran est en cours d criture Cette possibilit est li e au registre d autorisation d interruption du VIC II Le registre de balayage a en fait deux fonctions si on le lit on peut voir quelle ligne de balayage on est arriv et si on y crit une valeur le VIC II g n rera une interruption de balayage au moment o la ligne portant ce num ro sera atteinte Bien entendu il conviendra au pr alable d autoriser cette interruption gr ce au registre d autorisation d interruption 53274 D01A et en crivant un programme de gestion de cette interruption Nous nous proposons d crire ici un programme d interruption que nous logerons l abri du BASIC en C000 Nous avons besoin de deux zones de m moire diff rentes pour loger nos deux images de modes diff rents ici ce sera le mode texte normal et le 153 LE LIVRE DU 64 mode haute r solution multicolore Le param tre variable de ce programme est le num ro de ligne o se passe la commutation Ce param tre peut tre modifi par POKE l adresse appropri e dans le corps du programm
249. e pointeur de pile 01FF supprime le mode d cimal et interdit les interruptions Tout de suite apr s le KERNAL teste la pr sence en 8000 d une ROM sp ciale dite d marrage automatique AUTO START Cette ROM si elle est pr sente doit contenir pour que le KERNAL lui passe le contr le du 64 la suite de caract res C3 2 SCD 38 30 80 en ASCII avec les lettres et M ayant le bit 7 1 l adresse 8004 Si ce n est pas le cas le KERNAL initialise tous les vecteurs et pointeurs en RAM r autorise les interruptions puis effectue un JMP indirect en A000 pour initialiser l in terpr teur BASIC ce que l on peut toujours faire la main en ex cutant le code JSR FCFF ou 5 5 64767 Pour red marrer un 59 LE LIVRE DU 64 programme AUTO START dont l effet a t ainsi annul effecuez un JSR ou SYS 64748 qui contient le code JMP 8000 On peut annuler l effet d une ROM d marrage automatique en r tablissant les pointeurs comme lors d un d marage normal Voir le programme SIBOFF qui met hors service la ROM SIMON S BASIC Ceci n est bien entendu possible que si l on a encore la possibi lit de programmer le CBM 64 Par exemple avec les jeux en cartouche ce n est pas possible et il faut bien alors teindre l ordinateur et retirer la cartouche Les ROM AUTO START contiennent en 8000 et 8001 l adresse du d but de programme COLD START Les adresses 8002 et 8003 contiennen
250. e que le premier entr est le dernier sorti Cette structure de m moire bien connue des possesseurs de calculatrices HEWLETT PACKARD est particuli rement efficace pour la gestion des sous programmes De tr s nombreux sous programmes langage machine tr s utiles sont pr sents dans les ROM du CBM 64 Mais ils n ces sitent quasi toujours la transmission de param tres dans les registres A X et Y du 6510 C est pourquoi l interpr teur BASIC apr s avoir valu l expression derri re SYS les parenth ses ne sont pas obligatoires charge les registres A Xet Y avec le contenu des adresses 780 781 et 782 L octet de STATUS du 6510 peut galement tre charg contenu en 783 Ces adresses 050C 030F peuvent tre charg es en BASIC par des POKE avant d ex cuter le SYS Apr s le SYS BASIC peut relire les valeurs contenues dans A X Y et le STATUS drapeaux du 6510 au moment du RTS qui rend le contr le au BASIC par PEEK 780 PEEK 783 D taillons ici un point souvent rest OBSCUR DRAPEAUX DU 6510 VALEUR 128 16 4 1 DU BIT 64 8 2 Pour positionner drapeau 1 mettre la valeur cor respondante dans 1 variable qui sera pos e en 783 Exemple pour positionner les drapeaux N et C 1 et les autres 0 FL 128 1 POKE 783 FL ou POKE 783 128 OR 1 Pour appeler sous programme en langage machine avec transmission d un param tre en notation flottante il faut em ployer la fonction USR e
251. e totale de dur es parfois tr s br ves est bien plus vidente en langage machine qu en BASIC souvent trop lent Ici les langages tels FORTH ou BASIC COMPILE prennent d autant plus d int r t Voir en annexe le programme ENVELOPPES LES BALAYAGES DE PHASE Si nous g n rons des sons avec une forme d onde rectangu laire nous disposons d un param tre r glable suppl mentaire la largeur d impulsion Cette largeur est variable de 0 4096 0 et 4096 correspondent la largeur d impulsions de 0 et 100 Donc aucun son n est produit En ne modifiant que la valeur PH du registre 3 de la voix concern e on dispose de 16 valeurs dif f rentes de 0 15 Mettons la valeur 128 dans le registre 2 PL Les largeurs d impulsion correspondant a PH 0 et PH 15 sont donc i PH 0 P 0 256 128 128 impulsion 3 PH 15 P 15 256 128 5968 impulsion 97 Or on constate que ces deux impulsions sont le contraire l une de l autre C est dire qu elles ont des sonorit s identi ques mais d phas es de 180 degr s l une par rapport l autre En faisant varier rapidement la phase on obtient un signal tr s riche en harmoniques diverses Une variation al atoire de la largeur d impulsion donne galement des effets int resants Par exemple des sonorit s qui rappellent la balalaika On trouvera comme exemple en annexe le programme BALAYAGE LE TREMOLO Des effets de tr molo sont obtenus en faisant varier
252. econdaires et le num ro logique d un fichier Pour le mode d emploi de cette routine voir la routine SAVE Le nom de SETLFS vient de SET mettre L logical filename F first address S secondary address Les num ros de fichiers logiques sont compris en ASSEMBLEUR comme en BASIC entre 0 et 255 On ne peut avoir que 10 fichiers ouverts la fois Les num ros de p ri ph riques les plus courants se retrouvent au tab leau ci desous N P riph D signation CLAVIER lecture seulement CASSETTE Interdit sur le SX 64 RS 232 lecture et criture ECRAN lecture et criture IMPRIMANTE criture seulement 2 me IMPRIMANTE idem LECTEUR DE DISQUES lect et crit 2 me LECTEUR DE DISQUES MODEM TELEPHONIQUE lect et crit 0 1 2 3 A 5 8 9 1 1 kal N de p riph rique maximum Le num ro de p riph rique IEEE est toujours compris entre 4 et 31 car les num ros 0 3 sont r serv s aux acc s internes au CBM 64 Pour LOAD et SAVE l adresse secondaire 1 indique que le mouvement doit se faire avec les adresses r elles format ABSOLU Dans les autres cas le chargement se produira toujours en d but de zone BASIC l adresse 0800 ou 2048 format RELOCATABLE Pour l imprimante l adresse secondaire permet l acc s aux fonctions sp ciales En entr e l accumulateur A contient le num ro de fichier logique le registre X le num ro de p riph rique et le registre Y l adresse secon
253. en entendu possible d utiliser des extensions logicielles graphiques comme SIMON S BASIC etc ce moment le choix de la configuration n est plus possible mais impos par les programmes graphiques Avec les modes BITMAP nous utiliserons souvent le banc 5 qui est enti rement cach comme on l a vu en dessous des ROM du BASIC et du KERNAL Pour crire dans cette zone de la m moire l instruction POKE fonctionne sans probl me Par contre pour relire un point de l cran PEEK ne rend que le contenu de la ROM et non de notre m moire graphique se contourne gr ce l instruction USR du BASIC Cette instruction est programmable Nous programmerons donc USR pour qu il effectue le PEEK GRAPHIQUE ou PEEK RAM Les programmes graphiques dans le banc 3 utiliseront donc simplement USR 62000 au lieu de 62000 pour lire le contenu de la m moire RAM voir en annexe le programme USR PEEK 105 LE LIVRE DU 64 LES MODES GRAPHIQUES On peut utiliser dans le CBM 64 sept modes graphiques diff rents Nous les rep rerons par leur num ro bien que l on puisse y faire r f rence par famille galement Le tableau ci dessous r sume les d finitions des 7 modes et l appartenance de ceux ci aux diverses familles graphiques Famille de modes graphiques aract res couleur multi BITMAP tendueicolore X aract res standard H Caract res programmables Caract res programmables H multicolores Caract
254. en plus simple en crivant en travers Ne vous attendez toutefois pas une vitesse d impression extraordinaire Le BASIC de IMPRIME HR a besoin d un bon quart d heure pour venir bout des 64000 points qu il doit calculer et imprimer LE LECTEUR DE CASSETTES C2 N Ce p riph rique est le premier avoir t mis en service par COMMODORE sur les premiers PET et depuis sa fiabilit ne s est pas d mentie Ses commandes principales sont comme vous le savez s rement SAVE PROG LOAD PROG VERIFY PROG qui n appellent gu re de commentaires Mais certains usages m connus de la C2 N sont parfois bien utiles Si on sauve un programme en langage machine par SAVE PROG 1 1 lors de chaque LOAD de ce programme la zone charg e aura tooujours quoique l on fasse le m me emplacement en m moire que lors du SAVE Si par contre la zone a t sauv e par 174 LE LIVRE DU 64 un simple SAVE PROG 1 ou SAVE PROG la zone ne sera recharg e son adresse de d part que par LOAD PROG 1 1 Ce rechargement une adresse pr cise est possible parce que le bloc d en t te du programme contient outre le nom du program me son adresse de chargement En fait le bloc d en t te contient octet adresse secondaire utilis e lors du SAVE octets adresse de d but octets adresse de fin octets le nom du programme 32 N N n le nombre d octets du nom est limit 16 par l interpr teur BASIC lors de l analyse du mot
255. enfonc PEEK 197 60 164 LE LIVRE DU 64 SIA NMI bus s rie IEEE RS232 s lection entr es sorties sortielsort i DATA DATA jJCLOCK JDATA po utilisateur pu MINUTERIE REGISTRE A DECALAGE RS232 d cal controle minuterie hertz DDOF eee es minuterie Les ports A et B ont galement une autre fonction la lecture des JOYSTICKS Chaque JOYSTICK est constitu de 5 interrupteurs qui imposent une valeur D ou 1 sur certains fils d entr e du CIA IRQ Voir le tableau des connexions la page suivante 165 LE LIVRE DU 64 no de broche JOY B 1 DROITE GAUCHE POT Y BOUTON 5Volt Masse POT X MO CO EON un E ka Le port A tant normalement en entr e il suffit de Lire l tat des bits 0 4 de l adresse 56320 par JOYSTICK A CONTROL PORT 2 PRINT PEEK 56520 AND 31 La lecture au repos est de 51 Chaque fois qu un interrup teur du JOYSTICK est ferm lors de la lecture on obtient une valeur moindre car le bit correspondant vaut 0 et non plus 1 Par exemple on peut tester le bouton de tir par PRINT PEEK 56520 AND 16 Nous avons vu que le d codage du clavier programmait le port en sortie Or nous l utiliserons en entr e 11 n y en fait pas de contradiction car le clavier est lu par une routine d interruption qui lorsqu elle n est pas active remet la direc tion du port A en entr e De m me
256. ent Mais pour aller plus avant dans le fonctionnement de l in terpr teur il est n cessaire de bien comprendre la mani re dont les variables BASIC sont rang es en m moire L interpr teur BASIC exige un espace m moire RAM d un seul tenant Le programme lui m me pourrait tre en m moire morte mais il doit tre suivi de l espace des variables qui se modifie et impose donc l usage de m moires vives Le tableau de la page suivante d taille l usage que fait BASIC de cette zone de m moire RAM qui lui est accessible Les adresses situ es gauche du tableau sont celles des pointeurs en page 0 o sont sauv es et mises jour en permanence les adresses de d but de chacune des zones de m moire Les 1 ches indiquent le sens d volution des d buts de zones pendant l ex cution d un programme 28 LE LIVRE DU CBM 64 DETAILS DE L USAGE DE LA MEMOIRE VIVE PAR BASIC Pointeur en RAM ESPACE DES ADRESSES Usage 5 SOMMET MEMOIRE RAM 35 36 et 37 38 000 40960 53 54 55 56 cha nes de caract res 933 434 EE gt 51 52 zone inutilis e 51 52 gt 49 50 tableaux 2F 30 gt 47 48 variables 2D 2E gt 45 46 programme 2B 2C gt 0801 2049 BAS DE MEMOIRE RAM 43 44 Le d tail de la zone programme a t tudi ci dessus Etu dions maintenant la zone VARIABLES La zone variables peut contenir quat
257. ents contenus dans un fichier Les commandes PRINT et PRINT effectuent l op ration inverse de INPUT envoyer des nombres ou des cha nes de caract res vers un p riph rique de sortie PRINT est destin au p riph rique de sortie par d faut il s agit normalement de l cran mais CMD peut en d cider autrement PRINT convertit donc tout ce qu il doit imprimer en caract res et les envoie sur le canal de sortie routine CHROUT en FFD2 PRINTE fait m me quelques nuances pr s le num ro de fichier pr cis dans l ordre PRINT est utilis pour affecter le canal de sortie CHROUT au p riph rique d fini lors de l OPEN du fichier en question A la fin de l instruction le canal de sortie est r attribu au p riph rique par d faut normalement l cran Il faut bien noter la diff rence entre cette commuta tion du canal de sortie et l instruction CLOSE CLOSE enl ve les caract ristiques d un fichier de la table des fichiers ouverts en 601 tandis que la commutation du canal de sortie ne modifie pas cette table mais d finit uniquement quel est l actuel p riph rique de sortie L instruction PRINT envoie sur le canal de sortie la suite de caract res d crite dans l argument de l instruction Cet argument s appelle une LISTE Une LISTE est constitu e de plusieurs l ments l les expressions 2 la ponctuation 5 les fonctions de liste Les expressions sont des expressions BASIC valuables par 1 routine E
258. es auxiliaires on peut donc modifier la fois par un seul tous les PIXELS de l cran qui ont cette couleur Par exemple on programme les trois couleurs de fond NOIR on trace le dessin d sir puis en deux coups de POKE appara ssent les deux autres couleurs L effet peut tre saisissant Un exemple de programme en mode 3 se trouve repris en annexe DESSIN MULTI MOY On y retrouve toutes les commutations n cessaires banc m moire du VIC II adresse cran adresse g n rateur de carac t res protection du sommet de la m moire copie en RAM du g n rateur de caract res Si on d sire employer PRINT ce qui est bien naturel il est indispensable d effectuer un effacement d cran par PRINT CHR 147 apr s avoir chang l adresse de l cran pour que le KERNAL recalcule les valeurs correctes des pointeurs adresses de chaque ligne de l cran Le num ro de page de l cran adresse cran 256 doit aussi tre communiqu au KERNAL Cette valeur sera crite en 648 122 LE LIVRE DU 64 LE MODE GRAPHIQUE NUMERO A Le mode 4 est aussi appel mode caract re tendu C est nouveau une variante du mode 1 o le nombre de caract res accessibles est r duit en contre partie d une plus grande soup lesse d utilisation des couleurs En effet la couleur de fond est programmable par caract re et non plus commune tout l cran Par exemple on peut crire un mot bleu sur fond blanc dans un cran jaune
259. es il est quasiment imp ratif de les d cla rer en d but de programme pour acc l rer l ex cution des bouc les Les indices de boucles classiquement utilis s sont I J3 K le plus souvent Un programme BASIC optimis commencera donc par 2 0 K 0 DIM Si vous comptez utiliser des boucles imbriqu es d clarez 40 LE LIVRE DU CBM 64 en premier lieu l indice des boucles les plus int rieures La syntaxe g n rale est FOR var limite inf TO limite sup STEP inc sn NEXT var var La variable indice de boucle doit tre flottante mais les valeurs limite peuvent tre quelconques de m me que l in cr ment Essayez 10 FOR I 0 0 0 1 STEP 0 05 20 PRINT I 30 NEXT I On obtient sur l cran les valeurs 5E 05 01 015 e 08 0850000001 Cette derni re valeur provient d erreurs d arrondi Il faut donc faire attention ne pas tester la variable par des galit s mais seulement par des in galit s Ne pas crire IF I 0 85 THEN mais crire IF 1 gt 0 85 THEN pour viter les probl mes d s ces erreurs d arrondi Les valeurs de d but de boucle de fin de boucle et d in cr ment sont valu es comme expressions puis rang es dans la pile par l instruction FOR T0 STEP puis le contr le passe l instruction BASIC suivante L instruction NEXT recherche le bloc FOR dans la pile puis ajoute l incr ment la variable indice et enfin
260. es 256 couleurs possibles sont visibles dans un encadr d mon stratif Ensuite l cran de travail apparait Le joystick doit tre connect au port2 les poign es au portl ou une souris ou une tablette graphique La main curseur sert au trac Appuyer sur le bouton de tir d pose un caract re ou choisit une option Les caract res viennent des 5 lignes inf rieures D crivons les La rang e sup rieure contient 4 gros pots de peinture et 16 petits Ces derniers s lectionnent la couleur de trac Les 4 gros pots fixent la couleur de fond des caract res mode tendu Le blanc invariable et 3 de couleurs programmables Pour chan 261 LE LIVRE DU 64 ger la couleur d un gros pot prendre la couleur d un petit et la d poser sur le goulot du gros pot programmer La s lection de la couleur de fond s effectue en mettant l index de la main sur le corps d un des gros pots La couleur du bord donne tout moment la couleur de fond en cours Les caract res peuvent tre pris dans les lignes inf rieures La poubelle sert effacer le dessin Le graphisme feuille de papier donne acc s aux options entr e sortie Le graphisme imprimante donne acc s la d cran sur imprimante 1526 ou MPS 801 802 Les graphismes cassette sup rieure SAVE et cassette inf rieure LOAD donnent acc s la sauvegarde sur cassette ou disquette au chaix Le graphisme
261. es principales A partir de l chaque routine du KERNAL fait un petit d tour en m moire RAM chaque ex cution Mais ces vecteurs tant en m moire RAM sont donc modifiables volont C est ainsi que le programme PRINTER intercepte les vec teurs CLOSE OPEN et CHROUT pour d vier la sortie normale de caract res vers une imprimante non pr vue par le syst me Les routines d interruptions sont au nombre de trois IRQ BRK et NMI Ce sont de petits programmes tr s courts qui s ex cu tent p riodiquement lorsque surviennent certains v nements pr cis IRQ s ex cute 60 fois par seconde et s occupe du clavier de l horloge et du moteur de la cassette BRK ne survient que si le microprocesseur ex cute l instruction 00 appell e aussi BREAK Elle a pour r le d effacer l cran et de remettre en service les pages m moire les modes graphiques et sonores dans l tat o ils sont quand on allume la machine NMI est une routine qui r agit le plus souvent comme BRK c est le cas quand on enfonce les touches STOP et RESTORE simul tan ment Mais c est aussi NMI qui s occupe de la gestion des p riph riques s rie IEEE RS232 et CASSETTE La modification de ces routines est bien s r la cl des programmes comme ARROW par exemple ARROW est une cartouche ROM qui fait fonctionner la cassette une vitesse sept fois sup rieure la normale ajoute de nombreueses fonctions au BASIC etc La routine CHRGOT est la derni
262. es programmes sont r partis dans les deux m moires ROM plac es dans la couche par dessus la RAM aux adresses A000 BFFF et 000 FFFF Ici encore le microprocesseur voit normalement les m moires ROM mais peut contr ler leur pr sence gr ce deux interrupteurs On pourrait croire que chaque interrupteur contr le la pr sence d une des deux m moires mortes or ce n est pas le cas Nous avons vu que le bit 2 de l adresse 1 valeur 2 2 4 contr lait les p riph riques Le bit 1 de l adresse 1 valeur 2 1 z 2 contr le la pr sence des deux m moire BASIC et KERNAL Le nom officiel de cet interrupteur est Mettre ce bit 0 enl ve de la vue du microprocesseur les deux m moires Comme pr c demment cause des interruptions l ordinateur tombe mort et il faut l teindre et le rallumer Mais ici plus question de s en tirer avec un programme crit en BASIC car il n y a plus de BASIC du tout Donc seuls les programmes enti re ment crits en langage machine peuvent se permettre d ter ainsi les m moires mortes du CBM 64 L autre interrupteur est repr sent par le bit 0 de l adres se 1 valeur 270 1 Bien plus utilis cet interrupteur ne met hors service que la ROM A000 qui contient 80 du BASIC Son nom officiel est LOMEM Il devient flagrant que l interrupteur HIMEM n aurait aucune utilit en ne masquant que la ROM KERNAL La ROM A000 seule n est en effet d aucune utilit sans l autre
263. et MSB de poids fort 29 aleur dans octet zsigne bit3l man tisse 1 8 2 5 6 28318531 2 PI 1 0 0 n importe quoi n importe 80 00 00 80 00 00 0 00 00 00 0 00 00 FORMULE VALEUR MANTISSE 26 LE LIVRE DU CBM 64 num ro Valeur binaire Valeur d cimale 0 015625 0 0078125 0 00390625 0 001953125 0 0009765125 0 0004882812 0 0002441406 0 0001220703 0 0000610351 0 0000305175 0 0000152587 0 0000076293 0 0000038146 0 0000019077 0 0000009536 0 0000004768 0 0000002384 0 0000001192 0 0000000596 0 0000000298 0 0000000149 0 0000000074 0 0000000037 0 0000000018 0 0000000009 0 0000000004 r2 vw EP Vn O zl xO Pour trouver la valeur d cimale d une mantisse 11 faut la transcrire en binaire puis faire la somme de toutes les valeurs d cimales de chaque bit qui porte la valeur 1 En ajoutant 1 cette somme et en tenant compte du signe repr sent par le bit 31 on obtient ais ment la valeur de la mantisse compl te Les calculs tant effectu s en flottant il est n cessaire d avoir au moins deux zones pour stocker deux op randes pour une multiplication par exemple Ces deux zones s appellent les accu mulateurs flottants ACCU FLPlet ACCU FLP2 L ACCU FLPI occupe les adresses 61 66 l ACCU FLP2 les adresses 69 27 LE LIVRE DU CBM 64 6E un seul argument est n cessaire comme pour les fonctions trigonom triques SIN et COS s
264. eul l ACCU est utilis Les accus FLP occupent 6 octets chacun les 5 premiers repr sentent la valeur flottante le sixi me est une image du signe de la mantisse durant les diff rents calculs Dans cet octet 66 ou 6E la valeur ne peut tre que 00 signe positif ou FF signe n gatif Deux autres adresses sont chaque fois remises jour par l interpr teur il s agit de 6F qui contient le signe du produit ou le produit des signes des deux accus FLP et de 70 qui contient un bit suppl mentaire de poids faible permettant d obte nir des arrondis corrects lors des conversions entier flottant et r ciproquement ainsi que dans les op rations trigonom tri ques Ce bit est appel en anglais GUARD BIT ou bit de garde Le langage BASIC autorise l emploi de variables enti res de valeurs comprises entre 52768 et 32767 mais dans le cas des ordinateurs COMMODORE l emploi de ces variables ralentit l ex cution du BASIC car elles n cessitent chaque usage une conversion flottant entier L int r t de ces variables est dans le cas des tableaux un certain gain d espace m moire Le principal int r t de ce chapitre est de permettre par la compr hension du fonctionnement de l interpr teur la cr ation de programmes divers Des sous programmes en BASIC ou en langage machine et pourquoi pas de simples appels SYS la ROM BASIC conf rent au 64 certaines propri t s de l inter pr teur non accessibles classiquem
265. eut tre 0 1 2 ou 3 En prati que il y a deux m thodes de chargement 1 LOAD E 49 LE LIVRE DU CBM 64 ou LOAD E 1 m thode normale ou LOAD E 1 0 2 LOAD E 1 1 m thode absolue En mode normal le programme est charg en d but de zone BASIC l adresse qui est stock e en 45 et AA Or sur la cassette comme sur le disque l adresse de d but de programme est inscrite au d but du fichier programme Il s agit bien entendu de l adresse de d but du programme au moment du SAVE En mode normal BASIC charge le programme au d but de sa zone de travail actuelle sans tenir compte de Cl adresse contenue dans le fichier programme Par contre en mode ABSOLU le programme se chargera l adresse contenue dans le fichier ind pendamment de l adresse de d but de BASIC du 64 au moment LOAD Ceci est tr s utile pour sauver et recharger des images cran des g n rateurs de caract res des programmes en langage machine Pour recharger un programme l adresse r elle o il tait au moment du SAVE il y a deux m thodes 1 SAVE TOTO 8 1 POKE 44 adresse de chargement partie basse POKE 45 adresse de chargement partie haute LOAD TOTO 8 2 SAVE TOTO 8 1 LOAD TOTO 8 1 On notera que la premi re m thode permet de modifier volont cette adresse de chargement Pour les SAVE sur cassette les adresses secondaires 2 et 3j sont autoris es 2 est semblable 0 et 3 est semblab
266. eux autres caract res sont reconnus de fa on toute particuli re par l diteur d cran le RETURN et le SHIFT RETURN Ils signifient tous deux que 1 commande sur laquelle le curseur se trouve est termin e Avec RETURN la commande entr e au clavier est transmise la phase ACTION de l inter pr teur de commande Avec SHIFT RETURN l1a commande entr e est aussit t oubli e et l interpr teur de commande red marre z ro la phase ATTENTE Il existe de toute fa on une autre m thode de terminer tout moment l action de l interpr teur de commande comme de l interpr teur BASIC ou de tout autre programme la touche STOP la combinaison STOP RESTORE qui sont interpr t es les routines de d codage clavier et red marrent le programme en cours son d but en r gle g n rale il s agit de l inter pr teur de commande BASIC L ACTION la fin de chaque commande le contr le passe la seconde partie de l interpr teur de commande la com mande est l dans l cran et maintenant il faut agir Premi re phase de l action prendre le texte de la commande et le recopier dans une zone m moire TAMPON D ENTREE qui servira de bloc notes pour les op rations suivantes Ce tampon en m moire l adresse 0200 a une longueur de 88 caract res 20 LE LIVRE DU CBM 64 Cette longueur est donc la longueur limite d une commande BASIC quelle qu elle soit Une fois le transfert ex cut le vrai travail com
267. facer une imprimante parall le quelconque comme les DIABLO 173 LE LIVRE DU 64 marguerite qualit courrier ou les tr s connues EPSON Toutefois certaines limitations des imprimantes MPS 801 et 1526 peuvent tre outrepass es en les poussant dans leurs der niers retranchements Ainsi en utilisant le mode graphique au lieu du mode texte il est possible d imprimer du texte sur 120 colonnes de largeur au lieu de 80 Il suffit pour cela de redessiner les caract res dans une matrice de points plus troite et d envoyer le dessin de ces caract res l imprimante en mode graphique Ceci a t r alis dans le programme IMPRIME 120 en annexe Une des fon ctions les plus demand es est la recopie d un cran sur l impri mante En mode texte il n y a gu re de probl mes le petit programme RECOPIE effectue ceci sans probl me en utilisant l cran comme un p riph rique d entr e et l imprimante comme p riph rique de sortie Eh oui m me l cran peut tre consid r comme une entr e du 64 Une proc dure similaire est possible pour d autres modes graphiques Un cran en mode haute r solution peut ainsi tre recopi sur une imprimante COMMODORE avec le programme IMPRIME HR qui tourne l image de 90 degr vers la gauche Il s agit d un imp ratif technique En effet le balayage du g n rateur de graphismes du 64 est horizontal tandis que celui de l imprimante est vertical La reproduction d cran est donc bi
268. faut en FD30 FDAE C est la seule routine du CBM 64 qui crit dans la RAM derri re le KERNAL Ne jamais utiliser d s lors les adresses FD30 FD4E pour des programmes vitaux Ils seraient cras s aux adresses 64816 64846 lors de 1a frappe simultan e de STOP et RESTORE ou l ex cution d une instruction BRK Table des 16 vecteurs recopi e en RAM lors du RESET en 0314 0333 FF81 FFF5 JSR JSR JSR JSR JSR JSR JSR FD50 FDA3 FDF9 FE00 FE25 FE34 FE66 FEC2 LE LIVRE DU 64 Cette routine initialise les pointeurs de m moire et les pages 0 2 et 3 variables de service du KERNAL Initialisation des p riph riques Cette routine initialise la longueur du nom et le nom d un fichier En entr e le registre A doit contenir la longueur Les registres X et Y pointent partie basse partie haute vers la cha ne de caract res du nom du fichier Cette routine initialise le num ro de fichier logique pr sent dans l accumulateur A en entr e l adresse du p riph rique dans le registre X en entr e et l adresse secondaire dans le registre Y en entr e Routine double usage Elle lit ou tablit le pointeur de sommet de m moire BASIC Si le flag C Carry vaut 1 en entr e il y a lecture Sinon il y a criture La valeur lue ou crire est pr sent e dans les registres X et Y partie basse partie haute Routine double usage Elle li
269. fl che en haut ram ne au mode normal Le graphisme fl che en bas n est accessible qu en mode normal et signifie passer la programmation des caract res programmables Ces derniers sont les 16 caract res du bas de l cran E Pour programmer un caract re le saisir avec la main et le poser sur le damier de programmation Ensuite chaque appui sur le bouton de tir le point du damier sous le curseur ch nge de couleur Pour revenir au mode normal mettre le curseur au bord du damier et appuyer ui La fonction OUPPS se produit chaque enfoncement de la touche CTRL du clavier Cette fonction annule la derni re modification effectu e au dessin NOTE Ne soyez pas effray s par la longueur du programme Son but tant essentiellement didactique il est truff de lignes REM et m me Aucune de ces lignes n est n cessaire au programme Ne les entrez donc pas IF FL 20250 REM EXECUTE APRES LOAD 1 REM dde de ere die 2 REM S V P 3 REM GENERATEUR DE DESSINS 4 REM PAR P BRUNET H 5 REM GHT 1984 B COPYRTI BCM 6 REM W 9 10 REM PROTECTION DU 5 DE BASIC EN 38912 23800 12 POKE 51 0 POKE 52 152 POKE 55 0 POKE 56 152 CLR 13 REM SAUVE LES POINTEURS DE BASI 14 FOR I 0 TO 5 POKE 51456 1 43 1 NEXT I 15 262 LE LIVRE DU 64 16 REM JOYSTICK OU PADDLES 18 PRINT RIE gs ce BAS 0 OU POIGNEES 1 INPUT PL IF PL GG
270. flottant principal contient la valeur x de la variable en flottant En sortie le r sultat Y qui est la valeur calcul e de F x se retrouve dans l accumulateur flottant principal Le calcul de Y F x est r alis comme suit Y 1 2 2 3 3 La table des coefficients contient les valeurs de n et des Pn de l quation ci dessus Sa structure est la suivante ler octet Nombre de valeurs aussi appel degr du polyn me Cette valeur doit toujours tre impaire pour des raisons math matiques JSR 097 JSR E12A JSR E156 LE LIVRE DU 64 Octets 2 6 Co fficient n le co fficient multiplicateur de x n cod en flottant sur 5 octets Octets 7 11 Co fficient 1 celui de x n 1 cod en flottant sur 5 octets Octets 12 Et ainsi de suite jusqu au S n l me octet qui sera la fin du co fficient PO qui est le terme ind pendant de l quation Cette routine effectue la fonction RND du BASIC Le param tre d entr e et la valeur calcul e en sortie sont tous deux dans l accumulateur flottant principal Cette routine r alise la fonction SYS du BASIC L adresse de retour est celle de l interpr teur BASIC et elle est pouss e dans la pile avant d effectuer le saut vers la routine dont l adresse est communiqu e dans le param tre Cette adresse de retour est E146 Cette fonction BASIC est la seule accepter un argument num rique non limit par des p
271. ge 4 bits pour la couleur des points 1 du g n rateur et 2 bits pour la couleur des points D du g n rateur LE MODE GRAPHIQUE NUMERO 5 Le mode graphique 5 est au mode 2 ce que le 4 est au 1 C est dire que les m mes manipulations des couleurs de fond sont possibles Seulement le g n rateur de caract res n tant plus compos que de 64 8 512 octets au lieu de 2K il ne sert rien de faire une recopie de tous les caract res de la ROM en RAM Par contre comme on l a vu ci dessus en mode 4 on n a acc s qu aux 64 premiers caract res d finis en ROM Le mode 5 permet par simple recopie d un ou de plusieurs morceeaux de la ROM g n rateur de caract res de reconstituer en RAM un jeu de 64 caract res provenant de divers endroits de la ROM minuscules graphiques De plus la programmation des caract res conserve toute la souplesse du mode 2 LE MODE GRAPHIQUE NUMERO 6 Le mode 6 est appel aussi haute r solution ou BITMAP En anglais BITMAP signifie carte des bits c est dire que l image est constitu e de points que l on peut allumer ou teindre ind pendamment l un de l autre La notion de g n rateur de caract res dispara t au profit du BITMAP Un des inconv nients de ce mode est sa grande voracit en espace m moire En effet une image BITMAP occupe 8K RAM IK RAM cran Cette derni re ne servant plus de zone pointeur vers un g n rateur de caract res contient maintenant des informatio
272. gistres A X et Y Par exemple pour fermer le fichier logique 1 LDA 01 FICHIER N 1 JSR FFC3 CLOSE D rivation du canal d entr e Pour dialoguer avec 91 LE LIVRE DU 64 FFC9 FFC1 92 CHKOUT CLRCHN un p riph rique ext rieur il faut d abord ouvrir un fichier logique vers ce p riph rique avec OPEN voir ci dessus Apr s qu un certain nombre de fichiers logiques d entr e aient t ouverts il faut aiguiller la routine d entr e CHRIN voir plus loin qui est unique vers l un ou l autre des fichiers logiques ouverts ce moment C est le r le de CHKIN de manipuler cet aiguillage devant la routine d entr e Quand le p riph rique physique d fini par un fichier logique est un p riph rique IEEE la routine CHKIN envoie sur le bus la commande TALK Tous les appels cons cutifs aux routines CHRIN ou GETIN prendront des caract res sur ce p riph rique jusqu ce que l aiguillage soit nouveau red plac par CHKIN ou par CLRCHN Voir plus loin Cette routine modifie les registres et X Elle doit tre pr c d e d au moins un OPEN Appel par LDX 01 DU FICHIER D ENTREE ISR 6 AIGUILLE VERS LE PERIPHE RIQUE DU FICHIER 1 D rivation du canal de sortie Cette routine red finit le num ro du fichier logique utiliser pour toutes les sorties cons cutives de caract res par CHROUT Le canal de sortie restera affect ce p riph rique jusqu l appel de CHKOUT
273. i est toujours imprim IF 0 THEN PRINT ne s crira jamais l peut tre remplac par une autre valeur non nulle ON GOTO et ON GOSUB sont des versions plus sophistiqu es de IF La syntaxe employer est similaire ON condition GOTO ou GOSUB No de ligne No de ligne No de ligne Mais il y a plusieurs adresses de branchement possib les La condition est une VALEUR sup rieure z ro Le bran chement est effectu vers le premier num ro de ligne si la condi tion vaut 1 et ainsi de suite La condition de valeur N bran chera vers le Ni me num ro de ligne Exemple ON GOTO 100 200 300 est quivalent IF Azi GOTO 100 IF Az2 0070 200 IF A 3 GOTO 500 Les branchements multiples tant relativement fr quents ce type d instruction est souvent utilis le gain d espace m moire et de temps d ex cution tant appr ciable FOR NEXT est une instruction dite de boucle Il s agit d une instruction NEXT qui branche conditionnellement un certain nombre de fois vers une adresse connue celle du FOR Un l ment suppl mentaire a t ajout qui augmente norm ment la puissance de l instruction FOR l indice de boucle variable utilis e pour comptabiliser le nombre de boucles ex cu t es est accessible au programmeur c est une variable clas sique Dans le 64 l indice de boucle doit tre une variable flottante Comme les variables d indices de boucles sont tr s fr quemment utilis
274. igne cran o se trouve le curseur tandis que 05 0 ou PEEK 211 donne la position du curseur dans cette ligne Il faut bien noter ici que par ligne on n entend pas chaque rang horizontal de 40 caract res mais bien ligne BASIC qui suivant les cas occupe 1 ou 2 lignes de 40 caract res une ligne BASIC peut avoir jusqu 80 caract res La fonction RND constitue un g n rateur pseudo al atoire c est dire que le nombre au hasard rendu par RND est en fait le r sultat d un calcul d un algorithme Les valeurs RND ont une distribution statistique identique celle d un vrai tirage au hasard mais elles sont d termin es par un calcul et non un vrai hasard Le param tre d entr e n est pas une des donn es de l algorithme de calcul mais plut t un choix entre deux m thodes de calcul pour le point de d part de l algorithme RND L argument de d part de l algorithme RND SEED VALUE en anglais est situ 139 88 valeur en flottant sur 5 octets Cette valeur est initialis e lors du premier appel RND Si le calcul de RND est effectu partir de la valeur pr c dente RND on dit que les valeurs font partie de la m me s quence pseudo al atoire 53 LE LIVRE DU CBM 64 C est ici qu intervient l argument de la commande RND X Avec gt 0 la m me s quence est ex cut e chaque allumage du 64 Avec X lt 0 l argument de l algorithme est recalcul et d pend de la valeur X qui d marre une nouvelle
275. ill au chapitre 5 Le port B peut tre utilis par le KERNAL pour le contr le de l1 RS 232 Celui ci ne peut toutefois pas tre utilis sans un interface d adaptation des tensions COMMODORE vend un tel dispo sitif Un autre a par ailleurs t d crit dans Le livre du VIC dit chez BCM I Les adresses 56584 0008 56587 0 sont celles d une seconde horloge identique celle du CIA IRQ et dont la program mation est galement autoris e La fr quence de 50 ou 60 Hertz se programmera avec le bit 7 de l adresse 56590 DDOE et la prog rammation du r veil ou de l horloge pourra se s lectionner en 56591 DDOF bit 7 LA PORTE PARALLELE DU 6510 Nous avons vu au chapitre 1 les possibilit s de changement de banc m moire l aide de la porte parall le du 6510 Cette porte poss de 6 bits utiles 0 5 et nous n avons encore tudi que les bits 0 1 et 2 Les bits 5 4 et 5 de l adresse 1 sont utilis s par le KERNAL pour la gestion de la cassette 0001 bit 3 criture cassette sortie bit 4 interrupteurs cassette entr e bit 5 moteur cassette sortie La lecture du bit 4 permet de voir si une touche du lecteur de cassette C2 N est enfonc e Le bit 5 lui contr le le fonctionnement du moteur de la cassette Ces deux bits sont cependant difficiles manier car la routine d interruptions du balayage clavier r crit r guli rement cette adresse Voici donc la m thode pour arr ter le mo
276. inateur m me quand il affiche READY et attend une commande effectue un programme Ce programme s appelle ROUTINE D INTERRUPTION et se produit tous les soi xanti mes de seconde Son r le est de lire le clavier et de mettre jour le compteur d horloge TI entre autres Cette routine fait de nombreux appels aux p riph riques Or en basculant l interrupteur nous avons mis hors service les p riph riques sans pr venir le microprocesseur Il nous faut donc crire un programme pour mettre en service le g n rateur de caract res sans se servir des p riph riques En mmode direct cela est impossible le clavier n tant jamais accessible en m me temps que le g n rateur de caract res Pour pr venir le microprocesseur que la routine d interrup tion ne doit pas fonctionner il faut introduire le programme suivant LE LIVRE DU 64 10 56333 127 REM Pas d interruptions 20 POKE 1 51 REM Enl ve les p riph riques 30 GOSUB 1000 REM 40 POKEI 55 REM R tablit les p riph riques 50 POKE 56333 129 REM r tablit les interruptions 60 END Le sous programme que nous allons crire 1 ligne 1000 peut maintenant lire le g n rateur de caract res 1000 X PEEK 53288 1999 RETURN Une chose que nous avons n glig jusqu ici est toutefois primordiale Il faut un programme un ordinateur pour fonction ner Ce programme c est le KERNAL qui avec le BASIC donne au CBM 64 sa configuration habituelle C
277. iques et 60K RAM Il faut crire ses propres routines d entr e sortie ou changer de configuration pour acc der au KERNAL 12 LE LIVRE DU 64 CONFIGURATION 5 DI 52 K RAM contigus p riph riques et ROM KERNAL C est la configuration utilis e par les langages autres que BASIC qui chargent en m moire RAM Par exemple le CP M CONFIGURATION 4 64 K RAM contigus Il faut bien entendu changer de configuration pour tout acc s un p riph rique CONFIGURATION 5 Comme ci dessus mais dans le cas o une car touche est pr sente CONFIGURATION 6 Configuration o on conserve le BASIC et o l on ajoute une cartouche d extension BASIC comme SIMON S BASIC par exemple CONFIGURATION 7 40 K RAM contigus et 8 K ROM dans une cartouche externe pour les applications n ayant pas besoin de BASIC cartouches de traitement de texte par exemple CONFIGURATION 8 52 K RAM contigus et 16 K ROM en cartouche Comme ci dessus CONFIGURATION 9 Comme la configuration 2 mais avec une cartouche externe le g n rateur de caract res est inaccessible dans cette configuration CONFIGURATION 10 C est celle du jeu video ULTIMAX qui n a jamais vu le jour m LES PROGRAMMES INTERNES DU CBM 64 Les programmes pr sents d office dans le CBM 64 se subdivi sent en deux parties le BASIC et le KERNAL Le BASIC ne contient aucune facilit particuli re pour mani puler les fonctions graphiques ou sonores du CBM 64
278. ire de ce disque le listeront par ordre alphab tique De plus si le r pertoire contenait des trous emplacements laiss s vides par un fichier effac ceux ci sont rejet s en fin de r pertoire Toute nouvelle criture sur le disque se rangera donc en fin de r pertoire La gestion des fichiers de donn es sur le disque est aussi complexe que le reste du syst me d exploitation Entre autres il faut savoir que les programmes ne sont que des fichiers comme les autres et que l on peut les manipuler ainsi sans probl me Par exemple le programme DATA SUR DISQUE montre comment lire un programme octet par octet et recr er un nouveau programme partir de ces donn es Un autre exemple de ce genre de manipulation se trouve dans le APPENDISK qui lit un programme BASIC s quentiellement sur le disque pour en trouver la fin lit ensuite un second programme et parall lement r crit les deux la suite l un de l autre dans un troisi me fichier de type programme En ce qui concerne les fichiers programmes rang s sur disque il n est pas toujours ais 172 LE LIVRE DU 64 de les recopier Leur longueur est connue mais leur adresse de d part non 1 suffit pourtant d aller la lire sur le disque au d but du fichier Le petit programme ADRESSE DISQUE nous donne ainsi cette adresse de d part La recopie de ce genre de fichier peut se faire avec le moniteur MON en suivant la proc dure suivante 1 Lire l adresse de d pa
279. it disponible Il affiche la liste des variables en m moire et leurs valeurs On obtient galement l adresse des cha nes de caract res qui ont t utilis es Il faut surtout remarquer les sous programmes en 63080 63210 63070 et 65290 qui peuvent tre r utilis s d autres fins ils r alisent la conversion des donn es du format bi naire propre au 64 en caract res lisibles par tous remar quera le sous programme 63070 qui affiche les deux caract res du nom d une variable La conversion des valeurs flottantes de binaire en d cimal s effectue la ligne 63080 L EXPOSANT ZE est calcul en 65080 et la 55 ZJ en 63090 Le r sultat d cimal se retrouve dans ZJ en 63120 31 LE LIVRE DU CBM 64 L organisation de la ZONE TABLEAUX est fort similaire Ce pendant vu le grand nombre de valeurs que l on peut tre amen utiliser ici il n est plus question de laisser des octets inutilis s L acc s une valeur est plus lent mais bien plus conome en espace m moire Chaque tableau a une longueur diff rente mais la structure est identique Octets 1 et 2 M mes caract ristiques que les deux pre miers caract res des noms de variables simples Seuls sont autoris s les types entier flottant et chaine Noter ou une variable et un tableau peuvent porter le m me nom sans que la confu sion soit possible 115 sont dans des zones diff rentes Octets 3 et A Longueur du tableau cod e sur deux octets
280. kkkkkkkkkkkkkkk 10 20 PRINT CLRJUN INSTANT S V P 30 XMAX 40 25 HOME 102 4 CO 55296 60 GOSUB 1000 70 ES ICM FOR TO 0 1024 80 POKE I O NEXT I REMPLIT RAM COULEUR 90 X220 142 BIC 1 95 100 REM BOUCLE PRINCIPALE 110 e REM JOYSTICK 2 115 5 120 IF AANDIG THEN 20 225 2 REM BOUTON DE TIR 130 IF A CLR THEN GOTO 70 EFFACE ECRAN 140 IF A NDA THEN X X 1 Geen A emm 150 IF AAND8 THEN 1 REM A DROITE 160 IF AANDl THEN Y Y l REM EN HAUT 170 IF AAND2 THEN Y Y 1 REM EN 180 133 1 Fl SORT LA PLUME 185 IF m 134 2 RENTRE LA PLIME 187 TFA CHRS 135 9 3 F5 GOMME CHRS 136 0 F7 RIEN DU TOUT 200 T SAS TH N X XMAX 1 220 IF YD YMAX THEN 1 230 IF Y lt THEN 0 250 CURZHOME X Y XMAX 260 GOSUB 2000 370 ON BICH GOSUB3000 4000 5000 6000 380 IF POKE CUR 160 REM ECRIT 390 12 IF BICC THEN PORE CUR 32 REM EFFACE 999 Ara EEE EEE 1000 REM CONFIGURE LES 3 SPRITES 1020 VIDEO 53248 1030 PLUME 832 REM SPRITE BIOCS NUMERO 13 14 15 1125 FOR H 0 TO 2 1130 FOR 1 0 TO 20 READ FOE K 0 2 T 0 FOR J 0 TO 7 B 0 1131 IF MIDS AS J 15851 ld Q THEN 1135 2 J POKE S32 GA METIER T NEXTK IH 1140 POKE VIDEOS 9 i EXPANSION HORIZONTALE 1150 POKE VIDEO423 1 REM EXPANSION VERTICALE 1160 POKE VIDEO428 REM SP
281. l adresse du dernier octet 1 241 LE LIVRE DU 64 adresse adresse de d but transf re une zone m moire de fin adresse de destination 000 5000 D Exemple retour au BASIC X Exemple on peut utiliser l diteur MON Pour chaque affichaqe du d cran pour modifier les valeurs affich es GEET EE SABASSSHORHSSSSSOSDQARSSRARQERESOSSARESTOERSSERASSOSSS SS98858958893958988 8858888455583 EE 8 52085555085888822885824282850 28885508855895824050988 0 CA O CO 4 7 102 OO ON t CN CH MAO KE CO P R4 00 p 000 00 00 00 AN lt G co G A eod 598445888 EE EE SEET KE de CO O D D lt pa QO oo O 4 O 00 Q dS 1O O O CO AN ON Fes lt N O Du dSOSSSRSEOESSSSSSARSHHHASRESSORRCSRSASSESSSSSESSHESSSRER S ER een EE EE EE SE EE TEE 242 LE LIVRE DU 64 ON D EE et O0 OT LT Im O O tx 00 00 ga 00 00 GER e AOCAHNNONOE O Om 00 D d o f A US 00 lt lt nooo ND lt O COO O lt C 00 00 Oc0O D O Lei q KE dal Ba Fu CU BC 00 Eu e a M O E Ix O O8 O Ba LAN n im Ba ONDO HO ASS898S95gESBR RSSRESSRSRARS GE 9505259808048 O oO vm cO O lt mO C nico Ci O st OX pa xu pu CN CO RSA 88 SE eA O En 00 Eu
282. la touche STOP et se termine par un RTS normal si elle n est pas enfonc e Si STOP a t enfonc elle referme tous les fichiers ouverts et remet 0 le compteur de caract res du tampon de clavier Cette routine lit un bloc HEADER ou en t te sur la cassette D s qu elle a trouv le bloc recher ch elle affiche l cran le message FOUND nom de programme Cette routine teste les boutons du lecteur de cassette En sortie le flag Z du 6510 vaut G si aucun bouton du lecteur n est enfonc Cette routine lit un bloc de donn es sur la cassette Ce peut tre un bloc d en t te un bloc de donn es ou un programme BASIC par exemple Cette routine crit un bloc sur cassette Cette routine pr pare les param tres pour LOAD ou SAVE Suite de la routine ci dessus qui est en fait en deux partie appeller successivement Cette routine arr te le moteur de la cassette Cette routine compare deux pointeurs en page 0 Celui en AC et AD avec celui en AE et AF Les flags sont affect s comme lors d un CMP normal Cette routine incr mente le pointeur sur deux octets en AC et AD partie basse partie haute routine de RESET Elle ne revient jamais au programme appellant Elle test et tient compte d une ventuelle cartouche de ROM en A000 Cette routine restaure la table des vecteurs d entr e sortie du KERNAL ses valeurs par d faut ATTENTION Cette routine r crit la table qui est par d
283. le 1 mais pour2 et 5 le BASIC sauve les programmes avec un marqueur E 0 T ajout 1a fin qui signifie fin de bande En cons quence tout LOAD SAVE ou VERIFY qui d couvre ce bloc E 0 T arr te sa recherche croyant atteindre la fin de bande physique L instruction VERIFY est semblable au LOAD l exception de ceci chaque octet lu au lieu d tre rang en m moire est compar au contenu de la m moire correspondante et l octet ST STATUS est mis jour en fonction de la comparaison la fin du VERIFY si le ST STATUS est diff rent de 0 le message VERIFY ERROR appara t Pour diff rencier les routines VERIFY et LOAD le BASIC utilise un drapeau flag l adresse m moire 147 contient 1 pour LOAD 0 pour VERIFY 50 LE LIVRE DU CBM 64 LES FONCTIONS BASIC Les fonctions BASIC repr sentent des valeurs exactement au m me titre que les variables Les fonctions sont en fait des formules des m thodes de calcul qui repr sentent une et une seule valeur d finie par le ou les param tre s de la fonction Par souci d uniformisation toutes les fonctions ont au moins un argument m me si celui ci n est pas n cessaire comme dans FRE Les fonctions sont regrouper en deux blocs les fonctions num riques dont les valeurs sont en flottant et les fonctions cha nes dont les valeurs sont des cha nes de caract res Les fonctions num riques ont toutes des arguments num riques sauf LEN VAL et ASC qui ont un argume
284. le registre partie haute la valeur FH INT F 256 et dans le registre partie basse la valeur FL F FH 256 Le calcul de la valeur F en fonction de la fr quence d sir e est donn ci dessous Il faut faire attention ceci car les formules cit es dans pratiquement tous les ouvrages am ricains reprennent des valeurs diff rentes des n tres en effet les CBM 64 vendus aux USA ont une fr quence d horloge diff rente de celle des machines europ ennes Voici la bonne formule F fr quence 17 0284 ou fr quence F 0 058725 Hz La valeur de F est de 3 8 sup rieure la valeur am ricaine car la fr quence d horloge est de 1 022727 MHz aux USA contre 0 985248 MHz pour les CBM 64 europ ens n trouvera en annexe le programme fr quences qui imprime l cran ou l imprimante les valeurs de F FL et FH pour toutes les notes que le CBM 64 peut jouer y notera la fa on de calculer les fr quences des notes les notes de musique ont toutes la fr quence de la note pr c dente multipli e par 2 la puissance 1 12 Les notes d une gamme ont des fr quences doubles de celles de la gamme pr c dente 149 LE LIVRE DU 64 Les notes sont DO DO di se RE RE di se FA di se SOL SOL di se LA LA di se SI et la fr quence du LA est de 440 Hz dans la quatri me gamme F note F note pr c dente 2 1 12 Pour trouver les valeurs F FL et FH correspondant une fr quence donn
285. lecture du programme source permet d en d terminer les adresses de d but et de fin Ensuite le programme D est g n r la deuxi me passe Un di se est affich l cran lors de la g n ration d une ligne de BASIC On ne peut videmment pas cr er par ce proc d un programme chargeur de bas de m moire car il s craserait lui m me Cependant g n rer un programme BASIC en m moire basse est possible en modifiant le bas de BASIC avec INIMEM avant d utiliser le programme D Essayez c est d une efficacit surprenante 10 REM LIT UN PROGRAMME SUR DISQUE ET LE 20 REM RANGE EN DATA DANS UN AUTRE PROGRAMME O INPUT NOM DE PROGRAMME 2 20 F2 F1 D PRINT PRINT NOUVEAU ROGUE F2 PRINT 50 15 8 ID OPENS 8 8 F 19 P R OPEN9 9 C0 F 29 PW d E taU 80 LIS CARS 1 CHRS 13 0 20 FOR T 1010 REARA RINTIS OURS 100 L ASC L dE d SAAME 1 120 INT PD DE BET SA PRINT CS 0 EA SA 130 ENT E lt gt 0 io 1 140 SS GOTO 130 CS CS 160 CLOSEB ZE 8 tier P R G T 8 AS AS 170 EAsEA PRINT ADRESSE DE F PRINT 180 PRINT 9 LORS 1619 MIDS GTRS E 2 190 FOR 1 11029 9 NET 200 PRINT 5 2 CARS 167 SE S 500 C 1 PRINT 9 LI SCHRS LCARS H C 3 510 8 SAT PRINT49 MIDS Se 3 2 520 C C 1 IF C 9 OR 5 lt 20 GOTO 570 550 L L18 IF 12255 1 256 1 560 PRINT 9 C GOTO 500 570 PRINTIO C 196 197
286. lement 1l i DH H soit etc ponctuation fran aise Noter que le M est pass sur la touche t ge L t commercial nous donne l accent circonflexe Se L enfoncement LOGO et CTRL nous ram ne QWE RTY normal Comme d habitude 1060 SHIFT inverse majuscules et minuscules De plus AZERTY rajoute la fonction suivante au clavier L enfoncement simultan de SHIFT et CTRL en m i ode AZERTY invers les tables de d codage de clavier normal et avec SHIFT 52 qui a pour effet d inverser les deux signes de chaque touche Le but est de pouvoir entrer ais ment des co EE mmandes BASIC en Si le programme est d sactiv i par STOP RESTORE le r activ par SYS 49152 D sactiver avant les acc s la cassette i REI AZERTY POUR CBM 64 7 REM ACCES PAR SYS 49152 8 REM 10 5 0 1 49152T049983 READ A 1 A CS CS4A PRINT NEXT I 20 IF 5 lt gt 9841 9 STOP 30 SYS49152 REM ACTIVE L AZERTY 40 END 49152 DATA 120 173 2 221 9 3 141 2 49160 DATA 221 17 3 0 221 41 252 141 0 49168 DATA 221 169 50 141 24 208 169 204 49176 DATA 141136 2 165 1 41 24D 133 49184 DATA 1 189 224 133 254 169 208 133 49192 DATA 252 100 0 132 251 132 253 177 49200 DATA 251 145 253 230 251 230 253 208 49208 DATA 246 230 252 230 254 208 240 169 49216 DATA 216 133 252 169 242 133 254 169 49224 DATA 8 133 251 133 253 177 25 1 145 49232 DATA 253 230 291 230 253 165 25
287. les caract res possibles pour obtenir une r solution par 1 4 de caract res dans les deux axes Des effets tr s sp ciaux peuvent tre obtenus avec ces caract res en mode multicolore Pour crire un bloc de 4 4 points dans l cran il convient de lire le caract re qui se trouve sous le bloc crire et voir si le bloc en question est d j noirci dans le caract re S il ne l est pas encore changer en cons quence le code du caract re Cette proc dure peut para tre lourde mais en pratique on constate qu elle est environ dix fois plus rapide en BASIC que l emploi du mode haute r solution ce qui donne des vitesses de trac encore acceptables On peut bien entendu employer ces caract res pour construire un graphisme partir de PRINT et de chaines de caract res Consid rons un caract re bloc comme une juxtaposition de A carr s num rot s 1 2 4 et 8 Un caract re pouvant contenir entre Q et 4 blocs il suffit pour trouver le code du caract re correspondant une configura tion d additionner les num ros des blocs noircis dans le carac tere 117 LE LIVRE DU 64 Exemple 1 2 8 11 amp 1 2 are sera le caract re num rot No du sec more code du caract re X X X X X X X X caract re invers pr c d de REV et suivi de OFF 0 1 2 5 4 5 6 7 8 9 gt lt gt lt gt lt gt lt gt lt gt x gt lt gt Dn peut positionner directement le
288. lle maintient en m moire tampon un caract re d avance jusqu ce qu il n y ait plus de donn es exp dier Le dernier caract re est alors envoy avec le fil ATN au niveau haut pour signaler la fin de la transmission Elle utilise la routine en ED40 ISR EDEF JSR EDFE JSR EE13 JSR EE85 ISR EEB8E JSR 97 JSR EEAO JSR EEA9 JSR EEB3 EEBB FOBD JSR bE12B LE LIVRE DU 64 Cette routine envoie sur le bus IEEE s rie la commande UNTALK cessez de parler Cette routine envoie sur le bus IEEE s rie la commande UNLISTEN cessez d couter Cette routine re oit un caract re de donn e en provenance du bus IEEE s rie Cette routine met le fil d horloge IEEE s rie au niveau bas Cette routine met le fil d horloge IEEE s rie au niveau haut Cette routine met le fil de donn e IEEE s rie au niveau bas Cette routine met le fil de donn e IEEE s rie au niveau haut Cette routine effectue la lecture du port parall le 2 attend une lecture stable et en sortie revient avec le bit de donn e lu sur l IEEE s rie dans le flag C et le bit d horloge dans le flag N Cette routine g n re un petit d lai de 1 milliseconde Elle utilise le registre X du 6510 Routines de gestion de l RS 232 MESSAGES DU KERNAL Chaque message du KERNAL se termine par un caract re dont le bit 7 vaut 1 BRUN MESSAGE D ERREUR DU KERNAL SEARCHING FOR PRESS PLAY ON TAPE PRESS RECORD
289. lorsque le bouton de tir est enfonc A l arr t l enfoncement du bouton provoque le clignotement du curseur La touche CLR efface l cran 1 2 REM UTILISATION DU JOYSTICK x 3 REM 4 PAR P BRUNET 5 REM COPYRIGHT BCM 1983 6 REMAERRREREARRARRRRRRARARERAERERARARE 7 8 REM MISE A BLANC DE LA RAM COULEUR 10 FOR 1255295105629 5 I 1 NEXT 32 REM CREATION DE LA TABLE DES MOV 33 50 POR CHA 11 1 I 1 1 0 40 40 0 80 De ke hk GRAMME 53 EN 85 223 LE LIVRE DU 64 86 REM EFFACE LA RAM ECRAN 90 FOR 1024 TO 2023 POKEI 32 NEXT I 120 PO 1024 REM POSITION DE DEPART 121 122 JOY VALEUR DU REGISTRE 123 JOYSTICK N 2 EC 126 REM DEBUT BOULE PRINCIPALE 127 kkk kikk kkk kk ikki 128 130 JOY PEEK 56320 132 REM TEST DE TOUCHE POUR EFFACER 135 IF PEEK 197 51 GOTO 90 137 REM P INDICE DANS LA TABLE DES MOV 140 P JOY 100 142 REM SI P gt 16 PAS DE TRAINEE 150 IF gt 16 THEN 16 170 152 REM EFFACEMENT DU POINT 160 POKE PO 32 162 REM CALCUL DE LA NOUVELLE POSITION 170 172 TEST POUR SCROLLING 180 IF PO lt 1024 THEN PO PO 999 190 IF gt 2023 THEN PO PO 999 192 AFFICHAGE DU POINT ET BOUCIAGE 193 200 POKE PO 42 GOTO 130 55555 SAVE JOYSTICK 8 READY L
290. mbreuses concat nations EXEMPLE PROGRAMME CONTENU DE LA ZONE CHAINES BAS lt MEMOIRE RAM gt SOMMET 1 CLR TOP 2 A COUCOU TOP 3 COUCOU TOP 4 COUCOU COUCOU TOP 5 0 COUCOU 6 END COUCOU TOP 52 LE LIVRE DU CBM 64 Dans l exemple la ligne 2 n occupe aucune place dans la zone cha nes car la variable A contient un pointeur dirig sur la cha ne de caract res contenue dans la ligne BASIC No2 La ligne 3 cr e une nouvelle cha ne de caract res identique la pr c dente mais situ e ailleurs donc dans la zone cha nes La ligne 4 cr e une nouvelle cha ne plus longue donc ailleurs que la pr c dente Notez que l ancienne cha ne A est toujours pr sente mais le pointeur de A n est plus dirig sur elle elle est inutilis e La ligne 5 ramasse les ordures elle supprime la cha ne inutile remonte la cha ne utile vers le sommet de m moire et remet jour le pointeur de chaines dans la variable A Apr s la fin d ex cution du programme les variables encore utiles sont l La taille totale des cha nes utiles peut tre valu e en notant la diff rence des pointeurs Haut et Bas de zone cha nes Taille des cha nes PEEK 53 256 PEEK 54 PEEK 51 256Y PEEK 52 La fonction POS a galement un argument bidon comme FRE La valeur 05 0 est simplement la valeur de l octet contenu en 211 03 noter que PEEK 214 D6 donne le num ro de la l
291. mence La deuxi me phase de l action consiste TASSER la commande pour en r duire la longueur A cette fin l interpr teur de commande passe en revue le texte de la com mande caract re par caract re et s il rencontre au d but de la commande un ESPACE il le supprime red calant tous les caract res d une position vers la gauche De plus par souci d efficacit les MOTS CLES BASIC qui forment l ensemble du vocabulaire BASIC sont encod s sous la forme d un seul caract re Il existe 76 mots cl s dans le CBM 64 Or dans les parties de texte qui ne sont pas entre guille mets il n y a dans le texte d une commande normalement aucun caract re sur fond invers Ceci r duit donc de moiti le nombre de caract res possibles dans ces zones et lib re 128 codes les caract res de 128 255 pour la repr sentation des mots cl s S il lit un caract re qui n est ni alphab tique ni entre guillemets l interpr teur de commande commence tout d abord par remettre z ro le bit 7 du code caract re pour supprimer un ventuel fond invers Ensuite s il s agit d un caract re alphab tique l interpr teur recherche dans la table des mots cl s BASIC en m moire ROM en A09E ou 41118 le premier mot cl commen ant par la m me lettre S il en trouve un il compare le caract re suivant du tampon d entr e avec le caract re suivant du mot cl Ce processus est r p t jusqu 1a d couverte d une diff rence ou jusqu
292. mension par d faut pour DIM 10 177 LE LIVRE DU 64 ADRESSES HEXA DECIMAL 000D 13 000E 14 000F 15 0010 16 0011 17 0012 18 0015 19 0014 0015 20 0016 22 0017 0018 23 0019 0021 25 0022 0025 34 0026 002A 38 002B 002C 43 002D 002E 45 002F 0030 47 0031 0032 49 0033 0034 51 0035 0036 53 0037 0038 55 0039 003A 57 003B 003C 59 003D 005E 61 005F 0040 63 0041 0042 65 0043 0044 67 0045 0046 69 0047 0048 71 0049 004A 73 0048 004C 75 004D 77 004E 0052 78 0053 83 0054 0055 84 0056 0057 86 0058 0060 88 0061 97 0062 0065 98 0066 102 0067 103 0068 104 0069 105 006A 006D 106 178 24 33 37 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 85 87 96 109 DESCRIPTION Type de donn e FFzcha ine 00 nombre Type de donn e 80zentier 00 flottant Drapeau Recherche de DATA ou mode quote pendant LIST ou Ramassage d ordure Drapeau Indice de tableau ou param tre de fonction Drapeau 00 INPUT 40 GET 98zREAD Drapeau Signe pour TAN ou r sultat d une comparaison Drapeau affiche pendant INPUT O N aussi num ro de fichier CMD Valeur enti re provisoire Pointeur vers la pile provisoires Adresse de la derni re cha ne provisoire Pile des cha nes provisoires Pointeurs provisoires Stockage provisoire d un nombre flottant POINTEUR DE DEBUT DE BASIC POINTEUR DE FIN DE PROG
293. ment Cette direction peut tre modifi e par les touches CRSR Tous les caract res peuvent tre employ s pour dessiner La position X Y du curseur est en permanence affich e dans le coin sup rieur droit de l cran La touche HOME ram ne le curseur au coin sup rieur gauche de l cran un morceau de la figure tandis que CLR le ram ne au coin sup rieur gauche de la figure Le curseur se d place entre 0 et 78 en horizontal entre G et 39 en vertical Une s rie de l6 fonctions sp ciales est disponible en frappant deux caract res dont le premier est la fl che gauche Si vous ne connaissez pas par coeur la commande effectuer un cran d aide HELP apparait deux secondes apr s la frappe de la fl che gauche Les fonctions A et B d finissent une zone qui peut ensuite tre encadr e invers e efac e par les fonctions C Les autres fonctions concernent les d placements rapides de curseur et les effacements et insertions de lignes et de colonnes La touche de fonction F5 sauve l image sur le disque La fonction peut tre annul e par un D La touche de fonction F6 charge une image du disque En cas d erreur disque taper simplement sur RETURN lance la comande 60 TO 10 qui reprend le programme en cours La touche F7 permet la recopie de l cran sur une imprimante COMMODORE 5801 ou 1526 Les autres imprimantes n ont pas t test es avec ce programme Une question est pos e num ro d
294. ment utiliser le langage Les premiers langages de haut niveau comme FORTRAN taient traduits compil s d un bloc en langage machine avant d tre ex cut s Les d fauts de cette m thode sont nombreux elle n ces site une tr s grosse m moire et une proc dure fort longue manipuler Avec BASIC une nouvelle g n ration de langages a vu le jour les langages interpr t s c est dire traduits et ex cut s simultan ment on traduit une instruction on l ex cute puis on passe la suivante et ainsi de suite C est peut tre plus lent comme proc d mais c est simple et efficace Le programme BASIC est remarquablement court au vu de son efficacit Dans le 64 le BASIC occupe la m moire ROM aux adresses 000 000 et 000 E4EB soit 9451 octets Le noyau principal de l interpr teur BASIC est ce qu on appelle l interpr teur de commande L interpr teur de commande est un programme relativement court qui ex cute ind finiment une boucle attendre une commande au clavier de l ordinateur puis agir en cons quence et recommencer sans fin L interpr teur de commande est actif d s l allumage du 64 et en g n ral tous les moments o l cran affiche le message READY qui signifie pr t recevoir une commande D taillons les deux l ments de l interpr teur de commande Attente et Action 3 19 LE LIVRE DU 64 L ATTENTE Une commande BASIC peut tre simple exemple RUN ou
295. mes de secondes Appel par LDA 00 PARTIE BASSE LDX 00 PARTIE MOYENNE 95 LE LIVRE DU 64 FFDE RDTIM FFE1 STOP FFE4 GETIN FFE7 CLALL FFEA UDTIM 96 LDY 00 3PARTIE HAUTE JSR FFDB Cette routine lit l horloge Elle utilise les registres A X et Y dans le m me ordre que ci dessus Appel par JSR FFDE STY HEURE STX HEURE 1 STY HEURE 2 Cette routine teste la touche STOP Elle n cessite l appel pr alable de UDTIM pour lire le clavier si les interruptions ont t interdites En effet dans le cas o la routine d interruption normale n est pas en fonction c est la seule fagon d arr ter un programme coinc dans une boucle infinie En sortie le flag 7 est remis 1 et les canaux d entr e sortie sont r aiguill s vers le clavier et l cran En sortie l accumulateur A contient le r sultat du balayage de la ligne clavierqui contient la touche STOP On peut ainsi tester l enfoncement du SHIFT Appel par JSR UDTIM ISR FFEI1 BNE SUITE SI PAS STOP JMP BASIC 3SI STOP SUITE Cette routine lit un caract re au clavier au sur l RS 232 Si le canal d entr e est aiguill vers le clavier ce qui est la situation la plus fr quente un caract re est pris et donc enlev du tampon de clavier Si aucun caract re n est pr sent la valeur lue est 0 On peut ce moment faire une boucle d attente jusqu 1a frappe d un caract re C est donc le GET A du BASIC Si le canal est aig
296. n 4328 Si les bits 7 et 6 sont tous deux 0 on n imprime jamais aucun message Cette routine modifie le registre A Cette routine envoie une adresse secondaire apr s un LISTEN sur le bus IEEE s rie ne pas employer apr s TALK Exemple Envoi de l adresse secondaire 15 au lecteur de disquette 1541 pour envoyer une commande sur le canal d erreur il faudra relire le canal d erreur par READST FFB7 85 LE LIVRE DU 64 FF96 TKSA FF99 MEMTOP FF9C MEMBOT 86 Appel par SECADD 0F 315 ADRESSESECONDAIRE ADDR 08 BzN DE PERIPHERIQUE LDA ADDR JSR LISTEN ENVOIE LISTEN LDA SECADD JSR SECOND ENVOIE ADD SECONDAIRE Cette routine envoie une adresse secondaire apr s TALK A ne pas employer apr s LISTEN Pour lire le canal d erreur du lecteur de disquettes on pr pare la transaction per l exemple ci dessous Appel par SECADD z 0F 15 ADD SECONDAIRE ADDR 08 3 8 N DE PERIPHERIQUE LDA ADDR JSR TALK ENVOIE L ADRESSE LDA SECADD JSR TKSA 3ENVOIE ADD SECONDAIRE Cette routine est double usage Elle lit ou tablit le sommet de m moire Si le flag CARRY C vaut 1 en entr e le pointeur de sommet de m moire en 0283 et 0284 est charg dans les registres X et Y Si le flag CARRY vaut 0 en entr e le poin teur stock dans les registres X et Y partie basse partie haute est transf r en 0285 et 0284 Pour redescendre le sommet de m moire de 512 octets 2 pages de 256 octets
297. n La prise en compte de tous les codes de contr le est correcte entr e elle commence par initiali ser les param tres n cessaires pour la prise compte de la ligne dans le tampon d entr e BASIC en 0200 Routine d acquisition d un caract re sur le p riph rique d entr e courant Le caract re lu est dans le registre A en sortie Routine d criture d un caract re l cran En entr e le code ASCII du caract re doit tre dans l accumulateur A Tout les codes de contr le sont pris en compte Cette routine teste si le contenu de l accumula teur A est un code de changement de couleur et si oui range cette valeur en 0286 qui est l adresse de la couleur de trac en cours Cette routine d cale l cran d une ligne vers le haut SCROLL Le d calage de l cran est ralenti si on maintient la touche CTRL enfonc e l appel en BASIC par SYS 59626 est autoris Cette routine ins re une ligne vierge dans l cran sous la ligne o est le curseur Elle ne fonction 75 LE LIVRE DU 64 JSR 902 ISR E9F0 JSR E9FF JSR EAIC JSR EA24 JMP EA31 76 ne correctement qu une fois comme lors de l inser tion d une deuxi me ligne de 40 caract res dans une ligne BASIC Si on l appelle de nombreuses fois la m me ligne la gestion du curseur de vient incorrecte Cette routine d place une ligne cran vers une autre lignes de 40 caract res Elle d place la RAM cran et la RAM couleur
298. n m moire morte ROM aux adresses E500 FFFF et est contenu dans une des trois m moires ROM du 64 partie en ROM partie en RAM INTERCEPTION D but D UN VECTEUR PROGRAMME en ROM JMP INDIRECT DU KERNAL adresse de suite I Nouvelle Suite inutilis el lt programme en RAM Les programmes internes du 64 comme ceux du VIC comp rennent quasiment toutes les routines d j pr sentes dans le PET mais organis es de mani re bien plus rationnelle L inter pr teur BASIC est enti rement s par des routines syst me ce qui permet une adaptation bien plus ais e d autres lan gages De plus toutes les routines importantes pour l utilisa teur passent par un vecteur en m moire RAM o l on peut les intercepter Les vecteurs sont crits en RAM par le KERNAL lui m me l allumage du 64 mais ils sont modifiables tr s ais ment par le programmeur DE plus 1 ROM contenant le KERNAL peut tre volont retir e avec la ROM BASIC de l espace d adressage Un parti que l on peut tirer de cet tat de fait est la possibilit de recopier le KERNAL en RAM et de le modifier en 58 LE LIVRE DU 64 suite suivant les besoins du moment Par exemple on peut voir en annexe le texte du programme AZERTY qui modifie la partie du KERNAL qui d code le clavier Si l interpr teur BASIC a besoin des routines KERNAL en revanche le contraire n est pas vrai Toutes les sous routines d entr e sortie vers l
299. n attend est sont un 1 ou un Dans notre exemple si les bits 1 et 0 doivent valoir 0 et 1 respectivement on mettra le bit 1 0 et le bit 0 1 dans le troisi me argu ment les autres bits n ayant pas d importance car on les a masqu s lors du AND on les met 0 Valeurs Resultats en binaire en binaire ler cas WAIT 57164 48 16 10 IF PEEK 37164 01011110 94 01011110 94 AND 48 00110000 48 00010000 16 16 00010000 16 00000000 0 THEN 10 0 on n attend pas 2 cas WAIT 57164 48 16 10 IF PEEK 37164 01111110 126 01111110 126 AND 48 00110000 48 00110000 48 XOR 16 00010000 16 00100000 32 THEN 10 lt gt 0 on attend L usage de l instruction WAIT est en pratique limit e l attente de modification d un bit d entr e sortie EXEMPLES attente bouton de tir enfonc WAIT 56464 16 16 attente bouton rel ch enfonc WAIT 65464 16 WAIT 65464 16 16 stopper un programme si on ne 10 PRINT WAIT 197 64 maintient pas une touche 20 GOTO 10 Avance pas pas dans un pro 10 PRINT WAIT 197 64 64 gramme 20 WAIT 197 64 GO0TO0 10 43 LE LIVRE DU CBM 64 5 LES COMMANDES D ENTREE SORTIE Elles constituent le dernier bloc de commandes BASIC mais non le moindre Sans les entr es sorties BASIC ne pourrait ni communiquer les r sultats de ses cogitations ni g rer des fichiers c est dire des donn es plus nombreuses que ce que la m moire du 64 lui permet de st
300. n dans le bloc 64 octets num ro B dans le banc de 16K actif du VIC II Pour l exemple consid rons le pointeur de lutin num ro N avec O lt N lt 7 2 Ecrire la valeur B dans la zone des pointeurs de lutins POKE ECRAN 1016 N B 0 lt lt 7 REM 0 lt lt 255 Car les pointeurs sont bien les octets 16 25 apr s la fin des 1000 caract res de l cran 3 Pr venir le VIC II qu il doit afficher ce lutin POKE 53269 PEEK 53269 0R 2 N Cette manoeuvre un peu complexe a pour but comme fr quemment dans cet ouvrage de modifier un bit d un regis tre sans modifier les autres bits du m me registre 140 LE LIVRE DU 64 On interdit un lutin par POKE 53269 PEEK 53269 AND 255 2 N amp Pr venir le VIC II de la position X Y dans l cran laquelle doit se positionner le lutin L cran est d fini comme une matrice de 300 240 points Un seul octet suffit donc donner la coordonn e verticale d un lutin mais 9 bits sont n cessaires pour la coordonn e horizontale Chaque lutin s est donc vu attribuer deux registres pour X et Y plus un neuvi me bit Les huit neuvi mes bits des huit lutins se retrouvent dans un seul registre du VIC Il le registre des MSB X MSB signifie en anglais MOST SIGNIFIANT BIT ou bit de poids fort Soit X et Y les coordonn es du lutin num ro N O lt N lt 7 0n le positionne par POKE 5324842 N X AND 255 REM coord X bits inf rieurs POKE 5324942 N Y RE
301. n des octets envoyer dans son tampon interne Elle n envoie le premier caract re qu elle re oit qu au deuxi me appel Le dernier caract re du message doit tre envoy par UNLSN qui doit suivre tout envoi de donn es sur le bus IEEE s rie Envoie UNTALK sur le bus IEEE s rie Ceci sert signaler un p riph rique qu il doit cesser d envoyer des donn es Cette routine modifie le contenu de l acccumulateur A Appel par JSR UNTLK Cette routine envoie UNLISTEN sur le bus IEEE s rie Ceci signale tous les p riph riques qu ils doivent arr ter de recevoir des donn es A utiliser par exemple apr s avoir envoy un message au disque ou l imprimante Elle ne modifie que l accumulateur A Une ventuelle erreur peut tre d tect e avc un JSR READST Appel par JSR UNLSTN Cette routine envoie un p riph rique IEEE s rie la commande LISTEN lui signalant qu il va regevoir des donn es En entr e l accumulateur A contient le num ro donc l adresse IEEE du p riph rique concern Valeur 31 Elle ne modifie que l accumulateur A Par exemple avant d envoyer une commande au lecteur de disquette 1541 il faut faire LDA 08 08 disque JSR LISTEN commande LISTEN FFB4 TALK FFB7 READST ATTENTION LE LIVRE DU 64 Cette routine envoie un p riph rique IEEE s rie la commande TALK lui signalant qu il peut envoyer des donn es En entr e l accumulateur A contient l adresse du p
302. n grand int r t pour nous Il s agit du port utilisateur USER S PORT La programmation en est identique celle du port B du CIA IRQ nous n y reviendrons donc pas Rap pellons que chaque bit 1 dans le registre 00035 56579 indique que le bit correspondant du port utilisateur en 0001 56577 fonctionne en sortie Et pour 0 ce sera une entr e Le programme en annexe LISTING est un exemple de la soup lesse du syst me 64 Les vecteurs de sortie de caract res d OPEN et de CLOSE y sont intercept s pour aiguiller la sortie impri mante 4 4 vers 1 porte parall le pour y commander une imprimante classique avec le protocole CENTRONICS La grande majorit des imprimantes respectent ce standard V rifiez toutefois que la r sistance interne de toute charge appliqu e au port utilisateur n est pas inf rrieure 2700 Ohms valeur minimale sous laquelle la s curit du 6526 n est plus garantie Cette r sistance se mesure entre les broches signaux de l imprimante ou de tout autre dispositif et la broche de masse Certaines imprimantes ont une r sistance interne de 1000 ohms ce qui peut cr er des probl mes Dans les imprimantes sans probl me citons entre bien d autres EPSON SEIKOSHA OKI 170 LE LIVRE DU 64 Le port du CIA NMI est consacr aux signaux du bus s rie IEEE la sortie RS 232 et la s lection de banc m moire du VIC II bits 0 et 1 adresse 56576 ou 0000 Ce point est d ta
303. n service Attention Les E S tant inaccessibles il ne faut faire aucun acc s des p riph riques pendant le transfert Deux m thodes sont possibles BASIC ou langage Machine Voici la m thode BASIC directe RAM ROM MAX POKE 56334 PEEK 56334 AND 254 POKE 1 PEEK 1 AND 251 FORI O TO MAX POKE RAM I PEEK ROM I NEXT I POKE 1 PEEK 1 0R 4 POKE 56534 PEEK 56334 0R1 Vi E vw ba La ligne 1 supprime les interruptions normales si on emploie d autres interruptions comme en modes graphi ques mixtes effectuer aussi un STOP RESTORE avant le programme ci dessus La ligne 2 met les E S hors service La ligne 3 transf re MAX octets de la ROM partir de l adresse ROM vers la m moire normale partir de l ad resse RAM 111 LE LIVRE DU 64 La ligne 4 remet les E S en service La ligne 5 r tablit les interruptions du clavier etc Fama ue e Th a au TE Bio Tul WA LA COULEUR DE L ECRAN La couleur du fond se programme en 53281 la couleur du bord se programme 55280 le choix des couleurs se fait parmi les valeurs 0 15 ORANGE BRUN ROSE FONCE MOYEN CLAIR CLAIR PALE 0 H 2 3 4 5 6 7 112 LE LIVRE DU 64 La couleur du trac r alis avec PRINT peut se contr ler avec les codes suivants CHR xxx COULEUR TRACE N COULEUR 144 NOT g 1 2 3 A 5 6 7 8 9 peut bien entendu inverse
304. ne cependant pour la grande majorit des cas 1 REM DE NEW AUTO 2 REM 3 REM PERMET DE RECUPERER UN PROGRAMME BASIC 4 REM EN POUSSANT SUR RESET 5 REM APRES RECUPERATION TAPER CLR REM DESCEND LE SOMMET DE BASIC EN 58000 10 CS 0 FORI 32768T032798 READA A CS CSHA NEXTI 20 5 lt 284 7THENSTOP 30 POKE52 128 56 128 NEW 32768 DATA 9 128 94 254 195 194 205 56 32776 DATA 48 160 8 141 2 8 32 51 32784 DATA 165 24 165 34 105 22133 45 32792 DATA 165 35 105 0 133 26 96 55555 SAVE G0 DE NEW AUTO B READY DESSIN Au chargement de petites toiles apparaissent au fur et mesure de la cr ation en m moire des dessins de lutins partir des DATA Le curseur lutin crayon appara t ensuite au centre de l cran Le curseur se d place volont en manipulant le joystick raccord au CONTROL PORT 2 Le bouton de tir ram ne le curseur au centre La touche CLR efface l cran dont la r solution est ici de 40 25 1 pixel 1 caract re Les touches de fonctions modi fient le type de curseur Fl crayon avec pointe F5 crayon sans pointe F5 gomme F7 curseur invisible 199 LE LIVRE DU 64 Remarquer l usage de la variable BIC qui indique le type de curseur 200 3 REM XN dedededsedede deese dede e eck dese kekok ehe dede de e eee REM 5 REM DESSIN AVEC JOYSTICK 2 EN 6 REM 7 REM BASSE RESOLUTION MONOCHROME 9 REM kkkkkkkk kkkkkkkk
305. ng de quelques six cents octets Il pour utilit de transformer un programme langage machine qui se charge normalement une adresse diff rente de BASIC m me derri re les ROM BASIC et KERNAL en un programme qui se charge normalement 253 LE LIVRE DU 64 Exemple le programme PRINTER se charge en m moire de CF5A CFF9 et est d marr par SYS 53082 Sans SAUVEUR LOAD PRINTER 8 1 NEW SYS 55082 Apr s avoir utilis SAUVEUR LOAD PRINTER 8 RUN Mode d emploi 1 LOAD SAUVEUR et RUN 2 A la question DISK Y N r pondre Y si on utilise la disquette N si on utilise la cassette 3 LOAD PRINTER 8 1 charge le programme modifier 4 NEW remet 0 les pointeurs du BASIC 5 PRINT USR 53082 communique SAUVEUR l adresse de d part du programme modifier 6 SAUVEUR redescend le programme en m moire basse et y ajoutele SYSde d marragequi le retransf rera sa place et le lancera 7 SAVE PRINTERMOD 8 sauve le programme modifi sur disque Pour la cassette remplacer 8 par 1 au point 7 Attention SAUVEUR occupe en m moire les adresses CE00 CFDI Il ne convient donc pas pour les programmes occupant cette zone n peut charger SAUVEUR avec M N ou ventuellement avec MON Pour sauver SAUVEUR avec MON taper S SAUVEUR 08 0801 0A22 M 0801 08 OA 00 9E 20 32 30 M 0809 36 34 00 00 00 00 00 A5 M 0811 2D 85 FB
306. nne l adresse de chargement d un disquette 2 REM ADRESSE DISQUE 39 Greg INPUT NOM DU PROGRAMME AS BS CLOSEl 40 OPEN Pa AE ADRESSE DE DEBUT NTASC AS4C CE J42 56rASC B C END E DISQUE 8 READY 184 programme sauv sur ANNE AU LE LIVRE DU 64 D monstration de la modulation en anneau du S I D 203 REM MODULATION ANNULAIRE oeren OPORTIONNEL CT 2 PRINT MODULATION ANNULAIRE a PRINT CHOIX DE LA FREQUENCE GC YOIX AUX PRINT PRIN PRINT PROPORTIONNELLE 2 2 PRINT PROPORTIONNELLE 9 97 256 Sp PRINT FIXE HZ PRINT PROPORTIONNELLE HI SS 60 INPUT e 28 5 6 OU OsFIN 65 IF B O TH 70 5 54272 GOSUB 900 VL 15 AR 1 6 4 71 IFB lt 3THEN AR 16 75 DE AR l 80 AD 9 16 11 SR 12 16 9 POKE S424 VL 110 111 120 125 126 130 840 850 860 899 900 555 RESTORE POKE S 5 AD Me DU SR POKE S419 AD POKE 5 00 READ N D lF N OTHEN 208 18900 RUN POKE 511 N POKES 4 DE PORE S415 N POKES H 48 ON B GoSUb 0 400 55 600 700 800 S ON B K 300 450 450 450 450 850 6070120 DATAS hp 2B f UE ERN ES SE 205 FOR TD 0TO50 D NEXT RETURN REM NORMAL REM NORM PROE AU VOLUME POKE S 15 N POKES H 8 1 FOR TD 0TO8 D POKE S PEEK S 28 4 NEXT RETURN FIN PROP AU VOLUME POKES 8 16 GOTO410 REM PROP 2 POKE 5 15 N 2 G0T0300 REM FIN PROPORTIONNEL POKES H 8 AR GOTO300 REM PROP 257 256
307. ns de couleur Un autre inconv nient des modes BITMAP est li ses avantages on a acc s chaque PIXEL de l cran mais il n est plus possible d crire un caract re en une seule op ration il faut envoyer 8 octets l cran pour tracer un caract re Les 124 LE LIVRE DU 64 programmes sont donc au minimum 8 fois plus lents et le langage machine devient indispensable ou le SIMON S BASIC et mieux encore le FORTH Les avantages compensent cependant largement les d savantages le CBM 64 atteint avec le mode 6 la qualit d une image t l vis e presque une photo De fantastiques exemples de graphiques sont fournis avec les programmes de dessin comme le PAINTER Le mode 6 donne acc s 64 000 points 320 en horizontal 200 en vertical Les couleurs accessibles dans ce mode sont restreintes un choix de 2 couleurs par bloc de 8 8 points Pour entrer en mode 6 il faut modifier un bit du registre 53265 mode 6 POKE 53265 PEEK 53265 OR 32 Retour mode 1 POKE 53265 PEEK 53265 AND 223 Mais cette instruction seule ne suffit pas car il faut aussi pr parer et r server l emplacement m moire que le BITMAP va occuper Nous pr f rons toujours contrairement beaucoup d autres utilisateurs du CBM 64 positionner notre cran en haut de m moire RAM derri re la ROM du KERNAL ceci dans le but de ne jamais empi ter sur la zone de m moire BASIC de 38K ou 30K avec les cartouches SIMON S BAS
308. nt cha ne Les fonctions num riques ordinaires sont SGN INT ABS SQR LOG EXP COS SIN TAN et ATN Ces fonctions ont un seul argument num rique flottant ou entier qui peut tre une expres sion plus ou moins complexe l valuation d une expression est effectu e par la routine EVAL en Celle ci est en fait 1 partie calculateur de l interpr teur BASIC Les op rations l mentaires intervenant dans chaque expression sont valu es dans l ordre de priorit alg brique parenth ses les plus int rieures d abord puis exposant logarithmes multiplica tion etc Le r sultat de chaque op ration l mentaire est toujours pr sent dans l accumulateur flottant FLP1 la fin de la routine correspondante Pour l valuation des op rations deux arguments l ACCU FLP 2 est temporairement utilis Par exem ple SGN n cessite l valuation de l valeur de l argument BASIC v rifie qu un et un seul argument est pr sent l aide de la routine EVAL Ensuite la routine SGN teste la valeur de l exposant de l accu Si celui ci est nul le r sultat est 0 et la routine se termine avec 0 dans l ACCU que SGN laisse d s lors inchang Si l exposant est diff rent de 00 la routine teste le bit de signe de la mantisse de l ACCU FLP 1 et suivant sa valeur d pose 1 ou 1 dans l ACCU FLP1 De m me la routine INT convertit 1 valeur en d cimal annule la partie fractionnaire et reconvertit le
309. ntre BASIC et KERNAL passe presque chaque fois par un vecteur en RAM ce qui permet de modifier volont les entr es sor ties En ce qui concerne le BASIC proprement dit les diff rents sous programmes ne s appellent entre eux que de fa on tr s restreinte 24 LE LIVRE DU CBM 64 Presque chaque fois les arguments transmettre entre sous programmes sont stock s en m moire RAM en page 0 g n rale ment Cette m thode permet chaque l ment de l interpr teur BASIC de faire appel toute une s rie de rep res est on en mode direct en mode guillemets quel est le p riph rique de sortie un moment donn etc La transmission des param tres entre sous programmes est le plus souvent syst matis e comme suit si un seul param tre entier d un seul octet de long est transmettre on emploie usuellement l accumulateur du 6510 le registre A Si le para m tre est un nombre entier cod sur deux octets valeur comprise entre 0 et 65535 on emploie les registres Y et A l octet de poids faible dans le registre A l octet de poids fort dans le registre Y Exemple pour imprimer une cha ne de caract res il faut transmettre la routine d impression l adresse m moire du premier caract re de la cha ne Donc pour imprimer COMMODORE 64 BASIC V2 message pr sent en m moire en E479 on effectue le programme suivant LDA 79 LDY E4 voir d tail de cette routine JMP ABIE en fin de chapitr
310. oc de 64 octets dont le 64i me est inutilis N de ligne octet L 3 octet 1 3 1 octet 1 3 2 158 LE LIVRE DU 64 Les 63 octets sont arrang s en 21 rang es cons cutives de trois octets octet 0 octet 1 octet 2 octet 3 octet 60 octet 61 octet 62 La cr ation du dessin d un lutin peut se faire sur du papier quadrill ou plus ais ment avec l aide d un programme diteur de lutins SPRITE EDITOR comme il existe beaucoup Les lutins multicolores ont comme l cran en mode 7 des points de double largeur d finis sur 2 bits au lieu d un mais en quatre couleurs La position en m moire d un lutin est d finissable sans probl mes l adresse de d part de la zone de d finition tant toujours un multiple de 64 on appellera NUMERO DE BLOC ADRESSE 64 Le num ro de bloc est bien entendu compris entre 0 et 255 puisque le VIC II n acc de qu 16K de m moire la fois et que 16K 64 256 Il est donc bien vident que les m moires LUTINS doivent tre dans le m me banc de 16K que les autres pointeurs video cran g n de caract res etc Avec l cran normal l adresse 1024 et le BASIC d butant en 2048 seuls les blocs 15 14 et 15 sont utilisables sans repro grammer le VIC II adresses 832 896 960 Ici encore il y a un tr s net int r t d placer l cran dans un autre banc Prendre le banc 2 par exemple et le prot ger du BASIC lib re les adresses 32768 40960 po
311. ocker Il ll commandes de ce type INPUT INPUT LOAD SAVE VERIFY PRINT PRINT CMD OPEN CLOSE et GET Les entr es sorties dans les ordinateurs COMMODORE passent presque toutes par les deux m mes points la routine CHROUT de sortie en FFD2 et 1a routine d entr e CHRIN en FFCF Or pour l utilisateur une entr e et une sortie ce n est pas suffi sant le KERNAL simule donc pour l utilisateur diverses en tr es et sorties Ainsi l utilisateur d finit lui m me vers o se dirigent ses sorties et d o viennent ses entr es il les adresse par un num ro de fichier logique est plus souple d utiliser un fichier logique qu un p riph rique physique comme sortie Ainsi le m me programme identique peut envoyer des donn es l cran ou l impri mante en modifiant simplement l instruction OPEN Ainsi donc le syst me utilise des num ros logiques de fichiers des num ros physiques de sorties et entre les deux un seul canal d acc s Donc le CBM ne peut acc der deux p riph riques de sortie ou deux d entr e simultan ment La liaison que BASIC et KERNAL r alisent entre fichier logique et p riph rique physique est d finie par l utilisateur gr ce la commande OPEN Les num ros de fichiers logiques peuvent tre n importe quel nombre entier compris entre 1 et 255 Il ne peut y avoir plus de 10 fichiers ouverts simultan ment Les num ros de p riph riques sont pr d finis car ils d
312. omme pour les 8 instructions de ce groupe si le mot cl est suivi d un param tre S il l est il ex cute imm diatement la routine d erreur test est simple Si l interpr teur BASIC est arriv la routine END dra peau Z 0 c est que celui ci t positionn par et CLR la routine CHRGOT qui a d cel que le premier carac t re qui suit END est nul fin de ligne La routine d erreur qui se situe en A45A est alors ex cut e En entrant dans cette routine le registre X doit contenir le num ro du message d erreur afficher Voir la table des messages d erreurs en A19E Si il n y a pas de param tre BASIC teste si l on est en mode direct Si c est le cas il enl ve l adresse de retour celle de l interpr teur de commandes de la pile et saute l adresse 4474 Le message READY s affiche et l interpr teur BASIC red marre l interpr tation dans le tampon d entr e en 0200 noter que l arr t d un prog ramme par la touche STOP ex cute l instruction END apr s avoir affich BREAK La routine END avant de retourner au mode direct a sauv 3D et 3E le pointeur d interpr tation de la routine CHRGOT En r tablissant le poin teur en 7A 78 1 commande CONT fait red mar rer l interpr tation l o elle s est arr t e pour autant que l on n ait pas commis la moindre erreur entretemps ni modifi le programme Les pointeurs de fin de variables et de fin de tableaux son
313. on na tre exactement la dur e d un v nement pr cis Nous comprenons maintenant pourquoi l cran est teint pendant les acc s la cassette Les utilisateurs de CBM 64 qui poss dent un lecteur de disquettes se sont probablement tous rendus compte des probl mes que peut poser la pr sence de lutins sur l cran pendant les op rations de LOAD ou de SAVE sur disquette En conclusion un bon conseil Effacez toujours de l cran les lutins avant de travailler avec un p riph rique raccord sur le bus s rie IEEE 17 LE LIVRE DU 64 18 LE LIVRE DU CBM 64 CHAPITRE 2 LES PROGRAMMES INTERNES DU 64 L INTERPRETEUR BASIC l achat d un CBM 64 un seul programme est fourni par COMMODORE c est l interpr teur BASIC C est aussi et de loin le plus utilis de tous les programmes existant sur le CBM 64 un point tel d ailleurs que bien des utilisateurs de micro ordinateur ne savent m me pas que BASIC est un programme On cite en g n ral BASIC en tant que langage Or aucun ordina teur pas m me le 64 ne peut comprendre ce langage La langue maternelle du 6510 cerveau du CBM 64 est ce qu on appelle le langage machine L interpr teur BASIC est le programme qui traduit les commandes BASIC et Les convertit en ordres ex cutab les par le 6510 Le fait que le BASIC est avant tout un prog ramme et non avant tout un langage est extr mement important c est en connaissant bien le programme que l on pourra effica ce
314. on d sire un filtre r jection POKE S 24 05 FI VL Il faut noter que comme les autres registres 5 5 23 le registre S 24 peut tre programm mais jamais relu Il faut donc bien conserver les valeurs des diff rents param tres utilis s pour connaitre l tat de ce registre un moment donn Voir en annexe le programme FILTRES pour les exemples D AUTRES CHOSES ENCORE Bien des choses merveilleuses peuvent tre r alis es avec le SID C est en exp rimentant ce domaine que l on en tirera le meilleur parti Des effets sp ciaux tels que bruits de train applaudissements Moteurs etc peuvent tre obtenus avec une ou deux voix programm es en g n rateur de bruit et en modifiant en permanence les registres de contr le des filtres et de la synchronisation Une excellente source d effets sp ciaux est la modulation de la valeur d un registre par la lecture du registre d enveloppe 3 S 28 On en trouvera un exemple en annexe avec le programme EXTRATERRESTRE effet haut parleur tournant ou PHASING LES 2 ENTREES ANALOGIQUES les registres S 25 et S 26 du SID permettent la lecture des valeurs POT X et POT Y Ces valeurs varient de 0 255 suivant que les r sistances des poign es de jeu sont faib les ou fortes Les poign es de jeu de l un ou l autre connecteur CONTROL PORT sont s lectionn es par les bits 6 et 7 du CIA IRQ La lecture de ces valeurs en BASIC est tr s peu fiabl
315. onde 128 LES FONCTIONS SONDRES SPECIALES LES ENVELOPPES SPECIALES La forme de l enveloppe est s lectionn e comme on l a vu ci dessus par les param tres A D S R et par le bit 0 du registre de contr le Il faut savoir que le g n rateur d enveloppe lorsqu il est d clench bit de contr le 1 d marre la phase A attaque c est dire que le volume augmente un taux programm mais et c est l l important partir du volume actuel de la voix concern e Si la note pr c dente n tait pas termin e le volume r augmente partir de la valeur atteinte au moment du d clenchement et non partir de 0 Il passe ensuite si on lui en laisse le temps par la phase D pour se stabiliser au volume S de maintien Mais si ici aussi on d clenche trop t t la remise z ro du bit de contr le le cycle de d croissance du volume R com mence instantanement m me si la note pr c dente est encore en phase ou D En conclusion on constate qu il est possible en contr lant les d lais entre mise un et mise z ro du bit de contr le de ma triser totalement la forme de l enveloppe La figure ci dessous montre comment r aliser une enveloppe plu sieurs paliers VOLUME L ENVELOPPE D DECROISSRNCE MAINTIEN NR CRELACHEMENT CATTAQUE gt d N TEMPS LES ENVELOPPES SPECIRLES 2 78 M Ze SASA NRA TEMPS R 2 VOLUME 155 LE LIVRE DU 64 Il est certain que la maitris
316. ontient 1 on effectuera en entr e l adresse secondaire tablie par SETLFS est 0 les informations d adresse de chargement contenues au d but du fichier sur le disque ou la cassette seront ignor s et les registres X et Y doivent contenir l adresse de d but de chargement partie basse dans X partie haute dans Y Le LOAD normal du BASIC emploie cette routine avec 0801 dans X et Y Pour un LOAD absolu c est dire dont l adresse de d but de chargement est lue dans le fichier lui m me il faut utiliser l adresse secondaire l En sortie les registres X et Y contiennent partie basse partie haute l adresse du dernier octet charg 1 Elle modifie les registres A X et Y Appel par LOADPR LDA 08 LECTEUR DE DISQUES LDX 05 SFICHIER LOGIQUE 5 LDY 01 ABSOLU JSR SETLFS L0 D 8 1 LDA 05 NOM DE LONGUEUR 5 LDX lt NOM LDY gt NOM 3 ADRESSE DU NOM JSR SETNAM LOAD ESSAI 8 1 LDX 00 ADRESSE DE CHARGEMENT LDY 00 3 SANS IMPORTANCE LDA 00 LOAD PAS VERIFY JSR FFD5 EFFECTUE LOAD STX FINAD 3RANGE L ADRESSE DE FIN STY FINAD 1 FINAD RTS NOM BYTE ESSAI 3 NOM FINAD WORD SE METTRA 3L ADRESSE DE FIN NOTE Si le 08 est remplac par 01 pour acc der la cassette il faut ajouter au d but les lignes ci dessous pour obtenir l cran les messages du KERNAL comme PRESS PLAY etc LDA 80 STA 9D 3AUTORISE MESSAGES FFD8 SAVE F
317. ou de CLRCHN Toutes les remarques faites ci dessus pour la routine CHKIN restent valables Elle modifie A et X Les erreurs peuvent tre lues par READST Appel par LDX 01 FICHIER 1 JSR FFC9 A UTILISER EN SORTIE Cette routine r tablit les canaux d entr e sortie vers le clavier et l cran 11 faut appeler cette routine pour r tablir les aiquillages modifi s par CHKIN et CHKOUT vers les p riph riques 0 et 3 Entre autres en refermant un canal ouvert vers un p riph rique IEEE la routine CLRCHN envoie UNTALK ou UNLISTEN sur le bus Ne pas appeler cette routine apr s une communication peut conduire des erreurs sur le bus IEEE Par exemple laisser un canal de sortie ouvert l imprimante et un canal d entr e ouvert sur le disque peut donner une copie sur papier de tous les octets envoy s par le disque Cette routine est appel e d office par CLALL Appel par ISR FFCC FFCF CHRIN FFD2 CHROUT FFD5 LOAD LE LIVRE DU 64 Cette routine lit un caract re sur le canal d entr e normalement le clavier sauf apr s appel de OPEN et CHKIN Elle ne modifie pas les aiguillages des routines d entr e Si le canal d entr e est le clavier il se passe diverses choses li es l diteur d cran Le premier appel CHRIN fait apparaitre le curseur clignotant Le curseur reste ensuite visible jus qu la frappe au clavier d un caract re 13 RETURN A ce moment tous les caract res de la ligne o se
318. ouleur de trac choisir parmi 16 et la couleur du fond En mode 3 chaque point peut prendre 4 teintes diff rentes 5 couleurs communes appel es couleurs de fond 0 1 et 2 et la couleur propre au caract re comme dans les modes 1 et 2 121 LE LIVRE DU 64 Couleur de bord 0 POKE 53280 COULEUR Couleur de bord 1 53282 COULEUR Couleur de bord 2 POKE 53283 COULEUR avec 0 lt COULEUR lt 15 La couleur du caract re est rang e dans la RAM couleur correspondant ce caract re Mais ici les choses se compliquent En effet nous n avons pas encore pr venu le VIC II qu il doit interpr ter l cran comme tant multicolore Pour cela il y a deux conditions 1 Programmer le VIC II par POKE 53270 PEEK 52270 OR 16 suppression du mode multicolore par 55270 55270 AND 239 2 Utiliser les couleurs 8 15 pour le caract re consi d r C est important car cela rend possible l usage de caract res programm s en mode 2 et 5 la fois sur le m me cran En effet pour les couleurs 0 7 le VIC II continuera utiliser le mode 2 et nous pouvons donc continuer utiliser en 8 couleurs maximum les caract res d finis en 8 8 points On voit que la couleur du caract re programm ne peut tre choisie que dans une palette de 8 couleurs Ces derni res sont d ailleurs les couleurs num rot es 0 7 normalement Le choix des 3 couleurs de fond s op rant dans des registr
319. ouleur du registre 53287 N couleur propre couleur lutin 1 registre 53286 11 Chaque paire de bits horizontaux sont consid r s comme des pointeurs de couleurs 3 tant communes tous les lutins et une programmable par lutin comme au paragraphe ci dessus On d finit un lutin multicolore par POKE 53276 PEEK 53276 OR 2 N 0 lt lt 7 On revient au mode monochrome par POKE 53276 PEEK 53276 AND 255 2 N LES PRIORITES DES LUTINS Chaque lutin priorit sur ceux de num ros plus lev s que lui la priorit d un lutin par rapport aux donn es affich es l cran peut se programmer A nouveau un seul registre contr le 145 LE LIVRE DU 64 cela chaque bit d finit la priorit d un lutin par rapport au fond Un lutin passe devant le texte si sa priorit vaut 0 s il passe derri re sa priorit vaut 1 Pour que le lutin N passe derri re le texte POKE 53275 PEEK 53275 OR 2 N Pour que le lutin passe devant le texte POKE 53275 53275 AND 255 2 N LA DETECTION DES COLLISIONS Une collision est par construction du CBM 64 un v nement o un lutin rencontre un autre lutin ou le texte de fond de fa on ce que au moins un bit vale 1 pour chacun des l ments se trouvant exactement superpos s l cran Une exception est toutefois faite pour la paire de bits 01 en mode multicolore qui ne d clenche pas les collisions Ainsi pour un jeu o il con
320. ple du programme DESSIN BITMAP 1 Choisir le banc m moire du VIC II A l allumage nous avons le banc 0 donc on ne fait rien de sp cial Pour travailler dans un autre banc le 3 par exemple on utilise POKE 56576 PEEK 56576 AND 252 DR 3 BN o BN est le num ro du banc 2 Prot ger ventuellement la zone BITMAP du BASIC Voir d but de ce chapitre 3 D finir l adresse de la RAM ECRAN ligne 50 CO 1024 C est l que l on range les informations de 126 Ligne Ligne Ligne Ligne Calcul des Ligne 65 67 70 80 LE LIVRE DU 64 couleur POKE 55665 53665 OR 32 On passe en mode BITMAP HO 8192 C est l adresse du BITMAP POKE 53272 PEEK 53272 8 donne l adresse du BITMAP au VIC II FOR C 0 TO 7999 POKE HO C 0 NEXT efface l cran remet les 64 000 bits 0 FOR 0 TO 999 POKE CO 1 NEXT couleur de trac 0 noir couleur de fond z 1 blanc pour tout l cran l ments n cessaires au trac 250 R INT Y 8 C INT X 8 R et C sont les coordonn es verticales et horizontales du bloc de 8 8 points dans lequel se trouve le point X Y L Y AND 7 B 7 X AND 7 L est le num ro de la ligne 0 7 o se trouve le point X Y dans le bloc R C B est le num ro du bit dans l octet num ro L du bloc R C BY HO R 320 C 8 L BY est l adresse absolue de l octet se trouve le point X Y Nous
321. r le des lutins 289 157 145 LE LIVRE DU 64 290 CHAPITRE 5 Les registres du S I D Les enveloppes sp ciales Les balayages de phase e e seess e LE SON DU 64 ET LE CIRCUIT S I D La synchronisation des oscillateurs La modulation en anneau Les filtres 9 CHAPITRE 6 Le CIA IRQ Le d codage clavier Les registres du CIA IRQ LES ENTREES SORTIES PARALLELES ecc rs e 0 9 9 9 ss Les registres du NMI Le CIA NMI La porte parall le du 6510 Les imprimantes 1526 et MPS 801 802 Le lecteur de cassettes C2 N CHAPITRE 7 ANNEXE 1 ANNEXE 2 MON SVP Le bouton de RESET L indicateur de lecture de la E casette NOTICE TECHNIQUE LE DISQUE DU 64 9 5 9 0 es 9 9 9 9 9 0 9 9 LA CARTE MEMOIRE DU 64 s a TRUCS POUR ELECTRONICIENS su se PROGRAMMES DEMONSTRATIFS ess e e 59929999 147 148 155 156 156 157 158 161 183 240 261 285 286 286 287 288 LE LIVRE DU 64 R f ISBN 2 87111001 8 B C M soc
322. r sents dans le banc 0 aux adresses 1024 2023 0400 07E7 Chacune de ces cases m moire peut contenir 256 valeurs diff rentes 0 255 qui donnent le num ro du caract re afficher cet endroit Mais on s en rappelle le VIC II adresse non pas 8 mais 12 bits de donn es la fois Les 4 bits restants proviennent par une derni re astuce du d codeur d adresse du VIC II des adresses 55296 56295 0800 DCE7 qui contiennent chacune 4 bits c est dire 16 valeurs possibles qui donnent 1 couleur d affichage de ce caract re Cette m moire est d adresse immuable quel que soit le banc m moire choisi pour le VIC II Nous l appellerons RAM Couleur Quelle configuration faut il utiliser de pr f rence Nous verrons ci apr s les diff rents modes graphiques en d tail Iis peuvent se subdiviser en deux groupes les modes caract res et Les modes BITMAP haute r solution Le premier groupe n cessitant souvent l acc s au g n rateur de caract res ROM on utilisera donc le banc 0 ou le banc 2 Ce dernier sera pr f r si le CBM 64 n est pas quip d extensions ROM et si on veut programmer de nombreux caract res et lutins employer plusieurs crans etc En effet le banc 0 n offre que 15 K et non 16 K utiles les 1000 premiers octets tant occup s par le CBM 64 pour son usage personnel De plus le d placement obligatoire du pointeur de d but de BASIC complique le chargement des programmes Il est bi
323. r sultat en flottant ABS met 0 le bit 51 de la mantisse de l accu Les 7 autres fonctions BASIC simples sont en fait 7 varian tes d une m me routine SQR LOG EXP COS SIN TAN et ATN sont toutes valu es par la m thode du polyn me La fonction math matique applique l expression valu e dans l accumulateur flottant un polyn me propre chaque routine chaque polyn me est de la forme AX BX 2 CX 3 DX 4 o X est la valeur de l ex pression et D les constantes du polyn me voir les adresses des constantes en fin de chapitre Le premier octet de la table de valeurs d un polyn me est l ordre de ce polyn me c est dire le nombre de termes Le polyn me est valu par la routine POLY en E059 La m thode de calcul de COS et TAN est indirecte en fait BASIC n value que le polyn me de sinus Pour le cosinus la routine COS apr s valuation de 51 LE LIVRE DU CBM 64 l expression ajoute la valeur pi 2 stock e en E2E0 et value le sinus du r sultat par SIN Pour la tangente BASIC ex cute SIN sauve le r sultat dans une zone m moire libre en 4E ex cute ensuite COS puis divise la valeur du sinus en m moire par celle contenue dans l accu FLPl Le r sultat est la fin de 1 routine dans l accumulateur flottant et le tour est jou Il faut noter que pour des raisons de pr cision les math matiques imposent l usage de polyn mes d ordre impair La fonction arct
324. r couleur de fond et couleur de caract re par PRINT CHR 18 Inversion PRINT CHR 146 Fin d inversion LE MODE GRAPHIQUE NUMERO 1 Le mode 1 appell aussi mode caract res est disponible d s l allumage de la machine le dessin des caract res est pr programm dans la ROM g n rateur de caract res Toutefois il existe deux jeux de caract res possibles les caract res Majuscules Graphiques ou les caract res Majuscules Minuscules Pour acc der ce dernier jeu il y a deux m thodes en mode direct il suffit d appuyer simultan ment sur SHIFT et sur Cz Par programme il faut programmer le registre 53272 du VIC II En effet le dessin de chaque caract re occupant 8 octets chaque jeu de 256 caract res occupe donc 2048 octets ils occupent les adresses 53248 ou 55296 dans le banc B 113 LE LIVRE DU 64 Pour passer en MAJ GRAPH 55272 21 ou PRINT CHR 142 MAJ MIN POKE 53272 23 ou PRINT CHR 14 C est le KERNAL qui intercepte certains caract res dans les ordres PRINT pour effectuer cette programmation Deux autres fonctions annexes du KERNAL sont li es celle ci supprime l effet de SHIFT Cz PRINT CHR 8 autorise l effet de SHIFT C PRINT CHR 9 On trouvera en annexe les jeux de caract res ainsi que leurs codes La m thode la plus simple pour crire dans le mode 1 est le PRINT Les caract res de contr le CHIFFRE CTRL et CHIFFRE Cz permettent le choix des couleurs et de
325. rapide ment de facon croissante puis d croissante la valeur VL du prog ramme SYNCHRO en annexe LA SYNCHRONISATION DES OSCILLATEURS Chaque voix utilise le bit 1 1e bit de valeur 2 du regis tre 4 pour synchroniser son oscillateur principal sur celui d une 156 LE LIVRE DU 64 autre voix On peut ainsi synchroniser la fr quence de la voix 1 avec la voix 3 registre 4 voix 1 la voix 2 avec la voix 1 registre 4 voix 2 la voix 5 avec la voix 2 registre 4 voix 3 Par exemple programmons comme usuellement la voix 5 avec une forme d onde triangulaire et une enveloppe assez arrondie ADSR 8 6 12 6 Synchronisons la voix 1 avec la voix 3 en choisissant AR 18 16 2 La fr quence de la note et rien que cela vient des regis tres de fr quence de la voix 3 le registre de fr quence de la voix 1 impose alors la dur e d une note Bien entendu si les fr quences ont t programm es identiques rien ne se remarque Mais si chaque modification de la fr quence registre voix 3 on donne la voix 1 une fr quence diff rente plus lev e on g n re une plus ou moins grande quantit d harmoniques complexes mais en SYNCHRONISME avec la fr quence de base Il faut bien noter que seul le registre de fr quence est utilis dans la voix 5 et que l on n est pas oblig d couter cette voix pour la synchroniser Dn peut utiliser la fonction de synchronisation sur les 3 canaux Cependant il y a tr s peu d int
326. re types de variables diff rentes les flottantes les enti res les cha nes et les fonctions Dans un souci de simplification toutes les variables sont cod es sur 7 octets de long 2 pour le nom de la variable 5 pour la valeur L es pace m moire r serv au nom de la variable est de 2 octets Or BASIC accepte des variables avec des noms de longueur quelconque Mais attention Il ne reconna t que les deux premiers caract res le premier alphab tique le second alphanum rique Donc pour BASIC les variables FACTURE et FAMILLE ne forment qu une la variable FA Essayez FACTURE 0 FAMILLE 2 PRINT FACTURE Les caract res suivants des noms de variables sont pr sents dans le texte BASIC mais JAMAIS dans la zone variables l Variable flottante 5 octets Valeur flottante ec EM K Ee ler caract re 2me caract re du nom du nom M 29 LE LIVRE DU CBM 64 2 Variable enti re Les variables enti res sont des valeurs cod es sur deux octets en notation compl ment deux Le bit 7 z ro indique un nombre positif ler caract re 2me caract re du nom 0 0 0 bit7 1 d 3 OCTETS INUTILES Exemples de valeurs enti res Valeur d cimale MSB LSB 0 00 00 256 o1 00 4100 10 04 1 FF FF 2 FF FE 32767 7F FF 32768 80 00 3 Varisbles cha nes de caract res Les chaines de caract res ont des longueurs tr s diff ren tes mais toujours inf rieures 256
327. res standard X X tendu Caract res programmables X tendu Bitmap monochrome X Bitmap X X multicolore Avant de d tailler les diff rents modes graphiques regardons encore le processus de cr ation d images par le VIC II Deux m thodes diff rentes existent une pour les 5 modes caract res et une autre pour les 2 modes haute r solution 104 LE LIVRE DU 64 MODES CARACTERES 1 5 Dans les modes 1 5 3 zones de la m moire sont actives la zone POINTEURS la zone GENERATEUR et la RAM couleur La zone POINTEURS poss de toujours 1000 octets exactement correspondants aux positions de chacun des 40 caract res de chacune des 25 lignes de l cran Chaque octet ou pointeur pointe vers c est dire donne l adresse du morceau de la zone GENERATEUR qui contient le dessin du caract re On appelle usuellement cette zone L ECRAN La zone GENERATEUR contient le dessin de chaque caract re qu il est possible d afficher Un caract re se repr sente comme une s rie de points teints ou allum s de diff rentes couleurs Un caract re comporte 8 lignes de points et une ligne est toujours d finie par un seul octet 8 bits 11 y a donc 8 octets utilis s par caract re On voit donc que pour trouver l adresse du dessin d un caract re il faut 1 Prendre la valeur du pointeur dans la zone POINTEURS La multiplier par 8 Ajouter l adresse de d but du g n rateur de caract res dans la page de
328. rrec tement dans certains cas en particulier apr s un listing sur les p riph riques 2 ou 4 Exemple lister sur imprimante OPEN 1 4 CMD 1 LIST lt return gt PRINT 1 CLOSE 1 lt return gt Noter que LIST se terminant toujours par un retour au mode direct comme si on ex cutait END la seconde ligne de l exemple ci dessus doit donc tre tap e mode direct Les commandes LOAD SAVE VERIFY sont les commandes mettant le transfert des programmes d un p riph rique vers la m moire du 64 vice versa La syntaxe g n rale est iden tique pour les trois mots cl s LOAD PROG 8 1 Le premier argument est le nom de fichier le second l adresse primaire ou num ro du p riph rique le dernier l adresse secondaire Le nom de fichier est obligatoire pour le disque et pas pour la cassette Pour la cassette lors de LOAD ou VERIFY le nom de programme peut ne pas tre complet Exemple Si la cassette contient le programme ESSAI suivi du programme EST LOAD ES chargera le programme ESSAI LOAD EST chargera le programme EST En effet le test d identit des noms est seulement effec tu sur le nombre de caract res pr sents dans l instruction LOAD ou VERIFY Le num ro du p riph rique peut tre 1 ou un num ro entre 3 et 31 1 est 1 cassette les num ros sup rieurs trois doivent correspondre des lecteurs de disquettes un disque seul est usuellement en 8 L adresse secondaire p
329. rs ce message utilisera exemple le message LOAD 8 lt RETURN gt que l on rangera en C000 Il faut modifier la lon gueur de la cha ne de caract res et son pointeur comme suit En ESEF longueur de la cha ne En E5F4 partie basse du pointeur de cha ne 1 En E5F5 partie haute du pointeur de cha ne 1 valeurs en rom de ces 3 octets 09 E6 Table des poids faibles parties basses des adresses de d but de chacune des 25 lignes de l cran Les parties hautes de ces adresses sont rang es en m moire RAM en D9 F2 car elles sont susceptibles d tre modifi es lors du d placement en m moire de l cran voir en annexe le programme ECRAN Cette routine envoie sur le bus s rie IEEE la commande TALK parlez Cette routine envoie sur le bus s rie IEEE la commande LISTEN coutez Cette routine envoie un octet sur le bus s rie IEEE L octet doit tre pr sent en entr e en 95 Ne pas utiliser cette routine mais bien celle en EDDD Cette routine envoie une adresse secondaire sur le bus s rie IEEE puis remet le fil ATN au niveau bas pour signaler la fin d une commande entr e l adresse secondaire doit tre pr sente 95 apr s un LISTEN Idem mais apr s une commande TALK La routine attend ensuite la r ponse c est dire une impul sion positive sur le fil d horloge CLOCK du bus IEEE Cette routine envoie un octet de donn e sur le bus IEEE s rie E
330. rt du programme avec ADRESSE DISQUE 2 convertir cette adresse en hexa 3 calculer l adresse de fin en ajoutant l adresse de d but la longueur du programme qui est gale 256 fois le nombre de blocs signal au r pertoire du disque 4 convertir cette adresse en hexa 5 charger et lancer le moniteur MON et en sortir en tapant po qu 6 charger le programme en m moire avec un LOAD PROG 8 1 7 entrer en moniteur avec SYS 8 enlever le disque et le remplacer par le disque destination 8 taper la commande S PROG 08 XXXX YYYY o XXXX est l adresse de d but et YYYY l adresse de fin 1 du programme en hexa C est tout Une autre solution existe pour charger plus commod ment les programmes en langage machine qui ne se chargent pas l adresse du BASIC En utilisant le programme SAUVEUR en annexe on transforme un programme m moire haute en un programme ordinaire qui se charge en bas de m moire Le SAUVEUR le remonte ensuite sa place d finitive m me si celle ci est situ e derri re les ROM BASIC ou KERNAL Voir le mode d emploi d taill de SAUVEUR Nous n en dirons pas plus sur ce vaste sujet LES IMPRIMANTES 1526 ET 5 801 802 Elles ont le gros avantage de reproduire les caract res graphiques COMMODORE et de ne n cessiter aucune programmation Sp ciale Cependant la qualit et la vitesse d impression sont relativement faibles C est pourquoi ce livre d taille la fa on d inter
331. s intervenir le jeu d interrupteurs dont nous parlions ci dessus Ils permettront de faire passer soit la m moire soit les p ri ph riques sur le dessus de la pile L lectronique digitale d un ordinateur travaille en tout ou rien et le syst me binaire bas sur l emploi de 2 valeurs 0 ou 1 s y impose donc Les adresses d une m moire sont transmises par 16 fils qui conduisent 1 ou ne conduisent pas 0 du cou rant lectrique C est pourquoi les adresses de diff rents blocs LE LIVRE DU 64 de m moire commencent toujours tr s souvent en tout cas des valeurs qui sont des puissances enti res de 2 Les puissances de 2 exprim es en d cimal sont 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16584 32768 65536 Tr s souvent les lectroniciens et informaticiens travail lent avec des nombres en base l6 en hexad cimal La raison en para t vidente si l on regarde la table des puissances de deux en base 16 1 2 4 8 10 20 40 80 100 200 400 800 1000 2000 4000 8000 10000 La notation HEXA comporte les chiffres 0 9 suivis des lettres A B C D E F qui portent les valeurs d cimales de 10 11 12 15 14 et 15 Nous rep rerons tout au long de ce livre les valeurs HEXA en les faisant pr c der du symbole On trouvera en annexe le programme HEXA qui vous familia risera avec cette notation LES PERIPHERIQUES Les p riph riques vont tre d pos s par dessus la m moire
332. s quence pseudo al atoire Avec Xz0 une nouvelle s quence est red marr e mais l argument de l algorithme est une fonction de l horloge interne du CBM64 comptage en micro secondes dans les registres 4 5 8 et 9 du en 0 04 0 05 0 08 et DCO9 Pour obtenir un effet de hasard r aliste dans un prog ramme il faut employer RND 0 la premi re fois RND 5 les fois suivantes Il est en effet faux de croire qu un meilleur hasard est obtenu en employant chaque fois une s quence pseudo al atoire diff rente Chaque s quence pseudo al atoire donne 65556 nombres diff rents donc les risques de reconna tre un morceau de s quence de m moire sont faibles La fonction PEEK lit le contenu d une adresse m moire La valeur de PEEK X est donc comprise entre 0 et 255 Comme toutes les fonctions sa valeur est donn e en flottant Pour viter des erreurs d arrondi dues au mode flottant les manipu lations de valeurs OCTETS ont int r t tre rang es dans des variables enti res En effet BASIC dans ce cas effectue les arrondis n cessaires avec exactitude Exemple 144 PRINT STz AS NOTE PEEK ne lit que les m moires en service au moment de la commande Pour lire la m moire RAM sous les ROMS BASIC ou KERNAL il convient d utiliser le programme mettant les ROM hors service au bon moment voir le programme USR PEEK LEN VAL et ASC sont trois fonctions num riques dont les arguments
333. s le premier carac du nom de la variable ler caracte rej2me caract re premier du nom de la du nom de lafpointeur pointeur fonction fonction d finition ila variablelde la bit7 1 bit7 0 la fonction locale 02 fonction bas haut bas haut L usage de la zone VARIABLES peut tre rapide ou non suivant les programmes En effet la zone variables s agrandit de 7 octets chaque nouvelle cr ation de variable ce qui arrive des moments divers dans le cours du programme Bien s r CLR peut les effacer toutes mais le proc d n est qu re l gant L ordre chronologique de cr ation des variables d termine donc l emplacement physique de celles ci Lors de la recherche d une variable l interpr teur BASIC passe toute la table en revue S il ne la trouve pas il la cr e en fin de zone n a donc tout int r t cr er au d but du programme les variables les plus couramment utilis es comme les indices des boucles FOR NEXT par exemple Une simple ligne BASIC comme 1 Isl peut am liorer la vitesse d ex cution d un programme de plu sieurs Pour lister les variables existantes en m moire un moment donn on peut utiliser les pointeurs en 2D d but de variables et en 2F fin de variables pour rep rer la zone utile E Voyez en annexe le programme LISTVARIABLES Ce programme peut r sider en m moire en plus d un autre programme pour autant que la m moire so
334. s pas des ordinateurs A tout seigneur tout honneur examinons IF l instruc tion num ro 1 de l informatique Une instruction IF poss de toujours la structure IF condition THEN commande bien que le BASIC du 64 accepte aussi la structure IF condition GOTO num ro de ligne Cette derni re version permet d conomiser temps et place m moire THEN est alors sous entendu La commande qui suit THEN peut tre n importe quelle commande BASIC compris IF et 6070 La condition ne peut tre qu une valeur num rique Le branchement est effectu vers l instruction qui suit THEN si la condition n est pas ZERO Le branchement est effectu vers la ligne BASIC suivante si la condition est ZERO Une id e pr congue tr s courante si A vaut 1 et que l on crit IF lt gt 0 THEN PRINT on sait que PRINT sera ex cut parce que la condition est vraie Mais en fait lt gt 0 est une expres sion dont la valeur est 1 d o le branchement En fait IF A THEN PRINT est suffisant 39 LE LIVRE DU CBM 64 Une condition est une valeur Suivant qu elle est nulle ou non nulle deux actions diff rentes sont entreprises il est bien dommage de voir que seule ou peu pr s la structure IF AzB THEN est utilis e alors que des commandes telles que IF A THEN IF FNX A THEN ne se rencontrent que tr s peu Tout ceci provient de la m con naissance du fonctionnement de IF Caract risons le IF 1 THEN PRINT cec
335. s pour obtenir un terminal avec un clavier et un cran aussi proches que possible dans leur fonctionnement de ceux d un vrai terminal Par exemple la barre oblique inverse remplace la livre sterling Il a t test avec succ s la vitesse de 300 Bauds sur un MODEM connect un gros ordinateur PRIME n cessite bien entendu un coupeur RS 232 et accessoirement un gros ordinateur pour s y connecter 3 TERMINAL CARACTERES ASCII STANDARD POUR 64 4 2 BY V LABAYE amp B MICHEL COPYRIGHT 7 REM LE SOMMET DE MEMOIRE 32768 8 PORE64 3 0 644 128 9 POKE55 0 POKE 56 128 PCR aE 11 REM R COPIE ROM CARACTERE EN RAM 15 RAM 32768 ROM 53248 2048 256 1 16 PRINT pu PETIT INSTANT S V P 20 56334 PEEK 56334 JAND254 POKE 1 Ek AND251 30 FORI OIO 7 POKERAM HL PEEK N XTI 31 FORI 8TO215 POKERAMH PEEK ROM tI 512 32 FORI 21 6105 1 1 POKERAMHI NEXTI 33 FORI 512T0727 POKERAMH PEEK ROMH 512 NEXTI 34 FORI 7 2 8TOMAX PEEK ROMH NESTI 20 1 1 JOR4 POKE 56334 FEEK 56 SL 60 FORI iTO7 RE D AD FORJ UTO REA LPOK ADTJ A NEXTJ I REM SP CIAUX 70 56576 197 VIC II DANS 90 532 2 32 REM ECRAN 34816 EN CAR DAR 32768 110 REM DIT U KE SS O EST L CRAN 120 Sin 34816 2 130 PRINTES OAI GRO TERMINAL 64 EFFACEMENT ECRAN RVS ONJFLIRV S
336. sables en pratique Nous avons vu plus haut comment choisir un banc m moire pour le VIC II il nous faut aussi choisir une adresse pour la zone des pointeurs et du g n rateur Si A Pointeur cran B Pointeur g n rateur de caract res dans le banc de 16 K du VIC II BN Num ro du banc m moire du VIC II 108 LE LIVRE DU 64 On programme cran et g n rateur par POKE 53272 A B Adresse r elle cran EC 3 PEEK 56578 AND3 16384 A 64 Adresse r elle g n rateur GEN 3 PEEK 5657B8 AND3 16384 B 2048 sauf si DN 0 ou 2 et 4 ou 6 auquel cas GEN 53248 ROM dans le banc B 4 55296 ROM dans le banc B 6 o et proviennent du tableau ci dessous ADR GENERATEUR VALEUR ADRESSE ECRAN VALEUR DECIMAL HEXA B DECIMAL HEXA A B 4 6 ROM dans les bancs 0 et 2 peuvent tre inaccessibles au VIC II si le g n rateur de caract res ROM est la m me adresse dans les bancs 0 et 2 109 LE LIVRE DU 64 LA MEMOIRE ROM GENERATEUR DE CARACTERES Le g n rateur de caract res est contenu dans une ROM de 4 K situ e en 0000 dans le banc B Elle est toujours accessible au VIC II si le banc m moire 0 ou le banc m moire 2 est actif eec PERIPHERIGUES EE 4E mmm IERI e DE DHEHCTEREE Ap VT LLRFFFBEMERRTEUR DE CHRRCTERES 4 fi EE E SEH Ok Zen CARTOUCHE ROM m H Za E RE
337. t EN 1020 AD 4184 8 COSUB2000 REM READY gt PRET 1030 POKE41833 0 REM SUPPRIME ERROR 1040 AD 49152 REM MESSAGES EN C000 1050 TA 41768 REM ADRESSES DES MESSAGES 1060 FOR MS 1T1029 GOSUB3000 1065 GOSUB2000 NEXT MS 1070 B INT AD 256 POKEA3086 B 1080 B AD 8 256 P KEA3084 1090 READAS AS CHRS 13 HCHIRS 10 4A 1100 L LEN 1110 GOSUB3000 GOSUB2045 MESS BREAK 1120 POFEAD O AD AD 1 RETURN 1999 REM kdedek 2000 REM UN MESSAGE EN MEMOIRE 2010 REM L ADRESSE AD AVEC LE BIT 7 2020 REM DU DERNIER CARACTERE 1 2030 REM AD EST PRET POUR LE SUIVANT 2040 READ AS L LEN 2045 REM GOSUB ICI AV C AS ET L 2050 FOR I 110 1 1 2060 B ASC MIDS AS I 1 POKE AD B 2080 PORE AD ASCC SES 1 0R128 R R 2999 PRINT H RETURN 3000 REM ECRIT EN TA L VALEUR AD 3010 REM SUR 2 OCTETS PARTIE BASSE 3020 REM PARTIE HAUTE A LA FIN TA ST 3030 PRET POUR LE SUIVANT 3040 B INT AD 256 POKE TA 1 B 3050 B AD B9256 P KE TA B 3999 42 RETURN 10000 DATA PRET 2 ESPACES 10010 DATA ERREUR TROP DE FICHIERS 10020 DATA ERREUR FICHIER DEJA OUVERT 10030 DATA ERREUR FICHIER PAS OUVERT 10040 DATA ERREUR FICHIER INTROUVABLE 10050 ERREUR PERIPHERIQUE ABSENT 10060 DATA ERREUR PAS OUVERT POUR ENTREE 10070 DATA ERREUR PAS OUVERT POUR SORTIE 10080 DATA ERREUR NOM DE FICHIER MANQUQNT 10090 DATA ERREUR NUMERO DE PERIPHERIQUE ILLEGAL 10100 DATA
338. t 1 valeur 8 Dans l exemple ci dessous vaut 250 Le masque c est dire l octet o tous les bits que l on doit conserver valent 1 vaut donc 255 8 247 No du bit 7 6 5 4 5 2 1 0 Valeur du bit 128 64 32 16 8 A 2 1 1 1 1 0 0 1 1 0 230 MASQUE H H 1 1 0 1 1 1 247 H e N o A AND MASQUE H o VALEUR DU BIT APRES OR 1 1 1 0 1 1 1 0 2238 En BASIC AND 247 OR 8 Pour mettre le bit 3 0 on aurait simplement crit AND 247 OR O ou A AND 247 On voit donc que pour positionner des bits des valeurs quelconques dans un octet il suffit d une ligne BASIC avec AND suivi de OR Forme g n rale A B AND C OR D Ces op rations doivent tre bien comprises car elles servent tout moment dans l tablissement des images graphiques dans le CBM 64 Les op rateurs de comparaison lt gt sont tr s utiles car tr s employ s regardez entre IF et THEN AB est une valeur on dit une valeur logique car A lt B ne peut prendre que deux valeurs l vrai ou 0 faux Les op rateurs de comparaison peuvent tre group s par deux comme gt pour signifier plus grand ou gal ou lt gt pour signifier dif f rent 26 LE LIVRE DU CBM 64 On emploie les op rateurs de comparaisons dans les instruc tions conditionnelles comme IF THEN ou dans les expressions conditionnelles Celles ci sont
339. t INPUT Si toutefois il est d sirable de tester le clavier pour par exemple tester l enfoncement de certaines touches bien pr cises on peut interdire les instructions IRQ par POKE 56555 127 et les r tablir par POKE 56333 255 0n peut lire le clavier par une routine sp ciale qui crit une valeur dans le port A et relit l tat du port B par POKE 56520 RANGEE et PRINT PEEK 56321 Il faut bien entendu r tablir les interruptions avant tout usage de GET ou INPUT et m me pour pouvoir utiliser la touche STOP STOP RESTORE fonctionne toujours heureusement dans ce cas 0n notera que le tampon de clavier peut contenir 10 carac teres Mais c est modifiable ram ne cette valeur 1 par POKE 649 1 et m me 0 par POKE 649 0 ce qui interdit toute frappe au clavier R tablir la fonction ensuite par POKE 649 10 n est cependant pas facile Lei LE LIVRE DU 64 CIA IRQ 0C00 s lection JOY STICK poignees bouton dr gau bas lection rang e clavier L 20 6 bouton dr gau em lecture colonne clavier MINUTERIE horloge second MEIN Ee EU 5423 REGISTRE A DECALAGE E nterr RS232 a min b os jeu le de la mi i hertz DCOF gt de la mi A noter galement l adresse 197 contient la valeur d cod e du balayage clavier Pas de touche enfonc e PEEK 197 64 RETURN enfonc PEEK 197 1 ESPACE
340. t non la commande SYS amp 0SUB et RETURN GOSUB est identique au GOTO avec un suppl ment l adresse et le num ro de ligne de l instruction en cours sont pr alablement sauv s dans la pile pour tre ensuite r utilis s par RETURN De m me RETURN est un GOTO avec le param tre lu dans la pilee et non dans le corps du texte La pile peut contenir outre 58 LE LIVRE DU CBM 64 des adresses de retour de sous programmes en langage machine deux types de donn es Les blocs FOR et les blocs GOSUB Ce dernier est constitu de 5 octets Bloc GOSUB ler octet 2 me 3 me 4 me 5 me num ro de ligne pointeur du premieur carac BASIC du GOSUB t re apr s le GOSUB L instruction RETURN scrute la pile en remontant depuis la valeur SP vers le haut puis trouvant le premier bloc qu elle y rencontre et donc le dernier qui y a t mis l en retire pour ensuite se rendre cette adresse et y continuer l interpr tation 4 LES BRANCHEMENTS CONDITIONNELS Ils sont les commandes les plus fondamentales de l infor matique En effet toute l intelligence des ordinateurs est concentr e dans ces seuls mots FOR et NEXT IF et THEN ON et WAIT Ces commandes sont d ailleurs des variantes du m me con cept une action est r aliser seulement dans certains cas les conditions Sans les instructions conditionnelles l infor matique d aujourd hui serait l ombre d elle m me des ma chines crire trier etc mai
341. t ou tablit le pointeur de bas de m moire BASIC Usage semblable la routine ci dessus ROUTINE de BREAK Elle restaure tous les p riph riques et revient BASIC READY L appel par SYS en BASIC est toujours possible Il suffit d ex cuter un SYS suivi de l adresse d un octet de valeur z ro l instruction BRK de l assembleur 00 en langage machine est en fait une simulation programm e de routine d interruption Voici quelques adresses habituellement z ro SYS 2 SYS 8 SYS 2048 Si on a pr alablement activ le programme MONITEUR les SYS ci dessus font tomber le KERNAL dans le MONITEUR qui prend alors le contr le du CBM 64 Tables des vitesses de transmission pour la transmission RS 232 pour les CBM 64 am ricains au standard t l vision NTSC Table des 39 JMP officiels du KERNAL Ces 39 points d entr e sont reconnus et comment s par COMMODORE Donc les programmeurs qui travaillent en assembleur et d sirent que leurs programmes 85 LE LIVRE DU 64 FF81 FF84 FF87 FF8A 84 CINT IOINIT RAMTAS RESTOR restent le plus possible ind pendant d un type de machine particulier ont tout int r t n utiliser que ces 39 routines du KERNAL 11 semble que l on soit ainsi l abri de certains changement de version des programmes internes En effet depuis la cr ation de la soci t COMMODORE toutes les machines conservent cette table Elle s allonge malgr tout r guli rement mais
342. t puis taper 1 1 1 2 CMDI LIST Et lorsque le curseur r appara t taper PRINT 1 CLOSE1 NEW Ensuite chargeons m moire le programme qui doit tre modifi LOAD PROGI Installer la bande sp ciale cr e ci dessus et taper POKE19 1 0PEN1 v Introduire enfin la commande magique que voici l effacer l cran 2 taper 3 lt curseur en bas 5 taper en mode direct PRINT CHR 19 P0KE198 1 P0KE631 13 P0KE153 1 Le 64 affiche un message d erreur apr s avoir lu la cassette C est normal ne vous effrayez pas Il reste taper CLOSE 1 et le tour est jou 176 CHAPITRE 7 LA CARTE MEMOIRE DU 64 La carte m moire ci dessous ne reprend que les adresses utilis es en m moire vive par BASIC et KERNAL pour leurs poin teurs variables de travail etc Le d tail des adresses des p riph riques et des m moires mortes sont d taill s dans les chapitres qui traitent de chacun de ces sujets en particulier Nous ne les reprendrons donc pas ici ADRESSES DESCRIPTION HEXA DECIMAL 0000 0 Direction des bits du port 1 du 6510 0001 1 Port 1 du 6510 0002 2 Inutilis 0005 0004 5 4 Vecteur conversion flottant entier 0005 0006 5 6 Vecteur conversion entier flottant 0007 7 Caract re recherch 0008 8 Drapeau Recherche fin de mode quote 0009 9 Colonne cran du tabulateur pr c dent 000A 10 O LOAD I VERIFY 0008 11 Pointeur tampon d entr e Nombre d indices 000 12 Di
343. t rendus identiques au pointeur de fin de BASIC par la commande CLR R sultat L interpr teur ne recherchant les variables dans la table qu aux adresses comprises entre les pointeurs de fin de BASIC et fin de variables ne trouvera plus aucune variable Donc CLR n efface pas les variables Apr s un CLR lontaire on peut r cup rer les variables en une valeur ad quate en 2 et 50 pointeur de fin de variables ou en 51 et 32 pointeur de fin de tableaux Attention prendre des valeurs plausibles c est dire sup rieures la valeur du pointeur en 2D 2E pointeur d but de variables De m me NEW remet le pointeur de fin de programme la valeur du pointeur de d but de programme De plus NEW remet z ro les deux premiers octets de la zone texte BASIC adresse de la seconde ligne BASIC Dn peut donc r cup rer le programme en r tablissant ces deux octets par POKE des valeurs correctes si on les conna t bien s r et en r tablissant le pointeur de fin prog ramme Voir programme DE NEW NEW effectue ensuite les commandes CLR et RESTORE LE LIVRE DU CBM 64 RESTORE On sait que des valeurs constantes peuvent tre et DATA gard es dans un programme par DATA Lorsque l inter pr teur BASIC rencontre DATA il recherche un ou la fin de ligne et passe l instruction suivante Ce n est que lors de l ex cution de READ qu il s en servira pour conna tre quelle sera la prochaine donn
344. t une adresse de red marrage du m me programme WARM START utilis e quand on emploie les touches STOP RESTORE Pour d marrer le CBM avec une ROM auto start sans qu elle ne s ex cute il faur couper momentan ment le fil 11 du connec teur d extension l int rieur de la cartouche Ensuite allumer le 64 puis r tablir avec un interrupteur cette connection c est le fil de s lection de la ROM A000 A ce moment il n y a plus de probl mes car le KERNAL n crit ni ne lit plus rien aux adresses 8000 9FFF d s la fin de l initialisation du BASIC Ce genre de manipulation n est ex cuter que par des personnes poss dant de bonnes notions d lectronique digitale D sassembler et comprendre le fonctionnement de programmes AUTO START est tr s instructif on voit ainsi comment modifier le BASIC pour lui ajouter des mots cl s comment faire des jeux anim s color s etc Les adresses RAM utilis es par le KERNAL sont d crites dans la carte m moire DESCRIPTION DES PRINCIPALES ROUTINES DU KERNAL Notons que pour essayer l une ou l autre de ces routines partir du BASIC le 64 procure au programmeur d importantes facilit s En effet les arguments qui doivent tre pr sents dans les registres du 6510 l appel d un programme KERNAL par l instruction BASIC SYS peuvent tre pr par s par chargement aux adresses 780 et suivantes voir SYS Passons maintenant en revue les principales routines du BASIC et du
345. t visible On voit qu en largeur double il est impossible de faire dispa ra tre le lutin fond gauche Le programme en annexe est un exemple de l utili sation des lutins Quatre lutins sont utilis s pour visualiser une page de 256 octets de 1a m moire du CBM 64 Dn y constate que une fois activ s les lutins restent pr sents et n interf rent pas avec le BASIC trouvera aussi un exemple de programmation de lutin dans les programmes DESSIN o trois dessins diff rents sont utilis s successivement pour le lutin num ro 0 Voir aussi le programme LUTIN de cr ation d un lutin partir de DATA 142 LE LIVRE DU 64 COULEURS DES LUTINS En mode monochrome les lutins sont ais s programmer chacun poss de deux couleurs sa couleur propre et la transparence c est dire que tous les bits qui valent 0 dans un lutin rendent le point correspondant transparent on voit travers soit l image cran soit la couleur de fond La couleur propre de chaque lutin se programme comme ceci Le lutin num ro N G lt N lt 7 peut prendre les 16 couleurs possibles O lt CL lt 15 55287 CL rem couleur pour lutin Les lutins peuvent aussi tre programm s en mode multicolore Comme en mode 7 la r solution horizontale diminue de moiti et 4 couleurs sont possibles PAIRE DE BITS COULEUR DU LUTIN NUMERO N 00 transparent 01 couleur lutin 0 registre 55285 10 c
346. tale dans Y de 0 39 S il vaut 0 on impose la position du curseur d apr s les valeurs rang es dans le m me ordre dands X et Y Cette routine initialise clavier et cran et restaure les pointeurs de p riph riques par d faut Le curseur est repositionn en haut ISR JSR JSR JSR ISR JSR JSR JSR JSR JSR E Set E59A 5 0 E5B4 SCH E 632 E716 E 8CB E8EA E 965 LE LIVRE DU 64 l cran est bleu et le curseur clignotant La table des adreses de lignes cran est galement reconstruite en D9 et suivantes Cette routine tablit le pointeur vers la ligne cran o est le curseur D1 et D2 et range ensuite 05 la longueur de la ligne cran 40 caract res ou 80 si c est une ligne suite Ceci pour les lignes BASIC qui occupent deux lignes d cran Cette routine effectue le red marrage de l cran et positionne le curseur en haut et gauche mais sans rendre le curseur visible ni toucher au clavier comme en 518 Cette routine effectue le red marrage de l cran mais en r crivant dans les 47 registres du VIC II les valeurs de d part lues dans la table en 9 Lecture d un caract re dans le tampon de clavier Attention cette routine autorise les interruptions IR Ne pas l utiliser dans un programme o les interruptions sont inhib es EDITEUR D ECRAN Cette routine accepte des caract res au clavier et les affiche l cra
347. teur par programme 10 A PEEK 1 AND 16 20 POKE 192 8 POKE 1 30 IF A GOTO 50 40 PRINT POUSSEZ STOP SUR CASSETTE 50 IF NOT PEEK 1 AND 16 GOTO 50 1 OR 32 B 171 LE LIVRE DU 64 Nous allons maintenant passer en revue quelques aspects des p riph riques usuels du CBM 64 habituellement raccord s au CIA NMI les p riph riques IEEE et le lecteur de cassette LES PERIPHERIQUES SUR L IEEE SERIE LE LECTEUR DE DISQUETTES 1541 Le lecteur disquettes 1541 est un p riph rique tr s utile Son fonctionnement interne est assez complexe pour faire le sujet d un livre entier Nous ne ferons donc qu effleurer le sujet en donnant quelques trucs et astuces permettant d en tirer un meilleur parti LE REPERTOIRE DU DISQUE Les programmes DIR et SD permettent tous deux la lecture du r pertoire du disque et le choix de l un ou l autre programme qui sera ensuite charg en m moire L un est plus complet mais plus lent l autre est plus rapide En regardant la structure du programme DIR on peut voir un exemple de la m thode d acc s un secteur du disque particulier Dans ce cas pr cis il s agit du r pertoire du disque Le programme REORG un peu plus complexe effectue lui aussi la lecture du r pertoire Mais de plus il trie en m moire par le tri bulle ou BUBBLE SORT la liste des fichiers du disque et r crit cette liste tri e sur le disque D s lors toutes les lectures subs quentes du r perto
348. ti rement le fonctionnement du VIC II Ces 47 adresses se trouvent en 55248 53294 0000 002 dans la couche C De l autre c t le VIC II est connect au bus d adresses et de donn es du CBM 64 Le VIC II poss de 14 fils d adresses et 12 fils de donn es C est donc un processeur 12 bits Comme on le sait le 6510 lui poss de des bus d adresses 16 et de donn es 8 bits ce qui rend les deux circuits difficilement compatibles Comment se r soud le probl me Les 14 bits d adresses du VIC II lui permettent d acc der 16 K de m moire et non 64 K Donc seulement un quart de la 101 LE LIVRE DU 64 m moire est accessible au VIC II Parmi les 4 configurations possibles laquelle utilisera t on Le choix en est heureusement laiss au programmeur Les concepteurs du CBM 64 ont en effet ajout 2 bits programmables dans le d codage d adresse du VIC II Ces deux bits qui sont programm s dans le circuit CIA 2 permettent de choisir le bloc de 16 K qui sera utilis par le VIC II num ro du banc caract res lecture de m moire VIC II pour 6510 pour VIC II en ROM m moire par 0 16585 32767 49158 65535 Fr voir Par d faut l allumage du CBM 64 le banc 0 est s lectionn L cran est donc n cessairement ce moment dans les 16 premiers K octets de m moire Si on d sire changer de banc voici la proc dure POKE 56578 PEEK 56578 0R 3 REM REGISTRE 6526 EN SORTIE POKE 56576 PE
349. tilisables de la m me fa on Le pourcent de diff rence vient du fait que l interface cassette n existe pas sur le SX 64 Listons ici les diff rences entre les routines ROM du CBM 64 et du SX 64 LOAD et SAVE rendent ILLEGAL DEVICE ERROR si on fait appel au p riph rique 1 la cassette Le message LOAD RETURN RUN CRETURN g n r par la touche RUN du clavier est remplac par LO0AD 8 lt RETURN gt RUN RETURN aux adresses 008 FOE6 Une erreur de 1 RS 252 est corrig e les adresses EF94 EF95 EF96 qui contenaient 85 49 60 contiennent maintenant 4C 025 E4 soit JMP E4D3 98 LE LIVRE DU 64 En E403 zone pr c demment inutilis e voir ci dessus bE4B7 on trouve maintenant E 403 85 9 STA A9 cequi tait en EF96 dans le CBM 64 E4D5 A9 01 LDA 01 85 STA 60 RTS On peut essayer cette modification sur le CBM 64 apr s avoir recopi les ROM en RAM Les octets ECD9 et ECDA qui contiennent les couleurs de bord et de fond l allumage de la machine 0E bleu clair et 06 bleu contiennent dans le SX 64 les valeurs 03 cyan et 01 blanc La couleur d criture au d part se trouve en ES36 La valeur 0E bleu clair devient 06 bleu dans le SX 64 Le message qui apparait l allumage de 1la machine est rang en E479 E4AC COMMODORE 64 BASIC est remplac par k 5X 64 BASIC
350. tique MICRORDI il a pour but de combler les nombreuses lacunes qui subsistent dans les informations connues ce jour sur le CBM 64 D s qu un utilisateur assimile les rudi ments du langage BASIC il se sent frustr car l acc s aux splen dides possibilit s graphiques et autres lui semblent toujours aussi inacessibles Si certains passages de ce livre peuvent sembler ardus les concepts qu ils d veloppent restent toujours ais ment utilisables gr ce aux nombreux exemples pr ts fonctionner Les sp cificit s les plus m connues du CBM 64 sont ici d velopp es au grand jour Citons entre autres le m lange de plusieurs modes graphiques dans un m me cran l emploi des touches de fonctions l impression sur papier d images graphi ques la reprogrammation du clavier en AZERTY et bien d autres encore LE LIVRE DU 64 Pour ma triser totalement son ordinateur il ne suffit ja mais de s quiper du mode d emploi Cet ouvrage rencontre une partie des demandes de l utilisateur d butant Cependant le programmeur d cid se lancer dans l emploi du langage ASSEMBLEUR ou du langage FORTH devra se procurer les manuels correspondants On trouvera en fin de volume une bibliographie couvrant ces sujets Bon voyage bord du livre du 64 LE LIVRE DU 64 CHAPITRE 1 LE SYSTEME Le CBM 64 est un micro ordinateur dans la plus pure tradi tion COMMODORE Il conserve en effet de ses anc tres le PET et le VIC la structure
351. tit en entier sign dans l accumulateur flottant principal 68 JSR BC58 JSR BC5B JSR BCE9 JSR 8D7E BDB3 BDB8 BDBD JSR 8DCD JSR BDDD 8F11 LE LIVRE DU 64 Impose le signe positif la valeur de l accumulateur flottant principal Comparaison de l accumulateur flottant principal avec le nombre flottant dont le pointeur est rang dans les registres A et Y partie basse partie haute Si les valeurs compar es sont identiques l accumulateur du 6510 contiendra Q en sortie Si l accumulateur flottant est plus petit A contiendra FF et s il est plus grand A contiendra 01 Cette routine remet le contenu de l accumulateur A sous forme d un entier sur 4 octets dans la mantisse de l accumulateur flottant principal en 62 65 Cette routine r alise l addition de l accumulateur A du 6510 consid r comme un nombre entier sign de valeur 128 127 avec le contenu de l accumu lateur flottant principal Le r sultat est en sortie dans l accumulateur flottant principal Valeur en flottant de 999999 9 Valeur en flottant de 99999999 Valeur en flottant de 1000000000 Cette routine crit sur le p riph rique de sortie courant l cran si l affectation du p riph rique de sortie n a pas t modifi e par l instruction CMD la valeur enti re sur deux octets contenue dans les registres et X du 6510 partie basse partie haute apr s l avoir converti en une cha ne de caract res
352. tr s utiles bien que peu emp loy es L exemple ci apr s montre l vidence leur int r t Exemple Dn d sire obtenir dans une des valeurs 4 7 17 ou 41 et ce suivant que la variable B est gale 57 56 128 ou 0 La m thode habituelle donnera 10 IF B 37 THEN 4 GOTO 50 20 IF B 36 THEN 7 GOTO 50 30 IF Bz128 THEN Az17 GOTO 50 40 IF Bast THEN 41 50 ou quelque chose d approchant Il est bien plus l gant et plus efficace d crire 4 8 57 7 36 17 128 41 0 Faire plus avec BASIC Les p riph riques les plus spectaculaires du CBM 64 ne sont pas accessibles en BASIC C est pourquoi de nombreux programmes crits en langage machine agrandissent le vocabu laire BASIC GRAPHIC PAK SIMON S BASIC par exemple Voir extensions logicielles Pour ajouter vous m me des fonctions au CBM 64 ou simple ment pour mieux comprendre son fonctionnement il est utile de conna tre les routines du BASIC On en trouvera une descrip tion ci dessous Il est certain que l usage d un programme moniteur comme celui d crit dans cet ouvrage est un avantage majeur pour l exp rimentation dans ce domaine 57 LE LIVRE DU 64 LE KERNAL Le KERNAL est un programme ou plut t un ensemble de programmes qui contr le les diverses actions du CBM64 c est SYSTEM Le terme KERNAL vient d un mot signifiant NOYAU en anglais Le noyau de sous programmes occupe 7K e
353. tte synchronisation s effectue en attendant le passage 1 puis le passage 0 du bit 7 de l ad resse 0011 53265 par WAIT 55265 128 WAIT 55265 128 128 Essayez le test suivant 1 FOR I 0 TO 15 2 WAIT 53265 128 WAIT 53265 128 128 3 POKE 53281 I NEXT GOTO 1 Faites le test avec et sans la ligne 2 11 y a une nuance Le BASIC n est cependant pas toujours assez rapide Les 5 lignes de BASIC ci dessus ont t traduites en langage machine essayez le programme GLITCH en annexe 155 LE LIVRE DU 64 136 LE LIVRE DU 64 CHAPITRE A LES LUTINS Les lutins sont appel s SPRITES en anglais ou encore MOB ce qui est une contraction de Mobile Object Block Ce sont des formes graphiques des dessins entibrement programmables en forme en couleur et en position L lectronique interne du contr leur d cran VIC II permet de positionner les lutins n importe o dans l cran Chaque lutin poss de une priorit de passage par rapport au dessin affich l cran et il peut ainsi passer soit devant soit derri re les points allum s de l cran Il est reconnu que le concept de LUTIN est la fonction la plus int ressante que les nouveaux contr leurs d cran ont appor t e la micro informatique En effet les LUTINS sont totalement ind pendants de l cran d o une extraordinaire facilit de programmation d images anim es Ind pendants du code graphique en cours les LUTINS ne se soucient pas des
354. u plusieurs branchement conditio nnel Il y a six commandes de ce type GOTO et GO TO RUN GOSUB et RETURN SYS SYS ainsi que GOSUB et RETURN font appel la notion de pile Etudions d abord les cas les plus simples GOTO et GO TO effectuent un branchement inconditionnel vers le d but d une ligne dont on sp cifie le num ro Curieu sement l argument ne peut pas tre une expression L ex cution de GOTO est simple en principe il suffit de modifier le pointeur de la routine CHRGOT pour continuer l interpr tation plus loin GOTO effectue ceci de mani re assez efficace Le num ro de ligne apr s calcul il faut convertir la cha ne de caract res en entier sur deux octets est rang en m moire aux adresses 20 et 21 14 15 puis compar au num ro de ligne en cours S il s agit d un saut en avant BASIC cherche la ligne destination partir du pointeur courant c est dire partir de la ligne qui suit celle du Si par contre il s agit d un saut en arri re exemple 10 GOTO 10 BASIC commence sa recherche partir de la pre mi re ligne du programme Si la ligne n est pas trouv e le message UNDEF D STATEMENT ERROR est g n r La possibi lit de coder GOTO en deux mots GO et TO a t conserv e pour le 64 car le BASIC MICROSOFT 2 0 tait ainsi fait Il s agit de la version de l interpr teur BASIC install e dans les PET et VIC depuis 1977 par MICROSOFT A l ex cution il n y a pas de diff renc
355. uill sur 1 RS 252 un caract re est lu dans le tampon de reception de 1 RS 2232 Appel par BOUCLE ISR FFE4 CMP 00 BIEN ON BOUCLE BEQ BOUCLE STA CARACT 3OCTET LU Fermeture de tous les fichiers ouverts Cette routine appelle CLRCHN pour r tablir les p riph riques clavier et cran Il est de bonne pratique d appeller CLALL au d but d un programme pour viter tous probl mes Appel par JSR Cette routine incr mente l horloge d un soixan FFED SCREEN 00 PLOT LE LIVRE DU 64 ti me de seconde Si un programme n cessite une routine d interruption sp ciale un balayage de clavier ou de joystick par exemple on peut l appeller 60 fois par seconde pour maintenir l horloge l heure Elle modifie et X Il est toutefois conseiller d utiliser la vraie horloge temps r el de l un ou l autre des 6526 pour maintenir un temps jour Sa pr cision est bien meilleure et l incr mentation est automatique ce qui simplifie consid rablement la programmation Appel par JSR Cette routine donne au programme appellant l es dimensions de l cran en nombre de caract res Dans le cas du 64 le r sultat est bien s r toujours identique 25 et 40 Elle ne tient pas compte de la modification du mode 38 40 du VIC II Elle existe sur toutes les machines COMMODORE eb permet un programme con u pour plusieurs machines de reconna tre le type de format d cran utiliser Le
356. ulaire Les impulsions rectangulaires g n r es par le CBM 64 ont une largeur d impulsion programmable de 0 4096 soit de 0 100 de la largeur du rectangle Une onde carr e parfaite peut tre obtenue avec une largeur d impulsion de 2048 50 qui g n rent uniquement des harmoniques impaires Le nombre et l amplitude des harmoniques g n r es dans ce mode sont tr s variables et permet tent ainsi au S I D de simuler les sonorit s de tr s nombreux 150 LE LIVRE DU 64 instruments de musique La largeur des impulsions se programme gr ce deux registres par voix Cette programmation n est bien s r utile que si l on choisit la forme d onde rectangulaire La largeur d impulsion est appel e usuellement PW Pulse Width en anglais Soit PW la largeur d impulsion en 0 lt lt 100 On calcule P INT PW 40 95 0 lt lt 4096 INT P 256 0 lt lt 15 PL P PH 256 O lt PL lt 255 Programmation de la largeur d impulsion S 54252 Voix 1 2 PL POKE 5 S PH Voix 2 POKE 9 PL 10 PH eoo Voix 3 POKE S 16 PL 5 17 PH La quatri me forme d onde possible est appel e bruit blanc 11 s agit en fait d une onde de fr quence fixe mais de forme totalement al atoire dont le contenu harmonique se modifie sans cesse Il rappelle alors le bruit d une chute d eau Le choix d une ou plusieurs formes d ondes se fait par 1 mise 1 du ou
357. une frappe sur Fl pour revenir au mode normal F3 charge un programme en adresse absolue F5 efface un programme du disque F7 charge un programme l adresse de d but du BASIC Pour ces 3 derni res fonctions la question quel num ro apparait dans la ligne au bas de l cran et la fonction est effectu e d s r ponse par un num ro compris entre 1 et 44 et d signant le programme O REM TABLE DES MATIERES DISQUES AVEC CHARGEME 1 IFF 1 1800 SE E To OPEN 8 OPENT O 90 is t C BAS C BAS C BAS C BAS C BAS C BAS C BAS C BAS C BAS C BAS AE OU BAS u 16 sss PAS 16 BAS fe alpasi EE deg BAS C N 14 Sue RVS oN RVS OFF 5 F7 RVS OFF T 1 Mae RS on Status MEME Db 30 FORH ITO44 11 NEE SE 31 GOSUB 2000 IFST lt gt 0GOTO1000 33 IFCSC R THEN NS H GOTO 31 34 H STRS H H BLEU J RICHTS O HRIGHTS HS LEN HS 1 2 BIANC 35 PRINTH L 4 GEN EFTS N S HYHSS 17 NEXTH 1030 PRINTQS MS GOSUB4000 1050 EE 13260101100 1300 1500 1700 UE DS 655 05 DISQUE L REM STATUS 1110 GET 2 S IFASCOCHRS L3 THEN PRINTAS GOT 1199 COSUB O UMS GOTO 1110 1300 PRINTO S90 QUEL NUMERO GOSUB3000 IFA 0 1030 REM LOAD 1320 POKE53280 254 POKE 53281 246 1330 PRINT RVS OFF CLR CYAN LOAD CHR 34 N A CHR 34 8 1 HOME J GR 1340 POKE 631 19 POKE632 13 POKE 198
358. ur de niveau sonore Le param tre S maintien varie donc de 0 15 ce qui correspond des amplitudes sonores de plus en plus gran 152 LE LIVRE DU 64 des On n utilise que tr s rarement des valeurs de 5 inf rieures 5 sauf pour donner des effets de percussion 0 lt S lt 15 Les valeurs possibles des param tres D et R sont reprises au tableau ci dessous DUREES EN MILLISECONDES VALEUR RELACHEMENT ATTAQUE DECROISSANCE ONA n r UN Pour modifier le registre AD c est le cinqui me registre parmi les sept qui contr lent une voix on y inscrit la valeur AD A 16 D Pour modifier le registre SR c est le sixi me registre SR S 16 R Pour modifier les valeurs AD et SR des trois voix il faut utiliser les instructions S 54272 Voix 1 POKE S 5 AD POKE S 6 5R Voix 2 POKE S 12 AD POKE S 13 58 155 LE LIVRE DU 64 Voix 3 POKE S 19 AD POKE 5 20 SR En programmant simultan ment la forme d onde et les 4 valeurs ADSR on peut donner une note une sonorit tout fait diff rente Par exemple Dents de scie 5 Dz8 5 5 Rz9 dur e 1 2 sec VIOLON Triangle Az0 Dz9 5 0 Rz9 dur e 1 60 sec XYLOPHONE Rectangle Az0 Dz9 5 0 0 dur e 1 60 sec PIANO Triangle Az10 Dz8 5 10 9 dur e variable FLUTE Triangle Az0 Dz0 Sz15 Rz0 dur e variable ORGUE Il nous reste voir comment lancer une note heureusement c est tr
359. ur divers usages On peut ainsi d finir sans probl me un maximum de 128 lutins on ne peut utiliser les m mes adresses que la ROM carac teres dans le banc 2 aux adresses 36864 40960 En donnant au VIC II l adresse de plusieurs lutins successi vement il est tr s ais de cr er des personages anim s comme des oiseaux battant des ailes bonshommes marchant en balan ant les bras etc 139 LE LIVRE DU 64 Adresse d un lutin banc m moire VIC II 16384 n de bloc 64 Comment donner au VIC II l adresse des 8 lutins qu il doit utiliser Explorons nouveau la carte m moire Dans le banc de 16K allou au VIC II une page de 1K 1024 octets est attribu e l cran Or ce dernier occupe 25x40 soit 1000 octets Exemple L cran est l allumage de la machine en 1024 0400 la fin d cran est en 2023 07E8 Le BASIC se situe en 2048 0800 Les 8 pointeurs de lutins sont rang s dans le reste la page cran dans les 8 derniers octets de la page Pour notre exemple les octets 2040 2047 07F8 07FF contiennent les num ros des blocs qui sont les images des 8 lutigs actifs Nous avons vu ci dessus qu un seul octet est suffisant pour d finir un num ro de bloc Le VIC II sait qu un lutin est actif quand le bit correspon dant vaut 1 dans le registre AUTORISATION DE LUTINS en 53269 0015 Donc pour activer un lutin il faut effectuer cinq op rations l Dessiner et mettre m moire le luti
360. ur du BASIC Le bit 7 du dernier caract re d un message est l On trou vera un exemple de modification de cette table dans le programme BASIC FR en annexe Table des 30 adresses des messages d erreurs du BASIC Voir la table en 19 D place un bloc en m moire Pointeur de d but de source en 5F 60 partie basse partie haute Pointeur de fin de source en 5A Zap Pointeur de fin de destination en 58 59 Le sommet de bloc est le premier d plac Cette routine est utiliser pour transf rer un bloc de m moire si l adresse de la destination est plus haute que l adresse de la source elle est aussi utilisable si source et destination n ont aucune adresse commune En sortie les registres X et Y sont remis 0 JSR JSR A435 LDX errnum JSR A437 JMP 4483 JSR A644 JSR A660 JSR A67A JSR A6C9 JSR A81D JSR 851 JSR 4871 JSR 96 LE LIVRE DU 64 Teste s il reste au moins 62 octets libres dans la pile et si non imprime le message OUT DE MEMORY ERROR et retourne ensuite BASIC READY Affiche DUT MEMORY ERROR et retourne au BASIC READY Imprime le message d erreur num ro errnum voir la table en A328 qui contient les adresses succes Sives des messages et retour au BASIC READY Entr e normale vers BASIC READY aussi appell e d marrage chaud du BASIC ou WARM BOOT en anglais Ex cute le NEW du BASIC Execute le CLR du BASIC
361. ura IG 2110 AL AD GOSUBAO0 PRINT 2140 PRINT N RETURN 2998 REM 3000 SAUVER MON SUR CASSETTE 3000 DD 2049 FF 4588 V 1 INT DD 256 3010 vo 2 56 V 3 INT FF 256 3030 V 2 2056 ip 3040 PRINT POUR SAUVER MON 3050 PRINT 5 pu l ie GOSUBAO Q PRINT 3060 PRINT JUSQUE FP 8 5 AL PP CD GOSUBA00 PRINT 3080 FOR L OTO 3 POS STRS 4 S VES STRS V I FOR 3090 PRINT POKE PO LEN POS 1 10919 VIS LEN VI 1 NEX 3110 PRINT SAVE CHR 34 MON CHR 34 1 1 3120 puo ESTO C Kanz deit BAS JPOKEA3 1 POKEA 4 64 POKE45 0 3130 PRINT C Ce re OBTENIR DE NOUVEAU LE PETITMON 3140 PRINT APPUYEZ SUR RETURN gt 55555 SAVE PETITMON 8 READY POIGNEES Programme BASIC chargeant en m moire une routine en langage machine indispensable pour effectuer une lecture correcte des entr es analogiques POT X et Y des 2 ports de contr le Cette routine se charge dans les octets inoccup s en page 2 et est longue de 63 octets Cette routine est employ e dans SVP e REM LECTURE DES POIGNEES DE JEU 15 FORI 67910742 READA POKE purum L A CS CS4A NEXT CIR POT X PORTE 7 25 PRINT POT Y eu M PEKAO ERU M 30 PRINT 1255 749 X PORI2 PEEK 7 20 PRINI POI Y PORTAO T PEEK 7 47 e 45 PRINT BOUTON PORT2 255 748 20 FORI OTO200 NEXT 02102 679 DATA162 001 120 173 002 220 141 23
362. ure et par dessus les p riph riques la couche C Le micro processeur sans basculer d interrupteur peut ainsi voir ses p riph riques et manipuler le clavier la cassette etc Il n a pas souvent besoin d acc der au g n rateur de carac t res Le VIC II quant lui acc de le g n rateur 200 000 fois par seconde et pour lui le probl me de basculer l interrupteur n existe pas Le VIC II en effet n acc de jamais aux p riph ri ques Il existe cependant un cas o il est bien int ressant de pouvoir lire le contenu du g n rateur de caract res Pour cr er un nouveau jeu de caract res on peut l introduire en m moire partir d un p riph rique mais lorsqu on veut seulement en modi fier une partie la solution la plus simple est de recopier la ROM g n rateur de caract res en RAM Et pour cela il nous faut manipuler les interrupteurs Les interrupteurs de pagination de la m moire en anglais BANKING sont situ s l adresse 1 de la m moire Cette adresse est en fait celle d une porte d entr e sortie 8 bits qui fait partie int grante du microprocesseur lui m me Basculons donc l interrupteur POKE 1 51 Le nom officiel de cet interrupteur est CHAREN l an glais character enable ou autorisation des caract res Nous constatons que notre ordinateur refuse d s lors tout service Il est comme mort Eteindre et rallumer la machine est la seule solution Que s est il pass Notre micro ord
363. utilisent pas de BASIC de voler 16 K d espace m moire contigu au 64 La derni re configuration possible est celle o GAME 0 et EXROM 1 Elle enl ve de l espace d adressage toutes les m moires RAM et ROM des adresses 1000 FFFF ne laissant en service que 4 K de m moire RAM dans le CBM 64 et 16 K de m moire ROM dans la cartouche de 8000 9FFF et de 000 FFFF Ceci transforme le CBM 64 en une machine identique a I ULTIMAX le jeu vid o de bas de gamme que COMMODORE a tudi puis abandonn au cours de l ann e 1982 Cette configuration ne poss de aucun int r t pratique Le but recherch tait de permet tre l usage des cartouches de jeu de l ULTIMAX sur le CBM 64 11 LE LIVRE DU 64 Voici un tableau r capitulatif des situations possibles TAILLE DU ADRESSES HEXA NATURE MEMOIRES Kata 8 K A K amp K 8 K 8 K 6 K 2 K amp K RAM ROM CAR 1 0 NIL M moire vive M moire morte M moire morte dans une cartouche externe Zone des p riph riques RIEN DU TOUT Pour remplacer la zone 1 0 par la ROM g n rateur de t res il faut mettre l adresse 1 la valeur reprise au tableau laquelle on aura soustrait la valeur 4 Ceci est toutefois impossible pour les configurations 4 5 et 9 RESUME DES CONFIGURATIONS MEMOIRE DU CBM 64 CONFIGURATION 1 tat normal du CBM 64 l allumage sans cartouche d extension 38 K accessibles au BASIC CONFIGURATION 2 P riph r
364. vient d viter certains obstacles les couleurs de l cran 10 et 11 provoqueront des collisions mais pas les couleurs 00 et 01 Dn peut voir qu une collision a eu lieu en testant les registres 53278 et 55279 X1 PEEK 53278 X2 PEEK 53279 Si X1 est diff rent de 0 il y a eu collision entre deux lutins au moins Si X2 est diff rent de 0 il eu collision entre un lutin au moins et les donn es de l cran Attention le fait de lire les registres 53278 et 53279 les remet 0 d office On n a pas droit un deuxi me tour Pour savoir si le lutin N est impliqu dans une collision il faut tester le bit correspondant dans X2 IF X1 AND 2 N THEN PRINT COLLISION d tecte donc une collision entre le lutin N et un autre lutin On voit bien qu il faut d abord mettre le r sultat du PEEK dans une variable car d s cette lecture le registre est remis 0 et ne peut plus tre test par IF PEEK mais bien par IF Xl 144 LE LIVRE DU 64 LES REGISTRES DE CONTROLE DES 5 D000 53248 D00E position lutins 1 7 X 55262 D001 i 53249 DOOF position lutins 1 7 Y 53263 registres pairs registres impairs 0027 55287 002 ouleu 53294 lutins 7 6 5 A H 2 1 0 00 55279 interruption collision avec fond 145 LE LIVRE DU 64 146 LE LIVRE DU 64 CHAPITRE 5 LE SON DU 64 FT LE CIRCUIT S I D Le circuit SID est le synth
365. x octets dans les registres A et Y partie basse partie haute JSR Cette routine convertit un nombre flottant dans dans l accumulateur flottant principal en entier sign sur deux octets de valeur comprise entre 32768 et 52767 JSR B37D Cette routine ex cute la commande BASIC FRE O Si la valeur rang e en 0D est z ro la routine ne d salloue pas l espace m moire r serv aux chaines de caract res sortie l accumulateur flottant principal contient le nombre d octets disponibles pour le BASIC L octet d adresse 0D est de plus remis d office 0 JSR 83A2 Cette routine convertit la valeur enti re contenue dans le registre Y du 6510 en nombre flottant dans l accumulateur flottant principal JSR B3A6 Cette routine teste si l interpr teur BASIC est en mode DIRECT ou en mode PROGRAMME et si il est en mode direct elle envoie l cran le message ILLEGAL DIRECT ERROR et retourne BASIC READY JSR B3AE Cette routine crit UNDEF D FUNCTION ERROR et retourne BASIC READY JSR B79E Cette routine acquiert dans le texte BASIC par appel CHRGOT une valeur num rique comprise entre 0 et 255 et range le r sultat dans le registre X du 6510 Si le nombre acquis est hors normes le message ILLEGAL QUANTITY ERROR sera imprim et le contr le rendu BASIC READY JSR B7EB acquiert dans le texte BASIC une valeur num rique comprise entre 0 et 65535 inclus et 1 range en page z ro aux
366. x types d ordi nateurs pose parfois des probl mes entre autres cause du positionnement diff rent des lutins voir chapitre 4 qui en r sulte ainsi que des diff rences de timbre du g n rateur sonore obtenues entre les deux continents avec un programme identique La pr sence de cette introduction l lectronique du CBM 64 se justifie par les conclusions de ce genre que l on peut tirer D autres probl mes vont par ailleurs se trouver clair s d un jour nouveau L horloge ma tresse fonctionne donc 1 MHz environ Elle distribue l ensemble de l ordinateur deux signaux PHI 1 et PHI 2 qui passent alternativement de 0 5 volts on dit aussi du niveau 0 au niveau 1 HIZ MASE 2 PHASE PHI 2 E 74 Chaque fois que PHI 2 vaut 1 nous obtenons une p riode d une dur e de 500 nanosecondes que nous appellerons PHASE 2 De m me quand PHI 1 vaut 1 nous aurons la phase 1 A chaque phase 2 le microprocesseur utilise les BUS groupes de fils d adresses et de donn es pour effectuer ses programmes L autre moiti du temps pendant les phases 1 le contr leur d cran VIC II occupe les deux bus pour lire les informations dont il a besoin pour maintenir jour l image sur le t l viseur La seconde t che dont le VIC II s occupe se pro duit aussi durant les phases 1 Il s agit du rafra chissement des m moires Les m moires 6164 de notre ordinateur ont la m moire courte Elles s eff
Download Pdf Manuals
Related Search
Related Contents
IDEALARC CV 420 & CV 505 KeTop T41 Handterminal Projektierungshandbuch V 1.3 AEG Voxtel D80_UK Manhattan 177337 video splitter Reporting Extensions User Manual DJ―G5 - QTC PBS archive add on CCO - Manual Part C - User Manual - Sanyo LCD-47XR8DA User's Manual Copyright © All rights reserved.
Failed to retrieve file