Text content (OCR)
N°@ . Bimestrie! - Deuxiame année
3 Mal - 2 Juillet 1986
maro-ne- 33 F
Editiors JIBENA
‘Guy: HACHETTE
Lo Petite Motte — Senillé
86100 CHATELLERAULT.
Téléphone :
49-93-66-66
Joelle (mame numéro)
Plus loin avec votre Apple
L parait — ce sont les stotistiques qui le prétendent — que des tas
dordinateurs familioux font une fin peu glorieuse dans les placards,
00 ils voisinent avec d'autres gadgets plus ou moins cofteux.
Cela ne me surprend pos outre mesure : comment employer utile-
ment ces petites "merveilles” berate on a son content de jeux du
style “envohisseurs”... et quand les possibilités de programmation sont limi-
tées par une notoire insuffisance de la mémoire, ov encore por !a lenteur de lo
lecture-écriture sur cassette (souvent aléatoire par-dessus le marché) ?
Votre Apple — dont les premiéres versions seraient ossurément considérées
comme des micros familicux — figure heureusement dans une autre catégo-
tie, celle de I' informatique Personnelle. Ce qui ne |'empéche pas d’avaler, si
vous le lui demandez, les logiciels de jeux. Qui peut le plus peut le moins.
Si son vieux 6502 fait aujourd'hui figure d'ancétre, il reste — y compris dans sa
nouvelle version de 65C@2 — I'un des microprocesseurs les plus faciles 4 pro-
mer, Les différences de rapidité que l'on note d'un Basic & un autre, se
révélent beaucoup plus difficiles 4 évaluer (méme si elles existent) quand elles
mettent en jeu des routines en langage machine.
On accomplit, notamment en matiére d’atfichage, de remorquables perfor-
mances si l’on choisit de s‘adresser directement au microprocesseur, dans le
langoge qu’il connait le mieux.
Ce n'est peut-étre pas une méthode trés conviviale, mais c'est indiscutable-
ment efficace... pour la grande satistaction du programmeur.
Je n’en suis que plus 4 I'sise pour répondre par un oui sans aucune restriction &
la question que nous posent des centaines de Lectrices et de Lecteurs ; "Faut-il
encore apprendre 4 programmer en assembleur alors que les tétes pensantes
de chez Apple nous annoncent des machines copables de nous obéir au doigt.
dleeil,.. et dla parole ?”,
Oui, le jeu — car c'est bien d'un jeu qu'il s‘agit — en vaut Io chondelle. Ne lais-
sons pos l'avenir de |'intormatique individuelle aux mains d'une poignée d'ini-
tiés. Nous les aimons bien, et nous apprécions comme il convient les excel-
lents logiciels qu'ils nous mijotent, mois de grace, qu’ils permettent & nos
tes cerveoux de fréquenter, au moins pour s‘amuser, les sentiers non
bonalisés dans lesquels ils évoluent — souvent porce qu'ils disposent de docu-
mentations plus complétes que les nétres — en terrains connus,
Oui, plus loin avec votre Apple, pour le ploisir | GUY-HACHETTE,
Sommaire 8
© Variables dimensionnées ............,
* Ecran-damier... ou les énormes possibi-
lités du longage machine ............. 13
* AND.DEMO ........ Festintetaseeune iA?
© MIROIR
Toutes les lignes de I'écran inversées en
un clin dail. sanihehs Reiss eomaasay: 19
© TEEEN BAS) <i s3sce.etvecesin ssn 20
© VBUMEM craeneenee er ty! Portree . 30
* MIXAGE— Page 1 plus page 2
Comment méler vos pages graphiques ? '
Tema cancsot an mbeenerea Neuvantedoyin 3
LA BOITE AUX IDEES
® Potite base de données ................... 7
®@ Bloc-notes ou pense-béte ...............,- =
CATALOGUE par Guy DESENFANT ... 34
TRANSLIST par Dominique LUGAT
Ou comment créer un fichier source 3 partir
d'une simple routine en langage machine... 23
APP: TION
* Organisation d'un tournol
Une routine qui pourra aider certains organi-
sateurs 4 mettre au point leur calendrier ... 37
DIMDEL par Yvan KOENIG
Ou comment changer la dimension d'un
tableau en cours de programme ....,.. ha MT
UTILITAIRE — 65CO2 et IMAGEWRITER 1!|]
® HISTO, TEXT
Vos graphiques en mode "Text" ..... 4]
A CONNAITRE
* Codes ASCII, HEXA et BINAIRES .. 61 —62
MASTERMIND
par Michel DEVAUX
Une version pour Apple I/.... 10
DES TRUCS
® Pour vous souvenir de la signification
des mnémoniques (LDA, STA, etc.) ... 7
® Quelques idées de LABELS ........-. m4
LISEZ AUSS} :
* $DB3A (STROUT) et $FDED (COUT)
Pi ley e Re TOC eo 7
© Bite wavele dian vicweseriey awe 16
* Apropos de BPL............... 20
* Votre bibliothéque informatique . 29—40
(AOS a Gearon acernatine mane’ 53—56
* Questions — Réponses ......... 46
— Contrdle-X
— Guillemots
— Les 4 lignes de texte on HGR?
— Virgule et DATA
— CALL — 151
* Rappel sur les tableaux en Apple-
SOUT Pact lnrein piss tainieineieeie 48
* Chasseurs de bogues 54
— Miss Mouse et la Scribo
— Caleuls imprécis
— Catalogue thématique
* Le courrier des lecteurs -...... 3
— Compatibilité le
— Et la Scribe ? ae, 58
— Tabulations W 59
— CAO en 30 59
— Et Seikosha 59
— Toujours imageWriter 60
* Mésaventure
(lettre d'un lecteur mécontent) . . 60
* Votre fiche n°8 ..........4..45- 6) —62
* Votre bulletin de commande et
COPOMANDE so o.c40 pee 63
TREMAPLIN MICRO bo numéco 9 parattra le 3 juillet,
GUY-HACHETTE
LA BOITE
aux idées
* Petite base de données
* Bloc-notes ou pense-béte
Vous n’aurez que l’embarras du choix
Seba vous priver plus longtemps du plaisir de mémoriser — en vrac —
les plus farfelues de vos élucubrations ? LA BOITE AUX IDEES est la pour
vous servir, et d'une maniére on ne peut plus simple, avec :
— BOITE-BAS, programme en Basic
BOITE-BAS — fonctionne sur tout Apple Ile ou
lic équipé d'une carte 8¢ colon-
nes. Une adaptation sur 40 colonnes est possi-
ble, mais l'affichage sera moins bon. La version
cloprés est destinée aux Apple Ile normoux.
Pour Apple ile ou He équipés du 65CG2, on
modifiera seulement la ligne 295,
Pourquoi avoir préféré le fichier BIN au fichier
TAT ? D'une part, en raison de la rapidité de
son écriture sur disquette et de son charge-
ment, d’autre part parce que le programme
‘utilise sans faire appel 4 une varioble,
LIMITE be longueur du fichier est limitée 4 la
taille-mémoire de votre Apple. Ici,
LOMEM a été fixé & 26060, ce qui autorise
lécriture de 255 données. Chaque enregistre-
ment exigeant 80 caractéres, 160 données Sup-
plémentaires vous obligeront 6 donner &
LOMEM Ia valeur 34009. Veillez 4 ne pas dépas-
ser la taille de la mémoire disponible... et
Woubliez pas de réserver quelques milliers
dioctets pour le fonctionnement du programme
(peu gourmand d‘gilleurs),
— BOITE, fichier binaire de données.
PREMIERE UTILISATION RUN BOITE.BAS...
puis option 1 du
menu, Pour qu'une ligne de données (pas plus de
78 caractéres) soit validée, il est indispensable de
répondre par (1) D'ACCORD... sinon c'est &
refoire.
Consultez le tableau de la page 4 avant foute uti-
lisation. || comporte des indications qui ne figu-
rent (volontairement) pas dans le programme.
=
CREATION DU FICHIER
Le eréation du fichier BOITE est automatique,
Ne pos verrouiller ce fichier car il est entidre-
ment réécrit lors de chaque mise & jour.
Pour le copier sur une autre disquette, taper
successivement :
* RUN BOITE-BAS ....puis changer de disquette
* 1 (option saisie du menu}
* RETURN (immédictement aprés le numéro de la donnée}
* 4 (vers menu général)... et le fichier BOITE est écrit
sur votre seconde disquette (préalablement initiali-
se, bien sir}.
_ Assen Eee SSRN RR EEE SEES SSSR TES SERE SSS SeTETREEEETEEEEEeEsenneeersnessessewesessaseressneenss
TREMPLIN MICRO
3
UTILISATION DE BOITE.BAS
SAISIE DES DONNEES
Aprés avoir choisi l'option 1 (menu général), tapez
normalement votre phrase (signes de ponctuation
autorisés). A vous de savoir si les minuscules seront
‘ou non utilisées, de méme que l’accent circonflexe.
La longueur de chaque donnée est limitée 4 78
caractéres. Plusieurs commodités vous sont offertes
(en Basic) :
CTRL-D : Curseur au début de la ligne
CTRL-F : Curseur & lo fin de la ligne
CTRL-E : Effocement dela ligne
CTRL-S : Récupération d'une ligne effocée por erreur
DEL __ ; Effacement du coractére précédont le curseur
Pour insérer, se contenter de revenir en arriére,
puis toper le caroctére & insérer. Il prendra place
derriére Ia lettre recouvrant le curseur.
RETURN ; Pour terminer fo soisie d'une ligne... (Pour
terminer la saisie, RETURN sur une ligne vide),
FLECHE DROITE et FLECHE GAUCHE :
Autorisent les déplocements vers la droite et vers la gauche
LECTURE DES DONNEES
(& partir du Menu général)
CTRL-L ... comme Liste vous permet d’accéder
BOTTE-BAS
UTILISEES
120 GOSUB 68@: GOSUB 465
125 INVERSE :TS = “:
TO 140
ETURN
ALE>*
OINS GENIALE"
15@ TEXT
> "¢: CALL - 198: GET R®: PRINT
168 R = VAL (RS)
100 LOMEM: 26008: REM POUR 255 DONNEES ENVIRON
105 L$ = “*:RS = **:R = O:H = @: REM VARIABLES LES PLUS
11@ TEXT : NORMAL :D$ = CHRS (4): PRINT D8*PR£3": PRINT
115 BA = 550: REM ADRESSE DU FICHIER "BOITE*
:": VTAB 1: PRINT
Ts: PRINT " LA BOITE AUX IDEES *: PRINT TS: NORMAL
199 T9 = “*: FOR I = 1 TO 20:TS = TS + * *: NEXT : GO
195 POKE 1483.48: VTAB V: INVERSE : PRINT V;: NORMAL : R
148 V = 1: GOSUB 135: PRINT " SAISIE D’UNE...
145 V = 2: GOSUB 136: PRINT “ RECHERCHE D’UNE IDEE NON M
155 V = 3: GOSUB 195: PRINT " TERMINE POUR AUJOURD’HUI -
165 PRINT TS: POKE 34,5: VTAB 22: PRINT TS: POKE 35,21
au fichier de données, ligne par ligne... & partir
du numéro de votre choix, Une ligne de com-
mandes vous guide (possibilité de lire Ia ligne
suivante avec RETURN... ou de corriger aprés
un CTRL-C).
RECHERCHE
C'est évidemment le point fort du programme.
Vous pourrez rech er un mot, un groupe de
mots... voire une simple lettre, mais pas la
ponctuation (le mot & chercher est en effet saisi
por un INPUT normal... les programmeurs peu-
vent s‘en donner 4 ccaur joie et modifier cette
partie de BOITE-BAS !).
Si vous cherchez “qui”, toutes les phrases com-
portant ces trois lettres vont instantanément
s'atficher, y compris quand “qui” sera inclus
dans acquitter ou Squilibre.
Par contre, si vous cherchez “qui” (qui suivi
d'un espace), vous n'obtiendrez que les phrases
comportant "qui “, suivi d'un espace, Les possi-
bilités sont nombreuses.
(La disquette de Tremplin Micro comporte un
fichier de proverbes qui en donne une bonne idée).
Et maintenant, & vous de jover !
Clément Renard.
Ligne 115: Si vous modi-
tiez les commentaires en
les allongeont, votre pro-
gramme sera trop long et
sera “écrasé" por le fichier
de données {installé 4 par-
tir de 5500).
Alors, soyez prudent !
IDEE (GENI
POKE 1493, valour remplace
HTAB (qui, ov-dessus de 49,
n'est pas supporté por tous
les Apple).
GUY-HACHETTE
SAISIE
Elle est classique, avec
GET, en Bosic. Il serait
ible de l'optimiser en
remplogant par une rou-
tine en langoge machine
(une boite de disquettes
vierges & l'auteur de lo
meilleure |).
* Le foit d'ovoir décloré
jes variables L$, R$, R
et H au début du pro-
gromme en améliore
sensiblement Ja ra-
pidité.
* Sur les onciens Apple
tie, la touche ESCAPE
ne doit pos étre utili-
sée... cor elle permet
de se promener 6 tra-
vers l'écran (avec les
flaches, bien sGr). Pro-
blame inexistont sur
les licet leavec 65092
* Avec I’ lie et
lApple lle + 6592, lo
ligne 295 sera rempla-
cde par :
295 FR = 21 THENH =
H + 1: GOTO 225
MEMORISATION
A portir du moment ov
vous avez accédé a Ia rou-
tine de saisie, le fichier
BOITE sera automatique-
ment réécrit lorsque vous
sere cigs rou-
saisie pour l'option
MENU GENERAL.
178
176
188
185
198
195
208
205
2108
215
% Bh 8
248
245
B23 RBHIRTRB
388
305
318
Ad
a
1
SSSISR8H8E E8888
IF R® = CHR® (12) THEN 580
HOME
ON R GOTO 218,528,708: GOTO 15@
3
REM HHENRH ORME He
REM * SAISIE DU TEXTE .
REM FHHHHOHHHEHHRH HEH
HOME :N = N + 1: INVERSE : PRINT N: NORMAL
le=**
L = LEN (L8) - 1:H = L + 3: IF L > 78 THEN CALL - 19
6:L® = LEPTS (L$.L - 1): GOTO 228
IF H-1>LTHENH=L-1
PRINT : VTAB 9: HTAB 1: PRINT L®;: CALL - 958: POKE
1403,H: GET RS
R = ASC (R®)
IF R > 19 THEN
IF R = 8 AND H THEN H = H - 1: GOTO 238
IF R = 4 THEN H = 1: GOTO 230
275
>1
IF R = § THEN S$ = L8: GOTO 215
IF R = 19 THEN L® = S$:S$ = **: GOTO 228
IF R = 13 THEN 335
IF H - 1 = L THEN 315
IF R < > 127 THEN 295
IF H > 1 THEN LS = LEFT@ (LS,H - 1) + RIGHTS (L$,L +
1 - A):H = H - i:L = LEN (LS) - 1
GOTO
IF R = ASC ¢ MIDS (L9,H + 1,1)) THEN H = H + 1: GOTO
238
IF R < 32 OR R > 126 THEN 238
IF L > 77 THEN 220
LS = LEPTS (L8,H) + RS + RIGHTS (L8,L + 1 - H):H =H
+ 1:L = LEN (L$) - 1: GOTO 238
IF R = 127 AND L > @ THEN LS = LEFTS (L8,L): GOTO 22
8
IF R < 32 OR R > 126 THEN 230
IF L > 78 THEN RS = **
Ls = L® + R$: GOTO 228
PRINT : PRINT : PRINT LS
VTAB 17: PRINT "<1> D’ACCORD <2> CORRECTION <3> ANNU
LATION <4> MENU GENERAL ";: CALL - 198: GET RS: PRIN
T
R = VAL (R$): IF R < 1 OR R > 4 THEN 348
ON R GOTO 395,230,215,355
IF NM THEN N = NM:NM = @: RETURN
N=N-1
GOSUB 425: GOTO 158
g
REM HHMENHHHERRH ERR RR RHE
REM © ECRITURE DU FICHIER “
REM CFeeeHHEHETHHT EERO R RENE HERR
:
BOITE-BAS
395 IF L9 =" " THENN = WN - 1: GOTO 210
40@ AD = (BA - 8@) + 6@ * N:AL = AD + L:AP = AD + 79:M =
(suite)
e
405 FOR I = AD TO AL:M = M+ 1: POKE 1,128 + ASC ¢ MIDS
¢L9,M,12): NEXT
410 FOR I = AL + 1 TO AF: POKE 1,@: NEXT
415 IF NM THEN N = NM:NM = @: RETURN
42@ GOTO 218
425 L=N * 88
43@ PRINT CHRS (4)*BSAVE BOITE,A" BA" ,L*L
435 RETURN
448 :
445 REM setae ati iia aera a
450 REM * LECTURE DU FICHIER .
455 REM NIE eH HIE Ene eae
468 :
465 ONERR GOTO 498
47@ PRINT CHR® (4)"BLOAD BOITE*
475 L = PEEK (43616) + PEEK (43617) # 256: REM 48848-41 ,
AVEC PRODOS
480 N=L/ 68
485 RETURN
49@ POKE 216,8: GOTO 125
495:
SOO REM Keke HHHEEHHHEH HNMR RHE M Re
5@5 REM * RECHERCHE ”
510 REM sve IO IO ER
515
t
52@ AR = 848: REM STOCKAGE DU MOT CHERCHE
525 VTAB 6: INPUT "VOTRE MOT-CLE EST -> ";MS
53¢ IF MS = ** THEN 158
535 L = LEN (M$): POKE 252,L: POKE 8,(N - 1) ~ INT (N /
256) * 256: POKE 9, INT ((N - 1) / 256):M = 8
540 FOR I = AR TO AR + L - 1:M = M+ 1: POKE 1,128 + ASC
¢ MIDS (MS,M,1)): NEXT
545 PRINT : CALL 768: CALL - 198
55@ CALL - 198: POKE - 16368,0: WAIT - 16384,128,127: PO
KE ~ 16368,@: PRINT : HOME : GOTO 525
555 :
SEO REM esate acaba at se ate ae eae eae ee
565 REM « LECTURE ET CORRECTION *
57 REM t-te ab te te ate aa iat ae ave at ae ae ae dea aE
575 :
58@ HOME : CALL - 196: PRINT : VTAB 7: INPUT "NUMERO DE
DEPART DEMANDE -> *;R$:RE = VAL (R®)
565 PRINT : IF RE < 1 OR RE > N THEN 645
59@ VTAB 7: CALL - 868: INVERSE : PRINT RE: NORMAL : VTA
B 9: CALL - 868
LONGUEUR
DU FICHIER
Calcul élémentaire, puis-
que chaque enregistre-
ment est limité 4 80 carac-
teres. Ono L = 80 * N
* Notez (ligne 410) que
les lignes sont complé-
tées por outant de 0
qiil y a doctets
libres... jusqu’d 86,
le premier caractére
de chaque donnée est
un espace (ce n’était
pas indispensable).
ONERR GOTO
lors de la premiére créa-
tion de fichier, il évite de
se planter.
ProDOS
Sous ProDOS, ne pas
oublier de modifier lo
ligne 475, comme indiqué
par lo REMarque...
RECHERCHE
On poque en 252 (SFC} lo
longueur du mot cherché
(de 1 & FF... si vous vou-
lez !), et en 8-9 le nombre
actuel de lignes de données
(qui peut donc déposser
SFF... ov 255, puisque deux
octets lui sont réservés).
Quant aux caractéres du
mot, ils sont également
poqués 4 partir de 848,
Cest-d-dire @ la suite de lo
routine en langage
machine... qui soit les lire a
cette adresse C.Q.F.D,
‘Sneeaeeneweseesnreereney
GUY-HACHETTE
ONS CERES EOERSATE NTA T ESAs ces ensAsersss nd ss SASSEETSANN NOSES SHS SSSON OESSSOREATS SSS eT Sse reeeeeeUEEAeTES
CORRECTION
Les copieurs de disquettes
ne souront jamais com:
ment relire leur fichier...
at le corriger, sauf s'ils ont
le courage de lire le pro-
gromme pour comprendre
comment il fonctionne,
Cest élémentaire, non ?
ft maintenant, pour en
savoir plus la-dessus, lisez
tout de méme !'explication
de cette toute petite rou-
tine de recherche.
(ci-dessous et ou verso)
A SAVOIR
* $DB3A (STROUT) affiche la chaine dont vous
lui indiquez I’adresse (Y et A), mais atten-
tion | elle doit obligatoirement se terminer
por un @ ou par des guillemets ("). La partie
basse de |'adresse est mise dans |’occumula-
teur A et la partie haute dans le registre Y.
Cela est obtenu par LDA et LDY (LD comme
LOAD).
* $FDED (COUT) permet d'afficher le caractére
qui est dans laccumulateur A.
(eneeeeETeSTES 3s vee wUSAESSOUUSSSESUEETERUUUETSSS TEES SES
TREMPLIN MICRO
595
680
605
618
615
695
788
AD = (BA - 8@) + CRE * 80): POKE 6,AD - INT (AD / 25
6) * 256: POKE 7, INT CAD / 256)
POKE 8,0: POKE 9,0
CALL 633: REM SORTIE DE LA PHRASE
VTAB 18: PRINT “SUITE = <RETURN> -- CORRECTION = <CT
RL-C> -- AUTRE OPTION = <UNE AUTRE TOUCHE> *;: CALL
- 198: GET RS
PRINT :R = ASC (RS): IF R = 13 THEN RE = RE + 1: GOT
0 585
IF R = 3 THEN NM = N:N = RE: GOTO 630
GOTC 580
Le = “*: FOR I = AD + 79 TO AD STEP - 1:R = PEEK (1)
: IF R < > @ THEN LS = CHRS (R - 126) + L®
NEXT : GOSUB 228
CO = 1: GOTO 588
IF CO = 1 THEN CO = 0: GOSUB 425
GOTO 15@
t
REM HRREHHMHHHHAHEH ERK OHH
REM # ROUTINE DE RECHERCHE “
REM KeNMEHHHEEHEHEH OPH U HR
FOR I = 768 TO 647: READ R: POKE 1,R: NEXT : RETURN
DATA 169,044,133,6,169,21,133,7,198,8,165,8,201,255,
208,9,198,9,165,9,201,255,208,1,96,24,165,6,105,88,!
33,6,144,2,23@,7,168,255,162,255,232,228,252
DATA 24@,20,200,177,6,240,214,221 ,80,3,240,241,134,2
53,152,56,229,253, 168, 76,38,3,165,6,164,7,32,58,219,
169,13,32,237,253,76,8,3
TEXT : HOME °
Si vous étes néophyte, utilisez des trucs
pour vous souvenir de la 5)
des mnémoniques (LDA, STA, ete.)
PAR EXEMPLE :
LDA, LDX, LDY comme LoaD A, X, ¥
STA, STX, STY comme 8Tocke A, X, ¥
CMP, CPX, CPY comme ComParer A, X, ¥
ADC comme ADditionner
SBC comme Soustraire
DEC comme DECrémenter
DEX, DEY comme DEcrémenter X,¥
INC comme INCrémenter
INX et INY comme INerémenter X,Y
JSR... de Saute et Reviens
IMP... Je Me Perds... et je ne reviendral
pas... bref, du délire | NESTOR
020.6 See @¢) #1678 (©
LA BOITE AUX IDEES
Voici, pour terminer, l'explication de
la routine de RECHERCHE (lignes 685 et
699), qui permet de trouver une lettre
ou un groupe de lettres... et d’afficher
la ou les lignes concernées.
a) 0 report pour un tour |
(suite et fin)
DEUX POINTS D’ENTREE
* 768 ($300) pour la recherche proprement dite
© 833 ($341) pour le sous-progromme "Routine et
correction”.
On utilise les odresses $6 - 7-8 - 9- FC - FO de la poge 0.
$152C = 5500-80
Lo partie basse de l'adresse est stockée dans
la mémoire $6, Ia partie haute dans la
mémoire $7
En $8-9, on a le nombre de lignes de données
moins un (poqué depuis le Basic). On le
décrémente. Quond les deux valeurs passent
au-dessous de 0 (@ — 1 = $FF), on a terminé
la lecture des n lignes
RTS renvoie ou Basic
Annulation de la retenve pour ajouter
$50 (80) & l'adresse contenue dans
$6-7, Quand il n'y a pas de retenue,
BCC évite d'incrémenter la mémoire $7
Registre Y 4 $FF
Registre X & SFF
X = X + 1 (@noter que SFF + 1 = @)
X est-il égal & SFC, (longueur du mot) ?
Si oui, on passe 4 l'affichage...
Non : olors ¥ = Y +1
On lit octet contenu 4 I’adresse $6-7 + Y
Si c'est un G@, lo ligne a été lue... dune autre !
Comparaison avec le coractére cherché
S'il est identique, voyons le suivant éventuel
Valeur de X stockée dans FD
Y posse dans A
Retenve 4 1 pour soustraire $FD (autrement
dit X) de A (autrement dit Y).
A repasse dans Y
@300- Ae 20 LDA £87C
@302- 85 06 STA 306
@304- Ao 15 LDA £815
@306- 95 07 STA $07
@308- cs 08 DEC $08
@30A- AS 08 LDA $08
@3ec- co FF CMP = £SFF
@30E- D0 09 BNE $0319
@318- ce a9 DEC $09
@312- AS 29 LDA $09
@314- co FF CMP = £8FF
@316- De 21 BNE 90319
@318- «6e RTS
@319- 16 CLC
@31A- AS 26 LDA $06
@31C- 69 52 ADC £850
@31E- 85 a6 STA $06
@328- 90 02 BCC $0324
@322- BS 07 INC $07
@324- Ag FF LDY £8FF
@326- Az FF LDX £9FF
0328- £56 INX
@329--E4 PC CPX 9FC
o32B- Fe 14 BEQ $0341
@32D- ce INY
@32E- Bi 06 LDA ¢$06),¥
@330- Fe DS BEQ $0398
@332- pDSe eS CMP $8358,x
@335- Fe Fi BEQ $0328
@337- 86 FD STX 9FD
@339- 98 TYA
@33A- 38 SEC
@33B- ES FD SBC $FD
@33D- AB TAY
@33E- 4c 2603 JMP 90326
@341- AS 06 LDA $06
@343- A407 LDY $07
0345- 2¢ 3A DB JSR SDB3A
@348- A? OD LDA £80D
@34A- 20 ED FD JSR $FDED
@34D- 4c 88 03 JMP = 80308
Lisez l'explication page précédente
Retour & lo source | 2
GUY-HACHETTE
LANGAGE MACHINE
VARIABLES
dimensionnées
On saisit cing
données
alphanumériques
et on affiche la
premiére
QUESTION 10 HOME
Pourquoi $843 - $851 ? 20 FOR I= 1 TOS A$(x) est une variable
30 INPUT AS<I>
40 NEXT I
50 PRINT AS¢1)
(ci-dessous) dimensionnée (tableau)
On lira successivement la
longueur puis l'odresse de SRUN Dons la mémoire de l'Apple, le début de
chaque mot dans : ?TOTO la zone réservée aux variables dimen-
$843- 44-45 ?NATHALIE sionnées est pointé par les octets 107 et
$846- 47 - 48 ?LILi 108 ($6B et $6C), mais les octets 13) et
$849-4A-4B ?RENE 132 fournissent le méme renseigne-
$84C-4D- 4E ?Z0E ment... sur la derniére variable utilisée
$84F - 50-5) TOTO {ici, il s’agit de A$(1)).
Notez que les mots
sont stockés les uns
a la suite des autres,
0083- 43 08 = 6843 al'endroit a partir du sommet
SCALL-151
#93.84
“seit de la mémoire, en ASCII
0843- 04 (fc 76) 08 F4
0848- 95 04 FO 95 04 EC 95 03
| 0850- #9S5E9. OSFF
Ev 95 = $95EP 9SE9- SA 4F 45 52 45 4E 45
OSFF = 9SFC+84 (longueur? 95FO- 4C 49 4C 49 4E 41 54 48
95F8- 41 4C 49 45 54 4F 54 4F
TT oo Te
* par NESTOR
TREMPLIN MICRO 3
MASTERMIND
Version pour Apple //
ETTE adaptation du fomeux Mastermind ne décevra certainement pos les (nombreux)
amateurs de jeux de logique. Elle a le mérite d'utiliser, sans aucune modification, la
FONTE.LM parue dans le numéro 5 de Tremplin Micro (sous la signature du méme auteur),
PROGRAMME BASIC
LOMEM: 18108: TEXT :
INT CHR® (21): HOME
PRINT : PRINT CHR® (4)*BLOAD FON
TE.LM"
PRINT :
DFORM*
POKE 232,@: POKE 233,3: SCALE= 1
: ROT= 1
GOSUB 648
REM #¥#e#ee0%4# ECRAN «exe HeHMH
NORMAL : PR
PRINT CHR® (4)*BLOAD MIN
:
AD = 16384
HGR : POKE - 16382,0
HCOLOR= 7
FOR I = @ TO 7 STEP 2
HPLOT @,1 TO 118,1
HPLOT 162,1 TO 279,1
NEXT
HPLOT 8,191 TO 279,191
HOME
HTAB 19: PRINT "MIND"
Ls Js = 4
FOR I= 1 TO 24
=L+ 2: IP L > 17 THEN L = 3:
=C
+3
CHRS (I + 64)
3 HTAB C: PRINT Cs
7:¥ = (L- 1) # 8 - 1:F
a «aire
a
=
I
228
225
238
235
248
245
258
255
268
265
278
275
288
285 :
298
295 :
308
305
318
315
328
325
330
335
348
345
Michel DEVAUX
GOSUB 560
NEXT
CALL AD
FOR I =1T02
J= (I - 1) *# 24 + 141
HPLOT 3,J TO 59,J TO 59,J + 15 T
03,J + 15 T0 3,J
NEXT
HPLOT 65,8 TO 65,191
FOR I =
#704 77+ (K-1
REM s##e#HHHHHY JEU shee MEMO
FOR I =1T05S
NCI) = INT ¢ RND (1) * 24 + 1)
NEXT
L=1:C = 11:CO=8
L=L+ 3: IF L > 19 THEN L = 4:
C=C+ 198
B = @:M = @:CO =CO+1
FOR I = 1 TO S:AACI) = @:NNCID =
@: NEXT
FOR I = 1 T05
VTAB 1: HTAB 1: GET As
ACI) = ASC (AS) ~- 64: IF ACID <
GUY-HACHETTE
1 OR ACI) > 24 THEN PRINT CHRS ¢
7): GOTO 348
3exX=C#7+¢1-1) *# 12-4
36@ F = ACID
365 GOSUB 568
37@ IF ACI) = NCI) THEN B = B+ 1:AA
(1) = 2:NNCI) = 1
375 NEXT
see J = 8
385 J = J + 1: IF J = 6 THEN GOTO 41
5
399 FORT = 1T05
395 IF AACJ> = 1 OR NNCI> = 1 THEN G
OTO 485
400 IF ACJ) = NCI) THEN M = M + 1:AA
(J) = I:NNCI) = 1
405 NEXT
41@ GOTO 385
415 VTAB L: HTAB C
42@ IF M = @ AND B = ® THEN PRINT *
Rien": GOTO 430
425 PRINT "B.*;B;" M.";3M
430 CALL AD
435 IF CO < 16 AND B < > 5 THEN GOTO
320
448 VTAB 22: HTAB 11
445 IF B < > 5 THEN GOTO 470
450 PRINT “Vous avez GAGNE en ";CO;*
coup";
455 IF CO > 1 THEN PRINT ‘s*
46@ IF CO = 1 THEN PRINT
465 GOTO 475
47@ PRINT “Vous avez perdu :"
475 CALL AD
BR
NEXT
VTAB 19: HTAB 2: PRINT “Quitter"
VTAB 22: HTAB 2: PRINT *Rejouer*
CALL 16384
VTAB 1: HTAB 1: GET AS
535 IF AS < > "GQ" AND AS < > *R" THE
N GOTO 530
540 IF AS = "R" THEN RUN 138
545 TEXT : HOME : END
5508 END
555 :
568 REM #Hee¥eeeN PORMES Shenneeened
565 :
57@ IF F = 16 THEN DRAW 12 AT X + 4,
Y: GOTO 638
FO = INT (CF - 1) / 8) + 1
DRAW FO AT X,Y
IF F = 2 OR F = 10 ORF
S75
588
56S
4
n+3*
orm
2
4
F
xaxany
oN og se
g:
_
niet
axa
~m+"
—
PRINCIPE
DU JEU
ordinateur choisit une sélec-
tion de 5 formes graphiques (la
méme peut étre sélectionnée
AD 10 8
BO JD RO
cH Ke so
OH L® TS
EQ) MS UD
FQ NO VO
6B) 0S We
HE P@ x@
plusieurs fois). Quitter
It s'agit de découvrir cette sé-
lection, par déductions succes- |ReJouer
sives, en un minimum de coups.
_
PEORS SPORR
OGTR? OSES
BP ese £2°%S
BOTs SEARS
SPoRe PROFS BPOGS
LEORH PEGS 2PO%%
: 68090
PPO
PPORa
2PO%%
EF°%%
Vous avez perdu
TREMPLIN MICRO
MASTERMIND (suite et fin)
685
618
615
620
625
638
635
648
645
658
655
668
665
678
675
688
685
698
695
708
785
If F = 13 OR F = 15 THEN DRAW 7
ATX +3,Y +3
IF F = 14 OR F = 15 THEN DRAW 18
ATX +5,Y +3
IF F = 21 OR F = 23 OR F = 24 TH
EN DRAW 8 AT X + 2,Y + 2
IF F = 22 OR F = 23 OR F = 24 TH
EN DRAW 11 ATX + 6,Y + 2
IF & = 6 THEN FORJ =X TOX+8
: HPLOT J,Y TO J,Y + 8: NEXT J
RETURN
REM ####HHe PRESENTATION x4 HHH
t
TEXT : HOME
HTAB 13: INVERSE : PRINT " MASTE
R.MIND *: NORMAL
PRINT : PRINT : PRINT : PRINT "
L’ordinateur choisit une sélect
ton de"
PRINT “S formes graphiques parm!
les 24 propo-"
PRINT “sées .*
PRINT : PRINT " Votre but ? Déc
ouvrir cette sélection*
PRINT “en un minimum de coups ."
PRINT : PRINT " A chaque coup,
l‘ordinateur vous Indi-";
PRINT “queca combien votre propo
sition comporte*;
PRINT *de formes BIEN placées et
MAL placées ."—
CALL - 196: VTAB 23: PRINT *APPU
YEZ SUR UNE TOUCHE POUR COMMENCE
R";: GET AS
RETURN e
Pour fonctionner, le programme en Basic doit
&tre accompagné, sur sa disquette par :
© FONTE.LM (Tremplin Micro n°5)
© MINDFORM (ci-dessous)
Adresses :
Fonte.LM : 16384 ($4000)
Mindform ; 768 ($308)
Pour enregistrer les codes de MINDFORM,
passez d'abord en mode moniteur (CALL —
151 .., RETURN), puis tapez chaque ligne en
remplacant le tiret par deux points (:).
lorsque vous aurez terminé, tapez CTRL-e,
puis BSAVE MINDFORM, A$300, LSA8
Si vous attendez de nous un renseignement...
un conseil, joignez toujours un timbre-poste
pour la réponse.
Si vous fous adressez une disquette,
conservez |'original de vos programmes et
n’oubliez pos de joindre une enveloppe
affranchie pour son retour.
Nous n'examinerons votre programme que s'il
a 616 recopié sur une disquette.
GUY-HACHETTE
Rien ne vous oblige 4
recopier la totalité de ce
court programme de
démonstration, encore
que les premiéres lignes,
empruntées & Beagle
ros _soient fort origina-
les (ourlez-vous pensé &
utiliser lo fonction
PLOT... en mode TEXT...
pour transformer votre
écran en damier ?)
Por contre, ne négligez
surtout pas
DAMIER.O : alfiche des
coractéres & I'écran. II
est lent,
DAMIER.1 : écrit directe-
ment dons la mémoire-
écron. || est trés rapide.
qqnquusseesanseccesssses
TREMPLIN MICRO
10@
118
128
130
148
158
160
170
160
198
208
218
220
238
248
258
268
278
288
298
_[Prepos | INITIATION
ECRAN-DAMIER
ES démonstrations sont destinées &
vous montrer les énormes possibilités
du langage machine, utilisé pour de courtes
routines. Vous constaterez notamment, en
comparant DAMIER.@ et DAMIER.! (page
14), qu'il est souvent facile, en traitant le
probléme d'une autre maniére, d’accélérer
considérablement la vitesse d'exécution,
r—— DAMIER.BAS 40 COLONNES ——,
TEXT : PRINT CHRS (21): HOME : COLOR= 2
VTAB 12: HTAB 5: INVERSE : PRINT * DAMIER EN BASIC ¢
BEAGLE BROS) *: NORMAL
GOSUB 298: HOME
FOR X = @ TO 39 STEP 2: FOR Y = 1 TO 47 STEP 2:2 = 2
= @: PLOT X + 2,¥: NEXT Y,X: POKES 37,255
GOSUB 298: HOME
PRINT : PRINT : LIST 100: LIST 13@: GOSUB 29@: HOME
VTAB 12: HTAB 2: INVERSE : PRINT " DAMIER EN LANGAGE
MACHINE, VERSION @ *
NORMAL : GOSUB 298
PRINT : PRINT CHRS (4)"BLOAD DAMIER."
FOR I = 1 TO 3: GOSUB 298: CALL 768: GOSUB 298: HOME
: NEXT
VTAB 12: HTAB 2: INVERSE : PRINT " DAMIER EN LANGAGE
MACHINE, VERSION 1 “
NORMAL : GOSUB 298
PRINT : PRINT CHRS (4)"BLOAD DAMIER. 1*
FOR I = 1 TO 3: GOSUB 298: CALL 768: GOSUB 298: HOME
: NEXT
VTAB 22: PRINT “<1> ENCORE <2> MENU DISQUETTE <3> FI
N "3: GET RS: PRINT
IF RS = "1* THEN RUN
IF R$ = “2* THEN PRINT CHRS (4)"RUN MENU"
IF R$ < > *S3* THEN 248
HOME : END
CALL - 198: POKE - 16368,@: WAIT - 16384,126,127: PO
KE - 16368,0: RETURN
—
3
@300- 20 58 FC JSR s$FCSB | Gn state Pecron
@303- Ag 18 LDA £918 i 18 (2 lo: mammal
e3e5- 8S @6 STA oec puis on stocke $18 (24) dans la mémoire $6
@307- A? AG LDA £SAO ‘| COUT) ($FDFG) envoie un espace
@309- 20 F@ FD JSR SFDF@
@3eCc- Ad a0 LDY £908 ‘ = :
— i =
been a ie on ees Lecture de la mémoire $6 (par A)
@312- co @1 CMP £901 On compare le contenu de Ad}
@314- De @4 BNE S@31A Si ce n'est pas égal, saut 4$31A
0316- Ce 13 CPY £913 ¥ est-il gal & $13 (19) ?
@318- Fe 1 BEQ S@31B Oui : alors on saute 6 $318
@3tA- E8 INX X=X+1
@31B- Ag LDA £820 $20 (espace inverse) mis. dans A
@31D- 20 JSR SF94C PRBL3 ($F94C) envoile A + X — | espace(s)
@320- ce INY Y=Y+)
@321- ce CPY £914 Y est-il & $14 (20) ?
@323- 90 BCC $O30E Si oui (C = G), on revient & $30E
@325- AS LDA $24 Lecture de CH (position horizontale du curseur)
@327- 48 PHA A stocké sur la pile
@3286- 38 SEC Retenue 4 | pour soustraire
a. 4 4 ont ‘| Position HOR. moins 1
@32D- cé DEC 906 Et moins | pour le nombre de lignes
@32F- Fo BEQ $0336 Si on est 4 zéro, terminé |
@331- 68 PLA On récupére A sur la pile
8332- De BNE $830C S'il est différent de G, ligne impaire
@334- Fe BEG 30307 ou, au contraire, ligne paire
@336- 68 PLA Ne pas oublier de dépiler A
oo ae a picts Retour du curseur en haut de I'écran... et
SoS7- bod STA #25 retour au Basic
@335- 6a RTS
DAN
ae «an &
6303- AQ LDY £801 =
@305- 20 JSR SFBCI BASCALC colcule l’adresse de base
0308- A? LDA £920 Espace inverse dons A
@30A- 91 STA ($28),Y Stockoge de A 4 !'adresse lue dans $28/29 + Y
e30Cc~- ce INY ‘| Y incrémenté deux fois (damier |)
@3eD- cs INY
@30E- Ce 28 CPY £828 Est-il & $28 ?
O318- 98 FS BCC SO30A S'il est ou-dessous, un autre tour
@312- E6 25 INC $25 Sinon on incrémente CV (VTAB)
@314- AS 25 LDA $25 Puis on en fit la valeur
0316- cs 23 CMP $23 Que l'on compare & $23 (ou il y a $18)
@318- Fo @8 BEQ 30322 Si A = $18 (24), c'est fini
@31A- ce 28 CcPY £928 Y est-il égal 4 $28 (40) ?
@31C- Fe ES BEG 28333 Si oui, un espace pour commencer ic ligne
@31E- A® 60 LbY £309 Non: alors ¥ = 1 (pas d’espace)
@320- Fe ES BEQ $0395 GOTO $305
@322- A? FF LDA £9FF
@324- 85 25 STA $25 Voir DAMIER.G
@326- 68 RTS .
14
GUY-HACHETTE
Passons maintenant sur 80 colonnes
VERSION MIXTE
Si vous étes courageux (bien sir que vous I'étes !), reco-
piez les 47 octets de cette version mixte. Elle a le mérite
(?) de donner le méme résultat sur 40 ou 80 colonnes.
300: 20 58 FC AG @)I
ce 8D 54 CO CO 28 WW FO
20 «Cl FB AD 20 91 28 8D 55 CO 91 28 CB
—€6 25 AS 25 C5 23 FO G8 CO 28
Fo DD AG GG FG DB AP FF 85 25 66
Pour terminer : BSAVE DAMIER.80cp, AS3@@, L$2F
Utilisation CALL 768 (aprés un PRE£3... si vous désirez le damier sur 80 colonnes).
La gestion de votre écran
80 colonnes est plus com-
lexe que celle de
'éran 49 colonnes.
En effet, un coractére sur
deux est en mémoire
ouxiligire, & Ia méme
odresse qu’en mémoire
normale (dite résidente).
Ainsi, pour lire ou écrire
chaque caractére, il faut
d'obord toper un :
POKE 49237,0 ($C@55) qui
dofne accés @ ila
MEM.AUX., puis un
POKE 49236,0 ($CO54) qui
roméne en mémoire vive.
En langage machine, on
ne procéde pas autrement
{voir page suivante).
écron (valable en 40 ou
en 89 colonnes),
DAMIER.BAS 80 COLONNES
10@ PRINT CHR® (4)"PR£3": PRINT : HOME
118 P = ABS (P - 1): POKE 49236 + P,@
12@ READ A: IF NOT (A) THEN POKE 49236,0: GOTO 15¢
138 B= A+ 39
148 FOR I = A TO B: POKE I,92: NEXT : GOTO 11@
158 GOSUB 31¢: GOSUB 320: PRINT : PRINT : PRINT “ ET MAI
NTENANT PASSONS A LA ROUTINE EN LANGAGE MACHINE, EVI
DEMMENT PLUS RAPIDE": GOSUB 310
168 PRINT CHR® (4)"BLOAD DAMIER. 8@cp*
178 CALL 768: GOSUB 318
168 GOSUB 328: LIST 198,210: GOSUB 318: CALL 768: GOSUB
31e
198 PRINT CHR® (17): GOSUB 318
20@ PRINT CHR® (18): GOSUB 31@
218 PRINT CHR® (17): GOSUB 318
228 CALL 768: GOSUB 31@: GOSUB 320: LIST 238,25@: GOSUB
31@: CALL 768: GOSUB 318
238 PRINT CHRS (18>: CALL 768: GOSUB 318
248 PRINT CHRS (21>: CALL 768: GOSUB 318
25@ PRINT CHRS (4)"PR£3*: PRINT : CALL 768: GOSUB 31¢
268 GOSUB 32@: PRINT : PRINT : PRINT “<i> A REFAIRE <2>
MENU GENERAL DE LA DISQUETTE <3> FIN-PROGRAMME EN
MEMOIRE *;: GET R®: PRINT
= "1" THEN RUN
= "2" THEN PRINT CHR® (4)"RUN MENU"
RS = "3" THEN HOME : END
268
LL - 196: POKE - 16368,0: WAIT - 16384,126,127: PO
~ 16368,8: PRINT : RETURN
E 37,18: CALL - 958: RETURN
TA 1024,1152, 1280, 1408, 1596, 1664,1792,1920,1864,11
92,1328 ,1448, 1576, 1784, 1832, 1968, 1104,1232, 1368, 1468
+1616,1744,1872,2080,0 ~~
$383
: pope
$8
Bane
ECRAN-DAMIER
8300- 20 56 FC
@305- 20 Ci FB
0308- AS 28
@312- ce 28
9314- 98 FY
@316- 48
@317- 98
0318- i8
@319- 69 57
@31B- AB
@31C- BD 54 CO
@31F- 68
9320- 91 28
@322- ce
@323- ce AB
@325- 90 F9
6327- E6 25
@329- AS 25
@32B- CS 23
@32D- De D4
@32F- A? FF
@331- 85 25
JSR
LDY
JSR
LDA
INC
STA
STA
INY
CPY
BCC
PHA
TYA
cLe
ADC
TAY
STA
PLA
STA
INY
CPY
BCC
INC
LDA
CMP
BNE
LDA
STA
RTS
BSAVE DAMIER.8G cp, AS3O0, L$34
(suite et fin)
sFCS8
£900
SFBC1
£920
$25
$Cass
($28),Y
£328
S030F
£357
$COS4
($28) ,Y
£8A8
$8320
$25
$25
$23
$8383
£9FF
$25
]
Home
y=9
BASCALC colcule l'adresse de base
Espace inverse mis dans f'accumulateur
CV (VTAB en Basic) = CV +1
Pour lire ow écrire en MEM. AUX. (page 2)
A copié & l'adresse lue en $28/29 + ¥
yY=¥+1
¥ est-il dgal 4 $28 (40) ?
S'il est plus petit, ligne inachevée
Contenu de A empilé
Y¥ est mis dans A
Annulation de la retenue
A = A+ $57... lire en bas de page
Nouvelle valeur de A dans ¥
Pour lire ou décrire en MEM. normale
On récupére A sur le pile ($20)
On I'écrit 4 l'adresse lue en $28/29 + ¥
Y=Y¥+1
Y est-il égal 4 $A8 ?... (lire en bas de page)
Non : on n'a pas écrit toute la ligne
cv = CV + 1 (VTAB)
Valeur de CV dans A
Est-elle égale 4 celle contenve dans $23 ?
Non : ona encore des lignes 4 écrire
Curseur 6 lo ligne G... et
retour ou Basic
BASCALC ($FBC1) calcule, on le sait, l'adresse de base de chaque
ligne de I’écran, & partir de la valeur (@ 4 $17) contenue dans $25
(CV). On trouve cette adresse de base dans BASLet BASH ($28 et
29). A noter que la mémoire $23 contient le numéro (1 4 24) de la
derniére ligne de I'écran. Si elle n'a pas été modifiée, on sait donc y
trouver $18 (24).
128 octets ($80) séparent l'adresse de base de Ia ligne G... de celle de Ia ligne 1... et ainsi
de suite, de 2 en 2 (paire-impaire, paire-impaire, etc.)... d'ou les étranges additions obser-
vées dans la routine ci-dessus ($28 + $57 = $7F). De méme, plus loin, SA8 = $28 + $80.
Et voild | j'espére, avec ces quelques démonstrations, vous avoir donné envie de faire,
vous aussi, quelques courtes incursions dans le “ténébreux” (en apparence) langage
machine. C'est un jeu de logique qui vaut bien le Mastermind et ses nombreux dérivés !
NESTOR
%
GUY-HACHETTE
INITIATION
cegzzemq AND.DEMO
UIT bits constituent un octet... du moins avec le 6502 (ou 65CG2) et quelques autres. Les signes
H cabalistiques NVBDIZC sont des indicateurs qui prennent la valeur @ ou | suivant le mode ou
I'état du processeur. Ainsi, C = 1 quand la retenue est 61; Z = 1 si le dernier résultat est nul
(sil y a eu égalité dans une comparaison). Il est bon de savoir que le bit de signe est N (a 1 quand le
dernier calcul a donné un résultat négatif).
Mais l'objet de cet article est autre ; comment forcer un ou plusieurs bits 4 @... avec I'instruction AND ?
Avont d’aller plus loin, signalons qu'il est impossible de comprendre les opérations sur les bits sans avoir
sous les yeux un tableau des codes HEXA et (surtout) binaires des 255 premiers nombres. C'est l'objet de la
fiche de ce numéro.
AND @st une opération logique (comme ORA et EOR) et opére bit par bit, trés simplement ; 1 — | =
—— 1,1—@ = G,@—1 = G. Mais plusieurs exemples valent mieux qu'un long discours (LDA
signifie que l'on place dans |‘Accumulateur la valeur indiquée) :
LDA so41111111 $FF VVV11001 SFF VVVTVIN) SFr i AVOUEZ
>
oe
n
—
t=]
9
AND <GocGga000 $a G00GGG01 $G1 1G0G0001 $8) QUE C’EST
RESULTAT + GG9GG0G0 $0 GoGoGaG! $01 10000001 $81 PRATIQUE!
LDA 11111111 SFF 1010101 $55
QUESTION : AND 11101111 SEF 11107111 SEF
Comment forcer 4G le seul bit 4? Comme ceci; RESULTAT 11101111 SEF G1IGGGQ1G1 $45
APPLICATION _ Etvoici un petit programme d’opplication, entiérement en langage machine.
OO Objet: afficher les caractéres de l'alphabet en mode inverse... mais
seulement si leur valeur est impaire. Consultez notre FICHE. Vous constaterez que le bit 0 de tous les
coractires impairs... est 1, d'ou l'intérét de AND. Passons donc & la routine (lancée par CALL 768).
AND.DEMO
0300- 20 SB FC JSR $FC58 Home
0383- A? 60 LDA £300 A=90
@305- 85 @6 STA 306 Adresse 600
@307- E6 06 INC 806 Mémoire 6 + 1
9389- AS 66 LDA 306 Mémoire 6 dans Accumulateur
@30B- 29 @1 AND £301 ET VOICI AND...
@3eD- FO 11 BEQ $9322 Sionobtient@, pas d’atlichage
930F- A2 82 LDX £902 Autrement X = 2 pour envoyer | espace
$311- AS 06 LDA S06 Relecture de lo mémoire 6
@313- 2@ 4C F? JSR SF94C = PRBLS affiche A + X — 1 espoce
9316- A6 06 LDX 306 Mémoire 6 dans X
9316- A? oo LDA £900 A=@ as
TREMPLIN MICRO 7
Ree en raes ens sen neers ee SESE OSES A SEONEE SSR SOUESE LATION TT orc eess ee ees es SSEE Te SRESESSS ESSE ILTT cae eae TOS
AND.DEMO (suite)
@31A- 20 24 ED JSR $ED24 On offiche les deux octets de X, A
@31D- 20 62 FC JSR $FC62 Retour chariot
@320- AS 06 LDA $06 On récupére la valeur de A
@322- co iA CMP £91A Est-elle égale 4 $1A (26) ?
@324- De £1 BNE 9%0387 Non : encore un tour
@326- A? 6 LDA £806 A= $06 POKE 32,6
e328- 85 20 STA $20 — en $20
@32A- Ag 21 LDA £921 ot OKE 33.33 ($21
@32C- 85 21 STA $21 $21 stocké en $21 J , im 2) ]
@32E- 2@ SB FC JSR $%FCS8 HOME
poral ros 4 on Load | Curseur en hout de I'écran
@335- Ao ee LDA £900 ]
@337- 85 3A STA $3A On place en $3A et $38 l'adresse de départ |
@339- AY @3 LDA £903 de cette routine et dans A le nombre d’ins-
933B- 85 3B STA $38 tructions 4 désassembler, puis $FE63 fait le
@33D- A? 10 LDA = £910 reste
033F- 20 63 FE JSR %FE63 _
@342- A 16 LDY £916 ¥ = $16 (za)
@344- 89 8D 86 LDA se6ED,y lecturedelamémoire$6s0 + ¥
0347- C9 AG CMP £9A0 Est-ce un espace ?
@349- Fe @2 BEQ $034D Si oui on ne le transforme pas... on saute !
@34B- 29 3F AND £93F Non ; avec AND, coractére mode inverse
@34D- 99 8D 86 STA S068D,Y _ ‘lest réécrit
8350- 88 DEY yay] |
0351- De Fi BNE $0344 Sion n'est pas 4G, encore un tour |
353- A? 00 LDA £300 7] ¥ étant 4G, on pouvait économiser une ins-
@355- 85 28 STA $20 _} truction en utilisant STY $20
@357- A? 28 LDA = £928 7] A = $28 (49) pour rétablir lo fenétre d'écran
@359- 85 21 STA $21 _} normale
@35B- A? 12 LDA £912 7
@35D- 85 25 STA $25 |, LEAVERS)
@35F- 26 62 FC JSR %FC62 Retour choriot
8362- 28 22 FC JSR $sFC22 VTAB ploce le curseur en CV
@365- A2 08 LDX £908 “ ra
@367- 20 4A F9 JSR SF94A _| X= Spourenvoyer...Bespoces
@36A- 2@ B® FE JSR SsFE8@ SETINV affichage en mode inverse
@36D- A®@ @3 LDY £883 7 eens ——
— J STROI je Message iresse
cont: oH 4 DB = oan est mise dons Y et A (il se termine par @)
@374- 20 64 FE JSR $FE84 —— SETNORM... mode normal
@377- 20 E4 FB JSR SFBE4 BELL2 se foit entendre
@37A- 20 88 FB JSR 9FB88 KBDWAIT attend une touche
@37D- 20 S8 FC JSR $FC58 HOME
o380- Ge RTS BASIC
De 38] & 397 ; message IMPAIR OU PAIR AVEC AND :
381: 49 4D 50 41 49 52 20 4F 55 20 4E 4F 4E 20 41 56 45 43 20 41
4— 44 00 |
Pour terminer : CTRL-C RETURN, puis BSAVE AND.DEMO, ASI00. L896 e J
1 GUY-HACHETTE
LANGAGE MACHINE EESEEMIZ
INITIATION
Toutes les lignes de I’écran
inversées en un clin d’oeil !
100 TEXT : PRINT CHR® (21): HOME
118 GOSUB 250 =
12@ ONERR GOTO 190
13@ FOR I = 1 TO 24: PRINT I;
14@ IF I = 11 THEN PRINT “ “;: INVERSE : PRINT " CONTROL
E-C POUR INTERROMPRE ";: NORMAL
18@ IF I < 24 THEN PRINT **
168 NEXT
178 VTAB 1: CALL 768
168 CALL - 198: POKE - 16368,@: WAIT - 16364,128,127: PO
KE - 16368,8: GOTO 178
198 HOME : POKE 58,@: POKE 59,3: CALL - 418: GET R@: PRI | SMPILER-DEPILER
NT Lo derniére valeur empi-
200 PRINT : HOME : VTAB 22: PRINT *<i> ENCORE <2> MENU D lée va devenir la pre-
__ISQUETTE <3> FIN ";: CALL - 198: GET R®: PRINT miére dépilée... ce qui
210 HOME : IF R® = *1* THEN GOTO 120 permet de retourner faci-
22¢ IF R$ = "2" THEN PRINT CHRS (4)"RUN MENU* lement les 40 octets de
23@ IF R@ < > "3" THEN 208 chaque ligne.
24@ END
258 FOR I = 768 TO 768 + 33: READ R: POKE 1,R: NEXT : RE
TURN
268 DATA 162,23, 198,32, 193,251, 160,8,177,40,72,200,192,4 | Ne ‘apex pos lo routing
Poa altel aan et tela schsvelie deh connect
229, 169,255, 133,37,96
dans Ia ligne 260.
e300- A2 17 LDX £917 X = $17 (nombre de lignes d'écran - G- 23)
0302- 8A TXA X passe dans A (sans &tre modifié)
0303- 2@ Ci FB JSR SFBCi BASCALC donne I'odresse du premier octet
Q386- AW 88 LDY £308 Y = @ pour la boucle
0386- Bi .28 LDA €$28),Y Lecture de la mémoire dont l'adresse est en $28-29 + Y
@38A- 48 PHA Contenu de A empilé
030B- ce INY vY=Y¥+)
@3eC- ce 28 CPY £328 Y est-il egal 6 $28 (40) 7
@3@E- De Fe BNE 30308 Non : encore un tour (on va 6 $308)
6310- As ee LDY £300 Y = @ pour seconde boucle
9312- 68 PLA On récupére une valeur de la pile
0313- 91 26 STA €$28),Y On''écrit 4 l’adresse lue en $28-29 + ¥
@315- cB INY Y=Y+1
0316- ce 28 cPY £328 Y est-il égal & $28 (4G) ?
0318- De FS BNE $0312 Non : on recommence
O31A- CA DEX X = X—1 (nombre de lignes)
O31B- 1@ ES BPL 30302 Si on est positif, encore un tour !
631D- Ag FF LDA £SFF
O31F- 85 25 STA $25 | Curseur en haut de I'écran et retour au Basic.
6321- 62 RTS
(esureserrececereseaneeresseess tue sseuE Zerg ls 208s RSEE Ee OSES TEST TO UE sees Sees VUE IT TT ae see ES UESSELSESED
TREMPLIN MICRO 9
LANGAGE MACHINE [EQSEE)
TETE EN BAS
T maintenant, renversons les lignes de
I'écran... comme cela, simplement pour
le plaisir, en attendant qu'une (bonne)
occasion d'utiliser la routine se présente.
INITIATION
108
165
118
115
120
125
138
135
148
145
158
185
168
165
178
175
188
185
TEXT : PRINT CHR® (21): HOME : GOSUB 175
ONERR GOTO 145
E = 35: FOR I = 1 TO 24
PRINT I; SPCC EDI;
IF I = 9 THEN HTAB 8: INVERSE : PRINT " CONTROLE-C P
OUR STOPPER *;: NORMAL :E=E- 1
IF I < > 24 THEN PRINT “*
NEXT
VTAB 1: PRINT “*
GOSUB 170: CALL 768: GOTO 135
HOME : VTAB 22: CALL - 198: PRINT "<i> ENCORE <2> ME
NU DISQUETTE <3> FIN ";: GET RS
PRINT : HOME : IF R$ = "1* THEN 110
IP R® = "2" THEN PRINT CHRS (4)"RUN MENU*
IF RS < > *3* THEN 145
END
CALL - 198: POKE - 16368,0: WAIT - 16384,128,127: PO
KE - 16368,0: RETURN
FOR | = 768 TO 852: READ R: POKE 1,R: NEXT : RETURN
DATA 169,@,133,6,169,32,133,7,162,23,138,32,193,251,
168 ,@,177,48,145,6, 208,192, 48,208,247,165,6,24,105,4
8,133,6,144,2,238,7,202,16
DATA 227,169,32,133,7,169,0,133,6,162,0,138,32,193,2
51,160,0,177,6,145,48,288,192,40,208,247,165,6,24,10
5,40,133,6,144,2,230,7,232,224,24,288,225,169,255,13
3,37,96
Dans Ia routine en
langage machine
(lignes 180-185)
expliquée ci-contre,
on recopie I’écran &
partir de l'adresse
$2009, puis on le
réécrit en
commencant por la
ligne du bas.
On pourrait utiliser la
pile (un peu comme
on I'a fait avec
MIROIR) de la
maniére suivante :
* Lire et empiler lo
ligne @
* Lire et empiler Ia
ligne 23
* Dépiler pour écrire
la ligne @
° ra ea pour écrire
la ligne 23
.. et ainsi de suite,
jusqu’d 11 et 12
(voir page 22).
Si, aprés le CALL — 151 bien connu, vous
tapez ces 5 instructions (uniquement ce 300: A? @2 LDA £$02
jemmmmeem qui est en gras), puis * 300 G.., RETURN, 302: 85 06 STA $06
vous constaterez que la mémolre $6 con- 304: C6 06 DEC $06
tient $FF. En effet, BPL renvoie l'odresse $304 tant que 306: WW FC BPL $0304
le résultat est égal ou supérieur 49. 308: 60 RTS
GUY-HACHETTE
TETE EN BAS (LIGNES 180-185)
@300- A? 20 LDA £300
@302- 85 06 STA $06 initialisation des pointeurs $6-7 avec $2000 ir
2384- A? 2¢@ LDA £820 mémorisation de Pécron) sia
@306- 85 07 STA $07
@308- A2 i7 LDX £817 initialisation nombre de lignes ($17 = 23)
Q30A- 8A TXA X passe dans A (ovate n'est pas modifié)
O30B- 2@ Ci FB JSR $FBC1i BASCALC calcule l'odresse de base
O38R- Aa 08 LDY £900 Y = @ pour la boucle
a rt be oan ‘ pe ; i. | Lecture écran et mémo, & partir de $2000
@314- ce INY yY=Y+1
0315- ce 28 CPY £$28 A-t-on lu 40 caractéres ?
@317- D@ F7 BNE $8310 Non : encore une lecture
@319- AS @6 LDA $06 Contenu de la mémoire $6 dons A
@31B- 18 CLC Annulation de la retenve
@31C- 69 28 ADC £928 A =A + $28 (40)
@31E- 85 66 STA 206 Aremis dans le pointeur $6
@320- 90 a2 BCC $0324 S'il n'y a pas eu de retenue, on saute
@322- E6 07 INC $07 Sinon iI faut incrémenter le pointeur $7
@324- CA DEX x=XxX-—1
@325- 10 E3 BPL 030A Voir bas de page précédente
@327- = AD 28 LDA £%20 i]
@329- 85 07 STA $07 "
@328- Ao @@ LDA £900 Nouvelle initialisation des pointeurs $6 et $7
@32D- 85 26 STA $06 a
932F- A2 0@ LDX £990 Puis de X (cette fois, on part de G)
@331- 8A TXA —] Le déroulement est rigoureusement
8332- 20 Ci FB JSR $FBC1 le méme que dons la premiére partie,
@335- AG oO LDY £800 si in ihe aus sis incrémente X
= ou lieu ie décrémenter...
ao. a a6 nos ¢ Leos + et que l'on lit & adresse
1 28 ($28),Y indiquée par les pointeurs...
@33B- cB INY pour écrire & celle indiquée par BASCALC,
@33C- ce 28 CPY £828
@33E- De F7 BNE %@337
@340- AS 06 LDA 206
@342- 18 cLc
0343- 69? 28 ADC £928
@345- 8S 06 STA $06
@347- 98 02 BCC $034B
0349- E6 07 INC $07 ie ag we
RAPPEL: L'a: met ire (ou
Soe 4 18 pase £918 scr) a fadrene indguse + ¥! ainsi quond Y — 5
et que 7 contionnent 0020,
O34E- De Ei BNE $0331 | Seotenw dolomémotre $2000 + yo $2005
@350- A? FF LDA £SFF “| vee
@352- 85 25 STA $25 a 1
@354- 60 RTS Retour ou Bosic
= —
300- A917 LDA £917
TETE.EN.BAS version 2) | 302. os 0c STA $06
304- Az oe LDX £908
3@6- 8A TXA
A routine de retournement d'écran va 307- 20 Ci FB JSR = SFBC1
de $300 4 347 (L$48) et correspond aux post m4 Hi ad rnd y
lignes 175-18@ du programme DEMO. ae me PHA :
La partie $348-360 remplit I'écran de lignes 30F- ae DEY
de coractéres. 310- 18 FA BPL $830C
100 TEXT : PRINT CHR® (21): HOME a Se LOR, eo
pd TR 314- 20 Ci FB JSR 9FBCi
ot eee ateses B17- A@ 27 LDY £927
Hace ae 319- Bl 28 LDA ($28),Y
115 ‘ 31B- 48 PHA
128 VTAB 24: INVERSE : PRINT “PRESSE | 3/0. 3° aoe
2 UNE TOUCHE (CTRL-C POUR PIND*; | Sin OO Mer. esis
je Vine ie PRinr'** oe cee “saan
198 CALL - 198: POKE - 16968,0: waIT | 3207 20 Cl FB JRE gene
~ 16384,128,127: POKE - 16968,0 | S32 38 Sta
t CALL 768:X = ABS (X - 1): GOTO 326- 31 28 STA ($28),
190 328- cB INY
135 X = X + 1: INVERSE : PRINT X:: N 329- ce 28 cPy £328
ae TF X THEN CALL 768 — =e — ao
32D- AS 06 LDA 06
145 VTAB 24:X = @: GOSUB 135: PRINT ak oe cae Seon
* ENCORE ";: GOSUB 195: PRINT * aaa. /e ae ra Ree
MENU DE DISQUETTE *;: GoSUB 136: | 332° 5 re
PRINT " FIN > "3: CALL - 198: G 335- 91 28 STA ¢928).Y }
ag re ai 337- cB INY
150 VIAB t: PRINT **: IF RO = "1" TH | S77 CO oF case
PR = 03. OTD Aah . | 33A- De Fe BNE $0334
155 IF R$ = "2" THEN PRINT CHRS (4) = wae a mae
RON MENU ae INK i)
160 IF R¢ < > "3" THEN 145 — ie op saaee
165 HOME : END 341- De cs BNE $0306
170 FOR I = 768 TO 864: READ R: POKE | 343° D8 C3 ix “aa
I,R: NEXT : RETURN : REM LA ROU | 342° 8° FE on Sa5
TINE "TETE.EN.BAS* NE COMPRENDO | 345° = 8° oe
UE LES va vemerees cererg cveaa'| SO SS See were
175 DATA 169,23,193,6,162,0,138,32,1 | 34B7 82 90 laa
ee Se ee
50,165,6,92,193,251,160.39,177.4 | Ser oe er
0, 72,136, 16,250,138,92,199,251,1 | S25. Bf a eas
60,0, 104,145, 48 ne ray peor
180 DATA 200, 192,40,208,248,165,6,32 | See 3? 2? cra. Caca tie
193,251, 168,8,104,145,40,200,19 | See- o% oer =~
2,40 ,208,248,198,6,292,224,12,28 | Seo OO pepe. 4 eeese
8,195, 169,255, 133,37,96 i. i ae
185 DATA $2,88,252,162,0,198,32,193, | See ER coe et7
251,138,185, 193, 168,39,145,48,13 | See> BO IP a Sanas
6, 16,251,232, 224,23, 208, 237,96 cc. Oo pre I
22 GUY-HACHETTE
Dominique LUGAT
UTILITAIRE
| TRANSLIST
Ou comment créer un fichier source a partir
d’une simple routine en langage machine ?
RENONS un exemple précis : celui de TETE.EN.BAS (ci-contre). Tremplin
Micro publie le désassemblage des N instructions de cette petite routine,
_ Mais sans passer par un assembleur. C’est donc la réplique exacte du listage
que vous pouvez obtenir sur votre écran. La méme routine, présentée par un
Assembleur (type ProCODE) permet de situer les différents branchements
(boucles), d'identifier les labels et, éventuellement, grace 4 I'indication de
l'adresse de départ (ORG), de modifier facilement toutes les adresses.
D'oi l'intérét présenté par TRANSLIST qui désassemble — tout seu! et comme
un grand — n'importe quelle routine binaire (installée 4 l’adresse $300 et de
longueur inférieure & $DG), pour la mémoriser sous forme de fichier-texte...
accepté par les assembleurs.
Installez l'ensemble des programmes sur une
disquette spéciale ProDOS. Ceux-ci sont en
Basic, et au nombre de trois (plus un fichier) :
* TRANSLIST (le gros morceau), @ partir de la
page 25
* LABELS.CREER (court), page 24
* LABELS.LIRE (plus court encore !), page 28
* LABELS (le fichier créé par vos soins)
Création des labels
Pour fonctionner convenablement, TRANSLIST
doit pouvoir consulter un fichier LABELS conte-
nant av moins un label, Bien sdr, plus le nom-
bre de labels sera grand et plus le fichier-
source généré par TRANSLIST sera documenté
(par contre, le temps de traitement augmentera
d'autant}.
Bonc ; RUN LABELS.CREER... et & vous de soisir
VO5 lobels (nous vous suggérons, page 24, une
premiére liste), dans la limite de... 300.
Si vous désirez relire votre fichier LABELS. utili-
sez UT.LABELS,
POUR LES CONNAISSEURS
Charger le fichier LABELS @ partir d'un Assemblour
ne pose aucun probléme si colvi-ci n'utilise pos le
type binaire pour ses fichiers-sources,
IMPORTANT : n’oubliez pas de modifier le PRE-
FIXE (ligne 110) pour qu'il corresponde 4 celui
de votre disquette (variable PF$),
Dés que TRANSLIST est lancé, il vous demande
de lui indiquer le...
...nom du programme bingire
Ou, ledit programme figure sur la méme dis-
uette que TRANSLIST... et il suffit d’en toper
Guactenan) le titre... ov il se trouve sur une
autre, et vous devrez alors indiquer le nouveau
préfixe, suivi du titre (Exemple: TOTO ou
/TRUC/TOTO). En cas de faute de frappe, utili-
sez la touche DEL pour effacer.
Pour le reste, observez ce qui se passe sur votre
écran, et tricotez un cache-col pour votre
grand-mére... si vous trouvez le temps long !
Quand le nombre de labels est dlevé et que le
a eee SESS eee S NSS ESS RSS SRSTTST SS SESE TRREETRRENESERREREEERESEEEeNEEEES
TREMPLIN MICRO
23
Quelques idées de LABELS...
ADRESSES $ | LABELS COMMENTAIRES
a INDEXB Adressage indexé
07 INDEXH Partie houte
068 VARI Variable(s) poge &
oF VAR2
"9 VARS
1A VAR4
1B VARS
ic VAR6
1D VAR7
1E VARB
1F VAR?
20 WNODLFT Marge gauche
21 WNDWODTH | Largeur fenétre
22 WNDTOP Hout de fonéire
23 WNDBTM =| Basdetenétre
24 CH Position curseur horiz.
25 cv Position curseur vertt,
30 HMASK Masque bit/point
g3D0 VECDOS Met le ProDOS en ligne
G3EA INTDOS Reprise des E/Sorties
O3F5 AMPER & Ampersand ($4C)
G3F6 AMPERB & Partie basse
O3F7 AMPERH & Partie haute
cooo KBD Saisie touche sans écho
cole KBDSTRB Nettoie le bit 7 $C000
co30 SPKR Activation HP
DB3A STROUT Affiche une chaine par ¥ A
pBSC OUTDO Aifiche Foccumyloteur
F3p8 HGR2 Etfocement des pages
FBC! BASCALC Catcul odresse écran
C22 VTAB Déplace curseur en CV
FC42 CLREOP Eff. jusque bos écran
FCS8 HOME Efface Fécran
FC62 cR Envoie retour chariot
FCA8 WAIT Boucle dattente (Acc)
FDIB KEYIN Entrée coroc, avec écho
FOeC RDKEY Fait clignoter curseur
FDDA PRBYTE Alf. occ. héxa sur 2 octets
FDED COUT Sortie accumulateur 3
FF3A BELL Bilip
4
programme atteint la limite maximum ou’
sée, on a le temps de faire la pause-café. C’
un peu comme avec un compilateur, mais ce
n'est pas une raison pour se priver des (bons)
services de TRANSLIST !
Suivant la version de votre Apple, certaines
instructions (et notamment les nouvelles,
propres au 65C02 ... du lic) ne seront pas
reconnues par TRANSLIST... et seront rempla-
cées por DFB (code non interprété). Votre
assembleur vous permettra de remettre de
ordre dans tout cela.
Et maintenant, @ vous de jouer ! Naturelle
ment, si vous imaginez des améliorations capa
bles de rendre cette version plus attrayante et
plus performante, écrivez 4 son auteur...
LABELS.CREER
100 TEXT : PRINT CHR® (21): HOME :D#
= CHR® (4):CMS = "LABELS": PRIN
T DS"OPEN"CMS: PRINT D$" READ" CHS
Toe SqCNERR GOTO 118
1@5 FOR NB = 1 TO 30@: INPUT Lis: IN
|” pur Las: INPUT L339: NEXT
1110 PRINT DS*CLOSE"CMS:NB = NB - 1:
REM NB=NBR.LABELS POUR AJOUTS
HOME : HTAB 5: VTAB 1: INVERSE :
PRINT ": CREER OU COMPLETER ‘LA
BELS’ :*: HTAB 1: VTAB 8: PRINT
*ADRESSE*;:: NORMAL : PRINT * 3°
: INVERSE
HTAB 1: VTAB 11: PRINT "LABEL":
HTAB 1: VTAB 14: PRINT “COMMENTA
IRE": NORMAL : HTAB 1: VTAB 16:
PRINT ";*: HTAB 3@: VTAB 6: PRIN”
T "->"NB
RTAB 11: VTAB 8: INPUT *":ADS: I
FP ADS = "* THEN 125
IF ADS = "*" THEN HOME : PRINT D
S*CAT*: END
HTAB 1@: VTAB 11: INPUT "*;LA:
IF LAS = *" THEN 135
HTAB 3: VTAB 16: INPUT "*;COS: I
F Cos = "* THEN 140
145 PRINT D®*APPEND"CMS: PRINT ADS:
PRINT LAS: PRINT COS: PRINT D8*C
LOSE” :NB = NB + 1: HTAB 32: VTAB
6: PRINT NB: GOTO 125
—
_
-
a
8
8 8
R
108
165
118
115
128
125
138
135
148
145
15@
155
168
165
178
175
188
185
199
195
© TRANSLIST
ONERR GOTO 785: REM TRAITEMENT E
RREUR
CLEAR : LOMEM: 12288: TEXT : PRI
NT CHR® (21): HOME :DS = CHR® (4
):RS = CHR® (13):G% = CHRS (7):T
Sa“: t*: HTAB 13: VT
AB 1: INVERSE : PRINT TS: HTAB 1
3: VTAB 2: PRINT " TRANSLIST *
: HTAB 13: VTAB 3: PRINT TS: NOR
MAL
Te = "*: FOR I = 1 TO 39:Ts = Ts
+ *_": NEXT :PFS = *TM8": GOSUB
820: REM CHARGE LM
HTAB 30: VTAB 1: PRINT “(C) D.LU
GAT": HTAB 38: VTAB 3: PRINT “VE
RSION 2.1"
HTAB 1: VTAB 1@: PRINT “NOM OBJE
T*: HTAB 11: VTAB 13: PRINT “930
@ <--> $3CF": HTAB 3: VTAB 22: P
RINT "?/VOLUME (/SOUS-VOL) POUR
CATALOGUE*
HTAB 11: VTAB 10: PRINT “/VOLUME
/PICHIER": CALL C:H = 11:V = 18:
LO = 38: INVERSE : GOSUB 165: NO
RMAL :N& = PHRS
IF LEFTS (N$,1)> = "?" THEN HOME
: PRINT DS*PRES*: PRINT DS*CATAL
OG* RIGHTS (N®, LEN (NS) - 1):CT
$ = "<TOUCHE RETOUR MENU>": GOSU
B 79@: RUN
OGS = "30":CMS = *LABELS*:LO =
388: GOTO 245: REM CONSTANTES
t
REM AeHdheM RH MORNE eH
REM « SP.SAISIE *
REM ###HHHHH x MHI
PHR$ = *"; FOR I = 8 TO LO - 1
HTAB H + I: VTAB V: POKE - 16368
»@: GET CARS: GOSUB 215
IF I = @ THEN HTAB H: VTAB V: PR
INT SPC(¢ LO)
IF CARS = CHR® (27) THEN 165
IF CARS = R$ THEN 285
IF CARS = CHR® (127) AND 1 >@T
HEN PRINT CHR$ (8);: PRINT * ";:
PRINT CHRS (6);:I1 = I - 1:PHRS
= MIDS (PHR$,1,1>: GOTO 178
IF (CAR® < CHR® (33) OR CARS > C
HR® (63)) AND (CARS < CHRS (65)
268
278
275
298
295
380
385
318
315
328
OR CARS > CHR$ (98>) THEN 170
HTAB H + I: VTAB V: PRINT CARS;:
PHRS = PHR® + CARS: NEXT
IF PHR$ = *" THEN 165
FOR P = 1 TO 20@: NEXT : GOSUB 2
15: RETURN
FOR 22 = 1 TO 4:2 = PEEK ¢ - 163
36): NEXT : RETURN : REM 222!
REM #éeeederneeeneeenene
REM *» LECTURE ECRAN *
REM vernteetenenenneenen
HOME : TEXT : POKE 34,1: POKE 35
+20:LI = 1: DIM $19¢30@),S29(300
> ,S39¢ 380) ,ES9( 3808)
FOR I = LEN (N%) TO 1 STEP - 1:C
ARS = MID® (N$,1,1): IF CAR® < >
*/* THEN NOS = NOS + CARS
IF CARS = */* THEN FOR I = LEN ¢
NOS) TO 1 STEP - 1:NN® = NNS + M
ID® (NO$,1,1): NEXT :NO® = NNS:
GOTO 265
NEXT :NOS = N®: REM CONSERVE NOM
SANS DIRS
IF RIGHTS (NO$,2) = *.8" OR RIGH
TS (NO$,2) = *.C* THEN NOS = LEF
TS (NOS, LEN (NOS) - 2)
IF RIGHTS (NO$,5) = *.0BJ@* THEN
NOS = LEFTS (NOS, LEN (NOS) - 5
>
CALL C: HTAB 1: VTAB 12: PRINT *
seaHEHHeHE CREATION SOURCE BASE*
HTAB 11: VTAB 14: PRINT "# "NOS:
HTAB 11: PRINT *#": HTAB 3@: VT
AB 14: INVERSE : PRINT “CTL-C FI
N “+: HTAB 3@: PRINT “CTL-S PAU
SE": NORMAL : HTAB 17: VTAB 16:
PRINT “ORG $"0G%: HTAB 11: PRI
NT *#";
HTAB 1: VTAB 21: PRINT T$;: GOSU
B 755
t
REM #eeekeeneeedeeeN een
REM * ANALYSE LIGNE 22 *
REM ee eeeweteaeeeaenawan
ONERR GOTO 455
FOR LI = 1 TO LO:ES®(LI) =" *
_—
TREMPLIN MICRO
25
TRA N Ss LI ST (suite)
325 CALL B: REM DESASSEMBLE UNE INST
RUCTION SUR 1,2 OU 3 OCTETS
33@ FOR I = @ TO 3:ADS = ADS + CHRS
( PEEK (1872 + I) - 1286): NEXT :
REM LIT ADR.
335 FOR I = 8 TO 9:Cis = Ci® + CHRS
( PEEK (1672 + I) - 128): NEXT :
FOR I = 11 TO 12:C28 = C29 + CH
RS ¢ PEEK (1872 + 1) - 128): NEX
1
Pp
T : FOR I = 14 TO 15:C38 = C38 +
CHRS ¢ PEEK (1872 + I) - 128):
NEXT : REM LIT CODES
340 IF C2¢ =" * THEN CX = 1: GOTO
355: REM NBR.CODES
345 IF C3 =" * THEN CX = 2: GOTO
355
358 CX = 3
355 CPT = CPT + CX: REM CUMUL CODES
PAR INSTRUCTION
360 FOR I = 28 TO 22:MNS = MNS + CHR
$ ( PEEK (1872 + I) - 128): NEXT
: REM LIT MNEMONIQUE
365 FOR I = 26 TO 34:0P8 = OPS + CHR
% ¢ PEEK (1872 + I) - 128): NEXT
: REM LIT OPERANDE
37@ IF RIGHTS (OP$,1> = " * THEN OPS
= MIDS (OP$,1, LEN COPS) - 1):
GOTO 37@: REM LES ESPACES SONT D
E TROP
375 IF MNS = "22?" THEN GOSUB 418: G
OTO 370: REM ASCIIS, OU 65C@2 NO
N DESASSEMBLE
388 INC = INC + 1: GOSUB 425
385 HTAB 17: PRINT MNS;: HTAB 23: PR
INT OP$;: REM SORTIE VIDEO
39@ SiS(LI) = ADS:S28(LI) = MNS:S39¢
LI) = Ops
395 IF MNS = “RTS” THEN GOSUB 415: G
OSUB 42@: VTAB 2@: PRINT : GOSUB
425: PRINT * #";
40@ IF CPT = CT THEN 455: REM SORTIE
LECTURE
405 Cis = "":C2% = "*:C38 = "*: GOSU
B 415: NEXT LI: GOTO 455
418 GOSUB 415:MNS = "DFB 9" + Ci®: R
ETURN : REM ‘HEX’ EQUIVALANT &
DFB’ (DIRECTIVE ASSEMBLEUR>
415 ADS = *":MN@ = *":OPS = *": RETU
RN
42@ INC = INC + 1:LI = LI + 1:ESSCLI
425
438
435
440
445
455
478
475
480 :
485
498
495
580
585
510
Sis
526
$25
540
545
558
555
570
> = *#*: RETURN
INC = STRS (INC): VTAB 19: HTAB
(12 - LEN CINC$)): PRINT INC;*.
“;: RETURN : REM ECRITURE A UNE
TABULATION VARIABLE EN FONCTION
DE LA LONGUEUR DU CHIFFRE.
REM #4 eee HEHEHE
REM * TRAITEMENT LABELS*
REM XEHERHEKH HM RHR
PRINT : PRINT : CALL C: PRINT “*
#e##4% RECHERCHE LABELS SYSTE
ME*: ONERR GOTO 475
DIM L1$(30@),L2%( 308), TAS(280),C
MS$(20@): REM TABLEAUX LABELS
PRINT DS"OPEN*CM$: PRINT D$"READ
“CMS: REM LECTURE FICHIER PRE-EN
REGISTRE
FOR I = 1 TO 38@: INPUT Lis¢I>:L
19¢1) = *S" + Lis¢I): INPUT L2¢
I): INPUT CMS(I): NEXT
PRINT D$*CLOSE*CMS: PRINT : CALL
C: PRINT "<*I - 1"> LABELS EN S
TOCK*: PRINT : PRINT "PATIENCE..
REM HeeeHR HHH R HEHE
REM * REMPLACEMENTS *
REM sere sehen awhtenenie
F
FOR J = 1 TO I - 1: REM NBR.LABE
Ls
FOR K = 1 TO LI: IF S38(K> = Lis
(J) THEN S38(K>) = L28(J):L = L +
1:TASCL) = S38CK) +" BQU" +L
18¢J> + " ;" + CM8(J): PRINT *.*
1:2 = PEEK ¢ - 16336): REM CALCU
L DU LABEL CORRESPONDANT
NEXT : NEXT
FOR I = 1 TO L: REM SUPPRIME LES
DOUBLES
IF TAS(I) = TASCI + 1) THEN 548
O = 0 + 1:TASCO) = TASCID
NEXT :L = 0
REM #8444 Ee
REM * LOCALISATION BRA.*
REM HeHHHHEHE HUH
PRINT : PRINT : CALL C: PRINT **
wwnexeHeH CALCULS BRANCHEMENTS" :
GUY-HACHETTE
575
588
585
598
595
685
618
615
635
648
645
658
655
668
665
678
675
PRINT
DIM Ti#(3@0): REM TABLEAU LABELS
FOR I = 1 TO LI: REM RECHERCHE B
RANCHEMENTS INCONDITIONNELS ET A
PPELS DE SOUS-PROGRAMMES
IF S28¢1) = "JSR" OR S2%(I) = "J
MP" OR S2$(I) = "BRA" THEN GOSUB
595
NEXT : GOTO 615
2 = PEEK ¢ - 16336):AD% = S38(I)
: FOR J = 1 TO LI: IF “" + S19¢
J) = ADS AND T1$(J> = "* THEN LA
= LA + 1:Ti®(J>) = "SPG* + STRS
(LA) :S38(1) = Ti$¢J): RETURN
IF "$* + Si9(J) = ADS AND Tis<¢J>
< > ** THEN S38(1) = T1$CJ): RE
TURN
NEXT : RETURN
t
FOR I = 1 TO LI: REM RECHERCHE B
RANCHEMENTS CONDITIONNELS
IF S29¢1) = *BEQ" OR S28(I> = "B
NE" OR S2%(1) = "BMI* OR S28¢1)
= “BPL* OR S28(I) = *BCS" OR S28
(I) = "BCC" OR S28(I> = “BVS* OR
S2s¢1) = “BVC* THEN GOSUB 638
NEXT : GOTO 678
Z = PEEK ( - 16336):AD$ = S38¢I)
: FOR J = 1 TO LI: IF "9" + S19¢
J) = ADS AND Ti#¢J> = "* THEN LA
= LA + 1:Ti®(J) = "BCL* + STRS
(LA) :S38¢1) = T19¢J)>: RETURN
IF "S* + S1$(J) = ADS AND T1$(J)
<> “" THEN S38(1) = T1$(J): RE
TURN
NEXT : RETURN
:
REM see ste eee ae
REM * ENR.FICH.SOURCE #
REM 48 48xHE MH
:
PRINT : PRINT *####4#8#84 ENREGI
STREMENT SOURCE": PRINT : ONERR
GOTO 78S
CALL C: PRINT DS"OPEN SOURCE*: P
RINT D®*CLOSE": PRINT DS" DELETE
SOURCE*: PRINT D$*OPEN SOURCE*:
PRINT D$"WRITE SOURCE*: PRINT "#
"NOS: PRINT "#*: IP Tis¢i) = **
THEN T1$¢1) = "PROG"
i I = 1 TO L: PRINT TAS(I)>: NE
PRINT "#*: PRINT " ORG $*0G$: PR
698
788
705
710
715
725
28g
745
2
755
848
INT *#"
FOR LT = 1 TO LI
RE® = TIS(LT) + ESSCLT> + S2e¢LT
p]
IF S38(LT) < > "" THEN RES = RES
+ CHR® (32) + S38(LT)
IF ES(LI> = *#" AND LT = LI THEN
720: REM SI RTS EN FIN DE PROG,
PAS D’ETOILE EN SUIVANT
PRINT RES:RES = “*
NEXT
PRINT DS*CLOSE": CALL D
GOTO 890: REM OU CTS = "<TOUCHE>
*: GOSUB 15@@: CALL C: TEXT : HO
ME : END...ET DEL 1628,1820 POUR
SUPPRIMER LA PARTIE FACULTATIVE
DU PROGRAMME
REM Waeeine erie nae eet ae
REM * CHARG.TYPE PROG. *
REM 362626 sears re atte
PRINT DS*BLOAD*Ns* ,AS"OG$: CALL
A:CT = PEEK (48840) + PEEK (4884
1) * 256: RETURN : REM CT=LONG.F
ICHIER PRODOS
REM eae
REM * ERREURS SYSTEME *
REM shee RHER HARE
:
PRINT D$"CLOSE*: TEXT : HOME : P
RINT *ERREUR PRODOS N°“ PEEK (22
2>;: FOR I = 1 TO 120@: NEXT: R
UN
PRINT : CALL C: HTAB 38: PRINT C
TS: POKE - 16368,0: WAIT - 16384
.128,127: POKE - 16368,8: RETURN
+ REM SP.SAISIE TOUCHE
REM CHR HH HEHEHE HOR
REM * CHARGE L.M. *
REM HHeHHRHEH EH
A = 12032: REM TRANSMISSION AUTO
MATIQUE DE L’ IMPLANTATION
B = 12043: REM DESASSEMBLAGE D’U
NE LIGNE
C = 12896: REM BIP PARAMETRABLE
D = 12108: REM SIRENE FIN TRAITE
MENT
FOR ADR = 12032 TO 12143: READ C
—
TREMPLIN MICRO
27
TRANSLIST suite)
845
S8893833
3
918
915
920
925
930
935
ODE: POKE ADR,CODE: NEXT : RETUR
N
DATA 173,185,19@,133,8,173,186,1
98 ,133,9,96,165,37,72,169,25,133
,36,169,22,133,37,32,34,252,32,1
56,252, 165,8,133,60,164,9,132,61
+162,1,32,128,254,169,1,32,99,25
4,165,58,133,8,165,59,133,9,104,
56,233,1,133,37,32,34,252,96
DATA 162,20,44,48,192,136,208,25
3,202,208,247.96,169,0,141,115,4
7,169,6,141,116,47,173,48,192,13
6,248,9,202,208,258,174,115,47,7
6,86,47,238,115,47,206,239,206,1
16, 47,208,234, 96
REM ---- PARTIE FACULTATIVE
REM JHE SHIH ae
REM * EDITION ECRAN *
REM CHR RARER RRH CREE
$
PRINT G8: PRINT : PRINT “DEMONST
RATION <E>CRAN OU <I>MPRIMANTE *
+: POKE - 16368,@: GET XS: IF Xs
= “I* OR X98 = *i* THEN IM = 1
IF IM = @ THEN TEXT : HOME : PRI
NT DS*PRE3": PRINT : INVERSE : P
RINT *Ctcl-S pour stopper le lis
ting... un peu de patience, merc
i*: NORMAL
IF IM = 1 THEN PRINT DS*PRE1": P
RINT CHRS (9)*80N"
PRINT : HTAB 18: PRINT *# PICHIE
R SOURCE "NOS: HTAB 1@: PRINT "#
“: DIM M1SC10@) ,M29(100)
FOR I = 1 TO L: FOR J = 1 TO LEN
(TASC1)): REM RECONSTITUTION DE
S VARIABLES POUR TABULER
PAS = MIDS (TAS(I),J,1>: IF PAS
= " " THEN MISCI) = LEFTS (TAS(]
>,J):J = J + 4:M29¢1> = MIDS (TA
$(1),J): GOTO 925
NEXT J
NEXT I
FOR ! = 1 TO L: FOR J = 1 TO LEN
(M29(1))
PAS = MIDS (M28(1),J.1>: IF PAS
= ":" THEN M3$(I) = MIDS (M28¢1)
948
945
955
978
975
988
.J - £):M29C1) = LEPTS (M28¢1),J
- 1): GOTO 945
NEXT J
NEXT I
FOR I = 1 TO L: HTAB 1®: PRINT M
1$(1);: HTAB 28: PRINT "EQU";: H
TAB 29: PRINT M29CI);: IF IM = @
THEN POKE 14@3,40: REM ECRAN
IF IM = 1 THEN POKE 36,40: REM I
MPRIMANTE
PRINT M3$(1): NEXT I: HTAB 10: P
RINT "*": HTAB 28: PRINT “ORG
$"0G$: HTAB 1@: PRINT *#"
FOR P = 1 TO 3000: NEXT : FOR LT
= 1 TO LI: HTAB 10: PRINT TiS(L
T);: HTAB 20: PRINT S28(LT);: HT
AB 38: PRINT S3$(LT): FOR P = 1
TO 5@@: NEXT : NEXT : HTAB 18: P
RINT "#*: HTAB 10: PRINT *#
FIN’
PRINT GS: HTAB 3@: PRINT *<M>enu
<B>asic ":: POKE - 16368,0: GET
X$: IF X8 = "M" OR X8 = *m" THE
N PRINT Ds*/TM8/MENU*
PRINT : END
LIT.LABELS
100
118
120
TEXT : HOME :D® = CHRS (4): PRIN
T DS*PRE3*: PRINT DS*OPEN LABELS
": PRINT D$"READ LABELS": ONERR
GOTO 128
FOR I = 1 TO 300: INPUT AS: INPU
T BS: INPUT C$: HTAB 1: PRINT I;
: HTAB 12: PRINT BS:: HTAB 25: P
RINT “EQU";: HTAB 30: PRINT "S"A
$;: HTAB 48: PRINT *; "CS: FOR J
= 1 TO 200: NEXT J: NEXT I
PRINT D®*CLOSE": END
28
GUY-HACHETTE
Votre bibliothéque
INFORMATIQUE par Clément RENARD
© INITIATION A L'ALGORITHMIQUE (Belin)
Pour Chantal et Patrice Richard, tout ensei-
gnement sérieux de la programmation doit
reposer sur une initiation systématique &
lalgorithmique. C'est une idée qui a fait son
chemin. De nombreux organismes (Ministére
de |'Education Nationale, dons le cadre du
plan "Informatique pour tous", Renault, Cré-
dit Lyonnais, etc.) l'ont adoptée.
Lo premiére édition de cet ouvrage, parue en
1981, avait bénéficié d'un excellent accueil,
mais il est probable que cette nouvelle édi-
tion — entiérement revue (exercices plus =
nombreux, mise en page originale...) — fera
le bonheur d'un public vorié : lycéens de pre-
miére et de terminale, étudiants, ensei-
ae informaticiens professionnels... et
autodidactes. Bs Apprendre a x
Pour concevoir un programme, il convient Structurés par biiacn § algo: ithunes
évidemment, dans un premier temps, Aladin’:
donalyser le probléme, puis de concevoir
algorithme permettant d'‘aboutir le plus
simplement possible, & la solution.
les auteurs proposent donc une méthode
dopprentissage accessible & tous les débu-
tants, quelle que soit leur formation : ALADIN
195 exercices corrigés... mais aussi des explications claires, souvent illustrées par des tableaux
significatifs. Rappelons que les auteurs ont obtenu, en 1984, pour leur ouvrage Programmatique,
le Grand prix de la littérature micro-intormatique. (Mditions Balin, 224 pages, moins de 100 F).
© APPLE 2: TRUCS ET ASTUCES (MICRO APPLICATION)
Une traduction de |'édition allemande, publiée par DATA
BECKER. On peut la recommander & tout utilisateur
d'Apple... débutant.
On y apprendra en effet, en 300 pages, tout ce qu'il faut savoir
pour tirer le meilleur parti possible d'un Apple Ile ou fic : élé-
ments fondamentaux du Basic, périphériques, accés mémoire
et langage machine (rudiments), programmes graphiques,
amélioration des structures d’un programme, etc.
Le plan de ce recueil est judicieux et le résultat intéressont. Un
regret: les pages sortent directement d'un traitement de
texte... sans aucune recherche typogrophique. C'est dommage,
mais cette lacune n‘entome en rien le sérieux de |'ouvrage.
(Micro Application, S80 pages, moins de 150 ¥).
29
2s | ProDOs~ INITIATION
Vous désirez 10@ TEXT : PRINT CHRS (21): HOME | DEMO |
118 FOR I = 768 TO 695: READ R: POKE I,R: NEXT
visualiser, une 128 DATA 32.88,252, 168,23, 185,104.3,159,212,7, 136,208.24
dune, les n 7,169,23,133,37,32,34.252, 169.29. 133,36,.32,228,251,3
lignes d'une 2,111,253,224.0,248 69,32, 199,255.32, 167,255, 166.62,
routine en 165,.63,134,58,133,59,165,.59
langage machine ? 138 ‘DATA 72,165.58,72,168.0.177.58,72,169,1,32,99,254,10
4,201,96,208.10,169,48,141.217,7,169,54,141,216,7.16
Cest tout simple : 9,34,193,96,104,178,104,32,36.237,172,8,192.16.251,1
il suffit d'utiliser 92.155, 148, 16,192,248, 154,208
VISUMEM 140 DATA 201,96.193,196,218,197,211,211,197,168,8,5,24.1
-168, 196,197, 160,196, 197,208, 193,218,212, 186
Ce hah atc en 150 INVERSE :T9 =": :*: PRINT TS: PRINT *
va non seulement VISUMEM ": PRINT TS: NORMAL
installer VISUMEM 169 PRINT : PRINT "IL SUFFIT DE TAPER CALL 768 POUR ACCE
a partir de DERA LA ROUTINE VISUMEM.": PRINT : PRINT "ENSUITE, A
l'adresse $300, PPUYER SUR UNE TOUCHE POUR VI-SUALISER CHAQUE LIGNE.
icis NGuk wen trier *": PRINT : PRINT "ESCAPE POUR CHANGER D/ADRESSE, ET
comment dela RETURNPOUR TERMINER. * ‘
Saline 17@ PRINT : PRINT “ACCES DIRECT PAR L’AMPERSAND (&-RETUR
. N) A CONDITION DE TAPER CES TROIS POKES:": PRINT : P
Si vous désirez RINT “ ~ POKE 1013,76:POKE 1014,0:POKE1015,3°
conserver VISUMEM 18@ PRINT : PRINT "LE PROGRAMME VOUS DEMANDERA L‘ ADRESSE
Sere tonna do DEDEPART (HEXA), DESASSEMBLERA LA PREMIEREINSTRUCTI
fichier 8 ON ET AFFICHERA SON ADRESSE DE-CIMALE.*
f 198 PRINT : PRINT “ENFONCEZ UNE TOUCHE S.V.P, *:: CALL -
lancez la DEMO 198: GET R$: PRINT : CALL 768
par RUN, choisissez 200 HOME : VTAB 22: PRINT *<1> ENCORE <2> MENU DISQUETTE
l'option 3 (FIN), <3> FIN “s: CALL - 198: GET RS: PRINT
puis tapez : 218 HOME : IF RS = *1* THEN 15¢
BSAVE VISUMEM, 220 IF R$ = *2* THEN PRINT CHR® (4)"RUN MENU”
A768, L128 230 IF RS < > *3* THEN 200 s
EXPLICATION DE LA ROUTINE (DATA)
0300- 20 58 FC JSR $FCS5S8 C'est le HOME du Basic
0303- AO 17 LOY £817 Y = $17 (23) ; nbre d’octets 6 officher
0305- 89 68 03 LDA $0368,Y Adresse de lecture du texte + ¥
0308- 99 D4 07 STA $07D4,Y Adresse-écran d'dcriture + Y (VTAB24)
OSOB- 88 DEY Y=Y—1
o3s0c- 00 F7 BNE $0305 SiY <> G@GOTO $305
030E- A? 17 LDA £¢17 A = $17 (23... pour VTAB24) ss
30
GUY-HACHETTE
(MAREE RERSARAONAAsAeeLTSeNaTsosesEeSEETTSSINTIST ESSN SSA ES ET SAAS se PeREsesnsesHeNeSsesEsesTDaESATETeSH
0310- 85 25 STA 925 CV (position verticale du curseur) = $17
0312- 20 22 FC JSR sFC22 VTAB ve déplocer le curseur en CV
O315- AY 1D LDA £&$1D A = $10 (29)
0317- «85 24 STA $24 CH (position horizontale du curseur) = $1D
0319- 20 E4 FB JSR SFBE4 BELL2 pour | bip
O31C- 20 6F FD JSR S$FD6F Une autre entrée de GETLIN (nbre de carac. dons X)
031F- EO 00 CPX £900 X (longueur du nombre saisi) est-il égal 40 ?
0321- FO 45 BEQ = $0368 Si oul GOTO RTS (Basic)
0323- 20 C7 FF JSR $FFC7 LZMODE (@ mode)
0326- «820 A7 FF = JSR) SFFA7 GETNUM (récupére nombre hexa)
0329- AG 3E LDX $3E
032B- AS 3F LDA 83F Récupération des voleurs en $3€-3F
032D- 86 3A STX $3A ef écriture en $3A-38
032F- 85 3B STA $3B
0331- AS 3B LDA 3B Accumulateur chargé avec $3B
0333- 48 PHA Valeur de A empilée
0334- AS 3A LDA = $3A A chargé avec $34
0336- 48 PHA Valeur également empilée
0337- AO 00 LDY £900 Y¥ = @ pour adressage indexé
0339- Bi 3A LDA ($3A).Y Lecture @l’odresse $3A-3B + Y
0338 48 PHA Valeur empilée
033C- Ag 01 LDA £801 A=)
033E- 20 63 FE JSR $FE63 LIST2 désassemble A instruction (1)
0341- 68 PLA A récupére le sommet de la pile
0342- C9 60 CMP E860 Est-ce $60 (RTS) ?
0344- 00 0A BNE $0350 Non : GOTO 359
0346- A? 30 LDA £830 Oui : clors A = $30 (0 mode inverse)...
0348- 8D D9 07 STA $07D9 affiché 4 lo place du @ normal
034B- A? 36 LDA = £836 A = $36 (6 mode inverse)...
034D- 8D DB 07 STA s07D8 aftiché 4 lo place du 6 normal
0350- A? 22 LDA £822 A = $22 (34)
0352- +85 24 STA $24 CH = $22
0354- 68 PLA Récupération du sommet de la pile
0355- AA TAX A passe dons X
0356- 68 PLA Derniére récupération
03S7- 20 24 ED JSR $%ED24 LINPTR affiche lo valeur décimale de l'adresse
035A- AC 00 CO LDY scooo KBD (caractére frappé dans Y)
035D- 10 FB BPL $035A Pas de carectére, on attend (GOTO 35A)
O35F- CO 9B CPY £993 Est-ce $98 (ESCAPE) ?
0361- = 8C 10 CO STY $C010 Ecriture KBDSTRB (pour lire une autre touche}
0364- FO 9A BEO = $0300 Si ESCAPE GOTO $300
0366- D0 Co BNE $0331 Ou bien GOTO $331 pour autre saisie
0368-60 RTS FIN DE PROGRAMME
0369- Cl C4 0374- 0) AC
0368- 02 0376- C4 CS
o36C- CS D3 0376- AO C4 De $369 4 37F, texte suivant
- 28 O37A- C5 Do
on CS AO o37C- Ci D2 ADRESSE DE DEPART :
o3s71- 08 O3S7E- 04
0372- 05 18 O37F- BA
EN UTILISATION NORMALE, sans programme DEMO, taper BLOAD VISUMEM, puis CALL 768.
Vous pouvez aussi utiliser |; AMPERSAND (voir DEMO). &
TREMPLIN MICRO 31
INITIATION
LANGAGE MACHINE [—
MIXAGE
PAGE 1 PLUS PAGE 2
U NE technique simple permet de mixer les deux pages graphiques en un temps record...
grace a |’extraordinaire rapidité du langage machine et a |’opération logique ORA.
Comment méler vos pages graphiques ?
POURQUO! ORA PLUTOT QUE AND ou EOR ?
Imaginons que le premier octet de la Page 1 soit (en binaire) 66000011 et que le premier octet }
de Ia Page 2 soit 6001001. II s'agit d’obtenir, en mixant les deux données, 00001011. Laissons
de cété les quatre premiers zéros (inutiles dans cet exemple), et regardons le résultat obtenu &
partir des opérations
logiques AND, EOR et ——& =
OS: oo11 901 1 oao11
On constate immédia-
tement que seul ORA 1 @090 1 100 1 | 3 on |
fournit le résultat —
ou le mixoge! — AND EOR OQRA |
escompté... dio le =
court programme que 'ég @ 1 Ch i | 1 0 1 | |
voici...
63e0- AY 20 LDA £928 7
@302- 85 a7 STA $07
@304- A? 40 LDA £948 $6 et $7 contiennent GO 20 pour lire lo Page 1
@38@6- 85 09 STA 389 (avec LDA ($06), Y).
@308- A° 6A LDA = £988 $8 et $9 contiennent 0G 40, adresse de la Page2
O30A- 85 06 STA $86
e3ec- 85 68 STA 308 J
O30E- A2 2 LDX £820 _] Nombre de pages
0310- Ae o8 LDY £800 _
poor rf po i eas ov Cette boucle permet de lire chaque octet de la Page I, de le
e316- 9%! 28 STA ($08) ‘y mixer avec octet correspondant de la Page 2, puis d’écrire —
@318- CB INY i. le résultat en Page 2 (en écresant l’ancien).
@319- De F7 _— BNE $8312 _|
poonge 4 a 4 por Incrémentation de lo partie haute des adresses
@31F- CA DEX X=xX—1
0320- 08 EE BNE $0318 Si X différent @ GOTO $310
@322- 68 RTS FIN DE PROGRAMME 6
were eeeeesnssse SAR sA TSE E ANTES ERA K ae Ee awe See R Se eSE EE ETE SENSES ESSE SSeSesSSSSSSSUSSUSSS Se SUE SET SNEESS
32 GUY-HACHETTE
|
UTILISATION
MIXAGE (LM)
peut étre employé
en mode direct...
ou dans un
programme
en Basic.
Dans un cas comme
dans l'autre,
le processus
sera le méme :
° BLOAD MIXAGE
* BLOAD IMAGE},
A$2000
© BLOAD IMAGE2,
AS40090
CALL 768
BSAVE IMAGE3,
A$4000, L$2000
TABLE DE VERITE
Voici la table de
vérité de ORA (si ou
moins | des 2 bits est
4 1 le résultat est 1).
ou; a) 1
g0)]/o/}1
LS ee A
exeensurcnenssesesursas
TREMPLIN MICRO
Cette courte démonstration vous permettra en outre d’installer
MIXAGE & portir de l’adresse $300, Pour sauver cette routine LM,
choisissez l'option (B)ASIC du menu final, puis tapez un simple
BSAVE MIXAGE, A$30@, L$23
108
110
138:
148
158
168
178
188
198
208
218
238
248
258
278
288
308
316
348
MIXAGE-DEMO
Ds = CHRS (13) + CHR® (4):G% = CHRS (7): GOSUB 330:
ONERR GOTO 118
HGR : HGR2 : HCOLOR= 3: TEXT : PRINT CHR® (21): HOME
: INVERSE : HTAB 1@: VTAB 8: PRINT ": MIXAGE GRAPHI
QUE :*: NORMAL : HTAB 1: VTAB 12: PRINT * Nous
allons voir deux images,*: PRINT
PRINT * l’une en page 1, |’autre en page 2,": PRIN
T : PRINT * et enfin, leur mixage en page 2.": VT
AB 20: PRINT “Appuyez sur <ESPACE> aprés chaque arre
t": PRINT : HTAB 18: VTAB 4: PRINT “¢ >": GOSUB 318
REM Sesame
REM * DESSIN PAGE | .
REM sa a rare atta
HGR :MA = 23:DI = 6:IN = 5@:AA = 9@:BB = 90:ST = .5:
FOR I = 1 TO MA STEP ST:A = (¢ SIN (I) * 18) +1 #
1 / DID + IN + 4@:B = «¢ COS C1) #» 30) + 1 #1 / DED
+ IN: HPLOT AA,BB TO A,B:AA = A:BB = B: NEXT
REM ##HHHH EKER
REM # DESSIN PAGE 2 .
REM Heed H ee
GOSUB 910: HGR2 :A = 1@:B = 270:C = 195: HPLOT A.A T
O B,A: HPLOT B.A TO B,C: HPLOT B,C TO A,C: HPLOT A,C
TO'A,A: GOSUB 310
CALL 768: REM VERS ROUTINE LM
t
GOSUB 318: TEXT : HOME : HTAB 3: VTAB 23: PRINT *<E>
NCORE <B>ASIC <M>ENU DISQUETTE “:: POKE - 16368,0: G
ET X$: IF X$ = "M" OR X$ = "m* THEN PRINT D9"RUN MEN
ur
IF X$ = “E* OR X% = "e" THEN 118
IF X® = "B* OR X® = “b" THEN HOME : END
POKE - 16368,@: VTAB 4: HTAB 19: GET X$: PRINT CHRS
(7): RETURN
?
FOR ADR = 768 TO 882: READ CODE: POKE ADR,CODE: NEXT
: RETURN
DATA 169,32,133,7,169,64,133,9,169,8,139,6,193,8, 162
,32,168,@,177,6.17,8,145,8, 200,208,247, 238,7,238,9,2
02,208, 238,96
33
UTILITAIRE P
CATALOGUE
N E vous privez surtout pas du Super.catalogue que vous propose Guy
DESENFANT, mais attention ! i] ne fonctionne que sous ProDOS, avec
le 65C02 et une carte 80 colonnes ! Pour le reste, nous vous en laissons la
surprise... et sur deux colonnes !
108 TEXT : PRINT CHR® (21): HOME : P
RINT CHRS (4)"PRE3": PRINT CHRS
(1): GOSUB 925: ONERR GOTO 87@
105:
110 REM HHRHHHHHMHHEN EHH EHMH Ee
115 REM * ACTIVER LES CARAC SOURIS *
120 REM HHHNHHHHSHHHHH HEUER N RH
125:
138 I% = CHR® (15):NS = CHR® (14):M%
= CHRS (27):XM$ = CHR® (24)
135 PRINT I%: PRINT Ms
140 :
145 REM €###HH HEM ERMEM EHH
15@ REM * TRAITS HORIZONTAUX “
155 REM ###4eeeHeHH EHH
168 :
165 TRS = *": FOR I = 1 TO 1@:TRS =
TR® + *LLLLLLLL*: NEXT :TR® = LE
PTS (TR8,78)
178 RTS = **: FOR I = 1 TO 10:RTS =
RT® + “SSSSSSSS": NEXT :RT® = LE
FTS (RTS,78)
175 +
188 REM
185 REM
198 REM
195:
208 FOR I = 1 TO 20: VTAB I: HTAB 1:
PRINT "2": VTAB I: HTAB 88: PRI
NT *_": NEXT I
205 :
210 REM FHeHHHH NERO
215 REM * BCL.TRACE TRAITS HORIZON #
220 REM five Wee He HERE
Ld Rehehchshehehshedsdeteidtehdh hhh aehohahel
* BOUCLE TRACE TRAITS VERT «
AEE EAE EE
Guy DESENFANT
238 VTAB 1: HTAB 2: PRINT TRS: VTAB
3: HTAB 2: PRINT RTS: VTAB S: HT
AB 2: PRINT RTS: VTAB 7: HTAB 2:
PRINT RTS
235 VTAB 6: HTAB 18: PRINT *2": VTAB
6: HTAB 26: PRINT "2": VTAB 6:
HTAB 48: PRINT "2*: VTAB 6: HTAB
57: PRINT *2": VTAB 6: HTAB 65:
PRINT "2°
248 :
245 REM *##RH RMN HEENEHE ERR
25@ REM * BARRE VERTICALE CENTRALE *
255 REM feHHRHHR HONE E Ee
268 :
265 FOR J = 8 TO 20: VTAB J: HTAB 48
: PRINT “2": NEXT : VTAB 21: HTA
B 2: PRINT TRS
278:
275 REM *##HH HHH
260 REM * DESACTIVE CARACT. SOURIS *
28S REM FRKEHEHHRHHHHHHHN ORR
298 :
29S PRINT NS: PRINT XMS
300 :
305 REM HHeHHRHRHHHRE HRA
318 REM ¥ CURSEUR INVISIBLE *
315 REM *#4hHEeee HHH OHM RRA
320 :
325 POKE 2043,168
330 AS = "CATALOGU E*:A = LEN
(AS)
335 VTAB 2: POKE 1403, INT (88 - A)
/ 2: PRINT AS
348 VTAB 4: HTAB 3: PRINT "Nom du vo
lume: ": VTAB 4: HTAB 6@: PRINT
34
GUY-HACHETTE
“Blocs libres: *
S BS = "FICHIER*:C® = *TYPE":Ds =
*DATE*
VTAB 6: HTAB 3: PRINT BS: VTAB 6
: HTAB 20: PRINT C8: VTAB 6: HTA
B 32: PRINT DS: VTAB 6: HTAB 42:
PRINT BS: VTAB 6: HTAB 59: PRIN
T C$: VTAB 6: HTAB 71: PRINT DS
VTAB 23
DIM FICHIERS(51>
gs
REM #+HH eH EMER Hee
REM * ON PREND PREFIX COURANT *
REM HHHRHA RH RHR RHR
PRINT CHRS (4)"PREFIX": INPUT PF
xe
400 REM HAHRHHCH EH RHEH MH
405 REM # OUVERTURE DU FIC CATALOG *
PW errterrrrrrrrrirririrerriri rs
415:
PRINT CHR$ (4)*OPEN*PFX$" ,TDIR"
PRINT CHRS (4)"READ"PFXs
INPUT VOLUMES
INPUT TITRES
INPUT BLANC?
VTAB 23:1 = 1
VTAB 23: INPUT FICHIER@C(I): IF F
ICHIERS(I) = ** THEN 465
PICHIERS(1) = LEFTS (FICHIERSCI)
28> +" " + MIDS (FICHIERS
(1),31,9)
VTAB 23: IF FICHIERS(I) < > "" T
HEN I = I + 1: GOTO 45@
VTAB 23: IF I > 27 THEN FLAG = 1
INPUT BLOCS
475 BLOC® = MIDS (BLOCS,15,3)
488 PRINT CHR® (4)"CLOSE*
$ SR8S3R8H
38 S$ 8 SHERSES
490 REM Wieser eae ee ere eee
VERS SP. AFFICHAGE *
518 GOSUB 748
51S VIAB 23
528 :
525 REM HHS RHHHE THREE Ee
$38 REM * MENU .
S35 REM HH HENNE HEHEHE HEHE eee
548 :
545 IF FLAG = 1 THEN VTAB 22: HTAB 2
: PRINT "<i> Page n* 1 <2> Nouve
au PREFIX <3> Quitter*: CALL ~ 1
96: GET RS: IF ASC (RS) < 49 OR
ASC (R$) > 51 THEN 545
IF (FLAG = 1 AND RS + *1*) THEN
VTAB 22: HTAB 2: PRINT SPCC 70):
GOSUB 685: GOSUB 740
IF (FLAG = 1 AND RS = °3") THEN
HOME : END
IF (FLAG = 1 AND R® = *2") THEN
VTAB 22: HTAB 2: PRINT SPCC 78):
GOTO 618
IF FLAG < > t THEN VTAB 22: HTAB
2: PRINT "<1> Nouveau PREFIX <2
> Quitter*: CALL - 196: GET R®:
IF ASC (R$) < 49 OR ASC (RB) > 5
@ THEN 565
IF (FLAG < > 1 AND R@ = "1") THE
N VTAB 22: HTAB 2: PRINT SPC¢ 48
>: GOTO 618
575 PRINT
588 IF (FLAG < > 1 AND R® = "2") THE
N HOME : END
ses :
SOO REM FHKHRA MRAM HHA
S595 REM * CHOIX D°UN NOUV. PREFIX *
6O0 REM HHKHRHERRHEH OHH RHE ERROR
605
618
VTAB 22: HTAB 2: INPUT “Nouveau
PREFIX: " ;PFX8
615:
620 REM HHRHHHMKEHH RHEE
625 REM * POUR LES ETOURDIS | *#
630 REM HHHKHHHEHHOHHMM RHR e Re
635 :
64@ IF LEFT® (PFX®,1) < > "/" THEN P
FXS = */* + PFXS
645 PRINT CHRS (4)*PREFIX"PFX®
658 GOSUB 685
655 CLEAR : GOTO 368
668 :
665 REM HHH eee RHH HEHEHE REA
67@ REM # ON EFFACE LA PAGE o
675 REM HRRHH AMM HRM Hn mH
688 :
68S FOR J = 8 TO 28
69@ VTAB J: HTAB 2: PRINT SPC( 37):
VTAB J: HTAB 41: PRINT SPC( 37)
695 NEXT
70@ VTAB 4: HTAB 19: PRINT SPC( 37):
VTAB 4: HTAB 75: PRINT" *
705 VTAB 22
71@ RETURN
715 : —
CATALOGUE
720 REM WWM HIE H HHH
725 REM # AFFICHAGE PREMIERE PAGE #
738 REM HHHEHNHE HEU
7383
7486 J =1
745 VTAB 4: HTAB 19: PRINT VOLUMES:
VTAB 4: HTAB 75: PRINT BLOCS
750 IF J < 14 THEN VTAB J + 7: HTAB
3: PRINT FICHIERS(J)
755 IF J > 13 AND J < 27 THEN VTAB J
- 6: HTAB 42: PRINT FICHIERS(J>
76@ IF J > 26 AND FLAG THEN GOSUB 77
5: GOTO 515
765 IF J = I AND FLAG = ® THEN RETUR
N
77@ J = J + 1: GOTO 758
775 CALL - 198: VTAB 23: HTAB 1: PRI
NT “Pour la 2° page appuyez sur
une touche.": POKE 2043,168: GET
R$: IF R$ = *" THEN 775
768 VTAB 23: CALL - 864
785 GOSUB 685
79@ VTAB 4:, HTAB 19: PRINT PFX$: VTA
B 4: HTAB 75: PRINT BLOCS
795 3
BOO REM Ket HH HHH HEHE H
805 REM » AFFICHAGE DEUXIEME PAGE *#
B10 REM wise aieden esti namie He eae
815:
628 J = 27
625 IF J < 40 THEN VTAB J - 19: HTAB
3: PRINT FICHIERS(J)
830 IF J > 39 THEN VTAB J - 32: HTAB
42: PRINT FICHIERS(J)
(suite et fin)
835 IF J = 1 THEN RETURN
840 J = J + 1: GOTO 825
B45 :
B50 REM sH#AHHHHEH EMH RHE HHH ne
655 REM * TRAITEMENT UES ERREURS «
BEO REM KeeHHHHEHHHHEHEHHH HH
865 :
870 CALL 768
875 IF PEEK (222) = 255 THEN RUN
680 IF PEEK (222) = 6 OR PEEK (222)
= 7 THEN VTAB 22: CALL - 864: CA
LL - 198: VTAB 22: HTAB 1: PRINT
"Fichier non trouvé “: FOR A =
1 TO 3000: NEXT : VTAB 22: CALL
- 864: GOTO 618
IF PEEK (222) = 8 THEN VTAB 22:
CALL - 864: CALL - 198: VTAB 23:
HTAB 1: PRINT “Erreur d’ Entrée
/Sortie": FOR A = 1 TO 3000: NEX
T : VTAB 22: CALL - 864: GOTO 61
e
IF PEEK (222) = 16 THEN VTAB 22:
CALL - 864: CALL - 198: VTAB 22
+ RTAB 1: PRINT "Erreur de synta
xe": FOR A = 1 TO 3000: NEXT : V
TAB 22: CALL - 864: GOTO 618
VTAB 22: CALL - 864: RESUME
980 :
905 REM #hHxH HH RHR RHI iem HH
910 REM * TRAITEMENT ERREURS LM #
91S REM te ek H Hm HH dea eN eae
928 :
POKE 216,0: POKE 768,104: POKE 7
69,168: POKE 77@.104: POKE 771,1
66: POKE 772,223: POKE 773,154:
POKE 774,72: POKE 775,152: POKE
776,72: POKE 777,96: RETURN a
UU
diy
ouez-vous
avec les mots ?
= . = QUI nous adressera le meilleur pro-
4 gramme de JEU (sur Apple) n’utilisant
que des mots (mots mélés exclus) ?
VOUS... peut-étre ?
GUY-HACHETTE
P APPLICATION. CMMI NESTOR
if ORGANISATION
4’ D’UN TOURNOI
PROBLEME :
Tirage du calendrier des rencontres, jouges sur une ou plusieurs journées, suivant le
nombre d’équipes engagées. Chaque équipe doit évidemment jouer une fois contre
chacune des autres. Mais il y a une contrainte : aucune des équipes ne doit étre ame-
née 4 jouer deux matchs consécutifs (pour lui permettre de récupérer).
MA SOLUTION :
Valéatoire plus la logique ! Vous noterez au passage que
le nombre de rencontres est fourni par la formule suivante
(ou N = nombre de participants) : NR = (N — 1) * N/2.
Pour le reste, suivez le déroulement du programme... et
vous comprendrez. II est sans doute possible de faire
mieux, mais & quel prix ? Telle qu’elle se présente, cette
routine pourra probablement aider certains organisateurs
& mettre au point leur calendrier.
10d: Je n'ai prévu que | 199 TEXT : PRINT CHRS (21): HOME : DIM ASC19@,1),BXC191,
20 équipes, mais il est 1):D8 = CHRS (4):TS = "*: FOR I =1 TO 20:TS = TS +
possible d’aller plus loin +" :Vg = Ve + * ": NEXT
en modifiant DIM (nom- 110:
gion Agere rs ~ 120 REM #k#eeHHHEHH eH
la, ligne 160 (nombre | 190 REM * NOMBRE D’EQUIPES #
dquipes) 140 REM seHeeenreweneneenene
15@ :
16@ PRINT DS*PRE3*: PRINT : HOME : PRINT “ORGANISATION D
“UN TOURNOI (5 A 2@ EQUIPES)": PRINT TS
170 E = @: VTAB 4: CALL - 958: CALL - 198: INPUT "NOMBRE
D’EQUIPES ";N®: IF NS = “* THEN 680
199 : Si vous préférez lo 188 N = VAL (NS): IF N <5 OR N > 20 THEN 170
formule indiquée plus 199 B=N-1
haut, allez-y gaiement : 20@ E = £ + B:B = B - i: IF B < > @ THEN 200
B= (N—1)* N/2 210 VTAB 1: POKE 1403,53: INVERSE : PRINT E* RENCONTRES
et supprimez la ligne A ORGANISER:": NORMAL
200 ! 220 : —
quvecdaeearurerssseeseo
TREMPLIN MICRO 37
ORGANISATION D’UN TOURNOI
(suite)
230 REM Henan RRM M RHR
240 REM * REPARTITION .
250 REM +hteteeneanaewehannn
268 :
278 POKE 34,3: PRINT : HOME
280 VTAB 4: INPUT "NOMBRE MAXIMUM DE RENCONTRES PAR JOUR
1 ":N®: IF NS = "" THEN 288
298 NM = VAL (N®): IF NM > E THEN 280
30@ :
310 REM ##eHeeeeHeHeeeeHee ey
320 REM + TRAITEMENT *
330 REM Hee RMNH HAE HEHE
7
35@ HOME :M = @:Y = M:R = M:M1 = M:M2 = M
FORT =1TON-1
IF I > 1 THEN PRINT LEFTS (V$,(I - 1) ¥ 4);
380 FOR J=1+1TON
390 PRINT CHR® (64 + I)"-" CHRS (64 + J)" ";
400 M = M+ L:A8CM,@) = I:AK(M,1) = J
41@ NEXT : PRINT : NEXT
420 V = PEEK (37) + 2
438 VTAB 2@: HTAB 1: INVERSE : PRINT “MELANGE ALEATOIRE
EN COURS": NORMAL : CALL - 198
440 FOR I = M TO 1 STEP - 1:A = INT ¢ RND (1) # 1 + 19:3
%CI,@) = ASCA,@):BRCI,1) = AXCA.1):A%CA.0) = AXCT,O)
tTARCA,1) = ASCI.19: NEXT
450 CALL - 198: VTAB 20: PRINT “UN PEU DE PATIENCE S’IL
VOUS PLAIT!*
460 X = 0: IF F THEN GOSUB 700
470 F=1
48@ X = X + 1: IF X > M THEN 460
49@ IF Mi = BX(X,@) OR M2 = BRCX,1) OR BX(X,@) = @ OR BS
(X.1) = @ THEN 480
500 IF Mi = BXCX,1) OR M2 = BX(X,@) THEN 480
SiO Y=Y¥+ 1:F =@ i
ARCY,@) = BRCX,@):ANCY,1) = BRCX,1):BR(X,8) = O:BSCX
=e
M1 = AXCY,@):M2 = ASCY,1)
IF Y <M THEN 480
PRINT : IF V > 15 THEN HOME : GOTO 570
VTAB V: CALL - 958
FOR I = 1 TO Y: PRINT CHRS (64 + AX(I,@))*-* CHR (6
4+ ANCI,DDD8 8s
R=R+ i: IF R= NM THEN R = @: PRINT
NEXT : PRINT
HTAB 44: VTAB 23: PRINT "<E>NCORE <B>ASIC <M>ENU DIS
QUETTE “:: POKE - 16368,0: GET XS: IF X$ = *" THEN 4
76
18 PRINT : IF X% = "M" OR X$ = *m* THEN PRINT DS*RUN ME
NU"
8
$22 38822
nan
270 : POKE 34,3 protége
les lignes de titre
290 : L'IF peut étre sup-
primé si on le désire,
359 : Les variables sont
mises (ou remises) &
zéro.
429 : Sur quelle ligne est
le curseur ? V est utilisé
plus loin (ligne 569),
44@ : Mélange aléatoire
tout & fait classique.
469-480 : Essoyez de
comprendre comment se
déroule le programme.
Quand on o épuisé Io
liste des rencontres non
programmées... sons en
avoir trouvé une seule
répondant aux condi-
tions des lignes 490 et
500, F est égol 4 1... ef
on saute au sous-
programme ‘“'DECA-
LAGE".
700: Sans ce sous-
programme, il y a “plan-
tage” pur et simple.
710 : On autorise six
essois... mais si la chose
se produit, relancez le
systame |
S228
718
IF X8 = *B" OR X$ = "b" THEN TEXT : HOME : END
IF X$ = *E" OR X® = "e* THEN 178
GOTO 688
REM tt#seteeeenenneneeaes
SP. DECALAGE #
REM He RH
IF Mi < > A%(1,@) AND M2 < > AXC1,1) AND M1 < > AXCI
+1) AND M2 < > AXC1,0) THEN Mi = A%(1,0):M2 = AXC1,1
>: FOR I = 1 TOY - 1:A%C1,0) = ASCT + 1,0):A%CT,1)
= ASC] + 1,1): NEXT :ASCY,@) = M1:ASCY.1) = M2: RETU
POP :P = P + P: IF P < 6 THEN 350
durée d’un match.
NOMBRE D’EQUIPES 18
F-G
EXEMPLES
Chaque équipe bénéficie,
entre chaque rencontre,
d’un temps de repos qui est
égal ou plus grand que la
45 RENCONTRES A ORGANISER:
NOMBRE MAXIMUM DE RENCONTRES PAR JOUR: 15
A-B A-C A-D A-E A-F A-G A-H A-I
B-C B-D B-E B-F B-G B-H B-I
C-D C-E C-F C-G C-H C-I
D-E D-F D-G D-H D-I
E-F E-G E-H E-I
Bed
c-J
D-J
E-J
F-J
G-J
H-J Jt
I-J
UN PEU DE PATIENCE S’IL VOUS PLAIT!
P-H F-I
G-H G-I
H-I
MELANGE ALEATOIRE EN COURS
D-J A-F D-E B-H E-F B-J D-G E-J G-H C-
A-D F-H B-C A-J F-G E-H I-J C-H B-I C-
D-I C-J A-G C-E A-B E-G B-F C-D G-J A-
NOMBRE D‘EQUIPES 7
21 RENCONTRES A ORGANISER:
NOMBRE MAXIMUM DE RENCONTRES PAR JOUR: 11
A-B A-C A-D A-E A-F A-G
B-C B-D B-E B-F B-G
C-D C-E C-F C-G
D-E D-F D-G
E-F E-G
F-G
MELANGE ALEATOIRE EN COURS
UN PEU DE PATIENCE S’IL VOUS PLAIT!
B-G A-C D-E A-F B-C A-E C-F D-G A-B E-F C-D
A-G B-D C-E B-F C-G D-F B-E F-G A-D E-G
A-J
aQan
urn
azo
TREMPLIN MICRO
39
Votre bibliothéque
INFORMATIQUE 1 parctement reNaRD
Chorles Rubin, l'cuteur, éprouve visiblement une grande
sympothie pour l'Apple /t Nous aussi. Soyons clairs :
son livre s‘odresse indiscutablement aux inconditionnels
de |'Apple //, et plus particuliérement 4 ceux désirant
améliorer les performances de leur machine. SS Le SN Ss et WW
U'Apple fi fétero-t-il ses dix années d’existence ? On
peut raisonnablement le penser, tont lo date est proche :
avril 1987, Combien d’ordinateurs personnels sont ou
seront un jour dans ce cas ? Répondre 4 la question, c'est
forcément reconnaitre 4 |'Apple // une longévité excep-
tionnelle... mais aussi comprendre la fidélité des "Apple-
maniaques™ pour leur micro.
Mais revenons & |'APPLE SANS FIN, utile synthése des
centaines d'études publiées sur les divers matériels fonc-
tionnont sur Apple 1.
Cet ouvrage est la traduction de The Endless Apple,
paru en 1984, en langue anglaise, mais |'édition fran-
aise fournit un répertoire actualisé des importateurs de
produits disponibles sur le marché francais.
Le désir d'améliorer les prestations d'un ordinateur per-
sonnel est générclement lié & la nécessité de mettre au
point une application spécifique. De ce point de vue, le
découpage du livre de C. Rubin est excellent, puisqu'll
tient précisément compte des applications et non des
types de produits,
Comment maintenir ie tamilie Apple f! @ la pointe des performances
La présence d'un index en rend lo consultation encore plus agréable. Alors, je ferai mienne lo conclusion du com-
muniqué de presse ; si vous voulez élorgir votre horizon informatique, vous découvrirez dons ce livre jusqu'ob
‘Apple peut vous mener |
Je sais que de nombreux lecteurs (je n‘oublie pas les lectrices... qu’elles
se rassurent !) de T.M. sont amends 4 utiliser le MO5, présent dans la
pluport des écoles. Pour certains, i! s‘agit seulement de montrer 4 un
enfant comment lancer et utiliser un jeu. D’autres tentent (souvent avec
bonheur) d’adapter sur MOS des programmes mis au point sur leur
Apple... ou vice versa. D'ot Ja présence, dans les colonnes de T.M., de
rubriques consacrées 4 d'autres machines,
Dans le cas présent, l'outeur, Jean-Baptiste Touchard, parait au moins
aussi curieux que les génies qui, depuis neuf ans, ont percé, un 4 un, les
petits secrets du 6502... sauf qu'il s‘agit ici du 6809.
ll _affirme que son livre est sans danger... ef c'est vrai, mais je vous
assure que sa démarche est non seulement intéressante, mais conseillée
d celles et & ceux — et, il en existe beaucoup — qui désirent faire de
l'étude de |"informatique un passionnant jeu de découverte personnelle.
40 GUY-HACHETTE
Y UTILITAIRE [Comes 65CO2 et IMAGEWRITER II
HISTO.TEXT
VOS GRAPHIQUES EN MODE "TEXT"
L est facile, avec le nouveau 65CG2 — qui permet d'utiliser les caractéres
"SOURIS” — de réaliser des graphiques en mode TEXT. II est non moins
facile d’éditer de tels graphiques sur la nouvelle imprimante IMAGEWRITER II.
Si vous en doutez, essayez le programme de Clément Renard !
QUESTION 1 : Qu’obtiendra-t-on avec un Apple lle non transformé ?
R: Ne cherchez pas : un écran assez curieux, sur lequel les caractéres correspondant aux Mouse
characters apparaitront en mode inverse... et sous leur forme habituelle (les colonnes de grisés
seront des “WW”, les colonnes noires des "NN", le filet du bas une suite de "L", etc.),
.
QUESTION 2 : Pourra-t-on néanmoins éditer ce graphique sur une IMAGEWRITER Il ?
R: Bien s0r, puisque celle-ci posséde les caractéres SOURIS.
QUESTION 3: Et avec une DMP... ov une IMAGEWRITER normale ?
R: La, je vous attendais : c'est possible, mais en créant d’abord, 4 partir du programme paru dans le
n°6 de T.M., des caractéres personnalisés. Ce n'est pas difficile... et ¢a marche. Parution de notre
solution dans deux mois (si vous étes pressé, adressez-moi une enveloppe timbrée 4 votre adresse
et je vous ferai parvenir une photocopie du court programme 4 €crire.... avec les fameux coractéres
en DATA(s)). NESTOR.
RESULTATS COMPARES DES ANNEES 1965 ET 1986
1000 +
900 -
800 -
700 -|
600 -j
$00 +
400 +
300 +
200 +
100 -|
JANV FEVR MARS AVRI MAI JUIN JUIL AOUT SEPT OCTO NOVE DECE
TREMPLIN MICRO 4)
H ISTO.TEXT (suite)
1@@ TEXT : PRINT CHR® (4)"PRE3": PRINT : HOME
1@5 DIM MC12,1),L8(24),V(12,1): GOTO 158
118:
115 REM FHRHHMHEHER RHEE OHM RRR Ree
12@ REM ** CARAC MOUSE OR NOT MOUSE an
125 REM HHA H MEH H HH
138:
135 PRINT CHR® (27):: INVERSE : RETURN : REM CARACTERES
SOURIS
14@ PRINT CHR® (24);: NORMAL : RETURN : REM CARACTERES N
ORMAUX
145:
15@ GOSUB 455: HOME
i855 :
160 REM SHOR AHHH EHH HHH
165 REM #* + GRANDE DONNEE/COEFFICIENT ##
170 REM #HA#HRMEHHH MEME H
175 :
168 X = @: FOR I = 1 TO 12
185 IF VCI,@> > X THEN X = VCI,@)
198 IF VCI,1) > X THEN X = VCI,1)
195 NEXT
200 CO=X / 20:E = X:M=9
205 IF X > 9999 THEN X = INT (X / 18): GOTO 205
218 E =X
215 FOR I = 1 TO 12:MC1,@) = VCI.@) / CO:MCI.1> = VCI,1)
/ CO: NEXT
220 :
225 REM HHH HHEHR HAHN MEME HREM
230 REM ** TRACE DU GRAPHE ”
235 REM FHHHEHEHEHOHHHH HEHE MEHR
240:
245 FOR I = 2 TO H STEP 2:VL8 = LEFTS (V$,5 - LEN ¢ STRS
(E>)
258 L9(I) = VL$ + STR$ (E) + " -_
: PRINT VLSE:L$ = **
255 L@¢cI + 1) = * ait
26@ GOSUB 135: HTAB 7: VTAB I: PRINT "L_*: HTAB 8: VTAB
tts PRINT?”
265 GOSUB 140:E = INT (X / 18 * M)
27@ IF E < 1@@ THEN E = VAL ¢ LEFT® ¢ STRS (X / 10 # MD,
4))
275 M = M - 1: NEXT
288 TITRES = “RESULTATS COMPARES DES ANNEES “ + STRS (Ai
> + * ET " + STR (A2)
285 L8(1) = LEFTS (V$,(85 - LEN (TI$)) / 2) + TIS: VTAB
1: HTAB 1:: PRINT L9(1)
290 VTAB 23: HTAB 1: PRINT L$(23);: VTAB 1: PRINT
295 GOSUB 135
300 L9¢22) = LEFTS (V®,7): HTAB 8: FOR I = 1 TO 72: VTAB
": VTAB I: POKE 1403,8
42
ATTENTION ! Lo corte 80
COLONNES est indispen-
sable, Le programme ne
fonctionne convenabie-
ment que sur Apple Ile +
65C92 ou Apple Iic.
ll est réellement trés
facile d’obtenir les carac-
teres SOURIS, comme
vous le montrent les
lignes 135 et 149.
De Ia ligne 180 & Ia ligne
195, on recherche quelle
est la plus grande valeur
(x).
Si elle dépasse 9999 (4
chiffres}, on la divise par
10... et encore par 10 si
cela est nécessaire. Dans
le cas de petites valeurs,
on affichera 2 décimoales.
Pendant le trace de I’his-
togramme, le program-
me crée les 23 lignes (L$)
qui permettront de
Vimprimer... sans passer
par |'intermédiaire d'une
recopie d'écran 80
colonnes,
(sserestresssearesneeens
GUY-HACHETTE
d
@« Py
ae oe
j= hk Re £
=X =
= v =o
Phy Ue >
a J ve @
es = =
H ¢ =o
De a ¥e5
Ft z |
= tT Ee
Le V=
Me dd F @
no aed
o£ — |
IMAGEWRITER 2
Notez que l'on utilise le
mode unidirectionnel et
que l'on modifie l'interli-
gnage (115), L’accés aux
coractéres souris est
obtenu par :
PRINT CHRS$(27) ;
CHR$(38)
On retrouve les caracté-
res mormaux avec un:
PRINT CHR$(27) ;
CHR$(36)
UTILISATION
Tel qu'il est, ce pro-
gramme permet de com-
porer les résultats de
deux années (complétes
ou non), mais il est évi-
demment possible de
lutiliser & d'autres fins.
Cest 14 qu'intervient
imagination |
‘SSSSSESSSSSSSCSEESSSSET
TREMPLIN MICRO
385
318
a
15
SR2885ER8 & 8
883
395
408
405
416
415
428
425
438
435
448
445
458
455
468
465
478
475
488
485
498
495
22: PRINT "L*;:L9(22) = L9¢22) + "L": NEXT
FOR I = 1 TO 12: FORK = 2 TO H
2=H + .5 - MCI.0): IF K ¢ 2 THEN L9(K) = L8(K) + *
*: GOTO 320
POKE 1403,3 + I # 6: VTAB K: PRINT “WW";:LS(K) = L9<
K> + ‘Www"
25H + .5 - MCI,1): IF K ¢ 2 THEN L8CK) = L8CK) + *
*: GOTO 338
POKE 1403,5 + I * 6: VTAB K: PRINT "NN";:L9¢K) = Lax
K> + "NN"
IF I < 12 THEN L89(K) = L@(CK) + * *
NEXT : NEXT
GOSUB 148: VTAB 22: PRINT
REM CARN MMNN RENE
REM ## IMPRESSION an
REP 1649698 9 EEE GE ea
:
VTAB 24: HTAB 8: INVERSE : PRINT “PRESSER UNE TOUCHE
POUR IMPRIMER CETTE PAGE (CTRL-C = A REFAIRE) ";: N
ORMAL : CALL - 198: GET R$: VTAB 1: PRINT "*: IF Rs
= CHRS (3) THEN 150
IF R® = CHRS (27) THEN 788
HOME : PRINT CHR$ (21): PRINT
PRINT CHRS (4)*PR£1": PRINT : PRINT CHRS (9)"8@N": P
RINT CHRS (27)">*; CHR® (27)*T15"; CHR® (27)"E";
FOR I = 1 TO 23: IF I = 1 OR I = 23 THEN PRINT L8¢I>
: GOTO 415
PRINT LEFTS (L9(1),6);
FOR J = 7 TO LEN (L9(1)):LS = MIDS (L8(1),J,1): IF L
¢% = "U" OR L$ = "_" OR L$ = "W" OR LS = "L" OR L$ =
“N* THEN PRINT CHRS (27); CHR® (38);:L8; CHRS (27): C
HRS (36);: GOTO 418
PRINT LS;
NEXT
PRINT : NEXT
PRINT CHRS (4)"PR£O"
PRINT CHRS (4)"PRE£3": PRINT : HOME : GOTO 188
si éleigner pes votre imprimante, ajouter
tie = PRINT CHES(27) "c" de mie 6 0 du logiciel.
REM eee eHHHH HHA HH HERE E UE nee
REM ## INITIALISATION “
REM beeen
?
Vs = **: POR 1 = 1 TO 20:V8 = V8 + * ": NEXT
L9(23) =" JANV FEVR MARS AVRI MAI
N JUIL AOUT SEPT OCTO NOVE DECE*
H = 21: REM HAUTEUR MAXIMUM COLONNE
:
REM HHHHRHE HEHEHE RRR ER RE RREREE
REM xs SAISIE DES CHIFFRES ”
FREI 6064696 6 eve rE IIHR ee
t
HOME : PRINT *SAISIE DES DONNEES*: GOSUB 135: PRINT
7
Jur
43
HISTO.TEXT (suite)
*LLLLLLLLLLLLLLLLLL": GOSUB 148
5@@ POKE 1403.16: PRINT "Taper un simple RETURN quand le
chiffre est bon"
585 POKE 1403,16: GOSUB 135: PRINT “a*;: GOSUB 140: PRIN
T " en cas d’erreur -- ":: GOSUB 135: PRINT *A";: GO
SUB 148: PRINT * pour affichage du graphe*
510 VTAB 22: PRINT : PRINT “DESIREZ-VOUS LIRE UN FICHIER
CO/N) ? "33 CALL - 198: GET R$: PRINT "*: IF R& = *
O* OR R$ = *o” THEN GOSUB 740
515 VTAB 6: CALL - 958
528 ABS = "1985 1986": IF Ai AND A2 THEN ABS = STR® (Al)
+ CHR® (32) + STR® (A2)
525 VTAB 22: PRINT : PRINT “ANNEES CONCERNEES, SEPAREES
PAR UN ESPACE: *ABS;: POKE 14@3,43: CALL - 198: INPU
T “*;ANS
530 IF PEEK ¢ - 16286) > 127 THEN 518
535 IF PEEK ¢ - 16287) > 127 THEN 678
540 IF ANS = "" THEN ANS = ABS: CALL - 998: POKE 1403,43
: PRINT ANS
545 IF MID@ (AN®,5,1) < >“ " THEN S25
55@ Al = VAL ¢ LEFTS (ANS,4)):A2 = VAL ( RIGHTS (ANS,4))
: IF Al < 190@ OR A2 < 198@ THEN 525
555 VTAB 6: HTAB 6: PRINT Ai;: HTAB 19: PRINT A2
568 FOR I = 1 TO 12
565 VI =" "; IF I > 9 THEN VIS = **
57@ GOSUB 575: GOTO 560
575 VTAB 7 + I: PRINT VISI".* LEFTS (V$,25);: HTAB 12 -
LEN ¢ STR® (V(1,0))): PRINT VCI,.@);: HTAB 25 - LEN ¢
STR (V(I,1))): PRINT V(I,1)3: RETURN
58@ POKE 1403.30: PRINT Al;: GOSUB 135: PRINT *U";: GOSU
B 140: INPUT " ";RS
585 IF PEEK ¢ - 16286) > 127 AND I > 1 THEN I = I - 1: G
OTO 565
598 IF PEEK ¢ - 16287) > 127 THEN 670
595 IF RS = *" THEN CALL - 998: GOTO 605
600 V(1,8) = VAL (R®): GOSUB 575
685 POKE 1403,45: PRINT AZ;: GOSUB 135: PRINT “U";: GOSU
B 140: INPUT * ";RS
61@ IF PEEK ¢ - 16286) > 127 THEN CALL - 998: GOTO S88
615 IF PEEK ¢ - 16287) > 127 THEN 678
620 IF R$ = "* THEN 630
625 V(I,1) = VAL (R$): GOSUB 575
630 PRINT : IF I = 12 THEN VTAB 22: CALL - 958: PRINT "P
RECISER SI CORRECTION OU AFFICHAGE DU GRAPHE (CTRL-
E) = ENREGISTREMENT > ";: CALL - 198: GET RS: VTAB 1
9: PRINT "*: IF RS = CHR® (5) THEN 74@
635 IF I = 12 THEN 610
64@ NEXT
645 :
44
FICHIER
Vous pouvez mémoriser
vos données (fichier on
ne peut plus clossique).
Un conseil: donnez un
titre trés simple & vos
fichiers. Exemple H85.86
(qui évoque les deux
années concernées).
SAISIE
Pomme ouverte + return
permet dvoller directe-
ment & l'offichoge du
graphique.
Pomme fermée + return
renvoie & Titem pré-
cédent
Noubliez pos de mainte-
nir la touche pomme
enfoneée quand vous
appuyez sur RETURN.
lo routine saisie est
assez originale, méme si
elle présente quelques
défouts. Elle permet
notamment de savoir
quelles valeurs ont été
modifiées... mais seule-
ment dans lo mesure ob
l'on n‘utilise pas “Pomme
fermée + return”... cor
les corrections éventuel-
les modifient évidem-
ment |'écran de base.
Vous comprendrez tout
cela quand vous saisirez
des données...
(cee ens REUTER ESSO TAS EARS
GUY-HACHETTE
EVASION : GSO REM AHEM NRE N MMH N RK
Hl vest pos frés focile | 655 REM ww PAS DE DONNEES: TERMINE! «#
{souf par un RESET) de | 669 REM RHeRnHHAHAREEHEHHEHERRHNEAKEREMERAY
sortir du programme de 665 :
Seite peront une con | 67@ IF NOT VC1,0) AND NOT V¢1,1) TREN HOME : INVERSE : C
tie naturelle, aprés l'affi- ALL - 198: VTAB 12: PRINT " DESOLE MAIS IL N’Y A PAS
chage de 'histogramme. DE DONNEES POUR TRACER UN QUELCONQUE GRAPHE *: NORM
A ce moment, si vous AL : POP : GOTO 775
répondez por ESCAPE... | 675 RETURN
puis RETURN, vous vous 688 :
retrouvez bel et bien 4 la GBS REM 8 Ha eH EM Hae ee eae
ligne 790... mais un 698 REM #* LECTURE D’UN FICHIER “
GOTO 1000 vous resti- GOS REM steed eH EHC er eae aE
tuera — infoctes — tou- 768 :
tes vos données ! 705 IF F® = ** OR PEEK ( - 16286) > 127 THEN RETURN
718 VTAB 28: PRINT : PRINT CHR® (4)"OPEN"FS: PRINT CHRS
(4)*READ*FS: INPUT Al: INPUT A2: FOR I = 1 TO 12: IN
PUT VCI,8): INPUT V¢I,1): NEXT : PRINT CHRS (4)>*CLOS
E" FS: RETURN
715 :
720 REM HNAHAHKHHHMHM KHMER AER eee
725 REM «# MEMORI SATION ne
730 REM FHFENHHH RHEE EHR HARE
735 :
748 VTAB 22: CALL - 958: INPUT “TITRE DE VOTRE FICHIER "
sFs
745 ONERR GOTO 77@
75@ IF R8 = “O* OR RS = *o" THEN 705
755 IF F® = ** OR PEEK ¢ - 16286) > 127 THEN Si5
768 VTAB 2@: PRINT : PRINT CHR® (4)"OPEN*FS: PRINT CHRS
(4)"WRITE*FS: PRINT Al: PRINT A2: FOR I = 1 TO 12: P
RINT V(I,@): PRINT VCI,1>: NEXT : PRINT CHRS (4)"CLO
SE*FS: GOTO 675
765 :
LIGNE 776 778 POKE 768,104: POKE 769,168: POKE 778,104: POKE 771,1
———— 66: POKE 772,223: POKE 773,154: POKE 774,72: POKE 77
Classique routine de trai- 5,152: POKE 776,72: POKE 777.96: CALL 768: GOTO 515
tement des erreurs, évi- | 775 ;
eae tegPlontoge oprés un | 7@@ CALL - 198: POKE - 16968.0: WAIT - 16984,128,127: PO
é KE - 16368,0: TEXT : HOME
SAUVE
Showing the first 100000 of 152142 characters.