Make generate.py resuable outside of open-simh, as suggested and motivated by Richard Cornwell's simulator repository. - Make the "experimental" rule optional. Do not generate a Python "KeyError" if the rule is missing. - Add documentation on how to use the CMake infrastructure outside of open-simh: Customize the packaging.py script, season to taste. - Update the KA10 simulator customization, moving it to its own Python script, simgen/pdp10_simulator.py. Preparatory move that anticipates additional frontpanel and display options. - generate.py option "--skip-orphans": Skip the orphaned simulator check (i.e., don't cross-reference the simulators in packaging.py with what was scraped from the makefile.) - Add "TEST_ARGS" argument to CMake's add_simulator function so that the IBM 1130 simulator can pass to "-g" on the command line to disable the GUI when running RegisterSanityCheck, i.e.: ibm1130 RegisterSanityCheck -g This fixes an edge case Heisenbug encountered during Github CI/CD tests where ibm1130 appears to hang indefinitely on the Windows runners. The cause is the GUI's Pump() thread function being prematurely terminated before all GUI resources are acquired. The net result is an infinite loop in the MS C runtime trying to exit the process with unstable internal state. (Separate patch: synchronization across main and Pump() threads to ensure resource acquisition completes.) This issue never shows up on non-Windows platforms or the SIMH makefile. - cmake/generator.py, cmake/simgen: Add a "test_args" keyword argument to the BasicSimulator constructor that holds the tests argument parameter emitted as the "TEST_ARGS" argument to a simulator's add_simulator(). Ensure that the IBM 1130 emits 'TEST_ARG "-g"' in its add_simulator(). - scp.c: reset_all_p() adds 'P' to the existing switches, versus saving sim_switches and ONLY setting the 'P' power-up reset switch. Net effect is that the IBM 1130 simulator actually sees the 'G' flag that inhibits the GUI during the console device reset.
249 lines
9.4 KiB
Python
249 lines
9.4 KiB
Python
import os
|
|
import functools
|
|
|
|
## Initialize package_info to an empty dictionary here so
|
|
## that it's visible to write_packaging().
|
|
package_info = {}
|
|
|
|
|
|
class SIMHPackaging:
|
|
def __init__(self, family, install_flag = True) -> None:
|
|
self.family = family
|
|
self.processed = False
|
|
self.install_flag = install_flag
|
|
|
|
def was_processed(self) -> bool:
|
|
return self.processed == True
|
|
|
|
def encountered(self) -> None:
|
|
self.processed = True
|
|
|
|
class PkgFamily:
|
|
def __init__(self, component_name, display_name, description) -> None:
|
|
self.component_name = component_name
|
|
self.display_name = display_name
|
|
self.description = description
|
|
|
|
def write_component_info(self, stream, indent) -> None:
|
|
pkg_description = self.description
|
|
if pkg_description[-1] != '.':
|
|
pkg_description += '.'
|
|
sims = []
|
|
for sim, pkg in package_info.items():
|
|
if pkg.family is self and pkg.was_processed():
|
|
sims.append(sim)
|
|
|
|
if len(sims) > 0:
|
|
sims.sort()
|
|
pkg_description += " Simulators: " + ', '.join(sims)
|
|
indent0 = ' ' * indent
|
|
indent4 = ' ' * (indent + 4)
|
|
stream.write(indent0 + "cpack_add_component(" + self.component_name + "\n")
|
|
stream.write(indent4 + "DISPLAY_NAME \"" + self.display_name + "\"\n")
|
|
stream.write(indent4 + "DESCRIPTION \"" + pkg_description + "\"\n")
|
|
stream.write(indent0 + ")\n")
|
|
|
|
def __lt__(self, obj):
|
|
return self.component_name < obj.component_name
|
|
def __eq__(self, obj):
|
|
return self.component_name == obj.component_name
|
|
def __gt__(self, obj):
|
|
return self.component_name > obj.component_name
|
|
def __hash__(self):
|
|
return hash(self.component_name)
|
|
|
|
def write_packaging(toplevel_dir) -> None:
|
|
families = set([sim.family for sim in package_info.values()])
|
|
pkging_file = os.path.join(toplevel_dir, 'cmake', 'simh-packaging.cmake')
|
|
print("==== writing {0}".format(pkging_file))
|
|
with open(pkging_file, "w") as stream:
|
|
## Runtime support family:
|
|
stream.write("""## The default runtime support component/family:
|
|
cpack_add_component(runtime_support
|
|
DISPLAY_NAME "Runtime support"
|
|
DESCRIPTION "Required SIMH runtime support (documentation, shared libraries)"
|
|
REQUIRED
|
|
)
|
|
|
|
## Basic documentation for SIMH
|
|
install(FILES doc/simh.doc TYPE DOC COMPONENT runtime_support)
|
|
|
|
""")
|
|
|
|
## Simulators:
|
|
for family in sorted(families):
|
|
family.write_component_info(stream, 0)
|
|
|
|
|
|
default_family = PkgFamily("default_family", "Default SIMH simulator family.",
|
|
"""The SIMH simulator collection of historical processors and computing systems that do not belong to
|
|
any other simulated system family"""
|
|
)
|
|
|
|
att3b2_family = PkgFamily("att3b2_family", "ATT&T 3b2 collection",
|
|
"""The AT&T 3b2 simulator family"""
|
|
)
|
|
|
|
vax_family = PkgFamily("vax_family", "DEC VAX simulator collection",
|
|
"""The Digital Equipment Corporation VAX (plural: VAXen) simulator family."""
|
|
)
|
|
|
|
pdp10_family = PkgFamily("pdp10_family", "DEC PDP-10 collection",
|
|
"""DEC PDP-10 architecture simulators and variants."""
|
|
)
|
|
|
|
pdp11_family = PkgFamily("pdp11_family", "DEC PDP-11 collection.",
|
|
"""DEC PDP-11 and PDP-11-derived architecture simulators"""
|
|
)
|
|
|
|
experimental_family = PkgFamily("experimental", "Experimental (work-in-progress) simulators",
|
|
"""Experimental or work-in-progress simulators not in the SIMH mainline simulator suite."""
|
|
)
|
|
|
|
altairz80_family = PkgFamily("altairz80_family", "Altair Z80 simulator.",
|
|
"""The Altair Z80 simulator with M68000 support."""
|
|
)
|
|
|
|
b5500_family = PkgFamily("b5500_family", "Burroughs 5500",
|
|
"""The Burroughs 5500 system simulator""")
|
|
|
|
cdc1700_family = PkgFamily("cdc1700_family", "CDC 1700",
|
|
"""The Control Data Corporation's systems"""
|
|
)
|
|
|
|
dgnova_family = PkgFamily("dgnova_family", "DG Nova and Eclipse",
|
|
"""Data General NOVA and Eclipse system simulators"""
|
|
)
|
|
|
|
grisys_family = PkgFamily("grisys_family", "GRI Systems GRI-909",
|
|
"""GRI Systems GRI-909 system simulator"""
|
|
)
|
|
|
|
honeywell_family = PkgFamily("honeywell_family", "Honeywell H316",
|
|
"""Honeywell H-316 system simulator"""
|
|
)
|
|
|
|
hp_family = PkgFamily("hp_family", "HP 2100, 3000",
|
|
"""Hewlett-Packard H2100 and H3000 simulators""")
|
|
|
|
ibm_family = PkgFamily("ibm_family", "IBM",
|
|
"""IBM system simulators: i650"""
|
|
)
|
|
|
|
imlac_family = PkgFamily("imlac_family", "IMLAC",
|
|
"""IMLAC system simulators"""
|
|
)
|
|
|
|
intel_family = PkgFamily("intel_family", "Intel",
|
|
"""Intel system simulators"""
|
|
)
|
|
|
|
interdata_family = PkgFamily("interdata_family", "Interdata",
|
|
"""Interdata systems simulators"""
|
|
)
|
|
|
|
lgp_family = PkgFamily("lgp_family", "LGP",
|
|
"""Librascope systems"""
|
|
)
|
|
|
|
decpdp_family = PkgFamily("decpdp_family", "DEC PDP family",
|
|
"""Digital Equipment Corporation PDP systems"""
|
|
)
|
|
|
|
sds_family = PkgFamily("sds_family", "SDS simulators",
|
|
"""Scientific Data Systems (SDS) systems"""
|
|
)
|
|
|
|
gould_family = PkgFamily("gould_family", "Gould simulators",
|
|
"""Gould Systems simulators"""
|
|
)
|
|
|
|
swtp_family = PkgFamily("swtp_family", "SWTP simulators",
|
|
"""Southwest Technical Products (SWTP) system simulators"""
|
|
)
|
|
|
|
norsk_family = PkgFamily("norsk_family", "ND simulators",
|
|
"""Norsk Data systems simulator family""")
|
|
|
|
|
|
package_info["3b2"] = SIMHPackaging(att3b2_family)
|
|
package_info["3b2-700"] = SIMHPackaging(att3b2_family)
|
|
package_info["altair"] = SIMHPackaging(default_family)
|
|
package_info["altairz80"] = SIMHPackaging(altairz80_family)
|
|
package_info["b5500"] = SIMHPackaging(b5500_family)
|
|
package_info["besm6"] = SIMHPackaging(default_family)
|
|
package_info["cdc1700"] = SIMHPackaging(cdc1700_family)
|
|
package_info["eclipse"] = SIMHPackaging(dgnova_family)
|
|
package_info["gri"] = SIMHPackaging(grisys_family)
|
|
package_info["h316"] = SIMHPackaging(honeywell_family)
|
|
package_info["hp2100"] = SIMHPackaging(hp_family)
|
|
package_info["hp3000"] = SIMHPackaging(hp_family)
|
|
package_info["i1401"] = SIMHPackaging(ibm_family)
|
|
package_info["i1620"] = SIMHPackaging(ibm_family)
|
|
package_info["i650"] = SIMHPackaging(ibm_family)
|
|
package_info["i701"] = SIMHPackaging(ibm_family)
|
|
package_info["i7010"] = SIMHPackaging(ibm_family)
|
|
package_info["i704"] = SIMHPackaging(ibm_family)
|
|
package_info["i7070"] = SIMHPackaging(ibm_family)
|
|
package_info["i7080"] = SIMHPackaging(ibm_family)
|
|
package_info["i7090"] = SIMHPackaging(ibm_family)
|
|
package_info["i7094"] = SIMHPackaging(ibm_family)
|
|
package_info["ibm1130"] = SIMHPackaging(ibm_family)
|
|
package_info["id16"] = SIMHPackaging(interdata_family)
|
|
package_info["id32"] = SIMHPackaging(interdata_family)
|
|
package_info["imlac"] = SIMHPackaging(imlac_family)
|
|
package_info["infoserver100"] = SIMHPackaging(vax_family)
|
|
package_info["infoserver1000"] = SIMHPackaging(vax_family)
|
|
package_info["infoserver150vxt"] = SIMHPackaging(vax_family)
|
|
package_info["intel-mds"] = SIMHPackaging(intel_family)
|
|
package_info["lgp"] = SIMHPackaging(lgp_family)
|
|
package_info["microvax1"] = SIMHPackaging(vax_family)
|
|
package_info["microvax2"] = SIMHPackaging(vax_family)
|
|
package_info["microvax2000"] = SIMHPackaging(vax_family)
|
|
package_info["microvax3100"] = SIMHPackaging(vax_family)
|
|
package_info["microvax3100e"] = SIMHPackaging(vax_family)
|
|
package_info["microvax3100m80"] = SIMHPackaging(vax_family)
|
|
package_info["nd100"] = SIMHPackaging(norsk_family)
|
|
package_info["nova"] = SIMHPackaging(dgnova_family)
|
|
package_info["pdp1"] = SIMHPackaging(decpdp_family)
|
|
## Don't install pdp10 per Rob Cromwell
|
|
package_info["pdp10"] = SIMHPackaging(pdp10_family, install_flag=False)
|
|
package_info["pdp10-ka"] = SIMHPackaging(pdp10_family)
|
|
package_info["pdp10-ki"] = SIMHPackaging(pdp10_family)
|
|
package_info["pdp10-kl"] = SIMHPackaging(pdp10_family)
|
|
package_info["pdp10-ks"] = SIMHPackaging(pdp10_family)
|
|
package_info["pdp11"] = SIMHPackaging(pdp11_family)
|
|
package_info["pdp15"] = SIMHPackaging(decpdp_family)
|
|
package_info["pdp4"] = SIMHPackaging(decpdp_family)
|
|
package_info["pdp6"] = SIMHPackaging(decpdp_family)
|
|
package_info["pdp7"] = SIMHPackaging(decpdp_family)
|
|
package_info["pdp8"] = SIMHPackaging(decpdp_family)
|
|
package_info["pdp9"] = SIMHPackaging(decpdp_family)
|
|
package_info["rtvax1000"] = SIMHPackaging(vax_family)
|
|
package_info["s3"] = SIMHPackaging(ibm_family)
|
|
package_info["scelbi"] = SIMHPackaging(intel_family)
|
|
package_info["sds"] = SIMHPackaging(sds_family)
|
|
package_info["sel32"] = SIMHPackaging(gould_family)
|
|
package_info["sigma"] = SIMHPackaging(sds_family)
|
|
package_info["ssem"] = SIMHPackaging(default_family)
|
|
package_info["swtp6800mp-a"] = SIMHPackaging(swtp_family)
|
|
package_info["swtp6800mp-a2"] = SIMHPackaging(swtp_family)
|
|
package_info["tt2500"] = SIMHPackaging(default_family)
|
|
package_info["tx-0"] = SIMHPackaging(default_family)
|
|
package_info["uc15"] = SIMHPackaging(pdp11_family)
|
|
package_info["vax"] = SIMHPackaging(vax_family)
|
|
package_info["vax730"] = SIMHPackaging(vax_family)
|
|
package_info["vax750"] = SIMHPackaging(vax_family)
|
|
package_info["vax780"] = SIMHPackaging(vax_family)
|
|
package_info["vax8200"] = SIMHPackaging(vax_family)
|
|
package_info["vax8600"] = SIMHPackaging(vax_family)
|
|
package_info["vaxstation3100m30"] = SIMHPackaging(vax_family)
|
|
package_info["vaxstation3100m38"] = SIMHPackaging(vax_family)
|
|
package_info["vaxstation3100m76"] = SIMHPackaging(vax_family)
|
|
package_info["vaxstation4000m60"] = SIMHPackaging(vax_family)
|
|
package_info["vaxstation4000vlc"] = SIMHPackaging(vax_family)
|
|
|
|
## Experimental simulators:
|
|
package_info["alpha"] = SIMHPackaging(experimental_family)
|
|
package_info["pdq3"] = SIMHPackaging(experimental_family)
|
|
package_info["sage"] = SIMHPackaging(experimental_family)
|