perjantai 30. marraskuuta 2012

Amiga emulation with Amiga forever and WHDload

This I'll tell how I configured Amiga emulation on my HTPC. Now, Amiga games typically are on several disks, and even though MythGame supports those, it does not work very well with Amiga emulators, e-uae in my case. Mostly the problem is that one must change the disks and stuff like that, which is quite clumsy in my opinion. I know there is fs-uae which probably would work better in that aspect, but it was horribly slow on my setup.

Anyways, I bought Amiga Forever from Cloanto. For just a few dollars, I got all necessary Kickstart ROMs, bunch of games, and Workbench (the nice OS).

Amiga Forever has a very nice Windows interface with one click launching of games etc, but it does not work so well with Linux. So I downloaded WHDload, which is an Amiga program intended to allow hard disk installing of Amiga disk games.

So, to set up my emulation, I created two directories: ~/Amiga/HDWorkbench and ~/Amiga/HDGames. In e-uae config, I added those to my uae config, and installed Workbench on the HDWorkbench drive, following this nice guide. After that, I installed WHDload (copied it to the hard drive and installed using Workbench).
Now everything is ready for games. Just copy the WHD installs of them to HDGames dir and launch them from Workbench! But what about MythTV?

I created a small script to write a proper startup file for amiga, so that when it boots, it automatically launches the game. The script looks like this, I call it run-uae:

#!/bin/sh -e
# Script to automatically lauynch e-uae using WHD game selected
# Also changes qjoypad layout to UAE
#
# Works by creating a User-Startup file which launches the
# game when UAE boots, and then deletes it when done.
# Note that paths MUST be correct and UAE must boot to
# Workbench with the selected configuration.

