Text content (OCR)
. La revue francophone indépendante pour les utilisateurs des
1 Apple J[+, //e, //e+, //c™ et Macintosh™
@ Du graphique en Turbo Pascal sous CP/M
© Routines binaires et carte langage
@ Le Jeu de la Vie sur le Macintosh
@ Le //c composeur téléphonique
@ Vos listings Basic formatés
@ Routine de saisie sur Mac
@ Vos impots sur Multiplan
@ Désassembleur 65C02
@ Rubrique MacAstuces
@ Marche arriére Basic
@ Patches au DOS 3.3
@ Une UNIT Pascal
@ SoftCopie ProDOS
@ Undécruncher
NUMERO 23. - PRIX 40 F
. ('M2366-23-40 F
ISSN : 0294-6068
ISSN 0766-4915
-BONDECOMMANDE =——s—™ —
@ retourner @ INFOMAG, 5 place du Colonel Fabien, 75491 Paris cedex 10
OUI je désire m’abonner pour 7 numéros & INFOMAG au prix de 215 F
Je désire recevoir, au prix de 35F l'un. Dlenuméro! Ollenuméro2 Cle numéro3
Je vous adresse mon reglement por cheque bancaire & ordre de INFOMAG zy
fm NOM PRENOM
Os eet elisa ee ee
DECEMBRE 85 N° 3
Editorial re:
Hervé Thiriez Page 5
Le Turbo Pascal
Nicolas Montsarrat
ae) pe
Page 6
Jeu de la vie
Dominique Bernardi
Page 40
Un composeur sur
Routine de saisie
en Basic Gérard Michel
Ses]
Page 48
Mac 4
ee
Astuces Page 51
eile Erne
Bruno Fénart Page 9
GENUTILE
<= pe Jean-Claude Lengrand
el] 7e
=) Ss) es Page 11
Impéts sur Multiplan
Christian Piard
ee
Un formateur de
listing Basic — Sylvie Gattet
S a.
Bruno Fénart
——J Page 57
Retour dans le Basic
Halte aux Scrolls Gites
Caraux
(it+} [ve l We
—_—_—_>_ _ — Page 61
+} [ve
(eas) ( ee it Page 17
Navette Jean-Paul Arbel
Ie) [vel] py
ss) (es) = Page 24
Un “Décruncher”
ie 7, Patrice Neveu
e
== i ey Ec Page 28
Patches au DOS 3.3
6 > Patrice Ne
Or) 7/e]| IE] atrice Neveu
Un Désassembleur
65 C 02 Yvan Koenig
(} [ve]]
Ss) =) Page 35
(es) (es) ee] Page 66
Courrier GS
des Lecteurs Page 69
Micro- a}
informations Page 70
Les annonceurs :
Apple : pages 31, 38 et 39. IEF : page 75. Infomag : page 2. Ordinateur Individuel : Page 76.
Editions MEV - 12, rue d'Anjou - 78000 Versailles. Directeur de la publication : Hervé Thirlez
Pom's n° 23
Des le 20 Avril :
LE RECUEIL 3
s9a12 de Pom's
Le recueil n°3 : quatre La de Pom's
Le recueil n°3 : listings“
Le recueil n°3 : plus de cinquante programmes
Le recueil n°3 : une référence/indispensable
eS 7
Maisie ee
Recueil 3 (regroupant les numéros 9-12 de Pom's) : 140,00 F TTC franco
Disquettes d'accompagnement 9 a 12 (J[+, /e, //e+,//c) : 190,00 F TTC franco
Bon de commande page 74
L'Editeur Plein Ecran
=PI= version 5.0
Vous permet toujours de :
* lister vos programmes Basic en avant et en arriére ;
* modifier, insérer, effacer des caractéres en plein écran sans relire les lignes ;
* rechercher toute chaine de caractéres ;
* choisir vous-méme les codes de contréle d'EPE.
mais il fonctionne maintenant :
t+ sous DOS- + en 40 colonnes - sur Apple ][+ ~- sur Apple //e+
+ sous Prodos - en 80 colonnes ~ sur Apple //e_ + sur Apple //c
EPE version 5.0 ; 200,00 F TTC franco
Echange ancienne version contre version 5.0 : 80,00 F TTC franco
bon de commande page 74
E
H
H
i
i
i
t
H
t
t
gee eeennenenenenee
7
>
Pom's n° 23
Editorial
Ce numéro de printemps, outre ses treize programmes, vous présente deux
nouveautés : le recueil n°3 d’abord, qui regroupe les numéros 9 a 12 de Pom's. Il
vous séduira particuliérement pour ses listings sortis sur la LaserWriter (toujours la
communication entre Apple // et Mac !). Une soixantaine de programmes et plus de 200
pages : une mine de renseignements a portée de main.
Deuxiéme nouveauté : E.P.E. 5.0. Nombre d’entre vous avait en effet pris la plume
pour déplorer l'impossibilité d’éditer avec E.P.E. sous ProDOS en 80 colonnes. Des
aujourd'hui, cette nouvelle version est disponible, et elle fonctionnera également sur
votre IIc.
Vous n’avez pas E.P.E. ? au prix de 200,00 F, c'est un éditeur sans égal.
Vous avez E.P.E. ? retournez-nous la disquette originale, nous la mettrons a niveau au
prix de 80,00 F.
Depuis plus de deux années (Pom’s n° 9), vous trouviez les disquettes
d'accompagnement Apple // @ 55,00 F ou 4 280,00 F par abonnement : elles resteront
sans concurrence, mais nous devons avouer que nous étudions une ‘remise a jour’ de ces
prix. Ne tardez pas a renouveler votre abonnement !
Pascal et Turbo Pascal, CP/M, DOS et ProDOS, assembleur et Basic, 6502, 65C02 et
68000 : vous trouverez certainement ce numéro trés riche ; vos contributions nous
montrent que vous étes particuliérement actifs devant vos claviers. Dans le numéro 24
probablement, vous trouverez le trés beau fruit de cette activité sous la forme d'un
programme en CP/M, CP/M que nous avions quelque peu délaissé.
Nous vous donnons rendez-vous au Sicob Boutique, du 14 au 19 avril, stand 2A203
et n‘oubliez pas notre petit questionnaire page 73 !
Hervé Thiriez
Ont collaboré A ce numéro : Jean-Paul Arbel, Alexandre Avrane, Jean-Luc Bazanegue, Dominique Bernardi, Gilles
Caraux, Gaétan Dagron, Delphine Declercq, Alexandre Duback, Bruno Fénard, Sylvie Gallet,
Jean-Michel Gourévitch, Olivier Herz, Jacques Honorez, Berard Hoyez, Yvan Koenig, Niels
Kgge, Jean-Claude Lengrand, Gérard Michel, Nicolas Montsarrat, Jean-Luc Nail, Patrice
Neveu, Christian Piard, Hervé Thiriez.
Directeur de la publication, rédacteur en chef : Hervé Thiriez.
Rédacteurs : Alexandre Avrane, Olivier Herz.
Sigge social : Editions MEV - 12, rue d'Anjou - 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ée 4 Apple Computer, Inc. ni & Apple Computer France S.A.R.L.
Apple, le logo Apple, Mac et le logo Macintosh sont des marques dépos¢es d'Apple Computer, Inc.
Pom's n° 23
whe?
Nicolas Montsarrat
ommercialisé en France
par FRACIEL - 42, rue
des Prébendes - 37000
TOURS au prix de
625,00 francs HT (soit 741,25
francs TTC) dans sa version
CP/M, le TURBO-PASCAL est
un des meilleurs compilateurs
Pascal disponibles sur Apple ][+,
He et //c. Le systeme comporte le
compilateur TURBO.COM rési-
dant en mémoire centrale, avec
éditeur incorporé, le programme
d'installation TINST.COM,
TLIST.COM qui liste les
fichiers-source, ainsi qu'un petit
tableur de démonstration nommé
“Microcalc”.
Le systéme
TURBO-PASCAL
Aprés avoir appelé TURBO
-COM, le programme propose un
menu permettant d'éditer un
fichier-source, de le compiler, de
l'exécuter, de le sauver. II
propose quelques commandes de
manipulation des disquettes
(catalogue, appel d'un programme
extéricur, ctc.), et des commandes
diverses (compilation en mémoire
centrale ou sur disquette, adresse
de départ du programme
objet,...).
L'Editeur
L'éditeur reprend la majorité des
commandes de WORDSTAR, le
traitement de texte bien connu
tournant sous CP/M. Outre les
commandes de contréle du
curscur, on y trouve des
commandes de déplacements et de
copie de blocs de texte, de
recherche et de remplacement,
ainsi que de mise en place du
systéme de _ tabulation
automatique.
La place disponible pour les textes
est d'environ 22 Ko sous CP/M
60Ko et de 18 Ko sous CP/M
56Ko. C'est largement suffisant
pour les programmes de taille
moyenne, d'autant plus que le
compilateur permet de compiler
des programmes dont le source
est composé de plusieurs fichiers
(“include files”)
Cet éditeur est pratique & utiliser,
rapide et puissant. Un petit défaut
toutefois : pour les possesseurs
d'Apple J[+, il y a des problémes
de reconnaissance de la vidéo
inverse sur certaines cartes 80
colonnes destinées au ][+ (Par
exemple la carte U-Term), en
particulier le curscur n'est pas
visible a l'écran, ce qui n'est pas
sans poser quelques problémes...
Pour les cartes 80 colonnes des //e
et //c, aucun probléme.
Le Compilateur
Le compilateur, résident en
mémoire centrale, est sirement le
compilateur Pascal le plus rapide
disponible sur Apple : Il compile
les programmes en une seule
passe, directement en code
machine (et non en code-P comme
le Pascal UCSD). Deux options
sont proposées : la compilation en
Une application
mémoire, oi le code et le source
résident en mémoire, et la
compilation sur fichier COM, oi
seul le source est en mémoire.
Cette deuxiéme possibilité permet
de compiler des programmes dont
le source est trop important pour
laisser de la place au code, ou
simplement pour obtenir un
fichier exécutable indépendant du
systtme TURBO-PASCAL.
La vitesse d'exécution des fichiers
objet est également impres-
sionante : un petit peu plus d'une
seconde pour une boucle de 1 a
10000, contre 8 pour le Pascal
UCSD, bien que le code généré
soit du code Z80, plus lent que
l'équivalent 6502.
En conclusion, un compilateur
simple 4 utiliser, dont les
performances sont inégalées sur
Apple.
Le langage Pascal
proprement dit
Le TURBO-PASCAL reprend
toutes les caractéristiques du
Pascal standard, plus quelques
extensions :
Le type BYTE permet de définir
des nombres entiers entre 0 et
255, n'occupant qu'un seul octet
en mémoire. Les conversions en
INTEGER se font automa-
tiquement, sans générer d'erreurs.
Le type REAL définit les nombres
réel entre 1 38 et 1*3® sur une
mantisse de 11 chiffres, on est
loin des maigres 6 chiffres du
Pascal UCSD.
Pom's n° 23
Les chaines de caractéres sont
présentes, avec le type STRING
et les instructions DELETE,
INSERT, STR, VAL et les
fonctions COPY, CONCAT,
LENGTH, POS.
Les types énumérés (par exemple
VAR HUMAIN : [HOMME,
FEMME)]) sont utilisables,
contrairement au Pascal UCSD,
sans écrire de routines de
conversion : ainsi on peut écrire
WRITELN (HUMAIN) et on aura
a l'écran "HOMME" ou
"FEMME" en toutes lettres. De
méme pour READLN
(HUMAIN), qui attend les
caractéres HOMME ou FEMME.
Les "TYPED CONSTANTS"
permettent de forcer le type d'une
constante. Ainsi on peut définir
CONST CR : CHAR = *M qui
définit le caractére ‘Retour
chariot’. On peut utiliser ces
constantes comme paramétres de
procédures de _ fonctions,
contrairement a certaines
constantes normales. On peut de
méme les utiliser pour initialiser
des tableaux de constantes,
permettant de simuler les
READ/DATA du basic : on peut
définir CONST DEUX : ARRAY
[0.7] OF BYTE =
(1,2,4,8,16,32,64,128), et
manipuler DEUX comme un
tableau (voir programme
GRAPHIC).
La gestion des fichiers est
comparable 4 la gestion UCSD,
avec fichiers séquentiels et
fichiers directs. Comme en Pascal
UCSD, on accéde aux
périphériques par des fichiers
portant le nom des ‘devices’
CP/M : “CON:” pour I'écran,
“KBD:” pour le clavier sans écho,
“LST:” pour l'imprimante,
“AUX:” pour la carte série, etc.
On trouve également les
UNTYPED FILES du Pascal
UCSD, qui permettent d'accéder a
des fichiers CP/M par blocs de
128 octets.
Toutes les procédures de gestion
de l'écran sont présentes, avec
vidéo inverse (sur //e et //c) et
contréle du curseur.
Dans la version CP/M, on peut
définir des variables A une
position absolue en mémoire
(directive ABSOLUTE, voir
programme GRAPHIC), chainer
des programmes, et appeler des
sous programmes en assembleur :
il suffit d'insérer les codes
hexadécimaux de la routine.
Quelques restrictions : pour
optimiser la vitesse d'exécution,
le Turbo Pascal ne génére de code
pour les appels récursif que sur
demande de l'utilisateur par
loption {$A+}, et n'effectue la
vérification des indices de tableau
qu'avec l'option {$X+}.
Les limites
On peut faire au Turbo Pascal
deux reproches principaux :
« dans la version Apple CP/M, il
n'y a aucune gestion possible
des graphiques. On peut lever
cette barritre partiellement
(voir programme GRAPHIC),
mais les routines ne seraient
trés performantes qu'en
assembleur ;
+ il n'y a pas de possibilité de
créer des ‘librairies’ et des
‘unités’ : la seule entité
compilable est un PROGRAM.
On ne peut donc pas créer de
gros programmes, séparés cn
modules d'une dizaine de Ko
s'appelant les uns les autres.
Conclusion
On I'a vu, le TURBO-PASCAL
posséde des performances
€poustouflantes en compilation et
en vitesse d'exécution. Les
débutants pourront l'utiliser de
maniére beaucoup plus pratique
que le Pascal UCSD pour se
former, le dialogue avec
l'utilisateur étant trés intéractif, et
les attentes nettement moins
longues... L'utilisateur chevronné
pourra s'en servir pour exécuter
des programmes plus rapidement,
la conversion depuis le systéme
UCSD étant relativement aisée
avec un programme comme
UNIVERSAL FILE CONVER-
SION.
—a
G
Programme ‘GRAPH.PAS’
Le signe — indique que le retour chariot précédent ne doit étre saisi. Il ne sert
qu’a la mise en page.
PROGRAM GRAPHIC;
{Pour executer ce programme, il faut le compiler en Option C
OM et demander une START ADDRESS de $5000. apres compilatio
n, quitter Lurbo pascal et executer le programme sous CPM)
{ATTENTION en mode graphique,
i de WRITELN)
il ne faut pas fairede WRITR n
CONST DEUX:ARRAY[0..7) OF BYTE=(1,2,4,8, 16,32, 64,128);
TYPE PA-PACKED ARRAY[0..1] OF 0..255;
MAGIC=RECORD
CASE BOOLEAN OF
TRUE: (INT: INTEGER) +
FALSE: (PTR: *PA);
END;
VAR ECRAN: PACKED ARRAY[0..8191] OF BYTE ABSOLUTE $3000;
A, RtREAL?
OX, OY, X, Ys INTEGER;
FUNCTION PEEK (X: INTEGER) : INTEGER;
VAR C:MAGIC;
BEGIN
C.INT:=X;
PEEK: =C.PTR*[0]
Pom's n° 23
\
EEK ($E050) +P
BEGIN
A:=PEEK (SE051) +P.
CLRSCR;
END?
PROCEDURE HGR;
BEGIN
GRAFIXON;
FILLCHAR (ECRAN, 8192, 0)
END?
PROCEDURE PLOT (X, Y: INTEGER) ;
VAR D, I: INTEGER;
BEGIN
D:=¥ MOD 64;
T:=1024*(D MOD 8)+128*(D DIV 8)+40*(¥ DIV 64)+(XDIV 7);
ECRAN[I} :=ECRAN[I] OR DEUX[X MOD 7]
END?
PROCEDURE LINE (X1,Y1,X2, Y2:
VAR XT, TX, XX,X, ¥:REAL;
C. I: INTEGER:
+ POKE(SE00D, 0);
BEGIN
IF X1>X2 THEN BEGIN
Cr=X1z; X1i=X2; X2:-C;
Cr=¥1; Y1:=¥2; Y2:=¢
END;
IF X1=xX2 THEN
IF Y1<Y2 THEN FOR I
ELSE FOR I
ELSE IF Y1=Y2 THEN FOR I2=X1
ELSE BEGIN
TX2=(Y2-Y1) / (X2-X.
IF XT>1 THEN XT
atxXT?
REPEAT
PLOT (TRUNC (X) , TRUNC (Y) ) 7
Xs=X4+XT Ys=Y+XX
UNTIL X>Xx2
END
END;
BEGIN
HGRe
Ri=0.0; Az=07 OX2=140; OY:=95;
REPEAT
X:=TRUNC (140+R*COS(A)); Y:=TRUNC(9O+R*SIN(A))7
LINE (OX, OY, X,Y)? OX:=X;
Rz=R+1.5; Az=At1.5533;
UNTIL (R>95) OR KEYPRESSED;
READLN; TEXT
END.
Une application
Une des limitations du
TURBO-PASCAL est de
ne pas permettre la
gestion des graphiques.
Ce petit programme y
remédie, de facon
rudimentaire car ses
performances ne sont
pas celles d'une routine
en assembleur.
Pour transférer le programme de
la disquette Pom's vers une
disquette CP/M sous le nom
GRAPH.PAS, il est nécessaire
d'avoir UNIVERSAL FILE
CONVERSION (dans le cas
contraire, 4 vos claviers !). Il faut
donc transférer le fichier
GRAPH.PAS puis passer sous
CP/M et faire un REN
GRAPH.PAS=GRAPHPAS.
Ensuite, passer sous TURBO
PASCAL, puis compiler le
programme en option COM FILE
en spécifiant une START
ADDRESS de $5000.
Le programme lui-méme trace un
petit dessin de démonstration, un
carré qui tourne. Les procédures
utilisables sont :
HGR passe en mode graphique et
efface l'écran.
GRAFIXON passe en mode
graphique sans effacer I'écran.
TEXT passe en mode texte.
PLOT(X,Y) met un point en
X,Y 4 l'écran
LINE(X1,Y1,X2,Y2) trace
une ligne entre X1,Y1 et X2,Y2.
Attention, une restriction : il ne
faut pas faire de WRITE ni de
WRITELN en mode graphique,
sous peine de plantage...
8
Pom's n° 23
sup le //c
es propriétaires d'un
Apple //c ont sans doute
été dégus en s'aperce-
vant que le programme
de Bernard Hoyez et Jean-luc Nail
permettant de composer automati-
quement un numéro de téléphone
(Pom's n° 22), ne pouvait pas
fonctionner sur leur machine.
Qu'ils se réjouissent, voici une
version d'AGENDA et de
COMPOSEUR qui permet de
l'adapter 4 votre machine favorite.
Pour cela, on utilisera le port série
n° 2 "consacré" normalement au
modem et plus particuligrement le
niveau logique DTR "Data
Terminal Ready", qui se trouve
sur la broche 1 du connecteur
(voir schéma). La valeur de cette
sortie est soit -12V soit +12V.
C'est cette sortie que l'on va
utiliser 4 la place de ANO pour
commander le relais, bien que les
valeurs de ANO soient 0 et +5V.
Pour protéger le transistor on
rajoutera une diode en dérivation.
Pour l'alimentation, la meilleure
solution est d'utiliser une pile (de
4,5 ou 9 volts suivant le relais
utilisé). Le reste du schéma est
identique.
Pour commander le niveau de la
broche DTR, il faut utiliser le
tegistre de commande du port
considéré (adresses : Port 1 =
$CO9A - Port 2 = $COAA).
Suivant la valeur de ce registre,
DTR et par suite la tension de la
broche 1, passe d'un niveau a
l'autre (voir le tableau).
Les modifications 4 apporter au
programme AGENDA sont les
suivantes :
380 POKE 49322, 8 Prise de ligne
550 POKE 49322,0 Coupe la ligne
N CO POSeUlR Bernard Hoyez,
Jean-Luc Nail,
Bruno Fénart
—
Connecteur 4 150 Q
Port série n° 2 12
2N2219
Schéma de branchement
Broche | Portl I Port2 | Signification |
1 DTRI DTR2 Data Terminal Ready Sortie
2 TDI TD2 Transmit Data Sortie
3 GND GND Masse mécaniquelsignal “
4 RDI RD2 Read Data Enwée
5 DSRI DSR2 Data Set Ready Entrée
Les broches du connecteur série
Adresse Adresse
jhexadécimale décimale
Port! SCO9A 49306
Port2 $COAA 49322
Octet: 17}615)41/3}2]1]0
Valeur du —— Tension
Registre | | RTS | Broche 1
$00 00 Haut -12V
504 Ol Bas +12V
$08 10 Bas +12V
SOE 11 Bas +12V
Signification des bits du registre de commande
Pom's n° 23
‘Oo
5 30 ONERR GOTO 3/0 340 CALL - 868: PRINT T$(I,1),TS(I,
Pour COMPOSEUR:S voir le 100 PRINT " COMPOSITION AUTOMAT 2
listing du nouveau source. IQUE DE" 350 coro 250
Remarque : on a utilisé le port 210 Priwr ~ NUMERO TELEPHON 360 XS - T9(I,2)
n° 2, pawl le pot a ral ar nratt 20 ee CHRS (4) :"BLOADCOMPOSEOR' AE pee vga Sele ae di
fe: nn . 1 Ss 2” f Bs rise de ligne
de changer l'adresse du registre 230 DIM T$(100,2) 390 FOR I ~ 1 70 700: NEXT I
de commande. 140 N= 0 400 Home
ibli. ie: 150 N= + t "JE COMPOSE LE NUM
Bibliographie : The Apple /Ic a ge ac 410 ee PRINT "JE
Reference Manual - Volume 1. 70 READ TS(N,J) 420 FORI-1 TO LEN (X$)
180 NEXT J 430 A= ASC ( MIDS (X$,I,1)) + 128
Co 190 GOTO 150 440 POKE 7,4
200 VTAB (8) 450 CALL 768
210 PRINT “UTILISEZ LES FLECHES “;: 460 PRINT CHRS (A);
INVERSE : PRINT "=>";: NORMAL 470 FORT = 1 TO 600: NEXT T
PRINT " ET “;: INVERSE : PRINT “ 480 NEXT I
<=": NORMAL 490 HTAB 1: VTAB 5: PRINT “DECROCHEZ
220 PRINT "POUR SELECTIONNEK LE NOM LE COMBINE, MAINTENANT..."
Programme DE L'ABONNE" 500 VTAB 8: PRINT ".... AVANT"
‘ » 230 - PRINT : PRINT “VALIDEZ AVEC TAT 510 FORI = 400 701 STEP ~1
‘AGENDA OUCHE RETURN™ 520 VTAB (15): HTAB (11)
2401-0 530 PRINT INT (I / 50);" SECONDES"
10 REM ***COMPOSEUR DE NUMERO*** 250 GET AS 540 NEXT I
20 REM * par * 260 Ab = ASC (AS) 550 POKE 49322,0: REM Coupe
30 REM * Bernard HOYEZ * 270 IF A#< > 13 AND At < > 21 AND 560 GOTO 580
40 REM * et Jean-Luc NAIL " AS < > 8 THEN 260 570 IF PEEK (222) = 42 THEN 200
50 REM heveesesanessessesee ey 280 IF A& = 13 THEN 360 580 HOME + RESTORE
60 REM ==>ENTRER LES NOMS ET LES NUM 290 IF At = 21 THENI=-I¢2 590 PRINT *. PRET POUR UN AUTRE APP
EROS EN DATA A LA SUITE DES AUTR 300 IF At = 8 THENI =I -1 EL ...": GOTO 140
ES 310 IF I>N-1THENI=N-1 600 DATA RENSEIGNEMENTS, 3612
TE BN SHARAN SRT ESE SEER TS ESEy 320 IF I< 1 THENI = 1 620 DATA AUTRES RENSEIGNEMENTS, 3611
80 HOME 330 VTAB 15 630 DATA JULIETTE, 12345678
Source 21 LDA CHIFFRE 45 STY COMREG
22 CMP #"0"-1 46 JSR WAIT
‘COMPOSEUR.S’ # ace ERROR ‘7k toe
24 CMP #"9"+1 48 Loy #08
Assembleur Big Mac 25 BCS ERKOX 49 STY COMREG
PA 50 JSR WAIT
1 Aeneabankeahantanenenanean 27 AND #41112 51 ser
2e * :filtrage
3° Composeur * 28 BNE COMPOSE
4% * 29 LDA #10
5 tenernennnannetnenensnnene ;CHIFFRE=0 => <A>=10
6 30 COMPOSE TAX . .
7 #8 novembre 85 x Récapitulation
é 32 BOUCLE = Ls 7 i
9 33 JSR PULSE OMPOSEUR
10 * ADRESSE 34 DEX
11 35 BNE BOUCLE Apres avoir salsi ce code sous
12 COMREG = $COAA ;Port 2. 36 RTS moniteur, vous le sauvegarderez par
$C09A pour le port 1 37 BSAVE COMPOSEUR,A$300,L$32
13 WAIT SFCA8 38 ERROR = #
14 CHIFFRE 7 see n’etait pas un chiffre 0300- AS 07 C9 AF 90 12 C9 BA
15 RRRFUR = & 39 LDA #SFF 0308- BO OE 29 OF DO 02 A9 OA
16 40 STA ERREUR 0310- AA 20 1D 03 CA DO FA 60
17 ORG $300 4 RTS 0318- A9 FF 85 08 60 A9 9F AO
18 42 0320- 00 8C AA CO 20 AB FC Ag
19 ENTREE = * 43 PULSE LDA #159 0328- 6C AO 08 BC AA CO 20 AB
20 44 Lby #$00 0330- FC 60
Dés le 20 avril, dans votre bibliothéque :
Le Recueil 3
Pom's n° 23
ENUTILE est un
ensemble de PROCE-
DUREs et FUNC-
TIONs d'intérét général
constituant une INTRINSIC
UNIT au sens du compilateur
PASCAL, et qui est incorporé a la
SYSTEM LIBRARY sous les
numéros de SEGMENTs 16
(programme) et 17 (données).
GENUTILE définit un TYPE
CHOIDECA:SET OF CHAR, et
une variable ALFANUM de ce
type. ALFANUM désigne
l'ensemble des caractéres
alphanumériques depuis " "
(espace) jusqu'a "~" (caret).
GENUTILE deéfinit diverses
variables de TYPE CHAR qui,
lorsqu'elles sont envoyées sur
OUTPUT, ont I'effet suivant :
SON émet un BIP
BS recul du curseur
EFL efface la fin de ligne
EFB efface le bas de I'écran
INV met l'affichage en mode
inverse
NORM «et I'affichage en mode
normal
CR envoie le curseur 4 la
ligne
HOME efface I'écran ou va a la
page
GENUTILE définit aussi ESC et
FLD (fléche droite) de TYPE
CHAR. Toutes ces variables sont
définies comme le CHR( ) de 7,
8, 29, 11, 18,20, 13, 12; 27,.21
respectivement.
PROCEDURE
PRENRETURN
Attend qu'un <RETURN> ait été
frappé au clavier.
Programme ‘GENUTILE’
* LENGRAND, LE 9/12/82 *)
Gil)
(*ss+*)
UNIT GENUTILE; INTRINSIC CODE 16 DATA 17;
INTERFACE
TYPE CHOIDECA=SET OF CHAR;
VAR BS, SON, EFL, EFB, INV, NORM, CR, ESC, FLD, HOME: CHAR;
ALPANUM :CHOTDECA;
PROCEDURE PRENRETURN;
FUNCTION PRENCAR (BONSET:CHOIDECA) :CHAR;
FUNCTION OUI:BOOLEAN;
PROCEDURE MESSAGE (Y: INTEGER; S: STRING) ;
PROCEDURE ALARME (S:STRING) ;
PROCEDURE PRENCHAINE (LONGMAX: INTEGER; BONSET: CHOIDECA;VAR S:STRING) ;
PROCEDURE ENTIER (LONGMAX: INTEGER; VAR S: INTEGER) ;
PROCEDURE CONTINU (Y: INTEGER) ;
PROCEDURE ALITEXT (LONGMAX: INTEGER; S:STRING) ;
PROCEDURE SATSTE(X, Y, LONGMAX: INTEGER; BONSET : CHOIDECA; LIBELLE: STRING;
VAR $:STRING) ;
FUNCTION PEEK (ADRESSE: INTEGER) : INTEGER;
PROCEDURE POKE (ADRESSE, CONTENU: INTEGER) ;
PROCEDURE ERROR (L: INTEGER; VAR S:STRING) 7
PROCEDURE VALBOOL(£1STRINC; VAR N:BOOLEAN) ;
PROCEDURE VALREEL (S:STRING; VAR K:REAL) ¢
PROCEDURE, TRING; VAR K: INTEGER) ;
PROCEDURE OOLEAN; L: INTEGER; VAR S:STRING; VAR ERREUR: INTEGER) ;
PROCEDURE STRFTX(N:RFAT.21.,D:TNTRGER; VAR S:STRING; VAR ERREUR: INTEGER) :
PROCEDURE STRFLOT(N:REAL;L,D+:INTECER; VAR $:STRING; VAR ERREUR: INTEGER);
PROCEDURE STRENT (N, L: INTEGER; VAR S:STRING; VAR ERREUR: INTEGER) ;
IMPLEMENTATION
PROCEDURE PRENRETURN;
VAR SORT :CHAR;
BEGIN
REPEAT
READ (KEYBOARD, SORT)
UNTIL EOLN (KEYBOARD)
END;
FUNCTION PRENCAR;
VAR CH CHAR;
BON :BOOLEAN;
BEGIN
REPEAT
READ (KEYBOARD, CH) ;
IF EOLN(KEYBOARD) THEN CH:=CR;
BON:=CH IN ONSET;
IF NOT BON THEN WRITE (SON)
ELSE IF CH IN [' '..'*"] THEN WRITE (CH)
UNTIL BON;
PRENCAR:=CH
FND;
FUNCTION OUI;
BEGIN
OUI:=PRENCAR(['Y', '0', 'N']) IN ['¥', '0']
END;
PROCEDURE MESSAGE;
BEGIN
Jean-Claude Lengrand
Pom's n° 23
FUNCTION PRENCAR
(BONSET:CHOIDECA):
CHAR
Renvoie un caractére frappé au
clavier. Ce caractére doit faire
partie de BONSET, défini
préalablement comme un SET OF
CHAR, sinon, émct un BIP et
attend un autre caractére.
FUNCTION
OUI:BOOLEAN
Attend un caractére au clavier et
renvoie TRUE s'il s'agit de O ou
de Y et renvoie FALSE s'il s'agit
de N. Emet un BIP et attend un
autre caractére dans tous les autres
cas.
PROCEDURE MESSAGE
(Y:INTEGER;S:STRING)
Ecrit le message S A partir du
début de la ligne Y (0<Y<23) et
efface la fin de la ligne. Le
curseur reste immédiatement aprés
le message.
PROCEDURE
ALARME(S:STRING)
Efface l'écran sauf la lére ligne,
affiche le message S et attend un
<RETURN>.
PROCEDURE
PRENCHAINE
(LONGMAX:INTEGER;
BONSET:CHOIDECA;
VAR S:STRING)
Saisit au clavier la chaine S, avec
limitation 4 LONGMAX carac-
téres choisis dans BONSET. Si
l'on répond par un simple
<RETURN>, la valeur précédente
de S est conservée. La correction
par la fléche gauche (BS) est
permise.
PROCEDURE
ENTIER(LONGMAX:
INTEGER; VAR
S:INTEGER)
Saisit au clavier l'entier positif S,
avec limitation 4 LONGMAX
caractéres choisis dans '0'..'9'.
Si l'on repond par un simple
<RETURN3, la valeur précédente
GOTOXY (0, ¥) ;WRITE(S, EFL)
END;
PROCEDURE ALARME;
BECIN
GOTOKY (0, 1) ; WRITE (SON, EFB)
MESSAGE (10, 5)7
MESSAGE (12, 'FAITES <RETURN> ');
PRENRETURN
END;
PROCEDURE PRENCHAINE;
fo
(* SAISIT UNE CHAINE DE CARACTERES AVEC
LONGURUR MAXT ET VALEUR PAR DEFAUT *)
(a)
VAR S1 STRING [1];
CONT :STRING;
BEGIN
Sl:e!
cont:
REPEAT
IF LENGTH (CONT) =O THEN $1[1] :=PRENCAR (BONSET+[CK])
ELSE IF LENGTH (CONT)=LONGMAX THEN S1[1] :=PRENCAR([CR, BS})
ELSE S1/1]:=PRENCAR (BONSET+/CR, BS) ;
IF $1[1] IN BONSET THEN CONT:=CONCAT (CONT, $1)
ELSE IF $1[1]-BS THEN
BEGIN
WRITE(BS,' ', BS);
DELETE (CONT, LENGTH (CONT) , 1)
END;
UNTIL $1[1]=CR;
IF LENGTH (CONT) <>0
THEN S:=CONT
ELSE WRITE (S)
END;
PROCEDURE ENTIER;
eg
(* SAISIT UN NOMBRE ENTIER POSITIF *)
a)
VAR $1 :STRING/11:
I INTEGER;
CONT :STRING;
OKSET :CHOIDECA;
BEGIN
OKSET:=['0'..'9"]¢S1:=" ";CONT:=""2
REPRAT
IF LENCTH (CONT) -0 THEN £1{1]:~PRENCAR (OKSET) [CR])
ELSE IF LENGTH (CONT) =LONGMAX THEN SI [1] :=PRENCAR([CR,BS})
ELSE S1|1) :=PRENCAR (OKSET+|CR,BS]);
IF S1[1] IN OKSET THEN CONT:=CONCAT (CONT, 51)
ELSE IF $1[1]=BS THEN
BEGIN
WRITE (BS, ' ', BS);
DELETE (CONT, LENGTH {CONT}, 1)
END;
UNTIL $1[1]=CR:
IF LENGTH (CONT) <>0 THEN
BEGIN
Si=0;
FOR I:=1 TO LENGTH (CONT) DO
BEGIN
S!=8*10;S!=S+ (ORD (CONT[T])-ORD('0'))
END;
END ELSE WRITE (S)
END;
PROCROURE. CONTINU:
ony
(* INVITE L‘OPERATEUR A CONTINUER *}
cry
BEGIN
WRITE (INV) 2
MESSAGE (23, "FAIRE <RETURN>POUR CONTINUER') ;
WRITE (NORM)
PRENRETURN;
GOTOXY (0, ¥);
WRITE (EFS)
END;
(aa
PROCEDURE ALITEXT;
Pom's n° 23
de S est conservée. La correction
par la fléche gauche (BS) est
pemmise.
PROCEDURE
CONTINU(Y:INTEGER)
Affiche sur la derniére ligne de
l'écran une invitation 4 frapper
<RETURN> pour continuer,
attend <RETURN3>, envoie le
curseur en (0,Y) et efface le bas
de l'écran.
PROCEDURE
ALITEXT(LONGMAX:
INTEGER;S:STRING)
Affiche le texte S cadré 4 gauche
sur LONGMAX positions, aprés
troncature si nécessaire.
PROCEDURE
SAISIE(X,Y,LONGMAX:
INTEGER;BONSET:
CHOIDECA;LIBELLE:
STRING);VAR S:STRING)
Méme fonction que PREN-
CHAINE, mais avec écriture de
LIBELLE au point de l'écran
(X,Y), juste avant la saisie. La
valeur par défaut est affichée
pendant la saisie, elle est
éventuellement tronquée a
LONGMAX caractéres.
FUNCTION
“PEEK(ADRESSE:
INTEGER)
Renvoie le contenu décimal de la
mémoire ADRESSE.
PROCEDURE
POKE(ADRESSE,
CONTENU:INTEGER)
Met CONTENU dans la mémoire
ADRESSE, Aucun test n'est
effectué sur la valeur des
paramétres. C'est une procédure a
utiliser avec précaution.
PROCEDURE
ERROR(L:INTEGER;VAR
S:STRING)
Remplit une chaine S de longueur
Lavec L astérisques.
cn)
(* EDITE UNE CHAINE CADREE A GAUCHE *)
(#4)
BEGIN
IF LENGTH (S)>LONGMAX THEN $:=COPY(S, 1, LONGMAX) ;
WRITE (S, '' :LONGMAX-LENGTH (5) )
END;
ry
PROCEDURE SAISIE;
£9)
(* SAISIT UNE CHAINE DE CARACIERES EN UN POINT DONNE
DE L'ECRAN, AVEC LONGUEUR MAXI ET VALEUR PAR DEFAUT *)
(4)
BECIN
IF LENGTH (S)>LONGMAX THEN S:-COPY(S, 1, LONGMAX) ;
GOTOXY (X, ¥) {WRITE (LIBELLE) ALITEXT (LONGMAX, S) ;
GOTOXY (X+LENGTH (LIBELLE) , ¥) ;
PRENCHAINE (LONGMAX, BONSET, S) :
WRITE ('' : LONGMAX-LENGTH (S)}
END;
FUNCTION PEEK;EXTERNAL;
PROCEDURE POKE; EXTERNAL;
on
PROCEDURE ERROR;
cn)
(* REMPLIT UNE CHAINE S DE L ASTERISQUES *)
cr)
VAR I: INTEGER;
BEGIN S:='*;
FOR I:=1 TO L DO S:=CONCAT('*',S);
END;
(7a)
PROCEDURE VALBOOL;
Cr
(* CONVERTIT UNE CHAINE EN BOOLEEN *)
(e#)
REGIN
IF LENGTH (5) <>0 THEN
CASE S[1] OF
oy
PROCEDURE VALREEL;
ms
(* CONVERTIT UNE CHAINE EN REEL *)
(+4)
TYPE PARTIE~ (BLK, SGN, ENT, DEC, SEXP, EXPO) ;
VAR REGION PARTIE;
SIGNE, PUISS,I,L + INTEGER;
FAC REAL?
c CHAR;
PROCEDURE CALCULE;
VAR I: INTEGER;
BEGIN
IF PUISS<-37
THEN K:~0.0
ELSE IF PUISS>37
THEN K:=1,01E37
ELSE IF PUISS<O
THEN FOR I:=1 70 -PUISS DO
ELSE FOR I:
12K/10.0
70 PUISS DO K:-K*10.0
END;
BEGIN
K:=0.0;SIGNE:=1;FAC:=1.0;PUISS:=0;
REGION! ~BLK;L:~LENGTH (S) 7
IF L=0 THEN EXIT (VALREEL) ;
FOR I:=1 TO L DO
BEGIN C:=S/I1;
CASE REGION OF
BLK :BEGIN
EF NOT( CIN [' ','=") "64, 4.4, 10%. . 19" T) THEN EXIT (VALREEL) 7
CASE C OF
"+" :REGION: =SGN;
"= ':BEGIN
Pom's n° 23
PROCEDURE
VALBOOL(S:STRING;VAR
N:BOOLEAN)
Si S commence par Y,O,T,V,1,
rend N égal A TRUE.
Si S commence par N,F,0, rend
N égal 4 FALSE.
Laisse N inchange dans les autres
cas.
PROCEDURE
VALREEL(S:STRING;VAR
K:REAL)
Renvoie dans K la valeur réelle
représentée par la chaine S.
L'interprétation s'arréte dés que la
procédure trouve un caractére
inattendu, comme la fonction
VAL du BASIC. En particulier,
elle s'arréte sur le premier espace
rencontré. La forme avec
exposant est reconnue. le nombre
peut étre précédé de 1 ou
plusieurs espaces placés avant
tout caractére significatif. La
forme de l'exposant est libre. II
peut étre absent. Le point décimal
peut étre absent. Le nombre peut
étre précédé de un ou plusieurs
signes qui se combinent. Ex:
+-+3.14E sera interprété comme
-3.14 (exposant=0). S peut étre
une chaine vide. K vaut alors 0.
Une valeur absolue inférieure a
1E-37 est considérée comme
nulle. Une valeur absolue
supérieure 4 1E37 est prise égale a
1.01E37, un test sur la valeur
renvoyée peat permettre de
détecter un dépassement éventuel.
PROCEDURE
VALENT(S:STRING; VAR
K:INTEGER)
Remplit la méme fonction que
VALREEL, notamment pour la
reconnaissance d'un nombre sous
n'importe qu'elle forme, mais
renvoie la valeur entiére la plus
proche du nombre représenté. Les
entiers dont la valeur absolue
excéde MAXINT, soit 32767,
sont ramenés a +-32767.
PROCEDURE
STRBOOL(N:BOOLEAN;
L:INTEGER;VAR
S:STRING; VAR
ERREUR:INTEGER)
RECION:~SCN; SICNE:~-SICNE
END;
10%, 81%, 124, 13%, 489 (5%, 16 Ty 18%, 19" ZBEGIN
REGION: =ENT;
END;
"|. "REGION: =DEC;
K:=ORD (C)-ORD('0')
TF NOT ( CIN ['=', 18,824, 10".
STGNE;
Dit TE 2G 88%, 45S IE) NT BY, OF
19']) THEN EXTT(VALREEL) ;
BEGIN
REGION: =ENT;K:=SIGNE* (ORD (C)-ORD('0'})
END:
". ":RECION:=DEC;
END;
END;
ENT :BEGIN
IF NoT( CIN {2 , 1BY10"..
CASE C OF
". "SRECION:=DEC;
"BE" :REGION: SEXP;
WONG TAN, 1285 89 041 NDE, 1886 97% FON Oe
END;
END;
"9'}) THEN EXIT (VALREEL) ;
K1=K*10.0+SIGNE* (ORD (C)-ORD ("0")
IF NOT( CIN ['0"..'9','E"]) THEN EXIT(VALREEL);
CASE C OF
1B": REGION: =SEXP;
HON ITN 24 134, 48, ISH, F6N, DN, A
FAC:=FAC/10.0;
END;
END;
END;
SEXP :BEGIN
IF NOT( C IN ['-", "+", '0'.,
IF C=!'-' THEN SIGNE:
ELSE SIGNE
JE CIN ['0"..
REGION: =EXPO
END;
EXPO: REGIN
IF (NOT( CIN ['0'..
THEN BEGIN CALCULE;EXIT(VALREEL) END;
PUISS:=PUISS*10+SIGNE* (ORD (C)-ORD('0'})
END;
END (* CASE *)
END; (* FOR *)
CALCULE;
END;
(**)
PROCEDURE VALENT:
any
(* CONVERTIT UNE CHAINE EN ENTIER *)
ea
VAR X:REAL;
BEGIN
VALREEL (S, x);
IF ABS (X)>MAXINT
THEN IF X>0.0 THEN K:=MAXINT
ELSE K:=-MAXINT
ELSE K:=ROUND (X)
ENN;
Lei)
PROCEDURE STRBOOL;
ed
(* CONVERTTT UN ROOLERN EN CHATNE *)
(ny
VAR I: INTEGER;
BEGIN ERREUR:=0;
IF N THEN S:="VRAI'
ELSE S:='FAUX';
IF Lé1 THEN BEGIN ERREUR:~1;S:~'';EXIT(STRBOOL) END;
IF L>80 THEN L:-80;
IF L>4 THEN FOR I:= TO L DO S:=CONCAT(' ',S);
IF L<4 THEN S:=COPY(S,1,L)
(cae)
'9":BEGIN
-K+STGNE*PAC* (ORN(C)-ORN('0'))
'9"J) THEN EXIT(VALREEL)
'9'] THEN PUISS:=SIGNE* (ORD (C)-ORD(0") );
'91])) OR (ABS (PUISS)>MAXINT DIV 10)
Pom's n° 23
Tenvoie une chaine de longueur L
contenant VRAI ou FAUX,
€ventuellement tronquée ou cadrée
a droite, selon la valeur de N.
ERREUR prend la valeur 1 si
L<1, et 0 dans les autres cas.
PROCEDURE
STRFIX(N:REAL;L,
D:INTEGER:VAR
S:STRING;VAR
ERREUR:INTEGER)
Renvoie une chaine S de longueur
L représentant le nombre réel N
avec D décimales, en format
FIXE : -xxx.yy
Si L<3 ou D<0 ou L<D+2, on
obtient ERREUR=1.
Si le nombre est trop grand (/n/
>32767), on obtient l'erreur 2.
Si le nombre est trop grand pour
le nombre de caractéres total
imposé, on obtient I'erreur 3.
Dans les autres cas, ERREUR
reste nul.
Si L est supérieur 4 80, il est
considéré comme étant égal a 80,
sans que cela soit signalé.
Le nombre de décimales peut étre
réduit d'office par la procédure si
la partie décimale est représentée
par un entier superieur 4 32767.
Aucune erreur n'est alors
signalée, et le nombre total de
caractéres est respecté.
Si l'on est sir que le nombre est
positif, on peut ne pas prévoir de
place pour le signe.
PROCEDURE
STRFLOT(N:REAL;
L,D:INTEGER;VAR
S:STRING;VAR
ERREUR:INTEGER)
Méme fonction que STRFIX,
mais la chaine contient le nombre
en représentation flottante
-1.2344E+03 avec un chiffre
avant le point décimal et un
exposant de 4 caractéres.
L'erreur 2 de STRFIX ne peut
pas se produire, Les conditions
d'apparition de l'erreur 1 sont :
L<7 ou D<0 ou L<D+6.
PROCEDURE
NTEGER;
VAR ERREUR:INTEGER)
Renvoie une chaine de longueur L
PROCEDURE STRFIX;
ss
(* CONVERTIT UN REEL EN CHAINE DE TYPE -XXXX.xx *)
VAR I,J SINTECER;
NEGATIF :BOOLEAN;
ND, EX ?REAL}
Sl :STRING;
BEGIN
IF 1380 THEN L:=80;
IF (L<3) OR (D<0) OR (L<D+2)
THEN BEGIN ERROR (L, S) ;ERREUR:~1;EXIT(STRFIX) END
ELSE ERREUR:=0;
NEGATIF: = (N<O.0) ;N:=ABS (N) ;
IF N>32767.0 THEN
BEGIN ERROR (L, $) ;ERREUR:=2;EXIT(STRFIX) END;
IF D-0
THEN
BEGIN
STR (ROUND (N),S1);S:='"
END
ELSE
BEGIN
STR (TRUNC (N) , $1)?
REPEAT
EX:=1;FOR T:=1 TO D DO EX:=EX*10.0;
|: EX* (N-TRUNC (N) ) ;D:=D~17
UNTIL ND<=32767.0;
J*ROUND (ND) 7 STR (J, S) ;D!=D#1;
FOR J:=LENGTH(S)+1 TO D DO S:=CONCAT('0',S);
END;
S:=CONCAT(S1,'.',S)7
IF NEGATIF THEN $:-CONCAT('-', 53);
JE LENGTH (S)>L THEN
BEGIN ERROR (1, S) ;ERREUR:=3;EXIT(STRFIX) END;
FOR J:=LENGTH(S)+1 TO L DO S:=CONCAT(' ',S);
END;
ony
PROCEDURE STRFLOT;
(**)
(* CONVERTIT UN REEL EN CHAINE DE TYPE -XXXX.XXE+YY *)
on
VAR 31 #STRING;
Ex INTEGER?
NEGATIF :BOOLEAN;
BEGIN
IF L>80 THEN L:=80;
IF (L<7) OR (D<O) OR (L<D+6)
THEN BEGIN ERROR (L,S) ;ERREUR:=1;EXIT(STRFLOT) END
ELSE ERREUR:=0;
NEGATIF:= (N<O.0) ;N:=ABS (N) ;EX:=0;
TF Ne>0.0 THEN
BECIN
WHILE N>=10.0 DO
BEGIN N:=N/10.0;EX:"EX+1 END;
WHILE N<1.0 DO
BEGIN N:=N*10.0;EX:-EX-1 END;
END;
STR (ABS (EX), S);
IF ABS(EX)<10 THEN S:=Co!
IF EX<O THEN S:=CONCAT(
ELSE S.
IF NEGATIF THEN N:
LraL=4;
STRFIX (N, L, Dy Sl, ERREUR) +
S:=CONCAT (SI, S)
END;
iT ('0', S) 7
ory
PROCEDURE STRENT;
(#9)
(* CONVERTIT UN ENTIER EN CHAINE *)
wry
VAR T,J: INTEGER:
BEGIN
IF £>80 THEN L.
ERREUR:=0;
STR(N, S) ;T:=LENGTH (S) ;
IF L>I THEN FOR J:=1 TO L-I DO S:=CONCAT(' ',S);
IF L<I THEN DEGIN ERROR (L, 5) sERREUR:~1 END
END;
(* INITIALISATION *)
Pom's n° 23
représentant l'entier N. L'erreur 1
se produit si L<1 ou si L.>80.
Les PROCEDURES PREN-
CHAINE et SAISIE peuvent
provoquer des diagnostics 4 la
compilation si la paramétre actuel
S est une chaine de longucur
déclarée (STRING{xx}). II faut
alors compiler le programme (ou
la fraction de programme
concernée) avec l'option (*$V-*)
du compilateur pour éviter le
diagnostic.
En cas d'erreur dans les
procédures STRxxxx, la chaine
qui est renvoyée ne contient que
des *** mais cela n'entraine pas
derreur d'exécution.
En cas d'espace en trop dans ces
procédures, les chaines sont
cadrées a droite.
La_ version PASCAL de
GENUTILE (obtenue aprés
transfert de la disquette Pom's et
nommée alors UTIDIV.TEXT)
déclare PEEK et POKE comme
étant EXTERNAL. PEEK et
POKE ont été écrits en
assembleur (fichier PEEKPOKE.
TEXT). On doit donc
* compiler UTIDIV.TEXT,
* assembler PEEK POKE.
TEXT,
¢ linker PEEKPOKE.CODE
dans UTIDIV.CODE pour
obtenir GENUTILE.CODE,
* placer GENUTILE.CODE
dans SYSTEM.LIBRARY par
lutilitaire LIBRARY.CODE.
Accompagné d'une cinquantaine de pages de documentation, Sisk Manager permet de recréer
les commandes du Dos, redéfinir l'organisation d'une disquette, grace 4 un jeu d'instructions qui
en fait un langage simple d‘accés a la disquette. II offre également un programme simple d’édition
# ESC :=CHR(27);
FLD:=CHR(21);
EFB:-CHR(12)7
ALFANUM:=[' ‘,.°**]
END.
NORM: ~CHR (20);
ra]
om
HR (25)
CHR (7);
BS
INV:
1=CHR (8);
=CHR(18) ;
Les identificateurs déclarés par GENUTILE sont :
ALFANUM ALARME ALITEXT BS
CHOIDECA CONTINU CR EFB
EFL ENTIER ERROR Esc
HOME INV MESSAGE NORM
our PEEK POKE PRENCAR
PRENCHAINE PRENRETURN SAISIE SON
STRBOOL STRENT STRFIX STRFLOT
VALBOOL VALENT VALREEL.
Source a
‘PEEKPOKE.TEXT’ RIS
»PROC POKER, 2
»FUNC PEEK, 1 RET .EQU 0
RET .EQU 0 ADR .EQU 2
ADR .EQU 2 VAL .EQU 4
PLA PLA
STA RET STA RET
PLA PLA
STA RET+1 STA RET+1
PLA PLA
PLA STA VAL
PA PLA
PLA PLA
PLA STA ADR
STA ADR PLA
PLA STA ADR+1
STA ADR+1 LDX #0
LDX #0 LDA VAL
TXA STA @ADR,X
PHA LDA RET+1
LDA @ADK,X PHA
PHA LDA RET
LDA RET+1 PUA
PHA RTS
LDA RET .END
a l'aide de commandes évoluées. 4 utilitaires figurent aussi sur la disquette :
Utili-disque : reconstruction d'une disquette détruite, Vérification, Plan d’occupation
Ultra-copie : pour un backup particuliérement rapide
Edicat : Edition du catalogue, classement des fichiers, Titres...
Multi-disque : pour le classement de tous vos programmes (tri instantané).
Oisk Manager, le Dos en Kit
de Dan Steerey
Pom's n° 23
u'est-ce qu'un formateur
de programme Apple-
soft ? C'est une routine
qui affiche ou imprime
un programme Basic pour en
faciliter la lecture. La mise au
point en sera done facilitée et, une
fois terminée, on obtient une
documentation d'allure profes-
sionnelle.
Inspiré d'une routine écrite
elle-méme en Basic dans
Call-Apple, FORMATEUR est
réalisé entiérement en assembleur
pour des raisons évidentes de
tapidité. Une fois chargé en
mémoire, il peut étre utilisé 4 tout
moment.
Le programme Applesoft est listé
de la facgon suivante:
* ume seule instruction par ligne
(les ‘:’ excédentaires entre
deux instructions sont
ignorés) ;
+ une ligne blanche entre deux
lignes de programme ;
+ décalage de 4 caractéres dans
les boucles FOR-NEXT;
remplacement des NEXT
X,Y,Z par NEXT X : NEXT
Y:NEXTZ;
+ décalage de 4 caractéres aprés
THEN ;
+ décalage de 4 caractéres pour
les instructions dont la
longueur dépasse une ligne
(sauf cas de force majeure, les
mots ne sont pas coupés) ;
+ en début de ligne, on rajoute
LET avant I'affectation d'une
variable.
Bien entendu, le programme listé
n'est absolument pas modifié par
FORMATEUR.
Le format par défaut est 80
colonnes sur 66 lignes, mais
l'utilisateur a la possibilité de
modifier ces valeurs. Le saut de
page et la pagination sont
automatiques. Enfin, on peut
également imprimer un titre et une
date.
Utilisation
Le programme se charge par
BRUN FORMAT. Les commandes
disponibles sont :
éL
Liste l'ensemble du programme a
l'écran. Comme la commande
LIST de l'Applesoft, on peut la
faire suivre d'un numéro de
ligne :
&L 10 sont des
&L 10,20 formats
&L 10, acceptés
&L ,10
&LP
Liste sur l'imprimante. Le format
est identique que é&L.
L'imprimante est supposée
connectée en slot 1. Notez que les
instructions PR#n ne sont pas
imprimées.
&éT
Saisie du titre sur au plus 32
caractéres. Le format est libre.
Effectuer la séquence :
&T <Return> titre <Return>
On peut également y inclure des
codes de contréle pour
limprimante (sauf ESC).
&D
Saisie de la date sur 32 caractéres
en format libre.
éPn
n définit la longueur d'une page
(de 21 4 127 sinon message
d'erreur).
écn
n définit la largeur d'une page (de
40 4 127 sinon message d'erreur).
Le listing peut étre interrompu par
CTRL-C. Utilisez CTRL-S pour
une interruption temporaire.
Fonctionnement
Sous DOS 3.3, le programme se
charge en $90D1 et fixe Himem a
$9100. Le programme initialise
l'Ampersand et les valeurs par
défaut du format, puis rend la
main.
Lorsqu'il est appelé pour une
liste, il scanne le programme
Basic en mémoire en effectuant,
d'une part le méme travail que la
routine LIST de l'Applesoft
(conversion des numéros de ligne
stockés en binaire en valeurs
affichables, traduction des tokens
en mots-clés, etc.), d’autre part en
améliorant l'affichage comme
décrit précédemment.
FORMATEUR utilise un grand
nombre d'adresses inutilisées en
page zéro ; cela ne pose pas de
problémes car il est prévu pour
étre activé en mode direct et non a
l'intérieur d'un programme. De
plus, la zone $300-$33F sert a
sauvegarder le titre et la date
éventuellement saisis.
N.D.L.R. : les routines d'accés
aux périphériques du programme
ont été légérement modifiées afin
de permettre un fonctionnement
normal avec une carte 80
colonnes, ainsi qu'une exécution
au choix sous DOS 3.3 ou
ProDOS.
Le programme T.FORMAT est le
fichier source au format Big Mac.
L'assemblage sous DOS 3.3 se
fait simplement en mettant la
variable PRODOS a0.
Pom's n° 23
Pour ProDOS§, elle doit étre mise
4] et le source doit étre resauvé
sur disque. L'assemblage
S‘effectue en chargeant
DARWIN.S (pour les détails
d'utilisation, voir Pom's 22) ; la
derniére ligne doit devenir "PUT
FORMAT" et on assemble en chargé sous ProDOS par :
donnant les paramétres : BRUN FORMAT. PRODOS, A$6000
DESI S = oUt (il se relogera au dessus des
DARWIN _F = $95FF buffers de ProDOS).
VA_DEBUT = 1
Le module objet peut alors étre
03 mars 1986
PAGE 1
ae Un listing formaté par
6 a
FORMAT
400 LET Je 5+
420 NEXT Ce listing partiel de ‘CONVERT publié dans ces
nu a l'imprimante en faisant :
ae POR is pages, a été obtenu a limp
430 REM INCLUSION DES BRK + BRUN FORMAT
+ LOAD CONVERT
440. HRRR. CORO: 4a0 + &T pour la saisie du titre ‘Convert’
450 LET P$ = F$(3) + + &D pour la date '03 mars 1986" :
PRINT DS*BLOAD"FS : + &LP 400,680 pour le listing proprement dit.
soto 470
460° CALL 768 = Note : sous ProDOS, il faut faire
GosuB 1080 : BRUN FORMAT.PRODOS,A$6000
Goro 440 et il vous faut un Basic.System dont la
version est supérieure a 1.1.
470 CALL 27500
480 ¥OR 1 = 1 TO NL
490 Ir INT (I / 500) = I / 500 THEN
PRINT = O3 mars 1986 PAGE 2
PRINT “PATIENCE JE FAIS LE MENAGE!"; :
CALL 37500 : Convert
PRINT “C'EST FINI” +
PRINT 990 LETM = 3 +2
$00 FOR J = 1 TO 12 600 LET YS = «#
Sie 4¥ MIDS (A$(2),d-1) < > “u" THEN 610 IF J > 4 THEN
670 LET YS = LEFTS {(A$(I).J - 4)
520 LET I = 9 +13 620 FOR R= 1 TO N2
IF MIDS (AS{I),J,1) < > “S" THEN
550 630 TRT Lo BEN (Z8(K))
330 LET Is IF+1l: 640 Iv LEN {AS{i})}) + M+ i <b THEN
IF MIDS (AS(I),J,1) ¢ > “R" THEN 660
670 =
650 IF MIDS (AS(I),;M,l) = 25(K) THEN
540 LET £3 = 219 LET AS{I) = YS + 2S + Z29(K} =
GOTO 590 PRINT AS({I), "LIGNE N{ *s1 :
PRINT +
$50 IF MIDS {AS(I),d,1) < > "M" THEN LET K = N2
670
660 NEXT Kot
$60 wtsyI-73+1: LeT J = 12
If MIDS (A${I),d,1) < > “P™ THEN
670 670, NEXT J:
NEXT T
$70 LET 28 = 229
680 HOME >
$80 REM ON A UN JSR OU JUMP PRINT "SAUVER LE FICHIER TRANSFORME 2” :
PRINT
PRINT * SUR DISQUETTE? <O,N>";
se:
Pom's n° 23
Th eee
Source ‘DARWIN.S’ (ppeecatneS
49 * 2 ~ Copie vers l'adresse d’implantation
Assembleur BIG MAC oe
47 DARWINZO JSR $FF58 contient un ATS
1 eaeesessesssensenenenenenee a rsx
2° DARWIN , “a DEX
3 pbesensssnsnenseeeneneneses 50 cic
4 51 LDA $100,X recherche sur la pile
5 * Routine d'initialisation 4 ProDOS 52 ADC #DARWINS9-DARWIN20-2 ; adresse debut routine
6 * d'un programme assembleur DOS 3.3 53 STA $3C Al
7 ‘Sa LDA $101,X
2 * (C) 1985 Alexandre Avrane 55 apc 40
9 * Modi fla: 24/11/85 56 STA $3c+1
10 * Créé: 16/11/85 57 LDA $3C adresse de fin
u 38 ADC #<DARWIN_L
12 * Ce source est assemblé an conjonction 59 STA $3E a2
13 * avec le programme 4 adepter ProDos 60 LDA $3c+2
rr) 6 ‘ADC #>DARWIN_L
15 DARWIN_D OD sadeaee de début DOS 3.3 #2 ‘STA $3E+1
16 DARWIN F KBD adresse de fin DOS 3.3 63 IDA #<DARWIN_A adresse dlarrivée
17 VA_DEBUT KBD seaute en début de pgm apres chargement? 64 STA $42 a
18 65 PHA
19 * Calcul des adzusses sous ProDos 66 EDA #>DARWIN_A
20 DARNINVI = DARWIN _F/3100+1 ° Sra $4241
21 DAKWINV2 = DARWIN_D/$100 68 PHA
22 DARWINV3 = DAKWINV1~OARWINV2 6 wr 40
23 DARWINVé = — $100*DAKWINVZ 70 JeR $FE2C déplace le bloc par MOVE
24 DARWINVS = — DARWIN_D-DARWINVE
(25 DARWINVE = DARWINV3*$100-DARWINVS seca
26 73 * 3 = Appel du module et sortie
27 DARWIN A = $9AQ0-DARWINV6 ; adresse de début ProDOS 26:0 Serr
28 DARWIN.L = DARWIN _F-DARWIN_D ; longueur ProDOS 1s ‘PLA
23 76 STA $42¢1
30 ORG DARWIN A-73 :DARWIN prend 72 octets 7 PLA
3 78 STA $42
32 ¢ eeceewmesecereeeeeeeeseseeneeeese 73 DO VA_DEBUT
33 * 1 - Recherche de 1a place mémoire 80 JMe ($42) saute en début de programm
36 * sominmneemnesaenieesonsnn - 31 ELSE
‘3s LDA SBFFD IVERSION 82 RTS ++-0u retour 4 l'Applesoft
36 BEQ DARWINIO Basic.System 1.0 83 ‘NOP
37 LDA $0~DARWIN_A/$100+S9R 84 NOP
ELD JSR $BEFS GETBUFR 85 FIN
39 BCC DARWINI2 6 DARWINGS = *
40 DARWINIO LDA #14 PROGRAM TOO LARGE * Inclut le source du programme 4 adapter (format TEXT)
a omp $BE09 PUT FORMAT
42 DARWINI1 = + ND
- 00 90 2¢ c9 50 6180- 20 24 ED 84 06 A9 00 18
Récapitulation 6088- FF 20 Bl
pitulano 6090- FO 07 C9 00 DO 11 4c A 6188- 69 07 85 1A 38 E5 06 AB
en version ProDOS 6098- 94 AS D6 FO 05 C6 D6 4c 6190- 88 AS 20 20 5C DB 88 DO
‘FORMAT. 60A0- C9 DE E6 D6 4C 40 94 C9 6198- FA AQ 00 85 1E 85 1D 8
PRODOS’ 60A8- 2C FO 03 4C C9 DE AS FB 61A0- D7 85 EB A4 07 20 F@ 96
60B0- FU 03 4C CY DE E6 FB AC 61A8- DO 03 4c FE 94 C9 3A FO
P 3 60B8- 40 94 20 OC DA AS FR 00 61RO- F4 C9 8? DO 7C Ad OT AS
Aprés avoir saisi ce code 60CO- OD AS 50 65 FC AS 51 85 61B8- EB 38 AS EC E9 04 10 02
sous moniteur, a partir de 60C8- FD 20 B7 00 DO BE AS 50 61C0- A9 00 85 EC AA £8 AQ 20
l'adresse $6000, vous le 60D0- 85 FE AS 51 85 FF 20 B7 61C8- 20 F2 96 CA DO FA A2 00
sauvegarderez par BSAVE 60D8- 00 FO 03 4C C9 DE AS FD 61D0- BD DO 98 FO 06 20 F2 96
FORMAT,A$6000,L$55E 60E0- C5 FF 90 OE DO 06 AS FE 61D8- E&8 DO F5 4C FE 95 4c 63
60E8- C5 FC BO 06 20 F3 98 4C 61E0- 96 85 07 A6 EC £8 A9 20
60F0- 00 BE AD 31 RE 49 FD an 61E8- 20 F2 96 CA DO FA AS 07
6000- AD FD BF FO 07 A9 07 20 60F8- 14 99 FO 05 A9 33 8D 14 61F0- 30 EC C9 30 90 32 C9 3A
6008- F5 BE 90 05 A9 OE 4c 09 6100- 99 AS D6 FO 07 Ag 31 20 61F8- BO 0D A9 20 20 F2 96 AS
6010- BE 20 58 FF BA CA 18 BD 6108- F6 98 C6 D6 85 FB 85 18 6200- 07 20 F2 96 4C FE 95 C9
6018- 00 01 69 36 85 3C BD 01 6110- 85 1A 85 1D 85 1C 85 1E 6208- 41 90 1D C9 5B BO 19 A2
6020- 01 69 00 85 3D AS 3C 69 6118- 85 EC 85 D7 AS FC 85 50 6210- 00 85 07 BD D7 98 FO 06
6028- 20 85 3E AS 3D 69 05 a5 6120- AS FD 85 51 20 1A D6 AO 6218- 20 F2 96 E8 DO F> AS 07
6030- 3F A9 00 85 42 48 A9 94 6128- 03 BO 0A AO 00 FO OF 4c 6220- 20 F2 96 4C FE 95 AS 07
6038- 85 43 48 AO 00 20 2C FE 6130- FE 94 4C Ad 94 20 49 97 6228- C9 22 FO 03 4c D4 96 AS
6040- 68 85 43 68 85 42 6c 42 6138- 20 68 97 4C 2B 95 20 49 6230- 1D 49 01 85 1D A9 20 20
6048- 00 A9 4C 8D F5 03 A9 2B 6140- 97 20 68 97 4c 01 95 20 6238- F2 96 A9 22 4C E9 96 a9
6050- 8D F6 03 AS 94 8D F? 03 6148- F8 96 20 F8 96 FO 9D AD 6240- 3A 4C E9 96 4C FE 94 20
6058- AY 42 85 19 AY 50 85 1B 6150- 00 CO 10 0A C9 83 D0 06 6248- F@ 96 FO F8 30 SE AG FB
6060- AS 07 85 09 AO 3F AS 03 6158- AD 10 CO 4c A3 94 20 FB 6250- EO 01 DO OD A2 00 86 FB
6068- 85 CF A9 00 85 CE 20 1A 6160- 96 85 50 20 Fe 96 85 51 6258- 85 07 A9 20 20 F2 96 AS
6070- 98 85 D6 60 C9 4c FO 03 6168- C5 FF 90 08 DO C4 AS FE 6260- 07 C9 22 DO OB AS 1D 49
6078- 4¢ C3 97 AD 00 85 FB a5 6170- C5 50 90 BE 20 49 97 20 6268- 01 85 1D AY 22 4c E9 96
6080- FC 85 FD A9 FF 85 FE 85 6178- 49 97 AS 51 AG 50 84 07 6270- C9 3A DO 1A AS 1D DO C7
Pom's n° 23
Source ‘T.FORMAT’
Assembleur BIG MAC
Sauvegarde sous format TEXT (voir texte)
#1 Source pour DOS 3.3/ProD0e
propos = 0
+) (mettem 0 pour DOS
eu 1 pour Pranos)
70°
$98
*SCB-SCF
*Compteur lignes
*Décalage
riéc0 Ligne « 1h
sDerniére Ligne
szarce gauche
‘Longueur page
SCompteur
"Largeur page
‘Numéro de page
"Drapeau "
*weealag si then
‘Devel. fur-next
07
* (S2F est utilisé par 80 col. du //e)
100
101
102
403
104
105
106
107
108
109
110
a
122
ug
ue
u7ze
FIN
LDA
STA
LDA
Sta
LOA
57a
wy
1a
STA
LOA
STA
152 * Longueur 66 1i
gnes par défaut
NLMAX
#520 * Largeur 80 par
rau
womax
7 « targeur marge
gauche
woRce
137
4503
STOCK+1 —# Ef face xonn at
ockage titre et
450 * date ($300 4 $
3tf)
stock
v2
PRT " Indicateur inp
rimante
20
1 Assenblable directement pour ! 71 GeTLN QU SrDER
uesliser DARKIN pour! 72 capo FOU «SDAPR
! 73 awwen FOU $3F5 we
parandtres: : 74 BASIC -EQU. $PEBS 122 peur =
: 75 StxBRR EQU SDECD 123 cw att
' 76 ovmo = QU. $DBSC 324 BEQ 100 .
! 77 LINGET BQU $0A0C 125 IMP TITRE = * 6L Liste le pr
— 78 LiNpRNT QU $8024 ‘gramme entier
A 79 FNDLIN QU $D61A 126 LOO LOA 480 .
Hating 4 Iéeren ! 30 PRBLI—-BQU. SF9EC 127 STA VIRGULE
Listing 4 2impeimante 1 4“ 128 STAM
aie de 1a dace ! ae 429 STA MeL
inte dy cite ' a 130 WA aster
longueur d'une page} ae 132 STAN
‘une page : a5 * awrrraLzsariow 332 ‘STA Net
slot inprimante ae 133+
wanna nanan nnnnnm 7 134201 -38R cancer
DO 1-PRODOS pas d'ORG pour Pan + 195 no? Ree OR .
FebOs 89 IDA 44 136 cM 4'Pt *EIP Tate aur
7 ORG $9001 90 ‘STA AMPER imprimante
P aeamataac #2 LDA #DEBUT 137 BEQ 103 *
bd om, 9 STA AMPER?1 138 CMP 450
bed 93 ‘DO 1-PRODOS pas touche pas 4 139 ‘BNE LOS
41 cHRoET «QU SBL Himem sous ProDOS! 140 MP LISTE
<2 Cancer. SF 987 cas ‘STA #IMEM 142 103 LDA PRT
42 TxXTPTR FOU $88 95 FIN 12 BEQ 104
44 Lim QU 550 irs WA puswr 43 osc par
45 wiMEN BOD $72 97 STA AMPERe2 ae me Srxene
“ 8 DO = t~PRODOS 443 20d INC PRE
47 Fac Ro 00 ” STA. HIMENe 146 me wat
6278- AS D7 DO C3 85 EB AS 20 6370- AS 04 65 EC 85 F9 A 01 6468- 60 20 FB DA AZ UU BD C/
6280- 20 SC DR AQ 3A 20 F2 96 6278- 85 FB 20 49 97 AS 09 18 6470- 98 FO 06 20 5c DR ER DO
6288- 20 31 97 4c 5c 95 C9 2c 6380- 65 1E 65 F9 85 1A AA CA 647€- F5 20 FB DA 4C B3 FE C9
6290- FO 03 4C D4 96 AG EB DO 6388- A9 AO 20 4c F9 Ad 00 AS 6480- 50 FO 03 4C 59 98 20 BI
6298- 03 4C D4 96 A 20 20 SC 6390- F9 60 A9 00 85 1A 20 FB 6488- 00 90 03 4c A3 94 20 OC
62A0- DB AS 3A 20 F2 96 20 31 6398- DA E6 18 AS 18 C5 19 90 6490- DA AS 51 DO 30 AS 50 30
62A8- 97 4C 6C 95 A2 00 86 FB 63A0- 03 20 5C 97 60 AS 1¢ FO 6498- 2¢ C9 15 90 3B 85 19 4c
62B0- 38 E9 7F AA 85 07 C9 33 63A8- 08 A2 04 20 FB DA CA DO 64A0- A3 94 CY 43 FU U3 4C CY
62B8- DO 07 A9 01 85 D7 4c AZ 63B0- FA 84 07 E6 1C AS 08 85 64A8- DE 20 B1 00 90 03 4c A3
62C0- 96 C9 02 DU UY Ad EC 69 6388-18 AY 20 85 CE 20 B4 9” 64B0- 94 20 OC DA AS 51 DO OD
62C8- 03 85 EC 4C A2 96 C9 45 63C0- 84 1A AS 1B 38 E9 OF ES 64BA- AS 50 30 09 C9 28 90 34
62D0- DO 19 A2 00 BD DD 98 FO 63Cé- 1A 10 02 AY 02 AA AY AU 64C0- 85 1B 4C AZ 94 20 FB DA
62D8- 06 20 5C DB E8 DO F5 AS 63D0- 20 4C F9 A2 00 AD Fa 98 64C8- A2 00 BD E9 98 FO 06 20
62E0- 1E 69 03 85 1E 20 31 97 63D8- FO 06 20 SC DB E8 DO F5 64D0- 5C DB £8 DO FS 4C A 94
62E8- 4C SC 95 AS 07 AA 84 06 63E0- A9 00 A6 1C 20 24 ED 20 64D8- 20 FB DA A2 00 BD A2 98
62F0- AO DO 84 9D AO CF 84 9E 63E8- FB DA 20 FB DA A9 00 85 64E0- FO 06 20 5C DB E& DO FS
62F8- AQ FF CA FO 0A 20 00 97 63F0- CE 20 B4 97 20 FB DA 20 64E8- 4C AZ 94 07 07 4D 49 4E
6300- 10 FB 30 F6 20 08 97 a9 63F8- FB DA A4 07 60 AO 00 Bl 64F0- 2E 32 31 00 20 FB DA A2
6308- 20 20 F2 96 20 00 97 30 6400- CE FO 08 20 SC DB CB CO 64F@- 00 BD BE 98 FO 06 20 5C
6310- 05 20 F? 96 NO F& 20 F2 6408- 21 90 F4 60 C9 54 FO 07 6500- DR FB DO FS 4c A3 94 07
6318- 96 A4 06 A9 20 C9 OA DO 6410- C9 44 FO 11 4C 36 98 AS 6508- 07 4D 49 4E 2E 34 30 00
6320- 0A 20 4D 97 AG 1A A9 AO 6418- 00 85 CE AS 03 85 CF 20 6510- 07 07 4D 41 58 2E 33 32
6328- 20 4¢ F9 C9 08 DO 03 4c 6420- 16 98 4C E7 97 A9 20 85 6518- 00 20 4B 45 58 54 20 00
6330- FE 95 20 F2 96 20 08 97 6428- CE A9 03 85 CF 20 16 98 6520- 20 4C 45 54 20 00 20 54
6338- 4C FE 95 20 SC DB EE 1A 6130- AS 38 48 AS 39 48 AS FF 6528- 18 45 4B 00 50 41 47 45
6340- 60 C8 DO 02 6 9C BL 9B 6438- 85 38 AS 97 85 39 20 6A 6530- 20 00 07 07 4D 41 58 2E
6348- 60 C8 DO 02 Fé 9E BI 9D 6440- FD EO 21 90 03 4c 20 98 6538- 31 32 37 00 AD 14 99 BD
6350- 60 85 07 38 AD 1B £9 OB 6448- AO 00 B9 00 02 C¥ aD FO 6540- 11 99 AZ 00 BL OF 99 FU
6358- 85 FA A6 1A E4 FA 90 2D 6450- 05 91 CE C8 DO F4 68 85 6548- 08 09 80 9D 00 02 £8 DO
6360- AS 07 C9 20 FO 0A C9 20 6458- 39 68 85 38 4C B3 FE AS 6550- F3 20 03 BE A9 00 60 50
6368- FO 06 A6 1A £4 1B DO 1D 6460- 00 AO 1F 91 CE 88 10 FB 6558- 52 23 31 OD 00 31
—
Pom's n° 23
201 ee 257 bro prs * Pin programe
ow 8, 202 ne $0800 25a 1A $c000 ——* Arde chu Ifa
RRQ 106 203 Pm 259 pL 125 * ting af Ctrl C
mp STXERR 260 cue 4503
261 BNE 1S
LDA VIRGULE 262 LDA $C010
BEQ 107 263 ome RTS
IMP STXERR 264125 «JSR LIREY
INC VIRGULE 265 STA LINNUM
me 101 266 JSR LIREL
267 ‘STA. LINWUMH2
sk Lamoer 268 cre Nel
IDA VIRGULE 269 Bcc 126
‘pxe 109 270 BNE RTS
IDA LINVOM 272 DAN
STA 4 272 ce Lene
IDA reves 217 RoR 4SFO ssrore 2 273 cc rst
STA Mel 218 STA. storsave 274126 JSR CROOL
JSR cuRGOT 219 0 120 275 Ise capo!
BNE 102 220 WDA 43° painon slot 3 276 LDA Linwome
221 STA SLOTSAVE 277 ox Liew
IDA LiInww 222120 DA PRT 278 STY AUXe
STA N 223 eq 122 279 JSR LINRVT —* Impression du
IDA LINvoMeL 2 1A Astor no de Ligne
STA Nel 25 JSR GO_PR2 240 sry aux
JSR CHRGOT 220121 DBC PRT 2a DA 450 .
wo Lie 227 422 STA oF we cu *
one STAERA 220 STA ML 203 ax 487 .
229 STA Ne 204 ‘STA Ne * Marge aprés nu
IA wt 230 STA quore mézo de Lene
cor 231 STA PAGE 205 sec +
bec | Liste 232 STA TF 286 sac x0X .
one RTS 233 STA FF 287 my *
WAN 24 STA RP 288 bey +
ce x 235 LDA 289 LDA 4820 .
cS LISTE 236 STA LINWOM 290 427 JSR. OUTDO
237 LA M1 201 bey
238 ‘STA Liwwoted 292 BNE 127
239 JSR FNDLIN 293 DA 480
20 by 453 204 sma TF
241 acs 123 295 ‘STA quore
22 wy 480 296 STA RF
20 bo PREMLGN 297
= Z ae ome CHAINAGE 298
00 1-Prooos no + 299
IDA sLoTsave 246 Arete nts 500
eq 112 207+ 3or
1a #000 249123 Jer cnoot 202 * LECTURE 16R OCTET D*UNE LIGNE
pp 111 attente clavier 249 yea ewrere
ear PRED peut effacer 1'éc 750 me 126
ran 251 precy = *
196 1a sco10 252 JsR cRo01 306 DESIGN JSR LIREL
197 Pw 253 3sa swrere 307
198 12 JSR GOPR 254 ne 14 308
199 D0 -PRooos 255 cuarNace JSR LIREL 309 Lat + Elimine les *:
200 IMP BASIC 256124 JSR LIRE
ra = . 9148- DA AS FB DO OD A5 50 85 9238- 85 D7? 85 EB Ad 07 20 DA
Récapitulation 9150- FC AS 51 85 FD 20 B7 00 9240- 93 DO 03 4C EO 91 C9 3A
en version 9156- DO BE AS 50 85 FE AS 51 9248- FO F4 C9 82 DO 2C A 01
9160- 85 FF 20 B7 00 FO 03 4c 9250- @5 EB 38 AS EC E9 04 10
DOS 9168 C9 DE AS FD C5 FF 90 1B 9258- 02 A9 00 85 EC AN BB AD
9170- DO 06 AS FE C5 FC BO 13 ¥26U- 20 20 D4 93 CA DO FA AZ
FORMAT 9178- AD F7 95 FO 08 AD 00 co 976A8- 00 RN R? 95 FO 06 20 Da
9180- 10 FB AD 10 CU 20 D5 95 9270- 93 E8 DO F5 4C EO 92 4C
91RA- 4C RI FE AD 54 AA 49 FD 9278- 45 93 85 07 AG FC FA AQ
Aprés avoir saisi ce code 9190- 8D F7 95 FO 05 AY 33 8D 9280- 20 20 D4 93 CA DO FA AS
sous moniteur, vous 9198- F7 95 AS D6 FO 07 A 31 9288- 07 30 EC C9 30 90 32 C9
Je sauvegarderez par 91A0~ 20 DB 95 C6 DE 85 FB 85 9290- 3A BO OD AS 20 20 D4 93
BSAVE FORMAT,A$90D1,L$527 91A8- 18 85 1A 85 1D @5 1C 85 9298- AS 07 20 D4 93 4C EO 92
91B0- 1 85 EC 85 D7 AS FC 85 92A0- C9 41 90 1D C9 5B BO 19
91B8- 50 AS FD 85 51 20 1A D6 92A8- AZ 00 85 07 BD B9 95 FO
90D1- AY 4C 8D F5 03 AY 00 91C0- AN 03 BO 0A AO 00 FO OF 92B0- 06 20 D4 93 E8 DO FS AS
90D8- 8D F6 03 85 73 AS 91 8D 91C8- 4c £0 91 4C 78 91 20 2B 92B8- 07 20 D4 93 4C EO 92 AS
90E0- F7 03 85 74 A9 42 85 19 91D0- 94 20 4A 94 4C OD 92 20 92C0- 07 C9 22 FO 03 4c B6 93
90E8- AS 50 85 1B AI 07 85 09 91D8- 2B 94 20 4A 94 4C E3 91 92C8- AS 1D 49 01 85 1D AY 20
90FO- AO 3F A 03 85 CF AS 00 91E0- 20 DA 93 20 DA 93 FO 90 92D0- 20 D4 93 AS 22 4c CB 93
90F8- 85 CE 20 FC 94 85 Dé 60 91E8- AD 00 CO 10 0A C9 83 DO 92D8- AS 3A 4C CB 93 1C £0 91
9100- C9 4C FO 03 4C AD 94 Ag 91F0- 06 AD 10 CO 4¢ 78 91 20 92E0- 20 DA 93 FO F8 30 SE AG
9108- 00 85 FR AS FC AS FD AG 91F8- DA 93 85 50 20 DA 93 85 92E8- FB FO 01 0 On A2 00 86
9110- FF 85 FE 85 FF 20 B1 00 9200- 51 C5 FF 90 08 DO C4 AS 92F0- FB 85 07 A9 20 20 D4 93
9118- 90 2¢ C9 50 FO 07 C9 00 9208- FE C5 50 90 BE 20 2B 94 92F8- AS 07 C9 22 DO OB AS 1D
9120- DO 11 4C 6B 91 AS DG FO 9210- 20 2B 94 AS 51 AG 50 84 9300- 49 01 85 1D AS 22 4¢ cB
9128@- 05 C6 D6 4C C9 DE E6 D6 9218- 07 20 24 ED 84 06 A9 00 9308- 93 C9 3A DO 1A AS 1D DO
9130- 4C 15 91 C9 2C FO 03 4C 9220- 18 69 07 85 1A 38 E5 06 9310- C7 AS D7 DO C3 85 EB AQ
9138- C9 DE AS FB FO 03 40 C9 9228- AB 88 AJ 20 20 SC DB 8B 9318- 20 20 5C DB AY 3A 20 D4
9140- DF F6 FR 4C:15 91 20 0¢ 9230- DO FA AQ 00 85 1F 85 1D 9320- 93 20 13 94 4c 3E 92 C9
Pom's n° 23
310 Bro eaicw 269 JsR ovmpot au IDA
ant cM asez + Next > tee mx as sR
312 BNE Lat 265 ANE 145 416 sR * Saut Ligne pou
313 NEXT = «WA 481 366 146 = LDA. AUXS1 F nouvelle inst.
ae STA NP 36? JsR ovToo! 417 TMP DEBLGN
315 sic * Rédult le décala 368 me 428 54 cM at,"
ge et isprine 369 DA + te caractére 1 9 BEQ. 199
ne LA FF * NEXT ‘est pas un noe 420 Me PRINT
317 SAC 454 370147 CP 422.0550 1x RF
us BPL Laz 371 EQ 422 BNE 156
uy wa 450 372 oe 422 we Rie
320 n32 STA FF 373 143A 424.256 LDA #820
321 Tax i for 425 JsR ouTDo
322 Nx 375 STA QUOTE 426 IA ast
323 DA 4820 376 DOA 4920 427 JSR OUTDO!
324123 3sR oommo? 37 yor Gvrvor 428 JSR NI
BS x 398 aoe ase 429 Me NEXT
179
327 Lox 430 oe _ s =
328134 LOA NXT, sn rate” 432 *
328 BEQ. 135 We PRI + te : est entre 133 * LECTURE ET IMPRESSION DES TOKENS
30 38k ovTDo! quillenets bee —
332 BNE 134 we CHATNAGE 436 +
333135 MP LIRE 427 TOKEN LOX 490 * Annute indicat
pals 386 Lins JSR LIREI ‘eur coupure de ligne
235 roe! ne ronan BEO x Ode tines 18" —
397 Ltt STA AUK + bEfectue déce- 398 ust ma sae 40*
208 wx PF + lage for-next 349 aoe or 442 SEC
339 max oe ce gai 4a SOC 4S7F
340 1a = me cae «@ TAX
341 142 ask ey ok oe a ‘STA AUK .
32 Dex 30 ox oF “ cue 451
303 axe 2 Sta axe us as 10
ae 6 395 EDA #820 + Décale de les {hy pane
346 cue . sie Ae ARES Re ROEETA, 449 me 164
30 occ regs yen corooi "” siphanuntriove {39 240 Gar tot * buen ExT
bas cue * THEN décale ay mani 451 ame et. humane come
espace en + oe: | Ge ee eur décalage
“oS ie Se ts s Bz
ae m 400 DA QUOTE tat pie
cabs = 401 Bor 4801 ts me ae
ae Easy 402 STA QUOTE Are ey a
=. = o oe e« EF
ost fsa 408 me panera
355144 cue Winmidoe fers Ge gue oe Be
356 Boe + rable en débu fog gue ase as ae
f Instruction imprine TET Yop ian aeoee “ =
oF oe ie zs 408 BNE CHAINE <a oe ee
358 Bos 147 ioe on « m
360 SA hin pr oe ee 46446) wa TP
360 STA AUX+ re = te a
°° Bee 422 BDA 4820 "i" Séparateur {eg =
43 JSR OUTDO
9328- 2C FO 03 4C B6 93 AG EB 9418- 18 65 1E 65 F9 85 1A AA 9508- A9 95 FO 06 20 SC DB EB
9330- DO 03 4C B6 93 AY 20 20 9420- CA A9 AO 20 4C F9 AY 00 9510- DO F5 20 FB DA 4C B3 FE
9338- 5C DB A9 3A 20 D4 93 20 9128- 85 F9 60 A9 00 85 1A 20 9518- C9 50 FO 03 4C 3B 95 20
9340- 12 94 4¢ 4R 92 A2 00 86 £6 18 Ad 18C> 19 9520- B1 00 90 03 4C 78 91 20
9348- FB 38 E9 7F AA 85 07 C9 9438- 90 03 20 3E 94 60 AS IC 9528- OC DA AS 52 DO 30 AS 50
9350- 33 DO 07 A9 01 85 D7 4C 9440- FO 08 AZ 04 20 FB DA CA 9530- 30 2¢ C9 15 90 3B 85 19
9358 84 93 C9 02 DO 09 AS EC 9448- DO FA 84 07 E6 1C AS 08 9538- 4C 78 91 C9 43 FO 03 4C
9360- 69 03 85 EC 4C 84 93 C9 9450- 65 18 A9 20 85 CE 20 96 9540- C9 DE 20 BI 00 90 03 4c
9368- 15 DO 19 A2 00 BD BF 95 9458- 94 84 1A AS 1B 38 E9 OF 9548- 78 91 20 OC DA AS 51 DO
9370- FO 06 20 5C DB E8 DU F> 9460- E5 1A 10 02 AS 02 AA AD 9550- 0D AS 50 30 09 C9 28 90
9378- AS 1E 69 03 85 1E 20 13 9468- AO 20 4C F9 A2 00 BD C5 9558- 34 85 1B 4C /8 91 20 FB
9380- 94 4C 3E 92 AS 07 AA 84 9470- 95 FO 06 20 5C DB £8 DO 9560- DA A? 00 BD CB 95 FO 06
9388- 06 AO DO 84 9D AO CF 84 9478- 5 A9 00 AG 1c 20 24 ED 9568- 20 SC DB E8 DO F5 4c 78
9390- 9E AO FF CA FO 0A 20 E2 94R80- 20 FR NA 70 FR DA AY 00 9570- 91 20 FB DA A2 00 BD 84
9398- 93 10 FB 30 F6 20 EA 93 9488- 85 CE 20 96 94 20 FB DA 9578- 95 FO 06 20 SC DB E8 DO
93A0- A9 20 20 D4 93 20 B2 93 9490- 20 FB DA A4 07 60 AO 00 9580- F5 4C 78 91 07 07 4D 49
93A8- 30 05 20 D4 93 DO Fé 20 9498- Bl CE FO 08 20 5C DB Cé 9588- 4E 2E 32 31 00 20 FB DA
93B0- D4 93 A4 06 A9 20 C9 OA 94A0- CO 21 90 F4 60 C9 54 FO 9590- A2 00 BD AO 95 FO 06 20
9348- DO 0A 20 2F 94 AG 1A Ad 94A8- 07 C9 44 FO 11 4c 18 95 9598- 5C DB E8 DO FS 4¢ 78 91
93¢0- AD 20 4c F9 C9 08 DO 03 94B0- A9 00 85 CE A9 03 85 CF 99A0- 07 07 4D 49 4E 2E 34 30
93C8- 4C EO 92 20 D4 93 20 EA 94B8- 20 F8 94 4C C9 94 AB 20 95A8- 00 07 07 4D 41 58 2E 33
93D0- 93 4C E0 92 20 5C DB E6 94C0- 85 CE AY 03 85 CF 20 FB 95B0- 32 00 20 4E 45 58 54 20
93D8- 1A 60 C8 DO 02 E6 9C Bl 94CR- 94 AS 28 48 AS 39 48 AG 95B8- 00 20 4C 45 54 20 00 20
93E0- 9B 60 C8 DO 02 E6 9E BI 94D0- E1 85 38 A9 94 85 39 20 95C0- 54 48 45 4E 00 50 41 47
93E8- 9D 60 85 07 38 AS 1B E9 94D8- 6A FD EO 21 90 03 4C 02 95C8- 45 20 00 07 07 4D 41 58
93F0- UB 85 FA A6 1A E4 FA 90 94E0- 95 AO 00 B9 00 02 C9 BD 95D0- 2E 31 32 37 00 AD F7 95
93FR- 2D AS 07 C9 20 FO 0A C9 94E8- FO 05 91 CE C8 DO F4 68 95D8- 8D F4 95 20 FB DA A9 04
9400- 2C FO 06 A6 1A E4 1B D0 94F0- 85 39 68 85 38 4C B3 FE 95E0- 20 SC DB A2 00 BD F1 95
9408- 1D A9 04 65 EC 85 F9 Ad 94F8- AJ 00 AO IF 91 CE 88 10 95E8- FO 06 20 5c DB E8 DO F5
9410- 01 95 FB 20 2B 94 .A5 09 9500- FR 60 20 FR DA A? 00 BD 95F0- 60 50 52 23 31 OD 00 31
22 Pom's n° 23
553
554
555
556
337
339
560
ser
562
564
565
169
PRINT
72
pains?
LIREL
a
‘LIRE2
* coupe
RIS
STA
TDA
+ * la ligne
SBC
STA
1x
ex
Bo
LDA
ow
BE
ome
BEQ
1x
wr
ADK
. LIT DANS BASIC
sun
LoRTRS?
(QONTR).¥
* LIT DANS LA TABL
DES MOTS CLES
PACH
WAC)»
auxid
nema ATT carne. a
@ fin de Ligne
ai 7 ou
458
DEC
ectuer
ast * Marqueur coupy
re de ligne
oF
cRoo1 * Décalage en ae
but d'instruction
MARGE
* Décelage a eff
7
bre
xe
4510
PRALI
S66 RETURN
567 ‘LDA
568 STA
569 RIS
570 cROOl =
571 DA
572 STA
573 CRO ISR
a” Inc
373 WA
376 ow
377 BoC
378 aR
579 L110 RTS
580 sti2 LDA
58 BEO
582 1x
583 SL13. ISR
DEX
NE
ENTETE STY
INC
WDA
STA
WA
STA
sR
sty
WA
sBC
BC
sac
BPL
DA
sizl TAX
‘IDA
sR
10x
S22 «WA
BEQ
JSR
INK
BNE
5t23 LDA
wx
aR
von
sR
1a
STA
ISR
ISR
sR
wy
RTS.
PRIMG = «WY
Sial WUA
BEG
se
any
cry
Bec
suaa RTS.
TITRE =
cw
635 BEQ
636 oe
637 BE
538 we
29 *
540 * Séleccion
a+
642 rm 10a
oar sta
eee wa
“as TA
46 JSR
a7 me
648 ore IDA
649 STA
650 IDA
651 STA
652 JSR
653 StS ‘DA
554 PRA
655 ‘WDA
636 HA
67 LDA
658 STA
639 DA
560 STA
661 Jen
662 Cex
663 ace
664 oe
665 INPUT Loy
666 SLE1. LDA
450
@ local
* Annule décalag
g
. Mime page
# Page suivante
ENTETE —* Sf lére page n
¢ fait pas de saut
484 * de 4 Ligne:
cRoO
* DATE
* Inprime “page
#30
LINPRNT
480
* TITRE
PRIMG * Inprine titre
ADx+1
#50
(sTucK)
Sudz
822
uaa
ar * Saisie du tite
¢ ou de 1a date
TTR
in
TE
LoNcPG:
encede dace ou citre
430
stock
4503
sTock+1
VIDE
sus
4520
funeur
$38
@rneor
$39
cern
“2a
rwpor
ERR
450
§200,¥ * Transfert dans
zone de stockage
672 SL62
vibe
699 sL80
700
702
702 sL#1
203
708
705
706
707
708
708
70
ms
712 LARGPG
13
me
78
716 S190
m7
7148
719 sugt
720
721
722
723
724
25
726
BR?
8°
729 ERREUR
730
7
732 sui01
742 stiit
74
m5
746
747 SULIz
748 bei.
749
750
751+
282 MINC
753
754
755 sul2i
756
a8
RQ RSESURRS SER EREREREER
4
Et
RQEEESGERSEE g" 8
4
3
‘ QRRSERRBESS' REEGEERE" &
BR
g8
RRRR RRRSEREES
seo
(stocn).¥
SL61
$39
$38
BASIC
430
sir
(sT0cK) ,¥
* Longueur page
* Maxi 127 Ligne
* Largeur de 1a
Pom's n° 23
23
L’Applesoft est un peu a I’
réservée a
imagination débordante. Les 48Ko qui
vous sont genéreusement alloués se
revélent parfois insuffisants lorsque vos
programmes Basic utilisent des images
HGR et ou des routines en langage machine
zone mémoire
étroit dans la
votre
importantes. Si, de plus, votre programme
utilise des tableaux alphanumériques, il ne
vous reste qu'une peau de... pomme.
Le programme NAVETTE va
vous permettre d'utiliser les 16
Ko de la carte langage pour placer
l'ensemble des programmes
binaires dont a besoin votre
programme Basic.
Les solutions
Programmes binaires
n'utilisant pas de
routines Applesoft
Le plus simple consiste 4 recopier
le Moniteur de la ROM vers la
RAM aux mémes adresses (de
$F800 4 $FFFF). Tout appel au
Moniteur 4 partir de la carte
langage scra alors dirigé vers la
RAM. Ainsi, 4 chaque utilisation
de notre programme binaire, une
routine en RAM principale (sous
l'adresse $9600), se chargera de
transférer le contréle a la carte
langage, puis de reprendre la main
en finale en commutant vers la
ROM avant de retourner au
programme Basic.
Programmes utilisant des
routines Moniteur
et Applesoft
Le probléme se complique car il y
a conflit entre l'utilitaire en
langage machine et la ROM
Applesoft ; ceux-ci commencent
en effet 4 la méme adresse (a
partir de $D000). Comme dans le
cas précédent, une routine fera la
liaison entre le programme Basic
et la carte langage, mais elle
servira de plus d'aiguillage pour
tout appel (et retour) de routine
ROM (Applesoft ou Moniteur).
C'est l'objet du programme
NAVETTE.
Principe
Le programme NAVETTE va
servir d'interface entre le
programme en ‘carte langage’ et
les sous-programmes en ROM.
Son principe repose sur _une
utilisation de l'instruction BRK
pour passer le relais 4 NAVETTE.
Il suffit de placer, dans le
programme destiné 4 étre logé
dans la RAM supéricure, un
BREAK (BRK:00) avant chaque
appel d'une routine de la ROM. A
la rencontre de ce code, le
moniteur saute a l'adresse
vectorisée par $FFFE et $FFFF,
en l'occurence, on saute a
NAVETTE qui, comme sont nom
l'indique, fera la navette entre la
RAM et la ROM.
Nuele
Jean-Fiul Arbel
Pratiquement...
Dans votre programme Basic,
charger NAVETTE et I'utilitaire
par une séquence telle que :
10 DS$= CHR$(4): PRINT D$"B
RUN NAVETTE"
20 A = PEEK (-16255) : A=
PEEK (-16255): PRINT D$
"BLOAD UTILITAIRE": A =
PEEK (-16254)
Liutilitaire sera ensuite exécuté
par l'instruction '&' dite
ampersand,
Modification
de l'utilitaire
Assembler le programme que l'on
veut charger dans Ia carte langage,
a partir de l'adresse $D000, en
ayant pris soin de placer des BRK.
avant chaque appel a la ROM par
JSR ou JMP ou avant chaque
instruction accédant 4 la ROM
(par exemple LDA $FBB3 qui
détermine le type de la machine).
Il est a noter que tout programme
existant peut étre modifié et
assemblé de la sorte. Si ce
programme utilise l'ampersand, il
suffit de supprimer la partie
Suite du source ‘T.FORMAT’
listé pages précédentes
"4
169 nex 00 703 20 1-PRoD0s 298 ane coz
70 tet ase ter Jae Sea cx00 390030
mm ex 00 705 wa Ht ctried 200 30 Proves
7a tn asc THEW ras Jor Gor 801 Gee $3603
as tax 00 i im soz A 40
774 wompace Ase “PAGE yas ix 40 003 rin
m5 mex 00 789 co? OA PR_DATA,X to ars
776 maxr tx 0707 330 280. 003 205
339 ec “a. 327° os oo, 1-PRoo0s S06 PROATA Asc 'PRAI*
re tmx 00 bo Jen O07 307 hex 0000
770 793 LSE 08 Storsavr asc '1'
70 copR = + mo ea saa #09 20 1-PRooos
281 TA Suorsave 295 Sta $200-x a0 zo
782 GO PR? STA PRDATA+ saccxslot destin 796 Fn at FIN
tialze 7 INK
Ne
Pom's n° 23
WU CnnmMent gerer des routines binaires sur la carte lagggee.,
relative a li'initialisation de
celui-ci. Par contre les
instructions Basic utilisant cet
artifice restent inchangées.
L'utilisation de NAVETTE 4
lintérieur d'un programme Basic
est entiérement transparente.
Facilités
Le programme CONVERT permet
d'ajouter les BRK dans les
sources devant les instructions
JSR et IMP appelant un sous-
programme en ROM.
Ce programme se charge
didentifier toutes les adresses en
ROM, définies par des labels
grace a l'opcode "EQU" ou "=",
d'un programme source écrit avec
BIG MAC, sauvegardé sous
forme de fichier TEXT. Il insére
ensuite les BRK automa-
tiquement ; il sauve enfin sur
disquette, le programme modifié,
en ajoutant le suffixe ".LC".
Tl utilise les routines suivantes :
+ INPUT: input généralisé
acceptant tous caractéres ;
+ DIM.VAR.OBJ : routine
publiée dans Pom's 12 ;
* FRE (16) : routine de ‘garba-
ge’ publiée dans Pom's 2.
Techniquement...
A chaque appel de l'ampersand le
scénario est le suivant :
1] NAVETTE commute sur la
mémoire supérieure (carte
langage) ;
2) exécution de l'utilitaire
jusqu'a la rencontre d'un BRK
qui dirige sur NAVETTE ;
3] les registres sont alors
sauvegardés. On recherche
ensuite l'instruction suivant BRK.
On commute alors l'accés 4 la
ROM et cette instrution est
exécutée ;
4] enfin, NAVETTE commute de
nouveau sur notre utilitaire ;
5] le retour au Basic ne saurait se
réaliser sans un petit passage (le
dernier jusqu'au prochain) par
NAVETTE. qui se charge de
Teplacer correctement les
commutateurs RAM/ROM, avant
de rendre la main au programme
Basic.
NAVETTE a été testé sur ICARE
de P. CANTOT, version compléte
(SUPER PRINT et TORTUE
inclus). Avec quelques aména-
gements bien sir, il semble
donner toute satisfaction.
Précisions, limites
« NAVETTE est assemblé en
page 3 a partir de l'adresse
$300, l'utilitaire étant placé
au-dessus du DOS, HIMEM
conserve sa valeur fixée par le
DOS soit $9600 (38400) ;
* NAVETTE est incompatible
avec les DOS déplacés dans la
carte langage, de méme
qu'avec PRODOS qui utilise
lui aussi cet espace mémoire ;
« NAVETTE commute sur le
Banc 2 et la mémoire commune
de 8Ko. Pour commuter sur le
Banc 1 voir la remarque S.
Pour plus de précisions voir
Yarticle de Gérard Michel dans
le numéro 19 de Pom's, page
+ il ne faut pas que I'utilitaire
fasse appel 4 des interruptions
(BRK), les vecteurs d'inter-
tuptions étant modifiés par
NAVETTE ;
* si vous voulez placer plusieurs
utilitaires indépendants sur la
carte langage, il vous suffit,
avant l'appel de l'un d'eux, de
POKer son adresse d'implan-
tation en $31E (798) et $31F
(799) dans l'ordre habituel :
adresse basse puis haute. Si
vous voulez utilisez le BANC
1, POKez 0 4 la place de 128
en $324 (804). GS
Programme
‘CONVERT’
10 REM
! INSERTION DES BRK !
1 DANS PGM SOURCE BIG MAC !
1 JEAN PAUL ARBEL 1
! !
20 HIMEM: 37490: HOME : TEXT
30 REM AMPERSAND -> DIM, VAR
40 POKE 1013, 76: POKE 1014,124: POK
E 1015,146
50 DIM AS(1): DIM ZS(1): DIM FS(3)
60 FS(1) = "INPUT":FS(2) = "DIM. VAR.
OBI": FS (3) = "FRE(16)"
70 DS = CHRS (13) + CHRS (4)
80 ONERR GOTO 100
90 FOR I = 1 TO 2:F$ = FS(I): PRINT
DS"BLOAD"F$ (I): NEXT : GOTO 110
100 CALL 768: GOSUB 1080: Goro 80
110 Z1S = " BRK" + CHRS (13) + * US
x
120 225 = “ BRK" + CHRS (13) + ” UM
Pp?
130 REM LECTURE FICHIER
140 vr = 10
150 VIAB VI: INVERSE :$ = "NOM DU
FICHIER SOURCE A TRANSFORMER?":
GOSUB 1010
160 VTAB VT + 1: HTAB 3: CALL 762 I
NPUT FI$
170 ONERR GOTO 190
180 PRINT D$"OPEN"F1$: GOTO 210
190 5 = PEEK (222): IF E = 4 THEN E
-7
195 IFE<
SE"F19
200 CALL 768: GOSUB 1090: GoTo 150
210 PRINT DG"READ"F19
220 ONERR GOTO 250
= “CHARGEMENT DU FICHI
GOSUB 1010: VTAB 5: INVERS
- F19: GosuB 1010
1 TO 2000: CALL 762 INP
UT AS (I): & As +
250 CALL 768:N1 - I
260 PRINT D$*CLOSE*F1$
270 IF I < 2 THEN PRINT DS"DELETE"
FI$:E - 7: COTO 200
280 REM RECHERCHE DES LABELS...
290 REM ...APPLESOFT OU MONITEUR
300 HOME :R$ = "VOICI LA LISTE DES
IABELS": GOSUB 1010: VTAB 3:R$ ~
"DE LA ROM APPLESOFT OU MONITEU
R:": GOSUB 1010
310 FOR I = 1 TO N1:K - LEN (A$(I)
) = 6: IF K < 3 THEN 110
320 BS = MIDS (A$(I),K,4):C$ - LEF
TS (B$,1): IF C$ = "=" ORCS ="
u" THEN 340
330 GOTO 410
340 AS = RIGHTS (BS, 2)
350 IF RS = "SD" OR BS = "SE" OR BS
= "SF" THEN 370
360 GoTo 410
370 IF CS = "=" THEN 2$(J) =
(AS(I),K- 2): 628+:
> 11 THEN PRINT D$*CLO
: NEXT
lig=1
LEFTS
GoTo 39
r)
380 IF CS = "U" THEN 2S(J) =
(AS(T),K = 4): & 23 +
390 PRINT 2$(J)
400 T= I+)
LEFTS
420 N2 = J -1
430 REM INCLUSION DES BRK
440 ONERR GOTO 460
450 FS = F$(3): PRINT DS"BLOAD"FS: G
oro 470
460 CALL 768: GOSUR 1080: GOTO 440
470 CALL 37500
480 FORI = 1 70 N1
490 IF INT (I / 500) = 1 / 500 THE
N_ PRINT : "PATIENCE JE FA
CALL 37500: PRI
PRINT
NT "C'EST FINI":
500 FORJ= 1 70 12
Pom's n° 23
25
510 IF MIDS (AS (I),d,1) <
HEN 670
5205-5 + 2: IF MIDS (AS(I),J,2)
< > "S" THEN 550
530-5 + 2: IF MIDS (AS(I),I,1)
< > "R" THEN 670
540 2 — 218: GOTO 590
550 IF MID$ (AS(I),J,1) <
HEN 670
560 J - J+ 1: IF MIDS (AS(I),I,1)
<> "P" THEN 670
570 28 = 22s
560 REM ON A UN JSR OU UMP
590M =o +2
600 Ys
610 IF J > 4 THEN Yo =
a- 4)
620 FOR K ~ 1 70 N2
630 L - LEN (Z$(K})
640 IF LEN (AS(I))
N 660
650 IF MIDS (AS(I),M,L) ~ 29(K) TH
EN AS(I) ~ YS + 29 ¢ 28(K): PRIN
T AS(I), "LIGNE N{ "7Iz PRINT :K
2
pe?
> MT
LEFTS (AS(IT
-M+tleL THE
660 NEXT K:J = 12
670 NEXT J: NEXT I
680 HOME : PRINT "VOULEZ-VOUS SAUVE
R LE FICHIER TRANSFORME"; PRINT
: PRINT SUR DISQUETTE
2 <0,N>";
690 GET RS
700 IF RS = "N” THEN END
710 IF RS < > "0" THEN 690
720 PRINT
730 F2S = FI$ + ™.L0"
740 ONERR GOTO 760
750 PRINT DS*"OPEN*F2S: PRINT DS"DEL
ETE"F2$: PRINT DS*OPEN"F2S: PRIN
T DS"WRITE"F2S: GOTO 770
760 CALL 768: GOSUB 1080: GOTO 749
770 FOR I= 1 TO NI
780 PRINT AS(I): NEXT
790 PRINT DS"CLOSE"F2S
800 END
1000 REM SOUS-PGM DE MESSAGES D'ERR
FUR
1010 HTAB (40 ~ LEN (RS)) / 2: PRI
NTRS: NORMAL : RETURN
1020 VTAB 21: PRINT "APPUYEZ SUR RE
TURN POUR UN NOUVEL ESSAI": VTA
B 23: PRINT " OU APPUYEZ SUR E
SCAPE POUR QUITTER";: RETURN
VIAB 19:RS = "POUR VOIR LE CAT
ALOGUE TAPEZ 2": GOSUB 1010: RE
TURN
1030
1040 VTAB 23: HTAB 38: GET RS: IF
ASC (RS) = 13 THEN HOME :VT =
10; RETURN
1050 IF ASC (RS) = 27 THEN END
1055 ONERR GOTO 190
1060 IF ASC (RS) = 63 THEN HOME :
PRINT DS; "CATALOG": GET RS:VT
= 23: RETURN
1070 GoTo 1040
1080 E = PEEK (222)
1090 HOME : VTAB 5
1100 ON E GOTO 1190, 1190, 1190, 1190,
1210, 1210, 1230, 1170,1110, 1150,
250, 1150, 1150
1105 PRINT CHRS (7);"BREAK IN "; P
EEK (218) + PEEK (219) * 256:
END : RESUME
1110 R$ = "DISQUETTE PLEINE": GOSUB
1010: VTAB 10:R$ = "VEUILLEZ CH
ANGER DE DISQUETTE": GOSUB 1010
1120 GOSUB 1020: GOSUB 1040: RETURN
1130 R$ = "FICHIER NON TROUVE"
1135 GOSUB 1010: VTAB 10:RS = "vous
AVEZ TAPE:"; GOSUB 1010: VTAB
12: INVERSE :R$ = F1S: GOSUB 10
10
GOSUB 1020: GOSUB 1030: GOsUB
1040: RETURN
1190 RS = "LE FICHIER SOURCE NE PEUT
ETRE"; GOSUB 1010; VTAB 7:RS =
“QU'UN FICHIER DE TYPE 1
GOSUB 1010: VIAB 10:K$ = "CREE
PAK L'ASSEMBLEUK BIG MAC": GUS
ue 1010
GOsUB 1020: GuSsUB 1030; GosUB
41040: KETURN
1170 RS = “VERIFIEZ LA FERMETURE DE
LA PORTE": GUSUB 1010: VYAB 12:
R$ = “OU PLACEZ UNE DISQUETTE D
ANS LE LECTEUR™: PRINT RS
GOSUB 1020; GOSUB 1040: RETURN
11490
1160
1180
1190
RS — "DISQUETTE PROTEGEE": CosU
B 1010: VTAB 10:R$ = "VEUILLEZ
ENLEVER LA PROTECTION ET": CosU
B 1010
GOSUB 1020: COSUB 1040: RETURN
RS - "LE FICHIER " + FS +" EST
ABSENT": GOSUB 1010:R$ = "VEUI
LLE2 PLACER LA BONNE DISQUETTE
ET"; VTAB 7: GOSUB 1010
GOSUB 1020: COSUB 1040: RETURN
1250 R9 = “NOM DE FICHIER INCORRECT”
GOTO 1135
Source
‘T.NAVETTE’
Assembleur Big Mac
1
2
3
ae ”
se NAVETTE *
60 ”
7 ”
@** PAR Jean paul ARBEL **
re *
10
1] seeteseeessnssesssensssesees
12
33 one $300
1 AMPERV = © S3F5
15 url, = $n000
16 RAMI = SCI
17 RAMZ = SC
18 ROM = sco82
19 ROM? - score
20 ROMP == $c0aT
21 TRO - SPPRE
22
23 teeeenessressresarenenenese ee
24 *** VRCTORISR T.!AMPRRSAND #9
25
26 TDA 45a
27 STA AMPERV
mA 10a #eDRRUT
29 STA AMPERV+2
0 LOA #>0EB0T
3 STA AMPERV+2
32 RTS
VECTORISE LE BREAK *##*
JSR COMMUT ——;Commute 1a R
(OM et le Rank 1 ou 2
oo LDA #¢00 Vectorize le
ARK vers NAVETTE
39 STA TRO
40 LDA $360
a STA IRQ
a JSR UTIL sExéoute Ltut
ilitalre
aa BIT ROW Retour au BA
SIC
“a ars
45 RANK = DFR $80 20= Bank 1,
$80 = Bank 2
49 ** NAVETTE entre 1a RAM et 1a ROM **
SO sasee8 0
s1
s2* Sauvegarde des paranétres
53 co STA SAVA aa
54 STY SAVY ”
55 PLA
56 STA SAVP 2
57 LDA $6
se STA SAV6 oRE
59 IDA $7
60 STA SAV? +R?
6 PLA
62 STA $6 DRL BREE
63 PLA
4 STA 37 ADRH BRES2
6s
66 * Recherche I'instruction eprés le BR
6
oe WA 36
oo BNE SAUT
9 DEC $7
70 saur =e $6
m1 Loy 432
72 goUCLE LDA ($6),¥ —_;Praneniesion
de 1'nateuction
23 STA INSTR, Y
74 Dey
25 BPL BOUCLE
7 cue #S4C 4ORCODE — IMP
7 BEQ JUMP
79 cue 4S6C ZOPCODE ~ Jur
Indirect ?
79 BEQ JUMP
30 CMP S70 FOPCODE - Mr
préindéxé ?
a BEQ) JUMP
92
83 * Calcul adresse de retour en Carte 1
engage (souf si JuD)
a4 cle
65 LOA 96
56 aoc 432 ZADRL BRK+3
37 TAY
98 LOA $7
39 aoc #50 ZADRH BRE+3
90 PHA sADRII Retour
utilitaire - 1
2 YA
92 PHA ADRL Retour
utliitalre ~ 2
93
94 * Restauration des paranétres
96 JUMP = «BIT BANK sBank 1 ou 2
37 BPL Jt
98 BIT ROM2
99 BIT ROM2
100 UMP 2
101 Jt BIT ROME
102 BIT ROME
103 v2 LDA SAV6 2R6
104 STA 36
105 LOA SAV7 aR?
106 STA $7
107 Lor savy a
108 LOA SAVE 2P
109 PHA
120 ‘LOA SAVA aA
ua PLE
42 JSR INSTR
u3
dia oe
119" COMMUTE LA CAKTE LANGAGE *
447 commur— eHE
48 BIT BANK Bank 1 ov 2
uy BeL CL
41Z0 BIT RAMZ
121 BLT KAMZ
422 ume ce
123 cL BIT KAML
124 BIT KAML
4125 C2 PLE
126 KIS
127
128 teeeeessreesrensenen:
129 ** EXECUTE L'INSTRUCTION **
131 INSTR DS 3. sInstruction
aprés le BRK
132 RTs
133
ey ereereeteerererereeeeeeeteneay
135 ** SAUVEGARDE PARAMETRES **
136
137 SAVA oS
138 SAVY OS
139 SAVE OS
140 SAVé DS
141 SAV? oS
Routine ‘FRE(16)’
Aprés avoir saisi ce code sous
moniteur, vous le sauvegarderez par
BSAVE FRE(16),A$927C,L$1F9
927C- 4C 86 92 B5
9280- 6E C9 04 90 01 60 20 04
9288- 94 AG 73 AS 74 B6 6F 85
26
Pom's n° 23
— —
3290- 70 AY 55 AZ 00 85 SE 86 0300- A9 00 85 D& 68 AB 68 AG 92F8- 19 AS 1A 65 18 4C ES 92
$298- SF C5 5? FO 05 20 IF 93 0308- DF GA 48 9A 48 60 20 RI 9300- AO 02 Bl 18 18 65 18 &5
32A0- FO F7 A 07 05 OF AS 69 0320- 00 20 £3 DF 85 85 84 86 9308- 1A C8 BI 18 65 19 85 1B
92A8- AG 6A 85 SE 86 5F E4 6C 0318- 20 2C D5 C8 E8 20 E9 E3 9310- 60 AS 18 85 42 AS 19 85
92B0- DO 04 C5 6B FO 05 20 12 0320- 4¢ 9A DA 9318- 43 C8 Bl 18 85 08 C8 BI
92B8- 93 FO F3 85 94 86 95 AS 9320- 18 85 09 20 00 93 Ad 1A
92C0- 03 85 OF AS 94 AG 95 E4 9328- 85 3C AS 1B 85 3D AS 6D
92C8- 6E DO 07 C5 6D DO 03 4c 9330- 85 3E AS 6E 85 3F AO 00
92D0- BA 93 8&5 SE &6 5F AO 00 E P E. 5. 0 9338- 20 2C FE AS 6M 38 F5 08
92D8- Bl SE AA C8 Bl SE 08 C8 af skew . 9340- 65 6D AS 6E ES 09 85 6E
92E0- Bl SE 65 94 85 94 C8 BI 9348- A6 1B DO 03 20 Bl 00 60
S2F0- @A 30 D0 C8 BI SE AD 00 — 3358-01 DO FI 20 00 83 AS 1D
92F8- 0A 69 05 65 SE 85 SE 90 Sous ProDOS, 9360- FO 09 C6 08 AS 08 38 ES
9300- 02 E6 5F A6 SF E4 35 DO en 40 colonnes, 9368- 1D 85 08 AS IC FO 38 AO
9308- 04 C5 94 FO BA 20 1F 93 en 80 colonnes, 9370- 06 Bl 18 38 £9 01 91 18
9310- FO F3 Bl 5E 30 05 C8 Bl 9376- 68 Bl 18 £9 00 91 18 AO
9318- 5E 30 03 4C A9 93 C8 BI 9380- 02 Bl 18 38 E5 08 91 18
9320- 5E FO F8 85 18 C8 Bl 5E 9388- C8 Bl 18 E9 00 91 18 AS
9328- 85 19 C5 6F C8 Bl SE 85 9390- 1A 48 AS 1E 48 20 00 93
9330- 1A E5 70 BO E6 AS 19 CD Sur 9398- 85 43 AS 1A 85 42 68 85
9338- 14 94 AS 1A ED 15 94 90 93A0- 3D 68 85 3C 4C 2H 93 AO
9340- 68 AS 19 C5 6D AS 1A FS Apple J[+ 93A8- 06 RI 18 18 69 01 91 18
9348- 6E 90 DO A2 21 CA CA AS Apple lle 93B0- 88 BI 18 69 00 91 18 AO
9350- 19 DD 13 94 AS 1A FD 14 Apple //e+ 93B@- 02 Bl 18 18 65 08 91 18
9358- 94 90 F2 86 1B A2 03 BD 93C0- C& Bl 18 69 00 91 18 AS
9360- 13 94 9D 11 94 BD 14 94 Apple //ce 93C8- 6B 85 07 85 09 AS 6D 85
9368- 9D 12 94 BD 34 94 9D 32 93D0- 06 18 65 08 85 ED 85 08
9370- 94 BD 33 94 9D 31 94 BD 93D8- 90 04 £6 6E E6 09 AO 00
9378- 54 94 9n 52 94 AN 53 94 93E0- Bl 06 91 08 AS 07 C5 1E
9380- 9D 51 94 E4 1B E8 £8 30 93E8- DO 09 AS 06 Co 1A DU 03
9388- D6 A6 1B AS 19 9D 13 94 93F0- 4C 4C 93 C6 06 AS 06 C9
9390- AS 1A 9D 14 94 AS 18 9D Vous le trouverez 93F8- FF DO 02 C6 07 C6 08 AS
9398- 34 94 AS SE 9D 53 94 AS 9400- 08 C9 FF DO DR CE 09 AC
93A0- SF 9D 54 94 AS OF 9D 33 page 74. 9408- EO 93
93A8- 94 AS BF 18 65 5E 85 SE Vous avez déja
93B0- 90 02 E6 5F A6 SF AO 00 E.P.E. ?
SSO PGCEG GOAL ee Iss Nous le mettrons a Récapitulation
93C8- 85 6F AS 70 E9 00 85 70 niveau ! ‘NA VETTE’
93D0- BD 13 94 85 1C BD 14 94
93D8- 85 1D 88 CO FF FO 06 Bl
8s avoir saisi ce code sous
93E0- 1C 91 6F 30 F5 BD 33 94 Naik
9388-29 04 4A AB CB BD 53 94 ‘moniteur, vous le sauvegarderez par
BSAVE NAVETTE,A$300,L$B6
93F0- 85 1C BD 54 94 85 1D AS H
eos Beet owe face oe oe eae 7 VAR.OBU? 222-42 46 20 F5 03. a9 10 80
9400- CA CA 10 Bé AZ IF A9 00 f a
wor 3 99 ee ot ere eseese
- F7 5d if a
do ced Aprés saisie de ce code sous moniteur, 0318- A9 03 8D FF FF 20 00 DO
9418- FF FF FF FF FF FF FF FF
vous le sauvegarderez par : 0320- 2C 82 CO 60 80 8D B1 03
9420- FF FF FF FF FF FF FF
9428- FF FF EF FF EF FF FF BSAVE DIM.VAR.OBJ,A$927C,L$18E 0328- 8C B2 03 68 8D B3 03 AS
0330- 06 8D B4 03 AS 07 8D BS
9430. FF FF FF FF FF FF FF
BUR gy
927c- Ad 6B a4 18 0338- 03 68 85 06 68 85 07 AS
2
a = Atel abe 9280- Ad 6C 84 19 AO 05 84 08 0340- 06 D0 02 C6 07 C6 06 AO
Sa aa 9288- A2 00 86 07 86 1B 86 1C 0348- 02 R1 06 99 AN 03 88 10
9448- FF FF FF FF EF FF FF FF
9290- 86 1D 86 09 FO 19 20 D1 0350- F8 C9 4c FO 15 C9 6c FO
9450- FF FF FF FF FF FF FF FF
Sea. GEE Eee we 9298- 00 DO 04 E6 1B DO 35 C9 0358- 11 C9 7C FO 0D 18 AS 06
92A0- 24 FO 11 C9 25 FO 33 C9 0360- 69 02 Ad AS 07 69 00 48
9460- FF OFF FF FF OFF OFF OFF OFF
Biss ec ies San 92A8- CB FO 21 C9 C9 FO 20 95 0368- 98 48 2C 24 03 10 09 2c
a 92B0- 06 £8 DO E2 E6 1D AS 07 0370- 81 CO 2¢ 81 CO 1 7E 03
MURS EAE An 92B8- 09 BU 8> U7 AU OL BL BB 0378- 2¢ 89 CO 2C 89 CO AD BA
92C0- 20 BA 00 FO OF 20 B1 00 0380- 03 85 06 AD BS 03 85 07
. ‘ ’ 92CB- C9 CB DO 03 4C 50 93 £6 0388- AC B2 03 AD BI 03 48 AD
Routine ‘INPUT 92n0- 1¢ 4C 50 93 20 E5 92 4C 0390- B1 03 28 20 AD 03 08 2c
92D8- 11 93 E6 1D AS 06 09 80 0396- 24 03 10 09 2C 83 CO 2c
Apras avoir saisi ce code sous 92E0- 85 06 4C B4 92 AQ 00 BI 03A0- 83 CO 4C AB 03 2C 8B CO
moniteur, vous le sauvegarderezpar: -92E8- 18 C5 06 DO 07 ce Bl 18 03A8- 2C @B CO 28 60 00 00 00
BSAVE INPUT,A$300,L$23 92F0- C5 07 FO 1C 20 00 93 85 0380- 60 00 00 00 00 00
Pom's n° 23
e doute que personne
n'ai jamais eu de
problémes de lecture ou
de correction sur une
ligne malheureusement trop
grosse pour ére claire ou encore
pour que le curseur puisse la
parcourir d'une cxtrémité a
l'autre. D'autre part, certains
possédent peut-étre un
CRUNCHER (celui du Pom's 22
par exemple...), programme qui
installe sur une méme ligne
plusieurs autres consécutives en
les séparant avec les ‘deux-points’
(:) habituels.
Il est toutefois utile de pouvoir
transformer son programme
Applesoft afin qu'il n'y ait qu'une
instruction par ligne car il est alors
facile de lire un listing, de le
comprendre et de le modifier.
C'est ce que le DECRUNCHER
est 4 méme de faire.
Comment faire ?
Pour I'utiliser, il suffit de charger
par un LOAD le programme Basic
comme vous le faites d’habitude,
puis de taper :
BRUN DECRUNCHER ou
CALL 35072 sil est déja en
mémoire.
Les changements que le
DECRUNCHER effectue sont :
* une instruction par ligne sauf
aprés IF étant donné que ce qui
le suit est conditionné par le
test ;
* un renumérotage de 1 en 1
avec modification des GOTO,
GOSUB, DEL, des THEN,
LIST, RUN lorsqu'ils sont
suivis de numéros de ligne, et
enfin, des ON XX GOTO/
GOSUB.
Il existe toutefois quelques
HERUNCHER
limitations :
¢ le texte original écrit en Basic
ne peut prendre plus de 14336
octets soit 14 Ko, auquel cas il
affichera : TEXTE TROP
LONG ;
¢ ilne doit pas avoir plus de 640
lignes & l'origine. (Le nombre
de lignes qui résulte du
décrunchage n'est limité que
par l'Applesoft lui-méme) ;
+ le programme décrunché ne
doit pas pouvoir faire plus de
18688 octets, soit 18,25 Ko.
(Le programme décrunché
étant généralement plus
important que l'original) ;
* au cas ol le programme
découvre un GOTO, GOSUB,
DEL, LIST, se référant 4 une
ligne inexistante, il enverra :
PAS DE LIGNE X.
Le principe
Il est tout d'abord nécessaire,
voire indispensable d'étudier
tapidement la structure du texte
d'un programme Applesoft en
mémoire. L'adresse de début du
texte se trouve en TXTTAB
($67.68) et la fin en PRGEND
(SAF.BO). Ce sont donc les octets
situés entre ces deux adresses
qu'il s'agira de traiter. Ce
traitement se déroulera globa-
lement ainsi :
+ lire les 2 premiers octets qui
représentent l'adresse de la
prochaine ligne ;
* lire les 2 suivants qui ne sont
autres que le numéro de la
ligne ;
* puis étudier la suite de la ligne
afin de trouver ‘:’ ;
* sion les trouve, marquer la fin
de la ligne actuelle par un octet
nul puis commencer une
nouvelle ligne sur laquelle on
mettra la suite ;
Patrice
Neveu
* sinon, passer 4 la prochaine
ligne.
En cours de route, 4 chaque fois
qu'on lira une nouvelle ligne de
loriginal, on mémorisera son
numéro ainsi que celui de celle qui
suivra. (N'oublions pas qu'il y a
renumérotation !) Avec un tel
processus, on obtient le
programme décrunché, mais sans
que les GOTO, GOSUB etc.
soient modifiés. Une deuxiéme
passe s'impose alors ; il faut :
* lire la ligne comme
précédemment mais en
cherchant tous les mots-clé
susceptibles d'étre suivis par
un ou plusieurs numéros de
ligne ;
+ identifier ce ou ces numéros et
les rechercher dans la table
construite précédemment ;
* si on a trouvé, échanger
l'ancien numéro par le nouveau
qui est issu. de la
renumérotation ;
+ sinon, il y a une erreur et on
S'arréte ;
* puis, si tout va bien, on passe
a la prochaine instruction.
Il est alors utilisable, mais mieux
vaut le sauver avant car, s'il
empiéte sur la page graphique 1 et
qu'il l'utilise, gare aux
problémes !
Enfin, 4 titre d'exemple, voici un
listing et sa représentation en
mémoire :
10 TEXT :
20 GOTO 10
HOME
0800- 00 09 08 OA 00 89 3A 97
O808- 00 11 08 14 00 AB 31 30
0810- 00 00 00
$801.802 : adresse de la
prochaine ligne
28
Pom's n° 23
$803.804 : numéro de ligne décrunché s'écrira ainsi :
$80B : token de HOME
$000A = 10 0 TEXT $80C : fin de ligne
$805 : token de TEXT 1 HOME $80D.80E : adresse de la
2 GOTO Oo prochaine ligne
$80F.810 : numéro de la ligne
$808 : fin de ligne 800- 00 07 08 00 00 89 00 OD $811 : token de GOTO
$809.80A : adresse de la BOQ> 08:01 0-97 00-24 08-02 $812 : code ASCII de 0 ($30)
prochaine ligne 10> 005830500 90.100 $813 : fin de ligne
$80B.80C : numéro de ligne $814.815 : fin de programme
$0014 — 20 ee $801.802 : adresse de la ee
$80D : token de GOTO prochaine ligne = ,
$80E.80F : codes ASCII de 1 $803.804 : numéro de la ligne mi — des lignes suivantes
($31) et de 0 ($30 t et les numéros de lignes sont
$810:: fin de ligne » $806 : fin de ligne inscrits avec l'octet bas suivi de
$811.812 : fin de programme $807.808 : adresse de la Yoctet haut.
prochaine ligne es
Le méme programme mais $809.80A : numéro de la ligne
gr ;
Programme DECRUNCHER.S
‘DECRUNCHER DEMO’ Assembleur Big Mac
10 YEXT ; HOME : INVERSE : PRINT “ D i
EMONSTRATION DE DECRUNCHAGE “: NO H LEE
RMAL : POKE 34,1
20 PRINT “VOICI LE LISTING DE CE PROGRAMM ‘ ee
E:": PRINT : LIST 6
30 VYAB 22: FLASH : PRINT “ FRAPPEZ UNE T 7
OUCHE POUR LE DECRUNCHER PUIS FAITES g teeenasensnseneeesensceneneeeeene
LIST POUR VOIR LE RESULTAT";: GET R$: P 9 * DECRUNCHER 1.3 .
RINT 2 NORMAL Ty seersebesas sepaneparsrceenepaiene
40 POKE 34,0: PRINT CHR$ (4)"BRUN DECRUN 5 PARSEAABICE NEVEY
CHER™ 13 FERRE EEEEEAEUEEAEAAEAEAER TET TETE
a* ’
15 * = UNE INSTRUCTION PAR LIGNE #
ig * SAUF APRES ‘IF* Sa
17 * - RENUMEROTATION DE 1 EN 1 #
Ze les AVEC LES GOTO/GOSUB/RUN é
3 = LIST/ON/DEL REMIS A JOUR ’
Le méme programme, , cas ;
mais ‘décrunché 21 * - SOURCE MAXIMUM: 14K #
22 * 640 LIGNES #
23 * - RESULTAT MAX. : 18.25K £
@ FRET 24+ 64000 LIGNES#
1 HOME 2 2 #
2 INVERSE 26 tHteeeeneeeesnenenansenneanenstee
3 PRINT" DEMONSTRATION DE DECRUNCHA 27
GE ss =
4 NORMAI, e
5 POKE 34,1 ai
6 PRINT "VOICI LE LISTING DE CE PROGRAMME. 32 BASIC —-EQU $0300 RETOUR A L'APPLESOFT
EAs 33 STXTPT EQU $D697
7 ~PRINT MET TXTPTR A LA VALEUR DE
& LIstT (TXTTAB) -1
9 VTAB 22 34 STROUT — EQU $DB3A SOUS-PROGRAMME D'AFFICHAGE
10 FLASH D'UNE CHAINE
11 PRINT " FRAPPEZ UNE TOUCHE POUR LE DEC eS bli ped pele iy hee pa TSIEN GEE
RUNCHER PUIS FAITES LIST POUR VOIR LE 37 FIN FQU SEC4A NOMBRE FLOTTANT ==> FAC PA
RESULTAT"; R CHRGET
GET R$ 38 LINPTR EQU $ED24 CONVERTIR ET AFFICHER X,A
PRINT EN DECIMAL
NORMAL 39 FouT EQU SED34 FAC ~-> CHAINE DE CHIFFRE
POKE 34,0 40 CROUT EQU $FC62 RETOUR CHARIOT
& PRINT CHRS (4) "BRUN DECRUNCHER" é au Eiigenen Bi CONES
43 LIMITE EQU $4000 LES DEUX ZONES: $0800. 3FFF
J
Pom’'s n° 23 29
7$4000.4900 103 STX LINLEN DE LA LONGUEUR DE LA LIGNE
44 ESPACE — BQU $3800 ETENDUE DE LA 1ERE ZONE 104 STX LINNUM ET DE SON NUMERO
45 105 STX LINNUM+2
46 106
47 LINADR EOU $06 ADRESSE LIGNE COURANTE 107 IDA #>TABLE PREPARE LA TABLE OU SER(
48 TXTPTRS EQU $08 SAUVEGARDE DE TXTPTR RANGES LES
49 NOMPTR © BQU 918 POINTEUR 108 STA TABPTR+2 ANCIENS NUMEROS DE LIGNE
50 LINLEN EQU $10 LONGUEUR NOUVELLE LIGNE UIVIS DES
51 ONFLAG = EQU SIE =1: ON XX, >=2: ON XX GOTO 109 LDA #<TABLE NOUVEAUX
» 20 SINON 110 STA TABPTR+1
52 LISTFLAG EQU $1F ~ 1 SI LIST (XXXX), 0 SINO 111
N 112 LDX #90 MAIS IL FAUT LA REMPLIR D@
53 LINNUM —-EQU $50 REGISTRE CONTENANT LE NUME SEF AVANT:
RO DE LIGNE 113 LDA #<TABLE
54 TXTTAB —- EQU $67 DEBUT DU TEXTE RASTC 114 STA CLR+1
55 LOMEM EQU $69 DEBUT DE LA ZONE DES VARIA 115 LDA #>TABLE
BLES SIMPLES 116 STA CLR+2
56 ARYTAB —-EQU $6B DEBUT ZONE DES TABLEAUX = 117 IDA #SFF
57 STREND —_EQU SéD FIN DES TABLEAUX, DEBUT DE 118 LbY #500
ZONE LIBRE 119 CLR STA TABLE, ¥
58 HOHO EQU $9E 2EME OCTET DE FAC 120 INY
59 MOH EQU $9F SEME UCTET DE FAC 121 BNE CLR
60 PGREND -EQU SAF ADRESSE DE LA FIN DU TEXTE 122 INC CLR+2
Dil PROGRAMME 123 INX
61 CHRGET — EQU $D1 PREND LE PROCHAIN CARACTER 124 CPX #10
— OU TEXTE 125 BNE CLR
62 CHRGOT — EQU $87 PREND LE CARACTERE POINTE 126
ACTUELLEMENT 127
63 IXTPTR —-EQU $B8 POINTEUR DE CARACTERE DANS 128 * SAUVE LE TXTPTR
LE TEXTE 129 teennn nnn --
64 DELFLAG QU SCE = 1 SI DEL XXXXX (,XXXXX), 130
=0 SINON 131 LDA TXTPTR
65 TEMP1 EQU SEB 4 OCTETS (SER.FF), PARTIE 132 STA TXTPTRS
DE CURGET 133 LDA TXTPTR+1
+66 CHAINPTR EQU SEE POINIEUK DS LA CHAINE DUN 134 STA TXTPTRS+1
0 DE LIGNE 135
67 REMFLAG QU $FC =1 SI ON FST DANS UN REM, 136 *--—-
0 SINON 137 * VERIFIE SI LE PROGRAMME PET
68 IFFLAG QU SED =1 SI ON EST DANS UN IF, 0 138 * ETRE DECRUNCHE
SINON 139 *-—
69 ACC EQU SFE SAUVEGARDE DE L'ACCUMULATE 140
oR 141 LDA PGREND+1 C'EST LE HAUT DE LA FIN 0a
70 GUILLELAG EQU $FF -1 SI ON EST DANS UNE CHAI ‘PROGRAMME
NE, 0 SINON 2142 CMP #>LIMITE DEPASSE LA LIMITE FIXEE ?
n 143 BCC BEGIN NON, ON PEUT Y ALLER...
72 CUILL EQU $22 TOKENS APPLESOFT 144
73 DEL BQU 985 145
74 GOTO EQU SAB 146 * ERREUR, IMPOSSIBLE A DECRUNCHER
75 RUN EQU SAC 147
76 IF FQU SAD 148
77 GosuB EQU $80 149 LDY #>LENMSG
78 REM EQU $B2 150 LDA #<LENMSG
79 ON EQU $B4 152 vSR STROUT AFFICHER LE CHARMANT MESSA
80 LIST EQU $BC GE QUI SUIT:
81 THEN EQU $c4 152 JSR BELL SUIVI D'UN BIP DE MAUVAIS
82 AUGURE
83 153 UMP WAOU REMETTRE TOUT EN ORDRE AVA
84 #---- NT DE SORTIR
85 * INITIALISE 154
155 LENMSG HEX @D REVENIR A LA LIGNE
156 ASC "TEXTE TROP LONG"
88 LDY #SEA SEA = NOP 157 HEX @D00
89 IDX #3 ON VA DONC MODIFIER CHRGET 158
(ET CHRGOT) 159
90 INIT LDA $BE,X EN Y METTANT 4 NOP AFIN D' 160 * COMMENCE A DECRUNCHER
EVITER DE 161 *
9 STA TEMP1,X SAUTER LES ESPACES DANS UN 162
REM OU UNE 163 BEGIN JSR STXTPT FIXE TXTPTR AU DEBUT DU PA
92 STY $BE,X CHAINE. DE CARACTERES. OGRAMME -1
33 DEX 164 LDY TXTTAB ADDITIONNE LA LONGURUR DE
94 BPL INIT L'ESPACE
95 165 STY TXTPTR2+1 DISPONIBLE A L'ADRESSE DE
96 INX REMETTRE X-0 POUR L'INITIA DEBUT DU
LISATION 166 STY LINADR TEXTE -> TXTPTR2 POUR CHRB
97 STX GUILLFLAG DU DRAPEAU A CUILLEMETS oe
98 STX IFFLAG IE 167 LDA TXTTAB+1 — -> LINADR
99 STX REMFLAG REMARQUES 168 cLe
100 STX ONFLAG ON XXXXX GOTO/GOSUB 169 ADC #>ESPACE
101 STX LISTFLAG — LIST (XXXX, XXXX) 170 STA TXTPTR2+2
102 SIX DELFLAG DELETE XKXX (, XXXX) 171 STA LINADR+1
<a
Pom's n° 23
172
173
174
175
176
177
178
179
180
181
182
183
184
185
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
220
221
222
223
224
225
226
227
ze
223
LIGNE
LIN
LINCHR
LINCHRS
LINCHR6
LINCHR4
LINCHR1
BOI
DECRUNCH
Del
BOL
JSR CURGET
JSR CHRPUT
JSR CHRGET
cLe
ADC #>ESPACE
JSR CHRPUT
JSR CHRCET
STA NUMPTR
JSR CHRGET
STA NUMPTR+1
JSR LINTAB
JSR LINPUT
JSR CHRGET
STA ACC
BEQ EOI
LDA ACC
JSR CHRPUT
CMP #REM
BNE LINCHR6
LDA #1
STA REMFLAG
CMP #IF
BNE LINCHR4
LDA #01
STA IFFLAG
CMP #GUILL
BNE LINCHR1
LDA GUILLFLAG
EOR #$01
STA GUILLFLAG
UMP LINCHR
LDA ACC
BNE DECRUNCH
JSR EOL
UMP BOL
LDA GUILLFLAG
BNE LINCHRS
TDA REMFLAG
BNE LINCHRS
LDA IFFLAG
BNE LINCHRS
LDA #0
JSR BOL
LDA LINADR
JSR CHRPUT
LDA LINADR+1
USR CHRPUT
INC LINNUM
BNE DC1
INC LINNUM+1
UMP LIN
JSR CHRGET
PREND & STOKE L'ADRESSE DE
LA PROCHAINE
LIGNE
PREND LE NUMERO DE LA LIGN
B
A METTRE DANS NUMPTR POUR
QUE LINTAB ET
LINPUT S'EN SERVENT
PRENDRE UN CARACTERE
EOI=FIN D' INSTRUCTION:
FIN DE LIGNE
METTRE LE CARACTERE POUR I.
E RESULTAT
MAIS CE N'EST PAS UN REM..
SINON IL FAUT SE LE SIGNAL
ER
SI CE N'EST PAS UN IF.
AUTREMENT, LE SIGNALER
SI CE N*EST RIEN DE TOUT C
ELA
SI PAS DE GUILLEMET (0) AL
ORS DEVIENT 1
SI ON EST DEJA DANS UNE CH
AINE (1) CA
DOIT DONC DEVENIR 0
PASSE AU PROCHAIN CARACTER
E
CETTE FIN D' INSTRUCTION C’
EST QUOI ?
C'EST UN : ALORS CREER UNE
AUTRE LIGNE
SINON C'EST UNE FIN DE LIG
NE (00)
ST CE : RTATT DANS UNE CHA
INE, UN REM
OU UN TEST (IF) ALORS ON N
E DOIT PAS
DECRUNCHER SOUS PEINE DE C
ATASTROPHE !
CALCULER ADRESSE DE LA PRO
CHAINE LIGNE
QU'IL FAUT STOKER EN DEBUT
DE LA LIGNE
ACTUELLE ET AUSSI A LA FIN
POUR LA
PROCHAINE.
INCREMENTE LE NUMERO DE LI
GE
POUR FAIRE LA PROCHAINE...
VA LE STOCKER PUIS LIT LA
LIGNE
IL FAUT PRENDRE LES 2 PROC
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
HAINS OCTETS
JSR CHRGET POUR SAVOIR SI ON A FINI
BEQ FINI CE QUT FST LR CAS ST A=00
IDA LINADR SINON ON REMPLACE CES 2 0¢
TETS
JSR CHRPUT
IDA LINADR+1
JSR CHRPUT
INC LINNUM (EN FAIT ICI, ON EST EN D
ECRUNCHAGE )
BNE BOL1 (MAIS ON FAIT PAREIL QUE
PRECEDEMENT)
INC LINNUM?+1
BOLL UMP LIGNE
FINI LDA 480 METTRE 3 OCTETS NULS POUR
MARQUER LA
JSR CHRPUT FIN DU TEXTE DECRUNCHE
JSR CHRPUT
JSR CHRPUT
UMP AJUSTE
* C'EST DECRUNCHE, RENUMEROTE
wAOU IDA #$00 MAINTENANT QUE LES GOTO ET
GOSUB SONT
JSR CHRPUT MIS A JOUR, ON MARQUE LA F
IN DU PROGR.
JSR CHRPUT QUI EST DORENAVANT TERMINE
JSR CHKPUT
LDA TXTPTRS REMET LE TXTPTR TEL QU'ON
L'A TROUVE
STA TXTPTR AVANT DE DECRUNCHER
LDA TXTPTRS+1
STA TXTPTR+1
IDX #3 ET RETIRER LES NOP POUR RF.
MBTTRE CHRGET
i
fi
NY APPLE COMPUTER FRANCE
recherche pour
développer son Service Clientéle, des
SUPPORTS TECHNIQUES
¢ Possédant une trés bonne connaissance de la
micro-informatique.
¢ Capables de proposer des solutions utilisant les produits
APPLE.
@ Ayant le sens du service et de la communication.
¢ Disponibles rapidement pour rejoindre Apple Computer
France au si¢ge des ULIS.
¢ Connaissance technique du matériel, langages de pro-
grammation, télécommunications souhaitée,
5
i
6
Merci d’adresser lettre manuscrite, C.V,
et prétentions (sous réf, D 1231) a; a
Jean-Luc FARAT
APPLE COMPUTER FRANCE
Avenue de l’Océanie 4
Z.A. de Courtabeeuf - B.P. 131
91944 LES ULIS Cedex. Apple
Pom's n° 23
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
260 FINI
* AJUSTE LES GOTO / cosUB
AJUSTE
COPYLIN
CHRCHGO
CHRCHGOO
CHRCHGOL
CHRCHGOZ
LDA
STA
STA
STA
STA
STA
LDA
STA
STA
STA
STA
PIA
PLA
oMP
LDX
STX
STX
INK
STX
STX
STA
STA
STA
JSR
JSR
JSR
JSR
BEQ
BEQ
CMP
BEQ
TEMP1,X
SBE, X
FINI1
TXTPTR2+1
PGREND
LOMEM
ARYTAB
STREND
TXTPTR2+2
PGREND+1
LOMEM+1
ARYTABHL
STREND+1
BASIC
A SON ETAT D'ORIGINE
ET FIXE DIFFERENTS POINTEU
RS
HOP, C'EST FINI
TXTPTR2+1
LINADR
TXTTAD+
TXTPTR2+2
LINADR+1
#>LIMITE
TXTPTR+1
EOLO
CHRGET
CHRPUT
CHRGET
waou
#>ESPACE
CHRPUT
CHRGET
CHRPUT
CHRGET
CHRPUT
ONFLAG
#2
GOFOUND
LISTFLAG
TESTNUM
DELFLAG
E GOFOUNDI
CHRCET
CHRPUT
COPYLIN
40N
cHRCHGO2
ONFLAG
curcHGoo
#G0TO
GOFOUND
#COSUB
GOFOUND
#RUN
TESTNUM
INITIALISE:
TA LONGUEUR DE LA LIGNE
LE POINTEUR SOURCE
LE POINTEUR RESULTAT
L'ADRESSE DE LA LIGNE EN C
ours
CALCULE ADR. LIGNE QUE L'0
N COMMENCE
PRENDRE L'ADRESSE DE LA LI
GNE SUIVANTE
ET LA STOCKER COMME RESULT
ar
SI LA PARTIE HAUTE EST NUL
LE C'EST FINI
SINON CE RESULTAT COMMENCE
EN $0800
C'EST AU TOUR DU NUMERO DE
LIGNE
CONTENU EN 2 OCTETS
ON RECOPIE LA LIGNE EN REC
HERCHANT UN
SAUT (GOTO / GOSUB OU THEN
XXXKK)
00 SIGNIFIE UNE FIN DE LIC
NE
GOTO: TRAITEMENT SPECIAL D
E LA SUITE
GOSUB EGALEMENT
LE RUN (XXXXX) EST TRAITE
COMME UN THEN
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
343
350
351
352
353
354
355
356
357
358
359
360
361
36z
363
364
365
366
367
36R
363
370
371
se
373
374
375
376
377
378
379
380
3a1
382
383
384
CMP
BNE
INC
BNE
CHRCHGO3 CMP
ANE
Inc
BNE
CHRCHGOS =CMP
aLIST
CHRCHEO3
LISTFLAG
CHRCHGO
4#DEL
CHRCHGOS
DELFLACG
CHRCHGO
#THEN QUAND AU THEN, PEUT-ETRE..
CE N'EST RIEN DE TOUT CELA
+ CONTINUER
CHRCHGO
* POUR LE THEN IL FAUT UN NUMERO
. SSEE
TESINUM JSR CHRGET ON PREND LE CARACTERE SUIV
ANT LE THEN
CMP #530 ASCII INFERIEUR AU CODE DE
0
BCC CHRCHGOl = AU QUEL CAS ON CONTINUE DE
COPIER...
CMP #534 SINON PEUT-ETRE EST-CE SUP
ERIEUR A 9 ?
BCS CHRCHGOl ET ALORS ON COPIE BETEMENT
LA SUITE
BCC GETEND SINON ON TRITURE LE NUMERO
DE LIGNE !!
* POSITIONNE SUR LE NUMERO
GOFOUND INC ONFLAG
GOFOUNDI JSR CHRGET POUK LES GOTO / GOSUB (ET
ASSIMILES)
* TRANSFORME LA CHAINE EN 2 OCT.
GETEND © EQU *
JSR FIN GRACE A CUIRGET ON CHARGE D
ANS FAC LE NO
JSR GETADR PUIS ON LE TRANSFORME EN Z
OcTETS
LDA #>TABLE ON SE PLACE AU DEBUT DE LA
TABLE OU
STA NUMPTR+1 — SONT RANGES LES ANCIENS NU
MEROS DE
LDA #<TABLE LIGNES ET LEURS REMPLACANT
3
STA NUMPTR
IDENTIFY LDy #0
LDA (NUMPTR),Y LE BAS DU VIEUX NUMERO DE
LA TABLE EST
CMP LINNUM COMPARE A CELUI QU'ON RECH
ERCHE
BNE NEXTIDO SI CE N'EST PAS LE MEME, A
U SUIVANT !
Iny
LDA (NUMPTR),Y PUIS ON PASSE AU HAUT DU N
UMERO
CMP #250 QUI DOIT ETRE INF. 2494256
+255 = 63999
BCS GOERR SI C'EST PLUS ALORS ERREUR
iy
CMP LINNUM+1 — SINON ON COMPARE AU HAUT R
ECHERCHE
BEQ CHANGE ET ON LE CHANGE SI C'EST T
ROUVE
NEXTIDO EQU * ON PASSE AU NUMERO SUIVANT
32
Pom's n° 23
385
386
387
398
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
41a
419
420
421
422
423
124
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
44a
DE LA TABLE
CMP 4SFF DES $FF SIGNALENT LA FIN D
5 LA TABLE
BEQ GOERR ALORS LE NUMERO N'EST PAS
TROUVE, ERR !
NEXTID LDA NUMPTR AUTREMENT, ON VA 4 OCTETS
PLUS LOIN
cLc POUR TROUVER UN NOUVEAU NU
MERO
ADC #4 ( 2 POUR L'ANCIEN + 2 POUR
LE NOUVEAU )
STA NUMPTR
BCC NEXTEND PAS DE RETENUE POUR L*ADDI
TION
INC NUMPTR+1 — SINON, EN TENIR COMPTE
NEXTEND JUMP IDENTIFY ET CA REPART POUR UN TOUR.
* ERREUR, UN NUMERO DE LIGNE QUI
* EST APPELE N'EXISTE PAS
GOERR LDY #>GOMSG AFFICHER UN IGNOBLE MESSAG
E D'ERREUR
LDA #<GOMSG
JSR STROUT
EDA LINNUM+1 ON PREND LE NUMEKO DE LIGN
E RECHERCHE
LDX LINNUM
JSR LINPTR POUR L'AFFICHER
JSR CROUT PUIS ON PASSE A LE LIGNE
USK BELL AVEC UN BIP AGACANT
UMP WAOU
GOMSG HEX 8D
ASC "PAS DE LIGNE ”
HEX 00
ee = =
“ ICI S'EFFECTUE LE CHANGEMENT DE
* NUMEKO DE LIGNE
CHANGE —INY ON POINTE DANS LA TABLE SU
R LE NUMERO
LDA (NUMPTR),Y TROUVE APRES GOTO/GOSUB DO
NC ON
STA MOH POURSUIT EN PRENANT LE NOU
VEAU QUI EST
any 45SU DE LA RENUMEKOTATION
ET ON LE MET
LDA (NUMPTR),Y DANS FAC.
STA HOHO
Y eee a =
* TRANSFORME LE NUMERO EN CHAINE
LOX #$90 CECI EST PRESQUE UN LINPTR
($ED24)
SEC CAR CA COMMENCE PAREIL,
JSR AXFAC
JSR FOUT
STY CHAINPTR+1 MAIS CA N'AFFICHE PAS FAC
!
STA CHAINPTR
LDY 40
WRITENUM LDA (CHAINPTR), YPRENDRE LA CHAINE REPRESEN
TANT LE
BEQ WRITEND NOUVEAU NUMERO, ET L'INCLU
RE DANS LE
JSR CHRPUT PROGRAMME DECRUNCHE APRES
LE GOTO
INY LE GOSUB OU ENCORE LE THEN
BNE WRITENUM
WRITEND JSR CHRGOT PUIS IL FAUT LIRE LE DERNL
ER CARACTERE
JSR CHRPUT LU APRES LE NOMBRE ET LEC
445
446
447
448
449
450
451
RRQ WRITENDI
UMP CHRCHGO
EQU *
UMP COPYLIN
* S0US-PROGRAMMES
OPIER
SI C'EST UN 0 -> FIN DE LI
ONE
SINON, SUITE DE LIGNE...
END OF LINE CALCULE L'ADRE
SSE DE LA
LIGNE SUIVANTE EN ADDITION
NANT LA
LONGUEUR DE LA LIGNE ACTUE
LLE ET SON
ADRESSE DE DEBUT
LE RESULTAT EST REMIS DANS
LE PROGRAMME
POUR CONSERVER SA COHERENC
E
CECI SERVIRA A LA LIGNE SU
IVANTE
ON VA RECOMMENCER UNE LIGN
& DONC:
LONGUEUR DE LA LIGNE - 0
ON XXXX GOTO/GOSUB EST TER
MINE
LIST XXXXX, XXXXX FGALEMENT
» AINSI QUE
DEL XXXXX, XKKXK
LA CHAINE DE CARACTERE ENT
RE GUILLEMETS
LE TEST AVEC IF
LE REM OU IL NE FALLAIT RI
EN CHANGER
CETTE ROUTINE EFFECTUE LA
TACHE OPPOSEE
A CELLE DE CHRGET,
R REMETTRE UN
OCTET PRIS PAR CHRGET,
S LE RESULTAT
EN METTANT A JOUR LA LONGU
EUR DE LA
LIGNE.
A SAVOI
DAN
CECI POUR CONSERVER LE REG
ISTRE D'ETAT
STOCKE LE NUMERO DE LA LIG
NE ACTUELLE
EN 2 OCTETS MIS EN LINNUM
(950.52)
452 *.
453
454 EOL zQu *
455 JSR CHRPUT
456 FOLO LDA LINADR
457 IDX LINADR+1
458 IDY #0
459 cic
460 ADC LINLEN
462 STA (LINADR),¥
46
Showing the first 100000 of 255879 characters.