; *** PUCES N°20 - NEUVIEME PROGRAMME : DEUX JOYSTICK **** ; ; 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 player 0 LDA #14 ; Couleur : blanc STA COLUP1 ; pour player 1 LDA INPT4 ; Left tir AND #128 ; filtre le bit 7 CMP #0 ; compare à 0 BNE Pastir0 ; si pas égal, branche... LDA #0 ; sinon met en noir STA COLUP0 ; le player 0 Pastir0 LDA INPT5 ; Right tir AND #128 ; filtre le bit 7 CMP #0 ; compare à 0 BNE Pastir1 ; si pas égal, branche... LDA #0 ; sinon met en noir STA COLUP1 ; le player 1 Pastir1 LDA #48+5 ; 5 => Taille player0 x 2 STA NUSIZ0 ; dans le registre de taille et de répétition 0 LDA #16+3 ; 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 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 #255 STA COLUBK ; ********** FIN DE L'AFFICHAGE ********* LDA #0 ; Un 0 dans ces deux registres STA HMP0 ; Initialise les déplacements STA HMP1 ; des deux players ; RIGHT JOYSTICK LDA SWCHA ; Registre d'action des joystick AND #$80 ; Filtre le bit de droite de joy0 CMP #$00 ; si ce bit pas égal à 0 BNE Pasdroite0 ; alors on va pas à droite LDA #255 ; sinon, on met cette valeur STA HMP0 ; dans le registre de déplacement ; du player 0 Pasdroite0 ; LDA SWCHA ; Registre d'action des joystick AND #$40 ; Filtre le bit de gauche de joy0 CMP #$00 ; si ce bit pas égal à 0 BNE Pasgauche0 ; alors on va pas à droite LDA #16 ; sinon, on met cette valeur STA HMP0 ; dans le registre de déplacement ; du player 0 Pasgauche0 ; LEFT JOYSTICK LDA SWCHA ; Registre d'action des joystick AND #$08 ; Filtre le bit de droite de joy1 CMP #$00 ; si ce bit pas égal à 0 BNE Pasdroite1 ; alors on va pas à droite LDA #255 ; sinon, on met cette valeur STA HMP1 ; dans le registre de déplacement ; du player 1 Pasdroite1 ; LDA SWCHA ; Registre d'action des joystick AND #$04 ; Filtre le bit de gauche de joy0 CMP #$00 ; si ce bit pas égal à 0 BNE Pasgauche1 ; alors on va pas à droite LDA #16 ; sinon, on met cette valeur STA HMP1 ; dans le registre de déplacement ; du player 1 Pasgauche1 STA HMOVE ; Le simple fait d'écrire dans HMOVE ; effectue le déplacement du PLAYER0 ; et du PLAYER1 à gauche ou à droite ; en fonction des valeurs mises dans ; HMP0 et HMP1 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.