[[code_source_de_nrdos.mo5_version_3.5|Retourner à la liste des fichiers]] * NRDOS.MO5 version 3.5 * LOOKUP.ASM (Recherche d'une commande interne) ************************************************************************************************************ * SKSPCL * Saute les séparateurs consécutifs pour se positionner au début du prochain atome ************************************************************************************************************ SKSPCL SET * LDX CLPTR,PCR LDA CLTOGO,PCR LBSR SKPSPC STX CLPTR,PCR STA CLTOGO,PCR RTS ************************************************************************************************************ * RSTTOK * Revient sur la position de l'atome sauvegardé ************************************************************************************************************ RSTTOK SET * LEAX SVDTOK,PCR STX CLPTR,PCR LDA -1,X STA CLTOGO,PCR RTS ************************************************************************************************************ * LOOKUP * Recherche dans la table pointée par Y l'adresse d'exécution correspondant à l'atome pointé par X. ************************************************************************************************************ LOOKUP SET * LDB ,Y+ ; Taille de la table PSHS Y PSHS B ASLB ; *2 LEAY B,Y ; Y pointe à la fin de la table LKLOOP BSR MTCHKW ; Vérifie le mot clé courant BEQ LKFND ; On a une correspondance DEC ,S BNE LKLOOP ; Sinon, on remonte jusqu'au premier mot clé dans la table ANDCC #$FB BRA LKEND ; On n'a pas trouvé LKFND LDY 1,S ; On récupère l'offset correspondant LDB -1,Y SUBB ,S ASLB LDD B,Y LEAX IMPLNT,PCR ; Et on calcule l'adresse effective de la routine correspondante LEAX D,X ORCC #4 LKEND LEAS 3,S RTS ************************************************************************************************************ * MTCHKW * Compare l'atome fourni avec un mot clé. Y pointe sur le mot-clé, X sur l'atome. ************************************************************************************************************ MTCHKW SET * PSHS X LDA #8 ; Seuls les 8 premiers caractères comptent MKLOOP TSTA BEQ MKSKIP LDB ,Y ANDB #$7F ; Le bit 7 doit être enlevé pour la comparaison CMPB ,X+ BNE MKSKIP DECA LDB ,Y+ BPL MKLOOP TSTA BEQ MKEND1 LDB ,X CMPB #SPACE ; Début de la table BNE MKEND2 MKEND1 PULS PC,X MKSKIP LDB ,Y+ ; Ce n'est pas le bon mot-clé BPL MKSKIP ; On saute le reste des caractères MKEND2 PULS PC,X [[code_source_de_nrdos.mo5_version_3.5|Retourner à la liste des fichiers]]