User Tools

Site Tools


libmo5.asm

This is an old revision of the document!


Retourner à la liste des fichiers

* NRDOS.MO5 version 3.5
* LIBMO5.ASM (Routines système)

************************************************************************************************************
MEMFRM SET    *             
       PSHS   B             
       LDB    SYSPRA        
       ORAB   #1            
       STB    SYSPRA        
       PULS   PC,B          
                            
GETKEY SET    *             
       LDB    KEYFLG,PCR
       BEQ    GKLP01        
                            
       CLR    KEYFLG,PCR
       RTS                  
                            
GKLP01 CALL   GETCH         
       BEQ    GKLP01        
                            
       RTS                  
                            
KEYFLG FCB 0                
                            
KEYPRS SET    *             
       TST    KEYFLG        
       BNE    KPRTS         
                            
       CALL   GETCH         
       BNE    KPFLAG        
                            
       RTS                  
                            
KPFLAG STB    KEYFLG-*-3,PC ; Bug ?
                            
KPRTS  RTS                  
                            
PCHAR  SET    *             
       GOTO   PUTCH         
                            
DCRLF  SET    *             
       PSHS   CC,B          
       LDB    #CR           
       LBSR   PCHAR         
       LDB    #LF           
       LBSR   PCHAR         
       PULS   PC,B,CC       
                            
DSPACE SET    *             
       PSHS   CC,B          
       LDB    #SPACE        
       LBSR   PCHAR         
       PULS   PC,B,CC       
                            
PLAY   SET    *             
       GOTO   NOTEH         
                            
                            
DSPSTR SET    *             
       LDB    ,X+           
       BNE    DSDO          
                            
       RTS                  
                            
DSDO   LBSR   PCHAR         
       BRA    DSPSTR        
                            
DSPSTL SET    *             
       PSHS   A,B,X         
                            
DLLOOP TSTA                 
       BEQ    DLRTS         
                            
       LDB    ,X+           
       LBSR   PCHAR         
       DECA                 
       BRA    DLLOOP        
                            
DLRTS  PULS   PC,X,B,A      
                            
YESNO  SET    *             
       LEAX   YNBUFF,PCR 
       LBSR   TINPUT        
       BEQ    YESNO         
                            
       LDB    ,X            
       LBSR   UPCASE        
       CMPB   #'O          
       BEQ    YNRTS         
                            
       CMPB   #'N          
       BEQ    YNRTS         
                            
       LBSR   DISPBS        
       LBSR   BEEP          
       BRA    YESNO         
                            
YNRTS  RTS                  
                            
TINPUT SET    *             
       PSHS   B,U           
       TFR    X,U          
       LDA    ,X++          
       PSHS   X             
                            
TILOOP TST    FOFLG           ; Fichier ouvert ?
       BEQ    TIKYBD        
                            
       LBSR   FGETCH          ; Oui, on va lire un caractère
       BRA    TIKEYS          
                            
TIKYBD LBSR   GETKEY          ; Non, on lit au clavier
                            
TIKEYS CMPB   #CR             ; Fin de ligne
       BEQ    TIEND         
                            
       CMPB   #EOF            ; Fin de fichier
       BEQ    TIEND         
                            
       CMPB   #LEFT           ; Efface le dernier caractère
       BEQ    TILEFT        
                            
       CMPB   #UP             ; Efface toute la ligne
       BEQ    TIUPLP        
                            
       CMPB   #RIGHT          ; Rétablit le dernier caractère
       BEQ    TIRGHT        
                            
       CMPB   #DOWN           ; Rétablit toute la ligne
       BEQ    TIDNLP        
                            
       CMPB   #SPACE          ; Caractères 0..31 interdits
       BCS    TIERR         
                            
       CMPB   #127            ; Caractères 128..255 interdits
       BHI    TIERR         
                            
       TSTA                   ; Plus de place dans le buffer ?
       BEQ    TIERR         
                            
       STB    ,X+             ; On ajoute le caractère
       DECA                 
       LBSR   PCHAR           ; Et on l'affiche
       BRA    TILOOP        
                            
TILEFT CMPA   ,U              ; Buffer vide ?
       BEQ    TIERR         
                            
       BSR    DELCHR          ; Efface le dernier caractère
       BRA    TILOOP        
                            
DELCHR SET    *                 
       LBSR   ISPBS         
       INCA                 
       LEAX   1,X           
       RTS                  
                            
TIUPLP CMPA   ,U              ; Buffer vide ?
       BEQ    TILOOP        
                            
       BSR    DELCHR          ; Efface un caractère
       BRA    TIUPLP        
                            
TIRGHT TSTA                   ; Fin de buffer ?
       BEQ    TIERR         
                            
       BSR    RSTCHR          ; Restaure le dernier caractère
       BRA    TILOOP        
                            
RSTCHR SET    *              
       TFR    A,B          
       SUBB   ,U            
       NEGB                 
       CMPB   1,U           
       BCC    RCERR         
                            
       LDB    ,X            
       CMPB   #SPACE          
       BCS    RCERR         
                            
       CMPB   #127          
       BHI    RCERR         
                            
       DECA                 
       LEAX   1,X           
       LBSR   PCHAR         
       ANDCC  #$FE          
       RTS                  
                            
RCERR  ORCC   #1            
       RTS                  
                            
TIDNLP TSTA                   ; Fin de buffer ?
       BEQ    TIERR         
                            
       BSR    RSTCHR          ; Restaure un caractère
       BCC    TIDNLP        
                            
       LBRA   TILOOP        
                            
TIEND  SUBA   ,U            
       NEGA                 
       STA    1,U           
       PULS   X               ; X pointe sur le résultat
       PULS   PC,U,B        
                            
TIERR  BSR    BEEP          
       LBRA   TILOOP        
                            
BEEP   SET    *              
       PSHS   CC,A,B        
       LDD    #8            
       STD    OCTAVE        
       LDB    #36           
       STB    DUREE         
       LDB    #5            
       STB    TEMPO         
       LDB    #3            
       STB    TIMBRE        
       LDB    #$31            ; Devrait être $01 (MO5), pas $31 (TO7)
       LBSR   PLAY          
       PULS   PC,B,A,CC     
                            
DHEX8  SET    *                  
       PSHS   B             
       LSRB                 
       LSRB                 
       LSRB                 
       LSRB                 
       BSR    DHXDGT        
       PULS   B             
       ANDB   #$F           
                            
DHXDGT SET    *              
       CMPB   #10           
       BCC    DHDHEX        
                            
       ADDB   #'0           
       LBRA   PCHAR         
                            
DHDHEX ADDB   #$37            ; Correction pour caractère A..F
       LBRA   PCHAR         

Retourner à la liste des fichiers

libmo5.asm.1767004426.txt.gz · Last modified: by fool-duplex

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki