mirror of
https://github.com/ksherlock/ample.git
synced 2024-06-10 00:29:55 +00:00
eda219faa2
They were previously excluded from the machine descriptions but they now need to be excluded from the ROM file as well.
195 lines
3.2 KiB
Python
195 lines
3.2 KiB
Python
import argparse
|
|
import subprocess
|
|
|
|
from plist import to_plist
|
|
|
|
import xml.etree.ElementTree as ET
|
|
from html.parser import HTMLParser
|
|
from os.path import splitext
|
|
|
|
|
|
from machines import MACHINES
|
|
|
|
|
|
|
|
# a2pcxport dependencies. not automatically included though
|
|
# (would need to manually pull devnames from a2pcxport then)
|
|
# listxml for them.
|
|
|
|
EXTRA_MACHINES = [
|
|
'vgmplay',
|
|
'cga',
|
|
'kb_iskr1030',
|
|
'kb_ec1841',
|
|
'kb_pc83',
|
|
'kb_pcxt83',
|
|
'keytronic_pc3270',
|
|
'apple2gsr0p',
|
|
'apple2gsr0p2',
|
|
'apple2c0',
|
|
'apple2c3',
|
|
'apple2c4',
|
|
'mac2fdhd',
|
|
]
|
|
|
|
|
|
p = argparse.ArgumentParser()
|
|
p.add_argument('--full', action='store_true')
|
|
p.add_argument('machine', nargs="*")
|
|
args = p.parse_args()
|
|
|
|
# full = args.full
|
|
machines = args.machine
|
|
if not machines: machines = [ *MACHINES, *EXTRA_MACHINES]
|
|
|
|
# roms stored in other files.
|
|
xEXCLUDE = [
|
|
'ace100',
|
|
'agat7',
|
|
'agat9',
|
|
'albert',
|
|
'am100',
|
|
'am64',
|
|
'apple2cp',
|
|
'apple2ee',
|
|
'apple2eefr',
|
|
'apple2ees',
|
|
'apple2eeuk',
|
|
'apple2ep',
|
|
'apple2euk',
|
|
'apple2gsr0',
|
|
'apple2gsr1',
|
|
'apple2jp',
|
|
'apple2p',
|
|
'basis108',
|
|
'craft2p',
|
|
'dodo',
|
|
'elppa',
|
|
'hkc8800a',
|
|
'ivelultr',
|
|
'las128e2',
|
|
'las128ex',
|
|
'laser128',
|
|
'laser2c',
|
|
'maxxi',
|
|
'microeng',
|
|
'mprof3',
|
|
'prav82',
|
|
'prav8c',
|
|
'prav8m',
|
|
'space84',
|
|
'spectred',
|
|
'uniap2en',
|
|
'uniap2pt',
|
|
'uniap2ti',
|
|
]
|
|
|
|
# non-existent or included elsewhere.
|
|
EXCLUDE = set([
|
|
'mac512ke',
|
|
'maciicx',
|
|
'maciihmu',
|
|
'maciivi',
|
|
'maciix',
|
|
|
|
'kb_pc83',
|
|
|
|
# ROMs for CD Drives, etc, that are intentionally hidden
|
|
# due to lack of functionality.
|
|
'aplcd150',
|
|
'cdd2000',
|
|
'cdr4210',
|
|
'cdrn820s',
|
|
'cdu415',
|
|
'cdu561_25',
|
|
'cdu75s',
|
|
'cfp1080s',
|
|
'crd254sh',
|
|
'cw7501',
|
|
'smoc501',
|
|
|
|
])
|
|
|
|
|
|
def build_known_roms_list():
|
|
infile = "mame-0233-full.html"
|
|
# infile = "mame-0.231-merged.html"
|
|
rv = set()
|
|
|
|
class X(HTMLParser):
|
|
rv = set()
|
|
|
|
def handle_starttag(self, tag, attrs):
|
|
if tag != 'a': return
|
|
href = None
|
|
for xx in attrs:
|
|
if xx[0] == 'href':
|
|
href = xx[1]
|
|
break
|
|
if not href: return
|
|
root, ext = splitext(href)
|
|
if ext in (".7z", ".zip"): self.rv.add(root)
|
|
|
|
|
|
|
|
x = X()
|
|
with open(infile) as f:
|
|
data = f.read()
|
|
x.feed(data)
|
|
x.close()
|
|
return x.rv
|
|
|
|
|
|
|
|
|
|
mnames = set()
|
|
rnames = set()
|
|
|
|
known = build_known_roms_list()
|
|
|
|
for m in machines:
|
|
|
|
print(m)
|
|
|
|
env = {'DYLD_FALLBACK_FRAMEWORK_PATH': '../embedded'}
|
|
st = subprocess.run(["../embedded/mame64", m, "-listxml"], capture_output=True, env=env)
|
|
if st.returncode != 0:
|
|
print("mame error: {}".format(m))
|
|
exit(1)
|
|
|
|
data = { }
|
|
|
|
xml = st.stdout
|
|
root = ET.fromstring(xml)
|
|
|
|
# find machines that have a rom child
|
|
for x in root.findall('machine/rom/..'):
|
|
name = x.get('name')
|
|
if name in EXCLUDE: continue
|
|
#if (name in known): mnames.add(name)
|
|
mnames.add(name)
|
|
# for y in x.findall('./rom'):
|
|
# rnames.add(y.get('name'))
|
|
|
|
|
|
# print("\n\n\n")
|
|
# ll = list(mnames.difference(EXCLUDE))
|
|
# ll.sort()
|
|
# for x in ll:
|
|
# print(x)
|
|
|
|
# if full: ROMS = list(mnames)
|
|
# else: ROMS = list(mnames.difference(EXCLUDE))
|
|
ROMS = list(mnames)
|
|
ROMS.sort()
|
|
|
|
data = {}
|
|
# data["source"] = "https://archive.org/download/mame0.224"
|
|
# data["type"] = "zip"
|
|
# data["version"] = "0.224"
|
|
data["roms"] = ROMS
|
|
|
|
# print(ROMS)
|
|
with open("../Ample/Resources/roms.plist", "w") as f:
|
|
f.write(to_plist(data))
|