here is some news :
Salut tout le monde,
* Pour répondre à Washo :
Désolé si je poste pas tous les jours, mais j'ai pas internet chez moi, alors c'est pas toujours pratique.
Je pense que je vais faire un site internet pour mettre mes news, ce sera plus pratique.
* Pour répondre à tous ceux qui me idolatrent :
En fait mon émulateur est plus facile à programmer qu'un émulateur classique vu que j'ai pas besoin de désassembler chaque instruction, et contrairement aux idées reçues, configurer la MMU est assez simple, c'est juste que j'ai eu pas mal de doc à lire.
* Pour répondre à Orion_ :
Comment configurer la MMU : en gros il y a une table (deux en fait, suivant la taille des pages à déplacer) qui fait correspondre une adresse virtuelle à une adresse physique (Table Translating en anglais). Le plus embêtant c'est que les pages doivent être alignées en fonction de leur taille, mais une fois qu'on a compris, c'est pas difficile.
Comment reprendre le contrôle : avec les timers : j'utilise un timer qui se produit à la fin de chaque ligne du LCD (le LCD de la gba), ce qui me permet de mettre à jour VCOUNT, et de rafraichir l'écran, les touches, et tout le reste... Le problème c'est que certaines ROM désactivent les interruptions, j'ai eu le problème ce week-end mais il ma suffit de remplacer les instructions en question par des nop (mov r0, r0), et ça a marché. De toute façon les interruptions qui devraient arriver à cause de la GBA, c'est moi qui les émule, donc ça n'a rien à voir avec les vrai interruptions de la GBA.
c klr que la c 10x plus rapide que d'emuler le proc : je suis totalement d'accord, par contre faut pas oublier qu'il y a tout le reste à émuler, et je n'ai aucune idée de la puissance qu'il faut.
* Pour répondre à Superip74 :
Désolé, mais je ne connais pas du tout le hardware de la neogeo, ce qui est sûr c'est que la gp32 n'a pas le même processeur que la neogeo, donc le principe de mon émulateur ne s'applique pas à la neogeo.
* Concernant les news :
- Le problème que j'avais à cause des accès mémoire non alignés est résolu : il suffisait de désactiver "Memory Alignment Check" qui était dans je ne sais plus quel registre CP15.
- J'ai plus ou moins fini les modes 4 et 5 (le mode 4 n'affiche pas les sprites mais juste le BG2)
- J'ai modifié le bios de la gp32 pour intercepter les exceptions (undefined instruction, data abort et prefetch abort) et également les SWI. J'ai du faire super attention c'est déjà un peu risqué de reflasher son firmware, alors un firmware modifié par mes soins...
J'ai été un peu obligé de faire ça vu que pas mal de démos gba faisaient resetter la console, et je ne pouvais pas savoir à cause de quoi, donc maintenant j'ai un message qui m'indique l'adresse de l'erreur, le type d'erreur.
En particulier certains compilateur (goldroad par exemple) codent mal l'instruction LDR(S)(H) et STR(S)(H). Ca n'a aucun effet sur GBA, mais sur GP on obtient une "Undefined Instruction". J'ai un peu galérer pour trouver ce problème.
Une autre raison de devoir modifier le bios gp32 est la suivante :
Les roms GBA utilisent le bios GBA en faisant des instructions SWI #nn, or ces instructions font directement appel aux instructions SWI de la GP32. Voici donc l'idée : je modifie la rom GBA pour que toutes les instructions SWI #nn soient remplacées par SWI #nn+0x80, afin que les fonctions du bios gp32 soient comprises entre 0x0 et 0x7F (en fait il n'y en a que 23), et les instructions > 0x80 soient celles de la GBA. J'ai donc juste redirigé une instruction "BGT r0, #23" du bios gp32 pour intercepter les fonctions bios de la GBA.
Je suis pas particulièrement content de cette solution, mais j'ai pas trouvé mieux pour l'instant, alors si vous avez des idées...
- Si vous avez compris ce que je viens de dire, ça veut dire que les roms gba devront dans la plupart des cas être "patchées" pour fonctionner avec mon émulateur. Ca devrait pouvoir être fait automatiquement avec un logiciel, sauf si les roms sont un peu protégées (genre checksum) ou alors compressées. Ca veut aussi dire qu'il va falloir utiliser un firmware modifié (mais de toute façon c'était déjà obligatoire à partir du moment où vous vouliez charger des roms de plus de 4 Mo)
- Comme mon émulateur commence à émuler quelques petites demos, je pense que je vais sortir une première version très bientôt (cette semaine je pense)
- Je pense avoir à peu près tout dit.
@+
here the "translation:
hello everyone
to answer Washo :
sorry if I dont post every day but I dont have internet at home so it isnt very cool
I think I will make a website to put news on...It will be easier
to answer everyone thinking im a god:
in fact my emu is easier to dev than a classic emu since I dont have to decompile all the instructions and the MMU config is quite simple (instead of what poeple think)
I only needed a lot of docs
to answer _Orion:
How to config the MMU: there is 1 table (in fact 2 depending on the size you have to move) which make a link between a virtual address and a physical address(Table Translating). The most boring partis that the pages have to be aligned depending on their size but since you have understood that it is not hard
How to take back control: with timers
Im using a timer hapening at the end of each line from the GBA LCD. That allow me to update VCOUNT and to refresh the screen, buttons,everythink else
The Pb is that some roms kills interuption..I got the Pb this weekend but I ve only de replace those instructions by NOP et it worked
In fact interuptions hapening due to the GBA, I emulate them so it has nothing to do with GBA interuptions (the true ones)
it is really 10x faster than emulating the CPU..I agree but dont forget that you have to emul everything else and I dont know the power needed
to answer Superip:
sorry but I know nothing about NEOGEO...1 thing is sure : it is not the same CPU so my method cant be used
ABOUT THE NEWS
-The Pb I had due to mem acces unaligned is solved : just desactivated "Mem alignement check"which was in a CP15 register
-Mode 4 & 5 are nearly finished (M4 only shows BG2 not the sprites)
-I modded the GP32 BIOS in order to intercept execptions (undef instruction, data abort, prefetch abort) ans the SW1
I need to be very carefull since it already "hard" to reflash the BIOS....So guess about a modded one by myself...
I was obliged to do that since a lot of demos GBA reseted the GP32 ans I wasnt able to know why...So now I have a message indicating me the crash address, type...
Some compilators (goldroad for example) are badly coding LDR(S)(H) and STR(S)(H)...No effect with GBA but with the GP32 we get a "undef instruction"
It was hard to find out this Pb
Another reason to mod the GP32 BIOS:GBA roms are using the GBA BIOS calling SWI#nn but those instructions are directly calling GP32's SWI
Here is an idea : I mod the GBA rom so that all SWI #nn instructions are replaced with SWI#nn+0x80 so the GP32' BIOS fountion are between 0x00 and 0x7F 'in fact there is only 23) and the instructions > 0x80 are the GBA ones
I only redirected the BGT r0, #23" from the GP32 BIOS to intercept GBA's BIOS fonctions
Im not really happy by this method but nothing better for now so if someone have an idea.....
-I you understood what was written that means GBA roms will have to be patched to work with my emu. It should done auto by a soft except if roms are protected (CRC chk...) or compressed
So we will have to used a modded BIOS (but in fact it is already needed to play roms bigger than 4M)
-Because my emu can emuate some small demos I think I will release a beta very soon (could be this week)
-I think I said everything
@+
so here is a lot of cool news about the GBA emu
see you :lol: