; PREMIER PROGRAMME ; ; Voici le code source entier, ; ne tenez compte que des lignes comprises entre DEBUT D'AFFICHAGE et FIN DE l'AFFICHAGE ; (nous verrons plus tard ce qu'il se passe avant et après) ; ; les point-virgules servent à mettre des commentaires ; et ne sont absolument pas pris en compte par l'assembleur ; vous pouvez donc après vos lignes de code ajouter autant de commentaires ; que vous le souhaitez pour une meilleur compréhension ; N(*'utilisez pas de tabulation pour créer des espaces car l'assembleur les refuse include vcs2600.h org $F000 ; ******************************* ZONE DE BYTE ************************************* ; **** ATTENTION DANGER : VOS LIGNES DE BYTE DOIVENT SE TROUVER DANS CETTE ZONE **** Dessin ; Cette ligne est une étiquette qui servira à identifier les octets de la série de BYTE BYTE. 60,126,126,255,153,153,189,165,255,255,171,129,215,126,126,60 ; Ci-dessus, série de 16 octets représentant le dessin de notre player ; *************************** FIN DE ZONE DE BYTE ********************************** Start SEI CLD LDX #$FF TXS LDA #0 B1 STA 0,X DEX BNE B1 MainLoop LDA #2 STA WSYNC STA WSYNC 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 128 ; On charge le contenu de l'adresse mémoire numéro 128 STA COLUP0 ; On place 132 dans le registre de couleur du player 0 LDX #0 ; On initialise X Boucle ; Cette ligne est une étiquette et servira plus loin à effectuer un saut ici LDA Dessin,X ; On charge dans A la valeur qui se trouve à Dessin+X STX COLUBK ; On va mettre la valeur de X dans le registre de couleur de fond d'écran... c'est plus joli STA GRP0 ; On change le contenu de PL0 avec le graphisme de la nouvelle ligne à dessiner STA WSYNC ; On attend la fin de l'affichage de la ligne INX ; On incrémente X CPX #16 ; On le compare à 16 BNE Boucle ; S'il n'est pas égal à 16, on saute à boucle LDA #0 ; On met 0 dans l'accu STA GRP0 ; pour effacer les lignes suivantes du player LDX #0 ; Initialise X Boucle2 ; Ceci est une étiquette et servira plus loin à effectuer un saut ici INX ; Incrémente X STA WSYNC ; Attend la fin de la ligne STX COLUBK ; Met la valeur de X dans le registre de couleur de fond d'écran... c'est plus joli CPX #212 ; Compare X à 212 BNE Boucle2 ; Si différent, on branche vers Boucle2 ; ******** ZONE DE ROUTINE DE DEPLACEMENT *********** LDA #0 ; Met 0 dans l'accu STA HMP0 ; pour annuler le déplacement du player Joy_droite LDA SWCHA ; on met le contenu de SWCHA dans l'accu AND #128 ; on filtre le bit 7 dont la valeur attribuée est 128 CMP #0 ; on compare ce résultat avec 0 (0=oui on va à droite) BNE Joy_gauche ; S'il n'est pas égal à 0, alors va au test suivant : gauche LDA #255 ; Valeur pour aller à droite STA HMP0 ; que l'on met dans le registre de déplacement du player Joy_gauche LDA SWCHA ; on met le contenu de SWCHA dans l'accu AND #64 ; on filtre le bit 6 dont la valeur attribuée est 64 CMP #0 ; on compare ce résultat avec 0 (0=oui on va à droite) BNE Joy_bas ; S'il n'est pas égal à 0, alors va au test suivant : bas LDA #16 ; Valeur pour aller à gauche STA HMP0 ; que l'on met dans le registre de déplacement du player Joy_bas LDA SWCHA ; on met le contenu de SWCHA dans l'accu AND #32 ; on filtre le bit 5 dont la valeur attribuée est 32 CMP #0 ; on compare ce résultat avec 0 (0=oui on va à droite) BNE Joy_haut ; S'il n'est pas égal à 0, alors va au test suivant : haut DEC 128 ; On décrémente le contenu de l'adresse mémoire 128 Joy_haut LDA SWCHA ; on met le contenu de SWCHA dans l'accu AND #16 ; on filtre le bit 4 dont la valeur attribuée est 16 CMP #0 ; on compare ce résultat avec 0 (0=oui on va à droite) BNE Fin_affiche; S'il n'est pas égal à 0, alors va au test suivant : gauche INC 128 ; On décrémente le contenu de l'adresse mémoire 128 Fin_affiche STA HMOVE ; Le simple fait d'écrire dans HMOVE effectue le déplacement à gauche ou à droite en fonction de la valeur mise dans HMP0 LDA #0 STA COLUBK LDX #36 NTSC3 STA WSYNC DEX BNE NTSC3 JMP MainLoop org $FFFC .word Start .word Start