Text content (OCR)
La revue francophone indépendante pour les utilisateurs des
_ Apple J[+, //e, //c™ et Macintosh™
~ @ Les routines en assembleur sous ProDOS
@ Composition de numéros de téléphone
~_
~.@ Compacteur de programmes Basic
~ @ Hyperparallélépipédes et fractaux
@ Un Print Using en assembleur
@ Copie d’écran basse résolution
4
@ ‘Startup” Basic sous ProDOS
@ Transfert Apple // vers Mac
— @ Dela formule ala courbe
. \ @ Des titres dans le Basic
_ & Des Bugs sous ProDOS
@ Rubrique MacAstuces
@ Mini-Editeur Basic
@ Jeu de mots
@ Six lettres
"9
NUMERO 22. PRIX 40 F
ISSN : 0294-6068
M2366-22-40 F
DES LIVRES ¢G
Basic +
80 routines pour Apple*
par Michel Martin
144 pages - 95,00FF
Pour "Muscler" votre Applo,créer vos
propres jeux d’animation et maitriser la
technique du dessin animé.
Techniques de programmation
sur Apple Ii*
par René Ballo
168 pages - 95,00 FF
Pour créer des logiciels plus puissants et
plus structurés grdce & des astuces illus-
trées de nombreux programmes.
L'Apple et ses fichiers*
par Jacques Boisgontier
176 pages - 95,00 FF
Les commandes du Systéme d’Exploitation
Disque, les instructions du Basic Applosoft
et des fichiers séquentiels et a accés
direct puis leur utilisation & l'aide de
programmes divers.
Destination aventure sur Applo*
par Delton T. Hom
246 pages - 140,00 FF
Utilisoz les instructions, les explications et
les astuces de programmation de ces 4
jeux d'aventure en Basic pour créer les
vétres.
La programmation des jeux
d'arcades*
par Jean-Luc Fischer
300 pages - 140,00 FF
Pour générer sur votre Apple des effets
spéciaux époustouflants grace a des
programmes en Basic et en Assomblour.
Apple, logique et systémes
experts*
par René Descamps
224 pages - 120,00 FF
Pour étudier toutes les é6tapes logiques de
la pensée humaine et créer un micro
systéme expert en Basic.
REALISEZ VOS APPLICATIONS
‘sur Apple Il plus, Ile et lic
EGALEMENT CHEZ VOTRE LIBRAIRE ET EN BOUTIQUE SPECIALISEE
POUR VOTRE APPLE
MAITRISEZ LA PROGRAMMATION
Apple, modems et serveurs*
par Alain Mariatte
(224 pages - 120,00 FF
Apprenez a vous servir d'un modem,a
utiliser un logiciel de communication,
connaitre les principaux réseaux et vous
familiariser avec les oulils télématiques.
Diététique sur Apple*
par JM Jego et uM Lichtenberger
224 pages - 120,00 FF
Pour calculer votre surface corporelle et
découvrir votre métabolisme énergétique
grace a volre Apple.
EXPLOITER LE SYSTEME
ET L'ASSEMBLEUR
Assomblour de I'Apple***
par N. Bréaud -Pouliquen
240 pages - 120,00 FF
Pour apprendre & obtenir rapidité d'éxé-
cution et économie de mémoire,voici une
initiation & l'assembleur (6502 - 65C02)
illustrée de nombreux programmes.
ProDos sur Apple Ile et IIc*
ar Francis Verscheure
104 pages - 85,00 FF
Découvrez ProDos pour gérer des cata-
logues et des fichiers si vous voulez
profiter de ce syst8me performant,
Clefs pour I'Apple II**
144 pages - 105,00 FF
Clefs pour I'Apple llc et
lle 65C02**
172 pages - 130,00 FF
par N. Bréaud -Pouliquen
Pour accéder rapidement a la syntaxe des
commandes, aux codes caractéres, aux
codes machine... et des trues utiles
lorsque vous programmez,
Les ressources de I'Apple Ilc***
par N. Bréaud Pouliquen
108 pages - 85,00 FF
Pour découvrir les avantages du Ilc,utiliser
le logiciel de base du systéme et pro-
grammer astucieusement la souris.
** sur Apple Il plus et lle
*** sur Apple Ile et Ile 65CO2
Ré‘érence 180 du service
Je commande le(s) livres) :
Code postal.
paiement par chéque joint
Envoyer ce bon accompagné de votre raglement a :
P.S.IDIFFUSION BP 86
77402 Lagny / Mame Cedex Tel : 6006 4495
En Belgique & P.S.!, BENELUX
17 Tue du Doyenne, 1180 Bruxelles
paiement par Carte Bleue Visa Tel : (2) 345 39.03
En Suisse, a P.S.1. SUISSE
Date d'expiration..2.. Route Neuve 1, 1701 Fribourg
Tel : (037) 23 1828
N‘ de la Carte... ‘Au Canada, & PROLOGUE INC.
2975 rue Sarieton, Ville St Laurent
Québec HSRI1E6 - Tel :(514) 332 58 60 Gey
Composition de
numeéros de
téléphone Bernard Hoyez
Jean-Luc Nail
He}
SES Page 6
Jeu de mots =
Page 44
Adaptation a ProDOS
des routines en
assembleur Atexandre Avrane
payer
Page 9
Transfert || -> Mac
Page 44
Compacteur de
programme Basic
An) Sylvie Gallet
‘ + He [7e
==
Page 17
Hyperparallélépipédes
et Fractaux
Copie d'écran GR
Bernard France
Soe
—s Page 23
‘De la formule a la
courbe Jean-Louis Chauvin
22
Page 27
‘Startup’ Basic sous
ProDOS
Pascal Cantot
Page 33
Des titres en Basic
Sylvie Gallet
Ui} ell 77
os SS Page 37
Jean-Luc Bazunegue
Page 45
MacAstuces
Page 50
Mini-Editeur Basic
Guillaume Pot
It] [We
ih Page 51
Six Lettres — sanafred Brede
3 Hell C77ey
SS =| = Page 57
Des Bugs sous ProDOS
Alexandre Avrane Page 63
Print Using Patrice Neveu
GH) [e]} pe
cers) (a) Sage os
Euliorial 5
Bibliographie 69
Courrier des Lecteurs 72
Les annonceurs :
Apple : pages 38 et 39. Computic : page 55. PSI : page 2. Infomac : page 75. Ordinateur Individuel : Page76.
[ Editions MEV - 64/70 rue des Chantiers - 78000 Versailles. Directeur de la publication : Hervé Thiriez
Pom's n° 22
Des atouts pour votre Apple
releln écran
Apple J+,
>
Editeur
d
Listez vos programmes Basic
en avant et en arriére.
lignes. Recherchez toute
chaine de caractéres.
Choisissez vous-méme les normal, en proportionnel el au sein @'une méme
codes de contréle d'EPE. ligne sans perte de justification. P-Format }f
s c'est aussi : un mode mathémalique el un mode
Modifiez EPE : le fichier source -
augmentera considérablement les possibilités:
‘impression de votre logiciel. Vous pouvez
us obtenir une justification droite, gauche,
Modifiez, | cotaze, centrée, ou encore page paire a droite
_ inserez, effacez des caractéres et impaire 4 gauche de facon automatique. A
en plein écran sans relire les” aoter que la justification n'est pas perturbée
= Par ‘les caractéres du type ‘8’ ou ‘6’. Le
style d’impression peut passer de la simple 4
Apple J[+
es DISK Apple //e
>
Vous avez un
traitement de texte
et une ImageWriter,
alors...
P-Format jf
la double largeur, de gras ou souligné 4
graphique grace 4 la police programnée.
Pe
OW MANAGEX;
I+ LE DOS
fe ENKIT
Accompagné d'une cinquantaine de pages
de documentation, Disk Manager permet
de recréer les commandes du Dos, redéfi-
nir l'organisation d'une disquette, grace 4
un jeu d'instructions qui en fait un langage
simple d'accés 4 la disquette. Il offre éga-
lement un programme d'édition 8 l'aide de
commandes évoluées. Quatre utilitaires
figurent aussi sur la disquettes : Utili-
disque (réparation du disquette détruite,
vérification...), Ultra-copie (pour un
backup trés rapide), Edicat (édition du
catalogue, ...) et Multi-disque.
“te. BASICIUM
(2 Basic enticht..
Cet utilitaire vous ‘permet de gerer des
masques ou écrans 40 ou 80 colonnes,
saisir toutes les variables d'un écran en
une seule commande, recopier l'écran -
40 ou 80 colonnes sur l'imprimante,
faire un Nettoyage mémoire (garbage —
collection) trés rapide, gérer des
messages, ne saisirque l'une des _
vatiables affectées & un écran, etc. |
Abonnements a Pom's pour 6 numéros : RE es oy
o + abonnement 8 la revue seule .
Ss
o
Ss % :
q Editeur plein écran EPE.. . . .
6 PeFOtmat |Eie s <:ececce
foal DISK MANAGER .
3 BASIGIUM s sascsieus saci
* abonnement revue et disquettes Apple J[ . . . 480,00 F
+ abonnement revue et disquettes Macintosh. . 600,00 F
Pour Apple ][+ ou Apple ve
Envoyez ce bon et votre reglement 4 EDITIONS MEV - 64, rue des Chantiers - 78000 Versailles.
Supplément avion hors CEE :
15,00 F par numéro et/ou disquette.
Editorial
Il n'est pas facile d'étre honnéte et de maintenir certains standards dans un monde ot le souci
d'intégrité est souvent pris pour de la naiveté. Comme vous avez pu le constater, Pom's est une revue
comportant fort peu de publicité. Cela tient en bonne partie a notre refus, malyré linsistance de
nombreux de nos clients, de promettre des articles sur leurs produits en échange de contrats de
publicité, un mode d’échange pudiquement baptisé "publicité rédactionnelle".
Pom's préfére garder sa liberté d'expression, au risque de perdre certains annonceurs. Nous faisons le
pari que les lecteurs ne se laisseront pas abuser par ces faux articles, qui pourraient les encourager a
acheter des produits de qualité insuffisante.
Le monde de I’Apple II, comme nous le montre bien Jean-Michel Gourévitch depuis plusieurs
numéros, est en constante évolution. Dans combien de temps disposerons-nous d'un Apple II aussi
puissant que le Macintosh ? Probablement plus trés longtemps ; il n'en reste pas moins que — pour des
raisons de compatibilité avec le vieil Apple II — on n‘arrivera pas tout de suite avec ce matériel a la
qualité ergonomique du Macintosh.
Ceci dit, ces derniers temps, le monde du Macintosh houge encore plus vite que celui de l'Apple II,
avec en particulier l'arrivée du MacPlus. Depuis quelques mois, le prix des extensions 512K pour le
Mac baisse sans cesse : nous sommes passés en un an de pratiquement 12.000 F TTC 4 moins de
3.000 F TTC aujourd'hui. Quand on voit le prix que coiite encore aujourd'hui l’extension a | Mo, le
possesseur d'un Mac aura intérét a faire transformer son Mac en MacPlus (extension @ I Mo, nouvelles
ROMs, passage du lecteur intégré @ 800K) plutét que de s'offrir la seule extension mémoire.
Autre signe des temps, apres s‘étre longtemps enfermé dans sa politique de standard a part de
l'industrie, Apple met en relief sa capacité a travailler en réseau avec le monde IBM.
Nous continuons a recevoir des lettres de possesseurs d’Apple II s'inquiétant de savoir si nous n’allons
pas abandonner progressivement celui-ci pour le Macintosh. Je pense que, depuis le temps que nous
proposons le cahier Macintosh, ces lecteurs peuvent étre rassurés : nous n’avons pas réduit la
pagination Apple II — comme promis — et toute extension du cahier Mac se fera sous la forme d'une
augmentation de la pagination.
Remarque importante : nous continuons a recevoir du courrier a l'ancienne adresse, mais celui-ci ne
suit plus systématiquement. Pour étre stir que vos lettres nous parviennent, utilisez donc l'adresse :
64/70 rue des Chantiers - 78000 Versailles.
Hervé Thiriez
Photo de couverture : Macintosh Plus - Clavier AZERTY avec pavé numérique incorporé, 1 Moctets de RAM
bient6t extensible 44 Moctets, 128 Ko de ROM, routines QuickDraw réécrites pour plus de rapidité, lecteur de disquettes
double face double densité 800 Ko. Prix hors TVA : Macintosh Plus : 25900 F (le Mac 512 Ko coite désormais
22900 F, le Mac 128 Ko est abandonné) - lecteur externe 800 Ko (pour Mac Plus ou Mac standard) : 3900 F - mise &
niveau Mac Plus pour Mac 128 Ko : 6500 F - mise & niveau Mac Plus pour Mac 512 Ko : 4500 F.
Ont collaboré a ce numéro : Alexandre Avrane, Jean-Luc Bazanegue, Manfred Brede, Pascal Cantot, Jean-Louis
Chauvin, Alexandre Duback, Bruno Fénard, Bernard France, Sylvie Gallet, Jean-Michel Gourévitch, Olivier Herz,
Bernard Hoyez, Gérard Michel, Jean-Luc Nail, Patrice Neveu, Christian Piard, Guillaume Pot, Marianne Sutz
Directeur de la publication, rédacteur en chef : Hervé Thiriez.
Rédacteurs : Alexandre Avrane, Olivier Herz.
Siége social : Editions MEV - 49, rue Lamartine - 78000 Versailles. Tél. : (1) 39.51.24.43.
Publicité : Editions MEV.
Diffusion ; N.M.P.P.
Impression : Rosay - 47, avenue de Paris - 94300 Vincennes. Tél. : (1) 43.28.18.63.
Pom’s est une revue indépendante non rattachéc a Apple Computer, Inc. ni a Apple Computer France $.A.R.L. Apple, le logo Apple, Mac ct le
logo Mackintosh sont des marques déposées d’Apple Computer, Inc.
Pom's n° 22
Composition automatique
de numéros de téléphone
Bernard Hoyez, Jean-Luc Nail
‘e plus se souvenir d'un
numéro, ou le doigt qui
dérape sur le clavier du
téléphone, cela vous est
déja arrivé, n'est-ce-pas ? La
numérotation a huit chiffres n'a
pas arrangé les choses. Combien
de temps et de taxes de hase cela
vous a-t-il coité ? Une solution 4
ce probléme est de remplacer
votre vieux téléphone a cadran par
un superbe appareil 4 mémoires
ou alors... de demander 4 votre
vieil Apple de faire ce travail 4
votre place. Désormais, Roméo,
faites apparaitre le doux nom de
Juliette sur l'écran de votre
ordinateur favori et vous
entendrez aussitét la voix de votre
chére et tendre amie.
Le composeur automatique de
numero nécessite :
* une interface entre I'Apple et la
ligne téléphonique ;
¢ un logiciel de composition de
numéro.
Principe de la
composition d'un
numéro
Un appel téléphonique se
décompose en quatre phases :
¢ a prise de ligne ;
* la composition du‘numéro sur
le clavier ou le cadran ;
+ Véchange audio ;
* leraccrochage.
La prise de ligne s'effectue
lorsque l'on décroche le
combiné: un interrupteur se
ferme et court-circuite la ligne.
La composition de numéros
consiste 4 envoyer sur la ligne une
succession de signaux repré-
sentant chacun un chiffre. Un
chiffre est lui-méme une
succession d'impulsions et a
chaque chiffre correspond un
certain nombre d'impulsions
élémentaires : une impulsion pour
le chiffre 1, deux impulsions pour
le chiffre 2, ..., 10 impulsions
pour le chiffre 0. Une impulsion
comporte une ouverture de ligne
d'une durée de 66 millisecondes
suivie d'une fermeture de ligne de
33 millisecondes.
Le raccrochage s'opére lorsqu'on
repose le combiné, ce qui a pour
effet d'ouvrir 4 nouveau le circuit.
La forme du signal envoyé sur la
L'interface :
la prise de jeu !
Le principe en est simple, il s'agit
de simuler un second téléphone en
paralléle pour lequel la prise de
ligne, la composition et le
raccrochage seront gérés par
l'ordinateur. Une fois la
communication établie par ce
“téléphone virtuel”, on reprend la
ligne par le téléphone réel.
Le téléphone virtuel agit comme
un interrupteur, dont -la
commande peut étre réalisée par
une sortie logique de I'Apple.
Inutile de concevoir une carte
spécialisée car ces sorties logiques
existent sur la prise de jeu. Elles
sont au nombre de quatre et
appelées ANO, ANI, AN2 et
AN3. Elles ne sont accessibles
qu'a l'intérieur de |'Apple au
niveau du connecteur 16 broches.
Sur l'Apple //e , on a négligé de
reprendre ces sorties sur le
connecteur externe 9 broches,
c'est dommage. Une seule sortie
est nécessaire, nous avons choisi
£1A - ligne a l'aspect représenté dans _ ANO situé sur la broche numéro
téléphonique eis a8
~ *
i |
R
PULSE i
Temps
Prise de ligne Chiffre 3 Inter chiffre Chiffre 1 Raccrochage
L P
Pom's n° 22
Pour assurer une isolation parfaite
entre l'Apple et la ligne
téléphonique, l'interrupteur est
celui d'un relais. Nous avons
choisi un mini-relais 5 V de type
CLARE PRME (ou équivalent).
Pour commander ce relais, il faut
amplifier le signal fourni par
ANO, grace a un transistor et au
+5 V disponible sur la broche 1
du comnecteur de jeu.
L'ensemble des composants
prend place sur une petite
plate-forme enfichée dans le
connecteur de jeu par
l'intermédiaire d'un support de
circuit intégré.
Le programme
Une partie de la mémoire de
l'Apple est réservée aux
entrées/sorties, notamment pour
ce qui nous concere aux sorties
logiques ou "annonciateurs" de la
prise de jeu. Pour l'annonciateur
ANO, il s'agit des mémoires
d'adresses $C059 et $COS8. Le
simple fait d'écrire 4 ces adresses
met respectivement la broche ANO
a l'état 1 (3,5 V) ou a l'état 0
(0,3 V).
Cette écriture peut se faire de deux
maniéres, soit en Basic, soit en
lJangage-machine :
« en BASIC, on pourra faire un
POKE 49241,0 (état 1) ou un
POKE 49240,0 (état 0) ;
+ en langage d'asscmblage, on
écrira STA $COS9 (état 4) ou
STA $C058 (état 0).
Le logiciel consiste donc a gérer la
commutation de ces deux adresses
‘Ades intervalles de temps précis et
brefs. Lors de la composition
d'un chiffre, entre deux
impulsions successives, lc
passage 4 l'état haut dure 33
millisecondes. Un tel laps de
temps est trop court pour étre
maitrisé dans un programme
Basic, d'od la nécessité d'écrire
en langage-machine la partie du
programme effectuant la
composition des chiffres.
Le programme
‘COMPOSEUR’
Ce programme fait appel a une
routine de temporisation du
moniteur appelée WAIT,
implantée en $FCA8. Elle permet
de régler précisément les durées
des passages a l'état haut et a
l'état bas. La temporisation, en
microsecondes, est une fonction
de la valeur entrée dans
l'accumulateur :
t=(26+27*A+5*A*A)/2
Ainsi, pour une durée de 66 ms,
on entrera 159 dans A avant
d'appeler la routine WAIT.
Le cas de la composition du
chiffre 0 est traité a part, car il
7
+
a |
15KQ
2N2219
is}
KR WAUANICO
po + SV
( cox
CLARE PRME 5V
correspond 4 la génération de 10
impulsions (ct non de 0).
Le code ASCII du chiffre a
composer, stocké en mémoire 7
par le programme Basic, est
chargé dans l'accumulateur. Si le
code ASCII n'est pas celui d'un
chiffre, on passe au chiffre
suivant en positionnant un
drapeau en mémoire 8. Le AND
#$0F permet la transformation du
code ASCII en chiffre de 0 4 9.
Le cas particulier du 0 est ensuite
traité. La routine principale
BOUCLE génére alors un nombre
d'impulsions (PULSE) différent
selon le chiffre stocké dans le
Tegistre X.
Le programme ‘AGENDA’
Ce programme Basic établit la
correspondance entre le nom d'un
abonné ct son numéro de
téléphone, puis il effectue la
composition de ce numéro. Le
choix de l'abonné se fait en
visionnant l'agenda au moyen des
fl&ches gauche et droite.
Pour ne pas compliquer le
programme d'un gestionnaire de
fichier, les noms d'abonnés et
leur numéro sont intégrés a la fin
du programme sous forme de
DATA. II suffira d'ajouter de
nouvelles lignes de DATA pour
entrer de nouveaux corres-
pondants. Le programme place
ces données dans le tableau T$.
Rien ne vous empéche, si vous
possédez un agenda sur disquette
dont vous connaissez la structure,
de le récupérer dans le tableau T$.
Comme la liste de vos
correspondants est susceptible de
changer trés souvent, on a évité
de remplir le tableau T$ au moyen
d'une boule FOR...NEXT que
l'on aurait dO ajuster chaque fois.
En cas de fin de DATA, la routine
de traitement d’erreur interrompt
Ic remplissage du tableau.
Une fois le choix validé par la
frappe sur la touche <RETURN>:
A On effectue la prise de ligne
(ligne 380).
B Le code ASCII de chaque
chiffre du numéro téléphonique
est stocké en mémoire 7 et un
appel a la routine ‘Composeur’
est fait, ceci autant de fois que
le numéro comporte de
chiffres. Entre chaque chiffre
Pom's n° 22
composé est laissé un temps de Programme a4 ae een
: 30 wa no
c Tization. : COMPOSEUR.S 3 mse iat
ui S 32
ea a 3 © PUMHIEED SESE (Assembleur Merlin) Pl «in
o P ’ vous J pouvez 34 JSR PULSE
décrocher le combiné télé- 1 teenennesnnene: ee 35 DEX
phonique. Le “téléphone baie —— ; ae ae eee
virtuel” reste branché en a = . = a
paralléle pendant quelques SS ETENENSRTSREPAREAREAE RARER 39 ERROR = *
secondes, le délai restant est ‘ _ By aer
a oe re: 7°8 rembre 85
affiché sur l'écran. _ e =e
D Le “téléphone virtuel” est alors oer .
coupé (ligne 550), vous restez ~ ff. mk anced
alors seul en communication. 12 SeTaNo = — $0059 “6 JSR WAIT
Ald... Juliette... ? 13 CLRANO = = C038 a7 LDA #108
e — 14 WAIT a ‘SFCAB 48 STA SETANO
15 CHIFFRE = 7 49 JSR WAIT
16 RARRUR = 8 50 RTs
N.D.L.R. : un tel montage n'entre = basi B08 —— SL
pas dans le cadre de ce que vous 3 Récapitulation
autorise l’administration des ae * COMPOSEUR
Postes. Vous testerez ceci, bien 22 LDA CHIFERE
entendu, sur une installation 23 cue #70"-1 0300--A5 07'C9 AF 90.12 C9 BA
; 24 ACC ERROR 0308- 80 OE 29 OF DO 02 AS OA
indépendante du réseau. 35 as pest 0310- AA 20 1D 02 CA DO FA 60
26 BCS ERROR 0918- a9 FF 85 08 60 A9 9F 8D
E: 27 0320- 58 CO 20 AB FC AS 6C 6D
28 AND #41111 0328- 59 CO 20 AB FC 60
Programme 280 IF A’ = 13 THEN 360
290 IF At = 21 THENI=I+1
| AGENDA ae eine eee
310 IF I>N-1 THENI=N-1
10 REM ***COMPOSEUR DE NUMERO*** d20 IFT <2 IRENE
* 330 VTAB 15
20 REM * par a =
6. xe Bernard noes , 340 CALL - 868: PRINT 1$(1,1),1$(1I,2)
40 REM * et JeanzLbuc NAIL * S30! (Coro. 290
360 X$ = TS$(I,2)
370 REM **COMPOSITION DU NUMERO*
380 POKE 49241,0: REM PRISE DE LIGNE
390 FOR I = 1 TO 700: NEXT I
400 HOME
50 REM AA4KAAKAA RAR AAR AR
60 REM ==>ENTRER IRS NOMS ET LES NUMEROS EN D
ATA A LA SUITE DES AUTRES
70 REM ttt thtkhartannaecaeaee eee
e0 HOME
26 ican ene S96 410 PRINT : PRINT "Je compose le numéro "?
100 PRINT ” COMPOSITION AUTOMATIQUE DE” 420 FORI=1 TO LEN (XS)
110 PRINT " NUMERO TRIEPHONTQUE" $30:Asm ASC: { MIDE 9, Te I) E328
440 POKE 7.A
450 CALL 768
460 PRINT CHRS (A);
470 FOR T = 1 TO 600: NEXT T
120 PRINT CHRS (4)
130 DIM T$(100,2)
140 N=0
150N-N4#1
;LOADCOMPOSEUR™
160 FORJ=1T02 480 NEXT I
170 READ T$(N,J) 490 HTAB 1: VIAB 5: PRINT “Décrochez le comb
180 NEXT J iné, maintenant..."
500 VYAB 8: PKINT “.....avant"
190 GOTO 150
200 VTAB (8) 510 FORI = 400701 STEP - 1
210 PRINT "Utilisez les fléches ";: INVERSE 520 VTAB (15): HTAB (11)
: PRINT "=>":: NORMAL : PRINT "et "s: T 530 PRINT INT (I / 50)" secondes"
NVERSE : PRINT NORMAL 540 NEXT I
220 PRINT "pour sélectionner le nom de l'abo 550 POKE 43240,0
nné" 560 GOTO 580
230 PRINT : PRINT "Validez avec la touche RE 570 IF PEEK (222) = 42 THEN 200
TURN" 580 HOME : RESTORE
240 1 =0 590 PRINT "...Pret pour un autre appel ...":
250 GET AS GOTO 140
260 Ak = ASC (AS) 600 DATA RENSEIGNEMENTS, 3612
270 IF At < > 13 AND A’ < > 21 AND AB < > 620 DATA AUTRES RENSEIGNEMENTS, 3611
8 THEN 260 630 DATA JULIETTE, 123456/8
K
8 Pom's n° 22
Adaptation a ProDOS des
routines en assembleur
Alexandre Avrane
l existe actuellement plusieurs centaines d'utilitaires
en assembleur qui facilitent la programmation en
Applesoft : tris, contréle de saisie, formatage de
nombres, etc. Malheureusement ces routines,
congues pour fonctionner correctement sous DOS 3.3, ont
été assemblées a des adresses fixes et ne tournent plus dans un
environnement ProDOS ; I'objectif de cet article est donc de
répondre aux questions des lecteurs qui désirent conserver
l'acquis d'une importante logithéque d'utilitaires, en les
transposant pour un environnement ProDOS.
Cependant, il s'agit plus de
fournir des conseils que de
proposer un module tout chaud et
prét-a-exécuter, car une telle
conversion n'est pas une
opération automatique qui peut
facilement se ramener 4 un
algorithme unique. N'oublions
pas qu'il ne s'agit pas de recopier
un fichier sous un format
différent, mais également de le
modifier pour qu'il soit adapté a
son nouvel environnement.
Certains programmes publiés par
Pom's:serviront d'exemple et de
référence... auto-publicité exige!
Enfin, la démarche 4 appliquer
sera volontairement détaillée car
elle s'adresse également aux
lecteurs qui connaissent peu
l'assembleur ; certaines recom-
mandations pourraient donc
paraitre superflues.
Avant de se précipiter sur son
clavier, il n'est pas inutile de se
poser quelques questions sur le
programme a adapter :
+ est-ilutile?
est-il adaptable ?
od se loge-t-il ?
comment est-il utilisé ?
comment se protége-t-il ?
Le programme
est-il utile ?
Une routine peut étre fort utile
pour surmonter certains handicaps
du DOS 3.3, mais se révéler en
revanche de peu diattrait avec
ProDOS.
C'est le cas des programmes
destinés 4 accélérer les temps de
chargement de fichiers ; ceux qui
telogent le DOS sur la carte
langage, ou tous les utilitaires
tournant dans un environnement
DOS 3.3 + Integer Basic.
Idem pour le programme FRE16
de nettoyage de la mémoire
(Pom's 2), désormais intégré
dans la commande FRE de
ProDOS.
Le programme
est-il adaptable ?
Une routine qui supposait comme
principe essentiel de
fonctionnement la présence du
DOS 3.3 ne pourra pas étre
adaptée 4 ProDOS sans une
révision générale.
En effet, les appels du File
Manager ou RWTS d'une part, du
ProDOS MLI d’autre part, ont des
structures totalement différentes.
En pratique, l'examen du source
du programme donne une sérieuse
indication de sa dépendance vis 4
vis du DOS 3.3 : toute référence &
une étiquette externe située dans la
plage d'adresses $9600-$BDFF
constitue normalement une forte
présomption.
Ainsi, le HELLO complet de
Pom's 6 ne peut pas étre adapté
en quelques minutes 4 ProDOS ;
il serait préférable de le réécrire
complétement. De méme pour les
programmes de francisation du
DOS (Pom's 2 et 8) : les formats
sont différents sous ProDOS et,
de plus, les adresses absolues des
commandes et libellés d'erreur
varient pour chaque version.
Oi le programme
se loge-t-il ?
Sous DOS 3.3, les programmes
en assembleur pouvaient se loger
pratiquement n'importe ot ! Sous
ProDOS, certains emplacements
sont 4 éliminer, en particulier :
+ Ie buffer d'entrée ($200-
$2FF),
+ les adresses $9A00-$9CFF
(anciennement les buffers du
DOS 3.3),
+ la carte langage, dans son
intégralité.
La seule exception concerne la
routine d'accés a une carte
horloge, pour laquelle un petit
emplacement est réservé,
moyennant l'adhésion a un
protocole rigoureux d'interface
avec ProDOS.
Pom's n° 22
wo
Trois emplacements sont
généralement classiques pour
placer les routines :
* La page 3 (adresses $300-
$3CF) est laissée disponible.
Dans ce cas, vous n'aurez
probablement aucun probléme.
« Enrevanche, les emplacements
situés sous les buffers du DOS
3.3 (limite supérieure en $9600),
ainsi que ccux situés un peu plus
haut et pour lesquels on déplagait
les buffers du DOS sous la
routine, vont nécessiter un
déplacement du programme.
Sinon on obtient généralement, tot
ou tard, le message ‘NO
BUFFERS AVAILABLE’ de
ProDOS. Nous verrons plus loin
comment reloger un programme
en assembleur.
+ Enfin, le demier emplacement
favori - cacher la routine au sein
d'un programme Applesoft (pour
les détails, lire Pom's 12 page
35) - est totalement transparent
par rapport au systéme
d'exploitation utilisé, et ne pose
aucun probléme.
Comment le
programme est-il
utilisé ?
Toute routine en assembleur est
appelée soit directement, soit
indirectement.
La méthode directe consiste 4
demander son exécution par un
CALL vers une adresse
déterminée. Si le programme a été
relogé, il ne faudra donc pas
oublier d'indiquer la nouvelle
adresse au programme appelant.
L'autre méthode utilise indiffé-
remment l'ampersand (&),
l'instruction USR de l'Applesoft
ou le Control-Y du moniteur. Ces
vecteurs sont initialisés soit par le
programme appelant, svit par le
programme appelé (et relogé) ; ici
aussi, il faudra modifier les
valeurs d'initialisation (si possible
en créant un chainage car
plusieurs routines peuvent utiliser
Je méme vecteur).
Comment le
programme est-il
protégé ?
Dans l'environnement ProDOS,
les pages d'adresses mémoire
(blocs de 256 octets) sont
marquées libres ou occupées.
ProDOS utilise les pages libres
pour s'allouer dynamiquement les
buffers nécessaires aux accés
disque.
En particulier, ProDOS refusera
de charger un programme
assembleur vers un emplacement
occupé et, inversement, pourrait
l'écraser si celui-ci n'a pas
indiqué les pages qu'il utilise.
Le programme RAM.BITMAP de
Guy d'HERBEMONT permet
dillustrer ce processus. II affiche
la carte des pages mémoire
disponibles (pages $00 4 $BF) en
indiquant pour chacune si elle est
occupée ou libre.
Aprés le chargement de ProDOS
+ Basic.System, on obtient :
0123456789 ABCDEF
$00 PP°° PPPP®°°eeecce
$10 2° 200 Coo ooF ooo OO
$20 2c coe ooo ooo ooo OS
$30 2c coo 00
$40 22 202000000000 00
°
°
°
$50 08 coe ce oo C0008
$60 °c ccc ce oocc cece
$70 22 cco cocoa D008 00
$80 22 occ coo coo 20000
$90 °2 oc 0 oc ooo PPpppp
SAO PP PPP PPPPPPPPPEP
$B0 PPPPPPRPP PP? ss? BP
P = proiégé * = libre
On note en particulier:
+ Les pages 0, 1 (pile du 6502),
447 (écran texte) sont protégées
en permanence. Un programme
assembleur peut, cependant, les
utiliser; en particulier les adresses
en page zéro qui sont disponibles
sous DOS 3.3 le restent sous
ProDOS.
¢ La page 2 (buffer d'entrée) est
libre car ProDOS I'utilise (il
Tecopie la commande en cours
pour en extraire les paramétres, et
y formate également le chemin
d'accés complet a un fichier),
* La page 3 est également libre ;
si vous y placez une routine en
assembleur, ProDOS pourra donc
l'écraser par le chargement d'une
autre routine.
*« Himem ($73-74) pointe vers
$9600. ProDOS en conclut que
les 4 pages suivantes ($96 a $99)
correspondent 4 son buffer de
brouillon général. Ces pages ne
doivent pas étre utilisées.
e Les pages suivantes sont
occupées (les pages $BA 4 $BD
servent de zones de travail au
Basic.System).
Notez que l'on obtient le message
"NO BUFFERS AVAILABLE" si
on tente de charger un fichier
directement sur une page
protégée. Or ProDOS gére
dynamiquement l'espace mémoire
de l'Apple pour s'allouer des
buffers de fichiers (a la différence
du DOS 3.3 qui, en fonction du
MAXFILES, se_ réservait
définitivement de l'espace).
Trouve-moi une
place ot! me loger
Observons la séquence a
Touverture d'un fichier :
« ProDOS abaisse Himem de
1Ko ($400 octets) et déplace les
variables chaines de caractéres de
l'Applesoft vers le bas (dépla-
cement physique des chaines et
mise a jour de leur pointeur) ;
¢ Son buffer brouillon débute
done maintenant en $9200, le
buffer du fichier ouvert est placé
$400 octets plus haut, en $9600
Gusqu'en $99TT).
Cette séquence est répétée pour
chaque nouveau fichier ouvert,
jusqu’a concurrence de 8 fichiers,
ce qui porte Himem 4 $7600.
Pour chaque fermeture, elle
s'exécute 4 nouveau mais en sens
inverse.
10
Pom's n° 22
Il n'est pas possible de placer nos
programmes assembleur juste en
dessous de $7600 (quelle perte de
place!), car ceux-ci seraient
écrasés sans pitié par les chaines
de caractéres de l'Applesoft
déplacées par ProDOS.
En revanche, une solution
beaucoup plus élégante existe : le
placer entre ProDOS ct ses
buffers.
Supposons que notre programme
soit assemblé de $94A6 jusqu'en
$95FF. En comptant en nombre
de pages, il en occupe donc 2. Si
nous le placons en $98A6, il
occupera donc l'espace jusqu'en
$99FF. Simultanément, abaissons
Himem de 2 pages en $9400.
Comme ProDOS détermine la
position de son buffer brouillon
en fonction de Himem, il en
concluera que celui-ci se situe en
$9400-$97FF. Par la suite, les
ouvertures de fichiers pourront
s'effectuer sans probléme vers le
bas.
Deux problémes restent a
résoudre:
* d'une part, notre programme
ne peut pas étre chargé
directement 4 son adresse
définitive car il serait alors chargé
dans son propre buffer, ce que
ProDOS refuse. I] faut donc
prévoir une petite routine qui le
charge 4 une adresse plus basse,
puis le reloge.
* d'autre part, son chargement
ne pourrait s'effectuer que si
aucun autre fichier n'est ouvert, et
les chaines de caractéres qu'aurait
pii créer un programme Applesoft
seront détruites. Heureusement,
une routine publique de ProDOS
permet - nous le verrons - de
gérer ce point.
Déplacement des
programmes
Résumons-nous: les petites
routines en assemblcur, celles qui
se logent sur la page 3 ou se
cachent dans un programme
basic, ne posent pas de problémes
majeurs.
En revanche, les _ gros
Programmes - donc les plus
difficiles 4 recréer soi-méme -, qui
se logent autour des buffers du
S 3.3 devront étre placés A une
autre adresse.
Malheureusement, quiconque a
observé un module en assembleur
sait que l'on ne peut pas
inpunément les déplacer a travers
la mémoire. Le résultat, quasi-
assuré, est un magnifique
plantage. Sculs, quelques
programmes sont écrits sous une
forme dite relogeable... mais ils
sont bien rares car ils nécessitent
soit des acrobaties de
programmation pour éliminer les
JMP, JSR et autres instructions a
adresse fixe, soit la nécessité
dutiliser un assembleur précis et
une routine spéciale de
chargement (l'EDASM et le
module RLOAD d'Apple par
exemple).
Tl est donc nécessaire, dans la trés
grande majorité des cas, de
réassembler soi-méme la routine
vers sa nouvelle adresse
d'iimplantation. Comme ProDOS
ne supporte que les allocations de
mémoire par frontiére de page, il
faut se simplifier la vie en fixant la
nouvelle adresse selon la
formule :
[nouvelle adresse] =
$9A00 — ({partie haute de I'adresse de
fin] + 1 — [partie haute de
Vadresse de début]) * $100
+ [partie basse de I'adresse de
début)
Ainsi, un programme situé en
$94A6-$9596 se loge en:
$9A00-($95-$94+1)*$100+SA6=$98A6
Notons que l'on pourrait
envisager de faire cohabiter
simultanément plusieurs
programmes assembleur sur des
pages contigués. Mais il faudrait
alors les réassembler aprés leur
chargement (puisque l'on ne peut
connaitre 4 l'avance leur adresse
finale d'implantation), ce qui sort
des limites de cet article.
Pour réassembler notre
programme, deux méthodes sont
alors possible :
1) La méthode dite "appel a
Murphy" qui consiste, lorsque
l'on ne dispose pas d'assembleur,
a reloger la routine 4 la main. Il
faut prendre en compte trois
aspects :
DEBUT SMP (VECTEUR1) ;
instruction 4 trols uclels :
modifier le dernier
VECTEURL DA ROUTINEL ;
table d'adresse ;
modifier le ler octet
ROUTINE] LDA #>DEBUT ;
valeur - dépendante d'une
adresse - a modifier
Comme I'indique son nom, cette
méthode, conduite sur de gros
modules, améne a coup sar a un
plantage. En désespoir de cause,
consultez la routine RELOCATE
de Pom's 1.
2) Plus raisonnablement, il faut
prendre un assembleur,
charger le fichier source, modifier
simplement (dans la plupart des
cas) la directive ORG qui fixe
l'adresse de début du module
objet, réassembler et sauver sur
disque. Vous n'avez pas
l'assembleur adéquat ? La plupart
des assembleurs permettent de
sauver les sources sous le format
des fichiers TEXT classiques ; de
plus Pom's a publié :
- les équivalences de directives
entre assembleurs (Pom's 9) ;
- une routine de conversion Big
Mac/Lisa 2.5 (Pom's 10).
Routine
d'initialisation
Vous avez donc sauvé sur disque
le nouveau module objet au
format ProDOS. II reste a réaliser
la routine de chargement ct
d'initialisation de ce module.
Nous avons pu déterminer plus
haut I'algorithme A utiliser :
1) Chargement a partir du disque
vers la zone mémoire pointée par
Lomem ($6D-6E) : ainsi nous
minimisons le risque d'écraser
des variables de I'Applesoft.
2) Appel de la routine GETBUFR
du Basic.System (version 1.1 et
suivantes) avec l'accumulateur en
Pom's n° 22
entrée contenant le nombre de
pages désirées. Si la retenue est &
1 en sortie : il n'y a pas de place
disponible et on arréte. Sinon, la
place demandée a été réservée et
Himem a été mis 4 jour par le
Basic.System (en corollaire, le
programme ne doit pas lui-méme
manipuler Himem: éliminez donc
toute référence aux adresses $73
et $74).
3) Recopie du module vers sa
destination finale.
4) Eventuellement, mise a jour de
la carte des pages RAM de
ProDOS afin que le programme
ne soit pas écrasé par
inadvertance.
5) Enfin, appel éventuel du
module (si celui-ci se lance
habituellement par BRUN).
Qui dit algorithme, dit
programme. Il s'appelle - bien
sir - DARWIN puisqu'il permet
de s'adapter 4 un nouvel
environnement...
Et maintenant la question a cent
sous : od va-t-on le placer?
Il n'y a guére de choix puisque la
plupart des emplacements
possibles ne peuvent étre
supposés disponibles : notre
programme d'initialisation devra
se loger entre Lomem et Himem.
En pratique nous allons assembler
simultanément DARWIN et le
programme & adapter, de maniére
a obtenir un unique module objet.
Méthode
d'utilisation
Afin d'illustrer la fagon d'utiliser
chainés avec laquelle un source
peut étre scindé en plusieurs
fichiers distincts. Nous utiliserons
en conséquence l'assembleur Big
Mac.
Premiére étape : le fichier
source est renommé
T.TRITABLEAU afin de pouvoir
étre lu par Big Mac. Par un
assemblage sous la version DOS
3.3, on remarque que le module
occupe normalement les adresses
$9AA6 a $9C3A. Profitons-en
pour corriger une erreur du source
TRITABLEAU publié dans
Pom's : les lignes 30 et 32
doivent étre interverties.
Deuxitme étape : La ligne 28
du source, qui contient la directive
OBJ, doit maintenant étre
supprimée : l'adresse de début
d'assemblage sera déterminée par
DARWIN. C'est la_ seule
modification nécessaire pour
TRITABLEAU. Le source est &
nouveau stocké sur disque sous
forme d'un fichier TEXT.
Troisitme étape : on charge
sous Big Mac le source
DARWIN:S ; la dermiére ligne
doit étre modifiée pour contenir le
nom du programme 4 adapter, en
loccurence TRITABLEAU.
Quatrigme étape: placer la
disquette contenant le fichier
T.TRITABLEAU dans le lecteur
courant. Demandons un
assemblage : aussit6t, l'utilisateur
doit indiquer la valeur des
variables DARWIN D_ et
DARWIN_F et VA_DEBUT ;
DARWIN _D représente l'adresse
de début sous DOS 3.3, en
l'occurence $9AA6. DARWIN F
est l'adresse de fin, donc $9C3A.
VA_DEBUT indique si l'on doit
ou non sauter au programme
aprés son chargement ; comme
TRITABLEAU est normalement
chargé par un BRUN sous DOS
Programme TRITABLEAU.DEMO
1 REM TRITABLEAU.DEMO A. Avrane
10 DE = CHR$ (4)
15 PRINT DS"BRUNTRITABLEAU,A"256 * ( PEEK (110)
+ 5): REM laisse au moins $400 octets libre
s
20 TEXT : HOME : PRINT D$"PR#3"
25 PRINT
os"
30 DIM A$(20),A(20)
35 INVERSE : PRINT
40 FOR I = 1 TO 20
50 FOR J=1 T0 12
60 AS(I) = AS$(I) +
70 NEXT :A(I) = I
80 GOSUB 900: NEXT
100
"Indice- Element":
CHR$ (65 + 25 *
"DEMONSTRATION DE TRI RAPIDE SOUS PROD
NORMAL
RND (1))
& T,0,A$(1),A$(20),A(1)
DARWIN, nous allons utiliseren 105 HTAB 20: VTAB 2: INVERSE : PRINT "Tri sur 1
exemple un des programmes de tri er octet": NORMAL
publiés par Pom's : 110 FOR I= 1 TO 20
TRITABLEAU (Pom's 11, p47). 120 HTAB 20: VTAB I + 2
P 140 GOSUB 900: NEXT
Uni premicr examen'du‘source 299 4 S,12,0,A$(1),AS(20),A(2)
indique que ce programme n'est 295 wrag 40: VTAB 2: INVERSE : PRINT "Tri sur d
pas dépendant de l'environnement
DOS 3.3 sous lequel il a été congu NORMAL
ernier octet":
a l'origine. Seule la présence de ae Sone hae Z we #2
TApplesolt ext nevesseine; 230 GOSUB 900: NEXT
L'assembleur du DOS Tool Kit, 240 END
utilisé 4 l'origine, ne supporte pas 900 PRINT RIGHTS ("0" + STR$ (A(I)),2)"- "A$(
la notion de fichiers source I): RETURN
Ne
12 Pom's n° 22
3.3, il faut donner Ia valeur 1 ; et
la valeur 0 pour un BLOAD. La
suite de l'assemblage charge en
overlay le source T.TRITA
BLEAU et assemble les deux
sources. Il ne reste plus qu'a
sauver sur disque ce module objet
sous le nom TRITABLEAU.
Cinquitme étape : modifier
Yappel 2 TRITABLEAU du
programme Applesoft qui
l'utilise. Le format d'appel
devient :
PRINT CHR$(4) "BRUN
TRITABLEAU, A" 256 *
(PEEK(110) + 5)
et charge le module dans une zone
libre, au dessus des variables
numériques de I'Applesoft et d'un
buffer de $400 octets utilisé par
GETBUFR.
Fonctionnement de
DARWIN
L'essentiel a déja été dit du
fonctionnement de DARWIN. On
peut cependant remarquer que
celui-ci est écrit sous Big Mac et
en utilise les directives KBD
(Saisie de la valeur d'une variable
par l'utilisateur) et PUT (lecture
d'un fichier source). Ces
directives sont transposables sans
difficultés pour Lisa, EDASM
ProDOS, etc.
La version actuelle suppose un
appel au programme relogé afin
de l'initialiser. Dans le cas
contraire, il suffit de placer un
RTS au lieu du JMP indirect final.
DARWIN est bien entendu
entigrement relogeable puisque
l'on ignore son adresse
d'implantation. Enfin, la carte des
pages mémoire protégées n'est
pas mise a jour : cela n'est
nécessaire que si l'on craint une
interaction avec d'autres
programmes assembleur.
A l'exécution, le message
PROGRAM TOO LARGE est
généré si le Basic.System utilisé
sous ProDOS est antérieur a la
version 1.1, s'il est impossible de
trouver suffisamment de place en
mémoire vive pour reloger le
programme, ou enfin si on tente
Sencar DARWIN sous DOS
Un petit programme de
démonstration montre les tris d'un
tableau de chaines de caractéres,
avec la clé en premiére ou demiére
position de chaque chaine.
Reportez-vous 4 Pom's 11 pour
les syntaxes d'appel a la routine.
La disquette Pom's contient les
fichiers suivants :
DARWIN.S
source en format Big Mac
T.DARWIN
source en format TEXT pour
conversion vers d'autres
assembleurs
T.TRITABLEAU
source en format TEXT
(appelé par l'assemblage de
DARWIN.S)
TRITABLEAU
module exécutable sous
ProDOS
TRITABLEAU.DEMO
programme Applesoft de
démonstration (en 80 co-
lonnes).
G
Programme DARWIN.S
(Assembleur BigMac)
NB : Ce programme figure sur la
disquene d'accompagnement également
sous format TEXT. Il est nommé
RAE RAERAERRA RRA RERARE RRA ERE
* DARWIN *
1
2
3
4
5 * Routine d'initialisation a ProDos
6 * d'un programme assembleur DOS 3.3
?
8
21 DARWINV2
DARWINV3
DARWINV4
DARWINVS
DARWINV6
DARWIN_A -
T.DARWIN DARWIN _L =
DARWIN_D/$100
DARWINV1-DAKWINVZ
$100*DARWINV2
DARWIN_D-DARWINV4
DARWINV3*$100-DARWLNVS
$9A00-DARWINV6 ;ad début ProDOs
DARWIN _F-DVAKWIN D+1 ; 1g ProDOS
DARWIN_A-73 ;DARWIN ~ 72 octets
35 LDA $RBFFD_ IVERSION
* (C) 1985 Alexandre Avrane 36 BEQ DARWIN10 Basic.System 1.0
9 * Moditié: 24/11/85 37 LDA #0-DARWIN_A/$100+$9B
10 * Créé: 16/11/85 38 JSR $BEFS GETBUFR
1 39 BCC DARWINI1
12 * Ce source est assemblé en conjonction 40 DARWINIO LDA #14 PROGRAM TOO LARGE
13 * avec le programme a adapter ProDOSs 41 JMP $BEO9
14 42 DARWIN11 = *
15 DARWIN _D KBD adr début DOS 3.3 43
16 DARWIN_F KBD adr fin DOS 3.3 44 * ememeneennsasenn---~-----~ ~~~ =e
17 VA_DEBUT KBD saute en début de
pgm aprés
chargement? DARWIN20
18 48 TSX
19 * Calcul des adresses sous ProDOS 49 DEX
20 DARWINV1 - DARWIN _F/$100+1 50 cLe
Pom's n° 22 13
51 LDA $100,X recherch sur la pile
52 ADC #DARWIN99-DARWINZ20-2 ;adresse d
ébut routine
53 STA $3C al
54 LDA $101,X
55 ADC #0
56 STA $3C+1
57 LDA $3C adresse de fin
58 ADC #<DARWIN_L
59 STA $3E 22
60 LDA $3C+1
61 ADC #>DARWIN_L
62 STA $3E+1
63 LDA #<DARWIN_A adresse d‘arrivée
64 STA $42 Af
65 PHA
66 LDA #>DARWIN A
67 STA $4241
6e PHA
69 Loy #0
70 JSR $FE2C déplace le bloc
par MOVE
2
72 * aenwnnnmnennnnnnnnnnnnsnn-nn=
73 * 3 ~ Appel du module et sortie
m4* eee ennneneennnaa=
75 PLA
76 STA $42+1
7 PLA
78 STA $42
79 DO -VA_DEBUT
80 UMP ($42) saute en début de
programme
1 ELSE
82 RTS ++.0u retour a
1'Applesoft
83 NOP
a4 NOP
85 FIN
86 DARWINS9 = = *
87 * Inclut le source du programme a adapter
(format TEXT)
88 PUT TRITABLEAU
89 END
Programme T.TRITABLEAU
(Assembleur BigMac)
NB : Sauvegarder ce source sous format TEXT (Voir texte)
1 FLAG EQU $6 * Flag réel.entler
2 IND EOU $9 * Indice du tri
3 BCART BQU $7 * Ecart entre
articles
4 ECO EOQU $8 * Ecart indice 0
et tri
5 START QU $19 * Pointeur ler
élément du tri
6 FIN EQU $1B * Pointeur dernier
élément
7 ARTI FOU SFA *Pointeur temporaire
8 ART2 EQU $FC *Pointeur temporaire
9 CHAZ EQU $FE *pointeur temporaire
10 MOVE FQU SIF
*Pointeur temporaire
11 CSTART QU $EO *Pointeur ler
élément COtableauv
12 CARTI EQU $E2 * Pointeur COtableau
13 CART2 EQU $E4 * Pointeur COtableau
‘14 TECART EQu $1D * Ecart ler tableau
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
al
a2
a3
TECO EQU $E6 * Ecart élément ler
tableau
CECART EQU $E7 * Ecart COtableau
PARTIEL EQU $E8@
SARA EQU $9B * Pointeur du
tableau
CHRGET EQU $B1
CHRGOT EQU $B7
FRMNUM QU $DD67 * Evalue dans FAC
CHKCOM EQU $DEBE * Teste ',*
MOVFM EQU SEAF9 * Transfert M vers
sousT EQU $EBB2 * FAC - ARG
GETADR EQU $E752 * Rend entier FAC
PTRGET EQU SDFE3
* ORG $9AAG indiqué 42 l'assemblage de DARWIN
*
Initialisation AMPERSAND.
LDA #<ST
STA $3F7
LDA #>ST
STA $3F6
RTS
Début du programme
sT CMP wee
BEQ
CMP
BEQ
#854
#953
SORT
$DEC9
CHRGET
CHKCOM
FRMNUM
GETADR
Ist
* SYNTAX ERROR
SORT JSR
JSR
USR
JSR
DEY
DEY
STY PARTIEL
TRI LDA
STA
JSR
Ts JSR
JSR
JSR
sTY
JSR
JSR
STA
STA
sTY
sty
JSR
JSR
STA
STY
USR
4SFF
PARTIEL
CHRGET
CHKCOM
FRMNUM
CETADR
IND
CHKCOM
PTRGET
START
ART1
START+1
ARTI1+1
CHKCOM
PTRCET
FIN
FIN+1
CALCUL
* Rend FAC entier
* Indice du tri
* Initialise
pointeurs
ECO
TECO
ECART
TECART
PLAG
CHRGOT
#$2¢
DEBUT
CHRGET
PTRGET
CSTART
CART1
CSTART+1
CARTI+1
CALCUL
ECART
CECART
Ga CElan—---
STA
LDA
STA
STX
JSR
CMP * COTABLEAU ?
* Non
JSR
JSR
STA
STA
STY
STY
JSR
LDA
STA
& eererst ‘Début
Pom's n° 22
Recommence a l'article 1
#0
IND * Plag d'échange
* Calcul adresse
2éme article
TECART
ART1
ART2
ART1+1
ART2+1
* Calcul adresse
CECART
CART
CARTZ
#0
CART1+1
CART2+1
FLAG
#5
REEL
* Réel ?
* Oui
#2 * Entier ?
ENTIER * OUT
(ART1),Y
MOVE+1
(ART2),¥
CHA2+1
(ART1),¥
MOVE
(ART2),¥
CHA2
PARTIEL
(CHA2), ¥
(MOVE) , ¥
DEPL
RIEN
#15
COMP
RIEN
* CHA2 < CHAl
* CHA2 > CHA1
* Profondeur du tri
(ART?) ,Y
(ART1),¥
(ART2),Y
(ART1),¥
RIEN
DEPL
* ARTZ = ou > ARTI
* ART? < ARTI
CSTART
CART1
CSTART+1
CART1+1
START
ARTI
START+1
ART1+1
DEBUT
* ler article
* ler article
“Article suivant------
84 DEBUT =-LDA
as STA
86 SUIVANT CLC
a7 LDA
88 ADC
a9 STA
90 LDA
91 ADC
92 STA
93 cic
2éme article
94 LDA
95 apc
96 STA
97 LDA
98 ADC
99 STA
100 LDA
101 CMP
102 BEQ
103 TAY
104 DEY
105 CMP
106 BEQ
107 LDA
108 STA
109 LDA
110 STA
211 DEY
112 LDA
113 STA
114 LDA
115 STA
116 LDY
117 COMP INY
118 LDA
119 CMP
120 BCC
121 BNE
122 cpY
123 RCC
124 BCs
125 ENTIER SEC
126 LDA
127 SBC
128 DEY
129 LDA
130 SBC
131 BPL
132 BMI
133 *
134 BOUCLE LDA
135 STA
136 LDA
137 STA
138 LDA
139 STA
140 LDA
141 STA
142 BNE
143
144 SUITE LDA
145 STA
146 LDA
147 STA
148 LDA
149 STA
de fin du tri
CART2
CARTL
CART2+1
CART1+1
ARIZ
ARTI
ART2+1
ART1+1
SUIVANT
* Article suivant
* article suivant
ART2
155
156
157
158
159
160
161
162
163
164
165
166 JSR
167 LDA
168 iby
169 JSR
170 BPL
a7} * =
172 DEPL SEC
173 LDA
174 SBC
175 STA
176 LDA
177 SBC
178 STA
179 SEC
180 LDA
181 SBC
182 STA
RIEN
-~-Déplacement des pointeurs——
ARTL
TECO
ART1
ART1+1
#0
ART1+1
ART2
TECO
* ARTZ dans FAC
* ART2 - ART1
* ART2 = ou > ARTI
* Calcul élément 0
de ART1
* Calcul élément 0
de ARTZ
Thierry Haurie
Pom’s vous propose
“Dominos”
Apple ][+, //e, lc
Tlest inutile de présenté le jeu de dominos; celui-ci bénéficie d'un
graphisme trés soigné (en couleur si vous disposez d'une carte
"Chat Mauve") et les messages transmis par le programme sont,
au choix, en Francais, en Italien, en Allemand ou en Anglais.
Pom's n° 22
60007 POKE 33,32: POKE 32,4: PRIN
T "PAGES MEMOIRE PROTEGEES (
PRODOS)": PRINT “sur 192 pag
183 LDA ART2+1 215 BPL DIMI * Oui
184 sBc #0 216 LDx #$2
185 STA MOVEt1 217 DIM1 Loy #$4 * Dimension ?
186 LDY TECART 218 LDA (SARA),Y
187 DEY 219 CMP #$1 * Une seule ?
168 STA IND * Pusitionne flag 220 BEQ Dl * Oui
189 SWAP LDA (ART1),Y 221 LDY #58
190 PHA 222 LDA (SARA), Y * Taille lére
191 LDA (MOVE),Y dimension
192 STA (ART1),¥ * échange 2 dans 1 223 D1 TAY
193 PLA 224 LDA #0
194 STA (MOVE),Y * échange 1 dans 2 225 STA ECART
195 DEY 226 STA ECO
196 BPL SWAP 227 STA CECART
197 LDY CECART 226 cLe * Calcul écart entre
198 BEQ RIEN articles
199 DEY 229 D2 TXA 38 6 Dak
200 SWAP1 LDA (CAKT1),¥ 230 ADC ECART
201 PHA 231 STA ECART
202 LDA (CART2),¥ 232 DEY
203 STA (CART1),Y * échange 2 dans 1 233 BNE D2
204 PLA 234 ZDY IND
205 STA (CART2),Y * échange 1 dans 2 235 BEQ D4
206 DEY 236 cLe * écart élément 0 et
207 BPL SWAP1 tri
208 BMI RIEN 237 D2 TXA OS so Bad
209 * sseee=e ‘Sous programme recherche pointeurs 238 ADC ECO
210 CALCUL LDX #$3 239 STA ECO
211 BIT $11 * Chaine ? 240 DEY
212 BMI DIML * Oul 241 BNE D3
213 LDX #85 242 D4 RTS
214 BIT $81 * Réel ?
Programme 456789ABCDEF"
RAM.BITMAP 60010 FOR I= 0 T0 23:X = PEEK (
fe Y + I): REM LES 24 OCTETS D
E LA BIT-MAP
60005 TEXT : HOME :Y¥ = 48984: REM 60020 FOR J = 1 TO 8: REM LES 8 B
$BF58: BITMAP ITS DE CHAQUE OCTET
60006 P = O:L = 0: VTAB 9: HTAB 1: 60030 IF X > = 128 THEN X = 2 *
AS = "0020406080A0 FOR: 7. = X= 256:P = P + Ls. PRINT “PP
1 T0 11 STEP 2: PRINT "$"M 72 GOTO 60050: REM CAS BIT=1
ID$ (A$,I,2): NEXT : VTAB 1 60040 X = X * 2:L = L + 1: PRINT "
.";: REM CAS BIT=0
60050 NEXT J: NEXT I: POKE 33,40:
POKE 32,0: PRINT
es (48K de $00 a $BF)": PRIN 60055 PRINT "P = protégée ; au to
T : PRINT SPC( 16)"11111111 tal. ¢<"Ps PRINT = libre
111111110123456789ABCDEF0123 ¢ au total: " PRINT
4082- £3 DF AS 19 85 FA 4 1A 4130- 94 AS E4 85 £2 AS ES AS
Récapitulation 4090- 84 FB 20 BE DE 20 £3 DF 4138- £3 AS FC 85 FA AS FD 85
TRITABLEAU 4098- 85 1B 84 1c 20 01 99 AS 4140- FB DO 86 AS FC C5 1B DO
40A0- 08 85 E6 AS 07 85 Iv 86 4148- £8 AS FD C5 1C VO £2 AS
4000- AD FD BF FO 07 a9 03 20 40A8- 06 20 B7 00 C9 2c DO 15 4150- 09 DO CC 60 AS FC A4 FD
4008- FS BE 50 OS Ab UB 4c 08 40R0- 20 RI 00 20 F3 DF 85 EO 4158- 20 F9 EA AS FA Ad FB 20
4010- BE 20 58 FF BA CA 18 BD 40B8- 85 £2 84 El 84 £3 20 01 4160- B2 EB 10 DF 38 AS FA £5
4018- 00 01 69 36 85 3C BD 01 40C0- 99 AS 07 85 E7 a9 00 85 4168- E6 85 FA AS FB E9 00 85
4020- 01 €9 00 85 3D AS 3C 69 40C8- 09 18 AS 1D 6> FA 85 FC 4170- FB 38 AS FC ES E6 85 IE
4028- 95 85 3E AS 3D 69 01 85 40D0- a9 00 65 FB 85 FD 18 AS 4178- AS FD E9 00 85 IF Ad 1D
4030— SFA AG 85-4248: 09.97 40D8- £7 65 E2 85 E4 Ag 00 65 4180- 88 85 09 Bl FA 48 Bl 1E
4038- 85 43 48 AO 00 20 2C FE 40E0- £3 85 E5 AS 06 C9 05 FO 4188- 91 FA 62 91 1F AR 10 F3
4040- 68 85 43 68 85 42 6C 42 40E8- 6B AB 88 C9 02 FO 22 Bl 4190- Ad E7 FO AF 98 B1 £2 48
4048- 00 a9 B1 8D F6 03 A9 97 40F0- FA 85 1F Bl FC 85 FF 88 4196- B1 £4 91 £2 68 91 £4 66
4050- 8D F7 03 60 C9 54 FO 1A 40F8- B1 FA 85 1E Bl FC 85 FE 41A0- 10 FS 30 9F AZ 03 24 11
4056= C9 53 FO 03 4¢ C9 DE 20 4100- Ad £8 C8 Bl FE D1 1E 90 41A8- 30 08 A2 05 24 81 10 02
4060= Bi 00°20 BE DE 20 67 DD 4108- 5B DO 38 CO OF 90 F3 BO 4180- A? 02 AO 04 BI 9B C9 O1
4068- 20 52 £7 88 86 84 £8 4C 4110- 32 38 BI FC Fl FA 88 Bl 41B8- FO 04 AO 08 B1 9B Ag AD
4070 D6 97 A9 FF 85 E@ 20 BI 4118- FC F1 FA 10 26 30 45 AS 41CO- 00 85 07 85 08 85 E7 18
4078 00 20 BE DE 20 67 DD 20 4120- £0 85 E2 AS El 85 £3 AD 41C8- BA 6> U7 B5 07 BB DO FB
4080- 52 E? 64 09 20 BE DE 20 4128- 19 85 FA AS 1A 85 FB DO 41D0- Ad 09 FO 09 18 8A 65 08
41D8- 85 08 88 DO FA 60
16 Pom's n° 22
e programme proposé
ici est écrit en langage
machine pour des
L raisons évidentes de
rapidité et de facilité d'emploi. Il
occupe trés peu de place en
mémoire (moins de 3 pages) et il
se charge avec RENUMBER car
il utilise aussi l'ampersand et
parce qu'ils semblent faire la
paire !
Bien entendu, ce programme tient
compte de tous les GOTO,
GOSUB, ONERR GOTO et
autres IF... THEN. Il en profile
au passage pour supprimer les
REMs, et raccourcir les noms des
variables mais il ne raccourcit
aucune instruction &,
CALL ou DATA : en
donne un résultat différent du
premier ; en effet la longueur
"utile" des lignes est déterminee
avant de raccourcir les variables.
Ceci peut se produire si les noms
des variables sont trés longs.
Un autre détail involontaire, il ne
touche pas a une éventuelle ligne
65535, j'ai préféré laisser faire.
Utilisation
Pour le charger, faire
"BRUN COMP+RENUM".
Il se place en $8B00, il descend
HIMEM et vectorise l'amper-
sand.
Pour compacter, faire simple-
ment : "&COMPACTE".
(e
Sylvie Gallet
Fonctionnement
Il commence par faire un tableau
de toutes les lignes appelees par
GOTO, GOSUB et IF...THEN
GOTO. Il procéde ensuite au
compactage des lignes aprés avoir
exploré chaque ligne pour savoir
si elle contient un IF, si elle est
adressée par GOTO, et ses
acolytes, et pour connaitre sa
longueur "utile" (c'est-a-dire sans
les REMs).
Il termine en mettant a jour le
pointeur de fin de programme.
Il faut noter que dans le cas od le
programme n'est pas chargé
comme a l'accoutumée en $801
(2049), le fonctionnement du
compacteur n'est pas
perturbé.
effet, la syntaxe de ces
instructions est elle-
méme trés variable !
Comment faire ?
Remarque : Il a fallu
faire une petite rustine a
Les lignes ainsi obtenues
peuvent contenir jusqu'a
$F8 (248) caractéres ou
tokens ce qui déplait
fortement 4 RENUM-
BER et 4 P.L.E. Sur la
plupart des programmes
que j'ai compactés, j'ai
noté un gain de place
denyiron 10 4 15 %
avec des résultats
spectaculaires sur des
programmes trés docu-
mentés (Gescompte...)
Pour utiliser le compacteur, il suffi de faire:
"BRUN COMP+RENUM"
puis pour compacter :
&COMPACTE
Pour obtenir le fichier COMP+RENUM, vous
devrez suivre les étapes suivantes :
+ Si vous n'avez pas la disquette Pom's, saisir
sous moniteur la récapitulation COMP, puis la
sauvegarder (BSAVE COMP,A$8B00,L$2FF).
Exécuter le programme FAIT EXEC : celui-ci
crée un fichier EXEC qui va récupérer la partic
binaire du programme RENUMBER de la
disquette Maitre DOS 3.3.
Si une ligne ne contenant
qu'une REM est adressée
par un GOTO, GO-
SUB,... il conserve
ligne avec seulement un
"2" Tl est possible qu'un
deuxiéme compactage
Faites alors EXEC CREE COMP+RENUM.
* On vous demande successivement de metire
la disquette Maitre contenant RENUMBER,
puis la disquette contenant le fichier COMP, et
enfin la disquette qui recevra le fichier final
COMP+RENUM.
CHRGET pour qu'elle
ne saute pas d'office tous
les $20 qu'elle rencontre,
$20 se trouvant aussi
bien dans les adresses de
lignes que dans les
numéros de lignes.
Le lecteur pourra
certainement apportcr les
petites modifications
nécessaires pour obtenir
un programme encore
plus court : lorsque la
ligne adressée par un
GOTO ou un GOSUB ne
comprend qu'une REM,
pourquoi ne pas se
brancher sur la ligne
suivante par exemple ?
e;
Pom's n° 22
17
Programme Un exemple
FAIT EXEC Le programme ‘Agenda’, publié page 8 de ce numéro.
AVANT : 1311 octets APRES : 858 octets
(Gain 34 %)
10 TEXT : HOME : SPEED- 255:D$ = CH
RS (4)
100 VTAB 12: PRINT " CREATION DU FI 10 HOME: ONERR GOTO 570
CHIER CREE COMP+RENUM" 100 PRINT“ COMPOSITION AUTOMATIQUE DE": PRINT *
120 NOM$ = "CREE COMP+RENUM": PRINT D NUMERO TELEPHONIQUE™: PRINT CHAS (4);"BLOA
$"OPEN"NOM$: PRINT DS$"WRITE"NOMS 449 y 0(OMPOSEUR®: DIM 7811002)
130 PRINT "TEXT:HOME:SPEED=255" 150 N= N+ 1: FOR J = 1 TO2: READ T$(N,J): NEXT J: GOTO
140 PRINT "PRINT"; CHR$ (34) ;"INSERE 150
2 LA DISQUETTE CONTENANT RENUMBER 200 VTAB (8): PRINT "Utilisez les flaches ";: INVERSE : PRINT *
"; CHRS (34);":PRINT"; CHRS (34); =>"): NORMAL : PRINT " et *;: INVERSE : PRINT "<=": NOR
"PUIS PRESSEZ UNE TOUCHE"; CHR$ ( MAL 2 PRINT "pour sélectionner le nom Ge labonné * PRINT
34);": WAIT -16384,128:POKE -1636 ees geo 'Validez avec la touche RETURN":| = 0
87,0" “260 A% = ASC (A$): IF A% < > 13 AND A% < > 21 AND A%
160 PRINT "LOAD RENUMBER" < > 8 THEN 260
164 PRINT "POKE 2968,96: POKE 2792,1 280 IF A% = 13 THEN 360
69:POKE 2793,200:POKE 2800,169:PO 290 IFA%-21 THENI=1+1
KE 2801,10:CALL 2791" 300 IF A% = 8 THEN|=1-1
165 REM SORTIE DE RENUMBER 310 IF >N-1 THENI=-N-1
320 IFl<1THENI-1
PAR RTS AU LIEU DE JMP $D64B (EN 339 vag 15: CALL - 868: PRINT TS(I,1),T8{I,2): GOTO 250
$B98) 360 X$ = T$(I,2): POKE 49241,0: FOR | = 1 TO 700: NEXT I: HO
167 REM MODIF DE RENUMBER ‘ME : PRINT : PRINT “Je compose le numéro *;: FOR | = 1
168 REM $AFO:LDA $7A REMPLACE TO LEN (X$):A = ASC ( MID$ (XS,1,1)) + 128: POKE 7,A:
PAR LDA #$0A ET SAE8:LDA $79 REM CALL 768: PRINT CHRS (A):: FOR T = 1 TO 600: NEXT T
PLACE PAR LDA #$C8 = NEXT I: HTAB 1: VTAB 5: PRINT "Décrochez le combiné,
170 ‘Biter Woeniy ‘cine (34); nrasens alge He PN a OR
& XA DISQUETTS CONSERANY CONE"? secondes*: NEXT |: POKE 49240,0: GOTO 580
HRS (34);":PRINT"; CHRS (34);"PUI 570 IF PEEK (222) = 42 THEN 200
S PRESSEZ UNE TOUCHE"; CHR$ (34); 580 HOME : RESTORE : PRINT *...Pret pour un autre appol ...":
"; WAIT -16384,128:POKE-16368,0" GOTO 140: DATA RENSEIGNEMENTS,3612: DATA AUTRES
190 PRINT "BRUN COMP" RENSEIGNEMENTS,3611: DATA JULIETTE, 12345678
195 PRINT "PRINT"; CHRS (34); "INSERE
Z LA DISQUETTE QUI CONTIENDRA
COMP+RENUM"; CHRS (34);":PRINT"; NDLR : Une ligne telle que la n° 360 de ce programme
CHR$ (34);"PUIS PRESSEZ UNE TOUC compacté ne manquera pas de vous poser des problémes si
HE"; CHRS (34);": WAIT -16384,128 vous voulez la modifier maintenant. Pour cette raison, il est
:POKE-16368,0" sage de ne pas se séparer du programme original.
235 PRINT "BSAVECOMP+RENUM,A$S8B00,L$ — Si vous avez malencontreusement perdu votre version non
Boo" compactée, vous utiliserez avec intérét le DECRUNCHER
240 PRINT D$"CLOSE"NOM$ de Patrice Neveu que nous publierons prochainement.
. * 8B58- FF AO 00 A9 EA 85 CO 85 @BEO- 4F 47 52 41 4D 4D 45 20
Récapitulation 9B60- Cl 20 B? 00 20 B1 00 c9 9BE8- 15 4E 20 4D 45 4D 4F 49
8B68- 00 DO OC A9 FF AO 00 91 8BFO- 52 45 20 2A ZA OD Ob 00
COMP 8870- FE C8 91 FE 4C F8 8B 20 9BF9- AS 68 85 BO 85 EF AS 67
8B78- B1 00 20 Bl 00 20 B1 00 8CO0- DO 02 C6 BY 18 69 FF 85
8B80- C9 00 DO 06 20 B1 00 4c 8C08- BE DO 02 Cé EF 18 69 FF
8B00- AQ 4C BD F5 03 AG 14 BD 8B88- 5B 8B C9 AB FO OF C9 BO 8C10- 85 EE A9 00 85 EB A9 03
@B08- F6 03 85 73 AS 8B aD F7 8B90- FO OB C9 C4 DO E7 20 Bl 8C18- 85 EC 85 19 85 18 20 De
8B10- 03 85 74 60 C9 43 FO 03 8B98- 00 BO E5 90 03 20 Bl 00 8C20- 8C 20 B1 00 85 1D 20 B1
8B18- 4C 00 8E AO 00 CO 07 BO 8BAO- 20 0C DA 48 AS 50 AO 00 8C28- 00 85 1E 20 12 aD 20 49
8R20- OR 20 RI 00 N9 34 BR DO 8BA8- 91 FE E6 FE DO 02 £6 FF 8C30- 8D AS 19 DO 41 AS 1C DO
8B28- 08 C8 DO Fi 20 B1 00 FO @BBO- AS 51 91 FE E6 FE DO 02 8C38- 3D AS 1A FO 70 AS 18 FO
8B30- 0A 4C C9 DE 4F 4D 50 41 @BBa- F6 FF 68 C9 2C FO DFE NO 8C40- 4F C9 F8@ BO 31 18 65 1A
8B38- 43 54 45 AS°67 85 Be AS 8BCO- BF AO 00 B9 Dl 8B FO 06 8C48- BO 04 C9 F8 90 35 AS 1D
8B40- 68 85 B9 AO 01 Bl 67 DO BBCR- 20 5C DB C8 DO FS 4c B3 8C50- DO 24 AQ F@ 38 E5 18 85
8B48- 03 4C Cl 8B AS AF 18 69 8BDO- FE OD OD 2A 2A 20 07 50 8C58- F9 20 69 8D AS FC FO 16
8B50- 05 85 FE AS BO 69 00 85 BBDB- 41 53 20 44 45 20 50 52 8C60- A2 00 86 06 86 07 A 3A
18 Pom's n° 22
— le eee
47 RENUMBER EQU $8E00
Programme COMPACTEUR decries ae
(Assembleur Lisa 2.5) 49 ovTD0 EQ $DBSC
507
dep 51s
2 teeteedaenene reat anes 52 ORG $8800
3 53 OBy $B00
4.* COMPACTE UN * 542
5 * PROGRAMME BASIC * oak
6 * ET SUPPRIME LES * 56%
74 REMARQUES . 57 LDA 4$4C
8 * S.GALLET 24-8-85 * 38 STA AMPER
? 9+ + 59 LDA #TEST
10 *eeKeneenenneneerren® 60 STA AMPER+1
ul: 61 STA HIMEM
12 CHRGET PZ $B1 62 LDA /TEST
13 CHRGOT EPZ $B7 63 STA AMPER'2
14 TXTTAB EPZ $67 64 STA HIMEM+1
15 TXTPTR EPZ $B8 65 RTS.
16 TEMP EPZ $FD 67
17 TABLEAU EPZ $FE 67 TEST:
18 GOTO EPZ $AB es CMPREICE
19 GOSUB -EPZ $B0 is BBQ: 71
20 THEN EPZ $C4 70 IMP RENUMBER
21 CAR.ECR EPZ $EE ce ta? iby #$0
224 EPZ SF9 7202 cey #87
23 DEUXPT PZ $FC 73 BCS >3
24 Ls EPZ SEB 74 JSR CHRGET
25 ICLONG PZ $18 75 CMP COMMANDE, ¥
26 LCIF EPZ $19 76 BNE >4
27 LSLONG EPZ $1A 7 INY
28 LSIF EPZ $1B 78 BNE <2
29 LSGOTO EPZ $1C 79°*3 JSR CHRGET
30 NUM.B = -EPZ $1D 80 BEQ INIT
31 .NUM.H © EPZ $1E 81 *4 IMP STXERR
32 IF EPZ $aD 82 COMMANDE ASC ‘OMPACTE'
33 REM EPZ SB2 837
34 AMPRS EPZ $AF *TOKEN DE & 84 INIT:
35 CALL EPZ $8C 85 LDA TXTTAB
36 DATA EPZ $83 86 STA TXTPTR
37 PRGEND EPZ $AF 87 LDA TXTTAB+1
38 MAX EPZ $F8 88 STA TXIPTR+1
39 ONERR —-EPZ $A5 ag TIDY #$1
40 LINNUM EPZ $50 90 LDA (TXTTAB),¥
41 HIMEM =~ EPZ $73 91 BNE >0
42 TEMP1 —-BP2 $06 92 IMP PASPROG
43 TEMP2 — EPZ $07 93 70 LDA PRGEND
44 AMPER == EQU $03F5 94 cic
45 DASIC —BQU $FED3 95 ADC #85
46 LINGET EQU $DAOC 96 STA TABLEAU
8C68- 20 97 8D E6 18 C6 1A 20 @CFO- AS EE 85 AF AS EF 85 BO 8D78- C9 22 DO 09 AS FD 49 01
8C70- Bl 00 C6 FC DO F2 20 B7 8CF8- A9 FO 85 CO A9 EF 85 Cl 8D80- 85 FD 4C @F 8D C9 3A DO
8C78- 8C 20 04 8D AO 00 85 18 @D00- 4C B3 FE 60 20 F2 8D AS 8D88- 06 AS FD DO 02 84 FC C8
8C80- 4C 90 8C AO 00 AS 3A DI 8D08- 1D 20 F2 6D AS 1E 20 F2 8D90- C4 F9 90 EO FO DE 60 a5
8CRR- EE FO 05 20 F? aD F618 8D10- 8M 60 AS AF 18 69 04 85 8D98- FD C9 83 FO 08 C9 AF FO
8C90- A5 1B 45 19 A2 00 86 06 8D18- FE AS BO 69 00-85 FF AO 8DAO- 04 C9 8C DO 07 AS O1 85
8C98- 86 07 20 B1 00 C9 00 FO 8D20- 00 20 40 8D C5 1D FO OC ADAR- 07 4C ED 8D C9 22 DO 09
@CAO- 13 C9 B2 FO 08 20 97 aD 8Dz8- 20 40 8D C9 FF DO F2 Ag 8DBO- AS 06 49 01 85 06 4c ED
BCAB- E6 18 4C 9A BC 20 B1 00 8D30- 00 85 1C 60 20 40 aD C5 @DBB- 8D AS 06 DO 30 AS FD C9
8CBO- C9 00 DO F9 4c 1E &C AS 8D38- 1E DO FO A9 01 85 IC 60 8DCO- 3A DO 07 A9 00 85 07 4C
BCB@- 18 DO 05 AQ 3A 20 F2 aD 8D40- E6 FE DO 02 E6 FF BI FE aDC@- ED 8D AS 07 DO 1F AS FD
8CCO- A9 00 20 F2 8D 20 F2 8D 8D48- 60 AO 00 84 1B 84 1A C8 8DD0- C9 30 90 19 C9 5B BO 15
8CC8- AS EE 91 EB C8 AS EF 91 8D50- Bl B8 FO 11 C9 B2 FO OD @DD8- C9 3A BO 06 £0 00 FO OD
8CDO- EB 8&5 EC A> EE 85 EB 60 8DD8- CY AD FU 04 C9 AS VO 02 8DE0- DO 04 C9 41 90 07 EO 02
8CD8- 20 B1 00 20 B1 00 C9 00 8D60- 84 1B C8 DO EB 88 84 1A @DE8- 90 0S C6 18 60 A2 FF EB
8CEO- DO 21 20 B7 &C AJ 00 20 8D68- 60 AO OO 84 FD 44 FC C8 8DFO- AS FD AO 00 E6 EE DO 02
8CE8- F2 8D 20 F2 8D 20 F2 aD 8D70- C4 F9 BO 22 Bl B8 FO 1E 8DF8- E6 EF 91 EE 60 CA CD
J
Pom's n° 22 19
a
98
99
100
101
102
103
104
105
106
107
108
109
110
11
112
113
114
115
116
117
118
119
120
121
122
125
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
14a
145
146
147
148
149
150
151
152
153
154
155
196
157
158
159
160
161
162
163
164
165
166
167
LWA PRGEND+1
ADC #50
STA TABLEAU+1
LDY #50
ZOREE UN TABLEAU DE TOUS LES NUMEROS DE LIGNES
ADRESSES
2PAR GOTO, GOSUR ET THEN
DEBUT:
#SEA
$co
STA $C1
CHRGOT
CHRGET
cM 480
BNE >0
4SFF
LDy #50
(TABLEAU) , ¥
ZUNE PETITE RUSTINE
7SUR CHRGET
(TABLEAU), ¥
UMP COMPACTE
*0 JSR CHRGET
JSR CHRGET
ISR CHRGET
CMP #50
BNE >4
JSR CHRGET
UMP DEBUT
“4 CMP #GOTO
BEQ >5
CMP #GOSUB
BEQ >5
#THEN
BNE <1
TSR CHRGRT
BCS <2
BCC >6
“5 JSR CHRGET
6 JSR LINGET
PHA
LDA LINNUM
Lby #50
(TARLEAD) , ¥
INC TABLEAU
BNE >7
INC TARLFAU+1
a7, LDA LINNUM+1
(TABLEAU) , ¥
INC TABLEAU
BNE >8
INC TABLEAU+1
78 PLA
ro
RRQ <5
BNE <2
PASPROG LDY #$0
“0 LDA MSG, Y
BEQ >1
JSR OUTDO
BNE <0
a4 UMP BASIC
MSG HEX 0D0D
HEX 07
"PAS DE PROGRAMME EN MEMOIRE **!
HEX ODOD00
16@
169 ;
170
171
172
173
174
175
176
177
178
179
180
181:
182
183
184
jas
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
COMPACTE:
ZLCLONG ET LCIF CONCERNENT LA LIGNE
2 EN COURS D'ECRITURE
sLSLONG, LSGOTO ET LSIF CONCERNENT
A LA LIGNE SUIVANTE
7AU DEPART,
;EST IMPLANTE EN $801:
: — CHRGET ~ $800
e - CAK.ECR = S7FF
TXTTAB+1
STA TXTPTR+T
STA CAR.ECR+1
TXTTAB
BNE >0
DEC TXTPTR+1
ADC #SFF
TXTPTR
BNE >1
DEC CAR.ECRt1
ADC #SFF
STA CAR.ECR
#50
STA LS
#503
STA LS+1
STA LCIF
LCLONG
“0 JSR LITADR
JSR CHRGET
STA NUM.B
JSR CHRGET
STA NUM.H
JSR GOTO?
USK LONG. IF
LDA LCIF
BNE >3
LSGOTO
BNE >3
LSLONG
BEQ >7
LDA LCLONG
BEQ >5
#LMAX
BCS >3
cLe
ADC LSLONG
BCS >1
#LMAX
BCC >4
RLICETLS
SI LE PROGRAMME BASIC
#$I LCIF<>0 OU SI
FLSGOLO<>0, IL NE
:FAUT PAS "COLLER™
#LES 2 LIGNES
#SI LSLONG = 0 ->
#RIEN A RECOPIER
75I LCLONG = 0 ->
7ON COPIE LS TELLE
OURTLLE
#SI LCLONG >= LMAX
#SON COMPTE EST BON
7SI LCLONGILSLONG <
#LMAX ON PEUT COLLE
;ICI, ON DOIT SE CONTENTER DE COLLBR UN MORCEAU
:DE LS AU BOUT DE LC, A CONDITION QUE LS NE
;CONTIENNE PAS DE IF (NI ONERR GOTO) ET QU'TI. ¥
ZAIT UN ":" SEPAKATEUR D ‘INSTRUCTIONS.
20
Pom's n° 22
237 1 LDA
238 BNE
239 LDA
240 SEC
241 SBC
242 STA
243 JSR
2448 LDA
245 BEQ
246 IDX
247 STxX
248 SIX
249 LDA
250 *2 JSR
251 INC
252 DEC
253 JSR
254 DEC
255 BNE
2567
257 ; ENTREE ICI
LSIF
23
#LMAX
LCLONG
L
CHERCHE
DEUXPT
23
#50
TEMP
TEMP2
ee"
ECRIRE
LCLONG
LSLONG
CHRGET
DEUXPT
<2
SI ON NE COMPACTE PAS
258 ; LES DEUX LIGNES
2597
260 *3 JSR
261 JSR
262 IDA
263 STA
264 UMP
265;
266 ; ENTREE ICI
CHAINER
COPIENUM
#50
LCLONG
os
SI ON COMPACTE LES
267 ; DEUX LIGNES
268 =
269 *4 iby
270 LDA
271 CMP
272 BEQ
273 JSR
274 TNC
275 ¢
276 ; ENTREE ICI
277 ; LSLONG<>0:
278;
279 *5 LDA
280 STA
281 IDX
282 STX
283 STK
284 -*6 JSR
285 MP
206 BEQ
287 CMP
288 BEQ
289 oSR
290 INC
291 MP
292;
293 ; ENTREE ICT
294 ; DE LIRE LA
295.3:
#50
erst
(CAR. ECR), ¥
os
ECRIRE2
TCLONG
SI LCLONG=0 ET
ON RECOPIE LS DANS LC
LsIF
LcIF
#50
TEMP 1
TEMP2
CHRGET
450
28
#REM
>7
ECRIRE
LCLONG
<6
ST LSLONG=0, ON FINIT
LIGNE SANS RECOPIER
296 47 JSR CHRGET
297 MP #50
298 BNE <7
299 +8 UMP <0 ZICI,ON VIENT DE LI
300 + RE LE 0 DE FIN DE
LIGNE
301;
302 ;
303 :SOUS PROGRAMMES
304
305
306
307 LDA
#51 LC VIDE,
308 BNE >1 ZECRIT :
309 TDA #:"
310 JSR ECRIRE2
ji *1 LDA #50
312 JSR ECRIRE2 ZECRIT TE 0 DE
313 JSR ECRIREZ #FIN DE LIGNE
314 LDA CAR.ECR
315 STA (LS),¥
316 Iny
317 LDA CAR.ECR+1
318 STA (L5),¥
319 STA LS+1
320 LDA CAR.ECR
321 STA LS
322 RTS
323.2
324;
325.2
326 ;LIT LES 2 PREMIERS OCTETS DE LS
327 ;SI 00 00 -> FIN DU PROGRAMME BASIC
328;
329 LITADR:
330 USR CHRGET
331 JSR CHRGET
332 CMP #50
333 BNE >1
334 JSR CHAINER sICI LE PROGRAMME
335 LDA #90 #EST TERMINE
336 JSR ECRIRE2
337 JSR ECRIRE2
338 JSR ECRIREZ
339 LDA CAR.ECR
340 STA PRGEND
341 LDA CAR. ECR+1
342 STA PRGEND+1
343 LDA 4#$F0
344 STA $cU
345 LDA 4SEF
346 STA §C1
347 ume BASIC
348 71 RTS
349;
350 COPIENUM:
351 JSR ECRIRE2
352 LDA NUM.B
353 JSR ECRIRE2
354 LDA NUM.H
355 USR ECRIRE2
356 RTS
357 3
398
359 :CHERCHE ST I.S FST APPELLEE PAR GOTO, GOSUR Ol) TH
EN GOTO
360 ;SI OUI -> LSGOTO=1
361 ;SI NON -> LSGOTO=0
362;
363 GOTO?:
364 LDA PRGEND
365 cL
366 ADC #S4
367 STA TABLEAU
368 EDA PRGEND+1
369 ADC #s0
370 STA TABLEAU+1
371 LbDY #50
372 1 JSR LIRETABL
373 CMP NUM.B
374 BEO >3
375 JSR LIRETABL
376 *2 CMP 4SFF
377 ANF <1
378 IDA #30
Pom's n° 22
379 STA LSGOTO 451 STY DEUXPT
380. RIS: 452 +3 Iny
381 73 USK LIRETABL 453 copy L
382 CMP NUM.# 454 Bec <t
ae BME <e 455 BEQ <I
384 LDA #51 456 74 RTS
385 STA LSGOTO 457
386 RTS 458 ;DANS ‘ECRIRE":
pte 459 ;SI TEMP1=1: ON EST EN TRAIN DE RECOPIER
388: LERETABL: 460 ;UNE CHAINE SANS LA MODIFIER
3a2 TRC TABLEAY 461 ;S1 TEMP1=0: TOUT DEPEND DE TEMP2
390 BNE >4 462:
991 INC TABLEAU+1 463 ;SI TEMP2=1: ON EST EN TRAIN DE COPIER UNE
See LDA: (TABLEAU), ¥ 464 ;INSTRUCTION QUI CONTIENI & CALL OU DATA
393 RTS 465 :DANS CE CAS, ON COPIE TOUT JUSQU'AU ':'
594 G 466 ;SEPARATEUR
395 ¢ 467 :SI TEMP2=0: L' INSTRUCTION NE CONTIENT NI &
3964 468 ;NI CALL NI DATA: LES TEST DETERMINENT ALORS
397 ;CHERCHE LA LONGUEUR DE LS (LSLONG) 469 ;SI ON TRAITE UN NOM DE VARIABLE OU UNE
398 ;ET LA PRESENCE DE IF OU DE ONERR 470 ;CONSTANTE
399 ;SI NI IF, NI ONERR -> LSIF=0 472 ;DANS LE CAS D'UNE VARIABLE X INDIQUE ILE NOMBRE
400 ;SINON -> LSIF<>0 472 ;DE CARACTERES DEJA ECRITS
401 ; 473 ;X EST REMIS A 0 PAR TOUT CARACTERENON ALPHANUME
402 LONG.IF: 474 ;RIQUE :
phd Ivy #50 475 ;TEMP2 EST REMIS A 0 PAK UN ':' SEPARATEUR OU PA
404 STY LSIF 476 :R UN 0 DE FIN DE LIGNE
405 STY LSLONG 477;
406 INY 478;
407 “1 LDA (TXTPTR),¥ 479 ECRIRE:
406 BEQ >4 480 STA TEMP
409 CMP #REM 481 CMP #DATA
410 BEQ >4 492 BEQ >0
411 CMP #1F 483 CMP #AMPRS
412 BEQ >2 484 BEQ >0
413 CMP #ONERR 485 CMP ¥#CALL
414 BNE >3 486 BNE >1
415 °2 STY LSIF 487 70 LDA #51
416 *3 INY 4688 STA TEMP2
417 BNE <1 489 UMP >7
418 44 DEY 490 71 cup gtm
419 STY LSLONG 491 BNE >2
420 RTS 492 EDA TEMP
4217 a 493 EOR #$1
4223 494 STA TEMP1
423: 495
424 ;POUR COPIER UN MORCEAU DE LS, 496 °2
425 ;CHERCHE SI DANS LES L PREMIERS 497
426 :CARACTERES IL Y A UN : NON 498
427 ;INCLUS DANS DES GUILLEMETS 499
428 ;SI OUI -> DEUXPT = LA DERNIERE 500
429; POSITION TROUVEE 501 LDA #$0
430 ;SI NON -> DEUXPT=0 502 STA TEMP2
431; 503 ume >7
432 CHERCHE: 504 43 LDA TEMP2
433 LbY #50 505 BNE >7
434 STY TEMP 506 LDA TEMP
435 STY DEUXPT 507 cmp #'0'
436 INy 508 BCC >7 523 *6 INX
437 opy i. 509 CMP #'Z'+1 524 LDA TEMP
438 BCS >4 510 BCS >7 525 ECRIRE2:
439 *1 LDA (TXTPTR),¥ 511 cep #'9'+1 526 Loy #50
440 BEQ >4 512 BCS >4 527 INC CAR.ECR
441 cup #°"" ‘513 CPX #$0 528 BNE >9
442 BNE >2 514 BEQ >7 529 INC CAR. ECRt1
4143 LDA TEMP 515 BNE >5 530 *9 STA (CAR.ECR),¥
444 BOR #301 516 *4 CMP #'A’ 531 RTS
445 STA TEMP 517 BCC >7 532;
446 UMP >3 518 *5 CPX #$2 533:
44772 CMP #t: 519 BCC 26 534 B:
448 BNE >3 520 DEC LCLONG 535 LONGUEUR EQU B-A
449 LDA TEMP $21 RTS 536%
450 BNE >3 $22 77 LDX #SFF 537 END
NX
22 Pom's n° 22
es utilitaires de recopie
graphique des écrans
haute-résolution sont
trés nombreux, dispo-
nibles sur le marché commercial,
ou publiés par Pom's. En revan-
che, les écrans graphiques basse
résolution semblent étre ignorés.
Je vous propose ici un petit
programme qui permet de générer
des impressions papier sembla-
bles a la haute-résolution a partir
des graphiques basse-résolution
de l'Apple. Ceci donne un aspect
beaucoup plus agréable, en éli-
minant l'aspect terne des impres-
sions traditionnelles.
Le programme DHGR utilise la
propriété de I'ImageWniter et de la
DMP de pouvoir créer facilement
sa propre police de caractére, et
n'est donc exploitable qu’avec ces
imprimantes.
Utilisation
Le programme fonctionne sous
DOS 3.3 ; il se loge a l'adresse
$300 (768 en décimal) sur une
longueur de $F0 octets. Comme il
écrase certaines adresses du DOS
contenues en $3D0-$3EF, il peut
étre nécessaire de rebooter aprés
son utilisation.
HCGR fonctionne sur tous les
types d'Apple // pourvus d'une
ImageWriter connectée au slot 1.
Il s'initialise par un simple
"BLOAD HCGR" et est alors
exécuté aussi souvent que néces-
saire par "CALL 768".
Les fichiers de la disquette Pom's
sont :
HCGR, le code objet exécutable
HCGR:S, le source en Big Mac
HCGR.DEMO, la démonstration
Principe de
fonctionnement
HCGER effectue l'impression de la
page graphique basse résolution
de l'Apple (accessible sous
Applesoft par l'instruction "GR").
Cette page correspond a une grille
de 40 x 48 pavés, chacun ayant
une couleur parmi 16 disponibles.
En mémoire, les pavés sont re-
groupés deux a deux pour former
un octet. Il serait possible de
considérer chaque octet comme un
code ASCII et d'imprimer le
caractére correspondant. Le résul-
tat ne serait cependant guére satis-
faisant car l'écran graphique serait
alors imprimé sous forme d'une
suite de lettres, de chiffres ou de
caractéres de ponctuation.
Afin d'améliorer cette présen-
tation, HCGR utilise la possibilité
de générer une police de carac-
téres sur _l'imprimante
ImageWriter. Cela permet de
définir des carac- tres en fonction
de la couleur du pavé graphique :
chaque caractére est imprimé en
fonction d'une matrice 8 x 8
contenue dans la mémoire de
Bernard
France
l'imprimante ; on n'a donc qu'a
tedéfinir ces matrices pour obtenir
des caractéres trés clairs si le pavé
graphique affiche une couleur
claire, et le contraire dans le cas
.+. contraire.
Fonctionnement du
programme
Le programme doit tout d'abord
sélectionner l'imprimante (PR#1).
Il faut ensuite créer une police de
caractéres personalisés, ce qui est
réalisé par la séquence suivante :
* initialisation ($09,$5A,$0D) ;
* largeur des caractéres fixée 4 8
points diaiguille ($1B,$2D) ;
* début de définition ($1B,$49) ;
¢ définition de chaque caractére :
code ASCII suivi du code
largeur ($48 pour 8 points) et
celui de la nouvelle matrice ;
* fin de définition ($04) ;
* sélection des caractéres ‘Pica’
($1B,$4E) ;
interligne de 16/144 ($1B,$54,
$31,$36) ;
* options simple largeur,
impression bidirectionnelle, 5
sauts de lignes ($0F,$1B,$3C,
$1F,$35).
Il reste 4 examiner chaque pavé de
la page graphique basse résolution
implantée aux adresses de $400 &
$7FF, de le convertir en carac-
tere imprimable (un pavé blanc,
donc de couleur $F, est converti
en $3F correspondant au caractére
"2" qui est imprimé comme un
carré plein).
On utilise la routine SCREEN du
moniteur (située en $F871) qui
renvoie, pour une ligne et une
colonne données, la valeur du
code couleur.
Enfin, on redonne la main au
DOS 3.3 en effectuant un PR#0.
Pom's n° 22
23
Programme
HCGR.DEMO
10 HOME : PRINT "DEMONSTRATION
dl
12
15
25
30
35
40
45
50
5S
60
DE HCGR"
PRINT : PRINT "ALLUMEZ VOTR
E IMAGEWRITER"
PRINT CHR$ (4) ;"BLOAD HCCR
A768"
HOME : GR: POKE - 16302.0
: CALL - 1998
POKE 1004, 62
POKE 1002,15: GOSUB 100
POKE 1002,14: GOSUB 100
POKE 1002,15: GOSUB 300
POKE 1002,14: GOSUB 300
C(0) = 0:C(1) - 15:C(2) - 12
70(3) 9:0(4) = O:C(5) = 5:
c(6) = 0
POKE 1002,15: GOSUB 500
C(0) = 0:C(1) = 15:C(2) = 15
20(3) = 15:C(4) = 2:C(5) = 1
5:C(6) - @
1004
1005
1006
1007
0,0,0
9, 2,0, 0, 2,0, 0,3, 0,0, 0,0, 3,
9, 0,0,0, 0,0, 0, 0,0, 5,0, 0,0,
0,0,0
0,2,0,0,2,
0,0, 0,0, 0,
0,0,0
0,0, 3, 0,0, 0,0, 3,
0,0,0,0,5,0,0, 0,
0,2, 2,2,2,0,
0, 0, 0,0, 0,0,
0,0,0
0, 3,0,0,0, 0, 3,
5,5,5,5,0, 0,0,
9,0, 0,0,0,0,0,0,0,0,0,0,0,
0, 0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0
La mise en page de ce
programme
DATA 0,0,0,0,0,0,1,0,0,0, 0,
DATA 0,0,0,0,0,0,1,0,0,0,0,
DATA 0,0,0,0,0,0,1, 0,0, 0,0,
DATA 0,0,0,0,0,0,0,0,0,0,0,
1010
1011
1012
1013
1014
1015
DATA 9,474, 4¢497 4/4444, 404,
4,4,4,4,4,4,4,4,5,5,1,3, 3,
3, 6, 1, 6, 6, 6, 6 ¢ 6, Gr 6, 6, 6, 6,
6,6,6
DATA 4,4,4,4,4,4,4,4,4,4,4,
474,444, 4,4,4,2,5,5,5,2,2,
2,1,1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6.6.6
DATA 4,4,4,4,4,4,4,4,4,4,5,
5494 4,4,2,2,2,2,1,1,1,2,2,
2,1,1.3.6, 6.6.6.6. 6, 6.6.6.
6,6,6
DATA 494444449,47444944,4, 4,4
5,5,4,4,4,3,2,2,1,1,1,2,2,
Se S41, 3, 3,5, 2, 61 6, 6, 6 Ey Gy
6, 6,6
DATA 4,4,4,4,4,4,4,4,4,4,4,
50 5¢ 1,1, 1, 3, 3, 3, 54 5, 3p 2, 5,
5,52 5,3,3,5,2,2,3, 3, 3,6, 6,
6,626
DATA 44,474, 4,414,2,2,4,4,
1 52 50 343, 5,
3, 3, 6,6, 6,
6, 6,6
65 POKE 1002,15: GOSUB 500 Bernard France nous pardonnera 1016 DATA 4,4,4,4,3,3,3,2,2,2,2,
90 TEXT : HOME : END certainement d'avoir modifié Een ee Se Dar Se es an Pas
gO; Sas oe légérement les DATA de son source a a el
d20" POR = 200,18 assembleur. Le programme de £.8.6
140 COLOR= I , 1017 DATA 4,4,4,4, 4,3, 3, 5,5, 5.1,
160 HLIN 1,39 - I ATI Marianne Sutz du précédent F183) 9)4) 24109-4239) 5,55
180 HLIN I,39 - I AT 39-1 numéro nous a aidé a récupérer les 1,1,1,2,2,1,1,1,2,2, 6, 6; 6,
200 VLIN I,39- 1 ATT ‘motifs’ du Macintosh. Pour obtenir 6,6,6
220 VLIN I,39 - I AT 39 -TI les reproductions ci-contre, nous 1018 DATA 4,4,4,4,3,3,3,5,5,5,1,
ot Bee oe avons utilisé non I'lmageWriter mais Z Zz 33 A v a ee ef ere os
280 ‘REYORN la LaserWriter en suivant les 6tapes hee
300 CALL - 1998 suivantes : 1019 DATA 4,4,4,4,4,4,4,5, 5,501,
320 FOR J = 0 TO 47 + Récupération des DATA sur le 2,257 5,4, 175 bp Be d25 S/S
aco FOR I es 3 39 Macintosh, 5, 3, 3, 3,5,5,5,1,2,2, 6, 6,6,
60 COLOR= I + ick i 6,6,6
380 PLOT I,J Teprenrissiori pat fa oats S6Mi0 SUF 020 DATA 4, 4,4, 4,4,4,4,4,4,2,2,
400 NEXT I Apple 1, . ; 2,2,5, 5,5, 3,3, 5,5, 33,11,
420 NEXT J + Insertion dans l'assembleur puis 5,3,3,3,2,1,1,1, 6, 6, 6,6, 6,
440 CALL 768 assemblage, 6,66
460 RETURN * ‘Impression’ non sur I'lmage Writer 1021 DATA 4,4,4,4,4,4,4,4,4, 4,4,
500 REM CARTE DE FRANCE mais sur I'6cran du Macintosh 25525457 5033s 209s 309s 5eds
520 CALL - 1998 émulant I'imprimante, toujours 1,5, a 5,2,2,1,1, 6, 6, 6, 6. 6+
540 RESTORE f 6,6,6
560 FOR Y= 0 70 47 par la carte série et avec 1929 pata 4,4,4,4,4.4,4.4.4.4.3.
580 FOR X= 0 10 39 quelques lignes de Basic, 39) 2 47 29 9) 8,2; 2p 249s Br le
600 READ I + Sauvegarde de I'écran sur 5,5, 5,572, 2,1, 6, 6, 6, 6, 6, 6,
610 IF Y2 < Y1 THEN 580 disquette, 6.6.6
620 COLOR= C(I) * Récupération avecle programme 1023 DATA 4,4,4,4,4,4,4,4,4,4,3
640 PLOT X,Y MacPaint, 31x 3p Le 50 97.2r bro 3¢2e2
660 NEXT X ; ae 75,5,5, 1,2, 2,6, 6, 6, 6, 6, 6,6
680 NEXT Y * Impression définitive par eee
700 CALL 768 lintermédiaire du programme = iy24 VATA 4,44, 414/404) 4040464
720 RETURN MacDraw afin de choisir aisément 2323,3,1,1,5, 5014515021252
1000 DATA 0,0,0,0,0,0,1,1,1,1,0, le format. 12, 3,2,1,1,1, 6,212, 6, 6, 6,6
0, 2,2, 2,2, 0, 0, 3 07 9, 0, 9 3, ; 76, 6,6
0,0,0,1,0,0,5,5,5,5,0,0,0, Le résullat est la réplique fidéle (et 925 para 4,4,4,4,4,4.4,4.4,4.4
0,0,0 méme un peu plus) de ce que vous Se 2p Bp Pp Do Bp Be hp 5p Sy Si Bod
1001 DATA 0,0,0,0,0,0,1,0,0,1,0, obtiendrez sur votre imprimante. hy 3y2y Ly 1414242 20 6; 6, 6,6
0,2, 0, 0,2, 0,0, 3,3, 0,0, 3,3, 7 6,6,6
0, 0, 1,240, 0, 5, 0,0, 0, 0,0, 0, 1026 DATA 4,45 44440414041 4044 4,
0,0,0 L008 DATA 4,47 474644494, 4, 404,44 4,2,2,2,3,3,1,1,1,2,2,1,1,
1002 DATA 0,0,0,6,0,0,1,0,0,1,0, 4,4,4,4,4,4,4,4,1,1,3,6,6, 2, 3,.2,.5, 57 5..3, 3, 3, 6,6, 6,6,
0, 2, 0, 0, 2, 0, 0, 3, 0, 3, 3, 0, 3, 6, 6, 6, 6 6, 6, 6 6; 6, 6, 6, 6, 6, 6,6,6
0, 0, 0, 0, 0, 0, 9,0, 0, 0, 0, U, 0, 6, 6,6 1027 DATA 4,4,444444414/ 414,404,
0,0,0 1009 DATA 4,4,4,4,4,4,4,4,4,4,4, 4,4,4,2,3,5,5,1,2,2,2,5,2,
1003 DATA 0,0,0,0,0,0,1,1,1,1,0, 4440404040440 4s LLL, 3, 6 21 313 5151 5151 Br 31 64 61 6, Gr
0, 2,0, 0,2, 0, 0, 3, 0, 0, 0, 0, 3, 6, 6,6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6.6.6
0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0,0, 66.6 1028 DATA 4,.4,4,47 4,47 40404040 Ae
\
24 Pom's n° 22
1042 DATA 45454; 4040 4p 4040 4e 4s 4 4404140404040 91 919040 4 Ae
s 4,4,4
Hard-Copy simple et VERA, UAB DATA $54,904, 9,9)4, 4048,
double : des précisions aa a 49, 964040 4041404 44 Ue
: 1042 DATA 4,4,4,4,4,4;4,4/444,4, al a
Silo aamete VAAL, aeAed
daccompagnement de ce numéro, LAA AAA433,4,4,4, 1046 DATA 4,454, 444474404, 404,
MMA MA Ne Me Ms Bp Be Me Me Ae
vous trouverez des versions cad 4,4,4,4,4,4,4,4,4,4,4,
modifies des programmes de 1043 DATA 4.4,4.4,4,4,4,4.4.4.4. i a a ct a cd
hard-coj dans les Pom's 45004 4d 4,4
18 et 19. En double largeur, la ata 4, 4 ny z Pees La, 1047 DATA 4,4,4,4,4,4,4,4,4,4,4,
derniére ligne n'était pas Lig Ces 9440 4540440 40 4G MA 4 A A A
inprinee: Dale pare le: 1044 DATA 444,464; 4,40 440404, 4, 94964, 4 44 IV A
guna wg sion di pate 904640444, 4,4, 4,44, A, sae
numéro 19 respecte mieux la
géométrie de l'image (mise en
caractéres Elite au lieu de
‘ proportionnels). y, Récapitulation 0368- AA 34 48 AA 00 AA 00 AA
0370- 00 AA 00 35 48 11 22 44
HCGR
0378- 88 11 22 44 88 36 48 55
4,1,4,2,5,5,5-5,2,2, 5, 5,5, 0380- 55 55 55 55 55 55 55 37
2, 2,1, 3, 3,5, 5,1, 6,6, 6, 6,6 9300- AJ 00 85 36 AY Cl 85 37 0388- 48 27 3F F3 72 4E CF FC
£7606 0308- A2 39 £8 BD 0003 20 FN —(0390- E4 38 48 55 00 55 00 55
1029 DATA 4,4,4,4,4,4/4,4-4,4-4- 9310- FD EO EE 90 F5 AZ FF £8 —-0398- 00 55 00 39 48 EE DD 2B
4/21/1/5,5/5/52/35/1/ 9319- a0 FF C8 8A 20 71 F809 —‘3A0- 77 EE DD BB 77 3A 40 F7
cee 0320-30 20 ED FD CO 27 90 F2 ee eee
aes 0328- A9 OD 20 ED FD EO 2F 90 a
ante EE eee eas 0330- E6 A9 BD 85 36 AQ 9E 85 03B8- F7 3C 48 55 FF AA FF 55
3,3,1,3,3,3,1,5,5,6,6,6,6, | 0338- 37 60 09 5A OD 1B 2D 1B 03CO- FF AA FF 3D 48 EE FF DD
66,6. 0340- 49 30 48 00 00 00 00 00 03C8- FF EE FF DD FF 3E 48 77
1031 DATA 4,4,4,4,4,4,4,4,4,4,4, 9348- 00 00 00 31 48 22 00 88 03D0- FF FF FF 77 FF FF FF 3F
4,3¢3,1,2,2-1,1,1,3e1,1-1, | 0350- 00 22 00 88 00 32 48 55 03D8- 48 FF FF FF FF FF FF FF
3, 3, 5,2, 2,2,5,5,5,1,1,6,6, | 0358- 00 AA 00 55 00 AA 00 33 03E0- FF 04 1B 4F 1R 27 1B 54
6, 6,6 0360- 48 55 AA 55 AA 55 AA 55 03E6- 31 36 OF 1B 3C 1F 35 0D
1032 DATA 4,4,4,4,4,4,4,4,4,4,4,
4033p 3r51 5714141552571,
2,5, 5,142, 2,519, 9¢ le, 6, 6 Basicium... Gérard Michel
6.6.6
1033 DATA 4,4,4,4,4,4,44,4,4,4, le Basic
3, 3, 3, 5, 54 57 5, 2,2, 545, 5,2,
2,2,5,1,1,1, 3, 3, 3,1, 4, 4,4,
4,4,4
1034 DATA 414547454144 454,4,4,4,
2,2, 2,2, 3, 3, 2, 2,2, 5,5, 5,2,
enrichi
Apple I+, fle
Gérer des masques 40 ou
2 ae 4901 343034404440 4, Cat uliluaire vous permet de BO ibis Cera
1035 DATA 4,4,4,4,4,4,4,4,4,4,4, définis lors de la program-
B98, 2 3p Sy hha dy diy dy typ. mation, s‘affichent par la
94 4 4 4 4 I 4 NG A 4 A, simple commande” ] A".
4,4,4 Imprimer Vécran
1036 DATA 4,454,454, 454,454,404, 40 ou 80 colonnes
4,44242,3,3,2,3,3,3,1,1,4 par "JET". ( Saisir toutes les variables
tre 94145 1 My 1 44 1 4 A, d'un écran en oe seule
, 4 commande "JI" en
1037 DATA 4,4,4,4,4.424.4.4.4.4, Nettoyer mémoire
VAM AAA Le LLL trés rapidement par. COTO pe Et OBSUEE: )
4440440414040 414040 4 40 Ae "FR".
44,4 (Ce z ce »
1038 DATA 4,4,4,4,4,4,4, 4,4, 4,4, Mais aussi, ne saisir que
94 Ve AV eI NA 4 A AAA Gérer des messages, Tune des variables affectées
4,4,4,4,4,4,4,4,4,4,4,4,4. la réponse éant aun écran, les afficher, les
4,4,4 ais
1039 DATA 4,4,4,4, 4,4, 404141404 coutralee: Coe de
4,424, 4,4, 4,4, 4,44, 4,44,
4404044 44 4 4g 4s A
4.4/4
1040 DATA 4,4,4,4,4,4,4,4,4,4,4,
4A AAA LA, = a
944441 4,40 41 404 34 4 4A, 1ette ef documentation : 150,00 TTC franco
4,4,4 (bon de commande page 74)
Pom's n° 22
Programme HCGR.S
(assembleur BigMac)
] teRRER EE
2 * HCGR *
3 tkkkkeke
4
5 * BERNARD FRANCE
6 * BIG MAC
7
8 COUT = — $FDED
9 CSW - $36
10 Doscsw = $9EBD
11 SCREEN = $F871
12 ORG $300
13
14 teeRAERER DRE] tte tee HERES
15
16 LDA #$00
17 STA CSW
18 LDA #$C1 60 DFB $30, $48, $00, $00, $00, $00,
19 STA CSW+1 $00, $00, $00, $00
20 NOIR
21 ** DEFINITION NOUVEAUX CARACTERES 61 DFB $31, $48, $22, $00, $88, $00,
22 $22, $00, $88, $00
23 LDX #$39 40 COL - 1 MAGENTA
24 CAR INX CARACT SUIVT 62 DFB $32, $48, $55, $00, $AA, $00,
25 LDA $0300,X © CHARGE TABLE $55, $00, $AA, $00 .
26 JSR COUT” ENVOI A IMPR 63 DFB $33, $48,$55, $AA, $55, SAA,
27 CPX #$EE FIN TABLE ? $55, SAA, $55, $AA
28 BCC CAR NON 64 DFB $34, $48, SAA, $00, $AA, $00,
29 $AA, $00, $AA, $00
30 ** ANALYSE DE LA PAGE GRAPHIQUE 65 DFB $35, $48, $11, $22, $44, $88,
31 $11, $22, $44, $88
32 LDX #$FF 66 DEB $36, $48, $55, $55, $55, $55,
33 LI¢ INX LIGN SUIVANTE $55, $55, $55, $55
34 LY #$FF 67 DFB $37, $48, $27, $3F, $F3, $72,
35 COL INY COL SUIVANTE $4E, SCF, $FC, $E4
36 TXA 68 DEB $38, $48, $55, $00, $55, $00,
37 JSR SCREEN RENV COULEUR $55, $00, $55, $00
38 ORA #530 CONVERTI 69 DFB $39, $48, SEE, $DD, $BB, $77,
39 JSR COUT ENVOI A IMPR $EE, $DD, $BB, $77
40 cPY #$27 DERNIERE COL 70 DFB $3A,$48,$F7, SDF, $FE, $FB,
41 BCC COL NON SBE, SEF, $FD, $7F
42 LpaA #$0D RETR CHARIOT 71 DFB $3B, $48, SEF, $DF, $BF, $7F,
43 JSR Cour $FE, $FD, $FB, $F7
44 CPX #$2F DERNIERE LIGN 72 DFB $3C, $48, $55, $FF, SAA, $FF,
45 BCC LIG NON $55, SEF, SAA, SEF
46 73 DFB $3D, $48, $EE, $FF, $DD, $FF,
47 #HEREREREH DREQ HtEAEAE EEE $EE, FF, $DD, $FF
48 74 DFB $3E,$48,$77, $FF, $FF, $FF,
49 LDA #<DOSCSW RETOUR AU DOS $77, $FF, SEF, $FF
3:3 75 DFB $3F, $48, $FF, $FF, $FF, $FF,
50 STA CSW SEF, $FF, $FF,$FF _
51 LDA #>DOSCSW 76 DFB $04 FIN POLICE
52 STA CSWt1 77 DFB $1B,$4E CARACT PICA
53 RTS C'EST FINI! 78 DFB $1B,$27 POLICE PERSO
54 79 DFB $1B,$54,$31,$36
55 seeeenesee TABLE thteRE HEE 80 DFB $0F SIMPL LARGEU
56 81 DFB $1B,$3C BIDIRECTIONN
57 DFB $09,$5A,$0D INITIALISE 82 DFB $1F,$35 5 SAUTS LIGN
58 DFB $1B,$2D 8 POINTS 83 DFB $0D NON UTILISE
59 DFB $13, $49 DEBUT DEF 84 END
\
26 Pom's n° 22
De la formule: ouphe
Jean-Louis Chauvin
n complément de l'ar-
ticle paru dans le n°
1, 11 de Pom's, voici
deux nouveaux pro-
grammes de tracé de courbes en
conversationnel.
Le premier, baptis¢ FORMULEI,
dessine toutes les fonctions du
type Y = f(X). Il permet aussi de
tracer la courbe de la dérivée.
FORMULE2 trace les courbes
définies soit par un couple
d'équations paramétriques X =
f(T), Y = g(T), soit par une
€quation polaire R = f(T). Dans
les deux cas, vous pouvez
également :
* obtenir une famille de courbes
en introduisant dans la formule
un paramétre M ;
+ cadrer la partie du plan (X Y)
représentée ;
° faire apparaitre ou non les axes
de coordonnées ;
* tracer la courbe par points
(pour Ics fonctions discon-
tinues).
Avec les deux programmes, les
formules apparaissent sur le
graphique.
Quand vous lancez FORMULE1,
laissez dans le lecteur une
disquette non protégéc (vous
verrez plus loin pourquoi).
Complétez aprés 'Y =' la formule
comme en Basic, sans autre
variable que X (et M dans
l'option avec ‘paramétre’); vous
pouvez utiliser les constantes PI
et E (attention a la syntaxe : tapez
2* PI et non 2 PI). X1, X2, Y1
et Y2 délimitent la partie du plan
teprésentée sur l'écran.
Si vous changez les valeurs
proposées, prenez soin que X2
soit supérieur 4 X1 et que Y2 soit
supérieur 4 Y1. Si vous avez
demandé un paramétre M, vous
devrez définir sa progression par
les valeurs extrémes M1 et M2 et
par le pas qui doit étre de méme
signe que (M2-M1).
Avec FORMULE2, le processus
est le méme excepté que, dans les
formules, la variable doit étre T et
non X.
En outre, vous aurez a introduire
les bornes T1 et T2 du domaine
de variation de T si les valeurs
par défaut ne vous conviennent
pas.
Le paramétre M vous permettra
de réaliser des effets artistiques.
Essayez par exemple :
R=COS (4*T)+M
avec M1 = -2, M2=2 et PAS=1.
+ l'arrét par END (ligne 290)
déclenche l'exécution de la
procédure,
Celle-ci, aprés avoir modifié le
programme, le relance @ la li-
gne 400 (RUN 400 ligne 260).
Ce RUN mettant les variables 4
zéro, les valeurs 4 conserver
doivent étre inscrites également
dans des instructions par la
procédure (lignes 225 a 350).
* aprés redémarrage, la procé-
dure est effacée (ligne 410) et
le déroulement se poursuit.
V=SINCX }+. SKTANK «ORM
Exemple de courbe avec paramétre M
variant de -2 a 2 par pas de 1
Le programme
Il est entitrement rédigé en
Applesoft. Pour insérer une
formule dans une instruction, il
procéde comme suit :
+ la formule est introduite (ligne
90 de FORMULE1) comme
variable chaine F$.
¢ le programme crée et enregistre
sur la disquette (lignes 200 a
270) une procédure nommée
PROCEDURE qui comporte
entre autres commandes (ligne
220) la création a la ligne 560
de I'instruction représentée par
la formule Y=F$.
Pendant le tracé de la courbe, les
valeurs non définies de la fonc-
tion (1/0, SQR(-1)...) sont élimi
nées par ONERR GOTO 1700,
corrigé par la routine classique en
langage machine de la ligne 35.
Par ailleurs, l'affichage de la
formule en mode graphique est
assuré par le sous-programme de
la ligne 1500.
Celui-ci utilise une table de
formes (fichier ALPHA sur la
disquette) que le programme
charge (ligne 37) a I'adresse
16384 ($4000), immédiatement 4
la suite de la page graphique
haute résolution n°1.
Pom's n° 22
27
Programme FORMULE1
10
20
30
REM TRACE DE COURBES DE FONCTIO
N
REM PAR J.L.CHAUVIN 1984
D$ = CHR$ (4):FIRST = 1: SCALE
= 1: ROT= 0:Q0$ = CHRS (34):S =
16384
115
120
N Y1$ = "-4"; HTAB 4: VTAB PE
EK (37): PRINT Y1$
INPUT "Y2=";Y2$: IF Y2$ = ""T
HEN ¥2$ = "4"; HTAB 4: VTAB P
EEK (37): PRINT Y2$
MS = "O":MDS = "O":PMS = "0":
IF PAR THEN PRINT : PRINT "VA
LEURS DE M:": INPUT "DE M=";MS
: INPUT "A M=";MD$: INPUT "PAS
28
35 POKE 768,104: POKE 769,168: POK =";PM$
E 770,104: POKE 771,166: POKE 7 130 HGR : HOME
72,223: POKE 773,154: POKE 774, 200 REM CREATION PROCEDURE POUR IN
72: POKE 775,152: POKE 776,72: TRODUIRE LES FONCTIONS DANS LE
POKE 777,96 PROGRAMME *
37 PRINT D$"BLOADALPHA,A"S: POKE 2 210 PRINT D$;"OPENPROCEDURE": PRIN
32,0: POKE 233, 64 : T D$;"WRITEPROCEDURE
40 POKE 34,0: TEXT : HOME : PRINT 220 PRINT "560Y="FS: PRINT "825Y="
TAB( 7) "COURBES DE FONCTIONS Y F$: PRINT "835Y="F$
=F (X) 225 PRINT "415F$="0$;F$;0$
50 PRINT TAB( 7)" == 230 PRINT "420X1="X1$":X2="X2S$
a 240 PRINT "430Y1="Y1$":Y2="Y2$
60 PRINT : PRINT "INTRODUCTION DE 250 PRINT "440M="M$":MD="MD$";PM=""
LA FORMULE PMS
70 PRINT : INPUT "FORMULE AVEC PAR 260 PRINT "RUN400
AMETRE 'M' (0)2?";A$: IF AS = "0 270 PRINT D$"CLOSEPROCEDURE
" THEN PAR = 1 280 PRINT D$"EXECPROCEDURE
80 IF FIRST THEN PRINT : PRINT "R 290 END : REM ARRET POUR DECLENCHE
ESPECTEZ LA SYNTAXE DU BASIC": R EXEC
PRINT "VOUS POUVEZ UTILISER 'PI 399 REM PREPARATION DONNEES **
’ Br 1B! 400 PI = 4 * ATN (1):E = EXP (1)
90 PRINT : PRINT "FORMULE:";: INPU : ONERR GOTO 1700
Lf © Yerers 410 DS = CHRS (4):Q$ = CHRS$ (34)
100 PRINT : PRINT "VALEURS EXTREME : PRINT D$"DELETEPROCEDURE
S DE X(SINON:X1=-7,X2=7):": IN 415 FS = "EXP(X/2)"
PUT "X1=";X1S: IF X1$ = "" THE 420 X1 = - 7:X2 = 7
N X1$ = "-7": HTAB 4: VTAB PE 430 Yl= - 4:Y2 =4
EK (37): PRINT X1$ 440 M = 0:MD = 0:PM=0
105 INPUT "X2=";X2$: IF X29 = "" T 445 POKE 34,20: HOME : HCOLOR= 3
HEN X2$ = "7": HTAB 4: VTAB P 450 IF X1 > = X2 THEN PRINT "ERR
EEK (37): PRINT X2$ EUR: X1>=X2": GET AS: GOTO 40
110 PRINT : PRINT "VALEURS EXTREME 460 IF Yl > = Y2 THEN PRINT "ERR
S DE Y(SINON: Y1=-4, Y2=4):": IN EUR: Y1>=Y2": GET A$: GOTO 40
PUT "Y1l=";Y1$: IF Yi$ = "" THE 465 IF MD = M GOTO 480
4040- c6 02 D 02 EA 02 OCO- A2 05 AB 05 BB 05 00 00
Table de formes 4048- F9 02 as fe aa os Dies soe 00 00 oe a3 00 00 00 00
ALPHA 2050- 29 03 33 03 3F 03 4C 03 + 40D0- 00 00 00 00 00 00 00 00
Ap awit Sc ter cui 1058- 56 03 5F 03 6E 03 77 03 40D8- 00 00 00 00 00 00 00 00
hieasiwderpaes 2 4060- 85 03 93 03 AO 03 AA 03 40E0- 00 00 00 00 00 00 00 00
anon eee 4068- B7 03 C5 03 N2 03 DR 03 40E8- 00 00 00 00 00 00 00 00
SAVE ALPHA, ASAIO, LERCO 4070- £8 03 F5 03 03 04 14 04 40F0- 00 00 00 00 00 00 00 00
. 4078- 1E 04 2c 04 31 04 3D 04 40F8- 00 00 00 00 00 00 00 00
4000- 80 00 8A 01 AG 01 AB 01 4080- 4c 04 53 04 59 04 61 04 4100- 00 00 01 00 00 ON 00 00
4008- AF 01 B8 01 C5 01 D4 01 4088- 6 04 79 04 81 04 BA 04 4108- 00 00 00 00 00 00 00 00
4010- DF 01 FC 01 FF 01 F8 01 4090- 95 04 9F 04 AC 04 RO 04 4110- 00 00 00 00 00 00 00 00
4018- 00 02 OF 02 18 02 1c 02 4098- Cl 04 CB 04 D8 04 El 04 4118- 00 00 00 00 00 00 00 00
4020- 21 02 24 02 2E 02 3E 02 40A0- BA 04 F3 04 FE 04 09 05 4120- 00 00 02 03 04 U5 06 07
4028- 47 02 55 02 61 02 6C 02 40A8- 14 05 1c 05 27 05 31 05 4128- 08 09 0A 0B OC OD OF OF
4030- 79 02 85 02 92 02 9F U2 40B0- 3B 05 45 05 51 05 61 U5 4130- 10 11 12 13 14 15 16 17
4038- AB 02 AE 02 B2 02 BF 02 40B8- 6E 05 79 05 87 05 93 05 4138- 18 19 1A 1B 1C 1D 1E 1F
x
Pom's n° 22
470 IF (MD - M) * PM<0ORPM=0 625 IN = 0: IF PM = 0 GOTO 800
THEN PRINT "ERREUR SUR M": G 630 M=-M + PM: IF (MD - M + PM) *
ET A$: GOTO 40 PM > 0 GOTO 540: REM ITERAT
480 HOME : INPUT "COURBE PAR POINT ION
S (0)2?";A$: IF AS < > "0" THE 640 HOME : INPUT "AUTRE FORMULE (O
NCO=1 )2"-AS: IF AS = "0" GOTO 40
490 PRINT : INPUT "TRACE DES AXES 650 END
(0) ?";A$: IF A$ = "0" THEN AX 800 REM DERIVEE **
=] 810 HOME : INPUT "TRACE DE LA DERI
495 HOME VEE (0)?";A$: IF AS < > "O"G
500 REM GRAPHIQUE ** OTO 640
510 TS = "Y=" + F$: GOSUB 1500 815 XX = 0: HCOLOR= 2
520 RX = (X2 - X1) / 279:RY = (Y2 820 X = X1 + XX * RX
- Yl) / 159: IF AX = 0 GOTO 54 825 Y = EXP (X / 2)
0 830 YD = Y:XD = X:X = X + .001
524 REM AXES El’ GRADUATION 835 Y= EXP (X / 2)
525 X0 = - X1 / RX:Y0 = 159 + Y1 840 DY = Y - YD:DX = X - XD
/ RY: IF XO < 0 OR XO > 279 GO 850 DER = DY / Dx
TO 532 860 DD = (Y1 - DER) / RY + 159
530 HPLOT X0,0 TO X0,159:YP = INT 870 IF DD < 0 OR DD > 159 THEN IN
(Y2): IF XO > 278 GOTO 532 = 0: GOTO 910
531 YY = (Yl - YP) / RY + 159: HPL 880 IF IN * CO THEN HPLOT TO Xx,
OT XO + 1,YY:YP = YP - 1: IF Y DD: GOTO 900
P > = ¥1 GOTO 531 890 HPLOT XX,DD
532 IF YO < 0 OR YO > 159 GOTO 540 900 IN=1
535 HPLOT 0,Y0 TO 279,Y0:XP = INT 910 XX = XX + 1: IF XX < 280 GOTO
(X2): IF YO < 1 GOTO 540 820
537 XX = (XP - X1) / RX: HPLOT Xx, 920 IN = 0: HCOLOR= 3: GOTO 640
YO — 1:XP = XP - 1: IF XP > = 1499 REM AFFICHAGE HGR D'UNE CHAIN
X1 GOTO 537 Bigs **
539 REM COURBE 1500 S = 16384:A = S + PEEK (S +
540 XX = 0 2) + 256 * PEEK (S + 3):NB =
550 X = X1 + XX * RX PEEK (S):IC = 1:XB = PEEK
560 ¥ = EXP (X / 2) (A - 6):YB = PEEK (A - 5)
570 YY = (¥1 - Y) / RY + 159 1510 LO = LEN (T$):DX = PEEK (A
580 IF YY < 0 OR YY > 159 THEN IN = 8) + 2C #1
= 0: GOTO 620 1520 FOR I = 1 TO LO
590 IF IN * CO THEN HPLOT TO xx, 1530 AS = ASC ( MIDS (T$,T,1))
YY: GOTO 610 1540 NF = PEEK (S +2 4 NB +2 +
600 HPLOT Xx, YY AS)
610 IN = 1 1550 DRAW NF AT XA + XB,YA + YB
620 XX = XX + 1: IF XX < 280 GOTO 1560 XA = XA + DX: IF XA > 270 THE
550 N XA = 0:YA = YA + 10
4140- 20 21 22 23 24 25 26 27 41C0- 1E OD 2D 3D 00 24 34 2D 4240- 2F 36 36 3E 20 07 00 IF
4148- 28 29 2A 2B 2C 2D 2E 2F 41C8- 3¥ BF OE 2D 15 1E 3F 2F 4246- 18 08 OC 2D 15 B6 18 BF
4150- 30 31 32 33 34 35 36 37 41D0- 35 24 04 00 OC OC DF 3C 4250- 17 2E 2D 3D 00 DE 72 2D
4158- 38 39 3A 3B 3C 3D 3E 3F 41D8- B6 0A 17 4D 35 27 00 20 4258- 1D 08 E4 2C 20 3F 3F 05
4160- 40 62 42 43 44 45 46 47 41F0- 1C 17 76 17 OD OD 1E DF 4260- 00 21 24 3E 1E 1E 2E 2D
4168- 48 49 4A 4B 4C 4D 4E 4F 41E8- OE 6D 07 00 20 34 00 18 4268- 3D 36 04 00 38 27 2c 2D
4170- 50 51 52 53 54 55 56 57 41F0- 08 B& 17 36 OE OE 07 00 4270- BS AB 36 1£ 3F 1F 08 06
4178- 58 59 SA 5B 5C 5D 5E 5F 41F8- 92 OC OC 24 1c 1C 05 00 4278- 00 2F AD F6 3F 1F 08 24
4180- 60 61 05 07 02 03 80 62 4200- 24 34 1F OD OD 1E 3F 16 4280- 64 OC 2D 07 00 17 36 24
4188- BF 05 24 3C 2F 2D 2D 3E 4208- 2D 15 1F 1F OD 26 00 24 4288- 1D 08 1D 08 1D 08 3C 3F
4190- 3F 3F 2E 2D 2D 3E 3F 3F 4210- 36 36 24 3F 2D 2D 07 00 4290- 2F 00 2D 20 1C 3F 17 76
4198- 2E 2D 2D 3E 3F 3F 2E 2D 4218- 32 1E 05 00 3F 2D 2D U/ 4298- 17 76 2D 1D 08 24 00 3F
41A0- 2D 3E 3F 3F 05 00 02 00 4220- 00 92 04 00 1D 08 1D 08 42A0- 20 OC 2D 15 36 2F F6 1E
41A8- B6 1C 08 24 24 06 00 1B 4228- 1E 1E 1E 1£ 05 00 1D 08 42A8- 3F 05 00 BO 04 00 BO Fé
41B0- 08 24 0M 36 1F 08 04 00 4230- 25 1C 3F 17 36 2E 37 OE 42B0- 05 00 12 OE ic 1C 1C 1D
41B8- 3F 25 64 2D 3F 17 36 36 4238- 2D 1D 08 24 04 00 24 34 42B8- 08 1D 08 1D 08 07 00 3a
Pom's n° 22
29
1570 NEXT : RETURN =F(T), Y=G(T)
1700 REM TRAITEMENT ERREURS 80 PRINT : PRINT "2-COORDONNEES PO
1705 CALL 768 LAIRES": PRINT TAB( 18) "R=F(T)
1710 ER = PEEK (222):LI = PEEK ( 90 PRINT : INPUT "VOTRE CHOIX:";CH
218) + PEEK (219) * 256 OIX$: IF CHOIX$ = "1" GOTO 120
1720 IF (ER = 53 OR ER = 133) AND 100 IF CHOIX$ = "2" GOTO 200
LI = 560 THEN IN = 0: GOTO 62 110 PRINT "CHOIX ERRONE": GOTO 90
0 119 REM INTRODUCTION X=F(T), Y=G(T
1730 IF ER = 16 THEN PRINT "ERREU ) **
R DE SYNTAXE LIGNE ";LI: GET 120 HOME : PRINT : PRINT "INTRODUC
A$: GOTO 40 TION DES FORMULES": GOSUB 130:
1740 IF (ER = 53 OR ER = 133) AND GOTO 150
(LI = 825 OR LI = 835) THEN I 130 PRINT : INPUT "FORMULE AVEC PA
N = 0: GOTO 910 RAMETRE 'M' (0)?";A$: IF A$ =
1750) PRINT "ERREUR N["ER" LIGNE "L "O" THEN PAR = 1
I: PRINT CHR$ (7): END 140 IF FIRST THEN PRINT : PRINT "
RESPECTEZ LA SYNTAXE DU BASIC"
: PRINT "VOUS POUVEZ UTILISER
WES? Ree” "Sige
5
Programme FORMULE2 150 PRINT : PRINT "FORMULES:": INP
UT "X=";FS: INPUT "Y=";G$
10 REM TRACE DE COURBES DE FONCTIO 160 PRINT : PRINT "VALEURS EXTREME
N S DE X(SINON:X1=-7,X2=7):": IN
20 REM PAR J.L.CHAUVIN 1984 PUT "X1=";X1$: IF X1$ = "" THE
30 D$ = CHR$ (4):FIRST = 1: SCALE N X1$ =."-7": HTAB 4: VTAB PE-
= 1: ROT= 0:0$ = CHRS$ (34):S = EK (37): PRINT X1$
16384 170 INPUT "X2=";X2$: IF x2$ = ""T
35 POKE 768,104: POKE 769,168: POK HEN X2$ = "7"; HTAB 4: VIAB P
E 770,104: POKE 771,166: POKE 7 EEK (37): PRINT X2$
72,223: POKE 773,154: POKE 774, 180 PRINT : PRINT "VALEURS EXTREME
72: POKE 775,152: POKE 776,72: S DE Y(SINON:Y1=-4,Y2=4):": IN
POKE 777, 96 PUT "Yl="7Yis: IF YIS = "" THE
37 PRINT D$"BLOAD ALPHA,A"S: POKE N Y1$ = "-4"; HTAB 4: VTAB PE
232,0: POKE 233,64 EK (37): PRINT Y1$
40 POKE 34,0: TEXT : HOME : PRINT 190 INPUT "Y2=";Y2$: IF Y2S = "" T
TAB( 11) "COURBES DE FONCTIONS HEN Y2$ = "4"; HTAB 4: VIAB P
50 PRINT TAB( 11)"= EEK (37): PRINT Y2$
—— 195 GOTO 240
60 PRINT : PRINT "CHOISISSEZ ENTRE 199 REM INTRODUCTION R=F(T) **
: 200 HOME : PRINT "INTRODUCTION DE
70 PRINT : PRINT "1-COORDONNEES PA LA FORMULE": GOSUB 130
RAMETRIQUES": PRINT TAB( 18)"X 210 PRINT : PRINT "FORMULE:": INPU
42C0- 27 28 2D BS 3F 00 12 17 4340- 36 26 24 24 FC 1B 36 2E 43C0- 6C 15 15 04 00 3F 20 Oc
42C8- OC OC OC IF 08 IF 08 IF 4348- 37 36 04 00 24 3¢ 2D 37 43C8- 2D 15 D6 15 F6 3F 1F 08
42D0- 08 05 00 B6 1C 08 64 OC 4350- 36 36 3E 2D 07 00 9R 77 43D0- 06 00 36 26 24 24.3C 2F
42D8- 1C 3F 17 04 00 38 OC 70 4358- 2D 1D 08 24 24 34 00 3B 43D8- 2D 3D 00 1B 24 34 36 36
42E0- OE 17 15 3F BF OF 2D 25 4360- 36 6E 09 1c 1C 1c 08 1D 43E0- OE 2D 1D 08 24 24 34 00
42E8- O4 00 3A 37 26 24 64 OC 4368- 08 OC DF 33 36 00 1B 24 43E8- 1B 24 34 36 76 15 OC 1D
42F0- 1E 08 OF 15 36 2¥ 36 04 43/0- 34 36 36 2E 2D 3D 00 IF 43¥0- 08 24 24 06 00 IF 24 34
GES GW W 24 3 2B US 16 US QB W 1S 14 14 WWD NH BW 4QER- BW BW 2 UW VW 3H 2d 24
4300- F6 3F 2/ 24 U0 1B 24 OC 4380- 36 36 36 04 00 1F 08 27 4400- 24 06 00 1c 1F 08 34 96
4308- 2D 15 96 F2 3F 1F 08 24 4388- 34 36 36 6E 09 24 2F 24 4408- 32 64 OD 15 26 1C 08 18
4310- 00 1B 24 2C 2D 15 36 36 4390- 24 06 00 1B 36 OE 2D 1D 4410- 1D 08 34 00 36 26 24 Ic
4318- 1F 3F 27 24 00 AD 12 3F 4398- 08 24 24 1C 3F 17 36 00 4418- 1C 6C 09 F6 O07 OO 1E IE
4320- 3F 24 2C 27 24 2D 2D 07 43A0- 2D 20 1C 3F 37 36 3D 36 1120- 2E 2D 25 18 08 18 1D 08
4328- 00 3D 3F 36 26 24 24 2C 43A8- 26 00 72 1D 08 24 E4 3F 4428- 3C 3F 2F 00 20 FO OD 07
4330- 2D 3D 00 2A 35 3E 3F 1F 43B0- 17 36 36 OF 6D 05 00 2D 4430- 00 12 16 0C 2C 1C 08 38
4338- 08 24 24 OC 2D 3D 00 2D 43B8- 20 1C 3F 37 36 3D 36 26 4436- 3F 17 76 2D 00 1B 1c 08
Pom's n° 22
lOO ee
T "R=";FS 370 PRINI D$"CLOSEPKOCEDURE
220 PRINT : PRINT "VALEUR EXTREME 380 PRINT D$"EXECPROCEDURE
DE R (SINON R=4)": INPUT "R1=" 390 END : REM ARRET POUR DECLENCH
7R1$: IF R1$ = "" THEN R19 ER EXEC
4"; HTAB 4: VTAB PEEK (37): P 399 REM PREPARATION DONNEES **
RINT R1S 400 PT = 4 * ATN (1):E = EXP (1)
240 PRINT : PRINT "VARIATIONS DE T : ONERR GOTO 1700
(SINON:DE -PI A PI):": INPUT 410 D$ = CHRS$ (4):Q$ = CHR$ (34)
"DE T1=";T1S: IF T1S = "" THEN PRINT DS$"DELETEPROCEDURE
T1$ = "-PI": HTAB 7: VIAB PE 420 T1 = - PI:T2 = PI:M = 0:MD =
EK (37): PRINT T1$ PI / 2:PM = PI / 12:CHOIX = 1
245 INPUT "A T2=";T2$: IF T2$ = "" 425 POKE 34,20: HOME
THEN T2$ = "PI": HTAB 6: VTAB 430 IF CHOIX = 2 GOTO 480
PEEK (37): PRINT T2$ 440 X1 = - 72X2 = 72Y1l-= —-— 42Y2
250 MS = "0":MDS = "0":PMS = "0": =4
IF PAR THEN PRINT : PRINT "VA 450 IF X1 = X2 OR Yl = Y2 THEN PR
LEURS DE M:": INPUT "DE M=";MS INT "ERREUR SUR X1,X2,Y1,Y2":
: INPUT "A M=";MD$: INPUT "PAS GET AS: GOTO 40
=";PMS 460 X$ = "2.5*COS(T) *SIN(M) ":YS =
255 PRINT : INPUT "VOULEZ-VOUS REP "4*SIN(T)"
RENDRE CES DONNEES (0)?";A$: I 470 GOTO 500
F AS = "0" GOTO 40 480 R1=4
260 HGR : HOME : SCALE= 1: ROT= 0: 490 RS = "SINX"
HCOLOR= 3 495 IF Rl < = 0 THEN "ERREUR SUR
300 REM CREATION PROCEDURE POUR I Ri": GET A$: GOTO 40
NTRODUIRE LES FONCTTONS DANS L 500 IF MD = M GOTO 520
E PROGRAMME * 510 IF (MD - M) * PM < 0 OR PM = 0
310 PRINT D$;"OPENPROCEDURE": PRIN THEN PRINT "ERREUR SUR M": G
T DS; "WRITEPROCEDURE ET A$: GOTO 40
320 IF CHOIX$ = "1" THEN PRINT "9 520 HOME : INPUT "COURBE PAR POINT
20X="FS":Y="G$: PRINT "460X$=" S (0)2?";A$S: IF AS < > "O" THE
OS + FS + QS":YS="0S + GS + QS NCO=1
: GOTO 340 530 PRINT : INPUT "TRACE DES AXES
330 PRINT "920X-COS (T) * ("FS") :Y=SI (0) 2";A$: IF AS = "O" THEN AX
N(T)*("FS")": PRINT "490RS="Q5 =1
+ FS + QS: PRINT "480R1 = "R1 600 REM GRAPHIQUE **
$: GOTO 350 610 IF CHOIX = 1 THEN T$ = "X=" +
340 PRINT "440X1="X1S":X2="X2S":Y1 X$: GOSUB 1500:XA = 0:YA = YA
="Y1S":Y2="Y2$ + 10:T$ = "Y=" + Y$: GOSUB 150
350 PRINT "420T1="T1$":T2="T2$":M= O: GOTO 640
"MS": MD="MDS" : PM="PMS$": CHOLX=" 620 TS = "R=" + R$: GOSUB 1500
CHOIX$ 630 X2 = 1.75 * R1:X1 = - X2:Y2 =
360 PRINT "RUN400 R1:¥1 = - R1
4440- 0C 2D BS £2 3F 16 2D CD 44C0- 00 28 1C 08 16 36 26 1F 4540- 1D 08 24 06 00 IF 34 36
4448- F2 3F 2F 00 FO 17 Oc OD 44C8- 3F 30 00 29 BO 12 1F 08 (4548- 2E 1D 08 34 OE 25 24 34
4450- 15 04 OU 92 3A 2K 2D 3D 44D0- 1C 3F 36 24 24 24 06 00 4550- 00 3B BO 12 Iv 08 OD 15
1158- 00 19 08 1F 08 IF 08 05 41D8- 24 3C 35 36 36 3E 2D 07 4558- 1F 08 1c 1D 08 1D NA 06
4460- 00 1B 08 2D 15 36 3E 3F 4460- 00 36 DE 24 24 6D 35 36 4560- 00 1B 34 76 16 2D 1D 06
4468- 1F 08 OC 2D 05 00 28 15 44FB- 26 00 28 15 36 FE 1B 24 4568- 3C 2F 25 24 06 00 38 2F
4470- 36 1B 3F 27 24 2C 27 34 44F0- 24 2D 00 38 17 36 OF 2D 4570- 2D F5 17 17 17 2D 2D 07
4478- 00 2D 96 3F 3F 20 OC 05 44F8- 1D 08 24 1C 07 00 12 2D 4578- 00 60 OC D6 15 3E 3F iC
4480- 00 BF 76 2D 25 24 2F 24 1500- 20 1C 3F 37 36 3D 36 04 1580- 08 17 36 OF 2D 3D 00 09
4488- 04 00 2A 25 1C 3F 17 2E 4508- 00 28 35 36 36 24 3K 3r 4588- 34 36 2F FE 3F 20 24 44
4490- 37 OE 2D 3D 00 3D 3F 35 = '4510- 20 OC 05 00 28 3D FF 2E 4590- 15 07 00 28 1c 08 15 16
4498- 36 24 24 64 AD 04 00 38 4518- 37 36 04 00 09 36 3F 17 4598- 3E 3F 1C 08 17 36 OB 2D
44A0- 17 76 16 2D 1D 08 3C 2F 4520- OE 2D 15 1E 3F 2F 00 28 45A0- 3D 00 C3 18 08 4D 39 00
44A8- 25 E4 07 00 28 15 36 FE 1528- 3F 2F 24 36 36 76 2D 30 45A8- 1F 1¢ 08 OD OD 1E 1F OF
44B0- 1B 1E 08 24 24 3D 24 06 4530- 00 09 34 36 3E FU 3F 20 49BU- OD 1E 1k 17 OD OD 07 00
44R8- 00 24 BO 2F 36 36 2F 3D 4538- 24 06 00 1B 34 76 15 OC 45B8- 92 3A 2F 2D 2D 07 00 DO
S
Pom's n° 22 31
640
650
660
670
680
690
700
710
850
860
900
910
920
930
940
950
960
970
980
RX = (X2 - X1) / 279:RY = (¥2
- Yl) / 159: IF AX = 0 GOTO 85
0
REM AXES ET GRADUATION
XO = - X1 / RX:YO = 159 + Y1
7 RY: IF XO < O OR XO > 279 GO
TO 690
HPLOT X0,0 TO X0,159:YP = INT
(Y¥2): IF XO > 278 GOTO 690
YY = (Y1 — YP) (£ RY + 159: HPL
oT XO + 1,YY:YP = YP - 1: IF Y
P > = Y1 GOTO 680
IF YO < 0 OR YO > 159 GOTO 850
HPLOT 0,Y0O TO 279,Y0:XP = INT
(X2): IF YO < 1 GOTO 700
XX = (XP — X1) / RX: HPLOT Xx,
YO - 1:XP = XP - 1: IF XP > =
X1 GOTO 710
DT = PI / 120 * SGN (T2 - T1)
HOME
REM TRACE DE LA COURBE **
T = T1:IN = 0
X= 2.5 * COS (T) * SIN (M):
Y= 4% SIN (T)
XX = (X - X1) / RX:YY = (¥1 -
Y) / RY + 159
IF XX <0 OR XX > 279 OR YY <
O OR YY > 159 THEN IN = 0:
O 980
IF IN * CO THEN HPLOT TO Xx,
YY: GOTO 970
HPLOT xXx, YY
IN = 1
Tmt + Ors IF (5 = Tt)
T2) < = 0 GOTO 920
GOT
* (7 -
990 IN 0: IF PM = 0 GOTO 1010
1000
Showing the first 100000 of 255679 characters.