Text content (OCR)
@ Disquettes spéciales avec BOOTDATA
@ Lissajous : évolution de la courbe
@ Fenétres en HGR sur |’ Apple //
@ Tri de Chaines sur Macintosh
@ Carte Super Série et CP/M ;
@ Courbes avec le MSBasic —
@ 68000’s : un accessoire es
@ Startup Pascal complet ——s
@ Commandes ProDOS -
@ Programme éducatif
@ Loupe pour HGR ——— =
@ CALLRWTS
NUMERO 26 - PRIX 40 F
ISSN : 0294-6068
Des lizaines et ces dizanes 'Apple It
ont déja été transformés en set-
veuts par leurs propriétaires,
avec I'un ou plusieurs des
systémes concus pour
exploiter les perfor-
mances uniques de ‘
fa cane Apple Tall :
T xesor ;
pour la
consul-
tation d'un service d'information a partir de Minitels. Arborescence. Mots-clés, Journal cyclique.
Jusqu’a quatre acces simultanés. De 25 4 2 000 pages Télétel. La moins chére des
configurations mini-serveur disponibles sur le marché
Fakir: une puissante messagerie électronique, permettant toutes les formes
d'interactivité. Communication individuelle, sélective ou globale. Bulletin d'infor-
mation. Gestion des comptes. Annuaire. Pour professionnels, libéraux, associa-
tions, collectivités, Jusqu’a 500 abonnés et 1 000 messages en attente.
Télépom: c'est un basic orienté vidCotcx ct télécommunications. Pour
créer toutes les applications télématiques dont vous révez: serveur uni.
Versel (texte, graphique), gestion et partage de fichiers. Télétraitement.
Exploitation a distance de votre systéme.
Sourigraph: éditeur plein écran Télétel. Tres inspiré de
«MacPaint», Sourigraph permet I'insertion, la suppression, le
déplacement de caractéres, de lignes ou de zones. Cerclez
tirez, cliquez, pas besoin de clavier pour travailler votre
page Télétel.
Apple-Tell Minitel
Minitel sur
cde pages Téiétel. Procéare
Et les autres: systémes sous Pascal UCSD. et
PraDos, modules «Merveilles d'A.C.M
(en mono ou en multivoies), ete.
(Consultez-nous,)
dsquetes (pour traitement cans ls ou
dards de Apple: Multiplan, Appl
etc.). Fournt avec la carte Apple-Tell
ASCII Express The Pro: un trés grat
*Caractéristiques américatn des télécommunications sur
générales: 1BM PC, adapté a Apple-Tell. Emulation TTY
# modem 1 200/75 IBM 3101, Televideo 912. Procédures autom:
(Ceitt) et 300 full, Emission et réception de fichiers, Enregistrement des dow
ae nées sur disquette, Impression. 300/300 et 75/1200.
peared Version-Com: des fonctions comparables & celles d'ASCII-E3
eae mais avec le luxe désormais inappréctable du controle par sc
ene des menus déroiilants. Couper/Copier/Coller. Ascenseur.
(N&B) et nenus déroidants. Couper/Copier/Coller. Ascenseu
ant Calva-Kit: consultation entierement automatique du serveur Calvados
sont abonnés des millers d'utilisateurs Apple et que les Américains nous ent
(messagerie, panneaux dannonces, Bourse, dépéches de l'AFP, etc.)
Discobole: transfert de disquettes par télépbone. A grande vit
(120 caracteres par seconde) et en toute sécurité. Dos, ProDos, Pascal, CP/M
Télébasic: Pomme d'Or 1984 du meilleur logiciel systéme. Extension télématique du
basic Apple, permetiant de programmer la uarte Apple-Tell dans tous ses recoins. Ter-
minaux automatiques, mais aussi serveurs. Par l'auteur de Version-Com.
Basi: ce module systéme permet la commande du Modem de la carte TDS
Apple-Tell depuis le Basic, sous Proos.
7 WLLO
Et les autres: capture d'adresses depuis l'Annuaire Electronique, 1, rue de Metz
télétraitement 4 75010 PARIS
S.M.16
sur Apple Il, ete. pe” Tél,: (1) 45.23.30.34
(ameteven) Télex: 641 155
Nom
7
F socitté
A Adresse
f Ville
I Code postal Tél
! D0 Soutaiee recevoir une documentation sur le yystéime Apple-Tell
Numéro 26
septembre-octobre 86
Editorial o
Hervé Thiriez Page 5
irT de acehins
Jean-Luc Bazanegue
Page 40
Fenétrage :
Un accessoire
‘aide-mémoire’ pour
les programmeurs :
des fenétres en HGR 68000's
Frédéric Rosay Julien Thomas
=) Page 6 Page 46
Des disquettes sans DOS, Courbes
qui se présentent, en 35 ou Marianne Sutz
36 pistes : el ia
BOOTDATA Dominique
coMcolee, _— LoupeHGR
ca) Ds) Page 13 2, Te ey rn.
Page 53
Renommez les
commandes ProDOS CALLRWTS
(ea) 7 Bruno Fénart Patrice Ni
I+ “ We atrice Neveu
Pour un BOOT
ergonomique :
Startup Pascal
complet Daniel Mueller
He
I Page 27
Un programme éducatif
pour les tout-petits :
Compter.animaux
— "s— Alain Idelon-Ritton
& (“e]] Ce
= =) cee Page 63
Carte Super Série
et CP/M
Premiére Partie
I= Tle Jean-Francois Rabasse
= Page 32
Lissajous
dainty Norbert Vurlod
[77e}
Courrier des Lecteurs Page 70
Micro-informations Page 71
Jean-Michel Gourévitch
Les annonceurs ; Apple : pages 38 et 39, Infomag : page 75. Hello Informatique : page 2. PSI : page 76.
Editions MEV - 12, rue d'Anjou - 78000 Versailles. Directeur de la publication : Hervé Thirlez
Pom's n° 26
Le chemin des écoliers, tel est souvent le pas-
sage par le Bureau. Pour changer d’application, il suffit
aujourd'hui d’appeler I’accessoire “Raccourci”. Aprés avoir
confirmé votre intention de quitter le programme en cours,
une fenétre de sélection apparait et un simple double-clic
vous fait passer de Basic 4 ScreenMaker, de MacPaint &
Multiplan et, pourquoi pas, de MacForth & MacPoker....
Des avantages :
Sur un 128 Ko, ne pas passer par le Finder c’est
éviter des manipulations gourmandes en temps et
en patience.
Sur un 512 Ko, es applications disposent de toute Ia
place mémoire.
Sur un Mac Plus, tes changements sont quasi-
instantanés et les 768 Ko de mémoire cache sont
disponibles,
Compatible avec Switcher : vous pourez
changer I’une ou I’autre des applications gérées par
Switcher directement par cet accessoire.
Compatible disques durs : méme si votre dis-
que dur est partagé via AppleTalk...
Disponible & tout moment, “Raccourci” est toujours
utilisable car il ne nécessite pas une installation
préalable des applications (sait-on toujours &
Vavance quelles applications seront nécessaires &
un travail donné ?).
Avec Pom’s, travaillez directement !
| A propos de MacDraw...
t Le rneetteal.
ad litteram .
Idle
Album
Horloge
Calculette
Tobleau de bord
Sélecteur d'imprimante
Voulez-vous quiller
Macnraw ? A
ON
re Taegu
en's
Oui Annuter | Ney S/
© D.MP &Prog.cp
@ Download ges
& Edit f Ejoctar
@ Fedit 3.0 | (Ctectenr)
A : lecteur
@ Font-0A Mover (demeure:)
O bple.s i ——
& MacDrauws
@ MacPaint
& Maclilrite
Disquette “Raccourci” - 200,00 F franco - Bon de commande page 74 - ©Editions MEV
Hervé Thiriez = Editorial
Serions-nous a-]’étroit dans nos 140Ko.? L’adoption d’une ‘nouvelle mise en pages et d’une
typographie plus dense. pour les listings nous’ permet. de vous proposer un “Pom’s” toujours
plus riche, mais il devient: difficile de mettre tous: les: programmes Apple // sur la méme dis-
quette. Sur celle du précédent numéro comme sur celle-ci, nous avons été conduits 4 supprimer
les remarques des sources en assembleur, considérant qu’elles sont imprimées dans la revue et
que leur absence ne géne-en rien l'utilisation. Nous ne doutons pas qu’entre toutes les REMs et
plus de programmes, chacun aurait fait le méme choix... Rappelons ce sujet que les sources
sont maintenant sauvegardés sous format TEXT pour une utilisation avec tous les assembleurs.
Les problémes qui proviennent de la différence de syntaxe entre assembleurs seront abordés
dans un prochain article.
Notre stock d’articles en attente d’impression nous assure, pour de nombreux numéros, densité,
qualité et originalité. Dans ces colonnes, prochainement, une élégante gestion d’adresses, un in-
terpréteur doté entre autre d’un buffer clavier, I’& au secours de la souris, un écran virtuel
style MagicWindow, un calculateur, des accessoires de bureau. En résumé : une véritable as-
surance chémage pour Apple // et Macintosh.
Pas de chémage non plus pour votre Z80 : J.-F. Rabasse s’est attaché 4 la communication en
CP/M . La premiére partie de cette étude vous offre une commande pour contrdler de fagon
simple la carte série, Insistons sur le caracttre autonome de chacune des deux parties ;
désagréables en effet ces programmes qui ne fonctionnent qu’a la réception du éniéme numéro !
Dans ces pages, outre Basic, Pascal, et Assembleur, un programme pour nos tout-petits,
illustrant l’utilisation de ToolKit d’Apple et le fort intéressant courrier de Michel Duroc 4
propos d’AppleWriter : vous avez dit diversité ?
Ordico de Roland Jost est une nouvelle disquette Pom’s pour cruciverbistes, scrabbleurs et
autres joueurs de mots. Au-dela de la qualité de programmation et de la rapidité de recherche,
cette mini-base de données (d’aucuns diraient mini-BDD...) vaut par l’étendue de ses références
dont la présentation en page 57 donne une idée,
Nous vous donnons rendez-vous dans nos pages de novembre avec peut-étre quelques éléments
concrets sur le nouvel Apple //...
Ont collaboré a ce numéro : Alexandre Avrane, Jean-Luc Bazanegue, Bruno Fénard, Jean-Michel Gourévitch, Olivier
Herz, Alain Idelon-Ritton, Frédéric Ivsic, Gérard Michel, Daniel Mueller, Patrice Neveu,
Dominique Ottello, Christian Piard, Jean-Francois Rabasse, Frédéric Rosay, Marianne
Sutz, Hervé Thiricz, Julicn Thomas, Norbert Vurlod.
Directeur de la publication, rédacteur en chef : Hervé Thiriez.
Rédacteurs : Alexandre Avrane, Olivier Herz.
Siége 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 & 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° 26
e programme, sans
prétendre égaler les
performances du Mac,
permet de donner une
touche trés professionnelle 4 vos
programmes en leur permettant
dutiliser le principe des fenétres
graphiques.
Il permet d'ouvrir simultanément
jusqu’a deux fenétres graphiques
(ce qui est suffisant dans la
plupart des cas), la deuxiéme
venant se superposer a la
premiére qui est elle-méme
sauvegardée puis redessinée.
Syntaxe
FENETRAGE est congu pour
étre appelé a partir d'un
programme Applesoft, et utilise
l'ampersand (&) comme indicatif
d'appel.
& OUVRE haut, bas,
droite, gauche
(& OUVRE 56, 136, 40, 239 ou
& OUVRE HT,136,DR,GH par
exemple) ouvre une nouvelle
fenétre d'aprés les coordonnées
graphiques. Le programme
dessine automatiquement un
cadre autour de la fenétre.
Les valeurs peuvent étre données
de maniére statique ou par
l'intermédiaire de variables
Applesoft. Elles doivent étre
comprises dans la lage 0a 191
en vertical, 0 i 79 pour
Vhorizontal. Si haut < bas, ou
droite < gauche, le programme
inverse automatiquement les
coordonnées, Les dimensions
minimum d'une fenétre sont : 10
points verticaux, 14 points
horizontaux.
CE PROGRAMME PERNET D'OUVRIR
UNE FENETRE TOUT EN CONSERVANT
CE QU'IL Y AVAIT EN DESSOUS.
L'UTILISATEUR PEUT FAIRE TOUT
CE QU'IL DESIRE A L'INTERIEUR
DE CETTE FENETRE-
& FERME
ferme la dernigre fenétre ouverte
en restituant l'affichage de la
premiére fenétre,
Le programme utilisateur peut
écrire sur les fenétres graphiques
par tout moyen a sa convenance
(HPLOT, DRAW, etc.) mais a la
responsabilité de ne pas dépasser
les bornes de la fenétre qu'il a
définie.
Afin de minimiser l'occupation en
mémoire de la_ routine
FENETRAGE, celui-ci ne
contréle pas certains cas
d'erreurs: par exemple,
l'ouverture d'une troisiéme
fenétre graphique est autorisée
mais détruira la premiére fenétre
qui ne pourra plus étre restaurée.
Fonctionnement
Le programme __tourne
indifféremment sous DOS 3.3 ou
ProDOS, et quelle que soit la
configuration mémoire de votre
Apple (compatibilité...). Trés
schématiquement, lorsqu'il est
appelé, les opérations suivantes
sont entreprises :
* si une ouverture est demandée :
- contréle de la syntaxe
- sauvegarde de l'affichage
graphique actuel, soit en
carte langage (si DOS 3.3 et
une carte langage), soit en
dessous d'Himem
- dessin du cadre autour des
coordonnées de la nouvelle
fenétre
- mise & blanc dans le cadre de
la nouvelle fenétre
* siune fermeture est demandée :
- Testauration de l'ancienne
fenétre
Il se loge 4 partir de l'adresse
$9200 et manipule Himem ainsi
que le vecteur de I'ampersand.
——
Pom's n° 26
Fichiers utilisés
démonstration en Applesoft
HGRECR d'Eric Ringot parue
dans le numéro 15 de Pom's pour
FENETRAGE code objet amen ee Eric Gcrire facilement des caractéres en
. HGR sans avoir 4 utiliser une
BENETRAG E.S source en Big Le programme FENETRAGE. Moisson de HPLOT.
FENETRAGE.DEMO DEMO utilise la routine G
Programme ' 310 licen SUR TOUCHE, S.V.P.
FENETRE.DEMO 320 & OUVRE10, 170, 30,249
330 AS = "LA SYNTAX E": CALL HM,AS,9
1 REM FENETRAGE.DEMO 0, 20
340 A$ = "CE PROGRAMME EST FAIT POUR ETRE":
5S PRINT CHR$ (17)
10 PRINT CHR$ (4) "BLOAD HGRECR.LIB,A$8000
20 PRINT CHR$ (4) "BRUN FENETRAGE"
30 HM = 32768
35 HOME
40 HGR : POKE 49234,0
50 HCOLOR= 3: ROT= 0: SCALE= 1
60 & OUVRES6, 136,40, 239
70 A$ = "CE PROGRAMME PERMET D'OUVRIR ": CA
LL HM, A$, 50,70
80 A$ = "UNE FENETRE TOUT EN CONSERVANT": C
ALL HM, A$, 50,80
90 AF = "CE QU'IL Y AVAIT EN DESSOUS.": CAL
L HM, A$, 50, 90
100 A$ = "L'UTILISATEUR PEUT FAIRE TOUT": C
ALL HM, A$, 50,100
110 A$ = "CE QU'IL DESIRE A L'INTERIEUR": C
ALL HM, A$, 50,110
120 A$ = "DE CETTE FENETRE.": CALL HM, A$, 50
7120
125 A$ = “APPUYEZ SUR TOUCHE, S.V.P.": CALL
HM, A$, 10,185
130 GET A$: & FERME
140 & OUVRE30,161,80,199
150 A$ = "SI L'APPLICATION": CALL HM,A$,90,
40
160 A$ = "SORT DE LA FENETRE": CALL HM,A$,9
0,50
170 A$ = "ALORS, A LA": CALL HM, A$, 90, 60
180 AS = “FERMETURE DE CETTE": CALL HM,A$,9
0,70
190 A$ = "DERNIERE, TOUT CE": CALL HM,A$, 90
80
200 A$ = "QUI A ETE MODIFIE": CALL HM, A$, 90
90
210 A$ = “EN DEHORS DE LA": CALL HM,AS,90,1
00
220 A$ = "FENETRE RESTERA": CALL HM, A$, 90,1
10
230 A$ = "TEL QUEL.": CALL HM,A$, 90,120
240 A$ = "PAR EXEMPLE:": CALL HM,AS, 90,140
250 GET A$: & OUVRE10,175, 70,209
260 FOR J = 7 TO 180 STEP 10: FOR I = 7 TO
279 STEP 15
270 A$ = "X": CALL HM,A$,I,J
280 NEXT 1,5
290 GET AS: & FERME: GET AS
300 HGR : POKE 19234,0
CALL HM,A$,40,40
350 A$ = "UTILISE EN BASIC, DONC POSSEDE":
CALL HM, A$, 40, 50
360 A$ = "UNE SYNTAXE TRES SIMPLE.": CALL H
M, AS, 40, 60
370 A$ = "POUR OUVRIR UNE FENETRE,
L HM, A$, 40,70
380 A$ = "SUFFIT DE FAIRE:": CALL HM, A$, 40,
80
390 AS = "- & OUVRE HAUT, BAS, DROITE, GAUCHE"
: CALL HM, A$, 40,90
400 A$ = “SI HAUT EST INFERIEUR A BAS"; CAL
L HM, A$, 50, 100
410 A$ = "LE PROGRAMME INVERSE LES":
M, AS, 50,110
420 A$ = "DEUX COORDONNEES (DE MEME POUR":
CALL HM, A$, 50,120
430 AS = "DROITE ET GAUCHE).": CALL HM, A$,5
0,130
440 A$ = "SI BAS-HAUT<10 ALORS
: CALL HM, A$, 50,140
450 A$ = "DE MEME SI GAUCHE-DROITE<14 ALORS
“: CALL HM, A$, 50,150
460 A$ = “GAUCHE=DROITE+14": CALL HM,A$,50,
160
470 GET A$: & FERME
480 & OUVRE10, 170, 30,249
490 AS = "LA SYNTAX E": CALL HM,A$,9
0,20
500 A$ = “CECI POUR DES RAISONS DE COMMODIT
ES"; CALL HM,A$,40,40
510 A$ = "AU NIVEAU DU PROGRAMME ET DE": CA
LL HM, A$, 40,50
520 A$ = "L'UTILISATION (ON NE PEUT RIEN":
CALL HM, A$, 40, 60
530 A$ = “FAIRE DANS UNE FENETRE PLUS PETIT
E)": CALL HM, A$, 40,70
540 A$ = "POUR REFERMER UNE FENETRE IL SUFF
IT"; CALL HM, A$, 40,90
550 A$ = "DE FAIRE:": CALL HM,A$, 40,100
560 A$ = "- & FERME": CALL HM,A$, 40,110
570 AS = “ALORS LA DERNIERE FENETRE OUVERTE
": CALL HM, A$, 50,120
580 A$ = “EST REFERMEE.": CALL HM, A$, 50,130
590 GET A$: & FERME
600 & OUVRE10, 170, 90,189
610 A$ = “FENETRAGE EST LE": CALL HM, A$, 95,
20
IL": CAL
CALL H
BAS=HAUT+10"
Pom's n° 26
620 AS =
630 AS =
640 AS =
0
650 AS =
60
660 AS =
670 A$ =
680 AS =
"PROGRAMME DE": CALL HM, A$, 95,30
“DE FENETRE,": CALL HM, A$, 95,40
"FENETRAGE.S EST": CALL HM,A$, 95,5
"LE CODE BIG MAC.": CALL HM, A$, 95,
"LE PROGRAMME": CALL HM, A$, 95,80
"PEUT AUSSI": CALL HM,A$, 95,90
"TOURNER SOUS": CALL HM, A$, 95,100
690 A$ = “PRODOS.": CALL HM, A$, 95,110
700 GET AS: & FERME
710 & OUVRE20, 90, 20,259
720 AS = "CONCU ET REALISE PAR:": CALL HM,A
$,25, 30
730 A$ = “ROZAY FREDERIC”: CALL HM,A$, 25,40
750 A$ = "UN GRAND MERCI A ERICK RINGOT": C
ALL HM, A$, 25,70
760 A$ = "POUR LE PROGRAMME HGRECR": CALL H
M, AS, 25, 80
770 GET A$: & FERME
800 FOR I = 1 TO 1000: NEXT : TEXT
Source ‘FENETRAGE.S’
Assembleur Big Mac
1
2 teaeaerensenesssssessoscosososses
3* .
4 * APFICHE / EFFACE UNE FENETRE *
‘5 * EN GRAPHIQUE HAUTE RESOLUTION *
6° .
7 * PAR F, ROZAY -
a- .
o* oo sesnnenee
10
ql
12 LsTt OFF
13
M4 org $9200
15
16 DEP - $06 Ptr pour dessin fenetre
417 HBAS = $26 Adresse de la ligne HGR,
obtenue par HPOSN
18 LINNUM == $50 entier extrait de FAC par
GETADR
19 HIMEM = $73 Valeur de HIMEM
20 CHRGET = pl
21 cHRCOT == SAT
22 x07 - SEs No de I'octet dans leque! se
trouve le point HGR
22 NAGE =~ $B6 No de la page HGR utilisée
($20:pagel $40:page2)
a4
25 AMPERV = $0366 Adresse du sous-programne 4
26¢ utiliser a1 & eat exécutée
27
28 ERROR - $0412 Emission d'un message
d'terreur (code dans X-RFG)
29 DATA = $0995 Positionne TXTPTR sur
L'instruction BASIC suivante
30 FRMNUM == $0067 Pread le chiffre ou la valeur
sre de 1a variable pointée par TXTPTR et le
range dans FAC
32 Gerpyrc = SE6FS meme chose que FRMNUM mais
avec des chiffres <256
32 GETADR = — E752 Transforme FAC en un entier A
- 2 octets et le range dans LINNUM
HROSN == = SP411
* avec les coordonnées du point (A: VERT X:
Donne l"adresse de 1a ligne
[LO Y;H~HI)
ao
40°
4*
44 HIGH
a7
aa
49
sa
51
52
53
34
55
56
57
58
59
60 yaPRODOS
62
62
63
a
65
66
67
68 YALEK
69
70
a
7
73 * PROGRAMME PRINCIPAL
4
75 MAIN
76
7
78 MAINI
79
so
a1
82
63
aa
as
87
88
aa
30
31
92
94
9
95
96
37
98
99
100
102
BRANCHE LEE *
SUR LE PROGRAMME *
PRINCIPAL *
Sreerretetteestee ee
LDA #<MAIN partie basse et partie haute
STA AMPERV de I'adresse du début du
programme, les range
#MAIN dans AMPERV pour que le
programme soit exécuté
AMPERV+l si un "6! est rencontré dans
Je programme BASIC
LDA #<#IGH change 1a valeur du =I
pour que le programme
LDA
STA
‘STA HIMEM ne soft pas ecrasé par les
variables du programme
LDR @>HIGH BASIC
‘STA HIMEM+2
LDA SBFOO voit si on est sous ProDOS
CMP #s{c
‘BEQ YAPRODOS
BIT $c083 voit si on a une carte
Jangage
BIT $c083
LOA SFEEE
CMP 4SFA
BNE YAI6K
LDA #870 ProDOS alors on sauvera
STA HSAUVE l*image 4 partir de $7000
BIT $cusl
LDA #SFF
‘STA HIMEM et on rechange Ja valeur du
LDA #S6F HIMEM (-236FFF)
STA HIMEM+I
RTS
LDA #980 ai on a une carte langage
STA HSAUVE alors on sauveze I'image 4
BIT $c001 partir de E000
RIS
eou *
Loy #0
ISR CHRGOT
CMP CMD, Y prend ce qu'fl y a aprés le
's* et le compare
BNE AUTRCMD1 aux nouvelles instructions
ISR CHRGET ct on compare avec ‘OUVRE’
INY
cer 44
BNE MAINI
JSR GETBYTC prend 1a premiére coordonnée
cex #192 compare avec le bas de
Décran
BCS ILLEGAL si ctest supérieur alors
“ILLEGAL QUANTITY*
STK TABLE
JsR GETBYTC
coordonnée
n92
ILLEGAL
TABLEt1
CHRGET
FRMNUM
sérieux
GETADR
dépasser 256
SR SEPTAL
cpx #40
pour voir si
BCS ILLEGAL
STX TAHLES?
JSR CHRGET
JSR PRMNUUM
coordonnée
GETADR
fait de meme avec 1a deuxiéme
cex
BCs
STX
JSR
JSR cette fois ci c'est plus
sR Jes coordonnées peuvent
toujours cette comparaison
on sort
de 12 tenetre
et encore pour la derniére
JSR
Pom's n° 26
104
105
107
108
209
110
11
112
13
14
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
4132
133
134
135
136
137
138
139
140
141
4142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
AUTRCMDI
MAIN
ILLEGAL
acs
sTx
JSR
ISR
usr
ILLEGAL
TABLES3
VERIFIE
cooRrTK
SAVE
fenetre
coorTK
CADRE
on sauve ce qu'il y a sous le
JSR
JSR et on affiche la fenetre
DATA retour au programme BASIC
ou *
Loy 45
JSR
cue cette fois ci on compare avec
Ja commande ‘FERME*
BNE
USK
INy
cer
BNE
JSR
JSR et on referme tout simplement
UMP DATA retour au programme BASIC
Lox
Me
#835
ERROR
ERROR'
produit un ‘ILLEGAL QUANTITY
AUTRCMD2 LOX #$10
MP ERROR produit un ‘SYNTAX ERROR’
Rheteeeeteet eee
" FENETRE *
(restecrscrrery
CADRE
CADREO
CADREL
ce
LDA DAS
suc #3
STA BAS
LDA MaUT
BUFF
HAUT
Lox 40
#0
urosn
GAUCHE
(HBAS), ¥ affiche d'abord l'octet dana
Je coin gauche en haut
#870
(HBAS), ¥
4s7r
(HBAS), ¥ puis va jusqu'au bout de la
ligne en affichant
INy un trait
cer
BNE
LDA
ORA
DROITE
CADREO
(HBAS) , ¥
4807
droite
(HBAS) ,¥
BUFF
oUFF
10
40
HPOSN
GAUCHE
gne
(HBAS), ¥
4578
(BAS) , ¥
affiche l'octet en haut 3
STA
INC
fait de meme avec la
es7F
(HBAS) ,¥
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
4193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
218
219
220
221
222
223
224
225
226
227
229
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
CADRES
CADRE?
CADRES
bROITE
CADREL
(HBAS), ¥
#50F
(4tBAS), ¥
BUFF
BUR
40
Loy 40
HPOSN
GAUCHE
(HBAS) , ¥
Jigne
sir
ssic
(HBAS) , ¥
affiche le trait
et la partie droite
et encore avec la trofeiéme
STA
‘LDA
STA
#600
(HBAS), ¥
octets ‘vides
INy pour avoir une fenetre noire
4 lintérieur
DROITE
CADRES
(HBAS) ,¥
#SF affiche la partie du cadre
qui se touve 4 droite
#510
(HBAS) , ¥
BUFF
BUFF
#0
#0
HPOSN
GAUCHE
(HBAS), ¥
#808
#908
(HBAS). ¥
maintenant remplit avec des
#80
(HBAS),¥ le vide
DROITE
CADRES
(DAS) , ¥
#sr0
4938
(nea), ¥
BUFF cette fois cf on affiche
toute Ja partie
BUFF verticale de la fenetre
+0
10
HPOSN
cAUCHE
#307
(HBAS), ¥
AND
STA
Inc
avec d'abord I'octet 4 gauche
Iny
#80
(HBAS) , ¥
puis le milieu
DROITE
CADRES
#370
(HBAS), ¥
BUFF
BAS
CADREZ
BUFF
BUFF
px #0
Loy #0
fait la meme
USR HPOSN chose quien haut de la
fenetre mais en sens
LOY GAUCHE inverse
LDA (HBAS), ¥ ~
AND #30F
et enfin l'octet 4 droite
une fois le milieu fini on
Pom's n° 26
248
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
2768
280
261
282
263
284
205
286
207
288
289
290
291
292
293
2946
295
296
297
298
299
300
301
402
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
STA
INy
CADREG «STA
ny
#908
(HBAS), ¥
#50
(UIBAS) » ¥
ceY DROITE
CADRES
(HBAS) , ¥
#sFO
#338
(HBAS), ¥
INC BUFF
LDA BUEE
#0
10
JSR HPOSN
CADRE? STA
GAUCHE
(HBAS), ¥
#sie
asic
(HBAS), ¥
#800
(HBAS), ¥
DROITE
CADRET
(HBAS) , ¥
4sFa
#sic
(HBAS), ¥
INC BUFF
LDA BUFF
CADRES = STA
wy
JSR
LDY GAUCHE
LDA
Ona
#0
#0
HeOSN
(MBAS) x
#878
(HBAS), ¥
475
(HBAS) ¥
DROITE
CADRES
(IBA) , ¥
#sor
(HBAS), ¥
INC BUFF
LDA BUFF
#0
10
HPOSN
CADRES = STA
iby
JSR
LOY GAUCHE
LOA
ORA
(HBAS), ¥
#870
(HBAS), ¥
#57
(HBAS), ¥
DROITE
CADRES
(HBAS), ¥
#307
(Bas), ¥
serererererterteee
SAUVE
IMAGE=>RAM
.
Prreeeeeerecrerrir]
SAVE
BIT
fenetre dans la page
$cog!
uve ce qu'il y a sous la
326
327
328
329
330
331
332
333
334
335
336
~ 337
338
339
340
341
342
443
344
345
346
347
346
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
an
302
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
398
389
390
391
392
393
SAVEL
SAVEZ
LDA
STA
INC
LDA
Lox
my
JSR
‘LDA
STA
LDA
STA
LDA
PHA
LDA
‘STA
LDA
Dx
tor
JSR
PLA
STA
Loy
DEY
Iny
LDA
STA
cpy
BNE
INC
Lox
cx
BNE
RTS
BUFF
BAS
BUFF
40
#0
HPOSN
DEP
HBAS+1
DEP+1
HPAGE
HPAGE
BUFF
#0
#0
HPOSN
HPAGE
GAUCHE
(DEP), ¥
(HBAS) 4 Y
DROITE
SAVEZ
BUFF
BUFF
BAS
SAVEL
sertetererteet rte
* — RECUPERE
* RAM-DIMAGE*
Reebteeeeeesetete
RECUP
RECUPI
RECUP2
LDA
STA
INC
BIT
LDA
Lox
wy
SESEESEE
STA
SEE
PLA
STA
Lor
DEY
NY
BIT
BIT
ane
HAUT
BUFF
BAS
coal
BUFF
#0
#0
HOSN
HBAS
DEP
‘HBAS+1
pep+?
HAGE
HSAUVE
HAGE
BUFF
40
40
HPOSN
HPAGE
GAUCHE
choisie a
début du programme
récupére ce qu'il y avait
sous 1a fenetre
Pom's n° 26
404 445 SBC TABLE
40S Ahbdeeeeseeee seer 446 ow 48
406; na 447 BCC RECALE
407* SEPTAL* 448
408 * DIVISION 2 449 VERIFI LDA TABLE] fait de meme avec les
409 * PART * coordennées horizontales
410 * * 450 sec *
Py emreccettresccsscccd in poe
412 452 BMI INVERSE!
413 SEPTAL LDA #0 dfvise les coordonnées 453 ow 92
horizontales par 7 454 BCC RECALEL
414 IDX LINNUM pour obtenir le numéro de 455
Itoctet dans lequel 456 RTs
415 LbY LINNUM+1 se trouve le point HGR 457
416 JSR BPOSN 458 INVERSE LDA TABLE
417 LOX XxD7 459 IDX TABLE+1
418 ail 460 STA TABLE+1
419 4161 ‘STX TABLE
420 * PREND LES 462 UMP VERIF2
421 * COORDONNEES 463
422 * POUR LA FENETRE 464 RECALE LDA TABLE
423 465 cLe
424 COORTK LDA TABLE 466 aoc 48
425 STA HAUT 467 STA TABLE+I
426 LDA TABLE+1 468 UMP VERIFL
427 STA AAS 469
426 LDA TABLE+2 470 INVERSE] LDA TABLEt2
429 STA GAUCHE an IDX TABLE#3
430 LDA TABLE+3 472 STA TADLE‘3
431 STA DROITE 473 STX TABLES2
432 RTS 474 UMP VERIF1
433 475
Pry ee 476 RECALEL LDA TABLE+2
a35* al 477 cle
436¢ VERIFIE. * 478 apc 42
437 ¢ . 479 STA TABLE+3
438 "teeter tetr ttt 400 RTS
439 4a
440 VERIFIE LDA TABLEt! compare les 2 coordonnées 492 TABLE HEX 00000000
vertica. 483 aD ‘ASC 'OUVREFERME’
441 CMP TABLE les arrange 4 le valeur la 494 HAUT =—-REX 00
plus petite de la 485 BAS HEX 00
442 BCC INVERSE fenetre ou les inverse ai la 486 GAUCHE HEX 00
promiére est 487 DROITE HEX 00
443 VERIF2 LDA TABLE! supérieure 4 1a seconde 490 BUFF = HEX 00
44a SEC 489 HSAUVE HEX 00
Récapitulation 9290- F4 94 20 45 94 20 F494 92D0- 95 8D 74 95 AD 70 95 Az
9298- 20 C5 92 4C 95 D9 60 AD 9208- 00 AO 00 20 11 F4 AC 72
‘FENETRAGE’ 9240- 05 20 B7 00 D9 66 95 DO 92E0- 95 RI 26 09 70 91 26 CB
92A8- 17 20 B1 00 C8 CO 08 DO 92F8- A9 TF 91 26 C8 CC 73 95
i 92B0- F3 20 F4 94 20 92 94 4c 92F0- DO F8 Bl 26 09 07 91 26
ah ll ese — 9248-95 D9 60 A2 35 4C 12 D4 92F8- EE 74 95 AD 74 95 A2 00
BSAVE FENETRAGE A$9200,L$976 92C0- A2 10 4C 12 D4 18 AD 71 9300- AO 00 20 11 F4 AC 72 95
" 92C8- 95 £9 03 &D 71 95 AD 70 9308- Bl 26 09 78 91 26 C8 AD
9200- A9 40 8D F6 03 AY 92 BD
9208- F7 03 AQ 00 85 13 AY 92 ye
9210- 85 74 AD 00 BF CY 4c FO
9218- 0D 2¢ #3 CO 2¢ 83 CO AD
9220- FF FF C9 FA DO 11 A9 70 SI_L ‘APPLICATION
9228~ 8D 75 95 7¢ 81 CO AS FF SORT DE LA FENETRE
9230- 85 73 A9 6F 85 74 60 AS ALORS, ALA
9238- EO 8D 75 95 2C 81 CO 60 FERMETURE DE CETTE
9240- AO 00 20 B7 00 D9 66 95 DERNIERE. TOUT CE
9248- DO $5 20 B1 00 C8 CO 04 QUI A ETE MODIFIE
9250- DO F3 20 F5 E6 E0 CO BO EN DEHORS DE LA
9258- 62 8E 62 95 20 F5 E6 EO FENETRE RESTERA ~
9260- CO BO 58 BE 63 95 20 BI TEL QUEL.
9268- 00 20 67 DD 20 52 £7 20
9270- EB 94 £0 28 BO 45 aE 64
9278- 95 20 BI 00 20 67 DD 20
9280- 52 E7 20 £8 94 £0 28 BO
9288- 32 BE 65 95 20 0D 95 20 a 2
mee
Pom's n° 26 11
9310- JF 91 26 C8 CC 73:95 DO 9530- 95 AE 63 95 8D 63 95 BE 1180- 6E 1E 16 3F 17 OD OD DE
9318- F8 Bl 26 09 OF 91 26 EE 9538- 62 95 40 15 95 AD 62 95 1188- 07 00 20 8D 3A 3F 77 31
9320- 74 95 AD 74 95 A2 00 Av 9540- 18 69 08 @D 63 95 4¢ 20 1190- 05 00 89 F6 04 00 3F 4c
9328- 00 70 11 F4 AC 72 95 BI 9548- 95 AD 64 95 AE 65 95 aD 1198- 11 35 00 12 05 00 0c oc
9330- 26 29 1F 09 1C 91 26 ca 9550- 65 95 BE 64 95 4C 20 95 11A0- D6 DA 1E 06 00 0c 25 1¢
9338- AS 00 91 26 cB cc 73 95 9558- AD 64 95 18 69 02 BD 65 11ae- 3F 17 36 2E 1E VE 2D 0C
9340- DO F@ Bl 26 29 F8 09 Ic 9560- 95 60 00 00 00 00 4¥ 55 11B0- 24 07 00 24 BC 96 31 17
9348- 91 26 EE 74 95 AD 74 95 9568- 56 57 45 46 45 52 4D 45 11B@- 2D 04 00 65 E4 3F 17 95
9350- A2 00 AO 00 20 11 F4 AC 9570- 00 00 00 00 00 00 11C0- BA 2E 2D 25 00 25 oc 3c
9358- 72 95 B1 26 29 OF 09 OF 1108- 3F B7 92 15 2D 0c 24 00
9360- 91 26 C8 AY OU 31 26 CB 11D0- 3A 27 0C 0C 0C 36 36 FS
9368- CC 73 95 D0 F8 BI 26 29 2 . 11D8- 3E 00 38 27 2C 2D F5 AA
9370- FO 09 38 91 26 EF 74 95 Récapitulation 11E0- 36 1E 3F 1C 04 00 AD Fé
9378- AD 74 95 A2 00 AO 00 20 ee ’ 11E8- 3F 1¢ 24 25 0¢ 0c 35 00
9380- 11 F4 AC 72 95 A9 07 91 HGRECR.LIB 11F0- 0C 0C 3C 3F 77 92 36 05
9388- 26 C8 AI 00 91 26 Ca CC 11F8- 00 E7 64 2D 15 BE 15 F6
9390- 73 95 DO F8 AS 70 91 26 Aprés avoir saisi ce code sous 1200- 3F 1C 2¢ 00 EY 64 2D 15
9398- AE 74 95 EC 11 95 DO DS moniteur, vous le sauvegarderez par 1208- 36 77 1E 17 3F 04 00 08
93A0- FE 74 95 AD 74 4S AZ OO BSAVE HGRECR.LIB.A$1000,L$39B 1210- 16 06 00 08 16 BE 05 00
93A8- AQ 00 20 11 F4 AC 72 95 1218- 91 F2 1C 1c OC OC OC 06
93B0- Bl 26 29 OF 09 OE 91 26 1000- 20 58 FF BA CA CA 9A 18 1220- 00 38 67 89 BS 3F 3F 04
93BB- C8 AI 00 91 26 CB CC 73 1008- 68 69 AG BS CE 68 69 00 1228- 00 93 62 OC OC 1¢ 1c 1¢
93CO- 95 DO F@ BI 26 29 FO 09 1010- 85 CF AS Ef 48 AS E7 48 1230- 06 00 0C 0C 1¢ 3F 17 95
93C8- 38 91 26 EE 74 95 AD 74 1018= 20 BE DE 20 £3 DF 20 6C 1238- 0A 16 05 00 30 2E 2¢ 24
93D0- 95 A2 00 AO 00 20 11 F4 1020- bb AO 00 Bi 83 #5 08 cB 1240- 1C 3F 17 36 36 OE 2D 25
93D8- AC 72 95 Bl 26 29 IF 09 1028- BI 43 85 96 CB RI 43 85 1248- 00 3A 37 6E 09 24 67 Bt
93B0- 1C 91.26 C8 A900 SE 26 1030- 07 20 BE DE 20 05 £1 AS 1250- 1¢ 1E 1E 2E 00 3F 24 2C
93E8- C8 CC 73 95 DO FB Bl 26 2038- Al 85 BO AS AO 85 £1 20 1258- 20 15 BE OE BE 3F 27 2c
93F0- 29 F809 IC 91 26 EE 74 1040- P5 B6 86 E2 AD 01 85 £7 1260- 00 89 F2 3F 1¢ 24 24 0C
93F8- 95 AD 74 95 A2 00 AD a0 2048- AQ 00 38 48 Bl 06 48 AD 1268- 20 15 06 00 09 36 1F 3F
9400- 20 11 F4 AC 72 95 BI 26 2050- 00 85 £4 AS 3F 20 58 FF 1270~ 27 24 24 2¢ 2D 15 3E 00
9408- 09 76 91 26 C6 AS 7F 31 1058- 50 26 AS 7F 85 £4 68 38 1278- 39 B7 3A 24 24 24 2D 2D
9410~ 26 C8 CC 73 95 DO Fe BI 1060- £9 1F 20 58 FF 50 19 18 1280- 96 92 3F 04 00 39 B7 1A
9118- 26 09 OF 91 26 BE 74 95 1068- AS EO 63 06 85 £0 D0 07 1288- 24 24 24 2D 2D 06 00 11
9420- AD 74 95 A2 00 AO 00 20 1070- £6 El 66 AB C8 C4 08 DO 1290- 35 3E 3F 1¢ 24 24 0c 2D
9428- 11 F4 AC 72 95 BI 26 09 1078- D1 68 85 £7 68 e5 £4 60 1298- 35 00 28 2D 24 FC 1B 36
9430- 70 91 26 CA AS 7F 91 26 2080- BA CA CA 9A 0A A BI CE 12A0- 36 36 4D 21 24 00 52 3A
9438- C8 CC 73 95 DO Fé BI 26 1088- 18 65 CE 48 C@ Bi CE 65 12A8- 67 24 24 3C 2D 06 00 9B
9440- 09 07 91 26 60 2c 61 CO 1090- CF 48 A6 EO At Ei AS EZ 12B0- 72 2D 0C 24 24 3¢ 00 73
9448- AD 70 95 8D 74 95 EE 71 1098- 20 11 F4 68 AB 6B AA AD 12B8- 0B 15 DF 23 24 24 6c 09
9150- 95 AD 74 95 A2 00 AO 00 1OA0- 00 20 02 FE 20 58 FF 60 12C0- 1B 1£ 06 00 89 12 3F SF
9458- 20 11 F4 AS 26 85 06 AS 10A8- 3F 009 80 90 84 00 4A 00 12C8- 24 24 24 05 00 £0 1¢ 36
9460- 27 85 07 AS E6 48 AD 75 10B0- 90 00 9D 00 AA 00 BS 00 12D0- 36 36 4D 21 24 24 BC 06
9468- 95 85 F6 AD 74 95 A2 00 10B8- Cl 00 C5 00 CD 00 D5 00 12D8- 00 OE 56 24 24 24 DF 33
9470- AQ 00 20 11 F4 68 85 E6 10C0- E2 00 EA 00 BE 00 F3 00 12E0~ 2E 1E 36 2E 00 92 E7 24
9478- AC 72 95 88 C8 Bl 06 91 10C8- F6 00 FD 00 OB 02 23 01 12E8- 24 OC 2D 15 36 36 17 05
9480- 26 CC 73 95 DO F6 EE 74 10D0- 1D 01 28 01 32 01 3B 02 12F0- 00 65 3C 36 3F 36 2E 1E
9488- 95 AE 74 95 EC 71 95 DO 10D8- 48 01 51 01 5C 01 67 01 12F8- 36 05 00 AA 15 1F 3F 20
9490- CO 60 AD 70 95 8D 74 95 10E0- 6B 01 70 01 79 O1 81 O1 1300- 24 64 2D 15 36 36 00 77
9498- EE 71 95 2C 81 CO AD 74 10FR- BA 01 94 01 Al O1 AD O02 1308- 15 15 DF 23 24 24 2¢ 2D
S4R0~ 95 AZ OO'AD OO 20 11 FF 10F0- B9 01 C4 01 DO 01 DD oF 1310- 15 BE 06 00 E7 64 2D 15
S4AB- AS 26 85 06 AS 27 85 OF 10F@- £7 01 F2 01 FE 01 07 02 2318- 97 15 F6 3F 1C 04 00 24
94B0- AS E6 48 AD 75 95 85 £6 1100- OF 02 1¢ 02 25 02 31 02 1320- 1F 28 2D F5 92 33 2E 00
94B8- AD 74 95 AZ 00 AD ON 20 1108- 3D 02 49 02 53 02 5F 02 1328- 92 E7 24 24 6C 09 36 36
94CO- 11 F4 68 85 E6 AC 77 95 1110- 6C 02 77 02 80 02 8B 02 1330- BE 05 00 92 1c 1¢ 24 24
94C8- 86 CB 2c 83 CO 2c 83 CO 1118- 96 02 A2 02 AE 02 B7 02 1338- 4D 31 36 BE 06 00 F6 1E
94D0- B1 26 91 06 CC 73 95 DO 1120- C2 02 CA 02 D1 02 D9 02 1340- 24 24 24 4D 31 36 BE 35
94D8- FO BE 74 95 AE 74 95 EC 1128- 5B 49 02 00 52 22 20 24 1348- 07 00 OC OC FC 1B 76 16
94E0- 71 95 DO B7 2C 81 CO 60 1130- 2C 00 08 24 1F 36 06 00 1350- 17 GE 09 E4 04 00 IC Ic
94EB- AI 00 AG 50 A4 51 20 11 1138- 3A 67 3C OC 6C BE 2D 1E 1358- 6C 09 F6 D6 36 05 00 OC
AG ES 60 AD 62 95 8D 1140- 2E 1E FE 2C 00 £7 OC 25 1360- 0C 3¢ 3F 77 92:17 2E 2D
95 AD'63'95'8D 71 95 1148-15 F5 AB 15 1F 15 3F 77 1368- 25 00 24 2C BS D2 33 2E
9500- AD 64 95 &D 72 95 AD 65 1150- 29 00 0C 0C DC 3R 2E 96 1370- 2D 00 10 1C 56 4A OE 06
SROES BS (BD TESS COMO TES 98 1158- 17 4D 2E 24 00 60 1¢. BF 1378- 00 24 3C B7 52 31 3E 3F
9510- CD 62 95 90 19 AD 63 95 1160- AE 17 76 65 1¢ OD 16 07 1380- 00 25 3¥ 36 2D 25 24 3F
9518- 38 ED 62 95 C9 08 90 1D 1168- 00 08 24 05 00 $2 1¢ 1¢ 1388- 3F 36 36 2D 2D 25 24 24
9520- AD 65 95 38 ED 64 95 30 1170- 24 0C 0C 06 00 92 0c 0c 1390- 3F 3F 3F 36 36 36 2D 2D
9528- 20 C9 02 90 2B 60 AD 62 1178- 24 1¢ 1¢ 06 00 3¢ 1¢ 4¢ 1398- 2D 05 00
Pom's n° 26
Des disquettes sans DOS...
Des disquettes qui se présentent...
Des disquettes en 35 ou 36 pistes...
...BOOTDATA
Dominique Ottello
Suite aux diverses interventions
de lecteurs concemant l'utilisation
de la 36&me piste (voir par
exemple le numéro 23 de Pom's),
voici un petit utilitaire qui permet
d'automatiser le processus
d'agrandisscment d'une disquette
DOS 3.3.
Il permet en particulier :
+ de formater une disquette sur
35 pistes ;
« de formater une disquette sur
36 pistes ;
+ de libérer les pistes 1 et 2, en
effagant le DOS (sans effacer
les fichiers éventuellement
présents) ;
« d'inscrire un message d'aver-
tissement sur la piste 0, secteur
0, affiché lors du boot de cette
disquette.
Son utilisation est trés simple :
BRUN BOOTDATA
affiche une suite de valeurs de
CALL, qu'il suffit de lancer pour
exécuter l'une des quatre
opérations ci-dessus.
Il fonctionne avec le DOS 3.3
(48Ko) standard, ainsi qu'avec le
Diversi-DOS. Le source est en
Big Mac et contient, aux lignes
565 & 569, le texte du message a
afficher lors du boot. Ce texte
peut étre remplacé par celui de
votre choix, dans la limite de 256
octets entre les étiquettes TOSO et
FIN. 4
Comment faire ?
Aprés avoir fait “BRUN BOOTDATA" cette liste de CALLs apparait :
Opération
Lecteur 1 Lecteur 2
1 Message lors du boot sur la disquette de
données : 768 771
2 Libération des pistes 1 & 2 occupées
habituellement par le DOS : 774 777
3 Initialisation 35 pistes et opérations 1 et
2: 780 783
4 Idem 3 mais en 36 pistes : 786 789
Ainsi, pour créer une disquette de DATAs dans le lecteur 2, sur 36
pistes, vous ferez CALL 789. Pour libérer les pistes 1 & 2 puis inscrire
un message en cas de boot, vous ferez CALL774 puis CALL 768 si
lopération concerne le lecteur 1.
Attention : disquettes DOS 3.3 seulement...
MOTOROFF EQU $C088 #Arrét moteur
Source ‘BOOTDATA.S’ D1sKor EQU ScuRR —;Lacteur 1
Assembleur Merlin DISKOz2 QU $c0eB slecteur 2
O6H FQU s$cosD sUtilisé pour recherche
om EQU $COBE sdisquette protégée
ORG $3000 a .
crosopl QU $300 768 REGI EQU $19 7Sauvegarde
crosop2 QU $303 77 REG2 EQU SIA Penis isin
CP1P2D1 £QU $306 774 FLAGERR £QU SIC #Drapeau erreur 00 pas erreur
CPIPZD2 EQU $309 777 .
CIN35D1 EQU $30C 780 .
CIN35D2 E0U $30F 783 Abbesenananeassesaseesoaceooroes
CIN36D1 EQU $312 786 * IMPLANTATION DES CALL *
CIN36D2 Equ $315 789 Addaneaanraeaaraoaceasenanereane
RWTS EQU $309 sRoutine DOS écriture secteur .
cour EQU SFDED Routine sortle caractére LDA #40
HOME EQU SFCs8 sRoutine effacement écran STA CTOSODI =; Implantation CALL en 768
= STA cTosoD2 + 774
CATALOG EQU SAESE #Routine DOS contruction de STA CP1P2D1 74
* la piste $11 (catalog et vroc) STA CPIP2D2 77
MOTORON EQU $c089 sMise en route moteur STA CIN35D1 ~ 780
Pom's n° 26
13
STA
CIN35D2
CIN3601
CIN36D2
#170s0D1
crosop1+1
#21T0S001
crosoDit2
#1T0soD2
crosop2+1
#IT0SOD2
crosopz+2
#p1P2D1
cP1P2p1+1
<#>P1P2D1
cPIpzD1+z
#P1P2D2
cP1P2D2+1
#e1202
cP1P2p2+2
#IN35D1
CIN3SD1¢1
#>IN3SD1
CIN35D142
#1N3SD2
CIN35D2+1
#>IN35D2
CIN35D2+2
4#1N36D1
CIN36D1+1
ING6DL
CIN36D1+2
#IN36DZ
CINa6D2+1
#>IN36D2
CIN36D2+2
* MESSAGES DES CALL #
BCLCALL
TREG
CALLI
RETCALL
LISTCALL
PO
P12
135
136
Penn aennenereee en
STA
STA
SFEG4
SPB2F
$FE89
SFE93
HOME
lavier en entrée
sVidéo en sortie
#LISTCALL
RECL
#PLISTCALL
REG?
4300
(REG1),¥
IREG
#sFE
RETCALL
cour
REGI
CALLI
REG
BCLCALL
#s10
$22 #Fenetre texte haute
“LISTE DES CALL"8D8D
“Bcriture message piste 0 secteur 0"8D00
*Lecteur 1:768 * Lacteur 2:77178D8D
“Libération piste 1 et 278000
“Lecteur 1:774 * Lecteur 2:777"8D8D
"Inttialisatton 35 plstes”8000
“Lecteur 1:780 * Lecteur 2:78.
"Initialisation 36 pistes"8000
“Lecteur 1:786 * Lecteur 2:789"8D8D
DBD
He.
INV “TAPER CALL XXX"
asc "= =+" 8D8D8DEDFF
vro ASC “Construction CATALOG et vroc~sD00
P36 ASC “Libération piste 36"8D00
car ASC “Mise 4 jour vToc"@D00
* ECRITURE PISTE 0 SECTEURO *
IT0S0D1 LDA #S01
STA LECTEUR
BNE TTOSOA
IT0s0D2 LOA #502
STA LECTEUR
ITO0SOA JSR PROTEC
IT0S0 LDA «#800
STA FLAGERR
LDA #P0
SYA REGI
LDA #P0
STA REG
JSR MESSAGE
iby #$00
BCLO 1A T0SO,¥
#Lecteur 1
slecteur 2
sMise @ zéro ERREUR
#Chargement Tampon IOB pour BOOT
STA TAMPON, ¥
#Numéro volume
sNuméro piste
Numéro secteur
;Conmande Seriture
seeesensenaesersessenensen
* LIBERATION PISTES 1 ET 2 ~
seeeaesanenesereseeenennenennens
PIP2D1 LDA #$01
STA LECTEUR
BNE PIP2A
PIP2D2 LDA 4302
STA LECTEUR
PIP2R JSR PROTEC
PIP2 IDA #500
STA VOLUME
LDA 4911
STA PISTE
LDA #800
STA SECTEUR
LDA #S01
STA
LDA
#Piste $11 (dec:17) Catalogue
sSecteur 0 VTOC
{Commande lecture
COMMANDE
#12
STA REGI
LDA 4>P12
STA REG2
JSR MESSAGE
JSR RWDISK
LDA 4SFF sCorrespond 4 @ secteurs libres
STA TAMPON'S3C ;Piste 1 secteurs F 4 8
STA TAMPON+S3D ;Piste 1 .
STA TAMPON+S40 ;Piste 2.
STA TAMPON+S41 ;Piste 2.
LDA #802 #Commande écriture
STA COMMANDE
gSR RWDISK
Pom's n° 26
RTS
* INITIALISATION NORMALE (35) *
seneee seerneenaenen
IN3SD1 LDA #801
STA LECTEUR
BNE IN35A
INISD2 LDA #802
STA LECTEUR
IN3SA JSR PROTEC
LDA #135
STA REGI
LDA #135
STA REG2
USR MESSAGE
IN35 LDA #804 #Commande FORMAT
STA COMMANDE
LDA #800
STA VOLUME
JSR RWDISK
LDA #960 #Implantation d'un code RTS
* pour éviter 1*écriture du Dos
* sur la disquette lors de 1'INIT
STA SAREE
DA LECTEUR =; Implantation numéro lecteur
* dans 1a routine INIT du DOS
STA $B5F8
LDA WTO
STA REGI
WA bvTO
STA REC
USR MESSAGE
JSR CATALOG
LDA #820
STA SAEFF
JSR 1roso
LDA FLAGERR
CMP oASFF
BNE LPI
;Restauration modif DOS
:Message piste 0 secteur 0
LP1 JSR PIP Abération pistes 1 et 2
RTS
sebeeeeeasecennnneseesenenennene
* INITIALISATION 36 PISTES -
beseeeanennaneeees
IN36D1 LDA #$01
STA LECTEUR
BNE IN36
IN36D2 LDA $802
STA LECTEUR
IN36 JSR PROTEC
TDA 4136
STA REGI
LDA #136
STA REG2
JSR MESSAGE
LDA 4824
STA SBEFE
JSR IN35
LDA 4823
STA $BEFE
LDA FIAGERR
49FF
PIS23
sinitialtsation
PIS23 1236
P36
uterise le DOS pour 36 pistes
sRemet DOS 4 valeur initiale
STA REG?
JSR MESSAGE
LDA CAT
STA REG]
LDA #PCAT
STA REG2
USR MESSAGE
LDA #$11
STA PISTE
LDA #800 #Secteur 0 VTOC
STA SECTEUR
LDA #01 #Ordre de lecture
STA COMMANDE
USR RWDISK
LDA 4SFF 78 secteurs libres
STA TAMPON+SC4 ;Piste 36 secteurs F 4 6
STA TAMPON'SCS 740
LDA #824
STA TAMPON+S34 ;Indique $24 piste en VTOC
LDA #802 7Ordre ecriture
STA COMMANDE
JSR RWDISK
#Piste 17 Catalogue
.
* LECTURE OU ECRITURE DES *
* SECTEURS DU DISQUE a
Seeesssessessseeenseeseneseeaaee
RWDISK LDA #S00 :Mise 4 zéro des erreurs
STA ERREUR
LDA 4SFF #Mise 4 FF du drapeau erreur
STA FLAGERR
LDA 4>I0B #Partie haute adresse 0B
Loy 4#I0B ¢Partie basse .. ee
JSR WTS
LDA #500 sRemise 4 z6ro location s4¥
STA 348 #sexvant au moniteur
Loy #800
SERRA ADEA R RRR RN RR REE E EERE
* CONTROLE DES ERREURS *
ARERR RRERAERTEREAEER EAE RE EERIE ED
sGestion des erreurs
Erreur format ?
LDA ERREOR
cMP 4908
BNE PROTECT
LDA 4FORM
STA REG1
LDA #>FORM
STA REG2
BNE MESSAGE
PROTECT CMP 4$10
BNE
LDA
sChargement adresse message
+Erreur protection ?
voLU
#PROT
STA REG1
LDA #>PROT
STA REG2
BNE MESSAGE
vou cmp #520 Erreur volume ?
BNE DRIVE
LDA #VOL
STA REGI
LDA #>VoL
STA REG2
BNE MESSAGE
DRIVE CMP #540
BNE LECTU
LDA #DRIV
STA REGL
LDA #>0RIV
STA REC2
+Errour 1/0 ?
Pom's n° 26
15
BNE MESSAGE
LECTU CMP «#80
BNE OKMESS
LDA FLECT
STA REGL
LDA PP>LECT
STA REG?
BNE MESSAGE
OKMESS LDA #S00
STA FLAGERR
RTs
MESSAGE LY #500
MESSA LDA (REG1),¥
REQ. RETO
Iny
JSR cour
UMP MESSA
RETO RTS
¢Erreur lecture ?
#Pas d'erreur
sRemise 4 z6ro drapeay erreur
sAffichage du message
. Messages
FORM INV “"ERREUR D'INITIALISATION"878D00
pROY INV "DISQUETTE PROTEGEE"878000
vou INV “ERREUR NUMERO DE VOLUME"87@D00
DRIV INV “ERREUR LECTEUR (I/O ERROR) "878D00
LECT INV “ERREUR DE LECTURE"876D00
* ROUTINE DE TEST DISQUETTE — *
* PROTEGEE OU NON ET DEMANDE *
* POUR ENLEVER PROTECTION *
HOME
JSR
IDX #860 #Slot 6
LDA LECTEUR
cMP #02
BEQ DRIVE2
LDA DISKO1,X
UMP PRR
LDA DISKO2,X
LDA MOTORON,X ;Mise en route morenr
LDY 4SFF sDélat
LDX ISFF
DRIVE2
PRB
PRBO
PRAI DEX
PRB1
BNE
bey
BNE PRBO
1px #560 #Slot 6
LDA O6H,.X #Recherche protection
LDA Q7L,X
AMI PROTIN
LDA MOTOROFF,X ;Arret moteur
PROTIN LDA MOTOROFF,X ;Arret moteur
Loy #00
ACLPR = LDA PROT, ¥
cup #$00
EQ RETPROT
vSR cour
BNE BCLPR
RETPROT LDY #$00
RCLPRI LUA ENLEVER, Y
cMP #800
BEQ RETENL
vSR cour
BNE BCLPRI
RETENL JSR $FD0C
UMP PROTEC
ENLEVER ASC "ENLEVER PROTECTION PUIS <RETURN>"878D00
* TOUT CE QUI EST ENTRE ‘TOSO"
* ET ‘FIN’ SERA ECRIT SUR LA
* PISTE 0 SECTEUR 0
Toso HEX 01 #Pour accepter ce qui suit
STA MOTOROFF,X ;Arret moteur lecteur
IDA $2B #Chargement numéro slot boot
LSR
ISR
SR
LSR
‘ORA #8CO
STA $3F
LDA #500
STA 33E
CLD
JSR SFEG4 idéo NORMAL
JSR $FB2F sMode TEXT
JSR SFEe9 Clavier en entrée
JSR $FE93 iVidéo en sortie
JSR HOME
Lpy #500
. Calcul d'adresse pour tenir
. compte de l'adresse S800 au
¢ BOOT de 1a disquette.
1ABI LDA TEXTE-T0S0+$800,¥
cMP #600
BEQ LABZ
JSR COUT
Iny
BNE ABI
LAB2 JSR S$FDOC 7Attente touche clavier
UMP = ($003E)
* Message a afficher av ROOT *
teeseeessesees
TEXTE ASC "h====~
ASC “! DISQUETTE DE DONNEES SANS DOS
ASC "! METTRE LA DISQUETTE PROGRAMME 1"6D
asc 7 APPUYER SUR <RETURN> ao
asc ~-1"8787878D
*
HEX 00 Fin de message :
FIN HEX FF Fin de chargement total
* PARAMETRES POUR RWTS (I0B) *
* Input Output control Block *
108 HEX 0160
LECTEUR HEX 00
VOLUME HEX 00
PISTE HEX 00
SECTEUR HEX 00
#Table I0B
sNunéro lecteur
Numéro volume
#Numéro piste
sNuméro secteur
DA CARUNIT drosse caract. unité disque
DA TAMPON = Adresse mémoire tampon secteur
HEX 0000
COMMANDE HEX 00 ¢Code de commande
00 positionnement
* #$01 lecture
a #$02 écriture
Pom's n° 26
‘ 7$04 formatage
ERREUR HEX 00 #Code erreur en retour
me #$08 erreur format
10 protégé écriture
20 erreur volume
7$40 erreur lecteur
80 erreur lecture
HEX 00 ‘Volume précédent
HEX 60 Interface précédente
HEX 01 sLeeteur précédent
’
* Device Characteristics Table *
CARUNIT HEX 0001EFDE
* DEBUT DU TAMPON DE 256 OCTETS*
* correspondant au contenu d‘un*
* secteur lu ou 4 ce qui sera *
#Caractéristiques unité disque
* * écrit sur un secteur e
seceesscsaecenennsesenssassesses easeescnesececeessnssessoneeses
* CARACTERISTIQUES UNITE DE = * .
* DISQUETTE (DCT) * TAMPON DS 256 *Début du tampon (256 octets)
END
Récapitulation
‘ , 3158- BB BO AO AA AO CC ES EF 32E8- 26 32 AS 1C C9FF DO 01
BOOTDA TA 3160- #4 ES ¥5 F2 AO B2 BA B7 32F0- 60 20 69 32 60 A9 01 8D
3168- 38 B3 8D 8D C9 EE ES FA 32F8- AF 35 DO 05 A9 02 8D AF
Aprés avoir saisi ce code sous 3170- £9 El EC £9 F3 El F4 £9 3300- 35 20 4D 34 A9 6C 85 19
moniteur, vous le sauvegarderez par 3178- EF EE AQ B3 R6 AO FO E9 3308- A9 31 85 1A 20 C5 33 AG
BSAVE BOOTDATA,A$3000,L$6C2 3180- F3 F4 £5 F3 8D 00 CC E5 3310- 24 8D FE BE 20 BC 32 A9
3188- £3 F4 £5 F5 F2 AO Bl BA 3318- 23 8D FE RE AS 1C C9 FF
3000- A9 4C AD 00 03 8D 03 03 3190- B7 B@ BE AO AA AO CC ES 3320 DO 01 60:A9'FO 85 19 A9
3008- 8D 06 03 aD 09 03 aD OC 3198- £3 F4 £5 F5 F2 AO B2 BA 3328- 31 85 1A 20 C5 33 AI 05
3010- 03 8D OF 03 8D 12 03 8D 31A0- B? B8 B9 8D 8D AB AD AD 3330- 85 19 AS 32 85 1A 20 CS
3018- 15 03 A9 17 BD 01 03 AD 31A8- AD AD AD AD AD AD AD AD 3338- 33 AI 11 6D Bl 35 AI 00
3020- 32 8D 02 03 AY 1E 8D 04 31BO- AD AO 14 01 10 05 12 20 3340- @D B2 35 A9 01 BD B9 35
3028- 03 AY 32 BD 05 03 AD SA 31B8- 03 01 OC Oc 20 18 18 18 3348- 20 61 33 AY FF 8D 86 36
3030- 8D 07 03 A9 32 BD 08 03 31C0- AQ AD AD AD AD AD AD AD 3350- 8D 87 36 AS 24 BD FE 35
3038- A9 61 8D OA 03 AY 32 BD 31C@- AD AD AD AD AB &D 8D &D 3358- AY 02 BD BY 35 20 61 33
3040- OB 03 A9 A2 8D OD 03 AD 31D0- 8D FF C3 EF EE F3 F4 F2 3360- 60 AS 00 8D BA 35 AG FF
3048- 32 8D OF 03 A9 AY BD 10 31D8- F5 BI F4 £9 EF EE AO C3 3368- 85 1C AY 35 AO AD 20 D9
3050- 03 A9 32 8D 11 03 A9 FS 31E0- Cl D4 Cl CC CF-C7 AO ES 3370- 03 A9 00 85 48 AO 00 AD
3058- 8D 13 03 A9 32 BD 14 03 31E8- Fd AQ D6 D4 CF C3 8D 00 3378- BA 35 C9 08 DO 0A A9 DI
3060- A9 FC 8D 16 03 AY 32 BD 31FO- CC E9 E? FR F2 El F4 £9 3380- 85 19 A9 33 85 1A DO 3D
3068- 17 03 20 84 FE 20 2F FB 31F8- EF EE AQ FO £9 F3 F4 ES 3388- C9 10 DO 0A A9 ED 85 19
3070- 20 89 FE 20 93 FE 70 54 3200- AQ B3 B6 6D 00 CD E9 FI 3390- A9 33 85 1A DO 2F C9 20
3078- FC A9 9B 85 19 AG 30 85 3208- ES AQ CO AO EA EF F5 F2 3398- DO 0A A9 02 85 19 AY 34
3080- 1A AO 00 B1 19 FO 07 c9 3210- AO D6 D4 CF C3 8D 00 AS 33A0~ 85 1A DO 21 C9 40 DO OA
3088- FF FO 0B 20 ED FD £6 19 3218- 01 8D AF 35 DO 05 AY 02 33A8- AS 1C 85 19 A9 34 B5 1A
3090- DO 02 B6 1A DO ED A9 10 3220- 8D AF 35 20 4D 34 A9 00 33R0- DO 13 C9 80 DO OA AY 39
3098- 85 22 60 AO AO AO AO AO 3228- 85 1C AY BB 85 19 AY 30 33B8- 85 19 A9 34 85 1A DO 05
30A0- AO AO AO AO AO AO AO AO 3230- 85 1A 20 C5 33 AO 00 B9 33C0- A9 00 85 1C 60 AO 00 BI
30AB- OC 09 13 14 05 20 04 05 3238- C7) 34 99 C2 35 C8 C9 FF 33C8- 19 FO 07 C@ 20 ED FD 4C
30B0- 13 20 03 01 OC OC aD BD 3240- DO F5 AS 00 8D RO 35 Ad 33D0- C7 33 60 05 12 12 05 15
3OB8- C5 £3 F2 EY F4 FS F2 ES 3248- 00 8D B1 35 A9 00 8D B2 33D8- 12 20 04 27 09 OB 09 14
30C0- AQ ED FS F3 F3 El E7 ES 3250- 35 A9 02 @D B9 35 20 61 33E0- 09 01 0C 09 13 01 14 09
30C8- AO FO E9 F3 F4 E5 AO BO 3258- 33 60 A 01 8D AF 35 DO 33E8- OF OF 87 &D 00 04 09 13
30D0- AO F3 ES B3 F4 ES FS F2 3260- 05 AS 02 8D AF 35 20 4D 33F0- 11 15 05 14 14 05 20 10
30D8- AO BO 8D 00 CC ES E3 F4 3268- 34 A9 00 6D BO 35 AI 11 33f8- 12 OF 14 05 07 05 05 87
30B0- £5 F5 F2 AO Bl BA B? BE 3270- 8D B1 35 A9 00 8D B2 35 3400- @D 00 05 12 12 05 15 12
30E8- BB AO AA AO CC E5 EF Fa 3278- A9 01 8D B9 35 AQ FB 85 3408- 20 OF 15 OD 05 12 OF 20
30F0- E> FS F2 AO B2 BA B7 B7 3280- 19 A9 30 85 1A 20 C5 33 3410- 04 05 20 16 OF OC 15 OD
30F8- B1 8D BD CC E9 E2 FH F2 3288- 20 61 33 AY FF 8D FE 35 3418- 05 87 8D 00 05 12 12 05
3100- £1 F4 E9 EF EE AO FO £9 3290- 8D FF 35 8D 02 36 8D 03 3420- 15 12 20 0C 05 03 14 05
3108- F3 F4 ES AO BI AO ES F4 3298- 36 AY 07 4D BY 35 20 61 3428- 15 12 20 28 09 2F OF 20
3110- AQ B? 8D 00 CC ES E3 F4 32A0- 33 60 A9 01 8D AF 35 DO 3430- 05 12 12 OF 12 29 87 @D
5116- £5 F5 F2 AO Bl BA B7 B7 32A8- 05 A9 02 8D AF 35 20 4D 3438- 00 05 12 12 05 15 12 20
3120- B4 AO AA AO CC ES £3 F4 32B0- 34 AY 33 85 19 AI 31 85 3440- 04 05 20 OC 05 03 14 15
5128- £5 FS F2 AO B2 BA B7 B7 32B8- 1A 20 C5 33 A 04 8D B9 3448- 12 05 87 &D 00 20 58 FC
3130- B7 8D 6D C9 EE E9 F4 £9 32C0- 35 A9 00 8D BO 35 20 61 3450- A2 60 AD AF 35 C9 02 FO
3138- B1 EC B9 3 £1 P41 £9 EF 32C8- 33 A9 60 8D FF AE AD AF 3458- 06 RD RA CO 4c 62 34 BD
3140- EE AO B3 BS AO FO E9 F3 32D0- 35 8D FB BS AY D2 85 19 3460- 8B CO BD 8&9 CO AO FF A?
3148- F4 ES F3 8D 00 CC ES EF 32D8- AY 31 85 1A 20 C5 33 20 3468- FF CA DO FD 88 DO F& AZ
3150- F4 £5 F5 F2 AQ Bl BA B7 32E0- 9F AE AS 20 &D FF AE 20 3470- 60 BD 8D CO BD 8E CO 30
Pom's n° 26
3478- 04 BD 88 CO 60 BD 88 CO 3540- Al AO
3480- AO 00 BY ED 33 C9 00 FO 3548- Ao cc
3488- 06 20 ED FD C8 DO F3 AD 3550- D3 D1 DS C5
3490- 00 B9 Ad 34 C9 00 FO 06 3558- D0 D2 CF C7?
3498- 20 ED FD CA DO F3 20 OC 3560- C5 AO Al aD
34A0- FD 4C 4D 34 C5 CE CC C5 3568- AO AQ Cl DO
34A8- D6 C5 D2 AO DO D2 CF D4 3570- D2 AO D3 DS
34B0- C5 C3 D4 C9 CF CE AO DO 3578- C5 D4 D5 D2
34B8- DS C9 D3 AO BC D2 C5 D4 3580- AQ AO AO AO
34C0- DS D2 CE BE 87 8D 00 O1 3588- AD AD AD AD
34C8- 9D 88 CO AS 2B 4A 4A 48 3590- AD AD AD AD
34D0- 4A 09 CO 85 3F AS 00 85 3598- AD AD AD AD
34D8- 3E D8 20 84 FE 20 2F FB 35A0- AD AD AD AD
34E0- 20 89 FE 20 93 FE 20 58 35A8- 87 87 8D 00
34E8- FC AQ 00 B9 37 08 C9 00 35B0- 00 00 00 BE
34F0- FO 06 20 ED FD C8 DO F3 35B8- 00 00 00 00
34F8- 20 0C FD 6C 3E 00 AB AD 35C0- EF DB 00 00
3500- AD AD AD AD AD AD AD AD 35C8- 00 00 00 00
3508- AD AD AD AD AD AD AD AD 35D0- 00 00 00 00
3510- AD AD AD AD AD AD AD AD 35D8- 00 00 00 00
4518- AD AD AD AD AD AD AB &D 35E0- 00 00 00 00
3520- Al AO C4 C9 D3 D1 DS CS 35E8- 00 00 00 00
3528- D4 D4 C5 AO C4 C5 AO C4 35F0- 00 00 00 00
3530- CF CE CE C5 C5 D3 AO D3 35F8- 00 00 00 00
3538- C1 CE D3 AO C4 CF D3 AO 3600- 00 00 00 ov
co
Eel
D4
b2
Al
DO
cS D4 D4 3608- 00 00 GO a0
AO C4 C9 3610- 00 00 00 00
D4 C5 AO 3618- 00 00 00 00
¢1 CD cD 3620- 00 00 00 00
AQ AO AO 3628- 00 00 00 00
DS D9 C5 3630- 00 00 00 00
AO BC D2 3638- 00 00 00 00
BE AU AO 3640- 00 00 UU 00
8D AB AD 3648- 00 00 00 00
AD AD AD 3650- 00 00 00 00
AD AD AD 3658- 00 00 00 00
AD AD AD 3660- 00 00 00 00
AD AB 87 3668- 00 00 00 00
01 60 00 3670- 00 00 00 00
C2 35 00 3678- 00 00 00 00
01 00 02 3680- 00 00 UO 00
00 00 00 3688- 00 00 00 00
00 00 00 3690- 00 00 00 00
00 00 00 3698- 00 00 00 00
00 00 00 36A0- 00 00 00 00
00 00 00 36A8- 00 00 00 00
00 00 00 36B0- 00 00 00 00
00 00 00 36B8- 00 00 00 00
00 00 00 36C0- 00 00
00 00 00
Au sommaire de la disquette LUDOLOGIC,
trois jeux de réflexion de difficulté croissante.
Ces jeux qui nécessitent des neurones aussi
calmes qu'entrainés, ne devraient pas décevoir
les amateurs de puzzles et autres casse-tétes.
Il n'est pas nécessaire de présenter TAQUIN,
ce pousse-pousse informatique ici fort bien
présenté.
Nouvelle difficulté, NOIR & BLANC : 37
hexagones peuvent étre noirs ou blancs mais
au départ vous n'’en connaissez pas la couleur.
Chacun comporte un numéro qui représente le
nombre de cellules yoisines blanches... A
vous de reconstituer le décor original !
HEXAGONE MAGIQUE est encore plus
délicat, méme principe que le carré magique,
mais ici vous devrez installer les chiffres de 1
& 19 dans un hexagone de telle facon que les 5
horizontales et 10 obliques totalisent chacune
38 : bonne chance.
Fidéle & son habitude, Pom's vous propose sur cette disquette les
sources des routines écrites par Sylvie Gallet en assembleur Lisa
2.5. Bien entendu, le Basic est également listable. TAQUIN et
NOIR & BLANC utilisent leur propre routine graphique qui
permet de dessiner plus rapidement qu'avec des shapes.
80,00 F Franco,
Bon de commande page 74
Une nouvelle disquette de jeux :
Ludologic
Pom's n° 26
ui n'a jamais eu de
problémes en tapant
LAOD au lieu de
LOAD, ou CQTQLOG
au lieu de CATALOG. N'avez
vous jamais eu envie de
raccourcir les commandes de
ProDOS ou de les traduire,
comme cela a déja été proposé
pour le DOS 3.3. Et si, pour le
méme prix, vous vous offriez
deux commandes supplémen-
taires qui ne tarderont pas 4 vous
paraitre indispensables ?
Des commandes
personnalisées
Les versions de BASIC.
SYSTEM sont innombrables et il
serait imprudent de les ‘patcher’
directement comme en DOS 3.3.
C'est pourquoi, plutét que
remplacer les commandes nor-
males, on ajoute des commandes
qui auront le méme réle. Cela
aura pour avantage d'ajouter des
commandes... sans en sup-
primer.
Aprés avoir lancé l'exécution de
NEWCOM, vous pourrez taper
"CATALOG" aussi bien que
"CG" pour obtenir le catalogue
d'une disquette.
Les nouvelles
commandes
BL = BLOAD
BR = BRUN
BS = BSAVE
CG = CATALOG
CT = CAT
CH = CHAIN
CL = CLOSE
CR = CREATE
DL = DELETE
EX EXEC
I = IN£
LD = LOAD
LK = LOCK
PX = PREFIX
P = PRE
RN = RENAME
SA = SAVE
UN = UNLOCK
VE = VERIFY
Commandes ProDOS :
Renommez-les !
La syntaxe des commandes
raccourcies est la méme que celles
des commandes normales.
Comme l'intérét de renommer les
commandes utilisables seulement
dans un programme est faible,
seules les commandes accessibles
en mode direct ont été traduites.
Cependant, vous pouvez changer
cela si vous le désirez, grace au
programme CHANGE.
Note : NEWCOM est compatible
avec EPE 5.0, mais EPE devra
étre lancé avant car il n‘est pas
relogeahle.
Choisir le nom de ses
commandes
Vous pouvez choisir vous-mémes
les nouveaux noms _ des
commandes ProDOS en utilisant
le programme CHANGE. Ces
noms ne doivent pas étre
constitués de plus de huit
caractéres. De plus, le premier
caractére d'une commande doit
obligatoirement étre une lettre.
Les caractéres suivants peuvent
étre n'importe quoi (les
minuscules sont automatiquement
converties en majuscules) sauf un
espace ou un caractére de
contréle. Il faut faire attention &
ce choix : en effet, si vous prenez
un nom qui ressemble 4 une
commande ProDOS (respec-
tivement commande Basic), votre
propre commande sera interceptée
(respectivement interceptera) par
la commande en question. Ainsi,
si vous choisissez de renommer
"CATALOG" par "CATA", votre
commande sera interceptée et
Bruno Fénart
reconnue comme "CAT" du sous
volume A. Réciproquement, si
vous choisissez "L" pour
tenommer "LOAD", votre
commande interceptera_ la
commande du Basic LIST et
traduira par exemple "LIST,999"
par "LOAD IST,999" (en mode
direct uniquement et il suffirait de
mettre ":" devant "LIST" pour
éviter ce probléme).
Pour ceux qui n'auraient pas
suivi, pas de panique ! En
utilisant directement NEWCOM
sans changer les noms prédéfinis
vous n'aurez pas les problémes
cités ci-dessus.
Deux commandes
indispensables :
BYE et ONLINE
BYE permet d'enchainer vers un
autre interpréteur ou de relancer
MOUSE.DESK si vous I'avez
utilisé pour démarrer. Cette
commande est d'ailleurs déja
disponible sur certaines versions
de BASIC.SYSTEM (version
1.1) . Mais NEWCOM vous
permet d'en disposer quelle que
soit la version que vous utilisez.
Quant a la commande ONLINE,
elle existe sur la plupart des
logiciels tournant sous ProDOS,
mais malheureusement pas avec
BASIC.SYSTEM, faute de place
sans doute. La encore NEWCOM
pallic ce défaut et cette commande
devient vite indispensable,
surtout avec l'arrivée des
unidisks 3'5.
Pom's n° 26
19
Remarque la commande
ProDOS qui permet de quitter une
application est un peu sommaire
(sauf si vous utilisez
Mouse.Desk). Pour I'utiliser sans
probléme, il est conseillé pour
chacune de vos applications sous
ProDOS de noter le préfixe de la
disquette et le nom du programme
(qui doit étre de type System).
Par exemple, pour AppleWriter,
le préfixe est /AW et l'application
est /AW.SYSTEM, ce qui est
simple a retenir. Pour Epistole, le
préfixe est /LB (?!) et
l'application /MY.SYSTEM (?!).
Utilisation de ProDOS
en assembleur
L'utilisation de ProDOS en
assembleur est assez. délicate. En
DOS 3.3 il suffisait d'envoyer
par COUT la commande précédé
de CTRL-D (exactement comme
on l'aurait fait depuis le Basic).
Avec ProDOS il existe deux
solutions :
* La premiére en appelant
directement le MLI. Cette
technique a été expliquée par
Alexandre Avrane dans les
colonnes du numéro 20 de
Pom's. Elle est délicate et
nécessite plusieurs opérations
(GET-PREFIX ou ON-LINE,
GET-FILE-INFO, OPEN,
READ, CLOSE). Elle n'est
indispensable que si vous
souhaitez ne pas_ utiliser
BASIC.SYSTEM (pour écrire
votre propre fichier syst¢me, par
exemple) ou pour des
commandes non fournies par
BASIC.SYSTEM (comme, par
exemple, ONLINE et BYE).
* La seconde solution ressemble
beaucoup a celle utilisée en DOS
3.3 . Il faut recopier en $200 la
commande de BASIC.SYSTEM
que |'on veut exécuter, suivic par
un retour chariot (mais sans
. Comment faire ? )
avant de les installer, faites :
En premier lieu, saisir et sauvegarder le programme binaire
NEWCOM. C'est ce programme qui ajoute les nouvelles
commandes. Saisir puis sauvegarder CHANGE.
Vous voulez simplement utiliser les nouvelles commandes
telles qu’elles sont notées dans l'encadré, faites :
-NEWCOM
Vous préférez modifier le nom des nouvelles commandes
~CHANGE
Vous apportez alors les modifications que vous souhaitez.
Aprés validation, VOTRE nouvelle version de NEWCOM est
sauvegardée sur la disquette. Il vous est alors proposé de
\ lancer NEWCOM pour installer vos nouvelles commandes.
——
—
CTRL-D), puis appeler
DOSCMD = $BE03. Puis on doit
tester s'il y a eu une erreur et
l'afficher 4 l'aide du sous
programme PRINTERR= $BEO0C
(le code de l'erreur se trouve dans
le registre A et non en ERRCODE
= $BEOF comme I'indique le
manuel de référence).
Exemple simple
Lox 400
BCL LDA CMD,X #Recopie
la cde
STA $200,
INX
cmp #$8D {Dernier
caractére?
BNE ACI.
JSR $BE03 sExécute
Ja cde
BCC NOERR Erreur si
Carry set
JSR $BE0C #Si oui af
fiche err.
dont le n*
est dans A
NOERR RTS
CMD ASC“ “CATALOG” ; Commande
DFR SaD
C'est cette solution que nous
utiliserons pour simuler les
commandes de BASIC.SYSTEM
en traduisant le nom des
commandes et en décalant de 8
caractéres (la commande la plus
longue est POSITION) 1a liste
des paramétres. Seuls la gestion
et l'affichage de l'erreur sont un
peu différents, car pris en charge
directement quand on revient de
la commande extérieure vers le
Basic. Notez que la table des
commandes est concaténée de la
méme facgon que celle de
BASIC.SYSTEM.
Enfin, pour terminer, signalons
que le relogeur est le méme que
celui utilisé pour DATHEUR
(Pom's n°24) en plus performant.
Il tient compte de la structure
spéciale des appels au MLI et
permet de reloger les adresses des
paramétres ainsi que celles des
buffers ou des noms d'accés,
suivant la commande ProDOS.
Récapitulation
‘NEWCOM’
Aprés avoir saisi ce code sous
moniteur, vous le sauvegarderez par
BSAVE NEWCOM,A$2000,L$391
2000- AD 08 BE 8D 40 21 AD 07
2008- BE 8D 3F 21 AJ 03 20 F5
2010- BE C9 OC DO 03 4C 09 BE
2018- 8D FF 20 85 43 8D 08 BE
2020- A9 21 85 3D AD FF 85 3E
2028- AI 23 85 3F AO 00 84 42
2030- 84 3C 8C 07 BE 20 2C FE
2038- 20 3C 20 60 AD FF 20 85
2040- 3B A9 00 85 3A A2 00 Al
2048- 3A FO 7F 20 8&C F8 A4 2F
2050- CO 02 DO 5B Bl 3A C9 BF
2058- DO 12 88 Bl 3A C9 00 DO
20
Pom's n° 26
Programme ‘CHANGE’
10 D$ = CHRS$ (4): PRINT D$"BLOAD NEWCOM" L = LEN (NS): IF L = 0 GOTO 330
20 DIM PR$(30),NWS$(30) 320 FORI = 170 L:J = J + 1: POKE J, ASC
30 DATA “APPEND”, "BLOAD", "BRUN", "BSAVE"," ( MID$ (N$,I,1)): NEXT I
CATALOG", "CAT", "CHAIN", "CLOSE","CREA 330 J = J + 1: POKE J,0
TE", "DELETE", "EXEC", "FLUSH", "FRE", "I 340 NEXT IT
N#", "LOAD", "LOCK" 400 M$ = “Enregistrer les nouvelles comman
40 DATA "NOMON", "OPEN", "POSITON", "PREFIX" des": GOSUB 2000: IF K$ = "N" GOTO 5
, "PR#", "READ", "RENAME", "RESTORE", "RU 00
N", "SAVE", "STORE", "UNLOCK", "VERIFY", 450 PRINT CHR$ (4)"BSAVE NEWCOM"
TRITE 0" 500 M$ = “Lancer l'exécution de NEWCOM": G
50 FOR I = 0 TO 30: READ K$:PR$(I) = K$: OSUB 2000: IF K$ = "N" GOTO 600
NEXT I 550 CALL 8192: HOME : PRINT "ONLINE": PRI
60 PRINT CHR$ (21): HOME NT CHR$ (4) "ONLINE"
100 REM Lecture 600 END
110 FOR I = 8960 TO 9216: IF PEEK (I) = 1000C = INT (II /16):V=II+5-c*l1
194 AND PEEK (I + 1) = 217 AND PEE 6:H = 1+ C * 20: VIAB V: HTAB H: RE
K (1 + 2) = 197 AND PEEK (I + 3) = TURN
141 THEN TB =I + 4:I = 9216 2000 VTAB 23: HTAB 1: CALL - 958: PRINT
120 NEXT I:LT = 9216 - TB - 2 MS;" 2 (O/N) ";
130 J = TB: FOR I = 0 TO 30:K$§ = "" 2010 GET K$:K$ = CHR$ ( ASC (K$) - 32 *
140 J=J+1:K = PEEK (J): IFK< >0T (K$ > "Z")): IF K$ < > "0" AND KS <
HEN K$ = K$ + CHR$ (K): GOTO 140 > "N" GOTO 2010
150 NWS(I) = K$:LT = LT - LEN (K$) - 1: N 2020 RETURN
EXT I 3000 REM Introduction d'un nom
200 REM Affichage 3010 L = LEN (N$): IF L > LM THEN L = LM:
210 VIAB 2: PRINT " Renommez les comma NG = LEFTS (N$, LM)
ndes de ProDOS": PRINT " 3020 HTAB H + 11:I = L: PRINT NG;
7; PRIN 3030 HTAB H + 11 + I: GET K$:K = ASC (KS
2 TAB 21: PRINT )
” 3040 IF K = 27 GOTO 3150
220 VTAB 21: PRINT “ 3050 IF K = 10 ORK = 11 OR K = 13 Goro 3
“: PRINT “Place d 140
isponible: 000": PRINT "Escape pour 3060 IF K = 6 ANDI > 0 THENI=I-1:G
quitter."; OTO 3030
230 FOR II = 0 TO 30: GOSUB 1000: INVERSE 3070 IF K = 21 ANDI <L THENI =I + 1:
: PRINT PR$(II); TAB( H + 8);: NORM GOTO 3030
AL : PRINT " = ";NWS(II): NEXT II 3080 IF I = LM THEN PRINT CHR$ (7);: GO
240 Ir =0 TO 3030
250 VTAB 23: HTAB 19: PRINT SPC( (LT <1 3090 IF 96 < K AND K < 123 THENK = K-32
00) + (LT < 10));LT: GOsuB 1000 2:K$ = CHR$ (RK)
260 NS = NWS(II):LT = LT + LEN (N$):LM= 3100 IF K = 127 ORK < = 32 ORI = 0 AND
8 * (LT > 7) + LT * (LT < 8): GOSUB (K < 65 OR 90 < K) THEN PRINT CHR
3000:NWS(IT) = N$:LT = LT - LEN (NS ¥ (7)#2 GOTO 3030
) 3110 PRINT K$;:I = I +1: IF I >L THEN L
270 IF K = 13 OR K = 10 THEN II = II +1 =f
- 31 * (II = 30) 3120 N$ = MID$ (NS$,1,I - 1) + K$ + MIDS
280 IF K = 11 THEN II = II - 1 + 31 * (II (N$,T + 1,L - I)
=0) 3130 GoTO 3030
290 IF K < > 27 GOTO 250 3140 PRINT SPC( 8 - 1)7:N$ = MID$ (N$,1
300 REM Quitter Tt)
310 J = TB: FOR II = 0 TO 30:N$ = NWS(II): 3150 RETURN
2060- OB 88 Bl 3A C9 20 DO 04 2090- 13 C9 81 FO OF 38 E9 CO 20C0- AG 3A 20 CB 20 BO 03 4C
2068- AO 05 84 2F AS 3A 85 FA 2098- 90 15 C9 0C BO 11 AA BC 20C8- 45 20 60 C9 03 90 06 DO
2070- AS 3B 85 FB A4 2F 20 D9 20A0- F3 20 FO 0B 20 D9 20 CO 20D0* 06 EO 00 BO 02 18 60 38
2078- 20 CO 05 DO 32 Bl 3A 85 20A8- 04 DO 04 AO 02 DO FS AS 20D8- 60 88 Bl FA AA C8 Bl FA
2080- FB 88 Bl 3A 85 FA 88 Bl 20B0- 2F 38 65 3A 85 3A AS 3B 20E0- 38 E9 21 90 OC 20 CB 20
2088- 3A C9 40 FO 17 C9 80 FO 20B8- 69 00 85 3B 38 ED FF 20 20E8- BO 07 6D FF 20 91 FA 18
aff
Pom's n° 26 21
Source ‘T.NEWCOM’
Assembleur ProCODE
Assemblage par ProCODE
+ NEWCOM
(C) Bruno Fénart
1986
*24/5/86
* Permet de renommer les commandes
* de BASIC. SYSTEM
* Ajfoute en plus
* BYE - permet de
* ONLINE - permet
* Syntaxe : Aucun
START — EQU $2000
DEBUT © EQU START+$100
FIN EQU DEBUT+$300
* Variables en page 0
LENGTH = EQU
PCL equ
Al EQU
a2 Fou
Aa EQU
ADR EQU
* variables diverses
Seas
BUFFIN QU $200
$2r
S3A
$3¢
sae
$42
SFA
deux conmandes
quitter BASIC, SYSTEM
de connaitre tous les volumes en lignes
Paramétre pour ces deux commandes
DEVCNT EQU $BF31
ONLINE = $cs
Quit = 365
ALLOC == $40
READBLOC = $80
WRITEBLOC = $81
ORG START
INITIALISATION
Longueur de 1*instruétion
paar!
ir
le de la ligne désassemblée
e de
#Nombre de lecteurs
Code de ONLINE
sCode de QUIT
Code de ALLOC INTERRUPT
Code de READ BLOC
3Code de WRITE BLOC
Installe la commande personnalisée
entre BASIC.SYSTEM (BI) et ses hufters
part pour MOVE Igothem
Adresse de fin “8
Adresse d'arrivée “ = *
#Vecteur d'indirection temporaire
Buffer utilisé temporairement
* Sous programmes du moniteur
INSDSP2 EQU $F88C
cour BQU SFDED
MOVE EQU SFEZC
Décode la ligne (PCL) avec x=0
Sortie d'un caractére
#(A1)~(A2) vers (Aa) avec Y=0
LDA EXTRNCMD+2 ;Préserve la commande précadente
STA PRECMD+2
LDA EXTRNCMD+1
STA PRECMD+1
LDA #>FIN-DEBUT+SFF ;Ré:
tve autant de pages qu‘en
JSR GETBUFR + occupe le programme 4 reloger
cue #s0c #81 pas d'erreur (A)= adr. buffer
BNE ]gothen :sinon (A) = code d'erreur BI
ome =ERROUT #Afflche NO BUFFERS AVAILABLE et £1:
STA ADRESSE =; Préserve l'adresse du relogement
STA A441
Adresse destination pour MOVE
STA EXTRNCMD+2 ;installée en commande extérieure
LDA §>DEBUT
STA Al+1
Adresses du programme déplacé
LDA §<FIN-1
STA A2
IDA §>FIN-1
STA A2+1
Loy 40
STY a4
sTY Al
Poids faibles nule
STY EXTRNCMD+1
* Page globale HASIC.SYSTEM (BI) JSR MOVE Transfert du programme (Y = 0)
* JSR RELOGE #Reloge le programme sous le BI
RTS
DOSCMD EQU $BEO3 Exécution d'une commande du BI
EXTRNCMD EQU S$BEO6 ;OMP vers interpréteur extérieur
ERROUT EQU $BE09 7Affiche l'erreur et fin * RELOGEur
BADCALL EQU SREBR #Conversion code erreur Mil en BI * sesesses
XRETURN EQU $BE9E RTS connu en page globale du BI * Réassemble le programme situé 4 l'adresse = (ADRESSE)
(GETBUFR EQU SBEFS Reserve (A) page(s) sous le BL * en fonction de son adresse d'assemblage = DEBUT
* Les deux adresses doivent @tre des multiples de 256
XTRNADDR £QU $BESO pAdr se d'une commande externe * Longueur du programme (données comprises) = FIN-LONGUEUR
XCNUM EQU.-$BES3 iN’ de la commande (0 si externe) * La zone des données est séparée par DFB $00 (~ BRK)
PBITS QU SBES4 ;Paramétres optionnels * Le programme prend en compte la structure d'appel av MLI
“FBITS EQU SBES6 sParamétres trouvés * et reloge, si néces: ses des paramétres
VPATHI EQU SBEG6C #Vecteur vers la commande entrée
RELOGE LDA ADRESSE =; Adresse du relogement
* Page globale ProDOS & codes de fonction STA PCLH1
. IDA 40 #Idem poids faible
MUI EQU $BFOO sEntrée de ProDOs STA PCL
20F0- 60 38 60 02 02 04 02 02 2140- BE 88 8C 93 22 AD SF 21 2190- BC 22 23 BD 03 23 AA BD
20F8- 03 02 02 04 00 03 03 00 2148- 8D 50 BE AD 60 21 @D 51 2198- 93 22 99 FF 01 CA 88 DO
2100- D@ AD 6C BE 85 FA AD 6D 2150- BE A9 00 8D 54 BE &D 55 21A0- F6 4C 03 BE 20 00 BF 65
2108- BE 85 FB A9 00 &D 92 22 2158- BE 8D 53 BE 18 60 4C¢ 61 21A8- 58 22 20 00 BF CS 54 22
2110- A2 FF AO 00 E8 C8 BD 41 2160- 21 D&@ AE 92 22 FO 43 CA 21B0- BO 78 AD 31 BF @D 52 22
2118- 23 29 7F DO 05 88 DO 21 2168- FO 3A CA AO 00 B9 00 02 21B8- A9 D3 20 ED FD AD S2 22
2120- FO 10 Dl FA FO EE 49 20 2170- C9 8D FO 03 C8 DO Fé BS 21CO- 0A OA OA OA AB BY 00 02
2128- D1 FA FO E8 E8 BD 41 23 2178- 00 02 99 08 02 88 CC 93 21C8- 8D 53 22 29 7F 4A 4A 4A
2130- DO FA EE 92 22 AD 92 22 2180- 22 DO F4 98 38 69 08 AB 21D0- 4A 09 BO 20 ED FD A9 AC
2138- CD 91 22 DO Dd 38 4C 9E 2188- AQ AO 99 FF 01 88 DO FA 21D8- 20 ED FD A9 C4 20 ED FD
22
Pom's n° 26
]décode 1x #0 sIndispensable pour INSDSP2 anc 4a
LDA (PCL,X) —7L' instruction est égale 4 BRK STA PCL#
BEQ jfin falors début des données sec
JSR INSDSP2 #Décede une instruction et $BC ADRESSE sLongueur du code désassemblée
LDY LENGTH # détermine sa longueur Lox PCL ¢ mise en X, A
cry #2 JSR TEST est si < longueur du programme
BNE )suivant plongueur < 3 : Opérande inchangé Bes jfin
UMP Idécode ;Instruction suivante
LDA (PCL),¥ ;L' instruction est-elle JSR MI? fin RTS
CMe «#>MLI
BNE Jnonmli * TEST une longueur
DEY wisi =
LDA (PCL),Y * Longueur en X, A (A poids fort) comparée a FIN-DEBUT
Me ILI * Si inférieur ¢ = 0, sinon C = 1
BNE Jnonmli
DEY TEST CMP «#>FIN-DESUT
LDA (PCL),Y BCC Jovi # 0 opérande > adresse de tin
CMP 4820 BNE Jnon
BNE }jnonmli CPX §<FIN-DEBUT;Test poids faible de | 'opérande
ily 45 Instruction du MLI sur 6 octets acs non
STY LENGTH lout cLe ;Compris entre les limites
RTS
Inonmli LDA PCL passage de paramétre pour CALCUL jnon SEC
STA ADR RTs
LDA PCLHL
STA ADR+1 * CALCUL des opérandes 4 modifier
LDY LENGTH sInstruction sur 3 ou 5 octets Faecal is
JSR CALCUL :Caleul d'une adresse relogée * Poids fort de l'opérande 4 modifier en (ADR),Y
cey #5 Est-ce JSR SBFOO ? * Retour C = 1 si aucune transformation, 0 sinon
BNE jsuivant Non alors instruction suivante
TDA (PCL), Y¥ sAdresse des paramétres MLI CALCUL DEY
STA ADRI1 gmise comme paramétre de CALCUL LDA (ADR), Y Poids faible de l'opérande
DEY TAX penx
LDA (PCL),¥ INY
STA ADR LDA (ADR),Y —;Poids fort de 1'opérande en A
DEY 7OLfset des opérandes 4 changer SEC Comparaison de ltopérande et
LDA (PCL), ¥ psuivant le code de fonction MILI SBC #2DEBUT jAdresse d'assemblage < opérande?
CMP = #ALLOC #0ffset = 3 pour ALLOC INTERRUPT BCC non
BEQ ]calcul ask TEST Opérande dans les limites?
CMP #READBLOC ; ainsi que pour READ BLOC BCS non yNon: instruction suivante
BEQ Jealeul ADC ADRESSE 781 oui calcule l'octet de poids
CMP #WRITEBLOC ; ainsi que pour WRITE BLOC STA (ADR),Y 7 tort de l'adresse translatée
BEQ Jealcul cue
SEC RTS
sBC #$CO jnon SEC
BCC }suivant RTS
CMP Sc a
BCS |suivant . — = peewee
‘TAX
ri 6 SG Gg 2p 2G Bg Pe 2p 4 V3, 3? ode
LDY OFFSET,X ;0ffset des codes de $CO 4 ScD MS Ode saa cael
BEQ )suivant #Transformation saut pour NEWLINE ADRESSE DS 7 Adresse du relogement
Jealcul JSR CALCUL
cey #4 Cas de OPEN & RENAME (doublée) DS DEBUT-* tLe début doit étre aligné
BNE suivant ;sinon une seule transformation
iwwy #2 Offset du second paramétres tha it ciel
BNE Icalcul 7 = UMP . *
* pébut du code relogeable *
Jsuivant LDA LENGTH slongueur de l'instruction - 1 « *
sec seine
apc PCL #Calcul de l'adresse suivante
STA PCL * Interpréteur des commandes
LDA PCI4+1 8 ween ew ee eee eeceeeecesee==
21E0- A9 Bl 2C 53 22 10 02 A9 2230- B9 00 02 A2 0A C9 28 FO 2280- AQ Cl AO DO D2 CF C4 CF
2188- B2 20 ED FD A9 AO 20 ED 2238- 0C A2 1E C9 45 FO 06 C9 2288- D3 AO D6 CF CC DS Cb CS
21F0- FD A9 BD 20 ED FD A9 AO 2240- 52 FO 02 A2 00 BD SF 22 2290- 00 21 00 00 C2 D3 Cl DE
21F8- 20 ED FD AD 53 22 29 OF 2248- FO 06 20 ED FD E8 DO FS 2298- C5 D2 C9 C6 DY C2 CC CF
2200- 8D 53 22 DO 06 20 2F 22 2250- 60 00 00 00 02 00 00 02 22A0- Cl C4 C5 CC CS D4 C5 C3
2208- 18 90 13 A9 AF 20 ED FD 2258- 04 00 00 00 00 00 00 c9 22A8- Cl D4 Cl CC CF C7 CF DO
2210- C8 B9 00 02 09 80 20 ED 2260- AF CF AO CS D2 D2 CF D2 22B0- C5 CE D7 D2 C9 D4 CS DE
2218- FD CE 53 22 DO F2 A9 8D 2268- 00 CE CF AO C4 C5 DE C9 22B8- C5 C3 D2 C5 Cl D4 C5 CE
2220- 20 ED FD CE 52 22 10 90 2270- C3 C5 AO C3 CF CE CE C5 22C0- D2 C5 D3 D4 CF D2 CS CE
2228- 18 60 20 8B BE 38 60 C8& 2278- C3 D4 C5 C4 00 CE CF D4 22C8- Cl CD C5 C2 D2 DS CE CC
Pom’'s n° 26
* Retour 4 une éventnelle autre commande DEX #N* de la commande du BI
* ai aucune des commandes n'est ceconnue Loy #0
Jnocr LDA BUFFIN,Y
cLD #Non indispensable mais CMP #S8D
LDA VPATHI rAdresse-1 de la commande entrée BEQ )décale
STA ADR smise dans un pointeur temporaire INY
TDA VPATHI+1 BNE Jnocr
STA ADR+L \Idécale LDA BUFFIN,Y
STA BUFFIN‘6,Y ;Décalage de @ octets
LDA #0 gInitialise le compteur DEY
STA NOCMD 3 des command ceY LNCMD Compare avec la longueur
LOX #SFF initialise sur la liére commande BNE |décale
Jcherche LDY #$00 #Pointe ler caractére de l'entrée TYA
lcompare INX ' 7Caractére suivant SEC
INY apc 48
LDA NEWCMD, X sCharge une lettre de la commande TAY
AND #S7F LDA #SA0 7Espace
BNE |suivant lefface STA BUFFIN-1,¥
DEY tler caractére ? DEY
BNE trouvé Non alors comparaison compléte BNE Jefface
BEQ Jcomsui bl LDY PROLNG,X sLongueur de la commande BI
Jsuivant CMP (ADR),Y Comparaison avec l'entrée LDA PROVEC,X Offset du dernier caractére
BEQ Jcompare rIdentiques -> suivante TAX
EOR #$20 7 sinon compare Jeommand LDA PROCMD-1,X
MP (ADR) ,Y # avec une minuscule STA BUFFIN-1,Y
BEQ Icompare sTdentiques -> suivante DEX
Jautre INX #Recherche un pointeur commande DEY
LDA NEWCMD, X BNE command
BNE jautre #Début d'une commande ? MP =DOSCMD tExécution de la commande, et fin
lcomsui INC NOCMD Commande suivante (retour avec un traitement d'erreur eventuel)
LDA NOCMD GOBYE vSR MLI Au revoir !
CMP = NBCMD #Encore une DFB QUIT
BNE |cherche fat x la commande sulvante DA QUITPARA
SEC commande non reconnue
PRECMD SMP XRETURN jaut 4 la commande précédente GONLINE JSR MLI #Teste tous les lecteurs
DFB ONLINE
trouvé DEY DA ONLINEPA
‘STY LNCMD Mé@morise la longueur-1 BCS )|finerr
LDA |vecteurtl ;Charge l’adresse de ‘LDA DEVCNT
STA XTRNADDR ; retour vers STA CNT
LDA jvecteur+2
STA XTRNADDR+1 Idevice LDA 9"s"
LDA 40 ;Aucun paramétre autorisé JSR COUT
STA PBITS LDA CNT
STA PBITS+1 ASL
STA XCNUM rIndique commande externe ASL
cLe La commande a éré trouvé AST.
RTS ASL
TAY
* Vecteur d'indirection vers lea commandes LDA BUFFIN,Y
+. = een nnnnnnn, ------. i STA BYTO
* (SMP est indispensable pour permettre le relogement) AND §87F iIsole le slot
Lusk
]vecteur UMP DISPATCH ;Vecteurs des commandes SR
ise
LsR
* DISPATCH des commandes installéee ORA "0" ion en code ascii
Opec ee ewen nnn wenn nnnennnnnnennsss oSR COUT
* Essai des commandes externes l'une aprés l'autre LDA 4","
JSR COUT
DISPATCH CLD LDA #"D*
LOX =NOCMD iNombre de commandes: asrk COUT
BEQ CONLINE LDA #*1"
DEX BIT BYTO
BEQ COBYE BPL }d2
2350- CC 00 C? D2 00 C2 D3 00
22D0- CF C3 CB C3 C8 Cl C9 CE 2310- 45 OE 3F 5A 1E 56 63 5D 2358- C3 C7 00 C3 D4 00 C3 cB
22D8- A3 C6 CC DS D3 C8 F2 ES 2318- 4E 37 33 3B 05 33 3F 09 2360- 00 C3 CC 00 C3 D2 00 C4
22E0- E1 E4 DO CF D3 C9 D4 C9 2320- 23 GF 06 05 04 05 07 03 2368- CC 00 C5 D8 00 00 00 c9
22E8- CF CE CF CD CF CE DO D2 2328- 05 05 06 06 04 05 03 03 2370- 00 4C 44 00 CC CB 00 00
22F0- A3 DO D2 C5 C6 C9 DA C3 2330- 04 04 05 04 OR 06 03 04 2378- 00 00 DO v8 00 DO OO 00
22F8- CC CF D3 C5 Cl DO DO C5 2338- 06 07 03 04 05 06 06 05 2380- D2 CE 00 00 00 D3 C1 00
2300- CE C4 AD 6F OF 38 05 1A 2340- 01 CF CE CC C9 CE C5 8D 2388- 00 DS CE 00 D6 C5 00 00
2308- 16 44 68 2R 13 26 4A 2E 2348- 00 C2 D9 CS aD 00 00 C2 2390- 00
Pom's n° 26
LDA 6n2" et variables de 1'interpréteur
1d2 JSR COUT @ 2---------------. ee —
LDA sn NBCMD © _DFB PROLNG-PROVEC+2;Nombre de commandes
JSR COUT NOCMD Ds 1 Numéro de la commande trouvée
LOA oe" LNCMD DS 1 gLongueur de la commande trouvée
JSR COUT
IDAs PROCMD EQU * iTable des commandes ProDOs
JSR COUT bsave ASC “BH
LDA BYTO save ASC "SA"
AND #50F FIsole la longueur du nom verify ASC "VE"
STA BYTO bsave. al 2
BNE Jnoerr sErreur ? save. = *
JSR PRINTERR ASC *RIFY"
cLc verify. = *
BCC Jsuite iToujours pris bload
Jnoerr LDA 4"/" eAffiche le nom du volume load
gsR COUT delete
Jaffiche INY bload.
IDA BUFFIN,Y lod, = *
ORA #$80 . ASC “ELETE"
JSR COUT delete. = ie:
DEC BYTO catalog = *
BNE Jaffiche cat ASC "CAT"
cat. ° ®
Jsuite LOA $S8D Saute une ligne ASC “ALOG"
JSR COUT catalog. = *
DEC CNT flecteur suivant open ASC "OPEN"
BPL |device open. - .
cLe Pas d‘terreur write ASC "WRIT"
RTS #Retour au BI exec asc “E™
write. 2 *
lfinerr JSR BADCALL ;Convertie l'erreur MLI en BI ASC *XE*
sEC create asc "Cc"
RTS Retour avec affichage de l'erreur exec. = *
ASC “REATE™
* Affichage de l’erreur create. = ad
PRINTERR INY fre ASC °F"
LDA BUFFIN,Y #Code de l'erreur restore ASC “RE*
LDX #<NOCONNEC-TABERR fre. = *
CMP «#528 store ASC "STO"
BEQ Jafferr rename ASC "RE™
LDX #<NOPRODOS-TABERR restore, = i
CMP #845 store. = *
REQ. Jafferr ASC “NAME”
CMP «#952 rename. = «
REQ jafferr brun ASC "B™
LDX = #<IOERR-TABERR run asc *R™
Jafferr LDA TABERR,X unlock ASC UN"
BEQ |fin 7Pin du me brun, = ¢
JSR COUT run. * *
INX lock ASC "LOCK"
BNE jafferr #Toujours pris unlock. *
}fin RTS lock, = *
chain
Variables et constantes in
¢ 0 sessesssecssseneesseses chain. = *
DFB O #Séperateur
* Paramétreo ct variables pour QUIT ¢ ONLINE
CNT Ds 1
BYTO Ds 1 position ASC “POSITIO"
ONLINEPA DFB 2 nomon = ASC *N®
DPB oO Device number = 0 tous position. = *
DA BUFFIN ;Buffer de $100 octets seulement ASC "OMON*
QUITPARA DPB 4 nomon. = ¢
DFB OO PE
DA oO pr. = +
DEB 0 prefix ASC "PREFIX"
DA 0 prefix. = *
TABERR EQU * close ASC “CLOSE"
TOERR ASC "I/O ERROR* close. = *
DFR oo append ASC “APPEND“
NOCONNEC ASC "NO DEVICE CONNECTED" append. = *
DPB oO tiret ASC *-*
NOPRODOS ASC “NOT A PRODOS VOLUME" tire. = *
DPB oO
Pom's n° 26
PROVEC Dre
Dra
Dre
bee
NEWCMD —EQU
DPB catalog.-PROCHD ASC
DPB cat .-PROCMD DFB
DPB chain.-PROCHD Asc
DFB
DFB
asc
DFB
ASC
DFB
asc
DF# load. -PROCMD DEB
DPB lock.-PROCMD asc
DFS nomon.-PROCMD DFB
ASC
DFR position.-PROCMD DPB
DPB prefix.-PROCM asc
DPB pr.=PROCMD DFB
DPB read.-PROCMD asc
DFS rename.-PROCMD DFR
DPB restore.-PROCHD ae
DEB run.-PROCHD DFR
DFB asc
DFR DFB
Dre ASC
DFB pro
DPB DER
DFB Dep
ASC
PROLNG —EQU ate
DPB ae
me Dre
ssi tr
DPB ore
tea DFB
DFB ve
as bes
i asc
si DFB
le asc
DPB
DPB exec.
DFR flush.=flush rob
DFR fre.-fre a
DPB
DFB pid
Dre pd
DPB de
DPB nomen.—nomon
d DEB
DP open.-open oe
DPB position.-position
asc
DPB prefix.-prefix SEE
DPB
pss Asc
Dre
DPB
pote DFB
Drs a
Dre z re
ia BF/26/5/86
*
NAAA AK SOT SRS
unlock.-unlock
verity.
verity
write.-write
tiret.-tiret
“ONLINE*
$8D,0
~BYE"
$8D,0
BL"
pR™
»pse
"cou
ove"
FIN-*
Table des nouvelles conmandes
ronline + CR (pas de paramétre)
bye + CR (idem)
append
sbload
rbrun
rbsave
eatalog
reat
rehain
relose
tereate
delete
jexec
rtlush
ifre
vint
jload
rlock
tnemon
open
tposition
prefix
aprt
pread
freneme
save
yetore
qunlock
averify
awrite
stiret
POL ELELOLEEEEEEEEEEEETEEEEEEEEEEEEEEEEEEEEEEEELEFEEEEEEEEEEEEEE
Accompagné d'une cinquantaine de pages de document!
redéfinir l'organisation d'une disquette, grace & un jou
nm, Disk Manager permet de recréer les commandes du Dos,
instructions qui cn fait un langage simple d'accés a la disquette.
Il offre également un programme d’édition & l'aide de commandes évoluécs. 4 utilitaircs figurent aussi sur la disquette :
Oisk Manager
- Utili-disque : reconstruction d'une disquette détruite, Vérification,
Plan d'occupation
- Ultra-copie : pour un backup particulitrement rapide
- Edicat : Edition du catalogue, classement des fichiers, Titres...
le
- Multi-disque : pour le classement de tous vos programmes (tri instantané).
Dos en Kit
de Dan Steerey
POLO OOO ETE EOE EEELETOOTELEOEOEEEEOEEEEEOLE EE EEEEFTE EEE EEE EE EEE
WN AAAS Ses
26
Pom's n° 26
Pour un Boot ergon
Startup
Le PASCAL UCSD offre la
possibilité de dater les fichiers,
mais on oublie trés souvent de
mettre a jour la date lors du Boot,
car il faudrait appeler le FILER
puis choisir l'option 'D)ate’ puis
‘Quit’.
C'est donc le but du programme
qui suit avec des petits plus.
En effet, il permet :
¢ de mettre a jour la date en
mémoire et sur disquette, la
syntaxe étant la suivante :
jour-mois-annee
jour-mois
-mois-annee
jour--annee
jour
-mois
--annee
¢ de placer automatiquement le
nom du volume 5 (lecteur 2) en
mémoire comme préfixe courant ;
* d'afficher tous les fichiers
‘CODE’ du volume 5 et
d'exécuter l'un d'eux en pressant
simplement sur une touche ;
« d'appeler directement I'éditeur
ou le Filer;
* de quitter le programme.
Pour cela, il a fallu rechercher les
adresses de la date et du préfixe
en mémoire pour le systéme
Pascal 1.2., a l'aide du
programme Prg.1. TEXT. Elles
sont différentes pour les versions
64Ko et 128Ko, Le programme
Startup utilise celles du Pascal
1.2 128Ko.
omique :
Pascal complet
Le principe
La date occupe 2 octets et le
préfixe 8. Sur disquette, il faut
savoir que pour chaque fichier le
systéme réserve 26 octets et le
nombre maximum de fichiers est
78. La structure apparait
clairement dans le programme.
Daniel Mueller
Pour lire et écrire le
DIRECTORY (qui débute au
deuxiéme bloc et occupe 4 blocs)
nous utilisons respectivement les
fonctions UNITREAD et
UNITWRITE.
Programme ‘PRG.1.TEXT’
program recherches
type T date ~ record case boolean of
true : (adresse :
false : (datesys :
end;
Rdate - packed record
mois: 1.,127
jour
annee
end;
var date: T_date;
Ddate + R datey
begin
integer);
“R_date)
{ Initialise Ddace avec 1a date actuellement en memoire
aller dans le FILER et mettre par ex: 1 jan 96 }
with Ddate do
begin
Jour := 017
mois i= 017
annee := 86;
end;
with date do
begin
adresse := ~32767; ( $8000 }
while adresse < -16385 | $BFFF ) do
begin
if datesys* ~ Ddate then writeln (‘adresse ', adresse);
( Comparaison de 1a date en memoire avec Ddate }
adresse := adresse + 1
end { while }
end { with }
end,
{ Increment 1'adresse }
{ Initialiser la date en memoire et Ddate du programme avec les meme valeurs.
Lancer le programme ci-dessus et relever toutes le adresses affichoos
puls changer seulement 1a date en
moire (par le FILER) et relancer
Je programme. L'adresse de 1a date sera celle qui n'a pas ete affichee. }
Pom's n° 26
27
Adresse de base version 1.2
128Ko 64Ko
Date $B8SA $ACFC
Préfixe $B84A $ACEC
Pour l'adresse de la date des
versions 1.0 et 1.1, on peut se
référer a l'article de M. Pascual
paru dans le numéro 16, I'adresse
du préfixe étant obtenue en
ajoutant 16 a celle de la date.
Si l'on désire ‘booter' sur ce
programme il faudra le
sauvegarder sous le nom de :
SYSTEM. STARTUP
sur le lecteur 1, ainsi il sera
exécuté automariquement.
Ce programme tourne sur Apple
// possédant deux lecteurs de
disquette. Pour un systéme avec
un seul lecteur, il faudra modifier
la ligne indiquée dans le listing.
(procédure FIX_VOL)
Bibliographie
APPLE Pascal, Operating system
reference manual, Language
reference manual,
Découvrez PASCAL (tome 2) sur
Apple J[, //e, //c_de John Colibri
édité par MNEMODYME,
Le systéme Pascal UCSD (tome
2) de Thierry CHAMORET édité
par EDITEST.
Programme ‘STARTUP.TEXT’
program STARTUP;
uses chalnstuff ( setchain (FICHIER),
Fajoute le suffixe .CODE a FICHIER
wpuis ltexecute }+
const boot_vol = 4; { Drive 1 ou volume #4 }
cour_vol = 5; { Drive 2 ou volume #5 )
maxlong = 7; { Long max. du nom de volume }
adrdate = -18342; ( Adresse de 1a date pour Pas
veal [1.2] 126K OBB5A)
adrtix = -18358; { Adresse du prefixe pour Pas
weal [1.2] 128K OBa4A )
dash = '=";
month = *??2JanFebMaraprMayJunuulAugSepoctNovde
pers
typo system = record case integer of
1: (datesys : *r_date); { Poke po
wur la date }
3°: (volumesys : *vol); ( Poke po
sur le volume }
2: (adresse + integer) {( adrosso
» en memoire }
end; ( record }
emols = 1..12:
rdate = packed record
mois : r mois;
jour : 1..31:
annee : 0..100
end; { recorg )
vol = string (maxlong};
volume = 4,,12; { Numero des volumes }
= (1ire,ecrire); { Ordre pour 1a proced
sure IQ Disk }
ordre
strfile = string [18];
longstring = string [255];
filetyp = (untyped, xdsk, code, text, info, data, gra
»f, foto, secure);
{ Types de fichiers utilises par Pascal }
infodir = packed record
prebloc =: integer: { Premier blo
»e physique de la disq. }
derbloc 3 dnteger; { Dernier blo
we du directory }
ease filetyp of
secure, untyped : { Seulement DIREC
»TORY[O)
informations po
sur le Volume }
(filler!
ys 0..2048;
{ Nom de 1a disquette } nom_disk
»: vols
{ Numero du dernier bloc du volume } bloc_nbre
»: integer;
{ Nombre max. de fichiers sur disquette } f110_nbre
0.0242
( Anitialise - neure du dernier acces } time
»: integers
{ Date courante } boot_date
»: date);
xdsk, code, text, info,
data,graf, foto :
(filler
£ 0,.2024;
( Utilise par le FILER } etat
»; boolean:
{ Nom du fichier } filename
a: string[15)};
{ Nore d'octets de le der. bloc du fichier) nbreoctat
pr 1.5125
{ Date de la derniere modification }
»i £_date)
modifdate
end { record J;
var directory : array [0..77] of infodir;
pretix = vols
fichier : strfiles
date : tate;
momoire + system;
ch 3 char;
ok : boolean;
{$0-}
procedure IO DISK (commande : ordre; drive : volume);
{ Procedure gerant les entrees/sorties avec les lecteu
ers disquettes
et Interceptant les erreurs )
function no_ERREUR : boolean;
var num error : integers
procedure write ERREUR;
const inverse = 15; ( Mode inverse }
normal = 14; { Mode normal }
var ch? : char;
begin
page (output);
GotoxY (10,08);
28
Pom's n° 26
write (chr (inverse));
case num_error of
2 7: write (‘NUMERO DE VOLUME INCORREECT!
we
5 + write ('PERTE DU VOLUME');
7 =: write (‘NOM DE FICHIER ILLEGAL"):
9 + write ("LE VOLUME SELECTIONNE N''EST
» PAS EN LIGNE');
64 : write ('ERREUR GENERALE ACCES DISQUE
»)
end; { case }
write (chr (normal));
gotoxy (10,10);
write (chr (7), "CONTROLER VOTRE LECTEUR OU LA
wDISQUETTE', chr (7));
gotoxY (10,12)¢
write ('Pressez une touche quelconque pour con
etinuer ');
repeat
read (keyboard, ch2);
until cn2 > chr (0);
page (output);
end; { Write Erreur }
begin { No_Erreux }
no_erreur :~ false;
num_error := IORESULT; { Numero de l'erreur }
if (num_error = 0) or (num error ~ 16) ( 16 -> di
wsquette protegee }
then no erreur :~ true
else write ERREUR;
end; { No_ErreuR }
{$I-)
begin { 10 disk }
repeat
case commande of
ecrire : unitwrite (drive,directory, sizeof
» (directory), 2);
lire : unitread (drive,directory, sizeof
» (directory), 2):
end; { case )
until no erreur;
end; { I0_disK }
(I+)
procedure FIXE_VOL;
{ Fixe le nom du volume #5 en memoire )
begin
{ Lit sur le drive 2 le nom de la disquette }
I0_disk (1ire,cour_vol);
{ Pour un systeme avec un seul lecteur remplacer ce
»tte ligne par :
IO_disk (1ire,boot_vol) )
prefix := directory[0}.nom disk;
{ Le fixe en memoire )
with memoire do
begin
adresse := adrfix;
volumesys* := prefix;
end; { with }
end { Fixe vol };
procedure FIXE_DATE (disk : boolean);
{ Lit la date sur volume #4
ou la met a Jour en memolre et sur disquette }
begin
if disk
then begin
directory[0} .boot_date := date;
{ St la disquette est protegee contre l'ecriture
il n'y aura pas de message d'erreur
Ja date ne sera remise a Jour seulement en memoire }
IO_disk (ecrire,boot_vol):
end { if then }
else begin
I0_disk (1ire,boot_vol);
date := directory[0} .hoot_date:
end { if else };
{ Fixe la date en memoire)
with memoire do
begin
adresse :
datesys*
end; { with }
end; { Fixe_date }
adrdate;
= date;
procedure CATALOG (var strn : strfilo)+
{ Lit le DIRECTORY de #5 est afficne seulement les fic
whiers codes (max. 58)
possibilite d'EXECUTER I'un de ces fichiers en pres
w»sant
la lettre correspondante }
var n,k,col : integer;
cht 3 chars
pile + packed array ['A'..'z'] of integer: ( M
»AX 58 fichiers }
bogin
repeat
strn vay
a { Compteur fichiers codes }
k { Compteur general }
fixe_vols
page (output);
gotoxY (27,2);
write ("DIRECTORY * prefix):
repeat
k t= k +1; ( On commence par directory(1) car
»directory[0} etant
reserve pour les informations gen
weralos do la disquotte }
with directory(k} do
4f pos ('.CODE', filename) <> 0 { Position de
» .CODE }
then begin
strn := f1lenames
delete (strn,pos ('.CODE',strn), 5):
w{ Efface .CODE }
{ Mise en colonnes 15 p.col.) des £
»ichiors trouves }
col := (n div 15) * 20; { Quelle col
sonne ? }
gotoxY (col+2,4+n mod 15);
write ('(',chr (ord ('A')+n),']
rn);
pile [chr (ord('A')+n)] := kz ( Rang
» du fich, dans DIR )
nienelp
end { if then }s
until (k = directory[0}.file_nbre) or (n = 58);
if n= 0 then begin
gotoxy (10,15);
write (chr (7), 'AUCUN FICHIER CODE
elit ',enr (7))s
for n := 1 to 2000 do;
ok := false;
exit (catalog);
end; ( if then }
gotoxy (16,29)7
write (directory[0].f1le_nbre,' fichiers dont ',n
»,' fichiers **CODE''.');
"st
gotoxY (0,00);
write (‘Taper une lettre - <ESC> pour quitter - <
»SPACE> pour relire ? ')3
repeat
read (keyboard, ch1);
until ch! in ['A',.chr (ord (‘A')+n-1),chr (27),'
wus.
4f ord (chi) = 27
then begin
ok i= false;
Pom's n° 26
29
exit (catalog);
end; { 1f then }
untll chi > *
nm := pile [chi]; { Rang du *ichier dans Directory }
{ Le nom du fichier est retourne dans STRN }
strn :~ concat ('#5:',directory[n}.filename);
end { CataloG );
procedure DATESET;
{ Salsie de la date
- possibilite de rentrer seulement le jour
- le jour et le mois (sur trois lettres)
- ow en entier
- controle sa validire
~ sauvegarde sur la disquette du boot si differente
»)
var temp 1 integer:
mois lit : string [3]; { Represente le mois sous
» sa forme litterale }
fini + boolean;
Stxg_date : longstring; { String pour 1a saisie 4
»e la date }
procedure EFFACE;
{ Efface Jusqu'au premler DASH ,y compris }
begin
delete (strg_date,1,scan (length (strg date),=da
»sh, strg_date/1}));
if length (strg_date) > 0
then delete (strg date, 1,1);
end; { Bffack }
= ee
La function SCAN ( Limite, expression, debut }
pers
integer; est le nombre maximum d'octets
sa explorer
expression : boolean; caractere a rechercher
limite *
EX : = CH (le caractere a rechercher egal a CH)
cH (* : ee different de
» CH)
sont les deux seules possibiltes.
debut : ntimporte quel type sauf FILE; est le p
»remier octet de la
variable a partir duquel la recherche a
webute.
La function SCAN retourne la position du premier oct
wet verifiant EXPRESSION
Si elle est en tete de la valeur a explorer, 1a posi
vtion sera egale a zero.
ee ee ay
function TEST_ENTIER (max : integer) : boolean;
{ Transforme STRG_DATE en entier et teste si TEMP <
» MAX,
la valeur sera dans TEMP }
var x, stop : integer;
begin { Test_entier }
oF
scan (length (strg date),=dash,strg date
vile
for x := 1 to stop do
if strg date[x] in ['0',.'9"]
then Lemp := temp * 10 + ord (strg_date[x}) -
word ('0');
test_entler := (temp > 0) and (temp <= max);
{ Test_entioR }
end;
function ANALYSE_M : boolean;
{ Test si les 3 premters carac. de SRTG_DATE sont d
ves lettres}
var x : boolean:
w : integer; { Compteur }
begin
wired;
x r= true;
mois lit i= "7224;
if length (strg date) > 0
then while (w < 4) and x do
if strg date(w) in ['A'..‘v"]
then begin
ifwel
then mois _lit[w] := strg_da
»te lw)
( La premiere lettre en MAJUS. et les 2 suivantes en m
winus. }
else mois _lit{w] := chr (o
werd (strg date[w]) + 32);
wiewe dy
end { 1f then )
else x := false
else x := false;
analyse M i= x;
{ Analyse }
end;
function ESPACE : boolean +
{ Supprime les espaces ainsi que les caracteres < 32 ¢
at > 123
et convert! tout en majuscules }
var w: integer; { Compteur }
begin
wie dl;
espace := true;
while w <~ length (strg date) do
if (ord (strg_date[w]) >= 33 ) and ford (strg_da
»tof[w]) <> 122)
then begin
if (strg dato[w) >~ ‘'a') and (strg date[
ww) <= fz")
then strg date(w]
:= chr (ord (strg_date[w}) ~ ord (*
wa') + ord ('A'));
wiewe le
end { if then )
else
delete (strg date,w,1):
if length (strq_date) = 0 then espace := false;
end; { Espack }
function TEST : boolean;
{ Test la validite de 1a date (nbre de jours dans chaq
wue mols
et anncos bisextiles) }
var mois 30 : set of r mois; { MOIS 30 := mois de 30
wjours }
ok1 + boolean;
procedure MESSAGE;
var wait : integer;
begin
gotoxY (3,20);
write (chr (7),'<< ERREUR dans la DATE >>");
for wait := 1 to 2000 doz
GotoxY (3, 20);
write (chr (29)):
end; [ MessagE )
begin { TesT }
ok} := true;
test := true;
r= [4,6,9,11]: { mois de 30 jours sont plus
» nombroux que ce deux 31
)
with date do
begin
4f (mois in mois 30) and (Jour >- 31) thon okl :
»= false;
{ Test le mois de fevrier }
If (annee mod 4 = 0) and (mols = 2) and (Jour >=
» 30) then okl := false;
4f (annee mod 4 > 0) and (mols = 2) and (Jour >=
30
Pom's n° 26
» 29) then ok1 := false;
end; { with }
{ Si la date est fausse on restaure 1'ancienne + me
wssage d'erreur }
if not ok!
then begin message;
test := false;
with directory[0}.boot_date do
begin
date. jour
date.mois
date.annee :
end; { with }
end; { if then }
( TesT }
end;
begin { DateseT }
fixe_date (false);
page (output):
GotoxY (0,2);
writeln (‘Saisie de 1a date : <1..31>-<Jan..Dec>-<0
99>") 5
witn date do
write
(‘La date actuelle est le ', jour, dash, copy (mont
wh, mois*3+1,3), dash, annee)
»
repeat
Tint := false;
gotoxY (00,5);
write (‘Entrer la date ? ');
write (chr (29)); ( EOL efface jusqu’a la fin de
la ligne }
readin (strg_date); { Saisie de 1a date }
gotoxy (0,0); ( Question d'esthetique }
if espace
then with date do
begin
( TRAITEMENT PRINCIPAL DE STRG_DA
»TE
- jour - |
if test_entier (31)
then jour := temp:
efface; { Efface jusqu'au prochain '-'
»))
t - mois - ,
temp := 1; { Initialise le compteur po
eur ‘mois’ }
1f (length (strg_date) > 2) and analys
eM
then while (temp < 13) and not fini
» do
{ Verifie si ‘mois lit’ exis
wte dans ‘month’ et
inltlalise mols Ex: Jan=1
», Fov=2,..-}
If copy (month, temp * 2 + 1,
»3) = mois lit
then begin
mois := temp:
fini := true:
end { if then }
else Lemp := temp + 1;
efface; { Efface jusqu'au prochain '-
2)
¢ - annee - )
if (length (strg date) > 0) and test_e
wntier (99)
then annee :~ tomp;
end { with };
until test;
{ Si la date est differente on la met a four sur d
»isque et momoire }
1f not (date = directory(0}.boot_date) then fixe_da
wte (true)
end: { DateseT }
La méthode
Vous n‘avez pas la disquette
d'accompagnement : il vous faut
saisir et compiler le listing de
fagon classique.
Vous avez la disquette
d'accompagnementt :
Il faut initialiser une disquette
Pascal a l'aide du
‘FORMATER’. Booter alors sur
la disquette Pom's et lancer le
programme de transfert
‘BASIC-PASCAL'’. Transférer
alors le fichier STARTUP .TEXT
en suivant les indications
fournies par ledit programme. Il
convient maintenant de compiler
et d'exécuter comme
habituellement.
begin { STARTUP }
fixe_date (false):
fixe vol;
repeat
ok := true;
page (output);
write ("Startup (DM): Q)uit, D)ate, F)ilor, E)dit
wor, eXjecute ? (1.2) ')s
gotoxY (0,1);
writeln ('Le PREFIXE courant est :
write ("La DATE actuelle est
with date do
write (jour,dash,copy (month,mois*3+1,3),das
w»h,annee);
",prefix);
Ve
QotoxY (61,0);
repeat
read (keyboard, ch);
{ Tout en majuscules }
if ord (ch) > 96 then ch := chr ford (ch) - 32)
until ch in ['D','E*, 'F
case ch of
'D' : dateset;
‘EB : fichier
ee
i= !*SYSTEM.EDITOR.'; ( Le point e
wst ohligatotre pour les }
fichier := '*SYSTEM.FILER.'; { fichiers 5
. sans suffixe .CODF }
'X* : catalog (fichier);{ Positionne ok si aucun
» fichier }
tpt:
"OQ" = begin
page (output);
exit (program);
end;
end; { case }
until (ch in ['E', 'F', 'X*]) and ok;
page (output); .
setchain (fichier); { OK let's go }
end. { STARTUP }
{ ON QUITTE }
NB. : Les caractéres qui suivent le signe » sont en fait la suite de la ligne
précédento.
Pom's n° 26
q
Carte
J-F Rabasse
Les transmissions de données en
série (norme RS23ZC) sont
fréquemment utilisées sur
micro-ordinateurs. L'application
la plus simple est la gestion d'une
imprimante série. La transmission
série devient indispensable pour
échanger des données entre deux
calculateurs, ou bien en local par
liaison filaire, lorsque les deux
machines ont des syst@mes
d'exploitation et formats de
disquettes différents, ou bien en
distant par liaison téléphonique.
Cet article, en deux parties
autonomes, se propose de
montrer la gestion d'une Carte
Super Série, sur un Apple en
environnement CP/M.
Pourquoi CP/M ?
Tout d'abord parce que c'est un
peu le “parent pauvre” sur Apple,
et de ce fait les réalisations de
transmissions séries sont rares,
alors qu'il existe une
impressionnante bibliothéque de
logiciels de communication sous
DOS 3.3. D'autre part, les
transferts de données entre un
Apple et une autre machine se
feront vraisemblablement sous
CP/M qui est un SED trés
répendu. Si vous devez tranférer
vers une machine utilisant DOS
3.3 ou ProDOS, il y a fort a
paricr qu'un simple échange de
disquette suffira !
Pourquoi la carte SSC ?
C'est d'abord la carte série la plus
courante sur Apple, et d'autre
part c'est une carte trés
performante au niveau électro-
nique alors que le logiciel de
gestion existant sur la ROM
inteme présente quelques défauts
qui le rendent quasi-inutilisable
dans beaucoup d'applications. II
est alors indispensable de revoir
complétement la gestion de cette
carte.
La transmission
série
Cette transmission nécessite une
conversion des données, données
existantes sous forme d'octets en
une série de bits émis 4 une
vitesse précise. Cette conversion,
au départ comme 4 I'arrivée, est
effectuée par un circuit spécialisé
nommé UART ou ACIA. En
émission, il suffira de charger
avec la donnée le registre de
transmission de l'ACIA, en
réception de lire l'octet regu dans
le registre de réception.
L'ACIA se charge d'autre part de
transférer la donnée selon un
format bien précis, nombre de
bits de données, nombre de bits
d'arrét, parité, vitesse.
Il suffit donc en théorie d'un seul
fil (plus la masse électrique) entre
les deux machines. En pratique,
pour fonctionner correctement,
une liaison série doit en plus
assurer un certain nombre de
contr6les afin d'éviter la perte de
données au cours du transfert.
Ces contréles, qui constituent le
"protocole de liaison" (Hand-
Shake des anglo-saxons), sont
assurés par voie électrique (Hard-
ware Handshake) en utilisant les
signaux de contréle de I'interface
série, ou par voie purement
logicielle en utilisant un pro-
gramme de transmission res-
ead un protocole particulier.
protocoles existants sont trés
nombreux. Il en existe de simples
(ENQ/ACK ou D1/D3 appelé
aussi XON/ XOFF), de
moyennement évolués comme
XMODEM ou de trés élaborés
(KERMIT).
Nous allons détailler dans cette
premiére partie un exemple de
protocole Hardware, interfacé
avec le BIOS CP/M, et, dans la
deuxiéme un protocole logiciel :
XMODEM.
SSC & CP/¥
u
Signaux RS232
Sur le connecteur DB25 d'une
interface série, on trouve les
signaux suivants :
TXD (Broche 2) Sortie
émission de données.
RXD (Broche 3) Entrée
réception de données.
RTS (Broche 4) Sortie
demande pour émettre.
CTS (Broche 5) Entrée
autorisation d’émettre.
DSR (Broche 6) Entrée
interlocuteur prét.
Masse (broche 7).
DCD (Broche 8) Entrée
détection de porteuse
(avec Modem).
DIR (Broche 20) Sortie prét.
Les brochages de ces signaux
sont en principe standardisés.
Malheureusement, un certain
nombre de constructeurs
appliquent les normes avec
poésic...
Remarque : pour les lecteurs intéressés,
Tinterface série CE130T des ordinateurs
de poche Sharp série PC ne
fonctionnera correctement avec le
programme présenté ici qu’en utilisant
la Broche 11 comme signal DTR au
lieu de la Broche 20. Il faudra donc
prévoir un cable de liaison spécial
pendant la durée de la garantie de votre
interface CE130T puis, ensuite, ouvrir
Ja boite et strapper directement sur lc
circuit imprimé, aprés coupure de la
piste DTR. Cette opération est uts
simple A réaliser.
Liaison avec un Modem
Tout ces signaux sont utilisés lors
d'une liaison avec un Modem, il
oe d'utiliser un cable “fil pour
32
Pom's n° 26
Liaison locale avec un
autre calculateur
En liaison directe locale de deux
machines, on peut simplifier et
supprimer le Modem. Il est alors
indispensable d'utiliser un cable
particulier appelé “Eliminateur de
Modem” afin de croiser deux a
deux, signaux de données et
signaux de contréle.
La carte SSC posséde un
“Jumper Block” a deux positions
(Terminal et Modem). En théorie,
ceci devrait permettre une liaison
locale avec un cable Modem
normal ; en pratique, le cablage
adopté par Apple et le logiciel de
la ROM SSC rendent cette option
inutilisable, car sans contrdle de
transmission,
Tl faudra donc laisser ce Jumper
Block en position Modem, et
réaliser un cable éliminateur.
CAble éliminateur
Il est simple 4 réaliser, et ne
consiste qu'a “croiser deux
lignes” :
Lignes de données : TXD d'une
machine vers RXD de l'autre (et
inversement).
Lignes de contréle ; DTR d'une
machine vers CTS de l'autre (et
inversement).
Gestion de la SSC
La carte SSC est gérée et
configurée a l'aide d'un certain
nombre de registres. Ces
registres sont a des adresses qui
dépendent du slot dans lequel
cette carte est située. En principe,
sous CP/M comme sous Pascal,
cette carte est en Slot 2. Ces
registres permettent de
positionner les paramétres de la
transmission (vitesse, nombre de
bits, parité), de lire ou écrire les
données et de lire ou positionner
les signaux de contréles. Pour
plus de détails, se reporter au
manuel de la carte SSC.
La carte comporte de plus des
“switches” qui permettent de
mémoriser une configuration par
défaut et que tout programme de
transmission peut aller lire.
Emission
Pour émettre, il faut s'assurer que
le registre de transmission est
vide (afin d'éviter d'écraser
Yoctet précédemment émis, ceci
surtout a basse vitesse), il faut
ensuite s'assurer que le récepteur
est bien prét a recevoir la donnée,
en lisant le signal CTS, et enfin
écrire l'octet 4 envoyer dans le
tegistre d'émission.
Réception
Pour recevoir, il faut indiquer a
I'émetteur que l'on est prét en
activant le signal DTR, attendre
que le registre de réception soit
plein, puis lire l'octet. Il est
ensuite indispensable, avant de
retourner au programme appelant,
de désactiver le signal DTR, afin
d'éviter que I'émetteur n'envoie
un octet pendant que l'on aura le
dos tourné. C'est cette précaution
qu'Apple semble avoir oubliée
dans son logiciel de gestion SSC,
et qui seule vous permettra, par
exemple, de renvoyer un fichier
arrivant d'une autre machine,
vers une imprimante ou tout
périphérique lent, ou de stocker
sur disque en temps réel un
fichier.
Pour plus de sécurité, il est méme
préférable en lecture de n'activer
DTR qu'aprés avoir vérifié
qu'aucune donnée n’était
présente, afin de solliciter
l'émetteur.
Programme
SETSSC
Ce programme, sous la forme
d'une commande CP/M
(SETSSC .COM) a une double
fonction. Il permet tout d'abord
diinitialiser la carte SSC avec des
paramétres en clair. En effet le
codage de la liaison en vitesse,
parité, etc, n'est pas toujours trés
parlant si l'on n’a pas le manuel
de la SSC sous les yeux. Avec
SETSSC on_ spécifiera
directement les paramétres
désirés.
Ensuite, ce programme implante
dans le BIOS CP/M deux petites
routines d'émission et de
réception d'un octet, selon le
protocole détaillé plus haut. Ces
deux routines sont rendues
accessibles 4 CP/M 8 travers les
unités logiques UR2: et UP2:
qui correspondent en standard
la lecture et I'écriture d'un
perforateur de ruban, périphé-
rique qui commence 8 se raréfier,
surtout chez I'amateur !
Il n'y a besoin de rien d'autre,
maintenant vous ferez vos
transferts en utilisant ce bon
vieux PIP qui est en fait un
logiciel de transfert trés pratique
grace 4 ses nombreuses options
(tabulations, formatage, numéro-
tations etc.)
Utilisation
Votre carte SSC peut étre
configurée par défaut (switches)
selon vos paramétres de
transmission les plus fréquents.
L'appel du programme se fait au
niveau ‘commande’ de CP/M
par:
SETSSC <Parl>,<Par2>,..
Les paramétres sont optionnels et
sont au nombre de quatre au
maximum, séparés par des
virgules (un espace entre
SETSSC et les paramétres est
nécessaire). Chaque
Showing the first 100000 of 255113 characters.