User Tools

Site Tools


utils.asm

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
utils.asm [2026/01/02 12:31] – fool-duplexutils.asm [2026/01/05 18:04] (current) – fool-duplex
Line 235: Line 235:
  
 BADARG FCB    CR, LF BADARG FCB    CR, LF
-       FCS    "Mauvais argument pour PSET"+       FCS    /Mauvais argument pour PSET/
        FCB    CR, LF        FCB    CR, LF
        FCS    /X = /        FCS    /X = /
  
 YEG    FCB    CR, LF YEG    FCB    CR, LF
-       FCC    ", Y = " +       FCS    /, Y = /
-       FCB    0+
  
 VALTAB FDB     1,  2,  3,  4,  5,  6,  7,  8 VALTAB FDB     1,  2,  3,  4,  5,  6,  7,  8
Line 249: Line 248:
  
 TMP16  FDB    $0000 TMP16  FDB    $0000
-       RMB    2+       RMB    2,0             ; Deux octets inutilisés
  
 ************************************************************************************************************ ************************************************************************************************************
Line 321: Line 320:
        BRA    HEXLIN        BRA    HEXLIN
  
-HEXRTS RTS       +HEXRTS RTS   
 + 
 +************************************************************************************************************ 
 +* PRSPTH 
 +* Interprète une chaîne comme un chemin et récupère le nom de fichier 
 +************************************************************************************************************ 
 +PRSPTH SET    * 
 +       PSHS    A,Y             ; On sauve la longueur de la commande et le pointeur sur le nom de fichier 
 +       CLRB                    ; Par défaut, disque = 0 (inconnu) 
 +       STB     ,Y+ 
 +       LDD     #$200B          ; et 11 espaces pour le nom de fichier 
 + 
 +PPLP1  STA     ,Y+ 
 +       DECB 
 +       BNE     PPLP1 
 + 
 +       PULS    Y,A             ; On récupère la longueur de la commande et le pointeur sur le nom de fichier 
 +       PSHS    Y               ; On sauve le pointeur 
 +       CMPA    #2              ; Longueur de 2 ? 
 +       BCS     PPLEN2 
 + 
 +       LDB     #COLON          ; 2ème car = ':' ? 
 +       CMPB    1,X 
 +       BNE     PPLEN2 
 + 
 +       LDB     ,X 
 +       CMPB    #'A             ; 1er caractère entre 'A' et 'J' ? 
 +       LBCS    PPDONE 
 + 
 +       CMPB    #'J 
 +       LBHI    PPDONE 
 + 
 +       SUBB    #AROB 
 +       STB     ,Y              ; On range le numéro de disque 
 +       LEAX    2,X             ; On saute 2 caractères dans le buffer 
 +       DECA 
 +       DECA                    ; Longueur réduite de 2 
 +       LBEQ    PPDONE          ; Vide ? C'était juste un changement de disque. 
 + 
 +PPLEN2 LEAY    1,Y 
 +       PSHS    X 
 +       LDB     #0 
 +       STB     INPFLG 
 +       LDB     #SLASH 
 +       CMPB    ,X 
 +       BNE     PPNSL1 
 + 
 +       LDB     #$FF 
 +       STB     INPFLG 
 +       LEAX    1,X 
 + 
 +PPNSL1 CLR     SBPTCT 
 + 
 +PPLP2  LDB     ,X+ 
 +       CMPB    #SLASH 
 +       BNE     PPSTOP 
 + 
 +       INC     SBPTCT          ; Compte le nombre de '/' dans la chaîne 
 +       BRA     PPLP2 
 + 
 +PPSTOP LBSR    SPTBCR 
 +       BNE     PPLP2 
 + 
 +       PULS    X               ; Retour au début du token (-le disque si présent) 
 +       PSHS    X,Y 
 +       LDY     #DBUF01 
 + 
 +PPLP3  LDB     ,X+ 
 +       LBSR    SPTBCR 
 +       BEQ     PPCPOK 
 + 
 +       STB     ,Y+ 
 +       BRA     PPLP3 
 + 
 +PPCPOK CLR     ,Y+ 
 +       PULS    Y,X 
 +       PSHS    Y 
 +       LDY     #DBUF02 
 +       LDB     #$FF 
 +       CMPB    INPFLG 
 +       BNE     PPNSL2 
 + 
 +       LDB     #SLASH 
 +       STB     ,Y+ 
 +       LEAX    1,X 
 + 
 +PPNSL2 LDB     SBPTCT 
 +       CMPB    #0 
 +       BEQ     PPNSL3 
 + 
 +PPLP4  LDB     ,X+ 
 +       CMPB    #SLASH 
 +       BNE     PPNSL4 
 + 
 +       DEC     SBPTCT 
 +       BEQ     PPNSL3 
 + 
 +PPNSL4 STB     ,Y+ 
 +       BRA     PPLP4 
 + 
 +PPNSL3 CLR     ,Y 
 +       PULS    Y 
 +       LDB     #8 
 + 
 +PPLP5  PSHS    B 
 +       TSTA 
 +       BEQ     PPCLN1 
 + 
 +       LDB     ,X+ 
 +       DECA 
 +       CMPB    #COLON 
 +       BEQ     PPERR1 
 + 
 +       CMPB    #SPACE 
 +       BLS     PPERR1 
 + 
 +       CMPB    #$7F 
 +       BHI     PPERR1 
 + 
 +       CMPB    #POINT 
 +       BEQ     PPSUF1 
 + 
 +       CMPB    #ASTRSK 
 +       BEQ     PPJKR1 
 + 
 +       LBSR    IDPOST          ; '@' est un identifiant de poste 
 +       STB     ,Y+ 
 +       PULS    B 
 +       DECB 
 +       BEQ     PPFWD 
 + 
 +       BRA     PPLP5 
 + 
 +PPJKR1 LDB     #QMARK 
 + 
 +PPLP6  STB     ,Y+             ; Remplit le nom avec des '?' 
 +       DEC     ,S 
 +       BNE     PPLP6 
 + 
 +       PULS    B 
 +       BRA     PPFWD 
 + 
 +PPERR1 INCA 
 +       LEAX    -1,X 
 + 
 +PPCLN1 PULS    B 
 +       BRA     PPDONE 
 + 
 +PPFWD  TSTA 
 +       BEQ     PPDONE 
 + 
 +       LDB     ,X+ 
 +       DECA 
 +       CMPB    #POINT 
 +       BEQ     PPSUF2 
 + 
 +       INCA 
 +       LEAX    -1,X 
 +       BRA     PPDONE 
 + 
 +PPSUF1 PULS    B 
 +       LEAY    B,Y 
 + 
 +PPSUF2 LDB     #3              ; Trois caractères à identifier 
 + 
 +PPSUFX PSHS    B 
 +       TSTA 
 +       BEQ     PPCLN2 
 + 
 +       LDB     ,X+ 
 +       DECA 
 +       CMPB    #COLON 
 +       BEQ     PPERR2 
 + 
 +       CMPB    #POINT 
 +       BEQ     PPERR2 
 + 
 +       CMPB    #SPACE 
 +       BLS     PPERR2 
 + 
 +       CMPB    #$7F 
 +       BHI     PPERR2 
 + 
 +       CMPB    #ASTRSK 
 +       BEQ     PPJKR2 
 + 
 +       LBSR    IDPOST          ; '@' est un identifiant de poste 
 +       STB     ,Y+ 
 +       PULS    B 
 +       DECB 
 +       BEQ     PPDONE 
 + 
 +       BRA     PPSUFX 
 + 
 +PPJKR2 LDB     #QMARK 
 + 
 +PPLP7  STB     ,Y+             ; Remplit le suffixe avec des '?' 
 +       DEC     ,S 
 +       BNE     PPLP7 
 + 
 +       PULS    B 
 +       BRA     PPDONE 
 + 
 +PPERR2 LEAX    -1,X 
 +       INCA 
 + 
 +PPCLN2 PULS    B 
 + 
 +PPDONE PULS    Y               ; On retourne au début du nom de fichier 
 +       LDB     ,Y 
 +       BNE     PPSKDK          ; Disque non précisé ? 
 + 
 +       LDB     CDISK,PCR       ; Alors on prend le disque courant 
 +       STB     ,Y 
 + 
 +PPSKDK LDB     #SPACE 
 +       TSTA 
 + 
 +PPLP8  BEQ     PPRTS 
 + 
 +       CMPB    ,X 
 +       BEQ     PPRTS 
 + 
 +       LEAX    -1,X 
 +       DECA 
 +       BRA     PPLP8 
 + 
 +PPRTS  RTS      
 + 
 +INPFLG FCB     $00             ; Flag : se trouve-t-on dans un chemin ou dans un nom de fichier ? 
 +SBPTCT FCB     $00             ; Nombre de sous-répertoires traversés 
 + 
 +DBUF01 RMB     65,0            ; Buffers de chemin 
 +DBUF02 RMB     65,0 
 + 
 +************************************************************************************************************ 
 +* IDPOST 
 +* Dans un nom de fichier, remplace @ par le numéro de poste de 1 à 9 ou de A à V. 
 +************************************************************************************************************ 
 +IDPOST SET    * 
 +       CMPB   #AROB 
 +       BNE    IPRTS 
 + 
 +       LDB    NUPO 
 +       CMPB   #10 
 +       BCC    IPALFA 
 + 
 +       ADDB   #'0 
 +       BRA    IPRTS 
 + 
 +IPALFA ADDB   #$37 
 + 
 +IPRTS  RTS 
 + 
 +************************************************************************************************************ 
 +* LUSTR 
 +* Recherche une chaîne de caractères dans une table 
 +************************************************************************************************************ 
 +LUSTR  SET    * 
 +       PSHS   A 
 +       TSTA 
 + 
 +LULOOP BEQ    LUNOTF 
 +       CMPB   ,X+ 
 +       BEQ    LUFND 
 + 
 +       DEC    ,S 
 +       BRA    LULOOP 
 + 
 +LUNOTF LEAS   1,S 
 +       ANDCC  #$FB 
 +       RTS 
 + 
 +LUFND  SUBA   ,S+ 
 +       ASLA 
 +       PSHS   A,B 
 +       LEAX   A,Y 
 +       LDD    ,X 
 +       LEAX   START,PCR 
 +       LEAX   D,X 
 +       ORCC   #4 
 +       PULS   PC,B,A 
 + 
 +************************************************************************************************************ 
 +* ENTREE 
 +* Attends de presser ENTREE pour continuer. Inutilisé. 
 +************************************************************************************************************ 
 +ENTREE SET    * 
 +       PSHS   A,B,X,Y 
 +       LEAX   CNTSTR,PCR 
 +       LBSR   DSPSTR 
 + 
 +ENTKEY LBSR   GETKEY 
 +       CMPB   #CR 
 +       BNE    ENTKEY 
 + 
 +       PULS   PC,Y,X,B,A 
 + 
 +CNTSTR FCB    CR, LF 
 +       FCB    US, $40+24, $40+1 
 +       FCC    /<entr/ 
 +       FCB    ACC, 'B 
 +       FCS    /ee> pour continuer. / 
 + 
 +************************************************************************************************************ 
 +* SKPSPC 
 +* Saute les caractères espace dans une chaîne 
 +************************************************************************************************************ 
 +SKPSPC SET    * 
 +       TSTA 
 +       BEQ    SKRTS 
 + 
 +       LDB    ,X 
 +       CMPB   #SPACE 
 +       BNE    SKRTS 
 + 
 +       DECA 
 +       LEAX   1,X 
 +       BRA    SKPSPC 
 + 
 +SKRTS  RTS 
 + 
 +************************************************************************************************************ 
 +* UPCASE 
 +* Convertit un caractère minuscule en majuscule 
 +************************************************************************************************************ 
 +UPCASE SET    * 
 +       CMPB   #'a 
 +       BCS    UPRTS 
 + 
 +       CMPB   #'z 
 +       BHI    UPRTS 
 + 
 +       SUBB   #$20 
 + 
 +UPRTS  RTS 
 + 
 +************************************************************************************************************ 
 +* STRUPR 
 +* Convertit une chaîne de caractères minuscules en majuscules 
 +************************************************************************************************************ 
 +STRUPR SET    * 
 +       PSHS   A,B,X 
 +       TSTA 
 + 
 +SULOOP BEQ    SURTS 
 + 
 +       LDB    ,X 
 +       BSR    UPCASE 
 +       STB    ,X+ 
 +       DECA 
 +       BRA    SULOOP 
 + 
 +SURTS  PULS   PC,X,B,A 
 + 
 +************************************************************************************************************ 
 +* MEMCPY 
 +* Copie une zone mémoire 
 +************************************************************************************************************ 
 +MEMCPY SET    * 
 +       TSTA 
 + 
 +MCLOOP BNE    MCNXT 
 +       RTS 
 + 
 +MCNXT  LDB    ,Y+ 
 +       STB    ,X+ 
 +       DECA 
 +       BRA    MCLOOP 
 + 
 +************************************************************************************************************ 
 +* PRSH16 
 +* Convertit 4 caractères représentant un nombre hexadécimal en entier 16 bits. Inutilisé. 
 +************************************************************************************************************ 
 +PRSH16 SET    * 
 +       LDY    #0 
 +       PSHS   Y 
 +       LBSR   SKPSPC 
 +       PSHS   CC 
 +       LEAX   1,X 
 +       PULS   CC 
 +       BEQ    PHRTS 
 + 
 +       BRA    PHLP1 
 + 
 +PHNXTC BSR    GETACH 
 +       BNE    PHLP1 
 + 
 +PHRTS  PULS   PC,Y 
 + 
 +PHLP1  BSR    ISHEX 
 +       BCC    PHCONV 
 + 
 +       LEAX   -1,X 
 +       INCA 
 +       BRA    PHRTS 
 + 
 +PHCONV LDY    #4 
 + 
 +PHLP2  ASL    1,S 
 +       ROL    ,S 
 +       LEAY   -1,Y 
 +       BNE    PHLP2 
 + 
 +       ADDB   1,S 
 +       STB    1,S 
 +       BRA    PHNXTC 
 + 
 +************************************************************************************************************ 
 +* ISHEX 
 +* Convertit un caractère représentant un chiffre hexadécimal en entier 4 bits 
 +************************************************************************************************************ 
 +ISHEX  SET    * 
 +       LBSR   UPCASE 
 +       SUBB   #'0 
 +       BCS    IHRTS 
 + 
 +       CMPB   #10 
 +       BCS    IHDONE 
 + 
 +       SUBB   #7 
 +       CMPB   #10 
 +       BCS    IHERR 
 + 
 +       CMPB   #16 
 +       BCC    IHERR 
 + 
 +IHDONE ANDCC  #$FE 
 + 
 +IHRTS  RTS 
 + 
 +IHERR  ORCC   #1 
 +       RTS 
 + 
 +************************************************************************************************************ 
 +* GETACH 
 +* Récupère le prochain caractère dans une chaîne 
 +************************************************************************************************************ 
 +GETACH SET    * 
 +       TSTA 
 +       BEQ    GCRTS 
 + 
 +       LDB    ,X+ 
 +       DECA 
 +       ANDCC  #$FB 
 + 
 +GCRTS  RTS 
 + 
 +************************************************************************************************************ 
 +* PRSNMB 
 +* Convertit une chaîne de caractère en entier 
 +************************************************************************************************************ 
 +PRSNMB SET    * 
 +       CLR    ,-S 
 +       CLR    ,-S 
 +       PSHS   B 
 +       TSTA 
 +       BEQ    PNERR 
 + 
 +PNLOOP TSTA 
 +       BEQ    PNRTS1 
 + 
 +       LDB    ,X 
 +       LBSR   UPCASE 
 +       CMPB   #SPACE 
 +       BEQ    PNRTS1 
 + 
 +       SUBB   #'0 
 +       CMPB   #10 
 +       BCS    PNVLD 
 + 
 +       CMPB   #17 
 +       BCS    PNERR 
 + 
 +       SUBB   #7 
 + 
 +PNVLD  CMPB   ,S 
 +       BCC    PNERR 
 + 
 +       LEAX   1,X 
 +       DECA 
 +       PSHS   A 
 +       LDA    1,S 
 +       PSHS   A 
 +       LDA    #0 
 + 
 +PNMUL  ADDD   3,S 
 +       BCS    PNRTS2 
 +       DEC    ,S 
 +       BNE    PNMUL 
 + 
 +       STD    3,S 
 +       PULS   A 
 +       PULS   A 
 +       BRA    PNLOOP 
 + 
 +PNRTS1 ANDCC  #$FE 
 +       PULS   PC,Y,B 
 + 
 +PNERR  ORCC   #1 
 +       PULS   PC,Y,B 
 + 
 +PNRTS2 PULS   B 
 +       PULS   PC,Y,B,A 
 + 
 +************************************************************************************************************ 
 +* PRSPFX 
 +* Demande un nombre décimal ou hexadécimal. Inutilisé. 
 +************************************************************************************************************ 
 +PRSPFX SET    * 
 +       LEAX   BUF06C,PCR 
 +       LBSR   TINPUT 
 +       BNE    PPCHK 
 + 
 +       LDY    #0 
 +       RTS 
 + 
 +PPCHK  PSHS   CC 
 +       LBSR   DCRLF 
 +       LDB    ,X 
 +       CMPB   #DOLLAR 
 +       BNE    PPDEC 
 + 
 +       LEAX   1,X 
 +       DECA 
 +       LDB    #16 
 +       BRA    PPDOIT 
 + 
 +PPDEC  LDB    #10 
 + 
 +PPDOIT LBSR   PRSNMB 
 +       PULS   PC,CC 
 + 
 +************************************************************************************************************ 
 +* BN2HX 
 +* Convertit un entier 16 bits en chaîne de caractères hexadécimale 
 +************************************************************************************************************ 
 +BN2HX  SET    * 
 +       PSHS   U 
 +       LEAU   BASE16,PCR 
 +       BRA    BN2GO 
 + 
 +************************************************************************************************************ 
 +* BN2DC 
 +* Convertit un entier 16 bits en chaîne de caractères décimale 
 +************************************************************************************************************ 
 +BN2DC  SET    * 
 +       PSHS   U 
 +       LEAU   BASE10,PCR 
 + 
 +BN2GO  PSHS   A,B 
 +       LDA    ,U+ 
 +       STA    1,S 
 +       PULS   A 
 + 
 +BN2LP1 BSR    DIVISE 
 +       BNE    BN2CNV 
 + 
 +       DEC    ,S 
 +       BNE    BN2LP1 
 + 
 +       LDB    #'0 
 +       STB    ,X+ 
 +       BRA    BN2RTS 
 + 
 +BN2LP2 BSR    DIVISE 
 + 
 +BN2CNV PSHS   B 
 +       LDB    ,X 
 +       ADDB   #'0 
 +       CMPB   #'9 
 +       BLS    BN2DGT 
 + 
 +       ADDB   #7 
 + 
 +BN2DGT STB    ,X+ 
 +       PULS   B 
 +       DEC    ,S 
 +       BNE    BN2LP2 
 + 
 +BN2RTS PULS   PC,U,A 
 + 
 +************************************************************************************************************ 
 +* DIVISE 
 +* Effectue une division 
 +************************************************************************************************************ 
 +DIVISE SET    * 
 +       CLR    ,X 
 + 
 +DVLOOP SUBD   ,U 
 +       BCS    DVDONE 
 + 
 +       INC    ,X 
 +       BRA    DVLOOP 
 + 
 +DVDONE ADDD   ,U++ 
 +       TST    ,X 
 +       RTS 
 + 
 +BASE10 FCB    5 
 +       FDB    10000 
 +       FDB    1000 
 +       FDB    100 
 +       FDB    10 
 +       FDB    1 
 + 
 +BASE16 FCB    4 
 +       FDB    $1000 
 +       FDB    $100 
 +       FDB    $10 
 +       FDB    $1 
 + 
 +************************************************************************************************************ 
 +* DINT 
 +* Affiche un entier 8 bits en décimal 
 +************************************************************************************************************ 
 +DINT   SET    * 
 +       CLRA 
 +       BSR    CNVDEC 
 +       LEAX   -2,X 
 +       LBRA   DSPSTR 
 + 
 +************************************************************************************************************ 
 +* DSPDC1 
 +* Affiche un entier 16 bits en décimal 
 +************************************************************************************************************ 
 +DSPDC1 SET    * 
 +       BSR    CNVDEC 
 +       LEAX   -5,X 
 +       LBRA   DSPSTR 
 + 
 +************************************************************************************************************ 
 +* DSPDC2 
 +* Affiche un entier en décimal 
 +************************************************************************************************************ 
 +DSPDC2 BSR    CNVDEC 
 +       LEAX   CNVBUF,PCR 
 +       LBRA   DSPSTR 
 + 
 +************************************************************************************************************ 
 +* CNVDEC 
 +* Convertit un entier 16 bits en décimal 
 +************************************************************************************************************ 
 +CNVDEC SET    * 
 +       LEAX   CNVBUF,PCR 
 +       BSR    BN2DC 
 +       CLR    ,X 
 +       RTS 
 + 
 +************************************************************************************************************ 
 +* DISPHX 
 +* Affiche un entier 16 bits en hexadécimal. Inutilisé. 
 +************************************************************************************************************ 
 +DISPHX SET    * 
 +       LEAX   CNVBUF,PCR 
 +       PSHS   X 
 +       LBSR   BN2HX 
 +       CLR    ,X 
 +       PULS   X 
 +       LBRA   DSPSTR 
 +        
 +       FCC    /    / 
 +        
 +CNVBUF RMB    6,0       
 </code> </code>
 [[code_source_de_nrdos.mo5_version_3.5|Retourner à la liste des fichiers]] [[code_source_de_nrdos.mo5_version_3.5|Retourner à la liste des fichiers]]
utils.asm.1767353478.txt.gz · Last modified: by fool-duplex

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki