Retourner à la liste des fichiers
* NRDOS.MO5 version 3.5
* MAIN.ASM (Programme principal)
IMPLNT EQU $5000
INCLUD EQUATES.ASM
ORG IMPLNT
* Point d'entrée de l'application NRDOS.MO5
* Initialisation du poste
START SET *
ORCC #$FF ; Masquage interruptions
LDA #$0C ; Commutation page 0 de l'extension RAM 64 Ko
STA EXT64K
LDX #INIT ; Teste de présence de l'extension RAM 64 Ko
STX M5VCT
CMPX M5VCT
BNE INIT ; Pas d'extension, on continue
JMP [RESET] ; Si l'extension 64 Ko est présente, reset propre
* Initialisation du réseau et de l'application
INIT SET *
CLR EXT64K ; Commutation BASIC résident
LDX #INITST
JSR DSPSTR ; Efface l'écran, bleu sur bleu ciel
ORCC #$FF ; Pas d'interruptions
LDX #PG0APP ; On efface la RAM de $2100 à $4FFF
CLMLP1 CLR ,X+
CMPX #IMPLNT
BCS CLMLP1
LDX #ENDPRG ; ... et de $7357 à $9FFF
CLMLP2 CLR ,X+
CMPX #ENDRAM
BCS CLMLP2
LDS #STACK ; Pile en $2200
LDX #IRQRE ; On installe l'interruption réseau
STX IRQPT
LDA NUPOST ; On charge le numéro de poste
ANDA #$1F
STA NUPO
JSR RELACH ; et on initialise le réseau.
JSR MEMFRM ; On passe en mémoire vidéo forme (qui contient les variables réseau)
LDX #CNTRT
STX ADCNTC ; On installe la routine de gestion du CNT-C réseau
LDX #CRBUFF
STX ADCRDU ; On spécifie la zone de compte-rendu
LDX #TRCRRT
STX ADTRCR ; On installe la routine de gestion de CTR inconnu
LEAX WLCMST,PCR
LBSR DSPSTR ; On affiche le message de bienvenue "NRDOS - Version 3.5 - 05 11 86"
LDA AUTOST ; Flag d'autostart (appel de DEPART.NRD)
BEQ PROMPT ; Si AUTOST=0, on ne cherche pas DEPART.NRD
CLR AUTOST
LDA #0 ; Préparation consigne CLEAR
STA CNSGN+1
LDA #SYSFIC
STA CNSGN+2
LDA #CLEAR
STA CNSGN+3
LDX #CNSGN
JSR RESEAU ; On efface le descripteur de poste
LDA #SYSINF ; Préparation consigne SYSINF
STA CNSGN+3
JSR RESEAU ; On demande les caractéristiques du système
LDD CRBUFF+5
STD DSKMAP ; On conserve la liste des disques valides (0=invalide)
LDY #NRD ; "NRD"
JSR SEEKF ; On vérifie si le fichier DEPART.NRD existe
BNE PROMPT
JSR FOPENR ; Oui, alors on ouvre DEPART.NRD et on passe en mode exécution automatique
* Boucle principale de la ligne de commande (prompt)
PROMPT SET *
LBSR DCRLF ; Retour à la ligne
LDB CDISK,PCR ; Le disque courant entre 1 et 10
ADDB #AROB
LBSR PCHAR ; Affiche le disque courant (ex: 'A')
LDB #SUP
LBSR PCHAR ; Affiche '>'
LBSR INPUT ; Recupère une ligne de commande au clavier ou depuis un script
LDA #0
CMPA TOKNB
BEQ PROMPT ; La ligne était vide
LDX #CMDBUF ; Calcule la longueur de la ligne de commande
LDA #0
PRLP01 LDB ,X+
CMPB #CR
BEQ PARSE
INCA ; A contiendra la longueur
BRA PRLP01
PARSE SET *
LDX #CMDBUF ; Entrée: X doit pointer sur la ligne de commande
LEAY FNMBF1,PCR ; Sortie: Y doit pointer sur le premier atome décodé
LBSR PRSPTH ; Décodage d'un chemin
STA CLTOGO,PCR ; Sauve le nombre de caractères restant à décoder dans la ligne de commande
STX CLPTR,PCR ; Sauve le pointeur courant dans la ligne de commande
LEAX FNAME1,PCR ; Entrée: X doit pointer sur la commande à tester
LEAY CMDTBL,PCR ; Table des commandes : 21 commandes à ce jour
LBSR LOOKUP ; Recherche d'une possible commande interne
BEQ INTCMD ; On a trouvé une commande interne qui correspond
LBSR FCLOSE ; Ferme le fichier ouvert courant
JSR EXTCMD ; Cherche une commande externe (application, script, ...) et l'exécute
BRA PROMPT ; On retourne au prompt
INTCMD SET *
LBSR DCRLF ; On retourne à la ligne
LEAY PROMPT,PCR ; Saut dans le futur au prompt
PSHS Y
JMP ,X ; Exécute l'instruction interne et retourne au prompt
* Chaîne permettant l'effacement de l'écran
INITST SET *
FCB US, $20+0, $20+0, US, $10+2, $10+4 ; CONSOLE 0,24
FCB ESC, $40+BLUE, ESC, $50+CYAN, ESC, $60+CYAN ; SCREEN 4,6,6
FCB FF ; CLS
FCB 0
* Message de bienvenue
WLCMST SET *
FCB DC1 ; Allumage curseur
FCC /NRDOS - Version 3.5 - 05 11 86/
FCB CR, LF ; Retour à la ligne
FCB 0
CLTOGO RMB 1,0 ; Nombre de caractères restant à traiter dans la ligne de commande
CLPTR RMB 2,0 ; Pointeur à la position courante dans la ligne de commande
* Buffer de nom de fichier (1)
FNMBF1 RMB 1,0 ; Numéro de disque
FNAME1 RMB 8,0 ; Nom du fichier
RMB 3,0 ; Extension du fichier
* Buffer de nom de fichier (2)
FNMBF2 RMB 1,0 ; Numéro de disque
IDBUFF RMB 8,0 ; Nom du fichier
RMB 3,0 ; Extension du fichier
* Buffer de nom de fichier (3)
FNMBF3 RMB 1,0 ; Numéro de disque
RMB 8,0 ; Nom du fichier
RMB 3,0 ; Extension du fichier
CDISK FCB $01 ; Disque courant, par défaut A:
INCLUD CMDTBL.ASM
INCLUD PARSER.ASM
INCLUD CMDP1.ASM
INCLUD EXTCMD.ASM
INCLUD NRSVC.ASM
INCLUD LOOKUP.ASM
INCLUD CMDP2.ASM
INCLUD FILES.ASM
INCLUD CMDP3.ASM
INCLUD ERRORS.ASM
INCLUD LIBMO5.ASM
INCLUD CMDP4.ASM
INCLUD UTILS.ASM
INCLUD GBLVARS.ASM
ENDPRG EQU * ; NRDOS.MO5 se termine en $7357
END START