[[code_source_de_nrdos.mo5_version_3.5|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,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_source_de_nrdos.mo5_version_3.5|Retourner à la liste des fichiers]]