├── 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("" + chr(10)
145 |
146 | # Reports
147 | ERROR_MSG = 'Problem file log: ' + datetime.datetime.now().strftime("%Y-%m-%d at %H:%M:%S") + '' + chr(10)
148 | COMPLETE_MSG = 'Scanned file log: ' + datetime.datetime.now().strftime("%Y-%m-%d at %H:%M:%S") + '' + chr(10)
149 |
150 | # =======================================
151 | # main section starts here...
152 | # =======================================
153 | for file2 in Path(input_directory + "/").glob('**/*.lha'):
154 | archive_path = str(file2)
155 | this_file = os.path.basename(archive_path)
156 |
157 | # check for a skip, and that its value for skipping
158 | if (FULL_REFRESH==False and 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 |
--------------------------------------------------------------------------------