;----------------------------------------------------------------------------------------------- ;Par Marc Plouhinec (site: http://www.thebestof.tk email:m_plouhinec@yahoo.fr) ;Petit programme qui explique comment faire du son ;C'est une balle qui rebondit sur l'écran, si la balle touche un rebort alors on entend un son. ;Ce logiciel est un exemple pour les programmeurs de SNG ;----------------------------------------------------------------------------------------------- #include "sng10.inc" .ORG START_ADDR .DB "Exemple son",0 ROM_CALL(CLEARLCD) ;efface l'écran ;balle qui rebondis sur l'ecran LD HL,$0100 ;On place le curseur aux coordonnées (1,0) LD (CURSOR_POS),HL ; LD A,1 ; LD (avance_lettre_x),A ;avance_lettre_x = 1 }Si avance_lettre_x>0 alors la balle avance d'un cran vers la droite ; Si avance_lettre_x<0 alors la balle avance d'un cran vers la gauche LD (avance_lettre_y),A ;avance_lettre_y = 1 }Si avance_lettre_y>0 alors la balle avance d'un cran vers la bas ; Si avance_lettre_y<0 alors la balle avance d'un cran vers la haut boucle: ; ROM_CALL(CLEARLCD) ;efface l'écran LD HL,(CURSOR_POS) ;charge dans HL les coordonnées de la balle LD A,$30 ;--|Affiche la balle ROM_CALL(TX_CHARPUT) ;--| LD (CURSOR_POS),HL ;restore les coordonnées de la balle LD A,(avance_lettre_x) ;--| ADD A,H ; | LD H,A ; |Incrémente ou décrémente les coordonnées de la balle. LD A,(avance_lettre_y) ; | ADD A,L ; | LD L,A ; | LD (CURSOR_POS),HL ;--| LD A,H ;La balle touche t'elle le bord droit? CP 15 ; JR NZ,pasyegual16 ; LD A,(avance_lettre_x) ;--| DEC A ; | avance_lettre_x = -1 DEC A ; | LD (avance_lettre_x),A ;--| ;------------------------ DI ;Emet un son PUSH HL ; ld b, 5 ; SON_BOUCLE1: ; LD HL,700 ; HL = ton LD DE,100 ; DE = temps call BEEP ; djnz SON_BOUCLE1 ; POP HL ; EI ; ;------------------------ pasyegual16: LD A,L ;La balle touche t'elle le bord bas? CP 7 ; JR NZ,pasxegual16 ; LD A,(avance_lettre_y) ;--| DEC A ; |avance_lettre_y = -1 DEC A ; | LD (avance_lettre_y),A ;--| ;------------------------ DI ;Emet un son PUSH HL ; ld b, 5 ; SON_BOUCLE2: ; LD HL,500 ; HL = ton LD DE,100 ; DE = temps call BEEP ; djnz SON_BOUCLE2 ; POP HL ; EI ; ;------------------------ pasxegual16: LD A,H ;La balle touche t'elle le bord gauche? CP 0 ; JR NZ,pasyegual0 ; LD A,(avance_lettre_x) ;--| INC A ; |avance_lettre_x = 1 INC A ; | LD (avance_lettre_x),A ;--| ;------------------------ DI ;Emet un son PUSH HL ; ld b, 5 ; SON_BOUCLE3: ; LD HL,900 ; HL = ton LD DE,100 ; DE = temps call BEEP ; djnz SON_BOUCLE3 ; POP HL ; EI ; ;------------------------ pasyegual0: LD A,L ;La balle touche t'elle le bord haut? CP 0 ; JR NZ,pasxegual0 ; LD A,(avance_lettre_y) ;--| INC A ; |avance_lettre_y = 1 INC A ; | LD (avance_lettre_y),A ;--| ;------------------------ DI ;Emet un son PUSH HL ; ld b, 5 ; SON_BOUCLE4: ; LD HL,200 ; HL = ton LD DE,100 ; DE = temps call BEEP ; djnz SON_BOUCLE4 ; POP HL ; EI ; ;------------------------ pasxegual0: LD B,$9 ; ralenti: ;ralenti la balle HALT ; DJNZ ralenti ; ld a,$FF ; out (1),a ; ld a,$FD ;Vérifie si on appuye sur la touche [CLEAR] out (1),a ;Si oui alors on arr^te le programme. in a,(1) ; and %01000000 ; jp nz,boucle ; RET avance_lettre_x .DB 0 avance_lettre_y .DB 0 ;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