diff --git a/makefile b/makefile index 2173986..5aca72c 100644 --- a/makefile +++ b/makefile @@ -19,8 +19,9 @@ RELEASE_BASE=FinUI-$(RELEASE_TIME)b RELEASE_DOT!=find ./releases/. -regex ".*/$(RELEASE_BASE)-[0-9]+-base\.zip" -printf '.' | wc -m RELEASE_NAME=$(RELEASE_BASE)-$(RELEASE_DOT) -ifeq (,$(BUILD_HASH)) -BUILD_HASH="devRelease" +#in case BUILD_HASH is empty, put something to avoid crashing +ifeq (,$(BUILD_HASH)) +BUILD_HASH="unknown release" endif # TODO: this needs to consider the different platforms, eg. rootfs.ext2 should only be copied in rg35xx-toolchain @@ -45,6 +46,7 @@ all-cores: tools: cd ./src/clock && make cd ./src/clear_recent && make + cd ./src/toggle_adb && make cd ./other/DinguxCommander && make -j bundle: @@ -73,6 +75,7 @@ bundle: cp ./src/minui/minui.elf ./build/SYSTEM/rg35xx/paks/MinUI.pak cp ./src/clock/clock.elf ./build/EXTRAS/Tools/rg35xx/Clock.pak cp ./src/clear_recent/clear_recent.elf "./build/EXTRAS/Tools/rg35xx/Clear Recently Played.pak" + cp ./src/toggle_adb/toggle_adb.elf "./build/EXTRAS/Tools/rg35xx/Toggle ADB.pak" # stock cores cp ./cores/output/fceumm_libretro.so ./build/SYSTEM/rg35xx/cores @@ -106,14 +109,14 @@ zip: cd ./build/PAYLOAD && zip -r MinUI.zip .system mv ./build/PAYLOAD/MinUI.zip ./build/BASE - cd ./build/BASE && zip -r ../../releases/$(RELEASE_NAME)-base.zip Bios Roms Saves Screenshots dmenu.bin MinUI.zip README.txt INSTALL.txt SHORTCUTS.txt - cd ./build/EXTRAS && zip -r ../../releases/$(RELEASE_NAME)-extras.zip Bios Emus Roms Saves Screenshots Tools README.txt + cd ./build/BASE && zip -r ../../releases/$(RELEASE_NAME)-base.zip Bios Roms Saves dmenu.bin MinUI.zip README.txt INSTALL.txt SHORTCUTS.txt + cd ./build/EXTRAS && zip -r ../../releases/$(RELEASE_NAME)-extras.zip Bios Emus Roms Saves Tools README.txt rm -fr ./build/FULL mkdir ./build/FULL cp -fR ./build/BASE/* ./build/FULL/ cp -fR ./build/EXTRAS/* ./build/FULL/ - cd ./build/FULL && zip -r ../../releases/$(RELEASE_NAME)-full.zip Bios Emus Roms Saves Screenshots Tools dmenu.bin MinUI.zip INSTALL.txt SHORTCUTS.txt + cd ./build/FULL && zip -r ../../releases/$(RELEASE_NAME)-full.zip Bios Emus Roms Saves Tools dmenu.bin MinUI.zip INSTALL.txt SHORTCUTS.txt echo "$(RELEASE_NAME)" > ./build/latest.txt @@ -131,4 +134,5 @@ clean: cd ./cores && make clean cd ./src/clock && make clean cd ./src/clear_recent && make clean + cd ./src/toggle_adb && make clean cd ./other/DinguxCommander && make clean diff --git a/skeleton/BASE/Screenshots/.keep b/skeleton/BASE/Screenshots/.keep new file mode 100644 index 0000000..e69de29 diff --git a/skeleton/EXTRAS/Roms/aliases.txt b/skeleton/EXTRAS/Roms/aliases.txt new file mode 100644 index 0000000..204a303 --- /dev/null +++ b/skeleton/EXTRAS/Roms/aliases.txt @@ -0,0 +1,527 @@ +#Avoid complex names +#Separator is '~'. Do not include that in the alias +#Lines starting with '#' are comments and are not count +#Keep below 1000 including comments +# +#Works for any list (collections, favorites, consoles, etc) +#Real filename will be shown on game's menu. This only affects main menu listing. +# +#NEOGEO~## +2020bb~2020 Super Baseball +sonicwi2~Aero Fighters 2 +sonicwi3~Aero Fighters 3 +aodk~Aggressors of Dark KombatWold +alpham2~Alpha Mission II +androdun~Andro Dunos +aof2~Art of Fighting 2 +aof~Art of Fighting +bangbead~Bang Bead +bstars2~Baseball Stars 2 +bstars~Baseball Stars Professional +flipshot~Battle Flip Shot +blazstar~Blazing Star +bjourney~Blue's Journey +breakrev~Breakers Revenge +breakers~Breakers +burningf~Burning Fight +ctomaday~Captain Tomaday +gowcaizr~Chojin Gakuen Gowcaizer +crsword~Crossed Swords +cyberlip~Cyber-Lip +doubledr~Double Dragon +eightman~Eight Man +kabukikl~Far East of Eden: Kabuki Klash +fatfury1~Fatal Fury: King of Fighters +fatfury2~Fatal Fury 2 +fatfury3~Fatal Fury 3: Road to the Final Victory +fatfursp~Fatal Fury Special +fightfev~Fight Fever +karnovr~Fighter's History Dynamite +wjammers~Flying Power Disc +fbfrenzy~Football Frenzy +galaxyfg~Galaxy Fight: Universal Warriors +ganryu~Ganryu +garou~Garou: Mark of the Wolves +gpilots~Ghost Pilots +ghostlop~Ghostlop +goalx3~Goal! Goal! Goal! +gururin~Gururin +kotm2~King of the Monsters 2 - The Next Thing +kotm~King of the Monsters +kizuna~Kizuna Encounter - Super Tag Battle +lresort~Last Resort +lbowling~League Bowling +legendos~Legend of Success Joe +magdrop2~Magical Drop II +magdrop3~Magical Drop III +maglord~Magician Lord +matrim~Matrimelee +mslug~Metal Slug - Super Vehicle-001 +mslug2~Metal Slug 2 - Super Vehicle-001/II +mslug3~Metal Slug 3 +mslug4~Metal Slug 4 +mslug5~Metal Slug 5 +mslugx~Metal Slug X - Super Vehicle-001 +mutnat~Mutation Nation +nam1975~NAM-1975 +neobombe~Neo Bomberman +neodrift~Neo Drift Out - New Technology +neomrdo~Neo Mr. Do! +turfmast~Neo Turf Masters +neocup98~Neo-Geo Cup '98 - The Road to the Victory +nitd~Nightmare in the Dark +ncombat~Ninja Combat +ncommand~Ninja Commando +ninjamas~Ninja Master's: Haō Ninpō Chō +zedblade~Operation Ragnarok +overtop~Over Top +panicbom~Panic Bomber +pgoal~Pleasure Goal +pnyaa~Pochi and Nyaa +popbounc~Pop 'n Bounce +pspikes2~Power Spikes II +preisle2~Prehistoric Isle 2 +pulstar~Pulstar +pbobbl2n~Puzzle Bobble 2 +pbobblen~Puzzle Bobble +puzzledp~Puzzle De Pon! +joyjoy~Puzzled +rotd~Rage of the Dragons +ragnagrd~Ragnagard +rbff2~Real Bout Fatal Fury 2 - The Newcomers +rbffspec~Real Bout Fatal Fury Special +rbff1~Real Bout Fatal Fury +ridhero~Riding Hero +roboarmy~Robo Army +aof3~Ryuuko no Ken Gaiden +samsho2~Samurai Shodown II +samsho3~Samurai Shodown III +samsho4~Samurai Shodown IV - Amakusa's Revenge +samsho5~Samurai Shodown V +samsh5sp~Samurai Shodown V Special +samsho~Samurai Shodown +savagere~Savage Reign +sengoku2~Sengoku 2 +sengoku3~Sengoku 3 +sengoku~Sengoku +shocktr2~Shock Troopers: 2nd Squad +shocktro~Shock Troopers +socbrawl~Soccer Brawl +spinmast~Spin Master +stakwin2~Stakes Winner 2 +stakwin~Stakes Winner +strhoop~Street Hoop +s1945p~Strikers 1945 Plus +sdodgeb~Super Dodge Ball +ssideki2~Super Sidekicks 2 - The World Championship +ssideki3~Super Sidekicks 3 - The Next Glory +ssideki~Super Sidekicks +svc~SVC Chaos - SNK Vs. Capcom +irrmaze~The Irritating Maze +kof2000~The King of Fighters 2000 +kof2001~The King of Fighters 2001 +kof2002~The King of Fighters 2002 +kof2003~The King of Fighters 2003 +kof94~The King of Fighters '94 +kof95~The King of Fighters '95 +kof96~The King of Fighters '96 +kof97~The King of Fighters '97 +kof98~The King of Fighters '98 - The Slugfest +kof99~The King of Fighters '99: Millennium Battle +lastbld2~The Last Blade 2 +lastblad~The Last Blade +superspy~The Super Spy +ssideki4~The Ultimate 11: SNK Football Championship +trally~Thrash Rally +tophuntr~Top Hunter: Roddy & Cathy +tpgolf~Top Player's Golf +totc~Treasure of the Caribbean +twinspri~Twinkle Star Sprites +viewpoin~Viewpoint +vliner~V-Liner +wakuwak7~Waku Waku 7 +wh2j~World Heroes 2 Jet +wh2~World Heroes 2 +whp~World Heroes Perfect +wh1~World Heroes +zupapa~Zupapa! +neogeo~ZZZ +#ARCADE~## +1941~1941: Counter Attack +1942~1942 +1943kai~1943 Kai: Midway Kaisen +1943~1943: The Battle of Midway +1944~1944: The Loop Master +19xx~19XX: The War Against Destiny +720~720 Degrees +actfancr~Act-Fancer: Cybernetick Hyper Weapon +aburner2~After Burner II +aburner~After Burner +airwolf~Airwolf +typhoon~Ajax +lwings~Ales no Tsubasa: The Legendary Soldiers +astorm~Alien Storm +aliensyn~Alien Syndrome +aliensu~Aliens +avspu~Aliens Versus Predator +aligatun~Alligator Hunt +altbeast~Altered Beast +amidar~Amidar +aquajack~Aqua Jack +unsquad~Area 88 +rygar~Argus no Senshi +arknoid2~Arkanoid - Revenge Of Doh +arknoidu~Arkanoid +batrider~Armed Police Batrider +asterix~Asterix +asteroid~Asteroids +avspirit~Avenging Spirit +bankp~Bank Panic +batman~Batman +batcir~Battle Circuit +bzone~Battle Zone +btoads~Battletoads +blswhstl~Bells & Whistles +berzerk1~Berzerk +biomtoy~Biomechanical Toy +blktiger~Black Tiger +bwidow~Black Widow +blstroid~Blasteroids +bogeyman~Bogey Manor +bombjack~Bomb Jack +bosco~Bosconian +bubbobr1~Bubble Bobble +bubsympu~Bubble Symphony +bubbles~Bubbles +buckrog~Buck Rogers: Planet of Zoom +buckyua~Bucky O'Hare +bnj~Bump 'n' Jump +btime~Burger Time +bbros~Buster Bros. +cabal~Cabal +dinou~Cadillacs Kyouryuu-Shinseiki +dino~Cadillacs and Dinosaurs +captavnu~Captain America And The Avengers +captcomu~Captain Commando +centtime~Centipede +chasehq~Chase H.q. +chplft~Choplifter +circusc~Circus Charlie +citycon~City Connection +columns~Columns +commandu~Commando +congo~Congo Bongo +contra~Contra +cclimber~Crazy Climber +crimfgt2~Crime Fighters +cbuster~Crude Buster +ccastles~Crystal Castles +cybots~Cyberbots: Fullmetal Madness +cyvern~Cyvern - The Dragon Weapons +ddcrew~D. D. Crew +ghoulsu~Dai Makai-Mura +darkseal~Dark Seal +pow~Datsugoku: Prisoners of War +deadconx~Dead Connection +defendg~Defender +dassault~Desert Assault +digdug~Dig Dug +digdug2~Dig Dug II +dogyuun~Dogyuun +dondokod~Don Doko Don +dkongo~Donkey Kong +dkong3~Donkey Kong 3 +dkongjr~Donkey Kong Junior +donpachi~DonPachi +ddragonu~Double Dragon +ddragn2u~Double Dragon II - The Revenge +drtoppel~Dr. Toppel's Adventure +dbreed~Dragon Breed +dsaber~Dragon Saber +baddudes~Dragonninja +lightbr~Dungeon Magic +ddsomu~Dungeons & Dragons: Shadow over Mystara +ddtodu~Dungeons & Dragons: Tower of Doom +dw~Dynasty Wars +ecofghtr~Eco Fighters +elevator~Elevator Action +elvactr~Elevator Action Returns +enduror~Enduro Racer +exedexes~Exed Exes +fantzone~Fantasy Zone +fantzn2~Fantasy Zone II: The Tears of Opa-Opa +ffightu~Final Fight +ffight~Final Fight +flicky~Flicky +foodf~Food Fight +forgottn~Forgotten Worlds +frogger~Frogger +funkyjet~Funky Jet +gijoeu~G.I. Joe +galaga~Galaga +galaga88~Galaga ´88 +galaxian~Galaxian +galmedes~Galmedes +gangwars~Gang Wars +gaplus~Gaplus +gaunt2p~Gauntlet +gaunt22p~Gauntlet 2 +gigawing~Giga Wing +godzilla~Godzilla +goldnaxe~Golden Axe +ga2~Golden Axe: The Revenge of Death Adder +gorf~Gorf +gradius~Gradius +gradius2~Gradius II: Gofer no Yab +grdius3e~Gradius III +dimahoo~Great Mahou Daisakusen +growlu~Growl +grdians~Guardians: Denjin Makai II +gunsmoku~Gun.Smoke +gnbarich~Gunbarich +gunbird2~Gunbird 2 +gunforc2~GunForce II +gunlock~Gunlock +gunnail~GunNail +guwange~Guwange +gyruss~Gyruss +hharryu~Hammerin' Harry +hangon~Hang-on +hattrick~Hat Trick +heatbrlu~Heated Barrel +hvysmsh~Heavy Smash +hitice~Hit The Ice +hooku~Hook +horizon~Horizon +trackfld~Hyper Olympic +irobot~I, Robot +ikari3nr~Ikari III - The Rescue +ikarijpb~Ikari Warriors +imgfight~Image Fight +inthunt~In the Hunt +offroad~Ironman Ivan Stewart's Super Off-road +jailbrek~Jail Break +journey~Journey +joust~Joust +jungleh~Jungle King +junofrst~Juno First +kangaroo~Kangaroo +kchamp~Karate Dou +karnov~Karnov +kick~Kick +shaolins~Kicker +klax~Klax +knightsu~Knights of the Round +kungfum~Kung-fu Master +landmkrp~Land Maker +loht~Legend of Hero Tonma +lethalth~Lethal Thunder +lifefrce~Life Force +liquidk~Liquid Kids +ldrun~Lode Runner +ldrun2~Lode Runner II - The Bungeling Strikes Back +ldrun4~Lode Runner IV - Teikoku Karano Dasshutsu +loderndf~Lode Runner: The Dig Fight +looping~Looping +llander~Lunar Lander +macrossp~Macross Plus +mswordu~Magic Sword +mgcrystl~Magical Crystals +mhavoc~Major Havoc +gngt~Makai-Mura +mappy~Mappy +marble~Marble Madness +mario~Mario Bros. +mmatrix~Mars Matrix: Hyper Solid Shooting +mshvsf~Marvel Super Heroes vs. Street Fighter +mshvsfj~Marvel Super Heroes vs. Street Fighter +mvsc~Marvel vs. Capcom: Clash of Super Heroes +mazinger~Mazinger Z +mtwins~Mega Twins +mercs~Mercs +metmqstr~Metamoqester +metamrph~Metamorphic Force +moonwalk~Michael Jackson's Moonwalker +gtmr2~Mille Miglia 2: Great 1000 Miles Rally +milliped~Millipede +missile~Missile Command +monsterb~Monster Bash +mpatrol~Moon Patrol +mk~Mortal Kombat +mk2~Mortal Kombat 2 +mk3~Mortal Kombat 3 +mrdo~Mr. Do! +docastle~Mr. Do's Castle +mspacman~Ms. Pac-Man +mbombrd~Muscle Bomber Duo: Ultimate Team Battle +mystwaru~Mystic Warriors +narc~Narc +nbajam~Nba Jam +nbajamte~NBA Jam Tournament Edition +nemo~Nemo +nrallyx~New Rally X +nibbler~Nibbler +nslasher~Night Slashers +nbbatman~Ninja Baseball Bat Man +gaiden~Ninja Gaiden +nspirit~Ninja Spirit +ninjakd2~Ninja-Kid II +nitrobal~Nitro Ball +noboranb~Noboranka +candance~Osman +outrunb~Out Run +outzone~Out Zone +pacland~Pac-Land +pacman~Pac-Man +pang3~Pang! 3 +paperboy~Paperboy +parodius~Parodius Da! +pengo~Pengo +peterpak~Peter Pack Rat +phoenix~Phoenix +pipedrm~Pipe Dream +pitfight~Pit Fighter +sgemf~Pocket Fighter +polepos~Pole Position +polepos2~Pole Position II +pooyan~Pooyan +popeyef~Popeye +armwaru~Powered Gear: Strategic Variant Armor Equipment +progear~Progear No Arashi +punchout~Punch-out!! +punksht2~Punk Shot +puyopuya~Puyo Puyo +puyopuy2~Puyo Puyo 2 +puzloopu~Puzz Loop +qbert~Q*bert +qix~Qix +rallyx~Rally X +rampage~Rampage +ramprt2p~Rampart +rastanu~Rastan +renegade~Renegade +ringking~Ring King +robocop~Robocop +robocp2u~Robocop 2 +robotron~Robotron: 2084 +megaman2~Rockman 2: The Power Fighters +rocnrope~Roc'n Rope +rohgau~Rohga Armor Force +rthunder~Rolling Thunder +rthun2~Rolling Thunder 2 +rtypeu~R-Type +rtype2~R-Type II +rtypeleo~R-Type Leo +rushatck~Rush'n Attack +chinagat~Sai Yu Gou Ma Roku +stdragon~Saint Dragon +shollow~Satan's Hollow +slammasu~Saturday Night Slam Masters +seawolf~Sea Wolf +seganinu~Sega Ninja +sonic~Segasonic The Hedgehog +samuraia~Sengoku Aces +shdancer~Shadow Dancer +shadfrce~Shadow Force +shinobi~Shinobi +sidearmr~Side Arms - Hyper Dyne +sinistar~Sinistar +slyspy~Sly Spy +smashtv~Smash T.V. +snowbrob~Snow Bros. - Nick & Tom +solomon~Solomon no Kagi +sonson~Son Son +aerofgt~Aero Fighters +sharrier~Space Harrier +invaders~Space Invaders +spidey~Spider-Man: The Videogame +splatter~Splatter House +spyhunt~Spy Hunter +starcas~Star Castle +starwars~Star Wars +stmblade~Storm Blade +sf1us~Street Fighter +sf2t~Street Fighter II': Champion Edition +sf2~Street Fighter II: The World Warrior +sfa2~Street Fighter Zero 2 +sfa3~Street Fighter Zero 3 +strider~Strider Hiryu +s1945~Strikers 1945 +s1945ii~Strikers 1945 II +s1945iii~Strikers 1945 III +ssrdrubc~Sunset Riders +scontra~Super Contra +shangon~Super Hang-on +ringdest~Super Muscle Bomber: The International Blowout +superpac~Super Pac-Man +spnchout~Super Punch-out!! +spf2t~Super Puzzle Fighter II X +macross2~Super Spacefortress Macross II +macross~Super Spacefortress Macross +ssprint~Super Sprint +ssf2t~Super Street Fighter II Turbo +superman~Superman +tapper~Tapper +trojan~Tatakai no Banka +wildfang~Tecmo Knight +tmnt2po~Teenage Mutant Ninja Turtles +tmnt22p~Teenage Mutant Ninja Turtles: Turtles in Time +tekken~Tekken +tekken2~Tekken 2 +tekken3~Tekken 3 +tempest~Tempest +wofu~Tenchi wo Kurau II: Sekiheki no Tatakai +tetris~Tetris +edrandy~The Cliffhanger: Edward Randy +ctribe~The Combatribes +boogwing~The Great Ragtime Show +kodu~The King of Dragons +lkage~The Legend of Kage +mainev2p~The Main Event +tnzsb~The NewZealand Story +ninjak~The Ninja Kids +outfxies~The Outfoxies +punishru~The Punisher +ghostb~The Real Ghostbusters +simpsn2p~The Simpsons +3wonderu~Three Wonders +thndrbld~Thunder Blade +timeplt~Time Pilot +tokiu~Toki +toobin~Toobin +bionicc~Top Secret +tigeroad~Tora e no Michi +tron~Tron +truxton2~Truxton II +tumblep~Tumble Pop +vball~U.S. Championship V'ball +cawingu~U.S. Navy +umk3~Ultimate Mortal Kombat 3 +uccops~Undercover Cops +upndown~Up'n Down +valkyrie~Valkyrie no Densetsu +nwarr~Vampire Hunter: Darkstalkers Revenge +vsav2~Vampire Savior 2: The Lord of Vampire +vsavu~Vampire Savior: The Lord of Vampire +dstlku~Vampire: The Night Warriors +varthu~Varth: Operation Thunderstorm +vendet2p~Vendetta +vigilntu~Vigilante +viostorm~Violent Storm +vf~Virtua Fighter +volfied~Volfied +mooua~Wild West C.o.w.-boys Of Moo Mesa +willow~Willow +wow~Wizard Of Wor +wboyu~Wonder Boy +wb3~Wonder Boy III - Monster Lair +wbmlb~Wonder Boy In Monster Land +xmultipl~X Multiply +xevious~Xevious +xexex~Xexex +xmen2p~X-Men +xmvsfu~X-Men vs. Street Fighter +xmcotau~X-Men: Children of the Atom +zaxxon~Zaxxon +zerowing~Zero Wing +zookeep~Zoo Keeper diff --git a/skeleton/EXTRAS/Tools/rg35xx/Toggle ADB.pak/launch.sh b/skeleton/EXTRAS/Tools/rg35xx/Toggle ADB.pak/launch.sh new file mode 100755 index 0000000..4a2e896 --- /dev/null +++ b/skeleton/EXTRAS/Tools/rg35xx/Toggle ADB.pak/launch.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +PATH=$(dirname "$0") +cd "$PATH" +./toggle_adb.elf diff --git a/skeleton/SYSTEM/rg35xx/paks/Emus/SFC.pak/default.cfg b/skeleton/SYSTEM/rg35xx/paks/Emus/SFC.pak/default.cfg index 3b5568c..6f3b92d 100644 --- a/skeleton/SYSTEM/rg35xx/paks/Emus/SFC.pak/default.cfg +++ b/skeleton/SYSTEM/rg35xx/paks/Emus/SFC.pak/default.cfg @@ -1,4 +1,3 @@ -minarch_cpu_speed = Powersave minarch_prevent_tearing = Strict bind Up = UP diff --git a/skeleton/SYSTEM/rg35xx/paks/MinUI.pak/launch.sh b/skeleton/SYSTEM/rg35xx/paks/MinUI.pak/launch.sh index bf76d21..0eaae24 100755 --- a/skeleton/SYSTEM/rg35xx/paks/MinUI.pak/launch.sh +++ b/skeleton/SYSTEM/rg35xx/paks/MinUI.pak/launch.sh @@ -7,7 +7,6 @@ export SYSTEM_PATH="$SDCARD_PATH/.system/rg35xx" export CORES_PATH="$SYSTEM_PATH/cores" export USERDATA_PATH="$SDCARD_PATH/.userdata/rg35xx" export LOGS_PATH="$USERDATA_PATH/logs" -export SCREENSHOTS_PATH="$SDCARD_PATH/Screenshots" ####################################### diff --git a/src/boot/boot.sh b/src/boot/boot.sh index 00cdb4b..43c87f5 100755 --- a/src/boot/boot.sh +++ b/src/boot/boot.sh @@ -1,10 +1,5 @@ #!/system/bin/sh -# Enable Android Debug Bridge -if [ -f /misc/enableADB ]; then - /usbdbg.sh device -fi - echo 0xF > /sys/devices/system/cpu/autoplug/plug_mask TF1_PATH=/mnt/mmc # ROMS partition @@ -31,6 +26,11 @@ if [ $? -ne 0 ]; then fi fi +# Enable Android Debug Bridge +if [ -f /mnt/mmc/enableADB ]; then + /usbdbg.sh device +fi + if [ -d ${TF1_PATH}${SYSTEM_FRAG} ] || [ -f ${TF1_PATH}${UPDATE_FRAG} ]; then if [ ! -L $TF2_PATH ]; then # .system found on TF1 but TF2 is present diff --git a/src/common/api.c b/src/common/api.c index a2e8364..c816c16 100644 --- a/src/common/api.c +++ b/src/common/api.c @@ -1560,24 +1560,34 @@ void POW_update(int* _dirty, int* _show_setting, POW_callback_t before_sleep, PO void POW_disablePowerOff(void) { pow.can_poweroff = 0; } +void POW_sync(char* msg) { + GFX_clear(gfx.screen); + GFX_blitMessage(font.large, msg, gfx.screen, NULL); + GFX_flip(gfx.screen); + + system("sync"); + system("echo s > /proc/sysrq-trigger"); + system("echo u > /proc/sysrq-trigger"); + system("sync"); + + sleep(2); +} void POW_powerOff(void) { if (pow.can_poweroff) { char* msg = exists(AUTO_RESUME_PATH) ? "Quicksave created,\npowering off" : "Powering off"; - GFX_clear(gfx.screen); - GFX_blitMessage(font.large, msg, gfx.screen, NULL); - GFX_flip(gfx.screen); - - system("sync"); - system("echo s > /proc/sysrq-trigger"); - system("echo u > /proc/sysrq-trigger"); - system("sync"); - - sleep(2); + POW_sync(msg); // actual shutdown system("echo o > /proc/sysrq-trigger"); } } +void POW_reboot(void) { + char* msg = "Rebooting"; + POW_sync(msg); + + // trigger reboot + system("echo b > /proc/sysrq-trigger"); +} #define BACKLIGHT_PATH "/sys/class/backlight/backlight.2/bl_power" diff --git a/src/common/api.h b/src/common/api.h index b09428c..857628a 100644 --- a/src/common/api.h +++ b/src/common/api.h @@ -220,8 +220,10 @@ void POW_warn(int enable); void POW_update(int* dirty, int* show_setting, POW_callback_t before_sleep, POW_callback_t after_sleep); +void POW_sync(char* msg); void POW_disablePowerOff(void); void POW_powerOff(void); +void POW_reboot(void); void POW_fauxSleep(void); void POW_disableAutosleep(void); diff --git a/src/common/defines.h b/src/common/defines.h index a2b61b7..9425713 100644 --- a/src/common/defines.h +++ b/src/common/defines.h @@ -60,7 +60,8 @@ #define FAUX_FAVORITE_PATH SDCARD_PATH "/Favorites" #define COLLECTIONS_PATH SDCARD_PATH "/Collections" #define BATTERY_PATH SDCARD_PATH "/battery.txt" -#define SCREENSHOTS_PATH SDCARD_PATH "/Screenshots" +#define ADB_FLAG_PATH SDCARD_PATH "/enableADB" +#define ALIASES_PATH SDCARD_PATH "/Roms/aliases.txt" #define LAST_PATH "/tmp/last.txt" // transient #define CHANGE_DISC_PATH "/tmp/change_disc.txt" diff --git a/src/common/utils.c b/src/common/utils.c index 901ac27..b222a55 100644 --- a/src/common/utils.c +++ b/src/common/utils.c @@ -117,7 +117,7 @@ void trimSortingMeta(char** str) { // eg. `001) ` char* safe = *str; while(isdigit(**str)) *str += 1; // ignore leading numbers - if (*str[0]==')') { // then match a closing parenthesis + if (*str[0]==')' || *str[0]=='.') { // then match a closing parenthesis or dot *str += 1; } else { // or bail, restoring the string to its original value diff --git a/src/minarch/minarch.c b/src/minarch/minarch.c index d9eb371..48e5380 100644 --- a/src/minarch/minarch.c +++ b/src/minarch/minarch.c @@ -31,8 +31,8 @@ static int show_menu; static int quit_action = 0; static char quit_action_name[16]; static char* quit_action_labels[] = { - "Quit", "Save & Quit", + "Quit", "Reset", NULL }; @@ -549,46 +549,6 @@ static void State_resume(void) { State_read(); state_slot = last_state_slot; } -static void Take_screenshot(void) { - char bmp_path[256]; - char screenshot_dir[256]; - - sprintf(screenshot_dir, SCREENSHOTS_PATH); - mkdir(screenshot_dir, 0755); - - SDL_Surface* backing = GFX_getBufferCopy(); - SDL_Surface* snapshot = SDL_CreateRGBSurface(SDL_SWSURFACE, FIXED_WIDTH,FIXED_HEIGHT,FIXED_DEPTH,0,0,0,0); - - if (backing->w==FIXED_WIDTH && backing->h==FIXED_HEIGHT) { - SDL_BlitSurface(backing, NULL, snapshot, NULL); - } - else { - Downsample(backing->pixels,snapshot->pixels,backing->w,backing->h,backing->pitch,snapshot->pitch); - } - - // Get the current date and time for the screenshot filename - time_t currentTime = time(NULL); - struct tm* timeinfo = localtime(¤tTime); - int day = timeinfo->tm_mday; - int month = timeinfo->tm_mon + 1; - int year = timeinfo->tm_year + 1900; - - int hours = timeinfo->tm_hour; - int minutes = timeinfo->tm_min; - int seconds = timeinfo->tm_sec; - - // Convert hours and minutes to strings - char timeStr[16]; - snprintf(timeStr, sizeof(timeStr), "%04d%02d%02d_%02d%02d%02d", year, month, day, hours, minutes, seconds); - sprintf(bmp_path, "%s/%s.bmp", screenshot_dir, timeStr); - - SDL_RWops* out = SDL_RWFromFile(bmp_path, "wb"); - - SDL_SaveBMP_RW(snapshot, out, 1); - - SDL_FreeSurface(snapshot); - SDL_FreeSurface(backing); -} /////////////////////////////// @@ -666,7 +626,6 @@ enum { SHORTCUT_TOGGLE_SCANLINES, SHORTCUT_TOGGLE_FF, SHORTCUT_HOLD_FF, - SHORTCUT_TAKE_SCREENSHOT, SHORTCUT_COUNT, }; @@ -906,7 +865,6 @@ static struct Config { [SHORTCUT_TOGGLE_SCANLINES] = {"Toggle Scanlines", -1, BTN_ID_NONE, 0}, [SHORTCUT_TOGGLE_FF] = {"Toggle FF", -1, BTN_ID_NONE, 0}, [SHORTCUT_HOLD_FF] = {"Hold FF", -1, BTN_ID_NONE, 0}, - [SHORTCUT_TAKE_SCREENSHOT] = {"Take Screenshot", -1, BTN_ID_NONE, 0}, {NULL} }, }; @@ -1491,9 +1449,6 @@ static void input_poll_callback(void) { Config_syncFrontend(FE_OPT_SCANLINES, !show_scanlines); } break; - case SHORTCUT_TAKE_SCREENSHOT: - Take_screenshot(); - break; default: break; } @@ -3970,7 +3925,7 @@ static void Menu_loop(void) { getDisplayName(game.name, rom_name); int selected = 0; // resets every launch - quit_action = 0; // first option is reseted to 'Quit' + quit_action = 0; // first option resets to 'Save & Quit' sprintf(quit_action_name, "%s", quit_action_labels[quit_action]); if (exists(slot_path)) menu.slot = getInt(slot_path); if (menu.slot==8) menu.slot = 0; @@ -4118,7 +4073,7 @@ static void Menu_loop(void) { reset_flag = 1; status = STATUS_RSET; } else { - // save & quit is managed by quitting procedure + // 'save & quit' or quit is managed by quitting procedure status = STATUS_QUIT; quit = 1; // TODO: tmp? } @@ -4457,7 +4412,7 @@ int main(int argc , char* argv[]) { Menu_quit(); finish: - if (quit_action==1) State_autosave(); + if (quit_action==0) State_autosave(); Game_close(); Core_unload(); diff --git a/src/minui/minui.c b/src/minui/minui.c index 79cdd4c..6dde36b 100644 --- a/src/minui/minui.c +++ b/src/minui/minui.c @@ -114,6 +114,7 @@ typedef struct Entry { char* path; char* name; char* unique; + char* alias; // for neogeo and others where you cannot change the rom filename int type; int alpha; // index in parent Directory's alphas Array, which points to the index of an Entry in its entries Array :sweat_smile: } Entry; @@ -125,6 +126,7 @@ static Entry* Entry_new(char* path, int type) { self->path = strdup(path); self->name = strdup(display_name); self->unique = NULL; + self->alias = NULL; self->type = type; self->alpha = 0; return self; @@ -133,6 +135,7 @@ static void Entry_free(Entry* self) { free(self->path); free(self->name); if (self->unique) free(self->unique); + if (self->alias) free(self->alias); free(self); } @@ -1299,6 +1302,37 @@ int main (int argc, char *argv[]) { POW_setCPUSpeed(CPU_SPEED_MENU); GFX_setVsync(VSYNC_STRICT); + FILE *aliases = fopen(ALIASES_PATH, "r"); + int aIndex = 0; + char* original[1000]; + char* alias[1000]; + char line[75]; + + if (aliases) { + while(fgets(line, sizeof line, aliases)!=NULL) { + if (line[0] != '\0' && line[0] != '#') { + original[aIndex] = malloc(sizeof(line)); + alias[aIndex] = malloc(sizeof(line)); + + int set_alias = 0; + char* split = strtok(line, "~"); + + while(split) { + if (!set_alias) { + strcpy(original[aIndex], split); + set_alias = 1; + } else { + strcpy(alias[aIndex], split); + } + split = strtok(NULL, "~"); + } + aIndex++; + } + } + + fclose(aliases); + } + PAD_reset(); int dirty = 1; int show_version = 0; @@ -1536,6 +1570,7 @@ int main (int argc, char *argv[]) { Entry* entry = top->entries->items[i]; char* entry_name = entry->name; char* entry_unique = entry->unique; + char* entry_alias = entry->alias; int available_width = screen->w - SCALE1(PADDING * 2); if (i==top->start) available_width -= ow + CLOCK_SIZE; @@ -1543,7 +1578,24 @@ int main (int argc, char *argv[]) { if (isFavorite(entry->path)) { text_color = COLOR_GOLD; } + + if (aIndex > 0) { + for(int a = 0; a < aIndex; ++a) + { + if(!strcmp(original[a], entry_name)) + { + entry_alias = strdup(alias[a]); + } + } + } + if (entry_alias!=NULL) { + // has alias, we display these over the others + entry_unique = NULL; + entry_name = strdup(entry_alias); + LOG_info("new entry name: %s\n", entry_name); + } + trimSortingMeta(&entry_name); char display_name[256]; diff --git a/src/toggle_adb/makefile b/src/toggle_adb/makefile new file mode 100644 index 0000000..00f4dd7 --- /dev/null +++ b/src/toggle_adb/makefile @@ -0,0 +1,15 @@ +ifeq (,$(CROSS_COMPILE)) +$(error missing CROSS_COMPILE for this toolchain) +endif + +TARGET = toggle_adb + +CC = $(CROSS_COMPILE)gcc +CFLAGS = -Os -marm -mtune=cortex-a9 -mfpu=neon-fp16 -mfloat-abi=hard -march=armv7-a -fomit-frame-pointer +CFLAGS += -I. -I../common -DPLATFORM=\"$(UNION_PLATFORM)\" +LDFLAGS = -ldl -lSDL -lSDL_image -lSDL_ttf -lmsettings -lpthread + +all: + $(CC) $(TARGET).c ../common/utils.c ../common/api.c -o $(TARGET).elf $(CFLAGS) $(LDFLAGS) +clean: + rm -f $(TARGET).elf diff --git a/src/toggle_adb/toggle_adb.c b/src/toggle_adb/toggle_adb.c new file mode 100644 index 0000000..9381fff --- /dev/null +++ b/src/toggle_adb/toggle_adb.c @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include +#include + +#include "defines.h" +#include "utils.h" +#include "api.h" + +int main(int argc, char* argv[]) { + POW_setCPUSpeed(CPU_SPEED_MENU); + + SDL_Surface* screen = GFX_init(MODE_MAIN); + POW_init(); + InitSettings(); + + SDL_Event event; + int quit = 0; + int save_changes = 0; + int adb_enabled = 0; + + // Show confirmation message + // GFX_blitHardwareGroup(screen, show_setting); + FILE *file = fopen(ADB_FLAG_PATH, "r"); + if (file) { + adb_enabled = 1; + GFX_blitMessage(font.large, "ADB is currently enabled\nDisable and reboot?", screen, NULL); + GFX_blitButtonGroup((char*[]){ "B","CANCEL", "A","DISABLE", NULL }, screen, 1); + } else { + GFX_blitMessage(font.large, "ADB is not enabled\nEnable and reboot?", screen, NULL); + GFX_blitButtonGroup((char*[]){ "B","CANCEL", "A","ENABLE", NULL }, screen, 1); + } + + GFX_flip(screen); + + // Wait for user's input + while (!quit) { + PAD_poll(); + if (PAD_justPressed(BTN_A)) { + save_changes = 1; + quit = 1; + } else if (PAD_justPressed(BTN_B)) { + quit = 1; + } else { + GFX_sync(); + } + } + + // Execute main program based on user's input + if (save_changes) { + if (!adb_enabled){ + fclose(fopen(ADB_FLAG_PATH, "w")); + } else { + remove(ADB_FLAG_PATH); + } + LOG_info("Rebooting to save changes\n"); + POW_reboot(); + } + + QuitSettings(); + POW_quit(); + GFX_quit(); + + return EXIT_SUCCESS; +}