Text content (OCR)
tremplin
micro
Les tables de formes
. Amper command — MIDI pour votre Apple’
Se G Sept ee
ste Se Gx
tremplin | SOMMAIRE
Apple et ProDOS (noms et
logos) sont des marques dépo-
sées d'Apple Computer, Inc,
BIMESTRIEL
Le numéro : 33 F
Abonnement d'un an : 190 F
(6 numéros)
Tous nos prix sont indiqués TTC.
EDITIONS JIBENA
Direction-Rédaction :
Editions JIBENA
Guy-HACHETTE
La Petite Motte — Senillé
86100 CHATELLERAULT.
Téléphone :
49-93-66-66
PUBLICITE :
Raymond JULLIEN
(1) 45.75.41.81
Commission paritaire :
Les revues qui choisissent d'étre
téellement au service du Lecteur,
en ne lobligeant pas glaner.
dons plusieurs magazines, les
fenseignements concernant sa
machine, ne bénéficient pas du
numéro de Commission Poritaire,
et pas davantage des tarifs pos-
toux réduits.
TREMPLIN MICRO — Bimestriel — Cest une
publication des Editions JIBENA, 4, rve de
4a Cour-des-Nowes, 75020 PARIS ~ S.A. ou
Copitol de 3600000 — imprimé par
CITE-PRESS/PARIS — Service de vente :
Presse-Promotion, tel: 49.93.65.03 —
Dépbt legal la date de porution — Inscrip-
‘ion lo Commission Poritaire des Publica-
tions et Agences de Presse : en cours —
Directeur de la Publication : Guy-Clément
COGNE — Diffusion N.M.P.P,
Ss euEEENInEEEnieeieneeaeel
lo Disquette TREMPLIN MICRO
contient tous les programmes
du numéro, ainsi que les sour-
ces trop longs pour étre publiés
les colonnes de la revue.
TREMPLIN MICRO
Avec la collaboration de :
NESTOR, Jean-Paul VERPEAUX.
ARGOS, Claude AUBRY, Marcel COTTINI, Francois GALLET,
Roland JOST, Yvan KOENIG, CLUB MICROTEL MOURENX,
EN TOUTE FRANCHISE... avec GUY-HACHETTE z
Une calculatrice décimale, binaire,
hexadécimale utilisant la souris ...... 2.002. .6 662 c cece eee ees 3
¢€ TRES SIMPLE — Claude AUBRY poursuit son amusante initiation
(angage ¢surlie¢S) Case conplique st wuctmiusesatannes 13
SUR LES TABLES DE FORMES
(Comment ¢a marche et comment les afficher ?) ....... 7
DATA-SUITE (Autour des données en DATA) 19
DATA-S1 (Affichage de l'adresse décimale de doniiéex'e en DATA) . 20
Mieux connaitre LES VECTEURS D'INTERRUPTIONS SOUS PRODOS
PRODOS (article trés documenté de Marcel COTTINI).... 21
LOGIQUE ELEMENTAIRE EN BASIC (avec le Microtel Club Mourenx) ..... 30
AMPERCOMMAND (Utilitaire de Francois GALLET) ................ 37
LES ROUTINES D'ENTREE/SORTIE D'UN CARACTERE ............... 51
LA SOURIS ET L'ASSEMBLEUR (Dernier article) 55
RENDRE LAM AU GS (Yvan KOENIG joue et gagne !)............ 59
C TRES FORT... avec BORLAND . *
BULLETIN D‘ABONNEMENT ET DE COMMANDE .
LES LIVRES 'axssoowsereengy i
RE QOS ME LS OF
We S44 NOK
ee
EN TOUTE FRANCHISE
Ob en étes-vous ? Quels sont vos projets immédiats en matiére d'informatique personnelle ?
Avez-vous I'intention d’écrire des programmes et, si oui, en utilisant quels langages ? Vous
6tes-vous laissé tenter par |'Apple //GS ou avez-vous préféré conserver votre Apple // ?
J'aurais pu formuler ces demandes — et beaucoup d'autres — sous forme de questionnaire. Peut-
étre m'y résoudrai-je plus tard. Pour l'instant, je préfére susciter des lettres que je lirai, je vous le
promets, avec une grande curiosité. J'espére que vous mettrez aussi ce courrier a profit pour me
dire ce que vous pensez du contenu actuel de TREMPLIN MICRO.
Bon nombre de nos correspondant(e)s — acquéreurs d'un Apple //GS— se disent “désorientés” par
cette machine. D'autres commencent a en utiliser les ressources et écrivent méme des routines
intéressantes. Nous publierons évidemment les meilleures dans de prochains numéros, mais nous
tenons 4 ne pas décevoir les possesseurs d’Apple /le et lc, et nous continuerons donc 4 donner la
priorité & des programmes fonctionnant sur TOUTES les machines de la gamme APPLE //. D'aucuns
nous ont reproché d'accorder une place trop importante au langage machine, mais la majorité de
nos Lectrices et Lecteurs (du moins celles et ceux qui nous écrivent) approuve cette démarche et
TREMPLIN MICRO se félicite d’avoir incité des centaines et des centaines d'Applemaniaques 4
s‘intéresser 4 la programmation du 6502, puis 4 celle du 65C02. Je souhaite personnellement que
leur nombre grandisse encore : manipuler les octets constitue un jeu absolument passionnant et il
est dommage, quand on ala chance de disposer d'un micro aussi convivial que I'Apple //, de se pri-
ver de ce plaisir. Bien sir, ce n‘est pas aussi facile que le prétendent les génies de l'informatique
(parfaitement, elle en compte quelques-uns !), mais on y parvient avec un peu de persévérance et
avec l'aide de petits bouquins comme “Le 6502 pas 4 pas”, “Clins d'ceil av 6502" et nos fascicules
de “Routines”.
A l'intention des Lectrices et Lecteurs disposant 4 la fois d'un Apple et d'un IBM PC ou compatible,
nous signalons les ouvrages destinés au second, ainsi que certains logiciels trés performants et
d'un prix abordable (c'est le cas de ceux réguligrement lancés par Borland). |! semble que cette
entorse au TOUT-APPLE ne provoque pas trop de réactions épidermiques chez les inconditionnels
de la Pomme. On notera que nous parlons peu du Mac, sauf dans les rubriques “livres” : a vous de
nous dire ce que vous en pensez.
TREMPLIN MICRO désire rester une revue particuliérement vouée 4 la programmation, et singulié-
rement a celle des machines de la longue série des APPLE //. L'arrivée du GS, ordinateur person-
nel hybride, modifie certes les données : est-ce un Apple // ou un petit Mac ? La question restera
encore posée quand, enfin débridé, le GS PLUS nous montrera ce qu'il est possible de faire avec un
65816, les outils du Mac... et des logiciels a la hauteur des ambitions de la technique et de la Rom.
En attendant, programmons le 65C02 et considérons le GS comme un beau joujou, capable d’ému-
ler le processeur de son prédécesseur... ou de jouer les petits Mac, comme un grand !
BONNE RENTREE, A VOS CLAVIERS ET TRAITEMENTS DE TEXTES POUR ECRIRE A “TREMPLIN
MICRO"... ET RENDEZ-VOUS ICI, DANS DEUX MOIS ! Guy-HACHETTE.
GUY-HACHETTE
PUTIUTARRE oa Roland JOST
VOTRE CALCULATRICE
La calculatrice JR86 n’est pas une calculatrice comme les autres. Elle réside
dans votre APPLE // et peut étre mise en ceuvre grace 4 la souris. JR86 utilise la
notation polonaise inverse et la pile chéres G Hewlett-Packard. En mode déci-
mal, elle donne accés 4 toutes les fonctions mathématiques usuelles (les fonc-
tions trigonométriques sont réduites au sinus, cosinus et tangente ; les angles
sont 4 exprimer en degrés). En mode hexadécimal et binaire, les calculs se font
sur des entiers positifs inférieurs ou égaux & 65535 ($FFFF en base 16 ou
% 11111111 11111111 en base 2). De plus JR86 permet d’effectuer des opéra-
tions sur un octet : opérations logiques AND, ORA et EOR, décalages et rota-
tions ASL, LSR, ROR et ROL.
MISE EN CEUVRE : E, Vérifier les programmes (ce qui est trés
— — ; facile quand on passe par la disquette
A. Taper le programme BASIC (liste 1) et le SIGNATURE de notre ami Yvan KOENIG).
sauver sous le titre JR8&6.
8. Nous ne publions pas le source de la rou-
tine SP.CALC, beaucoup trop long, mais il UTILISER JR&6 :
figure sur la disquette Tremplin Micro. Vous
devrez donc taper le code directement, utilisation de la calculatrice en mode déci-
comme suit (liste 2) : mal ne présente aucune difficulté particu-
CALL - 151 liére : entrer un nombre en cliquant les tou-
6000 : 20 BE DE 20 E3 DF 85 19 etc... ches numériques, puis cliquer la touche de la
Sauver par un BSAVE SP.CALC.0,A$6000, fonction 4 exécuter. Les utilisateurs de calcu-
L$156. latrices HP se retrouveront en terrain connu.
Pour les autres, rappelons que la notation
polonaise inverse permet de se passer de
parenthéses et que, par exemple, le calcul
de (1 + sin (45)) * 3 s'effectue comme suit :
C. Taper la liste 3 (table de formes) :
CALL - 151
7000 : 1800 32 00 4206 etc...
Sauver : BSAVE TABCALC.0,A$7000,L$1B2.
D. Entrer enfin la liste 4 (représentation gra- < tangle est exprimé'endegrés)
phique de la calculatrice) : 1
CALL - 151 a,
6039: A9 20 85 04 20 63 etc... 3
oe : BSAVE CALC.COMP.0,A$6039, *
L$C2F. 5 =
CALC.COMP.G@ est long 4 entrer au clavier, Resullate S12131894:
mais c'est indispensable et le résultat en Voici maintenant quelques applications plus
vaut la peine... spécifiques 4 la calculatrice JR86 :
AAQUsOEnUs ERENT OE soR een RARasEeR ETAT EAE eRe R ERA Eee e seo EEO eRUALeNEABEEe EsoeseeeseouEsesEaEEEoSEEENeES
a GUY-HACHETTE
ee
rors
diane dann cae inane dei Settee and dan ead
En plus des opérations mathématiques classi-
ques en décimal, la JR86 permet de travailler en
base 2 ou 16, et aussi d’effectuer des opérations
sur un octet. En voici quelques exemples :
1° Conversion d'une adresse négative en nombre positif :
Reliquat des temps héroiques, on trouve encore
dans de nombreux listings des commandes du
genre PEEK (- 16384) ou CALL - 3100. Pour con-
vertir ces adresses négatives en nombres posi-
tifs il suffit d’effectuer les opérations suivantes :
Prenons l'exemple de - 16384, adresse de lec-
ture du clavier
16384
CHS ——» ~16384
HEX ——» $C000
DEC ——» 49152
Effectivement un PEEK (- 16384) et un PEEK
(49152) sont équivalents en Applesoft.
2° Les opérations logiques : AND, ORA et EOR
EXEMPLES: 1 (ENTER)
ASL 12
ASL :4
ASL 8
ASL 1
etc.
6
En effet ASL effectue une multiplication par 2,
LSR une division par 2.
Pour les rotations, le résultat dépend de la
valeur de la retenue au départ. Pour mettre la
retenue 4 zéro (donc simuler |'instruction CLC)
faire comme suit :
@ (ENTER)
LSR_ : le zéro tombe dans la retenue.
Pour mettre la retenue 4 un (SEC) on fera :
1 (ENTER)
LSR : un 1 tombe dans la retenue.
On pourra maintenant entrer un nombre, puis
effectuer l'opération ROL ou ROR.
JR86 permet d’effectuer des opérations logi-
ques sur des nombres inférieurs 4 256, donc
codés sur un octet en hexadécimal (8 bits en
binaire).
EXEMPLE : faire un ET logique (AND).
HEX pour passer en mode hexa
co (192 en décimal)
ENTER
7F (127 en décimal)
AND
résultat = 40.
3 Les décalages (ASL, LSR) et rotations (ROR, ROL) :
Le microprocesseur 6502 (ou 65C@2) posséde
les 4 instructions suivantes :
ASL : décale les bits d'un octet vers la gauche.
Le bit 7 est perdu, un zéro rentre dans le bit 0.
LSR : décale les 8 bits vers la droite : le bit 0 est
perdu, un zéro rentre 4 gauche dans le bit 7.
ROR : rotation 4 droite d'un octet : la retenue
entre dans le bit 7 et le bit 0 tombe dans la
retenue.
ROL : rotation 4 gauche d'un octet : la retenue
va dans le bit @, le bit 7 sortant tombe dans la
retenue.
* Le programme JR86 :
Le programme BASIC effectue le charge-
ment des différents modules en Assem-
bleur, gére le déplacement de la souris,
réalise la saisie des nombres et effectue les
différentes opérations | mathématiques
(sauf les opérations logiques).
* Notons au passage deux routines :
— Ligne 425 : conversion d'un nombre hexa
de 4 chiffres, stocké en mémoire 4 partir
de l'adresse Al, en nombre décimal.
— Ligne 430 : conversion de binaire en déci-
mal d'un nombre de 16 bits, stocké en
mémoire a partir de l'adresse A2.
LE PROGRAMME SP.CALC.O :
Ce programme en Assembleur 6502 était néces-
saire pour permettre un affichage rapide en
mode haute résolution. || permet de plus la con-
version rapide de nombres hexadécimaux ou
binaires en décimal (comparer avec la lenteur
relative de l'opération inverse effectuée en
BASIC par les lignes 425 ou 430) et l’accés aux
opérations logiques. Le source de ce programme
est bien commenté et le lecteur pourra s'y repor-
ter pour plus de détails.
(Suite page 6)
TREMPLIN MICRO
5
TABCALC.O :
C'est une table de formes renfermant les
caractéres 4 afficher en haute résolution (flé-
che souris, chiffres 0 49, lettres A a F, espace,
% et $).
CALC.COMP.O :
L'image graphique de la calculatrice est sto-
ckée sur disque sous forme condensée. Cette
image est décompressée aprés chargement
par un petit programme assembleur logé entre
$6039 et $608A (technique empruntée 4 la
revue NIBBLE).
Le lecteur qui doit saisir les divers programmes
au clavier économise ainsi l’entrée d'environ 4K
de nombres hexadécimaux supplémentaires.
Méme aprés lecture du manuel de la souris, il
n'est pas évident de programmer la souris. Voici
les différentes instructions 4 incorporer dans un
programme BASIC :
1° Recherche de la carte souris
Un programme utilisant la souris doit pouvoir
détecter la présence de celle-ci. APPLE recom-
mande de mettre la carte dans le port 4, mais
ce n'est pas obligatoire, et le programme
appelant doit pouvoir localiser le port conte-
nant l'interface. Si l'interface souris est dans le
port n l'octet $CnOC contient $20 et I'octet
$CnFB = $D6. II suffit donc de tester le contenu
de ces 2 octets pour n compris entre | et 7. Ceci
est réalisé en ligne 875.
2° Activation de la souris
Avant toute utilisation il faut exécuter les
instructions :
PRINT CHR$ (4)'PRE"SL : od SL est le numéro de port
de l'intertace Souris.
PRINT CHR$(1) : pour activer l'intertace.
PRINT CHR$(4)"PREG" : pour aiguiller les sorties
vers l’écran.
3° Lecture de la souris
PRINT CHR$(4)"IN£"SL_: input provenant de
la souris
INPUT’; H,V,S : : saisie de la position
de la souris
H = position horizontale : g= < H <1023
V = position verticale <V <1023
S = statut du bouton £S5<4
4° Désactivation de la souris
PRINT CHR$(4)"IN£G” : pour réactiver le cla-
vier
PRINT CHR$(4)"PRE"SL : envoi de caractéres
vers la carte souris
PRINT CHRS(@) : désactive la souris
PRINT CHR$(4)"PRE"@ : envoi des caractéres
vers |'écran.
ET POUR CONCLURE VOICI QUELQUES
A. Les touches A,B,C,D,E et F ne correspon-
dent pas 4 des registres, mais aux chiffres
hexadécimaux 10 4 15. Elles ne sont 4 utili-
ser qu’en mode hexadécimal.
Les décalages et rotations ne peuvent étre
effectués que sur des entiers inférieurs ou
égaux 4 255. Sinon affichage du message
d'erreur (EEEEE clignotant).
C. Les autres opérations en base 16 ou 2 ne
portent que sur des entiers pouvant étre
codés sur 2 octets, c'est-d-dire strictement
inférieurs 4 65536.
Si vous ne disposez pas de la souris APPLE, uti-
lisez les fléches pour déplacer le curseur et la
touche (ENTER) pour valider une commande.
Bien sdr, avec la souris, C'EST MIEUX !
GUY-HACHETTE
aaleeetlelhahatataahaaiaa el eaee eet eal
- LISTAGE 1 IREG |, 162" ye
Patachmatind cS
as 260 REM ***#%* TRAITEMENT ERREURS
- 100 REM *#*** JR86 : CALCULATRIC batted
E SOURIS *x** 265 FOR T = 1 TO S: PRINT CHR
~ 105 REM ***** Roland JOST <(C) (7);: GOSUB 185: CALL PR,ES,
° 1986 FERRER 70,8,1: NEXT : GOSUB 465: GO
110 GOSUB 715: GOTO 275 cope TO 275 CAOB
T 115 REM ***#** SOUS-PROGRAMMES ** 270 REM ##*%* DEPLACEMENTS CURSE
- REE UR ##¥#*
7 120 REM ***** AFFICHAGE DES NOMB 275 1F MS = 0 THEN 290 SCAC
RES #*##* 280 PRINT D$"INE"SL: REM ACTIVE
i 125 GOSUB 185: GOSUB 155 BDO3 LECTURE SOURIS SBF
= 130 IF BASE = 16 THEN CALL AH,H 285 REM LECTURE
$: CALL HEX,X: CALL PR,H$,11 290 Hi = H:V1 = V A278
54 6,8,1: RETURN O70F 295 IF MS = 0 THEN GET R$:R =
- 135 IF BASE = 2 THEN CALL AB,BS ASC (R$):H = H - 28 * (R= 8
: CALL BIN,X: CALL PR,BS,44, > + 28 * (CR = 21) OR (R= 3
bf 8,1: RETURN DESC 2)):3V = VU + 13 * (R= 10) -
- 140 AS = STRS (X) 93C2 13 * (R = 11): GOTO 310 BFIE
145 XH = 140 - 6 * LEN (AS): CA 300 INPUT "";H,V,S BS4C
- LL PR,A$,XH,8,1 SFED 305 H = 28 * INT (H / 25,575) -
+ 150 RETURN 63B1 3:4 = 13 * INT (V / 32) 6EED
s 155 REM *#*%** AFFICHAGE DU MODE 310 IF H < 53 THEN H = 53 8272
HHRRH 315 IF H > 137 THEN H = 137 89D6
= 160 HCOLOR= 0: DRAW 15 AT 38,8: 320 IF V < 26 THEN V = 26 ACBE
‘t HCOLOR= 3 8F89 325 IF VY > 182 THEN V = 182 02F2
165 IF BASE = 16 THEN DRAW 244 330 IF ABS (S) = 2 OR R = 13 TH
* T 38,8: RETURN FB3C EN GOSUB 350 SF87
- 170 IF BASE = 2 THEN DRAW 23 AT 335 IF H = Hi AND V = V1 THEN 27
38,8: RETURN 0606 5 Bila
Ee 175 RETURN $3B1 340 XDRAW 16 AT H1,V1: XDRAW 16
- 180 REM #*#*%* EFFACEMENT #**#* AT HV BAB2
a 185 HCOLOR= 0: CALL PR,V$,44,8,1 345 GOTO 275 3F49
: HCOLOR= 3: RETURN 106F 350 REM ON A CLIQUE
* 190 REM ***** SAISIE D’UN NOMBRE 355 PRINT CHRS (7); 7364
ee HHREK 360 T1 = TCHE:TCHE = 4 * (VY / 13
195 IF BASE < > 2 THEN 215 36F6 = 2) 4<CH:= 53) 71 28r, IF TCH
e 200 IF @ < 2 THEN XX = XX * 2 + E = 51 THEN 925 ESE2
ep Q Fé0A 365 IF TCHE ¢ 28 OR TCHE = 32 OR
205 GOSUB 185: GOSUB 155: CALL A TCHE = 36 OR TCHE = 40 OR TC
B 8,B$: CALL BIN,XX: CALL PR,B HE = 44 OR TCHE = 48 THEN G
- $,44,8,1 E378 OSUB 415: GOTO 375 , 946E
210 RETURN 63B1 370 IF T1 < 28 OR T1 = 32 OR Ti
ad 215 IF BASE < > 10 THEN 245 EB28 = 36 OR T1 = 40 OR Ti = 440
o 220 1F @ > 9 THEN 235 A664 R T1 = 48 THEN GOSUB 395:T
225 XX = VAL (A$) 9318 = 2:2 = ¥:¥ = X:XX = 0 1151
’ 230 GOSUB 185: GOSUB 155 BDD3 375 IF TCHE > 29 THEN 385 9BSF
~ 235 CALL PR,A$,140 - 6 * LEN ‘A 380 GN TCHE + 1 GOTO 450,455,460
$),8,1 CFA3 1465, 470,475,480 ,485, 490,495
i 240 RETURN 638) :500,505,510,515,520,525,530
= 245 XX = XX #16 + @ 747A $535,540 545,550 ,555,560,565
a 250 GOSUB 185: GOSUB 155: CALL A 3970 ,575,580 585,590,595 FFCF
H,H$: CALL HEX,XX: CALL PR,H (Silisipoge 8)
TREMPLIN MICRO z
, ee —t—t——S—Ss
Cl
LISTAGE 1 JRSG6 515 X = COS (X * PI / 180): GOT
— 0 120 C9EE
385 ON TCHE - 29 GOTO 600,405,41 BEOX &) TON Shi 8 PE 2 E803 SOT
0,615,420, 625,630, 635,640,644 cans 8iFO
5,650,655, 660,465,470 675,48 525°X = sATN (X: 4 PI 7 180) GOT
0,685,4690,700,705 35FA 0 120 29F 1
390 REM 530 T = 2:2 = Y:¥ = X:X = PI: GO
395 REM ***** MISE A BLANC DES C TO 120 AASP
HAINES *##** 535 X = - X: GOTO 120 30C1
400 IF BASE = 10 THEN AS = "":R 540 WW = X:X = Y:¥ = 2:2 = T:T =
ETURN 1621 Ww: GOTO 120 298A
405 IF BASE = 16 THEN FOR I = 0 345 Wes TaT = 252 = Yi¥ = XX =
TO 3: POKE Al + 1,48: NEXT : Wi: GOTO 120 048A
RETURN D736 550 POKE 6,X: CALL LS:X = PEEK
410 IF BASE = 2 THEN FOR I = 0 £6): GOTO 120 6FiB
TO 15: POKE A2 + 1,48: NEXT 555 X = 1 / X: GOTO 120 FOF4
RETURN C735 560 mi = X:X = ¥:¥ = Wi: GOTO 12
3E1A
415 Rey ##e#® EVALUATION DE X ## 565 : RETURN pone
420 IF BASE = 10 THENX = VAL ¢ 570 POKE 6,X: CALL AS:X = PEEK
4%): RETURN 0368 (6): GOTO 120 cci0
425 IF BASE = 16 THEN X = 0: FOR 575 POKE 6,X: POKE 7,Y: CALL AN:
= 010 3:2 = PEEK (Al +L X = PEEK (6): GOTO 120 9CBA
y:12=2- 48 * (2 > 47 AND 2 580 POKE 6,X: POKE 7,Y: CALL EO:
© 58) - 55 * (2) 64 AND 2 < X = PEEK (6): GOTO 120 F3BF
71):22¢L) = 2: NEXT : FOR I 585 POKE 6,X: POKE 7,Y: CALL RA:
= 070 3:xX =X + 221) * (16 X = PEEK (6): GOTO 120 SFBE
* ¢3 - 1)): NEXT : RETURN 8B3F 590 POKE 6,X: CALL RL:X = PEEK
430 1F BASE = 2 THEN X = 0: FOR (6): GOTO 120 aca
= 070 15:2 = PEEK (a2 + 595 @ = 13: GOTO 190 7504
L):2 = 2 - 48 * (2 > 47 AND 600 @ = 14: GOTO 190 4£05
2 < 50):22¢L) = 2: NEXT : FO 605 @ = 15: GOTO 190 4B06
R I= 0 TO 15:X = X # 22¢1) 610 POKE 6,X: CALL RR:X = PEEK
* (2 * (15 - 19): NEXT : RET (6): GOTO 120 4320
URN 0A26 615 @ = 10: GOTO 190 5901
435 REM ADDITION A LA PILE 620 @ = 11: GOTO 190 9102
440 T = 2:2 = Y:Y = X: RETURN 4EE1 625 @ = 12: GOTO 190 9803
445 REM ***** OPERATIONS ***** 630 X = Y - X:¥ = 2:2 = T: GOTO
450 BASE = 16: GOTO 120 BACA 120 EC8F
455 BASE = 10: GOTO 120 occ4 635 AS = AS + "7":Q = 7: GOTO 19
460 BASE = 2: GOTO 120 4995 0 74EE
465 X = 0: GOSUB 395: GOSUB 185: 640 AS = AS + :Q@ = 8: GOTO 19
RETURN BBS6 0 77F0
470 X = INT ¢X): GOTO 120 E71C 645 AS = AS + "9": = 9: GOTO 19
475 X = ABS (X): GOTO 120 Do1D 9 EFF2
480 X = SQR (X): GOTO 120 6£23 650 X = ¥ + X:¥ = 2:2 = T: GOTO
485 X = X * X: GOTO 120 C71A 120 328E
490 X = LOG (X) / LOG (10): GO 655 AS = AS + "4":Q = 4: GOTO 19
TO 120 957E 0 68E8
495 X = LOG (X): GOTO 120 9C25 660 AS = AS + "5":Q = 5: GOTO 19
500 X = EXP (X): GOTO 120 2926 0 15EA
505 X = Y * X: GOTO 120 F81D 665 AS = AS + "S6":Q = 6: GOTO 19
510 X = SIN (X * PI / 180): GOT 0 28EC
0 120 BAEF 670 X = Y * X:¥ = 2:2 = T: GOTO
8 GUY-HACHETTE
SeaasesnesaLANaRaasNnNNESEeReANA EET ARSENE REESE STeAs CE CAUNAANORSSEAENAOETASTOAAEEReeoRseReenoRsLeRRAEaS
675
680
685
690
695
700
705
710
715
720
725
730
735
740
745
750
755
760
765
770
775
780
785
790
795
800
805
810
B15
820
825
120
AS = AS + "1":Q = 1: GOTO 19
Q
AS = AS + "2":Q = 2: GOTO 19
0
AS = AS + "3":Q = 3: GOTO 19
0
X= Y / X; GOTO 120
X= Y / X:¥ = 2:2 = T: GOTO
120
AS = AS + "0":Q = O: GOTO 19
0
AS = AS + "."; GOTO 190
REM ###*#*% INITIALISATION #**
**
DIM 22¢16)
DS = CHRS (4)
ES = “EEEEEE"
HS = "1215"
BS = "0001000111001101"
US St Tenet
BASE = 10
AH = 24576: REM
resse de HS
recherche ad
AB = 24603: REM recherche ad
resse de BS
AN = 24630: REM AND
EO = 24637: REM EOR
RA = 24644: REM ORA
AS = 24651: REM ASL
LS = 24654: REM LSR
RL = 24673: REM ROL
RR = 24681: REM ROR
BIN = 24689: REM conversion
décimal-binaire.
HEX = 24737: REM conversion
décimal-hexadécimal
PR = 24771: REM écriture HGR
PI = 3.14159
SCALE= 1: ROT= 0: HCOLOR= 3
ONERR GOTO 260
GOSUB 865: GOSUB 900: HGR :
POKE - 16302,0: PRINT D$"BRU
N CALC.COMP.0"
TREMPLIN MICRO
E790
68E2
S3Eq
O7E6
c7ic
3091
E8E0
6053
31F2
B3A4
ABIB
0549
5981
7F8E
034C
E961
E852
B45E
EBSA
BE67
AB6S
4174
8774
7379
30B6
CEBC
4377
B2CE
B2CB
7S5E8
830
835
840
845
850
855
860
865
870
875
880
885
890
895
900
905
910
91S
920
925
9320
935
940
945
950
955
PRINT D$"BLOADTABCALC.O ,A$70
00": POKE 232,0: POKE 233,11
2
PRINT D$"BLOAD SP.CALC.0"
CALL AH,H$:A1 = PEEK (250)
+ 256 * PEEK (251)
CALL AB,B$:A2 = PEEK (235)
+ 256 * PEEK (236)
GOSUB 185
s=4
H = 53:V = 26: XDRAW 16 AT H
sVsH1 = HiVi = VY
REM *#*#* RECHERCHE DE LA CA
RTE SOURIS
REM :$CNOC = 32 ET $CNFB = 2
14 ¢ SOFT SOURIS-
FOR 1 = 1 70 7: IF PEEK (49
164 + 1 * 256) = 32 AND PEE
K (49403 + I * 256) THEN SL
= 1:1 = 7: NEXT : GOTO 890
NEXT I
PRINT "PAS DE SOURIS . UTILI
SER LES TOUCHES FLECHES DU C
LAVIER ":MS = 0: RETURN
PRINT “INTERFACE SOURIS EN S
LOT "SL:MS = 1
RETURN
REM ##*** ACTIVATION SOURIS
RRRRE
IF MS = 0 THEN RETURN
PRINT D$"PRE"SL: PRINT CHRS
(1): REM ACTIVE LA SOURIS
PRINT D$"PRE£0": REM AFFICHAG
E ECRAN
RETURN
REM ****# DESACTIVATION SOUR
IS ET FIN ##*##
PRINT
PRINT DS" INEO":
INPUT DU CLAVIER
PRINT DS"PRE"SL: PRINT CHRS
(0): REM DESACTIVE LA SOURIS
PRINT D$"PRE0": REM ECRAN
TEXT
END
REM ACCEPTE
8999
93ED
EDES
FC4E
E257
EFBF
6ASS
4E8C
$B43
6381
78C2
4027
3A5B
$381
75BA
coso
49626
1389
0180
SP.CALC.G,A$6006,L$0156 Liste 2
DE 28 E3 DF 85 19 84 1A AB 68 BI 19 85 FC C8 BI 19 85 FA C8 BI 19) = =S368
68 26 BE DE 2@ E3 DF 85 19 84 1A A@ 68 BI 19 85 ED C8 BI 19 BS EB APPS
19 85 EC 68 AS 86 25 87 85 446 68 AS 86 45 G7 85 86 68 AD B46 85 G7) OFTHE
68 86 86 68 46 86 28 54 68 68 98 86 AD B1 85 9 BB B4.A9 BB 85 BF LEME
89 26 66 28 54 68 568 46 89 66 86 26 54 68 68 28 BE DE 28 67 DD 28) Art
AB 87 66 51 98 64 AD 31 BB 2 AD 36 91 EB 88 CB FF DB EF AB BF 66) = =SD27
84 AY 31 BG 82 AF 36 91 EB 88 CO 87 DB EF 68 26 58 FC 26 BE DE 28 8683
26 52 E7 AS 51 Aé 5@ 2@ 41 F9 AB 63 BY BB B4 29 7F 91 FA 88 CO FF {EBD
68 28 BE DE 26 E3 DF 85 19 84 1A AB 68 84 18 84 FC B1 19 BS FB CB OSPLE
48 C8 Bi 19 85 FE 68 85 FD 20 BE DE 28 47 DD 26 52 E7 AS 58 85 86) =A 7A
85 67 26 FS Eé 846 FC 28 FS Ed 86 E7 AP B46 85 EC A4 18 BI FD C9 28 89DA
AY 3F C9 2E DB 82 AP 3C C9 45 DB O2 AP 3B C9 2B DA 42 AY 3D C9 2D 12CE
AY 3E CF 38 DB 82 AP 3A 38 EF 38 AA 26 38 F7 AS FC AS 86 AS B7 2860 BAU)
AS F9 26 65 Fé A4 B6 18 98 65 EC 85 O46 C4 B6 98 G2 ES B7 ES 18 AS BDEL
18 D@ AD 68 Fib4
TABCALC.G,A$7000,$0182 LIsTe =
32 G8 42 86 53 88 64 G8 74 GB 85 BB 96 BB A7 BB BB BB CY BB DF 48 ccb3
Fil 06 FE 8@ 89 @1 1E @1 2F 61 3F 81 S@ 01 68 @1 76 O1 81 G1 91 BI 73A9
89 6D DA DF 4A 49 DA DF 4A 49 1A 3F 9F 88 68 86 29 2D 0S DF 53.49 = Baar
BF 69 89 3B 3F 17 68 6@ @@ 29 2D DS DF 53 49 DS 3F 9F 49 AY 3B 3F 9218
88 88 69 89 FB BB 69 AY 3B 3F 57 49 DS DF 13 88 86 G8 29 2D DS DB 2488
AD FB 9B 49 AY 3B 3F 17 88 68 88 29 2D DS DB 57 2D AD FB BB 69 AP fine
17 88 66 68 29 2D DS DF 53 69 8D 1B DF 4A 4D DA FB 82 86 86 88 29) 8415
OF 57 2D AD FB BB 69 AY 3B 3F 17 86 88 08 29 2D DS DF 57 2D AD FB 75A1
A9 3B 3F 17 86 88 88 29 2D DS DF 57 40 DS DF 57 40 DS 3F BF 68 88 18F7
2D DS DB 57 20 8D DB BB 69 89 3B 3F 17 88 88 88 92 52 89 8D 86 BA 420A
89 8D 3B FF 4A 69 DA DB 62 86 66 88 92 89 2D DS DB 53 49 11 86 86 30B1
20 35 3F 3F 37 2D 2D 35 3F 3F 37 2D 2D 35 3F 3F 37 @6 86 6 2D 6D) fF See
37 2D 4D DA DF 4E @9 15 DF 9B 68 @@ 88 B9 6D 1A DF 57 2D AD FB BB) fF ®8E
FB BB 8 66 8 29 6D 1A DF 57 2D 8D FB BB 69 AY 1B 3F 17 86 88 88 7BA1
1A DF 57 4D D1 DB S57 4D DS 3B 9F 68 68 88 29 6D 1A DF 57 40 DS DF OFF
DS 3B BF 68 68 88 29 2D DS DB 57 2D 8D DB BB 49 89 3B 3F 17 86 G8 C9AB
20 DS DB 57 2D 8D DB BB 69 89 DB BB 68 86 6B 29 4D 1E DF 57 89 BD OF Ies
69 AY 3B DF 86 68 88 G8 69 AD FB BB 29 2D DS DF 57 4D DS DF 17 86 OFFED
gee
CALC.COMP.G.A$6039,L$G6C2F LIsTEeE &
: 63 48 4735
88 28 84 6@ 26 76 6@ DO F2 68 20 84 46 Bl 82 AA 98 91 O6 aces
F7 28 84 68 D@ DD AS 44 85 41 AY BB 35 BG AY BB 85 82 AP 2BF°
68 E6 68 DB G2 Es 41 AS G1 38 EF 26 C5 64 68 ES G2 DB C4 b115
7E 7F 7F 7F 7F 7F 7F 2F 7F 2F 7F 7F O7F O7F OF ZF 7F 08 17 «865102
SF AB 7F @1 3F 2B 7A @1 6F 36 7A G1 81 88 16 G1 BF 23 7C 7367
7F 63 7F 1 7F 43 7F 81 81 06 1E 41 88 83 68 G1 7A SE OF ace2
86 83 G2 81 G6 16 61 G6 16 41 O68 16 G1 BB 16 1 68 1E 41 DF78
7F 7F 7F 7F ?F 7F 7F 7F 7F 7F 68 @1 G1 88 16 81 7F 3B 7 75C2
3F 3B 7F 61 7F 76 7E @1 G1 68 16 61 7F FF 7F Q1 7F F? 7F c3cé
7F EF 7F 61 @1 @@ 1E G1 6F A2 7A O1 GF AB 7C G1 BF 63 76 2D9C
@1 60 16 61 7E 7F 7F 61 7F FF 7F 01 7F FF 7F 61 7F 7F VF OEEES
FE FF FF 88 @1 FE FF FF @@ 81 FE FF FF 80 G1 FE FF FF 88 E4ac
68 16 61 66 16 61 66 18 G1 66 16 81 7E 7F 7F GG G1 7E 7FO OGSER
7F 68 61 7E 7F 7F 86 G1 G1 68 1E 61 SF ES 7E 81 SF DA 7B 3711
2F F7 7E @1 @1 88 16 61 1F 22 7F @1 1F 42 7A O1 1F 2B 7C SBce
@1 68 16 61 7F EB 7F 61 7F 6F 7F 01 7F EF 7F @1 7F SF 7F C4Fs
10 GUY-HACHETTE
61CG: 61 61 66 1E 61 FE FF FF 60 @1 FE FF FF @@ 61 FE FF FF 6 @1 FE FF FF 06 6014
? 6108: 81 @1 G6 16 61 86 16 81 48 146 61 60 16 G1 68 IE @1 7E 7F 7F 8 B1 7E 7F (82EB
S1F@: 7F 68 81 7E 7F 7F @@ @1 7E 7F 7F @@ 1 G1 @8 16 O1 7F 7F 7F O1 7F 7F O7F 7ABD
I $208: 01 7F 7F 7F 61 7F 7F 7F 61 G1 88 16 G1 7F FB 7F O1 FF E3 7F O1 7F FF 7F = (ABSE
6220: 61 10 77 64 61 81 06 1E 83 OG 10 61 @@ 16 01 1F 36 78 O1 SF AB 7C 01 3F = Ba7S
e 6238: 23 78 81 OF 36 78 G1 61 88 16 81 SF 2A 7B 61 7F 5B 7F O1 7F 5B 7F @1 7F 15BA
6256: 78 7F 61 81 66 1E 41 @8 83 26 G2 4A G2 02 OG G1 18 29 GA BG G3 82 81 BA ABI
7 $268: 16 G1 88 14 G1 68 16 61 GB 1@ 61 GB 1E G1 OB 10 81 46 16 B1 7F 7F 7F Gt 9815
» 6280: 7F 7F 7F @1 7F 7F 7F @1 7F 7F 7F @1 81 @@ 16 O1 7F FF 7F @1 7F F7 7F @1 7486
6298: 7F E3 7F O1 7F E3 7F @1 @1 G6 IE 91 SF FA 7A B1 SF BA 7F 81 SF 76 74 O1 3ECB
ba 62B@: SF 3B 7D 61 81 60 14 81 SE 23 7C @1 IF EF 7A @1 7F DF 7F @1 23 45 48 81 B646
4 6208: @1 @6 16 @1 7F FF 7F 61 7F FF 7F 61 7F FF 7F 81 7F FF 7F @1 G1 @8 1E @1 AS36
62E@: 6@ 16 81 @@ 16 81 68 18 1 G8 146 61 BG 18 G1 06 IE 91 GF ED 7E O1 SF E2 353¢
b 62F8: 78 @1 1€ A2 7B 1 2F F7 78 G1 G1 66 16 81 SF 2E 7F 91 SF 4A 7A O1 SF 2B = 8028
é 6318: 70 81 SF 6A 7A @1 81 68 16 O1 7F F7 7F @1 7F 6F 7F @1 7F E3 7F 01 7F 4F-OFEEE
6328: 7F 61 61 G6 1E 61 7F FF 7F 81 7F FF 7F 81 7F FF 7F @1 7F FF 7F @1 81 @8 C999
p 6348: 16 @1 FE FF FF @@ @1 FE FF FF G6 @1 FE FF FF 48 @1 FE FF FF 0@ 81 @1 80 osec
L 6358: 16 61 68 16 61 68 1E 81 68 18 G1 68 16 81 7E 7F 7F 8@ G1 7E 7F 7F 88 BI 1669
6376: 7E 7F 7F 68 @1 7E 7F 7F 68 @1 81 86 16 O1 7F 7F 7F 61 7E 7F 7F 1 7F 7F 3caB
6388: 7F G1 21 66 82 G1 G1 86 1E 81 G8 16 1 G8 16 01 7F 36 79 O1 SF EB 7D @1 s1E3
63A8: 3F 2B 79 61 6F 36 79 @1 81 G6 16 B1 BF 2B 7C G1 7F 43 7F @1 7F 63 7F 81 4076
I 6388: 7F 7B 7F 61 G1 08 1E 41 68 83 68 @1 4A 1E 82 86 81 10 SF 7B 88 83 82 B1 79AP
6306: 68 16 61 FE FF FF 68 61 FE FF FF @@ @1 FE FF FF 0@ 01 FE FF FF 00 @1 61 pec
6368: 68 16 61 68 16 G1 68 1E G1 G8 16 G1 68 16 B1 7E 7F 7F OB G1 7E 7F 7F BO 5068
r 6406: 61 7E 7F 7F 08 01 7E 7F 7F G8 O1 61 G0 16 @1 7F 7F 7F 01 7F 7F 7F O1 7F = BESE
6418: 7F 7F 61 7F 7F 7F 1 @1 88 1E 91 OF F2 7D 81 SF B2 7F O1 OF 77 78 B81 SF E213
6438: 7B 7E @1 61 G8 16 61 SE 3B 7B 61 3F EF 7A 61 4B BF 6B 81 38 6C 2E @1 81 8930
6448: 6@ 16 61 7F FF 7F @1 7F FB 7F @1 7F E3 7F @1 7F E3 7F O1 1 8 1E G1 86 = EAF
6466: 18 G1 G8 16 G1 OG 10 41 68 16 61 G8 16 61 O9 1E G1 7F 7F 7F O81 7F 7F 7FOOBTE
[ 6478: @1 7F 7F 7F 61 7F 7F 7F 61 81 08 16 81 SF 22 7C O1 SF 5A 7C @1 IF 22 7B (8485
6496: 81 1F SA 7A @1 G1 O88 16 81 7F F7 7F O1 7F OF 7F 81 7F FB 7F O1 7F SF 7F (CCCS
6408: 61 61 @6 1E G1 SF A3 78 81 7F DE 7D @1 1F AA 7C O1 7F D7 7F O1 O1 8815 BAA
64C@: 61 7F FF 7F @1 7F FF 7F 01 7F FF 7F @1 7F FF 7F @1 81 8 16 81 7E 7F 7F 2A8D
r 6408: 60 61 FE FF FF @@ @1 FE FF FF @@ 01 7E 7F 7F 88 @1 @1 08 1E G1 06 18 @1 Dé6Ae
a 64F0: 06 16 61 68 16 61 88 16 61 7E 7F 7F O68 81 7E 7F 7F 00 1 7E 7F 7F 06 O1 EBS
6508: 7E 7F 7F 44 G1 @1 8 1E 61 88 18 G1 66 16 @1 IF 22 7B 81 IF A2 7C 61 3F OCFF
, 6520: 2B 7B 91 6F 36 7B G1 81 68 16 @1 2F 2B 7D @1 7F 5B 7F @1 7F SB 7F @1 7F = AcEB
6538: 7B 7F @1 81 88 1E 41 68 83 46 20 4A 18 82 3C 18 28 4A BB B3 42 B1 8816 FELS
6558: @1 7F FF 7F @1 7F FF 7F @1 7F FF 7F 01 7F FF 7F 01 @1 G@ 16 @1 FE FF FF 2700
- 6568: 66 61 FE FF FF 68 @1 FE FF FF @@ @1 FE FF FF 88 @1 @1 68 1E @1 90 10 @1 C129
a 6580: 66 16 61 86 19 81 08 16 61 7E 7F 7F 88 81 7E 7F 7F 88 G1 7E 7F 7F 08 @1 EBs
6598: 7E 7F 7F @6 81 81 G0 1E 01 6F FA 7A 81 SF BA 7F @1 6F 76 72 81 SF 7B 7E 8908
6586: 81 81 @@ 16 G1 SE 23 7C @1 3F F7 7D 1 77 08 @1 6A B1 33 SC 4C 81 B1 28 0898
$5C8: 16 1 7F F7 7F @1 7F EB 7F @1 7F FB 7F 01 7F FB 7F 81 81 00 1E G1 FE FF 1768
65E8: FF @8 @1 FE FF FF @@ 91 FE FF FF 0 01 FE FF FF 68 81 @1 08 16 01 06 10 4D1F
l SSF&: 1 8 14 G1 G8 18 81 96 1E @1 7E 7F 7F OG @1 7E 7F 7F 88 O1 7E 7F 7F 88 = AcBE
L 6610: 81 7E 7F 7F 66 @1 @1 86 16 G1 7F 7F 7F 81 7F 7F 7F O1 7F 7F 7F O1 7F 7F | (BOE
$628: 7F 61 @1 66 16 @1 7F EB 7F G1 7F 47 7F 01 7F E3 7F G1 7F 47 7F BI O1 08 93F
7 6640: 1E 61 SF AB 7F 61 7F 9E 7D @1 SF AB 7B @1 3F ED 7F @1 81 @@ 16 @1 OF 23 10C8
6658: 7F @1 7F 63 7F 61 7F 43 7F @1 7F 43 7F O81 G1 BB 16 O1 7F FF 7F O81 FF FF 347A
r 6670: 7F @1 7F FF 7F @1 61 6@ G2 @1 O1 08 1E 81 OG 10 1 86 146 81 GB 18 O1 00 B1DB
r 6688: 16 61 08 18 61 G8 1E 81 68 108 81 88 16 01 7F 7F 7F O1 7F 7F 7F @1 7F ZF 9469
h 66A@: 7F 81 7F 7F 7F @1 81 08 16 1 SF 22 7B 61 7F SB 7F 01 7F 63 7F G1 7F 43° = 2701
66B8: 7F @1 G1 66 1E 41 68 83 28 21 4A 18 82 84 B1 18 28 4A 08 83 G2 BI 2B 16 771F
6608: 61 7F 83 7F @1 1F AA 7C @1 3F 3C 7F O81 7F 78 7E 81 81 88 16 B1 7F FF 7F DB4F
66E8: 81 7F FF 7F @1 7F FF 7F @1 7F FF 7F 1 @1 06 1E 81 G8 10 @1 G8 16 @1 00 6643
6706: 18 81 G8 16 61 66 16 G1 88 1E 61 6F A2 7A O1 GF AS 7C B1 OF 63 76 OI IF 8e16
& TREMPLIN MICRO W
Bo
6718: 22 7D @1 81 @@ 16 @1 SE 2F 7D 61 3F FB 7A @1 77 FD 63 81 3B 6C 2E @1 81 FE27
6730: @@ 16 01 7F E3 7F 61 7F E3 7F O1 7F ES 7F O1 7F E3 7F O1 81 BO IE O1 7F 453€
6748: FF 7F @1 7F FF 7F @1 7F FF 7F 01 7F FF 7F @1 @1 68 16 @1 FE FF FF 90 @1 C28E
6760: FE FF FF 00 61 FE FF FF 6G @1 FE FF FF 6@ 1 81 @@ 16 @1 08 10 61 68 1E 0-86 9F
6778: 81 68 18 @1 G8 16 81 7C 7F 7F 88 @1 7E 7F 7F BO 81 7E 7F 7F OB B1 7E 7F 1198
6790: 7F 6G 81 @1 88 16 G1 7F 7F 7F G1 7F 7F 7F O1 7F 7F 7F @1 7F 7F 7F @1 01 bai
6748: 08 1E 61 SF AB 79 @1 7F 9E 7C @1 1F B7 7C O1 3F ED 7F G1 B81 68 16 81 SF FAL
67CO: 2A 7F 61 7F SB 7F @1 7F 7B 7F @1 7F 7B 7F @1 @1 G8 16 81 7F EF 7F 81 FF PDFD
6708: E3 7F G1 7F FF 7F @1 1D 75 GE @1 @1 88 1E 81 G6 16 B1 86 16 G1 4B 16 B1 ‘S58
67FG: 68 16 81 88 10 @1 G@ 1E G1 86 10 1 BG 16 O1 7E 7F 7F BG O1 7E 7F 7F BB SDsu
6808: @1 7E 7F 7F @@ @1 7E 7F 7F G@ @1 81 8G 16 B1 7F 7F 7F G1 7F 7F 7F O1 7F = GBEE
6820: 7F 7F 61 7F 7F 7F @1 G1 @@ 1E 41 08 G3 20 4A 79 1E G2 88 B1 38 GF 7B BB = FP He
46838: 63 82 61 80 16 G1 7F DS 7F @1 SF AB 7F G1 3F 3B 7F 81 7F 36 7C 81 81 OB SHE
6850: 16 @1 7F FF 7F 81 7F ES 7F @1 7F ES 7F @1 7F E3 7F G1 81 G8 1E 81 8 16 = = PEED
6868: G1 86 46 @1 GO 18 G1 8G 16 @1 BB 10 B1 OB IE G1 7F 7F 7F G1 7F 7F 7F BL 616C
6886: 7F 7F 7F @1 7F 7F 7F O1 81 G8 146 B1 1E 22 7B @1 IF FA 7A 1 6B FB OF a1 BC3A
4898: 23 6D 28 81 81 80 16 @1 7F F7 7F O1 7F EF 7F G1 7F EF 7F @1 7F EB 7F 81 4F8D
6880: 61 8G 1E @1 OF AD 7C @1 IF E2 78 1 1F AZ 7C O1 2F F7 78 O1 01 08 16 @1 40c8
68C8: 7F FF 7F @1 7F FF 7F @1 7F FF 7F @1 7F FF 7F G1 @1 08 16 61 FE FF FF 66 8 ceec
68E0: 61 FE FF FF @@ @1 FE FF FF 0 1 FE FF FF G8 @1 61 00 1E 01 88 10 61 68 964529
48F8; 16 81 @8 18 81 88 16 81 7E 7F 7F G8 @1 7E 7F 7F 88 1 7E 7F 7F 08 61 7E = =1934
6910: 7F 7F 06 @1 @1 88 1E 81 SF AB 7B @1 7F DE 7C @1 SF AB 7F 81 3F D4 7F @1 = AgIC
6928: @1 86 16 1 OF 28 7F 81 7F SB 7F O1 7F 63 7F @1 7F 63 7F G1 B1 BO 16 B1 5668
6940: 7F EF 7F 01 FF EB 7F @1 7F FF 7F 01 15 25 04 O1 @1 8@ 1E @1 7E 7F 7F 0@ 862431
4958: @1 FE FF 7F 08 @1 FE FF FF 00 61 FE FF FF 08 1 @1 88 16 81 08 18 @1 08 24A1
6970: 16 01 68 10 81 G@ 1E @1 7E 7F 7F 7F 7F 7F 7F 7F 7F 7F 7F 7F 7F ?F 7F 0@ = =672B7
6988: 61 61 86 16 G1 G8 10 1 OG 16 O1 7E 7F 7F OB B1 7E 7F 7F OB BI 7E 7F 7F = 7487
6900: G8 G1 7E 7F 7F @@ G1 G1 GG 1E 41 88 BF 82 81 BB 16 B1 7F D7 7F Ot SF A3 SDDF
6988: 7C 81 3F 3C 7F @1 7F 78 7E @1 @1 68 16 O1 7F FF 7F @1 7F EF 7F @1 7F EB CFSC
6908: 7F 61 7F EB 7F Oi @1 G@ 1E 01 7E FF FF @@ 01 FE FF FF @@ 01 FE FF FF 08 64808
49E8: 81 FE FF FF @@ G1 G1 88 16 81 6@ 16 G1 OG 16 81 BB 18 G1 BB IE BI 7C 7F 465069
4000: 7F 68 O1 7E 7F 7F G8 @1 7E 7F 7F By vu: 7F 7F 7F G8 G1 O1 86 16 A 7E 7F =F 208C
6A18: 7F @1 7F 7F 7F @1 7F 7F 47 81 7F 7F 7F G1 81 88 16 G1 7F FF 7F O1 7F EF F366
1EED
3018
2084
5809
9766
Fada
Fas7
146C
0398
FBS2
3528
C999
B78A
2567
368C
78D1
SAI!
1603
616€
A3C3
5533
739D
1B89
Avia
12 GUY-HACHETTE
4
¥
© TRES SIMPLE ! ....
MAIS CA SE COMPLIQUE...
Je dois dire que ¢a se passe plutét bien, & part quelques menaces de mort de la part de per-
sonnes que je croyais mes amis et un autodafé de TREMPLIN MICRO dans les universités, le
dernier article de" € trés simple" a été si bien accueilli que je vous entraine une fois de
plus sur les chemins étroits et caillouteux de la connaissance pure.
Les variables que nous avons rencontrées jusqu’d présent étaient des objets élémentaires
et isolés, or le plus inculte des Basicois de basse souche vous dira que pour travailler effica-
cement il a besoin de regrouper de temps en temps ces variables discrétes sous forme de
listes ou de matrices qu'il va nommer "TABLEAU" et déclarer celles-ci par I'instruction DIM.
Le méme sous-Basicois aimerait bien pouvoir organiser ses données d'une maniére un peu
plus fine que ne le permet son langage préféré : par exemple regrouper sous une méme
variable, un nom, un prénom, une adresse, un dge, autrement dit des objets qui, bien
qu'ayant un lien commun sont de TYPES différents ou encore créer une variable qui puisse
contenir 4 différents moments des objets de types et de tailles différents.
Mais avec Basic, comme le dit la publicité SNCF, ce n’est pas possible...
ALLELUIA ! le langage € peut le faire, et bien d'autres choses encore, allez, je suis gentil,
commencons par les choses simples.
LES TABLEAUX
Pas de malaise, dans son aspect extérieur, rien Ecrire liste°40§=10 par exemple conduirait 4
ne ressemble plus 4 un tableau en langage © | des catastrophes épouvantables... jaime
qu'un tableau en BASIC. Un tableau est defini mieux ne pas y penser.
en précisant entre crochets (pour |'APPLE fran-
gais entre °§) le nombre total d’éléments qu'il
doit pouvoir contenir.
C manipule des tableaux de n'importe quel
type (y compris des tableaux de tableaux) avec
une rare élégance. En effet, la notion de
Par exemple : int liste°40§; tableau en C€ est intimement liée 4 celle de
pointeur (voir le numéro précédent). L'identifi-
cateur de tableau (liste dans l'exemple ci-
dessus) est en fait un pointeur vers le premier
élément du tableau.
définit un tableau dont I'identificateur (le
nom) est liste et composé de 40 objets
entiers consécutifs nommés :
ee ee tas
liste°@§, liste°1§ .. - liste°39§ Je commence 4 voir de la fumée qui sort par
Remarquez que le premier élément du tableau les oreilles de quelques-uns et quelques-
est d'indice @, le dernier élément est donc unes... Peut-étre ne suis-je pas trés clair ?
d'indice NOMBRE D’ELEMENTS -1. OK je m'explique. (suite page 14)
sanunqunucuvanennuseusnnszenesoaezacsscosonsssesseanenvecsssuenssesounaeueuseneesuusecssueeussunssscen
TREMPLIN MICRO 13
Lorsque vous déclarez INT TRUC°2§
vous donnez & TRUC la valeur de l'adresse
mémoire ob votre compilateur a prévu de pla-
cer un tableau de deux entiers consécutifs.
Vous pourrez donc utiliser :
— soit la syntaxe "TABLEAU"
— soit la syntaxe “POINTEUR”
et écrire avec autant de bonheur :
TRUC°G@§ =4; ou *TRUC=4;
ou encore
TRUC°3§ = 10 équivalent 4 *(TRUC+3) =10
Les débutants en € utilisent le plus souvent la
syntaxe "TABLEAU" qu'ils abandonnent progres-
sivement au profit de la seule syntaxe "POIN-
TEUR ". Leurs programmes deviennent alors trés
beaux, trés rapides et totalement illisibles.
Un avantage des tableaux € sur les tableaux
"BASIC" c'est qu’'ils peuvent étre initialisés trés
facilement au moment de leur déclaration.
Alors qu’en Basic on utilise des ruses pas possi-
bles 4 base de DATA READ et autres joyeuse-
tés en forme d'itérations, il suffit en © de
faire suivre la déclaration de tableau par un
bloc contenant les valeurs d'initialisation pour
faire tout le travail :
float valeurs°3§ €2.718,3.14,98;
déclare un tableau de trois réels et initialise
leurs valeurs respectives a :
valeur°G§=2.718, valeur°1§=3.14, valeur°2§=9
de méme :
char chaine°10§ = "TOTO";
déclare un tableau de caractéres de 10 élé-
ments capable sans souffrance de recevoir la
chaine de caractéres "TOTO".
chaine°@§ ='T', chaine°1§ ='O' etc...
Nous y reviendrons puisque c'est la facon
dont € gére les chaines de caractéres.
Histoire de vous dérouiller les doigts, voici un
petit inspiré de ma course d'ordi-
cciouns te deenive nomdiin's
Afficher les nombres premiers entre 2 et 1000.
Je rappelle aux oublieux qu'un nombre pre-
mier est un nombre qui n'est divisible que par 1
ou par lui-méme.
Ualgorithme choisi est celui du crible d’Era-
thosténe vieux de plus de 2000 ans et remis au
godt du jour par |'informatique familiale.
On construit un tableau dont la valeur de cha-
que élément est soit 1, soit @ selon que |'indice
est premier ou non.
Remarquez que le tableau "crible” dont I'indice
sera au maximum 1000 doit étre déclaré de
1001.
(*——— EaTores —__——_*/
int crible°1001§; /*le lieu du crible !!!*/
main()
é
int i,k; /*compteurs d'itération*/
/* Assignons la valeur 1 4 tous les éléments du
tableau*/
for(i=2;i<=1000;i+ +) crible°i§ =1;
/*
Parcourons le tableau de 2 4 1000 en effec-
tuant la tache suivante : si I'élément d'indice i
est de valeur | c'est que i est premier, donc on
l'écrit et on élimine tous ses multiples en attri-
buant la valeur @ aux éléments du tableau
d'indices multiples de i
of
for (i=2;i<=1000;i+ +)
é
if (crible°i§)/*si=1
mier*/
: nombre pre-
é
printf("%dg¢n",i);/* On l'écrit*/
/*On élimine tous ses multiples*/
for (k isk <=1000;k=k+i)
crible°k§ =@;
é
é
é
Voila, ga ne sert pas 4 grand chose, mais
qu’est-ce que c'est beau ! Les plus courageux
pourront s'amuser 4 modifier le programme en
syntaxe “pointeur”, les plus laborieux cherche-
ront a l'écrire en Basic ou en Pascal, les plus
impatients se rallieront 4 mon panache blanc
afin qu'il les guide dans le dédale des abomi-
nables structures. (suite page 14)
4
GUY-HACHETTE
ae aon oe oer
—_*
—
——s
tah A A
s
4
-—o—4
alata
Les tableaux, c'est bien mais ce n'est pas tout
dans la vie. Il peut arriver que vous deviez
représenter un objet composite constitué de
grandeurs de méme type ou de types diffé-
rents : par exemple une date composée de
trois entiers (le jour, le mois, l'année) ou
encore le nom des mois de I’année (chaine)
associés 4 un nombre de jours (entier).
C permet de construire de tels agrégats 4
l'aide de la déclaration STRUCT (structure) :
struct date é
int jour;
int mois;
int année;
8;
Les Pascaliens reconnaitront sans peine un
type composé qui leur est cher : le type
RECORD ou article.
Les Basicois ne reconnaitront rien mais c'est
bien fait pour eux.
Comme je les aime bien, je vais tout de méme
préciser pour ces déshérités la triste vérité sui-
vante : ce que vous venez de fabriquer labo-
rieusement n’est pas une variable mais un
TYPE d’objet que vous utiliserez ensuite pour
déclarer une variable — éventuellement
initialisée.
Par exemple :
struct date anniversaire = 610.11.1987@;
date est un TYPE de structure, anniversaire (en
fait le mien, & bon entendeur...) est une
VARIABLE de type date.
On peut également déclarer directement une
variable structure en faisant suivre une décla-
ration de type structure par un nom de varia-
ble, c'est & mon avis moins clair quoique plus
rapide ainsi :
struct é
int jour;
int mois;
int année;
é anniversaire = 610,11,1987é;
est équivalent du point de vue fonctionnement
4 la déclaration “déclaration de type + décla-
ration de variable” vue précédemment.
Pour avoir accés 4 un élément d'une structure,
nous devons utiliser l'opérateur ".” (point).
Par exemple :
désigne |'élément jour de la structure anniversaire.
Vous I'avez sdrement déja compris, le pied,
c'est le tableau de structures : il combine
Vaccés facile & un élément par un indice
(tableaux) et la clarté descriptive des
structures :
struct date datesimportantes°2§
anniversaire. jour
é
10,10,1515,
14,7,1789,
10,11,1987
e
déclare un tableau de 3 structures ov, par
exemple, datesimportantes°@§.année est égal
1515.
Ceci n'est pas horriblement complexe. Malheu-
reusement, le pointeur fou a également frappé
les structures et il est tres courant de déclarer
un pointeur vers une structure :
si on déclare :
struct date *p;
p= &anniversaire;
on disposera des syntaxes :
(*p).jour ou encore p —> jour équivalentes a
date.jour
Pour |'instant, tout ceci doit vous laisser un peu
froids, mais n’oubliez pas que € est avant
tout un outil de manipulation de pointeurs :
en € quand on peut créer un pointeur vers
quelque chose, on est sauvé...
Essayez pour vous deéfouler le petit exemple ci-dessous :
struct homme
é
char nom °15§;
char prénom °15§;
int Gge;
é;
struct homme personne é"TOTO”, "JEAN", 18@;
struct homme *p;
main()
(suite page 16)
Tee ee Daal alata alata
TREMPLIN MICRO
15
printf("%scn%scn%d%d",homme.nom,homme.prénom, homme. age);
p=&personne;
printf("%scn%s¢n%d%d",(*p).nom,(*p).prénom, (*p).age);
printt("%s¢n%s¢n%d%d",p ->nom,p —> prénom,p —>age);
e
Vu de I'extérieur une union ressemble furieu-
sement 4 une structure ; la déclaration est trés
proche. La seule différence apparait dans le
mot “union” qui remplace le mot “struc”. Mais
attention, cett® ressemblance n'est qu’appa-
rente : une union est prévue pour contenir
séquentiellement des objets de types et de tail-
les différents, c'est-d-dire qu’ un instant
donné UN SEUL PEUT ETRE PRESENT en
mémoire.
On peut voir une union comme une structure
dont les différents champs commencent tous 4
la méme adresse mémoire.
union é
int i;
char c;
long |;
@ monunion;
La déclaration ci-dessus permet de créer une
variable nommée monunion qui pourra rece-
voir 4 un moment donné soit un entier, soit un
caractére, soit un réel.
monunion,i
monunion.c
monunion.|:
Ces trois lignes pourraient étre une assigna-
tion valable, mais si vous les écrivez dans un
programme, seule monuion.| sera significative
puisqu’elle aura "écrasé” monunion.c qui aura
elle-méme écrasé monunion.i.
Le type UNION permet de construire des struc-
tures 4 champ variable semblables au CASE du
RECORD Pascal avec plus de souplesse et plus
d'efficacité mais ¢a commence 4 devenir
difficile...
Le compilateur APPLE reconnait un autre type :
le type ENUM ou énumération dérivé directe-
ment du type énumération de PASCAL.
Son intérét principal est d’ailleurs de permettre
une traduction aisée de PASCAL en € . On
peut déclarer des types du genre :
enum Boissons éCocaCola,Perrier,Orangina,
SevenUpé;
l'utilisation de ce type rend les programmes
intransportables sur I.B.M. ou VAX. Je ne vous
parlerai donc pas aujourd'hui de cette
horreur...
1° La prochaine fois, © sera vraiment trés
simple.
2° Pour aujourd'hui, pardonnez-moi vos maux
de téte, mais il fallait en passer par 1a.
3° La sécurité sociale ne remboursant pas
l'aspirine, je ne me sens pas impliqué dans
son déficit.
4° Les sociétés CocaCola, Perrier, Orangina,
etc. peuvent faire parvenir leurs chéques
au journal qui transmettra.
5° Mon anniversaire est bien le 10 Novembre.
6° A bientét... Claude AUBRY
Si vous écrivez @ Claude Aubry, n‘oubliez pas de joindre une enveloppe timbrée pour la réponse. Merci !
16
GUY-HACHETTE
‘
SUR LES TABLES DEFORMES (SHAPES) s..nscerc
A plusieurs reprises, Tremplin Micro a publié des tables de formes, mais sans en rappeler
la structure. Je vais essayer de combler cette lacune. Rappelons qu'une forme est un
ensemble codé de vecteurs de déplacement :
— certains dits actifs parce qu’ils affichent un point lumineux 4 leur position de départ,
— d'autres, passifs, n‘affichent rien.
Soit @ définir, par exemple, le caractére qui me G0 110 G00 $30 11 011 G11 $DB
sert parfois de signature, 4 savoir : 00 110 110 $36 OO G11 G11 $B
* | * | | * Nous allons balayer ce carac- 00 110 110 $36 00 G01 101 $0D
se ¥ tére de deux facons, afin de G9 110 110 $36 96 901 101 $0D
montrer quill n'y a pos une | 91 901 G01 $49 | 11 O10 101 $D5
* * * |. solution unique et surtout, de G0 111 GG $38 11 G11 G11 $DB
* mettre en évidence 'inci- GO 111 GOO $38 G9 101 101 $2D
* + * * dence du mode retenu lorsque G0 111 GO0 $38 11010 101 $D5
».** .. lon emploie la possibilité 90 G01 G00 $08 10 101 O11 $AB
to * offerte par APPLESOFT pour 00 001 G00 $08 99 101 G11 $28
“_ * * dessiner une forme en diffé- 90 001 G00 $08 11 G10 101 $D5
* * rentes tailles grace 4 SCALE. 10 111 G00 $B8 G1 101 G11 $6B
00 G10 111 $17 11 010 101 $D5
ny pees 00 GG0 111 $07 | 00 G11 G11 $iB
terminateur $00 01 G01 101 $4D
fi 06 00 101 $05
att terminateur $00
Vous avez sans doute remarqué que chaque
= octet est divisé en 3 groupes. Les deux de droite,
competion 3 bits, peuvent bse mimperie
a quel type de vecteur. Le groupe de gauche, ne
seat, comportant que 2 bits, est d'usage réduit (cer-
tains éditeurs de formes ne |'utilisent jamais).
hs On ne peut en fait y ranger que trois vecteurs,
tous de type passif : vers la droite, le bas ou la
Ce qui se traduit aprés codage par : gauche.
00 010 101 $15 01 G01 101 $4D Une définition de forme se terminant par un 6,
00 010 101 $15 | 01 G01 101 $4D il n'est pas possible de coder deux déplacements
00 100 101 $25 11 010 101 $D5 passifs consécutifs vers le haut. (suite page 18)
TREMPLIN MICRO
7
De méme, si les 5 bits de gauche sont 4 @, aucun
déplacement n’est généré. C'est pour cela que,
dans le balayage 1, le vecteur central du 3° octet
a 6té codé actif, ce qui ne paraissait pas indis-
pensable au premier abord.
Maintenant que nous avons deux définitions de
formes, il nous faut les insérer dans une TABLE
DE FORMES exploitable par Applesoft.
Une telle table est constituée par une succession
de définitions de formes, terminées chacune par
un octet nul. En téte de cet ensemble, on place
un répertoir des formes qui permet d’accéder
aux formes elles-mémes.
Le premier octet de ce répertoire contient le
nombre de formes de la table (1 4 255), le second
octet inemployé est mis 4 zéro. Ensuite, on place
des pointeurs de deux octets contenant le déca-
lage (offset) entre l'octet 0 de la table et le pre-
mier octet de la forme correspondante. Il est
prudent de prévoir quelques pointeurs vides qui
permettront d'ajouter aisément quelques formes
complémentaires en case de besoin.
Avec les exemples ci-dessus la table va avoir la composition suivante :
$300
nbre formes 02 00
pointeurl 08 O¢
pointeur2 1A 00
pointeur vide 00 00
formel 15 15 25 30 36 36
forme2
BSAVE YK2,A$300,L$2E
Le petit programme Basic joint permet d’afficher
les deux formes dans trois tailles, ce qui montre
que si en taille 1 l'aspect est le méme, tout
change avec scale 2 ou 3.
Je mets aussi en évidence |'utilisation des swit-
ches, peu connus, qui permettent de basculer
MONOCHROME «——» COULEUR.
36 49 38 38 38 08 08 G8 B8 17 07 OG
4D 4D D5 DB 1B OD OD D5 DB 2D D5 AB 2B D5 6B D5 1B 4D 05 G0
Manvel de référence APPLESOFT ....
Manvel de l'utilisateur APPLE Il. .
Création de tables de formes ........
Fusion de tables de formes
Un éditeur de formes
Documentation de tables de formes.
DESIGNER/ILLUSTRATOR ..
ANLO08F
Poole. McNiff.Cook Editions Rodio
D.Compére POM's 4
D.Sureav POM’ 9
T.leTollec — POM's 12
E.Ringot —POM's 13
deux programmes remarquables édites
por NIBBLE ou prix de $29.95
10
20
30
4G
50
60
65
70
80
90
100
116
120
200
PRINT CHR$(4) “BLOAD YK2”: POKE 232,0: POKE 233,3
TEXT : PRINT CHR$(21): HCOLOR =3: ROT=@
HGR
SCALE = 1: DRAW 1 AT 89,10: DRAW 2 AT 189,10
SCALE = 2: DRAW 1 AT 86,30: DRAW 2 AT 186,30
SCALE =3: DRAW 1 AT 83,60: DRAW 2 AT 183,60
SCALE = 4: DRAW 1 AT 80,100: DRAW 2 AT 180,100
FOR J=1TO10
POKE 49246,0: GOSUB 206: REM monochrome
POKE 49247,0: GOSUB 200: REM couleur
NEXT
POKE 49246,0: REM monochrome
END
FOR! = 1 TO 1000: NEXT : RETURN .
GUY-HACHETTE
PU NITATION _ EECCanE ARGOS
DATA-SUITE
Voici un moyen simple et rapide pour afficher les données en DATA sans pas-
ser par une boucle en Basic. Attention ! comme il s‘agit réellement d'une rou-
tine élémentaire, il faut absolument initialiser le systeme 4 partir du Basic par
une instruction similaire 4 celle de la ligne 20 (READ R$). La premiére donnée
est bidon (ici : 0).
10 TEXT : HOME : PRINT CHR$ (4)""BLOAD DS.LM”
20 READ R$
30 CALL 768: PRINT
40 VTAB 22: PRINT “PRESSER (M) POUR MENU DE DISQUETTE ";: GET R$: PRINT
50 IF R$ = "M" ORR$ = "m” THEN PRINT CHR$ (4)”RUN MENU”
60 HOME: END
76 DATA G,JANVIER,FEVRIER, MARS, AVRIL,MAI, JUIN, JUILLET, AOUT, SEPTEMBRE,
OCTOBRE, NOVEMBRE, DECEMBRE
300: Ad GO LDY £$00 Y 4G pour adressage indirect.
: 7 -
ec. te BNE gouge | Apres READ RS, $7F-80 contient l'adresse ot
306 : £6 80 INC $80 | se trouve la virgule suivant le @.
308: Bl 7F LDA ($7F),Y Lecture du caractére.
30A: FO 10 BEQ $031C Si c'est un zéro, lecture épuisée.
30C : cy 2c CMP £$2C Si c'est une virgule,
30E: DO G5 BNE $0315 | hariot. Si ffiche | ta
310: 26 62 FC JSR $FC62 _| “etour chariot. Sinon on affiche le caractére.
313: 80 EB BRA $0300 Retour.
315: 09 8@ ORA £$80 i . is
317: 20 ED FD ISR Con Bit 7 i" 1. Affichage et en place pour une
31A: 80 E4 BRA $0300 |, Suire.tecture:
31C: 60 RTS Retour au Basic.
Vous avez bien sir remarqué que ce micro-programme n’‘autorise pas l’affichage de plu-
sieurs lignes de DATA. La raison est évidente : on se contente ici de court-circuiter le Basic.
Vous en aurez la preuve en ajoutant une ligne 35 : 35 READ R$ : PRINT R$
Que croyez-vous qu’elle affichera ? .
TREMPLIN MICRO sd
[TANGAGE MACHINE | ARGOS
DA ' D: 1 Méme principe que DATA.SUITE, mais le pro-
gramme affiche l’adresse décimale de chaque
Ses
donnée et traite toutes les lignes de DATA !
INITIATI
10. TEXT: HOME : PRINT CHR$ (4)"BLOAD DS.LM1" 7G. DATA JANVIER,FEVRIER, MARS, AVRIL, MAI, JUIN,
20 DATA PREMIERE LIGNE JUILLET, AOUT SEPTEMBRE, OCTOBRE, NOVEMBRE,
oo eet 75 te reane LIGNE 75
40. VTAB 22: PRINT "PRESSER (M) POUR MENU DE Se hace
DISQUETTE ".: GET RS: PRINT
a EE = 50 chs “oP Hei eo 85 DATA TROISIEME SUITE LIGNE 85
(4)’RUN MENU" 90. PRINT: REM LIGNE BIDON
60 HOME: END 95. DATAET ON TERMINE LIGNE 95
300: AS 67 LDA $67 32E: 80 £9 BRA $0319
302: 85 7F STA $7F 330: 48 PHA
304: AS 68 LDA $68 331: A9 8D LDA £$8D
306: 85 80 STA $80 333: 20 ED FD JSR $FDED
308: 8d 31 BRA $033B 336: 68 PLA
30A: A4 80 LDY $80 337: C9 2C CMP £$2C
30C: A6 7F LDX $7F 339: FO CF BEQ $030A
30E: £8 INX 338: £6 7F INC $7F
30F: Dd @1 BNE $0312 33D: D0 G2 BNE $0341
311: CB INY 33F: £6 80 INC $80
312: 98 TYA 341: AQ OO LDY £$00
313: 20 24 ED JSR $eD24 | 343: 81 7F LDA ($7F),Y
316: 20 48 F9 JSR $F4B | 345: FO 6 BEQ $034D
319: Ad Go uy $00 | 347: C9 89 CMP £$83
31B: €& 7F INC $7F 349: FO BF BEQ $030A
31D: Dd G2 BNE $0321 348: DO EE BNE $033B
31F: £6 80 INC $80 34D: AS 80 LDA $80
321: Bl 7F LDA ($7F),Y 34F: C5 6A CMP $6A
323: FO OB BEQ $0330 351: 90 &8 BCC $033B
325: 9 2C CMP £$2C 353: AS 7F LDA $7F
327: FO G7 BEQ $0330 355: C5 69 CMP. $69
329: 09 80 ORA £$80 357: 90 £2 BCC $033B
328: 20 ED FD JSR $FDED 359: 60 RTS “
iecssosilesecnlcslchcielhaaeeeglieanihieiiadccecmeieaaateaiagaiada
20 GUY-HACHETTE
Marcel COTTINI
Les vecteurs dinterruptions
LES INTERRUPTIONS POSSIBLES
NMI = Non Maskable Interrupt : ce sont les
interruptions non masquables.
RESET Monitor Interrupt : ce type d'interruption
renvoie le systeme dans le Monitor. Elle
est gérée a partir de l'adresse $FA62.
IRQ Interrupt Request : ce sont les interruptions |
masquables, dont le BReak fait partie. |
Pour chaque signal d'interruption, il existe une ligne
particuliére d’accés au processeur : si le signal véhi-
culé est 4 un niveau bas (0), le processeur recoit une
demande d'interruption ; par contre, si le signal est a
un niveau haut (1), rien ne se passe.
Adresses d'interruptions :
$FFFA-SFFFB pour une interruption NMI JMP ($FFFA)
SFFFC-$FFFD pour une interruption RESET JMP ($FFFC)
SFFFE-SFFFF pour une interruption IRQ JMP (SFFFE)
Processus d'une interruption type :
— L'interruption en cours est menée a terme ;
— Voctet de poids fort du compteur ordinal est
empilé — PCH ;
— octet de poids faible du compteur ordinal
est empilé — PCL ;
— Le contenu du registre d'état PS est empilé ;
— Le bit 2, inhibition des interruptions, est mis a1 ;
— Exécution de l'instruction qui se trouve a
V'adresse $FFFE de la ROM Monitor, ou saut
indirect 4 l'adresse contenue dans les octets
SFFFF-$FFFE.
NMI INTERRUPT
ROM Monitor commutée :
La ROM du Monitor, adresses $FFFA-$FFFF, contient le
pointeur du vecteur d’appel pour gérer la demande
d'interruption adressée au" microprocesseur. Le pre-
mier pointeur 16 bits contenu dans $FFFA-SFFFB est
réservé aux interruptions du type NMI. Pour un Apple
Ile ou IIc, les adresses $FFFA-SFFFB contiennent : FB
03 = $03FB. Lors du boot d'une disquette ProDOS,
l'adresse $03FB contient l'adresse de saut au Monitor.
Vecteur du NMI
Q3FB-— 4C 59 FF JMP $FF59
FF59— 20 84 FE JSR $FE84 SETNORM. Mode normal
FFSC— 20 2F FB JSR $FB2F INIT. Mode texte
FF5SF- 20 93 FE JSR $FE93 SETVID. Mode PREG
FF62- 20 89 FE JSR $FE89 SETKBD. Mode IN£0
FF65- D8 CLD
FF66- 20 3A FF JSR $FF3A_ BELL. Sonnette
Aprés |'exécution de la routine implantée 4 partir de
l'adresse $FF59, le systéme effectue un saut dans le
Monitor, et affiche l'astérisque (*) comme prompt.
Carte langage commutée :
La copie de |'adresse $03FB se trouve dans la carte
langage, aux adresses $FFFA-SFFFB (FB 03 = $03FB)
pour étre utilisée par le MLI lorsqu'une interruption
NMI intervient. Comme la carte langage n'est pas pro-
tégée en lecture lors d'une interruption du type NMI
IRQ ou RESET, le processeur se branche 4 $03FB, puis
effectue un saut a $FF59 et exécute le sous-
programme. Si le pseudo disque (RAMDisk) est utilisé
avec la carte auxiliaire 64 Ko ou avec un Apple IIc,
une interruption NMI plante le systéme et renvoie
l'utilisateur dans le Monitor (Prompt = *). L'instruc-
tion CALL 976 (3D0G) reconnecte le Basic System en
effectuant un démarrage 4 chaud, tandis que CALL
39447 appelle la routine Connect qui se trouve a
l'adresse $9A17. (suite page 22)
allele aaa aa ae aaa
TREMPLIN MICRO
21
AUSRAseE REA SAee se eCaneaEEaTseseeREEeENeORAsA BOER EOENASCE ERE CeoseDERBeRsS Ress EOSTeEEEESEeENSeRAsseEAesE
RESET INTERRUPT
ROM-Monitor commutée :
Le point d'entrée de RESET se trouve l'adresse $FA62. La copie de cette adresse se trouve au vecteur $FFFC-
$FFFD ($FFFC- 62 FA) de la ROM Monitor.
RESET avec une ROM autostart (Apple Ile)
'
i]
o
FA62 Annulation du mode décimal.
FAG3 - 20 84 FE JSR $FE84 SETNORM. Mode normal.
FA66 - 20 2F FB JSR $FB2F INIT. Mode texte.
FAG? - 20 93 FE JSR SFE93 SETKBD. Mode IN£@.
FA6C- 20 89 FE JSR $FE89 SETVID. Mode PREG.
FAGF - AD 58 CO LDA $C058 Annonciateur @ 4 1 — Read.
FA72 - AD 5A CO LDA $C05A_ = Annonciateur @ 4 1 — Write.
FA75 LDY £805 Initialise le registre Y 4 la valeur £$05.
FA77 JSR SFBB4 Gestion du curseur — avance 5 positions.
FA7B -— AD FF CF LDA SCFFF CLRROM Désactive les sous-programmes placés entre $C800 4
SCFFF.
FA7E- 2C 10 CO BIT $cald KBDSTRB. Echantillonnage du clavier.
FA81 — D8 CLD
FA82 - 20 3A FF JSR S$FF3A BELL Sonnette.
FA85 - AD F3 03 LDA $03F3 RESET-Handler. Charge le pointeur HByte.
14
~
se
22
2a
nm
oS
FA88 - 49 AS EOR £$A5 PRWRUP Byte.
FA8A- CD F4 03 CMP $03F4
FA8D- DO 17 BNE $FAA6 Démarrage a froid. Reboote le systéme.
FASF - AD F2 03 LDA $03F2 RESET-Handler. Charge le pointeur LByte.
FA92 - DO OF BNE $FAA3 Si différent de @, démarrage 4 chaud.
FA94 — AD EO LDA £$E0
FA% - CD F3 03 CMP $03F3 Est-ce le vecteur Basic ? — $E000.
FA99 - DO 08 BNE $FAA3 Non, démarrage 4 chaud.
FAIB- AQ 03 LDY £$03 Fixe RESET sur le vecteur Basic 4 froid.
FAID- 8C F2 03 STY $03F2 Démarrage en $E003 — Basic 4 chaud.
FAAQ— 4C 00 EO IMP $EQ0G Basic 4 froid — Coldstart.
FAA3- 6C F2 03 JMP ($03F2) Warmstart. Saut au Handler.
FAA6- 20 60 FB JSR $FB60 Coldstart. Entrée du démarrage 4 froid.
RESET-Handler. Entry Moniteur (RESET = $FA62)
FFCB —- AD D7 FF LDA SFFD7 = Charge le pointeur HByte,
FFCE - 48 PHA et l'empile.
FFCF - AD D6 FF LDA $FFD6 Charge le pointeur LByte,
FFD2 - 48 PHA et I'empile. Adresse de retour — $FA61 —.
FFD3 - 4C C8 FF IMP $FFC8 Commute la ROM moniteur.
FFD6 - 61 FA Pointeur $FA61 — 61 FA—.
Processus : A |’adresse $FFCB du Monitor se trouve un RTS (code 60). Conséquence : le pointeur contenu
~~ aux adresses $FFD6-$FFD7 sera utilisé par le processeur pour effectuer un retour 4 l’adresse
$FA62. L'adresse de retour dépilée aprés une instruction RTS, sera augmentée de 1: $FA6] + £$01 = $FA62.
C'est une caractéristique propre aux microprocesseurs 6502 et 65C02.
22 GUY-HACHETTE
IRQ INTERRUPT
Cette interruption n'est autorisée par le microprocesseur, que si le bit d'inhibition, bit 2 du registre d'état PS,
est 4 zéro. Cette situation est provoquée par I'instruction CLI du processeur.
IRQ Interrupt pour un Apple lle
FAQ - 85 45 STA $45 Sauvegarde de I’accumulateur.
FAd2 - 68 PLA Dépile le registre d’état PS.
FAa3 - GA ASL Bit 4 positionné 4 1, si IRQ est transmis par une instruction
FAs4 - OA ASL BReak — 60 —.
FA4d7 - 30 03 BMI $FASC —_ BReaK avec affichage des registres.
FA49 - 6C FE 03 JMP ($Q3FE) Adresse IRQ-Handler.
ProDOS positionne IRQ-Handler 4 la valeur $BFEB
O3FE - EB LByte du pointeur IRQ-Handler.
O3FF - BF HByte du pointeur IRQ-Handler.
BFEB - AD 8B CO LDA $C08B BankSelect. Bank 1 autorisation de lecture,
BFEE - AD 8B CO LDA $C08B + écriture.
BFFI - 4C 3A DI JMP $D13A IRQ-Handler 4 partir du MLI.
IRQ-HANDLER ENTRY (ML!)
DI3A- AS 45 LDA $45 Charge la valeur de l'adresse $45 dans l'accumulateur —
Registre A —.
DI3C- 8D 88 BF STA $BF88 INTAREG. Sauvegarde de l'accumulateur.
DI3F - 8E 89 BF STX $BF89 INTXREG. Sauvegarde de X dans la page globale.
D142 - 8C 8A BF STY $BF8A = INTYREG. Sauvegarde de Y dans la page globale.
0145 - BA TSX Copie du pointeur de pile dans X.
0146 - 8E 8B BF STX $BF8B INTSREG. Sauvegarde du pointeur de pile.
0149 - 68 PLA Dépile la valeur du registre d'état PS.
DI4A- 8D 8C BF STA $BF8C INTPREG. Sauvegarde du registre d'état PS.
DiMD- 68 PLA Dépile l’adresse de retour ; LByte.
DI4E- 8D 8E BF STA $BF8E INTADR. Sauvegarde de I'adresse de retour ; LByte.
DIS} - 68 PLA Dépile l'adresse de retour ; HByte.
0152 - 8D 8F BF STA $BF8F Sauvegarde de l'adresse de retour ; HByte.
DISS - 9A TXS Positionne le pointeur de pile.
D156 - AD F8 07 LDA $07F8 MSLOT. Numéro de I'interface ; HByte.
DI59 - 8D C4 DI STA $DIC4 Sauvegarde du numéro de I'interface.
DISC- BA TSX
DISD- 30 09 BMI $0168 Saut, si le pointeur de pile > £$7F, sinon,
DISF - AQ OF LDY £$0F initialise le registre Y 4 la valeur 16,
DI6l - 68 PLA et dépile 16 valeurs.
Dil62- 99 AF FO STA S$FGAF,Y Sauvegarde des valeurs dépilées.
DI65 - 88 DEY Décrémente Y d'une unité,
D166 - 10 F9 BPL $D161 et continue 4 dépiler.
DI68 - A2 FA LDX £SFA
DI6A- BS 00 LDA $00,x Sauvegarde des valeurs de la page zéro, (suite page 24)
AAgRERee Leer seUTEN ET NLE SEED DeCEEse Ho eeHNNUeROONARaeeweTEseeeE TEs see eos eee EES se eeeeeeeeeeeEsEeREs
TREMPLIN MICRO aa
DI6C- 9D
DI6F - £8
DI70- D0
D172 - AD
DI75 - FO
DI7 - 20
DITA- 90
DI7C- AD
DI7F - FO
Dil - 20
Digs - 90
D186 - AD
pig9 - FO
DI8B- 20
DI8E- 90
D199 - AD
D193 - FO
DIS - 20
D198 - 90
DIIA- Ad
DIC - 20
DI9F- A2
DIAI- BD
DIAS- 95
DIA6- £8
DIA7— 00
DIA9- AE
DIAC- 30
DIAE- AQ
DiBg- 89
DiB3 - 48
DIB4 — CB
DiBs - CO
Di87 - D0
AS EF
Fa
a1
oc
FA
00
F8
0B
00
BF
01
BF
DI
BF
D1
BF
01
BF
EF
BF
Fo
STA
INX
BNE
LDA
BEQ
JSR
BCC
LDA
BEQ
ISR
BCC
LDA
BEQ
JSR
BCC
LDA
BEQ
JSR
BCC
LDA
JSR
LDX
LDA
STA
INX
BNE
LDX
BMI
LDY
LDA
PHA
INY
cPY
BNE
$EFAS,X
$D16A
$BF81
$D17C
$DICE
$D19F
$BF83
$0186
$D1D1
$DI9F
SBF85
$0190
$01D4
$D19F
$BF87
$DI9A
$0107
$DI9F
$£$01
$BFOC
£SFA
SEFAS,X
$00,x
SDIAI
S$BF8B
$D1D9
£$00
SFOAF,Y
£$10
$D1B0
de £$FA a £$FF.
Incrémente la registre X,
et continue avec la prochaine valeur.
INTERRUPTS VECTORS
Interrupt 1 : charge HByte de l'adresse de saut,
adresse vide, charge le vecteur suivant.
Vecteur utilisé : appel du sous-programme.
Restaure la page zéro.
Interrupt 2 : charge HByte de l’adresse de saut,
adresse vide, charge le vecteur suivant.
Vecteur utilisé : appel du sous-programme.
Restaure la page zéro.
Interrupt 3 : charge HByte de l’adresse de saut,
adresse vide, charge le vecteur suivant.
Vecteur utilisé : appel du sous-programme.
Restaure la page zéro.
Interrupt 4 : charge HByte de l'adresse de saut,
adresse vide, charge le vecteur suivant.
Vecteur utilisé : appel du sous-programme.
Restaure la page zéro.
ERROR HANDLER
Aucun des pointeurs n'est en place dans la page globale de
PRODOS, aux adresses $BF80-$BF87.
Charge I’accumulateur avec la valeur £$61 qui sera utilisée
comme drapeau — Flag — pour le code d’erreur.
SYSTDEATH. Appel de la routine d'erreur : contient normale-
ment un saut 4 $D1E6.
Restaure la page zéro
Initialise le registre X comme compteur.
Charge les valeurs des adresses indexées,
et les sauvegarde dans la page zéro.
Incrémente de 1 le registre X,
et continue la sauvegarde.
INTSREG. Charge le pointeur de pile,
y a-t-il assez de place ? oui
sinon, empile les valeurs sauvegardées
au préalable : voir 4 partir de $D161.
Charge les valeurs des adresses indexées,
et les empile.
Incrémente de | le registre Y,
et compare si les 16 valeurs ont été sauvegardées.
Continue d'empiler.
nee Denesoensesewe sens eneeeses sess ses cenEee ne sessaeeseeeeoveEesEEsDesesASsssREREseaToeeNesesseseeaceee
24
GUY-HACHETTE
DIB? - AC 8A BF LDY $BF8A = INTYREG. Charge la valeur du registre Y.
DIBC - AE 89 BF LDX $BF89 INTXREG. Charge la valeur du registre X.
DIBF - AD FF CF LDA $CFFF CLRROM. Déconnecte les sous-programmes des ROM, entre
$C8G0-$CFFF.
DIC2- AD 90 Cl LDA $C1QG. — REACTIV CARD. Charge le numéro du périphérique
DIC5 - AD C4 DI LDA $DIC4 HByte — $D1C4 de l'adresse $D159 —
DIC8 - 8D F8 07 STA $07F8 et restaure MSLOT — $07F8 —.
DICB- 4C DO BF JMP $BFDG —_—INTEXIT. Sortie de la routine via la "globale page” de PRODOS.
Appel des sous-programmes, suite 4 une interruption :
Ces sous-programmes sont uniquement sollicités par un "JSR" & partir des adresses $D177 ; $D181 ; $D18B et $D195.
DICE- 6C 80 BF JMP ($BF80) Exécution de la routine Interrupt 1
DIDI- 6C 82 BF JMP ($BF82) Exécution de la routine Interrupt 2
DID4- 6C 84 BF JMP ($BF84) — Exécution de la routine Interrupt 3
DID7- 6C 86 BF JMP ($BF86) Exécution de la routine Interrupt 4
SET SYSERR Entrée par un JMP venant de l’adresse $BFG9.
DIDA- 8D OF BF STA $BFOF Sauvegarde du code d’erreur.
DIDD- 68 PLA Dépile l'adresse de retour ; LByte
DIDE- 68 PLA HByte.
DIDF- AD OF BF LDA $BFOF Charge le code de l'erreur
DIEZ - 38 SEC Utilisé comme indicateur de I'erreur.
DIES - 60 RTS Retour : normalement 4 $D078.
System DEATH Entry 2:
Uentrée du vecteur $D1E4 est appelée par la page globale de PRODOS, a savoir : REBOOT ($BF03) et SYSDEATH2 ($BFF6).
DIE4- AI OO LDA £800 Fixe la valeur £$00 au code d’erreur.
System DEATH Entry 1 :
Al'entrée de la routine, l'accumulateur contient le code d’erreur rencontré. L'appel vient de la page
globale de PRODOS, 4 partir de l'adresse $BFOC.
DIE6~ AA TAX Copie le code d'erreur dans X.
DIE7- 8D OC CO STA $COGC — Déconnecte la carte 80 colonnes — Ile et IIc.
DIEA- AD 51 CO LDA $C051 Place le systéme en mode texte,
DIED- AD 53 CO LDA $C053__—pleine page,
DIFO- AD 54 CO LDA $C054 — page I,
DIFZ - AD 56 CO LDA $C056 — et en basse résolution — LORES.
DIF6 - AQ 27 LDY £$27 Initialise le registre Y, comme compteur
DIFB- A9 AG LDA £$A0 et charge la valeur du nombre d’espaces.
DIFA- 99 50 07 STA $0750,Y Affiche al’écran le texte : INSERT SYSTEM DISK AND RESTART.
DIFD- B9 DE EF LDA $EFDE,Y Charge les caractéres stockés dans la carte langage,
0200- 99 DO 07 STA $07D0,Y continue l'affichage des caractéres 4 |'écran,
0203 - 88 DEY décrémente d'une unité le compteur Y,
D204 - 10 F2 BPL $DIF8 et continue I'affichage.
0206 - 8A TXA Recopie le code d’erreur dans A,
0207 - FO 30 BEQ $0239 _— si GG, le code ne sera pas affiché : -ERRxx.
0209 - A9 AD LDA £$AD Charge le code ASCII de "-",
020B- 8D Fl 07 STA $07F1 et l'affiche 4 |'écran.
D20E- Ad C5 LDA £$C5 Charge le code ASCII de "E", (suite page 26)
AOE Sa UO RONEN TONER RENN eSUNART AON asEUeNAN ARATE AER ANeN EEA N ERNE DR eUNER OLE eEEEOLEeeRTeRREEETETEET ENE
TREMPLIN MICRO 25
q
0210 -
0213 -
0215 -
0218 -
D21B -
D21C -
D21D -
D21E -
D2IF -
0220 -
0222 -
0224 -
0226 -
0228 -
D228 -
D22C -
D22E -
0230 -
0232 -
D234 -
0236 -
D239 -
F2 07
D2
F3 07
F4 07
BO
02
06
Fo 07
OF
BO
BA
02
F7 07
39 D2
STA
LDA
STA
STA
TXA
LSR
LSR
LSR
LSR
ORA
CMP
BCC
ADC
STA
TXA
AND
ORA
CMP
BCC
ADC
STA
JMP
$07F2
£$D2
$07F3
$O7F4
£$80
£$BA
$0228
£$06
$07F6
£S0F
£$B0
£$BA
$0236
$077
$0239
et l'affiche a I'écran.
Charge le code ASCII de "R",
et l'affiche deux fois 4 I’écran
——» R
» -ERR
Code vers l'accumulateur,
et décale les bits, 4 fois vers la droite,
ce qui équivaut 4 ne garder que les 4 bits
de poids fort.
Effectue un OU Inclusif avec £$BG (176),
et compare si le résultat est supérieur 4 9.
Pour les valeurs supérieures 4 9 ——» "A" - "F",
affiche la valeur correcte 4 |'écran.
Valeur des 4 bits de faible poids.
Correction pour les valeurs supérieures 4 9, et affichage du
résultat correct.
Attente d'un RESET, car le programme boucle sur lui-méme —
IMP $D239.
INTEXIT
Sortie de la routine de gestion d’interruption, lorsque ProDOS trouve un pointeur de sous-
programme aux adresses $BF80-$BF87.
BFDO -
BFD3 -
BFDS -
BFD7 -
BFD8 -
BFDA —
BFDD —
BFDF -
BFE2 -
BFE4 —
BFE7 -
BFEA —
IRQ-Handler Carte langage commutée :
AD
Fo
30
4A
90
AD
BO
AD
Ad
8D
AD
40
8D BF
oD
08
gD
82 CO
08
83 CO
01
8D BF
88 BF
LDA
BEQ
BMI
LSR
BCC
LDA
BCS
LDA
LDA
STA
LDA
RTI
$BF8D
SBFE2
S$BFOF
S$BFE7
$co82
$BFE7
$co83
£$01
$BF8D
$BF88
FFOB —
FOC —
FFIE —
FFAL -
FFA2 —
FFA4 -
FFAS —
FFA6 —
48
AS
8D
68
85
68
48
29
45
56 BF
45
PHA
LDA
STA
PLA
STA
PLA
PHA
AND
$45
$BF56
$45
£$10
INTBANK1. Charge le statut de la ROM.
£$00 = Bank 1 connectée : elle le reste.
£$FF = Bank 2 4 commuter.
Sans signification, valeur aléatoire.
£$01 = ROMON ; IRQ a partir du moniteur.
Sans signification, valeur aléatoire.
Commute la Bank 2 (protégée contre I'écriture).
itialise l'accumulateur 4 la valeur £$01,
et fixe le mode de la ROM — ROM ou Moniteur —.
Recharge la valeur de I'accumulateur 4 partir de INTAREG.
Retour de l'interruption.
Sauvegarde de l'accumulateur.
L'accumulateur contient le pointeur RWTB.
INTACC. Sauvegarde du pointeur dans la page globale de PRODOS.
Dépile vers A, la valeur initiale, contenue au moment de Iinterrup-
tion IRQ,
et la sauvegarde.
Sauvegarde du registre d'état PS.
Teste si IRQ provient d'un BReakK,
26
GUY-HACHETTE
FFA8 - DO 18 BNE $FFC2 oui, alors branche 4 Ia routine BReaK.
FFAA- AD 00 DO LDA $D990 —Sinon, teste quelle Bank est commutée.
FFAD- 49 D8 EOR £$D8 BANKID pour la Bank 1.
FFAF- FQ 02 BEQ $FFB3
FFB] - AQ FF LDA £$FF
FFB3 - 8D 8D BF STA $BF8D INBANK1. £$0 Bank 1, ou £$FF Bank 2,
FFB6 - 8D 57 BF STA $BF57 sauvegarde :
$BF56-$BF57
» $45 pour LByte
» £$00 ou £$FF pour HByte.
Pointeurs possibles :
HByte, LByte.
$FF, contenu de $45.
$00, contenu de $45.
FFB) - AQ BF LDA £$BF Charge le pointeur HByte ;
FFBB - 48 PHA et le place au sommet de la pile.
FFBC - A9 50 LDA £$50 Charge le pointeur LByte ;
FFBE - 48 PHA et le place au sommet de la pile. Fixe l'adresse $BF50 comme
adresse RTI.
FFBF - AQ 04 LDA £$04 Charge le drapeau du bit d'inhibition (bit 2) du registre d'état PS
— IRQ masqué —,
FECL - 48 PHA et le sauvegarde au sommet de Ia pile.
FFC2 - AQ FA LDA £$FA Charge le pointeur HByte,
FFC4 - 48 PHA et le sauvegarde au sommet de la pile.
FFCS - AQ 41 LDA £$41 Charge le pointeur LByte,
FFC7 — 48 PHA et le sauvegarde au sommet de la pile.
Moniteur BReoK, adresse de retour :
——» $FA41 + £$01 = $FA42 (a cause du RTS: + 1).
FFC8 - 8D 82 CO STA $C082_ROMON. Contient un RTS lorsque l'appel provient du moniteur.
LANGIRQ
Entrée de la routine, aprés une interruption IRQ appelée depuis la carte langage, et 4 la suite d'une ins-
truction RTI détectée a l'adresse $BFEA de la page globale de PRODOS.
BF50 - 8D 8B CO STA $C08B = BANKSELECT. Bank 1 : protégée contre I'écriture.
BF53 - 4C D8 FF JMP $FFD8 = Saut dans Ia carte langage.
LANGINTEXIT
Entrée de la carte langage : provient d'une routine sollicitée par une interruption IRQ, avec comme ori-
gine la page globale de PRODOS, aprés la sélection en lecture ; protégée contre |'écriture.
FFO8 - 8D 88 BF STA $BF88 Sauvegarde du registre Accumulateur.
FFDB - AD 56 BF LDA $BF56 INTACCU. Charge la valeur,
FFDE- 85 45 STA $45 et sauvegarde en A5H.
FFEQ - AD 8B CO LDA $CO8B BANKSELECT. Commute la Bank 1
FFE3 — AD 8B CO LDA $C08B + écriture autorisée.
FFE6 - AD 57 BF LDA $BF57 £$00 = Bank 1 ; £$FF = Bank 2.
Utilisé comme pointeur HByte.
FFE9 - 4C D3 BF JMP $BFD3 INTEXIT2. Déconnecte la Bank et actualise RTI. (suite page 28)
aaa ala aaa eee
TREMPLIN MICRO 27
IRQ Interrupt Langage carte commutée :
FFOB - 48 PHA Contenu de |'accumulateur, au moment de I'interruption IRQ.
FEC - AS 45 LDA $45 Charge ASH, qui contient le pointeur : Read - Write — Tracks —
Blocks — HByte —.
FFOE 8D 56 BF STA $BF56 Sauvegarde dans INTACCU — Page globale —.
FFAl — 68 PLA Dépile le contenu de |’accumulateur, au moment de I'interrup-
tion IRQ,
FFA2 - 85 45 STA $45 et le sauvegarde dans ASH. G
FFB3 — 8D 8D BF STA $BF8D INTBANK1
FFB6 - 8D 57 BF STA $BF57 INTBANK2
a See a zs ae On ne peut pas dire que la programmation de
f5. MATERIEL l'Apple //IGS soit d'une réelle simplicité. Bien sor,
si l'on se contente du bon vieil Applesoft, pas de
probléme, mais il en va autrement dés que le pro-
grammeur en herbe tente d’utiliser les nombreux
BOITE A OUTILS et merveilleux outils du GS.
/, Comme le précise Jean-Pierre Curcio dans |'intro-
DE L’'APPLE lcs duction de sa BO/TE A OUTILS DE L’APPLE IIGS, a
remarquable facilité qu’apporte |'interface utilisa-
teur est liée a des régles auxquelles doit impérati-
vement se plier le programmeur. Plus de facilité
pour l'utilisateur signifie en l'occurrence moins de
liberté pour le développeur.
Avec l'Apple //GS, on dispose d'une centaine de
sous-programmes performants... mais qu'il faut
apprendre 4 utiliser. On sait que la Toolbox de
l'Apple /IGS ressemble & celle du Macintosh...
mais ce n'est pas un avantage pour les incondition-
nels de l'Apple //.
Jean-Pierre Curcio apporte une trés importante
contribution 4 la programmation avancée sur
Apple /IGS. Chacun des chapitres de son ouvrage
présente un outil (ou manager) et les routines qui
le composent. Celles-ci sont illustrées par de petits
exemples en € (d’ou I'intérét de commencer ou de
poursuivre l’apprentissage de ce langage avec
5, Place du Colonel-Fabien 75491 PARIS Cédex 10 notre ami Claude Aubry).
Service Minitel : A noter qu'un exemple complet est proposé 4 la fin
Sur le 3615, toper Ol, puis PSI de chaque chapitre et qu'une disquette d’accompa-
: ; gnement peut étre obtenue auprés de l’auteur.
(344 pages — Reliure spirale). | NESTOR.
CL eee
28 GUY-HACHETTE
Vient de paraitre
AUTOMATISME ET
MICRO-ORDINATEURS
* AUTOMATISMES ET
MICRO-ORDINATEURS
(Michel Jacquelin)
Lo micro-intormatique va de plus en plus parti-
ciper 4 la gestion programmée des automates.
Cet ouvrage s‘adresse © l'utilisateur d'un
micro-ordinateur (AMSTRAD, MSX, 107-70...)
oyont déjd une certaine pratique de la pro-
grammation, connaissant les matériels éduca-
tits LEGO (et plus particuligrement les boites
techniques auxquelles sont généralement
Qssociés moteurs, capteurs et transmissions
mécaniques diverses), et désirant réoliser lui-
méme des automates ou jouets program-
mables. Il découvrira avec ce livre, comment
réaliser une machine & laver, un convoyeur,
des feux tricolores ou encore un pont roulant, &
Portir du bus d'extension de son micro-
ordinateur
Le livre s‘articule autour de cing parties
— la logique et le GRAFCET (logique com-
binatoire, séquentielle...)
— La micro-informatique (Vordinateur, le
bus d'extension...)
— Les composants de |’automate (action-
neurs, capteurs).
— automate (definition, programma-
tion, coupleurs et interfaces).
— exploitation de l'automate (langage
machine, langages évoluées, BASIC).
De plus, certains concepts informatiques sont
roppelés au lecteur, afin de lui permettre une
Les Editeurs nous
communiquent :
meilleure compréhension des contenus de cer-
tains chapitres.
cedic/nathan — 6-10, boulevard Jourdan
75014 PARIS (160 pages — 99 F).
* L'HOLOGRAPHIE
pha spe
@ /a réalisation pratique
(Jean Héraud)
Uholographie est l'une des inventions les plus
Passionnantes de la science moderne, qui valut
dailleurs & son découvreur, Denis Gabor, un
juste prix Nobel en 1971. Elle permet |'élabora-
tion d'un type nouveau de document dont le
réalisme est total, les hologrammes, ces
fameuses images non seulement en relief mais
qui reproduisent les reflets, la micro-structure
et méme les vroies couleurs. Grace 6 des lasers
de faible puissance et peu coiteux, il est
‘aujourd'hui aussi facile de créer des hologram-
mes que de réaliser des photographies
Uouvrage de Jean Héraud permet d'aborder la
technique de I'holographie, d'en comprendre
les principes (optique, lumiére cohérente du
laser) et de passer tres rapidement a lo
réalisation.
livre d'initiotion & lo pratique, il décrit en
détail, a l'aide de nombreuses figures et photo-
graphies, installation d'un petit laboratoire
holographique : son matériel, sa mise en
ceuvre... Grace aux progrés des lasers, |'ima-
gerie holographique peut étre obordée por
tous. Ce livre est, en effet, destiné & tous les
amateurs qui désirent aborder I'holographie,
quel que soit leur niveau de connaissances
(jeunes, membres de clubs, lycéens...). De
L'HOLOGRAPHIE
DELA
DECOUVERTE
\ LA REALISATION
PRATIQUE
Dunno
plus, lenthousiasme de 'auteur et sa grande
compétence dans le domaine du laboratoire,
acquise aprés de longues années de pratique,
lui ont permis de perfectionner et de simplifier
cette technique pour la mettre 4 la portée des
non-initiés, en particulier en communiquant
son savoir-faire et son expérience, si précieux
pour réussir les différentes sortes d’hologram-
mes (por transmission, par réflexion...).
Comme il le dit lui-méme, “outre le cété artisti-
que, c'est surtout lo minutie de l'opérateur qui
est déterminante pour la réussite des beaux
hologrammes”. En résumé, Jean Héraud o
voulu, par cet ouvrage, permettre 4 ceux qui
veulent aborder I'holographie de réaliser rapi-
dement et facilement des hologrammes, apres
en avoir bien compris le mécanisme, afin d’en
exploiter av maximum toutes les possibilités.
Dunod — 17, rve Rémy-Dumoncel B.P. 50, 75661 PARIS
Cedex 14 (132 pages, broché, 120F)
* LES NOUVELLES LOGIQUES
POUR L'INTELLIGENCE
ARTIFICIELLE
(Arnold Kaufmann)
informatique est née de l'application de la
logique booléenne. Ses derniers développe-
ments @ travers I'intelligence artificielle et les
systémes experts demandent de nouveaux
outils qui sachent traiter l'incertain, le subjec-
tif, l'imprécis, propres aux opérations habituel-
les de la pensée. Nouvelles logiques pour
lintelligence artiticielle se propose d’étudier
ces instruments. Destiné 4 un large public de
scientifiques, d'informaticiens, mais aussi
d'ingénieurs, de médecins, de biologistes, etc.,
cet ouvrage sappuie sur de trés nombreux
exemples pour présenter les concepts caracté-
ristiques des logiques floues, sous-ensembles
aléatoires flous, représentations qui conser-
vent la variété des jugements et reconnaissent
des niveaux 4 lo connaissance. Arnold KAUF-
MANN est un ancien professeur de |'Institut
polytechnique de Grenoble, de |'Ecole supé-
rieure des mines de Paris et de |'Université de
Louvain. Il est I'auteur ou le co-outeur de plus
de soixante ouvrages, dont certains ont été tra-
duits en plus de vingt langues ; ces ouvrages
concernent les mathématiques appliquées, la
recherche opérotionnelle, «|'informatique, lo
sociologie, les méthodes de créativité, divers
domaines des sciences économiques. II con-
vient de signaler, en particulier, ses ouvrages
concernant les mathématiques floves, lesquels
sont connus dans le monde entier. Les plus
récents travaux d’Arnold KAUFMANN se rap-
portent aux logiques floues, l'intelligence
artificielle, aux systémes experts. Il a recu de
nombreuses distinctions en France et dans le
monde pour ses travaux.
Relié — 300 pages — 290 F TTC.
Editions HERMES — 51 rue Rennequin 75017 PARIS
TREMPLIN MICRO
29
NTN bos | propos | MICROTEL CLUB MOURENX
LOGIQUE
elementaire
Ce programme a été réalisé au MICROTEL DE MOURENX, sur APPLE /le avec
carte 80 colonnes, sous ProDOS. Comme le précise M. HUGUET, cet “exercice
de style” ne sert rigoureusement rien, sinon 4 amuser la galerie en décorti-
quant un raisonnement logique dans un univers trés restreint. Il a en outre
l‘avantage d’exprimer son raisonnement en langage clair (nous en fournissons
un exemple, directement sorti sur imprimante, 4 la suite du programme).
Nous le publions parce qu ‘il constitue un bon exercice, pour celles et ceux qui
ne sont pas rompus 4 la pratique de |'Applesoft. Il est abondamment docu-
menté (lire toutes les lignes de REM). De plus, il peut servir de schéma de
départ pour I'élaboration de raisonnements beaucoup plus complexes... ce que
nous souhaitons, bien entendu.
100 REM MICROTEL CLUB DE MOUREN 200 PRINT : PRINT : PRINT "
XetJctd TYPE: "3; CHR (34) ;"DESIRE
110 REM ACHATSctJctJ OBJET"; CHR (34) 7DA5
120 REM 08 12 85 19 11 8éct 210 PRINT : PRINT "= sujet DE
JctJ SIRE complement" 2A4A
130 REM PROGRAMME D’ INTELLIGENC 220 PRINT : PRINT " “PIERRE “DE
E ARTIFICIELLE NO ictJctJ SIRE DU PAIN" 0E36
140 TEXT : HOME CSA 230 VTAB HTAB 1: PRINT ald
150 DIM A$(€200,20) ,NAC 200) ,PS(2 EZ UNE TOUCHE QUELCONGUE"'s
a0) #D7D GET AS
160 DS = CHRE (4) B3A4 240 HOME : PRINT "OU BIEN:"
176 PRINT D$;"PREFIX /MICROTEL"” 5210 250 PRINT : PRINT : PRINT “
180 HOME : PRINT " TYPE: "; CHRS (34);"DESIRE
/MICROTEL/ACHATS" 2740 VERBE"; CHRS (34) 04A5
190 PRINT : PRINT : PRINT " 260 PRINT : PRINT "= sujet DE
CE PROGRAMME RESOUT PAR LE SIRE complement verbal” DB24
RAISONNEMENT LE PROBLEME P 270 PRINT : PRINT " JEAN DE
OSE PAR UNE BASE DE DONNE SIRE FAIRE DU SKI" 4B13
ES COMPRENANT DES PHRASES D 280 PRINT : PRINT : PRINT “AVEC
U TYPE:" 4B8 L’EXPLICATION:" 4E12
30 GUY-HACHETTE
3€
35
4c
4
44
46
4¢
4y
4é
45
5¢
Si
Sz
Si
5¢
wo
ow
290
300
310
320
330
340
350
360
370
380
390
400
410
420
430
440
450
460
480
490
500
S10
520
530
540
550
PRINT : PRINT “= POUR “""ve
rbe ~~"IL FAUT ~“complement
1, complement 2 ET comple
ment 3"
PRINT : PRINT "= POUR FAIRE
DU SKI IL FAUT “DES SKIS ~
“"", DES CHAUSSURES “ET DES
TICKETS"
VTAB 22: HTAB 1: PRINT “TAP
£2 UNE TOUCHE QUELCONGUE";:
GET As
HOME : PRINT "OU DES PHRASE
S DU TYPE:"
PRINT : PRINT : PRINT " ~~~
“TYPE: "“; CHRS (34) ;"POSSED
E"; CHR$ (34)
PRINT : PRINT "= sujet “~“PO
SSEDE “complement”
PRINT : PRINT " “JULES ~"PO
SSEDE “DES SKIS"
PRINT : PRINT : PRINT "AVEC
SA COROLLAIRE:"
PRINT : PRINT "= sujet ““VE
UT VENDRE ~“complement"
PRINT : PRINT " “JULES ““VE
UT VENDRE ~“DES SKIS"
VTAB 20: HTAB 1: PRINT "<L*
ABSENCE DE COROLLAIRE SUPPO
SE QUE JULES NE VEUT PAS VE
NDRE DES SKIS,)"
VTAB 22: HTAB 1: PRINT "TAP
—2 UNE TOUCHE QUELCONQUE";:
GET AS
GOTO 520
REM ctUctJRESTITUTION DES P
HRASESctJctJctJ
HOME
FOR 1 = 170 1J
PRINT 13" """3
FOR T = 1 TO NACI)
PRINT AS(I,T)3" "3
NEXT T
PRINT : PRINT
NEXT I
RETURN
REM ctUctJ MENUctJctd
HOME : YVTAB 10: PRINT "YOUL
EZ-YOUS TRAITER UNE ANCIENN
— BASE DE DONNEES? ~~ “TAPE
2a"
PRINT : PRINT "QU BIEN COMP
LETER UNE ANCIENNE BASE DE
DONNEES? ~~""~“TAPEZ M*
PRINT : PRINT “QU ENCORE EN
0665
7551
766D
19FA
$568
2081
279E
18FF
S1Bé6
3003
766D
0942
2F97
2F1F
3A10
7DC0
49313
A7D6
9DCB
6381
FCE3
9C28
560
570
580
590
600
610
620
630
640
650
660
670
680
690
700
710
720
730
740
750
760
770
780
790
800
810
820
830
840
850
860
870
880
890
900
910
CREER UNE NOUVELLE?
se bese eee SoBe ABE ph
GET A$: IF A$’ = CHR$ (27)
THEN END
IF AS = "A"
IF AS = "M" THEN 400
IF A’ < > "C* THEN 530
REM ctJctUNOM?ctJctJ
PRINT D3; "CATALOG"
INPUT "NOM DE LA BASE DE 00
NNEES DESIREE ? ";RS
REM ctJctJOUVERTUREctuctJct
fi
ONERR GOTO 780
PRINT D$;"OPEN" ;R
PRINT D8; "READ" ;RS
INPUT IJ
FORT = 170 lJ
INPUT NACI)
FOR T = 1 TO NACI)
INPUT A$(1,T)
NEXT T
NEXT I
PRINT D$;"CLOSE"
POKE 216,0
GOSUB 420
PRINT : PRINT "TAPEZ UNE TO
UCHE QUELCONQUE."; GET AS:
GOTO 860
HOME : PRINT "IL SEMBLE QUE
CETTE BASE DE DONNEES NE C
ONVIENNE PAS. VOULEZ-VOUS R
ECOMMENCER?"
POKE 214,0
GET A$: PRINT A$: IF AS =
CHR$ (27) THEN 2910
IF A’ = "O" THEN 600
IF A’ = "N" THEN 2910
GOTO 780
REM ctJctJENTREE DE DONNEES
THEN 1630
13K =
1:P$<1)
REM ctJINSTRUCTIONSctJd
HOME : PRINT “PHRASES DU TY
PE:": PRINT " “X “DESIRE “Y
PRINT " “POUR “Y
34 (224-003 ET ZN°
PRINT " “X “POSSEDE “Y": PR
INT " “X “VEUT VENDRE “Y"
PRINT "(L’ABSENCE DE MENTIO
N: X VEUT VENDRE Y SUPPOSE
“IL FAUT 2
A32E
6224
35F5
3ccD
OBIS
789C
AIS?
7EEF
8984
D26E
1117
2F1F
70C0
CFO3
A706
9DCB
C31?
OCAE
F946
3996
53A4
OCAE
Fec?
42CF
F804
29448
6549
opcc
DI9F
4753
TREMPLIN MICRO
31
LOGIQUE ELEMENTAIRE (svite)
QUE X NE VEUT PAS VENDRE Y) (1) = 7: GOTO 1180 S0CA
" 3053 1170 GOTO 1130 3070
920 PRINT "*** “ANNULE LA PHRAS 1180 IF A$(I1,T) = "POUR" OR ASCI
E PRECEDENTE" 700E ;7) = "DESIRE" OR ASCI,T) =
930 PRINT "FIN “APRES LA DERNIE "POSSEDE" THEN F = 1: GOTO
RE PHRASE" BBS4 1350 FBp0
940 REM ctJENTREE DES CARACTERE 1190 IF T < 2 THEN 1350 8591
SctJ 1200 IF A$(1,7) = "FAUT" AND AS(
950 VTAB 9: HTAB 1: PRINT I;" " 1,7 - 1) = "IL" THEN F = 1:
; BCF3 GOTO 1290 C318
960 GET C$: PRINT C$: IF C$ = 1210 IF LEN <AS(I,T - 19) < 3T
CHR$ (44) THEN C$ = CHRS (¢ HEN 1230 D4E8
42) 6807 1220 IF A$(1,T) = "FAUT" AND RI
970 IF C$ = CHR$ (13) THEN 104 GHT$ (AS(1,T - 12,2) = "IL"
0 DBO? THEN X = 2: GOTO 1320 EDcO
980 IF C$ = CHR$ (8) THEN IF 1230 IF AS(I,T) = "VENDRE" AND A
LEN ¢P$(I1)) = 0 THEN PRINT $(1,T - 1) = "VEUT" THEN F
CHR$ (7): GOTO 940 4678 = 1: GOTO 1290 945E
990 IF C$ = CHR$ (8) THEN IF 1240 IF LEN (AS{I1,T - 19) < 5ST
LEN (P$(1)) = 1 THEN P$(I) HEN 1260 F6ED
= ""; GOTO 950 a771 1250 IF A${1,T) = "VENDRE" AND
1000 IF C$ = CHR$ (8) THEN P$<(I RIGHTS (AS(I,T - 12,4) = "V
) = LEFTS (P$(1), LEN (P< EUT" THEN X = 4: GOTO 1320 2607
1)) - 1) GOTO 1020 co4D 1260 IF F = 1 THEN F = 0: GOTO 1
1010 P$(1) = PS(I) + CS Asis 350 ccaAc
1020 VTAB 9: HTAB 1: PRINT 1;" * 1270 IF RIGHTS (AS(I,T),1) = "*
3P$(1); CHR$ (29);: GOTO 96 " THEN F = 1: GOTO 1290 D3BD
0 8S9E 1280 IF AS(I,T) = "ET" THEN 1350 6D6¢
1030 REM ctUCAS SPECIAUXctd 1290 AS(I,T - 1) = ASCI,T - 1) +
1040 IF P$(I) = "FIN" THEN IJ = " "+ ASCI,T)SASCI,T) = "" 5702
1 - 1: GOTO 1460 6506 1300 IF K = LEN (P$(1)) THEN NA
1050 IF P$(I) = "***" THEN I = I (1) = T - 1: GOTO 1370 EECS
- 2: GOTO 840 6AFI 1310 GOTO 1130 3070
1060 REM ctJANALYSE DES PHRASES- 1320 AS(1,T) = RIGHTS (AS(I1,T -
MISE EN SEGMENTS SIGNIFICAT 1),X) +" " + ASCI,T) EAF9
IFSctJ 1330 AS(I1,T - 1) = LEFTS (AS<I,
1070 REM I = NUMERO DE LA PHRASE T - 1), LEN (ASCI,T - 19) -
1080 REM AS (1,7) = SEGMENT SIGN x-1) 37EF
IFICATIF 1340 F = 1: GOTO 1350 1DF5
1090 REM T = NUMERO DU SEGMENT D 1350 IF K = LEN ¢P$(1)) THEN NA
ANS LA PHRASE (1) = T: GOTO 1370 62CB
1100 REM NA (I) = NOMBRE DE SEGM 1360 T= 7 + 1: GOTO 1130 4E18
ENTS DANS LA PHRASE IctJ 1370 HOME : PRINT I;" "3; BCAE
1110 ASCI,T) = LEFTS (P$(1),1) 42°39 1380 FOR T = 1 TO NACI) 700
1120 IF AS(1,T) = "" THEN I = 1 1390 IF RIGHTS (A$(I,T),1) = "*
- 1: GOTO 860 OFES “ THEN PRINT LEFT$ (AS(I,
1130 K = K + 1:08 = MIDS (PS(1) T), LEN (A$¢1,T)) - 1) CHR
gid OEED $ (44);" "3: GOTO 1410 4970
1140 IF C$ =" " THEN 1180 DADS 1400 PRINT AS<1,T)5"_ "5 4313
1150 AS(I,T) = AS(1,T) + CB FAFD 1410 NEXT T A7D6
1160 IF K = LEN ¢P$(I)) THEN NA 1420 VTAB 23: PRINT "OK? ~<O/N)"
32 GUY-HACHETTE
oma
3: GET As oFOD " THEN AS(J,T) = LEFTS (AS
1430 IF AS = "0" THEN 860 7407 (3,7), LEN (A$(J,T)) - 1):
1440 IF AS’ < > "N" THEN 1420 S4CF PRINT AS$(J,T); CHRS (44);"
1450 P$(1) = "":1 = 1 - 1: GOTO "5:A8CJ,T) = ASCI,T) + * "2
860 BA3B GOTO 1920 7AB9
1460 REM ctJctJMISE. SUR DISKETTE 1890 AS(J,T) = ASCJ,T) +" " B9FC
ctdctJctd 1900 PRINT AS(J,T); 9775
1470 GOSUB 420 F946 1910 IF LEFT$ (A$(J,T),3) = “ET
1480 PRINT D$;"OPEN" ;R 8984 " THEN AS(J,T) = MIDS (AS
1490 PRINT 0$;"CLOSE" C517 (J,7),4, LEN (A$(J,T)) - 1) 3098
1500 PRINT D$; "DELETE" ;R$ 6005 1920 NEXT T A7D6
1510 PRINT D$;"OPEN" ;R$ aged 1930 PRINT 758A
1520 PRINT D$; "WRITE" ;R$ EDDD 1940 NEXT J A3CC
1530 PRINT IJ 3040 1950 PRINT D$;"PRE3" 5099
1540 FOR I = 1 TO IJ 2FiF 1960 HOME : VTAB 10: PRINT “TAPE
1550 PRINT NACI) SEES 2 UNE TOUCHE QUELCONQUE." = 000
1560 FOR T = 1 TO NACI) 70co 1970 GET A$:X = 1: GOTO 1810 7165
1570 PRINT A$<1,T) 7F39 1980 PRINT : PRINT : PRINT 742
1580 NEXT T A706 1990 PRINT "RAISONNEMENT :": PRI
1590 NEXT I 9DCB NT : PRINT 36D3
1600 PRINT D$;"CLOSE" C517 2000 REM ctJctJDESIREctJctJctJ
1610 REM ctJctJENCHAINEMENTctJct 2010 W=1 £058
Jctd 2020 FOR I = WTO IJ 5245
1620 2V = 1 COB1 2030 IF A$(1,0) = "*" THEN 2050 050!
1630 TEXT : HOME 105A 2040 IF A$<(I,2) = "DESIRE " THEN
1640 DIM BAS(50) ,CAS(50) 996D ZA = 1: GOTO 2080 ope?
1650 IF 2V = 1 THEN 1800 OcEB 2050 NEXT I 9DCB
1660 REM ctJctJBASE DE DONNEESct 2060 IF 24 = 0 THEN PRINT : PRI
JetdctJ NT "C’EST TOUT !": GOTO 291
1670 PRINT 0$;"CATALOG" 789C 0 19B2
1680 INPUT "NOM DE LA BASE DE 00 2070 2A = 0: GOTO 2010 BF43
NNEES DESIREE ? ";RS AI6? 2080 PRINT :R = 1 2B5F
1690 1 = 0:X =0 99DB 2090 GOSUB 2790 7282
1700 PRINT D$;"OPEN" ;R$ 8984 2100 IF A%<1,4) = “POUR " THEN Z
1710 PRINT D$;"READ" ;R$ D26E D = 1: GOTO 2150 8096
1720 INPUT IJ 1117 2110 REM ctJctJPOUR Y IL FAUTctJ
1730 FOR I = 1 TO IJ 2F iF ctJctd
1740 INPUT NACI) ARAL 2120 FOR J=1 701d 4F20
1750 FOR T = 1 TO NACI) 70c0 2130 IF A$(J,1) = "POUR " AND AS
1760 INPUT AS<1,T) CFO3 (J,2) = AS(1,3) AND AS(I,3)
1770 NEXT T A7Ds = "IL FAUT " THEN 2230 27AD
1780 NEXT I 9DCB 2140 NEXT J A3CC
1790 PRINT D$;"CLOSE" C517 2150 REM ctJctJPOSSEDE YctJctJct
1800 I$ = CHRS (9) ECAE J
1810 PRINT D$;"PRE1" 5197 2160 FOR J= 1 70 IJ 4F20
1820 PRINT 1$;"80N"; 5A97 2170 IF A$(J,2) = "POSSEDE “ AND
1830 IF X = 1 THEN X = 0: GOTO 1 A$(J,3) = AS(1,3) THEN ZC =
980 sFD9 1: GOTO 2380 48c0
1840 PRINT "BASE DE DONNEES ";RS 2180 NEXT J A3cc
y" 3" PRINT : PRINT 0180 2190 IF 2C = 0 THEN PRINT “ET Q@
1850 FOR J = 1 TO lJ 4F20 UE RIEN NE PERMET DE LE SAT
1860 PRINT J;" ~"; D8FE ISFAIRE," F2F
1870 FOR T = 1 TO NACJ) 7701 2200 PRINT "ALORS ";A$(1,1);"RES
1880 IF RIGHTS (AS(J,T),1) = "* TE INSATISFAIT ." 33E5
TREMPLIN MICRO 33
hla a aaa ee EE
2210
2220
2230
2240
2250
2260
2270
2280
2290
2300
2310
2320
2330
2340
2350
2360
2370
2380
2390
2400
2410
2420
2430
2440
2450
2460
2470
2480
2490
2500
2510
2520
2530
LOGIQUE ELEMENTAIRE (svite)
a a
AS(I,0) = "*":2C = 0:2B = 0
:2D = 0
GOTO 2050
R=J
GOSUB 2790
PRINT “ALORS ";A$(1,1) ;AS¢I
92) jAB(I,4) 5ASCT,1) ASC I, 2)
IF NACJ) = 4 THEN 2300
FOR K = 5 TO NACJ)
PRINT “ET ";AS<1,1) 5;AS¢1,2)
jASCT,K) 5086S, 1) ASC, 2)
NEXT K
A$(1,3) = AS(J,4)1AS(1,4) =
AS(J,1):ASK1,5) = ASCJ,2):N
ACID = 5
IF NACJ) = 4 THEN 2B = 0: G
OTO 2020
FOR K = 5 TO NACJ)
W=ls+1
AS(I1J,1) = AS(1,1) :AS(IJ,2)
= ASC(1,2):AS(1J,3) = ASCI,K
d2AS(1,4) = ASCJ,1) ASCIU,
5) = As(J,2)
NACI) = 5
NEXT K
2B = 0:
R=J
GOSUB 2790
REM ctJctJX POSSEDE YctJctJ
ctJ
IF AS(J,1) = ASCI1,1) THEN 2
570
GOTO 2020
REM ctJctJZ VEUT VENDRE Yct
JctJct
FOR K= 1 70 IJ
IF AS(K,1) = ASCJ,1) AND AS
(K,2) = "VEUT VENDRE " AND
AS(K,3) = A$(J,3) THEN 2480
NEXT K
PRINT "ET QUE ";A$(J,1);"NE
VEUT PAS VENDRE "j;AS(J,3)
GOTO 2180
R=K
GOSUB 2790
Wwe= "A"
IF LEFTS (AS(J,1),3) = "LE
" THEN AS(J,1) = MIDS (AS
(3,1) ,4):W% = "AU *
PRINT "ALORS "3A$(1,1);"ACH
ETE ";AS(1,3) ;W;AS(J,1)
PRINT "ET ";A8(1,1);"POSSED
161E
6772
1Dé6C
7282
059A
6764
29BC
F7C9
AlcD
9984
38E4
29BC
B3EF
652B
2778
AICD
A545
106C
7282
19C8
8F21
O6AE
ACD
3572
SB76
1Bé6D
7282
20F0
O2CF
DC466
2540
2550
2560
2570
2580
2590
2600
2610
2620
2630
2640
2650
2660
2670
2680
2690
2700
2710
2720
2730
2740
2750
2760
2770
2780
2790
2800
2810
2820
2830
2840
2850
2860
E ";as(J,3)
AS(J,1) = ASCI,1D
AS(K,1) = "":AS(K,2) = "A
$(K,3) = "":NACK) = 0
2B = 0:2C = 0: GOTO 2020
REM ctJctJUX EST SATISFAITct
JctJctd
IF 2D = 1 THEN 2660
PRINT "ALORS ";
PRINT AS(1,1);"EST SATISFAI
™."
FOR L = 1 TO NACI)
As(1,L) = ""
NEXT L
NACI) = 0:2C = 0:2D = 0
2B = 0: GOTO 2050
REM ctJctJD’AUTRES DESIRSct
Jetuctd
FORL = 170 1J
IF A$(L,0) = "*" THEN 2700
IF AS{L,1) = AS<1,1) AND AS
(L,2) = A$(1,2) AND A$(L,3)
<{ > ASC1,3) AND AS(L,4) =
NEXT L
PRINT "ALORS ";AS(1,1);"PEU
T ";ASCI,5)
PRINT "ET ";
GOTO 2400
PRINT "ALORS ";A$(1,1);"POU
RRAIT ";A%(1,5)
R = L:BAS(R) =
0
GOSUB 2820
AS(1,0) = "*"
2B = 0:2C = O:W = L: GOTO 2
020
REM ctJctJS/P RECONSTITUTIO
N DE PHRASESctJctJctJ
"MAIS ":2D =
IF 2B = 0 THEN BAS(R) = "CO
MME ":2B = 1: GOTO 2820
BAS(R) = "ET QUE "
FOR T = 1 TO NAR)
BAS(R) = BAS(R) + ASC(R,T)
IF AS<R,2) = "DESIRE " THEN
2870
IF T > 4 AND T ¢ NACR) THEN
CAS(R) = CAS(R) + LEFTS (A
$(R,T), LEN (AS(R,T)) - 1)
+ CHRS (44) + " ": GOTO 288
0
IF T > 4 AND T = NACR) THEN
E39A
FES?
B732
ADIC
S2DE
Fé6DA
9497
SEB8
8088
97CE
6FD8
AB48
8E22
OFD6
97CE
47AE
43F2
5073
CFES
1028
777C
1A99
06c9
Fos4
2A22
8ccy
99B4
AAPB
BFOS
GUY-HACHETTE
CAS(R) = CAS(R) + "ET "+A 2910 REM ctJctJFINctJctJ
$(R,T): GOTO 2880
2870 CAS<R) = BAS<R)
2880 NEXT T
2890 PRINT CAS<R)
2900 RETURN
EAID 2920 PRINT : PRINT : PRINT : PRI
Essayez, dans un
premier temps, de
construire votre
propre base de
données a partir de
ce petit exemple.
Rappelons que ce
programme
dinitiation a été
réalisé dans le cadre
des activités du
MICROTEL CLUB DE
MOURENX.
4065 NT : PRINT 638A
A7D6 2930 PRINT D$;"PRE£3" SD9?
9FO5 2940 END 0180
$3B1
EXEMPLE
BASE DE DONNEES SIMPLE :
ANDRE DESIRE MANGER
POUR MANGER IL FAUT DU PAIN ET DE LA CONFITURE
INTERMARCHE POSSEDE DE LA CONFITURE
LE BOULANGER POSSEDE DU PAIN
INTERMARCHE VEUT VENDRE DE LA CONFITURE
LE BOULANGER VEUT VENDRE DU PAIN
aununwn
RAISONNEMENT :
COMME ANDRE DESIRE MANGER
ET QUE POUR MANGER IL FAUT DU PAIN ET DE LA CONFITURE
ALORS ANDRE DESIRE DU PAIN POUR MANGER
ET ANDRE DESIRE DE LA CONFITURE POUR MANGER
COMME ANDRE DESIRE DU PAIN POUR MANGER
ET QUE LE BOULANGER POSSEDE DU PAIN
ET QUE LE BOULANGER VEUT VENDRE DU PAIN
ALORS ANDRE ACHETE DU PAIN AU BOULANGER
ET ANDRE POSSEDE DU PAIN
COMME ANDRE DESIRE DU PAIN POUR MANGER
ET QUE ANDRE POSSEDE DU PAIN
ALORS ANDRE POURRAIT MANGER
MAIS ANDRE DESIRE DE LA CONFITURE POUR MANGER
COMME ANDRE DESIRE DE LA CONFITURE POUR MANGER
ET QUE INTERMARCHE POSSEDE DE LA CONFITURE
ET QUE INTERMARCHE VEUT VENDRE DE LA CONFITURE
ALORS ANDRE ACHETE DE LA CONFITURE A INTERMARCHE
ET ANDRE POSSEDE DE LA CONFITURE
COMME ANDRE DESIRE DE LA CONFITURE POUR MANGER
ET QUE ANDRE POSSEDE DE LA CONFITURE
ALORS ANDRE PEUT MANGER
ET ANDRE EST SATISFAIT .
C’EST TOUT !
TREMPLIN MICRO
Vient de paraitre
Les Editeurs nous
communiquent :
INITIATION A
¢ INITIATION A dBASE Ill Plus
(par R. Cowart tradvit de
‘américain par J.-P. Cano)
Cet ouvrage permet au néophyte d’ap-
prendre en quelques heures les comman-
des de base de dBASE Ill Plus.
Il se présente sous la forme d'un tutorial
qui guide |'utilisateur pas @ pas dans
l‘apprentissage des nouvelles fonctions :
création d'entrée des données et mise &
jour d'une base de données. La descrip-
tion de certaines techniques évoluées
permet de sélectionner les informations
suivant des critéres tres spécifiques,
dorganiser et de mettre jour rapide-
ment les fichiers et de créer des rapports
de type professionnel.
Cet ouvrage contient :
— recherches élaborées en utilisant les
fonctions et les opérateurs de dBASE ;
— différents niveaux de tris et d'indexages ;
— entrée de commandes 6 partir du point
dttente ;
— manipulation des nombres, des dates
et des champs logiques ;
— linkage de fichiers de données multi-
ples ;
— création de masques de saisies person-
nalisés pour I'entrée des données.
Tous les exemples de ce livre sont traités
sous un aspect professionel : base de
données téléphone, étiquettes postales,
gestion de stocks, multifichiers, etc...
Un livre broché de 308 poges au format 190X220, 248 F
SYBEX, 6-8 impasse du Curé 75018 PARIS.
© NOUVEAU DICTIONNAIRE
BASE Ill ET dBASE Ill Plus
(par G. Renner et D. Schmit tra-
duit de 'allemand par J. Bourdev)
Ouvrage de référence, ce dictionnaire
doit essentiellement assister |'utilisa-
teur dans son travail quotidien.
Toutes les commandes et fonctions
sont analysées en détail et classées
par catégorie d'emploi. Chacune
dentre elles est décrite avec :
— sonréle;
— la version du logiciel 4 partir de
laquelle elle est disponible ;
— sa syntaxe complete ;
— les conseils d'emploi ainsi que
son utilisation avec d'autres
commandes ;
— les différences entre dBASE Ill et
dBASE Ill Plus ov entre les ver-
sions frangaises et américaines ;
— plusieurs exemples détaillés
d'utilisation.
Uouvrage aborde également les com-
mandes, les fonctions réseaux et les
utilitaires tels que le générateur de
tables et I'éditeur de liens.
Il propose enfin des annexes permet-
tant un accés immédiat aux informa-
tions le plus souvent recherchées, tel-
les que la syntaxe exacte d'une com-
mande ou le réle des touches de
contrdle.
Un livre broché de 618 pages au format 190 230, 298 F
SYBEX, 6-8 impasse du Curé 75018 PARIS.
¢ MS-DOS APPROFONDI
J. Kamin traduit de
‘américain par J.-L. Gréco)
Cet ouvrage s‘adresse aux utilisateurs
expérimentés de MS-DOS (versions 2.1
4 3.1). Une section traite les comman-
des les moins familiéres de ce systeme
d'exploitation.
Uessentiel de l'ouvrage a pour but de
familiariser l'utilisateur avec les tech-
niques les plus évoluées lui permettant
d'accroitre sa productivité : configura-
tion du systéme, de I'écran et du cla-
vier, élaboration de commandes per-
sonnalisées, utilitaires de gestion de
disques et de mise au point, gestion
d'imprimante, etc...
ll comporte une bibliothéque de sous-
programmes préts a l'emploi et
s'impose comme |'outil indispensable
de tout utilisateur efficace de MS-DOS.
L'AUTEUR: Jonathan Kamin est l‘ovteur de
————— nombreux ouvrages sur les
micro-ordinateurs. 1 est également professeur de
sociologie et de musique. |I est docteur de Univer.
sité de Princeton.
Un livre broché de 44? pages au format 190X230, 278 F
SYBEX, 6-8 impasse du Curé 75018 PARIS.
* INTRODUCTION A PASCAL
AVEC TURBO PASCAL
(par P. Le Beux)
Cet ouvrage s'adresse aux débutants
et ne requiert aucune formation préa-
lable aux techniques de |'informatique.
Les différents concepts du langage y
sont présentés de facon progressive et
pédagogique, accompagnés de nom-
breux exemples.
Pour cette seconde édition, le Turbo
Pascal est le langage de référence. Le
livre met en valeur ses qualités intrin-
séques de langage simple et structuré.
Le traitement graphique y est égale-
ment abordé.
Il s'agit essentiellement d'un ouvrage
de référence.
WAUTEUR: Pierre Le Beux est ingénieur de
————~__ Ecole Centrale et docteur en
informatique de |'Université de Californie. |I est
louteur, chez Sybex, de nombreux best-sellers.
Spécialiste des langages de programmation, i!
est professeur 4 I'Université de Technologie de
Compiégne.
Un livre broché de 686 pages av format 190 230, 248 F
SYBEX, 6-8 impasse du Curé 75018 PARIS.
INTRODUCTION A
36
GUY-HACHETTE
Si
ce
re
ta
co
co
vo
de
ni
sir
La
BG
BD
LH
LB
Cei
mo
at
ajo
sof
not
DH
ter
cor
iis g
TRE
|
AMPERCOMMAND
Si l'Applesoft est pour la majeure partie d'entre nous un Basic comportant un
certain nombre de déficiences, le systéme dans lequel il navigue permet, heu-
reusement, de pallier la plupart de ses manques. Lorsqu’on se penche sur cer-
tains vecteurs de la page 3 ($0300 4 $03FF), grande est notre satisfaction en
constatant que l'un d’entre eux, le fameux Ampersand, permet d’ajouter des
commandes nouvelles 4 ce bon vieil Applesoft.
AMPERCOMMAND fonctionne aussi bien en DOS 3.3 qu’en PRODOS et met a
votre disposition, dans sa version de base, la possibilité d’afficher des fenétres
de n'importe quelle taille (dans les limites de I'écran texte, bien sdr !), a
n'importe quel emplacement de |’écran. Le nombre des fenétres affichables
simultanément est illimité et ne dépend que de votre humeur.
Francois GALLET
1° Reportez-vous a la Table des commandes
| SYNTAXE (ligne 281). Insérez le texte de votre com-
Lo syntaxe est trés simple : & FENETRE BG,BD,LH,LB mande, si c'est la premiére que vous ajoutez,
P e R ek la suite du pointeur de fin de‘commande (octet
' 86 = Bord gauche de la fenétre que l'on désire $00) de FENETRE. Les octets composant votre
' afficher. commande devront étre codés en ASCII bas (bit
i BD = Bord droit. 7 40) et se terminer par un $00.
‘ LH = Ligne du haut. ‘
LB = Ligne du bas. Exemple: Vous ajoutez la commande &
EFFACE. Ecrivez ASC 'EFFACE' suivi
de HEX 00. Le codage hexadécimal de EFFACE
devra étre celui-ci : 45 46 46 41 43 45 suivi de 60.
Cette commande est active en mode direct ou en
mode programme.
AMPERCOMMAND apporte également un support
& tous ceux qui, pratiquant |'Assembleur, désirent
ajouter des instructions supplémentaires 4 |'Apple-
soft. On peut ainsi placer jusqu’a 256 commandes
nouvelles, comme par exemple, & PRINT USING, &
DHGR (Double Haute Résolution Graphique), etc.
La longueur de la syntaxe importe peu (255 carac-
teres maxi), les espaces, s'ils n'ont pas été définis
comme partie intégrante de la commande, sont
ignorés lors de l'exécution.
COMMENT AJOUTER UNE COMMANDE ?
Pour cela, servez-vous du source d'AMPERCOM-
MAND et procédez ainsi :
Il faut maintenant indiquer 4 AMPERCOMMAND
que vous avez ajouté une commande et préci-
ser oU trouver le programme de traitement.
Reportez-vous 4 la ligne 118 du source. En arri-
vant ici, AMPERCOMMAND contirme qu'il a
bien trouvé la correspondance entre ce qui est
dans le buffer ($0200) et quelque chose dans la
table, le registre X contenant le numéro d'ordre
de la commande trouvée. Reprenons |'exemple
de & EFFACE :
NOERROR CPX £00
BNE CDE2
: Commande & FENETRE.
SiX<> 0, on passe dla
commande n°2.
saeneneeseeesscesoesesseesrensenaeneaseeesecsaseeseeesensennsensaeneennCosneeesnansReReeseoeeoRaEDOTee
TREMPLIN MICRO
37
JMP FENETRE ; Vers traitement de & mande se termine par I'instruction "JMP BASIC"
FENETRE. afin de pouvoir rendre la main au systéme dés
CDE2 CPX £$01 ; Commande & EFFACE. l'exécution achevée de votre nouvelle
BNE CDE3 —; SiX<> 1, onpasse la commande.
commande n°3.
JMP EFFACE ; Vers traitement de & La routine a été implantée en $8000, mais peut
. EFFACE. tre assemblée n'importe ob en mémoire, selon la
masse de codes que vous ne manquerez pas de
CDES NOP i Autres commandes... rajouter au fur et 4 mesure de votre développe-
Votre nouvelle commande est opérationnelle... ment. Notez qu'AMPERCOMMAND repositionne la
si le traitement existe, bien sir ! valeur de HIMEM pour se protéger et qu'un RESET
malencontreux ne le perturbe pas. Pour rendre
3° Les traitements d’erreurs se trouvent 4 la ligne actif AMPERCOMMAND, faites "CALL 32768" en
108. Si vous désirez que |'Apples
Showing the first 100000 of 169919 characters.