Box86 - Linux Userspace x86 Emulator


Pull latest version, and you'll see, It launches now :)
Indeed it does. It also plays very well.
The game is not CPU intensive and is rather held down by the GPU. Thanks to that, the actual resulting maximum frame rate is identical to the native version. Neat.

Performance in numbers, though be warned these are neither 100% accurate nor properly averaged. Frame timing is displayed as the frame renders so the numbers are gone just as fast and fluctuate a bit too. Meaning they're rough average estimates of what I saw on the higher end.
Native:
BG Step: ~1µs (rarely ever anything to do there, might even be just the overhead from the performance counter itself)
Obj Step: ~60µs (Pretty much all game logic there, though I admit, I did use the most graphical intensive part of the game, not the one with the most action going on)
Render: ~3000µs (All OpenGL render commands measured, but does not wait for SDL_GL_SwapWindow(). Might be very inaccurate, but it's been good enough for me)

Box86:
BG Step: ~30µs
Obj Step: ~400µs
Render: ~3000µs (Yes, pretty much identical)

This is with frameskip limiting the game to 30fps, but the frame rates are identical with it turned off as well (my CC Pandora doesn't manage 60 there).


What I did come across however was a segfault when attacking a certain enemy type. But this appears to also happen in a freshly compiled native build. Perhaps something broke with libs in current beta Code::Blocks PND? I'll get to debugging that myself later.
It's certainly not Box86's fault here at least.


Edit:
I've managed to use version 1.0 data files with version 1.1 binaries on both ends. Good job me.
Everything is fine.
 
Last edited:
I searched yesterday about good Linux RPGs which are X86 only for testings.
Found mostly Visual Novells.

I am searching for Games Like Ragnarok online.

Skunks Linux 32Bit Version did started and with Omapdss even in Fullscreen.

It makes Fun to experimenting.
And i try mostly old X86 Things.

Maybe i will try this Evening Descent3 :)
 
I need to get my OMAP5 devboard a working OS again to fool with this. First step get the energy level to do so....
 
I am happy that @ekianjo continue his Site.

And i am thankfull to @ptitSeb for do all this Work for us.

Tried to install Descent3 Linux Native Version on my Ubuntu,but its difficult.
Maybe i have next days more Success :)

After Step i want to try X2 from the X Universe,because it have a native Linux Version too.
 
Maybe a bad idea, but It is possible using this nice piece of software, running arm compiled software on x86? An arm user space emulator running with native libs from x86.

With this compiling for arm can be done without cross compiling and testing on x86.

Thomas
 
That would be another software. The same method is doable, but all wrappers have to be redone, and the CPU emulator too...
 
I figured as much! That's okay, it's more useful to emulate x86 linux apps on ARM than the other way round anyway.
 
For anyone looking for (commercial) games to test, here is a small list of things I could imagine would possibly run and be interesting:
- caves of qud
- tangledeep
- neurovoider
- songbringer
- retrocity rampage
- Else Heart.break()
- dungeon souls


if you have a XU4 or something similar maybe:
- rimworld
- dwarf fortress

I believe all of these have DRM free linux binaries available.
 
For anyone looking for (commercial) games to test, here is a small list of things I could imagine would possibly run and be interesting:
- caves of qud
- tangledeep
- neurovoider
- songbringer
- retrocity rampage
- Else Heart.break()
- dungeon souls


if you have a XU4 or something similar maybe:
- rimworld
- dwarf fortress

I believe all of these have DRM free linux binaries available.
I haven't checked any of those title (I don't have most of them), but Neurovoider is a C# with XNA (FNA on linux) games, so it will run without box86 help. I think Else.Heart.Break() is a Unity games (I plan to have a look at unity games later, especially the libmono used, that is opensource, and probably can be wrapped for much better performances).

But thanks for the list, I'll try later the ones I have.
 
  • Like
Reactions: ___
thanks! I am excited to see what is possible and how the project will get on. So much potential.
 
@Farox : I have added some preliminary Signal handling, and now Hollywood Player does run (but a bit too slow on my Gigahertz).

Thanks i build one of latest revision (but not the latest with some fixes from MH-T) and give a go on Hollywood Player...it run but is too slow.

Next i want to test some games from Locomalito (so YoYo games) i downloaded Gaurodan and surprising after adding x86 libssl and lib crypto to libs/i386 i have:
-------------------------------------------------------------
Setting PATH to /media/TEMPUS/eggnoggplus-linux:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games
--------------------------------------------------------------
Setting LD_LIBRARY_PATH to /media/TEMPUS/eggnoggplus-linux/lib:/lib:/usr/lib
Debug level is 1
BOX86_LD_LIBRARY_PATH: /media/TEMPUS/eggnoggplus-linux/lib/i386-linux-gnu/:/media/TEMPUS/eggnoggplus-linux/lib32/
Using default BOX86_PATH: ./:bin/
Counted 39 Env var
Looking for ./runner
Using emulated /media/TEMPUS/eggnoggplus-linux/lib/i386-linux-gnu/libstdc++.so.6
Using native(wrapped) libm.so.6
Using native(wrapped) libc.so.6
Using native(wrapped) ld-linux.so.2
Using native(wrapped) libpthread.so.0
Using native(wrapped) librt.so.1
Using emulated /media/TEMPUS/eggnoggplus-linux/lib/i386-linux-gnu/libgcc_s.so.1
Using native(wrapped) libz.so.1
Using native(wrapped) libXxf86vm.so.1
LIBGL: Initialising gl4es
LIBGL: v1.1.1 built on Feb 24 2019 20:20:50
LIBGL: framebuffer output enabled
LIBGL: Using GLES 2.0 backend
LIBGL: loaded: libGLESv2.so
LIBGL: loaded: libEGL.so
LIBGL: Using GLES 2.0 backend
LIBGL: Hardware Limited NPOT detected and used
LIBGL: FBO are in core, and so used
LIBGL: PointSprite are in core, and so used
LIBGL: CubeMap are in core, and so used
LIBGL: BlendColor is in core, and so used
LIBGL: Blend Substract is in core, and so used
LIBGL: Blend Function and Equation Separation is in core, and so used
LIBGL: Texture Mirrored Repeat is in core, and so used
LIBGL: Extension GL_OES_mapbuffer detected
LIBGL: Extension GL_OES_element_index_uint detected and used
LIBGL: Extension GL_OES_depth24 detected and used
LIBGL: Extension GL_OES_rgb8_rgba8 detected and used
LIBGL: Extension GL_EXT_multi_draw_arrays detected
LIBGL: Extension GL_EXT_texture_format_BGRA8888 detected and used
LIBGL: Extension GL_OES_texture_float detected and used
LIBGL: Extension GL_OES_texture_half_float detected and used
LIBGL: Extension GL_OES_fragment_precision_high detected and used
LIBGL: Max vertex attrib: 8
LIBGL: Extension GL_OES_standard_derivatives detected and used
LIBGL: Max texture size: 2048
LIBGL: Max Varying Vector: 8
LIBGL: Texture Units: 4(8), Max lights: 8, Max planes: 6
LIBGL: Hardware vendor is Imagination Technologies
LIBGL: Targeting OpenGL 2.0
LIBGL: Enable FastMath for cortex-a8
LIBGL: Forcing NPOT support by disabling MIPMAP support for NPOT textures
LIBGL: glXMakeCurrent FBO workaround enabled
LIBGL: FBO workaround for using binded texture enabled
LIBGL: Current folder is:/media/TEMPUS/eggnoggplus-linux
Using native(wrapped) libGL.so.1
Using native(wrapped) libopenal.so.1
Using native(wrapped) libX11.so.6
Using emulated /media/TEMPUS/eggnoggplus-linux/lib/i386-linux-gnu/libssl.so.1.0.0
Using emulated /media/TEMPUS/eggnoggplus-linux/lib/i386-linux-gnu/libcrypto.so.1.0.0
Using native(wrapped) libdl.so.2

***************************************
* YoYo Games Linux Runner V0.1 *
***************************************
CommandLine: -game game.unx
ExeName= /media/TEMPUS/eggnoggplus-linux/runner
MemoryManager allocated: 5575
RunnerLoadGame: game.unx
RunnerLoadGame() - assets/game.unx
Checking if INIFile assets/options.ini Exists
assets/options.ini file contents: [Linux]
DisplayName="Gaurodan"

INI DisplayName=Gaurodan
Reading File assets/game.unx
Loaded File assets/game.unx
IFF wad found
Get Resolution
Get Header Information
InitGMLFunctions
HighScore..SavePrePend /home/farox/.config/Gaurodan/
Game..Math..Graphic..Action..File..Resource..Interaction..3D..Particle..Misc..DS..Sound..DPlay..Physics..Gamepad..GAMEPAD: Initialising Ubuntu support
GAMEPAD: 4 axis values (last) at 0xa8191fc0
GAMEPAD: 4 axis values (last) at 0xa81922f0
GAMEPAD: 4 axis values (last) at 0xa8194710
GAMEPAD: 4 axis values (last) at 0xa8194a40
Buffers..Networking..Shaders..YoYo..Fini
Code_Load()
VARI_Load()
ID_STRG
Create Window
Display Size(Pixels): 800,480
GameDisplayName=Gaurodan
XF86VidModeExtension-Version 2.2
Got Doublebuffered Visual!
glX-Version 1.4
Icon: w=64 h=64
X Error: BadMatch
Request Major code 72 ()
Error Serial #21
Current Serial #28

I tryed with many parameters of LIBGL (FB= 1 or 2 or 3 ### GL=2.1 or only ES=1 or 2 ### FBO=with small and big sizes) but i have always the same error BadMatch
 
I may have broken something with some late fixes on gl4es (but I'm surprised even LIBGL_FB=3 doesn't run). I'll check that.
 
I tried retro city rampage. The installer worked fine but the game itself complained about a missing libstdc++6, I guess I need to get the x86 version and put it in lib?
Then I tried bit.trip.runner and it complained about missing libGL.so.1, I tried putting the one compiled from gl4es but it didn't work. Do I need to put the x86 version? In that case, do I need an extra step to get it to use gl4es?
 
I tried retro city rampage. The installer worked fine but the game itself complained about a missing libstdc++6, I guess I need to get the x86 version and put it in lib?
Then I tried bit.trip.runner and it complained about missing libGL.so.1, I tried putting the one compiled from gl4es but it didn't work. Do I need to put the x86 version? In that case, do I need an extra step to get it to use gl4es?
You'll need an x86 version of libstc++ and libgcc_s indeed. Grab the Airline Tycoon PND to get a version of them.
For libGL.so, yes, it's gl4es (x86 version will be ignored anyway). Don't forget to use an LD_LIBRARY_PATH to point to it.
 
Ok, I had the libGL from gl4es, but didn't have a LD_LIBRARY_PATH pointing to it (it was just in the same directory as the executable) that might have been the issue.
 
Back
Top