; ******** VINGTIEME COURS : LES PUCES N°32 ******** ; ; ***************** PLAYERS RAFFINES ************** ; ; ***** Copyright Igor Barzilai - Mars 2001 ******** include vcs2600.h org $F000 ; ***** ADRESSES MEMOIRE POUR LES VARIABLES ****** Etat = 128 Compteur = 129 ; ************ 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 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 #20 ; Y est le compteur de ligne Affiche1 ; Boucle d'affichage des 20 lignes TYA ; Transfert de Y dans A CLC ; CLC obligatoire avant un ADC ADC Etat ; A = Y + Etat TAX ; X = Y + Etat LDA Player-1,X ; Charge le contenu graphique de la ligne STA WSYNC ; Attend la fin du balayage précédent STA GRP0 ; Met à jour le graphisme du Player0 LDA Color-1,Y ; Charge la couleur de la ligne Y STA COLUP0 ; Met à jour la couleur du Player0 DEY ; Décrémente Y - REMARQUE : pas de CPY ! BNE Affiche1 ; Si différent, boucle l'affichage LDA SWCHA ; Déplacement du Player0 : CMP #127 ; Si le joystick est à droite BEQ Droite ; On saute à l'étiquette droite CMP #191 ; Si le joystick est à gauche BEQ Gauche ; On 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 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 Pasbouger LDA #0 ; Pour ne pas déplacer STA HMP0 ; le Player0 LDA #8 ; On demande l'image 8 du player STA Compteur ; Celle où il semble statique 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 #0 ; Pour ensuite effacer le player STA GRP0 ; LDY 192-20 ; On compte ensuite les 172 lignes restantes Affiche2 ; DEY ; Décrémente Y BNE Affiche2 ; Tant que différent de 0, on boucle ; ************ 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.