if [ ! $# = 2 ] || [ "$1" = "-h" ]; then
  echo "Usage: run-uae <config> <game>"
  exit 1
fi


AMIGA_GAME_PATH="Games:"
AMIGA_STARTUP_FILE="~/Amiga/HDWorkbench/S/User-Startup"

CONFIG="$1"
AMIGA_SLAVE=$(basename "$2")
AMIGA_PATH=${AMIGA_SLAVE%.*}

echo "${CONFIG} ${AMIGA_SLAVE} ${AMIGA_PATH}"
echo ${AMIGA_STARTUP_FILE}

# Create user-startup
echo "cd \"${AMIGA_GAME_PATH}\"" > ${AMIGA_STARTUP_FILE}
echo "cd \"${AMIGA_PATH}\"" >> ${AMIGA_STARTUP_FILE}
echo "whdload ${AMIGA_SLAVE} Preload PAL" >> ${AMIGA_STARTUP_FILE}
echo "uae-configuration SPC_QUIT 1" >> ${AMIGA_STARTUP_FILE}

# Change qjoypad layout to UAE
qjoypad --update UAE

# Run e-uae
e-uae -f ${CONFIG} -G 1

# Reset qjoypad configuration
qjoypad --update "MythTV"

# Remove startup file for next clean boot
rm ${AMIGA_STARTUP_FILE}

You need to tune the parameters in the beginning, the game path to have the Amiga drive label, and the other is real path to the user-startup file. And you point to the .slave file of the game. I think it might be better to use the .info file, But I haven't had the time to do and test the change. This works for 99% of the games out of the box.

In Mythgame the setup is like this:
- Player name: Amiga
- Type: Amiga
- Command: run-uae ~/.e-uaerc %s
- ROM path: ~/Amiga/HDGames
- Working dir:
- File extensions: Slave, slave
- Uncheck the box for multiple disks

Running Windows games in MythTV

Second post coming, after a while! Nice.

This time it's about how to properly play Windows games under MythTV and wine. Or MythGame to be precise, but it's part of the system, so...

On the MythGame wiki page there was nothing about wine, but after reading the other topics and experimenting a bit, I ended up with following system:


  • I created a ~/Windows/ directory, and configured wine to use it as a D: drive. I will install all my Windows games there.
  • All launchers will be stored in a new directory, ~/Windows/conf
  • MythGame launcher for wine looks like this:
    - Player Name: Windows
    - Type: Other
    - Command: sh %s
    - ROM path: ~/Windows/conf
    - Working dir:
    - Extensions: sh
    - Uncheck the box about multiple ROMs
    
    
In the start, all launchers were just simple cd <gamedir>; wine <game.exe>, but I ended up with something better:

Often my windows games crashed, leaving the MythTV front-end broken, or had some problems with colors or resolutions. I crawled the web about launching another X session for wine games, because apparently there would be benefits:

  • If a game crashes, it doesn't screw up the front-end
  • Colors and resolution can be set independently of the front-end
  • No other programs (opengl?) running on the same X server -> better performance
  • The "Virtual desktop" in winecfg can be used (if game won't work without it) and it can be fullscreen, or if not, there is nothing on the backround anyways!
Of course it's not that easy. For some reason, launching X with only wine as a client didn't work, the new server just didn't work. But after few days of trying, I got it to work using a shell as the client.
At the same time, I figured I could use fuseiso to mount cd images automatically to ~/Windows/cdrom, which was configured as a cdrom drive in wine. This way: no hand mounting or inserting cds!
So here's an example of a working sh file to be put into ~/Windows/conf. It mounts the cd, set's resolution and launches the game. When the game ends, it
returns automatically to front-end! Neat!


#!/bin/sh

# Use FUSE to mount the cd image
fuseiso ~/Windows/Game_CD.iso ~/Windows/cdrom

# Launch new X server, with retro style (striped background, optional)
# and closing after the game is finished
# If not using NVidia gfx card, remove the & nvidia-settings ...
# And if you need to change color depth, use something like this:
# X :3 -retro -ac -terminate -depth 16
X :3 -retro -ac -terminate & nvidia-settings --load-config-only

# Forces the system to have a break for 2 seconds, X doesn't launch instantly
sleep 2

# Set correct resolution for this game, then
# launch the game on the new X display
cd ~/Windows/Game_dir/
DISPLAY=:3 WINEDEBUG=-all xterm -e "xrandr -s 800x600 && wine Game.exe"

# Unmount cdrom when done
fusermount -u ~/Windows/cdrom

Hopefully this helps others too, I think this is the only way to properly run Windows games (and why not other games too?) under Linux!

torstai 20. syyskuuta 2012

NES Emulation on MythTV

Thought that I might as well write about Nintendo emulation right away.

Game emulation in MythTV requires a MythGame plugin, which might be installed automatically, or it can be installed through the control center. It adds a new Games section in the MythTV main menu and in Settings.

I've tried several NES emulators, but I've liked fceux and Mednafen the most.

Fceux

Fceux wors fine, but I didn't find a way to quit it using only the gamepad. So I configured qjoypad so that one button in my gamepad is same as pressing esc key on keyboard. That helps a lot.
For mythgame to launch first the qjoypad and then emulator, I wrote a little script:


#!/bin/sh -e
# Script to launch FCEUX with correct settings
# First, sets qjoypad bindings, i.e. bottom triggers
# quit the emulator (or what ever is defined)
# then runs fceux, and finally changes qjoypad layout back

# Update qjoypad joystick lists and select FCEUX
qjoypad --update FCEUX

# Run fceux
fceux -fullscreen 1 "$1"

# Back to default mapping mode
qjoypad --update "MythTV"

I named it run-fceux, and in mythgame config, I call "run-fceux %s" and it works fine. Fceux has crashed on me some times, and it seems to have some minor issues every now and then. Otherwise it's fine.

Mednafen

Just today I tried Mednafen and already like it better than fceux. Only problem was getting the gamepads to work, but in the end it was easy:

- Start mednafen from command line, e.g. "mednafen /path/to/rom.nes"
- Press alt+shift+1 and you're asked to press every gamepad 1 button in order, up, down, left etc. You can bind many keys to do the same thing, when you're ready, press the same key twice.
- Press alt+shift+2 and do the same thing for second gamepad.
- If you want quit button in your gamepad(s), press F2, then ESC. Now you can press all different quit keys you want. Finish with double ESCs so keyboard will function as before.
- Done. Easy, huh?

I wrote similar script as before to get rid of my gamepad bindings for MythTV, and the command line to launch mednafen is following:
mednafen -nes.stretch 1 -fs 1 -vdriver 0 "$1"

Currently I suggest using Mednafen for NES emulation, it seems to be very clean and nice.

HTPC setup

First post!

I've been building my HTPC for some time now, and I'd like to share my experiences with everyone, since there doesn't seem to be a complete list of "suggested applications and setups" people like I could use. Instead, I've had to try many things to get this system to behave like I want it to.

Some specs:
- Heart is Asus AT5IONT-I Deluxe, but I got a cheap returned one, which didn't have power supply (external DC one), remote control or wlan antenna. So in the end, it was quite lot of work to hunt these parts, and I would rather get a retail one now.
- Motherboard has Intel Atom D525 processor
- Nvidia GT218 graphics card
- Some memory, at least 2 GB
- 2 TB of hard disk space

Currently there is no fan, but the device is a bit too hot, so I will add one.

Software runs MythBuntu (Ubuntu+mythtv distribution), which is not perfect, but better than any others I have tried. I might write about them someday.

On following posts I will share my configurations for game emulation and other stuff.