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>
This commit is contained in:
Executable
+59
@@ -0,0 +1,59 @@
|
||||
#!/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())
|
||||
Reference in New Issue
Block a user