Programmation du C-64: tutoriaux

Forum Commodore Commodore 64 – 128 – VIC 20 – … Programmation du C-64: tutoriaux

  • Ce sujet contient 32 réponses, 5 participants et a été mis à jour pour la dernière fois par PZAWA, le il y a 6 années et 3 mois.
  • Créateur
    Sujet
  • #3360
    PZAWA
    • Level 6
    • Messages : 316

    Étant donné que j’ai quelques articles (à la base pour le site commodorecoverhd qui n’est plus actif) concernant la programmation du C-64 je me permet de vous les faire partager.

    http://pzawa.alwaysdata.net/Retro-Programmation/C64/

Affichage de 15 réponses de 16 à 30 (sur un total de 32)

Partager sur vos réseaux sociaux préférés :
Facebooktwitterredditpinterestlinkedintumblrmail

  • Auteur
    Réponses
  • #13601
    PZAWA
    • Level 6
    • Messages : 316

      Salut Nounours :-)

      Je t’en prie :-)

      Pour que la rasterbar aille plus vite y a pas de secret tu dois décaler de plus d’une (ou plusieurs) ligne(s): il n’y a pas le choix car tu peux pas changer la vitesse de balayage  mais cela restera fluide.

      Ce serait top que toi aussi écrive des tutos (et si il y a encore d’autre personne :-) ).

      En fait ce que j’adore dans la programmation en assembleur et avec un ordi simple comme le C-64, c’est non seulement tu as le contrôle de tout, tu dois tout faire seul et comprendre ce que tu fais sans compter sur une bibliothèque générique (et si il y a un truc qui marche pas c’est forcement de ta faute ) mais surtout tu dois comprendre comment fonctionne ton micro et tu peux ensuite allez plus loin dans l’électronique…

      Et autre truc sympa: quand tu maîtrises l’ASM 6502 les autres jeux d’instructions d’autres processeurs te semble être des langages de haut-niveau :lol:

      A+

      :bye:



      #13973
      Electric Dreams
      • Level 1
      • Messages : 16

        Bonjour,

        Le lien du site proposé dans le premier post n’est plus actif… :unsure:

        Y aurait il un autre site où les articles seraient disponibles ?

        Merci !

        #13983
        gibs
        • Level 9
        • Messages : 978

          Il faut que tu ailles dans le menu Rubrique / Tutoriels  (sous le logo Amiga France.com) :yes:

          :heart: Team Apollo :heart:

          #13986
          Electric Dreams
          • Level 1
          • Messages : 16

            J’ai déjà lu le tuto sur Amiga France concernant le 8502.

            Je faisais référence au contenu du site fourni par PZAWA dans le premier post :

            http://pzawa.alwaysdata.net/Retro-Programmation/C64/

             

            #13991
            PZAWA
            • Level 6
            • Messages : 316

              A oui effectivement. Il semblerait qu’ alwaysdata lors de la migration ait supprimé la permission pour explorer les répertoires  :scratch:

              J’essaie de régler cela ce soir sans rien promettre (au pire ce sera réglé le weekend).

              ma page est juste un buffer d’où l’intérêt d’avoir cela à terme sur AmigaFrance :yes:

              #13996
              Electric Dreams
              • Level 1
              • Messages : 16

                Merci  :yahoo:

                En tout cas le tuto dispo sur Amiga france est juste excellent  :good:

                Clair et compréhensible !

                #14002
                Staff
                Jim Neray
                • Level 22
                • Messages : 7008

                  La suite sera bientôt publiée  ;-)

                  A500 - A500 Plus - A600 HD - A1200 - A2000 - A4000T - CD32 - C=64 - 1040STE - CPC6128
                  Mon Amiga 500 Plus : A590, 2MB Chip, 2MB Fast, HD 1,2GB, Floppy ext.
                  Mon Amiga 1200 : Blizzard 1220/4, 2MB Chip, 4MB Fast, HD 80GB, Overdrive CD

                  - Micromiga.com - La boutique Amiga -
                  #14092
                  PZAWA
                  • Level 6
                  • Messages : 316

                    Voila j’ai rajouté ma vielle page d’index (mais sans les brouillons :-p ) pour avoir accès à l’un des deux articles disponible. L’autre est un lien direct vers Amigafrance ;)

                    Un grand merci à vous tous pour les compliments et encouragements  :bye:

                    #14095
                    Electric Dreams
                    • Level 1
                    • Messages : 16

                      Merci !!!!

                      Ou pas… Je pense que ma productivité au boulot vient d’être annihilée :lol:

                      Tant pis, c’est pas grave, il n’y a que l’ASM qui compte, et mon boulot sera toujours là lundi…

                      #14414
                      nounours
                      • Level 2
                      • Messages : 34

                        Merci !!!! Ou pas… Je pense que ma productivité au boulot vient d’être annihilée :lol: Tant pis, c’est pas grave, il n’y a que l’ASM qui compte, et mon boulot sera toujours là lundi…

                        Salut PZAWA, je reviens vers toi pour une question d’ordre « logique de programmation ».

                        Je viens de lire pas mal d’articles sur les « Raster Interrupts » et pense en avoir compris les fondamentaux :

                        1) Ne pas gaspiller de précieux cycles cpu à attendre dans le programme principal que le raster beam atteigne une raster line spécifique

                        2) Contrôler au mieux le timing d’exécution d’une modification pour que l’affichage demeure stable

                        3) Et en lien avec 1), pouvoir profiter des cycles cpu restant pour exécuter d’autres choses.

                        Par contre, pour tous les exemples que je trouve (indépendamment du code de stabilisation), l’interruption semble déclarée pour une raster line bien spécifique -codée en dur, en somme -. Du coup, en ce qui concerne le code de la rasterbar, qui implique inévitablement un changement de couleur à chaque raster line, je vois difficilement comment transposer çà dans une interruption statique. De ton point de vue, quel serait l’implémentation logique de la même raster bar en utilisant une raster interrupt ?

                        Par avance Merci (je continue à faire des recherches)   :-)



                        #14639
                        PZAWA
                        • Level 6
                        • Messages : 316

                          Salut Nounours :)

                          Désolé pour la réponse tardives.

                          Je vais t’avouer un truc: je n’ai toujours pas tenter de faire des rasters multiples stables sans dezinguer le Vic avec des interruptions ! c’est un sujet que je prévois pour la partie 3 de mon introduction aux démos sur le C-64 mais que je ne l’ai même pas encore esquissée ;)

                          Sinon pour essayer de te répondre (mais il faudrait que fasse des tests) une fois stabilisée tu peut générer les bandes raster dans le code d’interruption, le seul problème potentiel que je vois est au moment où on tombe sur une badline. Une autre façon le plus simple de pallier est de faire des lignes de plus d’1 pixels.

                          Désolé de ne pas plus t’aider: il faut vraiment que tu essaies tout seul et si tu trouves une solution à toi, fait nous la partager ! :good:

                          :bye:

                          #14684
                          nounours
                          • Level 2
                          • Messages : 34

                            Salut Nounours :)

                            Désolé pour la réponse tardives.

                            Je vais t’avouer un truc: je n’ai toujours pas tenter de faire des rasters multiples stables sans dezinguer le Vic avec des interruptions ! c’est un sujet que je prévois pour la partie 3 de mon introduction aux démos sur le C-64 mais que je ne l’ai même pas encore esquissée ;)

                            Sinon pour essayer de te répondre (mais il faudrait que fasse des tests) une fois stabilisée tu peut générer les bandes raster dans le code d’interruption, le seul problème potentiel que je vois est au moment où on tombe sur une badline. Une autre façon le plus simple de pallier est de faire des lignes de plus d’1 pixels.

                            Désolé de ne pas plus t’aider: il faut vraiment que tu essaies tout seul et si tu trouves une solution à toi, fait nous la partager ! :good:

                            :bye:

                            Salut Pzawa !
                            En fait j’ai pas mal postassé le sujet et je pense être en mesure de produire un code d’affichage / déplacement d’une rasterbar utilisant deux interruptions en cascade et gérant le cas de badlines. Il va juste falloir que je trouve le temps. Je pourrais me contenter de pomper les routines qui existent déjà mais çà ne m’intéresse pas. l’objectif c’est de pouvoir comprendre les tenants et les aboutissants. Le plus important il me semble est d’être en mesure d’expliquer le principe de la double interruption qui est en fin de compte le principe fondateur d’une routine de stabilisation. Ensuite il est vrai que pour une raster bar simple qui ne se déplace pas, On peut tricher en positionnant la première ligne de la raster bar sur une scanline standard, c’est à dire tout sauf une badlines. Ensuite, pour les autres lignes, tant que le code d’affichage ne bouffe pas plus d’une vingtaine de cycles cpu (je considère le cas le moins avantageux des badlines), les autres lignes seront à priori stable car on aura le temps d’être dans la boucle de vérification de la position avant le retour à la prochaine ligne.
                            Mais c’est un peu dommage d’avoir une routine de stabilisation qui part du principe que la première ligne n’est pas une badline. J’ai en tête d’écrire une routine de stabilisation qui gère au moins le cas des badlines / scanlines standard. C’est nécessaire pour le déplacement d’une rasterbar, car forcément dans une position sur 8 on sera sur une badline et du coup, si on considère qu’on dispose de 63 cycles, c’est mort.
                            Donc je vais essayer d’avancer et de proposer un examples dans les semaines qui viennent.

                            #14893
                            PZAWA
                            • Level 6
                            • Messages : 316

                              Cool ! et complètement d’accord avec ton approche (ne pas pomper mais essayer de faire soit même) :good:

                              Tient nous au courant :bye:

                              #17157
                              PZAWA
                              • Level 6
                              • Messages : 316

                                Salut Nounours,

                                Je ne sais pas trop où tu en es mais j’ai eu enfin le temps d’avancer mes tutos et de faire quelques expériences. En faite, il y a une autre méthode très simple pour avoir des raster stables (ça marche aussi sans interruption): en supprimant les badines tout simplement  B-) Une badine commence toujours sur le Raster dont les 3 dernier bits sont égaux au 3 derniers bits du registre $d011… suffit donc juste de modifier les 3 derniers bits de ce dernier de façon approprier. Le seul petit truc est que le VIC un peu dézinguer alimente l’écran de fond avec l’adresse $3fff (si mode text) $3CFF (si mode bitmap): et pour que cela marche ces adresses doivent être à 0. Si l’adresse à #$FF  ca marche pas et l’écran de fond s’affichera en noir (quelque soit la valeur des registres $D020,$D021 et la matrice de couleur).

                                Par contre le défaut de cette méthode c’est que si l’on deplace le rasterbar, tout les éléments graphiques vont egalement bouger (en supprimant un badline le compteur d’adresse du VIC ne decompte plus) donc on a des problèmes pour afficher quoique ce soit d’autre hormis des Sprites….

                                A potasser…

                                #17972
                                nounours
                                • Level 2
                                • Messages : 34

                                  Salut Pzawa,
                                  Désolé pour cette réponse très très tardive …. A la fois blindé de taff, dispersion ponctuelle pour me monter un Amiga et retour à la programmation c64. Pour être tout à fait honnête avec toi j’ai pour l’instant abandonné la problématique de synchronisation des raster lines car je me suis rendu compte qu’il me manquait trop de bases. J’ai donc préféré le démarrage du codage d’un intro (sans synchronisation) pour à la fois progresser dans mes connaissances, me ré-habituer à la programmation en assembleur, et faire face à un cas concret m’obligeant à régler un problème de synchronisation.

                                  J’ai donc débuté une intro avec l’aide d’une ami et qui comme beaucoup de coders sur c64, font des choses qui fonctionnent sans forcément chercher à comprendre comment çà fonctionne. J’ai donc en l’état un début d’intro dans laquelle j’enchaine des scrolling de texte dans différentes directions, avec du color washing sur les lignes de texte, d’autres zones de texte statiques mais avec un « fade out » effect, et tout çà en jonglant avec plusieurs polices de caractères.

                                  L’intérêt d’avoir démarré cette intro est que çà me permet aussi d’appréhender la structure générale d’une intro. Je fonctionne exclusivement avec les interruptions pour gérer les différents effets qui se produisent sur des scanlines consécutives. C’est très instructif et j’en suis à un point ou une question cruciale va se poser : Comme j’ai (entre autres) deux lignes de texte qui scrollent dans des directions opposées, je suis 1)obligé de gérer deux offsets pour le registre de scrolling et
                                  2)obligé de déclancher deux interruptions successives pour scroller dans un sens, puis dans l’autre.
                                  Le problème est qu’actuellement, si mes deux lignes de text sont directement l’une en dessous de l’autre, je ne peut pas obtenir quelque chose de stable. Celà ne fonctionne que si mes interruptions sont déclanchées quelques scanlines en amont du scrolling à effectuer, et donc ce m’oblige à intercaler les lignes de texte d’au moins une ligne vide.

                                  Je ne sais pas si la synchronisation peut m’aider (je n’en suis pas certain en fait) mais je vais recommencer l’investigation de la synchronisation. J’ai vu une intro dans laquelle plusieurs lignes de texte consécutives scrollent à des vitesses différentes sans anomalie particulière, mais je ne vois pas comment celà pourrait être possible sans introduire de synchronisation. Ce travail va m’aider sur les rasterbar.

                                  Evidemment, je fournirai avec plaisir le code de l’intro commenté pour montrer la structure générale d’une intro. Je vais bien sûr explorer tes informations sur les rasterbars. A cet effet, le fait de coder plusieurs effets successifs (sur des ranges de scanlines différents) m’a fait me rendre compte que si je veux pouvoir rajouter une rasterbar, je ne pourrai plus utiliser la désactivation de l’écran et ne m’appuyer que sur la couleur du bord de l’écran. Car sinon, adieu le texte (à moins de réactiver l’écran sur le range de scanlines qui m’intéresse).

                                  Désolé encore pour le manque de communication, Mais je n’ai pas abandonné, bien au contraire ;).
                                  A+
                                  N.

                                Partager sur vos réseaux sociaux préférés :
                                Facebooktwitterredditpinterestlinkedintumblrmail
                                Affichage de 15 réponses de 16 à 30 (sur un total de 32)
                                • Vous devez être connecté pour répondre à ce sujet.