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
* 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-*-3,PC ; 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   ISPBS
       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

Retourner à la liste des fichiers

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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki