diff --git a/Config.in b/Config.in
index 1055fd8704dad781899e915d378d5ba6530b329b..af543d583be92f3c12f81fe1412cf6c5ff3abf60 100644
--- a/Config.in
+++ b/Config.in
@@ -161,6 +161,7 @@ menu "Emulators"
source "$BR2_EXTERNAL_RECALBOX_PATH/package/xemu/Config.in"
source "$BR2_EXTERNAL_RECALBOX_PATH/package/xroar/Config.in"
source "$BR2_EXTERNAL_RECALBOX_PATH/package/vvvvvv/Config.in"
+ source "$BR2_EXTERNAL_RECALBOX_PATH/package/mednafen/Config.in"
if BR2_PACKAGE_RETROARCH
menu "Libretro Cores"
diff --git a/board/recalbox/fsoverlay/etc/init.d/S12populateshare b/board/recalbox/fsoverlay/etc/init.d/S12populateshare
index 3a1b51b371feb07349ee58f2a9dd43b3e55b4dc5..4d7ce02fe0fdb9edeb8b1b2dff3e458afcf182e5 100755
--- a/board/recalbox/fsoverlay/etc/init.d/S12populateshare
+++ b/board/recalbox/fsoverlay/etc/init.d/S12populateshare
@@ -85,7 +85,7 @@ for FILE in music bios extractions kodi saves saves/amiga screenshots userscript
system/configs/{advancemame,daphne,dolphin-emu,dosbox,fba,kodi,moonlight,mupen64,openbor,ppsspp,reicast,retroarch,sdlpop,shadersets,xarcade2jstick,scummvm} \
system/configs/mupen64/{GLideN64.custom.ini,GLideN64.ini,Glide64mk2.ini,InputAutoCfg.ini,RiceVideoLinux.ini,font.ttf,gles2n64.conf,gles2n64rom.conf} \
system/recalbox.conf \
- bios/{amiga,Databases,dc,fba,fbneo,keropi,Machines,mame,mame2000,mame2003,mame2003-plus,mame2010,mame2015,mame2016,np2kai,oricutron,prboom,quasi88,xmil,scummvm}
+ bios/{amiga,Databases,dc,fba,fbneo,keropi,Machines,mame,mame2000,mame2003,mame2003-plus,mame2010,mame2015,mame2016,np2kai,oricutron,prboom,quasi88,xmil,scummvm,stv}
do
# not wanted for kodi
test -e "$IN""/""$FILE" && test ! -e "$OUT""/""$FILE" && cp -r "$IN""/""$FILE" "$OUT""/""$FILE"
diff --git a/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/es_bios.xml b/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/es_bios.xml
index d7f6ee9151c72843fcffd2ae2f8fc036779cfd09..11d26effa3a8907bd73a79bb9d55e3dbe2213cf6 100644
--- a/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/es_bios.xml
+++ b/board/recalbox/fsoverlay/recalbox/share_init/system/.emulationstation/es_bios.xml
@@ -616,4 +616,9 @@
+
+
+
+
+
diff --git a/configs/recalbox-rpi5_64_defconfig b/configs/recalbox-rpi5_64_defconfig
index ec491dc33e9e213fce5fd6ac6efe662bc6159324..45f21c49be7f21fd87e101f2f70579517f9f83c5 100644
--- a/configs/recalbox-rpi5_64_defconfig
+++ b/configs/recalbox-rpi5_64_defconfig
@@ -367,3 +367,4 @@ BR2_PACKAGE_XPADNEO=y
BR2_PACKAGE_VVVVVV=y
BR2_PACKAGE_LIBRETRO_TAMALIBRETRO=y
BR2_PACKAGE_LIBRETRO_HATARIB=y
+BR2_PACKAGE_MEDNAFEN=y
diff --git a/configs/recalbox-x86_64_defconfig b/configs/recalbox-x86_64_defconfig
index 78e30eaab449a768ce546d74164049439976c24f..841ff24c1b9f1fe74d9ff6ad66f65cf33814e0f1 100644
--- a/configs/recalbox-x86_64_defconfig
+++ b/configs/recalbox-x86_64_defconfig
@@ -407,3 +407,5 @@ BR2_PACKAGE_WII_U_GC_ADAPTER=y
BR2_PACKAGE_VVVVVV=y
BR2_PACKAGE_LIBRETRO_TAMALIBRETRO=y
BR2_PACKAGE_LIBRETRO_HATARIB=y
+BR2_PACKAGE_MEDNAFEN=y
+BR2_PACKAGE_SWITCHRES=y
diff --git a/package/arcade-dats/precompiled/stv-1.32.1.dat b/package/arcade-dats/precompiled/stv-1.32.1.dat
new file mode 100644
index 0000000000000000000000000000000000000000..731ce0b3a8bf2064e0d51f0e1c83de64d109bd81
--- /dev/null
+++ b/package/arcade-dats/precompiled/stv-1.32.1.dat
@@ -0,0 +1,6210 @@
+
+
+
+
+ Naomi2
+ Naomi2
+ Emulation
+ 0.258
+ 30/08/2023
+ Recalbox
+ https://www.recalbox.com/
+
+
+
+ Astra SuperStars (J 980514 V1.002)
+ 1998
+ Sunsoft
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Baku Baku Animal (J 950407 V1.000)
+ 1995
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Batman Forever (JUE 960507 V1.000)
+ 1996
+ Acclaim
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Choro Q Hyper Racing 5 (J 981230 V1.000)
+ 1998
+ Sega / Takara
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Columns '97 (JET 961209 V1.000)
+ 1996
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cotton 2 (JUET 970902 V1.000)
+ 1997
+ Success
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cotton Boomerang (JUET 980709 V1.000)
+ 1998
+ Success
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Critter Crusher (EA 951204 V1.000)
+ 1995
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Danchi de Hanafuda (J 990607 V1.400)
+ 1999
+ Altron (Tecmo license)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Danchi de Quiz: Okusan Yontaku Desuyo! (J 001128 V1.200)
+ 2000
+ Altron
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Decathlete (JUET 960709 V1.001)
+ 1996
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Decathlete (JUET 960424 V1.000)
+ 1996
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dancing Fever Gold (J 000821 V2.001)
+ 2001
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Die Hard Arcade (UET 960515 V1.000)
+ 1996
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dynamite Deka (J 960515 V1.000)
+ 1996
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ejihon Tantei Jimusho (J 950613 V1.000)
+ 1995
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Touryuu Densetsu Elan-Doree / Elan Doree - Legend of Dragoon (JUET 980922 V1.006)
+ 1998
+ Sai-Mate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Fantasy Zone (medal game, REV.A) (J 990202 V1.000)
+ 1999
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Final Fight Revenge / Final Revenge (JUET 990930 V1.100)
+ 1999
+ Capcom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Final Fight Revenge / Final Revenge (JUET 990714 V1.000)
+ 1999
+ Capcom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Funky Head Boxers (JUETBKAL 951218 V1.000)
+ 1995
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Zenkoku Seifuku Bishoujo Grand Prix Find Love (J 971212 V1.000)
+ 1997
+ Daiki / FCF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Final Arch (J 950714 V1.001)
+ 1995
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Golden Axe - The Duel (JUETL 950117 V1.000)
+ 1994
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Guardian Force (JUET 980318 V0.105)
+ 1998
+ Success
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Groove on Fight - Gouketsuji Ichizoku 3 (J 970416 V1.001)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sakura Taisen - Hanagumi Taisen Columns (J 971007 V1.010)
+ 1997
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Karaoke Quiz Intro Don Don! (J 960213 V1.000)
+ 1996
+ Sunsoft / Success
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Pro Mahjong Kiwame S (J 951020 V1.208)
+ 1995
+ Athena
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Magical Zunou Power (J 961031 V1.000)
+ 1996
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Maru-Chan de Goo! (J 971216 V1.000)
+ 1997
+ Sega / Toyosuisan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Mausuke no Ojama the World (J 960314 V1.000)
+ 1996
+ Data East
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Microman Battle Charge (J 990326 V1.000)
+ 1999
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Virtual Mahjong 2 - My Fair Lady (J 980608 V1.000)
+ 1998
+ Micronet
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name Club (J 960315 V1.000)
+ 1996
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name Club Disney (J 980614 V1.000)
+ 1998
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name Club Ver.2 (J 960315 V1.000)
+ 1996
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name Club Ver.3 (J 970723 V1.000)
+ 1997
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name Club Ver.4 (J 971202 V1.000)
+ 1997
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Othello Shiyouyo (J 980423 V1.002)
+ 1998
+ Success
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hashire Patrol Car (J 990326 V1.000)
+ 2001
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Pebble Beach - The Great Shot (JUE 950913 V0.990)
+ 1995
+ T&E Soft
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 Kobe Luminaire '99 (Print Club Custom 3) (J 991203 V1.000)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 Earth Limited Kobe (Print Club Custom) (J 970808 V1.000)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club LoveLove (J 970421 V1.000)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club LoveLove Ver 2 (J 970825 V1.000)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 (U 970921 V1.000)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 Vol. 6 Winter (J 961210 V1.000)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 Vol. 6 Winter (J 970121 V1.200)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 Vol. 7 Spring (J 970313 V1.100)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 Felix The Cat (Rev. A) (J 970415 V1.100)
+ 1999
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club Kome Kome Club (J 970203 V1.000)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 Pepsiman (J 970618 V1.100)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 Puffy (J V1.100)
+ 1998
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 Vol. 3 (U 990310 V1.000)
+ 1999
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 Warner Bros (J 970228 V1.000)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club Olive (J 980717 V1.000)
+ 1999
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club Goukakenran (J 991104 V1.000)
+ 1999
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club Pokemon B (U 991126 V1.000)
+ 1999
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club Yoshimoto V2 (J 970422 V1.100)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club Winnie-the-Pooh Vol. 2 (J 971218 V1.000)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club Winnie-the-Pooh Vol. 3 (J 980406 V1.000)
+ 1998
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 Vol. 8 Summer (J 970616 V1.100)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 '97 Winter Ver (J 971017 V1.100, set 1)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 '97 Winter Ver (J 971017 V1.100, set 2)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 '98 Autumn Ver (J 980827 V1.000)
+ 1998
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 '98 Spring Ver (J 971017 V1.100)
+ 1998
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 '98 Summer Ver (J 980603 V1.100)
+ 1998
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 Vol. 9 Autumn (J V1.100)
+ 1997
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Print Club 2 2000 Summer (J 000509 V1.000)
+ 2000
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Princess Clara Daisakusen (J 960910 V1.000)
+ 1996
+ Atlus
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Puyo Puyo Sun (J 961115 V0.001)
+ 1996
+ Compile
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Radiant Silvergun (JUET 980523 V1.000)
+ 1998
+ Treasure
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Soreyuke Anpanman Crayon Kids (J 001026 V1.000)
+ 2000
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Puzzle & Action: Sando-R (J 951114 V1.000)
+ 1995
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DaeJeon! SanJeon SuJeon (AJTUE 990412 V1.000)
+ 1999
+ Sega / Deniam
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Taisen Tanto-R Sashissu!! (J 980216 V1.000)
+ 1998
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sea Bass Fishing (JUET 971110 V0.001)
+ 1997
+ A wave inc. (Able license)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Shanghai - The Great Wall / Shanghai Triple Threat (JUE 950623 V1.005)
+ 1995
+ Sunsoft / Activision
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Shienryu (JUET 961226 V1.000)
+ 1997
+ Warashi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sky Challenger (J 000406 V1.000)
+ 2000
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Super Major League (U 960108 V1.000)
+ 1995
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Soukyugurentai / Terra Diver (JUET 960821 V1.000)
+ 1996
+ Raizing / Eighting
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Steep Slope Sliders (JUET 981110 V1.000)
+ 1998
+ Capcom / Cave / Victor Interactive Software
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Stress Busters (J 981020 V1.000)
+ 1998
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ST-V BIOS
+ 1996
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Suiko Enbu / Outlaws of the Lost Dynasty (JUETL 950314 V2.001)
+ 1995
+ Data East
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Nerae! Super Goal (J 981218 V1.000)
+ 1998
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tatacot (JA 951128 V1.000)
+ 1995
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Technical Bowling (J 971212 V1.000)
+ 1997
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Puzzle & Action: Treasure Hunt (JUET 970901 V2.00E)
+ 1997
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Puzzle & Action: BoMulEul Chajara (JUET 970125 V2.00K)
+ 1997
+ Sega / Deniam
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tecmo World Cup '98 (JUET 980410 V1.000)
+ 1998
+ Tecmo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tecmo World Soccer '98 (JUET 980410 V1.000)
+ 1998
+ Tecmo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Virtua Fighter Kids (JUET 960319 V0.000)
+ 1996
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Virtua Fighter Remix (JUETBKAL 950428 V1.000)
+ 1995
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Virtual Mahjong (J 961214 V1.000)
+ 1997
+ Micronet
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Wanpaku Safari (J 981109 V1.000)
+ 1998
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Winter Heat (JUET 971012 V1.000)
+ 1997
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Yatterman Plus (J 981006 V1.000)
+ 1998
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Zen Nippon Pro-Wrestling Featuring Virtua (J 971123 V1.000)
+ 1997
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Zen Nippon Pro-Wrestling Featuring Virtua (T 971123 V1.000)
+ 1997
+ Sega
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/package/arcade-dats/precompiled/stv-1.32.1.fdt b/package/arcade-dats/precompiled/stv-1.32.1.fdt
new file mode 100644
index 0000000000000000000000000000000000000000..07f5615a07b8735c3d8b6da7387ae63232bb0c7f
--- /dev/null
+++ b/package/arcade-dats/precompiled/stv-1.32.1.fdt
@@ -0,0 +1,102 @@
+astrass||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr20825.13|94a9ad8f|1048576|mpr20826.1|bdc4b941|4194304|mpr20827.2|65cabbb3|4194304|mpr20828.3|3934d44a|4194304|mpr20829.4|814308c3|4194304|mpr20830.5|ff97fd19|4194304|mpr20831.6|4408e6fb|4194304|mpr20832.8|af1b0985|4194304|mpr20833.9|cb6af231|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+bakubaku||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|fpr17969.13|bee327e5|1048576|mpr17970.2|bc4d6f91|4194304|mpr17971.3|c780a3b3|4194304|mpr17972.4|8f29815a|4194304|mpr17973.5|5f6e0e8b|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+batmanfr||350-mpa1.u16|735e23ab|1048576|350-mpa1.u19|2a5a8c3a|1048576|350snda1.u52|9027e7a0|524288|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|gfx0.u1|a82d0b7e|4194304|gfx1.u3|a41e55d9|4194304|gfx2.u5|4c1ebeb7|4194304|gfx3.u8|f679a3e7|4194304|gfx4.u12|52d95242|4194304|gfx5.u15|e201f830|4194304|gfx6.u18|c6b381a3|4194304|snd0.u48|02b1927c|2097152|snd1.u49|58b18eda|2097152|snd2.u50|51d626d6|2097152|snd3.u51|31af26ae|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+choroqhr||choroqhr.nv|6e89815f|128|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22.bin|22c58710|2097152|ic24.bin|09b8a154|2097152|ic26.bin|136ca5e9|2097152|ic28.bin|3c949563|2097152|ic30.bin|7e93078d|2097152|ic32.bin|86cdcbd8|2097152|ic34.bin|be2ed0a0|2097152|ic36.bin|9a4109e5|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+colmns97||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|fpr19553.13|d4fb6a5e|1048576|mpr19554.2|5a3ebcac|4194304|mpr19555.3|74f6e6b8|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+cotton2||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr20116.1|d30b0175|4194304|mpr20117.2|893656ea|4194304|mpr20118.3|1b6a1d4c|4194304|mpr20119.4|5a76e72b|4194304|mpr20120.5|7113dd7b|4194304|mpr20121.6|8c8fd521|4194304|mpr20122.7|d616f78a|2097152|mpr20123.8|35f1b89f|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+cottonbm||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr21069.1|6a28e3c5|4194304|mpr21070.2|56c0bf1d|4194304|mpr21071.3|2bb18df2|4194304|mpr21072.4|7c7cb977|4194304|mpr21073.5|f2e5a5b7|4194304|mpr21074.6|6a7e7a7b|4194304|mpr21075.7|200b58ba|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+critcrsh||critcrsh.nv|3da9860e|128|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-18821.ic13|9a6658e2|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr-18788.ic9|feae5867|4194304|mpr-18789.ic8|b388616f|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+danchih||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr21970.2|34dd7f4d|4194304|mpr21971.3|8995158c|4194304|mpr21972.4|68a39090|4194304|mpr21973.5|b0f23f14|4194304|mpr21974.7|e7472793|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+danchiq||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22|e216bfc8|2097152|ic23|d080eb71|2097152|ic24|b95aa5ac|2097152|ic25|9a4109e5|2097152|ic26|df6ebd48|2097152|ic28|cf6a2b76|2097152|ic30|0b6a9901|2097152|ic32|0b4604f5|2097152|ic34|616e20fa|2097152|ic36|43474e08|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+decathlt||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr18967a.13|ac59c186|1048576|mpr18968.2|11a891de|4194304|mpr18969.3|199cc47d|4194304|mpr18970.4|8b7a509e|4194304|mpr18971.5|c87c443b|4194304|mpr18972.6|45c64fca|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+decathlto|decathlt|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr18967.13|c0446674|1048576|mpr18968.2|11a891de|4194304|mpr18969.3|199cc47d|4194304|mpr18970.4|8b7a509e|4194304|mpr18971.5|c87c443b|4194304|mpr18972.6|45c64fca|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+dfeverg||1|d72f1640|4194304|10|4b2a4397|4194304|11|58877b19|4194304|12||4194304|13|ecd7ac4b|524288|2|c2e8aee5|4194304|3|cb5b2744|4194304|4|7eca59b2|4194304|5|c3450f2b|4194304|6|1ac57ed5|4194304|8|acc78f10|4194304|9|4ffbba8d|4194304|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+diehard||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|fpr19119.13|de5c4f7c|1048576|mpr19115.2|6fe06a30|4194304|mpr19116.3|af9e627b|4194304|mpr19117.4|74520ff1|4194304|mpr19118.5|2c9702f0|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+dnmtdeka|diehard|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|fpr19114.13|1fd22a5f|1048576|mpr19115.2|6fe06a30|4194304|mpr19116.3|af9e627b|4194304|mpr19117.4|74520ff1|4194304|mpr19118.5|2c9702f0|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+ejihon||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr18137.13|151aa9bc|524288|mpr18138.2|f5567049|4194304|mpr18139.3|f36b4878|4194304|mpr18140.4|228850a0|4194304|mpr18141.5|b51eef36|4194304|mpr18142.6|cf259541|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+elandore||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr21301.2|1a23b0a0|4194304|mpr21302.3|1c91ca33|4194304|mpr21303.4|07b2350e|4194304|mpr21304.5|cfea52ae|4194304|mpr21305.6|46cfc2a2|4194304|mpr21306.1|87a5929c|4194304|mpr21307.7|966ad472|2097152|mpr21308.8|336ec1a4|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+fanzonem||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-21440a.ic13|28457d58|524288|epr-23603.ic8|f688ae60|524288|mpr-21441.ic2|b69133a5|4194304|mpr-21442.ic4|d4d3575f|4194304|mpr-21443.ic6|cb1401c9|4194304|mpr-21444.ic8|a82ff33b|4194304|mpr-21445.ic1|c02ffbd3|4194304|mpr-21446.ic3|4831539e|4194304|mpr-21447.ic5|61e0d313|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+ffreveng||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ffr110.ic35|3ffea541|1048576|mpr21873.2|dac5bd98|4194304|mpr21874.3|0a7be2f1|4194304|mpr21875.4|ccb75029|4194304|mpr21876.5|bb92a7fc|4194304|mpr21877.6|c22a4a75|4194304|opr21872.7|32d36fee|2097152|opr21878.1|2ea4a64d|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+ffrevng10|ffreveng|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr21873.2|dac5bd98|4194304|mpr21874.3|0a7be2f1|4194304|mpr21875.4|ccb75029|4194304|mpr21876.5|bb92a7fc|4194304|mpr21877.6|c22a4a75|4194304|opr21872.7|32d36fee|2097152|opr21878.1|2ea4a64d|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+fhboxers||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|fhboxers.nv|590fd6da|128|fr18541a.13|8c61a17c|1048576|mpr18532.1|39528643|4194304|mpr18533.2|7181fe51|4194304|mpr18534.3|c87ef125|4194304|mpr18535.4|929a64cf|4194304|mpr18536.5|51b9f64e|4194304|mpr18537.6|c364f6a7|4194304|mpr18538.7|7b5230c5|2097152|mpr18539.8|62b3908c|4194304|mpr18540.9|4c2b59a4|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+findlove||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr20424.13|4e61fa46|1048576|findlove.nv|df2fa9f6|128|mpr20425.1|67f104c4|4194304|mpr20426.2|897d1747|4194304|mpr20427.3|a488a694|4194304|mpr20428.4|4353b3b6|4194304|mpr20429.5|4f566486|4194304|mpr20430.6|d1e11979|4194304|mpr20431.7|ea656ced|2097152|mpr20432.8|79fcdecd|4194304|mpr20433.9|82289f29|4194304|mpr20434.10|85c94afc|4194304|mpr20435.11|263a2e48|4194304|mpr20436.12|e3823f49|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+finlarch|smleague|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|finlarch.13|4505fa9e|1048576|mpr18257.2|137fdf55|4194304|mpr18258.3|f519c505|4194304|mpr18259.4|5cabc775|4194304|mpr18260.5|f5b92082|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+gaxeduel||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr17766.13|a83fcd62|524288|mpr17767.1|9ba1e7b1|4194304|mpr17768.2|d6808a7d|4194304|mpr17769.3|3471dd35|4194304|mpr17770.4|06978a00|4194304|mpr17771.5|aea2ea3b|4194304|mpr17772.6|b3dc0e75|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+grdforce||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr20839.2|facd4dd8|4194304|mpr20840.3|fe0158e6|4194304|mpr20841.4|d87ac873|4194304|mpr20842.5|baebc506|4194304|mpr20843.6|263e49cc|4194304|mpr20844.7|283e7587|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+groovef||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr19814.1|8f20e9f7|4194304|mpr19815.2|1b9b14e6|4194304|mpr19816.3|83f5731c|4194304|mpr19817.4|525bd6c7|4194304|mpr19818.5|66723ba8|4194304|mpr19819.6|ee8c55f4|4194304|mpr19820.7|e93c4513|1048576|mpr19821.8|f69a76e6|4194304|mpr19822.9|5e8c4b5f|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+hanagumi||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr20137.1|181d2688|4194304|mpr20138.2|fdcf1046|4194304|mpr20139.3|7f0140e5|4194304|mpr20140.4|2fa03852|4194304|mpr20141.5|45d6d21b|4194304|mpr20142.6|e38561ec|4194304|mpr20143.7|7bfc38d0|1048576|mpr20144.8|235b43f6|4194304|mpr20145.9|aeaac7a1|4194304|mpr20146.10|39bab9a2|4194304|mpr20147.11|294ab997|4194304|mpr20148.12|5337ccb0|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+introdon||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr18937.13|1f40d766|524288|mpr18938.1|580ecb83|4194304|mpr18939.2|ef95a6e6|4194304|mpr18940.3|cabab4cd|4194304|mpr18941.4|f4a33a20|4194304|mpr18942.5|8dd0a446|4194304|mpr18943.6|d8702a9e|4194304|mpr18944.7|f7f75ce5|1048576|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+kiwames||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr18737.13|cfad6c49|524288|kiwames.nv|c7002732|128|mpr18738.2|4b3c175a|4194304|mpr18739.3|eb41fa67|4194304|mpr18740.4|9ca7962f|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+magzun||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|flash.ic13|e6f0aca0|1048576|magzun.nv|42700321|128|microm||4096|mpr-19354.ic2|a23822e7|4194304|mpr-19355.ic3|d70e5ebc|4194304|mpr-19356.ic4|3bc43fe9|4194304|mpr-19357.ic5|aa749370|4194304|mpr-19358.ic6|0969f1ec|4194304|mpr-19359.ic1|b0d06f9c|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+maruchan||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr20416.13|8bf0176d|1048576|mpr20417.2|636c2a08|4194304|mpr20418.3|3f0d9e34|4194304|mpr20419.4|ec969815|4194304|mpr20420.5|f2902c88|4194304|mpr20421.6|cd0b477c|4194304|mpr20422.1|66335049|4194304|mpr20423.8|2bd55832|4194304|mpr20443.9|8ac288f5|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+mausuke||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic13.bin|b456f4cd|1048576|mcj-00.2|4eeacd6f|2097152|mcj-01.3|365a494b|2097152|mcj-02.4|8b8e4931|2097152|mcj-03.5|9015a0e7|2097152|mcj-04.6|9d1beaee|2097152|mcj-05.1|a7626a82|2097152|mcj-06.8|1ab8e90e|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+micrombc||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22|8385bc45|2097152|ic24|84ecb42f|2097152|ic26|869bc19c|2097152|ic28|0c3db354|2097152|ic30|03b9eacf|2097152|ic32|62c10626|2097152|ic34|8d89877e|2097152|ic36|8d89877e|2097152|micrombc.nv|6e89815f|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+myfairld||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr20994.1|a69243a0|4194304|mpr20995.2|1bb73f24|4194304|mpr20996.3|993c3859|4194304|mpr20997.4|f0bf64a4|4194304|mpr20998.5|d3b19786|4194304|mpr20999.6|82e31f25|4194304|mpr21000.7|2581c560|2097152|mpr21001.8|95fbe549|4194304|myfairld.nv|c7cf3a5a|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+nameclub||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22|ac23c648|2097152|ic24|a16902e3|2097152|ic26|a5eab3f3|2097152|ic28|34ed677a|2097152|nameclub.nv|680a64bc|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+nclubdis||315-6055.ic12||279|315-6056-01.ic13||279|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22|cfd5eb54|2097152|ic23|9a4109e5|2097152|ic24|943682eb|2097152|ic25|9a4109e5|2097152|ic26|a17bd53a|2097152|ic28|9a597bff|2097152|ic30|3eb020f6|2097152|ic32|ac26d375|2097152|ic34|e157cd99|2097152|ic36|9a4109e5|2097152|nclubdis.nv|7efc9c6a|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+nclubv2||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|nclubv2.ic22|7e81676d|2097152|nclubv2.ic24|1b7637de|2097152|nclubv2.ic26|630be99d|2097152|nclubv2.ic28|1a3ca5e2|2097152|nclubv2.nv|96d55fa9|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+nclubv3||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22|b4008ed0|2097152|ic23|bd922829|2097152|ic24|4e894850|2097152|ic25|f77f9e24|2097152|ic26|5b6b023f|2097152|ic28|b7beab03|2097152|ic30|a9f81069|2097152|ic32|02708d66|2097152|ic34|c79d0537|2097152|ic36|0c9df896|2097152|nclubv3.nv|9122a9e9|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+nclubv4||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22|80eba7e9|2097152|ic23|9a4109e5|2097152|ic24|6bbb1b0c|2097152|ic25|9a4109e5|2097152|ic26|5352ade3|2097152|ic28|44f4b15a|2097152|ic30|fc4e56e6|2097152|ic32|6f825b87|2097152|ic34|62114a08|2097152|ic36|9a4109e5|2097152|nclubv4.nv|7efc9c6a|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+othellos||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr20963.2|2cc4f141|4194304|mpr20964.3|5f5cda94|4194304|mpr20965.4|37044f3e|4194304|mpr20966.5|b94b83de|4194304|mpr20967.7|efc05b97|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+patocar||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22.bin|b7e6d425|2097152|ic24.bin|cbbb687e|2097152|ic26.bin|91db9dbe|2097152|ic28.bin|bff0cd9c|2097152|ic30.bin|9a4109e5|2097152|patocar.nv|d9873ee8|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pblbeach||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr18852.13|d12414ec|524288|mpr18853.2|b9268c97|4194304|mpr18854.3|3113c8bc|4194304|mpr18855.4|daf6ad0c|4194304|mpr18856.5|214cef24|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pckobe99||eeprom|dbe305a9|128|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22.bin|670296eb|2097152|ic24.bin|c2139f62|2097152|ic26.bin|17e3efd0|2097152|ic28.bin|a52f99f6|2097152|ic30.bin|f1b7e3d5|2097152|ic32.bin|76f6efaa|2097152|ic34.bin|894c63f9|2097152|ic36.bin|078694c3|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclb2elk||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclb2elk.nv|54c7564f|128|pclb2elk_ic22|2faed82a|2097152|pclb2elk_ic24|9cacfb7b|2097152|pclb2elk_ic26|533a189e|2097152|pclb2elk_ic28|1f0c9113|2097152|pclb2elk_ic30|0e188b8c|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclove||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclblove.ic22|8cd25a0f|2097152|pclblove.ic24|85583e2c|2097152|pclblove.ic26|7efcabcc|2097152|pclblove.ic28|a1336da7|2097152|pclblove.ic30|ec5b5e28|2097152|pclblove.ic32|9a4109e5|2097152|pclove.nv|3c78e3bd|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclove2||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22|d7d968d6|2097152|ic24|9c9b7e57|2097152|ic26|55eb859f|2097152|ic28|463604a6|2097152|ic30|ec5b5e28|2097152|ic32|9a4109e5|2097152|pclove2.nv|93b30600|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclub2||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclub2.nv|00d0f04e|128|pclub2_ic22|d2ceade7|2097152|pclub2_ic24|0e968c2d|2097152|pclub2_ic26|ab51da70|2097152|pclub2_ic28|3a654b2a|2097152|pclub2_ic30|8d89877e|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclub26w||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclbvol6w_ic22|72aa320c|2097152|pclbvol6w_ic24|d98371e2|2097152|pclbvol6w_ic26|e6bbe3a5|2097152|pclbvol6w_ic28|3c330c9b|2097152|pclbvol6w_ic30|67646090|2097152|pclub26w.nv|448f770d|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclub26wa|pclub26w|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22.bin|a88e117d|2097152|ic26.bin|d0412c8d|2097152|ic30.bin|00a0c702|2097152|ic24.bin|d98371e2|2097152|ic28.bin|3c330c9b|2097152|pclub26w.nv|448f770d|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclub27s||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclub27s.nv|e58c7167|128|pclub2v7.ic22|44c8ab27|2097152|pclub2v7.ic24|24818437|2097152|pclub2v7.ic26|076c1d44|2097152|pclub2v7.ic28|ff9643ca|2097152|pclub2v7.ic30|03b9eacf|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclub2fc||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclub2fc.nv|c8082326|128|pclub2fc_ic22|109c61a5|2097152|pclub2fc_ic24|0ccc5538|2097152|pclub2fc_ic26|8d89877e|2097152|pclub2fc_ic28|ff9643ca|2097152|pclub2fc_ic30|03b9eacf|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclub2kc||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclub2kc.nv|064366fe|128|pclub2kc_ic22|9eb4cfd7|2097152|pclub2kc_ic24|cf3b4080|2097152|pclub2kc_ic26|dbdcb1d7|2097152|pclub2kc_ic28|3c330c9b|2097152|pclub2kc_ic30|00a0c702|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclub2pe||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclb2psi_ic22|caadc660|2097152|pclb2psi_ic24|ece82698|2097152|pclb2psi_ic26|c8a1e335|2097152|pclb2psi_ic28|52f09627|2097152|pclb2psi_ic30|03b9eacf|2097152|pclub2pe.nv|447bb3bd|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclub2pf||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclb2puf.ic22|a14282f2|2097152|pclb2puf.ic24|4fb4dc74|2097152|pclb2puf.ic26|d20bbfb5|2097152|pclb2puf.ic28|da658ae9|2097152|pclb2puf.ic30|cafc0e6b|2097152|pclub2pf.nv|447bb3bd|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclub2v3||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclub2v3.nv|a8a2d30c|128|pclub2v3_ic22|f88347aa|2097152|pclub2v3_ic24|b5871198|2097152|pclub2v3_ic26|d97034ed|2097152|pclub2v3_ic28|f1421506|2097152|pclub2v3_ic30|8d89877e|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclub2wb||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclb2wb_ic22|12245be7|2097152|pclb2wb_ic24|e5d6e11e|2097152|pclb2wb_ic26|7ee066f0|2097152|pclb2wb_ic28|9ed59513|2097152|pclb2wb_ic30|00a0c702|2097152|pclub2wb.nv|0d442eec|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclubol||eeprom|a744ca03|128|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclubol_ic22|668b1049|2097152|pclubol_ic24|35721f04|2097152|pclubol_ic26|17b3cc4b|2097152|pclubol_ic28|7cfaa530|2097152|pclubol_ic30|e1dd7854|2097152|pclubol_ic32|f0a3ded7|2097152|pclubol_ic34|53aa9821|2097152|pclubol_ic36|9a4109e5|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclubor||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclubor.nv|3ad918c0|128|pclubor_ic22|b25072f7|2097152|pclubor_ic24|a4863a0e|2097152|pclubor_ic26|7f55baf7|2097152|pclubor_ic28|cafd2a7d|2097152|pclubor_ic30|ccf6f885|2097152|pclubor_ic32|62e6d1e1|2097152|pclubor_ic34|19cdd167|2097152|pclubor_ic36|9a4109e5|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclubpok||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclubpok.nv|4ba3f21a|128|pclubpok_ic22|48ab8371|2097152|pclubpok_ic24|9915faea|2097152|pclubpok_ic26|054ad120|2097152|pclubpok_ic28|3a654b2a|2097152|pclubpok_ic30|98747bef|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pclubyo2||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclbyov2.ic22|719a4d27|2097152|pclbyov2.ic24|790dc7b5|2097152|pclbyov2.ic26|12ae1606|2097152|pclbyov2.ic28|ff9643ca|2097152|pclbyov2.ic30|03b9eacf|2097152|pclubyo2.nv|2b26a8f7|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pcpooh2||eeprom|5aee29d0|128|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22.bin|2cb33332|2097152|ic24.bin|3c6fc10f|2097152|ic26.bin|b891c7ab|2097152|ic28.bin|1a1c74cb|2097152|ic30.bin|b7b6fc61|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+pcpooh3||eeprom|e41d541b|128|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22.bin|efc83c4f|2097152|ic24.bin|e8753d0d|2097152|ic26.bin|daf1a0d4|2097152|ic28.bin|3c0f040f|2097152|ic30.bin|6006d785|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+prc28su||eeprom|447bb3bd|128|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288|u22.bin|b78cf122|2097152|u24.bin|aca05d29|2097152|u26.bin|5591f6e2|2097152|u28.bin|0899889b|2097152|u30.bin|03b9eacf|2097152|u32.bin|5dc1f4d7|2097152|u34.bin|0222734a|2097152|u36.bin|57c30e0f|2097152
+prc297wi||eeprom|9ba58358|128|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|prc297wi_ic22|589f6705|2097152|prc297wi_ic23|e3d9d12b|2097152|prc297wi_ic24|4bd706d1|2097152|prc297wi_ic25|71238374|2097152|prc297wi_ic26|417e182a|2097152|prc297wi_ic27|7485a9a2|2097152|prc297wi_ic28|73da594e|2097152|prc297wi_ic30|03b9eacf|2097152|prc297wi_ic32|20437e93|2097152|prc297wi_ic34|9639b003|2097152|prc297wi_ic36|dd1b57b6|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+prc297wia|prc297wi|eeprom|9ba58358|128|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclb297w_ic22_alt|1feb3bfe|2097152|prc297wi_ic23|e3d9d12b|2097152|prc297wi_ic24|4bd706d1|2097152|prc297wi_ic25|71238374|2097152|prc297wi_ic26|417e182a|2097152|prc297wi_ic27|7485a9a2|2097152|prc297wi_ic28|73da594e|2097152|prc297wi_ic30|03b9eacf|2097152|prc297wi_ic32|20437e93|2097152|prc297wi_ic34|9639b003|2097152|prc297wi_ic36|dd1b57b6|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+prc298au||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|prc298au.nv|b4440ff0|128|prc298au_ic22|21a995ce|2097152|prc298au_ic24|94540f39|2097152|prc298au_ic26|8b22c41f|2097152|prc298au_ic28|bf68cec0|2097152|prc298au_ic30|ae276c06|2097152|prc298au_ic32|a3fb81f5|2097152|prc298au_ic34|04200dc9|2097152|prc298au_ic36|9a4109e5|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+prc298sp||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|prc298sp.nv|a23dd0f2|128|prc298sp_ic22|cb0ec98a|2097152|prc298sp_ic24|645e7e24|2097152|prc298sp_ic26|9d3ad85d|2097152|prc298sp_ic28|877e73cc|2097152|prc298sp_ic30|03b9eacf|2097152|prc298sp_ic32|62c10626|2097152|prc298sp_ic34|8d89877e|2097152|prc298sp_ic36|8d89877e|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+prc298su||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|pclb298s_ic22|9720fe7a|2097152|pclb298s_ic24|380496dc|2097152|pclb298s_ic26|42622126|2097152|pclb298s_ic28|c03e861a|2097152|pclb298s_ic30|01844b12|2097152|prc298su.nv|6b81636a|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+prc29au||eeprom|447bb3bd|128|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22.bin|b7a9bfa4|2097152|ic24.bin|91f36785|2097152|ic26.bin|4c1b8823|2097152|ic28.bin|594d200f|2097152|ic30.bin|03b9eacf|2097152|ic32.bin|76f6efaa|2097152|ic34.bin|894c63f9|2097152|ic36.bin|524a1c4e|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+prc2ksu||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22.bin|4b3de7df|2097152|ic24.bin|02da49b7|2097152|ic26.bin|a431d614|2097152|ic28.bin|c0fba1a5|2097152|ic30.bin|0811d0e4|2097152|prc2ksu.nv|ee7ffdc5|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+prikura||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr19333.2|eb57a6a6|4194304|mpr19334.3|c9979981|4194304|mpr19335.4|9e000140|4194304|mpr19336.5|2363fa4b|4194304|mpr19337.7|76f69ff3|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+puyosun||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr19531.13|ac81024f|524288|mpr19532.1|985f0c9d|4194304|mpr19533.2|17ec54ba|4194304|mpr19534.3|820e4781|4194304|mpr19535.4|94fadfa4|4194304|mpr19536.5|5765bc9c|4194304|mpr19537.6|8b736686|4194304|mpr19538.8|915a723e|4194304|mpr19539.9|72a297e5|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+rsgun||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr20958.7|cbe5a449|2097152|mpr20959.2|a953330b|4194304|mpr20960.3|b5ab9053|4194304|mpr20961.4|0e06295c|4194304|mpr20962.5|f1e6c7fc|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+sackids||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22.bin|4d9d1870|2097152|ic24.bin|39fca3e5|2097152|ic26.bin|f38c79b6|2097152|ic28.bin|63d09f3c|2097152|ic30.bin|f89811ba|2097152|ic32.bin|1db6c26b|2097152|ic34.bin|0f3622c8|2097152|ic36.bin|9a4109e5|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+sandor||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr18635.8|441e1368|4194304|mpr18636.9|fff1dd80|4194304|mpr18637.10|83aced0f|4194304|mpr18638.11|caab531b|4194304|sando-r.13|fe63a239|1048576|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+sanjeon|sasissu|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic11|9abae8d4|2097152|ic12|d5ebc84e|4194304|ic13|f72c1d13|2097152|ic14|bcd72105|2097152|ic15|8c9c8352|2097152|ic16|07e11512|2097152|ic17|46b7b344|2097152|ic18|d48404e1|2097152|ic19|33d23bb9|2097152|ic20|f8cc1038|2097152|ic21|74ceb649|2097152|ic22|85f31277|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+sasissu||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr20542.13|0e632db5|1048576|mpr20543.1|1f688cdf|4194304|mpr20544.2|661fff5e|4194304|mpr20545.3|8e3a37be|4194304|mpr20546.4|72020886|4194304|mpr20547.5|8362e397|4194304|mpr20548.6|e37534d9|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+seabass||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr20550.1|083e1ca8|4194304|mpr20551.2|9a0c6dd8|4194304|mpr20552.3|5f46b0aa|4194304|mpr20553.4|c0f8a6b6|4194304|mpr20554.5|215fc1f9|4194304|mpr20555.6|3f5186a9|4194304|mpr20556.8|1fd70c6c|4194304|mpr20557.9|3c9ba442|4194304|seabass.nv|4e7c0944|128|seabassf.13|6d7c39cc|1048576|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+shanhigw||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr18340.2|8db23212|2097152|mpr18341.7|cc5e8646|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+shienryu||eeprom-shienryu.bin|98db6925|128|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr19631.7|3a4b1abc|2097152|mpr19632.2|985fae46|4194304|mpr19633.3|e2f0b037|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+skychal||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22.bin|a12ccf64|2097152|ic24.bin|9a929dcf|2097152|ic26.bin|ed2183d3|2097152|ic28.bin|e7401d68|2097152|ic30.bin|950f7a2f|2097152|ic32.bin|a656212b|2097152|skychal.nv|a6515237|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+smleague||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr18777.13|8d180866|524288|mpr18778.8|25e1300e|4194304|mpr18779.9|51e2fabd|4194304|mpr18780.10|8cd4dd74|4194304|mpr18781.11|13ee41ae|4194304|mpr18782.12|9be2270a|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+sokyugrt||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|fpr19188.13|45a27e32|1048576|mpr19189.2|0b202a3e|4194304|mpr19190.3|1777ded8|4194304|mpr19191.4|ec6eb07b|4194304|mpr19192.5|cb544a1e|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+sss||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr21488.13|71c9def1|524288|mpr21489.2|4c85152b|4194304|mpr21490.3|03da67f8|4194304|mpr21491.4|cf7ee784|4194304|mpr21492.5|57753894|4194304|mpr21493.6|efb2d271|4194304|sss.nv|3473b2f3|128|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+stress||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-21300a.ic13|899d829e|1048576|epr-23603.ic8|f688ae60|524288|mpr-21289.ic1|c2ee8bea|4194304|mpr-21290.ic2|a49d29f3|4194304|mpr-21291.ic3|9452ba20|4194304|mpr-21292.ic4|f60268e2|4194304|mpr-21293.ic5|794946e0|4194304|mpr-21294.ic6|550843bb|4194304|mpr-21296.ic8|b825c42a|4194304|mpr-21297.ic9|4bff7469|4194304|mpr-21298.ic10|68d07144|4194304|mpr-21299.ic11|ecc521c6|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+stvbios||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288|stvbios.nv|15432ae2|128
+suikoenb||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|fpr17834.13|746ef686|1048576|mpr17835.1|77f5cb43|4194304|mpr17836.2|55e9642d|4194304|mpr17837.3|13d1e667|4194304|mpr17838.4|f9e70032|4194304|mpr17839.5|1b2762c5|4194304|mpr17840.6|0fd4c857|4194304|mpr17841.8|f48beffc|4194304|mpr17842.9|ac8deed7|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+supgoal||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22.bin|a686f7a2|2097152|ic24.bin|56fbbeea|2097152|ic26.bin|64701c2b|2097152|ic28.bin|d9aebe8c|2097152|ic30.bin|26d4ade5|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288|supgoal.nv|63806aae|128
+tatacot|critcrsh|critcrsh.nv|3da9860e|128|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-18790.ic13|d95155dc|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr-18788.ic9|feae5867|4194304|mpr-18789.ic8|b388616f|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+techbowl||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22|5058db21|2097152|ic24|34090f6d|2097152|ic26|fb073352|2097152|ic28|530e0ceb|2097152|ic30|8d89877e|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288|techbowl.nv|5bebc2b7|128
+thunt|sandor|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288|th-e-2.ic2|47315694|4194304|th-e-3.ic3|c9290b44|4194304|th-e-4.ic4|c672e40b|4194304|th-e-5.ic5|3914b805|4194304|th-ic7_1.stv|1355cc18|524288|th-ic7_2.stv|c4e993de|524288
+thuntk|sandor|1.ic13_1|460727c8|524288|2.ic13_2|6cae2926|524288|bom210-10.ic2|f59d0827|4194304|bom210-11.ic3|44e5a13e|4194304|bom210-12.ic4|deabc701|4194304|bom210-13.ic5|5ece1d5c|4194304|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+twcup98||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr20819.24|d930dfc8|1048576|mpr20821.12|2d930d23|4194304|mpr20822.13|8b33a5e2|4194304|mpr20823.14|6e6d4e95|4194304|mpr20824.15|4cf18a25|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+twsoc98|twcup98|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-20820.ic24|b10451f9|1048576|epr-23603.ic8|f688ae60|524288|mpr20821.12|2d930d23|4194304|mpr20822.13|8b33a5e2|4194304|mpr20823.14|6e6d4e95|4194304|mpr20824.15|4cf18a25|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+vfkids||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|fpr18914.13|cd35730a|1048576|mpr18915.1|09cc38e5|4194304|mpr18916.4|4aae3ddb|4194304|mpr18917.5|edf6edc3|4194304|mpr18918.6|d3a95036|4194304|mpr18919.8|4ac700de|4194304|mpr18920.9|0106e36c|4194304|mpr18921.10|c23d51ad|4194304|mpr18922.11|99d0ab90|4194304|mpr18923.12|30a41ae9|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+vfremix||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr17944.13|3304c175|524288|mpr17945.1|03ede188|2097152|mpr17946.2|4cb245f7|4194304|mpr17947.3|fef4a9fb|4194304|mpr17948.4|3e2b251a|4194304|mpr17949.5|b2ecea25|4194304|mpr17950.6|5b1f981d|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+vmahjong||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|mpr19614.1|b83b3f03|4194304|mpr19615.2|c62896da|4194304|mpr19616.3|f62207c7|4194304|mpr19617.4|ab667e19|4194304|mpr19618.5|9782ceee|4194304|mpr19619.6|0b76866c|4194304|mpr19620.7|c98de7e5|2097152|mpr19621.8|f92616b3|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288|vmahjong.nv|4e6487f4|128
+wasafari||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|ic22.bin|d8bb2e2c|2097152|ic24.bin|c1b0e173|2097152|ic26.bin|a5c0577c|2097152|ic28.bin|2a8cfa97|2097152|ic30.bin|9a4109e5|2097152|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288|wasafari.nv|50861c5a|128
+winterht||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|fpr20108.13|1ef9ced0|1048576|mpr20109.1|c1a713b8|4194304|mpr20110.2|238ef832|4194304|mpr20111.3|b0a86f69|4194304|mpr20112.4|3ba2b49b|4194304|mpr20113.5|8c858b41|4194304|mpr20114.6|b723862c|4194304|mpr20115.8|dd01f2ad|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+yattrmnp||315-5930.ic19|d1201563|279|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-21121.bin|d615bce0|131072|epr-21122.ic13|49f56e32|524288|epr-23603.ic8|f688ae60|524288|mpr-21123.ic12|491b9166|4194304|mpr-21124.ic11|10f073ac|4194304|mpr-21125.ic02|40f5f119|4194304|mpr-21126.ic04|36095649|4194304|mpr-21127.ic06|f55901d7|4194304|mpr-21128.ic08|c2e2f72e|4194304|mpr-21129.ic10|997d67bd|4194304|mpr-21130.ic03|84cb4e9c|4194304|mpr-21131.ic05|b1c860d8|4194304|mpr-21132.ic07|809b1b0e|4194304|mpr-21133.ic09|2dc21956|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+znpwfv||epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr20398.13|3fb56a0b|1048576|mpr20399.1|c178a96e|4194304|mpr20400.2|1edfbe05|4194304|mpr20401.3|99e98937|4194304|mpr20402.4|4572aa60|4194304|mpr20403.5|26a8e13e|4194304|mpr20404.6|0b70275d|4194304|mpr20405.8|f53337b7|4194304|mpr20406.9|b677c175|4194304|mpr20407.10|58356050|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
+znpwfvt|znpwfv|epr-17740.ic8|5c5aa63d|524288|epr-17740a.ic8|3e23c81f|524288|epr-17741a.ic8|4166c663|524288|epr-17742a.ic8|02daf123|524288|epr-17951a.ic8|2672f9d8|524288|epr-17952a.ic8|d1be2adf|524288|epr-17953a.ic8|a4c47570|524288|epr-17954a.ic8|f7722da3|524288|epr-19730.ic8|d0e0889d|524288|epr-19854.ic8|e09d1f60|524288|epr-20091.ic8|59ed40f4|524288|epr-23603.ic8|f688ae60|524288|epr20408.13|1d62fcf6|1048576|mpr20399.1|c178a96e|4194304|mpr20400.2|1edfbe05|4194304|mpr20401.3|99e98937|4194304|mpr20402.4|4572aa60|4194304|mpr20403.5|26a8e13e|4194304|mpr20404.6|0b70275d|4194304|mpr20405.8|f53337b7|4194304|mpr20406.9|b677c175|4194304|mpr20407.10|58356050|4194304|stv1061.bin|728dbca3|524288|stv110.bin|3dfeda92|524288
diff --git a/package/arcade-dats/precompiled/stv-1.32.1.lst b/package/arcade-dats/precompiled/stv-1.32.1.lst
new file mode 100644
index 0000000000000000000000000000000000000000..3ad38b63aa91cf61b1dfd112cae37d7239aa2df3
--- /dev/null
+++ b/package/arcade-dats/precompiled/stv-1.32.1.lst
@@ -0,0 +1,103 @@
+name|description|type|sourcefile|rotate|width|height|refresh|bios|parent|status|manufacter
+astrass|Astra SuperStars (J 980514 V1.002)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sunsoft
+bakubaku|Baku Baku Animal (J 950407 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+batmanfr|Batman Forever (JUE 960507 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Acclaim
+choroqhr|Choro Q Hyper Racing 5 (J 981230 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega/Takara
+colmns97|Columns '97 (JET 961209 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+cotton2|Cotton 2 (JUET 970902 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Success
+cottonbm|Cotton Boomerang (JUET 980709 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Success
+critcrsh|Critter Crusher (EA 951204 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+danchih|Danchi de Hanafuda (J 990607 V1.400)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Altron/Tecmo
+danchiq|Danchi de Quiz: Okusan Yontaku Desuyo! (J 001128 V1.200)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Altron
+decathlt|Decathlete (JUET 960709 V1.001)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+decathlto|Decathlete (JUET 960424 V1.000)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|decathlt|preliminary|Sega
+dfeverg|Dancing Fever Gold (J 000821 V2.001)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+diehard|Die Hard Arcade (UET 960515 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+dnmtdeka|Dynamite Deka (J 960515 V1.000)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|diehard|imperfect|Sega
+ejihon|Ejihon Tantei Jimusho (J 950613 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+elandore|Touryuu Densetsu Elan-Doree / Elan Doree - Legend of Dragoon (JUET 980922 V1.006)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sai-Mate
+fanzonem|Fantasy Zone (medal game, REV.A) (J 990202 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+ffreveng|Final Fight Revenge / Final Revenge (JUET 990930 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Capcom
+ffrevng10|Final Fight Revenge / Final Revenge (JUET 990714 V1.000)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|ffreveng|imperfect|Capcom
+fhboxers|Funky Head Boxers (JUETBKAL 951218 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+findlove|Zenkoku Seifuku Bishoujo Grand Prix Find Love (J 971212 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Daiki/FCF
+finlarch|Final Arch (J 950714 V1.001)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|smleague|preliminary|Sega
+gaxeduel|Golden Axe - The Duel (JUETL 950117 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+grdforce|Guardian Force (JUET 980318 V0.105)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Success
+groovef|Groove on Fight - Gouketsuji Ichizoku 3 (J 970416 V1.001)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Atlus
+hanagumi|Sakura Taisen - Hanagumi Taisen Columns (J 971007 V1.010)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+introdon|Karaoke Quiz Intro Don Don! (J 960213 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Success/Sunsoft
+kiwames|Pro Mahjong Kiwame S (J 951020 V1.208)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Athena
+magzun|Magical Zunou Power (J 961031 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+maruchan|Maru-Chan de Goo! (J 971216 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega/Toyosuisan
+mausuke|Mausuke no Ojama the World (J 960314 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Data East
+micrombc|Microman Battle Charge (J 990326 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+myfairld|Virtual Mahjong 2 - My Fair Lady (J 980608 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Micronet
+nameclub|Name Club (J 960315 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+nclubdis|Name Club Disney (J 980614 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+nclubv2|Name Club Ver.2 (J 960315 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+nclubv3|Name Club Ver.3 (J 970723 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+nclubv4|Name Club Ver.4 (J 971202 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+othellos|Othello Shiyouyo (J 980423 V1.002)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Success
+patocar|Hashire Patrol Car (J 990326 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+pblbeach|Pebble Beach - The Great Shot (JUE 950913 V0.990)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|T&E Soft
+pckobe99|Print Club 2 Kobe Luminaire '99 (Print Club Custom 3) (J 991203 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclb2elk|Print Club 2 Earth Limited Kobe (Print Club Custom) (J 970808 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclove|Print Club LoveLove (J 970421 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclove2|Print Club LoveLove Ver 2 (J 970825 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub2|Print Club 2 (U 970921 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub26w|Print Club 2 Vol. 6 Winter (J 961210 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub26wa|Print Club 2 Vol. 6 Winter (J 970121 V1.200)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|pclub26w|preliminary|Atlus
+pclub27s|Print Club 2 Vol. 7 Spring (J 970313 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub2fc|Print Club 2 Felix The Cat (Rev. A) (J 970415 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub2kc|Print Club Kome Kome Club (J 970203 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub2pe|Print Club 2 Pepsiman (J 970618 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub2pf|Print Club 2 Puffy (J V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub2v3|Print Club 2 Vol. 3 (U 990310 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub2wb|Print Club 2 Warner Bros (J 970228 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclubol|Print Club Olive (J 980717 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclubor|Print Club Goukakenran (J 991104 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclubpok|Print Club Pokemon B (U 991126 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclubyo2|Print Club Yoshimoto V2 (J 970422 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pcpooh2|Print Club Winnie-the-Pooh Vol. 2 (J 971218 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pcpooh3|Print Club Winnie-the-Pooh Vol. 3 (J 980406 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prc28su|Print Club 2 Vol. 8 Summer (J 970616 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prc297wi|Print Club 2 '97 Winter Ver (J 971017 V1.100, set 1)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prc297wia|Print Club 2 '97 Winter Ver (J 971017 V1.100, set 2)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|prc297wi|preliminary|Atlus
+prc298au|Print Club 2 '98 Autumn Ver (J 980827 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prc298sp|Print Club 2 '98 Spring Ver (J 971017 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prc298su|Print Club 2 '98 Summer Ver (J 980603 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prc29au|Print Club 2 Vol. 9 Autumn (J V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prc2ksu|Print Club 2 2000 Summer (J 000509 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prikura|Princess Clara Daisakusen (J 960910 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Atlus
+puyosun|Puyo Puyo Sun (J 961115 V0.001)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Compile
+rsgun|Radiant Silvergun (JUET 980523 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Treasure
+sackids|Soreyuke Anpanman Crayon Kids (J 001026 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+sandor|Puzzle & Action: Sando-R (J 951114 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+sanjeon|DaeJeon! SanJeon SuJeon (AJTUE 990412 V1.000)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|sasissu|imperfect|Deniam/Sega
+sasissu|Taisen Tanto-R Sashissu!! (J 980216 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+seabass|Sea Bass Fishing (JUET 971110 V0.001)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|A wave inc./Able
+shanhigw|Shanghai - The Great Wall / Shanghai Triple Threat (JUE 950623 V1.005)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Activision/Sunsoft
+shienryu|Shienryu (JUET 961226 V1.000)|parent|sega/stv.cpp|270|352|224|59.764802|stvbios||imperfect|Warashi
+skychal|Sky Challenger (J 000406 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+smleague|Super Major League (U 960108 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+sokyugrt|Soukyugurentai / Terra Diver (JUET 960821 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Eighting/Raizing
+sss|Steep Slope Sliders (JUET 981110 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Capcom/Cave/Victor Interactive Software
+stress|Stress Busters (J 981020 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+stvbios|ST-V BIOS|bios|sega/stv.cpp|0|352|224|59.764802||||Sega
+suikoenb|Suiko Enbu / Outlaws of the Lost Dynasty (JUETL 950314 V2.001)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Data East
+supgoal|Nerae! Super Goal (J 981218 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+tatacot|Tatacot (JA 951128 V1.000)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|critcrsh|imperfect|Sega
+techbowl|Technical Bowling (J 971212 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+thunt|Puzzle & Action: Treasure Hunt (JUET 970901 V2.00E)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|sandor|imperfect|Sega
+thuntk|Puzzle & Action: BoMulEul Chajara (JUET 970125 V2.00K)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|sandor|imperfect|Deniam/Sega
+twcup98|Tecmo World Cup '98 (JUET 980410 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Tecmo
+twsoc98|Tecmo World Soccer '98 (JUET 980410 V1.000)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|twcup98|preliminary|Tecmo
+vfkids|Virtua Fighter Kids (JUET 960319 V0.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+vfremix|Virtua Fighter Remix (JUETBKAL 950428 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+vmahjong|Virtual Mahjong (J 961214 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Micronet
+wasafari|Wanpaku Safari (J 981109 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+winterht|Winter Heat (JUET 971012 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+yattrmnp|Yatterman Plus (J 981006 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+znpwfv|Zen Nippon Pro-Wrestling Featuring Virtua (J 971123 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+znpwfvt|Zen Nippon Pro-Wrestling Featuring Virtua (T 971123 V1.000)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|znpwfv|imperfect|Sega
diff --git a/package/arcade-dats/precompiled/stv-1.32.1.lst.manufacturers b/package/arcade-dats/precompiled/stv-1.32.1.lst.manufacturers
new file mode 100644
index 0000000000000000000000000000000000000000..894579c5a637f5c1083dd79c282a04b366e938ec
--- /dev/null
+++ b/package/arcade-dats/precompiled/stv-1.32.1.lst.manufacturers
@@ -0,0 +1 @@
+1 - manufacter (1)2 - Sunsoft (3)3 - Sega (44)4 - Acclaim (1)5 - Takara (1)6 - Success (5)7 - Altron (2)8 - Tecmo (3)9 - Sai-Mate (1)10 - Capcom (3)11 - Daiki (1)12 - FCF (1)13 - Atlus (30)14 - Athena (1)15 - Toyosuisan (1)16 - Data East (2)17 - Micronet (2)18 - T&E Soft (1)19 - Compile (1)20 - Treasure (1)21 - Deniam (2)22 - A wave inc. (1)23 - Able (1)24 - Activision (1)25 - Warashi (1)26 - Eighting (1)27 - Raizing (1)28 - Cave (1)29 - Victor Interactive Software (1)
\ No newline at end of file
diff --git a/package/arcade-dats/precompiled/stv-1.32.1.lst.original b/package/arcade-dats/precompiled/stv-1.32.1.lst.original
new file mode 100644
index 0000000000000000000000000000000000000000..5a2974f35fb947863f48d155d42b528397596e83
--- /dev/null
+++ b/package/arcade-dats/precompiled/stv-1.32.1.lst.original
@@ -0,0 +1,103 @@
+name|description|type|sourcefile|rotate|width|height|refresh|bios|parent|status|manufacter
+astrass|Astra SuperStars (J 980514 V1.002)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sunsoft
+bakubaku|Baku Baku Animal (J 950407 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+batmanfr|Batman Forever (JUE 960507 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Acclaim
+choroqhr|Choro Q Hyper Racing 5 (J 981230 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega / Takara
+colmns97|Columns '97 (JET 961209 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+cotton2|Cotton 2 (JUET 970902 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Success
+cottonbm|Cotton Boomerang (JUET 980709 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Success
+critcrsh|Critter Crusher (EA 951204 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+danchih|Danchi de Hanafuda (J 990607 V1.400)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Altron (Tecmo license)
+danchiq|Danchi de Quiz: Okusan Yontaku Desuyo! (J 001128 V1.200)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Altron
+decathlt|Decathlete (JUET 960709 V1.001)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+decathlto|Decathlete (JUET 960424 V1.000)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|decathlt|preliminary|Sega
+dfeverg|Dancing Fever Gold (J 000821 V2.001)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+diehard|Die Hard Arcade (UET 960515 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+dnmtdeka|Dynamite Deka (J 960515 V1.000)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|diehard|imperfect|Sega
+ejihon|Ejihon Tantei Jimusho (J 950613 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+elandore|Touryuu Densetsu Elan-Doree / Elan Doree - Legend of Dragoon (JUET 980922 V1.006)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sai-Mate
+fanzonem|Fantasy Zone (medal game, REV.A) (J 990202 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+ffreveng|Final Fight Revenge / Final Revenge (JUET 990930 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Capcom
+ffrevng10|Final Fight Revenge / Final Revenge (JUET 990714 V1.000)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|ffreveng|imperfect|Capcom
+fhboxers|Funky Head Boxers (JUETBKAL 951218 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+findlove|Zenkoku Seifuku Bishoujo Grand Prix Find Love (J 971212 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Daiki / FCF
+finlarch|Final Arch (J 950714 V1.001)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|smleague|preliminary|Sega
+gaxeduel|Golden Axe - The Duel (JUETL 950117 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+grdforce|Guardian Force (JUET 980318 V0.105)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Success
+groovef|Groove on Fight - Gouketsuji Ichizoku 3 (J 970416 V1.001)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Atlus
+hanagumi|Sakura Taisen - Hanagumi Taisen Columns (J 971007 V1.010)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+introdon|Karaoke Quiz Intro Don Don! (J 960213 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sunsoft / Success
+kiwames|Pro Mahjong Kiwame S (J 951020 V1.208)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Athena
+magzun|Magical Zunou Power (J 961031 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+maruchan|Maru-Chan de Goo! (J 971216 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega / Toyosuisan
+mausuke|Mausuke no Ojama the World (J 960314 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Data East
+micrombc|Microman Battle Charge (J 990326 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+myfairld|Virtual Mahjong 2 - My Fair Lady (J 980608 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Micronet
+nameclub|Name Club (J 960315 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+nclubdis|Name Club Disney (J 980614 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+nclubv2|Name Club Ver.2 (J 960315 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+nclubv3|Name Club Ver.3 (J 970723 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+nclubv4|Name Club Ver.4 (J 971202 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+othellos|Othello Shiyouyo (J 980423 V1.002)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Success
+patocar|Hashire Patrol Car (J 990326 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+pblbeach|Pebble Beach - The Great Shot (JUE 950913 V0.990)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|T&E Soft
+pckobe99|Print Club 2 Kobe Luminaire '99 (Print Club Custom 3) (J 991203 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclb2elk|Print Club 2 Earth Limited Kobe (Print Club Custom) (J 970808 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclove|Print Club LoveLove (J 970421 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclove2|Print Club LoveLove Ver 2 (J 970825 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub2|Print Club 2 (U 970921 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub26w|Print Club 2 Vol. 6 Winter (J 961210 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub26wa|Print Club 2 Vol. 6 Winter (J 970121 V1.200)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|pclub26w|preliminary|Atlus
+pclub27s|Print Club 2 Vol. 7 Spring (J 970313 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub2fc|Print Club 2 Felix The Cat (Rev. A) (J 970415 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub2kc|Print Club Kome Kome Club (J 970203 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub2pe|Print Club 2 Pepsiman (J 970618 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub2pf|Print Club 2 Puffy (J V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub2v3|Print Club 2 Vol. 3 (U 990310 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclub2wb|Print Club 2 Warner Bros (J 970228 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclubol|Print Club Olive (J 980717 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclubor|Print Club Goukakenran (J 991104 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclubpok|Print Club Pokemon B (U 991126 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pclubyo2|Print Club Yoshimoto V2 (J 970422 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pcpooh2|Print Club Winnie-the-Pooh Vol. 2 (J 971218 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+pcpooh3|Print Club Winnie-the-Pooh Vol. 3 (J 980406 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prc28su|Print Club 2 Vol. 8 Summer (J 970616 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prc297wi|Print Club 2 '97 Winter Ver (J 971017 V1.100, set 1)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prc297wia|Print Club 2 '97 Winter Ver (J 971017 V1.100, set 2)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|prc297wi|preliminary|Atlus
+prc298au|Print Club 2 '98 Autumn Ver (J 980827 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prc298sp|Print Club 2 '98 Spring Ver (J 971017 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prc298su|Print Club 2 '98 Summer Ver (J 980603 V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prc29au|Print Club 2 Vol. 9 Autumn (J V1.100)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prc2ksu|Print Club 2 2000 Summer (J 000509 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Atlus
+prikura|Princess Clara Daisakusen (J 960910 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Atlus
+puyosun|Puyo Puyo Sun (J 961115 V0.001)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Compile
+rsgun|Radiant Silvergun (JUET 980523 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Treasure
+sackids|Soreyuke Anpanman Crayon Kids (J 001026 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+sandor|Puzzle & Action: Sando-R (J 951114 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+sanjeon|DaeJeon! SanJeon SuJeon (AJTUE 990412 V1.000)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|sasissu|imperfect|Sega / Deniam
+sasissu|Taisen Tanto-R Sashissu!! (J 980216 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+seabass|Sea Bass Fishing (JUET 971110 V0.001)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|A wave inc. (Able license)
+shanhigw|Shanghai - The Great Wall / Shanghai Triple Threat (JUE 950623 V1.005)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sunsoft / Activision
+shienryu|Shienryu (JUET 961226 V1.000)|parent|sega/stv.cpp|270|352|224|59.764802|stvbios||imperfect|Warashi
+skychal|Sky Challenger (J 000406 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+smleague|Super Major League (U 960108 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+sokyugrt|Soukyugurentai / Terra Diver (JUET 960821 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Raizing / Eighting
+sss|Steep Slope Sliders (JUET 981110 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Capcom / Cave / Victor Interactive Software
+stress|Stress Busters (J 981020 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+stvbios|ST-V BIOS|bios|sega/stv.cpp|0|352|224|59.764802||||Sega
+suikoenb|Suiko Enbu / Outlaws of the Lost Dynasty (JUETL 950314 V2.001)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Data East
+supgoal|Nerae! Super Goal (J 981218 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+tatacot|Tatacot (JA 951128 V1.000)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|critcrsh|imperfect|Sega
+techbowl|Technical Bowling (J 971212 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+thunt|Puzzle & Action: Treasure Hunt (JUET 970901 V2.00E)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|sandor|imperfect|Sega
+thuntk|Puzzle & Action: BoMulEul Chajara (JUET 970125 V2.00K)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|sandor|imperfect|Sega / Deniam
+twcup98|Tecmo World Cup '98 (JUET 980410 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Tecmo
+twsoc98|Tecmo World Soccer '98 (JUET 980410 V1.000)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|twcup98|preliminary|Tecmo
+vfkids|Virtua Fighter Kids (JUET 960319 V0.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+vfremix|Virtua Fighter Remix (JUETBKAL 950428 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+vmahjong|Virtual Mahjong (J 961214 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Micronet
+wasafari|Wanpaku Safari (J 981109 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+winterht|Winter Heat (JUET 971012 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+yattrmnp|Yatterman Plus (J 981006 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||preliminary|Sega
+znpwfv|Zen Nippon Pro-Wrestling Featuring Virtua (J 971123 V1.000)|parent|sega/stv.cpp|0|352|224|59.764802|stvbios||imperfect|Sega
+znpwfvt|Zen Nippon Pro-Wrestling Featuring Virtua (T 971123 V1.000)|clone|sega/stv.cpp|0|352|224|59.764802|stvbios|znpwfv|imperfect|Sega
diff --git a/package/arcade-dats/stv.xslt b/package/arcade-dats/stv.xslt
new file mode 100755
index 0000000000000000000000000000000000000000..c5f46ec31dd1650362d62b74363175dbb489cdde
--- /dev/null
+++ b/package/arcade-dats/stv.xslt
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Naomi2
+
+
+ Naomi2
+
+
+ Recalbox
+
+
+ https://www.recalbox.com/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/package/arcade-dats/updater.py b/package/arcade-dats/updater.py
index fd6a874bf24165f4ad74f0287cf90d10f0768fbb..89ddb95d867e6a3205ee96b2e716d55e501d4c2c 100755
--- a/package/arcade-dats/updater.py
+++ b/package/arcade-dats/updater.py
@@ -61,6 +61,7 @@ class Updater:
"supermodel" : SystemDescriptor("supermodel" , "supermodel" , ["supermodel"] , "", []),
"flycast" : SystemDescriptor("flycast" , "libretro-flycast" , ["naomi", "naomigd", "atomiswave"], "", []),
"flycast-next" : SystemDescriptor("flycast-next" , "libretro-flycast-next" , ["naomi", "naomigd", "atomiswave", "naomi2"], "", []),
+ "mednafen" : SystemDescriptor("mednafen" , "mednafen" , ["stv"], "", []),
}
def execute(self):
diff --git a/package/mednafen/0001-mednafen-add-switchres.patch b/package/mednafen/0001-mednafen-add-switchres.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c7d0a5a84b8a4d2f38907f3f647035419ba2f5f7
--- /dev/null
+++ b/package/mednafen/0001-mednafen-add-switchres.patch
@@ -0,0 +1,1558 @@
+diff --git a/src/drivers/main.cpp b/src/drivers/main.cpp
+index fe6b7f9..e813cd0 100644
+--- a/src/drivers/main.cpp
++++ b/src/drivers/main.cpp
+@@ -258,6 +258,7 @@ void MakeDebugSettings(void)
+ }
+
+ static MThreading::Thread* GameThread;
++static MThreading::Thread* SwitchThread; //psakhis - sniffer changes
+
+ static struct
+ {
+@@ -273,6 +274,8 @@ static std::atomic_int VTReady;
+ static unsigned VTRotated = 0;
+ static bool VTSSnapshot = false;
+ static MThreading::Sem* VTWakeupSem;
++static MThreading::Sem* STWakeupSem; //psakhis - semaphore when change resolution occurs on main loop
++static MThreading::Sem* AUWakeupSem; //psakhis - semaphore when audio buffer is ready
+ static MThreading::Mutex *VTMutex = NULL, *EVMutex = NULL;
+ static MThreading::Mutex *StdoutMutex = NULL;
+
+@@ -373,12 +376,14 @@ static BOOL CALLBACK ETWCB(HWND hwnd, LPARAM lParam)
+ return TRUE;
+ }
+ */
++
+ static void HandleConsoleMadness(void)
+ {
+ decltype(GetConsoleWindow)* p_GetConsoleWindow = (decltype(GetConsoleWindow)*)GetProcAddress(GetModuleHandleA("kernel32.dll"), "GetConsoleWindow");
+
+ if(!p_GetConsoleWindow)
+ return;
++
+ //
+ //
+ HWND cwin = p_GetConsoleWindow();
+@@ -397,9 +402,14 @@ static void HandleConsoleMadness(void)
+ ShowWindow(cwin, SW_HIDE);
+ }
+ }
++ else //psakhis
++ {
++ RedirectSTDxxx();
++ } //end psakhis
+ }
+ else if(!RedirectSTDxxx())
+ {
++
+ if(AllocConsole())
+ {
+ HANDLE hand_stdout, hand_stderr;
+@@ -1034,9 +1044,18 @@ static void CloseGame(void) MDFN_COLD;
+ //
+ //
+ static unsigned volatile NeedVideoSync = false;
++//SLK
++static volatile unsigned NeedResolutionChange = 0; // trigger to switch window/fullscreen resolution
++//SLK end
+ static int volatile NeedExitNow = false; // Set 'true' in various places, including signal handler.
+ //
+ //
++//psakhis
++static volatile unsigned NeedResolutionRefresh = 0; // trigger refresh video blitter on main thread if resolution changes
++static int SwitchLoop(void *arg); //sniffer changes
++int volatile SwitchThreadRun = 0;
++//psakhis end
++
+ static bool MDFND_Update(int WhichVideoBuffer, int16 *Buffer, int Count);
+ static void GameThread_HandleEvents(void);
+ static int GameLoop(void *arg);
+@@ -1134,7 +1153,7 @@ static int LoadGame(const char *force_module, const char *path)
+
+ // Load state before network connection.
+ // TODO: Move into core, MDFNI_LoadGame()
+- if(MDFN_GetSettingB("autosave"))
++ if(MDFN_GetSettingB("autosave"))
+ {
+ if(!MDFNI_LoadState(NULL, "mca"))
+ {
+@@ -1202,6 +1221,18 @@ static void CloseGame(void)
+ //
+ //
+ //
++ //psakhis
++ SwitchThreadRun = 0;
++
++ MThreading::Sem_Post(STWakeupSem); //close thread safetly
++ MThreading::Sem_Post(AUWakeupSem); //close thread safetly
++ if(SwitchThread)
++ {
++ MThreading::Thread_Wait(SwitchThread, NULL);
++ SwitchThread = NULL;
++ }
++ //psakhis end
++
+ if(qtrecfn) // Needs to be before MDFNI_Closegame() for now
+ MDFNI_StopAVRecord();
+
+@@ -1377,6 +1408,14 @@ static int GameLoop(void *arg)
+ else
+ MDFNI_Emulate(&espec);
+
++ //psakhis: activate change on switch thread
++ if (!NeedResolutionChange && resolution_to_change && (use_native_resolution || use_super_resolution || use_switchres)) {
++ NeedResolutionChange++; //redundant only if not changing
++ MThreading::Sem_Post(STWakeupSem);
++ resolution_to_change = false;
++ }
++ //psakhis end
++
+ if(MDFN_UNLIKELY(StateSLSTest))
+ {
+ MemoryStream orig_state(524288);
+@@ -1466,6 +1505,32 @@ static int GameLoop(void *arg)
+ }
+
+
++//psakhis: implements switches on a separate thread with semaphore activator from main loop thread
++static int SwitchLoop(void *arg)
++{
++ while(SwitchThreadRun) {
++ //printf("SWITCH - Sleeping - Waiting for the next change\n");
++ if (MThreading::Sem_Wait(STWakeupSem)) { //activator semaphore from main loop
++ if(MDFN_LIKELY(NeedResolutionChange) && !MDFN_LIKELY(NeedResolutionRefresh)) //redundant, safetly close
++ {
++ if ((current_game_resolution_w != resolution_to_change_w) || (current_game_resolution_h != resolution_to_change_h) || (current_game_rotated != CurGame->rotated)) {
++ if (current_game_rotated != CurGame->rotated)
++ MDFN_printf(_("SWITCH - Activated - Rotate detected\n"));
++ MDFN_printf(_("SWITCH - Activated - Current resolution %dx%d - Changing to %dx%d@%f\n"),current_game_resolution_w,current_game_resolution_h,resolution_to_change_w,resolution_to_change_h,resolution_to_change_vfreq);
++ NeedResolutionRefresh = Video_ChangeResolution(CurGame,resolution_to_change_w,resolution_to_change_h,resolution_to_change_vfreq);
++ }
++ else {
++ //printf("SWITCH - Activated - Bypassed from %dx%d@%f\n",resolution_to_change_w,resolution_to_change_h,resolution_to_change_vfreq);
++ NeedResolutionChange--;
++ }
++ }
++ }
++ }
++
++ return 1;
++}
++//end psakhis
++
+ std::string GetBaseDirectory(void)
+ {
+ #ifdef WIN32
+@@ -2012,6 +2077,16 @@ static bool MainVideoLoop(void)
+ NeedVideoSync = false; // same
+ }
+
++ // SLK + psakhis
++ if(MDFN_LIKELY(NeedResolutionChange) && MDFN_LIKELY(NeedResolutionRefresh))
++ {
++ printf("MAIN - VIDEO - Refresh blitter after a resolution change\n");
++ Video_BlitRefresh();
++ NeedResolutionChange--;
++ NeedResolutionRefresh--;
++ }
++ // SLK + psakhis END
++
+ if(NeededWMInputBehavior_Dirty)
+ {
+ Video_SetWMInputBehavior(NeededWMInputBehavior);
+@@ -2098,6 +2173,14 @@ static bool LoadAndRunGame(const char* force_module, const char* path)
+
+ if(vt_affinity)
+ MThreading::Thread_SetAffinity(NULL, vt_affinity);
++
++ //psakhis: create thread with semaphore for switches
++ SwitchThreadRun = 1;
++ SwitchThread = MThreading::Thread_Create(SwitchLoop, NULL, "MDFN Switch");
++
++ if(vt_affinity)
++ MThreading::Thread_SetAffinity(SwitchThread, vt_affinity);
++ //psakhis end
+ //
+ //
+ //
+@@ -2442,6 +2525,7 @@ int main(int argc, char *argv[])
+ EVMutex = MThreading::Mutex_Create();
+
+ VTWakeupSem = MThreading::Sem_Create();
++ STWakeupSem = MThreading::Sem_Create(); //psakhis: semaphore for push changes changes from mainloop
+ //
+ Video_Init();
+ //
+diff --git a/src/drivers/video.cpp b/src/drivers/video.cpp
+index edeff4e..e3d0e1c 100644
+--- a/src/drivers/video.cpp
++++ b/src/drivers/video.cpp
+@@ -47,6 +47,12 @@
+ #include "2xSaI.h"
+ #endif
+
++#include //psakhis
++#include //psakhis
++#include //psakhis
++#include //psakhis
++#include //psakhis
++
+ class SDL_to_MDFN_Surface_Wrapper : public MDFN_Surface
+ {
+ public:
+@@ -104,6 +110,20 @@ enum
+ VDRIVER__COUNT
+ };
+
++// SLK
++static int _resolution_switch;
++enum
++{
++ RES_STATIC = 0,
++ RES_NATIVE = 1,
++ RES_SUPER = 2,
++ RES_SWITCHRES = 3,
++ RES_MISTER = 4//psakhis
++};
++// SLK - end
++
++unsigned char retSR; //psakhis
++
+ enum
+ {
+ NTVB_NONE = 0,
+@@ -175,6 +195,19 @@ static const MDFNSetting_EnumList GLFormat_List[] =
+ { NULL, 0 },
+ };
+
++// SLK - custom setting
++static const MDFNSetting_EnumList Resolution_Switch[] =
++{
++ // Legacy:
++ { "0", RES_STATIC},
++ { "native", RES_NATIVE, "Native resolutions", gettext_noop("Use emulated system native resolution for output") },
++ { "super", RES_SUPER, "Super resolutions", gettext_noop("Use super resolutions for output") },
++ { "switchres", RES_SWITCHRES, "Switchres 2", gettext_noop("Use switchres 2 for output") }, //psakhis
++ { "mister", RES_MISTER, "MiSTer", gettext_noop("Use MiSTer for output") },
++ { NULL, 0 }
++};
++// SLK - end
++
+ static const MDFNSetting GlobalVideoSettings[] =
+ {
+ { "video.driver", MDFNSF_NOFLAGS, gettext_noop("Video output driver."), NULL, MDFNST_ENUM, "default", NULL, NULL, NULL, NULL, VDriver_List },
+@@ -195,6 +228,10 @@ static const MDFNSetting GlobalVideoSettings[] =
+
+ { "video.disable_composition", MDFNSF_NOFLAGS, gettext_noop("Attempt to disable desktop composition."), gettext_noop("Currently, this setting only has an effect on Windows Vista and Windows 7(and probably the equivalent server versions as well)."), MDFNST_BOOL, "1" },
+
++ // SLK - admit new parameter
++ { "video.resolution_switch", MDFNSF_NOFLAGS, gettext_noop("Video resolution switch (0, native, super or switchres)."), NULL, MDFNST_ENUM, "0", NULL, NULL, NULL, NULL, Resolution_Switch},
++ // SLK - end
++
+ { NULL }
+ };
+
+@@ -447,6 +484,7 @@ static SDL_Window* window = NULL;
+ static SDL_GLContext glcontext = NULL;
+ static SDL_Surface *screen = NULL;
+ static OpenGL_Blitter *ogl_blitter = NULL;
++static OpenGL_Blitter *ogl_blitter_gunlight = NULL; //psakhis
+ static SDL_Surface *IconSurface=NULL;
+
+ static int32 screen_w, screen_h;
+@@ -473,6 +511,10 @@ static MDFN_PixelFormat game_pf; // Pixel format for game texture/surface
+ static MDFN_PixelFormat osd_pf; // Pixel format for OSD textures/surfaces
+ static MDFN_PixelFormat emu_pf;
+
++// SLK SR
++double sr_x_scale = 1;
++double sr_y_scale = 1;
++
+ static void GrabbyGoAway(void);
+
+ static INLINE void MarkNeedBBClear(void)
+@@ -512,6 +554,11 @@ static void SyncCleanup(void)
+
+ void Video_Kill(void)
+ {
++ if (use_switchres) { //psakhis
++ sr_deinit();
++ printf(" VIDEO - Video_Kill - SWITCHRES unloaded \n"); //psakhis
++ }
++
+ SyncCleanup();
+
+ if(window)
+@@ -676,9 +723,19 @@ static bool GenerateFullscreenDestRect(void)
+ }
+ }
+ else
+- {
+- exs = video_settings.xscalefs;
+- eys = video_settings.yscalefs;
++ { //psakhis
++ if (use_native_resolution || use_switchres || use_super_resolution)
++ {
++ exs = sr_x_scale;
++ eys = sr_y_scale;
++ if(rotated == MDFN_ROTATE90 || rotated == MDFN_ROTATE270)
++ std::swap(exs, eys);
++ }
++ else //static
++ {
++ exs = video_settings.xscalefs;
++ eys = video_settings.yscalefs;
++ }
+
+ screen_dest_rect.w = floor(0.5 + VideoGI->nominal_width * exs);
+ screen_dest_rect.h = floor(0.5 + VideoGI->nominal_height * eys);
+@@ -798,6 +855,263 @@ static ModeInfo SetMode(const ModeInfo& mode)
+ SetMode(new_mode);
+ #endif
+
++
++// SLK
++
++//psakhis: WIN32 flush modes to driver
++void Video_Switchres_Flush(const char *shortname, double vfreq)
++{
++ printf(" VIDEO - Video_Switchres_Flush - Flushing modes core(%s), refresh(%f)\n", shortname, vfreq);
++ int pal = 0;
++ if (vfreq > 0 && vfreq < 55)
++ pal = 1;
++ sr_mode swres_result;
++ int sr_mode_flags = SR_MODE_DONT_FLUSH;
++ if (!strcmp(shortname, "ss")) {
++ if (pal) {
++ retSR = sr_add_mode(320, 288, vfreq, sr_mode_flags, &swres_result);
++ if (swres_result.width == 320) {
++ retSR = sr_add_mode(352, 288, vfreq, sr_mode_flags, &swres_result);
++ retSR = sr_add_mode(640, 288, vfreq, sr_mode_flags, &swres_result);
++ retSR = sr_add_mode(704, 288, vfreq, sr_mode_flags, &swres_result);
++ }
++ sr_mode_flags = SR_MODE_INTERLACED | SR_MODE_DONT_FLUSH;
++ retSR = sr_add_mode(320, 576, vfreq, sr_mode_flags, &swres_result);
++ if (swres_result.width == 320) {
++ retSR = sr_add_mode(352, 576, vfreq, sr_mode_flags, &swres_result);
++ retSR = sr_add_mode(640, 576, vfreq, sr_mode_flags, &swres_result);
++ retSR = sr_add_mode(704, 576, vfreq, sr_mode_flags, &swres_result);
++ }
++ }
++ else {
++ retSR = sr_add_mode(320, 240, vfreq, sr_mode_flags, &swres_result);
++ if (swres_result.width == 320) {
++ retSR = sr_add_mode(352, 240, vfreq, sr_mode_flags, &swres_result);
++ retSR = sr_add_mode(640, 240, vfreq, sr_mode_flags, &swres_result);
++ retSR = sr_add_mode(704, 240, vfreq, sr_mode_flags, &swres_result);
++ }
++ sr_mode_flags = SR_MODE_INTERLACED | SR_MODE_DONT_FLUSH;
++ retSR = sr_add_mode(320, 480, vfreq, sr_mode_flags, &swres_result);
++ if (swres_result.width == 320) {
++ retSR = sr_add_mode(352, 480, vfreq, sr_mode_flags, &swres_result);
++ retSR = sr_add_mode(640, 480, vfreq, sr_mode_flags, &swres_result);
++ retSR = sr_add_mode(704, 480, vfreq, sr_mode_flags, &swres_result);
++ }
++ }
++ }
++ retSR = sr_flush();
++ printf(" VIDEO - Video_Switchres_Flush - Flushing applied\n");
++}
++//psakhis end
++
++//SLK + psakhis
++void Video_SetSwitchres(int w, int h, double vfreq, int orientation)
++{
++ printf(" VIDEO - Video_SetSwitchres - called for %dx%d@%f (%d) \n",w,h,vfreq,orientation);
++ sr_mode swres_result;
++ int sr_mode_flags = 0;
++
++ if (h > 288)
++ sr_mode_flags = SR_MODE_INTERLACED;
++
++ if (orientation == MDFN_ROTATE90 || orientation == MDFN_ROTATE270)
++ sr_mode_flags = sr_mode_flags | SR_MODE_ROTATED;
++
++ retSR = sr_add_mode(w, h, vfreq, sr_mode_flags, &swres_result);
++ //retSR = sr_switch_to_mode(w, h, vfreq, interlace, &swres_result);
++ retSR = sr_set_mode(swres_result.id);
++ printf(" VIDEO - Video_SetSwitchres - result %dx%d@%f - x=%.4f y=%.4f stretched(%d)\n", swres_result.width, swres_result.height,swres_result.vfreq, swres_result.x_scale, swres_result.y_scale, swres_result.is_stretched);
++ printf(" VIDEO - Video_SetSwitchres - sr_switch_to_mode return: %u\n", (unsigned int)retSR);
++
++ if (retSR && swres_result.width >= w && swres_result.height >= h) {
++ if (video_settings.fullscreen)
++ { //fullscreen
++ sr_x_scale = swres_result.x_scale;
++ sr_y_scale = swres_result.y_scale;
++ }
++ else
++ { //windowed (no scale)
++ sr_x_scale = 1;
++ sr_x_scale = 1;
++ }
++ //update new resolution
++ video_settings.xres = swres_result.width;
++ video_settings.yres = swres_result.height;
++ }
++}
++//SLK + psakhis end
++
++//SLK + psakhis
++int Video_ChangeResolution(MDFNGI *gi, int w, int h, double vfreq)
++{
++ MDFN_printf(_(" VIDEO - Video_ChangeResolution - Requested video mode: %dx%d@%f\n"), w, h, vfreq);
++
++ //psakhis
++ if (use_super_resolution && h == current_game_resolution_h) { //no switch requeried
++ double sr_x_scale_before_switch = sr_x_scale;
++ int current_game_rotated_before_switch = current_game_rotated;
++ sr_x_scale = (2560.0 / w); //refresh x scale
++ current_game_resolution_w = w;
++ current_game_rotated = gi->rotated;
++ MDFN_printf(_(" VIDEO - Video_ChangeResolution - Super resolution change bypassed. Only apply scaling scale (%.4f,%.4f) \n"),sr_x_scale,sr_y_scale);
++ MarkNeedBBClear();
++ return (sr_x_scale_before_switch != sr_x_scale || current_game_rotated_before_switch != current_game_rotated);
++ }
++ //end psakhis
++
++ // WINDOW no switch resolutions
++ if(video_settings.fullscreen == 0)
++ {
++ MDFN_printf(_(" VIDEO - Video_ChangeResolution - Video mode: WINDOWED\n"));
++ current_game_resolution_w = w;
++ current_game_resolution_h = h;
++ MarkNeedBBClear();
++
++ if(rotated == MDFN_ROTATE90 || rotated == MDFN_ROTATE270) //ST-V
++ SDL_SetWindowSize(window, h, w);
++ else
++ SDL_SetWindowSize(window, w, h);
++
++ int x, y;
++ SDL_GetWindowPosition(window, &x, &y);
++ SDL_PumpEvents();
++ SDL_SetWindowPosition(window, x, y);
++
++ sr_x_scale = 1;
++ sr_y_scale = 1;
++ }
++ else
++ // FULLSCREEN
++ {
++ MDFN_printf(_(" VIDEO - Video_ChangeResolution - Video mode: FULLSCREEN\n"));
++ if (use_switchres) //psakhis new method
++ {
++ double sr_x_scale_before_switch = sr_x_scale;
++ int current_game_rotated_before_switch = current_game_rotated;
++ int xres_before_switch = video_settings.xres;
++ Video_SetSwitchres(w, h, vfreq, gi->rotated);
++
++ if (video_settings.xres == xres_before_switch && h == current_game_resolution_h) { //no switch requiered
++ current_game_resolution_w = w;
++ current_game_rotated = gi->rotated;
++ MDFN_printf(_(" VIDEO - Video_ChangeResolution - Switchres resolution change bypassed. Only apply scaling scale (%.4f,%.4f) \n"),sr_x_scale,sr_y_scale);
++ MarkNeedBBClear();
++ return (sr_x_scale_before_switch != sr_x_scale || current_game_rotated_before_switch != current_game_rotated);
++ }
++ current_game_resolution_w = w;
++ current_game_resolution_h = h;
++ current_game_rotated = gi->rotated;
++ }
++ else
++ {
++ // Use good old NATIVE or SUPER switch resolution process
++ SDL_DisplayMode current;
++ SDL_DisplayMode mode;
++ SDL_DisplayMode trymode;
++ int displayIndex;
++
++ displayIndex = SDL_GetWindowDisplayIndex(window);
++ if(displayIndex < 0)
++ {
++ MDFN_printf(_(" VIDEO - Video_ChangeResolution - ERROR Could not get screen index: %s\n"), SDL_GetError());
++ return 0;
++ }
++ else
++ {
++ MDFN_printf(_(" VIDEO - Video_ChangeResolution - Screen index: %d\n"),displayIndex);
++ }
++
++ if(SDL_GetCurrentDisplayMode(displayIndex, ¤t) != 0)
++ {
++ MDFN_printf(_(" VIDEO - Video_ChangeResolution - Could not get display mode for video display %d: %s\n"), displayIndex, SDL_GetError());
++ }
++ else
++ {
++ MDFN_printf(_(" VIDEO - Video_ChangeResolution - Display #%d: Current display mode is %dx%dpx @ %dhz.\n"), displayIndex, current.w, current.h, current.refresh_rate);
++ if (use_super_resolution)
++ trymode.w = 2560;
++ else
++ trymode.w = w;
++ trymode.h = h;
++ trymode.refresh_rate = (int) vfreq;
++
++ if (SDL_GetClosestDisplayMode(displayIndex, &trymode, &mode) == NULL)
++ {
++ MDFN_printf(_(" VIDEO - Video_ChangeResolution - No suitable display mode was found, %s\n"),SDL_GetError());
++ }
++ else
++ {
++ //psakhis
++ sr_x_scale = (double) mode.w / w;
++ sr_y_scale = (double) mode.h / h;
++ video_settings.xres = mode.w;
++ video_settings.yres = mode.h;
++ current_game_resolution_w = w;
++ current_game_resolution_h = h;
++ current_game_rotated = rotated;
++ //end psakhis
++ MDFN_printf(_(" VIDEO - Video_ChangeResolution - Received: \t%dx%dpx @ %dhz ,scale (%.4f,%.4f)\n"), mode.w, mode.h, mode.refresh_rate,sr_x_scale,sr_y_scale);
++ // Use SDL video change function - may be slower
++ if(SDL_SetWindowDisplayMode(window, &mode) < 0)
++ {
++ MDFN_printf(_(" VIDEO - Video_ChangeResolution - ERROR - SDL_SetWindowDisplayMode: '%s'\n"), SDL_GetError());
++ }
++ }
++ }
++ }
++ }
++
++ // OSD D Rect - vertical offest
++ switch(h){
++ case 240:SMDRect.y = video_settings.yres - SMDRect.h - 18;
++ break;
++ case 288:SMDRect.y = video_settings.yres - SMDRect.h - 32;
++ break;
++ case 480:SMDRect.y = video_settings.yres - SMDRect.h - 32;
++ break;
++ case 576:SMDRect.y = video_settings.yres - SMDRect.h - 64;
++ break;
++ default: SMDRect.y = video_settings.yres - SMDRect.h - 64;
++ }
++ SMDRect.w = video_settings.xres; // OSD rect w
++
++ return 1;
++
++}
++// SLK + psakhis end
++
++//psakhis refresh blitter
++void Video_BlitRefresh()
++{
++ MarkNeedBBClear();
++ VideoGI->nominal_width = current_game_resolution_w;
++ if (current_game_resolution_h * 2 == VideoGI->nominal_height || current_game_resolution_h * 0.5 == VideoGI->nominal_height) //only changes between interlaced/progressive (to do clean hack)
++ VideoGI->nominal_height = current_game_resolution_h;
++
++ if (video_settings.fullscreen)
++ {
++ screen_w = video_settings.xres;
++ screen_h = video_settings.yres;
++ if (!GenerateFullscreenDestRect()) {
++ GenerateWindowedDestRect();
++ screen_w = screen_dest_rect.w;
++ screen_h = screen_dest_rect.h;
++ }
++ }
++ else
++ {
++ GenerateWindowedDestRect();
++ screen_w = screen_dest_rect.w;
++ screen_h = screen_dest_rect.h;
++ }
++ MDFN_printf(_(" VIDEO - Video_BlitRefresh - screen dest: %dx%d - %d,%d\n"), screen_dest_rect.w,screen_dest_rect.h,screen_dest_rect.x,screen_dest_rect.y);
++
++ if (ogl_blitter)
++ ogl_blitter->SetViewport(screen_w, screen_h);
++
++ MDFN_printf(_(" VIDEO - Video_BlitRefresh completed\n"));
++}
++
+ void Video_Sync(MDFNGI *gi)
+ {
+ MDFNI_printf(_("Initializing video...\n"));
+@@ -864,7 +1178,6 @@ void Video_Sync(MDFNGI *gi)
+ video_settings.shader_params.goat_slen = MDFN_GetSettingB(snp + "shader.goat.slen");
+ video_settings.shader_params.goat_fprog = MDFN_GetSettingB(snp + "shader.goat.fprog");
+ //
+-
+ video_settings.fullscreen = MDFN_GetSettingB("video.fs");
+ video_settings.fs_display = MDFN_GetSettingI("video.fs.display");
+ vdriver = MDFN_GetSettingI("video.driver");
+@@ -876,6 +1189,102 @@ void Video_Sync(MDFNGI *gi)
+
+ video_settings.shader = (ShaderType)MDFN_GetSettingI(snp + "shader");
+ video_settings.shader_str = MDFN_GetSettingS(snp + "shader");
++
++ // SLK - set video settings - disable some options in conflict with native resolution
++ _resolution_switch = MDFN_GetSettingI("video.resolution_switch");
++
++ if(_resolution_switch){
++ // Enable dynamic output resolution switch
++ MDFNI_printf(_("VIDEO - Video_Sync - Output video resolution swithing: ON\n"));
++ if(_resolution_switch == RES_NATIVE) // Native Res
++ {
++ use_native_resolution = true;
++ MDFN_printf(_(" VIDEO - Video_Sync - apply NATIVE resolution settings - set to %dx%d\n"),resolution_to_change_w,resolution_to_change_h);
++ video_settings.xres = resolution_to_change_w; // for fullscreen mode
++ video_settings.yres = resolution_to_change_h; // for windowed
++ }
++ if(_resolution_switch == RES_SUPER)
++ {
++ use_super_resolution = true;
++ MDFN_printf(_(" VIDEO - Video_Sync - apply SUPER resolution settings - set to 2560x%d\n"),resolution_to_change_h);
++ video_settings.xres = 2560; // for fullscreen mode
++ video_settings.yres = resolution_to_change_h; // for windowed
++ }
++ if(_resolution_switch == RES_SWITCHRES) // psakhis
++ {
++ use_switchres = true;
++ MDFN_printf(_(" VIDEO - Video_Sync - apply SWITCHRES resolution settings - set to %dx%d@%f\n"),resolution_to_change_w,resolution_to_change_h,resolution_to_change_vfreq);
++ MDFN_printf(_("Loading switchres.ini...\n"));
++ MDFN_printf("\n");
++ sr_init();
++ MDFN_printf("sr_get_version %s\n",sr_get_version());
++
++ //take care multi-monitor
++ if (video_settings.fs_display >= 0) {
++ const std::string sr_monitor = MDFN_GetSettingS("video.fs.display");
++ MDFN_printf(_("sr_init_disp with video_settings.fs_display \"%s\"...\n"), sr_monitor.c_str());
++ retSR=sr_init_disp(strcpy((char*)malloc(sr_monitor.length()+1), sr_monitor.c_str()),window);
++
++ }
++ else {
++ MDFN_printf(_("sr_init_disp auto with video_settings.fs_display -1...\n"));
++ retSR=sr_init_disp("auto",window);
++ }
++
++ //try system swithres.ini file
++ const std::string switchres_system_path = MDFN_MakeFName(MDFNMKF_PMCONFIG, 0, "switchres.ini").c_str();
++ MDFN_printf(_("Loading override switchres.ini from \"%s\"...\n"), switchres_system_path.c_str());
++ try {
++ FileStream fs_switchres_system_path(switchres_system_path, FileStream::MODE_READ);
++ sr_load_ini(strcpy((char*)malloc(switchres_system_path.length()+1), switchres_system_path.c_str()));
++ } catch(MDFN_Error& e) {
++ MDFN_printf(_(" Failed: Error opening file \"%s\"...\n"), switchres_system_path.c_str());
++ }
++ const std::string switchres_game_path = MDFN_MakeFName(MDFNMKF_PGCONFIG, 0, "switchres.ini").c_str();
++ MDFN_printf("\n");
++ MDFN_printf(_("Loading override switchres.ini from \"%s\"...\n"), switchres_game_path.c_str());
++ try {
++ FileStream fs_switchres_game_path(switchres_game_path, FileStream::MODE_READ);
++ sr_load_ini(strcpy((char*)malloc(switchres_game_path.length()+1), switchres_game_path.c_str()));
++ } catch(MDFN_Error& e) {
++ MDFN_printf(_(" Failed: Error opening file \"%s\"...\n"), switchres_game_path.c_str());
++ }
++ MDFN_printf("\n");
++ //end ini loadings
++
++ MDFN_printf(_(" VIDEO - Video_Sync - SWITCHRES loaded - %u\n"),(unsigned int)retSR);
++
++ video_settings.xres = 0; //sdl get desktop resolution - switch is delegated to switchres
++ video_settings.yres = 0; //sdl get desktop resolution - switch is delegated to switchres
++
++ /*int bfi = MDFN_GetSettingI("video.bfi"); //experimental no bypass
++ if (bfi > 0) {
++ video_settings.xres = resolution_to_change_w;
++ video_settings.yres = resolution_to_change_h;
++ }*/
++ }
++
++ current_game_resolution_w = resolution_to_change_w; // bypass next changes
++ current_game_resolution_h = resolution_to_change_h; // bypass next changes
++
++ VideoGI->nominal_width = current_game_resolution_w;
++ if (current_game_resolution_h * 2 == VideoGI->nominal_height || current_game_resolution_h * 0.5 == VideoGI->nominal_height) //only changes between interlaced/progressive (to do clean hack)
++ VideoGI->nominal_height = current_game_resolution_h;
++
++ //variables pixel perfect initialization
++ video_settings.xscale = 1;
++ video_settings.yscale = 1;
++ video_settings.xscalefs = 1;
++ video_settings.yscalefs = 1;
++ video_settings.videoip = 0;
++ //video_settings.shader = SHADER_NONE;
++ video_settings.stretch = 0;
++
++ rotated = 0; //ST-V Original hard
++ gi->rotated = rotated;
++ current_game_rotated = rotated;
++ }
++
+ //
+ //
+ if(0)
+@@ -900,6 +1309,7 @@ void Video_Sync(MDFNGI *gi)
+ if(screen_dest_rect.w > 16383 || screen_dest_rect.h > 16383)
+ throw MDFN_Error(0, _("Window size(%dx%d) is too large!"), screen_dest_rect.w, screen_dest_rect.h);
+
++if(!video_settings.fullscreen) { //psakhis
+ SDL_SetWindowFullscreen(window, 0);
+ SDL_PumpEvents();
+ SDL_SetWindowSize(window, screen_dest_rect.w, screen_dest_rect.h);
+@@ -911,7 +1321,7 @@ void Video_Sync(MDFNGI *gi)
+ SDL_PumpEvents();
+ SDL_ShowWindow(window);
+ SDL_PumpEvents();
+-
++}
+ //
+ if(0)
+ {
+@@ -1113,6 +1523,12 @@ void Video_Sync(MDFNGI *gi)
+ if(yres > 0)
+ trymode.h = yres;
+
++ /*int bfi = MDFN_GetSettingI("video.bfi"); //experimental no bypass
++ MDFN_printf("video.bfi=%d\n",bfi);
++ if (bfi > 1) {
++ trymode.refresh_rate = resolution_to_change_vfreq * 2;
++ }*/
++
+ if(vdriver != VDRIVER_OPENGL)
+ {
+ if(!(trymode.format == SDL_PIXELFORMAT_RGB565 && (gi->ExtraVideoFormatSupport & EVFSUPPORT_RGB565)) &&
+@@ -1129,12 +1545,14 @@ void Video_Sync(MDFNGI *gi)
+ goto TryWindowed;
+ }
+
+- if(SDL_SetWindowDisplayMode(window, &mode) < 0)
++ if (!use_switchres) //psakhis
+ {
+- MDFN_Notify(MDFN_NOTICE_WARNING, _("Reverting to windowed mode because SDL_SetWindowDisplayMode() failed: %s"), SDL_GetError());
+- goto TryWindowed;
++ if(SDL_SetWindowDisplayMode(window, &mode) < 0)
++ {
++ MDFN_Notify(MDFN_NOTICE_WARNING, _("Reverting to windowed mode because SDL_SetWindowDisplayMode() failed: %s"), SDL_GetError());
++ goto TryWindowed;
++ }
+ }
+-
+ #if 0
+ int old_mousex = 0;
+ int old_mousey = 0;
+@@ -1147,6 +1565,18 @@ void Video_Sync(MDFNGI *gi)
+ goto TryWindowed;
+ }
+
++ SDL_ShowWindow(window); //psakhis
++ //psakhis - delegate first switch to switchres
++ if (use_switchres)
++ {
++ Video_SetSwitchres(resolution_to_change_w, resolution_to_change_h, resolution_to_change_vfreq, gi->rotated);
++ Video_BlitRefresh();
++ }
++ else
++ {
++ sr_x_scale = (double) mode.w / resolution_to_change_w; //psakhis - scale corrected
++ sr_y_scale = (double) mode.h / resolution_to_change_h; //psakhis - scale corrected
++
+ #if 0
+ // ugggh
+ SDL_PumpEvents();
+@@ -1162,6 +1592,9 @@ void Video_Sync(MDFNGI *gi)
+ MDFN_Notify(MDFN_NOTICE_WARNING, _("Reverting to windowed mode because screen destination rectangle(%dx%d) is too large!"), screen_dest_rect.w, screen_dest_rect.h);
+ goto TryWindowed;
+ }
++ }
++ //end psakhis
++ MDFN_printf(_(" VIDEO - Video_sync - screen dest: %dx%d - %d,%d - scale(%.4f,%.4f)\n"), screen_dest_rect.w,screen_dest_rect.h,screen_dest_rect.x,screen_dest_rect.y,sr_x_scale,sr_y_scale); // SLK
+ }
+ //
+ //
+@@ -1295,10 +1728,43 @@ void Video_Sync(MDFNGI *gi)
+ SMRect.y = 0;
+ SMRect.w = screen_w;
+
+- SMDRect.w = SMRect.w * xmu;
++ // SLK - Set OSD message rendering rect.
++ if(use_super_resolution || use_switchres) // enlarge OSD message in super resolution mode
++ {
++ SMDRect.w = SMRect.w * xmu;
++ MDFN_printf(_(" VIDEO - Init : SMRect.w: %d xmu: %d\n"),SMRect.w,xmu);
++ }
++ else
++ {
++ SMDRect.w = SMRect.w * xmu;
++ }
++ // SLK - end
++
++ // SMDRect.w = SMRect.w * xmu;
+ SMDRect.h = SMRect.h * ymu;
+ SMDRect.x = (screen_w - SMDRect.w) / 2;
+- SMDRect.y = screen_h - SMDRect.h;
++ // SMDRect.y = screen_h - SMDRect.h;
++
++ // SLK - Vertical offset for OSD messages
++ if(use_native_resolution || use_super_resolution || use_switchres)
++ {
++ switch(screen_h){
++ case 240:SMDRect.y = screen_h - SMDRect.h - 18;
++ break;
++ case 288:SMDRect.y = screen_h - SMDRect.h - 32;
++ break;
++ case 480:SMDRect.y = screen_h - SMDRect.h - 32;
++ break;
++ case 576:SMDRect.y = screen_h - SMDRect.h - 64;
++ break;
++ default:SMDRect.y = screen_h - SMDRect.h * xmu; // TODO: ???
++ }
++ }
++ else
++ {
++ SMDRect.y = screen_h - SMDRect.h;
++ }
++ // SLK - end
+
+ if(SMDRect.x < 0)
+ {
+@@ -1629,7 +2095,7 @@ static void SubBlit(const MDFN_Surface *source_surface, const MDFN_Rect &src_rec
+ else // No special scaler:
+ {
+ if(ogl_blitter)
+- ogl_blitter->Blit(eff_source_surface, &eff_src_rect, &dest_rect, &eff_src_rect, InterlaceField, evideoip, rotated);
++ ogl_blitter->Blit(eff_source_surface, &eff_src_rect, &dest_rect, &eff_src_rect, InterlaceField, evideoip, rotated);
+ else
+ {
+ SDL_to_MDFN_Surface_Wrapper m_surface(screen);
+@@ -1711,7 +2177,7 @@ void BlitScreen(MDFN_Surface *msurface, const MDFN_Rect *DisplayRect, const int3
+ #if 1
+ {
+ int sub[2] = { 0, 0 };
+- SDL_DisplayMode mode;
++ //SDL_DisplayMode mode;
+
+ if(!(SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN))
+ SDL_GetWindowPosition(window, &sub[0], &sub[1]);
+@@ -1719,14 +2185,16 @@ void BlitScreen(MDFN_Surface *msurface, const MDFN_Rect *DisplayRect, const int3
+ sub[0] += screen_dest_rect.x;
+ sub[1] += screen_dest_rect.y;
+
+- if(SDL_GetCurrentDisplayMode(SDL_GetWindowDisplayIndex(window), &mode) >= 0)
+- {
+- JoyGunTranslate[0].mul = (float)mode.w / screen_dest_rect.w / 32768.0;
++ //if(SDL_GetCurrentDisplayMode(SDL_GetWindowDisplayIndex(window), &mode) >= 0)
++ //{
++ // JoyGunTranslate[0].mul = (float)mode.w / screen_dest_rect.w / 32768.0;
++ JoyGunTranslate[0].mul = (float)screen_w / screen_dest_rect.w / 32768.0; //psakhis
+ JoyGunTranslate[0].sub = (float)sub[0] / screen_dest_rect.w;
+
+- JoyGunTranslate[1].mul = (float)mode.h / screen_dest_rect.h / 32768.0;
++ //JoyGunTranslate[1].mul = (float)mode.h / screen_dest_rect.h / 32768.0;
++ JoyGunTranslate[1].mul = (float)screen_h / screen_dest_rect.h / 32768.0; //psakhis
+ JoyGunTranslate[1].sub = (float)sub[1] / screen_dest_rect.h;
+- }
++ //}
+ }
+ #endif
+ //
+@@ -1745,7 +2213,9 @@ void BlitScreen(MDFN_Surface *msurface, const MDFN_Rect *DisplayRect, const int3
+ }
+
+ if(vdriver == VDRIVER_OPENGL)
++ {
+ ogl_blitter->ClearBackBuffer();
++ }
+ else
+ {
+ SDL_FillRect(screen, NULL, 0);
+@@ -1762,7 +2232,34 @@ void BlitScreen(MDFN_Surface *msurface, const MDFN_Rect *DisplayRect, const int3
+
+ if(LineWidths[0] == ~0) // Skip multi line widths code?
+ {
+- SubBlit(msurface, src_rect, screen_dest_rect, InterlaceField);
++ //printf(" --- Blit full frame ---\n");
++ //SLK - blit for: MD & NES & [...]
++ //printf(" Src: %dx%d - %d,%d\n",src_rect.w,src_rect.h,src_rect.x,src_rect.y);
++ //printf(" Dest: %dx%d - %d,%d\n",screen_dest_rect.w,screen_dest_rect.h,screen_dest_rect.x,screen_dest_rect.y);
++ if(use_native_resolution || use_super_resolution || use_switchres)
++ {
++ MDFN_Rect sub_dest_rect = screen_dest_rect;
++
++ //printf("Sergi %d %d %d %d \n",src_rect.w,sr_x_scale,sub_dest_rect.w,screen_dest_rect.w);
++ if((src_rect.w * sr_x_scale) > sub_dest_rect.w)
++ {
++ //printf("Horizontal crop: ON\n");
++ src_rect.x = (src_rect.w - sub_dest_rect.w) / 2;
++ src_rect.w = sub_dest_rect.w / sr_x_scale;
++ }
++ sub_dest_rect.y = (((sub_dest_rect.h / sr_y_scale) - src_rect.h) / 2) * sr_y_scale; // V. Center
++ sub_dest_rect.h = src_rect.h * sr_y_scale;
++
++ //printf(" Src: %dx%d - %d,%d\n",src_rect.w,src_rect.h,src_rect.x,src_rect.y);
++ //printf(" Output - SLK sub_dest_rect: %dx%d %d,%d\n",sub_dest_rect.w,sub_dest_rect.h,sub_dest_rect.x,sub_dest_rect.y);
++ //printf(" Output - SLK sub_screen_rect: %dx%d %d,%d\n",screen_dest_rect.w,screen_dest_rect.h,screen_dest_rect.x,screen_dest_rect.y);
++ SubBlit(msurface, src_rect, screen_dest_rect, InterlaceField);
++
++ }
++ else
++ {
++ SubBlit(msurface, src_rect, screen_dest_rect, InterlaceField);
++ }
+ }
+ else
+ {
+@@ -1784,27 +2281,105 @@ void BlitScreen(MDFN_Surface *msurface, const MDFN_Rect *DisplayRect, const int3
+
+ if(rotated == MDFN_ROTATE90)
+ {
+- sub_dest_rect.x = screen_dest_rect.x + (last_y - src_rect.y) * screen_dest_rect.w / src_rect.h;
+- sub_dest_rect.y = screen_dest_rect.y;
++ if (use_native_resolution || use_super_resolution || use_switchres) {
++ sub_dest_rect.x = screen_dest_rect.x + (last_y - src_rect.y) * sr_x_scale;
++ sub_dest_rect.y = screen_dest_rect.y;
++
++ sub_dest_rect.w = sub_src_rect.h * sr_x_scale;
++ sub_dest_rect.h = screen_dest_rect.h;
++ }
++ else {
++ sub_dest_rect.x = screen_dest_rect.x + (last_y - src_rect.y) * screen_dest_rect.w / src_rect.h;
++ sub_dest_rect.y = screen_dest_rect.y;
+
+- sub_dest_rect.w = sub_src_rect.h * screen_dest_rect.w / src_rect.h;
+- sub_dest_rect.h = screen_dest_rect.h;
++ sub_dest_rect.w = sub_src_rect.h * screen_dest_rect.w / src_rect.h;
++ sub_dest_rect.h = screen_dest_rect.h;
++ }
+ //printf("sdr.x=%f, sdr.w=%f\n", (double)screen_dest_rect.x + (double)(last_y - src_rect.y) * screen_dest_rect.w / src_rect.h, (double)sub_src_rect.h * screen_dest_rect.w / src_rect.h);
+ }
+ else if(rotated == MDFN_ROTATE270)
+ {
+- sub_dest_rect.x = screen_dest_rect.x + (src_rect.h - (y - src_rect.y)) * screen_dest_rect.w / src_rect.h;
+- sub_dest_rect.y = screen_dest_rect.y;
++ if (use_native_resolution || use_super_resolution || use_switchres) {
++ sub_dest_rect.x = screen_dest_rect.x + (src_rect.h - (y - src_rect.y)) * sr_x_scale;
++ sub_dest_rect.y = screen_dest_rect.y;
++
++ sub_dest_rect.w = sub_src_rect.h * sr_x_scale;
++ sub_dest_rect.h = screen_dest_rect.h;
++ }
++ else {
++ sub_dest_rect.x = screen_dest_rect.x + (src_rect.h - (y - src_rect.y)) * screen_dest_rect.w / src_rect.h;
++ sub_dest_rect.y = screen_dest_rect.y;
+
+- sub_dest_rect.w = sub_src_rect.h * screen_dest_rect.w / src_rect.h;
+- sub_dest_rect.h = screen_dest_rect.h;
++ sub_dest_rect.w = sub_src_rect.h * screen_dest_rect.w / src_rect.h;
++ sub_dest_rect.h = screen_dest_rect.h;
++ }
+ }
+ else
+ {
+- sub_dest_rect.x = screen_dest_rect.x;
+- sub_dest_rect.w = screen_dest_rect.w;
+- sub_dest_rect.y = screen_dest_rect.y + (last_y - src_rect.y) * screen_dest_rect.h / src_rect.h;
+- sub_dest_rect.h = sub_src_rect.h * screen_dest_rect.h / src_rect.h;
++ if (use_native_resolution || use_super_resolution || use_switchres)
++ {
++ // SLK - (prevent) resizing and centering
++ //printf(" src_rect: %dx%d - X:%d, cmdY:%d rect.x %d rect.w %d \n",src_rect.w,src_rect.h,src_rect.x,src_rect.y,screen_dest_rect.x,screen_dest_rect.w);
++
++ sub_dest_rect.x = screen_dest_rect.x;
++ sub_dest_rect.w = screen_dest_rect.w;
++ sub_dest_rect.y = screen_dest_rect.y + ((last_y - src_rect.y) * sr_y_scale);
++ sub_dest_rect.h = sub_src_rect.h * sr_y_scale;
++
++ //printf("sub_src_rect: %dx%d %d,%d\n",sub_src_rect.w,sub_src_rect.h,sub_src_rect.x,sub_src_rect.y);
++ if (sub_src_rect.w > (sub_dest_rect.w / sr_x_scale)) // horizontal crop to fit screen
++ {
++ //psakhis horrible hack centering psx
++ //printf("Horizontal centering ON sub_src_rect.x = %d, (sub_src_rect.w vs sub_dest_rect.w / sr_x_scale):%d vs %d\n",sub_src_rect.x,sub_src_rect.w, (sub_dest_rect.w / sr_x_scale));
++ //if (psx_native_resolution_bars && sub_src_rect.w > sub_dest_rect.w && sr_x_scale == 1) {
++ // sub_src_rect.x = 32 + ((sub_src_rect.w - sub_dest_rect.w) / 2);
++ // sub_src_rect.w = sub_dest_rect.w / sr_x_scale;
++ //}
++ //psakhis
++ //else {
++ //SLK
++ // sub_src_rect.x = (sub_src_rect.w - (sub_dest_rect.w / sr_x_scale)) / 2;
++ //psakhis correct centering
++ sub_src_rect.x = sub_src_rect.x + ((sub_src_rect.w - (sub_dest_rect.w / sr_x_scale)) / 2);
++ sub_src_rect.w = sub_dest_rect.w / sr_x_scale;
++ //}
++ }
++
++ // OLD 1.24.1 stretch ok
++ /* if (sub_src_rect.w >= resolution_to_change_w) // horizontal crop to fit screen
++ {
++ sub_src_rect.x = sub_src_rect.x + ((sub_src_rect.w - resolution_to_change_w) / 2);
++ sub_src_rect.w = resolution_to_change_w;
++ }*/
++ if (native_resolution_vcenter == true) // default vertical centering
++ {
++ //printf(" Vertical centering ON - src_rect.h:%d sub_dest_rect.y:%d screen_dest_rect.h:%d sr_y_scale:%d \n",src_rect.h,sub_dest_rect.y,screen_dest_rect.h,sr_y_scale);
++ sub_dest_rect.y = sub_dest_rect.y + ((screen_dest_rect.h - (src_rect.h * sr_y_scale)) / 2);
++ }
++ else // fill screen (psx - half black screen fix)
++ {
++ //printf(" Vertical centering OFF (psx)\n");
++ sub_dest_rect.h = sub_src_rect.h * (screen_dest_rect.h) / src_rect.h;
++ // sub_dest_rect.h = (sub_src_rect.h + sub_src_rect.y) * sr_y_scale;
++ }
++
++ //printf(" Output - SLK sub_src_rect: %dx%d %d,%d\n",sub_src_rect.w,sub_src_rect.h,sub_src_rect.x,sub_src_rect.y);
++ //printf(" Output - SLK sub_dest_rect: %dx%d %d,%d\n",sub_dest_rect.w,sub_dest_rect.h,sub_dest_rect.x,sub_dest_rect.y);
++ //printf(" Output - SLK sub_screen_rect: %dx%d %d,%d\n",screen_dest_rect.w,screen_dest_rect.h,screen_dest_rect.x,screen_dest_rect.y);
++
++ }
++ else
++ {
++ //printf(" src_rect: %dx%d - X:%d, cmdY:%d rect.x %d\n",src_rect.w,src_rect.h,src_rect.x,src_rect.y,screen_dest_rect.x);
++ sub_dest_rect.x = screen_dest_rect.x;
++ sub_dest_rect.w = screen_dest_rect.w;
++ sub_dest_rect.y = screen_dest_rect.y + (last_y - src_rect.y) * screen_dest_rect.h / src_rect.h;
++ sub_dest_rect.h = sub_src_rect.h * screen_dest_rect.h / src_rect.h;
++
++ //printf(" Output - PSAKHIS sub_src_rect: %dx%d %d,%d\n",sub_src_rect.w,sub_src_rect.h,sub_src_rect.x,sub_src_rect.y);
++ //printf(" Output - PSAKHIS sub_dest_rect: %dx%d %d,%d\n",sub_dest_rect.w,sub_dest_rect.h,sub_dest_rect.x,sub_dest_rect.y);
++ //printf(" Output - PSAKHIS sub_screen_rect: %dx%d %d,%d\n",screen_dest_rect.w,screen_dest_rect.h,screen_dest_rect.x,screen_dest_rect.y);
++ }
+ }
+
+ if(!sub_dest_rect.h) // May occur with small yscale values in certain cases, so prevent triggering an assert()
+diff --git a/src/drivers/video.h b/src/drivers/video.h
+index 8dc2b89..857445b 100644
+--- a/src/drivers/video.h
++++ b/src/drivers/video.h
+@@ -38,6 +38,10 @@ void Video_Init(void) MDFN_COLD;
+
+ void Video_Sync(MDFNGI* gi);
+
++// SLK
++int Video_ChangeResolution(MDFNGI* gi, int w, int h, double vfreq); //false - no refresh needed
++void Video_BlitRefresh(); //psakhis
++
+ void Video_Exposed(void);
+
+ void Video_Kill(void) MDFN_COLD;
+diff --git a/src/mednafen.cpp b/src/mednafen.cpp
+index 08e1eda..71bdf31 100644
+--- a/src/mednafen.cpp
++++ b/src/mednafen.cpp
+@@ -54,6 +54,19 @@
+ #include "video/tblur.h"
+ #include "qtrecord.h"
+
++// SLK
++bool use_native_resolution = false;
++bool use_super_resolution = false;
++bool use_switchres = false;
++bool resolution_to_change;
++double resolution_to_change_vfreq;
++int resolution_to_change_w;
++int resolution_to_change_h;
++int current_game_resolution_w;
++int current_game_resolution_h;
++int current_game_rotated = 0;
++bool native_resolution_vcenter = true;
++
+ namespace Mednafen
+ {
+
+@@ -655,6 +668,8 @@ static const std::vector KnownCDExtensions =
+ {
+ // M3U must be highest.
+ { ".m3u", -40, "M3U" },
++ //psakhis
++ { ".chd", -45, "CHD" },
+ { ".ccd", -50, "CloneCD" },
+ { ".cue", -60, "CUE" },
+ { ".toc", -70, "cdrdao TOC" },
+diff --git a/src/mednafen.h b/src/mednafen.h
+index 9ce3a8e..ec40858 100644
+--- a/src/mednafen.h
++++ b/src/mednafen.h
+@@ -21,6 +21,31 @@
+ #include "settings-common.h"
+ #include "NativeVFS.h"
+
++// SLK
++
++// option activation flags - set by Mednafen Video setting processing
++extern bool use_native_resolution;
++extern bool use_super_resolution;
++extern bool use_switchres;
++
++// scaling & positioning option - set by module, use in video.cpp
++extern bool native_resolution_vcenter;
++
++// Change resolution request flag - set by module
++extern bool resolution_to_change;
++
++// Requested video mode information - set in module
++extern int resolution_to_change_w;
++extern int resolution_to_change_h;
++extern double resolution_to_change_vfreq;
++
++// current video mode information - set in drivers\video.cpp
++extern int current_game_resolution_w;
++extern int current_game_resolution_h;
++extern int current_game_rotated;
++
++// SLK end
++
+ namespace Mednafen
+ {
+
+diff --git a/src/state.cpp b/src/state.cpp
+index 49a3d59..4ec6128 100644
+--- a/src/state.cpp
++++ b/src/state.cpp
+@@ -499,6 +499,14 @@ void MDFNSS_SaveSM(Stream *st, bool data_only, const MDFN_Surface *surface, cons
+ neowidth = MDFNGameInfo->nominal_width;
+ neoheight = MDFNGameInfo->nominal_height;
+
++ // SLK - Approximation to prevent SaveState snapshot corruption
++ //if(use_super_resolution) psakhis
++ {
++ neowidth = resolution_to_change_w;
++ neoheight = DisplayRect->h;
++ }
++ // SLK - end
++
+ if(LineWidths[0] != ~0)
+ {
+ int32 first_w = LineWidths[DisplayRect->y];
+@@ -619,6 +627,14 @@ void MDFNSS_LoadSM(Stream *st, bool data_only, const int fuzz)
+ svbe = MDFN_de32lsb(header + 20) & 0x80000000;
+ width = MDFN_de32lsb(header + 24);
+ height = MDFN_de32lsb(header + 28);
++
++ //psakhis: restore resolution onLoadState
++ resolution_to_change_w = width;
++ resolution_to_change_h = height;
++ resolution_to_change = true;
++ printf("STATE - MDFNSS_LoadSM - Restored resolution %dx%d\n",width,height);
++ //psakhis end
++
+ preview_len = width * height * 3;
+
+ if((int)stateversion < 0x900) // Ensuring that (int)stateversion is > 0 is the most important part.
+diff --git a/src/switchres/switchres_defines.h b/src/switchres/switchres_defines.h
+index e69de29..42470ed 100644
+--- a/src/switchres/switchres_defines.h
++++ b/src/switchres/switchres_defines.h
+@@ -0,0 +1,42 @@
++#define SR_DEFINES
++
++#define SR_OPT_MONITOR "monitor"
++#define SR_OPT_CRT_RANGE0 "crt_range0"
++#define SR_OPT_CRT_RANGE1 "crt_range1"
++#define SR_OPT_CRT_RANGE2 "crt_range2"
++#define SR_OPT_CRT_RANGE3 "crt_range3"
++#define SR_OPT_CRT_RANGE4 "crt_range4"
++#define SR_OPT_CRT_RANGE5 "crt_range5"
++#define SR_OPT_CRT_RANGE6 "crt_range6"
++#define SR_OPT_CRT_RANGE7 "crt_range7"
++#define SR_OPT_CRT_RANGE8 "crt_range8"
++#define SR_OPT_CRT_RANGE9 "crt_range9"
++#define SR_OPT_LCD_RANGE "lcd_range"
++#define SR_OPT_MODELINE "modeline"
++#define SR_OPT_USER_MODE "user_mode"
++#define SR_OPT_DISPLAY "display"
++#define SR_OPT_API "api"
++#define SR_OPT_LOCK_UNSUPPORTED_MODES "lock_unsupported_modes"
++#define SR_OPT_LOCK_SYSTEM_MODES "lock_system_modes"
++#define SR_OPT_REFRESH_DONT_CARE "refresh_dont_care"
++#define SR_OPT_KEEP_CHANGES "keep_changes"
++#define SR_OPT_MODELINE_GENERATION "modeline_generation"
++#define SR_OPT_INTERLACE "interlace"
++#define SR_OPT_DOUBLESCAN "doublescan"
++#define SR_OPT_DOTCLOCK_MIN "dotclock_min"
++#define SR_OPT_SYNC_REFRESH_TOLERANCE "sync_refresh_tolerance"
++#define SR_OPT_SUPER_WIDTH "super_width"
++#define SR_OPT_ASPECT "aspect"
++#define SR_OPT_V_SHIFT_CORRECT "v_shift_correct"
++#define SR_OPT_H_SIZE "h_size"
++#define SR_OPT_H_SHIFT "h_shift"
++#define SR_OPT_V_SHIFT "v_shift"
++#define SR_OPT_PIXEL_PRECISION "pixel_precision"
++#define SR_OPT_INTERLACE_FORCE_EVEN "interlace_force_even"
++#define SR_OPT_SCALE_PROPORTIONAL "scale_proportional"
++#define SR_OPT_SCREEN_COMPOSITING "screen_compositing"
++#define SR_OPT_SCREEN_REORDERING "screen_reordering"
++#define SR_OPT_ALLOW_HARDWARE_REFRESH "allow_hardware_refresh"
++#define SR_OPT_CUSTOM_TIMING "custom_timing"
++#define SR_OPT_VERBOSE "verbose"
++#define SR_OPT_VERBOSITY "verbosity"
+\ No newline at end of file
+diff --git a/src/switchres/switchres_wrapper.h b/src/switchres/switchres_wrapper.h
+index e69de29..fe3bc40 100644
+--- a/src/switchres/switchres_wrapper.h
++++ b/src/switchres/switchres_wrapper.h
+@@ -0,0 +1,190 @@
++/**************************************************************
++
++ switchres_wrapper.h - Switchres C wrapper API header file
++
++ ---------------------------------------------------------
++
++ Switchres Modeline generation engine for emulation
++
++ License GPL-2.0+
++ Copyright 2010-2021 Chris Kennedy, Antonio Giner,
++ Alexandre Wodarczyk, Gil Delescluse
++
++ **************************************************************/
++
++#include
++#ifndef SR_DEFINES
++#include "switchres_defines.h"
++#endif
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++#ifdef __linux__
++#include
++#define LIBTYPE void*
++#define OPENLIB(libname) dlopen((libname), RTLD_LAZY)
++#define LIBFUNC(libh, fn) dlsym((libh), (fn))
++#define LIBERROR dlerror
++#define CLOSELIB(libh) dlclose((libh))
++
++#elif defined _WIN32
++#include
++#define LIBTYPE HINSTANCE
++#define OPENLIB(libname) LoadLibrary(TEXT((libname)))
++#define LIBFUNC(lib, fn) GetProcAddress((lib), (fn))
++
++#define CLOSELIB(libp) FreeLibrary((libp))
++#endif
++
++#ifdef _WIN32
++/*
++ * This is a trick to avoid exporting some functions thus having the binary
++ * flagged as a virus. If switchres_wrapper.cpp is included in the compilation
++ * LIBERROR() is just declared and not compiled. If switchres_wrapper.cpp is
++ * not compiled, LIBERROR is defined here
++ */
++#ifndef SR_WIN32_STATIC
++char* LIBERROR()
++{
++ DWORD errorMessageID = GetLastError();
++ if(errorMessageID == 0)
++ return NULL;
++
++ LPSTR messageBuffer;
++ FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
++ NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);
++
++ SetLastError(0);
++
++ static char error_msg[256] = {0};
++ strncpy(error_msg, messageBuffer, sizeof(error_msg)-1);
++ LocalFree(messageBuffer);
++ return error_msg;
++}
++#endif /* SR_WIN32_STATIC */
++ #ifndef SR_WIN32_STATIC
++ #define MODULE_API __declspec(dllexport)
++ #else
++ #define MODULE_API
++ #endif
++#else
++ #define MODULE_API
++#endif /* _WIN32 */
++
++#ifdef __linux__
++#define LIBSWR "libswitchres.so"
++#elif _WIN32
++#define LIBSWR "libswitchres.dll"
++#endif
++
++/* Mode flags */
++#define SR_MODE_INTERLACED 1<<0
++#define SR_MODE_ROTATED 1<<1
++#define SR_MODE_DONT_FLUSH 1<<16
++
++/* That's all the exposed data from Switchres calculation */
++typedef struct MODULE_API
++{
++ int width;
++ int height;
++ int refresh;
++ //
++ double vfreq;
++ double hfreq;
++ //
++ uint64_t pclock;
++ int hbegin;
++ int hend;
++ int htotal;
++ int vbegin;
++ int vend;
++ int vtotal;
++ int interlace;
++ int doublescan;
++ int hsync;
++ int vsync;
++ //
++ int is_refresh_off;
++ int is_stretched;
++ double x_scale;
++ double y_scale;
++ double v_scale;
++ int id;
++} sr_mode;
++
++/* Used to retrieve SR settings and state */
++typedef struct MODULE_API
++{
++ char monitor[32];
++ int modeline_generation;
++ int desktop_is_rotated;
++ int interlace;
++ int doublescan;
++ double dotclock_min;
++ double refresh_tolerance;
++ int super_width;
++ double monitor_aspect;
++ double h_size;
++ double h_shift;
++ double v_shift;
++ int pixel_precision;
++ int selected_mode;
++ int current_mode;
++} sr_state;
++
++/* Declaration of the wrapper functions */
++MODULE_API void sr_init();
++MODULE_API char* sr_get_version();
++MODULE_API void sr_load_ini(char* config);
++MODULE_API void sr_deinit();
++MODULE_API int sr_init_disp(const char*, void*);
++MODULE_API void sr_set_disp(int);
++MODULE_API int sr_get_mode(int, sr_mode*);
++MODULE_API int sr_add_mode(int, int, double, int, sr_mode*);
++MODULE_API int sr_switch_to_mode(int, int, double, int, sr_mode*);
++MODULE_API int sr_flush();
++MODULE_API int sr_set_mode(int);
++MODULE_API void sr_set_monitor(const char*);
++MODULE_API void sr_set_user_mode(int, int, int);
++MODULE_API void sr_set_option(const char* key, const char* value);
++MODULE_API void sr_get_state(sr_state *state);
++
++/* Logging related functions */
++MODULE_API void sr_set_log_level(int);
++MODULE_API void sr_set_log_callback_error(void *);
++MODULE_API void sr_set_log_callback_info(void *);
++MODULE_API void sr_set_log_callback_debug(void *);
++
++/* Others */
++MODULE_API void sr_set_sdl_window(void *);
++
++/* Inspired by https://stackoverflow.com/a/1067684 */
++typedef struct MODULE_API
++{
++ void (*init)(void);
++ void (*load_ini)(char*);
++ char* (*sr_get_version)(void);
++ void (*deinit)(void);
++ int (*init_disp)(const char*, void*);
++ void (*set_disp)(int);
++ int (*get_mode)(int, sr_mode*);
++ int (*add_mode)(int, int, double, int, sr_mode*);
++ int (*switch_to_mode)(int, int, double, int, sr_mode*);
++ int (*flush)(void);
++ int (*set_mode)(int);
++ void (*set_monitor)(const char*);
++ void (*set_user_mode)(int, int, int);
++ void (*set_option)(const char*, const char*);
++ void (*get_state)(sr_state*);
++ void (*set_log_level) (int);
++ void (*set_log_callback_error)(void *);
++ void (*set_log_callback_info)(void *);
++ void (*set_log_callback_debug)(void *);
++} srAPI;
++
++
++#ifdef __cplusplus
++}
++#endif
+diff --git a/src/ss/vdp2_render.cpp b/src/ss/vdp2_render.cpp
+index 2be23f8..ae2899c 100644
+--- a/src/ss/vdp2_render.cpp
++++ b/src/ss/vdp2_render.cpp
+@@ -145,6 +145,17 @@ static uint8 RBG0CCRatio;
+ static uint8 LineColorCCRatio;
+ static uint8 BackCCRatio;
+
++//SLK
++static uint8 prev_InterlaceMode = 0;
++static uint8 prev_HRes = 0;
++static uint8 prev_VRes = 0;
++static bool prev_BorderMode = 0;
++// SLK end
++
++//PSAKHIS
++static bool prob_false_change = false; //reduce false positive changes
++// PSAKHIS end
++
+ //
+ static struct
+ {
+@@ -554,6 +565,52 @@ static INLINE void RegsWrite(uint32 A, uint16 V)
+ InterlaceMode = (V >> 6) & 0x3;
+ VRes = (V >> 4) & 0x3;
+ HRes = (V >> 0) & 0x7;
++ // SLK
++ //PSAKHIS
++ if(InterlaceMode == prev_InterlaceMode && (HRes < prev_HRes && !prob_false_change))
++ {
++ printf("VDP2 Render - Television mode changed?: %d\n",V);
++ prob_false_change = true;
++ }
++ else
++ {
++ prob_false_change = false;
++ }
++ //END PSAKHIS
++ //if(InterlaceMode != prev_InterlaceMode || HRes != prev_HRes)
++ if(InterlaceMode != prev_InterlaceMode || (HRes != prev_HRes && !prob_false_change)) //psakhis: only change if a valid hres for more than 1
++ {
++ printf("VDP2 Render - Television mode changed: %d\n",V);
++ printf(" BorderMode: %d\n",BorderMode);
++ printf(" PAL: %d\n",PAL);
++ printf(" InterlaceMode: %d\n",InterlaceMode);
++ printf(" VRes: %d\n",VRes);
++ printf(" HRes: %d\n",HRes);
++ prev_BorderMode = BorderMode;
++ prev_InterlaceMode = InterlaceMode;
++ prev_VRes = VRes;
++ prev_HRes = HRes;
++ prob_false_change = false; //Psakhis reduce false positives
++ // HRES
++ switch(HRes){
++ case 0:
++ resolution_to_change_w = 320;
++ break;
++ case 1:
++ resolution_to_change_w = 352;
++ break;
++ case 2:
++ resolution_to_change_w = 640;
++ break;
++ case 3:
++ resolution_to_change_w = 704;
++ break;
++ }
++ if(InterlaceMode >= 2){resolution_to_change_h = PAL ? 576 : 480;} else {resolution_to_change_h = PAL ? 288 : 240;}
++ printf("SS - VDP2 Render - TV mode set to %dx%d",resolution_to_change_w,resolution_to_change_h);
++ resolution_to_change = true; // Flag for video resolution change by VIDEO.cpp/MAIN.cpp
++ }
++ // SLK - end
+ break;
+
+ case 0x02:
+@@ -1013,7 +1070,7 @@ static void Reset(bool powering_up)
+ HRes = 0;
+ VRes = 0;
+ BorderMode = false;
+- InterlaceMode = 0;
++ InterlaceMode = 0;
+ //
+ memset(VCPRegs, 0, sizeof(VCPRegs));
+ //
+@@ -2556,7 +2613,7 @@ static void T_MixIt(uint32* target, const unsigned vdp2_line, const unsigned w,
+
+ if(TA_Special == MIXIT_SPECIAL_HIRES_CRAM12 && !(pix2 & (1U << PIX_ISRGB_SHIFT)))
+ sec_rgb = fore_rgb;
+-
++
+ if(TA_CCMD) // Ignore ratio, add as-is.
+ {
+ new_rgb = std::min(0x0000FF, (fore_rgb & 0x0000FF) + (sec_rgb & 0x0000FF));
+@@ -3145,7 +3202,7 @@ static NO_INLINE void DrawLine(const uint16 out_line, const uint16 vdp2_line, co
+ if(CRAM_Mode)
+ special = MIXIT_SPECIAL_HIRES_CRAM12;
+ }
+-
++
+ MixIt[rbgdualen][special][CCRTMD][CCMD](target + tvxo, vdp2_line, w, back_rgb24, blursrc);
+ ReorderRGB(target + tvxo, w, espec->surface->format.Rshift, espec->surface->format.Gshift, espec->surface->format.Bshift);
+ }
+@@ -3357,12 +3414,22 @@ void VDP2REND_SetGetVideoParams(MDFNGI* gi, const bool caspect, const int sls, c
+ {
+ gi->nominal_width = (ShowHOverscan ? 365 : 354);
+ gi->fb_height = 576;
++ resolution_to_change_h = 288; // SLK - start resolution
++ resolution_to_change_vfreq = 50;
+ }
+ else
+ {
+ gi->nominal_width = (ShowHOverscan ? 302 : 292);
+ gi->fb_height = 480;
++ resolution_to_change_h = 240; // SLK - init crt mode
++ resolution_to_change_vfreq = 59.764793; // SLK TODO: find accurate V.Freq
+ }
++
++ // SLK
++ resolution_to_change_w = 320;
++ resolution_to_change = true; // SLK - init crt mode
++ // SLK - end
++
+ gi->nominal_height = LineVisLast + 1 - LineVisFirst;
+
+ gi->lcm_width = (ShowHOverscan? 10560 : 10240);
+--- a/src/drivers/video-state.cpp 2024-12-25 19:10:43.492715743 +0100
++++ b/src/drivers/video-state.cpp 2024-04-28 18:56:26.000000000 +0200
+@@ -180,16 +180,48 @@
+ tdrect.w = TextRect.w * meow;
+ tdrect.h = TextRect.h * meow;
+ tdrect.x = (screen_w - tdrect.w) / 2;
+- tdrect.y = screen_h - tdrect.h;
++ // SLK - Custom savestate selection OSD
++ if(use_native_resolution || use_super_resolution || use_switchres)
++ {
++ switch(screen_h){
++ case 240:tdrect.y = screen_h - tdrect.h - 18;
++ break;
++ case 288:tdrect.y = screen_h - tdrect.h - 32;
++ break;
++ case 480:tdrect.y = screen_h - tdrect.h - 32;
++ break;
++ case 576:tdrect.y = screen_h - tdrect.h - 64;
++ break;
++ default:tdrect.y = screen_h - tdrect.h;
++ }
++ if(use_super_resolution) // TODO SR
++ {
++ tdrect.w = tdrect.w * 8;
++ tdrect.x = (screen_w - tdrect.w) / 2;
++ }
++ BlitOSD(TextSurface, &TextRect, &tdrect);
++
++ drect.w = screen_w * 0.5 + 3; // TODO: Why 3 ???
++ drect.h = screen_h * 0.5 + 3;
++ drect.x = (screen_w - drect.w) / 2;
++ drect.y = tdrect.y - drect.h; // SLK
+
+- BlitOSD(TextSurface, &TextRect, &tdrect);
+-
+- drect.w = PreviewRect.w * meow;
+- drect.h = PreviewRect.h * meow;
+- drect.x = (screen_w - drect.w) / 2;
+- drect.y = screen_h - drect.h - tdrect.h - 4;
+-
+- BlitOSD(PreviewSurface, &PreviewRect, &drect);
++ BlitOSD(PreviewSurface, &PreviewRect, &drect);
++ }
++ else // native OSD display
++ {
++ tdrect.y = screen_h - tdrect.h;
++
++ BlitOSD(TextSurface, &TextRect, &tdrect);
++
++ drect.w = PreviewRect.w * meow;
++ drect.h = PreviewRect.h * meow;
++ drect.x = (screen_w - drect.w) / 2;
++ drect.y = screen_h - drect.h - tdrect.h - 4;
++
++ BlitOSD(PreviewSurface, &PreviewRect, &drect);
++ }
++ // SLK - end
+ }
+ }
+
diff --git a/package/mednafen/0002-mednafen-makefile.patch b/package/mednafen/0002-mednafen-makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3a9b1833c2177e289e4cd4b1e1baea3e6c6b7289
--- /dev/null
+++ b/package/mednafen/0002-mednafen-makefile.patch
@@ -0,0 +1,385 @@
+diff --git a/aclocal.m4 b/aclocal.m4
+index effc30f..e264ae4 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -1,6 +1,6 @@
+-# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
++# generated automatically by aclocal 1.16.5 -*- Autoconf -*-
+
+-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
++# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -14,15 +14,15 @@
+ m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+ m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+-[m4_warning([this file was generated for autoconf 2.69.
++m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.72],,
++[m4_warning([this file was generated for autoconf 2.72.
+ You have another version of autoconf. It may work, but is not guaranteed to.
+ If you have problems, you may need to regenerate the build system entirely.
+ To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+-dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+-dnl serial 11 (pkg-config-0.29)
+-dnl
++# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
++# serial 11 (pkg-config-0.29.1)
++
+ dnl Copyright © 2004 Scott James Remnant .
+ dnl Copyright © 2012-2015 Dan Nicholson
+ dnl
+@@ -63,7 +63,7 @@ dnl
+ dnl See the "Since" comment for each macro you use to see what version
+ dnl of the macros you require.
+ m4_defun([PKG_PREREQ],
+-[m4_define([PKG_MACROS_VERSION], [0.29])
++[m4_define([PKG_MACROS_VERSION], [0.29.1])
+ m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+ [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
+ ])dnl PKG_PREREQ
+@@ -296,7 +296,75 @@ AS_VAR_COPY([$1], [pkg_cv_][$1])
+ AS_VAR_IF([$1], [""], [$5], [$4])dnl
+ ])dnl PKG_CHECK_VAR
+
+-# Copyright (C) 2002-2018 Free Software Foundation, Inc.
++dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES,
++dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND],
++dnl [DESCRIPTION], [DEFAULT])
++dnl ------------------------------------------
++dnl
++dnl Prepare a "--with-" configure option using the lowercase
++dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and
++dnl PKG_CHECK_MODULES in a single macro.
++AC_DEFUN([PKG_WITH_MODULES],
++[
++m4_pushdef([with_arg], m4_tolower([$1]))
++
++m4_pushdef([description],
++ [m4_default([$5], [build with ]with_arg[ support])])
++
++m4_pushdef([def_arg], [m4_default([$6], [auto])])
++m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes])
++m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no])
++
++m4_case(def_arg,
++ [yes],[m4_pushdef([with_without], [--without-]with_arg)],
++ [m4_pushdef([with_without],[--with-]with_arg)])
++
++AC_ARG_WITH(with_arg,
++ AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),,
++ [AS_TR_SH([with_]with_arg)=def_arg])
++
++AS_CASE([$AS_TR_SH([with_]with_arg)],
++ [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)],
++ [auto],[PKG_CHECK_MODULES([$1],[$2],
++ [m4_n([def_action_if_found]) $3],
++ [m4_n([def_action_if_not_found]) $4])])
++
++m4_popdef([with_arg])
++m4_popdef([description])
++m4_popdef([def_arg])
++
++])dnl PKG_WITH_MODULES
++
++dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
++dnl [DESCRIPTION], [DEFAULT])
++dnl -----------------------------------------------
++dnl
++dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES
++dnl check._[VARIABLE-PREFIX] is exported as make variable.
++AC_DEFUN([PKG_HAVE_WITH_MODULES],
++[
++PKG_WITH_MODULES([$1],[$2],,,[$3],[$4])
++
++AM_CONDITIONAL([HAVE_][$1],
++ [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"])
++])dnl PKG_HAVE_WITH_MODULES
++
++dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
++dnl [DESCRIPTION], [DEFAULT])
++dnl ------------------------------------------------------
++dnl
++dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after
++dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make
++dnl and preprocessor variable.
++AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES],
++[
++PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4])
++
++AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"],
++ [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])])
++])dnl PKG_HAVE_DEFINE_WITH_MODULES
++
++# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -311,7 +379,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
+ [am__api_version='1.16'
+ dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+ dnl require some minimum version. Point them to the right macro.
+-m4_if([$1], [1.16.1], [],
++m4_if([$1], [1.16.5], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+ ])
+
+@@ -327,14 +395,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
+ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+ # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+ AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+-[AM_AUTOMAKE_VERSION([1.16.1])dnl
++[AM_AUTOMAKE_VERSION([1.16.5])dnl
+ m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+ # Figure out how to run the assembler. -*- Autoconf -*-
+
+-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -354,7 +422,7 @@ _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl
+
+ # AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -406,7 +474,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+ # AM_CONDITIONAL -*- Autoconf -*-
+
+-# Copyright (C) 1997-2018 Free Software Foundation, Inc.
++# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -437,7 +505,7 @@ AC_CONFIG_COMMANDS_PRE(
+ Usually this means the macro was only invoked conditionally.]])
+ fi])])
+
+-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
++# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -628,7 +696,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
+
+ # Generate code to set up dependency tracking. -*- Autoconf -*-
+
+-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
++# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -667,7 +735,9 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+ done
+ if test $am_rc -ne 0; then
+ AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
+- for automatic dependency tracking. Try re-running configure with the
++ for automatic dependency tracking. If GNU make was not used, consider
++ re-running the configure script with MAKE="gmake" (or whatever is
++ necessary). You can also try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).])
+ fi
+@@ -694,7 +764,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+
+ # Do all the work for Automake. -*- Autoconf -*-
+
+-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
++# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -722,6 +792,10 @@ m4_defn([AC_PROG_CC])
+ # release and drop the old call support.
+ AC_DEFUN([AM_INIT_AUTOMAKE],
+ [AC_PREREQ([2.65])dnl
++m4_ifdef([_$0_ALREADY_INIT],
++ [m4_fatal([$0 expanded multiple times
++]m4_defn([_$0_ALREADY_INIT]))],
++ [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl
+ dnl Autoconf wants to disallow AM_ names. We explicitly allow
+ dnl the ones we care about.
+ m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+@@ -758,7 +832,7 @@ m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ [_AM_SET_OPTIONS([$1])dnl
+ dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+ m4_if(
+- m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
++ m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+@@ -810,6 +884,20 @@ AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+ ])
++# Variables for tags utilities; see am/tags.am
++if test -z "$CTAGS"; then
++ CTAGS=ctags
++fi
++AC_SUBST([CTAGS])
++if test -z "$ETAGS"; then
++ ETAGS=etags
++fi
++AC_SUBST([ETAGS])
++if test -z "$CSCOPE"; then
++ CSCOPE=cscope
++fi
++AC_SUBST([CSCOPE])
++
+ AC_REQUIRE([AM_SILENT_RULES])dnl
+ dnl The testsuite driver may need to know about EXEEXT, so add the
+ dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+@@ -891,7 +979,7 @@ for _am_header in $config_headers :; do
+ done
+ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -912,7 +1000,7 @@ if test x"${install_sh+set}" != xset; then
+ fi
+ AC_SUBST([install_sh])])
+
+-# Copyright (C) 2003-2018 Free Software Foundation, Inc.
++# Copyright (C) 2003-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -933,7 +1021,7 @@ AC_SUBST([am__leading_dot])])
+
+ # Check to see how 'make' treats includes. -*- Autoconf -*-
+
+-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -976,7 +1064,7 @@ AC_SUBST([am__quote])])
+
+ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+-# Copyright (C) 1997-2018 Free Software Foundation, Inc.
++# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -997,12 +1085,7 @@ AC_DEFUN([AM_MISSING_HAS_RUN],
+ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+ AC_REQUIRE_AUX_FILE([missing])dnl
+ if test x"${MISSING+set}" != xset; then
+- case $am_aux_dir in
+- *\ * | *\ *)
+- MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+- *)
+- MISSING="\${SHELL} $am_aux_dir/missing" ;;
+- esac
++ MISSING="\${SHELL} '$am_aux_dir/missing'"
+ fi
+ # Use eval to expand $SHELL
+ if eval "$MISSING --is-lightweight"; then
+@@ -1013,7 +1096,7 @@ else
+ fi
+ ])
+
+-# Copyright (C) 2003-2018 Free Software Foundation, Inc.
++# Copyright (C) 2003-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -1047,7 +1130,7 @@ esac
+
+ # Helper functions for option handling. -*- Autoconf -*-
+
+-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -1076,7 +1159,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
+ AC_DEFUN([_AM_IF_OPTION],
+ [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
++# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -1123,7 +1206,7 @@ AC_LANG_POP([C])])
+ # For backward compatibility.
+ AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -1142,7 +1225,7 @@ AC_DEFUN([AM_RUN_LOG],
+
+ # Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
++# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -1223,7 +1306,7 @@ AC_CONFIG_COMMANDS_PRE(
+ rm -f conftest.file
+ ])
+
+-# Copyright (C) 2009-2018 Free Software Foundation, Inc.
++# Copyright (C) 2009-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -1283,7 +1366,7 @@ AC_SUBST([AM_BACKSLASH])dnl
+ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+ ])
+
+-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
++# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -1311,7 +1394,7 @@ fi
+ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+ AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+-# Copyright (C) 2006-2018 Free Software Foundation, Inc.
++# Copyright (C) 2006-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -1330,7 +1413,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+ # Check how to create a tarball. -*- Autoconf -*-
+
+-# Copyright (C) 2004-2018 Free Software Foundation, Inc.
++# Copyright (C) 2004-2021 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 0ccb1c8..848a18c 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -197,5 +197,5 @@ else
+ include trio/Makefile.am.inc
+ endif
+
+-mednafen_LDADD += @FLAC_LIBS@ @ZLIB_LIBS@ @LIBINTL@ @LIBICONV@
++mednafen_LDADD += @FLAC_LIBS@ @ZLIB_LIBS@ @LIBINTL@ @LIBICONV@ -lswitchres
+
diff --git a/package/mednafen/Config.in b/package/mednafen/Config.in
new file mode 100644
index 0000000000000000000000000000000000000000..9afb0bd552ba447bcaed1660e4d19b43a655d0fc
--- /dev/null
+++ b/package/mednafen/Config.in
@@ -0,0 +1,7 @@
+config BR2_PACKAGE_MEDNAFEN
+ bool "mednafen"
+ help
+ Mednafen is a portable, utilizing OpenGL and SDL,
+ argument(command-line)-driven multi-system emulator.
+
+ https://mednafen.github.io/
diff --git a/package/mednafen/mednafen.mk b/package/mednafen/mednafen.mk
new file mode 100644
index 0000000000000000000000000000000000000000..88616e04e4b425567cad1ea4230f0e5b9d6b2310
--- /dev/null
+++ b/package/mednafen/mednafen.mk
@@ -0,0 +1,40 @@
+################################################################################
+#
+# MEDNAFEN
+#
+################################################################################
+
+# Version 1.32.1
+MEDNAFEN_VERSION = 1.32.1
+MEDNAFEN_SOURCE = mednafen-$(MEDNAFEN_VERSION).tar.xz
+MEDNAFEN_SITE = https://mednafen.github.io/releases/files
+MEDNAFEN_LICENSE = GPL-2.0
+MEDNAFEN_LICENSE_FILES = COPYING
+MEDNAFEN_DEPENDENCIES = switchres arcade-dats
+
+MEDNAFEN_CONF_OPTS += --disable-apple2 \
+ --disable-gb \
+ --disable-gba \
+ --disable-lynx \
+ --disable-md \
+ --disable-nes \
+ --disable-ngp \
+ --disable-pce \
+ --disable-pce-fast \
+ --disable-pcfx \
+ --disable-psx \
+ --disable-sms \
+ --disable-snes \
+ --disable-snes-faust \
+ --disable-ssfplay \
+ --disable-vb \
+ --disable-wswan \
+ --disable-ssfplay
+
+define MEDNAFEN_BUILD_DATS
+ $(call InstallArcadeFiles,mednafen,stv,$(MEDNAFEN_VERSION))
+endef
+
+MEDNAFEN_POST_INSTALL_TARGET_HOOKS += MEDNAFEN_BUILD_DATS
+
+$(eval $(autotools-package))
diff --git a/package/recalbox-configgen/Config.in b/package/recalbox-configgen/Config.in
index de0a8b97bf438d51d4baf8dd078b5dfff8abf8aa..52858a43e362bb106f6b7ece851ab8fee4f2b92d 100644
--- a/package/recalbox-configgen/Config.in
+++ b/package/recalbox-configgen/Config.in
@@ -6,6 +6,8 @@ config BR2_PACKAGE_RECALBOX_CONFIGGEN
select BR2_PACKAGE_PYTHON_PYGAME2
select BR2_PACKAGE_PYTHON_PYGAME2_IMAGE
select BR2_PACKAGE_PYTHON_PYGAME2_FONT
+ select BR2_PACKAGE_PYTHON_EVDEV
+ select BR2_PACKAGE_PYTHON_JINJA2
help
The configuration utility for recalbox
diff --git a/package/recalbox-configgen/recalbox-configgen.mk b/package/recalbox-configgen/recalbox-configgen.mk
index 1278bc952bdb529cae021ecc8a2865fefd0ada9d..2bbbe301c0d74262f39456592053a2e4136652cd 100644
--- a/package/recalbox-configgen/recalbox-configgen.mk
+++ b/package/recalbox-configgen/recalbox-configgen.mk
@@ -9,7 +9,7 @@ RECALBOX_CONFIGGEN_SITE = $(TOPDIR)/../projects/configgen
RECALBOX_CONFIGGEN_SITE_METHOD = local
RECALBOX_CONFIGGEN_LICENSE = GPLv2
-RECALBOX_CONFIGGEN_DEPENDENCIES = python3 python-pyudev python-pygame2
+RECALBOX_CONFIGGEN_DEPENDENCIES = python3 python-pyudev python-pygame2 python-jinja2 python-markupsafe python-evdev
RECALBOX_CONFIGGEN_SETUP_TYPE = setuptools
diff --git a/package/recalbox-romfs2/systems/stv/init/roms/.keep b/package/recalbox-romfs2/systems/stv/init/roms/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/package/recalbox-romfs2/systems/stv/system.ini b/package/recalbox-romfs2/systems/stv/system.ini
new file mode 100644
index 0000000000000000000000000000000000000000..f37c6d253d3004c730f7b68bd3bcdf311c097649
--- /dev/null
+++ b/package/recalbox-romfs2/systems/stv/system.ini
@@ -0,0 +1,82 @@
+; ===========================
+; stv
+; ===========================
+
+; all keys can be overridden for a particular board using key.
+; example:
+; priority = 0
+; priority.rpi4 = 3
+; Complete sections may be overridden. In such cases, all key from the global section are ignored,
+; you must redefine them all
+; example
+; [core.0]
+; [core.0.rpi4]
+; Board tags are defined by BR2_PACKAGE_RECALBOX_TARGET_
+
+[system]
+uuid = "58194f2a-c0c7-4cc0-96f1-3eb44fef602a"
+name = "stv"
+fullname = "ST-V"
+theme.folder = "stv"
+roms.folder = "%ROOT%/stv"
+screenscraper.id = 69
+doc.link.fr = "https://wiki.recalbox.com/fr/emulators/stv"
+doc.link.en = "https://wiki.recalbox.com/en/emulators/stv"
+doc.link.es = "https://wiki.recalbox.com/es/emulators/stv"
+port = 0
+readonly = 0
+downloader = 0
+icon.unicode = $F2DC
+extension.types = "*=pcb"
+
+[properties]
+type = arcade
+device.pad = mandatory
+device.keyboard = no
+device.mouse = no
+device.lightgun = no
+release.date = "1994-01"
+manufacturer = "sega"
+retroachievements = 1
+crt.multiresolution = 0
+crt.multiregion = 0
+
+[core.0]
+package = BR2_PACKAGE_LIBRETRO_KRONOS
+priority = 1
+emulator = "libretro"
+core = "kronos"
+extensions = ".zip"
+netplay = 0
+softpatching = 0
+compatibility = good
+speed = good
+crt.available = 0
+arcade.file = stv.lst
+
+[core.1]
+package = BR2_PACKAGE_LIBRETRO_MAME0274
+priority = 2
+emulator = "libretro"
+core = "mame0274"
+extensions = ".zip"
+softpatching = 0
+netplay = 1
+compatibility = high
+speed = high
+crt.available = 1
+arcade.file = stv.lst
+
+[core.2]
+package = BR2_PACKAGE_MEDNAFEN
+priority = 3
+emulator = "mednafen"
+core = "mednafen"
+extensions = ".zip"
+netplay = 1
+softpatching = 0
+compatibility = good
+speed = good
+crt.available = 1
+arcade.file = stv.lst
+
diff --git a/package/recalbox-romfs2/systems/stv/upgrade/roms/.readme.placeholder b/package/recalbox-romfs2/systems/stv/upgrade/roms/.readme.placeholder
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/package/switchres/001-continue-when-device-not-supported.patch b/package/switchres/001-continue-when-device-not-supported.patch
index c6898a562498ac02aa042ef7f51b183a2f407642..0ceb0c78750a078839d51e5021c17daf074f7bc2 100644
--- a/package/switchres/001-continue-when-device-not-supported.patch
+++ b/package/switchres/001-continue-when-device-not-supported.patch
@@ -1,23 +1,22 @@
---- a/custom_video_drmkms.cpp 2021-08-10 15:45:36.851885989 +0200
-+++ b/custom_video_drmkms.cpp 2021-08-10 15:45:20.519710399 +0200
-@@ -356,13 +356,18 @@
- drmFreeVersion(version);
+--- a/custom_video_drmkms.cpp 2024-05-15 20:01:07.000000000 +0200
++++ b/custom_video_drmkms.cpp 2024-12-25 21:02:46.088875255 +0100
+@@ -592,8 +592,10 @@
+ drmFreeVersion(version);
- uint64_t check_dumb = 0;
-- if (drmGetCap(m_drm_fd, DRM_CAP_DUMB_BUFFER, &check_dumb) < 0)
-+ if (drmGetCap(m_drm_fd, DRM_CAP_DUMB_BUFFER, &check_dumb) < 0){
- log_error("DRM/KMS: <%d> (init) [ERROR] ioctl DRM_CAP_DUMB_BUFFER\n", m_id);
-+ continue;
-+ }
+ uint64_t check_dumb = 0;
+- if (drmGetCap(m_drm_fd, DRM_CAP_DUMB_BUFFER, &check_dumb) < 0)
++ if (drmGetCap(m_drm_fd, DRM_CAP_DUMB_BUFFER, &check_dumb) < 0){
+ log_error("DRM/KMS: <%d> (init) [ERROR] ioctl DRM_CAP_DUMB_BUFFER\n", m_id);
++ continue;
++ }
-- if (!check_dumb)
-+ if (!check_dumb){
- log_error("DRM/KMS: <%d> (init) [ERROR] dumb buffer not supported\n", m_id);
-+ continue;
-+ }
+ if (!check_dumb)
+ {
+@@ -602,6 +604,7 @@
+ }
- p_res = drmModeGetResources(m_drm_fd);
-+ log_verbose("DRM/KMS: <%d> (init) found connectors: %d\n", m_id, p_res->count_connectors);
+ p_res = drmModeGetResources(m_drm_fd);
++ log_verbose("DRM/KMS: <%d> (init) found connectors: %d\n", m_id, p_res->count_connectors);
- for (int i = 0; i < p_res->count_connectors; i++)
- {
+ for (int i = 0; i < p_res->count_connectors; i++)
+ {
diff --git a/package/switchres/003-modeline-lcd.patch b/package/switchres/003-modeline-lcd.patch
index 4669af47631935c625ff11b4bbc3f9139cc25df9..2ae541a0fb988e511b8f7ebe03f8f240762185c8 100644
--- a/package/switchres/003-modeline-lcd.patch
+++ b/package/switchres/003-modeline-lcd.patch
@@ -1,23 +1,24 @@
---- a/modeline.cpp 2021-08-10 23:28:13.246111830 +0200
-+++ b/modeline.cpp 2021-08-10 23:28:16.174143821 +0200
-@@ -149,8 +149,8 @@
- // if there's nothing we can do, we're out of range
- else
- {
-- t_mode->result.weight |= R_OUT_OF_RANGE;
-- return -1;
-+ //t_mode->result.weight |= R_OUT_OF_RANGE;
-+ //return -1;
- }
-
- // ≈≈≈ Horizontal resolution ≈≈≈
---- a/switchres.cpp 2021-08-11 00:10:00.113154730 +0200
-+++ b/switchres.cpp 2021-08-11 00:09:57.705129262 +0200
+--- a/modeline.cpp 2024-05-15 20:01:07.000000000 +0200
++++ b/modeline.cpp 2024-12-30 21:02:58.624760861 +0100
+@@ -153,8 +153,8 @@
+ // if there's nothing we can do, we're out of range
+ else
+ {
+- t_mode->result.weight |= R_OUT_OF_RANGE;
+- return -1;
++ //t_mode->result.weight |= R_OUT_OF_RANGE;
++ //return -1;
+ }
+
+ // ≈≈≈ Horizontal resolution ≈≈≈
+--- a/switchres.cpp 2024-05-15 20:01:07.000000000 +0200
++++ b/switchres.cpp 2024-12-30 21:04:04.086071211 +0100
@@ -92,7 +92,7 @@
- // Set display manager default options
- set_screen("auto");
- set_modeline_generation(true);
-- set_lock_unsupported_modes(true);
-+ set_lock_unsupported_modes(false);
- set_lock_system_modes(true);
- set_refresh_dont_care(false);
+ for (int i = 0; i < MAX_RANGES; i++) display()->set_crt_range(i, "auto");
+ display()->set_screen("auto");
+ display()->set_modeline_generation(true);
+- display()->set_lock_unsupported_modes(true);
++ display()->set_lock_unsupported_modes(false);
+ display()->set_lock_system_modes(true);
+ display()->set_refresh_dont_care(false);
+
diff --git a/package/switchres/switchres.mk b/package/switchres/switchres.mk
index e6da5a8629fe5a18d7b02b2a6c9a73065e992809..2f632fe597d39beb2042477988fb828cd42b6ee9 100644
--- a/package/switchres/switchres.mk
+++ b/package/switchres/switchres.mk
@@ -4,29 +4,39 @@
#
################################################################################
-SWITCHRES_VERSION = a8af8e8f7f54d24414b4a8595a84c0f0f23e14a1
-SWITCHRES_SITE = $(call github,antonioginer,switchres,$(SWITCHRES_VERSION))
+SWITCHRES_VERSION = 2.2.1
+SWITCHRES_SITE = $(call github,antonioginer,switchres,v$(SWITCHRES_VERSION))
SWITCHRES_LICENSE = GPL2
-SWITCHRES_DEPENDENCIES = libdrm host-dos2unix
+SWITCHRES_DEPENDENCIES = libdrm host-dos2unix sdl2_ttf
+SWITCHRES_INSTALL_STAGING = YES
-# Hack to patch the CRLF files
-define SWITCHRES_CRLF_PATH
- $(SED) 's/\r//' "$(@D)/modeline.cpp" "$(@D)/switchres.cpp"
+define SWITCHRES_BUILD_CMDS
+ # Cross-compile standalone and libswitchres
+ cd $(@D) && \
+ PATH="$(HOST_DIR)/bin:$$PATH" \
+ CC="$(TARGET_CC)" \
+ CXX="$(TARGET_CXX)" \
+ PREFIX="$(STAGING_DIR)/usr" \
+ PKG_CONFIG_PATH="$(STAGING_DIR)/usr/lib/pkgconfig" \
+ CPPFLAGS="-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/usr/include/libdrm" \
+ $(MAKE) all grid
endef
-SWITCHRES_PRE_PATCH_HOOKS += SWITCHRES_CRLF_PATH
-
-define SWITCHRES_BUILD_CMDS
- CFLAGS="$(TARGET_CFLAGS) $(COMPILER_COMMONS_CFLAGS_SO)" \
- CXXFLAGS="$(TARGET_CXXFLAGS) $(COMPILER_COMMONS_CXXFLAGS_SO)" \
- LDFLAGS="$(TARGET_LDFLAGS) $(COMPILER_COMMONS_LDFLAGS_SO)" \
- $(MAKE) PREFIX="$(STAGING_DIR)/usr" \
- PKG_CONFIG="$(HOST_DIR)/bin/pkg-config" \
- CXX="$(TARGET_CXX)" CC="$(TARGET_CC)" -C $(@D)/ -f makefile
+define SWITCHRES_INSTALL_STAGING_CMDS
+ cd $(@D) && \
+ PATH="$(HOST_DIR)/bin:$$PATH" \
+ CC="$(TARGET_CC)" \
+ CXX="$(TARGET_CXX)" \
+ BASE_DIR="" \
+ PREFIX="$(STAGING_DIR)/usr" \
+ PKG_CONFIG_PATH="$(STAGING_DIR)/usr/lib/pkgconfig" \
+ $(MAKE) install
endef
define SWITCHRES_INSTALL_TARGET_CMDS
- $(INSTALL) -D -m 0544 $(@D)/switchres $(TARGET_DIR)/usr/bin/switchres
+ cp $(@D)/libswitchres.so.$(SWITCHRES_VERSION) $(TARGET_DIR)/usr/lib/
+ ln -sf /usr/lib/libswitchres.so.$(SWITCHRES_VERSION) $(TARGET_DIR)/usr/lib/libswitchres.so.2
+ ln -sf /usr/lib/libswitchres.so.$(SWITCHRES_VERSION) $(TARGET_DIR)/usr/lib/libswitchres.so
endef
$(eval $(generic-package))
diff --git a/projects/configgen/configgen/emulatorlauncher.py b/projects/configgen/configgen/emulatorlauncher.py
index 5d234092d55725d2830d18b97ddb0189b2576556..2bc0f8e897c016612d60e90fc0ef07f2f44e3125 100644
--- a/projects/configgen/configgen/emulatorlauncher.py
+++ b/projects/configgen/configgen/emulatorlauncher.py
@@ -149,6 +149,10 @@ def getGenerator(emulator):
module = __import__("configgen.generators.xemu.xemuGenerator", fromlist=["XemuGenerator"])
generatorClass = getattr(module, "XemuGenerator")
return generatorClass()
+ elif emulator == "mednafen":
+ module = __import__("configgen.generators.mednafen.mednafenGenerator", fromlist=["MednafenGenerator"])
+ generatorClass = getattr(module, "MednafenGenerator")
+ return generatorClass()
else:
print("Missing generator for {}".format(emulator))
raise ValueError
diff --git a/projects/configgen/configgen/generators/mednafen/__init__.py b/projects/configgen/configgen/generators/mednafen/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/projects/configgen/configgen/generators/mednafen/mednafen.cfg.j2 b/projects/configgen/configgen/generators/mednafen/mednafen.cfg.j2
new file mode 100644
index 0000000000000000000000000000000000000000..3d4dd90f9b67ff3db420eaebcc293c945daf989b
--- /dev/null
+++ b/projects/configgen/configgen/generators/mednafen/mednafen.cfg.j2
@@ -0,0 +1,112 @@
+;DO NOT EDIT THIS FILE WHILE AN INSTANCE OF MEDNAFEN THAT USES IT IS RUNNING.
+
+;Enable fullscreen mode.
+video.fs 1
+
+;Video resolution switch (0, native, super, switchres or mister).
+video.resolution_switch 0
+
+;Select sound output device.
+sound.device sexyal-literal-default
+
+;Select sound driver.
+sound.driver alsa
+
+;Path to directory for firmware
+filesys.path_firmware /recalbox/share/bios/stv
+
+;Path to directory for save states
+filesys.path_state /recalbox/share/saves/stv
+
+{% for i in controllers -%}
+{% if loop.first -%}
+;Exit
+{% if i.isjamma -%}
+command.exit joystick {{ i.id }} button_8
+{% else -%}
+command.exit joystick {{ i.id }} {{ i.pad['hotkey'] }} && joystick {{ i.id }} {{ i.pad['start'] }}
+{%- endif %}
+
+;Fast-forward
+command.fast_forward joystick {{ i.id }} {{ i.pad['start'] }} && joystick {{ i.id }} {{ i.pad['right'] }}
+
+;Insert coin
+{% if i.isjamma -%}
+command.insert_coin joystick {{ i.id }} button_6
+{% else -%}
+command.insert_coin joystick {{ i.id }} {{ i.pad['select'] }}
+{%- endif %}
+{% if i.isjamma -%}
+
+;ss, Builtin, builtin: ST-V Service
+ss.input.builtin.builtin.stv_service joystick {{ i.id }} button_10
+
+;ss, Builtin, builtin: ST-V Test
+ss.input.builtin.builtin.stv_test joystick {{ i.id }} button_9
+
+{%- endif %}
+;Load state
+command.load_state keyboard 0x0 64
+
+;Reset
+command.reset keyboard 0x0 67
+
+;Save state
+command.save_state keyboard 0x0 62
+
+;Rewind
+command.state_rewind keyboard 0x0 42
+
+;Decrease selected save state slot by 1
+command.state_slot_dec keyboard 0x0 45
+
+;Increase selected save state slot by 1
+command.state_slot_inc keyboard 0x0 46
+{%- endif %}
+
+;Input device for Virtual Port {{ loop.index }}
+ss.input.port{{ loop.index }} {{ i.type }}
+
+;ss, Virtual Port {{ loop.index }}, Digital Gamepad: A
+ss.input.port{{ loop.index }}.{{ i.type }}.a joystick {{ i.id }} {{ i.pad['b'] }}
+
+;ss, Virtual Port {{ loop.index }}, Digital Gamepad: B
+ss.input.port{{ loop.index }}.{{ i.type }}.b joystick {{ i.id }} {{ i.pad['a'] }}
+
+;ss, Virtual Port {{ loop.index }}, Digital Gamepad: C
+ss.input.port{{ loop.index }}.{{ i.type }}.c joystick {{ i.id }} {{ i.pad['r1'] }}
+
+;ss, Virtual Port {{ loop.index }}, Digital Gamepad: DOWN ↓
+ss.input.port{{ loop.index }}.{{ i.type }}.down joystick {{ i.id }} {{ i.pad['down'] }}
+
+;ss, Virtual Port {{ loop.index }}, Digital Gamepad: LEFT ←
+ss.input.port{{ loop.index }}.{{ i.type }}.left joystick {{ i.id }} {{ i.pad['left'] }}
+
+{% if 'l2' in i.pad -%}
+;ss, Virtual Port {{ loop.index }}, Digital Gamepad: Left Shoulder
+ss.input.port{{ loop.index }}.{{ i.type }}.ls joystick {{ i.id }} {{ i.pad['l2'] }}
+{%- endif %}
+
+;ss, Virtual Port {{ loop.index }}, Digital Gamepad: RIGHT →
+ss.input.port{{ loop.index }}.{{ i.type }}.right joystick {{ i.id }} {{ i.pad['right'] }}
+
+{% if 'r2' in i.pad -%}
+;ss, Virtual Port {{ loop.index }}, Digital Gamepad: Right Shoulder
+ss.input.port{{ loop.index }}.{{ i.type }}.rs joystick {{ i.id }} {{ i.pad['r2'] }}
+{%- endif %}
+
+;ss, Virtual Port {{ loop.index }}, Digital Gamepad: START
+ss.input.port{{ loop.index }}.{{ i.type }}.start joystick {{ i.id }} {{ i.pad['start'] }}
+
+;ss, Virtual Port {{ loop.index }}, Digital Gamepad: UP ↑
+ss.input.port{{ loop.index }}.{{ i.type }}.up joystick {{ i.id }} {{ i.pad['up'] }}
+
+;ss, Virtual Port {{ loop.index }}, Digital Gamepad: X
+ss.input.port{{ loop.index }}.{{ i.type }}.x joystick {{ i.id }} {{ i.pad['y'] }}
+
+;ss, Virtual Port {{ loop.index }}, Digital Gamepad: Y
+ss.input.port{{ loop.index }}.{{ i.type }}.y joystick {{ i.id }} {{ i.pad['x'] }}
+
+;ss, Virtual Port {{ loop.index }}, Digital Gamepad: Z
+ss.input.port{{ loop.index }}.{{ i.type }}.z joystick {{ i.id }} {{ i.pad['l1'] }}
+{%- endfor %}
diff --git a/projects/configgen/configgen/generators/mednafen/mednafenGenerator.py b/projects/configgen/configgen/generators/mednafen/mednafenGenerator.py
new file mode 100644
index 0000000000000000000000000000000000000000..f752f27d8defb2893f0919d7ddf8f40e6126c445
--- /dev/null
+++ b/projects/configgen/configgen/generators/mednafen/mednafenGenerator.py
@@ -0,0 +1,114 @@
+import os
+import shutil
+import evdev
+
+from typing import List
+
+from configgen.Command import Command
+import configgen.recalboxFiles as recalboxFiles
+from configgen.Emulator import Emulator
+from configgen.generators.Generator import Generator
+from configgen.settings.keyValueSettings import keyValueSettings
+from configgen.controllers.controller import Controller, InputItem, ControllerPerPlayer
+
+class MednafenGenerator(Generator):
+
+ @staticmethod
+ def getInfo(controller: Controller):
+ abs_count = 0
+ info = dict()
+ info['pad'] = dict()
+ if controller.DeviceName.startswith("JammaController"):
+ info['isjamma'] = True
+ else:
+ info['isjamma'] = False
+ device = evdev.InputDevice(controller.DevicePath)
+ capabilities = device.capabilities(verbose=False, absinfo=False)
+ list_cap = capabilities.items()
+ for i in list_cap:
+ if i[0] == 3:
+ for x in i[1]:
+ if device.absinfo(x).max == 1:
+ if x in [0, 16]:
+ abs_z = "abs_%i" % abs_count
+ if x in [1, 17]:
+ abs_x = "abs_%i" % abs_count
+ abs_count = abs_count + 1
+ uniqID = "0x{:04x}{:04x}{:04x}{:04x}{:04x}{:04x}0000000{:01d}"
+ info['id'] = uniqID.format(device.info.bustype,
+ device.info.vendor,
+ device.info.product,
+ device.info.version,
+ controller.AxisCount + 2 * controller.HatCount,
+ 11 if info['isjamma'] else controller.ButtonCount,
+ controller.SdlIndex)
+ info['type'] = 'gamepad'
+ info['pad']['up'] = "%s-" % (abs_x)
+ info['pad']['down'] = "%s+" % (abs_x)
+ info['pad']['left'] = "%s-" % (abs_z)
+ info['pad']['right'] = "%s+" % (abs_z)
+ info['pad']['start'] = "button_%s" % controller.Start.Id
+ info['pad']['select'] = "button_%s" % controller.Select.Id
+ info['pad']['hotkey'] = "button_%s" % controller.Hotkey.Id
+ if info['isjamma']:
+ info['pad']['x'] = "button_%s" % controller.A.Id
+ info['pad']['y'] = "button_%s" % controller.B.Id
+ info['pad']['a'] = "button_%s" % controller.X.Id
+ info['pad']['b'] = "button_%s" % controller.Y.Id
+ info['pad']['r1'] = "button_%s" % controller.L1.Id
+ info['pad']['l1'] = "button_%s" % controller.R1.Id
+ else:
+ info['pad']['a'] = "button_%s" % controller.A.Id
+ info['pad']['b'] = "button_%s" % controller.B.Id
+ info['pad']['x'] = "button_%s" % controller.X.Id
+ info['pad']['y'] = "button_%s" % controller.Y.Id
+ info['pad']['l1'] = "button_%s" % controller.L1.Id
+ info['pad']['r1'] = "button_%s" % controller.R1.Id
+ return info
+
+ def generate(self, system: Emulator, playersControllers: ControllerPerPlayer, recalboxOptions: keyValueSettings, args,) -> Command:
+ """
+ Load, override keys and save back emulator's configuration file
+ This way, any modification is kept accross emulator launhes
+ """
+
+ if not os.path.exists(recalboxFiles.mednafenConfig):
+ os.makedirs(recalboxFiles.mednafenConfig)
+
+ if os.path.exists(recalboxFiles.mednafenConfigFile):
+ os.remove(recalboxFiles.mednafenConfigFile)
+
+ controllers = list()
+ for index in playersControllers:
+ controller = playersControllers[index]
+ controllers.append(self.getInfo(controller))
+
+ if system.CRTAdapter:
+ resolution_switch = "switchres"
+ else:
+ resolution_switch = 0
+
+ import jinja2
+ templateLoader = jinja2.FileSystemLoader(searchpath="/")
+ templateEnv = jinja2.Environment(loader=templateLoader)
+ TEMPLATE_FILE = "/usr/lib/python3.11/site-packages/configgen/generators/mednafen/mednafen.cfg.j2"
+ template = templateEnv.get_template(TEMPLATE_FILE)
+ templateVars = {"controllers": controllers,
+ "resolution_switch": resolution_switch,
+ }
+ outputText = template.render(templateVars)
+
+ with open(recalboxFiles.mednafenConfigFile, 'w+') as f:
+ f.write(outputText)
+ f.close()
+
+ commandArray = [
+ recalboxFiles.recalboxBins[system.Emulator],
+ ]
+
+ if system.HasArgs:
+ commandArray.extend(system.Args)
+
+ commandArray.append(args.rom)
+
+ return Command(videomode=system.VideoMode, array=commandArray)
diff --git a/projects/configgen/configgen/recalboxFiles.py b/projects/configgen/configgen/recalboxFiles.py
index d15e97909450a8e133cdfc3996165537dfb4d126..7f0c6743f04908f8bc2f4a80d6b45391248658bc 100644
--- a/projects/configgen/configgen/recalboxFiles.py
+++ b/projects/configgen/configgen/recalboxFiles.py
@@ -57,6 +57,7 @@ recalboxBins =\
'xemu' : '/usr/bin/xemu',
'xroar' : '/usr/bin/xroar',
'vvvvvv' : '/usr/bin/vvvvvv/VVVVVV',
+ 'mednafen' : '/usr/bin/mednafen',
}
@@ -187,3 +188,6 @@ sdlpopConfigFile = CONF + '/sdlpop/sdlpop.ini'
sdlpopControllersFile = CONF + '/sdlpop/gamecontrollerdb.txt'
xemuConfig = CONF + '/xemu/xemu.toml'
+
+mednafenConfig = HOME + '/.mednafen'
+mednafenConfigFile = mednafenConfig + '/mednafen.cfg'
diff --git a/projects/configgen/setup.py b/projects/configgen/setup.py
index fa9ed6011dd4678d84f569e88cbeeb4a4d3ef2ba..6da44d9718ad1244b3e35ad2e3beaa738c8aa38e 100644
--- a/projects/configgen/setup.py
+++ b/projects/configgen/setup.py
@@ -46,7 +46,10 @@ setup(name='recalbox-configgen',
'configgen.generators.sdlpop',
'configgen.generators.vvvvvv',
'configgen.generators.xemu',
+ 'configgen.generators.mednafen',
'configgen.settings',
'configgen.utils'],
- scripts=['emulatorlauncher.py']
+ scripts=['emulatorlauncher.py'],
+ package_data={'': ['*.j2']},
+ include_package_data=True
)