Text content (OCR)
La revue francophone des utilisateurs de Apple
Faites parler et chanter
votre Apple Il
Des POKES a gogo
Tris rapides de tableaux
Initiation a l’assembleur
Le Macintosh est arrive !
NUMERO 11 e PRIX 40 F
ISSN : 0294-6068
_NEPERDEZ PLUS VOTRE TEMPS —
DISQUETTEZ ©
VOUS
“14 LIVRES ET LEUR DISQUETTE “ ~ lee
POUR VOTRE APPLE II |
POUR APPLE II, II PLUS, Ile
VISICALC SUR APPLE II ¢ MATHEMATIQUES ET STATISTIQUES ¢ LA PAIE ET SES ANNEXES
MODELES PRATIQUES DE DECISION (2 TOMES) LE BASIC ET L'ECOLE (2 TOMES) ¢
METHODES DE CALCUL NUMERIQUE (2 TOMES) ¢ BIBLIOTHEQUE SCIENTIFIQUE EN PASCAL
* NOUVELLE COMPTABILITE SUR APPLE II (TOME 1) * MODELES D'EXPRESSION GRAPHIQUE
* OUTILS FINANCIERS ET COMPTABLES © L’APPLE ET SES FICHIERS
POUR TOUT RENSEIGNEMENT TELEPHONEZ AU (6) 006 44 35
ou ECRIVEZ AP.S.1. DIFFUSION BP 86 77402 LAGNY/$/MARNE CEDEX
Ooms nil
Sommaire Page Langage * | Niveau * *
Editorial par Hervé Thiriez 5
Le Bavard par Gilles Chaygneaud-Dupuy 7 B-A T
Une astuce pour supprimer les REMs par Guy d’Herbemont 9 B T
Apprentissage de I’assembleur par Gérard Michel 10 A D-T
Des POKEs 4 gogo par Roland Jost 15 P-T
Un programme de menu par Gilles Mauffrey 18 B-A M-T
Les logiciels de traitement de texte par Guy Lapautre 20 T
Gutenberg 4 l’essai par Guy Lapautre 21 T
Pommesoft par Philippe Faure 24 B-A P-T
Comparaison de programmes en langage-machine
par Denis Sureau 33 A P-T
Deux produits nouveaux pour les lecteurs de Pom’s 37
L’obtention de Il’extremum absolu des fonctions de
plusieurs variables par A. Guillez et Y. Cherruault 40 B R
Un menu 4 Ia carte par Michel Crimont 45 P T
Tri rapide en assembleur par Gérard Rigaud 47 B-A P-T
Effets stroboscopiques par Olivier Herz 52 BA T
MacArticle par Daniel Garric 53 T
Magic Window II a l’essai par Alexandre Avrane 54 T
Comparaison de programmes Applesoft par Gérard Michel 57 B-A P-T
Bibliographie par Alexandre Duback 61
Micro-informations par Guy Lapautre 63
Un « Type Ahead » en Appiesoft par Olivier Herz 65 BA P-T
Courrier des lecteurs par Olivier Herz 68
Tracé de courbes en conversationnel par Gilles Mauffrey 71 B-A M-T
Trucs et astuces 14-46-59-66
* Langage : Basic) - A(ssembleur) - P(ascal). (B) signifie : relatif au BASIC.
** Niveau : D(ébutant) - M(oyen) - P(rofessionnel) - T(ous).
P-T signifie : programme utilisable par les débutants, mais dont la compréhension est de niveau “Professionnel”
Les annonceurs
ACER MICRO: p. 6 — APPLE: p. 38-39 - B.F.I.: p. 62 - SERVICE CALVADOS: p. 30-31-32 — CEDIC-NATHAN : p. 75 —
HELLO : p. 73 —- IMAGOL : p. 68 — MICRO-PERIPH : p. 56 — L’ORDINATEUR INDIVIDUEL : p. 60 — PENTASONIC : p. 76 —
P.S.1. Diffusion : p. 2 - TELECOMPO : p. 34 - SATELCOM : p. 26 - SICOB : p. 4- SYBEX : p. 70
Editions MEV - 49, rue Lamartine - 78000 Versailles
Directeur de la publication : Hervé Thiriez, Imprimerie Rosay, 94300 Vincennes. Imprimé en France. Dépot légal : 1* trimestre 1984.
eee UN
Pom's n° 11 3
& PUBLICIS
SPECIAL
SICOB
UN SICOB
TRES SPECIAL.
PROGICIELS,
MINI, MICRO-ORDINATEURS
(JOURNEES GRAND PUBLIC: 18 ET 19 MAI)
Sega
iSICOB
Information : SICOB (1) 261.52.42 — 4, place de Valois - 75001 Paris
i
‘om’s n° 11
Editorial
Des son lancement, Pom’s a promis le passage en bimestriel dés que le nombre d’abonnés passerait le
cap des 2000. Nous avons atteint cet objectif en décembre (deux abonnés sur trois recoivent en outre
les disquettes). et nous tenons notre promesse : 4 partir de mars, vous aurez six numéros par an. a la
fin de chaque mois impair. Le tirage augmente également. de 7000 exemplaires actuels (tous vendus) 4
12000, afin de pouvoir vous offrir Pom’s en kiosque. De nombreux lecteurs nous disent avoir du mal a
trouver Pom’s dans les boutiques de micro-informatique : si c'est le cas, n’oubliez pas de demander a
votre revendeur d’en commander: sinon. cela ne s'améliorera pas
Cette fois-ci, Olivier Herz nous a bien quitté pour le Japon. aprés trois mois de faux départs. Heureu-
sement, il nous a laissé quelques contributions “posthumes” que nous vous faisons partager avec plaisir.
Vous trouverez dans ce numéro son programme de “Type ahead”. qui permet le stockage et la mémo-
risation des touches que vous enfoncez dans un “buffer”: bel utilitaire pour les stakhanovistes du
clavier.
Nous sommes heureux daccueillir (enfin) un journaliste non informaticien en la personne de Daniel
Garric (la page “Futurs” du Point). auteur des “Dossiers du Futur” Daniel a découvert le Macintosh
en avant-premiére et il vous raconte “son” Macintosh.
Grace 4 Gilles Chaygneaud. la disquette de Pom’s est “parlante” pour la premiere fois. Vous pourrez,
avec son programme et un simple magnétocassette. entegistrer de la parole ou des chansons dans
l'Apple qui vous les restituera ensuite 4 la demande. Sonorisez enfin vos programmes Basic: vous
“blufferez”” tout le monde. Aprés quelques essais et réglages, vous parviendrez a d'excellents résultats.
La disquette étant déja pleine de programmes. nous n‘avons pas pu. hélas. mettre divers exemples de
sonorisation.
Une contribution inhabituelle pour Pom’s en la personne d‘Aliénor. présentée par A. Guillez et Y.
Cherruault. Cet article devrait intéresser particuliérement nos lecteurs scientifiques. et il démontre pour
le moins que I'Apple trouve a s‘emplover dans les domaines les plus divers.
Dans un registre plus large. Guy Lapautre a testé pour vous le traitement de texte Gutenberg et
Alexandre Avrane a fait de méme pour Magic Window
Gilles Mauffrey vous propose un programme trés simple a utiliser pour tracer des fonctions en haute-
résolution et Gérard Rigaud présente une routine complete de tri de tableaux. Roland Jost vous
donne pour sa part une longue liste de POKEs en tous genres. Vous pourrez également rendre Apple
polyglotte avec le Pommesoit de Philippe Faure
Enfin, la comparaison de programmes en assembleur ou en Applesoft vous sera grandement facilitée
par les articles de Denis Sureau et Gérard Michel. qui reprend également une rubrique d'initiation a
l'assembleur.
Nous aurons l'occasion de nous rencontrer deux fois dans un avenir proche : au Spécial-Sicob (palais
du CNIT - La Défense). du_14 au 19 mai, ot nous occuperons le stand 630 (niveau 3. zone F). puis la
semaine suivante 4 Micro-Expo. du 22 au 26 mai, ot nous aurons le stand N44. Vous pourrez venir
nous ramasser 4 la petite cuillére le 26 a la cloture ... A bientét donc !
Hervé Thiriez
Ont collaboré a ce numéro : Alexandre Avrane — Gilles Chaygneaud-Dupuy — Y, Cherruault — Michel Crimont — Guy d’Herbemont —
Alexandre Duback — Philippe Faure — Danier Garric — A, Guillez — Olivier Herz — Roland Jost — Guy Lapautre — Gilles Mauffrey — Gérard
Michel ~ Gerard Rigaud ~ Denis Sureau — Hervé Thiriez. Rédacteurs : Alexandre Avrane — Gerard Michel. Dessins : Laurent Bidot.
Directeur de la publication - rédacteur en chef : Hervé Thiriez. Sige social : Editions MEV — 49, rue Lamartine — 78000 Versailles —
Tel. : (3) 951.24.43,
Diffusion N.M.P.P. ~ Sophie Marnez ~ Tél, : (1) 240.22.01
Composition : Télécompo ~ 13-15, avenue du Petit Parc — 94300 Vincennes — Tél. - 328.1863
Impression : Rosay ~ 47, avenue de Paris — 94300 Vincennes — Tél. ; 328.18,63
Pom’s n’ 11
RENDEZ VOTRE APPLE * ENCORE "PLUS”
Cartes et accessoires additionnels compatibles APPLE II @
FLOPPY-DRIVE POUR APPLE
3 POUCES MDS «HITACHI»
COMPLET AVEC
CONTROLEUR
(29805
= Capacité DD : 500 K octets.
= Nombre de pistes : 80
Densité : 100 TPI
= Dimension : 90 x 40 x 150.
- Poids : 0,8 kg
8 POUCES
Compatible Apple avec
contrbleur
Sans controleur
ni coffret 2190 F
disquette rigide protegée | 9
runite 68 F
SF-00 48 TPI, unite
aa DISQUETTE POUR FLOPPY 2
par 10 pitces 'unité 2B Fy
oF
par 50 pigces unite 19 F
Pour extension du 48 K RAM en 64 K
FORT! LISP. BASIC
he équinée
Compatible
08)
CARTE D’EXTENSION ,—-
188 K RAM
ey
Emulation disk-drive
sous DOS, PASCAL ou CPIM
Entigrement équipee
CARTE 80 COLONNES
Fonctionne sous CP/M
Utilisation de tout logiciel sous CPIM
Entigrement equipée
CARTE INTERFACE POUR 2
FLOPPY-DRIVE
ment de programme directernent sur 2
Engrement Squpee
oes D'UNITE CENTRALE
double proceaseur 6808 et Z 80. 64 K
Entigrement AWE.
{sans ROM)
7 slots d extensions. Fonctionne sous CP/M
CLAVIER ASC II
56 touches. Alphanumérique.
Majuscules, minuscules, décimales
ALIMENTATION 20 v, 54
COFFRET pour care de base
et pavé numérique
KIT GOLDEN
Carte d’unité
centrale avec 6502 et 280
Clavier ASC It
Alimentation 220 V. 5 A
_ ay 8797 F
5199")
Chaque élément peut-étre acheté séparément
3350 F
950F
799 F
698 F
ENSEMBLE
CARTES D'INTERFACGAGE
Carte RVB (pour moniteur couleur) 9B F
Carte «SPEETCH» en anglais 695 F
Carte musicale pour synthétiseur de son 888 F
Carte horloge 788 F
Carte vidéo MODEM. 2850 F
Carte contréleur (drive) 595 F
Carte de connection
série RS 232 C 798 F
GARTE INTERFACE BUFFERISEE
[MANTE
Pour toutes
64 K RAM,
Livrée équipée en 16 K
arques sortie CENTRONI
TABLE GRAPHIQUE
hisme, connectable
lace du Jay:stick
MONITEUR COULEUR
RIC en module
Simple 4 monter
aio Pans m 422
my
IMPRIMANTE SEIKOSHA
GRAPHIQUE COMPACTE
GP 100 A
doY-! tte
0% &
équipé de 2 trimes PROMO
pour recherche du paint zéro
ZENITH 12”
ran vert
VENTILATEUR «FAN» 495 F
s)
OCEANIC
14” couleur
5500")
Normal, Entrainement par tracteurs ajustables.
INTERFACES POUR GP100 A
APPLE II ou IIE avec cable
32
SANYO 880"
Ho 25 880?
Cables pou
oRic 80"
07 &80"
IMPRIMANTE
GP 50A SEIKOSHA
trainement a friction » Graphique
un dome [2507]
Papier pour GP 100
Les 1000 f
uban encreur GP 100
160 F
o9F
: compatible CENTRONICS
EN KIT
EFFACEUR D’EPROM -—
[180°]
Complet aver notice
* APPLE est une marque déposée et appartient a APPLE COMPUTER S.A
IONS GENERALES OE VENTES PAR CO}
IRRESPONOANCE
Tél.
ACER MICRO
42, rue de Chabrol, 75010 Paris.
7710.28.31.
Saviez-vous que votre Apple peut
dire quelques mots, sans aucune pro-
thése, pour peu que vous les lui ap-
preniez !
Cela est possible grace au systéme
“Le Bavard”, qui se compose d’un
petit module en langage machine et
d'un programme en Applesoft ser-
vant d’éditeur.
Le module PARLE
Le programme source a été écrit
avec l'assembleur Dos Tool Kit.
Ce module permet de mettre sous
forme numérique des mots préalable-
ment enregistrés sur un magnéto-
phone et de les stocker en mémoire
Une deuxiéme sous-routine (voir le
programme d’édition) permet de res-
tituer les sons a différentes vitesses,
soit sur le haut-parleur de I’Apple,
soit sur un amplificateur extérieur.
La restitution n’est pas toujours tres
intelligible sur I'Apple, car ce dernier
ne dispose que d'une seule voix
pour sortir l'ensemble des fréquences
simultanées.
Le programme
”BAVARD”
Il vous propose plusieurs fonctions
1 - Enregistrer un texte en mémoire
a partir d'un magnétophone
connecté a I'Apple. Le magnéto-
phone étant sur écoute, il suffit de
taper une touche quand arrive le
texte voulu, puis d’arréter le stockage
par la frappe d'une autre touche.
2 - Ecouter le texte actuellement en
mémoire.
3 - Stocker sur disquette le texte qui
se trouve en mémoire sous forme
d'un fichier binaire dont vous devez
préciser le nom.
4 - Relire en mémoire un texte préa-
5 - Choisir lorgane de sortie qui
peut étre le haut parleur de |'Apple
ou un organe extérieur, en passant
par la sortie magnétophone.
6 - Editer le catalogue de la disquette
pour sélectionner les fichiers a relire.
Au
Couranr |
7 - Changer la vitesse de restitution
des sons, qui peut aller de 0 4 9, 0
donnant la voix la plus aigué et 9 la
plus grave
8 - Visualisation des sons enregistrés
en mémoire sous forme de courbes
de fréquence, avec en abscisse
l'adresse de l'octet et en ordonnée la
valeur de la fréquence vocale que
contient cet octet. Les silences cor-
Le Bavard
Gilles Chaygneaud-Dupuy
Pécran et l'on va de l’aigu au grave
en allant du haut vers le bas de
Pécran.
Il faut donner en paramétre l’adresse
de départ de cette visualisation, 0
étant le début de I'enregistrement
Utilisation dans vos pro-
grammes
Si vous voulez sonoriser vos pro-
grammes Applesoft au moyen de
textes enregistrés par "Le Bavard”, il
faut charger par BLOAD le pro-
gramme PARLE1.OBJ et le fichier
contenant le texte concerné. Ce der-
nier peut étre implanté n’importe ot
en mémoire, mais il faut en préciser
V'adresse de départ par un POKE aux
adresses 0 et 1 avant d’appeler le
module par CALL 819. Par exem-
ple
PRINT CHRS$(4) *BLOAD
PARLE1.0BJ"
PRINT CHR$(4)"BLOAD COCO-
RICO,A$4000"
POKE 0,0: POKE 1,64
CALL 819
Pour faire varier la vitesse, il faut ef-
fectuer un "POKE 846, 252—V"
avant l'appel du module, V étant un
chiffre compris entre 0 et 9.
Pour gérer une table de mots pro-
noncer (afin de sonoriser le clavier,
par exemple), il faut les séparer les
uns des autres dans leur représenta-
tion numérique par un octet conte-
nant $FF, qui marque la fin de I’en-
registrement. Indiquez ensuite
adresse de début du mot voulu
avant chaque appel au module
lablement stocké sur disquette respondent a des zéros en haut de — PARLE1.OBJ a
Programme BAVARD HTAB 40: PRINT
22
Q REM PROGRAMME "LE BAVARD"
<APPLESOFT >
1 PRINT "BLOADPARLE! .OBJ*" "s
2 PRINT "BLOADCOCORICO" 30 NORMAL
3 FOR I = 2 TO 8 STEP 2: POKE 846 35 POKE
9254 —- I: POKE 0,0: POKE 1,64 40
: CALL 819: NEXT
4 POKE 846,254 - 6
6 PRINT "BLOADBAVARD.MESS"
HTAB 15: PRINT "=: L
HTAB 15: PRINT
- 16368,0
HTAB 6: VTAB 6: PRINT "1-ENREG
ISTRER UN TEXTE"
50 HTAB 6: VTAB 8:
ER UN TEXTE"
PRINT "2-ECOUT
10° TEXT : HOME 60 HTAB 6: VTAB 10: PRINT “3-SAUV
15 INVERSE : VTAB 2: PRINT “:"3 SPCC ER UN TEXTE SUR DISQUE"
12): HTAB 29: PRINT SPCC 12) 70 HTAB 6: VTAB 12: PRINT “4-CHAR
VTAB 24: PRINT ":"3 SPCC GER UN TEXTE EN MEMOIRE*
80 HTAB 6: VTAB 14: PRINT “S-SELE
CTIONER LA SORTIE*
Poo UN
Pom’s n° 11 7
i
20 FOR I 3 TO 23: VTAB I: HTAB
90 HTAB 6: VTAB 16: PRINT "6-AFFI
92
9S
97
99
100
110
1000
1010
1015
1020
1025
1030
1040
1050
1990
2000
2010
2020
3000
3010
3020
3990
4000
4005
4010
4020
CHER LE CATALOGUE"
HTAB 6: VTAB 18: PRINT "7-CHAN
GER LA VITESSE D’ECOUTE"
HTAB 6: VTAB 20: PRINT "8-VISU
ALISER UN TEXTE "
HTAB 6: VTAB 22: PRINT "9-SORT
IR DU PROGRAMME”
IF N = 0 GOTO 2000
HTAB 35: VTAB 22: GET N
ON N GOTO 1000,2000,3000,4000
,»9000,6000,7000,8000,9000
HOME
VTAB 10: PRINT "VOUS METTEZ
VOTRE MAGNETOPHONE EN ROUTE E
T VOUS APPUYEZ SUR RETURN POU
R DEBUTER L’ENREGISTR
EMENT “
PRINT “PUIS APPUYEZ DE NOUVE
AU SUR RETURN POUR L‘ARR
ETER."
INPUT AS
POKE 00,00: POKE 01,64
CALL 768
FIN = PEEK (01) * 256 + PEEK
oa)
LG = FIN - 16384 + 10
GOTO 10
POKE 00,00: POKE 01,64
CALL 819
N = 1: GOTO 10
HOME
VTAB 10: INPUT "NOM DU FICHI
ER A SAUVER ? "jAS
PRINT “BSAVE" ;A$;",A%4000,L"
;LG
GOTO 10
HOME
VTAB 10: INPUT "NOM DU TEXTE
A CHARGER ? *;A$
PRINT “BLOAD" ;A$;",A$4000"
LG = PEEK (43616) + PEEK (4
Programme PARLE1.S
DOS TOOL KIT
0300: 1 ORG $300 PROGRAMME PARLE
030: 2 BRUIT EU $0030
C060: 3 CASSET EQU $CO60
0000: 4 ADD equ 0
coo0: ‘3 CLAVIER EQU $CO00
0006; 6 SON EQU $6
0007: 7 FREQ = EQU $7
0300:A0 00 8 DEBUT LOY #0
0302:84 07 g STY FREQ
0304:E6 07 10 INC FREQ
0306:AD 40 CO 11 LDA CASSET
0309:85 06 12 STA SON
030B:AD 60 CO 13 INF LDA CASSET
030E:45 06 14 EOR SON
0310:30 04 15 BMI SUIVAN
0312:E6 07 16 INC FREQ
0314:D0 F5 17 BNE INF
0316:A5 07 18 SUIVAN LDA FREQ
4990
5000
Said
5020
5030
5040
5050
5060
5070
S990
6000
6015
6020
7000
7005
7010
7020
7030
7040
8000
so02
8004
8005
8006
go1a
8020
8025
8030
8040
8050
9000
0318:C9
0318200
O31C:A9
O31Es91
0320:E6
0322:D0
0324:E6
0326:20
0329330
032B:4¢
032E:A9
0330:91
0332360
0333:B1
0335:85
0337:C9
0339:FO
033B:2C
033E:30
0340348
3617) * 256
GOTO 10
HOME
VTAB 10: PRINT “VOULEZ VOUS
ECOUTEZ VOTRE TEXTE :"
PRINT " A-SUR L’APPLE"
PRINT " B-SUR UN AMPLI EXTE
RIEUR"
PRINT : INPUT "VOTRE CHOIX ?
"SAS
IF A$ = "A" THEN POKE 851,4
8: GOTO 10
IF AS = "B" THEN POKE 851,3
2: GOTO 10
GoTo 5000
GOTO 10
PRINT =
LoG"
INPUT AS
GOTO 10
HOME
Y= 252 - PEEK (846)
VTAB 10: PRINT “LA VITESSE E
ST ACTUELLEMENT DE ";V
PRINT : PRINT * A COMBIEN
LA VOULEZ VOUS ? "3: GET V
POKE 846,252 - V
GOTO 2000
HOME
VUTAB 22: INPUT “ADRESSE DEBU
T A VISUALISER * ;AS
IF AS = "" THEN TEXT
10
HGR : HCOLOR= 3
A= VAL (AS)
FOR I = 6 TO 259
Y = PEEK (16384 + A + ID
Y= Y 7/7 255 * 160
PRINT CHR (4)"CATA
: GOTO
HPLOT 1,Y
NEXT
GoTo 8000
END
FF «19 CNP ASF
2 «6 BNE #44
FE ot LDA SFE
0 2 STA (ADD),Y
es) INC ADD
2 4 BNE ADD?
nu 285 INC ADD+
00.CO 26 ADD2 BIT CLAVIER
3B 27 BNI. FIN
0003 28 AMP DEBUT
FF 29 FIN. LDA. SF
0 © 30 STA <ADD),Y
31 RTS
00 = 32 DIT._—LDA. ADD), Y
6 3 STA SIN
FF 34 CNP NSF
F735 BEQ FING
00 co 36 BIT CLAVIER
F237 BNI FING
38 PHA
Pom’s n° 11
0341 :EA 39 BOUCLE2 NOP O35B:4¢ 33 03 57 AMP DIT
0342:EA 40 NOP 0352:A0 30.CO 53 LOA BRUIT
0343:EA 41 NOP
0344:A a NOP Scant ‘
OaRSiEA a hp Récapitulation
0346:EA 44 NOP 0300- AO 00 84 07 £6 07 AD 40
0347:EA 45 NOP 0308- CD 85-06 AD 40 CO 45 06
0348:EA 4 NoP 0310- 30 04 £6 07 DO F5 a5 07
0349:EA 47 NOP 0318+ CP FF DO 02 A9 FE 91 00
O344:EA 48 NoP 0320- E6 00 D0 02 E6 01 2C 00
024B:C6 0649 DEC. SON 0328- CO 30 03 4C 00 03 A9 FF
034D:D0 F2 50 BNE BOUCLE2 0330- 91 00 60 B1 00 85 06 C9
034F 68 be PLA 0338- FF FO F7 2C 00 CO 30 F2
0350:F0 0352 BEO SAUT 0340- 48 EA EA EA EA EA EA EA
O355:E6 00 54 SAUT INC ADD 0348- EA EA EA Cé 06 DO F8 68
0357:00 DA 55 BNE DIT 0350- FO 03 AD 30 CO Es 00 DO
0359:E6 01 56 INC ADE 0358- DA E6 01 4C 33 03
e
Une astuce pour supprimer les REMs
S'il est vrai que les REMs ralentissent
et encombrent un programme, il ne
Test pas moins qu’elles contribuent
souvent 4 sa bonne compréhension
pour quiconque ne l'a pas écrit.
La solution consiste donc a conserver
deux versions d'un méme_pro-
gramme, avec et sans commentaires,
ce qui justifie le besoin d'une procé-
dure automatique de suppression des
REMs 4 Tintérieur d'un programme
en Applesoft.
Celle que je vous propose repose sur
un principe trés simple : si l'on rem-
place tous les codes REM (178) par
00, le programme n’est plus exécuta-
ble mais il se liste normalement sans
les REMs (le O00 étant interprété
comme une fin de ligne). Il suffit
donc de stocker cette liste dans un
“NEW” puis "EXEC NEW-LIST”,
pour récupérer en mémoire une ver-
sion exécutable du programme, sans
REMs, qu'il ne reste qu’a sauvegar-
der.
Le programme FAIT SANS-REM listé
ci-aprés construit un fichier SANS-
REM qui réalise les opérations sui-
vantes
© Chargement en mémoire des
lignes 60005 a 60096. Ce petit
programme assure la transforma-
tion des codes REM et la sauve-
garde de la liste en résultant dans
le fichier NEW-LIST.
© Exécution de ordre “RUN
60005” pour effectuer le traite-
ment ci-dessus.
@ Exécution de "NEW" puis "EXEC
Guy d’Herbemont
mémoire le programme original
modifié.
Une fois ce fichier construit, l'utilisa-
tion de la procédure se réduit a
@ LOAD "Programme a modifier”
@ EXEC SANS-REM
Un LIST 4 lissue des opérations
vous permettra de vérifier que les
REMs ont bien disparu (les ”:” qui
précédent éventuellement les instruc-
tions REM sont en revanche conser-
vés), et il ne vous reste plus qu’a
sauver la version allégée de votre
programme.
A_noter que les lignes 60005 a
60096 ne doivent impérativement
contenir aucune REM et que, bien
sr, le programme original ne doit
comporter aucune ligne de numéro
fichier texte NEW-LIST, et de faire NEW-LIST” pour récupérer en supérieur 4 59999 r]
Programme FAIT SANS-REM 60020 IF BYT = 0 THEN GOSUB 4006
O: ON DEB = 0 GOTO 60070: ON
DEB < > 0 GOTO 60010
1 REM PROGRAMME POUR CONSTITUER 60027 IF BYT < > 178 GOTO 60015
2 REM LE FICHIER EXEC 60030 POKE X,0
3 REM "SANS-REM" 60040 GOSUB 60060: ON DEB = 0 GOTO
4 REM == 60070
60050 GOTO so010
10 D$ = CHRS (13) + CHRS (4):NS = 60060 DEB = PEEK (DEB) + 256 * PEEK
"SANS-REM*: PRINT DS" OPEN"N$D (DEB + 1): RETURN
$" DELETE "N$D$*" OPEN"NSD$"WRITE 60070 POKE 33,30
"NS 60072 D& = CHR (13) + CHRS (4):
20 POKE 33,30: LIST 60005,: PRINT N& = "NEW-LIST": PRINT D$"OPE
"RUN 60005": PRINT "NEW": PRINT N"N$D$" DELETE "N$D%" OPEN"NSD$"
"EXEC NEW-LIST": PRINT D$"CLO WRITE"NS
SE": TEXT : END 60080 LIST ,59999
60005 DEB = 2049 60090 PRINT DS*"CLOSE"
60010 X = DEB + 3 60095 TEXT : HOME
60015 X = X + 1:BYT = PEEK (x) 60096 END
Pom’s n° 11
Apprentissage de l’assembleur
Gérard Michel
Cet article constitue la reprise d’une
série abordée dans les premiers nu-
méros de Pom’s. Si l'on en juge par
votre courrier, vous étiez nombreux a
souhaiter le retour d'une rubrique
consacrée 4 l’apprentissage de |'as-
sembleur, nous allons donc nous ef-
forcer de vous donner satisfaction,
conformément aux objectifs de cette
revue.
Rappelons tout d’abord, pour éviter
toute confusion, que I’assembleur est
déja un langage “évolué”, 4 ne pas
confondre avec le langage machine.
En matiére de logiciel (et en simpli-
fiant), la seule chose que votre Apple
puisse comprendre sans l'aide du
moindre compilateur ou interpréteur,
cest de 'hexadécimal, autrement dit
des codes comme ceux que vous
trouvez dans Pom’s 4 la suite d'un
programme en assembleur sous le
titre “récapitulation” (20 Cl FB
par exemple)
Un assembleur est donc un langage
constitué d’instructions plus _facile-
ment compréhensibles que I’hexadé-
cimal, théoriquement plus faciles éga-
lement & mémoriser (pour les
anglicistes du moins), doublé d'un
“traducteur” qui transforme automa-
tiquement ces instructions en code
exécutable par la machine (cette
opération est : baptisée 'assem-
blage”). C'est pourquoi l'on parle
toujours de programme source (en
langage assembleur) et de pro-
gramme objet (en hexadécimal), ré-
sultat de la traduction du premier
Cela signifie en particulier que vous
ne pouvez pas programmer en as-
sembleur si vous ne possédez pas un
logiciel _“éditeur/assembleur” tel que
LISA, BIG MAC, DOS TOOL KIT
ou autre, autant de noms qui doivent
vous étre maintenant familiers si vous
étes un fidéle lecteur de Pom’s. Par
contre, vous pouvez toujours écrire
un programme par le biais du code
hexadécimal, du moins dans un pre-
mier temps, ne serait ce que pour
vous faire une idée de ce que pour-
rait vous apporter l’assembleur. C’est
pourquoi nous vous donnerons dans
cet article le code correspondant
chacune des instructions présentées;
de plus, dans toute la mesure du
possible, nous vous fournirons une
version des opérations réalisées sous
forme d’instructions en Applesoft, ce
qui devrait aider 4 l'analyse et a la
compréhension des mécanismes mis
en oeuvre, que nous allons aborder
sans plus attendre.
10
Variables et registres
Comme tous les langages, |’assem-
bleur permet de travailler sur et avec
des variables. En premiére approxi-
mation, une variable est une case
mémoire contenant un octet (deux
chiffres hexadécimaux), définie par
son adresse. Ainsi, $6 (soit 6 en déci-
mal) ou $18 (soit 24 en décimal).
par exemple, peuvent constituer
l'adresse d'une variable dans laquelle
le programme ira lire ou stocker des
valeurs. Rappelons que, par conven-
tion, un nombre précédé de $ est
toujours un nombre hexadécimal
Il est d’ailleurs important de distin-
guer dés maintenant la variable (ou
Tadresse) et son contenu. Lorsque
lon écrit simplement $18, on fait ré-
férence a la case mémoire dont
adresse hexadécimale est $18: si
Ton écrit #$18 par contre, on dési-
gne la valeur $18 (ou 24 en déci-
mal). De méme, chaque fois qu'une
instruction de l'assembleur porte sur
la manipulation d'une variable, c'est
son contenu qui s’en trouve affecté
(en BASIC, A=B transfére également
le contenu de B dans A mais ne
remplace pas le A par un B).
Notons en outre une différence de
régime, sur laquelle nous reviendrons
plus tard, entre les adresses dites
“page zéro” et les autres. Une
adresse est en page zéro si elle est
inférieure a 256 (de $0 a $FF en
hexadécimal) et peut donc étre re-
présentée par un seul octet.
Affectation d’une valeur
En mode _ immédiat, l'affectation
d'une valeur & une variable peut se
faire directement. Supposons par
exemple que l'on veuille mettre
#$FF (soit 255 en décimal) a
Yadresse $18, en partant du BASIC,
le processus serait le suivant
CALL —151 (pour accéder au moni-
teur)
+18: FF "RETURN" (I'étoile est le
“prompt” du moniteur et est affichée
par le systéme, le reste doit étre tapé
au clavier, sans oublier les ”:”). "RE-
TURN” signifie tout simplement “Ap-
puyer sur la touche RETURN”.
Ceci est équivalent a l'instruction Ap-
plesoft : POKE 24,255 “RETURN”.
Pour lire le contenu de l'adresse $18
a partir du moniteur, tapez
18 “RETURN”
et la machine répondra
*0018-FF
Vous auriez pu obtenir le méme ré-
sultat (255 en l’occurrence) avec les
instructions
PEEK(24)
Les opérations de lecture/écriture du
contenu d'une variable 4 partir d'un
programme en assembleur supposent
Temploi des registres du micropro-
cesseur_ car, si l'on peut faire
“A=255" en BASIC, on ne peut pas
faire directement "$18=#$FF” en
assembleur (la deéfinition directe de
constantes est toutefois possible, mais
ce n'est pas notre propos pour I’ins-
tant). Un registre peut se définir
comme une variable _ particuliére,
dont le nom reste toujours le méme,
que le microprocesseur utilise pour
communiquer avec la mémoire de
Yordinateur. La "case mémoire” cor-
respondant a un registre se trouve,
en quelque sorte, dans le micropro-
cesseur et le programmeur n’a jamais
besoin de la définir lui-méme.
Dans ce domaine, trois registres peu-
vent nous étre utiles : l'accumulateur
(désigné plus simplement par A), le
registre d'index X et le registre d’in-
dex Y. Chacun de ces registres peut
contenir un octet et prendre ainsi
une valeur comprise entre 0 et 255
($0 et $FF)
Si nous nous acharnons toujours 4
mettre #$FF dans la case $18, trois
séquences d’instructions sont ainsi
disponibles
1) LDA #$FF (A9 FF)
STA $18 (85 18)
ce qui signifie “charger accumulateur
(LoaD A) avec la valeur #$FF” puis
"stocker la valeur de A (STore A)
dans la case d’adresse $18”. En Ap-
plesoft, cela pourrait s’écrire
A=255:POKE 24,A
Les codes entre parenthéses ne sont
pas de l'assembleur mais correspon-
dent a ce qu'il faudrait taper au cla-
vier pour rentrer ces instructions di-
rectement en hexadécimal. Ainsi, A9
est le code de LDA lorsque celui-ci
est suivi d'une valeur (FF) et 85 est
le code de STA lorsque celui-ci est
suivi d'une adresse en page zéro
(18). Si vous voulez par exemple im-
planter ces instructions a partir de
adresse $300 (768 en décimal), il
vous faudra taper, a partir du mor
teur (derriére I’étoile de “prompt”) :
300: A9 FF 85 18 “RETURN”
Si vous tapez ensuite
300L “RETURN”
le systéme vous répondra
300-A9 FF LDA #$FF
302-85 18 STA $18
plus d'autres choses sans signification
pour nous et qui dépendent de ce
qui se trouve dans votre Apple a par-
Applesoft: PRINT
Pom’'s n° 11
tir de ladresse $304 au moment ot
vous exécutez ce test.
La commande "L” (pour LIST),
tapée derriére une adresse, demande
en effet au moniteur d’essayer de dé-
sassembler les codes hexadécimaux
stockés a partir de cette adresse pour
en faire 20 lignes d’instructions en
langage assembleur. Bien str, le ré-
sultat en est plus ou moins cohérent
selon les codes rencontrés, mais
n'oubliez pas cette aide que peut
vous apporter le systéme car elle
s'avére toujours utile pour le déchif-
frage de routines dont on ne posséde
pas le programme source.
2) LDX #$FF (A2 FF)
STX $18 (86 18)
Compte tenu de ce qui précéde, la
signification de ces deux instructions
ne doit plus vous échapper (on passe
par le registre X au lieu de passer par
Taccumulateur)
3) LDY #$FF (AO FF)
STY $18 (84 18)
Méme chose avec le registre Y
Utilisation d
étiquettes
Les assembleurs "symboliques” (tou-
jours LISA, BIG MAC ...), permettent
de donner un nom, ou une étiquette,
aux variables. Cela rend le pro-
gramme source plus parlant et plus
facile 4 analyser : LIGNE, par exem-
ple, est d'une interprétation plus di-
recte que $C6. En outre, l’affectation
d'une étiquette simplifie considéra-
blement la mise A jour d'un pro-
gramme source si l'on se trouve
contraint, pour une raison ou pour
une autre, de modifier l’adresse
d'une variable. Il suffit alors de chan-
ger la définition de ’étiquette, alors
qu'il faudrait autrement rechercher
tous les endroits ot apparait
l'adresse concernée pour la modifier.
D’un assembleur 4 l'autre, la défini-
tion de ces étiquettes revét une syn-
taxe légérement différente. Pour
notre chére adresse $18, on pourrait
ainsi avoir
ADR EPZ $18 (si on veut l'appeler
ADR), ou
ADR EQU $18, ou
ADR = $18...
Cest 4 la documentation de votre
assembleur qu'il faut vous reporter
pour connaitre la bonne syntaxe.
Notons simplement qu'une étiquette
doit toujours étre définie quelque
part dans le programme source pour
étre utilisée dans une instruction sans
provoquer d’erreur a |’assemblage (la
solution la plus claire consiste a les
mettre toutes en téte de programme,
comme le font les auteurs des articles
publiés dans Pom’s).
Pour en revenir & notre exemple, si
l'on suppose que l'on a baptisé la
case $18 du nom ADR, on pourrait
écrire en assembleur :
LDA #$FF (A9 FF)
Pom’s n° 11
STA ADR (85 18)
Notez que le nom symbolique n’est
valable -que pour le programme
source; le code hexadécimal reste
toujours le méme et fait référence a
$18.
En Applesoft, cela reviendrait &
ADR=24:A=255:POKE ADR,A
Lecture d’une case mémoire
Pour lire le contenu d'une case-mé-
moire, les trois registres peuvent éga-
lement étre utilises, d’ot trois solu-
tions disponibles
1) LDA $18 ou LDA ADR (A5 18)
2) LDX $18 ou LDX ADR (A6 18)
3) LDY $18 ou LDY ADR (A4 18)
Ces trois instructions reviennent a
charger respectivement I’Accumula-
teur, le registre X ou le registre Y,
avec le contenu de l'adresse $18.
Vous aurez sans doute remarqué que
les codes des instructions LDA, LDX
et LDY ne sont pas les mémes que
lorsqu’on leur donnait directement la
valeur #$FF. Chaque type d’opéra-
tion posséde un code particulier:
ainsi
1) Pour LDA
© LDA valeur = A9 valeur (exem-
ple: LDA #$30 = A9 30)
e LDA contenu d'une adresse en
page zéro = AS adresse (exem-
ple: LDA $24 = A5 24)
LDA contenu d’une adresse hors
de la page zéro = AD octet bas
de l'adresse/octet haut de
l'adresse.
Lorsqu’une adresse s’écrit sur deux
octets, soit 4 chiffres hexadécimaux,
Yoctet bas correspond aux deux chif-
fres de droite et l’octet haut aux
deux chiffres de gauche. Par exem-
ple
LDA $300 = AD 00 03
LDA $FDED = AD ED FD
C'est une sale manie, mais |’Apple
prend toujours les adresses l'envers
de cette facon !
2) Pour LDX
e LDX valeur = A2 valeur
@ LDX contenu d'une adresse page
zéro = A6 adresse
e LDX contenu d’une adresse quel-
conque = AE octet bas/octet haut
(exemple: LDX $40F = AE OF
04)
3) Pour LDY
@ AO valeur
© Ad adresse
© AC octet bas/octet haut
Opérations sur les regis-
tres
Nous ne présenterons pour l'instant
que celles qui nous seront utiles pour
la suite de cet article.
1) INX (code E8): incrémente X de
1 (équivalent 4 X=X+1)
2) DEX (code CA): décrémente X
de 1 (équivalent 4 X=X—1).
3) INY (code C8): incrémente Y de
1
4) DEY (code 88)
‘Ly
5) TAX (code AA): transfére le
contenu de A dans X, sans modifier
celui de A (équivalent 4 X=A).
6) TAY (code A8): transfére le
contenu de A dans Y (Y=A).
7) TXA (code 8A): transfére le
contenu de X dans A (A=X).
8) TYA (code 98): transfére le
contenu de Y dans A (A=Y).
décrémente Y de
Egal 4 zéro ou différent
de zéro ?
Parmi les instructions de test et de
branchement disponibles en assem-
bleur, deux nous seront également
utiles dans un futur immédiat :
1) BEQ (code FO)
En Applesoft, instruction BEQ serait
équivalente a IF “dernier résultat”=0
THEN branchement.
Si le dernier résultat n'est pas nul, on
passe simplement 4 I'instruction sui-
vante
Compte tenu des instructions que
nous avons déja examinées, nous
pouvons dire ce stade que le “der-
nier résultat” en question correspond
a la valeur du dernier registre mani-
pulé, Par exemple :
@ Aprés LDA $18, BEQ provoquera
un branchement si $18, et donc
Yaccumulateur, contient 0.
Aprés DEY, BEQ provoquera un
branchement si Y tombe 4 0.
© Aprés TXA, BEQ provoquera un
branchement si X, et donc A,
contient 0
L'endroit vers lequel s'effectue le
branchement ne pose pas de pro-
bléme si l'on écrit un programme
source en assembleur symbolique.
Comme pour les variables, il est en
effet possible de mettre des étiquettes
en regard des instructions; le bran-
chement se fait alors par référence a
cette étiquette (voir plus bas). Si l'on
travaille directement au niveau de
Phexadécimal, il faut alors savoir que
BEQ ne fait pas de branchement sur
une adresse, mais en fonction d’un
déplacement vers le haut ou vers le
bas. La valeur de ce déplacement
doit suivre le code FO. Voici quel-
ques exemples
e FO 00: le branchement se fait a
Yoctet qui suit 00 (si le FO se
trouve a l'adresse $300, BEQ
branchera & l'adresse $302 si le
dernier résultat est nul). Une telle
instruction serait donc inutile puis-
que l'on artiverait @ la méme
adresse quel que soit le résultat du
test.
e FO O1: branchement a "adresse
de FO + 3”
© FO 02: branchement a "adresse
de FO + 4”
e FO FF: branchement a "adresse
de FO + 1” (ce qui provoquera
une erreur puisque l'on retombe
sur FF, qui n'est pas le code d’une
instruction). La valeur $FF corres-
pond en fait 4 —1 en décimal:
lorsqu’il “lit” FO, le microproces-
seur “pointe” aussitét vers l’octet
suivant (FF en loccurrence), de
méme lorsqu’il lit le FF qui recule
le pointeur de 1 et le ramene
donc sur FF.
e FO FE: branchement sur I'adresse
de FO (boucle infinie !)
e FO FD: branchement a “adresse
de FO - 1”
e@ FO FC: branchement a “adresse
de FO — 2”
De maniére générale, si A_ est
T'adresse & laquelle se trouve le code
FO, un_déplacement compris entre
$0 et $7F branchera sur une adresse
comprise entre A+ $2 et A+$81 (+2
& +129 en décimal), tandis qu'un
déplacement compris entre $FD et
$80 branchera sur une adresse
comprise entre A~$1 et A~$7C (-1
& —124 en décimal). Cela signifie en
particulier que, a partir d'une adresse
A, on ne peut effectuer de saut “en
avant” que jusqu’é A+129, et de
saut "en arriére” que jusqu’a
A-124.
Il est clair que tout ceci n’est pas sim-
ple a manipuler, et l'assembleur sym-
bolique est vraiment d’un grand se-
cours pour tout ce qui concerne les
branchements, car il calcule le dépla-
cement a votre place.
2) BNE (code DO)
En Applesoft, BNE pourrait se tra-
duire par IF “dernier résultat” <>0
THEN branchement (vous deviez
vous en douter un peu...).
Les principes sont identiques 4 ceux
qui régissent I’instruction BEQ en ce
qui concerne le. “dernier résultat” et
les branchements.
Les modes d’adressage
Adressage direct indexé
Nous avons déja rencontré la techni-
que d’adressage la plus simple, que
Ton peut baptiser “adressage ab-
solu”, qui consiste 4 donner directe-
ment l'adresse de chaque variable
(ainsi dans STA $18 ou LDA $06).
Supposons maintenant que l'on
veuille mettre la valeur 0 dans les
adresses $8001 a $800A. Une solu-
tion consisterait 4 faire successive-
ment référence aux adresses $8001,
$8002, $8003... Ce n'est certaine-
ment pas la plus économique en
place-mémoire, ni en effort muscu-
laire au clavier.
12
Il est heureusement possible d’ utiliser
les registres X et Y pour effectuer ce
travail & moindre cout (ce qui vous
expliquera par la méme occasion leur
nom de registre “index”). Les ins-
tructions suivantes réalisent l’opéra-
tion :
LDA #0 (A9 00)
LDX #$0A (A2 0A)
STOCKE STA $8000,X (9D 00 80)
DEX (CA)
BNE STOCKE (DO FA)
En Applesoft, cela pourrait s’écrire :
10 A=0
20 X=10
30 ST=32768 (soit $8000)
40 POKE ST+X,A
50 X=X-1
60 IF X<>0 THEN 40
La valeur de X est ajoutée a
Tadresse de base ($8000, donnée ici
en clair, mais qui peut étre égale-
ment une adresse symbolique
comme ADR avec STA ADR,X) pour
donner l’adresse définitive oti est sto-
ckée la valeur 0. X passe ainsi de 10
a 0 (instruction DEX); tant qu’il est
différent de 0, on “remonte” a I'ins-
truction de stockage a l’adresse cal-
culée (indexée); lorsqu’il est nul, le
branchement ne se fait plus et on
passe alors a T'instruction suivant
BNE STOCKE.
Le méme résultat serait obtenu avec
le registre Y :
LDA #0 (A9 00)
LDY #$0A (AO 0A)
STOCKE STA $8000,Y (99 00 80)
DEY (88)
BNE STOCKE (DO FA)
L’instruction LDA, comme STA, peut
utiliser l'adressage indexé par X ou
Y. Les différents codes hexadéci-
maux sont listés ci-dessous :
1) Pour LDA (ADS désigne une
adresse symbolique) :
® LDA adresse quelconque,X = BD
octet bas/octet haut = LDA
$aaaa,X ou LDA ADS,X
@ LDA adresse quelconque,Y = B9
octet bas/octet haut = LDA
$aaaa,Y ou LDA ADS,Y
@ LDA adresse page zéro,.X = B5
adresse = LDA $aa,.X ou LDA
ADS,X
@ Pas d’adressage indexé par Y en
page zéro.
2) Pour STA
@ STA adresse.X = 9D _ octet
bas/octet haut = STA $aaaa,X ou
STA ADS,X
e@ STA adresse Y = 99 octet
bas/octet haut = STA $aaaa,Y ou
STA ADS.Y
@ STA adresse page zéro,X = 95
adresse = STA $aa,X ou STA
ADS,X
Chacun des registres permet d’adres-
ser une zone de mémoire de 256
octets, d'une adresse de base $A jus-
qu’é $A+$FF. Il faut bien se rappe-
ler que, quel que soit le type d’in-
dexation, l'adressage ne peut porter
que sur 256 octets a partir d’une
méme adresse de base; si l'on doit
travailler sur une zone plus grande, il
devient nécessaire de manipuler éga-
lement cette adresse. De maniére gé-
nérale, l'adresse variera selon un pas
de 256 octets, par exemple : $8000
(on peut aller de $8000 a $80FF
avec un index), $8100 (de $8100 a
$81FF avec un index)... Vous aurez
certainement noté que cette variation
se traduit par une incrémentation de
len 1 de l'octet haut de l'adresse.
Adressage indirect indexé
Il nous reste a voir une technique
d'adressage plus complexe mais qui
nest pas moins utilisée pour autant,
au contraire. Elle fait appel a T'in-
dexation par X ou Y, mais elle est
dite également indirecte” car
l'adresse définitive est calculée a par-
tir de la valeur contenue dans
l'adresse de base et non 4 partir de
l'adresse de base elle-méme. Cette
derniére (baptisons la AD) doit obli-
gatoirement se trouver en page zéro
et le systéme prendra_ l’adresse
contenue selon le principe: valeur
contenue dans AD=octet bas de
adresse et valeur contenue dans
AD-+1=octet haut de l’adresse.
Adressage pré-indexé par X
Le mécanisme en est le suivant
®@ soit AD l’'adresse de base en page
0,
@ le systéme lui ajoute la valeur de
®@ le contenu de AD+X et AD+X+1
donne une adresse AO sur laquelle
portera le travail effectif de lec-
ture/écriture.
En Applesoft, cela reviendrait 4 une
suite d’instructions du type: AD=6
X=2: AX=AD+X: AQ =
PEEK (AX) + 256*PEEK(AX+ 1)
POKE A0,0 (si l'on veut, par exem-
ple, mettre 0 dans AQ).
Du fait que les adresses contenues
comportent toujours deux octets,
méme si elles sont inférieures 4 256
(l'octet de poids fort vaut alors 0), X
ne doit prendre que des valeurs mul-
tiples de 2 pour que |'adressage
donne un résultat cohérent (0 pour
atteindre la premiére adresse, 2 pour
la seconde...).
Cette technique d'adressage permet
de gérer des tables de “pointeurs”
stockées en page zéro a partir d'une
adresse donnée (chaque adresse
contenue pointe vers une adresse dé-
finitive € manipuler par le pro-
gramme). Elle autorise également
Tusage d'adresses calculées par le
programme (ou par |'Apple lui-
méme) et que vous ne connaissez
Pom’s n° 11
pas encore au moment oi vous
lécrivez : il vous suffit de choisir une
adresse de base en page zéro, a par-
tir de laquelle seront stockés les ré-
sultats des calculs, et d’écrire votre
programme en faisant uniquement
référence 4 cette adresse.
Les instructions LDA et STA peuvent
faire appel a cette technique, avec la
syntaxe suivante
@ LDA (ADR.X) = Al adresse page
zéro = LDA ($aa,X)
@ STA (ADR.X) = 81 adresse page
zéro = STA ($aa,X)
Adressage post-indexé par
Y
Les principes sont identiques en ce
qui concerne l'adresse base en page
zéro et l’adresse contenue, mais le
fonctionnement de lindexation est
radicalement différent :
© soit AD l'adresse de base,
@ elle contient une adresse AQ,
@ le systéme ajoute la valeur de Y a
AO pour obtenir l'adresse défini-
tive.
pplesoft AD=6
AD= PEEK(AD)+256+PEEK(AD + 1)
Y=1: POKE AO+Y.0 (par exemple)
Lindexation sapplique donc
Fadresse contenue et non plus
ladresse de base
a
a
Ce mode d'adressage est trés utilisé
par le systéme lui-méme et, par suite,
il le sera souvent aussi par le pro-
grammeur. Le but principal est tou-
jours de pouvoir écrire un pro-
gramme en gérant des adresses que
Ton ne connait pas encore ou qui
peuvent se modifier. en cours d'exé-
cution ou selon le contexte.
L’adresse contenue doit fournir le
début d'une zone de mémoire sur la-
quelle on veut travailler (chaque va-
riable de la zone pouvant étre tou-
chée au moyen de lindex Y). Sur
lApple. ce type d’adresse est particu-
ligrement répandu : adresse de la fin
dun programme BASIC, adresse
dune ligne d'écran texte ou graphi-
que, adresse de la zone des chaines
de caractéres, adresse d’une ligne de
programme BASIC.
Le ”"GOSUB”
bleur
de ’assem-
Quelques mots seulement, car le
principe est trés proche de celui uti-
lisé en Applesoft. L’équivalent de
GOSUB est I'instruction JSR (code
20). En assembleur, on peut faire
JSR_$FBC1 (par exemple) ou JSR
ETIQUETTE (sous réserve bien str
que ETIQUETTE soit défini_ quelque
part dans le programme). En hexa-
décimal, l'adresse of commence la
sous-routine doit suivre le code 20
dans l'ordre habituel octet bas/octet
haut (20 Cl FB pour JSR $FBC1).
Pom's n° 11
Linstruction RTS (code 60). quant &
elle, joue exactement le méme réle
que RETURN.
Récapitulation illustrée
Le petit programme ci-dessous n’em-
ploie que des instructions examinées
plus haut, a l'exception de ORG. En
fait, il ne s'agit pas vraiment d'une
instruction mais de ce que l'on ap-
pelle, en langage bien barbare, un
“pseudo-opcode” ou une “directive”,
cest a dire une commande propre a
Yassembleur utilisé (LISA 1.5 en l'oc-
currence), mais qui ne reléve pas du
langage machine et ne fera pas partie
du programme objet résultant de
l'assemblage. Les commandes de dé-
finition d’étiquettes que nous avons
déja évoquées (EQU, EPZ...) sont
aussi des directives.
En l'espéce, ORG indique a l'assem-
bleur a partir de quelle adresse il doit
réaliser assemblage et calculer les
sauts éventuels (un JSR a I'intérieur
du programme par exemple, mais
pas_les branchements par BEQ ou
BNE qui, rappelons-le, se font en va-
leur relative, en fonction d'un dépla-
cement et non directement sur une
adresse fixe),
Le programme fait peu de choses : il
exécute un HOME, vous demande
un caractére au clavier. trace un
cadre autour de l’écran avec ce ca-
ractére, positionne ensuite le curseur
au centre de I’écran pour vous de-
mander un autre caractére avec le-
quel il trace un nouveau cadre sur le
précédent et ainsi de suite (on ne
peut en sortir que par RESET). Nous
allons l’analyser en détail.
Ligne 2: $FC58 est l'adresse ot
commence la routine du moniteur
qui est exécutée lorsque vous faites
un HOME en Applesoft. JSR $FC58
est donc équivalent 4 HOME (la rou-
tine se termine évidemment par
RTS).
Ligne 3: JSR $FDOC est équivalent
a GET. La routine de saisie d'un ca-
ractére au clavier commence en effet
4 l'adresse $FDOC; elle stocke le ca-
ractére (le code-écran du caractére
en fait) dans l’accumulateur.
Ligne 4: on stocke le caractére a
ladresse $6, qui n'est pas utilisée par
le systéme et reste a la disposition du
programmeur. On donne 4 cette ins-
truction I’étiquette B4 afin de pouvoir
y effectuer un branchement ultérieu-
rement.
Ligne 5: on charge l’accumulateur
avec le numéro de la premiére ligne
de l’écran soit 0.
Ligne 6: la routine du moniteur qui
commence en $FBC1_ calcule
T'adresse de base d'une ligne de
lécran dont on donne le numéro par
A. Sur une ligne, les caractéres sont
stockés de "adresse-base”
“adresse-base + $27” (de 0 a 39 en
décimal, ce qui fait bien 40 caracté-
res par ligne). La routine range cette
adresse dans les mémoires $28 et
$29.
Ligne 7: Y=#$26 ou encore Y=38
en décimal, ce qui correspond a
lavant-dernier caractére de la ligne.
Ligne 8: on remet le caractére entré
au clavier dans A.
Ligne 9: on le stocke a l'adresse
“adresse-base de la ligne + 38”; il
est ainsi affiché 4 l’écran (avant-der-
nier caractére de la premiére ligne).
Ligne 10: Y=
Ligne 11: si Y est différent de 0, on
retourmne 4 BO, afin d’afficher tou-
jours le caractére sur la premiére
ligne, de la droite vers la gauche
L’assembleur calculera lui-méme le
déplacement qui permettra de re-
monter a l'adresse ot commencera
Tinstruction qui suit BO, ce dont on
peut lui étre reconnaissant.
Ligne 12: Y=0 (le premier caractére
de la ligne n’est pas encore affiché).
17 en hexadécimal vaut 23 en déci-
mal: c'est le numéro de la derniére
ligne de l’écran.
Ligne 13 : calcul de l’adresse-base de
la demiére ligne.
Lignes 14 4 18: on fait pour la der-
niére ligne comme pour la premiére.
Ligne 19: Y=0 pour traiter la pre-
miére colonne de |’écran.
Ligne 20: on met $18 dans X au
lieu de $17 afin de pouvoir placer le
DEX avant l’opération d’affichage.
Ainsi, le test sur la valeur de X (0 ou
non) se fera aprés le traitement de la
ligne 0 et non avant.
Ligne 22: A = numéro de la ligne.
Lignes 23 @ 25 : instructions réalisant
laffichage en premiére colonne {Y
vaut toujours 0).
Ligne 26: TXA a pour but de don-
ner au "dernier résultat” testé par
BNE la valeur de X, qui est bien
celle qui nous intéresse ici.
Ligne 27: on passe au caractére sui-
vant (au-dessus) dans la méme _co-
lonne, jusqu’a ce que la ligne 0 ait
été traitée.
Ligne 28: TYA pour donner au
“dernier résultat” la valeur de Y. En
fait, on veut savoir si la colonne que
Ton vient de traiter est la premiére
(0) ou la derniére ($27 = 39). Si
cest 0, on refait le travail avec $27
(lignes 30 et 31 qui renvoie la ligne
20), sinon, le cadre est terminé et on
se déplace en B3.
Lignes 32 a 34: la mémoire $25
contient la position verticale du cur-
seur; on la met 4 $C (12) et on fait
un JSR a la routine qui exécute le
VTAB ($FC22). Ceci est donc équi-
valent 4 VTAB 12.
Lignes 35 et 36 : $24 contient la po-
sition horizontale du curseur; on y
a $14, ce qui équivaut 4 HTAB
Ligne 37: demande d'un caractére
au clavier.
13
Lignes 38 4 39: aucun caractére n'a
0 pour code-écran en mode normal
et le test BNE réalisera donc systé-
matiquement le branchement en B4
le programme boucle !
Si vous voulez rentrer ce programme
directement en hexadécimal, utilisez
la récapitulation qui vous est donnée
de la facon suivante
Entrez en mode moniteur par
CALL—151, puis tapez
300: 20 58 ... 06 RETURN
308: A9 00 ... AS RETURN
et ainsi de suite jusqu'au BA final
Vous pouvez, si vous le désirez, sau-
ver la routine par BSAVE
nom,A$300,L$4C (ot $300 et $4C
désignent respectivement I’adresse de
début et la longueur du code a sau-
vegarder)
Pour l'exécuter, tapez CALL 768
RETURN.
Nous vous donnons également un
petit programme en Applesoft qui fait
le méme travail que notre routine en
assembleur. Essayez-le également et
vous constaterez la chose suivante :
on a le temps de voir le cadre se
dessiner alors que, en langage ma-
vous puissiez discerner une phase in-
termédiaire). Ceci confirme “de visu”
que le langage machine permet de
réaliser des traitements plus rapides
que le BASIC et cest bien la moin-
dre des choses.
Mais, et la taille du programme
direz-vous | Il ne faut pas se fier aux
apparences: le programme source
en assembleur peut vous paraitre
long (surtout si vous le tapez effecti-
vement, sans étre un spécialiste de la
dactylographie), mais le code-objet
n'occupe que 76 octets. Le “petit”
programme Applesoft en prend pour
Retour au BASIC par 3D0G RE- chine, tout semble “instantané” (un sa part 112 ... Alors, rendez-vous au
TURN ou CTRL-C. cadre en remplace un autre sans que _ prochain article ! Z
LISTE D’ASSEMBLAGE RECAPITULATION
LISA 1.5
a200- 20 58 FC 20 OC FD 85 06
0308- A? 00 20 C1 FB AD 26 AS
0300 1 ORG $300 0310- O46 91 28 8& DO FB AS 17
0300 2058FC 2 JSR $FC5e 0318- 20 Ci FB AD 26 AS 046 FI
0303 200CFD 3 JSR $FDOC 0320- 28 88 DO FB AO 00 AZ 16
0306 8506 4 B4 STA $6 0328- CA 8A 20 C1 FB ADS 06 91
0308 A900 5 LDA #0 0330- 28 8A DO F4 98 DO 04 AO
030A 20C1FB é JSR $FBC1 0338- 27 DO EB AY OC 85 25 20
030D A026 ? LDY #926 0340- 22 FC AY 14 85 24 20 OC
O30F A506 8 LDA $6 0348- FD AA DO BA
0311 9128 > BO STA ($28),Y
0313 88 10 DEY
0314 DOFB 11 BNE BO
10 HOME : POKE 34,24
0316 Aa17 12 LOA #17 15 GET 2$: VTAB 1: HTAB 1: FOR I =
0318 20CIFB JSR $FBCI 1 TO 40: PRINT 2$;: NEXT : UTAB
031B A026 LDY #$26 24: HTAB 1: FOR I = 1 TO 40: PRINT
031D A506 LDA $6 23: NEXT
O31F 9128 STA ($28),Y | 20 FOR I = 2 TO 23: VTAB I: HTAB
0321 88 DEY 1: PRINT Z$;: HTAB 40: PRINT
0322 DOFB BNE B1 2%;: NEXT : VTAB 12: HTAB 20:
0324 A000 LDY #0 GOTO 15
0326 A218 LDX #$18
0328 CA DEX
0329 8A TXA
032A 20C1FB JSR $FBCL Un bug en virgule flottante
032D A506 LDA 6 : ate -
032F 9128 STA ($28),Y Christophe Chaumet nous a signalé ce bug, publié dans
= : ACM SIGNUM Newsletter en avril 83. Les multiplications
0331 8A xA et divisions en virgule flottante de Apple sont sujettes 4
0332 DOF4 BNE B2 erreur dans certains cas. Ainsi, la mantisse contient 4
0334 98 TYA octets (32 bits); si, pour un nombre donné, les deux octets
0335 DoO4 BNE B3 centraux de cette mantisse sont nuls et l’octet final non
0337 A027 LDY #%27 nul, il peut y avoir une erreur dans loctet final pour les
0339 DOEB BNE B20 multiplications et divisions faites avec ce nombre.
033B A90C LDA #$C Exemple:
033D 8525 STA $25 a ae:
= 24(Z/
pea koran” Pee Bere? | On obtient en fait W = 0.5+27(-26) comme résultat
0344 8524 STA $24 Par contre, si Z = 0.5 + 2°(-9) + 27(—25), on trouve
0346 200CFD JSR $FDOC bien la méme valeur pour Z et W, une fois que W a été
0349 AA TAX défini par W = 2+(Z/2)
034A DOBA BNE B4 Apple a été informé de lerreur il y a trois ans: hélas, ce
probléme est resté avec I'Apple //e
Pom’s n° 11
Liinterpréteur Applesoft est & I’étroit
dans ses 10K de ROM et certaines
de ses possibilités ne peuvent étre
exploitées que par l'emploi de
POKEs @ certaines adresses mé-
moire. D’autre part, il peut s’avérer
nécessaire de tromper I'interpréteur
qui est parfois un peu trop strict.
Tout programmeur connait les
POKEs courants permettant de défi-
nir les limites de la fenétre d'écran,
de passer aux modes graphiques.
D’autres sont moins connus. Cette
liste rassemble tous ceux que j'ai pu
trouver dans la littérature consacrée 4
lApple. Elle n'est certainement pas
exhaustive et pourra étre complétée
par la suite.
Remarque : lorsqu’il s'agit de POKEr
des valeurs sur 2 octets, X étant l'oc-
tet de poids faible, X+1 l'octet de
poids fort, l'instruction suivante est
utilisée :
POKE X+1,VAL/256 : POKE X,VAL
—256*PEEK(X+ 1)
au lieu de
V% = VAL/256 : POKE X.VAL—256*
V%: POKE X+1,V%
Page zéro
® POKE 10,76: POKE 12,AD/256
POKE 11,AD—PEEK(12)*256
Initialise la fonction USR. Un appel 4
USR provoquera un saut 4 un sous-
programme machine commencant a
l'adresse AD.
@ POKE 32,X
Fixe la marge gauche de la fenétre
de texte (0<= X <= 39).
© POKE 33,X
Fixe la largeur de la fenétre de texte
(0<= X <= 39—PEEK(32)).
© POKE 33,33
Affiche les instructions Applesoft sans
mettre de marge. Nécessaire pour les
corrections d’instructions.
© POKE 33,28
Permet un cadrage facile des REMar-
ques.
@ POKE 34,Y
Fixe le haut de la fenétre de texte
(0<= Y <= 23)
© POKE 35,Y
Fixe le bas de la fenétre de texte
(PEEK(34)<= Y <= 23).
@ POKE 36,X
Fixe la position horizontale du cur-
seur. A utiliser en remplacement de
HTAB pour sortie sur imprimante si
Pom’s n° 11
Des POKEs a gogo
Timpression se fait sur plus de 40 co-
lonnes.
@ POKE 37,Y
Fixe la position verticale du curseur
(O<= Y <=23)
@ POKE 48,C
Sélectionne la couleur du tracé basse
résolution (mode GR). i
1=magenta, 2=bleu foncé,
pre, 4=vert foncé, 5=gris,
7=bleu clair, 8=brun, 9=
10=gris, 11=rose, 12
13=jaune, 14=incolore, 15=blanc.
@ POKE 49,X
Sélectionne le MODE du moniteur.
@ POKE 50,63
Sélectionne le mode diaffichage IN-
VERSE.
@ POKE 50,127
Sélectionne le mode d’affichage cli-
gnotant (mode FLASH).
@ POKE 50,255
Retour au mode d’affichage normal.
e@ POKE 51,128
A placer en mode immédiat avant un
ordre CONT, GOTO, GOSUB, sur la
méme ligne, lorsque la portion de
programme a exécuter contient un
ordre OPEN, READ, WRITE, AP-
PEND ou POSITION. On évite ainsi
le message NOT DIRECT COM-
MAND.
@ POKE 55,AD/256: POKE 54,AD
—PEEK(55)«256
Changement de l’adresse du sous-
programme de sortie de caractéres.
(Normalement $9EBD avec le DOS)
e@ POKE 57,AD/256: POKE 56,AD
—PEEK(57)*256
Changement de l’adresse du sous-
programme d’entrée de caractéres.
(Normalement $9E81 avec le DOS).
e POKE 58,A1: POKE 59,A2:
POKE 69,A3: POKE 70,A4
POKE 71,A5
Utilisation des adresses de sauve-
garde de PC et des registres A,X,Y
pour l'appel de sous-programmes du
moniteur. En voici un exemple
Conversion décimal en
hexadécimal
10 INPUT _"DEC=";D: POKE
71,D/256: POKE 70,D — PEEK
(71)*256: POKE 59,249: POKE
58,64: POKE 49,0: PRINT
"HEX$="; : CALL—327
La valeur de D est POKEe dans les
registres Y et X par I'intermédiaire
des adresses de sauvegarde de ces
Roland Jost
registres ($47 $46). L’adresse du
sous-programme @affichage
(PRNTYX - $F940) est POKEe dans
les adresses de sauvegarde du PC
($3A, $3B). On met & zéro le MODE
($31). Le CALL—327 exécute un
sous-programme restaurant les regis-
tres ($FEB9).
@ POKE 60-67,X
Ces huit adresses permettent de
transmettre des paramétres a certai-
nes routines du moniteur: MOVE,
ERIFY...
Exemple: déplacer de D1 4 Al une
zone mémoire commengant a
Yadresse D1 et se terminant en D2
POKE 61,D1/256:POKE 60,D1-—
PEEK (61)*256 : POKE 63,D2/256 :
POKE 62,D2—PEEK (63)* 256
POKE 67,A1/256 : POKE 66,Al —
PEEK (67)*256 : CALL —468
Le CALL-—468_—exécute la
commande MOVE ($FE2C). Un
CALL—548 (VERIFY $FE36) per-
mettrait la comparaison de 2 zones
mémoires.
@ POKE 72,0
Met A zéro le registre d'état. Utilisé
par exemple dans la routine de
S.H.LAM (voir plus loin).
@ POKE 82,213
A faire avant de sauver un pro-
gramme sur cassette. Le programme
sexécutera automatiquement apres
un LOAD et le RUN rest plus né-
cessaire.
e@ POKE 103.1
104,AD/256 : POKE AD.O
Fixe a AD le début d'un programme
Applesoft.
@ POKE 106,.X / 256: POKE 105,X
— PEEK (106) * 256
Fixe la valeur de LOMEM 4 la valeur
décimale X. Identique @ LOMEM:X.
@ POKE 116,X / 256: POKE 115.X
— PEEK (116) * 256
Fixe la valeur de HIMEM a la valeur
décimale X. Identique &@ HIMEM:X.
@ POKE 118.0
Permet d'exécuter des instructions
telles que INPUT. GET... en mode
immédiat. L'adresse 118 ($76
CURLIN) contient normalement $FF
en mode direct et le numéro de ligne
BASIC en mode programme. Exem-
ple: POKE 118.0:INPUT ™ ”:R$
@ POKE 118.0 : POKE 43699.0
Permet un INPUT du clavier dans un
fichier EXEC. Aprés INPUT. faire
POKE
15
un POKE 43699,1 (pour 48K)
Toutes les instructions doivent étre
dans une méme ligne.
© POKE 176,X / 256: POKE 175.X
— PEEK (176) * 256
Fixe l'adresse de fin d'un programme
Applesoft. A utiliser, par exemple,
lorsque l'on veut ajouter un pro-
gramme binaire a la suite d'un pro-
gramme Applesoft.
© POKE 214.255
Annule les commandes LIST, NEW.
POKE. CALL et la commande SAVE
du DOS. Empéche d'insérer ou d'ef-
facer une ligne BASIC. Toute
commande précitée fera exécuter le
programme Applesoft en mémoire. A
utiliser pour empécher le listage et la
modification de programmes... Pour
revenir a la normale, passer en mode
moniteur et faire "D6: 00”
@ POKE 216,0
Annulation dune
ONERR.
@ POKE 228.X
Permet de changer le code de la
couleur HGR. Noir=0, Vert=85,
Violet=42, Blanc=127, Noir=128,
Bleu=170, Orange=213. Blanc
=255, Essayez toutes les autres pos-
sibiliteés pour X compris entre 0 et
255.
@ POKE 230,32
Sélectionne la premiére page haute
résolution ($2000-$3FF8) sans laffi-
cher. Toutes les instructions de tracé
agiront sur cette page.
© POKE 230.64
Sélectionne la deuxiéme page HGR
($4000-$5FF8)
@ POKE 230.96
Les instructions HGR agissent sur
une 3éme page HGR “théorique”
($6000-$7FF8). Cette page ne peut
étre affiché par hardware. mais dé-
placée en bloc vers l'une des pages 1
ou 2
© POKE 231.X
Permet de changer la valeur de
SCALE (0-...)
© POKE 233.X / 256: POKE 232.X
— PEEK (233) * 256
Fixe l'adresse de début d'une table
de formes.
@ POKE 241.X
Fixe la vitesse d'affichage : SPEED =
256—-X.
@ POKE 243.0
Permet de sortir du mode FLASH
aprés un <RESET> effectué en
cours d'exécution de programme.
Vous étes dans cette situation lors-
que, lors du balayage d'une instruc-
tion par la fleche a droite. le passage
du curseur provoque l'affichage de
caractéres_incohérents. Un POKE
243.0 rétablit une situation normale.
instruction
© POKE 243,32
Convertit les majuscules en minuscu-
les lors d'une sortie sur imprimante
@ POKE 249.X
Fixe la valeur de ROT a X.
Page 2
La page 2 ($200-2FF) sert de tam-
pon (buffer) d’entrée des caractéres
frappés au clavier. La routine de
S.H.LAM utilise des POKEs en page
2 pour installer en mémoire des
sous-programmes assembleur. On
peut aussi l'utiliser pour faire exécu-
ter a partir du BASIC des instructions
moniteur
CO$=CO$ + “ N D9C6G”: FOR
Z=1 TO LEN(CO$) : POKE 511+2Z,
ASC(MID$(CO$.Z.1)) + 128 : NEXT
Z: POKE 72.0: CALL—144
Par exemple
© CO$="2000<4000.5FF8M" co-
piera la page graphique 2 dans la
page 1,
CO$="300L" liste 20 instructions
désassemblées a partir de l'adresse
$300.
¢ CO$="C081_ N CO8l N
D000<D000.FFFFM” copie la
ROM dans la carte d'extension
mémoire.
Page 3
e POKE 1009, X/256 POKE
1008.X—PEEK(1009}*256
Change l'adresse de branchement en
cas de BRK.
e@ POKE 1011,X/256 POKE
1010,X—PEEK(1011)*256
Modifie l'adresse de branchement en
cas de RESET.
© POKE 1012.0
Provoque un démarrage a froid
apres un RESET.
@ POKE 1013.76 POKE
1015.AD/256 POKE
1014.AD—PEEK(1015)+*256
Initialise & (AMPERSAND) pour un
saut A un sous-programme dont le
point d’entrée est a l'adresse déci-
male AD.
© POKE 1016.76 POKE
1018.AD/256 POKE
1017.AD—PEEK(1018)*256
Initialise CTRL-Y en mode moniteur
pour un saut a un. sous-programme
situé l'adresse décimale AD.
Pages 4-7
@ POKE 1024 + X + 128*Y —
984xINT(Y/8).CA
Permet de POKEr directement en
page 1 de TEXTE (écran) au point
de coordonnées X et Y (0<= X <=
39 et O0<= Y <= 23). Le mode
daffichage dépendra de la valeur de
CA
0 <= CA <= 63: MODE INVERSE
64 <= CA <=127: MODE FLASH
128 <= CA <=191: MODE NOR-
MAL
192 <= CA <=255: MODE NOR-
MAL ou minuscules
Dans le cas d'une écriture en page 2
de TEXTE, remplacer 1024 par
2048. Attention. votre programme
Applesoft ne doit pas débuter avant
$C00.
Pages graphiques
Un POKE dans les adresses corres-
pondant aux pages graphiques allu-
mera un point sur l'écran. Vu lorga-
nisation des pages HGR. il est peu
pratique de POKEr directement des
figures en page graphique
DOS 48K
Toutes les adresses ci-dessous corres-
pondent a un Apple 48K of le DOS
est chargé entre $9600 et $BFFF.
Pour des systémes 32K ou 16K. il
faut leur retrancher respectivement
16384 et 32768. Sauf indication
contraire. ces adresses sont valables
en DOS 3.2 et DOS 3.3.
e@ POKE 40407.234 POKE
40408.234 : POKE 40409.234
La commande MON C.I.O nest plus
déconnectée lors d'un RESET.
© POKE 40514.52
Permet un démarrage du systéme
(BOOT) sur un fichier binaire (valeur
par défaut = 6: fichier BASIC)
© POKE 40514.20
Permet un démarrage du systéme sur
un fichier EXEC
© POKE 40993,234 POKE
40994,234 : POKE 40995,234
Permet_de passer des commandes
DOS (OPEN. READ...) en mode DI-
RECT. sans le message NOT DI-
RECT COMMAND.
© POKE —42424.192: POKE
42432193,
Permet au DOS de reconnaitre une
carte ROM Applesoft ou Integer dans
le port (slot) 4
@ POKE 43140.96 POKE
43160.96 : POKE 43212.96
Ces trois POKEs annulent respective-
ment les commandes INIT, DELETE
et RENAME du DOS en remplacant
la premiére lettre de chaque
commande par un caractére non ac-
cessible au clavier de Apple [I+
Avec un POKE 214.255 en complé-
ment (voir plus haut), ceci constitue
un bon moyen de protection de pro-
grammes contre les effacements ou
interventions non autorisés.
Pour revenir @ un DOS standard,
faire “POKE 43140,73: POKE
43160.68 : POKE 43212.82”. L'effet
du POKE 214 ne peut étre annulé
Pom’s n° 11
qu’en
haut)
@ POKE 43624.1
Sélectionne le lecteur de disquette 1
mode moniteur (voir plus
@ POKE 43624,2
Sélectionne le lecteur de disquette 2.
Le changement de lecteur peut se
faire facilement _par__ ‘instruction
"POKE 43624,3—PEEK(43624)”
@ POKE 43626,X
Sélectionne le port (slot) du lecteur,
X étant le numéro du port (6.5.4...)
© POKE 43699.0
Déconnecte un fichier EXEC. Le fi-
chier reste ouvert jusqu’a la pro-
chaine commande CLOSE. FP. INT
ou MAXFILES.
@ POKE 43699,1
Reconnecte le fichier EXEC.
© POKE 44452.0
Supprime la pause du CATALOG.
Pour revenir a un affichage standard,
taper “POKE 44452,22”. D/autres
valeurs donnent des résultats divers.
@ POKE 44505.234 POKE
44506,.234
Les fichiers effacés (par DELETE)
sont affichés lors d'un CATALOG.
® POKE 44596,255
Supprime la pause du CATALOG
Pour revenir a un affichage standard,
taper "POKE 44596,206"
Un POKE 44596,0 entraine un arrét
en mode moniteur et le CATALOG
rest pas affiché.
e@ POKE 44723,Xx4
44725,.Y*4
A faire avant une initialisation de dis-
quette. Les seules pistes accessibles
pour la sauvegarde de fichiers seront
celles comprises entre X et Y (inclus).
@ POKE 44033.3 POKE
4472316: POKE 44741,12
POKE 44764,3 : POKE 46012.3
A faire avant une initialisation de dis-
quette par INIT. Cette série de
POKEs permet de placer le DIREC-
TORY et la VTOC sur la piste 3 au
lieu de la piste 17. Cette disquette ne
sera plus ‘bootable’ ni accessible par
un DOS normal. Les programmes de
cople (FID, COPYA) ne fonctionnent
plus.
Dans un DOS standard, ces adresses
contiennent respectivement les va-
leurs 17, 12, 68, 17, 17.
@ POKE 49107234 POKE
49108,234 : POKE 49109,234
Evite, lors d'un BOOT 4 chaud, de
recharger le langage complémentaire
(Integer pour un Apple Il+, ou Ap-
plesoft pour un Apple Il) dans la
carte langage ou la carte d’extension
RAM).
POKE
Pom’s n° 11
BLOCK IOB
IOB (INPUT/OUPUT BLOCK) est
utilisé par le sous-programme RWTS
(Read Write Track Sector) pour I'ac-
cés a un secteur de la disquette
L'adresse de la table IOB utilisée par
le DOS est donnée par :
1OB = _ 256*(PEEK(PEEK(996) +
256*PEEK(997)) +
PEEK(PEEK(999) +
256*PEEK(1000))
normalement IOB = 47080 ($B7E8)
Pour modifier les paramétres de la
table IOB, on pourra faire les
POKES suivants
@ POKE IOB + 3,0
Met le numéro de volume @ 2zéro.
Donec accepte de lire la disquette
quel que soit le numéro de volume.
Sinon le numéro de volume doit cor-
respondre au contenu de cette
adresse.
@ POKE IOB + 4.P
P = numéro de piste (0 - 34)
@ POKE IOB + 5.S
S = numéro de secteur (0 - 15 en
DOS 3.3 , 0 - 12 en DOS 3.2)
© POKE IOB + 9,A/256: POKE
IOB + 8,A—256*PEEK(IOB+8)
A = adresse du tampon en MEV.
e@ POKE IOB + 12,C
C = 0: positionne la téte de lecture
au début du secteur défini par P et
S.
C = 1: lecture du secteur P, S
C = 2: écriture du secteur P. S sur
disquette.
C = 4: formattage de la disquette.
ATTENTION : détruit tout le contenu
de la disquette,
Ne pas oublier de mettre la valeur de
IOB dans les registres A et Y avant
anpel de RWTS (cf. manuel du
)
Entrées-sorties ($C000
$COFF)
A ces adresses sont implantés des
switchs (ou bascules) permettant de
sélectionner une fonction d’entrée-
sortie donnée.
@ POKE 49168,0 (—16368)
Reprise de la lecture du clavier, le
STROBE est remis a zéro.
@ POKE 49184,0 (—16352)
Active la sortie magnétophone. Per-
met par exemple de sortir sur un am-
plificateur. Un deuxiéme POKE 4 la
méme adresse déconnecte la sortie.
e POKE 49200,0: POKE 49200,0
(16336)
Produit un ‘CLIC’ du haut-parleur.
© POKE 49232,0 (~16304)
Passage en mode graphique
@ POKE 49233,0 (—16303)
Passage en mode texte.
e POKE 49234.0 (—16302)
Choix du mode graphique non
mixte.
e@ POKE 49235,0 (—16301)
Choix du mode mixte (4 lignes de
texte en bas d'écran).
@ POKE 49236.0 (—16300)
Choix de la page 1 (TEXTE OU GR
OU HGR).
@ POKE 49237,0 (—16299)
Choix de la page 2 (TEXTE OU GR
OU HGR).
@ POKE 49238.0 (—16298)
Basse résolution (mode GR).
@ POKE 49239,0 (—16297)
Haute résolution (HGR)
Les commandes HGR et HGR2 effa-
cent les pages graphiques. Pour pas-
ser a une page graphique sans effa-
cement de son contenu. faire par
exemple pour la page 2 :
POKE 49232,0: POKE 49234.0
POKE 49237,0 : POKE 49239.0
Pour basculer entre les pages 1 et 2,
exécuter l’instruction
POKE 230, 96 — PEEK (230)
© POKE 49240,1 (-16296)
Met la sortie numérique 0 (patte 15,
de la broche manette) a l'état “OFF”
(5 volts)
@ POKE 49241.0 (—16295)
Met la sortie numérique 0 en position
“ON” (0.3 volts).
@ POKE 49242.1 (—16294)
POKE 49243,0 (—16293)
Idem pour la sortie numérique 1
(patte 14).
@ POKE 49244.1 (—16292)
POKE 49245,0 (—16291)
Idem pour la sortie numérique 2
(patte 13)
e@ POKE 49246,1 (—16290)
POKE 49247,0 (—16289)
Idem pour la sortie numérique 3
(patte 12)
@ POKE 49248,0 (—16288)
Active l'entrée_magnétophone. Un
deuxiéme POKE 4 cette adresse dé-
sactive l'entrée
@ POKE 49280,0 (—16256)
Connecte la carte d’extension mé-
moire (BLOC 2) en mode lecture.
Protection en écriture.
e@ POKE 49281.0: POKE 49281.0
(—16255)
Déconnecte le BLOC 2 en mode lec-
ture. Déprotége en écriture. La lec-
ture de la ROM est possible
© POKE 49282,0 (—16254)
Carte (BLOC 2) déconnectée en lec-
ture, protégée en écriture, c'est a dire
retour au langage en ROM.
© POKE 49283,0: POKE 49283.0
(=16253)
Le BLOC 2 de la carte d’extension
est accessible en lecture ET en écri-
ture.
Les 12K du BLOC 1 sont accessibles
de la méme facon par les POKEs sui-
vants:
POKE 49288,0 (—16252)
POKE 49289,0 (—16251)
POKE 49290,0 (—16250)
POKE 49291,0 (—16249)
Pour une carte d’extension 32K ou
plus, la 2éme tranche de 16K est ac-
cessible par les POKES indiqués ci-
dessous
BLOC 2: utiliser les POKES 49284
a 49287
BLOC 1: utiliser les POKES 49292
a 49295.
Correction d’utilitaires
RENUMBER
Lutilitaire de renumérotation de
lignes livré avec les disquettes Master
DOS 3.2 et 3.3 comportait un “bug”
qui peut é@tre corrigé par les POKEs
ci-dessous
Aprés avoir chargé RENUMBER en
mémoire par un LOAD, taper
e@ POKE 4815.172._ et = POKE
4816.171 pour un DOS 3.2.
e POKE 4789,172__ et POKE
4790,171 pour un DOS 3.3.
Sauver le programme modifié par
SAVE RENUMBER.
Bibliographie
Tous ouvrages frangais consacrés a
l'Apple Il.
Revues : Pom’s, L’Ordinateur Indivi-
duel, CALL A.P.P.L.E , NIBBLE ,
APPLE ORCHARD.
Conclusion
Tous ces POKES ont été testés avec
DOS 3.3, 3.2, 3.2.1. A moins d'une
erreur de transcription, ils devraient
étre corrects. Priére de signaler les
erreurs éventuelles. Cette compilation
ne tient certainement pas compte de
nombreuses autres possibilités de
modification du DOS (cf. les nom-
breux ‘patches’ possibles mais qui
nécessitent plus que quelques
POKES), ni des corrections éventuel-
les pour l'Applesoft chargé en carte
langage. a
Un programme de menu
Ce programme en assembleur vous
permet, en relation avec le pro-
gramme de gestion de masques de
G. Michel (POM'S 7). de réaliser trés
rapidement les menus de vos pro-
grammes BASIC
Il permet de répondre 4 un menu
soit par déplacement a l'aide des flé-
ches -> ou <-, soit par réponse litté-
rale (une lettre A.B.C...)
dans tout programme BASIC. Avant
de l'appeler, il est nécessaire de lui
communiquer_certaines informations
par des POKE aux adresses correc-
tes. Les informations concernées sont
les suivantes
@ adresse 0: le numéro de la ligne
de la premiere modalité de choix
(entre 0 et 23),
@ adresse 1: le numéro de la co-
Gilles Mauffrey
et 39): cette colonne, pour chaque
modalité de choix, doit contenir
un caractére non blanc,
@ adresse 2: le nombre de modalités
de choix,
® adresses 36,37: positionnement du
curseur en cas de réponse littérale.
Le petit programme de démonstra-
tion listé ci-aprés vous fournira les in-
dications complémentaires pour la
Ce programme est relogeable: vous lonne @ partir de laquelle se fera mise en oeuvre de la routine
pouvez donc 'intégrer trés facilement Tinversion des caractéres (entre 0 a
5 D$ = CHR (4)
Phesenenes! Masque 10 HOME : PRINT D$"*BLOAD MASKDEMO
xDEMo Menu» MASK DEMO ,A$8400,D1"
* * 15 GOSUB 5000
perrrrecerr ss 20 POKE 0,7: POKE 1,6: POKE 2,4: POKE
36,35: POKE 37,20
40 PRINT D$"BLOAD B:MENU,A$9500"
$82 EREMIER, CHOUX 50 CALL 9 * 256 * 16 + 5 * 256
55 FOR J = 1 TO 600: NEXT
<B> SECOND CHOIX 60 X = PEEK (3): ON X GOSUB 1000,
2000,3000
70 END
<C> TROISIEME CHOIX 1000 HOME : PRINT "SPi"
1010 RETURN
| {D3 2RUATRIEME: CHOTX: 2000 HOME : PRINT "SP2": RETURN
3000 HOME : PRINT “"SP3": RETURN
5000 DATA 1024,1152,1280,1408,15
VOTRE CHOIX + 36,1664,1792,1920,1064,1192,1
| 320,1448,1576,1704,1832,1960,
_ _ 1104,1232,1360,1488,1616,1744
UTILISER LES -> , <- OU LA LETTRE VOULUE ,1872,2000
5005 RESTORE
DEMOMENU 5010 FOR J = 1 TO 24: READ N: FOR
K = 0 TO 39: POKE N + K, PEEK
1 REM PROGRAMME DE MENU (8 * 256 * 16 + N + K): NEXT
2 REM (APPLESOFT> K: NEXT J
3 REM == 5020 RETURN
18 Pom’s n° 11
Programme MENU.TEXT BNE PCL 100 TXS
DOS TOOL KIT 50 cLU 101 LDY #39
St JSR $FF58 102 BINEF LDA (BASE),Y
1 ORG #9000 52 BUC EFFACE 103 ORA #$C0
2 LIGNE EQU #00 53 INC REP 104 CMP = #$E0
3 COLONNE EQU #01 54 LDA REP 105 BCC STOB
4 CHOIX EQU $02 ss CMP CHOIX 106 SBC #840
5 REP EQU #03 56 BCC CAVA 107 STOB STA (BASE) ,Y
6 LETMAX EQU #04 S7 BEG CAVA 108 DEY
? TEMP EQU $05 58 LDA #OL 109 BPL BINEF
8 CH EQU $24 5? CAVA STA REP 110 BIT $FF58
gw EQU $25 60 cLy lit RTS
10 BASE EQU $28 61 JSR $FFS8 112 INVER TSX
11 BASCALC EQU $FBC1 62 BVC PRECAL 113 DEX
12 REPONi LDA CV 63 BYS PCL 114 DEX
13 JSR BASCALC 64 INVERM BVC INVER 115 TXS
14 LDY CH 65 PRECAL TSX 116 LDY #40
15 LDA #$5F 66 DEX 117 INO DEY
16 STA (BASE),Y | $7 DEX 118 LDA (BASE) ,Y
17 LDA #01 68 TXS 11g CMP oH
18 STA REP 6? cL 120 BEQ INO
19 LDA LIGNE 70 JSR FFS8 121 EOR #%E0
20 JSR BASCALC ai BYC CALINE 122 BEQ INO
21 cLV 72 cLy 123 BINV LDA (BASE) ,Y
22 JSR $FF58 73 JSR $FFSS 124 AND #$3F
23 BYC INVERM 74 BVC INVER 125 STA (BASE) ,Y
24 cLe 75 BIT $FF58 126 DEY
25 LDA HA 76 RTS 127 CPY COLONNE
26 ADC CHOIX 7? LETTRE PHA 128 BCS BINV
27 STA LETMAX 78 cLV 129 BIT $FF58
28 PCL LDA sc000 79 JSR $FFS8 130 RTS
29 BPL PCL 80 BVC EFFACE 131 CALINE TSX
30 BIT #c010 St PLA 132 DEX
31 CMP #$C1 82 SEC 133 DEX
32 BCC CTRL 83 SBC #$CO 134 Txs
33 CMP LETMAX 84 STA REP 135 LDX REP
34 BCS PCL 85 cLV 136 LDY CGLONNE
35 BCC LETTRE 84 JSR $FFS& 137 LDA LIGNE
36 CTRL CMP #$88 87 BYC PRECAL 138 STA TEMP
37 BNE CTRT 88 BUYS REVIEN 139 JSR BASCALC
38 BEQ ARRIERE 89 ARRIERE CLV 140 CALIN DEX
39 CTRT CMP #$8D 20 JSR $FF58 141 BEQ TROUVE
40 BNE CTRU a1 BVC EFFACE 142 CALI INC TEMP
41 REVIEN LDA CV 92 DEC REP 143 LDA TEMP
42 JSR BaAscALc | 73 LDA REP 144 JSR BASCALC
43 LDY CH 94 BNE CAVA 145 LDA <BASE),Y
44 LDA REP 95 LDA CHOIX 146 EOR #/
45 ORA #$C0 96 BNE CAVA 147 BEQ CALI
46 STA <BASE),Y | 97 EFFACE TSX 148 BNE CALIN
47 RTS 98 DEX 149 TROUVE BIT $FF58
48 CTRU CMP #895 99 DEX isa RTS
N 9050- 20 58 FF 50 51 Eé 03 AS
RECAPITULATIO 9058- 03 C5 02 90 04 FO 02 AY
9000- AS 25 20 Ci FB A4 24 AP 9060- 61 85 03 BS 20 58 FF 50
9008- SF 91 28 AP O1 85 03 AS 9068- 04 70 Bé 50 52 BA CA CA
9010- 00 20 C1 FB B8 20 58 FF 9070- 9A BS 20 58 FF 50 68 BS
9018- 50 51 18 AP C1 65 a2 85 9078- 20 58 FF 50 42 2C 58 FF
9020- 04 AD 00 CO 10 FB 2C 10 9080~- 60 48 BS 20 58 FF 50 1E
9a2e- CO CF C1 90 06 C5 04 BO 9088- 68 38 EY CO 85 03 BS 20
9030- FO 90 4E C9 88 DO 02 FO 9090- 58 FF 50 D9 70 A7 BS 20
9038- 5D C? 8D DO OE AS 25 20 9098- 58 FF 50 OA Cé 03 AS 03
9040- Ci FB A4 24 AS 03 09 CO 90A0- DO BF AS 02 DO BB BA CA
9048- 91 28 60 CF 95 DO D2 Be 9O0A8- CA 9A AD 27 Bl 28 a9 CO
Pom’s n° 11
90BO- C9 EO 90 02 EY 40 91 28 9OEQ- CA CA
9OBS8- 88 10 Fi 2C 58 FF 60 BA ?OES- 00 85
90CO- CA CA 9A AD 28 88 Bil 28 9OFO- OF Eé
90C8- C9 AO FO FY 49 EO FO FS 9OF8- Bi 28
90D0- Bi 28 29 3F 91 28 88 C4 71i00- 2C 58
90D8- 01 BO FS 2C 58 FF 60 BA
9A AS 03 Ad O1 AS
oS 20 Ci FB CA FO
05 AS 05 20 Ci FB
49 AO FO F3 DO EE
FF 60
Les logiciels
Guy Lapautre
Avant d’aborder l’analyse de Guten-
berg, il m’a semblé intéressant d’exa-
miner la conception globale d’un sys-
téme de traitement de texte sur
micro-ordinateur. Pour cela, nous
allons comparer 4 Gutenberg deux
classiques : Magic Window et Apple
Writer II.
Magic Window
Au lancement, Magic Window pro-
pose un menu permettant de s’orien-
ter vers l’édition, l'impression, la ges-
tion des disques, ...
Dans la plupart des cas, ce premier
choix dirige vers un second menu.
Par exemple, la fonction de gestion
des disques proposera des options
telles que sauvegarde ou relecture,
annulation..
Quand on est.a l’intérieur de l’option
édition, le mode de fonctionnement
normal est le remplacement: taper
sur une touche, quel que soit l’en-
droit of l'on se trouve dans le texte,
provoque le remplacement de |’an-
cienne frappe par la nouvelle et, si
Yon est en fin de texte, l'ajout du
nouveau caractére.
Si on désire insérer un ou des carac-
tére(s) a lintérieur d’un texte, il
convient de se placer d’abord en
mode insertion
Enfin, les formats d’impression font
partie intégrante du texte, si on choi-
sit de les sauvegarder dans l’option
“texte formaté”
Il s’agit la d'une des grandes origina-
lités de Magic Window. Par ailleurs,
les textes ainsi sauvegardés le sont
en binaire. Ils tiennent moins de
place sur disque que le méme fichier
en code. ASCII, et les échanges dis-
que sont plus rapides
Apple Writer II
Au lancement, Apple Writer II se met
en option édition, invitant 4 entrer di-
de traitement de texte
rectement un texte. Si ce n'est pas ce
qu’on désire faire, il faut demander
un menu (disques, impression, fonc-
tions auxiliaires), ou effectuer directe-
ment une commande qui ne sort du
mode édition que pendant son exé-
cution (sauvegarde, lancement d’une
impression)
Le mode de fonctionnement normal
est l'insertion : taper sur une touche
provoque JT'insertion du caractére
frappé avant celui sur lequel se
trouve le curseur.
Si on désire procéder 4 un remplace-
ment, il faut choisir ce mode particu-
lier (qui ne permet d’ailleurs que
l'utilisation des touches imprimables,
a l’exclusion de toute clé de fonction
ou de déplacement).
Les formats d’impression sont indé-
pendants des textes : le méme format
peut étre utilisé pour plusieurs: textes,
mais il faut demander chaque fois
l'utilisation d’un format d’impression.
Par ailleurs, Apple Writer Il posséde
deux fonctionnalités originales: une
fonction Glossaire permettant |’usage
trés simple de mots ou petites phra-
ses 4 caractére répétitif, et un lan-
gage associé permettant de program-
mer des commandes, le “WPL”.
Gutenberg
Au lancement, Gutenberg propose
une ligne de commande non
commentée, qui permet de décider
de l'utilisation d'un fichier (répertoire
du disque, police de caractéres, fi-
chier texte,...)
La mise en position d’édition se fait
par l’appel d'un fichier texte; il faut
ensuite appeler la fonction choisie
(par exemple : insertion). Pour chan-
ger de fonction, il convient de sortir
du mode en cours (par ESC), puis
de demander une nouvelle fonction.
Les formats d’impression sont totale-
ment indépendants des fichiers texte
Le logiciel en propose une grande
variété, et il est possible d’en créer
d'autres. Un systeme de “macros”
permet d’attacher un format standard
a un texte. Un questionnement préa-
lable 4 l'impression permet le choix
d'un format non standard.
Une grande originalité de Gutenberg
est la possibilité de dessiner ses pro-
pres polices de caractéres: Guten-
berg utilisant un écran graphique,
toute fantaisie de représentation est
possible: symboles mathématiques,
sigles, logos,... En contrepartie, l'im-
pression de ces caractéres spéciaux
est trés lente.
Commentaires
Ces differences fondamentales de
conception font qu'il est trompeur de
donner une cote de commodité d'uti-
lisation ou de facilité d’apprentissage
& un logiciel de traitement de texte :
certains préférent le menu 4 la ligne
de commandes. D’autres préférent
travailler normalement en mode rem-
placement (notamment ceux qui ont
appris la dactylographie sur machine
classique). D’autres enfin voudront
avoir un texte prét a l'emploi, y
compris ses options d’impression.
On peut donc comparer les fonction-
nalités. Les fonctionnalités de base
sont 4 peu prés les mémes partout,
seules variant les conditions d’utilisa-
tion. Par exemple, les déplacements
dans le texte peuvent se faire uni-
quement grace aux fléches de direc-
tion, ou utiliser des caractéres de
contréle.
En revanche (et nous en avons déja
vu quelques exemples), il existe pour
chacun des fonctions particuliéres qui
peuvent sembler primordiales aux
uns, compte tenu du type de travail
qu’ils effectuent, inutiles aux autres
qui les trouveront sans intérét.
20 Pom’s n° 11
Gutenberg est un logiciel de traite-
ment de texte proposé par Guten-
berg Software Limited, fonctionnant
sur Apple Il+ 64K ou //e
Il existe en 2 versions: Gutenberg
dunior (version testée ici) et Guten-
berg Senior, présentant un certain
nombre de fonctionnalités supplé-
mentaires, dans des domaines qui se-
ront indiqués au cours de l’analyse.
Gutenberg Jr est présenté sur une
disquette double face contenant,
outre le programme proprement dit,
divers fichiers utiles et, sous forme de
“démos”, tout ce qui est nécessaire
pour éditer le manuel sur impri-
mante.
Si certains usages (limités) s’accomo-
dent d'imprimantes diverses, le logi-
ciel est essentiellement écrit pour
limprimante matricielle Apple. Un
jeu important d’interfaces graphiques
est proposé. L’interface PROM 1/2
pour Apple ne lest pas, mais il suffit
(nous l'avons découvert par tatonne-
ments...) de déclarer péremptoire-
ment qu’on posséde une interface
Epson et tout marche bien (rien ne
marche avec les autres interfaces
proposées).
Plusieurs modes de fonctionnement
sont possibles, en 40 ou 80 colon-
nes, en utilisant ou non l’écran gra-
phique Haute Résolution pour les ca-
ractéres spéciaux. Mais ATTENTION,
option la plus avancée: 80 colon-
nes et écran graphique, nécessite une
carte 80 colonnes ETENDUE (cette
limitation fait objet de 2 lignes 1/2
“cachées” au fond d’un paragraphe).
Mode d’analyse
Nous évaluons les avantages et in-
convénients de Gutenberg en fonc-
tion de ce qu'un utilisateur de traite-
ment de texte est en droit d’attendre,
c'est pourquoi nous allons d’abord
tenter une définition de cet utilisa-
teur : il ne peut pas se contenter des
possibilités offertes par les traitements
de texte classiques. Il est prét a payer
ces exigences par une complexité
plus grande a l'usage. Par exemple
- professeur de mathématiques vou-
lant faire des polycopiés
- électronicien utilisant les symboles
de sa profession
- styliste cherchant a associer des
images, des logos...
Avantages et inconvénients sont pré-
sentés sous 7 tétes de chapitre
1 - Approche du logiciel
Pom’s n° 11
Gutenberg a l’essai
2 - Les fonctions d’entrée de texte
(édition)
3 - Le formatage des pages et para-
graphes
4 - L'impression
5 - Les échanges disque
6 - La création de “polices de carac-
téres”
7 - La documentation
1 - Approche du logiciel
Au lancement, le logiciel propose
d'abord de choisir l'interface pour
limprimante matricielle Apple que
lon va utiliser, puis d’indiquer le
connecteur sur lequel cette carte est
enfichée, enfin de choisir ou non le
mode "démos”
En mode de fonctionnement normal,
une ligne de commande apparait en
haut de l’écran, indiquant notam-
ment le “mode écran” (haute résolu-
tion ou non) et le lecteur de disque
en usage (évidemment le 1 lors du
démarrage) et proposant de démar-
rer par "READY”.
On peut alors décider de ce qu'on va
faire, par exemple, changer de dis-
que ou de mode écran, travailler en
40 ou 80 colonnes ou, aprés avoir
pressé la touche “RETURN”, éditer
le catalogue du disque, lire un fichier,
exécuter un programme utilitaire de
gestion de disque,
Aucun mnémonique n’étant proposé,
il y a donc au départ une dizaine de
codes opératoires 4 connaitre
1 ou 2 - lecteurs de disques
4 ou 8 - 40 ou 80 colonnes
I ou O - travail en haute résolution
ou non (high; 1Ow)
6 - “re-boote” le systéme
Ctrl-D - mode "démos”
Ctrl-P - programme d’impression
RETURN - demande d’un nom de
programme ou du catalogue
Nous retrouverons un peu tout au
long des diverses fonctions un certain
ésotérisme parfois génant. C'est ainsi
qu’en mode édition G est utilisé pour
une recherche (comme GET et non
pas F comme FIND) et X pour le
remplacement d’un caratére par un
autre (eXchange)
Avantages - L’écran n’est pas en-
combré par un menu. Une seule
frappe suffit frequemment pour réali-
ser une commande. L’exécution de
cette commande, dans la mesure oi
il n'y a pas d’appel au disque, est
trés rapide.
Guy Lapautre
Inconvénients - |] faut avoir une
bonne mémoire pour emmagasiner
tous les codes, ou un synoptique trés
bien fait (il manque cruellement dans
la documentation).
Synthése - [1 SEMBLE que les au-
teurs de Gutenberg n’aient pas mis
au premier rang de leurs préoccupa-
tions le souci de simplicité et de
“convivialité”, pour employer un
terme & la mode. Crest clair et
concis, c'est trés abstrait. Il s’agit la
d'une constatation et non d’un juge-
ment.
2 - Les fonctions d’en-
trée de texte (édition)
Toutes les fonctions classiques sont
la: déplacement du curseur dans le
texte, insertion, effacement, rempla-
cement, recherche par le contenu,
déplacement de paragraphes, etc.
Elles sont le plus souvent assorties
dun grand luxe de sous-fonctions.
A titre d’exemple, voici les sous-fonc-
tions permettant de “détruire” tout
ou partie d'un texte :
© K détruit le caractére sous le cur-
seur
© DELETE détruit un mot
@ DW aussi
® DL détruit une ligne
D suivi des fléches :
© gauche détruit
ligne
© droite détruit la fin d'une ligne
® haut détruit depuis le début de
Pécran
© bas détruit jusqu’a la fin de l’écran
D suivi de:
© Ctrl-S détruit tout l’écran
© Ctrl-M marque la limite d'une des-
truction
le début d'une
Tout ce qui est ainsi détruit est irré-
cupérable.
Pour passer d'une fonction 4 une
autre, il faut toujours “revenir a la
case départ” par ESC. Soit par
exemple la phrase "LOUI VAS A
L”ECOLE” qu’on désire transformer
en “LOUIS VA A L'ECOLE”. Voici
une séquence normale d’opérations
Commande Y (insertion d’un carac-
tere)
se placer derrigre LOUI
taper S
ESC
Commande X (remplacement)
se placer sur ”
OSTSE SCS) aS
taper”
ESC
Se placer sur le S de VAS
K (destruction d’un caractére)
On peut imaginer plus simple !
ATTENTION, il y a un piége dans
lequel l'auteur de ces lignes est sou-
vent tombé: une séquence d’inser-
tion doit se terminer par un retour
aux caractéres normaux, si on utilisait
des caractéres programmés. Si on a
omis de le faire, aucune fonction ne
reste disponible. Un “A” sur la ligne
de commande prévient de cette si-
tuation. En sortir par “Pomme ou-
verte - RETURN”.
Avantages - TRES larges possibilités
dans de nombreux domaines (par
exemple recherche dans le texte, re-
copies, remplacements). Ces possibi-
lités ne seront probablement pas
utiles 4 tous, mais chacun peut y pui-
ser ce qui l'intéresse (c'est d’ailleurs
écrit dans la notice)
Inconvénients - Mémes remarques
que pour le chapitre précédent, en
notant qu'il ne s'agit plus d'une di-
zaine de codes, mais de plusieurs di-
zaines de sous-options (sans doute
plus de 100 en comptant toutes les
variantes)
Synthése - Sans trop perdre des
fonctionnalités du produit, il eat été
possible de faire plus simple. La
frappe de textes trés longs sans
“effets spéciaux” est lourdement pé-
nalisée par le systéme d’édition
adopté par Gutenberg.
3 - Le formatage des
Pages et des paragraphes
La aussi, large panoplie de fonction-
nalités, obligeant si on veut utiliser
toutes les astuces, a une certaine jon-
glerie avec les “macros”: ce sont des
commandes assez simples permettant
la pagination, la présentation en 2
colonnes, [’édition de lettres, d’éti-
quettes, les différentes sortes de titra-
ges hauts et bas, la numérotation en
décimal ou en romain. |'indentation
des paragraphes, leur numérotation.
les sauts de lignes,
Des macros commandent aussi |’im-
pression: types de caractéres, gras
ou maigres, espacement proportion-
nel ou non, avec des largeurs va-
riées,..., ainsi que les débuts et fin de
colonnes, de pages, enchainement
d'impressions,.
Il existe au moins une centaine de
ces macros. Mais il existe aussi, pour
traiter les cas courants, des formats
standards sur la disquette. A noter
que des formats plus nombreux sont
proposés par Gutenberg Sr, ainsi que
la possibilite de créer de nouvelles
macros.
Les macros étant incluses dans le
texte, le format d'impression, s'il est
standard. fait donc partie de ce der-
nier et lui sera toujours attaché. Une
précaution a observer : le format uti-
lisé doit étre disponible sur la dis-
quette. Gutenberg le recherchera au-
tomatiquement.
Si en revanche vous désirez utiliser
vos propres formats, indication
devra en étre donnée au moment de
impression.
Avantages - Comme déja vu, trés
larges possibilités, avec en plus le
moyen de s'affranchir du maniement
pas toujours simple des macros grace
aux formats préconstruits.
Inconvénients - Le nombre consi-
dérable de macros fait qu'il est tota-
lement impossible de les connaitre
par coeur. L’absence d'un bon sy-
noptique se fait sentir, 4 moins qu’on
ne renonce aux possibilités offertes...
Synthése - Parfois abondance nuit.
Mais ne jetons pas la pierre 4 qui a
voulu bien faire. Quel dommage qu'il
n'y ait pas un résumé des comman-
des principales !
4 - Limpression
Gutenberg est écrit pour impression
sur l'imprimante matricielle Apple (cf
début de l’évaluation). Il est possible,
mais nullement certain, qu'il puisse
fonctionner avec d'autres impriman-
tes. De méme, une liste d’interfaces
est proposée. D’autres sont possibles,
la carte PROM 1/2 par exemple
Chaque utilisateur ne disposant pas
d'une des configurations standard
devra tatonner, sans étre sir du
succés,
L'impression d’un texte écrit en ca-
ractéres “normaux” se fait sans pro-
bleémes particuliers. Veiller seulement
ce que le format d’impression soit
présent sur la disquette.
En revanche, l'impression des carac-
téres spéciaux (Alternate Character
Set) se fait tres lentement, car c'est
une impression de GRAPHIQUE. Le
passage, ligne par ligne, de limpres-
sion texte 4 limpression graphique,
produit un effet curieux. Le papier
monte et descend; il y a des retours
arriére, mais strictement aucun pro-
bléme n’a été rencontré. Le tout
semble parfaitement fiable.
Attention : si on utilise dans un texte
des caractéres spéciaux, il faut veiller
a_ce que la police de caractéres
(FONT) utilisée pour T'édition se
trouve bien sur le méme disque que
le texte au moment de l'impression.
On peut regretter qu'il ne soit pas
possible d’imprimer un texte en mé-
moire sans passer par la séquence :
Sauvegarde sur disque (automatique)
Impression
Rappel (si on veut réutiliser le méme
texte)
sauf dans le cas particulier o& on
veut faire plusieurs impressions suc-
cessives du méme texte.
Il existe des macros permettant de
“jouer” avec les caractéres, y
compris par exemple double souli-
gnement ou italique, et d'autres pour
programmer des impressions.
Signalons d’autre part une option
“DUMP” qui permet impression to-
tale d'un texte, Y COMPRIS les ca-
ractéres de contréle.
Avantages - Trés grande souplesse
et trés grande fiabilité de limpres-
sion, utilisant toutes les possibilités de
limprimante matricielle Apple. On
peut produire des textes de trés
bonne qualité (voir exemple en an-
nexe).
Inconvénients - Tout juste peut-on
citer l'impossibilité d’imprimer “en
passant” un texte en mémoire.
Synthése - L’impression est incon-
testablement un point fort de Guten-
berg, et il faudrait étre bien difficile
pour ne pas apprécier les performan-
ces du logiciel dans ce domaine.
5 - Les échanges disque
Ils sont relativement nombreux mais
généralement assez brefs. C'est sans
doute la raison pour laquelle les au-
teurs proposent de faire une copie de
la disquette Master, copie qui ne sera
pas capable d’initialiser le systéme,
mais qui pourra remplacer le Master
aprés le “boot” initial.
La seule précaution notable a pren-
dre consiste a s'assurer que l'ensem-
ble de ce dont on a besoin pour édi-
ter ou imprimer un texte est présent
texte lui-méme, format et police de
caractéres.
Le passage d’un lecteur de disque a
autre (2 lecteurs sont indispensa-
bles) se fait tres simplement par la
frappe du chiffre 1 ou 2 quand on
est en position “READY”.
Le systéme comporte un certain
nombre de fonctionnalités intéressan-
tes
Tout d’abord, il est possible d’éditer
ou d’imprimer le catalogue d’une dis-
quette. Il est également possible de
choisir un fichier (texte, format ou
police de caractéres) en pointant sur
le catalogue.
Ensuite, un certain nombre de
commande type DOS sont directe-
ment accessibles a partir de Guten-
berg : initialisation, copie totale ou
partielle, destruction,
Il n'y a pas lieu de faire de commen-
taires spéciaux a ce niveau.
Pom’s n° 11
6 - La création de carac-
téres
Cest la principale originalité de Gu-
tenberg par rapport aux traitements
de texte classiques, celle qui fait que
Gutenberg sera particuliérement ap-
précié par les utilisateurs dont les be-
soins sortent de l’ordinaire.
Il existe une option “SCREEN” a
partir de laquelle on peut dessiner
sur une matrice de 7*10 tout carac-
tére. au sens le plus large du terme:
alphabet étranger, symboles mathé-
matiques, composants électroniques,
structures chimiques, logos, orne-
mentations diverses,..
Si une matrice est trop petite. on
peut en utiliser plusieurs. Chaque
matrice sera désignée par une touche
au clavier. La police de caractéres
spéciaux ainsi construite sera utilisée
(et créée) en faisant précéder la tou-
che frappée de “/” (pour 1 carac-
tere), ou de “Pomme ouverte RE-
TURN” (pour une suite de
caractéres). Dans ce dernier cas, on
désamorcera l'utilisation des caracté-
res_spéciaux par un second “P.O.
RETURN”. Surtout, NE PAS L’OU-
BLIER (cf. remarque dans le chapitre
édition)
Gutenberg Jr propose une de ces
polices de caractéres, comportant
surtout des caractéres accentués de
format réduit... et d’esthétique discu-
table - voir !'exemple en annexe.
Gutenberg Sr est beaucoup plus
tiche dans ce domaine.
L’exemple annexé donne un apercu
du type de caractéres et symboles
qu'il est possible de créer et d'impri-
mer. A noter, pour les lecteurs réqu-
liers de Pom’s, que la méthode de
création de caractéres est trés proche
de celle décrite dans le Pom's 8,
pages 21-23
Avantages - Indiscutables, les avan-
tages que comporte cette fonctionna-
lité font de Gutenberg un traitement
de texte a part.
Inconvénients - Lenteur de l'im-
pression dés qu’on est en présence
de caractéres spéciaux.
Synthése - Le lecteur ne sera pas
étonné de voir l'auteur particuliére-
ment séduit. Mais un conseil s'im-
pose : nous avons déja vu 4 plusieurs
reprises que les performances de Gu-
tenberg se payaient au prix d'une
certaine complexité, ce qui est bien
normal. C'est vrai aussi ici. Guten-
berg est sans doute le marteau-pilon
pour écraser la mouche, s'il faut en-
trer uniquement du texte banal au ki-
lométre.
7 - La documentation
Gutenberg est vendu SANS DOCU-
MENTATION IMPRIMEE digne de
ce nom: [utilisateur imprime lui-
méme sa documentation en utilisant
les démos proposées. On peut ou
non apprécier une méthode qui
certes réduit les cotits, mais qui
complique la tache de [utilisateur
(des heures de travail), et donne des
résultats dont la qualité n'est pas
comparable a celle d'un manuel bien
ait.
Cette documention (en anglais) pré-
sente des lacunes, dont la principale
est le manque total (déja signalé)
dun synoptique _résumant les
commandes PRINCIPALES. Certes.
de-ci de-la, l'utilisateur est avisé que
telle option est indispensable. alors
qu'on peut remettre a plus tard
l'étude de telle autre. Mais comme
C'est noyé dans l'ensemble du texte,
la lecture n’en nest pas facilitée.
On peut aussi lui reprocher de ne
pas mettre en valeur la grande origi-
nalité que constitue la création de
polices de caractéres: tres peu
d'exemples sont présentés, alors que
les formats et leurs macros tiennent
de nombreuses pages.
Nous n'apprécions nullement cette
documentation, s’agissant d'un pro-
duit qui n'est pas vendu 4 bas prix.
Conclusion
Gutenberg apparait comme un traite-
ment de texte présentant de nom-
breuses originalités et des fonctionna-
lités trés variées.
Parmi ses faiblesses - Un manie-
ment complexe. obligeant trés sou-
vent “hacher” le travail pour passer
d'une option a une autre - Le fait de
naccepter, en principe. que |'impri-
mante matricielle Apple - Une docu-
mentation totalement indigne d'un
logiciel de cette classe.
Parmi ses forces - La possibilité
pour Tutilisateur de créer ses propres
“polices de caractéres” - L'impres-
sion, surprenante au premier abord.
mais trés fiable, d'un mélange de
texte et de graphique - La possibilité.
malgré de nombreux tatonnements
au début, de trouver dans la pano-
plie des fonctionnalités offertes celles
qui conviennent a un probleme parti-
culier.
En synthése - Gutenberg est peut-
étre la ROLLS des traitements de
texte sur Apple. Il fut un temps of la
ROLLS était livrée_— chauffeur
compris. Sans aller aussi loin, Guten-
berg n’est sans doute pas un traite-
ment de texte mettre entre toutes
les mains, mais en revanche il sé-
duira tous ceux -nombreux-qui veu-
lent sortir du standard et du banal.
Gutenberg, le second traitement de
texte ?
Voici un exemple de frappe "au
ExXEMPLeE
caracteres
Quelques exemples de
Kilométre", avec justification & composés par l’utilisateur:
gauche. On utilise pour ce faire
Ta "MACRO" QL.
. Se (ax t+bx PBtex) dx
WM tert Pte eNarl L612
SVvem ple DAUM OPeastary fit
ttaltigue et Ugnies
JUBSELP UES & APtte,
sin®(x atx +x)
~
Ce texte est un exemple d’impression
programmée sur 2 colonnes. De nombreux
autres formats d‘impression sont disponibles.
On peut aussi bien sur
travailler en pleine
Justification: gauche
et droite.
Pom’s n° 11
Implantation et struc- — 330-EA NOP DE
Pommesoft ture 0331-AD 7F 03 LOA $037F
Le systeme Pommesoft se compose bathe Sec
Philippe Faure rh plusi suraalerments 0335-E9 41 = as41
AMPERPOMME: programme qui 9337-08
utilise l'ampersand (&) et qui permet 0338-4 TAX
Les programmes présentés ici per- de changer de BASIC. 0339-BD 4B 03 LDA $034B,X
mettent ie charger !Applesot dans PSCREATEUR: utilise la routine de —_933¢-8D 49 03 STA $0349
la carte langage, puis de le modifier. S.H.LAM pour mettre dans la carte |
Les avantages que T'on peut retirer RAM l’Applesoft trouvé en ROM O33) A003) LON SSAC K
de l'implantation d'un BASIC modi- EDITEURPS. : édition, modification, 9342-80 44 03. STA $0344
m —_ fié sont nombreux : écriture, sauvegarde du Pommesoft. 0345-20 87 00 JSR $0087
ey ‘ile d | is omnes ; + Monier 0348-4C 80 03 UMP $0380
© possibilité de programmer en lan- chargé dans la carte langage, résultat
E gue francaise (ou autre, bien str, des P oditestone a ADRESSES PAR LETTRE
ee selon les modifications apportées), 0348-84 03 $0384 A
= © possibilité de “traduire” en Pom- | AMPERPOMME 034D-C9 DE BESYNERR B
& Mmesoft_ un programme déja écrit j] s'agit d'un programme quia été O34F-C9 DE c
= en Applesoft. Il suffit de sélection. publié dans NIBBLE EXPRESS No 0351-C9 DE D
= ner le Pommesoft et de charger le 2, page 143, et qui permet, grace au 0353-C9 DE E
= programme : la traduction est au- vecteur &, de créer de nouvelles 0355-C9 DE F
i tomatique, “ fonctions en assembleur pour le
= © de méme, la démarche inverse est BASIC en affectant a chaque lettre 0357-C9 DE 6
ey possible, et ce de fagon automati- de |'alphabet adresse d'un sous-pro- _-0559-C9 DE H
que grace aux commandes &A et gramme en langage machine. Si la 035B-C9 DE I
&P qui permettent respectivement _jettre choisie n'est pas assignée, il y a 0350-C9 DE J
de passer en Applesoft et en Pom- branchement sur SYNERR ($DEC9)
mesoft en cours de travail Ce pour affichage du message SYNTAX O35F-C9 DE K
transfert s'effectue sans perte du ERROR. 0361-C9 DE L
Programme (contrairement aux La version AMPERPOMME a été — 9)3¢3-C9 DE M
ordres FP et INT). modifiée, car a Torigine, le BRUN —9345-c9 pg N
© modification de certaines routines impliquait une remise a zéro (vers
de l’Applesoft (comme le “GAR- SYNERR), ce qui obligeait a POKEr —-9867-C9 DE 0
BAGE COLLECTION”...) les adresse désirées. La version origi- 0369-80 03 = P$0380 P
Le systeme i sin nale comportait en outre un test sur 0346B-C9 DE a
ie impose un certain nom- “(pour le amétres, ?
bre dr contuiies etibutdaboran, 26, Rou, basage de parmeles, qam-cy te R
niveau du matériel minimum requis explique le RTS prématuré et les O36F-C9 DE 8
© un lecteur de disquettes, NOP). Sur la liste de désassemblage 0371-C9 DE T
© sur un Apple Il+, il faut avoir ci-aprés, on trouve a gauche TAM- —_0373-C9 DE U
“une carte langage” d’au moins = PERPOMME et 4 droite la version —_9375-c9 DE y
16K, originale, que l'on peut done rétablir —gay7-¢9 pg W
® cette carte est incluse dans l’Apple mais avec "&A(" en place de “&A”
i/e, sur lequel a d’ailleurs été dé- 0379-C9 DE x
veloppé ce programme. 0300-A9 4¢ LDA SAC 037B-C9 DE ¥.
Par ailleurs, le programme EDI- 0302-80 F5 03 STA $03F5 0370-9 DE 2
TEURPS autorise la modification 0305-49 20 LDA #820 037F-00
elavesmemugienmue come ei (eee Rois POA EEE
: n-
dans onne nl ae fen, Sala? 02 L8H C0N-9 8 6) tascam Care
gueur totale initiale des ordres, ni 0383-60 RTS
celle des messages. Si l'on veut rem- _030F-40 RIS A2=LDX 0384-8) 82 CO STA $C0B2 (ROM)
placer INPUT par DEMANDE, il faut 0310-32 2? 0387-40 RTS
réduire un autre ordre (par exemple 9311-49 C9 LDA #$C9
SHLOAD qui ne sert que sur cas- 9343-99 4B 03 STA $034B,X NDLR: cette routine ne constitue
sette). En fait, il s’agit d'une restric- 0316-49 DE LDA #$0E ” certainement pas le moyen le plus
tion relativement peu contraignante simple pour n’utiliser que les instruc-
car, les ordres devant toujours etre 0318-9D 40.03 STA $034C,X Nore BAe BP. make noussvous, le
tapés au clavier, la tendance serait 0348-CA DEX donnons néanmoins en l'état car elle
plutet & la contraction qu’au déve- — 934¢-t4 DEX pourra vous étre utile pour d'autres
Doone . , 031-10 FZ -BPL $0311 applications.
e plus, tous les ordres “cassette 031F-60 RTS
euvent étre réduits a un caractére
(possible de ‘controle du type 0320-80 7F 03. STA $037F PSCREATEUR
DEL). 0323-20 7) £0 JSR $£07D En utilisant la routine de S.H.LAM,
Les messages du SED ne sont pas = 0326-B0 03 BCS $0328 ce programme fait une copie dans la
modifiés mais il suffit d'utiliser un 9398-20 ¢9 DE JSR $DEC9 RAM de 'Applesoft ROM et du mo-
programme du style SPRECHEN SIE 0328-20 B1 00 JSR $00B1 niteur. Ensuite, il charge “VOC” qui
DOS paru dans Pom’s (ou "DOS est une version légérement modifiée
BOSS” par Beagle Brothers), ou de —_032E-EA NOP 20=ISR des tokens Applesoft (tokens cou-
Sen inspirer, pour y parvenir 032F-EA NOP BB rants et non utilisés en graphique) et
Pom’s n° 11
des messages BREAK, REENTER..
Vous trouverez enfin d’article la liste
des tokens de VOC et leurs équiva-
lents standards.
Les messages d’erreurs ne peuvent
pas étre chargés de cette maniére car
il faut modifier plusieurs adresses
dans le code de |’Applesoft. Du fait
de l'importance de l’Applesoft (42
secteurs), il est impossible d’en avoir
une copie entiére sur papier.
Il est bon de rappeler ici que les mo-
niteurs de l'Apple IIl+ et de l'Apple
'e ne sont pas identiques. Nous ver-
rons plus loin comment créer concré-
tement un fichier PS, mais notez de
suite qu'il est indispensable de faire
“RUN PSCREATEUR” avant d’exé-
cuter EDITEURPS pour une pre-
miére manipulation sur votre propre
matériel.
Structure de la table des
tokens ($DODO-$D25F)
Il est trés facile de modifier cette
table car tous les mots-clefs sont a la
suite les uns des autres et |'interpré-
teur les “repére” par leur dernier ca-
ractére qui a le bit 8 “on”.
Par exemple, END est codé "$45
$4E $C4” et $C4 est égal a $44 (D)
+ $80, $80 correspondant 4 128 en
décimal (cf EDITEURPS lignes 240
(lec
Showing the first 100000 of 281667 characters.