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           

Retourner à la liste des fichiers