Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Emulation] Chip16

Pour debuter en programmation d'emulateurs!

    5 février 2011 à 2:36:14

    ## Nouvelle page sur Github: http://github.com/tykel/chip16 (liens, wiki, code source...) ##

    Bonjour les zeros! Je m'excuse a l'avance pour le manque d'accents, je suis sur qwerty :-°

    Je vous presente aujourd'hui le projet Chip16, une initiative collaborative pour aider a debuter dans le monde de la programmation d'emulateurs.

    C'est quoi Chip16?

    Certains connaissent peut-etre le chip8, un systeme virtuel qui a pour vocation d'etre pour beaucoup le premier gout a la programmation d'un emulateur. Cependant, ceux qui le connaissent lui connaissent sans doute des instructions et un fonctionnement confus, ainsi que des extensions officieuses multiples. De plus, les capacites du systeme sont limitees.

    C'est dans cette optique que le Chip16 a ete imagine. C'est donc toujours une architecture d'un systeme fictif, dans le but d'etre implemente sous forme d'emulateur. Comme son nom l'indique, c'est un systeme 16 bits (instructions 32 bits). Mais il differe du chip8 au niveau des instructions, aux opcodes simplifiees, et a des capacites accrues (couleurs, sprites plus grands...), et est actif.

    Pourquoi tu nous presentes ce projet?

    Pour 2 raisons:
    • Pour ceux/celles qui veulent coder des emulateurs, emuler d'abord le Chip16 permettra de passer par la suite a des projets bien plus ambitieux (Gameboy, Space Invaders, NES...). En effet, il faut savoir que derriere les complexites croissantes des systemes au fil des generations, le fonctionnement d'un emulateur pour ceux-ci reste toujours, grossierement, le meme; les connaissances acquises sont facilement reexploitables.
    • Pour ceux/celles qui souhaitent coder en assembleur (dans un environnement simplifie!), sachez que creer des "demos" et autres jeux aidera le projet Chip16 et suscitera en lui plus d'interet. En effet, plus il y a de programmes a disposition de celui qui code l'emulateur, plus il lui sera facile de deboguer celui-ci. :)


    Ou-est-ce que je peux me renseigner?

    Le projet est ne sur Emuforums. Voici le lien vers le thread, vous y trouverez la specification complete du systeme, ainsi que plusieurs emulateurs, un assembleur, un compilateur et quelques demos. Si vous avez des questions ulterieures, postez sur le thread ou envoyez moi un MP.

    Je peux juste tester?

    Oui, un emulateur javascript, Js16, est disponible a cette addresse: http://www.doc.ic.ac.uk/~tk2010/chip16/


    Attention: le thread est entierement en anglais.


    Screenshots de quelques demos existentes:
    Demo ASCIIPong
    Image utilisateur Image utilisateur

    Generation de labyrinthe"Starfield"
    Image utilisateur Image utilisateur

    Bruit type TVJEU: Reflection
    Image utilisateur Image utilisateur

    JEU: Snafu
    Image utilisateur


    Il existe d'ors et deja une bonne dizaine d'émulateurs connus, un assembleur, un ompilateur, 2 convertisseurs BMP->binaire, 2 patcheurs de header (en-tete)...

    Qui es-tu?

    Je suis tykel sur Emuforums, et je suis en charge du projet, ainsi que de l'auteur de l'emulateur Js16, de l'assembleur, de demos et de jeux sur Chip16.

    J'espere avoir attise votre interet! :)

    -
    Edité par timmehboy 22 avril 2013 à 22:45:08

    • Partager sur Facebook
    • Partager sur Twitter
      6 février 2011 à 19:54:23

      J'ai toujours voulu ecrire un emulateur, c'est peut-etre l'occasion de m'y mettre. Tu n'aurais pas des ressources sur la creation d'emulateurs (avec des examples de codes si possible) ?

      p.s: qwerty powa!
      • Partager sur Facebook
      • Partager sur Twitter
        6 février 2011 à 22:29:58

        Oui, c'est exactement le but de ce projet. Pour emuler le Chip16, il suffit de suivre la doc sur le thread officiel.
        Pour un apercu plus global:
        http://fms.komkon.org/EMUL8/HOWTO.html (anglais)
        http://www.emutalk.net/showthread.php?t=30272 (anglais, liens sur le thread)
        Sans oublier que regarder le code source d'emulateurs existants est tres benefique.
        Bonne chance!
        • Partager sur Facebook
        • Partager sur Twitter
          7 février 2011 à 13:41:55

          c'est quoi un émulateur?
          • Partager sur Facebook
          • Partager sur Twitter
          Merci de penser au pouce vert si les messages aident, et de mettre votre sujet en résolu si il est résolu !
            12 février 2011 à 16:29:22

            Bonjour timmehboy,

            Je suis très intéressé par la programmation d'émulateur ( je viens de finir le mien (CHIP 8)) mais j'ai jamais entendu parler de la chip16 .
            Est-ce la Super CHIP 8?

            Pour le rendu graphique de la CHIP 16 ,c'est de loin plus attrayant que la CHIP 8.
            :p
            • Partager sur Facebook
            • Partager sur Twitter
              17 février 2011 à 14:37:59

              Le Chip16 est en effet moins connu car restreint a son topic sur Emuforums pour l'instant, c'est pour cela que j'essaie de le faire decouvrir ici.
              Le Super Chip8 est autre chose completement, c'est une extension apportee au standard Chip8 lors de son portage sur Calculatrice HP il y a environ 15 ans, et se contente d'ajouter des instructions/modes video supplementaires; Chip16, quant a lui, repart de zero, et est donc incompatible (d'ou la necessite de developper des jeux pour celui-ci).

              Que le rendu graphique te plaise plus que le Chip8 est bon a savoir! C'est le but en effet :p
              • Partager sur Facebook
              • Partager sur Twitter
                17 février 2011 à 18:23:36

                Bonjour,

                J'ai juste une dernière question: Est-ce-que les jeux sont libres de droit ?
                • Partager sur Facebook
                • Partager sur Twitter
                  24 février 2011 à 20:37:54

                  Citation : BestCoder

                  Bonjour,

                  J'ai juste une dernière question: Est-ce-que les jeux sont libres de droit ?


                  Il n'y a pas de veritable licence pour les demos existantes, mais je pense qu'on peut les considerer libres, car les auteurs ne les revendiquent pas vraiment. Si la question t'es importante, je demanderai aux partis en question :)
                  Cela dit, les jeux que tu ecris sont sous la licence que tu souhaites (meme commerciale!).
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 février 2011 à 20:41:07

                    Bonjour,

                    Je suis entrain d'implémenter la chip16 et donc avoir quelques jeux sous la main pour tester mon émulateur serait intéressant. :)

                    Par contre,pour le mode dessin (GPU), je trouve que ce n'est pas très bien expliqué.
                    La longueur et la largeur des spirites peuvent être égales à 255 pixels :waw: !!!!!Comment sont codés ,alors ,les spirites ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 février 2011 à 3:55:18

                      Citation : BestCoder

                      Bonjour,

                      Je suis entrain d'implémenter la chip16 et donc avoir quelques jeux sous la main pour tester mon émulateur serait intéressant. :)

                      Par contre,pour le mode dessin (GPU), je trouve que ce n'est pas très bien expliqué.
                      La longueur et la largeur des spirites peuvent être égales à 255 pixels :waw: !!!!!Comment sont codés ,alors ,les spirites ?


                      Et bien, en memoire, les couleurs sont regroupes 2 par octet. Il suffit de lire (RX * RY)/2 octets pour le sprite, donc, en commencant a l'adresse donne dans l'opcode ou dans RZ.

                      05 YX LL HH        DRW RX, RY, HHLL        Draw sprite from address HHLL at coordinates stored in register X and Y. Affects carry flag (explained in GPU info).
                      06 YX 0Z 00        DRW RX, RY, RZ                Draw sprite from address pointed by register Z at coordinates stored in register X and Y.  Affects carry flag.

                      De plus, les sprites peuvent bien faire jusqu'a 255*255, mais tu n'affiches que la partie visible sur l'ecran.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 février 2011 à 19:55:28

                        Si j'ai bien compris, tu créer l'émulateur d'une console qui n'existe pas ? C'est bien ça ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          25 février 2011 à 20:53:28

                          83333,

                          En fait ,chip8 et chip16 ne sont pas des consoles mais des langages qu'utilisent des processeurs!
                          Pour ta question, je dis oui :p . (si elle m'est adressée bien sur :-° )

                          • Partager sur Facebook
                          • Partager sur Twitter
                            25 février 2011 à 21:41:32

                            Ma question t'était bien adressée !
                            Merci pour la petite précision sur chip8 et 16.

                            Edit : en faite non, ma question ne t'était pas destinée, c'était pour l'auteur du sujet, timmehboy ... Mais je pense que la réponse sera la même ^^
                            • Partager sur Facebook
                            • Partager sur Twitter
                              25 février 2011 à 21:44:46

                              83333

                              En fait, je programme pour m'entrainer , bientôt je vais attaquer plus gros .(gameboy ou nes)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                26 février 2011 à 1:47:05

                                Citation : 83333

                                Si j'ai bien compris, tu créer l'émulateur d'une console qui n'existe pas ? C'est bien ça ?


                                Oui, si ce n'etait pas clair auparavant, chip16 et chip8 sont des architectures si tu veux. Ce ne sont pas des langages, mais les instructions binaires que tu interpretes et emules. Ces instructions font tourner un systeme fictif appele chip16.

                                Je comprends que le concept soit difficile a comprendre, mais si on veut parvenir a emuler un systeme beaucoup plus complexe (meme paraissant simple, comme le Gameboy ou le NES), il faut vraiment savoir ce que l'on fait! Et chip16 (et 8 moins directement) est concu pour cela, pour ne pas partir de zero sur les "vrais" emulateurs! :)

                                Et BestCoder, je serai interesse de tester ton emulateur!
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  26 février 2011 à 3:11:29

                                  Bonsoir timmehboy,

                                  Je t'enverrai le tout quand je l'aurai finis!
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    26 février 2011 à 19:34:52

                                    Merci timmehboy pour cette précision :)
                                    Donc en gros, chip8/16 permet d'appréhender la création d'un émulateur plus complexe, comme la GameBoy ou même la PS1. Une sorte d'apprentissage.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      26 février 2011 à 21:41:54

                                      Citation : 83333

                                      Donc en gros, chip8/16 permet d'appréhender la création d'un émulateur plus complexe, comme la GameBoy ou même la PS1. Une sorte d'apprentissage.


                                      C'est exactement ca.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        2 mars 2011 à 20:45:15

                                        Bonsoir,

                                        J'ai presque fini l'émulateur mais je rencontre un petit probléme là.
                                        Je m'explique:
                                        -J'ai testé le jeu ball.c16 et il se trouve que la boule ne ricoche pas , il file direct en dehors de l'écran

                                        -J'ai debuggué et tout semble incriminer VBLANK; (que j'avais oublier d'implémenter :lol: )

                                        Après l'avoir implémenter,à ma grande surprise o_O , la boule rebrousse chemin dés le début et ne reviens plus.


                                        Donc Question:
                                        On fait comment pour bien l'implémenter?

                                        Voici comment j'ai procédé:
                                        Pour l'instruction //02 00 00 00 VBLNK Wait VBlank. Set VBlank flag to 0 and wait untill it becomes 1.

                                        flag=(flag&0xFE)+1 //flag étant un byte qui regroupe tous les flags
                                        pause=true; // pour attendre

                                        Tous les 16 millisecondes , j'appelle une fonction VBLANK() qui éffectue :
                                        flag=(flag&0xFE)+1 //flag étant un byte qui regroupe tous les flags
                                        pause=false; //pour continuer



                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          3 mars 2011 à 14:50:09

                                          @BestCoder:
                                          Lors de l'instruction vblank, le flag vblnk (donc bit 0 de flag) doit etre mis a 0 initialement; or,

                                          Citation : BestCoder


                                          flag = (flag&0xFE)+1 //flag étant un  byte qui regroupe tous les flags
                                          pause = true; // pour attendre
                                          



                                          met le flag vblnk a 1 si je ne m'abuse... Tu devrais plutot juste faire

                                          flag &= 0xFE;
                                          pause = true;
                                          

                                          Et ensuite, apres un delai de 16ms, tu remets vblnk a 1, et pause a false (ce que tu sembles faire).

                                          Mais ton probleme avec Ball.c16 semble concerner la gestion des flags zero/carry (cf code source du jeu), s'il a du mal a rebondir: verifie que ceux-ci marchent bien.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            10 mars 2011 à 23:49:58

                                            Alors BestCoder, tu t'en sors? Qu'est-ce que ca donne?
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              11 mars 2011 à 0:01:11

                                              :'(

                                              Le vblank commence à me rendre dingue , j'ai pris 3heures dessus et rien!
                                              Mais ,j'abandonne jamais , je suis dessus en ce moment même :D .
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                11 mars 2011 à 1:42:01

                                                Quel est le probleme avec vblnk? C'est un souci de timing, ou tu n'as pas compris comment les flags sont affectes? N'hesite pas a demander!
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  12 mars 2011 à 15:50:52

                                                  Salut timmehboy,

                                                  D'aprés ma compréhension, le flag vblank doit passer à 1 tous les 16.67 ms.?
                                                  J'ai vérifié les autres flags 1 par 1 et je ne vois pas ce qui cloche. o_O
                                                  Est-ce-qu'il y a une rom qui permet de tester tous les opcodes de la chip16 comme pour la chip 8?
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  [Emulation] Chip16

                                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                  • Editeur
                                                  • Markdown