ample/python/mkroms.py
Kelvin Sherlock eda219faa2 Tested and excluded extra CD ROM devices.
They were previously excluded from the machine descriptions but
they now need to be excluded from the ROM file as well.
2022-01-15 10:54:18 -05:00

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))