~/

Project Exa Drive



Exa Drive v1.81




Specifications


OS: Ubuntu 14.04 x86
Interface:
Kodi 16.1
Mah!Cade
CPU: Turion 64 X2 TL-60 @ 2GHz
RAM: 3GB DDR2-333
GPU: GeForce 7150M
HDD: 640GB
Input: Dual Shock 3s

Emulated Systems

Arcade
Atari 2600
Atari 5200
Atari 7800
Atari Lynx
Capcom CPS1/2/3
Colecovision
Gameboy
Gameboy Advance
Gameboy Color
Famicom Disk System
NES
Neo Geo
Neo Geo Pocket
MSX-2
Super Gameboy
Sega 32X
Sega CD
Sega Genesis
Sega Game Gear
Sega Master System
Sony Playstation
Super NES
Turbo CD
Turbo Grafx 16
Wonderswan

Wonderswan Color



Since 2009 I've dabbled in building small form-factor media PC "console" systems. Basically a computer running a highly customized operating system and interface controlled entirely by game pads (Sony Dual Shock variants in my case).

I recently got an old HP laptop for next to nothing: I decided to build a new media PC setup for it based on Linux and Kodi (VS Windows and GameEx like all my previous designs) and now have it hooked up to a 32" TV in my living room.

OS

Initially I started building a custom Tiny Core Linux 7 install, but after seeing virtually no speed difference good or bad between the parts I had running in Tiny Core VS Ubuntu 14.04 I just went with Ubuntu.
The Pymouth theme I made. It was a pain in the ass to get this to display during boot using nvidia's binary driver!

I did an minimal "server" install, then built a DE part for part. Openbox as the WM, PCManFM (As a daemon) to handle removable media mounting and Kodi + Mah!Cade for interfaces. The drive is split into sda1 for the OS and sda2 is mounted to /datapart, which is the rest of the HDD used for general internal storage.

The machine is entirely driven by Dual Shock 3s. I installed QtSixAxis/sixad to get Bluetooth support for them.

sixad is set to run on boot via rc.local and I created a udev rule named 99-sixaxis-autopair.rules containing:
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0268", RUN+="/usr/sbin/sixpair"
then threw it under /etc/udev/rules.d. Now whenever a DS3 is connected it is auto-paired to the Blue Tooth radio with no user intervention. Handy!

The interfaces are controlled by the Dual Shocks by turning their inputs into keyboard presses, via a program called AntiMicro.

QJoyPad is also used for ePSXe and Kega Fusion for 1P/2P reasons: They don't identify game pads by ID, rather by name. So if you turned on "P2"'s Dual Shock the interfaces and such would work but you'd be stick as P2 under either emulator. QJoyPad maps them to keyboard presses to get around this. AntiMicro should be able to handle this but is buggy when applying separate profiles to game pads with the same name, so hey. :(

Kodi

I ended up taking a Playstation 4 theme I found for Kodi (Helix) and hacking the holy hell out of it. Behavior is somewhat different from the base skin, it's faster, less crash prone and looks a lot different after hours of hacking arcane XML files and swiping icon sets and wallpapers from various Deviant Art pages and Google Image Search, then bastardizing them with Paint.net.



Full speed h.264/h.265 decoding at 1080p is possible, despite the ancient/weak GPU. I was surprised at how capable a 7150M is for this task.

It can also do a standard photo browser session for a connected phone/flash drive/etc, though I doubt I'll really use that much myself.

For Wifi, I ended up hunting down a Network Manager applet and doing some work to make it function under Jarvis, with great success...

Media can be added and deleted via Kodi's built in file manager.

Mah!Cade

For the most important part (The ROMs) I ended up turning to a Wah!Cade fork called Mah!Cade to run them. Advanced Launcher, ROM Collection Browser, etc all had fatal flaws in some way preventing me from using them as emulator frontends. I ended up using Advanced Launcher, but only to simply launch Mah!Cade...


I attempted to match the Kodi them as much as possible, and launch Mah!Cade with a script I wrote that looks at the current resolution then resizes the layout dynamically to scale: This way it doesn't matter what resolution the machine may be running at connected to a TV.
I Got Your S-Video Dawg
(640x480 Wah!Cade Layout Scaling)



I have lots of game snapshots. Like almost 30,000 lots. I think about 97% of all the games I have are covered currently.

Most emulator entries are pointing to a very elaborate script I wrote to handle 7zip/RAR/Zip decompression for emulators that don't support them as well as things like per game memory card creation/mounting for ePSXe.

For MAME, I ended up splitting the 0.143 set into Neo Geo, CPS and Arcade categories. I created custom list.xml files with stripped clones, pinball, mahjong, light gun, steering wheel (Basically, anything that is going to be a nightmare/impossible to play with a game pad) games. As a result there's "only" about 2,000 arcade entries to wade through instead of > 11,000.

Other systems were trimmed accordingly. Except for systems such as the Turbo Grafx 16 where most of the good games are japan only, I removed all non-US ROMs from the supported sets. However, if an english translation for a Japanese game exists that is included. I plan on further going in and removing revisions (Such as PRG1/PRG0, v1.0/v1.1) to further unclutter the ROM lists.

Space saving measures were done by 7zipping ROMs, PBP compressing PSX ISOs and ripping the Sega CD and Turbo CD games to ISO+MP3/ISO+Ogg. Overall this knocked about 60GB off the total size.

All emulators are set up for 2-4 players. Whee. Said emulators include the following:

ePSXe
Kega Fusion
Mednafen
MESS
SDLMAME 0.143
Stella

Other

I also wrote a script for a Global volume control/indicator done via Yad, since Kodi's volume control is not, in fact, the global system volume. Right Analog Up/Down adjust the volume in 3% increments. Yay.

I've also built in an "Oh Shit!" function where pushing L3 and hitting Select calls a script that kills anything that could possibly be hanging, restores the resolution to what it was on first boot and restarts AntiMicro/Kodi.

Future Plans

I think I've put about 250 hours into this, but there's still more I'd like to do at some point:
  • Get much faster hardware to run all this on!
  • Add Playstation 2, N64, Dreamcast, Wii, Gamecube, Saturn, NDS and PSP support.
  • Configure as NAS
  • Better video streaming options
  • Integrate Web Browser
  • Add PC games (Native Linux, DOSBox and Win32+Wine)
  • DVD/CD/PS2/PSX/Saturn/TG-CD/Sega CD disc ripping and burning
  • Further Kodi theme/function work