Files
thejayman77 ec82764bef Initial commit: retroDE_ps2 — first-of-its-kind PS2 GS FPGA core (DE25-Nano / Agilex 5)
RTL (GS rasterizer, EE core stub, platform bridge, LPDDR4B path), sim regression
(272 TBs), docs, and tooling. Copyrighted PS2 content (BIOS, game code, GS dumps,
and all dump-derived textures/traces) is excluded via .gitignore and stays local.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 20:10:50 -04:00

60 lines
1.9 KiB
Python
Executable File

#!/usr/bin/env python3
"""Generate a NOP-sled golden trace in the retroDE_ps2 common envelope.
Produces one EE IFETCH record per fetch, starting at --reset-vector (default
0xBFC00000), advancing PC += 4 each step. Each instruction word is 0x00000000
(MIPS NOP: sll $0, $0, 0).
Format: see docs/decisions/0000-trace-format.md.
Spec: see sim/golden/trace_compare_spec.md.
"""
import argparse
import sys
def main() -> int:
ap = argparse.ArgumentParser(description="NOP-sled golden trace generator")
ap.add_argument("--count", type=int, default=32,
help="number of IFETCH records to emit (default: 32)")
ap.add_argument("--reset-vector", type=lambda s: int(s, 0),
default=0xBFC00000,
help="starting PC (default: 0xBFC00000)")
ap.add_argument("-o", "--output", default="-",
help="output file, '-' for stdout (default: -)")
args = ap.parse_args()
if args.count <= 0:
print("error: --count must be positive", file=sys.stderr)
return 2
if args.output == "-":
out = sys.stdout
close = False
else:
try:
out = open(args.output, "w")
except OSError as e:
print(f"error: cannot open {args.output}: {e}", file=sys.stderr)
return 2
close = True
try:
out.write("# retroDE_ps2 golden trace, schema v1, "
"source=generated, scenario=nop_sled\n")
out.write("# columns: cycle subsystem event arg0 arg1 arg2 arg3 flags\n")
for i in range(args.count):
pc = (args.reset_vector + i * 4) & 0xFFFFFFFFFFFFFFFF
out.write(
f"{i} EE IFETCH "
f"0x{pc:016x} 0x{0:016x} 0x{0:016x} 0x{0:016x} -\n"
)
finally:
if close:
out.close()
return 0
if __name__ == "__main__":
sys.exit(main())