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
ORAB #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 YESNO
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
libmo5.asm.1767007019.txt.gz · Last modified: by fool-duplex
