Starcraft reverse engineered to run on ARM
boards.openpandora.org
boards.openpandora.org
It's well above my head, but it'd be a fascinating read!
https://github.com/notaz/ia32rtools
Video of the game running on an OpenPandora here:
- 90 MHz Pentium or equivalent
- 16 MB RAM
- SVGA video card
- low-latency internet connection rated at 28.8 KBps+
I forgot how few resources this great game needed.ps: the pandora specs http://openpandora.org/portal/index.php?option=com_content&v...
I remember there being this one mission where you have to survive for a fixed amount of time (10min? 15min?), and on this machine it lasted more like half an hour. Also reminds you how they accounted for time in those days.
Diablo (the first) with the Hellfire expansion ran smooth as butter on the same machine. I also remember trying to do Python and Java on that machine, didn't go over to well either, although Python wasn't too bad.
I say this fully aware that the cycle will continue one day when I get angry at my future child for installing Flight Sim 27, taking up 1.5 terabytes of precious HD space. And of course, they will remember it one day and laugh because a 100PB SSD will be a $10 purchase at the gas station.
https://github.com/notaz/ia32rtools/blob/master/tools/transl...
It looks like it's not a full decompiler, but just an instruction-level one - it doesn't attempt to recover any more high-level structure beyond if/goto and function boundaries with parameters. Look at lines 4500-4533 for an example. He also appears to be parsing disassembler output(!) for its input.
docs.winulator.com/programs
Edit: more info on GsmArena
http://blog.gsmarena.com/you-can-now-play-starcraft-and-caes...
"The Winulator doesn’t work like an emulator. It just converts an x86 game executable to an ARM-friendly one. Here is what you need to do.
You’ll need three things – a computer with installed Winulator Converter Helper, the original DRM-free game installed on that computer and the Winulator Android app installed on your phone."
It even supports a bluetooth mouse, (which I went and bought the same day I installed and got working). Works perfectly. like having a '96 gaming PC in your pocket(s)
I even changed the winulator icon to StarCraft icon then went to the pub and pulled the mouse out of my pocket, setup my android and made all my iphone-owning friends $#!^ bricks. Good times.
[0] https://play.google.com/store/apps/details?id=com.postram.wi...
[1] https://docs.google.com/a/shir-man.com/file/d/0B1bdCV3iqJ-MT...
I actually got as far as creating a GitHub repo to work on this <https://github.com/wtracy/recompile> but my code never got farther than some logic for parsing ELF headers.
Sounds like a HUGE undertaking (esp for one person) but worth it; once you have that frontend (if my assumptions are correct), you would be able to have a lot of fun.
That said, even once you've got x86 -> LLVM translation working, there's a lot of code out there that makes x86-specific assumptions.
I once interviewed with a group that was trying to port a large codebase from PPC to x86, and even having the source code didn't help with the fact that their code assumed a big-endian architecture.
It's definitely not perfect, but I suspect it will work much better than trying to do x86->LLVM from scratch. QEMU's IR is very likely much closer to correct than anything you'd come up with, since it is used for emulation, and the mapping from QEMU IR to LLVM is very straightforward (you can even run QEMU with LLVM as the backend, albeit with some performance penalty).
Two things to watch out for in this approach: helper functions (places where QEMU has decided to use a C function to implement some functionality rather than implementing it in TCG) and there may be some artifacts in the generated LLVM from things that are related to QEMU's system emulation rather than what the original code did.
[1] http://infoscience.epfl.ch/record/166081/files/revgen.pdf
At the time, my primary motivation was really to learn more about x86 machine code, which explains the brute-force approach. (Hey, Linux got started because Linus wanted to learn more about x86 memory management, so it's not a completely dumb approach.)
I would like to see a performance comparison of this approach vs. running a full virtual machine since the x86 to arm conversion approach still requires a wine lib to execute all the windows APIs.
I'll probably also buy the follow up device.
I've definitely signed up for the sequel! :)
Besides that ; I need devices with 'infinite-ish' battery life because battery life really really sucks.
http://ithic.com/newsite/index.php?id_product=9&controller=p...
I'm not quite sure what I'd use one for, but it's an interesting option.
Done by some of the founders of OpenPandora. Will probably be the only followup device. It has impressive specs, but is priced like a laptop (which it is tbh).
There are many open source implementations of PS1 emulators, and the PC version of FF7 is notoriously bad. So from a gameplay perspective, the PS1 version of FF7 is far easier to run an any platform, and is superior in all respects.
Like I said, not discouraging it, just curious.
http://www.phonearena.com/news/StarCraft-arrives-for-Windows...
FD: I no longer play Blizzard games due to this action.