Box86 and Wine on RPi4
-
And for inspiration ... The Settlers 3. All very playable on a Pi4, although overclocked to 2000Mhz and very good playable on a Pi400 (clocked to the max, 2375 CPU and 775GPU),
-
Wow @mth75 and @Folly, you guys have been busy! Awesome stuff! It's so cool to see how you've gotten so many things running in such a short time.
@mth75, I love your Commodore Pi/4. That is beautiful! Nice work! I'm a long time C64 user and have a C64 Reloaded MkII with a Pal VIC and Ultimate 1541-II+ hooked up to a FrameMeister for doing C64 stuff on. Lots of fun! For my Pi projects, I used old cases from a couple of broken Coleco handheld arcade games to create my own. But they run on a Pi3, so not really relevant to this conversation.
I've been spending a lot (too much) of time trying to get the music playing in Space Cadet 3D Pinball. Even though it works fine in Windows natively, it doesn't in WINE. This is because of the way Space Cadet initializes the MIDI file for the music. It initializes it as a TYPE vs. an ELEMENT. Windows seems to have some ways of dealing with this, but WINE does not. A couple of years ago someone filed a bug in WINE (https://bugs.winehq.org/show_bug.cgi?id=46513) along with a patch to "fix" it, but the patch was never applied to the code. This might be because the problem only appeared for Space Cadet. Keep in mind that Space Cadet 3D Pinball is actually from Windows 95 and API calls could have been different then (along with software development practices). Although it's commonly thought that the code is notoriously impossible to deal with, it's not really a fair statement. Any code that is a given age will deal with the same issues of nobody knowing what anything does.
Long story short, I fixed the music issue in Space Cadet and will be releasing the fix in my next push of the install script.
I didn't feel that it would be a good idea to push for the patch to be included in WINE, or even build my own version of WINE that would fix this issue. I've actually compiled WINE on my RPI4 using QEMU and it took a LONG time. Instead, I chose to fix Space Cadet itself by editing the binary so that it would open the MIDI file as ELEMENT instead of TYPE and use the proper Element Name pointer. There's a lot more technical detail in decompilation, how I found the pointer, and then how I made the change that would probably be better posted in an article than a forum post. Now my task is to figure out the best way to propogate this fix. I'd rather not be responsible for putting another copy of the software out into the wild, as it is copyrighted. I might be able to do a binary patch from the RetroPie install script. In the mean time, it doesn't sound like you're missing the music. Here's a link to a YouTube video with the music if you're curious:
Regarding audio issues: I haven't personally experienced crackling myself, but I'm not surprised. They are most likely caused by a buffer underrun, whereby the audio system is looking for more audio to output, but the buffer hasn't been filled by the software. This can happen a lot when the CPU is at high usage. This can be caused by lots of things, including Box86, Wine, and the software you're running. It can sometimes be alleviated by using a larger audio buffer, though that increases the latency, which may be offputting when playing games. It can also be alleviated by making sure there is no logging of any kind being done by Box86 and Wine. Unfortunately, I might have kept some logging variables in my setup scripts. Make sure you see
WINEDEBUG=-all
and maybe even addBOX86_LOG=0
in the command lines. I'm not sure there is a 100% fix for audio issues though. I've seen others run earlier versions of Wine for other reasons. Side note - there is a bug in Wine 5.22 that will crash if you add logging. That drove me crazy for quite a bit.Regarding making it easier to add software. I admit, I don't have a perfect answer. A script that creates ports could work. Alternatively, if Wine were registered as an emulator instead of a Port, then some other kind of scripts could be added in its "ROMS" directory, though you'd still need to create them. Finally, I thought perhaps one could link directly to the Start Menu items in the Wine Prefix directory. Then any software that gets installed using the standard Windows mechanisms would be automatically accessible from within EmulationStation. But this might not cover different Wine Prefix directories. This requires some investigation though and feedback from the RetroPie maintainers.
@mth75, I'm not sure why the scripts weren't detecting that things were installed (besides the problem that occured with the Box86 installation). It could be something to do with the versions of RetroPie, but you said you've maintained and updated it. Well, hopefully Mesa gets updated soon and that is one less dependency to worry about! Commandos 1, Age of Empires II, and Settlers 3 are looking good! Definitely an inspiration. Wow!
@Folly, thanks for the suggestion for Road Fighter. That might do the trick, though it crashes for me when going into Player Keys. Do you see the same issue? On the positive side, no installation program is necessary - you can just unzip the contents into Program Files.
Thanks again for all the feedback and challenges you've gone through.
- George
-
@george said in Box86 and Wine on RPi4:
Wow @mth75 and @Folly, you guys have been busy! Awesome stuff! It's so cool to see how you've gotten so many things running in such a short time.
Cool, isn't it. I see the amazing possibilities here !
This is quite impressive, what we all, including you, have done !I chose to fix Space Cadet itself by editing the binary so that it would open the MIDI file as ELEMENT instead of TYPE and use the proper Element Name pointer. There's a lot more technical detail in decompilation, how I found the pointer, and then how I made the change that would probably be better posted in an article than a forum post. Now my task is to figure out the best way to propogate this fix. I'd rather not be responsible for putting another copy of the software out into the wild, as it is copyrighted.
Do you know about IPS patches ?
You can create one without having to worry about copyrights.
You then just share the differences you made.I already have some in this repository :
https://github.com/FollyMaddy/RetroPie-ShareYou can patch or create from files up to about 7Mb.
I am using this :
https://github.com/kylon/Lipx
Just run this to see the help :
./lipx.pyRegarding making it easier to add software. I admit, I don't have a perfect answer. A script that creates ports could work. Alternatively, if Wine were registered as an emulator instead of a Port, then some other kind of scripts could be added in its "ROMS" directory, though you'd still need to create them. Finally, I thought perhaps one could link directly to the Start Menu items in the Wine Prefix directory. Then any software that gets installed using the standard Windows mechanisms would be automatically accessible from within EmulationStation. But this might not cover different Wine Prefix directories. This requires some investigation though and feedback from the RetroPie maintainers.
Perhaps we get a good idea along the way.
Indeed, your idea to link to the start menu, could be a nice solution.Have a look here, perhaps you get some inspiration from this too :
https://github.com/FollyMaddy/RetroPie-Share/tree/main/00-scripts-00
Like you said, creating scripts is one of the possibilities here.Or exporting *.exe as a string to a standard bash starter, could also be an idea.
@Folly, thanks for the suggestion for Road Fighter. That might do the trick, though it crashes for me when going into Player Keys. Do you see the same issue?
No crash here, I tested this menu for you.
Did you see the top of the webpage ?
There are more games you can choose from.
Perhaps one of them wil do.See here for updated nightlies (seems only source):
https://braingames.jorito.net/nightlies/Thanks again for all the feedback and challenges you've gone through.
- George
-
@georgeRe: Box86 and Wine on RPi4
Where to begin :-). @George Indeed, I didn't missed the music, I couldn't even remember the music, at least not in the Win95 version. I'm interested in the patch though! Why not publish the patch on GitHub?
Regarding install scripts, I don't think any script in order to install Windows applications is feasible (at all). I suspect everyone who want to use the Box86/Wine combo just has to create his own bottles on a another machine and has to do some manual labour.
Regarding the C= Plus/Pi4, here some techporn: https://retropie.org.uk/forum/topic/25090/commodore-plus-4-rpi4-build-ready?_=1610376894522
-
@folly said in Box86 and Wine on RPi4:
Perhaps we get a good idea along the way.
Indeed, your idea to link to the start menu, could be a nice solution.Wouldn't this imply 1 bottle for all games? I don't think that would work. I believe most games would need their own bottles (which also creates a 1GB overhead if i'm not mistaking).
-
@mth75 said in Box86 and Wine on RPi4:
@folly said in Box86 and Wine on RPi4:
Perhaps we get a good idea along the way.
Indeed, your idea to link to the start menu, could be a nice solution.Wouldn't this imply 1 bottle for all games? I don't think that would work. I believe most games would need their own bottles (which also creates a 1GB overhead if i'm not mistaking).
I don't think so.
But then again I don't have that much knowledge about wine.
So if you know, then, indeed, it seems not the right path to take. -
@Folly , thanks for the info on patches, seems to be close to what I'm looking for, if not exactly. Cross-platform is definitely a plus.
@mth75 The C= Plus/Pi4 is beautiful on the inside as well as the outside. Gorgeous job!
EmulationStation can handle sub-directories, so it is feasible to have multiple wine prefixes in a single ROM directory. Of course, a Windows Start menu also has its own sub-directories, so that would then require people to hunt through multiple directories in order to find the game they are looking for. Even though some people have thousands of ROMs to sift through, it's a little easier when they are in a single, alphabetized list!
- George
-
@george said in Box86 and Wine on RPi4:
EmulationStation can handle sub-directories, so it is feasible to have multiple wine prefixes in a single ROM directory. Of course, a Windows Start menu also has its own sub-directories, so that would then require people to hunt through multiple directories in order to find the game they are looking for. Even though some people have thousands of ROMs to sift through, it's a little easier when they are in a single, alphabetized list!
I made Wine prefixes and placed them in a Box86 Romfolder (so I adjusted the locations in your example script). I think this indeed is more in the "spirit" of retropie.
@Folly see screenshot
I
-
@mth75 said in Box86 and Wine on RPi4:
@george said in Box86 and Wine on RPi4:
EmulationStation can handle sub-directories, so it is feasible to have multiple wine prefixes in a single ROM directory. Of course, a Windows Start menu also has its own sub-directories, so that would then require people to hunt through multiple directories in order to find the game they are looking for. Even though some people have thousands of ROMs to sift through, it's a little easier when they are in a single, alphabetized list!
I made Wine prefixes and placed them in a Box86 Romfolder (so I adjusted the locations in your example script). I think this indeed is more in the "spirit" of retropie.
Nice !
Can you give an example of a prefix ?
Does this prefix run the game directly or does it run a bash file from somewhere else ?
What is your rom folder now ?
/home/pi/RetroPie/roms/Box86
or
/home/pi/RetroPie/roms/ports/Box86 -
@folly said in Box86 and Wine on RPi4:
What is your rom folder now ?
/home/pi/RetroPie/roms/Box86Indeed, /home/pi/RetroPie/roms/Box86/<Game folder> is my rom folder.
The <Game folder> is my wineprefix for example:
<Game folder>
-- dosdevices
-- drive_c
--- system.reg
--- user.regetc.
-
@folly said in Box86 and Wine on RPi4:
Does this prefix run the game directly or does it run a bash file from somewhere else ?
I use the scripts from George, with only the game locations adjusted to the /home/pi/RetroPie/roms/box86/ folder.
I'm planning to look into making it somewhat easier in the near future.
-
Hey all
I have Shovel Knight/unepic /Worldofgoo/Postal1/crimsonland runing on the box86 too.And can i have more Info plz ,
How to run
Commands or AOE2 ?
plz
Got lost here abit :) -
@shavecat said in Box86 and Wine on RPi4:
ey all
I have Shovel Knight/unepic /Worldofgoo/Postal1/crimsonland runing on the box86 too.
And can i have more Info plz ,
How to run
Commands or AOE2 ?
plz
Got lost here abit :)The way I did it. I'm running a separate Raspian OS (LXDE desktop) and installed both Box86 and Wine in order to make the wine_prefixes.
I compiled Box86: https://github.com/ptitSeb/box86/blob/master/COMPILE.md
or you could install Box86 with Pi Apps.
Then I installed Wine:
Download Wine
cd ~/Downloads
wget https://dl.winehq.org/wine-builds/debian/dists/buster/main/binary-i386/wine-devel-i386_5.22~buster_i386.deb
wget https://dl.winehq.org/wine-builds/debian/dists/buster/main/binary-i386/wine-devel_5.22~buster_i386.deb
dpkg-deb -xv wine-devel-i386_5.22~buster_i386.deb wine-installer
dpkg-deb -xv wine-devel_5.22~buster_i386.deb wine-installerInstall Wine
sudo mv wine-installer/opt/wine-devel ~/wine
sudo ln -sf ~/wine/bin/wine /usr/local/bin/wine
sudo ln -sf ~/wine/bin/winecfg /usr/local/bin/winecfg
sudo ln -sf ~/wine/bin/wineserver /usr/local/bin/wineserverBoot wine
wine wineboot
Download Winetricks
cd ~/Downloads
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricksInstall winetricks
sudo chmod +x winetricks
sudo cp winetricks /usr/local/binwinetricks needs this installed
sudo apt-get install cabextract -y
#Run Winetricks
BOX86_NOBANNER=1 winetricks dotnet20sp2Furthermore I installed Q4Wine with the Add/Remove package manager from Raspbian OS (to easily create wine_prefixes (Bottles)).
oryou could use winetricks with the following command:
BOX86_NOBANNER=1 winetricks --gui.
Then, I copied the wine prefixes to my RetroPie machine (see the rest of this topic for how to use the wine_prefixes).
-
@mth75
Thanks a LOT !!!
doing it now .
After the boot wine i got this -pi@retropie:~/Downloads $ wine wineboot Box86 with Dynarec v0.1.5 1e20a9ef built on Nov 14 2020 01:22:25 Box86 with Dynarec v0.1.5 1e20a9ef built on Nov 14 2020 01:22:25 Box86 with Dynarec v0.1.5 1e20a9ef built on Nov 14 2020 01:22:25 0024:err:environ:run_wineboot failed to start wineboot c000007b wine: could not load kernel32.dll, status c000007b
Thats OKAY ???
After that how can i run the games ?
like with exe file form sh file ???
now think im lost a bit ; -
@shavecat said in Box86 and Wine on RPi4:
OKAY ???
After that how can i run the games ?
like with exe file form sh file ???
now think im lost a bit ;No, that's not okay. Check your file permissions/ownership?
you can start simply (if your install is ok) with: wine <gamename>.exe
-
@mth75 Btw, that's an old Box86 version, my Dynarec version on the Pi400 Desktop is v0.1.9.
-
@mth75
How do i do that ? (Check your file permissions/ownership?) where and how ?
im using putty on retropie 4.6 and i have pi4 2gb.
So thats mean i can do an .sh file from ports in retrpoie with
wine<gamename>.exe
and it will work ??? :):):):)):):)<3<3<3<3(SOUNDS AMIAZING ! ) -
Sorry mate, can't advise your there except:
- make sure to install box86 and wine maybe on a clean system.
- try to install an easy game for test purposes, maybe Space Cadet 3D pinball
- and build further ... with all of the above ...
-
@mth75 said in Box86 and Wine on RPi4:
@folly said in Box86 and Wine on RPi4:
What is your rom folder now ?
/home/pi/RetroPie/roms/Box86Indeed, /home/pi/RetroPie/roms/Box86/<Game folder> is my rom folder.
The <Game folder> is my wineprefix for example:
<Game folder>
-- dosdevices
-- drive_c
--- system.reg
--- user.regetc.
OK, I understand how you do it, I think.
But now I wonder, does this also work if you run emulationstation from your "cli" instead of the "Desktop" ?
Because it needs to run xinit to display it all in te terminal/cli enviroment.
The ultimate goal is that it's working in standard "RetroPie". -
@folly said in Box86 and Wine on RPi4:
OK, I understand how you do it, I think.
But now I wonder, does this also work if you run emulationstation from your "cli" instead of the "Desktop" ?
Because it needs to run xinit to display it all in te terminal/cli enviroment.
The ultimate goal is that it's working in standard "RetroPie".I'm running EmulationStation as part of a "standard" RetroPie image (so no LXDE Desktop installed) on my Pi4 build. I just build the packages (wine_prefixes) on my Pi400 (Raspbian OS/LXDE with no RetroPie/ES installed).
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.