Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Emulation] Chip16

Pour debuter en programmation d'emulateurs!

    12 mars 2011 à 23:13:50

    Oui. Le flag vblank passe a 1 tous les 1/60 s = 16.67 ms. Ceci se produit independemment des instructions. (Dans un vrai systeme, ce serait surement implemente a l'aide d'interrupt)
    L'instruction vblnk, quand a elle, met ce flag a 0, et fait attendre le systeme jusqu'a qu'il redevienne 1 (ci-dessus). J'espere que cela t'eclaircit les idees.

    Pour les roms, oui, il y en a pas mal sur le thread (les screenshots en haut en sont tires): pas mal sont fournis avec l'emulateur NetChip16 de ShendoXT, et j'en ai poste sur le thread aussi.

    Voila :)

    PS: on ne sait jamais: ne pas confondre ms (millisecondes) et cycles (~0.001 ms)!
    • Partager sur Facebook
    • Partager sur Twitter
      12 mars 2011 à 23:35:26

      OK!

      C'est pourtant ce que j'ai compris et que j'essaye de faire faire à mon put.. de code :lol: .
      PS: ms pour moi ,c'est millisecondes

      Ce serait cool si Shendox publiait le CPU de l'émulateur parce que là je pête des cables :colere:
      • Partager sur Facebook
      • Partager sur Twitter
        13 mars 2011 à 15:15:15

        Tu peux toujours lui demander ;)
        • Partager sur Facebook
        • Partager sur Twitter
          19 mars 2011 à 12:22:05

          Bonjour timmehboy,

          Je me suis relancer dans la programmation de mon émulateur chip16 . Et avec les nouvelles démo, j'ai trouvé mon problème. Voici un petit screen obtenu de paletetest.
          Ma fonction dessiner fait du n'importe quoi :lol: .


          Image utilisateur




          Edit: voila un beug de fixé :D .

          Image utilisateur Image utilisateur

          • Partager sur Facebook
          • Partager sur Twitter
            20 mars 2011 à 2:33:06

            Paletetest semble marcher a present; on dirait que tu lisais un pixel pour 2 octets au lieu de 2 pixels par octet, quand ca buggait?
            Le labyrinthe semble avoir un probleme: a vue d'oeil, c'est toujours un probleme lie a la disposition des pixels en memoire. Chaque pixel est double: peut etre lis tu deux fois un pixel, et manque celui qui suit.

            Bonne chance par la suite!
            • Partager sur Facebook
            • Partager sur Twitter
              20 mars 2011 à 12:29:55

              Bonjour,

              Bien vu ! Je lisais un pixel deux fois . Put....! Je vais finir par croire que t'es un geek surdoué :lol: .


              Image utilisateur
              • Partager sur Facebook
              • Partager sur Twitter
                20 mars 2011 à 14:13:01

                Aha, elementaire mon cher Watson... ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  20 mars 2011 à 16:23:13

                  :magicien:

                  Je suis entrain de fixer tous les beugs .La méthode de dessin fonctionne normalement maintenant :soleil: .

                  Image utilisateur


                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 juin 2011 à 3:27:08

                    Bonjour,

                    Je viens de finir mon émulateur (enfin). Aprés un mois de reprise en main de la SDL, je crois que je peux pas espérer mieux comme résultat.Tous les roms marchent correctement(à part le TESTROM :-° ).
                    Je dois juste trouver du temps pour me documenter sur le son et le tour sera joué.

                    Le premier screen est fait avec SDL (pas CHIP16 :lol: ).
                    Image utilisateur Image utilisateur
                    Image utilisateur Image utilisateur
                    Image utilisateur Image utilisateur
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 juin 2011 à 19:54:37

                      Super! Manque plus qu'une GUI, et du son comme tu dis, mais c'est du bon travail.

                      Une fois que tu consideres que BC-Chip16 est termine, tu peux t'attaquer si tu souhaites au Chip8 et variantes. Mais tu peux egalement considerer a present quelque chose comme Space Invaders (arcade) ou la Gameboy, si tu en as le courage!
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 juin 2011 à 20:32:47

                        Pour la GUI, j'ai développé un petit code qui permet de naviguer tranquillement.Et pour les Chip 8 et variantes, j'ai déjà mis hors service la Chip 8 et la SuperChip8 :lol: .
                        Voici deux screens pour la GUI et la SuperChip8:

                        Image utilisateurImage utilisateur

                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 juin 2011 à 23:58:59

                          J'ai teste ton emulateur, il est tres legerement plus lent que Netchip en effet. Je pense qu'etant donne la petite difference, il s'agit de ta gestion des timers SDL qui sont la source du probleme. Remonte une page ou deux sur le thread emuforums, tu verras une discussion sur comment bien implementer le timer.
                          Ton GUI est basique mais est fonctionnel ;)

                          Et desole, je viens de me souvenir que tu avais deja implemente le chip8!

                          Bon courage pour terminer BC-Chip16 :)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 juin 2011 à 21:10:44

                            Fort dommage de constater que les Zéros ne sont pas branchés émulations.
                            Tu pourrais traduire les spécifications en français et le mettre dans ton topic. Cela pourrait peut être encouragé certains d'entre eux.
                            Peut-être que je tenterais de faire une démo si le temps me le permet.
                            Chip 16 ça promet!!!

                            EDIT: Si les sources de mon émulateur t'intéresse, n'hésite pas, j'ai la flemme de traduire en anglais les commentaires :lol:
                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 juin 2011 à 13:15:39

                              Tiens, je vais essayer de faire un emulateur chip 16 pour iPhone :D C'est une occasion de commencer l'emulation et la programmation iOS en meme temps ^^
                              • Partager sur Facebook
                              • Partager sur Twitter
                                14 juillet 2011 à 9:53:29

                                Non pas vraiment :( Je n'ai pas top de temps ces dernieres semaines et en plus je ne trouve pas de bonne resources pour commencer en programmation d'emulateurs :/
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  14 juillet 2011 à 13:31:54

                                  Le thread officiel t'aidera, et tu peux toujours regarder les sources d'un autre emulateur si tu en as besoin.
                                  http://fms.komkon.org/EMUL8/HOWTO.html est une bonne piste pour commencer.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    14 juillet 2011 à 13:53:11

                                    Merci :)
                                    J'ai deja lu le thread officiel, mais il donne plutot des details pour des programmeurs qui on deja programme des emulateurs. Je vais lire ton line quand meme ^^
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      25 juillet 2011 à 21:49:58

                                      J'espère que ce lien t'as aidé. Malheureusement pour toi, la grande majorité de la litérature à ce sujet est en anglais. Garde nous au courant!
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        18 octobre 2011 à 21:20:07

                                        J'avoue que je ne connaissais pas vraiment le principe de cette branche de la progamation avant de voir le tutoriel de BestCoder .

                                        Je ne l'ais pas encore lut en profondeur mais cela me plait bien aux premiers abords .

                                        Le dernier message date d'il y a 3 mois mais etant donner la parution du tuto de BestCoder il me semble que ce sujet trouve un nouvel interet !

                                        Aussi j'ai regarder emuforums, un peu dégouter aux premiers abords de voir que c'est en anglais, mais comme on le dit souvent l'anglais ne doit pas être un obstacle :colere2: ,au final j'ai trouver interessant ce forum malgres que je ne comprenne pas tout etant donner mon manque de compréhension des termes techniques :-°

                                        Je pars donc voir de plus pres l'émulation ...

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          19 octobre 2011 à 20:01:16

                                          Le projet à vraiment l'air bien. Bon courage aux dev'. :)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            22 octobre 2011 à 20:23:38

                                            Bonjour à vous !!
                                            Je poste ici car j'essaie de coder un émulateur Chip16.
                                            J'ai lu avec avidité et codé en parallèle l'émulateur Chip8 du tutoriel de BestCoder (que je remercie :D ), et, comme il le propose au final, j'ai atterri sur ce sujet.
                                            Seulement voilà, j'ai beau avoir été le plus loin possible tout seul et avoir passé les derniers jours à essayer de changer des choses par-ci par-là, ça ne semble pas suffire.
                                            J'ai donc besoin d'aide... :euh:

                                            Pour des raisons d'habitude, j'ai utilisé le C++, mais je pense que le code qui pose problème tient tout autant du C, donc vous pourrez (j'espère) m'aider.

                                            Pour l'instant je teste avec la rom de test de BestCoder, mais à part le fond rouge, je n'ai rien...
                                            J'ai essayé de vérifier les traitements des opcodes précisés dans le fichier d'explication, mais je n'ai pas trouvé ce qui pourrait clocher...
                                            Je précise que j'ai déjà testé à la main les opcodes d'affichage de sprite, donc je ne pense pas que le problème vienne de là...

                                            Je vous donne mon code pour les opcodes marqués "à tester" :


                                            actions[0x05000000]=[](CPU *cpu)/*05 YX LL HH	DRW RX, RY, HHLL
                                                        Draw sprite from address HHLL at coordinates stored in register X and Y (treated as signed numbers). Affects carry flag (explained in GPU info).*/
                                                            {sf::Uint8 *tab=new sf::Uint8[cpu->spriteSize.x*cpu->spriteSize.y];
                                                                std::copy(&cpu->memory[(sf::Uint16)((cpu->hh<<8)+cpu->ll)], &cpu->memory[(sf::Uint16)((cpu->hh<<8)+cpu->ll)+cpu->spriteSize.x*cpu->spriteSize.y], tab);
                                                                cpu->manageFlips(tab, cpu->spriteSize);
                                                                if(cpu->screen.addSprite(tab, cpu->x, cpu->y, cpu->spriteSize.x, cpu->spriteSize.y))
                                                                    cpu->flagRegister|=0x2;
                                                                else
                                                                    cpu->flagRegister&=0xfd;
                                                                delete[] tab;};
                                            
                                            //...
                                            
                                            actions[0x10000000]=[](CPU *cpu)/*10 00 LL HH	JMP HHLL
                                                	Jump to the specified address.*/
                                                            {cpu->programCounter=(cpu->hh<<8)+cpu->ll-4;};
                                            
                                            //...
                                            
                                            actions[0x14000000]=[](CPU *cpu)/*14 00 LL HH	CALL HHLL
                                                	Call subroutine at the specified address. Store PC to [SP]. Increase SP by 2.*/
                                                	{
                                                        cpu->memory[cpu->startStack+cpu->stackCounter]=(cpu->programCounter>>8);
                                                        cpu->memory[cpu->startStack+cpu->stackCounter+1]=(cpu->programCounter&0xff);
                                                        if(cpu->stackCounter<512)//pas sur de l'ordre
                                                        {
                                                            cpu->stackCounter+=2;
                                                            cpu->programCounter=((cpu->hh<<8)+cpu->ll)-4;
                                                        }
                                                    };
                                            
                                            //...
                                            
                                            actions[0x20000000]=[](CPU *cpu)/*20 0X LL HH	LDI RX, HHLL
                                                	Load immediate value to register X.*/
                                                        {cpu->registers[cpu->x]=((cpu->hh<<8)+cpu->ll);};
                                            
                                            //...
                                            
                                            actions[0x23000000]=[](CPU *cpu)/*23 YX 00 00	LDM RX, RY
                                                	Load register X with the 16bit value at the specified address pointed by register Y.*/
                                                	{
                                                	    cpu->registers[cpu->x]=(((sf::Uint16)(cpu->memory[cpu->registers[cpu->y]]))<<8)+
                                                                    (sf::Uint16)(cpu->memory[cpu->registers[cpu->y]+1]);
                                                    };
                                            
                                                actions[0x24000000]=[](CPU *cpu)/*24 YX 00 00	MOV RX, RY
                                                	Copy data from register Y to register X.*/
                                                    {cpu->registers[cpu->x]=cpu->registers[cpu->y];};
                                            
                                            //...
                                            
                                            actions[0x31000000]=[](CPU *cpu)/*31 YX 00 00	STM RX, RY
                                                	Store value of register X at the specified address pointed by register Y.*/
                                                	{
                                                	    cpu->memory[cpu->registers[cpu->y]]=(cpu->registers[cpu->x]>>8);
                                                	    cpu->memory[cpu->registers[cpu->y]+1]=(cpu->registers[cpu->x]&0xff);
                                                    };
                                            
                                            //...
                                            
                                            actions[0x40000000]=[](CPU *cpu)/*40 0X LL HH	ADDI RX, HHLL
                                                	Add immediate value to register X. Affects [c,z,o,n]*/
                                                	{
                                                        if((cpu->registers[cpu->x]+((cpu->hh<<8)+cpu->ll))>0xffff)
                                                            cpu->flagRegister|=2;
                                                        else
                                                            cpu->flagRegister&=0xfd;
                                                        if((cpu->registers[cpu->x]+((cpu->hh<<8)+cpu->ll))==0)
                                                            cpu->flagRegister|=4;
                                                        else
                                                            cpu->flagRegister&=0xfb;
                                                        if(((cpu->registers[cpu->x]&0xf000) && (((cpu->hh<<8)+cpu->ll)&0xf000) && !(cpu->registers[cpu->x]+((cpu->hh<<8)+cpu->ll))) ||
                                                           (!(cpu->registers[cpu->x]&0xf000) && !(((cpu->hh<<8)+cpu->ll)&0xf000) && (cpu->registers[cpu->x]+((cpu->hh<<8)+cpu->ll))))
                                                            cpu->flagRegister|=0x40;
                                                        else
                                                            cpu->flagRegister&=0xbf;
                                                        if(((cpu->registers[cpu->x]+((cpu->hh<<8)+cpu->ll))&0xf000))
                                                            cpu->flagRegister|=0x80;
                                                        else
                                                            cpu->flagRegister&=0x7f;
                                            
                                                        cpu->registers[cpu->x]+=((cpu->hh<<8)+cpu->ll);
                                                    };
                                            
                                            //...
                                            
                                            actions[0x50000000]=[](CPU *cpu)/*50 0X LL HH	SUBI RX, HHLL
                                                	Subtract immediate value from register X. Result is stored in register X. Affects [c,z,o,n].*/
                                                	{
                                                        if((cpu->registers[cpu->x]-((cpu->hh<<8)+cpu->ll))>0xffff)//test du contraire
                                                            cpu->flagRegister&=0xfd;
                                                        else
                                                            cpu->flagRegister|=2;
                                                        if((cpu->registers[cpu->x]-((cpu->hh<<8)+cpu->ll))==0)
                                                            cpu->flagRegister|=4;
                                                        else
                                                            cpu->flagRegister&=0xfb;
                                                        if((!(cpu->registers[cpu->x]&0xf000) && (((cpu->hh<<8)+cpu->ll)&0xf000) && (cpu->registers[cpu->x]-((cpu->hh<<8)+cpu->ll))) ||
                                                           ((cpu->registers[cpu->x]&0xf000) && !(((cpu->hh<<8)+cpu->ll)&0xf000) && !(cpu->registers[cpu->x]-((cpu->hh<<8)+cpu->ll))))
                                                            cpu->flagRegister|=0x40;
                                                        else
                                                            cpu->flagRegister&=0xbf;
                                                        if(((cpu->registers[cpu->x]-((cpu->hh<<8)+cpu->ll))&0xf000))
                                                            cpu->flagRegister|=0x80;
                                                        else
                                                            cpu->flagRegister&=0x7f;
                                            
                                                        cpu->registers[cpu->x]-=((cpu->hh<<8)+cpu->ll);
                                                    };
                                            
                                            //...
                                            
                                            actions[0x61000000]=[](CPU *cpu)/*61 YX 00 00	AND RX, RY
                                                	AND value of register Y with value of register X. Result is stored in register X. Affects [z,n]*/
                                                	{
                                                        if((cpu->registers[cpu->x]&cpu->registers[cpu->y])==0)
                                                            cpu->flagRegister|=4;
                                                        else
                                                            cpu->flagRegister&=0xfb;
                                            
                                                        if(((cpu->registers[cpu->x]&cpu->registers[cpu->y])&0xf000))
                                                            cpu->flagRegister|=0x80;
                                                        else
                                                            cpu->flagRegister&=0x7f;
                                            
                                                        cpu->registers[cpu->x]&=cpu->registers[cpu->y];
                                                    };
                                            
                                            //...
                                            
                                            actions[0x90000000]=[](CPU *cpu)/*90 0X LL HH	MULI RX, HHLL
                                                	Multiply immediate value with register X. Result is stored in register X. Affects [c,z,n]*/
                                                	{
                                                        if((cpu->registers[cpu->x]*((cpu->hh<<8)+cpu->ll))==0)
                                                            cpu->flagRegister|=4;
                                                        else
                                                            cpu->flagRegister&=0xfb;
                                            
                                                        if(((cpu->registers[cpu->x]*((cpu->hh<<8)+cpu->ll))&0xf000))
                                                            cpu->flagRegister|=0x80;
                                                        else
                                                            cpu->flagRegister&=0x7f;
                                            
                                                        cpu->registers[cpu->x]*=((cpu->hh<<8)+cpu->ll);
                                                    };
                                            



                                            J'utilise une map de fonctions lambda de c++0x au lieu de faire un grand switch et je vous précise que leur appel n'est pas erroné (j'ai fait des tests)...
                                            Je pense que les noms de variables sont assez explicites (les variables x, y, z, n sont des sf::Uint8 et ll, hh des sf::Uint16).

                                            J'espère que vous aurez le temps de vous pencher sur mon (mes ;) ) problème(s).
                                            Et si vous avez des suggestions ou des question, n'hésitez pas. (Vous pouvez me joindre par MP si c'est mieux pour ne pas trop encombrer le sujet)

                                            Merci d'avance et à bientôt !!
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              30 octobre 2011 à 17:25:38

                                              D'abords un graaaaaaaaand merci à BestCoder qui m'a permit de réaliser mon premier émulateur fonctionnel ^^ (je vais peut être enfin réussir la gameboy maintenant :-°)

                                              @Pedrolino: J'ai vite fait regarder ton code, je pense comprendre d'où viens 3/4 de tes problèmes, l'ordre des octets.
                                              La spécification du Chip16 dit que la mémoire est organisé sur le format little-endian, c'est à dire le plus petit en premier.

                                              Exemple:

                                              cpu->memory[cpu->startStack+cpu->stackCounter]=(cpu->programCounter>>8);
                                              cpu->memory[cpu->startStack+cpu->stackCounter+1]=(cpu->programCounter&0xff);
                                              


                                              Ici tu places l'octet de poids fort avant l'octet de poids faible, donc l'inverse du little-endian, il faut faire:

                                              cpu->memory[cpu->startStack+cpu->stackCounter+1]=(cpu->programCounter>>8);
                                              cpu->memory[cpu->startStack+cpu->stackCounter]=(cpu->programCounter&0xff);
                                              


                                              Tout simplement et normalement ça devrait déjà passer mieux sur les "roms" ;)

                                              Sinon aussi, je sais pas comment fonctionne std::copy mais:

                                              std::copy(&cpu->memory[(sf::Uint16)((cpu->hh<<8)+cpu->ll)], &cpu->memory[(sf::Uint16)((cpu->hh<<8)+cpu->ll)+cpu->spriteSize.x*cpu->spriteSize.y], tab);

                                              Le deuxième paramètre est l'adresse de la fin du tableau, d'habitude c'est la taille qu'on envoie donc je voulais être sûr que c'était pas une erreur ^^.

                                              --------------------------------------------------------------------------

                                              En lisant le sujet je me suis posé une question, vous parlez de flags pour le vblnk, c'est lequel car je l'ai pas vu dans la spec? Ou il a été enlevé entre temps?

                                              -------------------------------------------------------------------------

                                              Si je viens poster c'est pas seulement pour parler d'émulateur, mais pour faire avancer le développement sur Chip16!
                                              Et oui, m'ennuyant dans ma grot... chambre, j'ai voulut améliorer la programmation pour cette merveilleuse console (qui remplacera la 360 bientôt j'en suis sûr!) car certain n'aime pas forcément coder en assembleur :p

                                              Pour cela j'ai codé un petit compilateur pour un langage quelconque, reprenant les mots clés du ruby pour les connaisseur ^^
                                              Il a 3 jours, donc est très jeune et très buggué mais il avance!

                                              Exemple:
                                              load palette.bin in palette split every 120
                                              
                                              def main
                                              	clear screen
                                              	set sprite size at 16 15
                                              	x = 0
                                              	for i from 0 to 19
                                              		y = 0
                                              		for j in palette
                                              			draw @j at x y
                                              			y += 15
                                              		end
                                              		x += 0x10
                                              	end
                                              end
                                              


                                              Ce code est en faite l'exemple de la palette dans le thread officiel.

                                              Ligne 1: Ici on charge "palette.bin" dans l'exécutable et crée un tableau palette dont chaque élément contiendra 120 octets (8*15 octets = 16*15 pixels) de l'image.


                                              Pour le reste on définit la fonction principale "main", on efface l'écran, définit la taille des sprites puis affiche chaque sprite. :)

                                              C'est encore très très basique, par exemple chaque variable est forcément un registre, ce qui limite les variables à 16 par fonction ^^'
                                              Y'a moyen de contourner ça mais j'expliquerais si ça intéresse vraiment du monde :p

                                              Si vous avez des idées, critiques, compliment? ou autre remarque à faire, ça me ferait plaisir de les entendre ^^
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                31 octobre 2011 à 10:39:04

                                                Salut à toi mimiman !
                                                En effet tu as raison, une partie des erreurs venait sûrement de là :-° (une partie, seulement, hélas !! ;) )
                                                Je suis en train de reprendre un peu tout ce que j'ai fait pour essayer de tout corriger, mais j'ai pas eu beaucoup de temps ces derniers jours...
                                                Sinon pour le std::copy, là ce n'est pas une erreur de ma part : en fait cette fonction prend en arguments (dans l'ordre) un itérateur sur le premier élément à copier, puis un itérateur sur le premier à ne plus copier (celui qui se trouve directement après le dernier à copier), puis enfin un itérateur sur le premier élément de la destination de la copie. Voilà donc normalement pas d'erreur ici, mais merci quand même d'avoir pris le temps de noter tout ça !! :D

                                                Sinon pour ton compilateur, ça doit être intéressant, mais je n'ai pas vraiment je pense les compétences pour comprendre son fonctionnement... Après si tu as envie d'expliquer un peu je suis preneur, mais peut-être préfèreras-tu une oreille plus avisée pour t'écouter ;)

                                                Dans tous les cas merci !!

                                                A bientôt.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  31 octobre 2011 à 12:30:05

                                                  Oh mais je demande pas de comprendre le compilateur, juste le langage pour pouvoir faire des supers jeux :p

                                                  Sinon j'ai regarder un peu plus:

                                                  Y'a un gros problème dans la gestion des flags dans tes fonctions arithmétiques.
                                                  Pour voir si un nombre est négatif (donc utilisé dans les flags N et O) tu fais '&0xF000' soit 1111_0000_0000_0000 en binaire, ce qui est un peu trop ;) Essaye avec 0x8000.
                                                  Aussi, utilise des #define pour cette partie, car le code est énormément recopié, là tu verras qu'utiliser un #define pour ton 0xF000 t'aurais fait gagner énormément de temps ;)

                                                  D'ailleurs dans le calcule de O, tu oublies un &0x8000 avec le résultat, tu regardes seulement s'il est nul ou pas.

                                                  Pour finir, optimise énormément! Là on a un système 1 MHz, c'est assez peu pour nous, mais pour l'ordi il doit simuler 1 000 000 d'opération à la seconde, certaine peuvent être assez gourmande en ressource!
                                                  Comme par exemple copier de la mémoire, la retourner si besoin et la recopier encore sur l'écran pour l'afficher.
                                                  Tu peux faire les 3 en même temps ;)

                                                  Ou pour les flags, tu fais 5 fois les calcules à chaque fois! Là c'est des calcules de rien du tout pour l'ordi, mais autant prendre de bonne habitude de programmation, surtout pour l'émulation ;)

                                                  Bonne continuation pour ton émulateur, tu nous montreras une fois finit ^^
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    31 octobre 2011 à 15:16:27

                                                    Salut,
                                                    merci encore de te pencher sur mes problèmes !
                                                    En effet, j'avais repéré quelques uns des problèmes que tu montres du doigt (notamment pour les fonctions arithmétiques), mais pas tous. :p
                                                    En fait c'est pour tout reprendre un peu plus sérieusement que j'avais décidé de "recommencer" le projet (je souhaite reprendre chaque portion de code une par une en vérifiant tout pour corriger et optimiser, mais comme je l'ai dit, pas beaucoup de temps pour programmer ces temps-ci... :( ).
                                                    En tout cas lorsque je reprendrai ces parties-là, je ne manquerai pas de retourner voir tes critiques pour essayer de faire quelque chose de plus optimisé (et surtout qui aurait le fonctionnement attendu :D )

                                                    Et oui si j'arrive finalement par faire quelque chose de fonctionnel, je vous le ferai partager !! :)
                                                    A bientôt.

                                                    PS: Si j'en arrive là un jour, je serai quand même curieux de comprendre ton compilateur, et sinon je me contenterai de comprendre la syntaxe pour pouvoir l'utiliser, lorsqu'il sera prêt, et si j'en suis capable.
                                                    • 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