vendredi 1 mai 2020

docker container for videopac / odyssey2 emulation


As some of you already probably know, the support for the 32 bits software is tending to disappear.
Some old emulators only support 32bits linux systems and some other are difficult to recompile. To help people try and use the o2em2 emulator, i've built a docker image.

Docker is currently widely used to broadcast software and enabel people to use it without having to mess to much with their system.


Prerequisites


You need to have docker installed and running. You need a running linux station with graphical environment set up. The docker container should also work with a windows station, but I have not yet tried to.

The docker service must be started.

Running it

Runing a docker image is as simple as issuing a command :
docker -it <imagename>
The docker image for o2em2 is called o2em2. It is available here : docker hub o2em2.

To run the emulator software and actually use it you need to overcome two problems:
  • access to the graphic interface
  • access to the sound devices
gaining access to the sound device may be considered optionnal, but really it seems necessary to me to have the sounds to enjoy playing those games.

Access to the sound device

obtaining the sound requires to pass an additionnal option
    --device /dev/snd \

Access to the graphic interface


Several options ca be used for that
Option 1 : open network access
If you are willing to open network access to your X11 server then you simply have to pass a DISPLAY env variable
    -e DISPLAY=$(hostname -I | cut -d ' ' -f 1):0  \

Option 2 : provide the container access to the X11 unix domain socket
This can be acheived by passing additionnal options to docker command:
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -v $XAUTHORITY:/root/.Xauthority \
Display must simply be :0
    -e DISPLAY=:0  \

This option also requires access to some shared memory IPC, thus the following option must be added:
    --ipc=host \

Minimal command with option 1 is :
docker run -it \
    --device /dev/snd \
    -e DISPLAY=$(hostname -I | cut -d ' ' -f 1):0  \
    o2em2

Minimal command with option 2 is :
docker run -it \
    --device /dev/snd \
  --ipc=host \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v $XAUTHORITY:/root/.Xauthority \
    -e DISPLAY=$(hostname -I | cut -d ' ' -f 1):0  \
    o2em2


option 1 seems simpler, but do not forget it requires some system configuration as in most linux distros, the X11 server is not listening on an IP port. Option 1 also requires you to open some access with an xhost command.
option 2 should work out of the box.

container tweaking

control launched rom:
By default the container launches always the same game. You can control the launched game by adding the following at the end of the docker command :
    ./o2em2 vp_14.bin
 

tweak bios:
It is possible to provide your own bios directory to o2em2.
     --volume=<fullToBiosDirInHost>:/app/bios  \

tweak rom dir :
It is possible to provide the rom  directory used by o2em2.
     --volume=<fullToRomsDirInHost>:/app/roms  \

tweak sound:
The alsa sound configuration can be set from host system
    --volume=<fullPathtoYourAsound.conf>:/etc/asound.conf \


The following capture show a full command in option 2


Conclusion

I hope this container is going to help some people play the retro games of the early 80's.
In a next coming post i'm going to explain how to control IP address in option 1 and how to troubleshoot sound.


samedi 9 mars 2019

jo2emLauncher v2

jo2emLauncher v2 is in preparation.

What's going on ?
  • new java1.8 compliance
  • git is the VCS
  • dependency enhancements
  • new configuration window
  • ...

You can already use  the master branch.


Here is a snapshot of the improved configuration dialog :



The release will come soon with just a small feature set and will be enhanced in an incremental fashion.

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.





samedi 2 mai 2015

o2em emulator on raspberry pi

Introduction

I am going to install o2em on a raspberry pi.

Sometimes ago I had bought a raspberry pi. I was then seeking another goal. The project I then had did not succeed, so this marvellous piece of technology was lying in a shoe box under my old CRT television set.
good old television set

A raspberry pi model B, 2 pads, good old TV set. All I need to get a videopac / odyssey 2 playing  in my living room  is to install an emulator.
I thank smoothifier for his very kind message and for having given me the idea to turn this raspberry pi into a videopac / odyssey 2 emulator. To say it shortly, I tried and as I managed, I'm going to tell you how.
OS
As I really tried many tunings on my raspberry pi, I decided to start from blank. So I started by downloading NOOBS 1.4.0. . I installed raspbian. Then I made some basic customizations:
  • network
  • overclock settings at 900 MHz
  • timezone
  • keyboard
  • enable ssh access
Recompilation
o2em requires liballegro. To install it:
$ apt-get liballegro4.2-dev




I didn't know if I needed liballegro4.2-plugin-jack, I avoided doing anything and for the moment it seems ok.
Then, I followed my post install o2em on linux and-recompile it section 2. I placed source files in  /home/pi/o2em118src and I installed binary files in  /home/pi/o2embin directory.
Installation
I copied binary files resulting from compilation into o2embin:
  • o2em
  • dis48
I created a directory called bios and copied the french videopac C52 bios file that can be downloaded from here : The old computer (Last file from the list)
Then I installed a rom file set coming from here : emulvideopac-rom001.tgz .
 

Launching o2em

You must have X11 started to launch o2em. So enter the following commands in an  xterm.
$ cd o2embin
$ ./o2em
produces a minimal message :
O2EM v1.18 (Jan/2007)  -  UNIX binary
Free Odyssey2 / Videopac+ Emulator - http://o2em.sourceforge.net
Created by Daniel Boris (c)1996/1998
Developed by:
     Andre de la Rocha since version 0.80
     Arlindo M. de Oliveira since version 1.16

type o2em -help


$ o2em -help
produces a help message that I cannot completely see on my TV set because it is too long . The Esc key enables to get the help window away.

$ o2em vp_14.bin
launches the game 14 "duel".

$ o2em -fullscreen vp_14.bin
launches the game 14 "duel" in full screen.

If you have 2 joypads with your raspberry, as I do :
The raspberry pi and 2 pads
 
$ ./o2em -s1=3 -s2=3 -fullscreen vp_14.bin
enables to play using the pads instead of the keyboard.

Whatever are your preferred options, you acn record them once for all in a file named o2em_def.cfg. This file must be placed in the binary directory (/home/pi/o2embin). My o2em_cgf file contains:
# PVentrillon configuration 1
fullscreen
s1=3
s2=3


This enables to launch the emulator with a simpler command :
$ o2em vp_14.bin

Deactivate the screensaver

While playing, you will probably be annoyed by the screensaver. It is triggered after 10 minutes and replaces the display by a black screen.
This is not compatible with playing arcade games.
I found information on how deactivating the screensaver in this news thread : screensaver .
To make it short, i just added the following lines to the file /etc/xdg/lxsession/LXDE-pi/autostart:
  @xset s noblank
  @xset s off
  @xset -dpms




Conclusion
Here is the result. We could believe be back to the 80's. Actual odyssey 2 joystick would achieve to make the feeling complete.


o2em working
 

Making  o2em work on raspberry pi has been easier than I first thought. Next step will be to try jo2emlauncher on raspberry pi.

vendredi 1 mai 2015

o2em sur raspberry pi

Introduction
Je vais installer o2em sur un raspberry pi.

 Il se trouve que j'avais acquis un raspberry pi il y a quelques temps. Il était destiné à un tout autre but. Ce projet n'a pas abouti, j'avais donc cette petite merveille qui traînait dans une boite à chaussures sous ma vieille télé à tube cathodique.
une bonne vieille télé cathodique

Un raspberry pi model B, 2 pads, une bonne vielle télé. Il ne reste qu'à installer un émulateur et c'est reparti pour des séance de jeu videopac dans le salon!

Je remercie smoothifier pour son message très aimable et pour m'avoir donné l'idée de recycler ce raspberry pi en émulateur videopac. Bref, je me suis lancé et comme j'ai obtenu un résultat positif, je vous fait le compte rendu de mes opérations.

OS
Comme j'avais mis pas mal de bazar sur mon raspberry pi, je suis reparti de zéro. J'ai donc commencé par télécharger NOOBS 1.4.0. . J'ai installé le système raspbian.J'ai ensuite fait un minimum de configuration pour avoir les fonctions de base:
  • réseau
  • overclock à 900 MHz
  • timezone
  • clavier
  • accès ssh

Recompilation

o2em nécessite liballegro. Pour l'installer:
$ apt-get liballegro4.2-dev




Ne sachant si j'avais besoin de liballegro4.2-plugin-jack, je me suis abstenu et pour le moment, tout va bien.

Ensuite, j'ai suivi mon post installer o2em sous linux et recompiler chapitre 2. J'ai mis les sources dans /home/pi/o2em118src et j'ai installé les binaires dans le répertoire/home/pi/o2embin.

Installation
Dans me répertoire o2embin, j'ai recopié les binaires issus de la compilation:
  • o2em
  • dis48
J'ai créé un répertoire bios dans lequel j'ai placé le bios videopac C52 français que l'on peut télécharger ici : The old computer (C'est le dernier de la liste)


J'ai ensuite installé le set de rom que vous pouvez telécharger ici : emulvideopac-rom001.tgz .

Lancer o2em

Il faut savoir que pour lancer o2em il faut impérativement être sous X11. Donc les commandes qui suivent doivent être entrées dans un xterm.
$ cd o2embin
$ ./o2em
affiche un message minimal:
O2EM v1.18 (Jan/2007)  -  UNIX binary
Free Odyssey2 / Videopac+ Emulator - http://o2em.sourceforge.net
Created by Daniel Boris (c)1996/1998
Developed by:
     Andre de la Rocha since version 0.80
     Arlindo M. de Oliveira since version 1.16

type o2em -help


$ o2em -help
 affiche un message d'aide que je nepeux voir en entier sur ma télé parce que il est trop long. La touche Esc permet de s'en débarasser.

$ o2em vp_14.bin
lance le jeu 14 "duel".

$ o2em -fullscreen vp_14.bin
lance le jeu 14 "duel" en plein écran.

Si vous avez des joypads sur votre raspberry, c'est mon cas, j'en ai deux :
Le raspberry et les 2 pads
 
$ ./o2em -s1=3 -s2=3 -fullscreen vp_14.bin
permet de jouer sans les touches du clavier mais avec les pads.

Quelles que soient vos options, vous pouvez les enregistrer une fois pour toutes dans un fichier o2em_def.cfg. Ce fichier doit être placé dans le répertoire des binaires (/home/pi/o2embin). Dans mon cas il contient:
# PVentrillon configuration 1
fullscreen
s1=3
s2=3


 Cela permet de lancer les roms plus simplement :
$ o2em vp_14.bin

Désactiver le screensaver
En jouant, vous remarquerez probablement que le screensaver se déclenche au bout de 10 minutes et supprime l'affichage le remplaçant par un écran noir.
Ceci est incompatible avec le jeu.
J'ai trouvé les informations pour désactiver le screensaver dans ce fil de discussion : screensaver .
En résumé j'ai ajouté les lignes suivantes au fichier /etc/xdg/lxsession/LXDE-pi/autostart:
  @xset s noblank
  @xset s off
  @xset -dpms




Conclusion
Voila le résultat. On s'y croirait quand même.De vrais joystick d'époque et l'illusion serait totale.


o2em en fonctionnement
 

Faire fonctionner o2em sur raspberry pi s'est avéré plus facile que je ne l'imaginais. La prochaine étape, après la traduction de cet article en anglais, sera d'essayer jo2emlauncher sur raspberry pi.


 

 




dimanche 30 mars 2014

jo2emLauncher intègre les manuels des jeux videopac

jo2emLauncher revient avec sa dernière version  : 1.2.1
jo2emLauncher est un launcher pour o2em. Comme il est écrit en java, il est 100% utilisable sous linux.

Cette nouvelle version comprend des améliorations internes pour préparer les versions futures, mais elle a aussi de nouvelles fonctions.

  • Des icones sur les boutons et dans les menus déroulants
  • Les messages d'erreru ont été retravaillés
  • le launcher sait gérer les manuels des jeux (comme le montre la figure ci dessous).
Le paragraphe "getting started" du fichier readme a été revue.
Les manuels pdf proposés viennet du site suivant : http://www.bermuda.ch/balduin/videopac/videopac.html. Mille mercis au propriétaire de ce site qui met à notre disposition une très belle collection de manuels.

Le contenu de la version suivante (1.4?) n'est pas encore défini. Je vous propose de demander les features que vous aimeriez ou de voter pour l'une de celles qui sont d'hors et déjà planifiées:
  - Améliorer l'ergonomie de la fenêtre configuration (with spinners for integer values    and file choosers for directories)
  - Améliorer al fenêtre a propos
  - rendre la taille o2em  configurable
  - rendre les touches de fonction o2em configurables
  - savoir exploiter tvb
  - permettre de traduire les racourcis clavier
  - afficher text / html manuals
  - ajouter une option de  zoom "fit width"
  - rendre parametrable le rom scanner
  - ajouter une notion de categorie de rom pour les classer

J'aimerais beaucoup recevoir du feedback de ceux qui utilisent ou prévoient d'utiliser jo2emLauncher.