User Tools

Site Tools


extcmd.asm

Retourner à la liste des fichiers

* NRDOS.MO5 version 3.5
* EXTCMD.ASM (Appel d'une commande externe)

************************************************************************************************************
* EXTCMD
* Cherche un fichier .MO5 ou .NRD sur le disque courant pour l'exécuter.
************************************************************************************************************
EXTCMD SET    *
       LDX    #FNMBF1         ; Le nom à chercher se trouve là
       LDA    #9              ; Longueur de la chaîne
       LDB    #QMARK          ; On vérifie s'il y a des ? dans le nom de fichier

ECLOOP DECA
       BEQ    ECFNOK

       CMPB   ,X+
       BNE    ECLOOP

       LDB    #EAMBI          ; No. d'erreur "Nom de fichier ambigu"
       JMP    ERRMSG          ; Affiche le message et retourne

ECFNOK LDX    #CSGNDK         ; On copie le nom dans la consigne
       LDY    #FNMBF1
       LDA    #9
       JSR    MEMCPY
       LDY    #MO5            ; On rajoute le suffixe ".MO5"
       BSR    SEEKF           ; Et on cherche le fichier
       BNE    ECNRD

       LDB    #CHBIN          ; Fichier trouvé, on lance l'exécution par une consigne CHBIN
       STB    CSGNTA
       CLR    CSGND2          ; Mode de chargement : exécution automatique
       LDX    #CNSGN
       JSR    RESEAU          ; Appel au central

ECWAIT JMP    ECWAIT          ; On attend jusqu'à ce que le fichier est téléchargé et exécuté

ECNRD  LDY    #NRD            ; Pas un .MO5, on essaye avec un .NRD
       BSR    SEEKF
       BNE    ECFNE

       JSR    FOPENR          ; Il existe, on l'ouvre
       RTS

ECFNE  LDX    #FILENE         ; Sinon, "Fichier inexistant."
       JSR    DSPSTR          ; On affiche le message
       RTS

************************************************************************************************************
* SEEKF
* Cherche un fichier dans le répertoire courant et pour les .MO5 et .TO7, cherche aussi sur la racine du
* disque système.
************************************************************************************************************
SEEKF  SET    *
       LDX    #CSGNFE         ; Copie le suffixe pointé par Y dans la consigne
       LDA    #3
       JSR    MEMCPY
       JSR    EXIST           ; Teste la présence du fichier
       BEQ    SFRTS           ; S'il existe, c'est super

       LDB    #'O             ; O comme dans MO5 ou TO7
       CMPB   CSGNFE+1
       BNE    SFRTS           ; Seulement les fichiers .MO5 ou .TO7

       LDB    CSGNDK          ; On va vérifier aussi sur A:\
       PSHS   B
       LDB    #1              ; Disque A:
       STB    CSGNDK
       LDX    #ROOT           ; "/"
       LBSR   SWIDIR          ; Change le répertoire vers A:\
       JSR    EXIST           ; Teste la présence du fichier
       PSHS   CC
       LBSR   RSTDIR          ; Restaure le répertoire courant
       PULS   CC
       PULS   B
       PSHS   CC
       STB    CSGNDK
       PULS   CC
SFRTS  RTS

************************************************************************************************************
* EXIST
* Vérifie l'existence d'un fichier dans le répertoire courant.
************************************************************************************************************
EXIST  SET    *
       JSR    BCFPT1          ; Construit une consigne standard
       LDB    #CATP           ; Primitive de catalogue
       STB    CSGNTA
       LDX    #CNSGN
       JSR    RESEAU          ; Exécute la consigne
       LDX    #1
       CMPX   CRXT0           ; Résultat
       RTS

MO5    FCC    /MO5/           ; Suffixe .MO5
TO7    FCC    /TO7/           ; Suffixe .TO7
NRD    FCC    /NRD/           ; Suffixe .NRD

ROOT   FCS    %/%             ; Répertoire à chercher sur le disque système

AUTOST FCB    $FF             ; Flag d'autostart (recherche et exécution de DEPART.NRD)
                              ; 0 = Ignorer DEPART.NRD

FILENE FCB    CR, LF
       FCS    /Fichier inexistant./

************************************************************************************************************
* SWIDIR
* Sauve le disque et répertoire courants puis continue sur CHGDIR pour changer de répertoire.
************************************************************************************************************
SWIDIR SET    *
       PSHS   X               ; On sauve X
       LDB    CSGNDK
       STB    SVDDSK          ; On sauve le numéro de disque dans SVDDSK
       LDX    #SVDPTH
       STX    CSGNAD
       LDX    #64             ; Taille maximum
       STX    CSGNSZ
       LDA    #GETDIR         ; Consigne GETDIR
       STA    CSGNTA
       LDX    #CNSGN
       JSR    RESEAU          ; On récupère le chemin courant dans SVDPTH
       PULS   X               ; On récupère X qui contient le pointeur vers le nouveau répertoire

************************************************************************************************************
* CHGDIR
* Change de répertoire.
************************************************************************************************************
CHGDIR SET    *
       STX    CSGNAD
       LDB    SVDDSK
       STB    CSGNDK
       LDA    #SETDIR         ; Consigne SETDIR
       STA    CSGNTA
       LDX    #CNSGN
       JSR    RESEAU          ; On change de répertoire
       LDA    #0
       STA    CDSUCS          ; Flag de succès
       LDA    CRERR
       CMPA   #0
       BEQ    CHDRTS

       LDA    #$FF
       STA    CDSUCS
CHDRTS RTS

************************************************************************************************************
* RSTDIR
* Restaure le disque et répertoire qui avait été sauvés dans SVDDSK et SVDPTH.
************************************************************************************************************
RSTDIR SET    *
       LDX    #SVDPTH
       STX    CSGNAD
       LDB    SVDDSK
       STB    CSGNDK
       LDX    #64             ; Taille maximum
       STX    CSGNSZ
       LDA    #SETDIR         ; Consigne SETDIR
       STA    CSGNTA
       LDX    #CNSGN
       JSR    RESEAU          ; Change de répertoire
       RTS

SVDDSK RMB    1               ; Numéro de disque à conserver
SVDPTH RMB    65              ; Chemin à conserver

Retourner à la liste des fichiers

extcmd.asm.txt · Last modified: by fool-duplex

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki