Hi,
At the very least their code does work here (on a PPC with DOS and mpxplay) and yours doesn't. I'd have to check things on my x86_64 box to ensure it's not a endianness issue of some sort,
It most likely *is* endianness, the mmio_read/write handlers don't swap bytes on bigendian hosts. That is the only endian issue I'm aware of though. Guest memory access goes through {stl,ldl}_phys() + friends and thus should be fine as-is.
/me goes try dos+mpxplay ... cheers, Gerd