Text content (OCR)
tremplin
BIMESTRIEL
Le numéro : 33 F
Abonnement d'un an : 190 F
(6 numéros)
Tous nos prix sont indiqués TTC.
EDITIONS J!
Direction-Rédaction :
Editions JIBENA
Guy-HACHETTE
La Petite Motte — Senillé
86100 CHATELLERAULT.
Téléphone :
49-93-66-66
PUBLICITE :
Raymond JULLIEN
(1) 45.75.41.81
Commission paritaire :
Les revues qui choisissent d'étre
réellement au service du Lecteur,
en ne l'obligeant pas & gloner,
dans plusieurs magazines, les
renseignements concernant sa
machine, ne bénéficient pas du
‘numéro de Commission Paritaire,
et pos davantage des tarifs pos-
toux réduits.
um
TREMPLIN MICRO — Bimestriel —
Cest une publication des Editions
JIBENA, 4, rue de la Cour-des-
Noves, 75020 PARIS — S.A. au
NA
capital de 3600000 F — Imprimé
por CITE-PRESS/PARIS — Dépat
légal & la date de parution — Ins-
ription @ la Commission Paritaire
des Publications et Agences de
Presse : en cours — Directeur de
la Publication: Guy-Clément
COGNE — Diffusion N.M.P.P.
Avec la collaboration de :
Argos, Nicole Bréaud-Pouliquen, Robert Cazenave, Maurice
Chavelli, Marcel Cottini, Francois Gallet, Madeleine Hodé,
Yvan Koenig, Nestor, Pierre Privat et Clément Renard,
SOMMAIRE
A BATONS ROMPUS 2
TRANSITION (de HGR & HGR2) . 3
DAMIER HGR (en marge de TRANSITION) . 8
VISUALISER UNE POLICE GRAPHIQUE .. 13
IMPRIMER UN GRAPHIQUE .. . 18
FICHIER DIRECT Ecrire, remplacer, rechercher .............. 7
RECHERCHE D'UNE VARIABLE DANS UNE AUTRE ................0 0000000 20
LE SYSTEME D’EXPLOITATION PRODOS (M. COTTINI)
A étudier pour mieux utiliser ce must Apple .............0.ccecceeeeseee 21
ASSIMIL et L'ESPAGNOL 30
BRICO (pratique pour des tas de calculs) . 31
AUX.DRAW (une table de formes en mémoire auxil 41
CADRES 40/80 COLONNES (toujours eux !) ........... woe AQ
QUESTIONNAIRE (didactique simple, mais intéressant) ................... 51
LA SOURIS ET L'ASSEMBLEUR (Francois GALLET) 55
DESASSEMBLAGE (initiati 59
EFFETS GRAPHIQUES .. 61
TURBO PASCAL DE BORLAND . 63
INITIATION —osseRVATION (Grophique) ..........--66.-.000.. 65
MAU BASIC constits AUX NEOPHYTES «2.00.0. .0.cccccoee, n
LES LIVRES ooo cece ecccccceesssereneaeeees 16,40,48,58,62,74,76
YVAN KOENIG REPOND A NOS LECTEURS «0.00.0... .ccceeeeeeeevevee 57,72
AAPPLEIIGS — ADRESSAGE DYNAMIQUEDUGS.................. 67
suuuuuauanauessesensusesssnssnseeseunueussenssususesesnunennoonsnssasssessnensusssnecezseresessessennes
TREMPLIN MICRO
A BATONS
ROMPUS
Que de déceptions chez les premiers
possesseurs d'un Apple //GS ! Je ne
compte plus les $.0.5. téléphoniques
et les lettres plus ou moins virulentes,
soulignant ave larticle paru dans le
numéro 11 de Tremplin Micro n‘a pas
été étranger 4 Ia décision d'un achat
que déja l'on regrette...
Heureusement, du moins pour l'avenir
de la machine, les réactions positives
se révélent nettement plus nombreu-
ses que les premiéres, mais émanent
généralement d'utilisateurs considérés
comme particuligrement compétents :
programmeurs, membres de clubs de
micro-informatique, applemaniaques
inconditionnels.
Reste que le mal existe. APPLE aurait
certainement pu le prévenir. Le guérir
se révélera plus difficile et laissera en
tout cas des séquelles.
Premier probléme : un certain nombre
de personnes, généralement mal infor-
mées, ont payé leur Apple //GS au
prix fort alors que tous les membres du
Club Apple (adhésion gratuite) pou-
vaient bénéficier, pendant la plus
grande partie du mois de décembre,
dune cemise de trente pour cent (non
seulement sur le GS, mais sur la plu-
part des produits de la marque, Apple
Mic, excepté). Une condition : étre
membre du Club au 1*" décembre 1986.
Une autre (exigée par des revendeurs
pointilleux) : avoir passé la commande
pendant lo période effectivement con-
cernée par la promotion... et non
avant. Tant pis pour les imbéciles qui,
accordant toute leur confiance @ lo
marque avaient commandé leur GS
immédiatement aprés l’annonce de sa
commercialisation | Personnellement,
joi conseillé & tous mes correspon-
dants de ne point céder aux pressions
de leur concessionaire et d’exiger
LEUR remise de trente pour cent quelle
que soit lc date d'enregistrement de la
commande. Il y a eu des cris et des
grincements de dents et je connais
actuellement des mécontents jurant,
mais un peu tard, qu'on ne les prendra
jamais plus 4 ce petit jeu stupide.
Un Apple /ICSs,
mais pour quoi faire ?
Je vais étre dur, mais franc, comme
toujours : si vous avez acheté ou com-
mandé un GS sans savoir pourquoi, ne
venez pas vous plaindre de la pauvreté
de sa documentation ou de l'absence
de logiciels utilisant toutes les ressour-
ces du 65C816. Bien entendu, si vous
avez décidé cet achat simplement pour
le plaisir de disposer, chez vous, du
dernier produit a l'enseigne de la
POMME, libre & vous. Je préciserai
méme que je comprends partaitement
cette démarche. Mais alors, prenez
patience et attendez de connaitre
votre nouveau jovet avant de lui
découvrir tous les défauts possibles.
Des qualités, il en posséde votre Apple
IGS, mais elles se dissimulent pres-
que toutes derriére une compatibilité
qui pourrait bien étre considérée, plus
tard, comme pénalisante.
Les logiciels viendront en leur temps,
mais les auteurs ne se bousculent pas
au portillon. Je vous promets que
Tremplin Micro leur ouvrira toutes
grandes ses colonnes pour parler de
leurs réalisations. || est certain que
\'Apple 1IGS permettra aux program-
meurs d'aller plus loin, mais seulement
dans la mesure ou ils accepteront de
passer par des langages plus évolués
que le Basic Applesoft : le C, par exem-
ple, et I'Assembleur. Les OUTILS mis 4
leur disposition par le GS autorisent
des logiciels dignes de ceux de Mac.
Littérature... pauvre
Mais pour preston une machine
aussi complexe que |'Apple //GS, il
convient de posséder de bons manuels
de références, avec si possible de
nombreux exemples. Apple propose
bien son INSIDE APPLE IIGS (plus de
3000 pages de documentation et 8 dis-
quettes)*, mais ne comptez pas sur ce
monument pour vous fournir des
EXEMPLES. Or, je le sais, c'est ce
qu'attendent tous nos correspondants.
Je rappelle & ce propos que deux
ouvrages doivent paraitre au PSI
(Assembleur de |'Apple IIGS et LA
BOITE A OUTILS DE L’APPLE IIGS)...
mais j‘ignore 4 quelle date. J'admire
dailleurs les auteurs qui se sont atte-
lés & une telle besogne : ce n'est pas
gagné d’avance !
Voeux pieux
Alors, le GS ? Personnellement, je sou-
haite qu'il ne connaisse pas le sort de
‘Apple Ji! (le meilleur, d'aprés ceux qui
en sont encore les heureux utilisateurs),
mais plutét celui de I'Apple //, son illustre
ancétre. J’aurais aimé que Microsoft (ce
sont des gens qui ignorent totalement
Tremplin Micro... sans doute trop petit
pour les intéresser) et Apple se mettent
d'accord pour nous concocter, sur le GS,
un vrai Basic, ressemblant par exemple 4
celui du Mac. Le langage C me séduit,
mais le temps de compilation est long...
trop long. J‘aimerais aussi avoir ProDOS
16 en ROM (je ne suis pas opposé 4 sa
présence sur une carte) cor sa durée de
chargement est également interminable.
Quant au reste — et notamment les pro-
grammes —, rassurez-vous : ils arrivent,
mais accordez-nous le temps de com-
prendre la machine et celui de I'alimenter
en instructions comprises par le 65€816 !
GH.
* VIF — 5 rue de Bossono — 75116 PARIS (2000 F TTC).
2
GUY-HACHETTE
DOS 3.3 ProDOS
TRANSITION ...0001cx:
[c| ERTAINS jeux utilisent, dans leur présentation graphique, un trés élégant scrolling
Maurice CHAVELLI
des pages graphiques. Je me suis demandé s'il était facile 4 réaliser. Dans cet arti-
cle, je vous propose deux versions :
© Lapremiére est tres économe en espace mémoire, mais n'est pas trés rapide.
* Ladeuxiéme se révéle beaucoup plus gourmande, mais elle est deux fois plus rapide que la précédente.
Bien sdr, il n'est pas interdit de concevoir une formule encore plus performante ! Mais je
vous promets de longues réflexions sur l'adressage des pages graphiques de votre Apple
chéri. SCROLL.DEMO vous présente les deux versions avec des écrans graphiques sommai-
res. Libre @ vous de remplacer ceux-ci par vos chefs-d’ceuvre. Il est facile de modifier les
programmes pour obtenir un défilement continu ou d'utiliser N pages. A vos claviers !
SCROLL.DEMO
1 FOR C = 896 TO 916: READ A%: POKE C,A%: NEXT 4047
2 POKE 232,128: POKE 233,3 1E81
3 DATA 1,4,4,0,54,54,54,110,34,36,36,108,54,54,
54,118,36,36,36,36,8 78FA
4 SPEED= 108 193A
FORME 5S TEXT : HOME : POKE - 16197,8 8E7A
6 VTAB 8: HTAB 3: PRINT "Ce programme est une d
Les lignes 1 & 3 établis-
sent une table de for-
me(s) sommaire (seule-
émonstration": PRINT : PRINT : HTAB 7: PRINT
“des routines de transition": PRINT : PRINT :
£1) a ; HTAB 9: PRINT “de pages graphiques HGR." FFB2
dee ? PRINT : PRINT : PRINT : PRINT "Nous allons co
Si vous avez la chance de mmencer par créer 2 écrans" FOEF
coneler ta dean coe @ FOR C = 1 TO 500: NEXT 8207
leur, voustabilerdres'des 9 HGR2 : HCOLOR= 3: ROT= 8: SCALE= 1 9495
ion dé Couleur diffé- 19 FOR X = 6 TO 272 STEP 16: FOR Y = @ TO 184 ST
rente par le décalage EP 14 6501
horizontal (1 point) de la 11 DRAW 1 AT X,Y: NEXT Y,X 3408
forme. 12 FOR X = 8 TO 264 STEP 16: FOR Y = 7 TO 177 ST
Nous vous donnons, plus EP 14 i713
loin, un moyen de tracer 13 DRAW 1 AT X,Y: NEXT Y,X 3408
un peu plus rapidement 14 HGR ; POKE - 16302,0 E1A5
un écran damier, mais ce 15 FOR X = 1 TO 273 STEP 16: FOR Y = @ TO 184 ST
n’était pas le propos de EP 14 8A03
Maurice Chavelli. 16 DRAW 1 AT X,¥: NEXT Y,X 34068
TREMPLIN MICRO 3
TRANSITION
VOS PROGRAMMES
Page 3 SCROLL.DEMO
Page 4 SCROLLI.S
Page 5 SCROLL2.S
Les débutants pourront
passer directement a la
page 7.
SCROLL.DEMO (suite)
FOR X = 9 TO 265 STEP 16: FOR Y = 7 TO 177 ST
EP 14
DRAW 1 AT X,Y: NEXT Y,X
FOR C = 1 TO 108: NEXT : HOME
TEXT : VTAB 15: HTAB 8: PRINT “Voici la vers
on n® 1...": FOR C = 1 TO 1600: NEXT
PRINT CHRS (4)"BLOADSCROLL1.c"
POKE 49232,8: POKE 49239,8: POKE 49234,@
CALL 768: HOME
TEXT : VTAB 15: HTAB 8: PRINT "Voici la versi
on n* 2..."
POKE 238,32
FOR X = 1 TO 273 STEP 16: FOR Y = 8 TO 184 ST
EP 14
DRAW 1 AT X,Y: NEXT Y,X
FOR X = 9 TO 265 STEP 16: FOR Y = 7 TO 177 ST
EP 14
DRAW 1 AT X,Y: NEXT Y,X
PRINT CHRS (4)"BLOADSCROLL2.C"
POKE 49232,8: POKE 49239,@: POKE 49234,8
CALL 768
FOR C = 1 TO 1008: NEXT : HOME : TEXT : SPEED
= 255
PROGRAMME
SOURCE
Assemblage :
ProCODE
WONAUEWN
SCROLL1.S
HEE EERE REE
* Transition V1 #
RHEE AAR E EEE EES
* Cette version effectue la transition en 26s
PTR = $8 } pointeur de ligne
HBASL = $26
HBASH = $27
HPAG = $ES
HPOSN = $F417
ORG $308
* Transfert partie de la routine HPOSN
* pour améliorer la vitesse d’exécution
BCL
LDX £968 3 installe un RTS 4 la fin
STX $378
LDX £32 3 c’est parti pour 33 octe
LDA HPOSN,X
STA HPOS ,X
DEX
BPL BCL
ts
GUY-HACHETTE
if 25
t 26 4 * Début du programme
5 27
f 0318: A2 68 28 LOX £0 ; premiére ligne
0312: A? 28 29° ~=BCLX LDA £%28 3 sélectionne la page 1
r 6314: 85 ES 38 STA HPAG
$ 0316: 80 28 63 «31 STA MEM+2 j adresse de la ligne @
i 0319: AP 68 32 LDA £6
@31B: 8D 2A 83 «8633 STA MEM+1
4 Q31E: Ag 81 34 LDA £1 ; premiére ligne
i @320: 85 68 35 STA PTR ; initialise le pointeur
$ @322: 26.57 63 36 DEBUT JSR HPOS j calcul adresse de Ja ligne
i 6325: Ag 27 37 LDY £39 ; c’est parti pour 4@ octets
iq 0327: Bi 26 38 BCLY! LDA <¢HBASL),Y 3; transfert d’un octet
t 0329: 99 88 48 39 MEM STA $8,Y
t 632C: a8 48 DEY ; un de moins
i 632D: 16 FB 41 BPL BCLY1 3 le dernier?
t @32F: AS 26 42 LOA HBASL j sauvegarde des coordonnées
t 6331: 8D 2A a3 43 STA MEM#+1
A 0334: AS 27 44 LDA HBASH
5 0336: 8D 28 63 «45 STA MEM+2
t 0339: E46 68 46 INC PTR j une ligne de plus
t 633B: AS 68 47 LDA PTR
t 33D: CP Ce 48 CMP £192 3 la dernié@re?
i @33F: D@ E1 49 BNE DEBUT } mon
L 8341: 66 Eé Se ASL HPAG 3 sélectionne la page 2
} 0343: 6A Si TXA
t 0344; 2857 83 52 JSR HPOS j transfert de la ligne X...
$ 0347: AB 27 53 LDY £39
r 0349: BI 26 54 BCLY2 LDA ‘HBASL),Y
t @34B: 99 D8 3F 55 STA $3FD0,Y
t 634E: 88 56 DEY
t O34F: 16 FB 5? BPL BCLY2
it @351: E8 58 INX j une ligne de plus
i 6352: E@ Ce 59 CPX £192 3 la derniére?
t 0354: De BC 68 BNE BCLX } non
] 8356: 48 61 RTS j oui => retour BASIC
62 HPOS OFB
t SCROLL2.S
; 1 RRM HHH EHH ER
f 2 * Transition V2 *
4 3 HERRERA E REE AER ERE
4
t ProCODE - * Cette version effectue la transition en 13s
} 7 PTR = $8 3 pointeur de ligne
t 8 HBASL = $26
9 HBASH = $27
f 18 HPAG = SES
t 11 HPOSN = F417
t 12
; (suite page 6)
{ TREMPLIN MICRO 5
1
Bol
6308:
6382:
0384:
8386:
8389:
@38B:
@36E:
316:
0313:
8315:
8318:
@31A:
@31C:
@31E:
6321:
324:
0326:
8328:
632B:
@32E:
0338:
8332:
8334:
0336:
8338:
833A:
33D:
8348:
8341:
6343:
8345:
0347;
6349:
634B:
Q34E:
8358:
8353:
8355:
8357:
835A:
@35B:
@35D:
@35F:
8361:
8363:
8365:
06
86
Ag
85
28
as
20
Aa
Bi
99
88
16
£6
AS
cy
oe
68
43
83
83
3F
* Création sous-programme en $6000
BCL
BCLX
SCROLL2.S (suite)
ORG 308
LDA £$26 ;
STA HPAG
LDA £0 ;
STA INDi+1
LDA £968
STA IND1+2
LDA £$A2 ;
JSR INDI
LDA £$27
JSR INDI
Loa £1 ;
STA PTR
LDA £$BD ;
JSR INDI
JSR IND
DEC PTR
LDA £$9D ;
JSR INDI
JSR IND
INC PTR
INC PTR
LDA PTR
CMP £192
BNE BCL
LOX €@
LDA FIN,X ;
JSR INDI
CPX £7
BNE BCLX
* Début du programme
DEPART
BCLY
ASL HPAG
LDA £8
STA PTR
JSR $6008
LDA PTR
JSR HPOSN ;
LDY £39
LDA (HBASL) ,Y
STA $3FD8,Y
DEY
BPL BCLY
INC PTR ;
LDA PTR
CMP £192 ;
BNE DEPART ;
RTS
sélectionne la page 1
pointe en $6068
installe un LDX £%27
ligne 1
installe un LDA
installe un STA
la derniére?
non
installe la fin
page 2
ligne @
monte d’un cran
transfert ligne 191
une ligne de plus
la derniére?
non
GUY-HACHETTE
67 * Routine pour la création
68
0366: AS 48 69 IND LDA PTR
0368: 28 17 F4 76 JSR HPOSN 3 calcul ligne A
@36B: AS 26 re LDA HBASL } Sauvegarde...
@36D: 28 72 63 72 JSR INDI
0378: AS 27 73 LDA HBASH
0372: 8D 68 68 74 ~INDI STA $6888
@375: EE 73 63 75 INC INDI+1
0378: D8 83 76 BNE IND2
O37: EE 74.83 77 INC IND1+#2 ig
37D: 48 78 IND2 RTS ~~
rea
@37E: CA 88 FIN HEX CA 3 DEX
O37F: 38 81 HEX 30 ; BMI
8380: 89 82 HEX 63
6381: 40 83 HEX 4C 3 UMP $6682
8382: 62 84 HEX 62
8383: 46 85 HEX 68
8384: 48 86 HEX 68 3 RTS
SCROLL1 A Ecriture sur disquette : BSAVE SCROLLI.C,A$300,LS57
0308: A2 40 BE 78 83 A2 20 BD 17 F4 9D 57 3 CA 19 F? a750 Sile langage
8310: A2 88 AP 28 85 ES BD 2B 83 AP BB BD 2A 3 AP O1 BESE machine et
0320: 85 68 26 57 63 AB 27 BI 26 99 BB BG 88 18 FB AS E973 l'assembleur ne
8338: 26 8D 24 63 AS 27 8D 2B 43 ES BB AS BB C9 CB DA 8958 vous inspirent
0348: E1 86 Eé 8A 20 57 83 AB 27 B1 26 99 DB 3F 88 18 Azar pas, contentez-
9350: F8 E8 E@ CA DB BC 60 8Céc vous de recopier
ces routines ala
suite d'un
SCROLL2.¢€ BSAVE SCROLL2.C,A$300,L$85 CALL-151.
Les caractéres
0308: AY 28 85 ES AY BG ED 73 83 AP 48 BD 74.83 AP AZ 9F38 HEXA indiqués
9310: 28 72 83 AY 27 28 72 83 AP G1 85 68 AP BD 20 72 3429 en bout de ligne
0320: 83 26 66 3 Cé G8 AP 9D 28 72 03 280 66 83 ES OB «IAC sont destinés au
6338: Eé @8 AS 68 C9 CO DB E4 A2 OB BD 7E 43 26 72 83 FCaD contréle de la
0340; E8 EG 67 D@ F5 86 ES AD O@ 85 88 20 6 69 AS BB FRED saisie (contréle
9358: 26 17 F4 AB 27 BI 26 99 DG 3F 88 18 F8 ES BB AS 1D94 facile avec votre
0368: 88 C9 CO DB ES 48 AS G8 26 17 F4 AS 26 20 72 03 Ea disquette
8370: AS 27 8D 68 468 EE 73 03 DG 63 EE 74 63 68 CA 38S 7AF SIGNATURE).
8388: 63 4C 42 48 40 agit
DAMIER
9308: AZ 88 86 09 86 18 AI BB 85 B& AP BB 85 7 AP 11 GBFF2 voir page 8
8316: 85 88 AS 18 4A 98 86 AD BB B5 B46 C46 BB AS BS AG cand
€328: 87 AS 89 28 11 F4 AG 63 A2 4B 20 SD FSA 18 18 7a
6338: 65 86 85 84 98 82 E46 87 C4 BB 18 E1 AS 89 49 88 45a
8348: 85 89 ES 18 AS 18 C9 18 98 BC 48 36 36 36 6E 24 GEA BSAVE DAMIER,
@358: 24 24 6C 36 36 36 SE 24 24 24 24 08 B154 A$300,L$5C
TREMPLIN MICRO 7
, ae. ee
NESTOR
DAMIER HGR
[L A FORME ? un simple carré. Le programme : aussi clair que possible (le probleme
pourrait étre traité autrement), pour étre compris par des utilisateurs peu habitués
au langage machine.
L'adresse horizontale du point initial de chaque carré est sur deux octets (elle est stockée en
$6-7). ‘adresse verticale (un seul octet) est mémorisée en $9. On utilise par ailleurs deux
pointeurs : le nombre de carrés par ligne, décrémenté jusqu’d @ inclus (il est stocké en $8) et
le nombre de lignes (dans la case mémoire $18). Telle qu'elle se présente, la routine fonc-
tionne aussi bien avec le 6502 qu‘avec le 65C02... ou le 65€816 de l'Apple IIGS. Vous remar-
querez qu'elle n'utilise pas la pile et ne cherche pas non plus 4 tirer parti des registres.
La couleur du damier est modifiée par la ligne Basic 11, en décalant toutes les adresses
horizontales d'un point (POKE 775,0 et POKE 792,8 ou bien POKE 775,1 et POKE 792,9).
Vous trouverez page 10 le listage de DAMIER] : méme longueur, mais l’affichage des carrés
se fait par colonne au lieu de s'effectuer par ligne.
XDRAW (OU DRAW): En Basic, pour utiliser XDRAW ou DRAW, il est nécessaire d’indiquer le
~~ numéro de la forme dans la table, et aussi de l’adresse de cette table 4
l'APPLE (pointeurs $E8-E9). En langage machine, il suffit de placer dans X la partie basse de l’adresse
du premier octet de la forme et dans Y sa partie haute. Les pointeurs $E8 et E9 ne sont pas utilisés.
Par contre, avant de tracer une forme, il est indispensable de positionner le curseur ($F411).
DAM.DEMO
1 PRINT CHR$ (21): HGR : HGR2 : TEXT : HOME 727E
3 PRINT CHR$ (4)"BLOAD DAMIER" D49E
5 HCOLOR= 3: ROT= @: SCALE= 1 D7cB
7 POKE 49232,0: POKE 49234,@: POKE 49237,@: POK
E 49239,6 8728
9 POKE 230,64: CALL 768: REM TRACE HGR2 664F
11 POKE 775, ABS ¢ PEEK (775) - 1): POKE 792,8 +
PEEK (775) 6c14
Pou SuIBRIE ‘Ga BaRler 13 POKE 49232,@: POKE 49239,8: POKE 49236,0: POK
plus compact (comme E 238,32 31E3
celui tracé par le pro- 15 CALL 768: REM TRACE HGR 8331
gramme de Maurice CHA- 17 IF PEEK (49152) < 128 THEN 7 c24c
VELLI, page 3), il suffit de 19 POKE 49168,8: PRINT : TEXT osp8
majorer le nombre de 21 VTAB 23: PRINT "(MENU DE DISQUETTEctG ";: GE
lignes : ($346 : C9 1B) et T R$: PRINT : HOME A4DB
de n‘ajouter que 7 pts par 23 IF R@ = "M" THEN PRINT CHR (4)"RUN MENU,D1
ligne : ($33E : 6907). " 259D
sunesenaseussosseeenscce
8 GUY-HACHETTE
300:
302:
304 :
306 :
308 :
30A:
30C:
310:
312:
314:
315:
317:
319:
3IB:
31D:
SIF:
321:
323 :
326 :
328 :
32A :
32D:
32F :
330 :
332:
334 :
336 :
338 :
33A :
33C :
33E :
340:
342:
344:
346 :
348 :
34A:
34B:
354:
A2
86
86
Ag
85
Ag
85
Ag
85
AS
4A
Ag
85
cé
A6
A4
AS
AG
A2
Ag
18
65
85
£6
cé
10
AS
69
85
£6
AS
co
36
36
og
09
18
Go
06
oo
o7
W
08
18
a8
06
08
07
09
11 F4
03
4B
5D Fé
10
06
06
07
os
EI
a9
as
18
18
18
BC
36 36 6E
36 6E 24
*
Hor
Pthor
Ver
Ptver
Hposn
XDraw
*
*
BCL3
8 SEU5 TESS HG0e Vous wn-@
NNUNNN
ALOn=
26 BCLI
£8S2S3sy
35
36
37
38
39 =BCL2
40
4)
42
43
44
45
46
47
48
49
50 *
51
24 24 24 6C
24 24 24 OG
52
EQU
EQU
EQU
EQU
EQU
EQU
ORG
LDX
STX
STX
LDA
STA
LDA
STA
LDA
STA
LDA
LSR
BCC
LDA
STA
DEC
LDX
LDY
LDA
JSR
LDY
LDX
JSR
LDA
cLC
ADC
STA
BCC
INC
DEC
BPL
LDA
ADC
STA
INC
LDA
CMP
BCC
RTS
TABLE DE FORME(S) : UN CARRE
36
HEX
$6
$8
$9
$18
$F411
$F65D
$300
£$00
Ver
Ptver
£$00
Hor
£$00
Hor+1
£$11
Pthor
$18
BCLI
£$08
Hor
Pthor
Hor
Hor+1
Ver
Hposn
£$03
£$4B
XDraw
£$10
Hor
Hor
BCL2
Hor+1
Pthor
BCLI
Ver
£$08
Ver
Ptver
Ptver
£$18
BCL3
* [DPAIMIIERR (ASSEMBLAGE PROCODE)
; Position horizontale de la forme.
; Nombre de formes par ligne.
Position verticale de la forme.
Nombre de rangées.
; Positionne le curseur.
; Trace la forme (X,Y).
; Initialisation.
Nombre de formes horizontales.
; Nombre de lignes ?
; Pair ou impair ?
; Pair : on saute.
; Sinon 8 de plus horizontalement
; que l'on stocke
; et une forme de moins.
; Partie basse dans X.
Partie haute dans Y.
Position verticale dans A.
Et curseur en place.
Adresse du premier octet
de la forme dans Y,X.
XDraw fait le reste.
Plus 16 horizontalement.
Annulation de retenue.
Sans retenue : saut.
Partie haute éventuelle.
Une forme en moins.
; Suite jusqu'd @ inclus.
; Position verticale majorée
; de 8 (damier normal).
; Ne pas oublier le nombre
; de lignes.
; Est-il égal a 24 ?
Inférieur : encore une.
Sinon c'est terminé.
VOIR LES CODES:
DANS LE BAS DE
LA PAGE7. —
(voir DAMIER? page suivante)
3636366E2424246C3636366E2424242400
TREMPLIN MICRO
300 :
302 :
304 :
308 :
30A:
30C :
316 :
312:
317 :
319 :
34B :
354 :
36
36
6
1
2
3
4
5
6
7
8
9
16
oo u
06 12
oo 13
07 14
22 15
8 16
oo 17
09 18
a8 19
20
65 21
G8 22
09 23
24
18 25
06 26
07 27
09 28
11 Fa 29
03 30
4B 31
5D F6 32
a9 33
34
19 35
69 36
18 37
38
39
18 40
DF 4
06 42
43
os 44
06 45
02 46
07 47
68 48
C2 49
50
51
52
53
36 36 6E 24
36 6E 24 24
54
* DAMIER1
*
Hor
Pthor
Ver
Ptver
Hposn
XDraw
*
*
BCL2
BCLI
24 24 6C
24 24 0G
EQU
EQU
EQU
EQU
EQU
EQU
ORG
LDA
STA
LDA
STA
LDA
STA
LDX
STX
LDA
LSR
BCC
LDA
STA
INX
STX
LDX
LDY
LDA
JSR
LDY
LDX
JSR
LDA
CLC
ADC
STA
LDX
INX
INX
CPX
BCC
LDA
CLC
ADC
STA
BCC
INC
DEC
BPL
RTS
TABLE DE FORME(S) : UN CARRE
36
HEX 3636366E2424246C3636366E2424242400
Pour utiliser DAMIERI, modifiez la ligne 3 de DAM.DEMO, mais surtout sa ligne 11, qui devient : POKE 769, ABS(PEEK(769) — 1)
(ASSEMBLAGE PROCODE)
$6 ; Position horizontale de la forme.
$8 ; Nombre de formes par ligne.
$9 ; Position verticale de la forme.
$18 ; Nombre de rangées.
$F411 ; Positionne le curseur.
$F65D ; Trace la forme (X,Y).
$300
£$00 ; Initialisation.
Hor
£$00
Hor+1
£$22 ; Nombre de formes horizontales.
Pthor
£$00 ; Initialisation verticale.
Ver
Pthor ; Rangée ?
; Paire ou impaire ? ‘
BCLI ; Paire : on saute.
£$08 ; Sinon 8 de plus verticalement
Ver : que l'on stocke
; et plus une rangée.
Ptver ; Nombre de lignes stocké.
Hor ; Partie basse dans X.
Hor+1 ; Partie haute dans Y.
Ver ; Position verticale dans A.
Hposn ; Et curseur en place.
£$03 ; Adresse du premier octet
£$4B ; de la forme dans Y,X.
XDraw ; XDraw fait le reste.
Ver ; Position verticale majorée
£$10 ; de 16 (damier normal).
Ver
Ptver ; Nombre de lignes dans X.
; On écrit 1 ligne sur 2.
£$18 ; Est-il égal a 24 ?
BCL] ; Inférieur : encore une.
Hor ; On avance horizontalement.
; Annulation de la retenue.
£$08 ; Plus une forme.
Hor ; Ecriture partie basse.
S ; Pas de retenue : saut.
Hor+1 ; Sinon incrém. partie haute.
Pthor ; Une forme en moins
BCL2 ; Siplus grand ou égal @...
; Sinon c'est termine.
Pour sauver ce pi
me:
BSAVE DAMIER1,A$300,L92
10
GUY-HACHETTE
DAMIER RAPIDE 10 PRINT CHR$ (21): HGR2 : HCOLOR = 3: PRINT CHR$
(4)"BLOAD DAMRAP”
—_ SSS SSS
15 CALL 768: GOSUB 45
; 5 20 FOR! = 0 TO 127: POKE 800,1: CALL 768: GOSUB 45:
Essayez aussi cette routine. Vous consta- NEXT
terez qu'elle n'utilise pas XDRAW... mais
Vaffichage (simulé) d'un caractére gra- 25 HOME : TEXT
phique : le carré. Celui-ci est représenté 30 VTAB 22: PRINT "(M)ENU DE DISQUETTE ";: GOSUB 45
par une série de $7F. Dans la démo, on ——35_ IF R§ = "M" THEN PRINT CHRS (4)RUN MENU, D1"
remplace successivement la valeur $7F .
ar des valeurs allant de $0 4... $7F 40) HOMES END
rat la production de divers écrans. (On 45 CALL - 198: GET RS: PRINT:IF R$ <I> CHRS (27) THEN
peut interrompre le programme en pres- RETURN
sant ESCAPE). 50 POP: GOTO 25
0 + BAMRAP (AssemBLAGe PROCODE)
1 *
2 VT EQU $18 ; Pointeur ligne.
3 WNDWDTH EQU $21 ; Largeur fenétre.
4 WNDBTM EQU $23 : Bas de fenétre.
5 BASL EQU $28 ; Adresse basse colonne 1.
6 BAS2L EQU $2A : Pointeur ligne de destination.
7 HPAG EQU $E6 : Drapeau page HGR ($20/49).
8 VTAB EQU $FC22 : On utilisera VTAB +2.
9 +
10 ORG $300
1 *
300: A2 ag 12 LDX £800 ; Registre X = @.
302: 8A 13° BCL4 TXA ; X passé dans A.
303: 85 18 14 STA VT ; Pointeur ligne.
305: 20 24 FC 5 JSR VTAB+2 ; Positionnement.
308: AG GG 16 LDY £$00 ; Registre Y G zéro.
30A: AS 28 17 BCLS LDA BASL ; Transfert de la partie
39c: 85 2A 18 STA BAS2L : basse, puis de la partie
30E: AS 29 19 LDA BASL+1 ; haute, mais aprés,
310: 29 G3 20 AND £$03 : AND 66000011 et ORA $E6
312: G5 E6 21 ORA HPAG : ($7 devient $43...
314: 85 2B 22 STA BAS2L+1 ; $4 devient $4G, etc.).
316: AS 18 23 LDA VT : Pointeur ligne dans A.
318: 4A 24 LSR ; Bit @ dans la retenue.
319: 90 G2 25 BCC BCLI ; SiC = @ (pas de retenue),
31B : E6 2A 26 INC BAS2L ; on n'incrémente pas.
31D: A2 oO 27—~«~BCLI LDX £$00 ; X = 1: compteur.
31F : AQ 7F 28 BCL2 LDA £$7F ; Carré plein = 8 fois $7F.
321: 91 2A 29 STA (BAS2L),Y ; Ecriture HGR ou HGR2.
323: 18 30 CLC ; Annulation de la retenue.
324: AS 28 31 LDA BAS2L+1 : Partie haute dans A
326: 69 G4 32 ADC £$04 : majorée pour le point
328: 85 2B 33 STA BAS2L+1 : suivant.
32A: E8 34 INX : Ne pas oublier pointeur.
328: E¢ G8 35 CPX £$08 ; Est-on a8 ?
32D: 9 FO 36 BCC BCL2 ; Non : encore un point.
32F: C8 37 INY ; On trace un carré sur
330: C8 38 INY ; deux donc ¥ + 2.
331: C4 21 39 CPY WNDWDTH ; A-t-on terminé la ligne ?
333: 90 DS 40 BCC BCL3 ; Non: passons 4 l'autre.
335: A6é 18 4) LOX VT ; VT dans X.
337: E8 42 INX ; VT = VT +1.
338: E4 23 43 CPX WNDBIM : Est-ce la derniére ligne ?
33A: 9 C6 44 BCC BCL4 ; Non: encore une autre.
33C: 60 45 RTS ; Oui: termine !
BSAVE DAMRAP,A$300 ,L$3D (Suite page 12)
TREMPLIN MICRO W
[—————————
DAMIER.VC
Essayez enfin cette derniére routine,
plus compacte (26 octets), mais proche
de la précédente. Constatez, grace 4 la
boucle de la ligne 30 (on peut en sortir
par ESCAPE) l'importance de la valeur
initiale de X ($304). Peut-étre est-il pos-
sible de faire encore plus court : rien ne
vous interdit d'essayer !
Remarque: Pour que cette routine fonc-
tionne, il faut que l'adresse $E5
soit @ ... ce qui n'est pas le cas aprés
DAM.DEMO... d'ou le POKE 229,0 (qui donne le
premier carré blanc). Un POKE 229.1 permet
de démarrer avec un carré noir.
300: 20 DB F3 JSR $F3D8
303: A2 IF LDX £$1F
305: A9 7F LDA £$7F
307: CO 78 CPY £$78
309: DO GI BNE $030C
30B: C8 INY
30c: 91 £E5 STA ($E5),Y
30E: CB INY
30F: C8 INY
310: CO F9 CPY £$F9
312: DG F3 BNE $0307
314: E6 £6 INC $E6
316: CA DEX
317: 1 F2 BPL $030B
319: 60 RTS
BSAVE DAMIER.VC,A$300,L$1A
Une collection de petites routines indispensables :
° CLINS D’OEIL AU 65C€02 DE L’APPLE (avec disquette)
ind ROUTINES LM POUR 65C€02 ET 6502 (avec disquette)
Ces recueils regroupent des programmes publiés dans Tremplin Micro,
mais présentent aussi diverses routines originales, faciles 4 mettre en
ceuvre 4 partir du Basic (bulletin de commande a la fin de la revue). .
J
J
J
J
10
30
40
50
60
70
80
90
DAMIER.VC
HGR2 (& la sortie : Y = @).
Compteur pour partie haute de I’adresse ($E6).
Pour obtenir un carré plein.
Si Y est différent de G, pas d'incrémentation.
YH + ly
Une ligne du carré.
Ne pas oublier qu'il s'agit d'un damier !
Si Y est différent de $F9 on continue.
Sinon partie haute de l'adresse incrémentée,
et compteur décrémenté en conséquence.
On poursuit (de $40 a $5F).
Retour.
TEXT : HOME : PRINT CHR§ (21) : POKE 229,0
FOR | = 768 TO 793: READ R: POKE |,R: NEXT
FOR | = 31 TO 1 STEP - 1: POKE 72,1: GOSUB 70:
CALL 768: NEXT
GOSUB 70: TEXT
VTAB 22: PRINT "(M)ENU DE DISQUETTE ";: GET RS:
PRINT : IF R$ = "M" OR R$ = "m" THEN PRINT CHRS
(4)"RUN MENU.D1”
HOME : END
CALL - 198: POKE 49168,0: WAIT 49152,128,127: POKE
49168,0: IF (PEEK (49152)) <> 27 THEN RETURN
TEXT : POP : GOTO 50
DATA 32,216,243, 162,31 ,169,127,192,120,208, 1,200,145,
229,200,200, 192,249,208, 243,230 ,230,202,16,242,96
GUY-HACHETTE
VISUALISER
Dos |
Clément RENARD
Version 2
Seconde version d'une routine permettant de visualiser, sur l'un des écrans graphiques
de l'Apple, les 96 caractéres d'une police classique (768 octets). Nous donnons ici le
source de CAR.VIS2. II ne différe de CAR.VIS1 (dont on trouvera les codes plus loin) que
par la présence de la ligne 32 : — EOR $7F.
Pour obtenir un affichage nor- CAR.DEMO
mal, il faut : EOR $00... car
EOR $7F affiche les caractéres 1@ TEXT : PRINT CHR$ (21): HGR2 : HCOLOR = 3: PRINT CHR$
en: mode inverse; Led “utilisa: (4)"BLOAD CAR.VIS1": PRINT CHR$ (4)"BLOAD FG,A$6000"
teurs d'un moniteur couleur 15 CALL 768: GOSUB 40
savent que les résultats ne sont 20 HOME : TEXT
malheureusement pas extraor-
dinaires en mode normal et 25 VTAB 22: PRINT "(M)ENU DE DISQUETTE ";: GOSUB 40
inacceptables en mode inverse. 30 IF R$ = "M” THEN PRINT CHR$ (4)"RUN MENU,D1”
Par contre, avec une police spé- P
ciale (voir Tremplin Micron°12), 45 HOME END
on obtient une visualisation cor- 40 CALL - 198: GET R$: PRINT : RETURN
recte en mode normal.
@ * CAR. WESU2 (ASSEMBLAGE PAGE PROCODE)
1 *
2° Carac EQU $06 ; Nombre de caractéres.
3 Lgn EQU $07 ; Pointeur ligne.
4 Wndwdth EQU $21 ; Largeur fenétre ($28).
5 Bas! EQU $28 Adresse basse colonne 1.
6 Bas2! EQU $2A Point. ligne destination.
7 Hpag EQU $E6 ; Drapeau HGR = $20, HGR2 = $40.
8 Adrf EQU $5FF8 ; Adresse fonte moins 8
9 Vtab EQU $FC22 ; On utilise Vtab+2.
Ww *
VW ORG $300
2 *
300: A2 GG 13 LDX £$00 ; Index X @ zéro.
302: 86 G6 14 STX Carac ; Et zéro pour Carac.
364: BA 15 BCL6 TXA : X passé dans A,
305: 85 G7 16 STA Lgn ; puis dans pointeur ligne.
307: 20 24 FC 7 JSR Vtab+2 ; Curseur.
30A: AG OG 18 LDY £$00 : Registre Y & zéro S.V.P. (suite page 14)
TREMPLIN MICRO 13
30c: AS 28 19 BCLS LDA Bas! ; Adresse partie basse passée
30E: 85 2A 20 STA Bas2I ; dans Bas2l, puis partie
310: AS 29 21 LDA Basi+1 ; haute dans Bas2I, mais aprés
312: 29 @3 22 AND £$03 ; AND 00000011 et ORA $26 ou 40
314: G5 £6 23 ORA HPAG 3 ($7 = $43 — $4 = $40 —$5 = $41...)
316: 85 2B 24 STA Bas2l+1 ; pour adresse HGR ou HGR2.
318: A2 08 25 LDX £$08 ; Registre X = 8 (compteur).
3IA: EE 26 G3 26 = BCL2 INC BCL3+1 ; Adresse basse incrémentée.
31D: DG G3 27 BNE BCLI ; Sile résultat n’est pas G,
SIF: EE 27 03 28 INC BCL3+2 ; sinon on incrémente partie haute
322: CA 29° ~=BCLI DEX ; X=X—1.
323: DG FS 36 BNE BCL2 ; $i X différent de @, encore.
325: BD F8 5F 31 BCL3 LDA $5FF8,X ; Au départ, X = 0.
328: 49 7F 32 EOR £$7F ; $7F = INVERSE — 00 = NORMAL.
382A: 91 2A 33 STA ($2A),Y ; Ecriture.
32C: 18 34 CLC ; Annulation de la retenue.
32D: AS 28 35 LDA Bas2I+1 ; Partie haute majorée de $4,
32F 69 G4 36 ADC £$04 : pour écriture du point
331 85 2B 37 STA Bas2l+1 ; suivant du caractére.
333 Es 38 INX 7 X=X+1.
334: EO 08 39 CPX £$08 ; SiX plus petit que 8,
336: 90 ED 40 BCC BCL3 ; onn‘a pas terminé.
338: E6 G6 4) INC Carac ; A-t-on passé tous les
33A: AS G6 42 LDA Carac ; caractéres de la police ?
33C : C9 60 43 CMP £$60 ; lly ena $60 (96).
33E: BO OC 44 BCS BCL4 ; Siona termine : vers fin.
340: CB 45 INY ; Sinon on saute un espace
341: C8 46 INY ; pour plus de clarté.
342: C4 21 47 CPY Wndwdth ; Ne pas dépasser Ia limite.
344: 9 C6 48 BCC BCL5 ; Cestlecas ? suite BCLS.
346: Aé Q7 49 LDX Lgn ; Sinon on récupére le nombre
348: ES 50 INX ; de lignes et on le majore de
349: EB 51 INX ; 2 pour plus de lisibilité.
34A: DO BS 52 BNE BCL6 ; Suite.
34C:: AD FB 53 BCL4 LDA £$F8 ; Remise en état de l'adresse
34E : 8D 26 G3 54 STA BCL3+1 ; pour une autre fonte
$51: AS SF 55 LDA £$5F ; (inutile sila routine est
353: 8D 27 G3 56 STA BCL3+2 ; rechargée 4 chaque fois).
356: 60 57 RTS ; Retour au Basic.
BSAVE CAR. VIS2,A$300,L$57
CAR.VIS1 BSAVE CAR.VIS1,A$300 ,L$57
300: A2 GG 86 G6 8A 85 G7 26 24 FC AG GO AS 28 85 2A
310: AS 29 29 @3 G5 £6 85 2B A2 G8 EE 26 G3 DG G3 EE
326: 27 G03 CA DG FS5 BD F8 SF 91 2A 18 AS 2B 69 G4 85
330° 28 £8 EG G8 960 EF £6 G6 AS G6 C9 66 BO GE CB C8
340° C4 21 90 C8 A6 G7 EB EB EO G9 90 BB AD FB 8D 26
350° G3 AY 5F 8D 27 @3 66 .
4 GUY-HACHETTE
OUR mener 4 bien l'impression d'un graphique il faut, entre
autres choses, avoir compris le réle de la carte interface, car
c‘est souvent elle qui fait tout échouer.
Limitons-nous aux cartes Apple (carte paralléle, ou
Super-Serial). Supposons que votre carte soit sur le
slot 1. En assembleur, la méthode classique pour
transmettre des données 4 |'imprimante consiste 4 :
1. Placer l'adresse du slot, (c'est-a-dire $C100) dans
les octets $36 et $37 en page zéro : $36 devra rece-
voir £$00 et $37 devra recevoir £$C1.
2. Envoyer a I'imprimante un flux d’octets par la
routine COUT (=$FDED).
LDA £$C)
JRS $FDED provoque l'écriture de
A sur votre papier.
Ce flux d'octets transite par la carte, qui a un droit de
regard sur les valeurs qu'elle transmet @ |'impri-
mante. Droit légitime et bénéfique si vous imprimez
votre roman. Droit abusif et catastrophique si vous
imprimez (ou tentez d'imprimer) un graphique.
En effet, si le dessin du graphique comporte, en un
point quelconque, un assemblage de points corres-
pondant aux valeurs $0D ou $8D (retour chariot) ou
aux valeurs $09 ou $89 (Control-I), la carte va immé-
diatement se sentir concernée.
Aprés retour chariot, elle ajoute “Line feed” ($0A).
Cet octet supplémentaire décale tout et fausse la
signification du flux d'octets que recoit l'imprimante.
Quant au Ctrl-I, la carte ne le transmet jamais &
limprimante. Elle le garde dans ses profondeurs, et
elle attend Ia suite, qu'elle interpréte comme un ordre
a elle donné. Les conséquences sont imprévisibles.
Généralement, vous assisterez 4 une danse frénéti-
que de l'imprimante, qui se mettra a éjecter des
métres de papier, en écrivant ici ou la quelques carac-
téres bizarres, uniquement pour gacher vos feuilles.
Par exemple :
“Shunter" la carte (elle ne Ia pas volé),
en placant directement vos octets sur
$C090 (carte paralléle) ou sur $CG98 (carte Super-
Serial). En outre vous devrez, aprés l’envoi de chaque
octet, faire une petite boucle d’attente, pour rempla-
cer les routines qui, dans la carte, vérifient que
limprimante est libre et peut recevoir l'octet suivant.
Donc, pour transmettre 4 l'imprimante les octets du
graphique (et uniquement ceux-la), lorsque Ac con-
tient la valeur & transmettre, remplacez $FDED par :
TREMPLIN MICRO
$CG90 (si carte paralléle en slot 1)
$CO98 (si carte Super-Serial en slot 1)
£$2D
$FCA8 (boucle d'attente fonction de Ac. Tester
la bonne valeur & prendre sur l'accumulateur,
variable selon la rapidité de |'imprimante entre
£$22 et £$2F). Madeleine HODE, auteur de Gribouille.
SUR APPLE lic, essayez cette petite routine :
16 PRINT CHRS (4)"PRE1": PRINT : PRIN
T CHR® (27)"n": PRINT CHRS (9)"896
N": FOR I = 768 TO 785: READ C: POK
E 1,C: NEXT
READ C: POKE 773,C: IF C = @ THEN 6
8
PRINT CHRS (27)"G8832";
CALL 768:X = X + 1: IF X <¢ 18 THEN
38
PRINT :X = @: GOTO 20
PRINT : PRINT CHR® (4)"PRE8"
DATA 162,32,168,16,169,8,153,136,19
2,169,45,32,168,252, 202,208,241 ,96:
REM Avec une carte paralléle, remp]
acer 136 par 128
88 DATA 13,141,9,137,8
Sous-programme LM (ligne 70)
300: A2 20 LDX £$20 Slot + 16
302: AQ 10 LDY £$10
304: AI OO LDA £$00
306: 99 88 CO STA $C@88,Y Carte parallele : $80
309: A 2D LDA £$2D
30B: 20 A8 FC JSR $FCA8
30E: CA DEX
30F: DO FI BNE $0302
31: 60 RTS .
Vous obtiendrez ceci :
———————
aS
5
Votre bibliotheque
INFORMATIQUE
© VARIATIONS EN C |
(Steve Schustack)
Avantage non négligeable, les lecteurs
de VARIATIONS EN C peuvent acqué-
rir la disquette des exemples étudiés
dans le livre. Ceux-ci présentent un
autre intérét : ils sont presque tous
extraits d'un méme programme (un
logiciel de gestion), écrit sur un IBM PC
(c'est la que le bat blesse un applema-
niaque convaincu !) avec deux lec-
teurs de disquettes, 512 K de RAM, la
version 2.00 de MS-DOS et la version
3.00 du compilateur C de Microsoft
(que je ne connais absolument pas).
Je constate que nous disposons, sur
n'importe quel Apple //GS normale-
ment constitué, des mémes étourdis-
santes possibilités... du moins pour ce
qui est de la RAM et des lecteurs. Pour
le reste, j'espére que l'on ne va pas
nous obliger 4 utiliser MS-DOS pour
tater du C : ce serait trop béte. Foi de
Nestor, je me refuserai toujours 4 pas-
ser par des voies aussi tortueuses pour
satistaire ma passade pour un langage
que j'ai pourtant diablement envie de
mioffrir. Et je vous promets que ces
VARIATIONS EN C sont rudement ten-
fantes : présentation, abondance des
matiéres et clarté des textes... C'est
vrai que c'est un produit MICROSOFT
PRESS : une référence a laquelle
s‘ajoute celle de Cedic Nathan, tout un
programme !
CEDIC NATHAN (Microsoft Press)
6 Boulevard Jourdan, 75014 PARIS
Tél, (1) 45.65.06.06
© LA PRATIQUE
D'APPLEWORKS
(Michel Mossetti)
Si vous figurez au nombre des heureux
élus qui ont pu s‘offrir un APPLE //GS
pour leur petit Noél (30% de remise
aux membres non largués du Club
Apple), vous avez pu bénéficier d'un
cadeau nullement négligeable : la ver-
sion 1.4 du logiciel intégré d'Apple,
AppleWorks.
Pour les néophytes, je rappelle que ce
logiciel comprend non seulement un
traitement de texte, mais un module
de gestion de fichiers et de calcul élec-
tronique (lisez "tableur"). Pour utiliser
au mieux ces outils, vous aurez tout
intérét 4 vous munir d'une bonne docu-
mentation, et notamment celle que
vous propose Michel Mossetti. Ne sou-
riez pas ; méme s'il est facile de se ser-
vir d’AppleWorks, c'est encore plus
commode quand on a sous les yeux les
200 pages d'un bouquin bourré
d'exemples (ils sont tous archivés dans
un index des opérations). Comment
établir une lettre de relance (élémen-
taire, mon cher Nestor), un état budgé-
taire ou un poulet (les jeunes ne savent
pas & quoi cela ressemble !)... 4 une
petite amie ? (Presque) tout y est !
McGRAW-HILL, 28 Rue Beaunier, 75014 PARIS
@ LEXIQUE APPLEWORKS
(Michel Mossetti)
J'ai omis de préciser que Miche! Mos-
setti exerce la profession d'informati-
cien depuis plus de quinze ans (il est
aussi ingénieur CNAM et enseignant
au Centre National de la Recherche
Scientifique). Dans ce second ouvrage,
l'auteur a adopté le classement alpha-
par NESTOR
bétique et il est certain que celui-ci
présente bon nombre d’avantages
pour l'utilisateur moyen. II supporte la
version 1,3 d'AppleWorks, mais on n'y
parle évidemment pas de la version
1.4, celle tournant sur I'Apple //GS. Ne
disposant pas, 4 l'heure oi je rédige
ces lignes, de cette nouvelle version,
je n'ai pas été en mesure de la verifier.
Une chose est certaine : les exemples
resteront valables, de méme que I'uti-
lisation des diverses commandes. Une
remarque au passage : pour une raison
que j‘ignore, je n’avais jamais eu
l'occasion de compulser des ouvrages
de McGraw-Hill et ‘ai été trés agréa-
blement surpris par leur présentation
claire et sérieuse (le format, notam-
ment, est fort bien choisi). A quand les
outils du GS chez cet éditeur ?
McGRAW-HILL, 28 Rue Beaunier, 75014 PARIS
© SYSTEMES D'EXPLOITATION
DES MICRO-ORDINATEURS
(M. Courvoisier, R. Valette)
Cet ouvrage présente sous forme con-
cise les principes fondamentaux des
systémes d'exploitation utilisés dans
les micro-calculateurs, puis il les illus-
tre au moyen de quelques systémes
trés répandus. Dans la premiére par-
tie, la présentation des concepts part
du schéma classique en couches, en
insistant sur la gestion des taches, pro-
bléme de base pour l'utilisateur des
micro-calculateurs dans le domaine de
la commande des procédés industriels.
la deuxiéme partie décrit quelques
systémes d'exploitation. Le choix se
porte sur CP/M et MS-DOS pour les
systémes de type “ordinateur person-
nel" basés sur des processeurs 8 ou 16
bits, iRMX 86 pour les systémes desti-
nés aux applications temps réel, et
UNIX qui est un systéme d'exploitation
largement répandu dans le domaine
universitaire et qui tend 4 devenir le
standard des stations de travail basées
sur des processeurs 32 bits.
DUNOD, 17 Rue Rémy-Dumoncel, 75661 PARIS (95 F ttc)
GUY-HACHETTE
zaam
vil
fic
so
ce
le
er
te
in
di
pc
pr
(cx
Programme demandé
UTILISATION sunsesicrarc
ECRIRE et LIRE
REMPLACER
RECHERCHER
LONGUEUR D’'UN
ENREGISTREMENT
Elle est contenue dans la
variable L (ligne 105). Elle
est égale au nombre de
caractéres plus deux (le
return final et les guille-
mets du début, qui per-
mettent d'utiliser la ponc-
tuation).
ll est représenté par la
variable F$ (ligne 105).
ONERR GOTO
Ne doit normalement ser-
vir que pour créer le
fichier. Par la suite, il est
souhaitable de supprimer
cette ligne... ou de revoir
le traitement trés som-
maire des _ possibles
erreurs. La longueur est
testée et les caractéres
interdits (guillemets et
divers contréles) filtrés
par la ligne 165. On peut
prévoir un DISK FULL
(code ER=9), etc.
seeonseveunezzeuzeazezaes
TREMPLIN MICRO
106
165
116
115
120
125
130
135
140
145
158
155
168
165
178
175
1386
185
198
195
266
205
216
215
226
225
236
FIC.DIRECT
TEXT : NORMAL :0% = CHR (4): PRINT D
S"PRE3": HOME PRINT +: PRINT D®"BLOAD
RECHFIC1"
Fe = "FIC":L = 842: REM Lonqueur maxim
um de la donnée + 2 (quillemets au déb
ut et return & la fin?
ONERR GOTO 58a
VTAB 1: INVERSE : PRINT "FICHIER DIREC
T DE LONGUEUR "L - 2: NORMAL
GOSUB 45@: REM VERS NOMBRE DE DONNEES
GOTO 526
REM
REM *
REM
EERE RHEE EKER ARERR EERE REE
SAISIE *
ee
VTAB 4: PRINT ""3: CALL —- 657
At = "": FOR X = 512 TO 549 + L:A = P
EEK (X): IF A < > 162 AND A > 159 AND
A < > 141 THEN AS = AS + CHR CA - 1
28): NEXT
VTAB 4: CALL - 958: PRINT AS: IF AS =
"" THEN POP : GOTO 524
VTAB 22: CALL - 868: PRINT "<C>ORRECT
<R>EFAIRE "3: GET RS: PRINT : IF R® =
"R" THEN GOSUB 19@: GOTO 1468
IF R® <¢ > “"C" THEN 175
RETURN
VTAB 5S: POKE 1403,L - 3: PRINT : RE
TURN
REM HEHEHE RHEE EEE ERE R RR EH
REM * ECRIRE *
REM ##XHRRER HERE R HEHEHE RHR ERE
PRINT : VTAB 4: CALL - 958: FOR I = 1
TO L - 2: PRINT "_"3: NEXT : PRINT
GOSUB 168
N= N+ 1: PRINT
863A
887A
8E1D
74A5
77AL
9CAB
$3B1
FESS
883A
883A
B48E
1F47
eBs?
dt
201
mat
no
ph
Pa
fac
me
doi
For
uti
dai
et
ble
util
du
ou
TRE
235 GOSUB 478 E748 PRINT DS
24@ PRINT D¢ BF22 | D$contient CHR$(4), com-
245 VTAB 1: HTAB 32: CALL - 868: PRINT N: mande comprise par le
GOTO 224 $3F8 DOS et par ProDOS.
258 : 863A Quand un fichier est
255 REM HHRHRHEH EHR HRERR HERR EHERE ouvert, aprés une com-
268 REM * REMPLACER * mande WRITE ou READ,
265 REM HHRRRRHR RHR ERERER ERR RERRE ne pas oublier de repren-
270: 003A dre la main pour un PRINT
275 VTAB 22: CALL - 8468: INPUT “REMPLACER Ds, Hah seu st un
LE NUMERO ";R$:R = VAL (R$): IF R > INET aera bein ose
N THEN 275 4E16 ture !
286 IF R = @ THEN GOSUB 455: VTAB 26: PRI
NT N" enregistrements": GOTO 275 72F7
285 PRINT D$"READ"FS",R"R: INPUT A$: PRINT PONCTUATION
OF 6A7F +4
296 VTAB 4: CALL - 958: PRINT AS as64 senile de ae
295 GOSUB 196: GOSUB 1468 2ccB passant par CALL-657
36@ GOSUB 475: PRINT D$: GOTO 520 4828 | ($FD6F). Ne pas oublier
305 3: 883A que cette routine ne filtre
310 REM *xxxeeeenHnnnenneneexeeee pas naturellement les
315 REM * CHERCHER * mauvais caractéres (con-
B20 REM *HxxHHHHHRHRH RHR HR RHR RHEE tréles divers et ESCAPE).
325 : 883A
338 V = 3: VTAB 22: CALL - 868: INPUT "CH
AINE RECHERCHEE:ctG ";CH$: IF CH® = "" RE INTERDIT
THEN 520 CFBS Ne pas utiliser les guil-
335 LC = LEN (CHS) saz | lomets
34@ FOR I = 1 TON E10A
345 PRINT Dé"READ"FS",R"I: INPUT AS: PRINT RECHERCHE
Ds B776 a
350 CALL 768,CH$,A$: IF NOT PEEK (24) TH Else yiay seco lfc
EN GOSUB 368 1FFO@ chine (voir plus loin).
355 NEXT I: GOTO 338 7146 Celle-ci vous autorise &
360 V =U + 1: UTAB V: CALL - 958: PRINT utiliser indifiérermment
13: HTAB 4: PRINT AS S7B1 les minuscules ou les
365 IF V = 2@ THEN CALL - 198: VTAB 22: majuscules. Attention !
PRINT "“PRESSEZ UNE TOUCHE ";: GET RS: les caractéres accentués
PRINT :¥ = 3 8104 conservent par contre
378 RETURN 6381 leur valeur. Sur la dis-
375 : 803A quette, RECHFICO permet
380 REM *xHRHHRH RHE RHR R ERE R EERE de différencier les minus-
385 REM * LIRE a cules et les majuscules.
39D REM HHH HHRRHERHR HERR HER HERE RE Pour rechercher un signe
395: 003A de Baneioation {formals
400 VTAB 22: CALL - 868: INPUT "LIRE LE N See ee arene
UMERO ";R#:R = VAL (RB): IF R > N THE ple:” vi ou"...
N 408 ca97 ‘
405 IF R$ = "" THEN 520 3392
410 IF R= @ THEN GOSUB 455: VTAB 28: PRI COMPATIBILITE
NT N" enregistrements": GOTO 400 36ED Ce programme _ fonc-
415 PRINT D$"READ"FS$",R"R: INPUT A$: PRINT flonne: soda: DOS-0) Pro
Wad 6A7F DOS, mais vous constate-
420 VTAB 4: CALL - 958: PRINT A$: GOTO 49 rez quill se révéle beau-
18 GUY-HACHETTE
—— Ee ————EEE
coup plus performant
avec ProDOS. La recher-
che, notamment, est plus
rapide, le tampon autori-
sant la lecture d'un nom-
bre supérieur d’octets par
séquence.
N’oubliez pas que le fi-
chier direct est gourmand
en mémoire-disquette. Si
vous fixez la longueur
d'un enregistrement 4a
200, par exemple, le mot
“Toto” exigera le méme
nombre d’octets qu'une
phrase de 200 caractéres.
Par contre, on accéde
facilement et instantané-
ment 4 n'importe quelle
donnée existante.
NOMBRE
Fonction de la disquette
utilisée... Il est stocké
dans l'enregistrement @
et contenu dans Ia varia-
ble N. La variable R est
utilisée pour le numéro
d'un enregistrement 4 lire
ou 4 remplacer.
425
438
435
440
445
458
4s5
468
465
476
475
488
485
4968
495
Sea
Ses
S16
sis
526
S25
538
S35
548
545
558
sss
568
565
570
S75
538
58s
598
REM RHR RHR KERR HR ERR EER HEHE
REM * SUR LE FICHIER *
REM Hee RR HE EERE REH ERR R ERE
PRINT DS" OPEN"FS",L"L
PRINT D#“READ"FS" ,RO"
INPUT N: PRINT D%: VTAB 1:
INT N: RETURN
HTAB 36: PR
PRINT D¢"WRITE"FS",R@": PRINT N: RETUR
N
PRINT Dé"WRITE"FS",R"N: GOTO 488
PRINT O&"WRITE"FS",R"R
PRINT CHR® (34) + A$: RETURN
PRINT D#"CLOSE"FS
: HOME : END
REM RHEE HERR HER EH RR EERE ER EEE
REM * LIGNE DE CHOIX *
REM eee RRR RR RRR RRR EERE EERE
VTAB 22: PRINT "<L>IRE “<E>CRIRE ~<R>E
MPLACER “<C>HERCHER “<F>INctG “3: GET
R$: PRINT : IF R& > CHR® (82) THEN R&
= CHR ¢ ASC (RB) - 32)
RS "L" THEN 488
RS "E" THEN 226
RE *R": THEN 275
RS "C" THEN 336
IF R® "F" THEN GOSUB 465: GOTO 485
GOTO 526
REM RHR RRRE RRR EERE EERE RHEE
REM * ERREUR *
REM HERRERA RHEE EERE ERE R HERE
nun
ER = PEEK (222):
> S THEN 598
GOSUB 465: PRINT D®: GOTO S26
VTAB 22: PRINT D$: PRINT "“ERREUR IMPRE
VUE ": GOSUB 465: GOTO 485
POKE 216,0: IF ER <¢
@3DD
883A
883A
BFeA
CADE
7CAL
EC7A
D3EC
3E6F
7271
7046
8E8B
88346
883A
2FF1
4B0B
7ED4
SiEB
3CD4
3F16
0942
883A
663A
ABCD
3027
B72B
PAGE SUIVANTE: EXPLICATIONS DE <RECHFIC1>
@306:
G318:
$326:
6330:
63468:
6356:
26
26
Ad
a4
49
Ba
DE
DE
Bi
86
D1
CODES DE RECHFIC1 (ligne 190)
28
28
19
18
E3
E3
oF
66
98
@7 FO
OF AB G2 Bi 83 99 18 66 88 18 FS E465
DF A® 62 BI 83 99 46 B68 88 18 FB 88A3
SE 63 88 16 F8 Ad G6 AS 19 CA 18 scs2
88 16 61 68 BD SE 83 D1 87 F@ EE E9B7
18 CY 5B 98 68 CP 61 98 88 CP 7B 2E05
08 ES E4 18 Fé D1 C8 D® FB C68?
BSAVE RECHFIC] ,A$300 ,L$5E
TREMPLIN MICRO
2
(routine RECHFIC de FIC.DIRECT)
300: 20 BE DE JSR $DEBE =
303: 20 E3 DF JSR $DFE3 —
366: AG G2 LDY £$02 ~]
308: BI 83 LDA ($83),Y
30A: 99 18 GG STA $0018,Y
30D: 88 DEY
30E: 1 FB BPL $0308 =!
310: 26 BE DE JSR $DEBE 7]
313: 20 E3 DF JSR $DFE3
316: AG G2 LDY £$02
318: Bl 83 LDA ($83),Y
SIA: 99 G6 GG STA $0006,Y
31D: 88 DEY
SIE: 16 FS BPL $0318 =
326: A4 18 LDY $18 ~)
322: Bl 19 LDA ($19),¥
324: 99 SE G3 STA $@35E,Y
327: 88 DEY
328: 10 FB BPL $0322 =
32A: A4 G6 LDY $06
32C: A6é 18 LDX $18
32E: CA DEX
32F: 16 G4 BPL $0335 d
331: E8 INX “7
332: 86 18 STX $18
334: 60 RTS 3
335: 88 DEY 77
336: 16 @1 BPL $0339 I
338: 60 RTS 7
339: ° BD SE @3 LDA $035E,xX _|
33C: DI G7 CMP ($@7),Y ~]
33E: FO EE BEQ $032E
346: 49 26 EOR £$20
342: C9 41 CMP £$41 ~]
344: 99 16 BCC $0356 =
346: C9 SB CMP £$5B “7
348: 96 GB BCC $0352 =
34A: C9 61 CMP £$61 ~]
34C: 98 G8 BCC $0356 =
34E: C9 7B CMP £$7B 7
350: BO G4 BCS $0356 at
352: Dl O7 CMP ($07),Y ~]
354: FO D8 BEQ $032E =J
356: E8 INX 7
357: E4 18 CPX $18
359: FO DI BEQ $032C
35B: CB INY |
35C: DG FB BNE $0356
RECHERCHE D'UNE VARIABLE DANS UNE AUTRE
CHKCOM teste la présence de la virgule et
PTRGET recherche la variable par son nom.
On sait lire la longueur de la variable a I'adresse
trouvée en $83-84. La méme adresse +1 et +2
fournit l’adresse réelle de la chaine.
Mémes opérations pour la seconde variable. La
premiére représentait la chaine recherchée,
celle-ci la chaine dans laquelle on recherche. Le
choix des adresses $18-1B et $6-8 est arbitraire.
Longueur de la chaine 4 rechercher dans Y.
Ecriture des Y octets de cette chaine 4 partir de
$35E. On notera que L est en vérité égal OL + 1
(G&L), mais c'est sans importance.
RECHERCHE
Longueur de la grande chaine dans Y.
Longueur de la petite dans X.
X = X-1. Jusqu’d X = G, on saute.
a, c'est pour renseigner le Basic.
Si PEEK(24) = G, ona trouvé AdansB !
Y = Y-1. Jusqu’a Y = G, on continue.
Sinon c'est fini et, $18 contient toujours la longueur de
la chaine recherchée... et PEEK (24) n‘est pas égal a0.
COMPARAISON 1
Si c'est oui, on passe au caractére suivant.
Ou A devient a et Z... z, on vice-versa.
Si plus petit que "A", pas de comparaison.
Si plus petit que $5B (plus grand que "Z"), saut
vers COMPARAISON2.
Si plus petit que "a", pas de comparaison.
Si plus grand que "z”,
pas de comparaison non plus.
COMPARAISON2
Si égalité, vers caractére suivant.
On réajuste la valeur de Y pour que la recherche
reprenne GY + 1.
20
GUY-HACHETTE
a ee
N00
Marcel COTTINI
SYSTEME D'EXPLOITATION ProDOs
Le dernier-né des systémes d’exploitation, en
occurrence ProDOS, suscite chez bon nombre
de lecteurs pratiquant |'Apple //, certaines réti-
censes 4 l'emploi. Cet article a la tache de fami-
liariser l'utilisateur débutant ou averti, avec les
programmes systémes et lui donner tous les
ingrédients pour une meilleure utilisation de
ProDOS.
ProDOS, Professional Disk Operating System,
est un ensemble de micro-programmes qui, as-
sociés les uns aux autres, forment un program-
me systéme, capable de gérer les divers péri-
phériques reliés 4 un environnement Apple //.
C'est une suite d’instructions faisant partie des
programmes systémes (Operating System), per-
mettant entre autres, la gestion d'un lecteur de
disquettes a l'aide de commandes évoluées. Lors
des différentes manipulations, l’opérateur n‘a
pas besoin de s’occuper du déplacement de la
téte de lecture, ni de se soucier de la gestion et
de I'écriture des divers fichiers sur la disquette.
Ce réle est attribué au systéme d’exploitation.
Comme tout programme (soft), ProDOS occupe
une place en mémoire centrale, suivant ses pos-
sibilités intrinséques. En régle générale, tout
concepteur de logiciels effectue un compromis
entre les possibilités offertes par le matériel
(hard) et le logiciel (soft). Pour le fichier PRO-
DOS, la mémoire se trouve amputée de 12 Ko,
l'Apple Ile ou lic répartit d'une fagon astucieuse
cette occupation. Les 12 Ko en haut de la
mémoire sont attribués au fichier PRODOS par
commutation alternée du systéme et de la ROM.
Cet espace est normalement occupé par la ROM
AppleSoft et par le Moniteur. En réalité, le
fichier PRODOS occupe 16 Ko, dont 4 Ko sont
obtenus par la commutation de la Bank Switched
Memory — bank | et 2.
ProDOS, développé par la société Apple Computer,
est le dernier-né d'une gamme de programmes
systémes, destiné 4 fonctionner sur la série des
Apple //. Il permet d’accroitre considérablement la
sauvegarde de la mémoire de masse, par |'utilisa-
tion d'un disque dur. Ce systéme a fait son appari-
tion officielle début 1984 avec la version 1.0 ; une
nouvelle version revue et corrigée, circule depuis
début 1985. Une autre accompagne les logiciels les
plus récents. La dénomination ProDOS recouvre en
fait l'association d'un systéme d’exploitation et
d'un programme interface.
STRUCTURE DU SYSTEME
D'EXPLOITATION ProDOS
Le systéme d’exploitation ProDOS se compose :
— d'un fichier PRODOS qui se loge dans la carte
langage, et regroupe tous les sous-
programmes en langage machine — MLI —. II
se trouve sauvegardé sous la forme d’un pro-
gramme du type SYS, avec comme nom de
fichier : PRODOS ou KERNEL.
— d'un fichier également du type SYS, sous la
forme XXX.SYSTEM, et qui se loge 4 |’ancien
emplacement du DOS 3.3.
Chaque disquette de démarrage standard Pro-
DOS comporte au moins deux fichiers communs
écrits en langage machine PRODOS et
XXX.SYSTEM.
Remarque : XXX.SYSTEM représente un format
dont les XXX désignent un nom de fichier pou-
vant étre tout programme répondant 4 cette con-
vention, par exemple un traitement de texte en
langage machine. En général c'est BASIC.
SYSTEM qui est utilisé pour la plupart des dis-
quettes conventionnelles.
Ecrit en langage machine, i! renferme tous les
sous-programmes et routines MLI (Machine Lan-
guage Interface). C'est le coeur du systeme
(noyau — KERNEL), permettant de gérer tous les
fichiers autres que ceux du type AppleSoft. Il est
l'équivalent du File Manager et de RWTS du DOS
3.3 ; il occupe l’ensemble de la carte langage (a
l'exception de la zone $D000-$DOFF de la bank
2), ainsi que l'espace $BFQO-SBFFF servant @
commuter les différentes parties hautes de la
mémoire, et 4 recevoir des appels de program-
mes ou de routines externes.
PRODOS fut écrit au départ pour fonctionner sur
un Apple // de 48 Ko de mémoire, (suite poge 22)
sennmseoceenseeenasennensssnesssoesesessonernusseaseseeEseesesenssessonecssasesEssasescasEERSESREEOEEEE
TREMPLIN MICRO
21
SYSTEME EXPLOITATION PrODOS (i)
en se placant sous l’adresse $C0G, et sur un Ile de
64 Ko, en se placant sur la carte langage. Cette der-
niére version a été retenue pour la commercialisa-
tion. Elle se trouve sur la disquette sous la forme
d'un fichier du type SYS, qui ne peut étre que
“booté”. PRODOS se loge sur les 16 Ko de la carte
langage d'un Apple //+ ou en haut de la mémoire
sur un Ile et un Ilc, et fixe HIMEM 4 $BFQG. Lors-
que PRODOS est chargé en mémoire, les comman-
des exécutées sont des commandes PRODOS. Lors-
que celui-ci recoit une commande qu'il ne peut pas
interpréter, il la transmet 4 |'AppleSoft qui teste sa
validité avant de Iutiliser. Si, pour une raison quel-
conque, l’ordre n'aboutit pas, un message d’erreur
sera renvoyé par le systéme Basic.
Ecrit en langage machine, il est l'interface entre un
programme AppleSoft et le fichier PRODOS. I! per-
met de passer la main au Basic pour exécuter des
commandes de I'interpréteur AppleSoft. II est logé
aux adresses $9600-$BEFF. Comme PRODOS,
BASIC.SYSTEM est un fichier du type SYS, unique-
ment “bootable”. BASIC.SYSTEM est sollicité en
mémoire, 4 chaque fois qu'il s‘agit de traiter des
programmes du type AppleSoft. Lorsque celui-ci est
chargé en mémoire centrale, HIMEM est fixé a
l'adresse équivalente du DOS 3.3 — $9600 —
ALLOCATION DES BLOCS
SUR UNE DISQUETTE ProDOS
Aprés le formatage d'une disquette ProDOS par le
programme utilitaire FILER, celle-ci présente un
certain nombre de blocs occupés et de blocs libres.
Le tableau qui suit refléte l'image type d'une dis-
quette aprés formatage sous ProDOS.
Pistes 35 (0-34)
Secteurs par piste 16 (0-15) |
| Secteurs par disquette 560
| Bytes par secteur — 256
| Bytes par piste 7 4096
| Bytes par disquette 143 360
f re
280 blocs par disquette de 0 4 279 ($060-$117)
8 blocs par piste de 0 47 ($00-$07)
1 bloc 2 secteurs
| 512 bytes par bloc ~ de 0.8511 ($000-SIFF).
Un bloc se divise en deux parties : partie gauche et
partie droite. Les 256 premiers bytes d'un bloc sont
ceux de gauche, les 256 bytes suivants, ceux de
droite.
Capacité d'une disquette aprés formatage :
Blocs disponibles : 273 blocs
Bytes disponibles : 139 776 bytes.
A ce total, il faudra cependant retrancher le nom-
bre de blocs nécessaires pour la sauvegarde des
fichiers PRODOS et BASIC.SYSTEM, indispensables
pour démarrer le systéme.
PRODOS version 1.0.2 : 31 blocs
BASIC.SYSTEM version 1.0.2 : 21 blocs
Total = 52 blocs ou 26 624 bytes
Bytes réellement disponibles: 139776 - 26624 = 113 152 bytes.
NOTION DE VOLUME
BIT-MAP ET SYSTEM BIT-MAP
Deux Bit-Map sont disponibles pour le systeme Pro-
DOS :
— System Bit-Map — SBM — de la page globale de
PRODOS, aux adresses $BF59-SBF6F
— Volume Bit-Map — VBM — sur la disquette,
Fichiers systemes
Utilisateur
Le bloc $02 est généralement désigné sous |'appel-
lation Key-Block et les blocs $03 4 $05 sont appelés
Non Key-Block.
| Blocs 0-1 Loader _ |
Bl - -Di
locs 2-5 Volume-Directory bloc é:
| Bloc 6 Bit-Map
Blocs 7-279 Volume-Subdirectory
Pour le traitement des fichiers texte, ProDOS gére
automatiquement les pages allouées aux tampons
mémoire par la commande OPEN. Le programmeur
peut, avant |'implantation d'un programme en
mémoire centrale, solliciter par exemple une routine
qui pourra fournir la premiére page disponible.
SnaneansneccnnsececassseressnzssesesssssasessnsennrenneeeeeoeunsessEsesoEsesosesoensosseesenannansonece
22
GUY-HACHETTE
a ae re a
+
Implantation d'un programme en mémoire :
— ll sera au préalable chargé au bas de la zone
mémoire non encore utilisée par le systéme.
— A ce programme sera associé un sous-
programme Move, qui aura une double fonc-
tion : modifier la System Bit-Map et le pointeur
de HIMEM, puis placer le programme 4 son
adresse définitive.
ProDOS suit les mémes régles de chargement, lors
du boot d'une disquette.
nés 4 la valeur FF (255 en décimal), les blocs 8 4 279
sont inutilisés (8 * 34 = 272 blocs). Le total des
blocs libres est : 272 + 1 = 273 blocs.
$00 [01 | FF) FF) FF\FF) FF|FF) FFIFF| FF FF FF FF FF FF) FF
sio [rr | FF) FF] Fe|FF FF|FF | FF|FF| FF (FF FF |FF FF |FF| FF
$20 | FF | FF] FF) 00/00 | 00} 00 | 00/00] 00 |00 J00 00 j00 |00| oo
Cest la table d’allocation des blocs d'une disquette
— bloc 6. Une disquette 35 pistes, utilise les 35 pre-
miers bytes du Volume Bit-Map pour gérer l’occu-
pation de ses blocs. Chaque type de la table mar-
que 8 blocs, ce qui fait un total de :
35 * 8= 280 blocs.
La table occupe 512 bytes (1 bloc) et peut gérer ala
limite : 8 * 512 = 4096 blocs, mais seuls 280 blocs
sont utilisés par les versions actuelles de ProDOS.
Chaque bit représente un bloc : si le bit est 41, le
bloc est libre, si par contre il est a G, le bloc est
occupé.
| Byte $01 = Piste $01 = Blocs $008-S00F
Byte $02 = Piste $02 = Blocs $010-$017
Byte $22 = Piste$22 = Blocs $110-$117
La valeur du byte est donnée suivant la position
relative dans la table d'occupation, au niveau de la
disquette ProDOS.
Représentation d'un byte :
Byte $00
Blocs $006-$007 01234567
00000001 =@1
Le bloc $007 est libre et les blocs $000-$006 occupés.
Byte $01
Blocs $068-$00F
89ABCDEF
VVtV10101 = FF
Les blocs $008-$G0F sont tous libres.
Le premier byte de la Bit-Map affiche @1 et désigne
un bloc libre : c'est le bloc 7 de la disquette. Les
trente-quatre bytes suivants, sont tous position-
$30 | 00 | 00| 00} 00/00 | 00/00 | 00|00/ 00 |00 }00 |00 }00 |00| 00
$40 | 00 | 00/ 00| 00/00 | 00} 00 | 00}00] 00 |00 }00 }00 }00 |00| 00
$5 | 00 | 00) 00) 00)00 | 00/00 | 00/00} 00 |00 |00 /00 |00 |00} 00
$60 } 00 | 00} 00| 00/00 | 00/00 | 00/00/00 {00 |00 |00 |00 }00) 00
$70 00 | 00) 00) 00/00 | 00}00 | 00}00} 00 |00 |00 |00 }00 }00) 00
$80 | 00 | 00) 00} 00) 00 | 00/00 | 00} 00} 00 }00 )00 |00 }00 }00| 00
$99 | 00 | 00} 00) 00/00 | 00/00 | 00/00] 00 |00 00 }00 |00 | 00) 00
$AG } 00 | 00 | 00| 00/00 | 00|00 | 00/00} 00 |00 |00 |00 }00 }00) 00
|s80 [00] 00/ 00/ 00/00 | 00/00 | 00/00] 00 |00 {00 |00 |00 fo0| 00
$C |00 | 00) 00} 00) 00 | 00/00 | 00}00/ 00 }00 /00 |00 }00 | 00) 00
$D9 } 00 | 00} 00} 00/00 | 00/00 | 00} 00} 00 |00 )00 |00 }00 }00} 00
$€G |00| 00| 00| 00]00 | 00/00 | 00/00} 00 |00 |o0 |00 |00 00 00’
$FO {00 | 00] 00/00} 00 | 00}00 | 00} 00} 00 |00 |00 |00 |00 |00| 00
ORGANISATION INTERNE DE ProDOS
TABLES DES MATIERES
— Volume-Directory
— Volume-Subdirectory
ORGANISATION DU FICHIER PRODOS
— Version 1.0.2
Par comparaison au DOS 3.3, le fichier PRODOS
n‘occupe pas de place bien précise sur la surface de
la disquette. Pour cette raison, il sera fait réfé-
rence 4 une position relative (0 dans notre cas) par
rapport 4 une valeur arbitraire donnée au bloc de
départ. L'adresse de départ, $2000 dans notre lis-
ting, est celle ov le fichier PRODOS est implanté
par le Loader au moment du boot de la disquette et
juste avant l'appel de la routine Move.
ADRESSES ET VECTEURS DU MLI
* Routine Move — Relocator.
Sous-programme pour transférer PRODOS dans la
carte langage.
Blocs 04: adresses $2000-$29FF.
* RAM Disk-Driver
Bloc 5: adresses $2AQ0-$2BFF. (suite page 24)
‘eeeeeeneeeeeenseeseese ses eeessessssesssoccesssCeeEEeEseHe see oReeTeEReeeeeneEeeeeneeeeeReeeeeeeeO
TREMPLIN MICRO
23
— RAM Disk-Driver (64 Ko auxiliaires $0200-$03FF).
Bloc 6: partie gauche, adresses $2C00-$2C7E.
— RAM Disk-Driver ($FFGQ-$FF7E Bank 1).
Bloc 6: partie gauche, adresses $2C7F-$2CFF.
— Bytes nuls.
* Le MLI — Machine Language Interface.
Bloc 6 : partie droite, adresses $2D00-$2DFF.
— Début du MLI ($D000-$DGFF Bank 1).
Blocs 7-21 : adresses $2EQ0-$4BFF.
— MLI ($D100-SEEFF Bank 1).
Bloc 22: partie gauche ; adresses $4C00-S4CFF.
— Fin du MLI (SEFQG-SEFFF Bank 1).
Bloc 22 : partie droite ; adresses $4D00-$4D05.
— MLI ($FO0G-$FO05 Bank 1).
Bloc 22: partie droite ; adresses $4D06-$4DFF.
— Bytes nuls.
* La Page Globale de PRODOS
Bloc 23 :partie gauche ; adresses $4E00-S4EFF.
— Page Globale pour appel de PRODOS dans Ia carte
langage adresses $BEQQ-SBEFF.
Bloc 23: partie droite ; adresses $4FOO-S4FFF.
— Page Globale du BASIC.SYSTEM ($BF00-$BFFF).
* Les Interruptions
Bloc 24: partie gauche ; adresses $5000-$5069.
— Routine Horloge ($F142-$F1AB).
Bloc 24: partie gauche ; adresses $506A-$507C.
— Date ($FIAC-$F2GE).
Bloc 24 : partie gauche ; adresses $507D-$509A.
— Bytes nuls.
Bloc 24 : partie gauche ; adresses $509B-$50EB.
— Interrupt (SFF9B-SFFEB).
Bloc 24 : partie gauche ; adresses $50EC-$50F9.
— Bytes nuls.
Bloc 24: partie gauche ; adresses $50FA-S50FF.
— NMI, IRQ et Reset ($FFFA-SFFFF).
Bloc 24 : partie droite ; adresses $5100-S51FF.
— Bytes nuls.
© Le Disk-Driver
Bloc 25 : partie gauche ; adresses $5200-$5395.
— Disk-Driver ($F800-$F995).
Bloc 25: partie gauche ; adresses $5396-$53FF.
— Données du Disk-Driver ($F996-$F9FF).
Bloc 25: partie droite ; adresses $5400-$54FF.
— Table des nibbles (SFAGO-SFAFF).
Bloc 26 : partie gauche ; adresses $5500-$5572.
— Bytes nuls.
Bloc 26 : partie droite ; adresses $5573-$5584.
— Données Disk-Driver ($FB74-SFB84).
Bloc 26 : partie droite ; adresses $5585-$55FF.
— Disk-Driver ($FB85-SFBFF).
Bloc 27 : adresses $5600-$57FF.
— Disk-Driver ($FCOG-$FDFF).
Bloc 28 : partie gauche ; adresses $5800-58BD.
— Disk-Driver ($FEGQ-$FEBD).
Bloc 28 : partie gauche ; adresses $58BE-$58FF.
— Bytes nuls (SFEBE-SFEFF).
* La routine REBOOT
Bloc 28 : partie droite ; adresses $5900-$59FF.
— Début de Reboot ($D100-$D1FF Bank 2).
Bloc 29 : adresses $5AGG-$5BFF.
— Routine Reboot ($D200-$D3FF Bank 2).
TABLE DES MATIERES PRINCIPALE
Le Volume-Directory — Entrée du nom d'un Volume.
Ce type de Directory est implanté aux blocs 0602-
0005 de la disquette. Par comparaison au Subdirec-
tory, le Volume-Directory ne permet pas sa dupli-
cation. Le Volume-Directory occupe 4 blocs sur une
disquette standard au format 5 pouces 1/4, pou-
vant contenir un total de 51 noms de fichiers.
Les quatre premiers bytes de chaque bloc du Direc-
tory sont réservés pour les pointeurs arriére et
avant — Backward et Forward. Le pointeur avant
— Forward Pointer — désigne 4 I'intérieur du
Directory, le numéro du bloc qui précéde son pro-
pre bloc.
Le pointeur arriére — Backward Pointer — désigne
l'intérieur du Directory, le numéro du bloc qui suit
son propre bloc.
Au niveau du Key-Block, bloc 0002, le pointeur
arriére affublé de la valeur 0000 signifie que c'est
le premier bloc du Directory.
Au niveau du bloc 0005, Non Key-Block, le pointeur
avant affublé de la valeur 0000 signifie que c'est le
dernier bloc du Directory.
VOLUME-DIRECTORY
Key Block Header Volume Name — Block 00 02
Le premier nom qui figure dans la table des matié-
res principale (Volume -Directory) est celui du
Volume sauvegardé lors du formatage de la dis-
quette par le programme FILER. Le Volume-
Directory permet la sauvegarde d'un certain nom-
bre de paramétres particuliers.
Position contenu
$00-$01 Pointeur arriere — LByte, HByte : 00 0G ;
G00 signifie que c'est le premier bloc.
$02-$03 Pointeur avant — LByte, HByte : 03 G0 ;
$0003 pointe le bloc 3 du Directory.
$04 Storage Type/Name Length.
4 bits de poids fort qui caractérisent la sau-
vegarde d'un fichier.
4 bits de poids faible qui désignent Ia lon-
gueur du nom du Volume. Exemple : $F6 ou
F = Fichier Volume et 6 = 6 caractéres.
Saarland alia lalallala at ee ate deel edd dededetaldedeteldadeldeledaldadadatededatdedaddedaladcblddadidaed
24
GUY-HACHETTE
—~+—2s-§
$05-$13 Nom du fichier — USERS.DISK par ex.
$14-$1B Bytes réservés pour une application
future. Positions
N° d'ordre des entrées
$1C-$1F Date et heure de la sauvegarde d'un Hex. Déc.
nom du Volume-Directory. Entrée 1 $004 G04
$20-$21 Versions de PRODOS. Entrée 2 $028 943
$22 Access Byte. Byte daccés au fichier. icicles $os2_ | 982
Exemple: $C3 = Lecture/écriture Entrée 4 $079 121
permise. Entrée 5 $0AG 166
$23 Nombre de bytes alloués @ chaque Entrée 6 SOCF 199
entrée du Volume-Directory : Entrée:7. $OEE 238
— 39 bytes pour chaque entrée Volume.
Entrée 8 $115 277
$24 Nombre d'entrées possibles par bloc. Entrée 9 $13C B16
— 13 entrées par bloc.
= p Entrée 10 $163 355
$25-$26 Total des noms de fichiers actuelle- Entrée 11 $18A 394
ment sauvegardés dans la table des
matiéres ou Volume-Directory : Entrée 12 $181 433
— maximum 51 fichiers. Entrée 13 $1D8 472
$27-$28 Pointeur de la Bit-Map
— G6 00 = 0006.
$29-$2A C é totale de la di Bl VOLUME-DIR' Ry
ts ité tot i - :
Crm gna eece™ S| |) donkey oes
. Deuxiéme bloc du Directory
— Block 00 03
VOLUME-DIRECTORY Position contenu
Position relative des entrées $00-$01 Pointeur arriére — LByte, HByte. Pointe le
y" y'
Configuration d'une entrée
La suite de la table des matiéres, aprés la sauve-
garde des paramétres du Volume-Directory, per-
met la gestion de 51 noms de fichiers. Le bloc 0002
ou Key Block peut contenir 12 noms de fichiers (13
moins celui du nom du Volume) et les 3 blocs sui-
vants, 13 noms chacun, ce qui fait un total de :
(13 * 3) + 12 = 51 noms de fichiers.
Pointeurs avant et arriére 4 bytes
13 entrées de noms de fichiers 507 bytes
Total 511 bytes
Le byte la position 512 est inutilisé au niveau des 4
blocs du Volume-Directory et contient la valeur 00.
Chaque bloc d'une table des matiéres se divise en
un certain nombre d'entrées de noms de fichiers,
dont chacune peut étre désignée par un pointeur
relatif : pointeur de début $00 ; pointeur de fin $26
; total £$27, soit 39 bytes par entrée.
bloc précédent : 62 00 ; 0002 = bloc 02.
$02-$63 Pointeur avant — LByte, HByte. Pointe le
bloc suivant : 64 00 ; $0004 = bloc 04.
$04-$2A Premiére entrée d'un nom de fichier.
$2B-$51 Deuxiéme entrée d'un nom de fichier.
$1D8-$1FE Trainin entrée d'un nom de fichier.
$1FF Inutilisé.
J Troisiéme bloc du Directory
— Block 00 04
$00-$01 Pointeur arriére — LByte, HByte.
Pointe le bloc précédent : 03 00 ; 0003
= bloc 03.
(suite page 26)
ala ah a aaa ahaa edad eel dale delete adele
25
TREMPLIN MICRO
$02-$03 Pointeur avant — LByte, HByte. Pointe le
bloc suivant : 05 00 ; 0005 = bloc 05.
$04-2A Premiére entrée d'un nom de fichier.
$2B-$51 Deuxiéme entrée d'un nom de fichier.
$1D8-$1FE —Treiziéme entrée d'un nom de fichier.
$IFF Inutilisé.
Quatriéme bloc du Directory
— Block 00 05
$00-$01 Pointeur arriére — LByte, HByte.
Pointe le bloc précédent : 64 G0 ; 0004
= bloc 04.
$02-$03 Pointeur avant — LByte, HByte. Pointe
le bloc suivant. Ce pointeur est nul :
dernier bloc.
$04-$2A Premiére entrée d'un nom de fichier.
$2B-$51 Deuxiéme entrée d'un nom de fichier.
$1D8-$1FE —Treiziéme entrée d'un nom de fichier.
SIFF Inutilisé.
VOLUME-DIRECTORY
Entrée d'un nom de fichier
La position relative des paramétres de chaque
entrée du nom d'un fichier dans la table des matié-
res est donnée par rapport 4 chaque entrée possi-
ble. Chaque pointeur débute avec la valeur $00 et
termine avec la valeur $26 (£$27 ou 39 bytes alloués
4 chaque fichier). Chaque bloc peut contenir 13
noms de fichiers accompagnés de ses caractéristi-
ques, le byte 512 étant toujours inutilisé.
Une table des matiéres principale peut contenir un
total de 52 noms de fichiers, le premier nom étant
réservé a celui du nom du Volume de la disquette.
j Entrée d'un nom de fichier
Positions relatives $00-$26
Position Contenu
$00 Storage Type/Name Length.
4 bits de poids fort ayant pour valeur la
caractéristique de sauvegarde du
fichier.
4 bits de poids faible qui désignent la
longueur du nom du fichier.
$01-SOF Nom du fichier programme — 15
caractéres maximum.
$10 File Type. Type du fichier — $0B = BIN.
$11-$12 Pointe le premier bloc du fichier.
1200 = 0012 ; pointe le bloc $0012.
$13-$14 Blocks Used. Nombre total de blocs
occupés par le fichier : 45 00 = 0045 ;
blocs occupés = $0045.
$15-$17 EOF Pointer. Longueur d'un fichier texte.
Fin d'un fichier binaire ; 550000 =
$000055 bytes de longueur.
$18-$1B Date & Time. Date et heure de création
du fichier.
Format : 60 G6 G0 Gd.
— 2 bytes pour la date et 2 bytes pour
l'heure, avec une carte horloge.
$1C-$1D Versions de PRODOS.
SIE Access Byte. Paramétre d’accés au
fichier.
$1F-$20 Aux. Info. Information auxiliaire :
adresse d'implantation du programme
par exemple.
$21-$24 Date & Time. Date et heure de la modi-
fication.
Format : 00 00 00 G0.
— 2 bytes pour la date et 2 bytes pour
l'heure, avec une carte horloge.
$25-$26 Pointe le Key-Block d'un Directory
dans lequel se trouve sauvegardé le
nom du fichier.
TABLE DES MATIERES AUXILIAIRE
Volume-Subdirectory
Cette table des matiéres particuliére est souvent
désignée sous les termes Subdirectory, sous-
catalogue ou encore table des matiéres auxiliaire.
Ce type de fichier, désignant cette table des matié-
res, ne peut étre créé que par la commande
CREATE. Le nom du fichier Subdirectory se trouve
sauvegardé dans le Volume-Directory, il pointe le
Volume-Subdirectory. Ce dernier, appelé trés sou-
Ses encennseunnnanasscassenssessessessssrssrssenseoneesuseeozenenseenneeneneeeneee ee oeeeeeeeesoEEseseo
26
GUY-HACHETTE
4
vent Key-Block Subdirectory, occupe au départ un
bloc. Il est possible de sauvegarder dans ce nou-
veau Volume, des fichiers programmes ou Subdi-
rectory. Le fichier ainsi créé sera du type DIR et
aura comme Storage byte la valeur DC, tandis que
dans le Volume-Subdirectory, le nom du Volume
aura comme valeur EC. Les quartets D et E repré-
sentent Storage Type, tandis que le quartet C équi-
vaut 4 Name Length.
Entrée d'un nom de Volume du Subdirectory
Header-Entry — Key-Block
Les 4 premiers bytes sont réservés aux pointeurs
arriére et avant, suivant le méme principe que la
représentation du Volume-Directory. Deux bytes
pour le pointeur arriére — Backward Pointer — et 2
bytes pour le pointeur avant — Forward Pointer. A
la suite, se trouvent les 39 bytes de la premiére
entrée de la table des matiéres auxiliaire —
Volume-Subdirectory.
En opposition au Volume-Directory, le Volume-
Subdirectory n’a qu'un nombre limité de blocs.
lorsque le Subdirectory est créé par CREATE,
BASIC.SYSTEM + commande MLI, le systéme lui
attribue un seul bloc. S'il arrive par la suite que
plus de 13 noms de fichiers doivent y étre sauve-
gardés, un deuxiéme bloc sera chainé au premier
(nom du Volume-Subdirectory compris). Etant
donné la structure de chainage d'un Subdirectory,
les blocs ne peuvent en aucun cas se suivre dans le
sens ascendant.
Position Contenu
$00-$01 Pointeur arriére — 00 60 = $0000.
$02-$03 Pointeur avant — 00 00 = $0000.
$04 Storage Type/Name Length.
4 bits de poids fort qui caractérisent le
type de sauvegarde.
4 bits de poids faible qui désignent la
longueur du nom du Volume-Sub-
directory.
$05-$13 Nom du Volume-Subdirectory — SUB-
DIRECTORY par exemple.
Maximum 15 caractéres.
$14-$1B Le nom de "uHUSTON !" est sauve-
gardé 4 cet endroit, mais i! n'a aucune
signification précise.
$1C-S1F Create Date & Time. Date et heure de
création du Volume-Subdirectory.
$20-$21 Versions de PRODOS.
$22 Access Byte. Paramétre d’accés au
fichier — $C3.
$23 Longueur d'une entrée dans la table
des matiéres — 39 ou £$27 bytes.
$24 Nombre d’entrées possibles par bloc
— 512/39 = 13 ov OD.
Nombre de fichiers actuellement sau-
vegardés dans le Volume-Subdirectory
— 1 00 = £$0001 fichier.
$25-$26
Parent Pointer. Numéro du bloc de la table
des matiéres ol) est sauvegardé le nom du
fichier qui pointe ce Volume-Subdirectory.
0200 = $0002 = bloc 2, si le nom du
fichier se trouve sauvegardé dans le bloc 2.
$27-$28
$29 Parent Entry. Numéro de l'entrée dans
le bloc parent.
$2A Longueur d'une entrée dans la table
des matiéres du parent, c’est-a-dire le
Directory dans lequel se trouve le nom
du fichier Subdirectory.
Sous le systeme d’exploitation DOS 3.3, le bloc
index (Index Block) est référencé sous le terme de
Track Sector List.
— bloc index = 2secteurs = 512 bytes.
— Une disquette ProDOS est composée de blocs
de données d'une taille de 512 bytes chacun.
BLOCS REPERTOIRES : Index Blocks.
ll existe deux types de blocs index :
— Master Block. C'est un bloc répertoire principal, qui
peut pointer 128 blocs répertoires auxiliaires (Index
Blocks) dont chacun peut 4 nouveau pointer 256 blocs
de données. Ce type de bloc pointe toujours un bloc
index, mais jamais un bloc de données d'un pro-
gramme. Un fichier avec un Storage Type de valeur 3
contient un Master Block qui pointe un ou plusieurs
blocs index. Cette limitation de blocs index est due
au maximum de 24 bits alloués au pointeur EOF (lon-
gueur d'un fichier). La grandeur d'un tel pointeur
est 128 * 256 * 512 = 16777226 = 16 mégabytes,
ov 128 représente le maximum de blocs index, 256 le
maximum de blocs de données et 512 le nombre de
bytes par bloc. Un Master Block ne se différencie pas
visuellement d'un bloc index, sa structure interne
reste la méme.
— Index Block. C'est un bloc répertoire auxiliaire
encore appelé bloc index ; il se compose d'un bloc
de 512 bytes et pointe un maximum de 256 blocs de
données. Ce type de bloc pointe toujours un bloc de
données. Un fichier avec un Storage Type de valeur 2
contient un seul bloc index, tandis qu’avec un Sto-
rage Type 3, la capacité est de 128 blocs index.
err oe
TREMPLIN MICRO
27
LES TAMPONS ALLOUES A PRODOS
FCB, VCB et VBM
ProDOS sauvegarde en mémoire différentes don-
nées auxquelles les fichiers et les périphériques
pourront se référer par la suite. Ce sont autant de
renseignements placés dans des tables bien struc-
turées, o chaque élément d'une donnée a une
signification précise.
$F000-SFOFF
$100 (256) bytes pour la sauvegarde des
variables des sous-programmes MLI.
SFIQG-SFIFF $100 (256) bytes pour la sauvegarde du
préfixe (PREFIX) et du chemin actuel
(Pathname).
$F200-SF2FF $100 (256) bytes pour la sauvegarde du
Volume Control Block (VCB) : 8 entrées
maximum, 4 raison de $20 (32) bytes par
entrée.
$F300-SF3FF $100 (256) bytes pour la sauvegarde du
File Control Block (FCB) : 8 entrées maxi-
mum, 4 raison de $20 (32) bytes par
entrée.
$F4Q0-SFSFF $200 (512) bytes pour la sauvegarde de
la Volume Bit-Map (VBM) actuelle.
$F600-SF7FF
$200 (512) bytes pour la sauvegarde des
Volume-Directory et Volume-Subdirec-
tory actuels.
C'est un espace mémoire réservé pour les entrées
des fichiers de données, ou de Directory ; il se
trouve aux adresses $F30G-$F3FF. Cette structure
se trouve uniquement en mémoire vive (RAM) et
n'a rien de commun avec les entrées d'un fichier de
données ou de Directory d'une disquette.
Lorsqu'un fichier est ouvert par la commande
OPEN, qu'il s'agisse d'un fichier de données, de
Directory ou de Subdirectory, le systeme sauve-
garde certaines caractéristiques de ce fichier 4 un
emplacement mémoire appelé File Control Block —
FCB. Divers renseignements sont alors disponibles
pour ProDOS : le numéro du bloc d'entrée du
Volume-Directory, le numéro du premier bloc de
données, le pointeur 4 I'intérieur d'un fichier
(Mark), le pointeur de la fin d'un fichier (EOF), le
byte de référence du périphérique en ligne (Unit
Number), etc.
Un fichier de données ProDOS est toujours créé par
la commande MLI CREATE. Le FCB a une capacité
maximale de 8 entrées, ce qui correspond 4 une
zone mémoire ayant une possibilité de sauvegarde
pour les caractéristiques de 8 fichiers.
Un maximum de 8 fichiers peuvent étre ouverts
simultanément sous ProDOS, d’ou le nombre maxi-
mum de 8 entrées autorisées. Chaque entrée
ampute la mémoire de 32 bytes, ce qui totalise 256
bytes pour l'espace mémoire alloué 4 FCB. Si l'on a
une suite de plusieurs entrées dans la table FCB,
elles s'échelonnent d'une maniére graduelle et pro-
gressive, c'est-a-dire que la premiére entrée
débute a I’adresse $F300, la deuxiéme entrée
l'adresse $F320, etc.
Pos. Adres.
Signification
$00 F300 File Reference Number. Un byte : utilisé
comme référence interne du MLI, indi-
que le numéro d’ordre dans les entrées
de FCB.
Unit Number — DSSS00G0. Un byte : ren-
seigne le MLI sur le périphérique en ligne.
$01 F301
$02 F302 Key Block Number. Deux bytes qui indi-
quent le numéro du bloc — Key Block —
du Directory ol se trouve sauvegardé le
nom d'un fichier nommé DATAI par
exemple.
$04 F304 Directory Block. Deux bytes qui indi-
quent le numéro du bloc ol se trouve
réellement sauvegardé l'entrée du
fichier au nom de DATAI cité comme
exemple.
$06 F306 Entry Number. Un byte : DATA2 est la
deuxiéme entrée 4 l'intérieur de ce
méme bloc — DATA2 étant un nom de
fichier cité comme exemple.
Storage Type. Un byte : il caractérise le
genre du fichier DATA ; ce n'est en fait
qu'une partie de Storage Type, et plus
précisément 4 bits qui sont utilisés. Le
byte pouvant prendre les valeurs suivan-
tes : $01, $02, $03, $0D, $GE ou SOF.
Statut byte. Un byte : il représente
V'image binaire de plusieurs données
(Index bloc modifié, bloc de données
modifié, fichier modifié depuis que la
commande OPEN a été déclarée, etc.).
$07 F307
$08 F308
$09 F309 Access byte. Un byte ; il caractérise la
facon dont un fichier sera abordé par la
seauuaeseusuerssoensanenenessearssssessssonessEeTEE EST sEsesSeEesesseAsosEcenseeessesssenecssneseeesees
GUY-HACHETTE
suite ; écriture autorisée, lecture seule,
etc.
ses $F200-$F2FF. Comme FCB, cette structure
existe uniquement dans la mémoire de |'Apple et
n‘a rien de commun avec les entrées des fichiers de
$0A F30A — Newline Character. Un byte : il est déter- i i
miné par la fonction Aci et dési- connees ev Directory dels aisquette:
gne le dernier caractére @ lire dans un 8 entrées au maximum sont disponibles, et cha-
fichier. cune occupe 32 bytes, ce qui permet au systéme de
mémoriser 8 lecteurs de disquettes. L’occupation
$0B F30B Buffer Index. Un byte : numéro d’ordre de l'espace mémoire alloué au VCB est dégressive,
du tampon dont le pointeur se trouve c'est-a-dire que la premiére entrée se fera a
sauvegardé dans la page globale de l'adresse $F2EG, la seconde 4 l'adresse $F2CG, etc.
FRODOS. La raison d’étre de VCB est due essentiellement 4
$0C F30C Data Pointer. Deux bytes (LByte, HByte) : . notion ne Nolume des chquettes meee en place
pointent le premier bloc des données du Nala Se Eee SU ONS» Serr auanue.le. ee 2
fichier DATA. olume d'une disquette, placé en en-téte d'un
1c
Volume-Directory, sera copié aux bytes relatifs
SOE F3GE Index Block Number. Deux bytes (LByte, $01-$OF (1-15) de l'entrée VCB, tandis que le
HByte) : cette paire de bytes est nulle si numéro de bloc du Key Block sera copié en $16 (22).
le fichier DATA ne posséde pas de réper-
toire des blocs, fichier de moins de 512 | Entrée d'un Volume Control Block —VcB |
bytes de longueur, sinon les deux bytes
indiquent le nombre de blocs index. Pos. Adres. Signification
$10 F310 First Block. Deux bytes : c'est le nu- $00 F2E0 Name Length. Un byte : désigne Ia lon-
méro du premier bloc qui se trouve en gueur du nom d'un fichier.
mémoire.
$01 F2E1 Name. Nom du Volume-Directory, avec
$12 F312 Pointeur MARK. Trois bytes (LByte, un maximum de 15 caractéres.
MByte, HByte) : pointent la position rela-
tive dans un fichier. $10 F2FO Unit Number — DSSSG000. Un os qui
$15 F315 Pointeur EOF. Trois bytes (LByte, MByte, copselane sus /e‘perinncriave en tae
HByte) : désignent la longueur d'un
fichier texte, qui correspond 4 la position $11 F2F1 Flag Byte — Drapeau. Un byte qui
absolue dans un fichier. informe que le fichier est ouvert ou
SSS Se ea. fermé : dans le premier cas le byte pren-
$18 F318 Blocks Used. Deux bytes (LByte, HByte) : dre: corvme valeur £680 as dons le'sacond
désignent le nombre de blocs occupés cas £$00
par le fichier, i
a sc icgehiaee $12 F2F2 Total Blocks. Deux bytes qui désignent le
altel Drei re (nutes: nombre total des blocs alloués 4 la dis-
$1B F31B Level. Un byte : utilisé par les comman- quette ; c'est la capacité maximale de
des CLOSE et FLUSH : c'est la copie de sauvegarde — $0118 = 280 blocs pour
Vadresse $BF94 de la page globale de un disque 35 pistes standard.
PRODOS.
$14 F2F4 Free Blocks. Deux bytes qui renseignent
SIC F31C Flag Byte — Drapeau. Un byte : prend la sur le nombre de blocs disponibles de la
valeur £$00, pour un fichier fermé et disquette.
£$80 pour un fichier ouvert ou modifié.
- $16 F2F6 Blocks Number Key-Blocks. Deux bytes
$1D F31D Deux bytes inutilisés. qui renseignent sur Ja position du Key
SIF FSIF Newline Enable Mask. Un byte de mas- Gear — (soae2
que, utilisé par NEWLINE ($C9),
$18 F2F8 Deux bytes inutilisés.
[ Volume Control Block — vee | SIA F2FA VBM Block. Deux bytes (LByte, HByte)
Volume Control Block désigne les entrées des péri-
phériques (drives) en ligne et se trouve aux adres-
qui pointent le premier bloc de la Bit-
Map — normalement bloc $0006.
(suite page 30)
aaa aa el a a a a aa aaa a ala ella alaalelataitalatel
TREMPLIN MICRO
29
$1C F2FC
BM Extent Number. Un byte qui rensei-
gne sur le numéro — valeur relative du
bloc de la Bit-Map : @0 = premier bloc de
la VBM. VBM Extent est une configura-
tion engendrée par un Volume qui
nécessite plus d'un bloc pour sa Bit-Map.
$1D F2FD Un byte inutilisé.
$IE F2FE File Open. Un byte qui désigne le nom-
bre de fichiers ouverts 4 cet instant.
SIF F2FF Un byte inutilisé.
U'auteur signant ses articles sous la plume de Mar-
cel COTTINI a écrit un certain nombre de livres trai-
tant les sujets les plus divers sur |'informatique
grand public, en particulier LA PRATIQUE DE
L'APPLE II. Parmi ses ouvrages SYSTEME PRODOS
DE L'APPLE II des éditions du PSI est principale-
ment destiné @ I'étude du systéme d’exploitation
ProDOS. Il s‘adresse 4 tous ceux qui désirent sortir
des sentiers battus de la programmation rétro-
grade. Un livre a lire et 4 relire.
Le contréle des connaissances sur Apple
ASSIMIL récidive,
mais cette fois avec espagnol
Qui ne connait pas les fameuses méthodes ASSIMIL... et notam-
ment Le nouvel anglais sans peine ? Qui n‘a jamais eu entre les
mains l'un des populaires petits bouquins du fameux éditeur
international ? ASSIMIL est devenu synonyme — et pas seule-
ment en France — d'auto-apprentissage des langues. II faut
avouer que les auteurs sont passés maitres dans l'art — 6 combien difficile — d’expliquer la
prononciation des mots de chaque langue (cela va de I’anglais 4 I'hébreu, mais en passant
par le chinois, l’arabe, le brésilien, le serbo-croate, l'espéranto... et j’en oublie, tant la liste
est longue). Naturellement, les cassettes facilitent bien les
choses, mais ‘ai connu un jeune professeur qui se familia-
risa avec le russe sans autre guide que le manuel.
ET APPLE?
J'y viens : il vous aide tout sim-
plement 4 contréler vos connais-
sances grace 4 16 programmes,
enregistrés sur 3 disquettes et
vous proposani plus de 500 exer-
cices. Aujourd’hui, ce contréle
concerne l'espagnol, mais la
méme méthode existe en anglais
(nous en avions d’ailleurs parle il
y ade cela quelques mois).
Le but des auteurs est 4 la fois
simple et ambitieux : vous aider
Renseigne: 3
@ assimiler 87 points de gram-
maire, orthographe ou vocabu-
laire de l'espagnol courant,
d'abord en vous présentant la
régle correspondante, ensuite en
vous proposant de résoudre les
exercices d'application.
Le logiciel, réalisé par d’authenti-
ques pédagogues, prévoit bien
entendu les principaux cas
d'erreur ce qui le rend d’autant
plus sympathique.
its ; 11, rue des Pyramides — 75001 PARIS — Tél. : (1) 42.60.40.66.
™ apoie ASSIMIL
exercices d'auto-controle
GUY-HACHETTE
BITIEUX, ENORME,
tique pour un tas de caiculs !
Pierre PRIVAT
NE rapide lecture des lignes 185 & 215 du listage ci-aprés vous donnera un avant-
godt des nombreuses possibilités du BRICO (pensez "BRICOLAGE”), programme de
Pierre PRIVAT (Castres, 81). N’hésitez pas & poursuivre votre examen sommaire, en
vous attardant sur les lignes des divers menus de ce programme. Je vous l’accorde :
on peut lui reprocher de pécher par excés de longueur. Vous reconnaitrez pourtant qu'il
était difficile de concevoir un programme 4 la fois simple et court, mais néanmoins, capable
de présenter tous les avantages de celui-ci. Et puis, qui vous empéche de supprimer une
certaine redondance d'instructions en-utilisant les astuces habituelles ?
Notez au passage, que la disquette TREMPLIN MICRO vous évitera l’ankylose du poignet
qui — je n’en doute pas — vous guette déja !
108 : REM #ee##eeeeK## BRICO, par Pierre PR
IVAT, Oct 1986 #eeeeeee
115 PRINT : CLEAR : HOME : LOMEM: 28755
128 M$ = "Xx"
125 ONERR GOTO 2518
138 D$ = CHR$ (4):BIP$ = CHR (7)
135 PRINT D$;"PRE3": PRINT
148 Mi$ = "(ESC) --) “Retour au menu généra
1"
145 M2$ = “L’unité utilisée est le: *
158 M3$ = "ATTENTION: Utilisez le point a]
a place de la virgule !*
155 PI = 3.1415926524
168:
165 REM ###
178:
175 TA = 15:ST = 8
188 HOME : HTAB 27: PRINT “BRICO,
BRICOLAGE": GOSUB 2690
185 VTAB S: HTAB 14: PRINT “1. -->
run périmétre”
198 PRINT : HTAB 14: PRINT "2, -->
r une surface"
195 PRINT : HTAB 14: PRINT "3. --)
run volume”
208 PRINT : HTAB 14: PRINT "4, --)
r des dosages"
MENU GENERAL ##*
AIDE AU
Calcule
“Calcule
“Calcule
Calcule
8830
SE6B
ecis
271C
2080
1886
265 PRINT : HTAB 14: PRINT "5. --> “Calcule
r la quantité de revetement (sols/murs/
plafond)"
218 PRINT : HTAB 14: PRINT "6, --> “Convert
ir des unités"
215 PRINT : HTAB 14: PRINT "7. --> “Calcule
rt des consommations"
228 PRINT : HTAB 14: PRINT "8. --> “Termine
rn"
225 GOSUB 2435: IF REP < 1 OR REP > 8 THEN
PRINT BIP$: GOTO 225
238 ON REP GOTO 256,585,815,1158,1405,1985,
2218 ,2738
235 :
248 REM #**# PERIMETRES #¥*
245:
258 T$ = "PERIMETRE": GOSUB 1920
255 VTAB 2: HTAB 38: PRINT “CALCULER UN ";T
$
268 GOSUB 2698
265 VTIAB 5: HTAB 29: PRINT "1. --> “Carré”
278 PRINT : HTAB 29: PRINT "2. --)> “Rectang
er
275 PRINT : HTAB 29: PRINT "3. --) “Parallé
logr amme"
288 PRINT : HTAB 29: PRINT "4. --) “Triangl
e"
285 PRINT : HTAB 29: PRINT "S. --) “Trapeze
298 PRINT : HTAB 29: PRINT "6. --) “Cercle”
6696
1369
O1EB
665
3642
883A
963A
AEF
B928
9FBI
4944
asia
CS
530D
E108
8037
eennnananaeneensoeenesenessssseorssasscassosoenssnasassessssossssssssousensnecseeosseanasennonneeneees
TREMPLIN MICRO
31
—_
eR D Rw eeeesnassesn Bes eves senoEDDeNsssEansssOR Ness CORSE TEN sEELeCETEEEsLoEese ones seovessEssoeEEeeaEEES
295 PRINT : HTAB 26: PRINT M$
386 GOSUB 2435: IF REP < 1 OR REP > 6 THEN
PRINT BIP$: GOTO 368
385 ON REP GOTO 325,355,355, 385,430,475
318:
315 REM ##* PER. CARRE tt
328:
325 HOME : HTAB 38: PRINT T$;" D’UN CARRE":
GOSUB 2718
338 VTAB 18: HTAB 15: INPUT “Longueur d’un
coté ? ";C: IF C <¢ = THEN PRINT BIP
$: GOTO 338
335 P = C * 4: GOSUB 2538: GOSUB 2478: GOTO
325
348 :
345 REM ##* PER. RECTANGLE *##
358:
355 HOME : HTAB 16: PRINT T$;" D’UN RECTANG
LE QU D’UN PARALLELOGRAMME": GOSUB 2718
368 VTAB 8: HTAB 15: INPUT “Longueur ? ";LO
: IF LO ¢ = @ THEN PRINT BIP$: GOTO 3
68
365 VTAB 18: HTAB 15: INPUT “Largeur ? ";LA
: IF LA ¢ = 8 THEN PRINT BIP$: GOTO 3
65
378 P = (LO + LA) * 2: GOSUB 2538: GOSUB 24
78: GOTO 355
375 :
386 REM ##* PER. TRIANGLE ##*
385 :
398 HOME : HTAB 28: PRINT T$;" D’UN TRIANGL
E*: GOSUB 2718
395 VTAB 9: HTAB 15: INPUT “Lonqueur du fer
coté 2? ";Cl: IF Cl < = @ THEN PRINT
BIP$: GOTO 395
488 VTAB 11: HTAB 15:
e coté ? "3C2: IF C2 ¢
BIP$: GOTO 468
485 VIAB 13: HTAB 15: INPUT “Longueur du 3n
e coté ? ";C3: IF C3 < = 8 THEN PRINT
BIP$: GOTO 485
418 P= Ci + C2 + C3: GOSUB 2538: GOSUB 247
@: GOTO 398
“is:
428 REM *** PER. TRAPEZE ##*
425:
438 HOME : HTAB 29: PRINT T$;" D’UN TRAPEZE
“: GOSUB 2718
435 VTAB 8: HTAB 15: INPUT “Longueur ler co
té ? "31: IF Cl < = 8 THEN PRINT BIP
$: GOTO 435
448 VTAB 9: HTAB 15: INPUT "Longueur 2me co
té ? *;C2:; IF C2 ¢ = 8 THEN PRINT BIP
$: GOTO 448
445 VIAB 18: HTAB 15: INPUT “Longueur 3me c
INPUT “Longueur du 2m
= 8 THEN PRINT
GECD
8834
8838
0548
8834
C64
0834
6Bi4
C383
9710
8127
073F
oté 2 "303: IF C3 ¢
P$: GOTO 445
458 VTAB 11: HTAB 15: INPUT "Longueur 4me c
oté ? ";C4: IF C4 ¢ = 6 THEN PRINT BI
P$: GOTO 458
455 P= Ci + C2 + C3 + C4: GOSUB 2538: GOSU
B 2478: GOTO 438
468:
465 REM ##* PER, CERCLE ##*
478:
475 HOME :T$ = "CIRCONFERENCE": HTAB 27: PR
INT T$;" D’UN CERCLE": GOSUB 2716
488 VTAB 11: HTAB 15: INPUT "Diamétre du ce
rcle ? "3D: IF D < = THEN PRINT BIP
$: GOTO 488
485 P = D * PI: GOSUB 2538: GOSUB 2478: GOT
0 475
498:
495 REM ##* SURFACES *#*
586:
585 T$ = "SURFACE": GOSUB 1928
518 HTAB 38: PRINT “CALCULER UNE ";T$: GOSU
B 2698
= 6 THEN PRINT BI
S15 VIAB 5S: HTAB 29: PRINT "1. --) “Carré"
528 PRINT : HTAB 29: PRINT "2. --> “Rectang
le*
525 PRINT : HTAB 29: PRINT "3. --) “Parallé
Jogr amme*
538 PRINT : HTAB 29: PRINT "4. --) “Triangl
e"
535 PRINT : HTAB 29: PRINT "5. --) “Trapeze
548 PRINT : HTAB 29: PRINT "6. --) “Cercle”
545 PRINT : HTAB 29: PRINT --) “Sphére*
558 PRINT : HTAB 26: PRINT Mi$
555 GOSUB 2435: IF REP < 1 OR REP ) 7 THEN
PRINT BIP$: GOTO 555
568 ON REP GOTO 588,616,645,688,715,755,775
565 :
578 REM ##*
575:
588 HOME : HTAB 29: PRINT T$;" D’UN CARRE*:
GOSUB 2718
585 VTAB 16: HTAB 15: INPUT "Longueur d’un
coté ? ";C: IF C < = ® THEN PRINT BIP
$: GOTO 585
598. S = C * Cs GOSUB 2578: GOSUB 2478: GOTO
588
595 3
686 REM *#* SURF. RECTANGLE #**
685 :
618 HOME : HTAB 29: PRINT T$;" D’UN RECTANG
LE": GOSUB 2718
615 VTAB 8: HTAB 15: INPUT “Longueur ? ";LO
: IF LO < = @ THEN PRINT BIP$: GOTO 6
SURF. CARRE ##*
EO6F
O16F
0E35
8834
C9E7
£BB7
0838
9E12
6944
O61A
cSt
E108
6037
9888
C78A
0834
8834
Fe2c
A357
8834
8834
FeS4
Salalah adele alee a aerate alae deere ett deed deaeteededded deeded edt et ed
GUY-HACHETTE
32
15
628 VTAB 18: HTAB 15: INPUT “Largeur ? ";LA
: IF LA < = @ THEN PRINT BIP$: GOTO 6
28
625 S$ = LO * LA: GOSUB 2578: GOSUB 2478: GO
TO 618
638:
635 REM ### SURF. PARALLELOGRAMME s+
648:
645 HOME : HTAB 26: PRINT T$;" D’UN PARALLE
LOGRAMME": GOSUB 2718
658 VTAB 8: HTAB 15: INPUT “Longueur ? ";L0
: IF LO < = @ THEN PRINT BIP$: GOTO 6
58
655 VTAB 18: HTAB 15: INPUT “Hauteur ? ";HT
: IF HT < = @ THEN PRINT BIP$: GOTO 6
55
668 S = LO * HT: GOSUB 2578: GOSUB 2478: 60
TO 645
665 :
678 REM ##* SURF. TRIANGLE ##*
675 :
688 HOME : HTAB 29: PRINT T$;" D’UN TRIANGL
E*: GOSUB 2718
685 VTAB 8: HTAB 15: INPUT “Base ? ";BS: IF
BS ¢ = 6 THEN PRINT BIP$: GOTO 685
698 VTAB 16: HTAB 15: INPUT "Hauteur ? "HT
: IF HT ¢ = @ THEN PRINT BIP$: GOTO 6
98
695 S = (BS * HT) / 2: GOSUB 2578: GOSUB 24
78: GOTO 688
788 :
765 REM #*## SURF, TRAPEZE ##*
718 :
715 HOME : HTAB 29: PRINT T$;* D’UN TRAPEZE
": GOSUB 2718
728 VIAB 8: HTAB 15: INPUT “Grande base ? *
j6B: IF GB < = @ THEN PRINT BIP$: GOT
0 728
725 VTAB 9: HTAB 15: INPUT "Petite base ? *
3PB: IF PB < = @ THEN PRINT BIP$: GOT
0 725
738 VTAB 18: HTAB 15: INPUT "Hauteur ? ";HT
: IF HT < = 6 THEN PRINT BIP$: GOTO 7
38
735 $ = ((GB + PB) * HT) / 2: GOSUB 2578: G
OSUB 2478: GOTO 715
748:
745 REM #** SURF. CERCLE ###
758 :
755 HOME : HTAB 29: PRINT T$;* D’UN CERCLE*
: GOSUB 2718
768 VTAB 8: HTAB 15: INPUT "Diamétre ? ";D:
IF D < = THEN PRINT BIP$: GOTO 768
765 S$ = PI * ((D / 2) * 2): GOSUB 2576: GOS
7229
6503
1008
0834
8034
all
4828
BB17
0834
8834
FAIS
Dace
0834
0834
F370
B9AF
8BFF
EFFC
8834
88348
A76D
UB 2478: GOTO 755
778 :
775 REM *#* SURF. SPHERE ##*
788 :
785 HOME : HTAB 28: PRINT T$;" D’UNE SPHERE
"; GOSUB 2718
798 VTAB 8: HTAB 15: INPUT “Diamétre ? "5D:
IF D < = 8 THEN PRINT BIP$: GOTO 798
795 S = (PI * ((D / 2) * 2)) * 4: GOSUB 257
8: GOSUB 2478: GOTO 785
888 :
885 REM ##* VOLUMES ###
818:
815 T$ = "VOLUME": GOSUB 1928
828 HTAB 29: PRINT "CALCULER UN ";T$: GOSUB
2698
825 VTAB 5: HTAB 28: PRINT “1. --) “Cube”
838 PRINT : HTAB 28: PRINT "2. --) “Parallé
lepipéde rectangle”
835 PRINT : HTAB 28: PRINT "3. --) “Prisme
droit a base parallélogramme*
848 PRINT : HTAB 28: PRINT "4.
droit a base triangulaire®
845 PRINT : HTAB 28: PRINT "5S. ~-) “Prisme
droit & base trapézoidale"
858 PRINT : HTAB 28: PRINT "6. --)
e
855 PRINT : HTAB 28: PRINT "7. --) “Sphére”
868 PRINT : HTAB 17: PRINT MI$
865 GOSUB 2435: IF REP ¢ 1 OR REP > 7 THEN
PRINT BIP$: GOTO 865
878 ON REP GOTO 898,926,968, 1808 ,1846, 1885,
1128
“Prissme
“Cylindr
875 :
888 REM *### VOL. CUBE ###*
885 :
898 HOME : HTAB 28: PRINT T$;" D’UN CUBE":
GOSUB 2718
895 VIAB 18: HTAB 15: INPUT “Longueur d’un
coté 2 ";C: IF C ¢ = 8 THEN PRINT BIP
$: GOTO 895
988 V = C * 3: GOSUB 2685: GOSUB 2478: GOTO
898
985 :
918 REM ##* VOL. PARALLELEPIPEDE RECTANGLE
ee
VIS:
928 HOME : HTAB 21: PRINT T$;" D’UN PARALLE
LEPIPEDE RECTANGLE": GOSUB 2718
925 VTAB 8: HTAB 15: INPUT "Longueur ? ";LO
3 IF LO < = @ THEN PRINT BIP$: GOTO 9
25
938 VTAB 9: HTAB 15: INPUT “Largeur ? ";LA:
IF LO ¢ = 8 THEN PRINT BIP$: GOTO 938
935 VTAB 18: HTAB 15: INPUT "Hauteur ? ";HT
B75C
8834
7410
5705
4287
O61E
B635
0832
EFOE
cdi
8834
E45
0038
8838
a
a §
TREMPLIN MICRO
33
NEN eee
= @ THEN PRINT BIP$: GOTO 9
948 V = (LO * LA) * HT: GOSUB 2685: GOSUB 2
478: GOTO 928
945 :
958 REM ##*# VOL. PRISME DROIT BASE PARALLE
LOG, ##*
955 :
968 HOME : HTAB 16: PRINT T$;" D’UN PRISME
DROIT A BASE PARALLELOGRAMME": GOSUB 27
18
965 VTAB 8: HTAB 15: INPUT “Longueur paral!
elogramme ? ";L0:; IF LO < = 8 THEN PR
INT BIP$: GOTO 965
978 VTAB 9: HTAB 15: INPUT “Hauteur parallé
logramme ? ";HP: IF HP < = @ THEN PRI
NT BIP$: GOTO 978
975 VTAB 18: HTAB 15: INPUT “Hauteur du pri
sme ? ";HH: IF HH < = @ THEN PRINT BI
P$: GOTO 975
986 V = (LO * HP) * HH: GOSUB 2685: GOSUB 2
478: GOTO 968
985 :
998 REM *** VOL. PRISME DROIT BASE TRIANG.
+e
995 3
1868 HOME : HTAB 18: PRINT T$;" D’UN PRISME
DROIT A BASE TRIANGULAIRE": GOSUB 2718
1885 VTAB 8: HTAB 15: INPUT “Base triangle ?
";BA: IF BA < = 8 THEN PRINT BIP$: G6
OTO 1885
1818 VTAB 9: HTAB 15: INPUT “Hauteur triangl
e 2? “;HT: IF HT < = 6 THEN PRINT BIPS
. + GOTO 1818
1015 VTAB 18: HTAB 15: INPUT “Hauteur du pri
sme ? ";HH: IF HH < = 8 THEN PRINT BI
P$: GOTO 1815
1628 V = ((BA * HT) / 2) * HH: GOSUB 2685: G
OSUB 2478: GOTO 1608
1825 :
1038 REM #*#* VOL. PRISME DROIT BASE TRAPEZ.
et
1035 +
1048 HOME : HTAB 18: PRINT T$;" D’UN PRISME
DROIT A BASE TRAPEZOIDALE": GOSUB 2718
1845 VTAB 8: HTAB 15: INPUT “Grande base tra
peze ? ";GB: IF GB < = 6 THEN PRINT B
IP$: GOTO 1845
1658 VTAB 9: HTAB 15: INPUT "Petite base tra
peze 2 ";PB: IF PB < = @ THEN PRINT B
IP$: GOTO 1858
1855 VTAB 18: HTAB 15: INPUT "Hauteur trapéz
e ? "sHT: IF HT < = @ THEN PRINT BIPS
: GOTO 1855
1868 VTAB if: HTAB 15: INPUT “Hauteur du pri
#3 2?
8834
0634
7172
8475
SEC
8834
876F
sme ? ";HH: IF HH < = @ THEN PRINT BI
P$: GOTO 1868 {
1865 V = (((GB + PB) * HT) / 2) * HH: GOSUB
2685: GOSUB 2478: GOTO 1048
1678 :
1875 REM *** VOL. CYLINDRE *##*
1688 :
1885 HOME : HTAB 38: PRINT T$;" D’UN CYLINOR
—": GOSUB 2718
1698 VTAB 8: HTAB 15: INPUT “Diamétre cylind
re? *3D: IF D < = @ THEN PRINT BIP$:
GOTO 1898
1895 VTAB 18: HTAB 15: INPUT “Hauteur cylind
re ? ";HC: IF HC < = THEN PRINT BIP
$: GOTO 1895
1188 V = (((D / 2) * 2) * PI) * HH: GOSUB 26
85: GOSUB 2478: GOTO 1685
1185 :
1118 REM ##* VOL. SPHERE ##*
MiSs
1128 HOME : HTAB 38: PRINT T$;" D’UNE SPHERE
": GOSUB 2718
1125 VTAB 18: HTAB 15: INPUT "Diamétre sphér
e ? "3D: IF D < = @ THEN PRINT BIPS:
GOTO 1125
1138 V = ((D * 3) * PI) / 6: GOSUB 2685: GOS
UB 2478: GOTO 1126
1135:
1148 REM ##* DILUTIONS/DOSAGES *#*
1145:
1158 HOME : PRINT : HTAB 23: PRINT "CALCULER
DES DOSAGES ET DILUTIONS": GOSUB 2698
1155 TA = 18
1168 VTAB 7: HTAB 26: PRINT “1. --) “1 + X"
1165 PRINT : PRINT : HTAB 28: PRINT "2. --)
“xX”
PRINT : PRINT : HTAB 28: PRINT "3. --)
“X produit / Y produit"
1175 PRINT : PRINT : HTAB 17: PRINT MIS
1186 GOSUB 2435: IF REP < 1 OR REP > 3 THEN
PRINT BIP$: GOTO 1188
1185 ON REP GOTO 1205,1278,1335
1198 :
1195 REM ### DOSAGE 1 + X ##*
1268 :
1205 HOME : HTAB 28: PRINT “DILUTIONS DE FOR
ME 14x?
HTAB 15: PRINT "1 partie de concentré p
our X parties de diluant.": GOSUB 2698
1215 VIAB 5: HTAB 16: INPUT "Unité utilisée
> *3US
1228 VTAB 7: HTAB 18: PRINT M3$
1225 VIAB 18: HTAB INPUT "Valeur de X ?
"3X: IF X ¢ = @ THEN PRINT BIP$: GOTO
1225
1178
1218
8838
683A
SFil
£035
8834
0838
4002
8834
8834
FEC6
391F
dE7C
FF31
44FC
883A
8834
771A
2063
FAB2
DIAZ
4574
ad aaa aa ae aaa ada a eae eae aaah alealaiaataleletellateteaiaeiael
GUY-HACHETTE
34
suueseeeseeensessesesessssssssssesscesscrssnzananessssseessnssessssessssessossssnesaeesssssasesseneenes
1238 VTAB 12: HTAB 18: INPUT "Quantité total
e a obtenir 2 ";Q: IF @< = 8 THEN PR
INT BIP$: GOTO 1238
12352 =X + 1:00 =Q@/ 2:00 = INT (QC * 18
8) / 188:0D = Q - QC
1248 VTAB 15: HTAB 18: PRINT "II vous faudra
donc:"
1245 PRINT : HTAB 13: PRINT “- ";QC;" ";U8;"
de concentré, et”
1258 HTAB 13: PRINT "- ";QD;" ";U8;" de dilu
ant.": GOSUB 2478: GOTO 1158
1255 :
1268 REM ##*# DOSAGE X % ##*
1265 :
1278 HOME : HTAB 38: PRINT "DOSAGES DE FORME
x %"
1275 HTAB 16: PRINT "Diluer X % d’un produit
dans une quantité donnée": GOSUB 2698
1288 VTAB 5: HTAB 18: INPUT "Unité utilisée
? *3US
1285 PRINT : HTAB 18: PRINT M3$
1298 VTAB 16: HTAB 18: INPUT “Valeur de X ?
"sX: IF X ¢ = 68 THEN PRINT BIP$: GOTO
1298
1295 VTAB 12: HTAB 18: INPUT “Quantité a laq
uelle on ajoute le produit ? ";Q: IF @
(= 6 THEN PRINT BIP$: GOTO 1295
1388 D = (Q / 188) * X:D = INT (D * 1888) /
1988
1385 VTAB 15: HTAB 18: PRINT "I] vous faudra
donc ajouter:"
1318 PRINT : HTAB 13: PRINT "- "3D;
de produit, et"
1315 PRINT : HTAB 18: PRINT "Vous aurez au t
otal: ";@ + D3" ";U$;" de solution.”: G
OSUB 2478: GOTO 1158
1328 :
1325 REM *#*# DOSAGE X / Y ##*
1338:
1335 HOME : HTAB 26: PRINT "DOSAGES DE FORME
X UNITES POUR Y UNITES"
1348 HTAB 18: PRINT “Ajouter X unités d’un p
roduit par Y unités d’un autre produit"
: GOSUB 2698
1345 VTAB 5: HTAB 18: INPUT "Unité utilisée
2 "sUs
1358 PRINT : HTAB 18: PRINT M3$
1355 VTAB 9: HTAB 18: INPUT "Valeur de X ? *
3X: IF X ¢ = @ THEN PRINT BIP$: GOTO
1355
1368 YTAB 11: HTAB 1@: INPUT "Valeur de Y ?
"s¥: IF Y ¢ = 8 THEN PRINT BIP$: GOTO
1368
1365 VTAB 13: HTAB 18: INPUT "Quantité total
e de produit a obtenir 7 °;Q: IFQ@< =
7291
c7c4
1D8C
8834
8834
0887
2305
FAB2
AGB
168C
0838
LL)
6598
S1DF
FAB2
E45¢
878
@ THEN PRINT BIP$: GOTO 1365
1378 OX = (0 / (X + Y)) # X:0X =
108) / 188:0Y = Q -
1375 PRINT : HTAB 18: PRINT "I1 vous faudra
donc: *
1388 PRINT : HTAB 13: PRINT “- ";QX;" ";U8;"
de produit X, et"
1385 HTAB 13: PRINT "- ";QY;" ";U$;" de prod
uit Y.": GOSUB 2478: GOTO 1158
1398 :
1395 REM ##* ROULEAUX REVETEMENT ###*
1488 :
1485 HOME : PRINT : PRINT : HTAB 23: PRINT *
CALCUL DE LA QUANTITE DE REVETEMENT": 6
OSUB 2698
1418 TA =1
1415 VTAB 9: HTAB 28: PRINT "1. --> “Murs (P
apiers peints)*
1428 PRINT : PRINT : HTAB 28: PRINT "2. --)
“Plafond ou sol (rouleaux)”
1425 PRINT : PRINT : HTAB 28: PRINT "3. --)
“Sols et murs (carrelages)"
1438 PRINT : PRINT : HTAB 17: PRINT MIS
1435 GOSUB 2435: IF REP < 1 OR REP > 3 THEN
PRINT BIP$: GOTO 1435
1448 ON REP GOTO 1445,1645,1735
1445 T$ = "MURS (Papier peint)*
1458 HOME : HTAB 29: PRINT T$: HTAB 12: PRIN
T M3$: GOSUB 2698
1455 VTAB 5: INPUT "Hauteur des murs (en m)
2? "3H: IF H ¢ = @ THEN PRINT BIP$: GO
TO 1455
1468 HM = H * 108
1465 VTAB 7: INPUT "Périmétre de la piéce (e
nm) ?";P: IF P< = THEN PRINT BIP
$: GOTO 1465
1478 VTAB 9: INPUT "Total des largeurs des o
uvertures (en m) ? "30: IF 0 < @ ORO >
= P THEN PRINT BIP$: GOTO 1478
1475 PP = (P - 0) * 108
1488 VTAB 12: INPUT “Longueur d’un rouleau ¢
enm) ? ";L: IF L < = @ THEN PRINT BI
P$: GOTO 1488
1485 LO = L * 188
1498 VTAB 15: INPUT “Largeur d’un rouleau (e
ncm) ? ";LA: IF LA <¢ = @ THEN PRINT
BIP$: GOTO 1498
1495 VTAB 18: INPUT “Distance entre motifs i
dentiques <raccord) (en cm) ? "sMT: IF
MT < @ THEN PRINT BIP$: GOTO 1495
1568 LE = H4 + 5 + MT: REM ##* Longueur d’un
16 +e
1585 NR = INT (LO / LE): REM
Showing the first 100000 of 220603 characters.