LEX 'CONFIGLX' * (c) Copyright PPC Paris 1986 TITLE Utilitaire \ 01/12/86 \ J-J Moreau ID #E1 MSG 0 POLL Polhnd ENDTXT * * Le poll-handler qui suit intercepte le poll * pCLDST,qui est envoyÅ aprÉs * chaque MEMORY LOST (Ce qui, tout programmeur en * assembleur le sait bien, * arrive des dizaines de fois par jour, si ce * n'est plus. Je m'arrÁte lÈ car on * va me reprocher de vous effrayer). Car il est * insupportable de devoir mettre * un contraste de 7, Åteindre le sonnette, passez * en RADIANS/USER, charger * quelques LEX (Comme REPEAT, CONTRAST...)... le * tout manuellement. Aussi j'ai * crÅÅe CONFIGLX qui fait tout cela pour moi et * peut, qui plus est, afficher * Bonjour: c'est extraordinaire ! En un mot, le * poll pCONFG est envoyÅ; CONFIGLX * l'attrape au vol; ÅxÅxute le sous-programme * BASIC: CONFIG (Merci È Mr Hernest * Planque !); retourne È l'assembleur; rends le * bienheureux poll; et voilÈ mon * 71 qui me dis bonjour, avec un contraste de * 7,... * Nous n'Åtonnerons personne en prŵisant que le * sous-programme CONFIG doit * Átre ds un port indÅpendant, ainsi que le LEX: * CONFIGLX (Ou mieux: ds 1 EEPROM HHP) * Un mot encore: sachez que si vs terminez votre * ss-prgm CONFIG par ENDALL, le * fameux poll pCONFG ne sera pas envoyÅ È d'autre * lexs. Par ailleurs, le * procÅdÅ que j'ai dÅveloppÅ ds mon LEX pr le * poll pCONFG peut-Átre Åtendu È * tous les polls rapides (Pour les autres * rÅfÅrez-vs aux IDS vol 1 (un peu * avant le chapÑtre sur la tokenization)). Sur, * ce bon MEMORY LOST. * * =CALBIN EQU #18D8C =FORSTK EQU #2F59E =POPUPD EQU #08F3E =PSHUPD EQU #08F0D PgmRun EQU #0000D =lPOLSV EQU #0003E =pCLDST EQU #000FF =tCALL EQU #000F9 =tLITRL EQU #000C4 =tPRMEN EQU #000F8 =tEOL EQU #000F0 Polhnd LC(2) =pCLDST ?B=C B Est-ce le poll de dÅpart È * froid ? GOYES Confg RTNSXM Malheureusement non ! Confg C=D A Sauvegarde ce sacrÅ D(A) * ds la pile de retour BASIC A=C A (C'est celle qu'utilise * les ordres GOSUB et POP) GOSBVL =PSHUPD (C'est cette routine qui * se charge de tt le travail) C=RSTK Sauvegarde l'adr de retour * vers la routine =FPOLL ds la A=C A mÁme pile GOSBVL =PSHUPD C=RSTK On recommence avec l'adr * de retour È la routine =CLDST A=C A GOSBVL =PSHUPD ST=1 PgmRun Puis on allume le drapeau * 13 qui indique au routines * internes qu'on ÅxÅcute un * programme (BASIC ou BIN) GOSBVL =CALBIN Et l'on se branche sur * cette routine qui, È peu de * choses prÉs celle qui est * chargÅe d'ÅxÅxuter, en BASIC * un sous-programme. Ci suit * la description du dit ss-prog CON(2) 20 Longueur du chaÑnage CON(2) tCALL Tokenization de CALL CONFIG CON(2) tLITRL . NIBASC 'CONFIG' .CONFIG CON(2) tPRMEN . CON(2) tEOL . * * A ce point du LEX on espere que l'utilisateur * n'a pas trop perturbÅ le 71 * pour que tout aille comme il faudrait (en * faisant des POP, ou des POKE ... * GOSBVL =POPUPD Remettons ds la pile de * retour (interne) les 2 adrs C=D A stockÅes ds la pile de * retour BASIC RSTK=C GOSBVL =POPUPD (C'est cette routine qui * fait le travail, car ns sommes C=D A bien fatiguÅs aujourd'hui) RSTK=C GOSBVL =POPUPD Puis on retaure D(A), que * tout bon chasseur de FPOLL se * doit d'attraper puis, en * bon chasseur qu'il est, * remettre intact È sa place) C=-C-1 A DÅsarmons carry RTNSXM Et renvoyons le poll en * faisant croire que ns n'avons * fait (XM#0) (Un bon * chasseur ne doit pas se faire * remarquer). Disons, + * sÅrieusement, qu'il ne faut * EN AUCUN CAS retourner avec XM=0. * Le poll doit atteindre TOUS les LEX. END