; *** HUITIEME PROGRAMME : LES SPRITES EN MOUVEMENT **** ; ; 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 ; *************** ZONE DE BYTE ******************* Player0 BYTE. 8,8,8,8,28,28,93,93,127,127,127,93,93,8,8,0 Player1 BYTE. 60,126,126,255,153,153,189,165,255,255,171,129,215,126,126,0 ; ************** FIN DE ZONE DE BYTE ***************** ; ************** 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 #134 ; Couleur : bleu STA COLUP0 ; pour le missile et le player 0 LDA #14 ; Couleur : blanc STA COLUP1 ; pour le missile et le player 1 LDA #198 ; couleur : vert STA COLUPF ; pour la balle et le playfield LDA #2 ; Autorise ... STA ENAM0 ; le missile0, STA ENAM1 ; le missile1, STA ENABL ; et la balle. LDA #48+5 ; 48 => Taille missile0 x 8 ; 5 => Taille player0 x 2 STA NUSIZ0 ; dans le registre de taille et de répétition 0 LDA #16+3 ; 16 => Taille missile1 x 2 ; 3 => taille player1 x 1 répété 3 x STA NUSIZ1 ; dans le registre de taille et de répétition 1 LDX #0 ; On initialise X Boucle1 ; Etiquette LDA Player0,X ; Charge le graphisme du player0 dans A STA WSYNC ; Attente de la fin d'affichage de la ligne STA GRP0 ; Met A dans graphique du player0 LDA Player1,X ; Charge le graphisme du Player1 dans A STA GRP1 ; Met A dans graphique du player1 INX ; Incrémente X CPX #16 ; Compare X à 16 BNE Boucle1 ; Si pas égal, saute à boucle1 LDA #0 ; met A à 0 STA ENAM0 ; pour effacer le missile0, STA ENAM1 ; le missile1 STA ENABL ; et la balle LDX #0 ; Met X à 0 Boucle2 STA WSYNC ; Attente de la fin du balayage INX CPX #176 ; Compare X à 176 BNE Boucle2 ; Si pas égal, saute à boucle 2 LDA #16 ; 16 pour la gauche STA HMM0 ; Déplacement du Missile0 LDA #240 ; 240 pour la droite STA HMP0 ; Déplacement du Player0 STA HMOVE ; Le simple fait d'écrire dans HMOVE ; effectue le déplacement des sprites ; ********** FIN DE L'AFFICHAGE ********* 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. --------------------------------------------------------------------- @echo off dasm prog20.txt -f3 -v3 -oprog20.bin if errorlevel 1 goto erreur goto fin :erreur pause :fin pcae prog20.bin