User Tools

Site Tools


libmo5.asm

Differences

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

Link to this comparison view

Next revision
Previous revision
libmo5.asm [2025/12/22 22:07] – created fool-duplexlibmo5.asm [2026/01/05 18:15] (current) – fool-duplex
Line 2: Line 2:
  
 <code>* NRDOS.MO5 version 3.5 <code>* NRDOS.MO5 version 3.5
-* LIBMO5.ASM (Gestion des erreurs)+* LIBMO5.ASM (Routines système)
  
 ************************************************************************************************************ ************************************************************************************************************
 +* MEMFRM
 +* Bascule en mémoire vidéo forme
 +************************************************************************************************************
 +MEMFRM SET    *
 +       PSHS   B
 +       LDB    SYSPRA
 +       ORB    #1
 +       STB    SYSPRA
 +       PULS   PC,B
 +
 +************************************************************************************************************
 +* GETKEY
 +* Lit une touche au clavier
 +************************************************************************************************************
 +GETKEY SET    *
 +       LDB    KEYFLG,PCR
 +       BEQ    GKLP01
 +
 +       CLR    KEYFLG,PCR
 +       RTS
 +
 +GKLP01 CALL   GETCH
 +       BEQ    GKLP01
 +
 +       RTS
 +
 +KEYFLG FCB 0
 +
 +************************************************************************************************************
 +* KEYPRS
 +* Teste si une touche a été pressée
 +************************************************************************************************************
 +KEYPRS SET    *
 +       TST    KEYFLG
 +       BNE    KPRTS
 +
 +       CALL   GETCH
 +       BNE    KPFLAG
 +
 +       RTS
 +
 +KPFLAG STB    KEYFLG,PCR ; Bug ?
 +
 +KPRTS  RTS
 +
 +************************************************************************************************************
 +* PCHAR
 +* Affiche un caractère
 +************************************************************************************************************
 +PCHAR  SET    *
 +       GOTO   PUTCH
 +
 +************************************************************************************************************
 +* DCRLF
 +* Effectue un retour à la ligne
 +************************************************************************************************************
 +DCRLF  SET    *
 +       PSHS   CC,B
 +       LDB    #CR
 +       LBSR   PCHAR
 +       LDB    #LF
 +       LBSR   PCHAR
 +       PULS   PC,B,CC
 +
 +************************************************************************************************************
 +* DSPACE
 +* Affiche une espace
 +************************************************************************************************************
 +DSPACE SET    *
 +       PSHS   CC,B
 +       LDB    #SPACE
 +       LBSR   PCHAR
 +       PULS   PC,B,CC
 +
 +************************************************************************************************************
 +* PLAY
 +* Joue une note de musique
 +************************************************************************************************************
 +PLAY   SET    *
 +       GOTO   NOTEH
 +
 +************************************************************************************************************
 +* DSPSTR
 +* Affiche une chaîne de caractère terminée par 0.
 +************************************************************************************************************
 +DSPSTR SET    *
 +       LDB    ,X+
 +       BNE    DSDO
 +
 +       RTS
 +
 +DSDO   LBSR   PCHAR
 +       BRA    DSPSTR
 +
 +************************************************************************************************************
 +* DSPSTL
 +* Affiche une chaîne de caractère de longueur A.
 +************************************************************************************************************
 +DSPSTL SET    *
 +       PSHS   A,B,X
 +
 +DLLOOP TSTA
 +       BEQ    DLRTS
 +
 +       LDB    ,X+
 +       LBSR   PCHAR
 +       DECA
 +       BRA    DLLOOP
 +
 +DLRTS  PULS   PC,X,B,A
 +
 +************************************************************************************************************
 +* OUINON
 +* Attend que l'utilisateur presse O ou N
 +************************************************************************************************************
 +OUINON SET    *
 +       LEAX   YNBUFF,PCR
 +       LBSR   TINPUT
 +       BEQ    OUINON
 +
 +       LDB    ,X
 +       LBSR   UPCASE
 +       CMPB   #'O
 +       BEQ    YNRTS
 +
 +       CMPB   #'N
 +       BEQ    YNRTS
 +
 +       LBSR   DISPBS
 +       LBSR   BEEP
 +       BRA    OUINON
 +
 +YNRTS  RTS
 +
 +************************************************************************************************************
 +* TINPUT
 +* Lit une chaîne de caractère dans un fichier ou au clavier
 +************************************************************************************************************
 +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
 +* Efface un caractère
 +************************************************************************************************************
 +DELCHR SET    *
 +       LBSR   DISPBS
 +       INCA
 +       LEAX   -1,X
 +       RTS
 +
 +************************************************************************************************************
 +* Suite de TINPUT
 +************************************************************************************************************
 +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
 +* Rétablit un caractère
 +************************************************************************************************************
 +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
 +
 +************************************************************************************************************
 +* Suite de TINPUT
 +************************************************************************************************************
 +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
 +* Joue un BEEP
 +************************************************************************************************************
 +BEEP   SET    *
 +       PSHS   CC,A,B
 +       LDD    #8
 +       STD    OCTAVE
 +       LDB    #36
 +       STB    DUREE
 +       LDB    #5
 +       STB    TEMPO
 +       LDB    #3
 +       STB    TIMBRE
 +       LDB    #$31            ; Erreur: devrait être $01 (MO5), pas $31 (TO7)
 +       LBSR   PLAY
 +       PULS   PC,B,A,CC
 +
 +************************************************************************************************************
 +* DHEX8
 +* Affiche un entier 8 bits en hexadécimal
 +************************************************************************************************************
 +DHEX8  SET    *
 +       PSHS   B
 +       LSRB
 +       LSRB
 +       LSRB
 +       LSRB
 +       BSR    DHXDGT
 +       PULS   B
 +       ANDB   #$F
 +
 +************************************************************************************************************
 +* DHXDGT
 +* Affiche un chiffre hexadécimal
 +************************************************************************************************************
 +DHXDGT SET    *
 +       CMPB   #10
 +       BCC    DHDHEX
 +
 +       ADDB   #'0
 +       LBRA   PCHAR
 +
 +DHDHEX ADDB   #$37            ; Correction pour caractère A..F
 +       LBRA   PCHAR
 </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]]
libmo5.asm.1766437657.txt.gz · Last modified: by fool-duplex

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki