Skip to main content

magazine poms22

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

Showing the first 100000 of 255679 characters.

mp.ls