Skip to main content

magazine poms26

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

Showing the first 100000 of 255113 characters.

mp.ls