├── utils ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-36.pyc │ ├── general_utils.cpython-36.pyc │ └── update_utils.cpython-36.pyc ├── update_utils.py ├── general_utils.py └── text_utils.py ├── slave_lha ├── __init__.py ├── parse_lha │ ├── __init__.py │ ├── lhafile │ │ ├── MANIFEST.in │ │ ├── lhafile │ │ │ ├── __init__.py │ │ │ └── lhafile.py │ │ ├── README │ │ ├── PKG-INFO │ │ ├── COPYING.txt │ │ └── setup.py │ ├── __pycache__ │ │ └── __init__.cpython-36.pyc │ └── read_lha.py ├── __pycache__ │ └── __init__.cpython-36.pyc └── command_line.py ├── whdload ├── __init__.py ├── __pycache__ │ └── __init__.cpython-36.pyc └── whdload_slave.py ├── settings ├── Screen_Offset_H.txt ├── Screen_Width_704.txt ├── CPU_ForceJIT.txt ├── Chipset_ForceNTSC.txt ├── Screen_Height_568.txt ├── Chipset_FastCopper.txt ├── WHD_Libraries.txt ├── CPU_NoCompatible.txt ├── CPU_CycleExact.txt ├── WHD_DefaultSlave.txt ├── Control_Port1_Mouse.txt ├── Screen_Height_540.txt ├── CPU_ClockSpeed_Max.txt ├── Memory_Z3Ram_16.txt ├── Screen_Height_524.txt ├── Screen_NoCenter_V.txt ├── Chipset_AGA.txt ├── Screen_NoCenter_H.txt ├── CPU_ClockSpeed_25.txt ├── Screen_Offset_V.txt ├── Chipset_ImmediateBlitter.txt ├── Screen_Height_480.txt ├── Screen_Height_432.txt ├── Screen_Height_512.txt ├── Screen_Width_640.txt ├── Control_CD32.txt ├── Screen_Height_400.txt └── Control_Port0_Mouse.txt ├── customcontrols ├── Necronom ├── OverkillAGA ├── Overlander ├── Putty ├── CastleVania ├── TitusTheFox ├── Anarchy ├── ChaseHQ ├── MetalLaw ├── Nicky2 ├── OutRun ├── PipeMania ├── RType ├── RType2 ├── RoboCop ├── Trolls ├── Xenon ├── YoJoe ├── Zool2 ├── Carcharodon ├── Gremlins2 ├── HudsonHawk ├── JamesPond2 ├── LionKingAGA ├── Motorhead ├── NavySeals ├── NickyBoom ├── OutRunNTSC ├── Prehistorik ├── RoboCop2 ├── Scorpion ├── StreetFighter2 ├── Strider2 ├── TrollsAGA ├── WeirdDreams ├── Zool ├── Zool2AGA ├── ZoolAGA ├── EnemyTOVEasyPlay ├── JamesPond2AGA ├── OutRunEuropa ├── RickDangerous ├── RickDangerous2 ├── RickDangerous25 ├── Stormlord ├── StormlordNTSC ├── TotalRecallFiles ├── TotalRecallImage ├── AdventuresOfQuik&Silva ├── EnemyTOVEasyPlayDe ├── EnemyTempestOfViolence ├── MickeyMouseComputerGame ├── ScoobyDoo&ScrappyDoo ├── SlySpySecretAgent ├── TorvakTheWarrior ├── Untouchables ├── BartVsSpaceMutants1Disk ├── BartVsSpaceMutants2Disk ├── EnemyTempestOfViolenceDe ├── InternationalNinjaRabbits ├── MarvinsMarvellousAdvAGA ├── StormlordPrerelease ├── OneOnOne ├── XP8 ├── OneOnOneNTSC ├── XP8AGA ├── CoolWorld ├── DojoDan ├── Hydra ├── Ork ├── Qwak ├── Rambo3 ├── Arachnophobia ├── BattleValley ├── BeachVolley ├── Benefactor ├── Dennis ├── DennisAGA ├── IkariWarriors ├── OrkNTSC ├── Rambo3NTSC ├── Shinobi ├── SinkOrSwim ├── SinkOrSwim512k ├── Sleepwalker ├── Strider ├── AventuresDeMoktarFr ├── BarbarianPalace ├── DickTracy ├── DonkTheSamuraiDuck ├── Fire&Forget2 ├── Ghostbusters2 ├── Impossamole ├── RatTrap ├── ShinobiNTSC ├── SleepwalkerAGA ├── AlfredChickenAGA ├── DonkTheSamuraiDuckAGA ├── FatmanCapedConsumer ├── Ghostbusters2NTSC ├── ShadowWarriors ├── SuperOffRoad ├── VictoryRoad ├── AlienBreedSpecialEdition ├── FatmanCapedConsumerAGA ├── SleepwalkerAGAComicRelief ├── SleepwalkerComicRelief ├── SuperOffRoadNTSC ├── Tusker ├── Vroom ├── WonderboyInMonsterland ├── TeenageMtntNinjaTurtles ├── ChambersOfShaolin ├── Vroom&DataDisk ├── VroomMultiPlayer ├── IK+ ├── CarVup ├── CrazyCars2 ├── SuperCars1Disk ├── SuperCars2Disk ├── Odyssey ├── Alcatraz ├── AlienBreed2 ├── AlienBreed2AGA ├── BeverlyHillsCop ├── LastNinja2 ├── LemmingsAltFiles ├── LemmingsAltImage ├── LemmingsFiles ├── LemmingsFilesNTSC ├── LemmingsImage ├── LemmingsImageNTSC ├── OhNoMoreLemmings ├── LemmingsHoliday1993 ├── LemmingsHoliday1994 ├── Mystical ├── OhNoMoreLemmingsNTSC ├── PersianGulfInferno ├── ElviraArcade ├── StarGoose ├── Humans ├── Humans2 ├── JudgeDredd ├── WackyRaces ├── Humans2De ├── HumansDe ├── HumansFr ├── LostVikings ├── Lemmings21MB ├── Lemmings2512KB ├── LostVikingsDe ├── LostVikingsFr ├── SpindizzyWorlds ├── SwordOfSodan ├── IndyHeat ├── Lemmings21MBNTSC ├── Lemmings2512KBNTSC ├── WrathOfTheDemon ├── AllNewWorldOfLemmingsAGA ├── PowerDrive ├── Predator ├── Heimdall ├── HeimdallDe ├── HeimdallEs ├── HeimdallFr ├── Pirates ├── Cybernoid ├── MegaTwins ├── SonicBoom ├── SpaceGun ├── Targhan ├── TarghanFast ├── TarghanFr ├── TarghanNTSC ├── Hammerfist ├── Rampage ├── TarghanFastFr ├── WarlocksQuest ├── RollingRonny ├── Xenophobe ├── NightShift ├── Populous ├── PopulousNTSC ├── Populous&DataDisks ├── Moonstone ├── Cybernoid2 ├── PPHammer ├── TrapsNTreasures ├── JurassicPark ├── JurassicParkAGA ├── TrapsNTreasuresDe ├── HostageNTSC ├── Hostages ├── OperationJupiterFr ├── EyeOfTheBeholder ├── EyeOfTheBeholderDe ├── Populous2 ├── Walker ├── WalkerCrunched ├── WalkerNoSpeech ├── Populous2&ChallengeGames ├── WalkerCrunchedNoSpeech ├── BlackCrypt ├── Baal ├── FIFAInternationalSoccer ├── EscapeFromColditz ├── Seek&Destroy ├── Seek&DestroyAGA ├── MonkeyIsland2 ├── SmashTV ├── WorldsOfLegend ├── LegendMindscape ├── MonkeyIsland2De ├── MonkeyIsland2Es ├── MonkeyIsland2Fr ├── MonkeyIsland2It ├── IndianaJonesAtlantisAdv ├── SecretOfMonkeyIsland ├── SecretOfMonkeyIslandDe ├── SecretOfMonkeyIslandEs ├── SecretOfMonkeyIslandFr ├── SecretOfMonkeyIslandIt ├── IndianaJonesAtlantisAdvDe ├── IndianaJonesAtlantisAdvEs ├── IndianaJonesAtlantisAdvFr ├── IndianaJonesAtlantisAdvIt ├── IndianaJonesLastCrusAdvDe ├── IndianaJonesLastCrusAdvEs ├── IndianaJonesLastCrusAdvFr ├── IndianaJonesLastCrusAdvIt ├── IndyJonesLastCrusAdvNTSC ├── BreathlessAGA ├── BreathlessAGA060 └── PinballIllusionsAGA ├── .gitignore ├── files_failed.txt ├── README.md ├── snippets └── DevilsTemple ├── openretroid.py └── amiberry_xml_builder.py /utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /slave_lha/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /whdload/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /settings/Screen_Offset_H.txt: -------------------------------------------------------------------------------- 1 | Cabal -38 2 | -------------------------------------------------------------------------------- /settings/Screen_Width_704.txt: -------------------------------------------------------------------------------- 1 | DesertStrike 2 | -------------------------------------------------------------------------------- /settings/CPU_ForceJIT.txt: -------------------------------------------------------------------------------- 1 | BlobzAGA 2 | TZer0DemoAGA 3 | -------------------------------------------------------------------------------- /settings/Chipset_ForceNTSC.txt: -------------------------------------------------------------------------------- 1 | SuprStrtFtr2TrboAGA 2 | -------------------------------------------------------------------------------- /settings/Screen_Height_568.txt: -------------------------------------------------------------------------------- 1 | Speedball 2 | SpeedballNTSC 3 | -------------------------------------------------------------------------------- /customcontrols/Necronom: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=Return 2 | -------------------------------------------------------------------------------- /customcontrols/OverkillAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | -------------------------------------------------------------------------------- /customcontrols/Overlander: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | -------------------------------------------------------------------------------- /customcontrols/Putty: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | -------------------------------------------------------------------------------- /customcontrols/CastleVania: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | -------------------------------------------------------------------------------- /slave_lha/parse_lha/__init__.py: -------------------------------------------------------------------------------- 1 | from .read_lha import LhaSlaveArchive 2 | -------------------------------------------------------------------------------- /slave_lha/parse_lha/lhafile/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include COPYING.txt 2 | include MANIFEST.in 3 | -------------------------------------------------------------------------------- /customcontrols/TitusTheFox: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=F4 2 | joyport1_amiberry_custom_none_y=1 3 | -------------------------------------------------------------------------------- /settings/Chipset_FastCopper.txt: -------------------------------------------------------------------------------- 1 | AlienBreed3DAGA 2 | AlienBreed3DNoMusicAGA 3 | AlienBreed3D2AGA 4 | -------------------------------------------------------------------------------- /customcontrols/Anarchy: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/ChaseHQ: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_start=F1 3 | -------------------------------------------------------------------------------- /customcontrols/MetalLaw: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_y=Del 2 | joyport1_amiberry_custom_none_start=F1 3 | -------------------------------------------------------------------------------- /customcontrols/Nicky2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/OutRun: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=T 2 | joyport1_amiberry_custom_none_start=Space 3 | -------------------------------------------------------------------------------- /customcontrols/PipeMania: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=F 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/RType: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_start=F10 3 | -------------------------------------------------------------------------------- /customcontrols/RType2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_start=F10 3 | -------------------------------------------------------------------------------- /customcontrols/RoboCop: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/Trolls: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=F1 3 | -------------------------------------------------------------------------------- /customcontrols/Xenon: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_start=F3 3 | -------------------------------------------------------------------------------- /customcontrols/YoJoe: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/Zool2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/Carcharodon: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_y=Space 2 | joyport1_amiberry_custom_none_start=E 3 | -------------------------------------------------------------------------------- /customcontrols/Gremlins2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=F1 3 | -------------------------------------------------------------------------------- /customcontrols/HudsonHawk: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/JamesPond2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/LionKingAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/Motorhead: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_start=F1 3 | -------------------------------------------------------------------------------- /customcontrols/NavySeals: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=H 3 | -------------------------------------------------------------------------------- /customcontrols/NickyBoom: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/OutRunNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=T 2 | joyport1_amiberry_custom_none_start=Space 3 | -------------------------------------------------------------------------------- /customcontrols/Prehistorik: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/RoboCop2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/Scorpion: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=Space 3 | -------------------------------------------------------------------------------- /customcontrols/StreetFighter2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_start=1 2 | joyport0_amiberry_custom_none_start=2 3 | -------------------------------------------------------------------------------- /customcontrols/Strider2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=H 3 | -------------------------------------------------------------------------------- /customcontrols/TrollsAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=F1 3 | -------------------------------------------------------------------------------- /customcontrols/WeirdDreams: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/Zool: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=Space 3 | -------------------------------------------------------------------------------- /customcontrols/Zool2AGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/ZoolAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=Space 3 | -------------------------------------------------------------------------------- /customcontrols/EnemyTOVEasyPlay: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/JamesPond2AGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/OutRunEuropa: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_start=CTRL 3 | -------------------------------------------------------------------------------- /customcontrols/RickDangerous: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/RickDangerous2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/RickDangerous25: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/Stormlord: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=Space 3 | -------------------------------------------------------------------------------- /customcontrols/StormlordNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=Space 3 | -------------------------------------------------------------------------------- /customcontrols/TotalRecallFiles: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/TotalRecallImage: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /settings/WHD_Libraries.txt: -------------------------------------------------------------------------------- 1 | KingsQuestEnhanced 2 | KingsQuestEnhancedMT32 3 | PoliceQuest2 4 | SuperOffRoadNTSC 5 | -------------------------------------------------------------------------------- /slave_lha/parse_lha/lhafile/lhafile/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from .lhafile import * 3 | -------------------------------------------------------------------------------- /customcontrols/AdventuresOfQuik&Silva: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/EnemyTOVEasyPlayDe: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/EnemyTempestOfViolence: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/MickeyMouseComputerGame: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/ScoobyDoo&ScrappyDoo: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/SlySpySecretAgent: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=F1 3 | -------------------------------------------------------------------------------- /customcontrols/TorvakTheWarrior: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=CTRL 3 | -------------------------------------------------------------------------------- /customcontrols/Untouchables: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=Caps Lock 3 | -------------------------------------------------------------------------------- /customcontrols/BartVsSpaceMutants1Disk: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Joy2 Down 3 | -------------------------------------------------------------------------------- /customcontrols/BartVsSpaceMutants2Disk: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Joy2 Down 3 | -------------------------------------------------------------------------------- /customcontrols/EnemyTempestOfViolenceDe: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/InternationalNinjaRabbits: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/MarvinsMarvellousAdvAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | -------------------------------------------------------------------------------- /customcontrols/StormlordPrerelease: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=Space 3 | -------------------------------------------------------------------------------- /customcontrols/OneOnOne: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_leftshoulder=Space 2 | joyport1_amiberry_custom_none_rightshoulder=Return 3 | -------------------------------------------------------------------------------- /customcontrols/XP8: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_axis_none_lefttrigger=Space 2 | joyport1_amiberry_custom_axis_none_righttrigger=Space 3 | -------------------------------------------------------------------------------- /customcontrols/OneOnOneNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_leftshoulder=Space 2 | joyport1_amiberry_custom_none_rightshoulder=Return 3 | -------------------------------------------------------------------------------- /customcontrols/XP8AGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_axis_none_lefttrigger=Space 2 | joyport1_amiberry_custom_axis_none_righttrigger=Space 3 | -------------------------------------------------------------------------------- /customcontrols/CoolWorld: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=M 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/DojoDan: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=F5 3 | joyport1_amiberry_custom_none_start=F1 4 | -------------------------------------------------------------------------------- /customcontrols/Hydra: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=Return 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/Ork: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/Qwak: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/Rambo3: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_y=F9 3 | joyport1_amiberry_custom_none_start=F1 4 | -------------------------------------------------------------------------------- /settings/CPU_NoCompatible.txt: -------------------------------------------------------------------------------- 1 | Bloodwych 2 | Bloodwych&ExtendedLevels 3 | BodyBlowsAGA 4 | RiskyWoods 5 | Shinobi 6 | ShinobiNTSC 7 | SideWinder 8 | -------------------------------------------------------------------------------- /customcontrols/Arachnophobia: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=Space 2 | joyport1_amiberry_custom_none_y=O 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/BattleValley: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=Help 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/BeachVolley: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_y=P 2 | joyport1_amiberry_custom_none_start=F1 3 | joyport0_amiberry_custom_none_start=F2 4 | -------------------------------------------------------------------------------- /customcontrols/Benefactor: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=M 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/Dennis: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/DennisAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/IkariWarriors: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_y=F2 2 | joyport1_amiberry_custom_none_start=1 3 | joyport0_amiberry_custom_none_start=2 4 | -------------------------------------------------------------------------------- /customcontrols/OrkNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/Rambo3NTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_y=F9 3 | joyport1_amiberry_custom_none_start=F1 4 | -------------------------------------------------------------------------------- /customcontrols/Shinobi: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/SinkOrSwim: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_y=ESC 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/SinkOrSwim512k: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_y=ESC 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/Sleepwalker: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=M 3 | joyport1_amiberry_custom_none_start=Help 4 | -------------------------------------------------------------------------------- /customcontrols/Strider: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_y=F10 3 | joyport1_amiberry_custom_none_start=F9 4 | -------------------------------------------------------------------------------- /customcontrols/AventuresDeMoktarFr: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=F4 2 | joyport1_amiberry_custom_none_y=Space 3 | joyport1_amiberry_custom_none_start=1 4 | -------------------------------------------------------------------------------- /customcontrols/BarbarianPalace: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_y=F3 2 | joyport1_amiberry_custom_none_start=F1 3 | joyport0_amiberry_custom_none_start=F2 4 | -------------------------------------------------------------------------------- /customcontrols/DickTracy: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Return 3 | joyport1_amiberry_custom_none_start=F10 4 | -------------------------------------------------------------------------------- /customcontrols/DonkTheSamuraiDuck: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=M 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/Fire&Forget2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Return 2 | joyport1_amiberry_custom_none_x=Help 3 | joyport1_amiberry_custom_none_start=F10 4 | -------------------------------------------------------------------------------- /customcontrols/Ghostbusters2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=Return 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/Impossamole: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_start=CTRL 4 | -------------------------------------------------------------------------------- /customcontrols/RatTrap: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Joy2 Down 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/ShinobiNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/SleepwalkerAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=M 3 | joyport1_amiberry_custom_none_start=Help 4 | -------------------------------------------------------------------------------- /utils/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HoraceAndTheSpider/Amiberry-XML-Builder/HEAD/utils/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /customcontrols/AlfredChickenAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/DonkTheSamuraiDuckAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=M 3 | joyport1_amiberry_custom_none_start=1 4 | -------------------------------------------------------------------------------- /customcontrols/FatmanCapedConsumer: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/Ghostbusters2NTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=Return 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/ShadowWarriors: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=H 3 | joyport0_amiberry_custom_none_b=Joy1 Up 4 | -------------------------------------------------------------------------------- /customcontrols/SuperOffRoad: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=Help 3 | joyport0_amiberry_custom_none_b=Joy1 Up 4 | -------------------------------------------------------------------------------- /customcontrols/VictoryRoad: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_start=F2 3 | joyport0_amiberry_custom_none_b=Numpad Enter 4 | -------------------------------------------------------------------------------- /whdload/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HoraceAndTheSpider/Amiberry-XML-Builder/HEAD/whdload/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /customcontrols/AlienBreedSpecialEdition: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=M 2 | joyport1_amiberry_custom_none_y=Left Alt 3 | joyport0_amiberry_custom_none_y=Right Alt 4 | -------------------------------------------------------------------------------- /customcontrols/FatmanCapedConsumerAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/SleepwalkerAGAComicRelief: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=M 3 | joyport1_amiberry_custom_none_start=Help 4 | -------------------------------------------------------------------------------- /customcontrols/SleepwalkerComicRelief: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=M 3 | joyport1_amiberry_custom_none_start=Help 4 | -------------------------------------------------------------------------------- /customcontrols/SuperOffRoadNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=Help 3 | joyport0_amiberry_custom_none_b=Joy1 Up 4 | -------------------------------------------------------------------------------- /customcontrols/Tusker: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_leftshoulder=F9 2 | joyport1_amiberry_custom_none_rightshoulder=F10 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/Vroom: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_leftshoulder=T 2 | joyport1_amiberry_custom_none_rightshoulder=G 3 | joyport1_amiberry_custom_none_start=Space 4 | -------------------------------------------------------------------------------- /customcontrols/WonderboyInMonsterland: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /slave_lha/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HoraceAndTheSpider/Amiberry-XML-Builder/HEAD/slave_lha/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /utils/__pycache__/general_utils.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HoraceAndTheSpider/Amiberry-XML-Builder/HEAD/utils/__pycache__/general_utils.cpython-36.pyc -------------------------------------------------------------------------------- /utils/__pycache__/update_utils.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HoraceAndTheSpider/Amiberry-XML-Builder/HEAD/utils/__pycache__/update_utils.cpython-36.pyc -------------------------------------------------------------------------------- /customcontrols/TeenageMtntNinjaTurtles: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_start=Return 4 | -------------------------------------------------------------------------------- /customcontrols/ChambersOfShaolin: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_leftshoulder=1 2 | joyport1_amiberry_custom_none_rightshoulder=2 3 | joyport1_amiberry_custom_none_start=Space 4 | -------------------------------------------------------------------------------- /customcontrols/Vroom&DataDisk: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_leftshoulder=T 2 | joyport1_amiberry_custom_none_rightshoulder=G 3 | joyport1_amiberry_custom_none_start=Space 4 | -------------------------------------------------------------------------------- /customcontrols/VroomMultiPlayer: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_leftshoulder=T 2 | joyport1_amiberry_custom_none_rightshoulder=G 3 | joyport1_amiberry_custom_none_start=Space 4 | -------------------------------------------------------------------------------- /customcontrols/IK+: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=T 2 | joyport1_amiberry_custom_none_x=J 3 | joyport1_amiberry_custom_none_y=Help 4 | joyport1_amiberry_custom_none_start=Space 5 | -------------------------------------------------------------------------------- /customcontrols/CarVup: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=Z 3 | joyport1_amiberry_custom_none_y=Tab 4 | joyport1_amiberry_custom_none_start=CTRL 5 | -------------------------------------------------------------------------------- /customcontrols/CrazyCars2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=F2 2 | joyport1_amiberry_custom_none_x=F3 3 | joyport1_amiberry_custom_none_y=F4 4 | joyport1_amiberry_custom_none_start=F10 5 | -------------------------------------------------------------------------------- /customcontrols/SuperCars1Disk: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_leftshoulder=Joy2 Down 2 | joyport1_amiberry_custom_none_rightshoulder=Joy2 Up 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /customcontrols/SuperCars2Disk: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_leftshoulder=Joy2 Down 2 | joyport1_amiberry_custom_none_rightshoulder=Joy2 Up 3 | joyport1_amiberry_custom_none_start=P 4 | -------------------------------------------------------------------------------- /slave_lha/parse_lha/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HoraceAndTheSpider/Amiberry-XML-Builder/HEAD/slave_lha/parse_lha/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /customcontrols/Odyssey: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Help 3 | joyport1_amiberry_custom_none_y=Space 4 | joyport1_amiberry_custom_none_start=P 5 | -------------------------------------------------------------------------------- /customcontrols/Alcatraz: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Return 3 | joyport1_amiberry_custom_none_start=P 4 | joyport0_amiberry_custom_none_b=Joy1 Up 5 | -------------------------------------------------------------------------------- /customcontrols/AlienBreed2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=M 3 | joyport1_amiberry_custom_none_y=Left Alt 4 | joyport0_amiberry_custom_none_y=Right Alt 5 | -------------------------------------------------------------------------------- /customcontrols/AlienBreed2AGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=M 3 | joyport1_amiberry_custom_none_y=Left Alt 4 | joyport0_amiberry_custom_none_y=Right Alt 5 | -------------------------------------------------------------------------------- /customcontrols/BeverlyHillsCop: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_y=P 2 | joyport1_amiberry_custom_none_start=1 3 | joyport1_amiberry_custom_none_leftshoulder=2 4 | joyport1_amiberry_custom_none_rightshoulder=3 5 | -------------------------------------------------------------------------------- /customcontrols/LastNinja2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=J 2 | joyport1_amiberry_custom_none_leftshoulder=Help 3 | joyport1_amiberry_custom_none_rightshoulder=Del 4 | joyport1_amiberry_custom_none_start=F2 5 | -------------------------------------------------------------------------------- /customcontrols/LemmingsAltFiles: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=ESC 2 | joyport1_amiberry_custom_none_leftshoulder=Z 3 | joyport1_amiberry_custom_none_rightshoulder=X 4 | joyport1_amiberry_custom_none_start=P 5 | -------------------------------------------------------------------------------- /customcontrols/LemmingsAltImage: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=ESC 2 | joyport1_amiberry_custom_none_leftshoulder=Z 3 | joyport1_amiberry_custom_none_rightshoulder=X 4 | joyport1_amiberry_custom_none_start=P 5 | -------------------------------------------------------------------------------- /customcontrols/LemmingsFiles: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=ESC 2 | joyport1_amiberry_custom_none_leftshoulder=Z 3 | joyport1_amiberry_custom_none_rightshoulder=X 4 | joyport1_amiberry_custom_none_start=P 5 | -------------------------------------------------------------------------------- /customcontrols/LemmingsFilesNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=ESC 2 | joyport1_amiberry_custom_none_leftshoulder=Z 3 | joyport1_amiberry_custom_none_rightshoulder=X 4 | joyport1_amiberry_custom_none_start=P 5 | -------------------------------------------------------------------------------- /customcontrols/LemmingsImage: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=ESC 2 | joyport1_amiberry_custom_none_leftshoulder=Z 3 | joyport1_amiberry_custom_none_rightshoulder=X 4 | joyport1_amiberry_custom_none_start=P 5 | -------------------------------------------------------------------------------- /customcontrols/LemmingsImageNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=ESC 2 | joyport1_amiberry_custom_none_leftshoulder=Z 3 | joyport1_amiberry_custom_none_rightshoulder=X 4 | joyport1_amiberry_custom_none_start=P 5 | -------------------------------------------------------------------------------- /customcontrols/OhNoMoreLemmings: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=ESC 2 | joyport1_amiberry_custom_none_leftshoulder=Z 3 | joyport1_amiberry_custom_none_rightshoulder=X 4 | joyport1_amiberry_custom_none_start=P 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/openretroid.cpython-36.pyc 2 | slave_lha/parse_lha/__pycache__/read_lha.cpython-36.pyc 3 | utils/__pycache__/text_utils.cpython-36.pyc 4 | whdload/__pycache__/whdload_slave.cpython-36.pyc 5 | -------------------------------------------------------------------------------- /customcontrols/LemmingsHoliday1993: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=ESC 2 | joyport1_amiberry_custom_none_leftshoulder=Z 3 | joyport1_amiberry_custom_none_rightshoulder=X 4 | joyport1_amiberry_custom_none_start=P 5 | -------------------------------------------------------------------------------- /customcontrols/LemmingsHoliday1994: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=ESC 2 | joyport1_amiberry_custom_none_leftshoulder=Z 3 | joyport1_amiberry_custom_none_rightshoulder=X 4 | joyport1_amiberry_custom_none_start=P 5 | -------------------------------------------------------------------------------- /customcontrols/Mystical: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_leftshoulder=Space 3 | joyport1_amiberry_custom_none_rightshoulder=Return 4 | joyport1_amiberry_custom_none_start=P 5 | -------------------------------------------------------------------------------- /customcontrols/OhNoMoreLemmingsNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=ESC 2 | joyport1_amiberry_custom_none_leftshoulder=Z 3 | joyport1_amiberry_custom_none_rightshoulder=X 4 | joyport1_amiberry_custom_none_start=P 5 | -------------------------------------------------------------------------------- /customcontrols/PersianGulfInferno: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_y=F1 3 | joyport1_amiberry_custom_none_leftshoulder=F2 4 | joyport1_amiberry_custom_none_rightshoulder=F3 5 | -------------------------------------------------------------------------------- /customcontrols/ElviraArcade: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_start=P 3 | joyport1_amiberry_custom_none_leftshoulder=Space 4 | joyport1_amiberry_custom_none_rightshoulder=Return 5 | -------------------------------------------------------------------------------- /customcontrols/StarGoose: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_y=Del 2 | joyport1_amiberry_custom_none_leftshoulder=Left Alt 3 | joyport1_amiberry_custom_none_rightshoulder=Right Alt 4 | joyport1_amiberry_custom_none_start=Help 5 | -------------------------------------------------------------------------------- /customcontrols/Humans: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_leftshoulder=Cursor Left 3 | joyport1_amiberry_custom_none_rightshoulder=Cursor Right 4 | joyport1_amiberry_custom_none_start=F10 5 | -------------------------------------------------------------------------------- /customcontrols/Humans2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_leftshoulder=Cursor Left 3 | joyport1_amiberry_custom_none_rightshoulder=Cursor Right 4 | joyport1_amiberry_custom_none_start=F10 5 | -------------------------------------------------------------------------------- /customcontrols/JudgeDredd: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_leftshoulder=Space 3 | joyport1_amiberry_custom_none_rightshoulder=Left Shift 4 | joyport1_amiberry_custom_none_start=F10 5 | -------------------------------------------------------------------------------- /customcontrols/WackyRaces: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_leftshoulder=Joy2 Left 3 | joyport1_amiberry_custom_none_rightshoulder=Joy2 Right 4 | joyport1_amiberry_custom_none_start=P 5 | -------------------------------------------------------------------------------- /customcontrols/Humans2De: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_leftshoulder=Cursor Left 3 | joyport1_amiberry_custom_none_rightshoulder=Cursor Right 4 | joyport1_amiberry_custom_none_start=F10 5 | -------------------------------------------------------------------------------- /customcontrols/HumansDe: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_leftshoulder=Cursor Left 3 | joyport1_amiberry_custom_none_rightshoulder=Cursor Right 4 | joyport1_amiberry_custom_none_start=F10 5 | -------------------------------------------------------------------------------- /customcontrols/HumansFr: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_leftshoulder=Cursor Left 3 | joyport1_amiberry_custom_none_rightshoulder=Cursor Right 4 | joyport1_amiberry_custom_none_start=F10 5 | -------------------------------------------------------------------------------- /settings/CPU_CycleExact.txt: -------------------------------------------------------------------------------- 1 | BadDudes 2 | BadDudesChipNTSC 3 | BadDudesNTSC 4 | BadDudesVsDragonNinja 5 | BadDudesVsDragonNinjaChip 6 | GhostsNGoblins 7 | HostageNTSC 8 | Hostages 9 | OperationJupiterFr 10 | SoldierOfLight 11 | -------------------------------------------------------------------------------- /settings/WHD_DefaultSlave.txt: -------------------------------------------------------------------------------- 1 | 1497-WHDL Workbench31_1.Slave 2 | Legend_v1.2_Mindscape_1100 LegendMindscape.Slave 3 | FourCrystalsOfTrazere_v1.2 FourCrystalsOfTrazere.Slave 4 | FourCrystalsOfTrazere_v1.2_NTSC FourCrystalsOfTrazereNTSC.Slave -------------------------------------------------------------------------------- /customcontrols/LostVikings: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=E 2 | joyport1_amiberry_custom_none_y=S 3 | joyport1_amiberry_custom_none_leftshoulder=Del 4 | joyport1_amiberry_custom_none_rightshoulder=Tab 5 | joyport1_amiberry_custom_none_start=P 6 | -------------------------------------------------------------------------------- /settings/Control_Port1_Mouse.txt: -------------------------------------------------------------------------------- 1 | LemmingsAltFiles 2 | LemmingsAltImage 3 | LemmingsCDTV 4 | LemmingsDemo 5 | LemmingsFiles 6 | LemmingsFilesNTSC 7 | LemmingsImage 8 | LemmingsImageNTSC 9 | OhNoMoreLemmings 10 | OhNoMoreLemmingsNTSC 11 | -------------------------------------------------------------------------------- /customcontrols/Lemmings21MB: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=ESC 3 | joyport1_amiberry_custom_none_leftshoulder=Z 4 | joyport1_amiberry_custom_none_rightshoulder=X 5 | joyport1_amiberry_custom_none_start=P 6 | -------------------------------------------------------------------------------- /customcontrols/Lemmings2512KB: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=ESC 3 | joyport1_amiberry_custom_none_start=P 4 | joyport1_amiberry_custom_none_leftshoulder=Z 5 | joyport1_amiberry_custom_none_rightshoulder=X 6 | -------------------------------------------------------------------------------- /customcontrols/LostVikingsDe: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=E 2 | joyport1_amiberry_custom_none_y=S 3 | joyport1_amiberry_custom_none_leftshoulder=Del 4 | joyport1_amiberry_custom_none_rightshoulder=Tab 5 | joyport1_amiberry_custom_none_start=P 6 | -------------------------------------------------------------------------------- /customcontrols/LostVikingsFr: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=E 2 | joyport1_amiberry_custom_none_y=S 3 | joyport1_amiberry_custom_none_leftshoulder=Del 4 | joyport1_amiberry_custom_none_rightshoulder=Tab 5 | joyport1_amiberry_custom_none_start=P 6 | -------------------------------------------------------------------------------- /customcontrols/SpindizzyWorlds: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=M 3 | joyport1_amiberry_custom_none_leftshoulder=T 4 | joyport1_amiberry_custom_none_rightshoulder=R 5 | joyport1_amiberry_custom_none_start=P 6 | -------------------------------------------------------------------------------- /customcontrols/SwordOfSodan: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=F1 2 | joyport1_amiberry_custom_none_y=F2 3 | joyport1_amiberry_custom_none_leftshoulder=F3 4 | joyport1_amiberry_custom_none_rightshoulder=F4 5 | joyport1_amiberry_custom_none_start=Space 6 | -------------------------------------------------------------------------------- /customcontrols/IndyHeat: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_leftshoulder=F1 3 | joyport1_amiberry_custom_none_rightshoulder=F2 4 | joyport1_amiberry_custom_none_start=P 5 | joyport0_amiberry_custom_none_b=Cursor Up 6 | -------------------------------------------------------------------------------- /customcontrols/Lemmings21MBNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=ESC 3 | joyport1_amiberry_custom_none_leftshoulder=Z 4 | joyport1_amiberry_custom_none_rightshoulder=X 5 | joyport1_amiberry_custom_none_start=P 6 | -------------------------------------------------------------------------------- /customcontrols/Lemmings2512KBNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=ESC 3 | joyport1_amiberry_custom_none_leftshoulder=Z 4 | joyport1_amiberry_custom_none_rightshoulder=X 5 | joyport1_amiberry_custom_none_start=P 6 | -------------------------------------------------------------------------------- /customcontrols/WrathOfTheDemon: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_y=F3 3 | joyport1_amiberry_custom_none_leftshoulder=F1 4 | joyport1_amiberry_custom_none_rightshoulder=F2 5 | joyport1_amiberry_custom_none_start=P 6 | -------------------------------------------------------------------------------- /customcontrols/AllNewWorldOfLemmingsAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Return 2 | joyport1_amiberry_custom_none_x=ESC 3 | joyport1_amiberry_custom_none_leftshoulder=Z 4 | joyport1_amiberry_custom_none_rightshoulder=X 5 | joyport1_amiberry_custom_none_start=P 6 | -------------------------------------------------------------------------------- /customcontrols/PowerDrive: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Down 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_leftshoulder=Space 4 | joyport1_amiberry_custom_none_rightshoulder=Space 5 | joyport1_amiberry_custom_none_start=P 6 | -------------------------------------------------------------------------------- /customcontrols/Predator: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Return 2 | joyport1_amiberry_custom_none_x=Left Shift 3 | joyport1_amiberry_custom_none_y=Space 4 | joyport1_amiberry_custom_none_leftshoulder=Left Shift 5 | joyport1_amiberry_custom_none_rightshoulder=Space 6 | -------------------------------------------------------------------------------- /customcontrols/Heimdall: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=I 2 | joyport1_amiberry_custom_none_x=F 3 | joyport1_amiberry_custom_none_y=F1 4 | joyport1_amiberry_custom_none_leftshoulder=F3 5 | joyport1_amiberry_custom_none_rightshoulder=F2 6 | joyport1_amiberry_custom_none_start=P 7 | -------------------------------------------------------------------------------- /customcontrols/HeimdallDe: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=I 2 | joyport1_amiberry_custom_none_x=F 3 | joyport1_amiberry_custom_none_y=F1 4 | joyport1_amiberry_custom_none_leftshoulder=F3 5 | joyport1_amiberry_custom_none_rightshoulder=F2 6 | joyport1_amiberry_custom_none_start=P 7 | -------------------------------------------------------------------------------- /customcontrols/HeimdallEs: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=I 2 | joyport1_amiberry_custom_none_x=F 3 | joyport1_amiberry_custom_none_y=F1 4 | joyport1_amiberry_custom_none_leftshoulder=F3 5 | joyport1_amiberry_custom_none_rightshoulder=F2 6 | joyport1_amiberry_custom_none_start=P 7 | -------------------------------------------------------------------------------- /customcontrols/HeimdallFr: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=I 2 | joyport1_amiberry_custom_none_x=F 3 | joyport1_amiberry_custom_none_y=F1 4 | joyport1_amiberry_custom_none_leftshoulder=F3 5 | joyport1_amiberry_custom_none_rightshoulder=F2 6 | joyport1_amiberry_custom_none_start=P 7 | -------------------------------------------------------------------------------- /customcontrols/Pirates: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=F5 2 | joyport1_amiberry_custom_none_x=F6 3 | joyport1_amiberry_custom_none_y=F7 4 | joyport1_amiberry_custom_none_leftshoulder=F9 5 | joyport1_amiberry_custom_none_rightshoulder=F9 6 | joyport1_amiberry_custom_none_start=F8 7 | -------------------------------------------------------------------------------- /customcontrols/Cybernoid: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=F1 2 | joyport1_amiberry_custom_none_x=F2 3 | joyport1_amiberry_custom_none_y=F3 4 | joyport1_amiberry_custom_none_leftshoulder=F4 5 | joyport1_amiberry_custom_none_rightshoulder=F5 6 | joyport1_amiberry_custom_none_start=Space 7 | -------------------------------------------------------------------------------- /customcontrols/MegaTwins: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Left Alt 3 | joyport1_amiberry_custom_none_y=F2 4 | joyport1_amiberry_custom_none_start=F1 5 | joyport0_amiberry_custom_none_b=Joy1 Up 6 | joyport0_amiberry_custom_none_x=Right Alt 7 | -------------------------------------------------------------------------------- /customcontrols/SonicBoom: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Return 2 | joyport1_amiberry_custom_none_x=F3 3 | joyport1_amiberry_custom_none_y=P 4 | joyport1_amiberry_custom_none_leftshoulder=F1 5 | joyport1_amiberry_custom_none_rightshoulder=F2 6 | joyport1_amiberry_custom_none_start=F6 7 | -------------------------------------------------------------------------------- /customcontrols/SpaceGun: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Left Alt 2 | joyport1_amiberry_custom_none_x=Return 3 | joyport1_amiberry_custom_none_y=Help 4 | joyport1_amiberry_custom_none_start=Space 5 | joyport0_amiberry_custom_none_b=Right Alt 6 | joyport0_amiberry_custom_none_x=Return 7 | -------------------------------------------------------------------------------- /customcontrols/Targhan: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=F1 2 | joyport1_amiberry_custom_none_x=F2 3 | joyport1_amiberry_custom_none_y=F3 4 | joyport1_amiberry_custom_none_leftshoulder=F4 5 | joyport1_amiberry_custom_none_rightshoulder=F5 6 | joyport1_amiberry_custom_none_start=F10 7 | -------------------------------------------------------------------------------- /customcontrols/TarghanFast: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=F1 2 | joyport1_amiberry_custom_none_x=F2 3 | joyport1_amiberry_custom_none_y=F3 4 | joyport1_amiberry_custom_none_leftshoulder=F4 5 | joyport1_amiberry_custom_none_rightshoulder=F5 6 | joyport1_amiberry_custom_none_start=F10 7 | -------------------------------------------------------------------------------- /customcontrols/TarghanFr: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=F1 2 | joyport1_amiberry_custom_none_x=F2 3 | joyport1_amiberry_custom_none_y=F3 4 | joyport1_amiberry_custom_none_leftshoulder=F4 5 | joyport1_amiberry_custom_none_rightshoulder=F5 6 | joyport1_amiberry_custom_none_start=F10 7 | -------------------------------------------------------------------------------- /customcontrols/TarghanNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=F1 2 | joyport1_amiberry_custom_none_x=F2 3 | joyport1_amiberry_custom_none_y=F3 4 | joyport1_amiberry_custom_none_leftshoulder=F4 5 | joyport1_amiberry_custom_none_rightshoulder=F5 6 | joyport1_amiberry_custom_none_start=F10 7 | -------------------------------------------------------------------------------- /customcontrols/Hammerfist: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=Help 3 | joyport1_amiberry_custom_none_y=F1 4 | joyport1_amiberry_custom_none_leftshoulder=F3 5 | joyport1_amiberry_custom_none_rightshoulder=F2 6 | joyport1_amiberry_custom_none_start=ESC 7 | -------------------------------------------------------------------------------- /customcontrols/Rampage: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Return 3 | joyport1_amiberry_custom_none_y=1 4 | joyport1_amiberry_custom_none_leftshoulder=2 5 | joyport1_amiberry_custom_none_rightshoulder=3 6 | joyport1_amiberry_custom_none_start=ESC 7 | -------------------------------------------------------------------------------- /customcontrols/TarghanFastFr: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=F1 2 | joyport1_amiberry_custom_none_x=F2 3 | joyport1_amiberry_custom_none_y=F3 4 | joyport1_amiberry_custom_none_leftshoulder=F4 5 | joyport1_amiberry_custom_none_rightshoulder=F5 6 | joyport1_amiberry_custom_none_start=F10 7 | -------------------------------------------------------------------------------- /customcontrols/WarlocksQuest: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Y 3 | joyport1_amiberry_custom_none_y=F1 4 | joyport1_amiberry_custom_none_leftshoulder=F2 5 | joyport1_amiberry_custom_none_rightshoulder=F3 6 | joyport1_amiberry_custom_none_start=P 7 | -------------------------------------------------------------------------------- /customcontrols/RollingRonny: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=F1 3 | joyport1_amiberry_custom_none_y=F2 4 | joyport1_amiberry_custom_none_leftshoulder=F3 5 | joyport1_amiberry_custom_none_rightshoulder=F4 6 | joyport1_amiberry_custom_none_start=Space 7 | -------------------------------------------------------------------------------- /settings/Screen_Height_540.txt: -------------------------------------------------------------------------------- 1 | ApanoSin 2 | ApanoSinDe 3 | Damage 4 | DamagePreview 5 | DeluxeGalaga 6 | DeluxeGalagaAGA 7 | FootballGloryAGA 8 | ManchesterUnitedEurope 9 | ManchesterUnitedEurope23 10 | ProjectX 11 | ProjectXSE 12 | ProjectXSECD32 13 | TurboRaketti2Fi 14 | WarmUp 15 | -------------------------------------------------------------------------------- /settings/CPU_ClockSpeed_Max.txt: -------------------------------------------------------------------------------- 1 | AlienBreed3DAGA 2 | AlienBreed3DNoMusicAGA 3 | AlienBreed3D2AGA 4 | BreathlessAGA 5 | FearsAGA 6 | Frontier 7 | FrontierCz 8 | FrontierDe 9 | FrontierFr 10 | GloomAGA 11 | GloomCD32 12 | Gunship2000AGA 13 | StarCrusaderAGA 14 | SuprStrtFtr2TrboAGA 15 | TZer0DemoAGA 16 | -------------------------------------------------------------------------------- /customcontrols/Xenophobe: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_leftshoulder=Joy2 Up 3 | joyport1_amiberry_custom_none_rightshoulder=Joy2 Down 4 | joyport0_amiberry_custom_none_b=Numpad 0 5 | joyport0_amiberry_custom_none_leftshoulder=Joy1 Up 6 | joyport0_amiberry_custom_none_rightshoulder=Joy1 Down 7 | -------------------------------------------------------------------------------- /customcontrols/NightShift: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_y=F2 4 | joyport1_amiberry_custom_none_start=P 5 | joyport0_amiberry_custom_none_b=Joy1 Up 6 | joyport0_amiberry_custom_none_x=Space 7 | joyport0_amiberry_custom_none_y=F2 8 | joyport0_amiberry_custom_none_start=P 9 | -------------------------------------------------------------------------------- /files_failed.txt: -------------------------------------------------------------------------------- 1 | Problem file log: 2025-12-22 at 02:00:02 2 | Could not read LHA archive: 100MostRememberedGamesOnThe64_v1.01_PerhkanSundell&RonBirk.lha 3 | Could not read LHA archive: 100MostRememberedGamesOnThe64_v1.01_Perh�kanSundell&RonBirk.lha 4 | Could not read LHA archive: Worthy_v1.0-2.lha 5 | Could not read LHA archive: InShadowTimeAGA-WHDL.lha 6 | -------------------------------------------------------------------------------- /customcontrols/Populous: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Joy1 Fire/Mouse1 Left Button 2 | joyport1_amiberry_custom_none_b=Joy1 2nd Button/Mouse1 Right Button 3 | joyport1_amiberry_custom_none_dpup=Cursor Up 4 | joyport1_amiberry_custom_none_dpdown=Cursor Down 5 | joyport1_amiberry_custom_none_dpleft=Cursor Left 6 | joyport1_amiberry_custom_none_dpright=Cursor Right 7 | -------------------------------------------------------------------------------- /customcontrols/PopulousNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Joy1 Fire/Mouse1 Left Button 2 | joyport1_amiberry_custom_none_b=Joy1 2nd Button/Mouse1 Right Button 3 | joyport1_amiberry_custom_none_dpup=Cursor Up 4 | joyport1_amiberry_custom_none_dpdown=Cursor Down 5 | joyport1_amiberry_custom_none_dpleft=Cursor Left 6 | joyport1_amiberry_custom_none_dpright=Cursor Right 7 | -------------------------------------------------------------------------------- /customcontrols/Populous&DataDisks: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Joy1 Fire/Mouse1 Left Button 2 | joyport1_amiberry_custom_none_b=Joy1 2nd Button/Mouse1 Right Button 3 | joyport1_amiberry_custom_none_dpup=Cursor Up 4 | joyport1_amiberry_custom_none_dpdown=Cursor Down 5 | joyport1_amiberry_custom_none_dpleft=Cursor Left 6 | joyport1_amiberry_custom_none_dpright=Cursor Right 7 | -------------------------------------------------------------------------------- /customcontrols/Moonstone: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_y=E 2 | joyport1_amiberry_custom_none_leftshoulder=1 3 | joyport1_amiberry_custom_none_rightshoulder=2 4 | joyport1_amiberry_custom_none_start=Space 5 | joyport0_amiberry_custom_none_y=E 6 | joyport0_amiberry_custom_none_leftshoulder=1 7 | joyport0_amiberry_custom_none_rightshoulder=2 8 | joyport0_amiberry_custom_none_start=Space 9 | -------------------------------------------------------------------------------- /customcontrols/Cybernoid2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=F1 2 | joyport1_amiberry_custom_none_x=F2 3 | joyport1_amiberry_custom_none_y=F3 4 | joyport1_amiberry_custom_none_leftshoulder=F4 5 | joyport1_amiberry_custom_none_rightshoulder=F5 6 | joyport1_amiberry_custom_axis_none_lefttrigger=F6 7 | joyport1_amiberry_custom_axis_none_righttrigger=F7 8 | joyport1_amiberry_custom_none_start=Space 9 | -------------------------------------------------------------------------------- /customcontrols/PPHammer: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=F1 3 | joyport1_amiberry_custom_none_y=F2 4 | joyport1_amiberry_custom_none_leftshoulder=F3 5 | joyport1_amiberry_custom_none_rightshoulder=F4 6 | joyport1_amiberry_custom_axis_none_lefttrigger=F5 7 | joyport1_amiberry_custom_axis_none_righttrigger=Help 8 | joyport1_amiberry_custom_none_start=P 9 | -------------------------------------------------------------------------------- /customcontrols/TrapsNTreasures: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_leftshoulder=Cursor Down 4 | joyport1_amiberry_custom_none_rightshoulder=Cursor Up 5 | joyport1_amiberry_custom_axis_none_lefttrigger=Cursor Left 6 | joyport1_amiberry_custom_axis_none_righttrigger=Cursor Right 7 | joyport1_amiberry_custom_none_start=P 8 | -------------------------------------------------------------------------------- /customcontrols/JurassicPark: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Return 2 | joyport1_amiberry_custom_none_x=I 3 | joyport1_amiberry_custom_none_y=M 4 | joyport1_amiberry_custom_none_leftshoulder=Z 5 | joyport1_amiberry_custom_none_rightshoulder=V 6 | joyport1_amiberry_custom_axis_none_lefttrigger=ESC 7 | joyport1_amiberry_custom_axis_none_righttrigger=Left Shift 8 | joyport1_amiberry_custom_none_start=F 9 | -------------------------------------------------------------------------------- /customcontrols/JurassicParkAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Return 2 | joyport1_amiberry_custom_none_x=I 3 | joyport1_amiberry_custom_none_y=M 4 | joyport1_amiberry_custom_none_leftshoulder=Z 5 | joyport1_amiberry_custom_none_rightshoulder=V 6 | joyport1_amiberry_custom_axis_none_lefttrigger=ESC 7 | joyport1_amiberry_custom_axis_none_righttrigger=Left Shift 8 | joyport1_amiberry_custom_none_start=F 9 | -------------------------------------------------------------------------------- /customcontrols/TrapsNTreasuresDe: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Joy2 Up 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_leftshoulder=Cursor Down 4 | joyport1_amiberry_custom_none_rightshoulder=Cursor Up 5 | joyport1_amiberry_custom_axis_none_lefttrigger=Cursor Left 6 | joyport1_amiberry_custom_axis_none_righttrigger=Cursor Right 7 | joyport1_amiberry_custom_none_start=P 8 | -------------------------------------------------------------------------------- /settings/Memory_Z3Ram_16.txt: -------------------------------------------------------------------------------- 1 | CapitalPunishmentAGA 2 | CapitalPunishmentAGACD 3 | FightinSpiritAGA 4 | RiseOfTheRobotsAGA 5 | StarTrek25thAnnivAGA 6 | StarTrek25thAnnivAGADe 7 | StarTrek25thAnnivAGAFr 8 | SuperSkidmarks 9 | SuperSkidmarks+CD 10 | SuperSkidmarks+LMCD 11 | SuperSkidmarksFYEdCD 12 | SuperSkidmarksFYEdLMCD 13 | SuperSkidmarksCD 14 | SuperSkidmarksLowMem 15 | SuperSkidmarksLMCD 16 | -------------------------------------------------------------------------------- /customcontrols/HostageNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Esc 2 | joyport1_amiberry_custom_none_leftshoulder=F1 3 | joyport1_amiberry_custom_none_rightshoulder=F2 4 | joyport1_amiberry_custom_none_leftstick=F5 5 | joyport1_amiberry_custom_none_rightstick=F6 6 | joyport1_amiberry_custom_axis_none_lefttrigger=F3 7 | joyport1_amiberry_custom_axis_none_righttrigger=F4 8 | joyport1_amiberry_custom_none_start=P 9 | -------------------------------------------------------------------------------- /customcontrols/Hostages: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Esc 2 | joyport1_amiberry_custom_none_leftshoulder=F1 3 | joyport1_amiberry_custom_none_rightshoulder=F2 4 | joyport1_amiberry_custom_none_leftstick=F5 5 | joyport1_amiberry_custom_none_rightstick=F6 6 | joyport1_amiberry_custom_axis_none_lefttrigger=F3 7 | joyport1_amiberry_custom_axis_none_righttrigger=F4 8 | joyport1_amiberry_custom_none_start=P 9 | -------------------------------------------------------------------------------- /customcontrols/OperationJupiterFr: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Esc 2 | joyport1_amiberry_custom_none_leftshoulder=F1 3 | joyport1_amiberry_custom_none_rightshoulder=F2 4 | joyport1_amiberry_custom_none_leftstick=F5 5 | joyport1_amiberry_custom_none_rightstick=F6 6 | joyport1_amiberry_custom_axis_none_lefttrigger=F3 7 | joyport1_amiberry_custom_axis_none_righttrigger=F4 8 | joyport1_amiberry_custom_none_start=P 9 | -------------------------------------------------------------------------------- /customcontrols/EyeOfTheBeholder: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=Return 2 | joyport1_amiberry_custom_none_y=C 3 | joyport1_amiberry_custom_none_dpup=Numpad 8 4 | joyport1_amiberry_custom_none_dpdown=Numpad 2 5 | joyport1_amiberry_custom_none_dpleft=Numpad 4 6 | joyport1_amiberry_custom_none_dpright=Numpad 6 7 | joyport1_amiberry_custom_none_leftshoulder=Numpad 7 8 | joyport1_amiberry_custom_none_rightshoulder=Numpad 9 9 | -------------------------------------------------------------------------------- /customcontrols/EyeOfTheBeholderDe: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=Return 2 | joyport1_amiberry_custom_none_y=C 3 | joyport1_amiberry_custom_none_dpup=Numpad 8 4 | joyport1_amiberry_custom_none_dpdown=Numpad 2 5 | joyport1_amiberry_custom_none_dpleft=Numpad 4 6 | joyport1_amiberry_custom_none_dpright=Numpad 6 7 | joyport1_amiberry_custom_none_leftshoulder=Numpad 7 8 | joyport1_amiberry_custom_none_rightshoulder=Numpad 9 9 | -------------------------------------------------------------------------------- /customcontrols/Populous2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_y=Return 2 | joyport1_amiberry_custom_none_dpup=Cursor Up 3 | joyport1_amiberry_custom_none_dpdown=Cursor Down 4 | joyport1_amiberry_custom_none_dpleft=Cursor Left 5 | joyport1_amiberry_custom_none_dpright=Cursor Right 6 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 7 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 8 | joyport1_amiberry_custom_none_start=F10 9 | -------------------------------------------------------------------------------- /customcontrols/Walker: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_leftstick=F1 2 | joyport1_amiberry_custom_none_rightstick=F3 3 | joyport1_amiberry_custom_none_leftshoulder=Joy1 Fire/Mouse1 Left Button 4 | joyport1_amiberry_custom_none_rightshoulder=Joy1 2nd Button/Mouse1 Right Button 5 | joyport1_amiberry_custom_axis_none_rightx=Mouse1 Horizontal 6 | joyport1_amiberry_custom_axis_none_righty=Mouse1 Vertical 7 | joyport1_amiberry_custom_none_start=P 8 | -------------------------------------------------------------------------------- /customcontrols/WalkerCrunched: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_leftstick=F1 2 | joyport1_amiberry_custom_none_rightstick=F3 3 | joyport1_amiberry_custom_none_leftshoulder=Joy1 Fire/Mouse1 Left Button 4 | joyport1_amiberry_custom_none_rightshoulder=Joy1 2nd Button/Mouse1 Right Button 5 | joyport1_amiberry_custom_axis_none_rightx=Mouse1 Horizontal 6 | joyport1_amiberry_custom_axis_none_righty=Mouse1 Vertical 7 | joyport1_amiberry_custom_none_start=P 8 | -------------------------------------------------------------------------------- /customcontrols/WalkerNoSpeech: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_leftstick=F1 2 | joyport1_amiberry_custom_none_rightstick=F3 3 | joyport1_amiberry_custom_none_leftshoulder=Joy1 Fire/Mouse1 Left Button 4 | joyport1_amiberry_custom_none_rightshoulder=Joy1 2nd Button/Mouse1 Right Button 5 | joyport1_amiberry_custom_axis_none_rightx=Mouse1 Horizontal 6 | joyport1_amiberry_custom_axis_none_righty=Mouse1 Vertical 7 | joyport1_amiberry_custom_none_start=P 8 | -------------------------------------------------------------------------------- /customcontrols/Populous2&ChallengeGames: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_y=Return 2 | joyport1_amiberry_custom_none_dpup=Cursor Up 3 | joyport1_amiberry_custom_none_dpdown=Cursor Down 4 | joyport1_amiberry_custom_none_dpleft=Cursor Left 5 | joyport1_amiberry_custom_none_dpright=Cursor Right 6 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 7 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 8 | joyport1_amiberry_custom_none_start=F10 9 | -------------------------------------------------------------------------------- /customcontrols/WalkerCrunchedNoSpeech: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_leftstick=F1 2 | joyport1_amiberry_custom_none_rightstick=F3 3 | joyport1_amiberry_custom_none_leftshoulder=Joy1 Fire/Mouse1 Left Button 4 | joyport1_amiberry_custom_none_rightshoulder=Joy1 2nd Button/Mouse1 Right Button 5 | joyport1_amiberry_custom_axis_none_rightx=Mouse1 Horizontal 6 | joyport1_amiberry_custom_axis_none_righty=Mouse1 Vertical 7 | joyport1_amiberry_custom_none_start=P 8 | -------------------------------------------------------------------------------- /settings/Screen_Height_524.txt: -------------------------------------------------------------------------------- 1 | AlienBreed2 2 | AlienBreed2AGA 3 | AlienFishFinger 4 | BlobzAGA 5 | DeluxePacman 6 | DeluxePacmanAGA 7 | FightinSpiritAGA 8 | JimPower 9 | Kingpin 10 | Kingpin1Mb 11 | Llamatron1MB 12 | LostInMine 13 | MiamiChase 14 | NaughtyOnes 15 | Obsession 16 | PrimeMover 17 | RevengeOfMutantCamels2 18 | TZer0DemoAGA 19 | Worms 20 | Worms2MB 21 | Worms1MB 22 | WormsDCAGA 23 | WormsDCAGA8MB 24 | WormsDCAGA12MB 25 | Zarathrusta 26 | -------------------------------------------------------------------------------- /customcontrols/BlackCrypt: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Joy1 Fire/Mouse1 Left Button 2 | joyport1_amiberry_custom_none_b=Joy1 2nd Button/Mouse1 Right Button 3 | joyport1_amiberry_custom_none_dpup=Cursor Up 4 | joyport1_amiberry_custom_none_dpdown=Cursor Down 5 | joyport1_amiberry_custom_none_dpleft=Cursor Left 6 | joyport1_amiberry_custom_none_dpright=Cursor Right 7 | joyport1_amiberry_custom_none_leftshoulder=Del 8 | joyport1_amiberry_custom_none_rightshoulder=Help 9 | -------------------------------------------------------------------------------- /customcontrols/Baal: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=R 2 | joyport1_amiberry_custom_none_x=C 3 | joyport1_amiberry_custom_none_y=P 4 | joyport1_amiberry_custom_none_leftstick=S 5 | joyport1_amiberry_custom_none_rightstick=L 6 | joyport1_amiberry_custom_none_leftshoulder=1 7 | joyport1_amiberry_custom_none_rightshoulder=2 8 | joyport1_amiberry_custom_axis_none_lefttrigger=3 9 | joyport1_amiberry_custom_axis_none_righttrigger=4 10 | joyport1_amiberry_custom_none_start=Space 11 | -------------------------------------------------------------------------------- /customcontrols/FIFAInternationalSoccer: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_x=Z 2 | joyport1_amiberry_custom_none_y=C 3 | joyport1_amiberry_custom_none_leftshoulder=B 4 | joyport1_amiberry_custom_none_rightshoulder=B 5 | joyport1_amiberry_custom_none_start=F1 6 | joyport0_amiberry_custom_none_x=Comma 7 | joyport0_amiberry_custom_none_y=Slash 8 | joyport0_amiberry_custom_none_leftshoulder=Period 9 | joyport0_amiberry_custom_none_rightshouldei=Period 10 | joyport0_amiberry_custom_none_start=F2 11 | -------------------------------------------------------------------------------- /settings/Screen_NoCenter_V.txt: -------------------------------------------------------------------------------- 1 | AlienBreed 2 | AlienBreedSpecialEdition 3 | BadDudes 4 | BadDudesVsDragonNinja 5 | BadDudesVsDragonNinjaChip 6 | BlobzAGA 7 | BugBash 8 | CaliforniaGames 9 | FateGatesOfDawn 10 | FateGatesOfDawnDe 11 | FateGatesOfDawnUncensored 12 | FullContact 13 | JamesPond 14 | JamesPond2 15 | JamesPond2AGA 16 | Pang 17 | PrimeMover 18 | ShadowFighter 19 | ShadowFighterAGA 20 | Speedball 21 | SpeedballNTSC 22 | SurfNinjasAGA 23 | TestDrive2 24 | TestDrive2&DataDisks 25 | WarmUp 26 | -------------------------------------------------------------------------------- /customcontrols/EscapeFromColditz: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=F10 3 | joyport1_amiberry_custom_none_y=Cursor Right 4 | joyport1_amiberry_custom_none_leftstick=Cursor Up 5 | joyport1_amiberry_custom_none_rightstick=Cursor Down 6 | joyport1_amiberry_custom_none_leftshoulder=F1 7 | joyport1_amiberry_custom_none_rightshoulder=F2 8 | joyport1_amiberry_custom_axis_none_lefttrigger=F3 9 | joyport1_amiberry_custom_axis_none_righttrigger=F4 10 | joyport1_amiberry_custom_none_start=F5 11 | -------------------------------------------------------------------------------- /customcontrols/Seek&Destroy: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Cursor Down 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_y=F9 4 | joyport1_amiberry_custom_none_leftshoulder=F1 5 | joyport1_amiberry_custom_none_rightshoulder=Cursor Up 6 | joyport1_amiberry_custom_none_leftstick=F5 7 | joyport1_amiberry_custom_none_rightstick=F6 8 | joyport1_amiberry_custom_axis_none_lefttrigger=F2 9 | joyport1_amiberry_custom_axis_none_righttrigger=F3 10 | joyport1_amiberry_custom_none_guide=F4 11 | joyport1_amiberry_custom_none_start=P 12 | -------------------------------------------------------------------------------- /customcontrols/Seek&DestroyAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Cursor Down 2 | joyport1_amiberry_custom_none_x=Space 3 | joyport1_amiberry_custom_none_y=F9 4 | joyport1_amiberry_custom_none_leftshoulder=F1 5 | joyport1_amiberry_custom_none_rightshoulder=Cursor Up 6 | joyport1_amiberry_custom_none_leftstick=F5 7 | joyport1_amiberry_custom_none_rightstick=F6 8 | joyport1_amiberry_custom_axis_none_lefttrigger=F2 9 | joyport1_amiberry_custom_axis_none_righttrigger=F3 10 | joyport1_amiberry_custom_none_guide=F4 11 | joyport1_amiberry_custom_none_start=P 12 | -------------------------------------------------------------------------------- /settings/Chipset_AGA.txt: -------------------------------------------------------------------------------- 1 | DungeonMaster 2 | DungeonMaster2 3 | DynamiteDux 4 | EnemyTempestOfViolence 5 | EnemyTempestOfViolenceDe 6 | EnemyTOVEasyPlay 7 | EnemyTOVEasyPlayDe 8 | KingsQuestEnhanced 9 | KingsQuestEnhancedMT32 10 | PoliceQuest2 11 | Powermonger 12 | SimCity 13 | SimCity12 14 | SimCity512KB 15 | SimCityNTSC 16 | Skweek 17 | Striker 18 | SuperSkidmarks 19 | SuperSkidmarks+CD 20 | SuperSkidmarks+LMCD 21 | SuperSkidmarksFYEdCD 22 | SuperSkidmarksFYEdLMCD 23 | SuperSkidmarksCD 24 | SuperSkidmarksLowMem 25 | SuperSkidmarksLMCD 26 | WildCupSoccer 27 | -------------------------------------------------------------------------------- /customcontrols/MonkeyIsland2: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/SmashTV: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Left Alt 2 | joyport1_amiberry_custom_none_x=Return 3 | joyport1_amiberry_custom_none_y=Return 4 | joyport1_amiberry_custom_none_leftshoulder=Left Amiga 5 | joyport1_amiberry_custom_none_rightshoulder=Left Amiga 6 | joyport1_amiberry_custom_none_start=Help 7 | joyport0_amiberry_custom_none_b=Right Alt 8 | joyport0_amiberry_custom_none_x=Return 9 | joyport0_amiberry_custom_none_y=Return 10 | joyport0_amiberry_custom_none_leftshoulder=Right Amiga 11 | joyport0_amiberry_custom_none_rightshoulder=Right Amiga 12 | -------------------------------------------------------------------------------- /customcontrols/WorldsOfLegend: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=F10 2 | joyport1_amiberry_custom_none_x=Return 3 | joyport1_amiberry_custom_none_y=ESC 4 | joyport1_amiberry_custom_none_leftstick=F6 5 | joyport1_amiberry_custom_none_rightstick=F7 6 | joyport1_amiberry_custom_none_leftshoulder=F5 7 | joyport1_amiberry_custom_none_rightshoulder=F8 8 | joyport1_amiberry_custom_none_dpup=F2 9 | joyport1_amiberry_custom_none_dpdown=F4 10 | joyport1_amiberry_custom_none_dpleft=F3 11 | joyport1_amiberry_custom_none_dpright=F1 12 | joyport1_amiberry_custom_none_start=1 13 | -------------------------------------------------------------------------------- /settings/Screen_NoCenter_H.txt: -------------------------------------------------------------------------------- 1 | BansheeAGA 2 | BodyBlowsAGA 3 | BodyBlowsGalacticAGA 4 | Cabal 5 | CapitalPunishmentAGA 6 | CapitalPunishmentAGACD 7 | ChambersOfShaolin 8 | DesertStrike 9 | FateGatesOfDawn 10 | FateGatesOfDawnDe 11 | FateGatesOfDawnUncensored 12 | MasterAxe 13 | RoboCop2 14 | Stardust 15 | SuperfrogDemoAmigaAction 16 | SuperfrogDemoCUAmiga 17 | SuperfrogDemoTheOne 18 | Superfrog 19 | SwordOfHonour 20 | TestDrive 21 | TestDrive2 22 | TestDrive2&DataDisks 23 | Untouchables 24 | VenusTheFlytrap 25 | VenusTheFlytrapNoIntro 26 | Zool 27 | ZoolAGA 28 | -------------------------------------------------------------------------------- /customcontrols/LegendMindscape: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=F10 2 | joyport1_amiberry_custom_none_x=Return 3 | joyport1_amiberry_custom_none_y=ESC 4 | joyport1_amiberry_custom_none_start=1 5 | joyport1_amiberry_custom_none_dpup=F2 6 | joyport1_amiberry_custom_none_dpdown=F4 7 | joyport1_amiberry_custom_none_dpleft=F3 8 | joyport1_amiberry_custom_none_dpright=F1 9 | joyport1_amiberry_custom_none_leftstick=F6 10 | joyport1_amiberry_custom_none_rightstick=F7 11 | joyport1_amiberry_custom_none_leftshoulder=F5 12 | joyport1_amiberry_custom_none_rightshoulder=F8 13 | -------------------------------------------------------------------------------- /customcontrols/MonkeyIsland2De: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/MonkeyIsland2Es: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/MonkeyIsland2Fr: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/MonkeyIsland2It: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/IndianaJonesAtlantisAdv: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/SecretOfMonkeyIsland: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/SecretOfMonkeyIslandDe: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/SecretOfMonkeyIslandEs: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/SecretOfMonkeyIslandFr: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/SecretOfMonkeyIslandIt: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/IndianaJonesAtlantisAdvDe: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/IndianaJonesAtlantisAdvEs: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/IndianaJonesAtlantisAdvFr: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/IndianaJonesAtlantisAdvIt: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/IndianaJonesLastCrusAdvDe: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/IndianaJonesLastCrusAdvEs: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/IndianaJonesLastCrusAdvFr: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/IndianaJonesLastCrusAdvIt: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /customcontrols/IndyJonesLastCrusAdvNTSC: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Tab 3 | joyport1_amiberry_custom_none_x=ESC 4 | joyport1_amiberry_custom_none_y=F5 5 | joyport1_amiberry_custom_none_dpup=Cursor Up 6 | joyport1_amiberry_custom_none_dpdown=Cursor Down 7 | joyport1_amiberry_custom_none_dpleft=Cursor Left 8 | joyport1_amiberry_custom_none_dpright=Cursor Right 9 | joyport1_amiberry_custom_none_leftshoulder=Numpad Minus 10 | joyport1_amiberry_custom_none_rightshoulder=Numpad Plus 11 | joyport1_amiberry_custom_none_start=Space 12 | -------------------------------------------------------------------------------- /settings/CPU_ClockSpeed_25.txt: -------------------------------------------------------------------------------- 1 | 3DPool 2 | AllTerrainRacing 3 | BlackViperAGA 4 | BloodnetAGA 5 | CapitalPunishmentAGA 6 | CapitalPunishmentAGACD 7 | CivilizationAGA 8 | CivilizationAGACD 9 | CivilizationAGADe 10 | ColonizationAGA 11 | DreamWebAGA 12 | DreamWebAGADe 13 | FIFAInternationalSoccer 14 | Hunter 15 | HunterDe 16 | HunterFr 17 | Ishar2AGA 18 | Ishar3AGA 19 | Nicky2 20 | RedZone 21 | RedZoneNTSC 22 | StarTrek25thAnnivAGA 23 | StarTrek25thAnnivAGADe 24 | StarTrek25thAnnivAGAFr 25 | ThemePark 26 | ThemeParkAGA 27 | UFOEnemyUnknownAGA 28 | WingCommander 29 | WingCommanderDe 30 | -------------------------------------------------------------------------------- /customcontrols/BreathlessAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=CTRL 3 | joyport1_amiberry_custom_none_y=P 4 | joyport1_amiberry_custom_none_leftstick=Tab 5 | joyport1_amiberry_custom_none_rightstick=Left Alt 6 | joyport1_amiberry_custom_none_leftshoulder=Z 7 | joyport1_amiberry_custom_none_rightshoulder=X 8 | joyport1_amiberry_custom_none_dpup=Cursor Up 9 | joyport1_amiberry_custom_none_dpdown=Cursor Down 10 | joyport1_amiberry_custom_none_dpleft=Cursor Left 11 | joyport1_amiberry_custom_none_dpright=Cursor Right 12 | joyport1_amiberry_custom_none_start=ESC 13 | -------------------------------------------------------------------------------- /customcontrols/BreathlessAGA060: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_b=Space 2 | joyport1_amiberry_custom_none_x=CTRL 3 | joyport1_amiberry_custom_none_y=P 4 | joyport1_amiberry_custom_none_leftstick=Tab 5 | joyport1_amiberry_custom_none_rightstick=Left Alt 6 | joyport1_amiberry_custom_none_leftshoulder=Z 7 | joyport1_amiberry_custom_none_rightshoulder=X 8 | joyport1_amiberry_custom_none_dpup=Cursor Up 9 | joyport1_amiberry_custom_none_dpdown=Cursor Down 10 | joyport1_amiberry_custom_none_dpleft=Cursor Left 11 | joyport1_amiberry_custom_none_dpright=Cursor Right 12 | joyport1_amiberry_custom_none_start=ESC 13 | -------------------------------------------------------------------------------- /slave_lha/parse_lha/lhafile/README: -------------------------------------------------------------------------------- 1 | This project is an updated version of the project found at 2 | http://trac.neotitans.net/wiki/lhafile 3 | 4 | Changes include: 5 | * Support for Python 3.x. 6 | * Support file notes (as found in Amiga .lha files). 7 | * Support for archives with ISO-8859-1 filenames. 8 | * Fixed a bug causing crashes in lzhlib. 9 | 10 | I've also updated setup.py and replaced the author information there. 11 | This is not done to remove any credit, but to avoid people bugging the 12 | original author if there is a problem with my modifications. 13 | 14 | README.txt is the original upstream README. 15 | -------------------------------------------------------------------------------- /settings/Screen_Offset_V.txt: -------------------------------------------------------------------------------- 1 | AlienBreed 18 2 | AlienBreedSpecialEdition 18 3 | BadDudes 18 4 | BadDudesVsDragonNinja 18 5 | BadDudesVsDragonNinjaChip 18 6 | BatmanTheMovie1Disk 20 7 | BatmanTheMovie2Disk 20 8 | BlobzAGA 18 9 | BugBash 18 10 | BluesBrothers 20 11 | CaliforniaGames 18 12 | FateGatesOfDawn 18 13 | FateGatesOfDawnDe 18 14 | FateGatesOfDawnUncensored 18 15 | FullContact 18 16 | JamesPond 18 17 | JamesPond2 15 18 | JamesPond2AGA 15 19 | Pang 18 20 | PrimeMover 18 21 | ShadowFighter 20 22 | ShadowFighterAGA 20 23 | Speedball 2 24 | SpeedballNTSC 2 25 | SurfNinjasAGA 18 26 | TestDrive2 18 27 | TestDrive2&DataDisks 18 28 | WarmUp 12 29 | -------------------------------------------------------------------------------- /customcontrols/PinballIllusionsAGA: -------------------------------------------------------------------------------- 1 | joyport1_amiberry_custom_none_a=Return 2 | joyport1_amiberry_custom_none_b=Right Shift 3 | joyport1_amiberry_custom_none_x=Space 4 | joyport1_amiberry_custom_none_y=P 5 | joyport1_amiberry_custom_none_leftshoulder=Left Alt 6 | joyport1_amiberry_custom_none_rightshoulder=Right Alt 7 | joyport1_amiberry_custom_none_leftstick=F2 8 | joyport1_amiberry_custom_none_rightstick=F3 9 | joyport1_amiberry_custom_none_dpup=Cursor Up 10 | joyport1_amiberry_custom_none_dpdown=Cursor Down 11 | joyport1_amiberry_custom_none_dpleft=Left Shift 12 | joyport1_amiberry_custom_none_dpright=Joy1 Fire/Mouse1 Left Button 13 | joyport1_amiberry_custom_none_start=F1 14 | -------------------------------------------------------------------------------- /slave_lha/parse_lha/lhafile/PKG-INFO: -------------------------------------------------------------------------------- 1 | Metadata-Version: 1.1 2 | Name: lhafile 3 | Version: 0.2.2 4 | Summary: LHA(.lzh) file extract interface 5 | Home-page: https://fengestad.no/python-lhafile/ 6 | Author: Frode Solheim 7 | Author-email: frode-code@fengestad.no 8 | License: BSD 9 | Download-URL: https://fengestad.no/python-lhafile/ 10 | Description: Extract LHA(.lzh) file extension. 11 | The interface is similar to the zipfile module in the regular 12 | Python distribution. 13 | Platform: UNKNOWN 14 | Classifier: Development Status :: 4 - Beta 15 | Classifier: Intended Audience :: Developers 16 | Classifier: License :: OSI Approved :: BSD License 17 | Classifier: Programming Language :: Python :: 2 18 | Classifier: Programming Language :: Python :: 3 19 | Classifier: Topic :: System :: Archiving 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Amiberry-XML-Builder 2 | Python script to scan LHA files for WHDLoad integration in Amiberry 3 | 4 | ## About The Amiberry XML Builder 5 | 6 | The Amiberry XML Builder is an automated tool which will routinely scan for available Amiga WHDLoad Packs (Games) and pre-set various options to be used in conjunction with the Amiga emulator Amiberry to aid with games compatibility and usability. This tool will be storing the end results in an output XML file named after whdload_db.xml. 7 | 8 | If the above sounds like another language, or makes no sense, please consider visiting https://github.com/midwan/amiberry/wiki to learn more about why this tool exists. 9 | 10 | ## Credits 11 | 12 | This tool is the work of @HoraceAndTheSpider using some excellect OpenRetro and LHA reading code thanks to @osvaldolove. 13 | 14 | Additional thanks and credits to @nemo93 for keeping the project alive with the changes needed from Amiberry's own updates and changes. 15 | -------------------------------------------------------------------------------- /settings/Chipset_ImmediateBlitter.txt: -------------------------------------------------------------------------------- 1 | AladdinAGA 2 | AstroMarineCorps 3 | CrazyCars2 4 | DeconstructionAGA 5 | Flood 6 | MasterAxe 7 | Outzone 8 | PanzaKickBoxing 9 | PanzaKickBoxingFr 10 | SensibleSoccer 11 | SensibleSoccer92931MB 12 | SensibleSoccer9293512KB 13 | SensibleSoccerBulldogBlty 14 | SensibleSoccerEuro1MB 15 | SensibleSoccerEuro512KB 16 | SensibleSoccerIntlEdCD32 17 | SensibleSoccerIntEd1MB 18 | SensibleSoccerIntEd512KB 19 | SensibleSoccer1MB 20 | SensibleSoccer512KB 21 | SensibleWorldMoonSoccer 22 | SensibleWorldOfSoccer 23 | SensibleWorldOfSoccer9596 24 | SensibleWorldOfSoccer9697 25 | SensibleWorldOfSoccer9798 26 | SensibleWorldOfSoccer11 27 | SensibleWorldOfSoccer1617 28 | SensibleWorldOfSoccer2020 29 | SensibleWorldOfSoccer2021 30 | SensibleWorldOfSoccerEuro 31 | SensibleWorldOfSoccerWC98 32 | SWOS 33 | SWOSDe 34 | SWOS9596 35 | SWOS9596ECE 36 | SWOS9697 37 | SWOS9798 38 | SWOS98 39 | SWOSv11 40 | SWOS1617 41 | SWOS2020 42 | SWOS2021 43 | SWOS2122 44 | Settlers 45 | SettlersFr 46 | Simulcra 47 | Sqrxz 48 | StarCrusader 49 | StarCrusaderAGA 50 | SuperCars2Disk 51 | SuperCars1Disk 52 | SuperStardustAGA 53 | SuprStrtFtr2TrboAGA 54 | ThunderStrike 55 | WheelsOnFire 56 | XOut1Disk 57 | XOut2Disk 58 | -------------------------------------------------------------------------------- /settings/Screen_Height_480.txt: -------------------------------------------------------------------------------- 1 | Apidya 2 | ArcadePoolAGA 3 | ArcadePoolCD32 4 | ArcadeSnookerAGA 5 | BartVsTheWorld 6 | BattleIsle 7 | BattleIsle&DataDisks 8 | Blastar 9 | BreathlessAGA 10 | BubbleDizzy 11 | CaptainDynamo 12 | ChronoQuest 13 | ChronoQuestDe 14 | CrazySue 15 | CrazySueGoesOn 16 | Elvira 17 | ElviraDe 18 | ElviraFr 19 | Elvira2 20 | Elvira2De 21 | Elvira2Es 22 | Elvira2Fr 23 | Elvira2It 24 | ExploraFr 25 | FireAndIceCD32 26 | FlyHarder 27 | FranticFreddie 28 | Globdule 29 | GuardianAGA 30 | IndyHeat 31 | JamesPond3AGA 32 | JamesPond3CD32 33 | K240 34 | Lancelot 35 | ManicMiner 36 | MaxKnight 37 | Minskies 38 | MortonStrikesBack 39 | MortonStrikesBackAGA 40 | NightbreedAction 41 | Oscar 42 | OscarAGA 43 | OverTheNet 44 | OverTheNetNTSC 45 | Pang 46 | PersonalNightmare 47 | PhantomFighter 48 | Pirates 49 | ProTennisTour2 50 | PsychoSanta 51 | PuttySquadAGA 52 | RiskyWoods 53 | RoadkillAGA 54 | RoadkillCD32 55 | RoadkillCD32NoIntro 56 | RoboCop2 57 | RoboSport 58 | SabreTeam 59 | SabreTeamAGA 60 | ShadowFighter 61 | ShadowFighterAGA 62 | Skidmarks 63 | SkidmarksAGA 64 | SlipStream 65 | TitanicBlinky 66 | Trolls 67 | TrollsAGA 68 | TubularWorlds 69 | Vixen 70 | Waxworks 71 | WaxworksDe 72 | WaxworksFr 73 | WhereTimeStoodStill 74 | -------------------------------------------------------------------------------- /settings/Screen_Height_432.txt: -------------------------------------------------------------------------------- 1 | AlienBreed3DAGA 2 | AlienBreed3DCD32 3 | AlienBreed3DNoMusicAGA 4 | Arkanoid 5 | ArkanoidNTSC 6 | BeyondTheIcePalace 7 | BloodMoney 8 | BrianTheLion 9 | BrianTheLionAGA 10 | BridesOfDracula 11 | BrutalPawsOfFury 12 | Burntime 13 | BurntimeAGA 14 | Capone 15 | ChuckRock2 16 | CrystalHammerV2 17 | EmeraldMine 18 | EscapeFromColditz 19 | FantasyWorldDizzy 20 | FireAndIce 21 | Fire&IceXmasDemo 22 | GemStoneLegend 23 | HATE 24 | HostageNTSC 25 | Hostages 26 | JamesPond2 27 | JamesPond2AGA 28 | JungleStrike 29 | JungleStrike1MB 30 | JungleStrike2MB 31 | JungleStrikeAGA 32 | JungleStrikeCD32 33 | KidGloves 34 | LegendOfTheSword 35 | Lollypop 36 | LordsOfTheRisingSun 37 | LordsOfWar 38 | Millennium22 39 | NeverMind 40 | NewYorkWarriors512KB 41 | NewYorkWarriors1MB 42 | NorthAndSouthImage 43 | NorthAndSouthFiles 44 | OperationJupiterFr 45 | Paperboy2 46 | PoolOfRadiance 47 | RevengeOfDefender 48 | Rockford 49 | SideWinder 50 | SideWinderArcadia 51 | Soldier2000 52 | StarRay 53 | StarRayNoIntro 54 | StarControl 55 | StegTheSlug 56 | STUNRunner 57 | SuperSki 58 | SuperstarIceHockey 59 | SuprStrtFtr2TrboAGA 60 | SuspiciousCargo 61 | Thexder 62 | TowerOfSouls 63 | TowerOfSoulsAGA 64 | Troddlers 65 | Turrican2 66 | Turrican2Demo 67 | TyphoonThompson 68 | UniversalWarrior 69 | Universe 70 | UniverseCD32 71 | Unreal 72 | UnrealNTSC 73 | WorldsOfLegend 74 | -------------------------------------------------------------------------------- /slave_lha/command_line.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from six import print_ 3 | import lhafile 4 | import colorama 5 | from .parse_lha.read_lha import LhaSlaveArchive 6 | 7 | colorama.init(autoreset=True) 8 | 9 | 10 | def main(): 11 | if len(sys.argv) == 1: 12 | print_("No file specified") 13 | sys.exit(1) 14 | if len(sys.argv) > 3: 15 | print_("Too many arguments passed") 16 | 17 | archive_path = sys.argv[1] 18 | 19 | try: 20 | hash_algorithm = sys.argv[2] 21 | except IndexError: 22 | hash_algorithm = 'SHA1' 23 | 24 | try: 25 | slave_archive = LhaSlaveArchive(archive_path, hash_algorithm) 26 | except FileNotFoundError: 27 | print_(colorama.Fore.RED + 28 | "Could not find LHA archive: {}".format(archive_path)) 29 | sys.exit(1) 30 | except lhafile.BadLhafile: 31 | print_(colorama.Fore.RED + 32 | "Could not read LHA archive: {}".format(archive_path)) 33 | sys.exit(1) 34 | 35 | print(colorama.Fore.GREEN + slave_archive.absolute_path) 36 | slave_archive.read_lha() 37 | for slave in slave_archive.slaves: 38 | slave.get_hash() 39 | print_(colorama.Fore.YELLOW + 'Slave Name: ', end='') 40 | print_(slave.name) 41 | print_( 42 | colorama.Fore.YELLOW + 43 | "{} Hash: ".format(slave.hasher.name.upper()), 44 | end='') 45 | print_(slave.hash_digest) 46 | -------------------------------------------------------------------------------- /snippets/DevilsTemple: -------------------------------------------------------------------------------- 1 | 2 | Devils Temple 3 | DevilsTemple 4 | 2e0b87ca-1083-5709-bd80-e46242de331b 5 | 1 6 | DevilsTemple.Slave 7 | False 8 | 9 | DevilsTemple.Slave 10 | data 11 | 12 | 13 | 14 | 15 | CHIPSET=AGA 16 | PRIMARY_CONTROL=JOYSTICK 17 | PORT0=JOY 18 | PORT1=JOY 19 | SCREEN_AUTOHEIGHT=TRUE 20 | SCREEN_CENTERH=SMART 21 | SCREEN_CENTERV=SMART 22 | 23 | 24 | 25 | Devils Temple 26 | DevilsTemple 27 | 2e0b87ca-1083-5709-bd80-e46242de331b 28 | 1 29 | DevilsTemple.Slave 30 | False 31 | 32 | DevilsTemple.Slave 33 | data 34 | 35 | 36 | 37 | 38 | CHIPSET=AGA 39 | PRIMARY_CONTROL=JOYSTICK 40 | PORT0=JOY 41 | PORT1=JOY 42 | SCREEN_AUTOHEIGHT=TRUE 43 | SCREEN_CENTERH=SMART 44 | SCREEN_CENTERV=SMART 45 | 46 | 47 | -------------------------------------------------------------------------------- /settings/Screen_Height_512.txt: -------------------------------------------------------------------------------- 1 | 3DPool 2 | 3DWorldTennis 3 | AlienBash2 4 | AlienBreed 5 | AlienBreedSpecialEdition 6 | Atomix 7 | AttackOfTheGreenSmellyAliens 8 | BansheeAGA 9 | BansheeCD32 10 | BaseJumpers 11 | BaseJumpersCD32 12 | BattleSquadron 13 | BattleSquadronDemo 14 | BombPacCD32 15 | BombPacCD32AGA 16 | CaptainPlanet 17 | CaptainPlanetA600Pack 18 | CardiaxxTeam17 19 | Carnage 20 | CharlieJCool 21 | CharlieJCoolAGA 22 | Clockwiser 23 | ClockwiserAGA 24 | ClockwiserCD32 25 | Coala 26 | CoalaAGA 27 | Coloris 28 | Commando 29 | CrystalKingdomDizzy 30 | Cyberpunks 31 | Cytron 32 | DimosQuest 33 | DragonsLair 34 | DragonsLairEscapeDemoNTSC 35 | DragonsLairEscapeFast 36 | DragonsLairEscapeSlow 37 | DragonsLair&EscapeFast 38 | DragonsLair&EscapeSlow 39 | DragonTiles 40 | DragonTilesAGA 41 | Embryo 42 | Executioner 43 | FlimbosQuest 44 | FullContact 45 | FutureTank 46 | Fuzzball 47 | GemX 48 | GreenBeret 49 | GuySpy 50 | GuySpyCD32 51 | Hilt2 52 | Hybris 53 | Jetstrike 54 | JewelsOfDarkness 55 | KickOff 56 | KickOff3 57 | KickOff96 58 | LastActionHero 59 | LeadingLapMPV 60 | LeadingLapMPVAGA 61 | LethalXcess 62 | MeanArenas 63 | Moonwalker 64 | Premiere 65 | PremierManager 66 | RollingRonny 67 | SantasXmasCaper 68 | SolomonsKey2 69 | SuperSkidmarks 70 | SuperSkidmarks+CD 71 | SuperSkidmarks+LMCD 72 | SuperSkidmarksFYEdCD 73 | SuperSkidmarksFYEdLMCD 74 | SuperSkidmarksCD 75 | SuperSkidmarksLowMem 76 | SuperSkidmarksLMCD 77 | Switchblade2 78 | TanksFurry 79 | TennisChamps 80 | TinyTroops 81 | TipOff 82 | Ugh 83 | Vyrus 84 | WheelsOnFire 85 | WonderDog 86 | -------------------------------------------------------------------------------- /slave_lha/parse_lha/lhafile/COPYING.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010 Hidekazu Ohnishi. 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are 6 | met: 7 | 8 | * Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | 11 | * Redistributions in binary form must reproduce the above 12 | copyright notice, this list of conditions and the following 13 | disclaimer in the documentation and/or other materials provided 14 | with the distribution. 15 | 16 | * Neither the name of the author nor the names of its contributors 17 | may be used to endorse or promote products derived from this 18 | software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 | HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | -------------------------------------------------------------------------------- /slave_lha/parse_lha/lhafile/setup.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # Copyright (C) 2010 Hidekazu Ohnishi 4 | # 5 | # This software is released under the terms of the BSD license. 6 | # For more information see the COPYING.txt file in this directory. 7 | 8 | from distutils.core import setup, Extension 9 | import sys 10 | import platform 11 | 12 | extra_compile_args=[] 13 | extra_link_args=[] 14 | if sys.platform == "darwin" and platform.machine() == "i386": 15 | extra_compile_args.append("-m32") 16 | extra_link_args.append("-m32") 17 | 18 | lzhlib = Extension('lzhlib', 19 | extra_compile_args=extra_compile_args, 20 | extra_link_args=extra_link_args, 21 | define_macros=[('MAJOR_VERSION', '0'), 22 | ('MINOR_VERSION', '2')], 23 | sources=['lzhlib.c']) 24 | 25 | setup(name="lhafile", 26 | packages=['lhafile'], 27 | version='0.2.2', 28 | description="LHA(.lzh) file extract interface", 29 | long_description="""Extract LHA(.lzh) file extension. 30 | The interface is similar to the zipfile module in the regular 31 | Python distribution.""", 32 | author='Frode Solheim', 33 | author_email='frode-code@fengestad.no', 34 | url='https://fengestad.no/python-lhafile/', 35 | download_url='https://fengestad.no/python-lhafile/', 36 | license='BSD', 37 | keywords = [], 38 | classifiers = [ 39 | 'Development Status :: 4 - Beta', 40 | 'Intended Audience :: Developers', 41 | 'License :: OSI Approved :: BSD License', 42 | 'Programming Language :: Python :: 2', 43 | 'Programming Language :: Python :: 3', 44 | 'Topic :: System :: Archiving'], 45 | ext_modules=[lzhlib]) 46 | -------------------------------------------------------------------------------- /utils/update_utils.py: -------------------------------------------------------------------------------- 1 | import ssl 2 | import urllib 3 | import urllib.request 4 | from .text_utils import FontColours 5 | 6 | try: 7 | ssl._create_default_https_context = ssl._create_unverified_context 8 | except: 9 | pass 10 | 11 | 12 | def download_update(in_file,put_file): 13 | # get_file = "http://www.djcresswell.com/RetroPie/ConfigMaker/" +infile 14 | get_file = "https://raw.githubusercontent.com/HoraceAndTheSpider/UAEConfigMaker/develop/" + in_file 15 | get_file = urllib.parse.quote(get_file) 16 | get_file = str.replace(get_file,"https%3A","https:") 17 | 18 | 19 | if put_file == "": 20 | put_file = "" + in_file 21 | 22 | try: 23 | urllib.request.urlretrieve(get_file, put_file) 24 | print("Update downloaded for " + FontColours.OKBLUE + in_file + FontColours.ENDC + ".") 25 | except: 26 | print("No update downloaded for " + FontColours.FAIL + in_file + FontColours.ENDC + ". (Web Page not found)") 27 | return 28 | 29 | 30 | def run_updater(): 31 | # initialisations 32 | 33 | print() 34 | print( 35 | FontColours.BOLD + FontColours.OKBLUE + "HoraceAndTheSpider" + FontColours.ENDC + "'s " + FontColours.BOLD + 36 | "UAE Configuration Maker" + FontColours.ENDC + FontColours.OKGREEN + " (Auto-Update)" + FontColours.ENDC + " | " + "" + 37 | FontColours.FAIL + "www.ultimateamiga.co.uk" + FontColours.ENDC) 38 | print() 39 | 40 | # and these are the files to update 41 | download_update("uae_config_maker.py","") 42 | download_update("UAE%20Config%20Maker.sh","/home/pi/RetroPie/retropiemenu/") 43 | download_update("README.md","") 44 | download_update("TODO.md","") 45 | download_update("whdload/whdload_slave.py","") 46 | download_update("utils/general_utils.py","") 47 | download_update("utils/text_utils.py","") 48 | download_update("utils/update_utils.py","") 49 | return 50 | -------------------------------------------------------------------------------- /slave_lha/parse_lha/read_lha.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import hashlib 4 | import lhafile 5 | 6 | 7 | class SlaveFile: 8 | def __init__(self, name, data, hasher): 9 | self.name = name 10 | self.data = data 11 | self.hasher = hasher 12 | self.hash_digest = None 13 | 14 | def get_hash(self): 15 | if self.data: 16 | self.hasher.update(self.data) 17 | self.hash_digest = self.hasher.hexdigest() 18 | else: 19 | raise ValueError('No slave data to hash') 20 | 21 | def __str__(self): 22 | return 'Slave File: {}\nSlave {} Hash: {}'.format( 23 | self.name, self.hasher.name.upper(), self.hash_digest) 24 | 25 | 26 | class LhaSlaveArchive: 27 | def __init__(self, archive_path, hash_algorithm='SHA1'): 28 | self.original_path = archive_path 29 | self.hasher = self._get_hasher(hash_algorithm) 30 | self.absolute_path = os.path.abspath(self.original_path) 31 | try: 32 | self.lha_file = lhafile.lhafile.Lhafile(self.absolute_path) 33 | self.slaves = [] 34 | except: 35 | print("Problem reading LHA") 36 | 37 | def read_lha(self): 38 | archive = lhafile.lhafile.Lhafile(self.absolute_path) 39 | for file in archive.filelist: 40 | if str(file.filename).lower().endswith('.slave'): 41 | self.slaves.append( 42 | SlaveFile( 43 | name=file.filename, 44 | data=archive.read(file.filename), 45 | hasher=self.hasher)) 46 | 47 | def _get_hasher(self, hash_algorithm): 48 | if hash_algorithm is None or hash_algorithm.upper() == 'SHA1': 49 | return hashlib.sha1() 50 | 51 | return hashlib.md5() 52 | 53 | 54 | # if __name__ == '__main__': 55 | # CWD = os.path.dirname(__file__) 56 | # FILE = os.path.join(CWD, 'test_data', 'Alcatraz.lha') 57 | # FILE = r"C:\Users\oaing\Downloads\Lemmings2.lha" 58 | # LHA_SLAVE = LhaSlaveArchive(archive_path=FILE) 59 | # LHA_SLAVE.read_lha() 60 | # for slave in LHA_SLAVE.slaves: 61 | # slave.get_hash() 62 | # print(slave) 63 | -------------------------------------------------------------------------------- /utils/general_utils.py: -------------------------------------------------------------------------------- 1 | ## GENERAL UTILS 2 | ## V1.0 (can we put this in a constant here??) 3 | ## 4 | ## now with numbering so that file can be shared between programs. 5 | ## please increment the number for each function added, 6 | ## and increment the sub-number for each revision of existing function 7 | 8 | 9 | import os 10 | 11 | 12 | def check_inputdirs(inputdirs): 13 | """Check the Directories to scan are valid on this system. 14 | 15 | Args: 16 | inputdirs (list): list of directories to scan. 17 | Returns: 18 | list of directories. 19 | Raises: 20 | ValueError: if a directory is not valid. 21 | 22 | """ 23 | for i, directory in enumerate(inputdirs): 24 | 25 | # Format Directory string for this OS 26 | directory = os.path.abspath(directory) 27 | 28 | # Check Directory is valid 29 | if not os.path.isdir(directory): 30 | raise ValueError('"{}" is not a valid directory on this system'.format( 31 | directory 32 | )) 33 | 34 | # Update Directory string in list with trailing "/" or "\" depending on OS 35 | inputdirs[i] = "{directory}{separator}".format( 36 | directory=directory, 37 | separator=os.sep 38 | ) 39 | 40 | return inputdirs 41 | 42 | 43 | # sorry Olly, i will let you tidy this up :D 44 | def check_singledir(inputdirs): 45 | """Check the Directories to scan are valid on this system. 46 | 47 | Args: 48 | inputdirs (list): list of directories to scan. 49 | Returns: 50 | list of directories. 51 | Raises: 52 | ValueError: if a directory is not valid. 53 | 54 | """ 55 | # for i, directory in enumerate(inputdirs): 56 | 57 | 58 | # Format Directory string for this OS 59 | directory = os.path.abspath(inputdirs) 60 | 61 | # Check Directory is valid 62 | if not os.path.isdir(directory): 63 | raise ValueError('"{}" is not a valid directory on this system'.format( 64 | directory 65 | )) 66 | 67 | # Update Directory string in list with trailing "/" or "\" depending on OS 68 | inputdirs = "{directory}{separator}".format( 69 | directory=directory, 70 | separator=os.sep 71 | ) 72 | 73 | return inputdirs 74 | -------------------------------------------------------------------------------- /settings/Screen_Width_640.txt: -------------------------------------------------------------------------------- 1 | AlienBreed2 2 | AlienBreed2AGA 3 | AlphaWaves 4 | BadDudes 5 | BadDudesChipNTSC 6 | BadDudesNTSC 7 | BadDudesVsDragonNinja 8 | BadDudesVsDragonNinjaChip 9 | Brat 10 | Cabal 11 | CaptainBlood 12 | ColonizationAGA 13 | CrazyCars 14 | CrazyCars2 15 | Cybernoid 16 | Cybernoid2 17 | DonkTheSamuraiDuck 18 | DonkTheSamuraiDuckAGA 19 | DragonsLair 20 | DragonsLairEscapeDemoNTSC 21 | DragonsLairEscapeFast 22 | DragonsLairEscapeSlow 23 | DragonsLair&EscapeFast 24 | DragonsLair&EscapeSlow 25 | DragonsLair2 26 | DynamiteDux 27 | EnemyTempestOfViolence 28 | EnemyTempestOfViolenceDe 29 | EnemyTOVEasyPlay 30 | EnemyTOVEasyPlayDe 31 | FatmanCapedConsumer 32 | FatmanCapedConsumerAGA 33 | Fire&Forget 34 | FullContact 35 | GalacticEmpire 36 | Geisha 37 | GeishaDe 38 | GeishaEs 39 | GeishaFr 40 | Godfather 41 | GoldenAxe 42 | GoldenAxeNTSC 43 | Indianapolis500 44 | IndyHeat 45 | JaguarXJ220Files 46 | JaguarXJ220FilesChip 47 | JaguarXJ220Image 48 | JaguarXJ220ImageChip 49 | Joe&MacCavemanNinja 50 | Joe&MacCavemanNinjaFast 51 | KillingGameShow 52 | Lemmings21MB 53 | Lemmings2512KB 54 | Lemmings2Demo 55 | Lemmings2NTSC1MB 56 | Lemmings2NTSC512KB 57 | LemmingsAltFiles 58 | LemmingsAltImage 59 | LemmingsDemo 60 | LemmingsFiles 61 | LemmingsFilesNTSC 62 | LemmingsHoliday1993 63 | LemmingsHoliday1994 64 | LemmingsHolidayDemo 65 | LemmingsImage 66 | LemmingsImageNTSC 67 | LemmingsNewYear9192 68 | LemmingsXmasDemo1991 69 | LemmingsXmasDemo1992 70 | Menace 71 | Mystical 72 | NewYorkWarriors512KB 73 | NewYorkWarriors1MB 74 | NinjaWarriors 75 | NoExit 76 | Odyssey 77 | OhNoMoreLemmings 78 | OhNoMoreLemmingsNTSC 79 | OutRun 80 | OutRunNTSC 81 | Pandora 82 | PhantomFighter 83 | Popeye2 84 | POW 85 | ProjectX 86 | ProjectXSE 87 | ProPowerBoatSimulator 88 | QuestOfAgravain 89 | RailroadTycoon 90 | RailroadTycoonDe 91 | RailroadTycoonFr 92 | Rambo3 93 | Rambo3NTSC 94 | RevengeOfMutantCamels 95 | RevengeOfMutantCamelsNTSC 96 | RoadBlasters 97 | RoadRash 98 | SaintDragon 99 | ScoobyDoo&ScrappyDoo 100 | SensibleWorldOfSoccer9697 101 | SWOS9697 102 | SeymourGoesToHollywood 103 | ShadowFighter 104 | ShadowFighterAGA 105 | Shadowgate 106 | ShockWave 107 | SideWinder 108 | SideWinderArcadia 109 | SimCity 110 | SimCity12 111 | SimCity512KB 112 | SimCityNTSC 113 | Skidz 114 | Skweek 115 | SonShuShi 116 | SpaceHarrier 117 | SpaceHarrierNTSC 118 | SuperSkweek1MB 119 | SuperSkweek512KB 120 | TheatreOfDeath 121 | WhoFramedRogerRabbit 122 | WhoFramedRogerRabbitPR 123 | WizNLiz 124 | WonderDog 125 | WWFWrestleMania 126 | Xenomorph 127 | Xenophobe 128 | -------------------------------------------------------------------------------- /openretroid.py: -------------------------------------------------------------------------------- 1 | import hashlib 2 | import json 3 | import os 4 | import posixpath 5 | import urllib 6 | import uuid 7 | 8 | import lhafile 9 | 10 | ROOT_DIR = os.path.dirname(__file__) 11 | HDD_PREFIX = 'DH0' 12 | VARIANT_PREFIX = ['WHDLoad'] 13 | SHA1_URL = 'http://sha1.fengestad.no/' 14 | 15 | # 16 | # all credit for this module goes to Olly Ainger 17 | # i did nothing here 18 | # 19 | 20 | def generate_variant_uuid(file_sha1s): 21 | file_sha1s_joined = "/".join(sorted(file_sha1s)) 22 | sha1_url = SHA1_URL + file_sha1s_joined 23 | return str(uuid.uuid5(uuid.NAMESPACE_URL, str(sha1_url))) 24 | 25 | 26 | def get_file_metadata(archive, file): 27 | metadata = {} 28 | 29 | if file.comment: 30 | metadata['comment'] = file.comment 31 | 32 | file_name = file.filename.replace(os.path.sep, posixpath.sep) 33 | metadata['name'] = posixpath.join(HDD_PREFIX, file_name) 34 | 35 | if not metadata['name'].endswith(posixpath.sep): 36 | data = archive.read(file.filename) 37 | metadata['sha1'] = get_sha1(data) 38 | metadata['size'] = len(data) 39 | 40 | return metadata 41 | 42 | 43 | def read_archive(file_path): 44 | files_metadata = [] 45 | archive = lhafile.lhafile.LhaFile(file_path) 46 | files_to_scan = [] 47 | for archived_file in archive.infolist(): 48 | # Only read the folders in the archive 49 | if not os.path.sep in archived_file.filename: 50 | continue 51 | 52 | # Exclude '*.info' files 53 | if archived_file.filename.lower().endswith('.info'): 54 | continue 55 | 56 | files_to_scan.append(archived_file) 57 | 58 | for archived_file in files_to_scan: 59 | file_metadata = get_file_metadata(archive, archived_file) 60 | files_metadata.append(file_metadata) 61 | 62 | files_metadata = sorted(files_metadata, key=lambda x: x['name']) 63 | 64 | return files_metadata 65 | 66 | 67 | def get_dh0_sha1(files_metadata): 68 | json_dumps = json.dumps(files_metadata) 69 | return get_sha1(json_dumps.encode()) 70 | 71 | 72 | def get_sha1(data): 73 | return hashlib.sha1(data).hexdigest() 74 | 75 | 76 | def parse_file(file_path): 77 | if file_path.lower().endswith('.lha'): 78 | with open(file_path, 'rb') as archive_file: 79 | lha_sha1 = get_sha1(archive_file.read()) 80 | 81 | files_metadata = read_archive(file_path) 82 | 83 | file_sha1s = [] 84 | for file in files_metadata: 85 | if not file.get('sha1'): 86 | continue 87 | 88 | file_sha1s.append(file['sha1']) 89 | 90 | variant_uuid = generate_variant_uuid(file_sha1s) 91 | dh0_sha1 = get_dh0_sha1(files_metadata) 92 | 93 | filename = os.path.basename(file_path) 94 | _, *variant_parts = os.path.splitext(filename)[0].split('_') 95 | archive_metadata = { 96 | 'uuid': variant_uuid, 97 | 'filename': filename, 98 | 'variant_name': ', '.join(VARIANT_PREFIX + variant_parts), 99 | 'sha1': lha_sha1, 100 | 'files': files_metadata, 101 | 'dh0_sha1': dh0_sha1, 102 | } 103 | return archive_metadata 104 | 105 | 106 | def traverse_directory(directory): 107 | print('Processing Directory: {}'.format(directory)) 108 | lha_files_metadata = [] 109 | for item in os.listdir(directory): 110 | item_path = os.path.join(directory, item) 111 | if os.path.isdir(item_path): 112 | lha_files_metadata = lha_files_metadata + \ 113 | traverse_directory(item_path) 114 | 115 | if os.path.isfile(item_path): 116 | parse_result = parse_file(item_path) 117 | if parse_result: 118 | lha_files_metadata.append(parse_result) 119 | 120 | return lha_files_metadata 121 | 122 | 123 | 124 | 125 | if __name__ == '__main__': 126 | print('Hi Dom, here is a demo of the OpenRetro Variant UUID Generator') 127 | file = './Speedball_v2.0_0581.lha' 128 | print('Getting details for file: {}'.format(file)) 129 | file_details = parse_file(file) 130 | print("Variant UUID: {}".format(file_details['uuid'])) 131 | print("Openretro URL: http://www.openretro.org/game/{}".format(file_details['uuid'])) 132 | -------------------------------------------------------------------------------- /settings/Control_CD32.txt: -------------------------------------------------------------------------------- 1 | 1943 2 | AfterTheWar 3 | AladdinAGA 4 | Alien3 5 | AlienBreed 6 | AlienBreedTA 7 | AlienBreedTAAGA 8 | AlienBreed3D2AGA 9 | AlienStorm 10 | AllTerrainRacing 11 | Anarchy 12 | ArabianNights 13 | ArabianNights512k 14 | Assassin 15 | AssassinSpecialEdition 16 | AventuresDeMoktarFr 17 | Baal 18 | BadDudes 19 | BadDudesChipNTSC 20 | BadDudesNTSC 21 | BadDudesVsDragonNinja 22 | BadDudesVsDragonNinjaChip 23 | BansheeAGA 24 | Barbarian2Psygnosis 25 | BattleSquadron 26 | BattleSquadronNTSC 27 | Bloodwych 28 | Bloodwych&ExtendedLevels 29 | BluesBrothers 30 | BrianTheLion 31 | BrianTheLionAGA 32 | BrutalFootball 33 | BrutalFootballAGA 34 | BubbaNStix 35 | BubbleAndSqueak 36 | BubbleAndSqueakAGA 37 | BubbleBobble 38 | BubbleBobbleNTSC 39 | Cabal 40 | Cadaver&ThePayoff 41 | CapitalPunishmentAGA 42 | CapitalPunishmentAGACD 43 | CaptainPlanet 44 | CaptainPlanetA600Pack 45 | CarVup 46 | Cedric 47 | ChaosEngine 48 | ChaosEngineAGA 49 | ChaosEngine2 50 | ChaosEngine21MB 51 | ChaosEngine2AGA 52 | ChuckRock 53 | ChuckRock2 54 | Crackdown 55 | CrazyCars3 56 | Cybernoid 57 | Cybernoid2 58 | Cyberpunks 59 | Darkmere 60 | DeathMask 61 | DeathMaskAGA 62 | Deepcore 63 | DefendersOfTheEarth 64 | Deliverance 65 | Deliverance512k 66 | Dennis 67 | DennisAGA 68 | DesertStrike 69 | DGeneration 70 | DGenerationAGA 71 | DogsOfWar 72 | Doodlebug 73 | DynaBlaster 74 | DynamiteDux 75 | ElfOcean 76 | ElfOceanNTSC 77 | EscapeFTPOTRobotMonsters 78 | ESWATFiles 79 | ESWATImage 80 | FantasticDizzy 81 | FantasticDizzyAGA 82 | FearsAGA 83 | FearsAGACensored 84 | FightinSpirit 85 | FightinSpiritAGA 86 | FireAndBrimstone 87 | FireForce 88 | FirstSamurai 89 | FirstSamuraiA1200Version 90 | Flashback 91 | FlashbackCz 92 | FlashbackDe 93 | FlashbackFr 94 | FlashbackIt 95 | FlashbackLowMem 96 | FlashbackLowMemCz 97 | FlashbackLowMemDe 98 | FlashbackLowMemFr 99 | FlashbackLowMemIt 100 | GhostsNGoblins 101 | GlobalGladiators 102 | Gloom 103 | GloomAGA 104 | Gods 105 | GodsNTSC 106 | GoldenAxe 107 | GoldenAxeNTSC 108 | GreatGianaSisters 109 | Harlequin512KB 110 | Harlequin1MB 111 | HybrisNTSC 112 | Immortal 113 | JamesPond3AGA 114 | JimPower 115 | JungleStrike 116 | JungleStrikeAGA 117 | KidGloves 118 | LastNinja3 119 | LethalWeapon 120 | Lionheart 121 | LiquidKidsImage 122 | LiquidKidsFiles 123 | MagicPockets 124 | MagicPocketsNTSC 125 | MegaLoMania 126 | MegaLoManiaDe 127 | MegaLoManiaFr 128 | MegaTwins 129 | MegaTyphoon 130 | Menace 131 | MetalLaw 132 | MiamiChase 133 | MidnightResistance 134 | MythSystem3 135 | Necronom 136 | NewZealandStory 137 | NinjaRemix 138 | NinjaWarriors 139 | NorthAndSouthImage 140 | NorthAndSouthImageNTSC 141 | NorthAndSouthFiles 142 | NorthAndSouthFilesNTSC 143 | OneStepBeyond 144 | Oscar 145 | OscarAGA 146 | Paramax 147 | ParasolStars 148 | Pegasus 149 | PinballDreams 150 | PinballDreamsNTSC 151 | PinballFntsies 152 | PinballFntsiesAGA 153 | PinballFntsiesAGAChip 154 | PinballFntsiesAGANTSC 155 | PinballFntsiesAGANTSCChip 156 | PinballManiaAGA 157 | Pinkie 158 | Pirates 159 | Premiere 160 | PrinceOfPersia 161 | PrinceOfPersiaDe 162 | PrinceOfPersiaNTSC 163 | PrinceDePerseFr 164 | ProjectX 165 | ProjectXv2 166 | ProjectXSE 167 | Puggsy 168 | QuikThunderRabbit 169 | QuikThunderRabbitAGA 170 | RainbowIslands 171 | RiskyWoods 172 | RoadRash 173 | Rubicon 174 | Ruffian 175 | RuffNTumble 176 | RuffNTumble512k 177 | SecondSamurai 178 | SecondSamuraiAGA 179 | ShadowOfTheBeast 180 | ShadowOfTheBeast2 181 | ShadowOfTheBeast2NTSC 182 | ShadowOfTheBeast3 183 | ShadowOfTheBeast3NTSC 184 | Silkworm 185 | SkeletonKrewAGA 186 | Skull&Crossbones 187 | SlamTiltAGA 188 | SlamTiltAGA2MB 189 | SlamTiltDemoAGA 190 | SnowBrosImage 191 | SnowBrosFiles 192 | SoccerKid 193 | SoccerKid1MbChip 194 | SoccerKidAGA 195 | Stardust 196 | Stormlord 197 | StormlordNTSC 198 | StormlordPrerelease 199 | StreetFighter2 200 | SuperCars2 201 | SuperCauldron 202 | Superfrog 203 | SuperStardustAGA 204 | SuperStreetFighter2 205 | SuperStreetFighter2AGA 206 | SuperStreetFighter2DXAGA 207 | SuprStrtFtr2TrboAGA 208 | SuprTennisChmps 209 | SuprTennisChmps&DataDisks 210 | Switchblade2 211 | SWIV 212 | ThunderCats 213 | TitusTheFox 214 | Toki 215 | TotalCarnageAGA 216 | TreasureTrap 217 | Turrican 218 | TurricanNTSC 219 | Turrican2 220 | Turrican3 221 | TwinWorld 222 | VenusTheFlytrap 223 | VenusTheFlytrapNoIntro 224 | VideoKid 225 | VirocopAGA 226 | VoodooNightmare 227 | WatchtowerAGA 228 | WildCupSoccer 229 | WildStreets 230 | WingCommander 231 | WingCommanderDe 232 | Wolfchild 233 | WonderDog 234 | WormsDCAGA 235 | WormsDCAGA12MB 236 | WormsDCAGA8MB 237 | Xenon 238 | XTremeRacingAGA 239 | XTremeRacing&DataDisksAGA 240 | YoJoe 241 | Zool 242 | ZoolAGA 243 | ZOut 244 | -------------------------------------------------------------------------------- /utils/text_utils.py: -------------------------------------------------------------------------------- 1 | ## TEXT UTILS 2 | ## V1.0 (can we put this in a constant here??) 3 | ## 4 | ## now with numbering so that file can be shared between programs. 5 | ## please increment the number for each function added, 6 | ## and increment the sub-number for each revision of existing function 7 | 8 | 9 | import os 10 | 11 | class FontColours: 12 | HEADER = '\033[95m' 13 | OKBLUE = '\033[94m' 14 | OKGREEN = '\033[92m' 15 | WARNING = '\033[93m' 16 | FAIL = '\033[91m' 17 | ENDC = '\033[0m' 18 | BOLD = '\033[1m' 19 | UNDERLINE = '\033[4m' 20 | 21 | def disable(self): 22 | self.HEADER = '' 23 | self.OKBLUE = '' 24 | self.OKGREEN = '' 25 | self.WARNING = '' 26 | self.FAIL = '' 27 | self.ENDC = '' 28 | 29 | def left(s, amount): 30 | return s[:amount] 31 | 32 | 33 | def right(s, amount): 34 | return s[-amount:] 35 | 36 | 37 | def mid(s, point, amount): 38 | return s[point:point+amount] 39 | 40 | 41 | def mid_amos(s, point, amount): 42 | if point == 0: 43 | point = 1 44 | return s[point-1:point-1+amount] 45 | 46 | 47 | def add_space(in_bit, pos): 48 | in_bit = left(in_bit, pos - 1) + " " + right(in_bit, len(in_bit) - pos + 1) 49 | return in_bit 50 | 51 | def str2bool(v): 52 | return v.lower() in ("yes", "true", "t", "1") 53 | 54 | 55 | def make_full_cd32_name(in_name): 56 | # check the txt file 57 | file_name = "settings/UAEConfigMaker_CD32ISO_Longname_Fixes.txt" 58 | content = "" 59 | 60 | if os.path.isfile(file_name): 61 | with open(file_name) as f: 62 | content = f.readlines() 63 | content = [x.strip() for x in content] 64 | f.close() 65 | 66 | for this_line in content: 67 | if this_line.find("|") > -1: 68 | find_part = left(this_line, this_line.find("|")) 69 | replace_part = right(this_line, len(this_line) - this_line.find("|") - 1) 70 | 71 | if in_name == find_part: 72 | in_name = replace_part 73 | 74 | return in_name 75 | 76 | 77 | def make_full_name(in_name): 78 | # special "clean up" rules 79 | in_name = in_name.replace("'n'", " 'n'") 80 | in_name = in_name.replace("+", " +") 81 | in_name = in_name.replace("&", " &") 82 | 83 | old_name = in_name 84 | in_name += "___" 85 | 86 | first_length = len(in_name) 87 | 88 | # special loop 89 | # for A in range(2, first_length - 3): 90 | A = 1 91 | B = len(old_name) 92 | 93 | while A < len(in_name) and A < B: 94 | A += 1 95 | 96 | prev_char_2 = ord(mid_amos(in_name, A - 2, 1)) 97 | prev_char = ord(mid_amos(in_name, A - 1, 1)) 98 | this_char = ord(mid_amos(in_name, A, 1)) 99 | next_char = ord(mid_amos(in_name, A + 1, 1)) 100 | # never used? 101 | # next_char_2 = ord(text_utils.mid_amos(in_name, A + 2, 1)) 102 | 103 | # ===== add spaces 104 | 105 | if 65 <= this_char <= 90: 106 | # we are a capital letter 107 | 108 | # special MB rule 109 | if chr(this_char) == "M" and chr(next_char) == "B" and (48 <= this_char <= 57): 110 | pass 111 | # two underscores ... ignore 112 | elif prev_char == 95 and prev_char_2 == 95: 113 | pass 114 | elif prev_char == 92 and prev_char_2 == 92: 115 | pass 116 | # previous is a capital A, but not part of AGA 117 | elif prev_char == 65 and this_char != 71 and next_char != 65: 118 | in_name = add_space(in_name, A) 119 | A += 1 120 | B += 1 121 | # and the previous letter is not a space , and not also capital, or dash 122 | elif prev_char != 32 and prev_char != 45 and not (65 <= prev_char <= 90): 123 | in_name = add_space(in_name, A) 124 | A += 1 125 | B += 1 126 | 127 | # we are a number 128 | elif 48 <= this_char <= 57: 129 | # and previous number was not a number and not a space 130 | if not (48 <= prev_char <= 57) and prev_char != 32: 131 | in_name = add_space(in_name, A) 132 | A += 1 133 | B += 1 134 | 135 | if A > first_length: 136 | break 137 | 138 | # dirty manual fixes 139 | in_name = in_name.replace(" ", " ") 140 | in_name = in_name.replace("___", "") 141 | in_name = in_name.replace("CD 32", "CD32") 142 | in_name = in_name.replace(" CD32", " [CD32]") 143 | in_name = in_name.replace(" CDTV", " [CDTV]") 144 | in_name = in_name.replace(" AGA", " [AGA]") 145 | in_name = in_name.replace(" 512 Kb", " (512Kb)") 146 | in_name = in_name.replace(" 512 KB", " (512Kb)") 147 | in_name = in_name.replace(" 512k", " (512Kb)") 148 | in_name = in_name.replace(" 1 MB", " (1MB)") 149 | in_name = in_name.replace(" 2 MB", " (2MB)") 150 | in_name = in_name.replace(" 4 MB", " (4MB)") 151 | in_name = in_name.replace(" 8 MB", " (8MB)") 152 | in_name = in_name.replace(" 1 Disk", " (1 Disk)") 153 | in_name = in_name.replace(" 2 Disk", " (2 Disk)") 154 | in_name = in_name.replace(" 3 Disk", " (3 Disk)") 155 | in_name = in_name.replace(" 4 Disk", " (4 Disk)") 156 | in_name = in_name.replace(" Files", " (Files)") 157 | in_name = in_name.replace(" Image", " (Image)") 158 | in_name = in_name.replace(" Chip", " (Chip)") 159 | in_name = in_name.replace(" Fast", " (Fast)") 160 | in_name = in_name.replace("(Fast) Break", "Fast Break") 161 | in_name = in_name.replace("R³sselsheim", "Russelsheim") 162 | in_name = in_name.replace(" NTSC", " (NTSC)") 163 | 164 | # check the txt file 165 | file_name = "settings/WHD_Longname_Fixes.txt" 166 | content = "" 167 | 168 | if os.path.isfile(file_name) is True: 169 | with open(file_name) as f: 170 | content = f.readlines() 171 | content = [x.strip() for x in content] 172 | f.close() 173 | 174 | for this_line in content: 175 | if this_line.find("|") > -1: 176 | find_part = left(this_line, this_line.find("|")) 177 | replace_part = right(this_line, len(this_line) - this_line.find("|") - 1) 178 | 179 | if in_name == find_part: 180 | in_name = replace_part 181 | 182 | # language rules 183 | language = right(in_name, 3) 184 | 185 | if language == " De": 186 | in_name = left(in_name, len(in_name) - 3) + " (Deutsch)" 187 | elif language == " Pl": 188 | in_name = left(in_name, len(in_name) - 3) + " (Polski)" 189 | elif language == " It": 190 | in_name = left(in_name, len(in_name) - 3) + " (Italiano)" 191 | elif language == " Dk": 192 | in_name = left(in_name, len(in_name) - 3) + " (Dansk)" 193 | elif language == " Es": 194 | in_name = left(in_name, len(in_name) - 3) + " (Espanol)" 195 | elif language == " Fr": 196 | in_name = left(in_name, len(in_name) - 3) + " (Francais)" 197 | elif language == " Cz": 198 | in_name = left(in_name, len(in_name) - 3) + " (Czech)" 199 | elif language == " Se": 200 | in_name = left(in_name, len(in_name) - 3) + " (Svenska)" 201 | elif language == " Fi": 202 | in_name = left(in_name, len(in_name) - 3) + " (Finnish)" 203 | 204 | return in_name 205 | 206 | 207 | def get_whdload_page(in_name): 208 | # check the txt file 209 | file_name = "settings/UAEConfigMaker_WHD_PageList.txt" 210 | content = "" 211 | out_page = "" 212 | 213 | 214 | if os.path.isfile(file_name): 215 | with open(file_name) as f: 216 | content = f.readlines() 217 | content = [x.strip() for x in content] 218 | f.close() 219 | 220 | for this_line in content: 221 | if this_line.find("|") > -1: 222 | find_part = left(this_line, this_line.find("|")) 223 | replace_part = right(this_line, len(this_line) - this_line.find("|") - 1) 224 | 225 | if in_name.lower() == find_part.lower(): 226 | out_page = replace_part 227 | 228 | return out_page 229 | 230 | 231 | -------------------------------------------------------------------------------- /settings/Screen_Height_400.txt: -------------------------------------------------------------------------------- 1 | 1869 2 | 1869De 3 | 1869Pl 4 | 1869AGA 5 | 1869AGADe 6 | 4DSportsBoxing 7 | A10TankKiller2Disk 8 | A10TankKiller3Disk 9 | AdvantageTennis 10 | Akira 11 | AkiraCD32 12 | AlienSyndrome 13 | AlienSyndromeNTSC 14 | AlphaWaves 15 | Arachnophobia 16 | ArcherMacleansPool 17 | Archipelagos 18 | Archon 19 | ArchonNTSC 20 | Archon2 21 | Archon2NTSC 22 | ArmageddonMan 23 | AshesOfEmpire 24 | ATrain 25 | ATrain512k 26 | ATrain512kCz 27 | ATrain512kDe 28 | ATrain512kFr 29 | ATrain512kPl 30 | ATrainCz 31 | ATrainDe 32 | ATrainFr 33 | ATrainPl 34 | ATrain&ConstructionSet 35 | ATrain&ConstrSet512k 36 | AventuresDeMoktarFr 37 | B17FlyingFortress 38 | Backlash 39 | BadDudes 40 | BadDudesVsDragonNinja 41 | BadDudesVsDragonNinjaChip 42 | BadLands 43 | BalanceOfPower 44 | BalanceOfPower1990Ed 45 | BallGame 46 | BanditKings 47 | Banzai 48 | Barbarian2Palace 49 | Barbarian2Psygnosis 50 | BarbarianPalace 51 | BardsTale 52 | BardsTale2 53 | BardsTale3 54 | BargonAttack 55 | BargonAttackFr 56 | BAT 57 | BATDe 58 | BATFr 59 | BATIt 60 | BattleChess 61 | BattleChessCD32 62 | BattleChess2 63 | BillsTomatoGame 64 | BiplaneDuel 65 | BlackCauldron 66 | BlackCrypt 67 | Bloodnet 68 | BloodnetAGA 69 | BluesBrothers 70 | BombJack 71 | BuckRogersCountdownDday 72 | BugBash 73 | BuggyBoy 74 | BurningRubber 75 | BurningRubber2MB 76 | BurningRubberAGA 77 | Cabal 78 | CaliforniaGames 79 | CaliforniaGames2 80 | Campaign 81 | Campaign&DataDisk 82 | Campaign2 83 | CaptainBlood 84 | CarrierCommand 85 | CastleOfDrBrain 86 | CelticLegends 87 | Centurion 88 | ChamberSciMutantPriestess 89 | ChampionsOfKrynn 90 | ChaosStrikesBack&DeUtil 91 | ChaosStrikesBack&EnUtil 92 | ChaosStrikesBack&FrUtil 93 | Chessmaster2000 94 | ChipsChallengeEpyx 95 | ChuckieEgg 96 | ChuckieEgg2 97 | ClikClak 98 | CodeNameIceman 99 | ColonelsBequest 100 | ConanTheCimmerian 101 | ConquestsOfCamelot 102 | ConquestsOfTheLongbow 103 | ConquestsOfTheLongbowMT32 104 | Corruption 105 | CovertAction 106 | CovertActionDe 107 | CrazyCars 108 | CrimeCity 109 | Croak 110 | CurseOfEnchantia 111 | CurseOfTheAzureBonds 112 | Cybercon3 113 | DalekAttack 114 | Damocles 115 | DarkQueenOfKrynn 116 | DefenderOfTheCrown 117 | Deflektor 118 | DejaVu2LostInLasVegas 119 | DejaVuANightmareComesTrue 120 | Detroit 121 | DetroitAGA 122 | DickTracyAdventure 123 | Disc 124 | Dominium 125 | DonaldDucksPlayground 126 | Doodlebug 127 | DragonsBreath 128 | DrakkhenFiles 129 | DrakkhenFilesDe 130 | DrakkhenFilesFr 131 | DrakkhenImage 132 | DrakkhenImageDe 133 | DrakkhenImageFr 134 | DrDoomsRevenge1Disk 135 | DrDoomsRevengeNTSC2Disk 136 | DuckTales 137 | Dune2 138 | Dune2It 139 | DungeonMaster 140 | DungeonQuest 141 | Dyter07 142 | ElviraArcade 143 | Emmanuelle 144 | EmmanuelleDe 145 | EmmanuelleEs 146 | EmmanuelleFr 147 | Encounter 148 | Enlightenment 149 | Exolon 150 | Extase 151 | EyeOfTheBeholder 152 | EyeOfTheBeholderDe 153 | EyeOfTheBeholder2 154 | EyeOfTheBeholder2De 155 | F15StrikeEagle2 156 | FA18Interceptor 157 | FaeryTaleAdventure 158 | FateGatesOfDawn 159 | FateGatesOfDawnDe 160 | FateGatesOfDawnUncensored 161 | FlightOfTheAmazonQueen 162 | FlinkCD32 163 | Flipit&Magnose 164 | FormulaOneGrandPrix 165 | FormulaOneGrandPrix4Disk 166 | Freedom 167 | FreedomDe 168 | FreedomEs 169 | FreedomFr 170 | GalacticEmpire 171 | GamesSummerEdition 172 | GamesWinterEdition 173 | GarfieldBigFatHairyDeal 174 | Gauntlet2 175 | Gauntlet3 176 | Geisha 177 | GeishaDe 178 | GeishaEs 179 | GeishaFr 180 | GeminiWing 181 | Gobliiins 182 | Gobliins2 183 | Gobliins2De 184 | Gobliins2Es 185 | Gobliins2Fr 186 | Gobliins2It 187 | Goblins3 188 | GoldenAxe 189 | GoldenAxeNTSC 190 | GoldRush 191 | Gunship 192 | Gunship2000 193 | Gunship2000AGA 194 | Gunship2000CD32 195 | HardBall 196 | HardBall2 197 | HardDrivin2 198 | HardNHeavy 199 | HeroesOfTheLance 200 | HighSeasTrader 201 | HighSeasTraderAGA 202 | Hillsfar 203 | Hilt 204 | HoleInOne 205 | HoleInOne&DataDisks 206 | HomeAlone 207 | HuntForRedOctober 208 | Imperium 209 | ImpossibleMission2 210 | IndianaJonesLastCrusAdv 211 | IndianaJonesLastCrusAdvDe 212 | IndianaJonesLastCrusAdvEs 213 | IndianaJonesLastCrusAdvFr 214 | IndianaJonesLastCrusAdvIt 215 | IndianaJonesTempleOfDoom 216 | IndyJonesLastCrusAdvNTSC 217 | Indianapolis500 218 | Infestation 219 | Intact15MB 220 | Interphase 221 | InterphaseAmigaFormat 222 | IntoTheEaglesNest 223 | ItCameFromTheDesert 224 | ItCameFromTheDesertEs 225 | ItCameFromTheDesertGr 226 | ItCameFromTheDesertIt 227 | ItCameFromTheDesert2 228 | ItCameFromTheDesert2It 229 | JamesPond 230 | JimmyWhitesSnooker 231 | JohnMaddenFootball 232 | Journey 233 | JumpingJackSon 234 | JupitersMasterdrive 235 | KeefTheThief 236 | KGB 237 | KGBDe 238 | KGBFr 239 | KillingCloud 240 | KingOfChicago 241 | KingsQuest 242 | KingsQuestEnhanced 243 | KingsQuestEnhancedMT32 244 | KingsQuest2 245 | KingsQuest3 246 | KingsQuest4 247 | KingsQuest5 248 | KingsQuest5De 249 | KingsQuest5DeMT32 250 | KingsQuest5It 251 | KingsQuest5ItMT32 252 | KingsQuest5MT32 253 | KingsQuest6 254 | KingsQuest6De 255 | KingsQuest6Fr 256 | KnightsOfTheSky 257 | Kristal 258 | Kult 259 | LastDuel 260 | Leatherneck 261 | LegendMindscape 262 | LegendOfFaerghail 263 | LegendOfKyrandia 264 | LegendOfKyrandiaDe 265 | LegendOfKyrandiaFr 266 | LegendOfKyrandiaIt 267 | LeisureSuitLarry 268 | LeisureSuitLarryEnhanced 269 | LeisureSuitLarry2 270 | LeisureSuitLarry3 271 | LeisureSuitLarry5 272 | Links 273 | LittleComputerPeople 274 | Logical 275 | LombardRACRally 276 | LombardRACRally2Disk 277 | Loom 278 | LoomDe 279 | LoomEs 280 | LoomFr 281 | LoomIt 282 | LordsOfChaos 283 | LostDutchmanMine 284 | LostPatrol 285 | M1TankPlatoon 286 | Manhunter 287 | Manhunter2 288 | ManiacMansion 289 | ManiacMansionDe 290 | ManiacMansionEs 291 | ManiacMansionFr 292 | ManiacMansionIt 293 | ManoirDeMortvielleFr 294 | MortvilleManor 295 | LandsitzVonMortvilleDe 296 | MatrixMarauders 297 | MegaBall 298 | MegaBall1MB 299 | MegaBallAGA 300 | Mercenary3 301 | MetalMasters 302 | MicroProseGolf 303 | MidnightResistance 304 | Might&Magic2 305 | Might&Magic3 306 | Might&Magic3De 307 | MiniGolf 308 | MiniGolfPlus 309 | Moebius 310 | MoonShineRacers 311 | Mystical 312 | Nam19651975 313 | Neuromancer 314 | Neuronics 315 | NightHawkF117A 316 | NipponSafesInc 317 | NoExit 318 | NuclearWar 319 | Nucleus 320 | Obitus 321 | OgAGA 322 | OilImperium 323 | OmnicronConspiracy 324 | OneOnOne 325 | OneOnOneNTSC 326 | Ooze 327 | OperationNeptune 328 | OutRun 329 | OutRunNTSC 330 | OverlordRowan 331 | PacificIslands 332 | Pandora 333 | Paradroid90 334 | Paradroid901MB 335 | Patrician 336 | PinkPanther 337 | PiratesGoldCD32 338 | Plutos 339 | PoliceQuest 340 | PoliceQuestNTSC 341 | PoliceQuest2 342 | PoliceQuest3 343 | PoliceQuest3De 344 | PoliceQuest3DeMT32 345 | PoliceQuest3NTSC 346 | PoliceQuest3NTSCMT32 347 | PoolsOfDarkness 348 | PoolsOfDarknessDe 349 | PortsOfCall 350 | POW 351 | Prehistorik 352 | Prophecy1VikingChild 353 | ProPowerBoatSimulator 354 | ProTennisTour 355 | QuestForGlory 356 | QuestForGlory2 357 | QuestForTimeBirdFiles 358 | QuestForTimeBirdImage 359 | RailroadTycoon 360 | RailroadTycoonDe 361 | RailroadTycoonFr 362 | RainbowIslands 363 | Rambo3 364 | Rambo3NTSC 365 | Realms 366 | RealmsOfArkania 367 | RedStormRising 368 | Resolution101 369 | Reunion 370 | RingsOfMedusa 371 | Risk 372 | RoadBlasters 373 | RoadRash 374 | RobinHoodLegendQuest 375 | RocketRanger 376 | RocketRangerCensored 377 | RocketRangerNTSC 378 | Rogue 379 | RunningMan 380 | SaintDragon 381 | SecretOfMonkeyIsland 382 | SecretOfMonkeyIslandDe 383 | SecretOfMonkeyIslandEs 384 | SecretOfMonkeyIslandFr 385 | SecretOfMonkeyIslandIt 386 | SeymourGoesToHollywood 387 | Shadowgate 388 | ShaqFu 389 | ShaqFuAGA 390 | ShermanM4 391 | ShufflepuckCafe 392 | ShufflepuckCafeFr 393 | Shuttle 394 | SilentService 395 | SilentService2 396 | SilentService2NTSC 397 | SimCity 398 | SimCity12 399 | SimCity512KB 400 | SimCityNTSC 401 | SimonTheSorcerer 402 | SimonTheSorcererAGA 403 | Simulcra 404 | SirFred 405 | SpaceHarrier2 406 | SpaceQuest 407 | SpaceQuestEnhanced 408 | SpaceQuestEnhanced512k 409 | SpaceQuestEnhancedMT32 410 | SpaceQuestNTSC 411 | SpaceQuest2 412 | SpaceQuest3 413 | SpaceQuest3De 414 | SpaceQuest3DeMT32 415 | SpaceQuest4 416 | SpaceQuest4De 417 | SpaceQuest4DeMT32 418 | SpaceQuest4NTSC 419 | SpaceQuest4NTSCMT32 420 | SpaceRacer 421 | SpaceRacerFr 422 | StarCrusader 423 | StarCrusaderAGA 424 | SuperOffRoad 425 | SuperOffRoadNTSC 426 | SuperSkweek1MB 427 | SuperSkweek512KB 428 | SurfNinjasAGA 429 | Targhan 430 | TarghanFast 431 | TarghanFastFr 432 | TarghanFr 433 | TarghanNTSC 434 | TassTimesInTonetown 435 | TeamYankee 436 | Technocop 437 | Teller 438 | TestDrive 439 | TestDrive2 440 | TestDrive2&DataDisks 441 | TheirFinestHour 442 | TheirFinestHour&Missions 443 | ThunderHawkAH73M 444 | ThunderHawkAH73MDe 445 | ThunderHawkAH73MFr 446 | ThunderStrike 447 | Time 448 | TimeRunnersSeries 449 | TintinOnTheMoonFiles 450 | TintinOnTheMoonImage 451 | Tornado 452 | TowerOfBabel 453 | TreasureIslandDizzy 454 | TrexWarrior 455 | TVSportsBasketball 456 | TwinWorld 457 | Ultima3 458 | Ultima4 459 | Ultima4NTSC 460 | Uninvited 461 | Utopia 462 | Utopia&NewWorlds 463 | Vigilante 464 | Virus 465 | Viz 466 | Warhead 467 | WarlocksQuest 468 | Warlords 469 | Waterloo 470 | WCLeaderBoard 471 | WCLeaderBoard&DataDisks 472 | WeenTheProphecy 473 | WeenTheProphecyDe 474 | WeenTheProphecyEs 475 | WeenTheProphecyFr 476 | WeenTheProphecyIt 477 | WeirdDreams 478 | Whizz 479 | WhoFramedRogerRabbit 480 | WhoFramedRogerRabbitPR 481 | Windwalker 482 | WingCommander 483 | WingCommanderDe 484 | WingCommanderCD32 485 | Wings 486 | WingsOfFury 487 | WingsOfFuryChip 488 | WingsOfFuryFast 489 | WinterGames 490 | WinterOlympics 491 | Wizardry6BaneCosmicForg 492 | Wizardry6BaneCosmicForgDe 493 | Wolfpack 494 | Wonderland 495 | WoodysWorld 496 | WorldCircuit 497 | WorldGames 498 | WorldTourGolf 499 | Wreckers 500 | Xenomorph 501 | XIt 502 | ZakMcKracken 503 | ZakMcKrackenDe 504 | ZakMcKrackenFr 505 | ZakMcKrackenIt 506 | ZanyGolf 507 | Zeewolf 508 | Zeewolf2 509 | Zombi 510 | ZombiDe 511 | ZombiFr 512 | ZombieApocalypse 513 | Zoom 514 | -------------------------------------------------------------------------------- /settings/Control_Port0_Mouse.txt: -------------------------------------------------------------------------------- 1 | 1869 2 | 1869De 3 | 1869Pl 4 | 1869AGA 5 | 1869AGADe 6 | 3DPool 7 | 3DWorldTennis 8 | A10TankKiller2Disk 9 | A10TankKiller3Disk 10 | AbandonedPlaces 11 | AbandonedPlacesDe 12 | AbandonedPlacesEs 13 | AbandonedPlaces2 14 | AdventuresOfRobinHood 15 | AdventuresOfWillyBeamish 16 | AlienBreed3D2AGA 17 | AlienBreed3DAGA 18 | AlienBreed3DCD32 19 | AlienBreed3DNoMusicAGA 20 | AllNewWorldOfLemmingsAGA 21 | Ambermoon 22 | AmbermoonDe 23 | Amberstar 24 | AmberstarDe 25 | AmberstarDeFast 26 | AmberstarFast 27 | ArcadePoolAGA 28 | ArcadePoolCD32 29 | ArcadeSnookerAGA 30 | ArcherMacleansPool 31 | Arkanoid 32 | ArkanoidNTSC 33 | ArkanoidRevengeOfDoh 34 | ArmageddonMan 35 | ArmourGeddon 36 | ArmourGeddonNTSC 37 | ArmourGeddon2 38 | AshesOfEmpire 39 | ATrain 40 | ATrain512k 41 | ATrain512kCz 42 | ATrain512kDe 43 | ATrain512kFr 44 | ATrain512kPl 45 | ATrainCz 46 | ATrainDe 47 | ATrainFr 48 | ATrainPl 49 | ATrain&ConstructionSet 50 | ATrain&ConstrSet512k 51 | B17FlyingFortress 52 | BalanceOfPower 53 | BalanceOfPower1990Ed 54 | BanditKings 55 | BarbarianPsygnosis 56 | BardsTale 57 | BardsTale2 58 | BardsTale3 59 | BargonAttack 60 | BAT 61 | BATDe 62 | BATFr 63 | BATIt 64 | BAT2 65 | BAT2De 66 | BAT2Fr 67 | BattleChess 68 | BattleChess2 69 | BattleChessCD32 70 | BattleIsle 71 | BattleIsle&DataDisks 72 | BeneathAStlSky 73 | BeneathAStlSkyCD32 74 | BeneathAStlSkyCD32NoVoice 75 | BillsTomatoGame 76 | BlackCauldron 77 | BlackCrypt 78 | BlackSectFr 79 | Bloodnet 80 | BloodnetAGA 81 | Bloodwych 82 | Bloodwych&ExtendedLevels 83 | BuckRogersCountdownDday 84 | BurningRubber 85 | BurningRubber2MB 86 | Burntime 87 | BurntimeAGA 88 | Caesar 89 | Campaign 90 | Campaign2 91 | Campaign&DataDisk 92 | CannonFodder 93 | CannonFodderCD32 94 | CannonFodderDe 95 | CannonFodderFr 96 | CannonFodderIt 97 | CannonFodder2 98 | CannonFodder2De 99 | CannonFodder2Fr 100 | Capone 101 | CaptainBlood 102 | Captive 103 | CarrierCommand 104 | CastleOfDrBrain 105 | CelticLegends 106 | Centurion 107 | ChamberSciMutantPriestess 108 | ChampionsOfKrynn 109 | ChaosStrikesBack&DeUtil 110 | ChaosStrikesBack&EnUtil 111 | ChaosStrikesBack&FrUtil 112 | Chessmaster2000 113 | ChronoQuest 114 | ChronoQuestDe 115 | ChronoQuest2 116 | Civilization 117 | CivilizationAGA 118 | CivilizationAGACD 119 | CivilizationAGADe 120 | CivilizationCD 121 | CivilizationDe 122 | Clockwiser 123 | ClockwiserAGA 124 | ClockwiserCD32 125 | Clue 126 | Coala 127 | CoalaAGA 128 | CodeNameIceman 129 | ColonelsBequest 130 | Colonization 131 | ColonizationAGA 132 | ConanTheCimmerian 133 | ConquestsOfCamelot 134 | ConquestsOfTheLongbow 135 | ConquestsOfTheLongbowMT32 136 | Corruption 137 | CrimeCity 138 | CroisierePourUnCadavreFr 139 | CruiseForACorpse 140 | CruiseForACorpseDe 141 | CruiseForACorpseEs 142 | CruiseForACorpseIt 143 | CrystalHammerV2 144 | CrystalsOfArborea 145 | CrystalsOfArboreaDe 146 | CrystalsOfArboreaDeFast 147 | CrystalsOfArboreaFast 148 | CrystalsOfArboreaFr 149 | CrystalsOfArboreaFrFast 150 | CurseOfEnchantia 151 | CurseOfTheAzureBonds 152 | Damocles 153 | DarkQueenOfKrynn 154 | DarkSeed 155 | DarkSeedCD32 156 | DarkSeedDe 157 | DarkSeedEs 158 | DarkSeedFr 159 | DeconstructionAGA 160 | DefenderOfTheCrown 161 | DejaVu2LostInLasVegas 162 | DejaVuANightmareComesTrue 163 | DeluxeGalaga 164 | DeluxeGalagaAGA 165 | Detroit 166 | DetroitAGA 167 | DieHard2 168 | DiggersAGA 169 | Dominium 170 | DonaldDucksPlayground 171 | DragonsBreath 172 | Dragonstone 173 | DragonstoneCD32 174 | DragonTiles 175 | DragonTilesAGA 176 | DrakkhenFiles 177 | DrakkhenImage 178 | DrakkhenFilesDe 179 | DrakkhenImageDe 180 | DrakkhenFilesFr 181 | DrakkhenImageFr 182 | DrakkhenFilesNTSC 183 | DrakkhenImageNTSC 184 | DreamWeb 185 | DreamWebAGA 186 | DreamWebAGADe 187 | DreamWebDe 188 | Dune 189 | DuneDe 190 | DuneEs 191 | DuneFr 192 | DuneGr 193 | DuneIt 194 | Dune2 195 | Dune2It 196 | DungeonMaster 197 | DungeonMaster2 198 | DungeonQuest 199 | Elvira 200 | ElviraDe 201 | ElviraFr 202 | Elvira2 203 | Elvira2De 204 | Elvira2Es 205 | Elvira2Fr 206 | Elvira2It 207 | Embryo 208 | Epic 209 | Epic&MissionDisk 210 | EuropeanChampionsOcean 211 | ExploraFr 212 | Explora2Fr 213 | Explora3Fr 214 | EyeOfTheBeholder 215 | EyeOfTheBeholderDe 216 | EyeOfTheBeholder2 217 | EyeOfTheBeholder2De 218 | F15StrikeEagle2 219 | F29Retaliator 220 | FA18Interceptor 221 | Falcon 222 | FateGatesOfDawn 223 | FateGatesOfDawnDe 224 | FateGatesOfDawnUncensored 225 | FearsAGA 226 | FearsCD32 227 | FlightOfTheAmazonQueen 228 | FootballGloryAGA 229 | FormulaOneGrandPrix 230 | FormulaOneGrandPrix4Disk 231 | FranticFreddie 232 | Freedom 233 | FreedomDe 234 | FreedomEs 235 | FreedomFr 236 | Frontier 237 | FrontierCD32 238 | FrontierCz 239 | FrontierDe 240 | FrontierFr 241 | FutureWars 242 | FutureWarsDe 243 | FutureWarsEs 244 | FutureWarsIt 245 | FutureWarsNTSC 246 | GalacticEmpire 247 | GhostsNGoblins 248 | Gobliiins 249 | Gobliins2 250 | Gobliins2De 251 | Gobliins2Es 252 | Gobliins2Fr 253 | Gobliins2It 254 | Goblins3 255 | GoldRush 256 | Gunship 257 | Gunship2000 258 | Gunship2000AGA 259 | Gunship2000CD32 260 | HardBall 261 | HardBall2 262 | HeartOfChina 263 | HeartOfChinaDe 264 | HeroesOfTheLance 265 | HeroQuest 266 | HeroQuest&ReturnWitchLord 267 | HeroQuest2 268 | HighSeasTrader 269 | HighSeasTraderAGA 270 | Hillsfar 271 | Hilt 272 | Hilt2 273 | HiredGuns1MB 274 | HiredGuns512KB 275 | Historyline 276 | HoleInOne 277 | HoleInOne&DataDisks 278 | Hook 279 | HostageNTSC 280 | Hostages 281 | Humans3 282 | Humans3AGA 283 | HuntForRedOctober 284 | Impact 285 | Imperium 286 | IndianaJonesAtlantisAdv 287 | IndianaJonesAtlantisAdvDe 288 | IndianaJonesAtlantisAdvEs 289 | IndianaJonesAtlantisAdvFr 290 | IndianaJonesAtlantisAdvIt 291 | IndianaJonesLastCrusAdv 292 | IndianaJonesLastCrusAdvDe 293 | IndianaJonesLastCrusAdvEs 294 | IndianaJonesLastCrusAdvFr 295 | IndianaJonesLastCrusAdvIt 296 | IndyJonesLastCrusAdvNTSC 297 | Indianapolis500 298 | InnocentUntilCaught 299 | InnocentUntilCaughtDe 300 | InnocentUntilCaughtFr 301 | InnocentUntilCaughtIt 302 | Interphase 303 | InterphaseAmigaFormat 304 | Ishar 305 | IsharAGA 306 | IsharEs 307 | Ishar2 308 | Ishar2AGA 309 | Ishar2Es 310 | Ishar3 311 | Ishar3AGA 312 | Ishar3De 313 | Ishar3Fr 314 | JamesBondStlthAffairNTSC 315 | Jetstrike 316 | JewelsOfDarkness 317 | JimmyWhitesSnooker 318 | JohnMaddenFootball 319 | Journey 320 | K240 321 | KeefTheThief 322 | KGB 323 | KGBDe 324 | KGBFr 325 | KillingCloud 326 | KingOfChicago 327 | KingsQuest 328 | KingsQuestEnhanced 329 | KingsQuestEnhancedMT32 330 | KingsQuest2 331 | KingsQuest3 332 | KingsQuest4 333 | KingsQuest5 334 | KingsQuest5De 335 | KingsQuest5DeMT32 336 | KingsQuest5It 337 | KingsQuest5ItMT32 338 | KingsQuest5MT32 339 | KingsQuest6 340 | KingsQuest6De 341 | KingsQuest6Fr 342 | Knightmare 343 | KnightsOfTheSky 344 | Kult 345 | Lancelot 346 | LeadingLapMPV 347 | LeadingLapMPVAGA 348 | LegendMindscape 349 | LegendOfFaerghail 350 | LegendOfKyrandia 351 | LegendOfKyrandiaDe 352 | LegendOfKyrandiaFr 353 | LegendOfKyrandiaIt 354 | LegendOfTheSword 355 | LegendsOfValour 356 | LeisureSuitLarry 357 | LeisureSuitLarryEnhanced 358 | LeisureSuitLarry2 359 | LeisureSuitLarry3 360 | LeisureSuitLarry5 361 | LemmingsAltFiles 362 | LemmingsAltImage 363 | LemmingsCDTV 364 | LemmingsDemo 365 | LemmingsFiles 366 | LemmingsFilesNTSC 367 | LemmingsHoliday1993 368 | LemmingsHoliday1994 369 | LemmingsHolidayDemo 370 | LemmingsImage 371 | LemmingsImageNTSC 372 | LemmingsNewYear9192 373 | LemmingsXmasDemo1991 374 | LemmingsXmasDemo1992 375 | Lemmings21MB 376 | Lemmings2512KB 377 | Lemmings2Demo 378 | Lemmings2NTSC1MB 379 | Lemmings2NTSC512KB 380 | Links 381 | Locomotion 382 | Logical 383 | Loom 384 | LoomDe 385 | LoomEs 386 | LoomFr 387 | LoomIt 388 | LordsOfChaos 389 | LordsOfTheRealm 390 | LordsOfTheRealmAGA 391 | LordsOfTheRealmAGAFast 392 | LordsOfTheRealmAGADe 393 | LordsOfTheRealmAGADeFast 394 | LordsOfTheRealmAGAFr 395 | LordsOfTheRealmAGAFrFast 396 | LordsOfTheRisingSun 397 | LostDutchmanMine 398 | LostPatrol 399 | LostPatrolNTSC 400 | LureOfTheTemptress 401 | LureOfTheTemptressDe 402 | LureOfTheTemptressFr 403 | LureOfTheTemptressIt 404 | M1TankPlatoon 405 | MadTV 406 | MadTVDe 407 | MadTVEs 408 | MadTVFr 409 | Manhunter 410 | Manhunter2 411 | ManiacMansion 412 | ManiacMansionDe 413 | ManiacMansionEs 414 | ManiacMansionFr 415 | ManiacMansionIt 416 | MarbleMadness 417 | MatrixMarauders 418 | MaupitiIsland 419 | MaupitiIslandDe 420 | MaupitiIslandEs 421 | MaupitiIslandFr 422 | MeanArenas 423 | MeanStreets 424 | MeanStreetsDe 425 | MeanStreetsFr 426 | MegaBall 427 | MegaBall1MB 428 | MegaBallAGA 429 | MegaLoMania 430 | MegaLoManiaDe 431 | MegaLoManiaFr 432 | Mercenary3 433 | MicroProseGolf 434 | Midwinter 435 | MidwinterDe 436 | MidwinterFr 437 | Midwinter2 438 | Midwinter2De 439 | Midwinter2Fr 440 | Might&Magic2 441 | Might&Magic3 442 | Might&Magic3De 443 | Millennium22 444 | MiniGolf 445 | MiniGolfPlus 446 | Moebius 447 | MonkeyIsland2 448 | MonkeyIsland2De 449 | MonkeyIsland2Es 450 | MonkeyIsland2Fr 451 | MonkeyIsland2It 452 | Murder 453 | Nam19651975 454 | NarcoPolice 455 | Neuromancer 456 | Neuronics 457 | NeverMind 458 | NightHawkF117A 459 | NipponSafesInc 460 | NoSecondPrize 461 | NuclearWar 462 | NuclearWarNTSC 463 | Obitus 464 | Obliterator 465 | OhNoMoreLemmings 466 | OhNoMoreLemmingsNTSC 467 | OilImperium 468 | Ooze 469 | OperationJupiterFr 470 | OperationNeptune 471 | OperationStealth 472 | OperationStealthDe 473 | OperationStealthEs 474 | OperationStealthFr 475 | OperationStealthIt 476 | OperationThunderbolt 477 | OperationWolf 478 | OverlordRowan 479 | PacificIslands 480 | Patrician 481 | Perihelion 482 | PersonalNightmare 483 | PGATourGolf 484 | PinballFntsies 485 | PinballFntsiesAGA 486 | PoliceQuest 487 | PoliceQuestNTSC 488 | PoliceQuest2 489 | PoliceQuest3 490 | PoliceQuest3De 491 | PoliceQuest3DeMT32 492 | PoliceQuest3NTSC 493 | PoliceQuest3NTSCMT32 494 | PoolsOfDarkness 495 | PoolsOfDarknessDe 496 | PoolOfRadiance 497 | Populous 498 | Populous&DataDisks 499 | Populous2 500 | Populous2&ChallengeGames 501 | PortsOfCall 502 | POW 503 | Powermonger 504 | PowermongerWW1Edition 505 | PremierManager 506 | QuestForGlory 507 | QuestForGlory2 508 | QuestForTimeBirdFiles 509 | QuestForTimeBirdImage 510 | RailroadTycoon 511 | RailroadTycoonDe 512 | RailroadTycoonFr 513 | Rampart 514 | Realms 515 | RealmsOfArkania 516 | RedBaron 517 | RedStormRising 518 | Resolution101 519 | Reunion 520 | RingsOfMedusa 521 | RiseOfTheDragon 522 | RiseOfTheDragonDe 523 | Risk 524 | RoboCop3 525 | SabreTeam 526 | SabreTeamAGA 527 | SecretOfMonkeyIsland 528 | SecretOfMonkeyIslandDe 529 | SecretOfMonkeyIslandEs 530 | SecretOfMonkeyIslandFr 531 | SecretOfMonkeyIslandIt 532 | Settlers 533 | SettlersFr 534 | Shadowgate 535 | Shadowlands 536 | Shadoworlds 537 | ShermanM4 538 | ShufflepuckCafe 539 | ShufflepuckCafeFr 540 | Shuttle 541 | SilentService 542 | SilentService2 543 | SilentService2NTSC 544 | SimCity 545 | SimCity12 546 | SimCity512KB 547 | SimCityNTSC 548 | SimonTheSorcerer 549 | SimonTheSorcererAGA 550 | SpaceCrusade 551 | SpaceCrusade&VoyageBeyond 552 | SpaceHulk 553 | SpaceQuest 554 | SpaceQuestEnhanced 555 | SpaceQuestEnhanced512k 556 | SpaceQuestEnhancedMT32 557 | SpaceQuestNTSC 558 | SpaceQuest2 559 | SpaceQuest3 560 | SpaceQuest3De 561 | SpaceQuest3DeMT32 562 | SpaceQuest4 563 | SpaceQuest4De 564 | SpaceQuest4DeMT32 565 | SpaceQuest4NTSC 566 | SpaceQuest4NTSCMT32 567 | StarCrusader 568 | StarCrusaderAGA 569 | StarTrek25thAnnivAGA 570 | StarTrek25thAnnivAGADe 571 | StarTrek25thAnnivAGAFr 572 | Supremacy 573 | Syndicate 574 | SyndicateDe 575 | SyndicateAmericanRevolt 576 | TassTimesInTonetown 577 | TeamYankee 578 | Terminator2Arcade 579 | TheirFinestHour 580 | TheirFinestHour&Missions 581 | ThemePark 582 | ThemeParkAGA 583 | ThunderHawkAH73M 584 | ThunderStrike 585 | Time 586 | TimeRunnersSeries 587 | TinyTroops 588 | Tornado 589 | TowerOfBabel 590 | TowerOfSouls 591 | TowerOfSoulsAGA 592 | Transarctica 593 | TransarcticaAGA 594 | TrexWarrior 595 | TyphoonThompson 596 | UFOEnemyUnknown 597 | UFOEnemyUnknownAGA 598 | UFOEnemyUnknownCD32 599 | Ugh 600 | Ultima3 601 | Ultima4 602 | Ultima4NTSC 603 | Ultima5 604 | Ultima6 605 | Uninvited 606 | Universe 607 | Utopia 608 | Utopia&NewWorlds 609 | Virus 610 | VoyageursDuTempsFr 611 | Warlords 612 | Waterloo 613 | Waxworks 614 | WaxworksDe 615 | WaxworksFr 616 | WCLeaderBoard 617 | WCLeaderBoard&DataDisks 618 | WeenTheProphecy 619 | WeenTheProphecyDe 620 | WeenTheProphecyEs 621 | WeenTheProphecyFr 622 | WeenTheProphecyIt 623 | Wings 624 | Wolfpack 625 | Wonderland 626 | WorldCircuit 627 | WorldsOfLegend 628 | Worms 629 | Worms1MB 630 | Worms2MB 631 | WormsDCAGA 632 | WormsDCAGA12MB 633 | WormsDCAGA8MB 634 | Wreckers 635 | ZakMcKracken 636 | Zeewolf 637 | Zeewolf2 638 | Zoom 639 | -------------------------------------------------------------------------------- /slave_lha/parse_lha/lhafile/lhafile/lhafile.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | # Copyright (c) 2010 Hidekazu Ohnishi. 3 | # All rights reserved. 4 | # 5 | # Redistribution and use in source and binary forms, with or without 6 | # modification, are permitted provided that the following conditions are 7 | # met: 8 | # * Redistributions of source code must retain the above copyright 9 | # notice, this list of conditions and the following disclaimer. 10 | # * Redistributions in binary form must reproduce the above 11 | # copyright notice, this list of conditions and the following 12 | # disclaimer in the documentation and/or other materials provided 13 | # with the distribution. 14 | # 15 | # * Neither the name of the author nor the names of its contributors 16 | # may be used to endorse or promote products derived from this 17 | # software without specific prior written permission. 18 | # 19 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 | # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 | # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 | # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 | # HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 | # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | """Lhafile, extension extract lzh file. 31 | 32 | Its interface is likey zipfile module is include in regular python environment. 33 | """ 34 | from __future__ import unicode_literals 35 | try: 36 | from cStringIO import BytesOrStringIO 37 | except ImportError: 38 | from io import BytesIO as BytesOrStringIO 39 | import datetime 40 | import os 41 | import os.path 42 | import struct 43 | import sys 44 | import lzhlib 45 | 46 | 47 | crc16 = lzhlib.crc16 48 | 49 | 50 | if sys.version_info[0] == 3: 51 | string_types = (str,) 52 | 53 | def ord(v): 54 | return v 55 | 56 | else: 57 | string_types = (basestring,) 58 | 59 | 60 | def unpack(format, data): 61 | return struct.unpack(str(format), data) 62 | 63 | 64 | def is_lhafile(filename): 65 | try: 66 | LhaFile(filename) 67 | except: 68 | return False 69 | return True 70 | 71 | 72 | class BadLhafile(Exception): 73 | pass 74 | 75 | 76 | class LhaInfo(object): 77 | __slots__ = ( 78 | 'orig_filename', 79 | 'filename', 80 | 'directory', 81 | 'date_time', 82 | 'compress_type', 83 | 'comment', 84 | 'extra', 85 | 'create_system', 86 | 'create_version', 87 | 'extract_version', 88 | 'reserved', 89 | 'flag_bits', 90 | 'volume', 91 | 'internal_attr', 92 | 'external_attr', 93 | 'header_offset', 94 | 'file_offset', 95 | 'CRC', 96 | 'compress_size', 97 | 'file_size', 98 | ) 99 | 100 | def __init__(self): 101 | self.orig_filename = None 102 | self.filename = None 103 | self.directory = None 104 | self.date_time = None 105 | self.compress_type = None 106 | self.comment = None 107 | self.extra = None 108 | self.create_system = None 109 | self.create_version = None 110 | self.extract_version = None 111 | self.reserved = None 112 | self.flag_bits = None 113 | self.volume = None 114 | self.internal_attr = None 115 | self.external_attr = None 116 | self.header_offset = None 117 | self.file_offset = None 118 | self.CRC = None 119 | self.compress_size = None 120 | self.file_size = None 121 | 122 | def __str__(self): 123 | return '%s %s %08X %d %04X' % (self.filename, self.file_size, 124 | self.file_offset, self.compress_size, self.CRC) 125 | 126 | def __getstate__(self): 127 | return (self.orig_filename, self.filename, self.directory, self.date_time, 128 | self.compress_type, self.comment, self.extra, self.create_system, 129 | self.create_version, self.extract_version, self.reserved, 130 | self.flag_bits, self.volume, self.internal_attr, self.external_attr, 131 | self.header_offset, self.file_offset, self.CRC, self.compress_size, 132 | self.file_size) 133 | 134 | def __setstate__(self, state): 135 | (self.orig_filename, self.filename, self.directory, self.date_time, 136 | self.compress_type, self.comment, self.extra, self.create_system, 137 | self.create_version, self.extract_version, self.reserved, 138 | self.flag_bits, self.volume, self.internal_attr, self.external_attr, 139 | self.header_offset, self.file_offset, self.CRC, self.compress_size, 140 | self.file_size) = state 141 | 142 | 143 | class LhaFile(object): 144 | """ 145 | """ 146 | 147 | SUPPORTED_COMPRESS_TYPE = (b'-lhd-', b'-lh0-', b'-lh5-', b'-lh6-', b'-lh7-') 148 | 149 | def __init__(self, file, mode="r", compression=None, callback=None, args=None): 150 | """ Open the LZH file """ 151 | self.filelist = [] 152 | self.NameToInfo = {} 153 | self.mode = key = mode.replace('b', '')[0] 154 | 155 | if isinstance(file, string_types): 156 | self._fileParsed = 0 157 | self.filename = file 158 | modeDict = {'r' : 'rb'} 159 | self.fp = open(file, modeDict[mode]) 160 | else: 161 | self._fileParsed = 1 162 | self.fp = file 163 | self.filename = getattr(file, 'name', None) 164 | 165 | # Get file size 166 | initial_pos = self.fp.tell() 167 | self.fp.seek(0, 2) 168 | self.filesize = self.fp.tell() 169 | self.fp.seek(initial_pos, 0) 170 | 171 | if key == 'r': 172 | self._GetContents(callback=callback,args=args) 173 | else: 174 | if not self._fileParsed: 175 | self.fp.close() 176 | self.fp = None 177 | raise RuntimeError("Mode must be 'r'") 178 | 179 | def _GetContents(self, callback=None, args=None): 180 | try: 181 | info = self._RealGetContent() 182 | while info: 183 | if not info.compress_type in Lhafile.SUPPORTED_COMPRESS_TYPE: 184 | raise RuntimeError("Unsupported file is contained %s" % (info.compress_type,)) 185 | if callback: 186 | callback(args, self.fp.tell(), self.filesize, info) 187 | self.filelist.append(info) 188 | self.NameToInfo[info.filename] = info 189 | info = self._RealGetContent() 190 | except BadLhafile as e: 191 | raise 192 | if not self._fileParsed: 193 | self.fp.close() 194 | self.fp = None 195 | 196 | def _RealGetContent(self): 197 | fp = self.fp 198 | filesize = self.filesize 199 | initial_pos = fp.tell() 200 | is_read = lambda x: fp.tell() + x < filesize 201 | if fp.tell() == filesize - 1: 202 | return None 203 | if not is_read(26): 204 | raise BadLhafile("Header is broken") 205 | # Check OS level 206 | os_level = ord(fp.read(21)[20]) 207 | fp.seek(-21, 1) 208 | if not os_level in (0, 1, 2): 209 | raise BadLhafile("this file level is out of support range %d" % os_level) 210 | if os_level in (0, 1): 211 | header_size, checksum, signature, skip_size, \ 212 | file_size, modify_time, reserved , os_level, \ 213 | filename_length = unpack('> 1) + 1980 276 | month = ((ord(modify_time[3]) << 8 | ord(modify_time[2])) >> 5) & 0x0F 277 | day = ord(modify_time[2]) & 0x1F 278 | hour = ord(modify_time[1]) >> 3 279 | minute = ((ord(modify_time[1]) << 8 | ord(modify_time[0])) >> 5) & 0x2F 280 | second = (ord(modify_time[0]) & 0x1F) * 2 281 | 282 | #print(os_level, year, month, day, hour, minute, second) 283 | try: 284 | date_time = datetime.datetime(year, month, day, hour, minute, second) 285 | except Exception: 286 | date_time = datetime.datetime(1970, 1, 1) 287 | create_time = date_time 288 | elif os_level in (2,): 289 | dummy_date = datetime.datetime(1970,1,1) 290 | date_time = dummy_date.fromtimestamp(modify_time) 291 | create_time = date_time 292 | info = LhaInfo() 293 | # FIXME: hardcoding ISO-8859-1 is not very nice 294 | filename = filename.decode("ISO-8859-1") 295 | if directory is None: 296 | # for lhaplus archive 297 | #sjisname = unicode(filename, 'cp932') 298 | #if '\\' in sjisname: 299 | # sjispath = [s.encode('cp932') for s in sjisname.split(u'\\')] 300 | # filename = os.sep.join(sjispath) 301 | # directory = os.sep.join(sjispath[:-1]) 302 | pass 303 | else: 304 | #print(repr(directory)) 305 | # FIXME: hardcoding ISO-8859-1 is not very nice 306 | directory = directory.decode("ISO-8859-1") 307 | directory = os.sep.join(directory.split('\xff')) 308 | filename = os.path.join(directory, filename) 309 | info.directory = directory 310 | info.filename = filename 311 | info.compress_size = compress_size 312 | info.file_size = file_size 313 | info.CRC = crc 314 | info.header_offset = initial_pos 315 | info.file_offset = file_offset 316 | info.external_attr = None 317 | info.internal_attr = None 318 | info.reserved = 0 319 | info.comment = comment 320 | info.compress_type = signature 321 | info.date_time = date_time 322 | 323 | if "\x00" in info.filename: 324 | info.filename, info.comment = info.filename.split("\x00") 325 | 326 | return info 327 | 328 | def lhaname(self): 329 | return self.filename 330 | 331 | def namelist(self): 332 | if self.filelist: 333 | return [d.filename for d in self.filelist \ 334 | if d.compress_type in Lhafile.SUPPORTED_COMPRESS_TYPE] 335 | return None 336 | 337 | def infolist(self): 338 | return self.filelist 339 | 340 | def read(self, name): 341 | """Return file bytes (as a string) for 'name'. """ 342 | if not self.fp: 343 | raise RuntimeError("Attempt to read LZH archive that was already closed") 344 | info = self.NameToInfo[name] 345 | if info.compress_type in Lhafile.SUPPORTED_COMPRESS_TYPE: 346 | self.fp.seek(info.file_offset) 347 | fin = BytesOrStringIO(self.fp.read(info.compress_size)) 348 | fout = BytesOrStringIO() 349 | try: 350 | session = lzhlib.LZHDecodeSession(fin, fout, info) 351 | while not session.do_next(): 352 | pass 353 | outsize = session.output_pos 354 | crc = session.crc16 355 | except Exception as e: 356 | raise e 357 | if outsize != info.file_size: 358 | raise BadLhafile("%s output_size is not matched %d/%d %s" % \ 359 | (name, outsize, info.file_size, info.compress_type)) 360 | if crc != info.CRC: 361 | raise BadLhafile("crc is not matched") 362 | 363 | fout.seek(0) 364 | bytes = fout.read() 365 | elif info.commpress_type == '-lhd-': 366 | raise RuntimeError("name is directory") 367 | else: 368 | raise RuntimeError("Unsupport format") 369 | return bytes 370 | 371 | Lhafile = LhaFile 372 | -------------------------------------------------------------------------------- /whdload/whdload_slave.py: -------------------------------------------------------------------------------- 1 | import os 2 | import struct 3 | import binascii 4 | import datetime 5 | import re 6 | from collections import OrderedDict 7 | import urllib.request 8 | 9 | 10 | class Kickstart(object): 11 | def __init__(self, name, crc): 12 | self.name = name 13 | self.crc = crc 14 | 15 | def __str__(self): 16 | return "{}: {}".format(self.name, self.crc) 17 | 18 | 19 | class WHDLoadSlaveBase(object): 20 | _header_offset = 0x020 # 32 bytes 21 | _flags_dict = { 22 | 1: 'Disk', 23 | 2: 'NoError', 24 | 4: 'EmulTrap', 25 | 8: 'NoDivZero', 26 | 16: 'Req68020', 27 | 32: 'ReqAGA', 28 | 64: 'NoKbd', 29 | 128: 'EmulLineA', 30 | 256: 'EmulTrapV', 31 | 512: 'EmEmulChkul', 32 | 1024: 'EmulPriv', 33 | 2048: 'EmulLineF', 34 | 4096: 'ClearMem', 35 | 8192: 'Examine', 36 | 16384: 'EmulDivZero', 37 | 32768: 'EmulIllegal' 38 | } 39 | 40 | property_friendly_names = OrderedDict([ 41 | ("path", "Path"), 42 | ("file_name", "File Name"), 43 | ("name", "Name"), 44 | ("copy", "Copyright"), 45 | ("info", "Info"), 46 | ("modified_time", "Modified Time"), 47 | ("base_mem_size", "Base Memory Size"), 48 | ("flags", "Flags"), 49 | ("current_dir", "Current Directory"), 50 | ("dont_cache", "Don't Cache"), 51 | ("debug_key", "Debug Key"), 52 | ("exit_key", "Exit Key"), 53 | ("exp_mem", "Expansion Memory Size"), 54 | ("kickstarts", "Kickstarts"), 55 | ("kickstart_size", "Kickstart Size"), 56 | ("config", "Config") 57 | ]) 58 | 59 | def __init__(self): 60 | self.path = None 61 | self.file_name = None 62 | self.modified_time = None 63 | self.size = None 64 | self.data_length = None 65 | self.security = None 66 | self.id = None 67 | self.version = None 68 | self.flags_value = None 69 | self.base_mem_size = None 70 | self.exec_install = None 71 | self.game_loader = None 72 | self.current_dir_offset = None 73 | self.dont_cache_offset = None 74 | self.key_debug = None 75 | self.key_exit = None 76 | self.exp_mem = 0 77 | self.name_offset = None 78 | self.copy_offset = None 79 | self.info_offset = None 80 | self.config_offset = None 81 | self.current_dir = None 82 | self.config = None 83 | self.dont_cache = None 84 | self.name = None 85 | self.copy = None 86 | self.info = None 87 | self.kickstarts = [] 88 | self.kick_name_offset = None 89 | self.kickstart_size = 0 90 | self.flags = [] 91 | 92 | def __str__(self): 93 | string_builder = "" 94 | for key, friendly_name in self.property_friendly_names.items(): 95 | if hasattr(self, key): 96 | value = getattr(self, key) 97 | 98 | # Display Memory Sizes in Friendly Format 99 | if friendly_name.find("Size") > 0: 100 | value = "{} KiB ({})".format( 101 | int(value / 1024), 102 | hex(value) 103 | ) 104 | 105 | # Disply Info Indented: 106 | if key == "info": 107 | old_value = value 108 | value = "" 109 | for line in old_value.split('\n'): 110 | value += "\n\t{}".format(line) 111 | 112 | # Display Kickstart Objects Correctly 113 | if key == "kickstarts": 114 | old_value = value 115 | value = "" 116 | for kickstart in old_value: 117 | value += "\n\tName: {}\n\tCRC: {}".format( 118 | kickstart.name, 119 | kickstart.crc 120 | ) 121 | 122 | string_builder += "{}: {}\n".format( 123 | friendly_name, 124 | value 125 | ) 126 | 127 | return string_builder 128 | 129 | def requires_aga(self): 130 | return "ReqAGA" in self.flags 131 | 132 | def requires_68020(self): 133 | return "Req68020" in self.flags 134 | 135 | def has_cd32_controls_patch(self): 136 | if self.config is not None and len(self.config) > 0: 137 | for config_item in self.config: 138 | config_item_values = config_item.split(':') 139 | try: 140 | if re.match("^.*[Cc][Dd]32.*$", config_item_values[2]): 141 | return True 142 | except IndexError: 143 | pass 144 | return False 145 | 146 | def compare_property(self, other_slave, property_name): 147 | try: 148 | this_property = getattr(self, property_name) 149 | other_slave_property = getattr(other_slave, property_name) 150 | if this_property == other_slave_property: 151 | return True 152 | except AttributeError: 153 | return False 154 | 155 | return False 156 | 157 | def compare_names(self, other_slave): 158 | return self.compare_property(other_slave, "name") 159 | 160 | def compare_file_names(self, other_slave): 161 | return self.compare_property(other_slave, "file_name") 162 | 163 | def compare_all(self, other_slave): 164 | compare_list = [ 165 | self.compare_names, 166 | self.compare_file_names, 167 | ] 168 | 169 | compare = True 170 | for compare_func in compare_list: 171 | compare = compare_func(other_slave) 172 | if compare is False: 173 | break 174 | 175 | return compare 176 | 177 | 178 | class WHDLoadSlaveFile(WHDLoadSlaveBase): 179 | def __init__(self, path): 180 | WHDLoadSlaveBase.__init__(self) 181 | self.path = path 182 | self.file_name = os.path.basename(path) 183 | self.modified_time = datetime.datetime.fromtimestamp(os.path.getmtime(path)) 184 | self._read_data() 185 | 186 | @staticmethod 187 | def _read_string(offset, data): 188 | if offset == 0: 189 | return "" 190 | length = 0 191 | for byte in data[offset:]: 192 | if byte == 0: 193 | break 194 | length += 1 195 | 196 | return struct.unpack_from('{}s'.format(length), data[offset:])[0].decode('iso-8859-1') 197 | 198 | def __str__(self): 199 | return "=== WHDLoad Slave File ===\n" + super().__str__() 200 | 201 | def _read_data(self): 202 | self._get_file_size() 203 | 204 | with open(self.path, 'rb') as f: 205 | f.seek(self._header_offset, 0) 206 | _data = bytearray(f.read()) 207 | 208 | self._parse_data(_data) 209 | self._parse_flags() 210 | 211 | def _get_file_size(self): 212 | self.size = os.path.getsize(self.path) 213 | self.data_length = self.size - self._header_offset 214 | 215 | def _parse_data(self, data): 216 | self.security = struct.unpack_from('>L', data[0:])[0] 217 | self.id = struct.unpack_from('8s', data[4:])[0].decode('iso-8859-1') 218 | self.version = struct.unpack_from('>H', data[12:])[0] 219 | self.flags_value = struct.unpack_from('>H', data[14:])[0] 220 | self.base_mem_size = struct.unpack_from('>L', data[16:])[0] 221 | self.exec_install = struct.unpack_from('>L', data[20:])[0] 222 | self.game_loader = struct.unpack_from('>H', data[24:])[0] 223 | self.current_dir_offset = struct.unpack_from('>H', data[26:])[0] 224 | self.dont_cache_offset = struct.unpack_from('>H', data[28:])[0] 225 | 226 | _kickstart_crc = 0 227 | 228 | if self.version >= 4: 229 | self.key_debug = binascii.hexlify(struct.unpack_from('c', data[30:])[0]).decode('iso-8859-1') 230 | self.key_exit = binascii.hexlify(struct.unpack_from('c', data[31:])[0]).decode('iso-8859-1') 231 | 232 | if self.version >= 8: 233 | self.exp_mem = struct.unpack_from('>L', data[32:])[0] 234 | 235 | if self.version >= 10: 236 | self.name_offset = struct.unpack_from('>H', data[36:])[0] 237 | self.copy_offset = struct.unpack_from('>H', data[38:])[0] 238 | self.info_offset = struct.unpack_from('>H', data[40:])[0] 239 | 240 | if self.version >= 16: 241 | self.kick_name_offset = struct.unpack_from('>H', data[42:])[0] 242 | self.kickstart_size = struct.unpack_from('>L', data[44:])[0] 243 | _kickstart_crc = struct.unpack_from('>H', data[48:])[0] 244 | 245 | if self.version >= 17: 246 | self.config_offset = struct.unpack_from('>H', data[50:])[0] 247 | 248 | if self.id != "WHDLOADS": 249 | raise Exception("Failed to read header: Id is not valid '{}'".format( 250 | self.id 251 | )) 252 | 253 | self.current_dir = self._read_string(self.current_dir_offset, data) 254 | self.dont_cache = self._read_string(self.dont_cache_offset, data) 255 | 256 | if self.version >= 10: 257 | self.name = self._read_string(self.name_offset, data) 258 | self.copy = self._read_string(self.copy_offset, data) 259 | _info = self._read_string(self.info_offset, data) 260 | self.info = "\n".join(([x for x in _info.split('\n') if x != ""])) 261 | 262 | if self.version >= 16: 263 | # The crc flag is set to indicate that there a multiple supported kickstarts 264 | if _kickstart_crc == 65535: 265 | self._parse_multiple_kickstarts(self.kick_name_offset, data) 266 | elif _kickstart_crc != 0: 267 | self.kickstarts.append(Kickstart( 268 | name=self._read_string(self.kick_name_offset, data), 269 | crc=hex(_kickstart_crc) 270 | )) 271 | 272 | if self.version >= 17: 273 | self.config = self._read_string(self.config_offset, data).split(';') 274 | 275 | def _parse_multiple_kickstarts(self, offset, data): 276 | offset_counter = offset 277 | while True: 278 | kick_crc = struct.unpack_from('>H', data[offset_counter:])[0] 279 | if kick_crc == 0: 280 | break 281 | offset_counter += 2 282 | kick_name = self._read_string(struct.unpack_from('>H', data[offset_counter:])[0], data) 283 | offset_counter += 2 284 | self.kickstarts.append(Kickstart( 285 | name=kick_name, 286 | crc=hex(kick_crc) 287 | )) 288 | 289 | def _parse_flags(self): 290 | for key, value in self._flags_dict.items(): 291 | if self.flags_value & key: 292 | self.flags.append(value) 293 | 294 | 295 | class WHDLoadDeSlave(WHDLoadSlaveBase): 296 | def __init__(self, html): 297 | WHDLoadSlaveBase.__init__(self) 298 | self._parse_html(html) 299 | 300 | def __str__(self): 301 | return "=== WHDLoad.de Slave Details ===\n" + super().__str__() 302 | 303 | def _parse_date(self, string): 304 | _temp_string = string.replace("{} - ".format(self.file_name), "") 305 | _regex_pattern = re.compile(".*(\s-\s\d+\sbytes)$") 306 | _bytes_string = _regex_pattern.match(_temp_string) 307 | _temp_string = _temp_string.replace(_bytes_string.group(1), '') 308 | _strptime_format = "%d.%m.%Y %H:%M:%S" 309 | _modified_time = datetime.datetime.strptime(_temp_string, _strptime_format) 310 | return _modified_time 311 | 312 | def _parse_html(self, html): 313 | _kickstarts = [] 314 | _kickstarts_crc = [] 315 | 316 | for col in html: 317 | if len(col) == 1: 318 | self.file_name = col[0].find('b').string 319 | self.modified_time = self._parse_date(col[0].text) 320 | else: 321 | if col[0].string == "required WHDLoad version": 322 | self.version = int(col[1].string) 323 | 324 | if col[0].string == "flags": 325 | if col[1].string is not None: 326 | self.flags = col[1].string.split() 327 | 328 | if col[0].string == "required Chip Memory": 329 | values = col[1].string.split() 330 | self.base_mem_size = int(values[0]) * 1024 331 | 332 | if col[0].string == "Expansion Memory": 333 | values = col[1].string.split() 334 | self.base_mem_size = int(values[0]) * 1024 335 | 336 | if col[0].string == "info name": 337 | self.name = col[1].string 338 | 339 | if col[0].string == "info copy": 340 | self.copy = col[1].string 341 | 342 | if col[0].string == "info install": 343 | _info = "" 344 | for info_string in col[1].strings: 345 | _info += "{}\n".format(info_string) 346 | self.info = _info.rstrip('\n') 347 | 348 | if col[0].string == "Kickstart name": 349 | _kickstarts = col[1].string.split() 350 | 351 | if col[0].string == "Kickstart size": 352 | values = col[1].string.split() 353 | self.base_mem_size = int(values[0]) * 1024 354 | 355 | if col[0].string == "Kickstart checksum": 356 | _kickstarts_crc = col[1].string.split() 357 | 358 | if col[0].string == "Configuration": 359 | if col[1].string is not None: 360 | self.config = col[1].string.split(';') 361 | 362 | for kickstart in zip(_kickstarts, _kickstarts_crc): 363 | self.kickstarts.append( 364 | Kickstart( 365 | name=kickstart[0], 366 | crc=kickstart[1].replace('$', '0x') 367 | ) 368 | ) 369 | 370 | 371 | def whdload_factory(location): 372 | if str(location).startswith("http"): 373 | # Return List of Slaves from URL 374 | from bs4 import BeautifulSoup 375 | 376 | with urllib.request.urlopen(location) as response: 377 | html = response.read().decode('iso-8859-1') 378 | soup = BeautifulSoup(html, 'html.parser') 379 | 380 | slave_info_table = soup.find('table', class_='TT') 381 | 382 | if slave_info_table is None: 383 | # no slave info on this page 384 | return [] 385 | 386 | slave_rows = slave_info_table.find_all('tr') 387 | 388 | html_data = [] 389 | html_slaves = [] 390 | 391 | for row in slave_rows: 392 | cols = row.find_all('td') 393 | if len(cols) == 1 and len(html_data) > 0: 394 | this_slave = WHDLoadDeSlave(html=html_data) 395 | html_slaves.append(this_slave) 396 | html_data = [] 397 | if len(cols) > 0: 398 | html_data.append(cols) 399 | 400 | html_slaves.append(WHDLoadDeSlave(html=html_data)) 401 | 402 | return html_slaves 403 | 404 | # Return Single File Slave 405 | return WHDLoadSlaveFile(location) 406 | 407 | 408 | if __name__ == "__main__": 409 | import argparse 410 | parser = argparse.ArgumentParser(description='Parse details of WHDLoad Slave') 411 | parser.add_argument('--slave', '-s', # command line argument 412 | nargs='*', # any number of space seperated arguments 413 | help='Slave(s) to Scan', 414 | ) 415 | parser.add_argument('-u', '--url', # command line argument 416 | nargs='*', # any number of space seperated arguments 417 | help='WHDLoad.de URLs to scrape', 418 | ) 419 | args = parser.parse_args() 420 | slaves_to_scan = args.slave 421 | if slaves_to_scan is not None: 422 | for slave_file in slaves_to_scan: 423 | slave_path = os.path.abspath(slave_file) 424 | if os.path.isfile(slave_path): 425 | slave = whdload_factory(location=slave_file) 426 | print(slave) 427 | else: 428 | print("'{}' is not a slave file".format(slave_file)) 429 | 430 | urls_to_parse = args.url 431 | if urls_to_parse is not None: 432 | for url in urls_to_parse: 433 | slaves = whdload_factory(location=url) 434 | for slave in slaves: 435 | print(slave) 436 | -------------------------------------------------------------------------------- /amiberry_xml_builder.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import datetime 3 | import hashlib 4 | import lhafile 5 | import math 6 | import openretroid 7 | import os 8 | from pathlib import Path 9 | import platform 10 | from slave_lha.parse_lha.read_lha import LhaSlaveArchive 11 | import sys 12 | import tempfile 13 | from utils import text_utils 14 | from whdload import whdload_slave 15 | import xml.etree.ElementTree as etree 16 | 17 | # ======================================= 18 | # Functions 19 | # ======================================= 20 | def sha1(fname): 21 | hash_sha1 = hashlib.sha1() 22 | with open(str(fname), "rb") as f: 23 | for chunk in iter(lambda: f.read(4096), b""): 24 | hash_sha1.update(chunk) 25 | return hash_sha1.hexdigest() 26 | 27 | # Get a value from a file 28 | def value_list(in_file, game_name): 29 | file_name = "settings/" + in_file 30 | 31 | if os.path.isfile(file_name) is False: 32 | return "" 33 | 34 | with open(file_name) as f: 35 | content = f.readlines() 36 | content = [x.strip() for x in content] 37 | f.close() 38 | 39 | answer = "" 40 | 41 | for this_line in content: 42 | if not this_line == "": 43 | this_word = this_line.split() 44 | if this_word[0] == game_name: 45 | answer = this_word[1] 46 | break 47 | 48 | return answer 49 | 50 | # Ensure a game package is set within a file 51 | def check_list(in_file, game_name): 52 | 53 | temp_game = game_name 54 | 55 | if text_utils.right(temp_game.lower(),4) == ".iso" or text_utils.right(temp_game.lower(),4) == ".cue": 56 | temp_game = text_utils.left(temp_game,len(temp_game)-4) 57 | 58 | if text_utils.right(temp_game.lower(),4) == ".adf" or text_utils.right(temp_game.lower(),4) == ".hdf": 59 | temp_game = text_utils.left(temp_game,len(temp_game)-4) 60 | 61 | file_name = "settings/" + in_file 62 | 63 | if os.path.isfile(file_name) is False: 64 | return False 65 | 66 | with open(file_name) as f: 67 | content = f.readlines() 68 | content = [x.strip() for x in content] 69 | f.close() 70 | 71 | answer = False 72 | 73 | for this_line in content: 74 | if this_line == temp_game: 75 | answer = True 76 | break 77 | 78 | return answer 79 | 80 | # ======================================= 81 | # Variables definition 82 | # ======================================= 83 | print() 84 | print( 85 | text_utils.FontColours.BOLD + text_utils.FontColours.OKBLUE + "HoraceAndTheSpider and osvaldolove" + text_utils.FontColours.ENDC + "'s " + text_utils.FontColours.BOLD + 86 | "Amiberry XML Builder" + text_utils.FontColours.ENDC + text_utils.FontColours.OKGREEN + " (0.6)" + text_utils.FontColours.ENDC + " | " + "" + 87 | text_utils.FontColours.FAIL + "www.ultimateamiga.co.uk" + text_utils.FontColours.ENDC) 88 | print() 89 | 90 | parser = argparse.ArgumentParser(description='Create Amiberry XML for WHDLoad Packs.') 91 | 92 | parser.add_argument('--scandir', '-s', # command line argument 93 | help='Directories to Scan', 94 | default='/home/pi/RetroPie/roms/amiga/' # Default directory if none supplied 95 | ) 96 | 97 | parser.add_argument('--refresh', '-n', # command line argument 98 | action="store_true", # if argument present, store value as True otherwise False 99 | help="Full XML refresh" 100 | ) 101 | 102 | parser.add_argument('--forceinput', '-f', # command line argument 103 | action="store_true", # if argument present, store value as True otherwise False 104 | help="Force -S to be used on OSX, and ignore timecheck" 105 | ) 106 | 107 | # Parse all command line arguments 108 | args = parser.parse_args() 109 | 110 | # Get the directories to scan (or default) 111 | # yeah, i shouldnt do this, but i'm lazy, so i will. 112 | if platform.system() == "Darwin" and args.forceinput != True: 113 | input_directory = "/Volumes/Macintosh HD/Users/horaceandthespider/Google Drive/Geek/Shared Pi Games/amiga/_Standard/" 114 | else: 115 | input_directory = args.scandir 116 | 117 | # set the name of the db file 118 | whdbfile = 'whdload_db.xml' 119 | 120 | # Setup Bool Constant for xml refresh 121 | FULL_REFRESH = args.refresh 122 | 123 | hash_algorithm = 'SHA1' 124 | count = 1 125 | 126 | XML_HEADER= '' + chr(10) 127 | XML_HEADER = XML_HEADER + '' + chr(10) 128 | XML_OLD = "" 129 | 130 | if FULL_REFRESH == False: 131 | text_file = open(whdbfile, "r") 132 | XML_OLD = text_file.read() 133 | text_file.close() 134 | 135 | a = XML_OLD.find("": 138 | break 139 | 140 | c = XML_OLD.find("-1): 159 | print("Skipping: " + text_utils.FontColours.OKBLUE + text_utils.FontColours.BOLD + this_file + text_utils.FontColours.ENDC) 160 | COMPLETE_MSG = COMPLETE_MSG + "Skipped: " + this_file + chr(10) 161 | elif text_utils.left(this_file,2)=="._": 162 | ... 163 | count = count - 1 164 | else: 165 | print() 166 | print("Processing: " + text_utils.FontColours.FAIL + text_utils.FontColours.BOLD + this_file + text_utils.FontColours.ENDC) 167 | 168 | try: 169 | slave_archive = LhaSlaveArchive(archive_path, hash_algorithm) 170 | file_details = openretroid.parse_file(archive_path) 171 | slave_archive.read_lha() 172 | ArchiveSHA = sha1(file2) 173 | 174 | # Defaults 175 | HW_CHIPSET = "ECS" 176 | HW_PROCESSOR = "68020" 177 | HW_SPEED = "7" 178 | HW_CHIP = .5 179 | HW_FAST = 0 180 | HW_Z3 = 0 181 | hardware = "" 182 | SLAVE_XML="" 183 | first_slave="" 184 | UUID = "" 185 | n=1 186 | default_slave = "" 187 | default_slave_found = False 188 | UUID = file_details['uuid'] 189 | 190 | print("Openretro URL: " + text_utils.FontColours.UNDERLINE + text_utils.FontColours.OKBLUE + "http://www.openretro.org/game/{}".format(UUID) + text_utils.FontColours.ENDC) 191 | print() 192 | 193 | # default slave 194 | def_msg = "" 195 | default_slave = value_list("WHD_DefaultSlave.txt", text_utils.left(this_file,len(this_file) - 4)) 196 | if default_slave != "": 197 | def_msg = " (Lookup from list using File Name)" 198 | 199 | # From here, we need to process WHDLoad header information out of the slave files! 200 | for slave in slave_archive.slaves: 201 | slave.get_hash() 202 | print(text_utils.FontColours.BOLD + ' Slave Found: ', end='') 203 | print(text_utils.FontColours.OKBLUE + slave.name + text_utils.FontColours.ENDC) 204 | 205 | if default_slave != "": 206 | if slave.name.find(default_slave) >0: 207 | default_slave_found = True 208 | 209 | # extract the slave as a temp file 210 | fp = tempfile.NamedTemporaryFile() 211 | fp.write(slave.data) 212 | fp.seek(0) 213 | this_slave = whdload_slave.whdload_factory(fp.name) 214 | fp.close() 215 | 216 | # we could work something out here later... but maybe it doesnt even matter here 217 | # we can use the 'sub path' of slave.name to get the old UAE Config Maker folder name 218 | slave_path = os.path.dirname(slave.name) 219 | sub_path = text_utils.left(slave.name,len(slave_path) - len(slave.name)) 220 | full_game_name = text_utils.make_full_name(sub_path) 221 | 222 | if first_slave == "": 223 | first_slave = slave.name.replace(slave_path +"/","") 224 | 225 | # Extract H/W settings from the slaves 226 | for slave_flag in this_slave.flags: 227 | if slave_flag == "Req68020": 228 | HW_PROCESSOR = "68020" 229 | 230 | if slave_flag == "ReqAGA": 231 | HW_CHIPSET = "AGA" 232 | HW_SPEED = "14" 233 | 234 | # where we have multiple slaves, we will set the requirements as the highest ones found 235 | # e.g. the one needing most memory etc 236 | 237 | # round up any wierd chipram values 238 | temp_chip_ram = this_slave.base_mem_size/1048576 239 | for i in range(0, 2): 240 | low_ram = int(math.pow(2, i-1)) 241 | high_ram = int(math.pow(2, i )) 242 | if temp_chip_ram > low_ram and temp_chip_ram < high_ram: 243 | temp_chip_ram = high_ram 244 | 245 | # update the value if the highest slave requirement 246 | if temp_chip_ram > HW_CHIP: 247 | whd_chip_ram = temp_chip_ram 248 | 249 | # round up any wierd fastram values 250 | temp_fast_ram = this_slave.exp_mem/1048576 251 | for i in range(0, 5): 252 | low_ram = int(math.pow(2, i-1)) 253 | high_ram = int(math.pow(2, i )) 254 | if temp_fast_ram > low_ram and temp_fast_ram < high_ram: 255 | temp_fast_ram = high_ram 256 | 257 | # update the value if the highest slave requirement 258 | whd_fast_ram = 0 259 | if temp_fast_ram > HW_FAST: 260 | whd_fast_ram = temp_fast_ram 261 | 262 | # we use the name of the 'last' slave, if there is only one 263 | last_slave = slave.name.replace(slave_path +"/","") 264 | 265 | SLAVE_XML += chr(9)+ chr(9)+ '' + chr(10) 266 | SLAVE_XML += chr(9)+ chr(9)+ chr(9) + '' + (slave.name.replace(slave_path +"/","")).replace("&", "&") + '' + chr(10) 267 | SLAVE_XML += chr(9)+ chr(9)+ chr(9) + '' + (this_slave.current_dir).replace("&", "&") + '' + chr(10) 268 | if (this_slave.config) is not None: 269 | SLAVE_XML += chr(9)+ chr(9)+ chr(9) + '' + chr(10) 270 | 271 | for configs in this_slave.config: 272 | if configs is not None: 273 | SLAVE_XML += chr(9)+ chr(9)+ chr(9) + ((configs.replace("<","")).replace(">","")).replace("&", "&") + chr(10) 274 | 275 | SLAVE_XML += chr(9)+ chr(9)+ chr(9) + '' + chr(10) 276 | 277 | SLAVE_XML += chr(9)+ chr(9)+ '' + chr(10) 278 | 279 | n=n+1 280 | # end of slave checking 281 | 282 | print() 283 | print("Game name: " + text_utils.FontColours.HEADER + full_game_name + text_utils.FontColours.ENDC) 284 | print("Lookup Name: " + text_utils.FontColours.HEADER + sub_path + text_utils.FontColours.ENDC) 285 | 286 | # return of the default slave! 287 | if default_slave_found == False: 288 | default_slave = "" 289 | 290 | if len(slave_archive.slaves) == 1 and default_slave=="": 291 | default_slave = last_slave 292 | def_msg = " (Only slave in archive search)" 293 | 294 | elif default_slave=="": 295 | default_slave = first_slave 296 | def_msg = " (First slave in archive search)" 297 | 298 | print("Default Slave: " + text_utils.FontColours.HEADER + default_slave + text_utils.FontColours.WARNING + def_msg + text_utils.FontColours.ENDC) 299 | 300 | # ======================================= 301 | # DISPLAY SETTINGS 302 | 303 | # Amiberry 3.2+: HEIGHT can be any value yet let's stick to the following 304 | # values to keep things tidy and easy to maintain. 305 | # Possible values: 400, 432, 480, 512, 524, 540, 568 306 | # default: AUTOHEIGHT 307 | listheights = ['400', '432', '480', '512', '524', '540', '568'] 308 | HW_HEIGHT = '' 309 | 310 | for possibleheight in listheights: 311 | if check_list('Screen_Height_'+possibleheight+'.txt', sub_path) is True: 312 | HW_HEIGHT = possibleheight 313 | break 314 | 315 | # Amiberry 3.2+: WIDTH can be any value yet let's stick to the following 316 | # values to keep things tidy and easy to maintain. 317 | # Possible values: 640, 704, 720 318 | # default: 720 319 | listwidths = ['640', '704'] 320 | HW_WIDTH = '720' 321 | 322 | for possiblewidth in listwidths: 323 | if check_list('Screen_Width_'+possiblewidth+'.txt', sub_path) is True: 324 | HW_WIDTH = possiblewidth 325 | break 326 | 327 | # centering 328 | # default: enabled 329 | HW_H_CENTER = 'SMART' 330 | if check_list('Screen_NoCenter_H.txt', sub_path) is True: 331 | HW_H_CENTER = 'NONE' 332 | 333 | HW_V_CENTER = 'SMART' 334 | if check_list('Screen_NoCenter_V.txt', sub_path) is True: 335 | HW_V_CENTER = 'NONE' 336 | 337 | # offset 338 | # default: 0 (for both horizontal and vertical) 339 | offset_h = value_list("Screen_Offset_H.txt", sub_path) 340 | offset_v = value_list("Screen_Offset_V.txt", sub_path) 341 | 342 | min_offset_h = -60 343 | max_offset_h = 60 344 | 345 | if offset_h.lstrip('-').isnumeric(): 346 | HW_H_OFFSET = int(offset_h) 347 | if min_offset_h <= HW_H_OFFSET <= max_offset_h: 348 | pass 349 | elif HW_H_OFFSET < min_offset_h: 350 | HW_H_OFFSET = min_offset_h 351 | elif HW_H_OFFSET > max_offset_h: 352 | HW_H_OFFSET = max_offset_h 353 | else: 354 | HW_H_OFFSET = '' 355 | 356 | min_offset_v = -20 357 | max_offset_v = 20 358 | 359 | if offset_v.lstrip('-').isnumeric(): 360 | HW_V_OFFSET = int(offset_v) 361 | if min_offset_v <= HW_V_OFFSET <= max_offset_v: 362 | pass 363 | elif HW_V_OFFSET < min_offset_v: 364 | HW_V_OFFSET = min_offset_v 365 | elif HW_V_OFFSET > max_offset_v: 366 | HW_V_OFFSET = max_offset_v 367 | else: 368 | HW_V_OFFSET = '' 369 | 370 | # NTSC 371 | HW_NTSC = "" 372 | if check_list("Chipset_ForceNTSC.txt", sub_path) is True: 373 | HW_NTSC = "TRUE" 374 | elif this_file.find("NTSC") > -1: 375 | HW_NTSC = "TRUE" 376 | 377 | # ======================================= 378 | # CONTROL SETTINGS 379 | # mouse / mouse 2 / CD32 380 | 381 | use_mouse1 = check_list("Control_Port0_Mouse.txt", sub_path) 382 | use_mouse2 = check_list("Control_Port1_Mouse.txt", sub_path) 383 | use_cd32_pad = check_list("Control_CD32.txt", sub_path) 384 | 385 | # ======================================= 386 | # MEMORY SETTINGS 387 | # Let's limit possible Z3 values to 128Mb. 388 | # Amiberry 5+: 8Mb of fast RAM/Z2 set as default 389 | # Default: 2Mb Chip / 8Mb Z2 / 0Mb Z3 390 | 391 | for i in range(0, 8): 392 | z3_ram = int(math.pow(2, i)) 393 | if check_list("Memory_Z3Ram_" + str(z3_ram) + ".txt", sub_path) is True: 394 | HW_24BIT = "FALSE" 395 | break 396 | else: 397 | z3_ram = 0 398 | HW_24BIT = "" 399 | 400 | # ======================================= 401 | # CHIPSET SETTINGS 402 | 403 | # sprite collisions 404 | # Default: Playfield 405 | # can't find a single case requiring value different than default. 406 | 407 | # blitter 408 | # Default: Wait for Blitter 409 | HW_BLITS = "" 410 | if check_list("Chipset_ImmediateBlitter.txt", sub_path) is True: 411 | HW_BLITS = "IMMEDIATE" 412 | 413 | # fast copper 414 | # Default: False 415 | HW_FASTCOPPER = "" 416 | if check_list("Chipset_FastCopper.txt", sub_path) is True: 417 | HW_FASTCOPPER = "TRUE" 418 | 419 | # ======================================= 420 | # CPU SETTINGS 421 | 422 | # clock speed (MHz) 423 | # Default: 7 for non-AGA / 14 for AGA 424 | HW_SPEED = "" 425 | if check_list("CPU_ClockSpeed_14.txt", sub_path) is True: 426 | HW_SPEED = "14" 427 | if check_list("CPU_ClockSpeed_25.txt", sub_path) is True: 428 | HW_SPEED = "25" 429 | if check_list("CPU_ClockSpeed_Max.txt", sub_path) is True: 430 | HW_SPEED = "MAX" 431 | 432 | # cpu model 433 | # Default: 68000 for non-AGA / 68020 for AGA 434 | 435 | # 24 bit addressing 436 | # Default: True / you can set Z3 separately 437 | 438 | # compatible CPU 439 | # Default: True 440 | HW_CPUCOMP = '' 441 | if check_list('CPU_NoCompatible.txt', sub_path) is True: 442 | HW_CPUCOMP = 'FALSE' 443 | 444 | # CPU cycle exact 445 | # available only for 68000 CPU 446 | # Default: False 447 | HW_CPUEXACT = "" 448 | if check_list("CPU_CycleExact.txt", sub_path) is True: 449 | HW_CPUEXACT = "TRUE" 450 | 451 | # JIT Cache 452 | # Default: False 453 | HW_JIT = "" 454 | if check_list("CPU_ForceJIT.txt",sub_path) == True: 455 | HW_JIT = "TRUE" 456 | 457 | # CHIPSET 458 | HW_CHIPSET = "" 459 | if this_file.find("_AGA") > -1: 460 | HW_CHIPSET = "AGA" 461 | if this_file.find("_CD32") > -1: 462 | HW_CHIPSET = "AGA" 463 | use_cd32_pad = True 464 | if check_list('Chipset_AGA.txt',sub_path) is True: 465 | HW_CHIPSET = 'AGA' 466 | 467 | # ================================ 468 | # building hardware section 469 | 470 | if HW_BLITS != '': 471 | hardware += chr(10) + ('BLITTER=') + HW_BLITS 472 | 473 | if HW_CHIPSET != '': 474 | hardware += chr(10) + ('CHIPSET=') + HW_CHIPSET 475 | 476 | if HW_SPEED != '': 477 | hardware += chr(10) + ('CLOCK=') + HW_SPEED 478 | 479 | if HW_24BIT != '': 480 | hardware += chr(10) + ('CPU_24BITADDRESSING=') + HW_24BIT 481 | 482 | if HW_CPUCOMP != '': 483 | hardware += chr(10) + ('CPU_COMPATIBLE=') + HW_CPUCOMP 484 | 485 | if HW_CPUEXACT != '': 486 | hardware += chr(10) + ('CPU_EXACT=') + HW_CPUEXACT 487 | 488 | if HW_FASTCOPPER != '': 489 | hardware += chr(10) + ('FAST_COPPER=') + HW_FASTCOPPER 490 | 491 | if HW_JIT != '': 492 | hardware += chr(10) + ('JIT=') + HW_JIT 493 | 494 | if HW_NTSC != '': 495 | hardware += chr(10) + ('NTSC=') + HW_NTSC 496 | 497 | if use_mouse1 == True: 498 | hardware += chr(10) + ('PRIMARY_CONTROL=MOUSE') 499 | else: 500 | hardware += chr(10) + ('PRIMARY_CONTROL=JOYSTICK') 501 | 502 | if use_mouse1 == True: 503 | hardware += chr(10) + ('PORT0=MOUSE') 504 | elif use_cd32_pad == True: 505 | hardware += chr(10) + ('PORT0=CD32') 506 | else: 507 | hardware += chr(10) + ('PORT0=JOY') 508 | 509 | if use_mouse2 == True: 510 | hardware += chr(10) + ('PORT1=MOUSE') 511 | elif use_cd32_pad == True: 512 | hardware += chr(10) + ('PORT1=CD32') 513 | else: 514 | hardware += chr(10) + ('PORT1=JOY') 515 | 516 | # SCREEN OPTIONS 517 | # Screen: size, auto-height/crop 518 | # Disable AUTOHEIGHT and set HEIGHT only when there's HEIGHT 519 | if HW_HEIGHT != '': 520 | HW_AUTO_HEIGHT = 'FALSE' 521 | hardware += chr(10) + ('SCREEN_AUTOHEIGHT=') + HW_AUTO_HEIGHT 522 | hardware += chr(10) + ('SCREEN_HEIGHT=') + HW_HEIGHT 523 | else: 524 | HW_AUTO_HEIGHT = 'TRUE' 525 | hardware += chr(10) + ('SCREEN_AUTOHEIGHT=') + HW_AUTO_HEIGHT 526 | 527 | if HW_WIDTH != '720' or HW_AUTO_HEIGHT == 'FALSE': 528 | hardware += chr(10) + ('SCREEN_WIDTH=') + HW_WIDTH 529 | 530 | # H_CENTER only if there's no H_OFFSET 531 | if HW_H_CENTER == 'SMART' and HW_H_OFFSET != '': 532 | HW_H_CENTER = 'NONE' 533 | 534 | hardware += chr(10) + ('SCREEN_CENTERH=') + HW_H_CENTER 535 | 536 | # V_CENTER only if there's no V_OFFSET 537 | if HW_V_CENTER == 'SMART' and HW_V_OFFSET != '': 538 | HW_V_CENTER = 'NONE' 539 | 540 | hardware += chr(10) + ('SCREEN_CENTERV=') + HW_V_CENTER 541 | 542 | if HW_H_OFFSET != '': 543 | hardware += chr(10) + ('SCREEN_OFFSETH=') + str(HW_H_OFFSET) 544 | 545 | if HW_V_OFFSET != '': 546 | hardware += chr(10) + ('SCREEN_OFFSETV=') + str(HW_V_OFFSET) 547 | 548 | if z3_ram != 0: 549 | hardware += chr(10) + ('Z3_RAM=') + str(z3_ram) 550 | 551 | # custom controls 552 | custom_file = 'customcontrols/' + sub_path 553 | custom_text = '' 554 | 555 | # remove any items which are not amiberry custom settings 556 | if os.path.isfile(custom_file) == True: 557 | with open(custom_file) as f: 558 | customsettings_content = f.readlines() 559 | f.close() 560 | 561 | for this_line in customsettings_content: 562 | if this_line.find('amiberry_custom') > -1 and '\n' in this_line: 563 | custom_text += chr(9) + chr(9) + chr(9) + this_line 564 | elif this_line.find('amiberry_custom') > -1 and not '\n' in this_line: 565 | custom_text += chr(9) + chr(9) + chr(9) + this_line + chr(10) 566 | 567 | # external libraries (eg. xpk, required for Dungeon Master) 568 | extra_libs = 'False' 569 | if check_list('WHD_Libraries.txt', sub_path) is True: 570 | extra_libs = 'True' 571 | 572 | # generate XML 573 | XML += chr(10) + chr(9)+ '' + chr(10) 574 | XML += chr(9) + chr(9) + '' + full_game_name.replace("&", "&") + '' + chr(10) 575 | XML += chr(9) + chr(9) + '' + sub_path.replace("&", "&") + '' + chr(10) 576 | XML += chr(9) + chr(9) + '' + UUID + '' + chr(10) 577 | XML += chr(9) + chr(9) + '' + str(len(slave_archive.slaves)) + '' + chr(10) 578 | XML += chr(9) + chr(9) + '' + default_slave.replace("&", "&") + '' + chr(10) 579 | XML += chr(9) + chr(9) + '' + extra_libs + '' + chr(10) 580 | XML += SLAVE_XML 581 | XML += chr(9) + chr(9) + '' 582 | XML += hardware.replace(chr(10), chr(10) + chr(9) + chr(9) + chr(9)) 583 | XML += chr(10) + chr(9) + chr(9) + '' + chr(10) 584 | 585 | if len(custom_text) > 0: 586 | XML += chr(9) + chr(9) + '' + chr(10) + custom_text + chr(9) + chr(9) + '' + chr(10) 587 | 588 | XML += chr(9)+ '' 589 | 590 | COMPLETE_MSG += "Scanned: " + full_game_name + chr(10) 591 | 592 | except FileNotFoundError: 593 | print("Could not find LHA archive: {}".format(archive_path)) 594 | ERROR_MSG += "Could not find LHA archive: {}".format(this_file) + chr(10) 595 | 596 | except lhafile.BadLhafile: 597 | print("Could not read LHA archive: {}".format(archive_path)) 598 | ERROR_MSG += "Could not read LHA archive: {}".format(this_file) + chr(10) 599 | 600 | except KeyboardInterrupt: 601 | print() 602 | print("User Abort") 603 | break 604 | except: 605 | print("Something went wrong with LHA archive: {}".format(archive_path)) 606 | ERROR_MSG += "Could not read LHA archive: {}".format(this_file) + chr(10) 607 | 608 | # limit to a certian number of archives (for testing) 609 | if count >= 99999: 610 | break 611 | count = count + 1 612 | 613 | # ======================================= 614 | # XML snippets 615 | # for recent games 616 | # ======================================= 617 | print() 618 | print('Adding external XML snippets') 619 | 620 | snippet_dir = 'snippets/' 621 | snippet_text = '' 622 | 623 | # add fake root to 'old' XML to get valid xml 624 | xml_old_snippet = '' + XML_OLD + '' 625 | snipoldroot = etree.fromstring(xml_old_snippet) 626 | 627 | for snippet_file in os.listdir(snippet_dir): 628 | xmlsnip = os.path.join(snippet_dir,snippet_file) 629 | with open(xmlsnip, 'r') as snippets_content: 630 | 631 | # add fake root to 'snippets' to get valid xml 632 | xml_snippet = '' + snippets_content.read() + '' 633 | sniproot = etree.fromstring(xml_snippet) 634 | 635 | # check if snippet's element has no duplicate then update it 636 | for snipgame in sniproot.findall('game'): 637 | snippet_filename = snipgame.get('filename') 638 | snippet_sha1 = snipgame.get('sha1') 639 | 640 | # check for sha1 in new packages or snippets 641 | if snippet_sha1 in XML or snippet_sha1 in snippet_text: 642 | COMPLETE_MSG += 'Snippet skipped: ' + snippet_filename + chr(10) 643 | continue 644 | 645 | # check for sha1 in 'old' XML 646 | # if found delete it - it will be re-added below 647 | # this way we would always get the latest version 648 | if snippet_sha1 in XML_OLD: 649 | for old_elem in snipoldroot.findall('.//game[@sha1="{value}"]'.format(value=snippet_sha1)): 650 | snipoldroot.remove(old_elem) 651 | 652 | # add element from snippet 653 | snipstr = etree.tostring(snipgame).decode().strip() 654 | if snipstr.startswith('\t'): 655 | snippet_text += snipstr + chr(10) 656 | else: 657 | snippet_text += chr(9) + snipstr + chr(10) 658 | # add to report 659 | COMPLETE_MSG += 'Snippet added: ' + snippet_filename + chr(10) 660 | 661 | # return a string and delete the fake root 662 | XML_OLD = etree.tostring(snipoldroot).decode() 663 | XML_OLD = XML_OLD.replace('', '').replace('', '').replace('', '') 664 | 665 | if len(snippet_text) > 0: 666 | XML += chr(10) + snippet_text + chr(9) 667 | 668 | # ======================================= 669 | # XML is complete, let's put it all together 670 | # ======================================= 671 | XML = XML_HEADER + XML_OLD + XML + XML_FOOTER 672 | 673 | # ======================================= 674 | # write down XML file 675 | # ======================================= 676 | print("Generating XML File") 677 | text_file = open(whdbfile, "w+") 678 | text_file.write(XML) 679 | text_file.close() 680 | 681 | # ======================================= 682 | # Line Squasher 683 | # * line(s) matching specified characters will be deleted 684 | # * ensure only ASCII characters are written 685 | # 686 | # eg.: 687 | # offtext = ['FAST_RAM=8', '\t\t\n'] 688 | # ======================================= 689 | offtext = [] 690 | 691 | with open(whdbfile, 'r') as deloffset: 692 | olines = deloffset.readlines() 693 | 694 | with open(whdbfile, 'w') as nomoreoffset: 695 | for line in olines: 696 | # remove blank lines 697 | if line.rstrip(): 698 | # ensure only ASCII characters 699 | if not any(offset in line for offset in offtext) and all(ord(ch) < 128 for ch in line): 700 | nomoreoffset.write(line) 701 | 702 | # ======================================= 703 | # Reports 704 | # ======================================= 705 | text_file = open("files_scanned.txt", "w+") 706 | text_file.write(COMPLETE_MSG) 707 | text_file.close() 708 | 709 | ##if ERROR_MSG != "": 710 | text_file = open("files_failed.txt", "w+") 711 | text_file.write(ERROR_MSG) 712 | text_file.close() 713 | --------------------------------------------------------------------------------