;----------------------------------------------------------------------------------------------- ;Par Marc Plouhinec (site: http://www.thebestof.tk email:m_plouhinec@yahoo.fr) ;Petit programme qui explique comment faire de la musique de fond ;Ce programme fait une interruption qui fait du son ;Ce logiciel est un exemple pour les programmeurs de SNG ; ;Attention: si cette routine fait déconner VTI ou la calculette ;Enlevez: ; LD DE,musique ;--|Lance la musique de fond ; CALL NEW_INTERRUPT ;--| ;et ; LD A,0 ;--|arrête la musique de fond ; CALL STOP_INTERRUPT ;--| ;et rajoutez dans la boucle principale: ; CALL musique ;----------------------------------------------------------------------------------------------- #include "sng10.inc" .ORG START_ADDR .DB "Exemple musique",0 ROM_CALL(CLEARLCD) ;efface l'écran LD HL,0 ; LD (numnote),HL ; LD DE,musique ;--|Lance la musique de fond CALL NEW_INTERRUPT ;--| boucle: ; CALL affiche_numero_note ld a,$FF ; out (1),a ; ld a,$FD ;Attend l'appui de la touche [CLEAR] out (1),a ;(Vous remarquez que la musique de fond n'est pas gérée ici) in a,(1) ; and %01000000 ; jr nz,boucle ;tant que [CLEAR] n'est pas pressé, va à boucle LD A,0 ;--|arrête la musique de fond CALL STOP_INTERRUPT ;--| RET ;quitte affiche_numero_note: LD HL,0 LD (CURSOR_POS),HL LD HL,(numnote) ROM_CALL(D_HL_DECI) RET maxnote = 11 musique: ;routine qui joue la musique LD HL,(numnote) ;--| LD DE,maxnote ; |Est-ce que c'est la dernière note que l'on joue ? CALL CP_HL_DE ; | JR NZ,jouenote ;--| LD HL,0 ;----|si oui, remet la note à 0 ld (numnote),HL ;----| jouenote: ; LD HL,(compteur) ;--| LD DE,50 ; |Le compteur est-il égal à 100 ? CALL CP_HL_DE ; | JR NZ,changepasdenote ;--| LD HL,0 ;----| LD (compteur),HL ; |Si oui, réinitialise le compteur LD HL,(numnote) ; |Charge dans numnote le numéro de la note suivante INC HL ; | LD (numnote),HL ;----| changepasdenote: ; LD HL,(compteur) ;--| INC HL ; |Incrémente le compteur LD (compteur),HL ;--| LD HL,(numnote) ;----| LD BC,2 ; | CALL MUL_HL_BC ; | EX DE,HL ; |Charge la note dans HL LD HL,buffernote ; | ADD HL,DE ; | CALL LD_HL_MHL ;----| PUSH HL ;--| ld b, 5 ; | SON_BOUCLE4: ; | POP HL ; | PUSH HL ; |Joue la note enregistrée dans HL LD DE,100 ; | call BEEP ; | djnz SON_BOUCLE4 ; | POP HL ;--| RET ; compteur .DW 0 numnote .DW 0 buffernote: .DW 100,200,300,400,500,600,700,800,900,1000,1100 ;pour les anciennes TI-82 ;#define P_HI %11000000 ;code to put port high $C0 ;#define P_LO %11111100 ;code to put port low $FC ;pour les nouvelles TI-82 (merci à www.paneteti82.fr.st) #define P_HI $C0 ;code to put port high $C0 #define P_LO $C3 ;code to put port low $FC #define C_PORT %00000000 ;addres of com port $00 ;HL = ton ;DE = durée BEEP: ;by Eric Linenberg push af push bc ; di set_low: ld b,P_LO ld c,C_PORT out (c),b push hl Delay16bit1: dec hl ld a,l or h jr nz,Delay16bit1 pop hl set_high: ld b,P_HI ld c,C_PORT out (c),b push hl Delay16bit2: dec hl ld a,l or h jr nz,Delay16bit2 pop hl dec de ld a,d ; ei pop bc pop af RET .end END