It has been about two weeks since I hung the new television on the wall behind the arcade table. Most of what I’ve done since then is set up some scripts to automate the resolution and screen orientation settings, and also tweaking all the emulators and native games to use the correct resolutions and orientations.
I’ve run into some problems, but I’ve also found some solutions. One of the solutions is causing new problems. The upgrade has been fun, and I have some new ideas to implement later on.
Early impressions of the “hybrid” arcade cabinet
I really like it. It reminds me of playing while sitting on one of those big, red stools in a real arcade back when I was a bit too small to see the screen well from the ground.
I’ve spent quite a bit of time tweaking native game settings. I assumed that I’d get every game set up in just an hour or two. It didn’t work out that way because it is impossible not to play some of these games once you fire them up. I probably spent at least two hours replaying Cave Story Plus.
It does feel like I am cheating a bit. It feels less authentic, but I think I can live with that.
nvidia-settings, disper, and xrandr
At first I was using disper
to control the resolution and which of the two displays were active. However, disper
and nvidia-settings
are unable to control the rotation of a single display, and I need to be able to run the “internal” monitor inverted. Preferably I should be able to rotate it on the fly, since the rotation results in a HUGE (4+ times) slowdown, and some games just won’t run fast enough that way.
I started out running Nvidia’s 295.49 drivers that ship with Ubuntu 12.04. I upgraded them to the 304.51 version because they are supposed to have proper support for xrandr
1.3.
They very nearly do. I can independently control the resolution and rotation of each display with xrandr
. It won’t let me use xrandr
to add modelines to either display. This is problematic because the internal monitor has a 1360x768 modeline and the external television has a 1280x720. There are a handful of resolutions they don’t share.
I can still set any resolution I can think of using disper
. So now I’m using a disper
to activate displays and set their resolution and I’m using xrandr
to set the orientation of the internal display.
Another small difference between 295.49 and 304.51
The 295.49 driver was quirky with regard to the television. It would only drive it at 1920x1080 or 1280x720. Everything else would be scaled up. This made it easy to get aspect-correct scaling for modes like 640x480 and 800x600.
The 304.51 “fixed” this problem for me. It will happily drive the television at 640x480 or 800x600. I should be excited about this, but suddenly many of the games that I set up are now scaled incorrectly.
I’ll have to work on this one a bit more.
I’m all out of buttons
I’d like to be able to have some manual control over the video settings. I am planning on setting up a web interface to change some settings on the fly. That way, anyone here can tweak things from their tablet or phone.
I have a handful of possible uses for the web interface:
- Change active video outputs and rotation (while games are running)
- Adjust volume, toggle ambient arcade sound track
- Kill the currently running game if it gets stuck
- Power down the cabinet