diff --git a/.gitignore b/.gitignore
index 69c0375e..dc40f3d6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,3 +24,4 @@ Amiberry/VisualGDB/Debug/Amiberry
Amiberry/VisualGDB/Release/Amiberry
*.sqlite
Amiberry/VisualGDB/Release-rpi2/Amiberry
+*.ipch
diff --git a/Amiberry/Amiberry-gles/Amiberry-gles-Debug.vgdbsettings b/Amiberry/Amiberry-gles/Amiberry-gles-Debug.vgdbsettings
new file mode 100644
index 00000000..40763779
--- /dev/null
+++ b/Amiberry/Amiberry-gles/Amiberry-gles-Debug.vgdbsettings
@@ -0,0 +1,120 @@
+
+
+ Debug
+
+
+
+ MinGWUnixSlash
+
+
+ 192.168.1.152
+ SSH
+ pi
+
+ false
+ false
+ false
+ false
+ true
+ $(ProjectDir)
+
+
+
+ Raspberry PI
+ com.visualgdb.raspberry_pi
+ C:\SysGCC\raspberry
+ false
+ C:\SysGCC\raspberry\bin\arm-linux-gnueabihf-gcc.exe
+ C:\SysGCC\raspberry\bin\arm-linux-gnueabihf-g++.exe
+ C:\SysGCC\raspberry\bin\arm-linux-gnueabihf-gdb.exe
+ C:\SysGCC\raspberry\bin\arm-linux-gnueabihf-ar.exe
+ C:\SysGCC\raspberry\bin\arm-linux-gnueabihf-objcopy.exe
+ C:\SysGCC\raspberry\bin\make.exe
+
+ C:\SysGCC\raspberry\bin
+
+ true
+ false
+
+
+ MinGWUnixSlash
+
+
+ Amiberry-gles.vcxproj
+
+
+
+ 1
+
+
+
+
+
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+ false
+ false
+ false
+ false
+ false
+ false
+ true
+ false
+ None
+ false
+ false
+ main
+ true
+ false
+ false
+ false
+
+
+ $(TargetPath)
+ 2000
+
+
+ false
+ /home/pi/projects/amiberry/$(TargetFileName)
+ Local
+ false
+ false
+ Auto
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+ Default
+
+
+
+ true
+
+
+
+
+ Unknown
+
+ true
+
+
+ VisualGDB\VisualGDBCache
+
\ No newline at end of file
diff --git a/Amiberry/Amiberry-gles/Amiberry-gles-Release.vgdbsettings b/Amiberry/Amiberry-gles/Amiberry-gles-Release.vgdbsettings
new file mode 100644
index 00000000..9375789f
--- /dev/null
+++ b/Amiberry/Amiberry-gles/Amiberry-gles-Release.vgdbsettings
@@ -0,0 +1,131 @@
+
+
+ Release
+
+
+
+ MinGWUnixSlash
+
+
+ 192.168.1.152
+ SSH
+ pi
+
+ false
+ false
+ false
+ false
+ true
+ $(ProjectDir)
+
+
+
+ Raspberry PI
+ com.visualgdb.raspberry_pi
+ C:\SysGCC\raspberry
+ false
+ C:\SysGCC\raspberry\bin\arm-linux-gnueabihf-gcc.exe
+ C:\SysGCC\raspberry\bin\arm-linux-gnueabihf-g++.exe
+ C:\SysGCC\raspberry\bin\arm-linux-gnueabihf-gdb.exe
+ C:\SysGCC\raspberry\bin\arm-linux-gnueabihf-ar.exe
+ C:\SysGCC\raspberry\bin\arm-linux-gnueabihf-objcopy.exe
+ C:\SysGCC\raspberry\bin\make.exe
+
+ C:\SysGCC\raspberry\bin
+
+ true
+ false
+
+
+ MinGWUnixSlash
+
+
+ Amiberry-gles.vcxproj
+
+
+
+ 1
+
+
+
+
+
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+ false
+ false
+ false
+ false
+ false
+ false
+ true
+ false
+ None
+ false
+ false
+ main
+ true
+ false
+ false
+ false
+
+
+
+
+
+ LANG
+ en_US.UTF-8
+
+
+ PATH
+ C:\SysGCC\raspberry\bin;%PATH%
+
+
+
+ $(TargetPath)
+ 2000
+
+
+ false
+ /home/pi/projects/amiberry/$(TargetFileName)
+ Local
+ false
+ false
+ Auto
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+ Default
+
+
+
+ true
+
+
+
+
+ Unknown
+
+ true
+
+
+ VisualGDB\VisualGDBCache
+
\ No newline at end of file
diff --git a/Amiberry/Amiberry-gles/Amiberry-gles.vcxproj b/Amiberry/Amiberry-gles/Amiberry-gles.vcxproj
new file mode 100644
index 00000000..716889e7
--- /dev/null
+++ b/Amiberry/Amiberry-gles/Amiberry-gles.vcxproj
@@ -0,0 +1,338 @@
+
+
+
+
+ Debug
+ VisualGDB
+
+
+ Release
+ VisualGDB
+
+
+
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}
+
+
+
+
+
+
+
+
+
+ Debug
+ C:\SysGCC\raspberry
+
+
+ C:\SysGCC\raspberry
+
+
+
+ GNUPP14
+ ../../src;../../src/include;../../src/od-pandora;../../src/td-sdl;=/opt/vc/include;=/opt/vc/include/interface/vmcs_host/linux;=/opt/vc/include/interface/vcos/pthreads;=/usr/include/SDL;=/usr/include/libxml2;%(ClCompile.AdditionalIncludeDirectories)
+ DEBUG=1;_REENTRANT;RASPBERRY;CAPSLOCK_DEBIAN_WORKAROUND;ARMV6T2;PICASSO96;USE_ARMNEON;CPU_arm;ARMV6_ASSEMBLY;PANDORA;WITH_INGAME_WARNING;USE_SDL;ROM_PATH_PREFIX=\"./\";DATA_PREFIX=\"./data/\";SAVE_PREFIX=\"./saves/\";GCCCONSTFUNC="__attribute__((const))";HAVE_GLES;SHADER_SUPPORT;%(ClCompile.PreprocessorDefinitions)
+ -march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard %(AdditionalOptions)
+
+
+ ;%(Link.AdditionalLinkerInputs)
+ =/opt/vc/lib;%(Link.LibrarySearchDirectories)
+ bcm_host;SDL;pthread;m;z;SDL_image;png;rt;xml2;FLAC;mpg123;dl;SDL_ttf;guichan_sdl;guichan;EGL;GLESv2;%(Link.AdditionalLibraryNames)
+
+
+
+
+
+ GNUPP14
+ ../../src;../../src/include;../../src/od-pandora;../../src/td-sdl;=/opt/vc/include;=/opt/vc/include/interface/vmcs_host/linux;=/opt/vc/include/interface/vcos/pthreads;=/usr/include/SDL;=/usr/include/libxml2;%(ClCompile.AdditionalIncludeDirectories)
+ NDEBUG=1;RELEASE=1;_REENTRANT;RASPBERRY;CAPSLOCK_DEBIAN_WORKAROUND;ARMV6T2;PICASSO96;USE_ARMNEON;CPU_arm;ARMV6_ASSEMBLY;PANDORA;WITH_INGAME_WARNING;USE_SDL;ROM_PATH_PREFIX=\"./\";DATA_PREFIX=\"./data/\";SAVE_PREFIX=\"./saves/\";GCCCONSTFUNC="__attribute__((const))";HAVE_GLES;SHADER_SUPPORT;%(ClCompile.PreprocessorDefinitions)
+ -march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard %(AdditionalOptions)
+ true
+ true
+
+
+ ;%(Link.AdditionalLinkerInputs)
+ =/opt/vc/lib;%(Link.LibrarySearchDirectories)
+ bcm_host;SDL;pthread;m;z;SDL_image;png;rt;xml2;FLAC;mpg123;dl;SDL_ttf;guichan_sdl;guichan;EGL;GLESv2;%(Link.AdditionalLibraryNames)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Amiberry/Amiberry-gles/Amiberry-gles.vcxproj.filters b/Amiberry/Amiberry-gles/Amiberry-gles.vcxproj.filters
new file mode 100644
index 00000000..c767fd0c
--- /dev/null
+++ b/Amiberry/Amiberry-gles/Amiberry-gles.vcxproj.filters
@@ -0,0 +1,930 @@
+
+
+
+
+ {f7b1878b-1e90-4e7f-af6e-5bfbe0472379}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {500bf09f-2912-4a9b-99aa-45ca70a08d82}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+ {f092da83-7fa0-4b6f-839e-b2fa5474affd}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav
+
+
+ {d4a7a442-40aa-47ca-962c-43f387907b11}
+ *.vgdbsettings
+
+
+ {17a34860-a02d-420b-b3ab-0f1db47cacb3}
+
+
+ {49446657-502d-4761-a17c-a7a3b8ba5151}
+
+
+ {b3b89d16-6020-44a0-9a26-c95b9bf085ca}
+
+
+ {8ad93770-58f5-41c3-bcb2-5ce63a5d0f10}
+
+
+ {936406c8-6881-47ea-af4b-dcfaab0c44c0}
+
+
+ {ac9827c0-2c36-4238-b3e3-4ef8e03a37d8}
+
+
+ {79b9a1ab-9dbf-4862-8fad-b1f794787428}
+
+
+ {c37d5944-1218-485d-b017-466f3b499ca2}
+
+
+ {9919a66e-283d-48c6-93f4-1d679849175c}
+
+
+ {7087c72a-65f3-47b2-9503-fb3dd54cee68}
+
+
+ {279ae879-655b-423b-8f77-2072a8bea3c1}
+
+
+ {53cbba1d-5bbc-4bcb-bea9-9fb79173ff23}
+
+
+ {ad1b8055-4cae-4662-93b2-94458518ff2d}
+
+
+ {ce4546be-2038-4107-a17f-d00050875d38}
+
+
+ {73862ad1-34b9-4143-9d71-cce93b99f154}
+
+
+ {7baf6f27-c7c2-4665-8490-b47a7e964a26}
+
+
+ {56b4de99-e470-4fcd-81c9-91d796c97b0e}
+
+
+ {da74b537-689c-48d8-b29c-888d9e726dfe}
+
+
+ {42b853e5-f34f-4d40-8b88-e60974fb012c}
+
+
+ {aa0398c7-efb1-475e-bba9-fe99057d4c89}
+
+
+ {d2a13290-1ea8-4356-9193-811d8c57dc27}
+
+
+ {471328d7-3386-4188-b818-b34529bd114f}
+
+
+ {4a2180c8-6990-49c5-b535-b075c7e0b005}
+
+
+ {ced2ce79-31b5-48b9-9842-d089717def57}
+
+
+ {6e336d18-7787-4211-9892-5432f6bc948f}
+
+
+ {7fbca5f1-5418-490c-914d-251adbcd6ea5}
+
+
+ {536fe3ed-8fd5-4e24-ae56-ba88d618fa62}
+
+
+ {1e3a52a0-7328-4533-b95f-37e3093d9193}
+
+
+ {e61172a9-1dcc-4fed-ba95-7803b8d8096c}
+
+
+ {1c9d7046-1d3f-43b0-8c65-b7761c437735}
+
+
+ {f90f25c8-8245-46c8-8523-dfee38f0ca0a}
+
+
+ {c980c564-8d4f-4bc1-8736-a4b08745765c}
+
+
+
+
+ VisualGDB settings
+
+
+ VisualGDB settings
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files
+
+
+ Source files\sd-sdl
+
+
+ Source files\od-gles
+
+
+ Source files\od-gles
+
+
+ Source files\od-gles
+
+
+ Source files\od-gles
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\gui
+
+
+ Source files\od-pandora\menu
+
+
+ Source files\md-pandora
+
+
+ Source files\jit
+
+
+ Source files\jit
+
+
+ Source files\jit
+
+
+ Source files\jit
+
+
+ Source files\archivers\zip
+
+
+ Source files\archivers\wrp
+
+
+ Source files\archivers\lzx
+
+
+ Source files\archivers\lha
+
+
+ Source files\archivers\lha
+
+
+ Source files\archivers\lha
+
+
+ Source files\archivers\lha
+
+
+ Source files\archivers\lha
+
+
+ Source files\archivers\lha
+
+
+ Source files\archivers\lha
+
+
+ Source files\archivers\lha
+
+
+ Source files\archivers\lha
+
+
+ Source files\archivers\lha
+
+
+ Source files\archivers\lha
+
+
+ Source files\archivers\dms
+
+
+ Source files\archivers\dms
+
+
+ Source files\archivers\dms
+
+
+ Source files\archivers\dms
+
+
+ Source files\archivers\dms
+
+
+ Source files\archivers\dms
+
+
+ Source files\archivers\dms
+
+
+ Source files\archivers\dms
+
+
+ Source files\archivers\dms
+
+
+ Source files\archivers\dms
+
+
+ Source files\archivers\dms
+
+
+ Source files\archivers\7z
+
+
+ Source files\archivers\7z
+
+
+ Source files\archivers\7z
+
+
+ Source files\archivers\7z
+
+
+ Source files\archivers\7z
+
+
+ Source files\archivers\7z
+
+
+ Source files\archivers\7z
+
+
+ Source files\archivers\7z\Archive\7z
+
+
+ Source files\archivers\7z\Archive\7z
+
+
+ Source files\archivers\7z\Archive\7z
+
+
+ Source files\archivers\7z\Archive\7z
+
+
+ Source files\archivers\7z\Archive\7z
+
+
+ Source files\archivers\7z\Archive\7z
+
+
+
+
+ Header files\od-gles
+
+
+ Header files\od-gles
+
+
+ Header files\od-gles
+
+
+ Header files\td-sdl
+
+
+ Header files\sd-pandora
+
+
+ Header files\od-pandora
+
+
+ Header files\od-pandora
+
+
+ Header files\od-pandora
+
+
+ Header files\od-pandora
+
+
+ Header files\od-pandora
+
+
+ Header files\od-pandora
+
+
+ Header files\od-pandora\gui
+
+
+ Header files\od-pandora\gui
+
+
+ Header files\od-pandora\gui
+
+
+ Header files\od-pandora\gui
+
+
+ Header files\od-pandora\gui
+
+
+ Header files\od-pandora\gui
+
+
+ Header files\od-pandora\gui
+
+
+ Header files\md-pandora
+
+
+ Header files\md-pandora
+
+
+ Header files\md-pandora
+
+
+ Header files\md-pandora
+
+
+ Header files\jit
+
+
+ Header files\jit
+
+
+ Header files\jit
+
+
+ Header files\jit
+
+
+ Header files\jit
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\include
+
+
+ Header files\archivers\7z
+
+
+ Header files\archivers\7z
+
+
+ Header files\archivers\7z
+
+
+ Header files\archivers\7z
+
+
+ Header files\archivers\7z
+
+
+ Header files\archivers\7z
+
+
+ Header files\archivers\7z
+
+
+ Header files\archivers\7z
+
+
+ Header files\archivers\7z\Archive\7z
+
+
+ Header files\archivers\7z\Archive\7z
+
+
+ Header files\archivers\7z\Archive\7z
+
+
+ Header files\archivers\7z\Archive\7z
+
+
+ Header files\archivers\7z\Archive\7z
+
+
+ Header files\archivers\7z\Archive\7z
+
+
+ Header files\archivers\dms
+
+
+ Header files\archivers\dms
+
+
+ Header files\archivers\dms
+
+
+ Header files\archivers\dms
+
+
+ Header files\archivers\dms
+
+
+ Header files\archivers\dms
+
+
+ Header files\archivers\dms
+
+
+ Header files\archivers\dms
+
+
+ Header files\archivers\dms
+
+
+ Header files\archivers\dms
+
+
+ Header files\archivers\dms
+
+
+ Header files\archivers\dms
+
+
+ Header files\archivers\lha
+
+
+ Header files\archivers\lha
+
+
+ Header files\archivers\wrp
+
+
+ Header files\archivers\zip
+
+
+
\ No newline at end of file
diff --git a/Amiberry/Amiberry.sln b/Amiberry/Amiberry.sln
index dc1d0757..2d8e4f51 100644
--- a/Amiberry/Amiberry.sln
+++ b/Amiberry/Amiberry.sln
@@ -4,22 +4,66 @@ VisualStudioVersion = 15.0.25920.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Amiberry", "Amiberry\Amiberry.vcxproj", "{D76BB09D-FF2A-4028-A065-421C430CD238}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Amiberry-gles", "Amiberry-gles\Amiberry-gles.vcxproj", "{AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|VisualGDB = Debug|VisualGDB
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
Release|VisualGDB = Release|VisualGDB
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
Release-rpi1|VisualGDB = Release-rpi1|VisualGDB
+ Release-rpi1|x64 = Release-rpi1|x64
+ Release-rpi1|x86 = Release-rpi1|x86
Release-rpi2|VisualGDB = Release-rpi2|VisualGDB
+ Release-rpi2|x64 = Release-rpi2|x64
+ Release-rpi2|x86 = Release-rpi2|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D76BB09D-FF2A-4028-A065-421C430CD238}.Debug|VisualGDB.ActiveCfg = Debug|VisualGDB
{D76BB09D-FF2A-4028-A065-421C430CD238}.Debug|VisualGDB.Build.0 = Debug|VisualGDB
+ {D76BB09D-FF2A-4028-A065-421C430CD238}.Debug|x64.ActiveCfg = Debug|VisualGDB
+ {D76BB09D-FF2A-4028-A065-421C430CD238}.Debug|x86.ActiveCfg = Debug|VisualGDB
{D76BB09D-FF2A-4028-A065-421C430CD238}.Release|VisualGDB.ActiveCfg = Release|VisualGDB
{D76BB09D-FF2A-4028-A065-421C430CD238}.Release|VisualGDB.Build.0 = Release|VisualGDB
+ {D76BB09D-FF2A-4028-A065-421C430CD238}.Release|x64.ActiveCfg = Release|VisualGDB
+ {D76BB09D-FF2A-4028-A065-421C430CD238}.Release|x86.ActiveCfg = Release|VisualGDB
{D76BB09D-FF2A-4028-A065-421C430CD238}.Release-rpi1|VisualGDB.ActiveCfg = Release-rpi1|VisualGDB
{D76BB09D-FF2A-4028-A065-421C430CD238}.Release-rpi1|VisualGDB.Build.0 = Release-rpi1|VisualGDB
+ {D76BB09D-FF2A-4028-A065-421C430CD238}.Release-rpi1|x64.ActiveCfg = Release-rpi1|VisualGDB
+ {D76BB09D-FF2A-4028-A065-421C430CD238}.Release-rpi1|x86.ActiveCfg = Release-rpi1|VisualGDB
{D76BB09D-FF2A-4028-A065-421C430CD238}.Release-rpi2|VisualGDB.ActiveCfg = Release-rpi2|VisualGDB
{D76BB09D-FF2A-4028-A065-421C430CD238}.Release-rpi2|VisualGDB.Build.0 = Release-rpi2|VisualGDB
+ {D76BB09D-FF2A-4028-A065-421C430CD238}.Release-rpi2|x64.ActiveCfg = Release-rpi2|VisualGDB
+ {D76BB09D-FF2A-4028-A065-421C430CD238}.Release-rpi2|x86.ActiveCfg = Release-rpi2|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Debug|VisualGDB.ActiveCfg = Debug|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Debug|VisualGDB.Build.0 = Debug|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Debug|x64.ActiveCfg = Debug|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Debug|x86.ActiveCfg = Debug|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release|VisualGDB.ActiveCfg = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release|VisualGDB.Build.0 = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release|x64.ActiveCfg = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release|x86.ActiveCfg = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi1|VisualGDB.ActiveCfg = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi1|VisualGDB.Build.0 = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi1|VisualGDB.Deploy.0 = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi1|x64.ActiveCfg = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi1|x64.Build.0 = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi1|x64.Deploy.0 = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi1|x86.ActiveCfg = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi1|x86.Build.0 = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi1|x86.Deploy.0 = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi2|VisualGDB.ActiveCfg = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi2|VisualGDB.Build.0 = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi2|VisualGDB.Deploy.0 = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi2|x64.ActiveCfg = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi2|x64.Build.0 = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi2|x64.Deploy.0 = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi2|x86.ActiveCfg = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi2|x86.Build.0 = Release|VisualGDB
+ {AB3DAC01-999D-43CD-A9CD-4B2A16B6063E}.Release-rpi2|x86.Deploy.0 = Release|VisualGDB
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Amiberry/Amiberry/Amiberry-Debug.vgdbsettings b/Amiberry/Amiberry/Amiberry-Debug.vgdbsettings
index c2c80147..c137fa0e 100644
--- a/Amiberry/Amiberry/Amiberry-Debug.vgdbsettings
+++ b/Amiberry/Amiberry/Amiberry-Debug.vgdbsettings
@@ -35,6 +35,7 @@
true
true
+
false
false
diff --git a/Makefile b/Makefile
index a5b38f71..e4956a1e 100644
--- a/Makefile
+++ b/Makefile
@@ -13,6 +13,8 @@ else ifeq ($(PLATFORM),rpi1)
else ifeq ($(PLATFORM),gles)
CPU_FLAGS += -march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard
MORE_CFLAGS += -DARMV6T2 -DUSE_ARMNEON -DHAVE_GLES
+ # uncomment below to enable Shader support - might be slow on some systems
+ #MORE_CFLAGS += -DSHADER_SUPPORT
LDFLAGS += -lEGL -lGLESv1_CM
endif
diff --git a/src/od-gles/gl.cpp b/src/od-gles/gl.cpp
index 781c8199..2576c745 100644
--- a/src/od-gles/gl.cpp
+++ b/src/od-gles/gl.cpp
@@ -4,7 +4,7 @@
#include
#include
-#include
+#include
#include "gl_platform.h"
#include "gl.h"
@@ -84,8 +84,12 @@ int gl_init(void *display, void *window, int *quirks)
static const EGLint context_attributes[] =
{
- EGL_CONTEXT_CLIENT_VERSION, 2,
- EGL_NONE
+#ifdef SHADER_SUPPORT
+ EGL_CONTEXT_CLIENT_VERSION, 2,
+#else
+ EGL_CONTEXT_CLIENT_VERSION, 1,
+#endif
+ EGL_NONE
};
@@ -131,7 +135,6 @@ int gl_init(void *display, void *window, int *quirks)
goto out;
}
-// ectxt = eglCreateContext(edpy, ecfg, EGL_NO_CONTEXT, NULL);
ectxt = eglCreateContext(edpy, ecfg, EGL_NO_CONTEXT, context_attributes);
if (ectxt == EGL_NO_CONTEXT) {
printf("Unable to create EGL context (%x)\n",
@@ -140,8 +143,9 @@ int gl_init(void *display, void *window, int *quirks)
}
eglMakeCurrent(edpy, esfc, esfc, ectxt);
-
- //glEnable(GL_TEXTURE_2D); // for old fixed-function pipeline
+#ifndef SHADER_SUPPORT
+ glEnable(GL_TEXTURE_2D); // for old fixed-function pipeline
+#endif
//if (gl_have_error("glEnable(GL_TEXTURE_2D)")) goto out;
glGenTextures(1, &texture_name);
@@ -176,10 +180,11 @@ int gl_init(void *display, void *window, int *quirks)
retval = 0;
int shader_stuff_result;
+#ifdef SHADER_SUPPORT
shader_stuff_result = shader_stuff_init();
shader_stuff_result = shader_stuff_reload_shaders();
shader_stuff_result = shader_stuff_set_data(vertex_coords, texture_coords, texture_name);
-
+#endif
out:
free(tmp_texture_mem);
return retval;
@@ -191,6 +196,7 @@ int gl_flip(const void *fb, int w, int h)
{
static int old_w, old_h;
+#ifdef SHADER_SUPPORT
if (framecount % 60 == 0)
{
// printf("gl_flip() w: %d, h: %d\n", w, h);
@@ -204,6 +210,7 @@ int gl_flip(const void *fb, int w, int h)
}
}
+#endif
framecount++;
float floattime = (framecount * 0.04f);
@@ -245,14 +252,16 @@ int gl_flip(const void *fb, int w, int h)
return -1;
} // if (fb != NULL)
- // glVertexPointer(3, GL_FLOAT, 0, vertex_coords);
- // if (gl_have_error("glVertexPointer")) return -1;
-
- // glTexCoordPointer(2, GL_FLOAT, 0, texture_coords);
- // if (gl_have_error("glTexCoordPointer")) return -1;
-
+#ifdef SHADER_SUPPORT
shader_stuff_frame(framecount, w, h, 800, 480); // TODO! hard-coded output size
if (gl_have_error("use program")) return -1;
+#else
+ glVertexPointer(3, GL_FLOAT, 0, vertex_coords);
+ if (gl_have_error("glVertexPointer")) return -1;
+
+ glTexCoordPointer(2, GL_FLOAT, 0, texture_coords);
+ if (gl_have_error("glTexCoordPointer")) return -1;
+#endif
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
// glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
diff --git a/src/od-gles/gl_platform.cpp b/src/od-gles/gl_platform.cpp
index ac24594a..391b67d5 100644
--- a/src/od-gles/gl_platform.cpp
+++ b/src/od-gles/gl_platform.cpp
@@ -1,7 +1,7 @@
#include
#include
#include
-#include
+#include
#include "gl.h"
#include "gl_platform.h"
diff --git a/src/od-gles/gles_gfx.cpp b/src/od-gles/gles_gfx.cpp
index 6ab735b7..404a6930 100644
--- a/src/od-gles/gles_gfx.cpp
+++ b/src/od-gles/gles_gfx.cpp
@@ -637,15 +637,15 @@ static void modesList (void)
i = 0;
while (DisplayModes[i].depth >= 0) {
- write_log ("%d: %s (", i, DisplayModes[i].name);
+ write_log("%d: %s (", i, DisplayModes[i].name);
j = 0;
while (DisplayModes[i].refresh[j] > 0) {
if (j > 0)
- write_log (",");
- write_log ("%d", DisplayModes[i].refresh[j]);
+ write_log(",");
+ write_log("%d", DisplayModes[i].refresh[j]);
j++;
}
- write_log (")\n");
+ write_log(")\n");
i++;
}
}
@@ -668,7 +668,7 @@ void picasso_InitResolutions (void)
Displays[0].name2 = my_strdup("Display");
md1 = Displays;
- DisplayModes = md1->DisplayModes = (struct PicassoResolution*) xmalloc (sizeof (struct PicassoResolution) * MAX_PICASSO_MODES);
+ DisplayModes = md1->DisplayModes = xmalloc(struct PicassoResolution, MAX_PICASSO_MODES);
for (i = 0; i < MAX_SCREEN_MODES && count < MAX_PICASSO_MODES; i++) {
for(bitdepth = 16; bitdepth <= 32; bitdepth += 16) {
int bit_unit = (bitdepth + 1) & 0xF8;
diff --git a/src/od-gles/shader_stuff.cpp b/src/od-gles/shader_stuff.cpp
index c6f691b2..3012ffd2 100644
--- a/src/od-gles/shader_stuff.cpp
+++ b/src/od-gles/shader_stuff.cpp
@@ -4,7 +4,7 @@
#include
-#include
+#include
#include "shader_stuff.h"
@@ -39,8 +39,9 @@ typedef struct STATE_T
EGLDisplay display;
EGLSurface surface;
EGLContext context;
-
+#ifdef VCOS_VERSION
EGL_DISPMANX_WINDOW_T nativewindow;
+#endif
UserData *user_data;
void (*draw_func) (struct STATE_T* );
} STATE_T;
diff --git a/src/sd-sdl/sound_sdl_new.cpp b/src/sd-sdl/sound_sdl_new.cpp
index 4dc423e0..a0fd38d3 100644
--- a/src/sd-sdl/sound_sdl_new.cpp
+++ b/src/sd-sdl/sound_sdl_new.cpp
@@ -150,7 +150,8 @@ static int pandora_start_sound(int rate, int bits, int stereo)
// init sem, start sound thread
#ifdef DEBUG
printf("starting sound thread..\n");
-#endif
init_soundbuffer_usage();
+#endif
+ init_soundbuffer_usage();
ret = sem_init(&sound_sem, 0, 0);
sem_init(&sound_out_sem, 0, 0);
if (ret != 0) printf("sem_init() failed: %i, errno=%i\n", ret, errno);
@@ -194,17 +195,28 @@ static int pandora_start_sound(int rate, int bits, int stereo)
// this is meant to be called only once on exit
void pandora_stop_sound(void)
{
+ int valuesem;
if (sound_thread_exit)
printf("don't call pandora_stop_sound more than once!\n");
+ SDL_PauseAudio (1);
if (sound_thread_active)
{
#ifdef DEBUG
printf("stopping sound thread..\n");
#endif
sound_thread_exit = 1;
- sem_post(&sound_sem);
+ sem_getvalue(&sound_sem,&valuesem);
+ while (valuesem == 0)
+ {
+ sem_post(&sound_sem);
+ usleep(200*1000);
+ sem_getvalue(&sound_sem,&valuesem);
+ }
}
- SDL_PauseAudio(1);
+ sound_thread_exit = 0;
+ SDL_CloseAudio();
+ sem_destroy(&sound_sem);
+ sem_destroy(&sound_out_sem);
}
void finish_sound_buffer(void)