Text content (OCR)
Pour tous les passionnés de lordinateur personnel,
les branchés et ceux qui le sont moins, Apple lance le Club Apple.
Enfin un |club avec des idées et des services
pour comprendre, pour gagner, pour s'évader.
Le Club Apple, c’est l'esprit Apple.
Crest le fruit de|la passion.
Pour en savoir plus sur le Club Apple - le fruil de la passion - et connaitre tous les avantages que nous réservons aux
membres du club, découpez dés aujourd'hui le bon et retournez-le a Club Apple, avenue de 'Octanic Z\ de Courtaboeuf - BP 131,
Les Ulis cedex 91944. Vous recevrez sans engagement de votre part toutes les informations pour devenir membre du club.
Nom Prénom
Adresse
Code postal —__ — =
SEPTEMBRE-OCTOBRE 1984
Sommaire Page Langage * | Niveau * *
Editorial par Hervé Thiriez 5
Initiation a l’assembleur par Gérard Michel 7 B-A T
Procédure & par Philippe Le Dru 15 A M-T i
Disque virtuel 64K par Jacques Rey 19 A M-T
Appleworks a l’essai par Guy Lapautre 23 i
dane : L’Apple II sauce Macintosh par Jean-Michel Gourévitch 24 z
Amper-interpréteur ICARE par Pascal Cantot 25 B-A M
Visicalc Advanced Version par Hervé Thiriez 37 -d
Les essais du Macintosh par Hervé Thiriez 43
De MacWrite 4 Apple Writer //e par Pom’s 45 B OM
Les tokens du Basic Microsoft par Jean-Luc Bazanegue 46 (B) id:
Gestion de masques améliorée par Jacques Tran-Van
et Maurice Schapiro 47 B-A a
Leve-toi et brille par Alexandre Avrane 53 fr
217 fichiers par disquette par Marcel Cottini 55 B M
Conversion minuscules/MAJUSCULES par Alexandre Avrane 56 A M
Un catalogue général par Michel Baudrand 57 B-A ¥
Koala pad a I’essai par Marcel Cottini 67
Micro-informations par Jean-Michel Gourévitch 69
Lecture/écriture rapide de tableaux par Jacques uma 73 B T
INPUT généralisé miniature par Jacques Duma 73 B i
Coursier des lecteurs par Alexandre Duback 75
Langage : Basic) - A(ssembleur) - P(ascal). (B) signifie : relatif au BASIC.
* Niveau . D(ébutant) - M(oyen) - P(rofessionnel) - Tous)
P-T signilie : programme utllisable par
Les annonceurs
ACER MICR'
COMPUTER
M.B.D.C, :
SATELCOM : p77. SICOB : p. 4 INFOSOFT : p. 66 / TELECOMPO : p 74
7 HELLO :
les débutants, mais dont la compréhension est de niveau “Professionnel”
18) Apple: p. 38-39 | ASAP: p. 7Z/ B.F.L.: p. 79 | Club Apple : p. 2) COMPUTER 3 : p. 74 / DYNAMITE
‘1 HIT Microsystéme : p. 80 | IEEE : p. 68 | INFORTEC : p. 68 /KARDEX: p 13/ LIST: p. 51
3 MEMSOFT: p. 44 | L’Ordinateur Individuel : p. 6 | PEACHTREE -
p. 40-41 / P.S.1. Diffusion : p, 12
Edition MEV — 64-70 me des Chantiers — 78000 Versailles
Directeur de la publication « Hervé Thiriez, Imprimerie Rosay, 94300 Vincennes. Imprime en France. Depot legal : 3° trimestre 1984
Pom’s n° 14
QUESTIONS
DAUJOURD'HUI ?
REPONSES
AU SICOB.
SICOB 84
CMT-PARIS LA DEFENSE
DU 22AU 28 SEPTEMBRE
(SAUF DIMANCHE 23) DE SHA 18H.
JOURNEES PROFESSIONNELLES: 19.20, 21SEPT
Editorial
Trois ans déj ! Trois années pendant lesquelles Pom’s a augmenté sa pagination (ce numéro comporte
80 pages). sa fréquence de parution, son tirage. et méme son prix de vente. quoique moins de 15 %
daugmentation en trois ans. cela soit tin record en matiére d'inflation ! Surtout avec le Papier qui a
Pratiquement triplé et les frais postaux qui n'ont pas respecté les consignes du gouvernement en matiére
de contréle des prix.
Trois articles de ce numéro valent chacun le prix d'un abonnement annuel : tout d'abord le catalogue
général de Michel Baudrand, et le programme Icare de Pascal Cantot qui regroupe (tel Haifa) un
paquel de routines toutes plus intéressantes les unes que les autres. sous le contrdle du céldbre &. Puis.
inspiré par l'article de Michel Haag paru dans le numéro 12, la transformation par Jacques Rey de
votre carte 80 colonnes “élendue™ en un disque virtuel de 64K.
Marcel Cottini stocke 217 fichiers sur une disquette. Il vous propose également un essai de Koala
Pad. Dans le domaine des essais. vous trouverez également le logiciel Jane présenté par Jean-Michel
Gourévitch, et Appleworks, logiciel intégré vu par Guy Lapautre. Pour ma part. j ai pu tester Visicalc
Advanced Version, le dernier développement dle Visicale.
Deux articles originaux d’Alexandre Avrane : d'une part une routine de conversion de Taffichage
minuscule en majuscule pour que vos programmes concus sur ‘e et 'c soient utilisables sur Apple Il
sans KOM LC. et d'autre part. une contribution originale en Visicale qui vous donnera les heures de
lever et coucher du soleil.
dacques Tran-Van ei Maurice Schapiro ont modifié le programme de gestion de masque écrit par
Gerard Michel. Ce dernier poursuit par ailleurs sa série d'initiation 4 l'assembleur pour laquelle nous
recevons toujours un courrier enthousiaste.
Philippe Le Dru ajoute a I'Applesoft une routine de gestion de procédure avec des variables locales
tout 4 fait “pascaliennes”. Quant A Jacques Duma, il vous délivre des problémes de virgules et deux-
points dans les INPUTs en deux lignes d’Applesolt. En deux lignes également vous pourrez sauvegarder
et recharger des tableaux de variables sur disquettes.
La rubrique Macintosh grandit et va devenir, probablement A partir du numéro de novembre, un cahier
complet. Je vous y présente une analyse de deux livres et deux logiciels de jeu. Jean-Luc Bazaneque
a recherché pour vous les tokens du Basic Microsoft du Macintosh. et Pom’s vous donne le moyen
denvoyer 4 votre brave Apple // des textes écrits avec MacWrite. Vous étes en elfel de plus en plus
nombreux 4 disposer d'un Mac, et Pom's tent a apporter son soutien aussi aux utilisateurs A ce nou-
veau bourreau des cceurs.
Nous avons encore de nombreux Programmes passionnants en réserve e( prions les auteurs qui nous
envoient leurs contributions de bien vouloir prendre patience. Dans le prochain numéro (navembre),
entre autres beautés. vous aurez “Mobby Disk”. un programme qui permet d'analyser ou de modifier
un disque 4 volonté
Enfin, Por’s continue a rechercher un collaborateur connaissant parfaitement bien l'assembleur et le
Basic Applesoft. sachant s‘exprimer clairement et sans fautes dortographe. pour un travail de rédaction
pouvant aller du mi-temps au temps complet.
Hervé Thiriez
Erratum : sur la couverture. il s‘agissait de Bill Budge et non Bodge. Devons-nous y voir influence
nefaste de la traduction de bug en Bogue ?
Ont collaboré 4 ce numéro : Alexandre Avrane — Michel Baudrand ~ Pascal Caritui — Marcel Cottini — Alexandre Duback —
Jacques Duma Jean-Michel Gourévitch ~ Guy Lapaulre — Philippe Le Dru ~ Gerard Michel - Jacques Rey — Maurice Schapiro
n Van, Rédacteurs : Alexandre Avrane ~ Gerard Michel Directeur de la publication. rédacteur
en chef ; Herve Thirtez Dessin : Laurent Bidot
Siege social et abonnements : Editions MEV . 64-70), rue des Chantiers . 78000 Versailles Tél (3) 951.24.43
Rédaction et courrier des lecteurs : 59. bd de Glatigny — 7X00) Versailles
Régle publicitaire : Force 7 Anne Jourdan - 5. place du Colonel Fabien - 75010) Paris Tél 2402201
Diffusion N.M.P.P. : Sophic Marner Tel (1) 240.22 01
Composition : Télécompo 13-15. avenue du Petit Parc 94300 Vincennes Tel 52!
Impression : Rosay - 47, avenue de Pans 94300 Vincennes 1él 328 18 63
63
LAA LY
Pom's n° 14
1980; il était déja la avant méme |’explosion de la micro-
informatique , prét a évoluer avec elle d'année en année.
1984/1985 : il est “la” Bible. Son titre, ses fidéles le lui ont donne,
naturellement: “LE” GUIDE.
Instrument de premiere approche des neophytes
Référence des passionnés, des vrais amateurs. des profes-
sionnels, des constructeurs, des vendeurs.
4984/1985: LE GUIDE MICRO présente
- les 216 fiches techniques detaillées des micro-ordinateurs
du marché (de 500 FF a 50000 FF)
le tableau exclusif de plus de 130 imprimantes,
-un panorama des 60 logiciels a connaitre dans toutes
les applications,
-prés de 2000 adresses de constructeurs, de clubs et
de boutiques, par ordre alphabétique et par département,
- les mots clefs de |'informatique.
1* septembre 1984:
LE GUIDE MICRO est vendu 35 FF
chez votre marchand de journaux.
1984/1985 : élaboré par une équipe de journalistes, LE GUIDE
MICRO explique : qu’est-ce qu’un ordinateur ? Que permet-il?
LE GUIDE MICRO prend parti et dit pourquoi: pour ou contre
55 ordinateurs individuels. || commente les grandes manceu-
vres de l'année 84. II tutoie l'avenir: les ordinateurs de janvier
85 sont au rendez-vous.
LE GUIDE DE
LORDINATEUR
INDIVIDUEL
Liarticle précédent nous a donné
loceasion de rentrer un peu dans le
détail du contenu des octets manipu-
lés par votre Apple et de voir
comment certaines instructions de
Tassembleur travaillent au niveau des
bits d'information.
En analysant les traitements présen-
tés au sujet des instructions ADC ou
SBC, vous avez pu constater qu’il
n'y a finalement rien de bien myste-
rieux dans l'évolution de ces suites
de 1 et de 0 qui constituent les
octets. L’application rigoureuse de
régles arithmétiques simples permet
en effet de prévoir le résultat des
opérations binaires et, par voie de
conséquence, de comprendre le
fonctionnement et les conditions
d'emploi des instructions du langage
assembleur réalisant ces opérations.
Nous pouvons donc maintenant
aborder d'autres instructions plus
“fines” quant a leur champ d’appli-
cation. Si, comme toujours, elles ma-
nipulent la quantité économique d’in-
formation qu’est l’octet, les con-
séquences de cette manipulation ne
peuvent étre totalement comprises
qu’a l'aide d'un examen bit a bit.
Des régles simples conduisent la en-
core a la prédiction du résultal, et
Cest bien normal lorsque les objets
du traitement sont aussi "pauvres” et
peu nombreux que 0 et 1.
Les opérateurs logiques
Nous retrouvons 1a des instructions
présentes également dans |'Applesoft.
Lorsque vous écrivez “IF A=2 AND
B=3" vous savez que la condition ne
sera satisfaite que si l'on a 4 la fois
"A=2” et "B=3". De meme, si la
condition devient “IF A=2 OR
B=3". vous savez qu'il suffira que
2” ou que “B=3" pour qu'elle
soit satisfaite, méme si l'on n’a pas
"B-3" lorsque "A=2”, ou "A=2”
lorsque "B=3”
Si l'on considére que “vrai” est cadé
"1" et que “faux” est codé par
=2 AND B=3" ne sera vrai
2” donne 1 et si "B=3”
. En revanche, pour que
"A=2 OR B=3" soit vrai, il suffit
que l'un des deux éléments 2"
ou "B-3” donne 1. Des principes
identiques sont utilisés pour les opé-
rateurs logiques en assembleur, avec
toutefois une distinction supplémen
taire pour le “OR”.
Le ET logique
Le code mnémonique de |'instruction
est AND. Elle réalise un "ET logi-
Pom's n° 14
Initiation a l’assembleur (4)
que” entre l'accumulateur et ce qui
suit le code AND, c’est-a-dire un
nombre ou le contenu d'une case-
mémoire désignée par Tun des
modes d’adressage déja étudiés. Le
résultat est remis dans l’accumula-
teur.
Le ET s‘effectue bit a bit, selon la
table de vérité suivante :
O ANDO =0
Q AND 1
1 AND 0 =0
1AND1=1
Si le bit 3 de l'accumulateur est 4 1
au moment du AND et que le bit 3
de l'élément "comparé” est a 0, on
retrouvera le bit 3 de l'accumulateur
40 l'issue du AND.
Supposons ainsi que I’accurnulateur
contienne "01001101" (soit_#$4D)
et l'adresse $18 11011000” (soit
#$D8). Aprés un AND avec le
contenu de I'adresse $18, on trou-
vera dans l’accumulateur la valeur
01001000” (soit #$48) : sur le bit 0
(le plus a droite) on a 1 et O qui
donnent 0, sur le bit 1 on a 0 et 0
qui donnent 0, sur le bit 2 on a 1 et
0 qui donnent 0, sur le bit 3 on a 1
et 1 qui donnent 1... et ainsi de
suite,
Cette instruction AND permet en
particulier de "forcer” des bits de
Yaccumulateur 0. Prenons la valeur
#SEF, par exemple, soit en binaire
"11101111". Un AND #$EF forcera
le bit 4 (le cinquigme en partant de
la droite) de l'accumulateur 4 0 sans
modifier les autres bits. Si l’'accumu-
lateur contenait "01110101", on au-
rait alors :
01110101
01100101
Tous les bits de l'accumulateur de-
meurent inchangés, sauf le bit 4 qui
passe a 0. Si ce bit 4 avait déja été a
0 avant AND, il le serait resté apres.
En tout état de cause, on est certain
de trouver O dans ce bit 4 aprés
AND.
En assembleur, cela s’écrirait :
LDA #$75
AND #$EF
et l'accumulateur contient maintenant
#$65 (01100101).
Kevenons un instant sur l'un des
programmes diillustration proposés
dans l'article précédent. Nous avions
vu qu'il fallait retirer # $80 au code-
clavier d'un chiffre pour obtenir son
code-écran en mode INVERSE. Pour
ce faire, nous avions utilise SBC
#$80. Or les codes écran concernés
AND 11101111 —
Gérard Michel
sont supérieurs 4 #$80 et leur bit 7
(le plus 4 gauche) est donc & 1. En
binaire, #$80 vaut 10000000 et le
complément @ 2 de #$80 vaut éga-
lement 10000000 (calculez-le pour
vous en convaincre). Retirer #$80
d'un octet dont le bit 7 est a 1 re-
vient donc finalement 4 mettre sim-
plement son bit 7 4 0 (1 + 1 — 0)
sans modifier ses autres bits. On
pourrait obtenir le méme résultat par
un AND #$7F (#$7F = 01111111)
qui force le bit 7 a 0 sans affecter les
autres. Dans la mesure oi l'on ne
connait pas toujours la valeur du bit
C avant d'exécuter SBC, cette se-
conde solution peut nous permettre
de faire l'économie d'une instruction
SEC en garantissant un résultat équi-
valent. En résumé, si le bit 7 de l'ac-
cumulateur est A 1, AND #$7F est
équivalent a SEC suivi de SBC
#380.
Les différents formats de l’instruction
AND sont (ADS désignant une
adresse symbolique)
e AND nombre = AND #$NN =
29 NN (par exemple 29 7F)
@ AND adresse page 0 = AND ADS
= AND $aa = 25 aa (le ET est
effectué entre l'accumulateur et le
contenu de l'adresse aa)
@ AND adresse quelconque = AND
ADS = AND $aaaa = 2D octet
has/octet haut (AND $ED42 = 2D
42 ED)
© AND adresse pa
ADS,X = AND $aa,X = 35 aa
© AND adresse quelconque,X
AND ADS,X = AND $aaaa.X
3D octet bas/octet haut
® AND adresse quelconqueY =
AND ADS,Y = AND $aaaa,Y =
39 octet bas/octet haut
@ AND (adresse,X) = AND (ADS,X)
= AND ($aa,X) = 21 aa
@ AND (adresse),Y = AND (ADS),Y
= AND ($aa),Y = 31 aa
L'exécution de AND exerce une ac-
tion sur le registre d'état : le bit Z (in-
dicateur de résultat nul) vaudra 1 si
Paccumulateur contient 0 apres AND
et O dans le cas contraire, tandis que
le bit N (indicateur de signe) sera a 1
ou 0 selon que le bit 7 de l'accumu-
lateur sera lui aussi 4 1 ou U aprés
AND.
zéro,.X = AND
Le ET logique "virtuel”
Linstruction BIT réalise le méme
traitement que AND mais ne remet
pas le résultat dans l’'accumulateur
qui reste done inchangé (d’ot le
qualificatif "virtuel”’). En revanche, le
il
x
a
=
a
a
|
|
zs
F |
|
rt
iBaRHREE
registre d'élal se trouve affecté par
BIT. D'une part, l'indicateur Z est
positionné comme pour AND et,
d'autre part, les bils 6 et 7 du
contenu de |'adresse donnée aprés
BIT sont copiés dans les bits 6 et 7
du registre d'état (indicateurs V et
N)
Supposons ainsi que vous voulliez sa-
voir & un instant donné si le bit 7 du
contenu de l’adresse $25 est a 0 ou
1 (nombre pasitif ou négatif en
complément a 2), mais sans pouvoir
modifier le contenu des registres A, X
et Y. Aprés une instruction BIT $25,
un test par BPL (branchement si in-
dicateur N = 0) ou par BMI (bran-
chement si N = 1) vous donnera
l'information souhaitée et vous per-
mettra d'orienter vos traitements en
conséquence. De méme, si c'est le
bit 6 qui vous intéresse, BIT $25
suivi de BVC ou BVS conduira au
résultat.
Linstruction BIT ne posséde que
deux formats
© BIT adresse page 0 = BIT ADS —
BIT $aa = 24 aa
© BIT adresse quelconque = BIT
ADS = BIT $aaaa = 2C octet
bas/octet haut
Le OU exclusif
Liinstruction EOR réalise un traite-
ment bit par bit avec les mémes opé-
randes et opérateurs que AND: ac-
cumulateur et autre chose, avec
résultat de l'opération remis dans
laccumulateur. La table de venite de
EOR est :
OEORO=0
QOFOR1=1
1EORO=1
1EOR1=0
Un bit du résultat ne sera “vrai” que
si lun des bits de départ est faux et
l'autre vrai; un EOR sur deux bits
pentques (0 ou 1) donne toujours
EOR #$FF permet de calculer le
complément 4 1 de |’accumulateur,
par exemple :
01101001 EOR 11111111 >
10010110
L'accumulateur contenait_ #$69
(01101001) et, apres EOR #$FF
(11111111), tous les bits 4 1 se re-
trouvant A 0) et récipraquement, il
contiendra #$96 (10010110). En as-
sembleur, cela s'écnirait :
LDA #$69
EOR #$FF
En revanche, EOR #$00 laisse le
contenu de l’accumulateur inchangé,
comme vous n'aurez aucune peine 4
le vérifier
L’exécution de EOR affecte les indi-
cateurs N et Z dans les mémes
conditions que celle de AND. Les
formats possibles sont :
@ EOR nombre = EOR #$NN — 49
NN
@ FOR adresse page 0 = EOR ADS
= EOR $aa = 45 aa
© EOR adresse quelconque = EOR
ADS = EOR $aaaa = 4D octet
bas/octet haut
© EOR adresse page 0.X = EOR
ADS,X = EOR $aa,X = 55 aa
e EOR adresse quelconque,X —
EOR ADS,X = EOR $aaaa,X =
5D octet bas/octet haut
© EOR adresse quelconque,Y =
EOR ADS,Y = EOR $aaaa,Y =
59 octet bas/octet haut
= EOR (ADS,X)
= EOR ($aa,X)
41 aa
EOR (adresse),Y = EOR (ADS),Y
= EOR ($aa),Y = 51 aa
e
m
io}
wn
ry
a
8
g
58
Fs
Le OU inclusif
Cest le méme, sur le principe, que
celui de l'Applesoft. Pour que le ré-
sultat soit "vrai", il suffit cette fois
que l'un des deux éléments de dé-
part le soit sans que |’autre doive né-
cessairement étre “faux”. Le code de
Vinstruction est ORA et elle utilise la
table de verite :
0 ORA0=0
OORA1=1
1ORAO0=1
1ORA1=1
Le ORA se fait entre l'accumulateur
et autre chose, le résultat étant tou-
jours remis dans I’accumulateur.
Cette instruction permet notamment
de forcer des bits 4 1 sans modifier
les autres. Par exemple, ORA #$10
(00010000 en binaire) force le bit 4
de l’accumulateur 4 1 :
10001011 ORA 00010000 —
10011011
En assembleur, cela s’écrirait -
LDA #$8B
ORA #$10
et l'on aurait alors #$9B (10011011)
dans I’accumulateur.
A noter que si le bit 7 de I’'accumula-
teur est 4 0, ORA #$80 (10000000)
Etope 3
ASL
éliminées les conséquences de la va-
leur de l'indicateur C, ADC #$80
donne le méme résultat que SBC
#$80 (—128 = 128 = $80).
De méme, lorsque le bit 7 de l’accu-
mulateur est 4 0, ORA #$80 revient
a lui retirer #$80 (le bit 7 passe a 1
lorsqu’on ajoute le complément 4 2
de hid qui vest autre que
#$80...
Cette a entre opérateurs
logiques et ADC/SBC ne peut toute-
fois étre exploitée simplement que
pour des calculs sur un octet, car
AND et ORA ne manipulent pas la
retenue dont on a besoin dés que
Yon passe a des opérations sur deux
octets.
ORA affecte le registre d'état exacte-
ment comme AND et EOR (bits N et
Z); les formats de l’instruction sont :
@ ORA nombre = ORA #$NN =
09 NN
* ORA adresse page 0 = ORA ADS
= ORA $aa = 05 aa
@ ORA adresse quelconque = ORA
ADS = ORA $aaaa = OD octet
bas/octet haut
© ORA adresse page 0,X = ORA
ADS,X = ORA $aa,X = 15 aa
@ ORA adresse quelconque,X =
ORA ADS,X = ORA $aaaa,X =
1D octet bas/octet haut
e@ ORA adresse quelconque,Y =
ORA ADS,Y = ORA $aaaa,Y =
19 octet bas/octet haut
© ORA (adresse),Y = ORA (ADS),Y
= ORA ($aa),Y = 11 aa
Décalages et rotations
Décalage 4 gauche : ASL
L’instruction ASL agit sur un octet
selon le principe suivant :
— un 0 entre dans Ioctet par la
droite;
— tous les bits de l'octet sont donc
poussées vers la qauche:
— le bit 7, qui était le plus 4 gauche,
n'a plus de place dans l’octet et il
“tombe” dans le bit de retenue C.
Etope 1
FE ome fF
ev
om
F] emo
Etope 2
est équivalent a CLC suivi de ADC
#$80. Si le bit 7 de l'accumulateur
est 4 1, vous aurez sans doute cons-
taté que cest AND #$7F
(orttat11) qui équivaut a4 CLC
suivi de ADC #$80 puisque, une fois
Prenons par exemple octet
"10100111" Si on lui fait subir un
décalage a gauche, il deviendra
"01001110" et le bit 7 qui était a1
se retrouve dans la retenue: C=1
aprés cette opération.
Pom’s n° 14
Ouvrons maintenant une petite pa-
renthése sur le systéme décimal.
est évident pour tout le monde que
2*10 = 20. Si l'on examine ce résul-
tat de plus prés, on peut dire que le
chiffre 2 est en fait poussé vers la
gauche par un O qui entre par la
droite et méme, en raisonnant sur un
seul chiffre, qu'il tombe finalement
dans un chiffre de retenue C que
l'on remet ensuite devant le résultat
(en binaire, une retenue ne peut va-
loir que 0 ou 1, mais elle peut pren-
dre toute valeur entiére entre 0 et 9
en décimal). Finalement, la multipli
cation par 10 en décimal n'est rien
d’autre qu’un décalage des chiffres
vers la gauche, poussés par un 0 qui
rentre par la droite.
En binaire, et en toute logique, un
décalage a gauche revient 4 multi-
plier par 2 octet qui fait l'objet du
décalage.
Soit par exemple l’octet "01110101"
(117 en décimal); a l'issue du déca-
lage, on a “11101010” et C
vérifie bien que "11101010" = 234
en décimal = 2«117.
De méme, si on décale a gauche
"10100111" (167 en décimal), on
obtient "01001110" (78) et C=1. Si
Ton considére cette retenue de 1
comme le poids fort du résultat, on
vérifie que 256 1 78 = 334 = 24167.
Voyons maintenant les formats de
Yinstructon ASL avant d’examiner
plus en détail le probléme de la mul-
tiplication par 2 sur deux octets ;
@ ASL accumulateur = ASL = 0A
@ ASL adresse page 0 = ASL ADS
= ASL $aa = 06 aa
© ASL adresse quelconque — ASL
ADS — ASL $aaaa = OE octet
bas/octet haut
@ ASL adresse page 0,X — ASL
ADS,X = ASL $aa,X = 16 aa
@ ASL adresse quelconque.X =
ASL ADS,X = ASL $aaaa,X =
1E octet bas/octet haut
Soit un nombre stocké sur deux
octets O1 (poids faible) ct O2 (poids
fort). Multiplier ce nombre par 2 re-
vient a:
— décaler O1 a gauche
— décaler O2 a gauche
— ajouter 4 l'octet O2 ainsi multiplié
la retenue éventuelle provenant du
décalage (multiplication) de O1.
Les lignes 1 4 17 du Programme 1
vous présentent une premiére mé-
thode pour effectuer ce calcul, a
l'aide des instructions que nous
connaissons déja. On initialise une
variable R (retenue) 4 0, mais on la
fait passer 4 1 si le test BCC échoue
aprés ASL O1 (l'échec signifie que
cst un 1 qui est tombé dans la rete-
nue C). Ensuite, on charge I'accumu-
lateur avec O2, on le décale, on lui
ajoute la valeur de R (0 ou 1) et on
remet le résultat dans O2. Le sto-
Pom's n° 14
ckage intermédiaire de la retenue
nous est imposé par le fait que ASL
O02 modifierait le bit C qui ne pour-
rait donc garder a coup sar la valeur
qu'il avait aprés ASI. O1
Ne regardez pas trop vite la suite du
Programme 1, mais sachez néan-
moins qu'il existe une maniére plus
simple de parvenir au méme résul-
tat...
Précisons pour finir que I’exécution
de ASL agit sur le bit C, bien sar,
mais aussi sur l'indicateur N (mis 4 1
si le bit 7 de l'octet est 4 1 apres
ASL, et 4 0 sinon) et l'indicateur Z
(mis a 1 si l'octet ne contient plus
que des 0 aprés ASL, 4 0 sinon).
Décalage 4 droite : LSR
Mémes causes, mémes effets, mais
dans l'autre sens !
— un 0 entre dans I’octet par la gau-
che;
— tous les bits sont repoussés vers la
droite;
— le bit 0, le plus a droite, n'a plus
de place et il tombe dans la retenue.
Etope 1
LSR
Poids fort (OZ) par 2. S’il est bien di-
visible par 2, c’est-A-dire si son bit 0
est a 0, on aura C=0 apres LSR.
Dans le cas contraire, on aura une
retenue C=1 qu'il faudra remettre
dans le bit 7 de l’octet de poids fai-
ble (OL) aprés avoir également divisé
ce dernier par 2. Reprenons l'exem-
ple de 334/2 pour illustrer la chose
Nous avons déja vu
"10100111" (167) * 2 =
"01001110" (78) plus une retenue
C=1 qui est en fait un octet de poids
fort 00000001”.
Si l'on divise "01001110" par 2 au
moyen de LSR, on _ obtient
"00100111", soit 39 qui est bien la
moitié de 78, mais, pour retrouver
notre 167 de départ, il nous manque
128, soit la moitié de 256. Avec le
bit 7 & 1, "00100111" devient
"10100111", soit 167, et l'on peut
prendre ce 1 dans C qui sera juste-
ment a 1 aprés le décalage a droite
de “00000001”.
Supposons maintenant que le poids
fort soit "00000010" et le poids fai-
Etope 3
o—[b[p
>| | mem [i
Etape 2
Sans revenir sur les subtilités de la
division par 10, et compte tenu de ce
qui préc&de, vous avez déja deviné
que l'instruction LSR permet notam-
ment de diviser un octet par 2. Par
exemple :
01001110" (78 en decimal) devient
one (39) aprés LSR, avec
”11101010” (234) devient
ayn” (117) aprés LSR, avec
Mais pour retrouver le résultat de
334/2, puisque nous avions calculé
tout a l'heure que 167*2 = 334, il
faut de nouveau travailler sur deux
octets. Nous y reviendrons apres
avoir donné les formats de LSK.
LSR accumulateur = LSR = 4A
© LSR adresse page 0 = LSR ADS
= LSR $aa = 46 aa
e LSR adresse quelconque = LSR
ADS = LSR $aaaa = 4E octet
bas/octet haut
© LSR adresse page 0,X =
ADS,X = LSR $aa,X = 56 aa
e LSR adresse quelconque,X —
LSR ADS,X = LSR $aaaa,X =
SE octet bas/octet haut
Pour diviser par 2 sur deux octets, il
faut tout d’abord diviser l'octet de
LSR
ble "01001110", ce qui correspond
@ (2*256) + 78 = 59. La division
de "00000010" par LSR donne
00000001" avec C=0, et celle de
"01001110" donne toujours
"00100111", d’oa un résultat a ce
stade de (1*256) + 39 = 295, qui
est bien la moitié de 590. Il n'est pas
nécessaire cette fois de modifier le bit
7 de l'octet de poids faible, car le
poids fort de départ était pair, ce que
C=0 aprés LSR pourra nous indi
quer.
Ce mécanisme des divisions par 2
serait bien sr plus facile 4 analyser si
l'on travaillait directement sur 16 bits
Reprenons ainsi nos deux exemples :
© 334 = 0000000101001110
LSR 0000000101001110 donne
0000000010100111 ou encore
00000000” et "10100111"
© 590 = 0000001001001110
LSR 0000001001001110 donne
0000000100100111 ou encore
00000001” et "00100111"
Comme nous sommes obligés de tra-
vailler sur 8 bits, c'est le bit C aprés
LSR sur le poids fort qui sert de
“pont” entre les deux parties du
nombre sur 16 bits
Les lignes 19 4 30 du Programme 1
vous présentent une premiére meé-
LL as
thode pour effectuer ce type de cal-
cul. On initialise une variable R a
#$80, soit 10000000, et on décale
le poids fort O2 par LSR. Si le test
BCS échoue, c'est que C=0 apres
ce premier LSR, dans ce cas, ASL R
nous donnera simplement OUUUU0U0
dans R. Ensuite, on charge l'accumu-
lateur avec le poids faible O1 et on
le décale. Avec l'instruction ORA R,
on fait donc ORA 10000000 si C
était a 1 apres LSR O2, ce qui force
le bit 7 de l'accumulateur a 1, ou
ORA 00000000 qui laisse l'accumu-
lateur inchangé dans le cas contraire.
Le résultat est enfin remis dans O1.
A noter que le hit N du registre
d'état est toujours 4 0 aprés LSR,
puisque le bit 7 du “dernier résultat”
devient justement 0 Ie hit C prend
la valeur du bit qui tombe dedans, et
Vindicateur Z est positionné comme
pour ASL_
Rotation a gauche : ROL
L'instruction ROL fonctionne comme
ASL, sauf sur un point fondamental :
ce n'est pas systématiquement un 0
qui rentre dans l’octet par la droite,
mais la valeur du bit de retenue C (0
ou 1). Le mécanisme est donc le sui-
vant:
— le bit de retenue C rentre par la
droite:
— les bits sont poussés vers la gau
che;
— le bit 7 de l’octet tombe dans la
retenue.
Etope 3
ROL
poids fort revient a le décaler vers la
gauche, puis A donner a son bit de
droite la valeur de la retenue résul-
tant du décalage du poids faible. On
obtiendrait le méme résultat si le bit
rentrant lors du décalage était juste-
ment ce bit de retenue, et c'est exac-
tement ce que permet de faire l'ins-
truction ROL.
Vous trouverez cette seconde mé-
thode de calcul dans les lignes 32 4
36 du Programme 1. Nul doute
qu'elle vous paraitra plus simple que
la premiére.
Autre exemple d'utilisation de ROL,
le découpage des octets. Supposons
ainsi que vous vouliez récupérer dans
un octet O2 les 4 bits de gauche
d'un octet Ol, qui, 4 eux seuls,
constituent une information dont
vous avez besoin (si O1=#$A2, c'est
davoir O2=#$0A qui vous inte-
resse) Le petit programme suivant
vous permettrait d’y parvenir :
LDX #4
LDA #0
STA O02
LDA O1
BO ROL
Formats de l'instruction ROL :
@ ROL accumulateur = ROL = 2A
ROL adresse page 0 = ROL ADS
= ROL $aa = 26 aa
® ROL adresse quelconque = ROL
Etope 1
— i+
the
j= 2
Etope 2
Si le bit C est a 0 avant l'exécution
de ROL, cette derniere est equiva-
lente A ASL. mais le fait important
est que ROL permet de modifier l’or-
dre des bits a l'inténeur d'un octet
ou de faire passer des bits d’un octet
a un autre.
Reprenons notre probleme de la
multiplication par 2 sur deux octets.
lest simple de multiplier le poids fai-
ble grace 4 ASL, mais la difficulté ré-
sulte ensuite de la prise en compte
d'une éventuelle retenue aprds la
multiplication du poids fort par ce
méme ASL. La multiplication par 2
consiste en un décalage & gauche
avec entrée d'un 0 a droite; lorsque
Yon ajoute une retenue 0 ou 1 a un
octet ainsi multiplié, son bit de droite
ne peut prendre que les valeurs 0 ou
1 sans qu'il y ait de retenue se pro-
pageant a l'intérieur de T'octet. En
d'autres termes, la multiplication du
PF ee
10
ADS = ROL $aaaa = 2E octet
bas/octet haut
e@ ROL adresse page 0.X = ROL
ADS,X — ROL $aa,X = 36 aa
@ ROL adresse quelconque.X
ROL ADS,X = ROL $aaaa,X =
SE octet bas/octet haut
L'exécution de ROL affecte le regis-
tre d'état comme celle de ASL.
Rotation 4 droite : ROR
ROR est 4 ROL ce que LSR est 4
ASL! Cette fois, le bit C rentre par
Etope 1
ROR
la gauche, repousse les autres bits
vers la droite et le bit 0 tombe par
conséquent dans la retenue. Si C=0,
ROR est équivalent 4 LSR
Vous concevez sans doute, surtout si
vous lisez le Programme 1 plus vite
que prévu, que ROR peut nous étre
fort utile pour notre division par 2
sur deux octets. Tout le probléme
consistait justement a faire prendre
au bit 7 du poids faible décalé a
droite la méme valeur que ceile du
bit C aprés le décalage 4 droite du
poids fort. Il est done bien agréable
de pouvoir décaler ce poids faible en
faisant rentrer a la place du bit 7 la
retenue en question, comme vous le
verrez dans les lignes 38 a 42 du
Programme 1.
Pour en revenir maintenant au dé-
coupage des octets, si l'on veut récu-
pérer dans O2 les 4 bits de droite de
Ol, il suffit de remplacer dans le pro-
gramme précédent "BO ROL” par
"BO ROR". C'est bien toujours par
"ROL O02” qu'il faut faire rentrer les
bits dans 02: si vous faites "ROR
02" et si O1=#$2F, par exemple,
vous retrouverez #$FO dans O2 et
non #$0F
Formats de instruction ROR :
© KOK accumulateur = KOK = 6A
© ROR adresse page 0 — ROR ADS
= ROR $aa = 66 aa
® ROK adresse quelconque = KOR
ADS — ROR $aaaa — 6E octet
bas/oclet haut
ROR adresse page U.X = KOK
ADS,X = ROR $aa,X = 76 aa
e@ ROR adresse quelconque,X
ROK ADS.X = KOK $aaaa,X
7E octet bas/octet haut
L'exécution de ROR affecte les
mémes indicateurs du registre d'état
que celle de ROI
Hl
Découpage du_ registre
d'état
Toutes ces instructions de décalage
et de rotation permettent de faire
sortir des bits d’un octet, de les faire
rentrer dans un autre... et nous
allons maintenant les utiliser pour dé-
couper et analyser un octet bien spé-
cial : le registre d'état du micro-pro-
cesseur. Pour ce faire, nous évo-
querons d’abord deux nouvelles ins-
tructions tenant a l'usage de la pile.
Nous avons déja vu qu'il était possi-
Etope 2
Fey mp
| | mem fe
Pom's n° 14
ble de déposer le contenu de I'accu-
mulateur au sommet de la pile par
PHA et de récupérer le sommet de la
pile dans l'accumulateur par PLA.
Ces mémes manipulations sont possi-
bles avec le registre d'état au moyen
de PHP (08), correspondant 4 PHA,
et de PLP (28), correspondant a
PLA. Alors qu'il n’existe pas d’ins-
truction équivalente 4 STA pour sto-
cker le registre d’état dans une case-
mémoire, on peut y parvenir malgré
tout grace a PHP suivi de PLA, qui
permettent de récupérer le contenu
du registre d'état dans I’accumula-
teur.
Les lignes 44 4 66 du Programme 1
constituent une sous-routine qui dé-
coupe et affiche a l’écran le registre
d'etat bit par bit. Nous allons en dé-
tailler le fonctionnement,
— Lignes 45 et 46: le registre sera
stocké dans la variable P dés l'appel
de la routine et c'est donc le contenu
du registre au moment de cet appel
que nous analyserons. M sera utilisé
pour l’affichaye : il contiendra 0 ou 1
selon la valeur des indicateurs du re-
fem d'état et "+" pour le bit inuti-
isé.
— Lignes 47 4 49: on récupére le
registre par le biais de la pile et on le
stocke dans P.
— Lignes 50 4 52: X servira de
compteur de boucle (il y a & bits &
découper) et on initialise M a 0.
— Lignes 53 et 54: par ASI. P. on
fait sortir les indicateurs du registre
dans l'ordre “bit 7", “bit 6”, ..., “bit
0”. Par ROL M, le bit sorti du regis-
tre et tombé dans la retenue rentre
dans M par la droite, ce qui garantit
que M contiendra toujours
00000000" ou "00000001", done
Ooul,
— Lignes 55 et 56: si X=6, on est
au bit 5 du registre qui n'est pas un
indicateur. On saute alors en SO
Pour afficher "*” (#$AA est le code-
écran de "*" en mode NORMAL).
— Lignes 57 a 60: pour atfficher 1
ou 0, on ajoute #$B0 au contenu de
afin d'obtenir le code-écran en
mode NORMAL de "1" ou 0”. On
utilise ensuite la routine standard
d'affichage du moniteur qui débute
en $FDFO.
— Lignes 61 4 64: LSR M permet
de faire rentrer un 0 dans M par la
gauche et de faire ressortir le bit qui
était entré par la droite lors du ROL
M; apres cette instruction, M est donc
ré-initialisé 4 "00000000". Tant que
X est différent de 0 aprés DEX, on
boucle pour traiter tous les bits du
registre en séquence. Si X=0, on
sort de la routine.
Le Programme 2 sert de jeu d’essai
pour la routine analysée ci-dessus
On fait exécuter certaines instruc-
tions, puis on va afficher le registre
d'état qui en découle par un JSR
Pom’s 1° 14
TEST (TEST appelle la routine du
Programme 1 en $32F, puis une
routine du moniteur en $FC62Z qui
envoie un RETURN 4 lécran, et ce
afin de n’afficher qu'un registre par
ligne).
Le programme Basic P2.DEMO
lance ce Programme 2 et vous
donne finalement a l'écran une suc-
cession de registres dont chacun cor-
respond 4 |’état des indicateurs a I'is-
sue des instructions qui précédent le
JSR TEST ayant provoqué son affi-
chage. Intéressez-vous surtout aux
deux bits de gauche (indicateurs N et
V) et aux deux bits de droite (indica-
teurs Z et C).
Sur la premiere ligne, par exemple,
vous voyez :
11*10000, soit :
N=1, V=1, Z=0 et C=0.
Cet état résulte de l’opération #$40
+ #$40, ou encore 64 + 64 en dé-
cimal, ou enfin “01000000” +
“01000000” en binaire. A Tissue de
cette opération, le "dernier résultat”
est "1000000" : il est négatif (bit 7 4
1), d’oa N=1, il y a eu débordement
(retenue du bit 6 sur le bit 7), d’oa
V=1, le résultat est different de 0,
dot Z=0, et il n’y a pas eu de rete-
nue extérieure, d’ot C=0.
Amusez-vous (mais oui!) 4 analyser
de cette facon les indicateurs corres-
pondant aux autres opérations du jeu
dessai. Ceci vous permettra de véri-
fier les indications “‘littéraires” don-
nées pour chaque instruction étudiée
quant son influence sur le registre
d'état et leur donnera un caractére
plus concret.
Recodage des caractéres
Les codes ASCII, sous la forme des-
quels les caractéres disponibles au
clavier de votre Apple sont stockés
en mémoire, sont tous inférieurs a
128. Ce n'est que pour I'affichage &
Vécran et la saisie-clavier que l'on
peut trouver des codes de valeur su-
périeure 4 127.
Si l'on se rappelle que 127 = #$7F
en hexa et “O1111111” en binaire,
on en déduit que tous les nombres
compris entre 0 et 127 en décimal
ont un bit 7 4 0 et que ce bit, ayant
la méme valeur pour tous, ne peut
servir a différencier un nombre d'un
autre. En d'autres termes, 7 bits suffi-
sent pour coder tous les caractéres
disponibles: le huitigme n'apporte
aucune information supplémentaire.
Par voie de conséquence, il doit étre
possible de coder 8 caractéres en 7
octets: si l'on récupére pour les 7
Premiers caractéres la place occupée
par les bits "inutiles”, on dispose de
7 bits libres qui permettent de coder
un huitiéme caractére. Cette possibi-
lité présente un intérét certain pour
quiconque voudrait un jour dévelop-
per son propre systéme de gestion
de fichiers de données, sans passer
par DOS 3.3 ou autre, car si une dis-
quette de 140K, par exemple, peut
contenir 143360 caractéres de 8 bits,
elle _peut stocker 163840 caractéres
de 7 bits. Le gain de capacité n'est
pas tout a fait négligeable...
Nous nous bornerons pour I’instant 4
voir comment on peut recoder 8 ca-
ractéres en 7 octets et les récupérer
ensuite en 8 octets pour qu’ils restent
exploitables par I'Applesoft, le moni-
teur ou le DOS.
Le programmme Basic PR3.DEMO
demande 8 caractéres au clavier et
les POKE & partir de |l'adresse
$9000. Il appelle alors une routine,
dont le source est Programme 3, qui
recode le tout en 7 octets, les dé-
place a l'adresse $9100 (afin qu'il
n’y ait pas de doute sur l'efficacité du
recodage) et les reconstitue en 8
octets. Le programme Basic récupere
enfin les 8 caractéres par des PEEKs
a partir de l'adresse $9100.
Pour vous aider dans l'analyse de la
toutine en assembleur, voici les prin-
cipes du traitement réalisé :
© Sur le premier octet, il y a un bit a
récupérer 4 gauche. On fait sortir le
bit 7 de l'octet par ASL. Par un LSR
sur le deuxiéme octet, on fait tomber
dans la retenue son bit 0 puis, par
un ROR sur le premier octet, on [ait
rentrer ce bit 0 du deuxiéme octet
dans le premier tout en remettant a
leur place les bits 0 a 6 de celui-ci.
© Sur le deuxieme octet, il y a donc
maintenant 2 bits a récupérer. Par
deux ASL successifs, on fait sortir les
bits 6 (ancien bit 7) et 7 (0 entré lors
du LSR). En faisant ensuite deux fois
“LSR sur le troisiéme octet suivi de
ROR sur le deuxiéme”, on récupére
dans les bits 6 et 7 du deuxiéme les
bits 0 et 1 du troisiéme.
© Et ainsi de suite jusqu’au septiéme
octet sur lequel on fait sept fois ASL,
puis sept fois "LSR le huitiéme -
ROR le septiéme™. Dans ce dernier
octet, on a finalement le bit 6 du
septiéme de départ en position 0, et
les bits 0 a 6 du huitiéme octet aux
positions 1 a 7.
® Pour retrouver 8 octets a partir de
7, on commence par faire tomber le
bit 7 du premier octet dans la rete-
nue par ASL. Puis on enchaine ROL
sur le deuxiéme, ROL sur le troi
siéme... ROL sur le huitigme : le bit
7 de chacun des 7 octets se retrouve
ainsi en bit O dans le suivant. Un
LSR sur le premier octet lui redonne
alors sa forme de départ (remise en
place des bits décalés 4 gauche par
ASL et rentrée d'un 0 en position 7)
© Le deuxiéme octet a maintenant
récupéré ses 7 bits “utiles”; il lui
teste 4 en céder un (son bit 7 actuel)
qui appartient au troisiéme (c’était
ETS
Pabisiecnitet tty
ll
son bit 0 de départ). On fait donc
ASL sur le deuxiéme, suivi de ROL
sur le troisigme, ROL sur le qua-
triéme... ROL sur le huitiéme. Un
LSR sur le deuxiéme octet lui re-
donne enfin sa forme intiale.
® Ce mécanisme se poursuit jusqu’a
ce que l'on ait traité de méme le sep-
tiéme octet (ASL octet 7 - ROL octet
8 - LSR octet 7). Le huitiéme octet a
des lors retrouvé ses 7 bits utiles, et
un AND #$7F force son bit 7 4 0
pour garantir un code ASCII inférieur
4 128. Il ne reste plus qu’a rendre la
main au Basic pour qu'il récupére les
8 caractéres et les affiche.
0325 a1
Programme 1 0328 32
0325 33
0325 0606 34
**END OF PASS 1 0327 2607 35
**END OF PASS 2 0327 60 36
032A 37
0300 1 ORG $300 032A 38
u3u0 2 jMULTIPLICATIUN PAR 2 SUR 2 UCIETS| 032A 39
0300 3 jPREMIERE METHODE 032A 9607 40
0300 4 01 2 $6 032C 6606 4
0300 5S 02 EPZ $7 O32E 60 42
0300 6 eR EPZ $8 032F 43
0300 AV00 7 LDA #0 032F 44
0302 8508 a STA R 032F 45
0304 0404 9 ASL O1 032F 46
0304 9002 10 BCC SUITE! 032F 08 a7
0308 E408 At INC R 0330 48 as
030A ASO? 12 SUITE! LDA 02 0331 e518 ae
030C CA 13 ASL 0333 A208 so
O30D 186 14 cLe 0335 A700 St
O30E 6508 is ADC R 0337 6517 s2
0310 8507 16 STA 02 0337 0618 33
0312 60 17 RTS 0338 2617 oq
0313 18 ; 033D E006 ss
0313 19 ;DIVISION PAR 2 SUR 2 OCTETS 033F FOOE 56
0313 20 ;PREMIERE METHODE 0341 ASI? 57
0313 A’80 21 LDA #80 0343 18 58
0315 8508 22 STA R 0344 69B0 3°
0317 44607 23 LSR 02 0346 20F0FD 60
n3i9 B002 = 24 BCS SUITE? 0349 4619
osie 0608 = 25 ASL R 0348 CA 62
031D ASO6 26 SUITE2 LDA O1 034C DOEB 63
O31F 44 27 LsR O34E 60 64
0320 oS090 26 ORA R 034F A?AA 6s
0322 8506 29 STA O1 0351 DOFS 66
0324 60 30 RTS 0353 6
Récapitulation 1
*300.352
0300- AY 00 85 08 06 06 YO U2
0308- Eé 08 AS 07 0A 18 65 08
0310- 85 07 40 AP 80 85 08 44
0318- 07 BO 02 04 08 AS 04 4A
0320- 05 08 85 06 60 06 06 26
0328- 07 60 46 07 66 06 60 08
jMULTIPLICATION PAR 2 SUR 2 OCTETS
jDEUXIEME METHODE
ASL Of
ROL 02
RTS
i
}DIVISION PAR Z SUR 2 UCTETS
;DEUXIEME METHODE
LSR UZ
ROR Of
RTS
DECOUPAGE DU REGISTRE D’ETAT
EPZ $18
EPZ $19
ZV
st ASL P
s2 JSR $FDFO
so LOA #SAA
0330- 68 85 18 AZ 08 AY OU BD
0338- 19 06 18 26 19 EO 06 FO
0340- 0£ AS 19 18 49 BO 20 FO
0348- FD 46 19 CA DO EB 60 A?
0350- AA DO FS
Programme 1.DEMO (7): PRINT "MULTIPLICATION 1
7 "R
40 POKE 7,2 / 256: POKE 6,2 - 256
1 REM DEMONSTRATION DES MULTIPLI * PEEK (7): PRINT : CALL 76
CATIONS ET DIVISIONS PAR 2 SU 8+ 19:R = PEEK (6) + 256 *
R 2 OCTETS PEEK (7): PRINT "DIVISION 1
2 REM LA DIVISION PAR 2 D’UN NOM 2 "R
BRE IMPAIR DONNE BIEN SUR UN 50 POKE 7,2 / 256: POKE 6,2 - 256
RESULTAT APPROCHE PAR DEFAUT * PEEK (7): PRINT : CALL 76
(LE CALCUL NE PORTE QUE SUR D 8 + 37:R PEEK (6) + 256 *
ES NOMBRES ENTIERS> PEEK (7): PRINT "MULTIPLICAT
5 REM ION 2: 'R
6 REM 60 POKE 7,2 / 256: POKE 6,2 - 256
10 PRINT CHR (4)"BLOAD PROGRAMM * PEEK (7): PRINT : CALL 76
E 1.080" @ + 42:R = PEEK (6) + 256 *
20 TEXT : HOME : INPUT “VOTRE NOM PEEK (7): PRINT “DIVISION 2
BRE : "3;Z: IF 2 > 32767 THEN : "R
20 80 PRINT : PRINT "MULT. BASIC : *
30 POKE 7,2 / 256: POKE 6,2 - 256 z* PRINT : PRINT "DIVISIO
* PEEK (7): PRINT : CALL 76 N BASIC : "2 / 2: PRINT : GET
@:R = PEEK (6) + 256 * PEEK 2$: GOTO 20
Fn ee
12
Pom’s n° 14
LILLE..... LILLE..... LILLE..... LILLE
—
Apple //e, Apple ///, Mac-Intoch,
BFM 186. dragon, oric, alice, casio
m.b.d.c.
disquettes, Flexettes, 3M, Verbatim
listing, rubans encreurs.
m.b.d.c.
m.b.d.c le conseil, le matériel, les périphériques
“""*** les logiciels, les consommables,
m.b.d.c. !© S.A.V. sur place.
le Service Complet.
m.b.d.c. 172, RUE SOLFERINO. 59800 LILLE — TEL. (20) 57.91.87
. OUVERT DU MARDI AU SAMEDI DE 9h30 4 12h ET DE 1430 a 19h
AE355 : machine de bureau
ux, conservation marges-tabulation:
c RDEX “3
201, rue Carnot AF .00
94120 FONTENAY-S/BOIS 4, Op
+ AE 355, la super compact qui voit loin : Tey Aiyare 1110
une machine @ écrire électronique de bureau
une imprimante pour micr«
8 répond di
Lan
SF ooryar
eo ou
1049 20aa1n © 39 JSR TEST
Programme 2 104C ASFF 40 LDA HeFF
104E 2980 41 AND He80
1050 20Aa10 42 JSR TEST
1053 A960 43 Loa #e80
**END OF PASS 1 1055 2901 44 AND Ai
*#END OF PASS 2 1057 20A410 45 JSR TEST
1050 AIFF 46 LOA #SFF
1000 4 ORG #1000 105C 85CE a7 STA SCE
1000 2 JEU D’ESSAI POUR LE REGISTRE D’ETAT| i95E 24cE 48 BIT $cE
1000 3 3 1060 20A410 49 JSR TEST
1000 Az00 4 Loa #0 1063 A9FF 50 LDA #SFF
1002 48 5 PHA 1065 A200 St LOX #0
1003 28 é PLP 1067 @6CE 52 STX $CE
1004 A?40 7 LDA #840 1049 24CE 53 BIT $CE
1006 18 8 cic 1068 20a410 «54 JSR TEST
1007 6940 9 ADC #840 106E AgII 55 LOA Heit
ina9 20a410 «10 JSR TEST 1070 4914 56 EOR ##11
100C A940 1 LbA 4840 1072 20A410 57 JSR TEST
100E 38 12 ‘Sec 1075 AFF se LOA #SFF
100F E930 13 SBC #30 1077 4980 39 EOR #$80
1011 20a410 14 JSR TEST 1079 20a410 © 60 JSR TEST
1014 Az40 15 LOA #840 1070 AY7F 61 LOA #87F
1016 38 16 SEC 107E 0980 62 ORA #80
1u1/ EvS0 17 SBC #S50 1080 20A410 63 JSR TEST
1019 200410 18 JSR TEST 1083 A940 64 LDA #$40
ie 101C A940 19 LDA #840 1085 0940 65 ORA #$40
4 101E 38 20 SEC 1087 200410 66 JSR TEST
eB 101F E750 21 SBC #$50 1084 A940 6? LOA #$40
1021 E900 22 SBC #0 108 0900 48 ORA #0
122 nadia §=—28 JSR TEST 108E 20410 49 JSR TEST
& 1026 A900 24 Loa #0 1091 A900 70 LoA #0
1028 20041025 JSR TEST 1093 09700 a ORA #0
1020 ASFF 26 LOA #$FF 1095 20A410 72 JSR TEST
102D 20A410 © 27 JSR TEST 1098 AIFF 73 LOA HSFF
1030 A708 28 LOA #8 109A BSCE 74 STA $CE
1032 C708 2 CHP ae 1U¥C C6CE 75 DEC $ceE
1034 ZUAg10 30 JSR TEST 109E 24CE 76 BIT 3CE
1037 AvOB 31 LDA #8 10A0 200410 77 JSR TEST
1039 C910 32 CMP #910 10A3 60 78 RTS
1038 200410 33 JSR TEST 10A4 202F03 79 TEST JSR $32F
103E A908 34 LDA #e 10A7 2062FC 80 JSR $FCS2
1040 C902 35 CMP 42 10AA A900 a1 LOA Wo
1042 20a410 36 JSR TEST tnac 48 82 PHA
1045 AgFF a7 LDA HSFF 1080 28 83 PLP
1047 297F 38 AND #67F 10AE 40 24 RTS
. 1020- 50 E9 00 20 A4 10 AY 00 ©=:10468- CE 24 CE 20 Aa 10 AP 11
Récapitulation 2 1028- 20 A4 10 AP FF 20 A4 10 1070- 49 11 20 Ad 10 AD FF 49
1030- AY 08 CF O08 20 Ad 10 AF 1078- 80 20 A4 10 AP 7F OF 80
1038- 08 CF 10 20 A4 10 AY OB —1080- 20 AA 10 AF 40 OF 40 20
1040- CP 02 20 Ad 10 AP FF 29 1088- A4 10 AP 40 09 00 20 Aa
1000- A? 00 48 28 AP 40 18 69 1048- 7F 20 A4 10 AS FF 29 80 1090- 10 A9 00 O09 O00 20 A4 10
1008- 40 20 A4 10 AY 40 38 EP 1050- 20 A4 10 AP 80 29 01 20 1098- A9 FF 85 CE Cé CE 24 CE
1010- 30 20 A4 10 A9 40 38 EP «=1058- Ad 10 AY FF 85 CE 24 CE 10A0- 20 Ad 10 60 20 2F 03 20
1018- 50 20 Ad 10 AP 40 38 EF 1060- 20 Ad 10 AP FF AZ 00 86 10A8- 62 FC AY 00 48 2B 60
Programme 2.DEMO 6 REM
id 10 D$ = CHR$ (4): PRINT D$*BLOAD
1 REM JEU D’ESSAI POUR LE DECOUP PROGRAMME 1.0BU": PRINT D$"BL
AGE DU REGISTRE D’ETAT OAD PROGRAMME 2.0BJ": TEXT : HOME
5 REM : CALL 4096
030F SEOO70 14 LSR 01,
Programme 3 0312 CA 15 DEX
0313 7E0090 16 ROR 01,X
*#END OF PASS 1 0316 8B 17 DEY
##END OF PASS 2 0317 DOFS 18 BNE Si
0319 A404 19 LDY SY
06300 1 ORG $300 0318 ca 20 INY
0300 . § o3ic Ee 21 INX
0300 3 ;CODAGE DE 6 CARACTERES EN 7 OCTETS 0310 E007 22 CPx #7
0300 4 s¥ EPZ $6 O31F DOES 23 BNE S32
0300 35 ol EQuU $9000 032i 24 5
0300 Az00 6 LOX #0 0321 25 j TRANSFERT DES 7 OCTETS RECODES
0302 ADUI 7 LOY #1 0321 26 0 EQU $7100
0304 8406 8 s3 STY SY 0321 A206 27 LDX #6
0306 1£0090 9 sO ASL 01,X 0323 BDOOT0 28 TO LDA O1,x
0309 8B 10 DEY 0326 900091 29 STA 0,X
030A DOFA M BNE SO 0329 CA 30 DEX
030C A406 12 LOY SY 032A 10F7 31 BPL TO
O30E ES 13: 8} TNX 032C 32 3
SESE
Pom’s n° 14
jRECONSTITUTION DE 8 CARACTERES A PARTIR DE 7 UCTETS
o32c 34° «SxO EPZ $8
032C 35 «SxI EPZ $9
032C Az00 36 LOX #0 0343 88 bid cy
032E 8608 37 $6 STX SxO 0344 SOF3 ay BYC $4
0330 8609 38 STX SX1 0346 68 so 6s5 PLA
0332 E609 39 INC SX1 0347 AéOB si LOx sxo
0334 1E0091 40 ASL 0,x 0349 SEOO91 52 LSR 0.x
0337 Aso? ai LOX sx1 034C E8 53 INX
0339 3Fn091 4942 Sa ROL 0,X 34D E007 S4 CPX 47
033C 08 42 PHP 034F DODD ss BNE Sé
033D ES a4 INK 0351 BDOOS1 56 LDA 0,x
033E E008 4s CPX #68 0354 297F s? AND #67F
0340 FoO4 46 BE@ SS 0356 700091 se STA 0,
0342 28 a7 PLP 0359 60 oF RTS
é i i 0318- FS A4 06 C8 EB E0 07 DO «=—*9340- FO 04 28 BB SO F3 68 AS
Récapitulation 3 0320- £3 A2 06 BD 00 90 90 00 ©«—*034B- 08 SE 00 91 EB EO 07 DA
0300- A2 00 AO 01 84 06 1E 00 ©=0328~ 91 CA 10 F7 AZ 00 86 08 0350- DD BD 00 91 29 7F 9D 00
0308- 90 88 DO FA A4 06 EB SE 0330- 86 OF ES OF 1E UU 91 ASG =OSSB- 71 60
0310- 00 90 CA 7E 00 90 88 DO ©—:0338- OF 3E 00 91 08 EB ED 08
Programme 3.DEMO E 3.0BU":01 = 9 * 4096:0 = O1
. + 256 :
JLOAD PR3.DEMO 30 TEXT : HOME : FOR I = 0 TO 7: PRINT ;
LIST “CARACTERE NO "I" : ";: GET C
$(I): PRINT C$(1): POKE O01 +
1 REM DEMONSTRATION DU CODAGE DE T, ASC (CSCI): NEXT : PRINT
8 CARACTERES EN 7 OCTETS : PRINT : CALL 768
5S REM 40 FOR I = 0 TO 7:CC#(I) = CHRS
6 REM ( PEEK (O + I)): PRINT "CARAC
10 HIMEM: 9 * 4096 - 1 TERE NO "I" = “CC$¢I>: NEXT
20 PRINT CHRS (4)"BLOAD PROGRAMM 50 PRINT : GET 2%: GOTO 30
Procédure &
Philippe Le Dru
Une des contraintes du Basic réside
dans la définition de ses variables :
en effet, toutes les variables d'un
programme sont globales, c’est-a-dire
que les valeurs de chacune sont, a
un instant donné, identiques quelque
soit le niveau od l'on se situe dans le
programme.
L'utilisation de variables locales, en
revanche, permet, lors de l’écriture
d'un sous-programme, d'affecter les
noms des variables interes a ce
sous-programme sans devoir se sou-
cier si ces noms sont déja utilisés par
ailleurs. D'od une approche modu-
laire plus simple des problémes, et
une programmation structurée plus
efficace.
La routine de PROCEDURE s’inspire
du HBASIC et de HAIFA; elle per-
met l'utilisation de sous-programmes
récursifs avec passage de parameétres.
Trois commandes sont disponibles :
© & HOME initialise la pile et la
place sur la carte langage (pour un
Apple Il Plus) ou dans les 16K
supplémentaires pour le //e ou le
‘ic, pour €viter d'encombrer la
mémoire centrale.
¢ & DEF <nom>;<variables éven-
tuellement précédées de "!"">
marque le début d’un sous-pro-
gramme. Le nom doit correspon-
dre aux régles de syntaxe des ins-
tructions DEF FN de |'Applesoft.
Les variables suivant le point-vir-
gule sont interes a l'exception de
celles précédées par un point
d’exclamation, qui sont alors glo-
bales.
Exemple ; & DEF P1;A,B,!C
Les variables globales ne peuvent
tre des chaines de caractéres. At-
tention : celles-ci peuvent en outre
@tre perdues si un nettoyage mé
moire intervient avant leur "resto-
ration”.
© & FN <nom>;<variables ou ex-
pressions numériques>
appelle le sous programme. Les
valeurs des variables ou expres-
sions numériques sont calculées et
affectées aux variables locales.
L'ordre FN doit comporter le
méme nombre d’expressions que
le sous-programme comporte de
variables.
Comme dans le cas de |'instructon
FN, ou comme pour les PROCEDU-
REs en Pascal, la définition d'une
Procédure doit en précéder I’appel.
OQ REM PROCEDURE.DEMO 34 TEST = TEST + 1
1 REM 35 PRINT “GLOBAL :TEST="TEST
S PRINT CHR® (4)"BRUNPROCEDURE. | 40 NEXT : END
oBJO" 100 & DEF PROC;!1,TEST
10 & HOME 120 I = I:TEST = TEST * 2
11 GOSUB 100 125 PRINT "PROC: TEST="TEST
20 FOR I = 1 TO 11 130 & END
30 & FN PROC;I,TEST 140 RETURN
Pom's n° 14
Fa SUCE- BU CE E6 80 AE DB BU EU B1A0- 20 ES DF 85 08 84 OF 20
Procédure OBJO 80D0- DO BO 06 2C 82 CO 4C 10 B1A8- 83 CO 2C 83 CO AS 08 20
8000- A? 4C 8D FS 03 AP 10 8D B0D8- D4 @D 00 EO 40 AE DB 80 81B0- BA 80 AS 09 20 BA AN 20
g0ns- Fé 03 AY AO AD F7 O3 60 S0E0- EO EO BO EF AD 00 EO EE @1B8- 82 CO 20 B7 00 FO OE 20
8010- C9 97 DO 03 4C AS 80 CP = SOEB- DA BO EE ES 80 DO 06 EE 81CO- BE DE AS B88 85 18 AS BF
8018- BS DO 03 4C 2F 80 CF C2 SOFO- DB 80 EE E6 80 60 20 BI B1CB- 85 17 4C 3A 81 20 83 CO
8020- DU U3 4C Fé BU LY BU DU = BOFB- 00 OF BO 85 14 20 EA DF 81D0- 2C 83 CO AS 1C 20 BA 80
8028- 03 4C FD 81 4C 7C DY 20 8100- 85 84 84 8B AD O1 BI 8A 81D8- AS BB 20 BA 80 AS BF 20
8030- B1 00 09 80 85 14 20 EA 8108- 85 1A C8 BI 8A 65 1B AP S1E0- BA 80 AS 75 20 BA 80 AS
8036- DF 85 GA 84 8B 20 6A DD 8110- 3B 20 CO DE AF 01 85 1C B1E8- 76 20 BA 80 AP C2 20 BA
8040- 20 DS E3 A? 3B 20 CO DE = gi1s- AS BB 85 18 AS BY BS 19 B1F0- 80 ZC 8Z CO AD 1A 85 BS
8048- AS 82 48 AS B1 48 AS BY g120- 20 BI 00 FO 08 CP 2C DD BIF8- AS 1B 85 BP 40 20 Bi 00
8050- 48 AS B8 48 AP 01 BS IC = g128- F7 Es IC DO F3 AD 00 BI 8200- 2C a0 CO 20 DD 80 C9 C2
8058- 20 Bi 00 FO 08 C9 2C DO 9130- GA C5 1C FO OS A2 2A 4C @208- FO O6 2C 82 CO 4C 79 OF
Bg 8060- F? ES 1C DO F3 AS IC 48 8138- 12 D4 AS 1A 85 BB AS 16 8210- 20 DD 80 85 746 20 DD 80
a3 BO68- AD 00 68 71 BA CB CO OS 8140- 85 BY AZ 00 20 B7 OO CY 8Z18- 85 75 2U DD BU 8S BY 20
= 8070- 00 F8 20 B7 00 CY UU FU gi4g- 21 DO 04 20 BI 00 EB 86 8220- DD 80 85 BB 20 DD 80 85
= = =8078- 16 20 Bi 00 C7 00 FO OF = gi S0- 1D 20 E3 DF 85 85 85 06 8228- 1C C9 OO DO O4 2c 82 CO
i g0s0- Cy AF DO FS 20 B1 00 Ce 8156- 84 86 84 07 20 B7 00 FO 8230- 60 20 DD 80 eS 69 20 DD
= g0868- 60 DO EE 20 Bi 00 40 AD 8160- 03 20 BE DE AS BS 85 1A 8Z36- 80 85 08 20 DD 80 85 07
= 8070- 02 BI BE FO OE 18 AS BS B168- AS BF BS 1B 2C 83 CO 2C 8240- 20 DD 80 85 06 AS O09 FO
S 8098- 67 04 85 BB 90 02 ES BF 8170- 83 CO AD 04 Bi 06 20 BA 8248- 09 AN OS SB BI 06 48 Ba
= aoan- 4c 79 AM 4C 10 D4 20 BI ai7e- 80 8B 10 FE AS 04 20 BA = 8250- 10 FA AD 00 20 DD 80 91
= B0AS- 00 AP 00 BD DA BO SD ES g180- 80 AS 07 20 BA 80 20 82 8258- 06 CB CO 0S DO Fé AS OF
a 80B0- 80 AY EO 8D DB 80 8D Ed 6188- CO AS 18 85 BB AS 17 BS 8260- FO DA AD 00 68 71 O08 CB
= 80B8- 80 60 CE DA BO CE ES 80 © 8190- BY AS 1D DO OB 85 08 85 8268- CO 05 DO FB Cé IC AS IC
= 80C0- AE DA 80 EB DD 06 CE DB 8198- 09 20 52 DA AS OF FO 07 8270- DO BF FN RS
Programme PROCEDURE 42 BNE >1 86 PHA
43 JMP ADHOME 87 LDY #0
LISA 2.5 44 +1 CMP #sB8 88 *0 PLA
Lp I HHI HE EE 45 BNE >2 89 STA ($8A),Y
2 3& HOME 46 JMP ADDEF 90 INY
3 j& DEF NOM;A,B,'C 47 -*2 CMP #802 Pal CPY #5
4 ;& END 48 BNE >3 92 BNE <0
S 3& FN NOM ;x*Y,C¢1> a? JMP ADFN e3 JSR CHRGOT
Gf II IIE 50 *3 CMP #$80 94 CMP #0
? ORG #8000 Si BNE >4 95 BEQ >4
8 OBJ $800 52 JMP ADEND ¥6 ;RECHERCHE &END
@ peoees===-—— 53 °4 JMP $D97C 97 *3 JSR CHRGET
10 ;VARIABLES 54 j== a aaa 98 CMP #0
11 BAS EPZ $p0 55 ;&DEF NOM;A,B,!C 99 BEG >4
12 HAUT EPZ SEO S6) §opoo ee 100 CMP #SAF
13 NV EPZ $iC JSR CHRGET 101 BNE <3
14 FN EPZ $14 58 ;ADRESSE VAR. NOM 102 JSR CHRGET
15 Tx EPZ $18 sr ORA #80 103 CMP #380
16 WRT EQuU $co8s3 60 STA $14 104 BNE <3
17 RAM EQU $coso 41 JSR FNGET 105 JSR CHRGET
18 ROM EQU $C082 62 STA $8A 106 RTS
19 TP EP2 06 63 STY $8B 107 ;FIN LIGNE
20 ;ROUTINES APPLESOFT 64 JSR CHKNUM 108 “4 LDY #2
21 CHRGET EQuU $00B1 65 JSR ERRDIR 109 LDA ($B8),Y
22 CHRGOT EQU $00B7 66 LDA “3 110 BEQ >S
23 FNGET EQU $DFEA 67 JSR SYNCHR 111 cLc
24 CHKNUM EQU SDDéA 68 LDA $82 112 LDA $Be
25 ERRDIR EQU $E3D6 67 PHA 113 ADC #4
26 SYNCHR EQU $DECO 70 LDA $31 114 STA $Be
27 PTRGET EQU $0FES a PHA 115 BCC >6
28 CHKCOM EQU $DEBE 72 LDA $B9 116 INC $B9
2? LET EQU $DAS52 73 PHA We SS UMP <3
30 RETERR EQU $D979 74 LDA $B8 118 *5 JMP $D410
Q1 4------------------ 75 PHA 119
32 ;INITIALISE & 76 ;NB VAR =NB DE , +1 120
33 LDA #saC 77 LDA #1 121
34 STA $3F5 78 STA NV 122 <
35 LDA #LABEL Yo 74 JSR CHRGET 123 ADHOME JSR CHRGET
36 STA $3F6 80 BEQ >2 124 LDA #0
37 LDA /LABEL B61 CMP -, 125 STA Pitl
38 STA #3F7 82 BNE <1 126 STA P2+1
37 RTS 83 INC NV 127 LOA #HAUT
40 ;AIGUILLAGE 84 BNE <1 128 STA Pit+2
41 LABEL CMP #97 85 *2 LDA NV 129 STA P22
FP eee
16
Pom's n° 14
130 RTS 200 ;----------------—- 270 ;FIN D’ INSTRUCTION
131 201 ;STOCKAGE VARIABLES 271 JSR CHRGOT
132 ; SP EMPILE 202. 3----=-=---=---—--- 272 BEQ@ »3
133 ;------------------ 203 j;RECH VAR MUETTE 273 JSR CHKCOM
134 EMPILE DEC Pi+i 204 *0 LDA FN 274 ;STOCKE LE PTR
135 DEC P2ti 205 STA $BB 275 LDA $B8
136 LDX P1+1 206 LDA FN+i 276 STA TX
137 INX 207 STA $B9 277 LDA $B9
138 BNE >0 208 ;TEST TRANSFERT 278 STA TX+1
139 DEC P142 209 LDx #0 279 JMP <0
140 DEC P2+2 210 JSR CHRGOT 280 ;EMPILE RETOUR
141 *0 LDX P1+2 211 CMP ¢! 281 °3 BIT WRT
142 CPX #BAS 212 BNE >4 282 BIT WRT
143 BGE Pi 213 JSR CHRGET 283 LDA NV
144 MEMERR: BIT ROM 214 INX 284 JSR EMPILE
145 JMP $D410 215 *4 STX $1D 285 LDA $B8
146 216 ;POS VAR MUETTE 286 JSR EMPILE
147 217 JSR PTRGET 287 LOA $B9
148 218 STA $85 288 JSR EMPILE P|
149 219 STA $06 269 LDA $75 f
150 220 STY $86 290 JSR EMPILE
151 221 STY $07 291 LDA $76
152 222 ;SAUTE VIRGULE 292 JSR EMPILE
153 BGE MEMERR 223 JSR CHRGOT 293 LDA #sC2 |
154 P2 LDA HAUT*256 224 BEQ >1 294 JSR EMPILE
155 INC Pitt 225 JSR CHKCOM 295 BIT ROM
156 INC P2+1 226 *1 LDA $B8 294 ;EXECUTION SP
157 BNE 70 227 STA FN 297 LDA FN
158 INC Pit2 228 LDA $B9 298 STA $Ba
159 INC P2+2 229 STA FNtI 295 LDA FNti
160 230 ;EMPILE VAR MUETTE 300 STA $B9
161 231 BIT WRT 301
162 232 BIT WRT 302
163 233 LDY #4 302
164 234 *2 LDA (#06),¥ 304 ;
165 ADFN JSR CHRGET 235 JSR EMPILE 305 ADEND JSR CHRGET
166 ORA #90 236 DEY 306 BIT RAM
167 STA $14 237 BPL <2 307 JSR DEPILE
168 JSR FNGET 238 ;EMPILE POSITION 308 CMP #éC2
169 STA $84 239 LDA $06 307 BEQ >0
170 STY $8B 240 JSR EMPILE 310 BIT ROM
171 LY #1 241 LDA $07 3ii UMP RETERR
172 LDA <$8A?,Y 242 JSR EMPILE 312 *0 JSR DEPILE
173 STA FN 243 BIT ROM 313 STA $76
174 INY 244 ;RESTAURE TXTPTR 314 JSR DEPILE
175 LDA ($8A),Y 245 LDA TX 215 STA $75
176 STA FN+1 246 STA $88 316 JSR DEPILE
177 LDA “3 247 LDA TX+1 317 STA $B9
178 JSR SYNCHR 248 STA $B9 318 JSR DEPILE
179 ;VERIF NB VARIABLES 249 ;TEST Ese STA $88
180 LDA #1 250 LDA $1D 320 ;DEPILE NB VAR
181 STA NV 251 BNE >5 321 JSR DEPILE
182 ;EMPILE TXTPTR 252 ;CHARGE VAR MUETTE 322 STA NU
183 LDA $B8 253 STA $08 323 ;SI NUL ->RETOUR
184 STA TX 254 STA $09 324 *3 CMP #0
185 LDA $B9 255 JSR LET 325 BNE >1
186 STA TXti 256 LDA $09 326 BIT ROM
187 ;COMPTE LES VIRGULES 257 BEQ >6 327 RTS
198 71 JSR CHRGET 258 ;VAR A TRANSFERER 328 *1 JSR DEPILE
189 BEQ >2 259: 25: JSR PTRGET 329 STA $09
190 CMP *, 260 STA $08 330 JSR DEPILE
191 BNE <1 261 STY $09 331 STA $08
192 INC NV 262 ;EMPILE POS TRANSF 332 JSR DEPILE
193 BNE <1 263 76 BIT WRT 333 STA $07
194-2 Loy #0 264 BIT WRT 334 JSR DEPILE
195 LDA ($8A),Y 265 LDA $08 335 STA $06
196 CMP NV 266 JSR EMPILE 336 LDA $09
197 BEQ >O 267 LDA $09 337 BEQ >4
198 LOX #824 268 JSR EMPILE 338 ;STOCKAGE PROVISOIR
199 UMP $D412 269 BIT ROM 339 LDY #5
Pom's n° 14
MICRO-
ORDINATEURS
POUR JEUX VIDEO ET
MD3 HITACHI
PROMOTION DISQUETTE POUR FLOPPY |
secle ca pecstimt 162
65 F
69F
SUPER
FLOPPY DRIVE PROMO «MONITOR BASE»
pour APPLE 3 POUCES | SOGLE ORIENTABLE POUR
MONITEURS NB ou COULEUR
CARTE 80 COLONNES
CARTE D’EXTENSION —
128 K RAM
=)
CARTE INTERFACE POUR 2
FLOPPY-DRIVE
a
écuipee
449")
CARTE DE PROGRAMMATION
8716-2752-2764
7)
CARTE DE CONNECTION
série RS 232 C
le Version KITS EN PROMOTION
CARTE D'UNITE CENTRALE
double processour 6802 ot Z 80. 64 K
BAM 7 siots d'extensions. Fonct 3 OPIN
IW
2° Version
iblés. équipés)
3350° st: ASA? (sans ROM 2290 F
CLAVIER ASC II 950 F
779 F
yy 698 F Be
catia 960 F ay a7ue-F 1690
ALIMENTATION 220 \ CARTE INTERFACE POUR 4
co! MP pr ENSEMBLE 4490 *}| terranes EW RATT:
clair et pave nama [4490 *} lie
umamsibiso Chaque Sener peur ached separ dent 4
GARTE «SPEETCH» ALBER XIV
le moniteur couleur 14’’
de votre micro
MONITEURS
écran ver
TABLE GRAPHIQUE 999 F
List} ZENITH 12”
2990"
pour Apple
VENTILATEUR «FAN»
Re.
495 F
EFFACEUR D’EPROM
EN KIT «
180°}
ALIMENTATION A DECOUPAGE
COMPATIBLE «APPLE»
-5V-5A
VOSA
* APPLE est une marque déposée et appartient @ APPLE COMPUTER S.A.
42, rue de Chabrol, 75010 Paris.
Tél. 770.28.31.
340 DEY
341 °5S LDA (#04),Y
342 PHA
343 DEY
344 BPL <S
345 ;RESTAURE VAR MUET
346 *4 LDY #0
347 *2 JSR DEPILE
348 STA ($06) ,Y
349 INY
350 CPY #5
3S1 BNE <2
352 ;TRANSFERT
353 LDA #09
354 BEG >7
355 LDY #0
356 *6 PLA
357 STA ($08),Y
3538 INY
359 cPY #5
360 BNE <6
361 ;TEST FIN
362 *7 DEC NV
363 LDA NV
364 BNE <1
365 BEQ <3
B66 Sssssss===
367 END
Si l'apprentissage du Basic ne me
pose pas trop de problemes, I'unlisa-
tion de l'assembleur ne me parait
pas aussi évidente.
En conséquence, un bon exercice
consiste, selon moi, « décortiquer les
routines publiées dans Pom’s pour
les adapter a de nouvelles situations.
Ainsi, j'ai pensé qu'une modification
de la routine de disquette virtuelle
16K de Michel Haag (Pom’s 12)
pourrait rendre quelques services aux
Possesseurs de carte 80 colonnes
“étendue” en transformant cette ré-
serve d’octets en un pseudo-disque
bien pratique
Les deux programmes publiés ici
permettent d'atteindre cet objectif :
@ La routine RWAUX proprement
dite, qui sera logée a la place du
secteur $F du directory dans la
carte langage, afin de la rendre in-
dépendante des -commutateurs
RAMRD et RAMWRT, et qui
donne accés 4 la pseudo-dis-
quette.
@ La routine RWAUXINIT qui se
charge de la mise en place de
RWAUX, du VTOC, du directory
Disque virtuel 64K
et d'un patch du DOS qui permet
Tappel du disque virluel.
Pour plus de commodité, les deux
routines sont regroupées dans un
méme code objet AUTO RWAUXI-
NIT. Aprés lexécution de ce pro-
gramme par BRUN. tout appel au
second lecteur D2 sera dirigé sur le
disyue virtuel logé dans I’extension
mémoire de la carte 80 colonnes
étendue. Le disque ainsi constitué se
compose de 11 pistes completes,
dune piste de 12 secteurs et d'une
piste affectée au catalogue et a la
routine d’exploitation.
Cette nouvelle version de pseudo-
disquette n’est pas moins volatile que
la précédente, bien str. Avant
d'éteindre votre Apple, n’oubliez
donc pas de transférer les inform
tions stockées en RAM sur une véi
table disquette dans le lecteur D1
Vous pouvez réaliser ce transfert di-
rectement a partir de vos program-
mes, en mode immédiat pour les
Programmes et fichiers binaires, ou,
Jacques Rey
de fagon générale, au moyen du FID
classique.
Si vous possédez deux lecteurs de
disquettes, vous pouvez reconnecter
le second en D2 par POKE 48372,0.
Un POKE 48372,2 redirigera tout
appel a D2 sur la carte d’extension.
Les pistes $11, $12 et $13 se trou
vant dans la carte langage, il peut
étre utile de verrouiller les huit der-
niers secteurs de la piste $13 pour y
loger une copie du moniteur, ce qui
permet, par exemple, d’examiner le
VTOC et le directory avec la
commande "H” du monileur étendu.
Pour ce faire, "bootez” avec une dis-
quette contenant le fichier INTBASIC
puis passez en moniteur et tapez
CO8B N CU8B N DU84:00 00
Les secleurs $8 a $F de la piste $13
sont ainsi verrouillés et le moniteur
ne sera pas écrasé par les informa
tions chargées dans le pseudo-dis-
que.
3H 3 9 EE 9 HE a a GE eae ae a aaa
LISA 1.5
jMISE A ZERO DU VIOC ET DU DIR
1
2 5%
3 3% RWAUX INIT *
4 3% *
Sys J. REY (JUIN 84) *
6 3% *
7 4% (D’APRES M.HAAG) *
B 5* *
D5 FEIT IIE HEE TE SEE EE
10 ;
AD 4
12 ORG $4F00
13 5
14 PTR EPZ $2A
15 §
16 INIT LDA #co8e jVALIDATION DU 1ER BANC
17 LDA $CO8B
18 LDA #$00
19 STA PTR
20 LDA #$D0
21 STA PTRII
22 Bi LDA #800
23 LDY $00
24 B2 STA (PTR? ,Y
Pom's n° 14
19
B2
PTRti
PTRtL
H#SE0
BL
NITIALISATION DU VTOC
#6D0
PTR+1
#S06
UTBL1,Y
(PTR? ,Y jINIT DES OCTETS $0 A $37 DU YTOC
83
#870
$0027
#80D
$D030
#¢23
$0034
#510
D035
#S01
$D037
#SCC
$0047 ;INHIBE LES SECTEURS 0,1,4,5 DE LA PISTE $04
#SFF
S17
UTBL2,X ;LIBERATION DES PISTES $5,8,9,A,B,C,D,E,F,12 ET13
PTR) ,¥ j7PAR MISE A $FF DES OCTETS CORRESPONDANTS
3DU VTOC
B4
#$D2 sINITIALISATION DES OCTETS DE
PTRt1 ;CHAINAGE DES PAGES DU DIRECTORY
#801
agit
(PTR) ,Y
PTR+1
PTR
4S0F
85
PTR+1
#802
#$0D
(PTR? ,¥
PTR+1
Bé
CHARGEMENT DE LA ROUTINE RWAUX A LA PLACE DU SECTEUR $F DU DIR
H#SDF
PTR+1
#300
$5000,Y
(PTR? ,¥
B?
DECONNECTION DE LA CARTE LANGAGE
$cos2
sCOsA
3
jMISE EN PLACE DU PATCH PERMETTANT L’APPEL DE RWAUX
i
25 DEY
26 BNE
27 INC
28 LDA
29 cMP
30 BNE
3
32
33
34 LDA
35 STA
36 LDY
37 B3 LDA
38 STA
39 DEY
40 BPL
=| O41 LDA
42 STA
43 LDA
= 4 STA
= 45 LDA
= 46 STA
= 47 LDA
= 428 STA
= 49 Lpa
50 STA
51 LDA
92 STA
53 ;
54 LDA
35 LDx
56 B4 LDY
S7 STA
58 DEX
59 BPL
60 j
61 LDA
62 STA
63 Loy
64 B5 LDA
65 STA
66 INC
6? LDA
68 CMP
6? BNE
70 DEC
71 Loy
72 LDx
73 BS TXA
74 STA
75 DEC
76 DEX
77 BNE
78 ;
79 5
80 ;
81 Lpa
82 STA
83 LDY
84 B7 Loa
85 STA
86 DEY
87 BNE
88 5
89 ;
90 5
a CLE
92 LDA
93 LDA
94
95
96
AEB
20
Sbapagiiei sees
aie sae SSeS aeSsEsS
retro
Pom's n° 14
AUTO RWAUXINIT.OBJ
97 LDY #918
98 Be LDA PATB,Y
99 STA $BCEB,Y
100 DEY
1o1 BPL BS
102 RTS
103 ;
104 ;TABLES
105 ;
106 VTBL1 HEX 04110E030000FE
107 VTBL2 HEX 31484C4D58595C506061 646568696C6D7071 74758081 8485EA
108 PATB HEX 84488549A002B1 48C90 2D00DADSBCOADABCO4C4EDF4CEBBCEA
109 END
aFOO- AD
4F08- 85
4Fio- Ad
4F18- 28
ccrtctririccccetccecereerrss 4F20- 00
24% * 4F28- 91
33% RWAUX x 4F30- 27
i: : 8
° i JACQUES REY (JUIN 84) : ee ee
4FSO- 9F
7 $® ADAPTATION DE L’IDEE DE * arss= 02
8 yx M. HAAG * 4F40- 2A
? 5% * 4F68- F4
LD 5 RHR HR EEE 4F70- 91
Lh vg 4F78- DF
12 ORG $DF67 aFe0- 91
13 OBJ $5067 Alege a
14; aF90- 4F
15 jEMULATEUR DE DISQUETTE SUR CARTE AUXILIAIRE sheen
i 4FAO- 48
16 5 4FAB- 61
17 IOBP = EP2 $48 4FRO- 71
18 PTR EPZ $2A 4FBe- 84
19 BUFPTR EPZ $3E 4FCO- ce
20 SECT PZ $2D 4FC8- 8B
21 TRACK EPZ $2E 4FDO- EA
22 ; 4FD8- EA
23 TRK EQU $4 area” eS
24 SEC EQU $5 an: ce
25 BUF EQU #28 4FF8— GA
26 CMD EQu $0C S000- 00
27 DRY EQU $02 5008- AD
28; 5010- AG
29 TBI HEX 100706 :PISTES INTERDITES 5018- Ad
30 TB2 HEX 00010405 ;SECTEURS INTERDITS S020- 00
a1 3 5028- AF
32 ;TRANSFERT DES POINTEURS Boser ae
33 5 s040- 00
34 RWAUX LDY BUF 5048- ao
35 LDA (IOBP) ,Y SOSO- AG
36 STA BUFPTR 5058- Al
37 INY 5060- 00
38 LDA (IOBP),Y 5068- 07
39 STA BUFPTR#I pa a
40 LDY "SEC a
41 LDA (TORP) ,Y Sree ae
42 STA SECT S090 47
43 LDY #TRK 5098- 88
4a LDA CIOBP),Y SOAG- 2E
45 STA TRACK S0A8- 65
463 50B0- OF
47 ;DETERMINATION DES PISTES ET SECTEURS S0B8- OF
48 ; soco- cy
49 CMP H$14 ;ERREUR SI PISTE > $12 50Ce- Ao
50 BPL ERR ob ce
Sope- 38
Si CMP #911 }BRANCHE SUR VTOC OU DIR S0EO- €a
52 BEQ DIR S0E8- 2A
53 CMP #s04 ;ERREUR SI PISTE ¢ $04 SOFO- £8
34 BMI ERR SOFS- 91
=
Pom’s n° 14
eB
2A
oo
AS
85
co
Ar
v1
2B
2B
88
ay
34
o1
DO
ai
268
2B
2B
cé
28
88
8A
ee
OE
4D
65
75
8s
Do
4c
EA
AD
bo
2A
cy
aa
16
oD
Do
8D
ao
2A
au
AS
Ao
2B
AO
bo
co
Bc
03
58
68
80
49
oD
6E
EA
EA
EA
EA
EA
EA
os
D7
Ad
ao
ce
AE
AG
Ao
ca
BS
AO
AO
oo
o1
SE
B81
85
FO
oe
ar
04
2B
8B
8s
Bs
£0
06
Fe
8D
a9
37
FF
cA
o1
2B
02
ca
oo
Fs
a0
se
oo
37
69
at
Ao
AD
OF
EA
EA
EA
EA
EA
EA
D4
C1
AD
an
ci
o2
ag
Ad
oS
84
AD
A
a0
04
ce
48
2E
2c
6?
00
0A
aa
10
2A
6?
cy
co
ep
8c
Do
05
FS
co
2B
bo
DO
Bo
A?
30
10
bo
A2
10
asa
ce
A2
dO
By
18
18
10
00
Sc
6c
e4
o2
4c
EA
ae
AP
FB
EF
98
7A
bo
8D
ar
17
Fe
11
DF
oD
FS
vo
AD
Bo
F?
FE
SD
6D
85
Bi
co
EB
EA
EA
EA
00
oo
ES
ag
4aF
ap
ay
35
cc
gc
ag
aA
Do
Es
Ay
su
82
BS
60
31
60
70
EA
48
AD
BC
FA
EA
EA
EA
EA
EA
cs
00
Ad
a0
a0
oo
AO
a0
ao
00
A0
AO
10
os
85
a0
10
30
40
AS
oA
aA
ce
20
2B
09
19
AD
81
90
3e
22
5S
36
57
58
sv
60
é1
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
a
78
7?
80
61
82
83
84
a5
86
87
se
BF
90
ai
ee
93
94
7S
98
97
98
99
100
101
102
103
104
105
106
107
108
109
110
1ii
112
113
114
115
116
117
118
119
120
121
122
123
124
LDY
VERIF1 CMP
BEQ
DEY
BPL
LDA
STA
LDA
SEC
sBc
ASL
ASL
ASL
ASL
ADC
STA
LDY
VERIF2 CMP
BEQ
DEY
BPL
JMP
j DIRECTORY
DIR LDA
STA
cLce
LOA
CMP
BEQ
ADC
STA
3
j3EXECUTION
i
—xa LDY
LDA
cMP
BEQ
CMP
BEQ
CMP
BEG
3
ERR SEC
RET STA
STA
LDA
3
READ LDY
STY
BRI LDA
STA
DEY
BNE
cLC
Bcc
H
WRITE LDY
STY
Bul LDA
STA
DEY
cLCe
BCC
OcM
END
#02
TB1,Y
ERR
VERIFI
#00
PTR
TRACK
#$04
SECT
PTRti
#303
TB2,Y
ERR
VERIF2
Ex@
#200
PTR
SECT
#S0F
ERR
#300
PTRt1
DE LA COMMANDE
"cMD
(IOBP> ,¥
#900
RET
#301
READ
#302
WRITE
$co02
C0049
$C08A
#300
$c003
(PTR) 5¥
(BUFPTR) sY
BRI
RET
#$00
#c005
(BUFPTR) ,Y
(PTR) ,Y
BUI
RET
;ERREUR SI PISTE = $06,%07 OU $10
3; (PAGE GRAPHIQUE ET PORTS)
PAGE MEMOIRE= $10%(TRACK-4)
PLUS SECT
jERREUR SI PISTE $04 SECTEURS 40,4#1,%4,¢5
;(PAGES 0,1 ET TEXTE 80COL)
i
;CALCUL DE LA PAGE DU CATALOGUE
;ERREUR SI SECTEUR $0F
3 (EMPLACEMENT DE LA ROUTINE?
;PROVOQUE 1/0 ERROR
;REMET LES COMMUTATEURS EN POSITION
ECT/ECRIT EN MEMOIRE PRINCIPALE
;COMMUTE LA MEM EN $DFEZ QUI CONTIENT RTS
y;MEM AUX EN LECTURE
j;MEM AUX EN ECRITURE
" BSAVERWALX . OBJ ,A$5000 ,L$100"
Pom's n° 14
Premier contact
Conception du logiciel
Appleworks est un logiciel présenté
comme "intégré”. Il comporte :
® un traitement de texte. parent
d’Applewriter ;
@ un gestionnaire de fichier, tes
proche de Quick File :
© un tableur, compromis entre Visi-
calc (ou plut6t Magicalc) et Multi-
plan.
Il nest en fait que partiellement inté-
gré. En effet -
1 - lest possible de “couper/coller”
4 l'intérieur d'un document, ou entre
2 documents DE MEME TYPE (2 ta-
bleaux par exemple), mais non entre
documents de types différents (on ne
peut effectuer de calculs par le ta-
bleur sur les données d'un fichier,
sauf, et uniquement au moment
dune création de document_nou-
veau, a transiter par un fichier DIF !).
2 - Il est également possible. mais
moins direct, de passer d’un tableau
ou d'un élal composé a partir d'un
fichier, vers le traitement de texte (on
utilise alors une sous option "clip
board” de l'option d'impression).
La gestion du “clip board” n'est pas
tres simple. Par la pratique, nous
avons cru comprendre que les ex-
traits DE -MEME NATURE s‘entas-
saient et étaient ensuite repris en
bloc, alors qu'un extrait d'un autre
Ue vidait le clip board.
‘out a été fait pour faciliter 'appren-
tissage : nombreuses fonctions “help”
a différents niveaux, identité des
commandes dans _ les _ diverses
composantes, utilisation relativement
aisée de toutes les commandes de
lApple //e (les 4 fléches de direction
et les "pommes”),
Le traitement de texte
Forces
Option "couper/coller” puissante et
commode (mais avec deux modes
utilisation différents selon qu'on
travaille entre textes, ou bien entre fi-
chier ou tableau et texte).
Désignation pratique des zones a
supprimer, déplacer, dupliquer. “cou-
per/coller™
Nombreuses options d’impression,
trés puissantes quand on en a bien
acquis le mécanisme. Possibilite d’in-
tervention au clavier en cours d’im-
pression.
Faiblesses
Absence d'une fonction Glossaire.
Pas de notion de paragraphes (mais
il existe un systeme de "mar
queurs”)
Quelques problémes de justification
(il n’existe pas de justification gauche
Pom's n° 14
Appleworks a l’essai
ou droite, et les options d'impression
perturbent la justification totale).
Synthése
Sil ne s‘aqissait que d'un nouveau
traitement de texte, il n'y aurait pas
de quoi déclencher I'enthousiasme.
Il faut donc voir celui-ci uniquement
dans le cadre de I'intégration avec ta-
bleur et gestionnaire de fichier. Alors,
on ne peut qu’étre séduit par le fonc-
tionnement du "couper/coller” direct
(entre textes), ou indirect, par l’inter-
médiaire de Toption dimpression
(entre état ou tableau et texte).
Le gestionnaire de
fichier
Forces
Ce sont essentiellement celles de
Quick File (simplicité et souplesse,
travail tres commode 4_ | écran.
confection aisée d’états et d’étiquet
tes...).
A ces avantages, il convient d'ajouter
bien entendu la fonction "“cou-
per/coller” dans un fichier ou entre
deux fichiers et la fonction impres-
sion sur "clip board” a destination du
traitement de texte.
Faiblesses
Comme les avantages, les inconvé-
nients sont essentiellement ceux de
Quick File (insuffisance de contréles
dentrée. quelques difficultés de ma-
nipulation du curseur, capacité assez
limitée).
Attention aux "sorties du systéme”
dans le cas de certaines options im
primante non admises.
Synthese
Plus encore que dans le cas du trai-
tement de texte, on pourrait étre
tenlé de dire que ce nouveau ges-
tionnaire de fichiers est un de trop:
Quick File suffisait.
Bien entendu, c’est encore dans l'in-
tégration (entre fichiers, et avec le
traitement de texte) qu'il faut en re-
chercher la justification.
On peut alors regretter qu'il n'y ait
pas une communication directe pos-
sible avec le logiciel tableur pour ef-
fectuer facilement des calculs a partir
d’éléments puisés dans un fichier et
retourner les résultats vers le fichier.
Le tableur
Forces
Maniement commode de groupes de
rangées, colonnes ou cases.
Guy Lapautre
Possibilité de faire apparaitre et d’im
primer le tableau des formules de
calcul, de trier en ordre alphanuméri-
que ou numérique dans une co-
lonne, de rechercher une case par
son contenu (alphabétique)
Et bien entendu, fonctions “cou
per/coller” et impression sur “clip
board”, ainsi que possibilité d'utiliser
un format DIF (en entrée et en sor-
tie).
Faiblesses
Pas de ligne de rappel des comman-
des disponibles (il faut passer par
“help”) et pas de “help” pour les
fonctions de calcul.
Dans la duplication des formules,
“no change” en option par défaut
(chacun sait qu'on utilise beaucoup
plus souvent "relative”).
Pas de fonction de consolidation de
plusieurs tableaux.
Synthése
Un nouveau tableur, qui a pris beau-
coup des fonctionnalités apparues
progressivement dans ce domaine
depuis "l'ancétre” Visicalc. Il est tou-
tefois fort regrettable que les auteurs
naient pas cru devoir y adjoindre
une fonction de consolidation.
Par ailleurs, mémes observations que
pour le gestionnaire de fichiers en ce
qui concerne I’aspect d’intégration.
En resumé
Appleworks est probablement proche
de ce qu’on peut faire de mieux en
matizre de logiciel intégré, compte
tenu de la capacité et des performan-
ces de l'Apple //e, méme si quelques
détails irritent.
ll serait intéressant de le comparer de
facon détaillée 4 Jane, autre logiciel
inlégré pour la méme machine, for
tionnant selon le principe, cher 4
Apple, de la souris graphique exploi-
tant un jeu d'icénes, Jane posséde
en outre une gestion multifenétres.
Forces
Avant tout, d’honnétes possibilités
dintégration entre trois _ logiciels :
passage trés simple entre des taches
de méme type, assez simple entre ta-
bleur ou gestionnaire de fichiers et
traitement de texte, un peu plus
compliqué et moins complet entre
gestionnaire de fichiers et tableur.
Fonctions communes (gestion de dis-
que et de fichiers. hard copy,
help”... ) pratiques et efficaces.
onne standardisation des
commandes des diverses composan-
tes.
24
Svagissant de chacun des logiciels :
Traitement de texte assez classique,
avec de bonnes facilités pour dési-
gner des zones de travail et de nom-
breuses options d'impression.
Gestionnaire_ de fichiers presque
identique 4 Quick File, simple d’em
ploi, souple et efficace, avec confec-
tion d’états aisée.
Tableur proposant une bonne syn-
thése des réalisations dans ce do-
maine, avec une gestion commode
par groupes de lignes, colonnes ou
cases.
Faiblesses
On peul regretter (mais I'Apple //e
est ce qu'il est). qu'il n'y ait pas une
option “coupericoller” généralisée
entre les trois logiciels qui composent
Appleworks. On peut également re-
gretter qu'il n'y ait pas un quatriéme
logiciel, un éditeur graphique. Notons
toutefois que le format DIF permet
théoriquement d’utiliser Visicale. Mais
e, dernier fonctionne sous DOS
Nous avons connu A plusieurs repri-
ses des problémes de sortie irrémé-
diable du logiciel, avec perte du der-
nier travail exécuté, lors de l'utili-
sation de certaines options d'impres-
sion.
Pour chacun des logiciels pris indivi-
duellement :
Traitement de texte dans lequel on
aurait aimé retrouver le glossaire
d’Applewriter. La justification des
textes est traitée de fagon un peu
sommaire.
Gestionnaire de fichiers un peu limité
(comme Quick File) dans la structure
des enregistrements, et sans contréle
dentrées,
Tableur auquel manque essentielle-
ment la fonction de consolidation
entre divers tableaux. De ce cété,
pas de progrés par rapport & Visicale.
En synthése
Une note BIEN, mais il manque rela-
tivement peu de choses pour en faire
une note TRES BIEN.
Jane : la sauce Macintosh
Jean-Michel Gourévitch
Un traitement de texte. un tableur et
une base de données réunis dans le
méme programme, sur la méme dis-
quette. avec des ponts permettant de
passer d'une application a l'autre.
Une des premieres applications de la
"souris”, utilisable sur Apple Il. Il+.
Je et //c, voici Jane, un logiciel & la
présentation géniale, mais dont le ra-
mage n’égale pas tout a fait. hélas. le
plumage. Il a été écrit par deux petits
génies de 21 ans dont l'un, Howard
Marks fit ses études secondaires chez
nous. au Lycée Janson de Sailly de
Paris. Ce détail n'est pas inutile: il
explique pourquoi ce programme dé-
veloppé aux Etats Unis (la société
distributrice a été créée avec les
fonds d'une société d’exploitation de
casinos) est aussi parfaitement fran-
cisé.
Ce n’est pas la moindre des qualités
d'un logiciel parfaitement “bluffant
D‘abord un mot sur son aspect phy-
sique Avouons-le tout de suite, cette
Jane-la est diablement séduisante.
Aprés une demonstration bien
menée, il est difficile de ne pas cra-
quer pour la belle...
Le manuel représenterait ce qu'on
peut attendre de mieux d'un manuel
(clair. illustré d'exemples et de des-
sins) s'il n'était parfaitement inutile
Jane est en effet livré en quatre dis-
quettes. Lune est une auto-démons-
tration parfaitement menée et qui
donne envie de prendre de suite la
souris en main. La seconde (de cou-
leur grise) est la disquette systéme.
Le coeur du logiciel. La troisiéme
(noire) est une disquette de données.
qui contient aussi des exemples et
des utilitaires, La derniére (jaune) est
la _disquette d'aide. A chaque fois
qu'il en est besoin, le programme de-
mande diinsérer la disquette néces-
saire dans le second drive en la dési-
gnant par sa couleur (avis aux
pirates). Si ce n’est pas la bonne. il
insiste..
Mais, c'est une fois la disquette sys
téme dans le lecteur et Apple sous
tension que le feu diartifice
commence. Jane utilise icénes et
souris comme Macintosh; a propos
de souris. un détail important: la
derniére version de Jane fonctionne
avec la souris d’Apple, et méme,
pour ceux qui en sont encore dému-
nis -les possesseurs d’Apple Il, Il+ et
/e apprécieront-, avec un simple
joystick (il faut alors reconfigurer la
disquette grise). Les icénes, confor
mes 4 ce nouveau langage dont raf-
folent les habitués des aéroports in-
ternationaux, sont plutét bien
réussies et different selon les applica-
tions (celles de la base de données
sont les moins claires). On trouve,
comme dans le Mac, une poubelle
pour la destruction de fichiers. Et.
comme avec le Lisa, une petite mon
tre vous fail patienter lors des accés
du logiciel a la disquette.
Le premier probleme cest. hélas.
que cette montre est bien nécessaire
Les accés disquettes sont fréquents et
lents. Une fois qu’on désigne un dos-
sier 4 ouvrir en cliquant la souris. il
faut par exemple une bonne dizaine
de secondes avant d'y avoir acces.
Cest le prix 4 payer pour voir s affi-
cher sur le moniteur d'un Apple // la
réplique de l'écran de Mac tout en
vert (ou presque). A partir de la. on
déplace sa fenétre sur l'écran. on
ouvre de nouveaux dossiers ou de
nouvelles applications (on peut en-
tasser jusqu’a quatre dosssiers sur le
“bureau”). On peut trimbaler un éie-
ment d'une application vers une
autre. insérer par exemple une liste
de chiffres du tableur dans le tra
ment de texte (grace aux icAnes
seaux", “caméra” et “pot de colle”)
plus facilement, il faut le reconnaitre.
que dans Appleworks. l'autre pro-
gramme “‘intégré” vendu. quant &
lui, par Apple. On laura compns.
tous ceux qui ne se sont jamais servis
d'un tableur, d'un gestionnaire de fi-
chiers ou d'un traitement de textes
(beaucoup de nouveaux possesseurs
d’Apple //c se reconnaitront dans ce
portrait) seront a la féte. Avec toute-
fois une nuance: la fréquence des
accés disquette nécessite plus que
pour tout autre logiciel un second
drive.
Pour les autres. les vétérans d’Ap-
plewriter, les Multiplanistes _(-pla-
neurs ?) chevronnés et les CX-Multi-
gestionnaires confirmés, Jane reld-
vera plus du jeu de société que de
loutil de travail. Résumons en vrac :
un traitement de texte ne pouvant af-
ficher (& condition d’avoir choisi les
plus petits caractéres écran) que 70
colonnes, “l'oubli” d'un glossaire, et
un choix de codes d'impression étri-
qué: un gestionnaire de fichiers dont
les rubriques sont limitées A 25 ca-
ractéres et le total des informations
par saisie (rubriques comprises) a
250 caractéres: tn tableur qui ne
permet guére que de calculer un
budget familial, sans pouvoir bien stir
lier des feuilles entre elles. sans nu-
mérotation des colonnes et avec un
choix d'opérations “riquiqui™.
Pas besoin d'épiloquer, les créateurs
de Jane le reconnaissent eux-mémes.
leur programme ne vise pas les
“pros”. Ceux qui passeraient outre
risquent la déception, et accuseront
ce programme “bluffant™ de tricherie.
Ils n’auront pas tout 4 fait raison, Car
le mérite de Jane. c'est douvrir ce
bon vieil Apple II aux techniques
“davant-garde™ de | intéaration. des
souris et des fenétres. En fait de fe-
nétre. celle qu’ouvre Jane sur l'ave-
nir est un apéritif tentateur. On se
prend a réver d'un logiciel de méme
principe tournant sur un Apple Il
muni d'un nouveau processeur 16
bits (le 65816, par exemple. sur le-
quel travaille Steve Wozniak . voit la
rubrique Micro-intormations} et d'une
mémoire portée 4 512 K. Il n’aurait
guére a envier 4 Lotus 1-2-3 “le ma-
qnifique . Et si c était pour demain 7
Pom's 1 14
L’Applesoft est pauvre, c'est en-
tendu, mais si l'on en juge par toutes
les greffes qui lui ont déja été faites
par le biais de l'ampersand (&), il
semble bien que, finalement, on ne
préte pas qu’aux riches...
ICARE est un amper-interpréteur
assez complet, dont lidée m’a été
inspirée par le programme "Print
Using & Friend” de CALL
A.P.P.L.E., et par le fameux “Haifa”
publié dans Pom’s numéro 5.
J'ai ainsi voulu réunir dans un seul et
méme programme de nombreuses
routines, dont certaines ont été em-
pruntées a l'article de CALL
A.P.P.L.E. deja mentionné, d'autres
a Pom's, ou que j’avais développées
pour mes propres besoins. On dis-
pose de cette facon de multiples ins-
fructions nouvelles en Applesoft, en
méme temps et avec un puitt d’en-
trée unique. Il n'est donc plus néces-
saire de se préoccuper des proble-
mes de compatibilité entre les
différentes routines, ni de jongler
avec les disquettes et les fichiers pour
charger en mémoire celles dont on a
besoin.
Nous examinerons d’abord les diffé-
rentes instructions disponibles et leur
syntaxe, avant de voir comment met-
tre en oeuvre ICAKE.
Les instructions
@ICARE
PRINT USNG >
& PRINT USNG > chaine;exp
(exp désigne une expression numén-
que)
Exemple :
Si A = 1234.56,
& PRINT USNG > 00":
donne 1234.56
& PRINT USNG >"000000.00”,
donne 001234.56
& PRINT USNG >”, .00”;
donne 1,234.56
& PRINT USNG >"$ 00”,
donne $1234.56
& PRINT USNG >"Total
; $00"; A donne: Total
$1,234.56
Si A = 9506789,
& PRINT USNG >"Martin
”, A donne . Martin : 950-67-89
Auteur: Craig Peterson CALL
A.P.P.L.E.
NOISE
& NOISE expl,exp2
Produit un son dont la durée et la
> > > S
Pom's n° 14
Amper-interpréteur ICARE
hauteur sont données par expl et
exp2, l'une et l'autre devant étre
comprises entre 0 et 255,
Auteur: Craig Peterson
AP.P.LE.
WAIT
& WAIT exp
Attend "exp" dixiémes de seconde.
Craig Peterson CALL
CALL
Auteur =
AP.P.L.E
SWAP >
& SWAP > variable1,variable2
Echange les contenus des variables
“variablel” et “variable2”, qui doi-
vent étre de méme type. Par exem-
ple : & SWAP > A$,B$
Auteur: Craig Peterson
A.P.P.L.E
GOTO caiculé
& GOTO exp
CALL
Exécute un GOTO 4 la ligne dont le
numéro est donné par le calcul de
“exp”. Par exemple, si A=100, &
GOTO A’2 est équivalent 4 GOTO
50 (voir INTEGER BASIC)
GOSUB calculé
& GOSUB exp
Exécute un GOSUB selon les mémes
régles que pour le GOTO calculé
(voir INTEGER BASIC)
DEL ARRAY >
& DEL ARRAY > nom de tableau
Efface en mémoire le tableau dont le
nom est précisé dans instruction
(par exemple, & DEL ARRAY >A$
detruit le tableau A$). Le tableau
peut étre de n'importe quel type,
mais il doit absolument exister.
Auteur: Craig Peterson
APPLE.
CALL
Pascal Cantot
BELL
& BELL exp
Produit un son de cloche dont la
durée est donnée par la valeur de
“exp”, qui doit étre comprise entre 0
et 255.
RPT PRINT
& RPT PRINT chaine.exp
ny
it
i
Er
Affiche “exp” fois la chaine (la valeur ie
de exp doit étre comprise entre 0 et &
255). =
E
PLAY &
=
& PLAY expl,exp2 =
Joue une note de hauteur “exp1™ et ny
de durée “exp2”. Il est possible de =
donner plusieurs notes, mais il faut
alors séparer les couples note/durée
par des ”;”. Par exemple :
& PLAY 192.0 ; 172,0 ; 152,0 ;
144,0 ; 128,0 ; 115,0 ; 102,0 ; 96,0
joue l'octave 1.
Pour les octaves plus aigués, il suffit
de diviser par 2 4 chaque octave, et
pour obtenir les diéses, il faut faire la
moyenne des deux notes adjacentes.
REG
& REG
Affiche le contenu des registres du
6502.
BKGND
& BKGNDexp
Met tous les octets de la page HGR
courante a “exp”. Par exemple, &
BKGND255 blanchit la page cou
rante (page 1 par défaut).
HINV
& HINV
Inverse la page HGR courante (page
1 par détaut).
SYS
& SYS
Passage en mode moniteur (équiva-
lent a CALL —151).
MOVE
& MOVE expl,exp2 TO exp3
Fait exécuter la commande MOVE
du moniteur et déplace a l'adresse
“exp3” la zone de mémoire comprise
entre les adresses "exp1” et "exp2”.
Accés direct a la disquette
& BUFFER = exp
Sélectionne la page du buffer qui
sera utilisé par RWTS dans les
commandes de lecture / écriture. Par
SS
a ee
26
exemple, avec & BUFFER = 32, le
buffer commence en 32 * 256 =
8192. La valeur par défaut est $96,
soit le premier buffer du DOS avec
MAXFILES 3.
& READ P,S
Lit le secteur $ de la piste P dans le
buffer. Le lecteur utilisé est le dernier
lecteur sélectionné par une com-
mande DOS.
& WRITE P,S
Recopie le contenu du buffer sur le
secteur S de la piste P. Méme remar-
que que ci-dessus en ce qui
concerne le lecteur utilisé.
RESTORE
& RESTORE exp
Ajuste le pointeur de DATA au début
de la ligne dont le numéro est donné
par “exp” Un message d’erreur est
envoyé si la ligne n’existe pas ou ne
contient pas de DATA.
SUPER PRINT
ICARE réserve une place pour |’im-
plantation de la routine de SUPER
PRINT de Denis Sureau publiée dans
le Pom’s 9. Vous trouverez dans la
deuxiéme partie de l'article la procé
dure a suivre pour joindre cette rou-
tine aux autres.
Si elle est implantée, la syntaxe de
linstruction est
& SUPER PRINT:A$,X,Y +Z,chaine
PRINT AT
& PRINT chaine AT H,V
Affiche le contenu de la chaine a la
colonne H de la ligne V (H de 1a
40 et V de 1 24). Cette instruction
ne modifie pas la position du cur
seur.
GET
& GET X
Remet le clavier a zéro, attend
qu'une touche soit pressée et met
son code (inférieur 4 128 — bit 7 a 0)
dans X. Peut étre utilisé en mode di-
rect.
TORTUE
ICARE réserve également la possibi-
lité d'implanter la Tortue de Jacques
Duma publiée dans le Pom’s 6 (voir
seconde partie pour le mode opéra-
toire).
La syntaxe de cette commande est
alors :
& DO [ instruction |
Pour la description des instructions
de la Tortue, se reporter au Pom's 6
ou au Recueil 2.
Touches de fonction
& XFUNCT
Initialise le programme de touches de
fonction qui dévie la routine d’entrée
de caractéres. Pour obtenir ensuite
les fonctions, il faut appuyer simulta-
nément sur "Pomme Quverte”
(Apple //e ou //c) ou sur un bouton
de manette de jeu (Apple Il+), et sur
la touche concernée.
En cas de Reset, le programme est
déconnecté. Chaque touche “pom-
mée” est accompagnée d'un “bip”’.
Attention, 'instruction & XFUNCT
déconnecte la routine HCURSOR
qui permet d’avoir un curseur visible
en HGR (voir plus loin).
Les touches de fonction disponibles
sont les suivantes :
© Sil s'agit d'un chiffre n, le pro-
gramme va adresser le commuta-
teur dlaffichage situé a |’adresse
$C050 + n.
® CTRL-1: envoie 8 espaces.
e@ #: envoie N ED24G "RETURN”
(conversion hexadécimal / déci-
mal).
@ %: fait afficher la valeur de
LOMEM.
e : fait afficher la valeur de
HIMEM.
@ «: fait entrer en mode moniteur.
@ /: exécute TEXT:HOME "RE-
TURN”
@ =: affiche COLOR =
® C: envoie CATALOG
G: envoie GR
: fait afficher INPUT
L: fait afficher LOAD
@ N:: fait afficher NEXT
@ R: fait afficher RUN
@ T: fait afficher & DO[
e
e
W: fait afficher & WAIT
Z: fait afficher &CIRCLE =
]: fait afficher &NOISE
Del: recule le curseur en effacant
le caractére précédent.
!: execute TEXT: NORMAL
fait afficher CHR$(
. + affiche HPLOT
<: affiche PEEK(
>: affiche POKE
B: affiche BRUN
E: affiche HOME : POKE 33,28
LIST
=
: envoie HGR
K: affiche POKE —16368,0
M: affiche MID$(
P:: affiche PRINT
S: affiche SAVE
U
x
[:
: affiche & PRINT USNG >
: affiche & XCIRCLE =
affiche & PLAY
CIRCLE
& CIRCLE = X.Y.R
Trace un cercle de rayon R et de
centre de coordonnées X et Y. Les
points en dehors de lécran sont
ignorés. La valeur de R doit étre ab-
solument positive
Auteur - Dominique Bernardi - Pom’s
12
XCIRCLE
& XCIRCLE = X,Y,R
Comme preécedemment, mais le cer-
cle est rempli avec la couleur cou-
rante. Le tracé de points en dehors
de l’écran donne un résultat bizarre...
Hard-Copy
& HARDCOPY
Recopie l'écran texte sur imprimante.
Les caractéres en INVERSE et
FLASH sont recodés. La routine ne
fonctionne toutefois _correctement
que sur une Epson équipée d'une in-
terface Epson.
PLOT AT
& PLOT exp AT X,Y
Envoie sur l’écran texte le caractére
dont le code-écran est donné par
“exp”, et ce A la position X-Y (X de
0439 et Y de 0 23).
HGR PRINT
& HGR PRINT
Connecte la routine de sortie de ca-
ractéres HGR qui permet d’écrire en
page HGR avec des caractéres gra-
phiques comme on écrit en page
TEXT. Il faut utiliser une table de 96
caractéres graphiques (une table de
Haifa, par exemple) dont l'adresse
de début doit étre placée en 206-207
(ce qui permet de placer la table elle-
méme n’importe ot en RAM).
La table étant chargée, il suffit de
faire HGR ou HGR2 aprés & HGR
PRINT pour écrire en graphique,
sans perdre pour autant “le contact”
avec le moniteur et l'Applesoft : les
commandes sont toujours interpré
tées et vous pouvez, si vous le dési-
rez, programmer en Gothique ou en
Hébreu...
NORMAL PRINT
& NORMAL PRINT
Déconnecte HGR PRINT.
TYPE
& TYPE exp
Définit la facon dont les octets sont
envoyés vers la page graphique. Si
on désigne par T un octet de la table
de caractéres et par E l'octet de
l'écran qui se trouve a la position ot
Ton va écrire T. les différentes va-
leurs possibles pour “exp” corres
pondent a
0: affiche T
1: affiche T ORA E (DRAW)
2: affiche T AND E
3> affiche T FOR F (XDRAW)
4: laisse E (pas d’affichage)
SCROLL
& SCROLL expl.exp2
Scrolling HGR dans les limites de la
fenétre. “exp1" détermine la direc-
Pom’s n° 14
tion et “exp2” le code des octets qui
vont combler le vide. Les valeurs
possibles pour "exp1” sont :
1: gauche
2° droite
3: bas
4: haut
HOME
& HOME
Efface la page HGR courante dans
les limites de la fenétre et positionne
le curseur en haut 4 gauche.
Définition de caractéres
graphiques
& DEF CHR$ (X) # expl. exp2
exp8
Redéfinit le caractére dont le code
ASCII est X (65 pour "A", par exem-
ple) avec, dans I'ordre, les valeurs
“expl” ... “exp8”. Il est possible de
donner moins de 8 valeurs (le carac-
lere ne sera alors pas entiérement
défini) ou plus de & (les caractéres
suivants dans la table seront alors
également modifiés).
Cette commande est A utiliser dans le
mode HGR PRINT et les nouveaux
caractéres seront directement implan-
tés dans la table courante
USER
& USER
Exécute un “JMP $300” (CALL
768) et permet a l'utilisateur ne pos
sédant pas d’assernbleur d’ajouter
des commandes a ICARE en implan-
tant directement un code objet a par-
tir de l'adresse $300.
POKE
& POKE adresse,exp
Permet de POKEr une adresse sur
deux octets. Par exemple, & POKE
206,16384 met en 206-207 I'adresse
de début d'une table de caractéres
graphiques située en $4000 (16384
en décimal).
PEEK
& PEEK
Revectorise la fonction USR vers une
routine permettant de lire un PEEK
sur deux octets. Par exemple,
“PRINT USR(206)” aprés initialisa-
tion par & PEEK permet de connai-
tre l'adresse de la table de caractéres
graphiques courante.
Utilisation de la routine
S.H.LAM
& EXEC * “commande moniteur™
Permet de faire exécuter des instruc-
tions moniteur a partr de I'Applesoft,
et par le biais de la routine
S.H.LAM, plus facilement que pat
lecture de DATA, suivie de POKEs et
d'un CALL —144.
Par exemple, & EXEC *"300<8000.
Pom's n° 14
8040M” provoquera un MOVE de la
portion de mémoire comprise entre
les adresses $8000 et $8040 a
Tadresse $300.
Utilisation de ICARE
Pour initialiser ICARE, il suffit de
faire un BRUN du code objet, ou de
charger ce dernier en memoire et de
faire "CALL 32768”. Aprés initialisa-
tion du vecteur ampersand et de
divers registres, la main vous est ren-
due au niveau de l'Applesoft en
mode direct. ICARE se charge @ par-
tir de l'adresse $8000 et place lui-
méme le HIMEM en dessous de cette
valeur.
est réservé a l'implantation éven-
tuelle du code de la routine de
SUPER PRINT.
© De $86FD a $886D
prendre tel quel.
© Le trou entre $886E et $8C74 est
réservé A l'implantation du code
de la TORTUE. Une partie de ce
code doit toutefois étre obligatoire-
ment entrée en machine car elle
est utilisée par d'autres instructions
de ICARE. Le code correspondant
est a placer aux adresses $8AN1 A
8AE3. Ces adresses sont identi-
ques a celles qu’occuperait la rou-
tine concemée si l'ensemble du
code de la TORTUE était implanté
dans ICARE.
code A re-
Compte tenu de ses dimensions, il
n'est pas possible de lister dans la
revue J'intégralité du programme
source (réalisé en assembleur BIG
MAC - MERLIN, version 64K).
Vous trouverez toutefois ci-aprés la
liste de deux routines importantes
dont je pense pouvoir affirmer le ca-
ractére original, HGR PRINT et la
routine de touches de fonction. Sur
la disquette de ce numéro de Pom's,
ces deux routines se trouvent dans le
fichier source ICARE Il.
Le tronc-commun de I'assemblage,
qui contient la définition des étiquet-
tes generales et appelle les deux
autres parties du source, est égale-
ment listé. Il se nomme ICARE 3.1.S
sur la disquette.
En ce qui concerne le code-objet,
Yensemble de la récapitulation vous
est donnée, a l'exception des routi-
nes déja_publiées dans Pom’s
(SUPER PRINT de Denis Sureau et
TORTUE de Jacques Duma).
Comme il se divise en plusieurs
blocs, quelques précisions peuvent
étre utiles 4 sa bonne exploitation, si
vous souhaitez le rentrer en machine
4 la main
© De $8000 a $8645: code A re-
prendre tel quel.
e Le “trou” entre $8646 et $86FC
© De $8C75 4 $90D2: code a re-
prendre tel quel.
e Le trou entre $90D3 et $9252
correspond 4 une table utilisée par
ICARE; la valeur initiale des adres-
ses de cette table n’a pas d'impor-
tance et vous pouvez donc sauter
directement 4 la suite du code.
© De $9253 a $94F5: code a re-
prendre tel quel.
Implantation de SUPER PRINT
Il suffit de mettre en mémoire a partir
de l'adresse $8646 les codes corres-
pondant aux lignes 55 a4 181 du pro-
gramme source publié dans Pom's 9
(SUPER PRINT est relogeable)
Implantation de la TORTUE
Le programme original a été publié
dans le Pom’s 6 et dans le Recueil 2.
Il faut vous y reporter et lui apporter
les adaptations suivantes
© Remplacer la dernidre _ partie
"Suite de linstruction &” pat le
rogramme “Suite instructions”
isté ci-aprés
© Supprimer les lignes 65 a 90 du
source original
© Mettre "ORG $886E” et assem-
bler le nouveau source ainsi cons-
tue.
27
MMM
Le code objet résultant de ces adap-
tations doit ensuite étre placé aux
adresses $886E a $8C74.
Les fichiers ICARE sur
la disquette Pom’s
Fichiers Source
— ICARE 3.1.5 : tronc commun (voir
listing), appelle ICARE I et ICARE Il.
— ICARE I: regroupe toutes les rou-
tines autres que HGR PRINT et les
touches de fonction, Ce fichier
contient des instructions “DS” pour
réserver la place de SUPER PRINT
et TORTUE lors de assemblage.
Vous pouvez bien sar remplacer cela
le les sources de ces deux routines :
lignes 55 a 181 du source original
pour SUPER PRINT, et a partir de la
ligne 91 pour TORTUE (avec toute
fois la modification déja_ signalée
pour la derniére partie “Suite instruc-
tions”).
Si vous désirez effectivement remet-
tre ces deux sources. veillez cepen-
dant & redonner aux étiquettes utili
sées dans les originaux les noms des
6tiquettes générales définies_ dans
ICARE 3.1 lorsque ces noms diffe-
rent.
ICARE Il: reprend HGR PRINT et
les touches de fonction.
Pour assembler ICARE avec BIG
MAC version 64K, les étapes sont les
suivantes :
— L)oad de ICARE 3.1
— Une fois dans I’éditeur/assembleur,
tapez ASM et répondez "N” a la
question "UPDATE SOURCE
— L’assembleur chargera a partir de
la disquette les fichiers TEXT ICARE
1 et ICARE I en fonction de ses be-
soins. L’assemblage complet dure 4
45 minutes.
Fichier Objet
ICARE 3.1 correspond a !'assem-
blage des trois fichiers source et au
code listé dans la revue (les "trous”
sont blen sr occupés, mais ne
contiennent pas de codes significa-
tifs).
Pour rajouter SUPER PRINT et
TORTUE a ICARE, vous pouvez
donc, soit remettre directement les
codes correspondant dans le code
abiet, soit remettre les fichiers sour-
ces adaptés de ces deux routines
dans le source de ICARE (voir ci-
dessus) et ré-assembler le tout
Le programme de démonstration
également listé ici vous donnera une
vue synthétique de l'utilisation de
ICARE (il doit étre lancé aprés initia-
lisation du systéme). Pour l'exploiter
dans la version réduite. vous devrez
supprimer les appels a la Tortue (&
DO[) et a SUPER PRINT. En parti-
culier, vous pouvez remplacer la
ligne 12 par "12 HGR2”, enlever
tous les autres "& DO[” et rajouter
une ligne “280 END”. Le code
POM'S.CHARSET correspond au
contenu d'une table de caractéres
graphiques utiliseée dans le pro-
gramme de démonstration et que
vous pouvez prendre comme base,
par exemple, pour définir d'autres
caractéres par DEF CHR$.
Programme DEMO ICARE 70 & POKE 206,30720: VTAB 12
72 AS = " ICARE - Amper-interpreteur App
S TEXT : HOME lesoft": GOSUB 500
8 HIMEM: 30719 75 & TYPE = 3: FOR I = 1 TO 10: VTAB 12
9 LOMEM: 24577 : HTAB PRINT “
10 DS = CHRS (4): PRINT DS"BLOADCHARSET
»437800": PRINT DS"“BLOADPON’S.CHA 96,255: NEXT
RSET ,AS7BOO" 77 = & TYPE =
12 & DO'IIS: & DO*I25 80 AS =" eueeeeee Par Pascal CANTOT
15 & POKE 206,31488 =: GOSUB S00
17 & HGR PRINT 82 AS =" #wunenne PROGRAMME DE DEMON
18 & TYPE = 0 STRATION": GOSUB 500
20 FOR I=17012: & PRINT “ICARE 84 & WAIT 20: & NOISEO,O: & HOME : PR
«AT 45,2 INT “ Ce court programme va vou
25 & PLAYI * 10,32 S donner un apercu des possibili
27 & WAIT 2 tes d’ICARE..."
30 & PRINT " “ AT 15,1: NEXT 86 & WAIT 20
35 \VTAB 13: HTAB 15: PRINT “I C A RE“: 100 POKE 34,0: POKE 35,24: POKE 32,0: P
PRINT : HCOLOR= 3 OKE 33,40
37 HPLOT 92,92 TO 172,92 TO 172,108 TO 105 & DO*I3§: HCOLOR= 3: VTAB 24: & PO
92,108 TO 92,92 KE 206,31488: HTAB 12: PRINT "CIR
38 HPLOT 93,93 TO 171,93 TO 171,107 TO CLE et XCIRCLE"
93,107 TO 93,93 108 FOR J = 3 TO 4: HCOLOR= J
40 & DO*P116,100,0;B35 110 X = 5: FOR I = 3 TO 57 STEP 3: & CIR
45 & WAIT 10; & HINV: & NOISEO,O: & HI CLE = X,96,1:X = X + I / 3: NEXT
NV 115° & WAIT 10: NEXT
46 FOR I = 3 TO 4: HCOLOR= I: FOR J = 4 120 POKE 35,22: & WAIT 10: & HOME
5 TO 90 STEP 5: & CIRCLE = 132,10 125 I = 50; FOR J = 7 TO 0 STEP - i: HC
0,J: & NOISESO,SO: NEXT : NEXT QLOR= J: & XCIRCLE = 140,90,1:I =
SO & WAIT 5S: FOR I = 1 TO S: & SCROLL4 Io* .75: NEXT
20 127 & WAIT 10
Sl & PLAY64,64 130 & XCIRCLE = 140,90,51: HCOLOR= 3
52 NEXT 132 & XCIRCLE 140,90,50: HCOLOR= 0; &
53. & WAIT S XCIRCLE 155,90,40
SS & BKGND171: & PRINT “ = 135 POKE 35,24: & WAIT 10
AT 14,8: & TYPE = 3: FOR I = 1 TO 141 & WAIT 1
8: & PRINT “I C A RE” AT 15,8: 142 & PLAY128,64;108,64;115,64;115,64;1
& PLAY32,64; NEXT 28,0
60 & TYPE = 0 150 & DO°13;B3§
65 POKE 34,10: POKE 35,13: POKE 32,1: P 155 VTAB 24: HTAB 10: PRINT “TORTUE AMP
OKE 33,38: & HOME
-gseenErs _
FS ee
28
HOME : POKE 35,22
Pom’s n° 14
i158
160
162
163
165
169
170
172
173
175
180
184
185
130
195
197
200
210
212
215
220
230
232
235
240
242
244
250
255
260
270
297
300
30S
307
310
312
315
320
325
330
335,
FOR K = 35 TO 20 STEP - 15
FOR I 1 TO 30; FOR J = 1706: &
DO*AK;T60S: NEXT : & DO'T12§: NEX
T
NEXT
& MOVE8192,16383 TO 16384
& WAIT 20;I = FRE (0): FORI=1
TO 31: & HINV: & BELL20: NEXT
T = FRE (0):T = 0
& WAIT 10; FOR I = 1 TO 700: POKE
- 16299,0:T = T + T * T: POKE -
16300, = 7 + T * Tz NEXT
& TYPE = VTAB 24: HTAB 10:
# SCROLLINGS 3s
0,64: HTAB 10: PRINT “
INGS “;: POKE 230,32
& TYPE = 0
& HINV: FOR I = 1 TO 25: & SCROLL2,
255: & SCROLL3,255: & PLAY16,16:
NEXT
POKE - 16299,0: POKE 230,64: &
IT 10
J = 20
FOR I = 1 TO 20: POKE 32,0: POKE 33
yJi & SCROLL1,0: POKE 32,20: POKE
33,20: & SCROLL2,0: & PLAY16,16:
8:3 + Ls: NEXT
POKE 32,0: POKE 33,40: POKE 34,0: P
OKE 35,24: HOME
& NORMAL PRINT
PRINT
POKE 23
SCROLL
WA
VTAB 8
INVERSE : & RPT PRINT “+++++",8; VT
AB 18: & RPT PRINT “+++++",8: NOR
MAL : FOR I = 8 T0 17: & PLOT 43
AT O,I: & PLOT 43 AT 39,1: NEXT
& RESTORE 9000
FOR I = 9 TO 15: READ AS: FOR J = 1
TO LEN (AS): IF VAL ( MIDS (AS
oJ,1)) THEN & PLOT 32 AT J + 5,
i
NEXT : NEXT
POKE - 16300,0: POKE - 16303,0
FOR I = 1 TO 3: & RESTORE 9100
& WAIT S
FOR J = 1 TO 69: READ N,D
D=D* 1.5: IF D > 255 THEN D = 0
IF I = 2 THEN N = Nw 175
IF I = 1. THEN N = N # 1.25
& PLAYN,D
FOR P = 1 TO 40: NEXT
NEXT
NEXT
& HGR PRINT : & POKE 206,30720
& DO*I3§: HCOLOR= 3: HPLOT 0,0 TO 2
79,0 TO 279,184 TO 0,184 TO 0,0
HPLOT 6,7 TO 273,7 TO 273,177 TO 6,
177 TO 6,7
& TYPE = 1: FOR J = 1 TO 2
FOR I = 1 TO 40: & PRINT “+" AT I,
1; & PRINT "+" AT I,23: NEXT : F
OR IT = 2 TO 22: & PRINT “+" AT 12
I: & PRINT AT 40,1; NEXT
& WAIT S
& TYPE = 0: INVERSE : NEXT
NORMAL
I = FRE (0)
POKE 32,1: POKE 33,38: POKE 34,1: P
OKE 35,22
& POKE 206,21488:
RE” AT 15,3: &
& PRINT "ICA
POKE 206,30720
Pom's n° 14
340
341
342
345
350
355,
360
365
370
375
377
400
405
407
410
420
430
S00
505
Sio
312
530
540
9000
3002
9004
9006
9008
9010
9012
9100
9110
9120
9130
9140
9150
9160
VTAB 4: PRINT : & SUPER PRINT ;
Ceci n’etait qu’
Showing the first 100000 of 283409 characters.