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