; *** SEIZIEME PROGRAMME : UNE MELODIE EN GAMME DECALEE **** ; ; Voici le code source entier ; les point-virgules sont pour les commentaires ; qui ne sont pas pris en compte par l'assembleur. ; N'utilisez jamais de tabulation pour créer ; des espaces car l'assembleur les refuse. include vcs2600.h org $F000 ; *********** DECLARATION DES LIGNES DE BYTE ************ Melodie BYTE. 0,20,20,20,14,16,16,24,24,24,24,26,24,18,18,20,20,20 BYTE. 20,20,15,15,24,24,20,28,28,28,28,28,28 BYTE. 18,18,18,18,18,23,18,16,15,13,15,20,15,11,12,12,20 BYTE. 23,24,24,24,20,28,28,28,20,31,31,31,31,31,0,0,0,0,0 Pfaible = 128 ; Poids faible Pfort = 129 ; Poids fort Note = 130 ; Note ; ************** ZONE D'INITIALIZATION *************** Start SEI ; Ne modifiez rien à ces CLD ; lignes car elles LDX #255 ; initialisent le système TXS ; LDA #0 ; B1 STA 0,X ; effacement de la RAM DEX ; BNE B1 ; MainLoop ; LDA #2 ; Ne changez rien à ces STA WSYNC ; lignes car elles STA WSYNC ; initialisent l'affichage STA WSYNC ; STA VSYNC ; STA WSYNC ; STA WSYNC ; LDX #53 ; STX TIM64T ; LDA #0 ; STA WSYNC ; STA VSYNC ; STA CXCLR ; LDA #1 ; STA CTRLPF ; DrawScreen ; LDA INTIM ; BNE DrawScreen STA WSYNC ; STA VBLANK ; ; **************** DEBUT D'AFFICHAGE ***************** LDA #4 ; On met du gris STA COLUBK ; en fond d'écran LDX #0 ; On initialise X Boucle1 ; Etiquette TXA ; transfert X dans A CLC ; Obligatoire avant un ADC ADC #100 ; Ajoute 100 à A CMP Note ; Compare à Note BNE Suite ; Si différent, saute à Suite LDA #136 ; Sinon Charge 136 (bleu) dans A STA COLUBK ; Pour le mettre en fond d'écran Suite ; Etiquette STA WSYNC ; Attend fin de l'affichage INX ; Incrémente X CPX #228 ; Compare X à 32 BNE Boucle1 ; S'il pas égal, saute à boucle1 ; ****************** ON JOUE LE SON ****************** LDA #15 ; Volume à fond STA AUDV0 ; Dans le registre de volume LDA #4 ; Type de son STA AUDC0 ; Dans le registre de type de son INC Pfaible ; Incrémente Pfaible LDA Pfaible ; Charge Pfaible dans A CMP #20 ; Compare à 20 BNE Paschange ; Si différent, saute à Paschange LDA #0 ; Charge 0 dans A STA Pfaible ; Sauve A dans Pfaible INC Pfort ; Incrémente Pfort LDA Pfort ; Charge Pfort dans A CMP #65 ; Compare A à 65 BNE Chante ; Si différent saute à Chante LDA #0 ; Sinon met 0... STA Pfort ; ... dans Pfort Chante ; Etiquette LDX Pfort ; Charge Pfort dans X LDA Melodie,X ; Met adresse de melodie+X dans A STA AUDF0 ; Met A dans le registre de fréquence STA Note ; et également dans Note Paschange ; Etiquette ; **************** FIN DU BALAYAGE ****************** LDX #36 ; On compte les 36 lignes d'overscan Boucle4 ; Etiquette STA WSYNC ; Attend la fin de la ligne DEX ; Décrémente X CPX #0 ; Si X est diffférent à 0 BNE Boucle4 ; On branche à Boucle4 JMP MainLoop ; Saute à Mainloop org $FFFC ; Ces trois lignes servent à .word Start ; déclarer à la VCS à quelle adresse .word Start ; commence le programme.