User Tools

Site Tools


libmo5.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
libmo5.asm [2025/12/22 22:07] – fool-duplexlibmo5.asm [2026/01/05 18:15] (current) – fool-duplex
Line 5: Line 5:
  
 ************************************************************************************************************ ************************************************************************************************************
 +* 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.1766437679.txt.gz · Last modified: by fool-duplex

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki