I recently started playing with Tiny Core 7.1 after not having used it since the 5.x series (To build a graphical recovery partition system for a bunch of Windows 7 machines I took care of at a previous job), and am pretty impressed so far. I initially started building a dedicated emulator setup from the minimal Core setup and ended up making a fairly functional (For the bulk of what I do on a daily basis, at least) general desktop:
For emulation I compiled and built a TCZ for Mednafen 0.9.38.7 and AdvanceMenu (An emulator frontend) and also the compositor Compton.
AdvanceMenu is tied to a shell script I wrote for my Ubuntu install (Hence why there's entries for emulators no available for TC currently) that allows running ROMs directly from 7zip files and other things:
#Multi-Emulator Launcher Script
###############################
#2016 Sliver X
#DECOMPRESSION FUNCTIONS: 7zip, RAR and Zip
###########################################
#Get File Extension of file passed to script.
ExtensionTest=$(echo $1 | sed 's/.*\.//')
#Check if it's compressed. If so, decompress to a temp directory.
case $ExtensionTest in
#It's a 7zip!
7z)
mkdir ~/romtemp
7z x "$1" -o"$HOME/romtemp"
;;
#It's a RAR!
rar)
mkdir ~/romtemp
rar x "$1" "$HOME/romtemp"
;;
#It's a Zip!
zip)
mkdir ~/romtemp
unzip "$1" -d "$HOME/romtemp"
;;
#It's not compressed in a method we care about!
*)
NotCompressed=$(echo "1")
;;
#End CASE test.
esac
#DETERMINE ROM TYPE
###################
#Check if the called ROM was decompressed by our script or not.
case $NotCompressed in
#The ROM was not decompressed by us. Assign "$1" to $ROM and make $ROMPath blank (Not needed).
1)
ROMPath=$(echo "")
ROM=$(echo "$1")
;;
#We decompressed the ROM. Go to temp directory and set is as $ROM and $ROMPath as our temp directory.
*)
cd ~/romtemp
for ROM in *.*
do
ROMPath=$(echo ~/romtemp/)
done
;;
#End CASE statement.
esac
#RUN ROM
########
#Strip the ROM name to the extension, then load it into a variable.
ROMExt=$(echo $ROM | sed 's/.*\.//')
#We'll test the extension, and load the ROM with the appropriate emulator if it's recognized.
case $ROMExt in
a26)
stella "$ROMPath$ROM"
;;
nds)
desmume "$ROMPath$ROM"
;;
cue)
mednafen "$ROMPath$ROM"
;;
pbp)
wine /home/sliverx/epsxewin/epsxe.exe -nogui -loadbin "$ROMPath$ROM"
;;
fds)
mednafen "$ROMPath$ROM"
;;
gb)
mednafen "$ROMPath$ROM"
;;
gba)
mednafen "$ROMPath$ROM"
;;
gbc)
mednafen "$ROMPath$ROM"
;;
gg)
mednafen "$ROMPath$ROM"
;;
lnx)
mednafen "$ROMPath$ROM"
;;
nes)
mednafen "$ROMPath$ROM"
;;
ngc)
mednafen "$ROMPath$ROM"
;;
cso)
PPSSPPSDL "$ROMPath$ROM"
;;
ngp)
mednafen "$ROMPath$ROM"
;;
pce)
mednafen "$ROMPath$ROM"
;;
sgb)
mednafen "$ROMPath$ROM"
;;
sms)
mednafen "$ROMPath$ROM"
;;
unf)
mednafen "$ROMPath$ROM"
;;
ws)
mednafen "$ROMPath$ROM"
;;
wsc)
mednafen "$ROMPath$ROM"
;;
32x)
fusion "$ROMPath$ROM"
;;
iso)
fusion "$ROMPath$ROM"
;;
bin)
mednafen "$ROMPath$ROM"
;;
a52)
mess a5200 -cart "$ROMPath$ROM"
;;
a78)
mess a7800 -cart "$ROMPath$ROM"
;;
col)
mess coleco -cart "$ROMPath$ROM"
;;
vec)
mess vectrex -cart "$ROMPath$ROM"
;;
z64)
mupen64plus "$ROMPath$ROM"
;;
v64)
mupen64plus "$ROMPath$ROM"
;;
smc)
mednafen "$ROMPath$ROM"
;;
fig)
mednafen "$ROMPath$ROM"
;;
sfc)
mednafen "$ROMPath$ROM"
;;
#End CASE statement.
esac
#Cleanup
########
#Check if we decompressed a ROM in the beginning
case $NotCompressed in
#We didn't decompress a ROM, so nothing to clean up! Quit.
1)
exit
;;
#We did. Delete temp directory and quit.
*)
rm -rf ~/romtemp
exit
;;
#End Case statement.
esac
As far as the OS iteslf goes, the list of packages I installed is as follows:
ntfs-3g.tcz
nvidia-352.63-4.2.9-tinycore.tcz
Xorg-7.7.tcz
alsa-modules-4.2.9-tinycore.tcz
alsa.tcz
alsa-config.tcz
jwm.tcz
aterm.tcz
dosbox.tcz
mednafen.tcz
p7zip-full.tcz
compton.tcz
advancemenu.tcz
pcmanfm.tcz
xarchiver.tcz
mtpaint.tcz
iptables.tcz
firefox-ESR.tcz
nano.tcz
volumeicon.tcz
xchat.tcz
gftp.tcz
The re-rolled initrd, TCZs and mydata.tar.gz totals about 269MB.
I started running into memory allocation errors with mount when trying to add the last bits of this: It seemed to have something to do with the 196(!) TCZ mounts in place. I directly integrated all the library TCZs into my initrd and was able to knock this down to 100 and no longer experience it.
ALSA initially gave me trouble as it would start my onboard audio muted. I unmuted it and turned the volume up via alsamixer then ran
sudo alsactl --file /usr/local/etc/asound.state store, added that file to the Include list in the backup tool then added
alsactl --file /usr/local/etc/asound.state restore to /opt/bootlocal.sh
OpenGL is the only thing that gave and is still giving me a headache: No matter what version I tried of the nVidia driver in the repositories I couldn't get GLX extensions to load, preventing Mednafen from working. I finally tracked down the issue to some symlinks under /usr/local/lib pointing to .so files from libGL instead of their nVidia equivalents. Adding the following to bootlocal.sh fixed it:
rm -f /usr/local/lib/libGL.so
rm -f /usr/local/lib/libGL.so.1
rm -f /usr/local/lib/libGL.so.1.2.0
ln -sf /tmp/tcloop/nvidia-352.63-4.2.9-tinycore/usr/lib/libGL.so /usr/local/lib/libGL.so
ln -sf /tmp/tcloop/nvidia-352.63-4.2.9-tinycore/usr/lib/libGL.so.1 /usr/local/lib/libGL.so.1
ln -sf /tmp/tcloop/nvidia-352.63-4.2.9-tinycore/usr/lib/libGL.so.1.2.0 /usr/local/lib/libGL.so.1.2.0
However, I can't get smooth scrolling working despite every xorg.conf tweak I can find. Compton also doesn't really seem to help either. It's almost like vsync isn't working at all.
Anyway, anyone else recently worked on a project that they would like to show? I'd be most interested in seeing what others are doing with Tiny Core.