Подготовить автономную сборку и запуск перед разделением проектов

This commit is contained in:
Александр Петров
2026-09-15 23:04:04 +03:00
parent 5323b168a7
commit 0e74aaa7ee
116 changed files with 6908 additions and 333 deletions
+77
View File
@@ -0,0 +1,77 @@
#!/usr/bin/env python3
"""Обычный запуск Sprinter в MAME с локальным образом приложения."""
from __future__ import annotations
import argparse
from pathlib import Path
import subprocess
import sys
import tempfile
from mame_profile import add_arguments, from_arguments, write_keyboard_config
def main() -> int:
parser = argparse.ArgumentParser(description=__doc__)
add_arguments(parser)
parser.add_argument("--floppy", help="локальный образ приложения для A:")
parser.add_argument("--hdd", help="локальный образ приложения для D:")
parser.add_argument("--video", default="soft")
parser.add_argument("--script", help="Lua-сценарий запуска/теста")
parser.add_argument("--snapshot-dir", help="постоянный каталог снимков")
parser.add_argument("--timeout", type=float, help="лимит работы MAME в секундах")
parser.add_argument("--dry-run", action="store_true")
args = parser.parse_args()
try:
profile = from_arguments(args)
profile.validate(dss=True)
if not args.floppy and not args.hdd:
raise ValueError("для запуска укажите --floppy или --hdd")
media = {name: Path(value).resolve() for name, value in
(("floppy", args.floppy), ("hdd", args.hdd)) if value}
for name, path in media.items():
if not path.is_file():
raise ValueError(f"локальный образ {name} не найден: {path}")
script = Path(args.script).resolve() if args.script else None
if script and not script.is_file():
raise ValueError(f"Lua-сценарий не найден: {script}")
except ValueError as error:
print(f"run_sprinter_mame: {error}", file=sys.stderr)
return 2
with tempfile.TemporaryDirectory(prefix="sprinter-mame-run-") as directory:
state = Path(directory)
for name in ("cfg", "nvram", "diff", "snapshot"):
(state / name).mkdir()
snapshots = Path(args.snapshot_dir).resolve() if args.snapshot_dir else state / "snapshot"
snapshots.mkdir(parents=True, exist_ok=True)
write_keyboard_config(state / "cfg")
command = [str(profile.binary), "sprinter", "-noreadconfig",
"-rompath", str(profile.rompath), "-bios", profile.bios,
"-kbd", "ms_naturl,bios=sp2k", "-video", args.video,
"-window", "-skip_gameinfo", "-beta:wd179x:0", "35hd",
"-flop2", str(profile.dss_image),
"-hard1", str(profile.system_hdd_image)]
if "floppy" in media:
command += ["-flop1", str(media["floppy"])]
if "hdd" in media:
command += ["-hard2", str(media["hdd"])]
if script:
command += ["-autoboot_script", str(script)]
for name in ("cfg", "nvram", "diff"):
command += ["-" + name + "_directory", str(state / name)]
command += ["-snapshot_directory", str(snapshots)]
print("MAME:", profile.binary, "ROM:", profile.rompath,
"DSS:", profile.dss_image, "BIOS:", profile.bios, flush=True)
if args.dry_run:
print("Команда:", command)
return 0
try:
return subprocess.run(command, cwd=state, timeout=args.timeout).returncode
except subprocess.TimeoutExpired:
print("run_sprinter_mame: истёк лимит времени", file=sys.stderr)
return 124
if __name__ == "__main__":
raise SystemExit(main())