lookup.asm
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
lookup.asm.txt · Last modified: by fool-duplex
