Skip to main content

magazine poms11

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

Showing the first 100000 of 281667 characters.

mp.ls