dimanche 3 avril 2016

64bits linux and odyssey 2 emulation

Here is my latest story related to odyssey 2 emulation.

Recently, I've offered myself a brand new computer. I've installed a recent linux distro with 64 bits compilation mode. Everything was fine until i tried to restore o2em and my launcher jo2emLauncher. For those who don't know, here is a link to a blog entry about the launcher blog entry about jo2emLauncher.


No odyssey 2 emulator anymore ?


The most perspicacious among have already noticed the big lie in the previous section. Not everything was easy and straightforward. The problem with o2em was rather the 20th problem I met, but it si the one this blog entry is about.
  • Impossible to use the binary file I had saved. It was a 32 bits exe and the system is 64 bits. There are some compatibility layers, but I did not try this way.
  • O2em is developed using liballegro 4.2 and ubuntu 15.10 (Willy Werewolf) brings allegro 4.4.
Rather than trying to make o2em work by installing a compatibility layer and some old library release, I tried to find an more modern emulator. I found O2em2. The main page of this project is there o2em2.

 

Recompile it


Recompiling o2em2 and making it working has not been a simple job.
  • I first downloaded the latest release o2em2-1.51.tar.gz
  • I uncompressed: tar -xvzf o2em2-1.51.tar.gz
  • cd o2em2-1.51/
  • ./configure --with-game-api=allegro
  • make
    • vmachine.c:25:19: fatal error: debug.h: No such file or directory
       
  • I edited main.c and vmachine.c to replace
    •  #include "debug.h" by
    • //#include "debug.h"
  •  make
  • This time I got a launchable program. To try it, I just had to create a "bios" and a "roms" directories.
 

Program options

The following issue I met was about options. Lots of o2em command line options were not accepted anymore. Among them:
  • -help (not so important)
  • -fullscreen (Annoying because to really have fun you have to play 2 player games. You have to be a few feet away from the screen)
  • -s1
  • -s2 (really annoying because many games require a joystick or a joypad.)
To fix this, I modified the source code of the function parse_option. The modifications of the source code are simple but there are many. I don't place them in the blog entry but you can download the patch.


Having the joysticks working

After the parse_option update, all the options are accepted by the program, but some are still not working. i did not test each of them, but I can tell you that joysticks were still not working.
To fix it, I uncommented a source code line in vmachine.c. source file. The uncommented line is poll_joystick();.

Once this statement is brought back, the program is working fine for me. Nonetheless you may find some other issues and differences with o2em.

Source patches

To ease getting the same result I got, I publish 2 patch files. You can download them:
  main.patch

 vmachine.patch

To apply patches, you just have to download them into the o2em2 source directory and enter the following command:

  • patch -p0 < vmachine.patch
  • patch -p0 < main.patch
Then compile:
  • ./configure --with-game-api=allegro
  • make

  What about jo2emLauncher ?

For now I just created a symbolic link o2em -> o2em2. It is enough to make the launcher work with o2em2.
In a next coming release of he launcher, the name of the emulator binary will be customizable. I've added this item to the TODO list.

dimanche 27 mars 2016

linux 64 bits et emulation videopac


Voici le compte rendu de mes dernières aventure en matière d'émulation videopac.

Dernièrement, je me suis offert un tout nouveau PC. J'ai installé dessus une distribution récente en 64 bits.Tout se passait assez bien jusqu'à ce que j'essaye de rétablir O2em et mon petit launcher jo2emLauncher. Pour ceux qui n'auraient pas suivi les épisodes précédents, voici un article sur jo2emLauncher.

Plus de videopac ?

Les plus perspicaces d'entre vous auront remarqué le gros mensonge qui consiste à dire que tout allait bien. En fait, mes difficultés avec o2em,  c'etait plutôt le vingtième problème, que je rencontrais, mais c'est le seul dont je vais vous parler dans cet article.
  • Impossible d'utiliser le binaire o2em que j'avais sauvegardé. Il est 32 bits et le système est 64 bits. Il existe des couches de compatibilité, mais je n'ai pas essayé de suivre cette voie.
  • O2em est développé pour liballegro 4.2 et ubuntu 15.10 (Willy Werewolf) apporte allegro 4.4.
Plutôt que d'essayer de faire marcher o2em en installant une couche de compatibilité et de vieilles version de bibliothèques, j'ai essayé de trouver un émulateur plus moderne. J'ai trouvé  o2em2  dont la page principale se trouve ici o2em2.

Recompiler


Recompiler o2em2 et le faire fonctionner ne s'est pas avéré simple.
  • J'ai téléchargé les sources de la dernière version o2em2-1.51.tar.gz
  • J'ai décompressé: tar -xvzf o2em2-1.51.tar.gz
  • cd o2em2-1.51/
  • ./configure --with-game-api=allegro
  • make
    • vmachine.c:25:19: fatal error: debug.h: No such file or directory
       
  • J'ai édité main.c et vmachine.c pour remplacer
    •  #include "debug.h" par
    • //#include "debug.h"
  •  make
  • Cette fois on obtient un exécutable utilisable. Pour l'essayer, il suffit de mettre en place un répertoire "bios" et un répertoire "roms".
 

Les options

Le problème suivant est que de nombreuses options ne sont pas acceptées. Parmi lesquelles:
  • -help (anecdotique)
  • -fullscreen (ennuyeux car pour s'amuser vraiment, il faut jouer à 2 et avoir un peu de recul)
  • -s1
  • -s2 (également très ennuyeux car sans joystick la jouabilité est diminuée)
Pour corriger ce problème, j'ai modifié de façon assez substantielle le code de la  fonction parse_option. Les modifications sont simples mais assez nombreuses. Je ne les reproduis donc pas dans l'article, et je me contente de fournir un patch.

Les joysticks

Avec cette première modification, les options sont toutes reconnues, mais toutes en fonctionnent pas. Je n'ai pas tout testé en détail mais je peux vous dire que les joysticks ne fonctionnent toujours pas.
Pour corriger ca, j'ai rétabli une ligne de code qui a été mise en commentaire dans le source vmachine.c. poll_joystick();.

Une fois cette ligne rétablie, le fonctionnement me donne satisfaction. Il se peut cependant qu'il y ai d'autres différences avec o2em.

Les patches

Pour faciliter la reproduction des manipulations que j'ai décrites , je mets 2 fichiers patches à disposition :
 main.patch

 vmachine.patch

Pour appliquer ces patches, il suffit de les télécharger dans le répertoire contenant les sources de o2em2 et d'entrer

  • patch -p0 < vmachine.patch
  • patch -p0 < main.patch
 Ensuite il suffit de compiler
  • ./configure --with-game-api=allegro
  • make

 Et jo2emLauncher ?

Pour le moment je me suis contenté de créer un lien o2em -> o2em2. Ca suffit pour faire fonctionner le launcher avec o2em2.
Dans une prochaine version, le nom de l'exécutable sera configurable. Je l'ai ajouté a la TODO list.