User Tools

Site Tools


cmdp2.asm

This is an old revision of the document!


Retourner à la liste des fichiers

* NRDOS.MO5 version 3.5
* CMDP2.ASM (Commandes internes, deuxième partie)

************************************************************************************************************
* DRV
* Change le disque courant (commande x: ou x est le disque)
************************************************************************************************************
DRV    SET    *
       LDX    TKOFST
       LDB    CMDBUF,X
       CMPB   #'A             ; Le disque doit être entre A: ...
       BCS    CDERR

       CMPB   #'J             ; ... et J:
       BHI    CDERR

       LDB    FNMBF1
       PSHS   B
       LDD    DSKMAP          

CDLOOP LSRA                   ; On vérifie que le disque est valide
       RORB
       DEC    ,S
       BNE    CDLOOP

       PULS   B
       BCS    CDOK

CDERR  LDB    #EDQER          ; Code d'erreur "Disque erroné"
       JSR    ERRMSG          ; On affiche le message
       BRA    CDEND

CDOK   LDB    FNMBF1
       STB    CDISK           ; On change le disque courant

CDEND  RTS

DSKMAP FDB    0

************************************************************************************************************
* ID
* Exécute la commande ID (fixe l'identifiant du poste)
************************************************************************************************************
ID     SET    *
       LEAY   FNMBF2,PCR
       LDX    CLPTR,PCR
       LDA    CLTOGO,PCR
       LBSR   SKPSPC
       LBSR   PRSPTH          ; On vérifie l'atome
       STA    CLTOGO,PCR
       STX    CLPTR,PCR
       LDA    #8              ; Seuls les 8 premiers caractères comptent
       LEAY   IDBUFF,PCR
       LEAX   CSGNDK,PCR
       LBSR   MEMCPY
       LDA    #0           
       STA    CSGNOP,PCR
       LDA    #ID             ; Consigne ID
       STA    CSGNTA,PCR
       LDA    #SYSFIC
       STA    CSGNTR,PCR
       LBSR   XCNSGN          ; On exécute la consigne
       RTS

************************************************************************************************************
* DATE
* Exécute la commande DATE (affiche la date et l'heure)
************************************************************************************************************
DATE   SET    *
       LDA    #0           
       STA    CSGNOP,PCR
       LDA    #DATE           ; Consigne DATE
       STA    CSGNTA,PCR
       LDA    #SYSFIC
       STA    CSGNTR,PCR
       LBSR   XCNSGN          ; On exécute la consigne
       BNE    DATEND

       LEAX   DATEST,PCR      ; On affiche
       LBSR   DSPSTR          
       LEAX   CRBUFF+2,PC
       BSR    D3NBS           ; Les trois nombres qui composent la date
       LEAX   TIMEST,PCR
       LBSR   DSPSTR
       LEAX   CRBUFF+5,PC
       BSR    D3NBS           ; Les trois nombres qui composent l'heure
DATEND RTS

************************************************************************************************************
* D3NBS
* Affiche trois nombres entiers 8 bits séparés par des espaces
************************************************************************************************************
D3NBS  SET    *
       LDB    #3              ; Trois fois
       PSHS   B

D3LOOP:
       LDB    ,X+             ; Le nombre sur 8 bits est pointé par X
       PSHS   X
       LBSR   DINT            ; Conversion décimale et affichage
       PULS   X
       LBSR   DSPACE          ; Affiche une espace
       DEC    ,S
       BNE    D3LOOP

       PULS   PC,B

DATEST FCS    /DATE  : /      ; Chaînes de caractères pour l'affichage
TIMEST FCS    / - HEURE : /   ; de la date et de l'heure

************************************************************************************************************
* ERA
* Exécute la commande ERA ou DEL (Effacement de fichier)
************************************************************************************************************
ERA    SET    *              
       LBSR   SETCTX          ; Prépare le contexte (paramètres de la commande, changement de répertoire)
       LDB    #$FF          
       CMPB   CDSUCS          ; Le chemin est-il valide ?
       BNE    ERAOK         
                             
       LBSR   PRMERR          ; Erreur de paramètre
       BRA    ERAEND        
                             
ERAOK  LDA    #SUPFI          ; Consigne SUPFI
       STA    CSGNTA,PCR
       LBSR   XCNSGN          ; On exécute la consigne
ERAEND LBSR   RSTDIR          ; et on rétablit le répertoire courant
       RTS                   
                       
************************************************************************************************************
* FOPENR
* Ouvre un fichier en lecture
************************************************************************************************************
FOPENR SET    *              
       LDA    #OUVFL          ; Consigne OUVFL    
       STA    CSGNTA,PCR
       LBSR   XCNSGN          ; Exécute la consigne
       BNE    ONEND         
                             
       LDA    CRBUFF+1,PC   
       STA    FNHNDL,PCR      ; Récupère le descripteur de fichier
       LDA    #FBFSIZ         ; et initialise les variables de gestion du buffer
       STA    BUFPOS,PCR
       LDD    #0            
       STD    FP242,PCR       ; Position dans le fichier sur 24 bits
       STA    FP240,PCR
       STA    FRERR,PCR
       LDA    #$FF          
       STA    FOFLG,PCR
ONEND  RTS                   
                             
FNHNDL FCB    0              ; Descripteur de fichier
FOFLG  FCB    0              ; Flag de fichier ouvert
BUFPOS FCB    FBFSIZ         ; Position courante dans le buffer de lecture de fichier
FP242  FCB    0              ; Position courante dans le fichier (24 bits)
FP241  FCB    0              
FP240  FCB    0              
BREAD  FCB    0              ; Nombre d'octets effectivement lus
FRERR  FCB    0              ; Résultat de la lecture (erreur ou EOF)
FBUFFR RMB    FBFSIZ         ; Buffer de lecture de fichier

************************************************************************************************************
* FCLOSE
* Ferme le fichier courant
************************************************************************************************************
FCLOSE SET    *              
       TST    FOFLG,PCR
       BEQ    FCEND         
       LDA    #0
       STA    CSGNOP,PCR
       LDA    #SYSFIC       
       STA    CSGNTR,PCR
       LDA    FNHNDL        
       STA    CSGNDK,PCR
       LDA    #FERFI          ; Consigne FERFI        
       STA    CSGNTA,PCR
       LEAX   CNSGN,PCR
       JSR    RESEAU          ; Exécute la consigne
       CLR    FOFLG,PCR
       LDA    #$FF          
       STA    FNHNDL,PCR
FCEND  RTS                   
                             
************************************************************************************************************
* FGETCH
* Lit un caractère depuis un fichier en ignorant les LF
************************************************************************************************************
FGETCH TST    FOFLG,PCR
       BNE    FGREAD        

       RTS                   
                             
FGREAD BSR    FREAD           ; Lit un octet brut
       CMPB   #LF             ; Ignore les LF
       BEQ    FGREAD        

       RTS                   

Retourner à la liste des fichiers

cmdp2.asm.1765475522.txt.gz · Last modified: by fool-duplex

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki