; ******** VINGTIEME ET UNIEME COURS : LES PUCES N°33 ******** ; ; ***************** PLAYERS RAFFINES (SUITE) ************** ; ; ***** Copyright Igor Barzilai - Avril 2001 ******** include vcs2600.h org $F000 ; ************ DECLARATION DES ETIQUETTES ************ ; ***** DES ADRESSES MEMOIRE POUR LES VARIABLES ****** Etat = 128 Compteur = 129 Starty = 130 Endy = 131 ; ************ LIGNES DE BYTE ************* Player ; motif du Player0 BYTE. %01100010 BYTE. %10000011 BYTE. %01000101 BYTE. %00100101 BYTE. %00111000 BYTE. %00111100 BYTE. %10111100 BYTE. %10111110 BYTE. %10111101 BYTE. %01111100 BYTE. %00111100 BYTE. %00011000 BYTE. %00011100 BYTE. %00110000 BYTE. %00111110 BYTE. %00110100 BYTE. %00111100 BYTE. %00111110 BYTE. %00111100 BYTE. %00011000 BYTE. %00110100 BYTE. %01001010 BYTE. %00101000 BYTE. %00101000 BYTE. %00111000 BYTE. %00111100 BYTE. %00111100 BYTE. %01111110 BYTE. %01111100 BYTE. %00111100 BYTE. %00111100 BYTE. %00011000 BYTE. %00011100 BYTE. %00110000 BYTE. %00111110 BYTE. %00110100 BYTE. %00111100 BYTE. %00111110 BYTE. %00111100 BYTE. %00011000 BYTE. %00111110 BYTE. %00101000 BYTE. %00101000 BYTE. %00110000 BYTE. %00111000 BYTE. %00111100 BYTE. %00111100 BYTE. %01111100 BYTE. %00111100 BYTE. %00111100 BYTE. %00111100 BYTE. %00011000 BYTE. %00011100 BYTE. %00110000 BYTE. %00111110 BYTE. %00110100 BYTE. %00111100 BYTE. %00111110 BYTE. %00111100 BYTE. %00011000 BYTE. %00011100 BYTE. %00010000 BYTE. %00010000 BYTE. %00010000 BYTE. %00111000 BYTE. %00111100 BYTE. %00111100 BYTE. %00111100 BYTE. %00111100 BYTE. %00111100 BYTE. %00111100 BYTE. %00011000 BYTE. %00011100 BYTE. %00110000 BYTE. %00111110 BYTE. %00110100 BYTE. %00111100 BYTE. %00111110 BYTE. %00111100 BYTE. %00011000 Color BYTE. 20,20,20,18,130,132,134,134,134,134,136,14,26,26,26,26,20,180,180,180 Table BYTE. 0,0,0,20,20,20,40,40,40,60,60,60,40,40,40,20,20,20 ; ************** ZONE D'INITIALIZATION *************** Start SEI ; Ne modifiez rien à ces CLD ; lignes car elles LDY #255 ; initialisent le système LDA #0 ; Charge 0 dans A B1 STA 0,Y ; Effacement de la RAM DEY ; en utilisant X comme compteur BNE B1 ; Boucle LDA #40 STA Starty LDA #20 STA Endy MainLoop ; Boucle principale d'affichage LDA #2 ; Ne changez rien à ces STA WSYNC ; lignes car elles STA WSYNC ; initialisent l'affichage STA WSYNC ; STA VSYNC ; STA WSYNC ; STA WSYNC ; LDY #53 ; STY TIM64T ; LDA #0 ; STA WSYNC ; STA VSYNC ; DrawScreen ; LDA INTIM ; BNE DrawScreen ; STA WSYNC ; STA VBLANK ; ; **************** DEBUT D'AFFICHAGE ***************** INC Compteur ; Incrémente le compteur d'image LDA Compteur ; Charge ce compteur dans A CMP #18 ; Compare à 18 BNE Pasdeborde ; tant que différent ... LDA #0 ; Sinon réinitialise le compteur STA Compteur ; Pasdeborde ; TAY ; Transfert le compteur dans Y LDA Table,Y ; Pour charger dans A la valeur STA Etat ; correspondant à l'état du player LDY #192 ; Y est le compteur de ligne Affiche1 ; Boucle d'affichage des 20 lignes CPY Starty ; compare Y à Starty BCS Passprite ; si plus petit, saute à Passprite CPY Endy ; compare Y à Endy BCC Passprite ; Si plus grand, saute à Passprite TYA ; Transfert Y dans A SEC ; Obligatoire avant un SBC SBC Endy ; A contient la ligne (0 à 19) du sprite TAX ; Transfert de A dans X LDA Color,X ; Charge la couleur dde la ligne de sprite STA WSYNC ; Attend la fin du balayage précédent STA COLUP0 ; Attribue la couleur à la ligne du sprite TXA ; X contient la ligne (0 à 19) du sprite ADC Etat ; on y ajoute Etat TAX ; Transfert A dans X LDA Player-1,X ; Charge la forme du player avec X comme index STA GRP0 ; Attribue la forme au playerr JMP Suite ; saute à la suite Passprite STA WSYNC ; Attend la fin du balayage précédent LDA #0 ; efface... STA GRP0 ; ...le graphisme du player Suite DEY ; Décrémente Y - REMARQUE : pas de CPY ! BNE Affiche1 ; Si différent, boucle l'affichage LDA SWCHA ; Registre de detection du joystick AND #128 ; Filtre le bit 7 de valeur 128 BEQ Droite ; si égal à 0 saute à l'étiquette droite LDA SWCHA ; Registre de detection du joystick AND #64 ; Filtre le bit 6 de valeur 64 BEQ Gauche ; si égal à 0 saute à l'étiquette gauche JMP Pasbouger ; Sinon, on saute à Pasbouger Droite LDA #240 ; Pour déplacer le Player0 STA HMP0 ; vers la droite LDA #0 ; La Player0 ne subit pas STA REFP0 ; de réflexion JMP Apresbouger ; Saute sans condition Gauche LDA #16 ; Pour déplacer le Player0 STA HMP0 ; vers la droite LDA #8 ; La Player0 subit STA REFP0 ; la réflexion JMP Apresbouger ; Saute sans condition Pasbouger LDA #0 ; Pour ne pas déplacer STA HMP0 ; le Player0 Apresbouger STA WSYNC ; Attend la fin du balayage de la ligne précédente STA HMOVE ; Pour opérer le déplacement relatif ; en fonction de la valeur mise dans HMP0 LDA SWCHA ; Registre de detection du joystick AND #32 ; Filtre le bit 5 de valeur 32 BEQ Haut ; si égal à 0 saute à l'étiquette Haut LDA SWCHA ; Registre de detection du joystick AND #16 ; Filtre le bit 4 de valeur 16 BEQ Bas ; si égal à 0 saute à l'étiquette Bas JMP Pasbouger2 ; Saute sans condition Bas INC Starty ; Incrémente Starty... INC Endy ; ...et Endy JMP Pasbouger2 ; Saute sans condition Haut DEC Starty ; Décrémente Starty... DEC Endy ; ...et Endy Pasbouger2 LDA SWCHA ; Registre de detection du joystick AND #240 ; Si les 4 bits de joystick CMP #240 ; sont différent de 1 (16+32+64+128 = 240) BNE Anime ; alors saute à anime LDA #8 ; Sinon initialise l'image du player à 8 STA Compteur ; Celle où il semble statique Anime ; ************ APRES L'AFFICHAGE ************** LDY #34 ; On compte les 36 lignes d'overscan Boucle4 ; Etiquette STA WSYNC ; Attend la fin de la ligne DEY ; Décrémente Y 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.