shadPS4/scripts/ps4_names2stubs.py

49 lines
1.3 KiB
Python
Raw Permalink Normal View History

2024-02-23 22:32:32 +01:00
# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
# Helper script that generates stub implementation of all known nids + lookup tables
# for shadps4
import sys, os
import struct
#from hashlib import sha1
import hashlib
from base64 import b64encode as base64enc
from binascii import unhexlify as uhx
#ref https://github.com/SocraticBliss/ps4_name2nid_plugin
#ref derived from https://github.com/zecoxao/sce_symbols.git
# needs ps4_names.txt (see: https://github.com/zecoxao/sce_symbols.git for full list)
# generates "stubs.inl" to include in Core\PS4\Util
NEW_NIDS = {}
NAMES = 'ps4_names.txt'
def name2nid(name):
symbol = hashlib.sha1(name.encode() + uhx('518D64A635DED8C1E6B039B1C3E55230')).digest()
id = struct.unpack('<Q', symbol[:8])[0]
nid = base64enc(uhx('%016x' % id), b'+-').rstrip(b'=')
NEW_NIDS[nid]=name
def save_stubs(NIDS):
nidsSorted=sorted(NIDS.items(), key=lambda x: x[0])
nidsFile=open("aerolib.inl", "w")
nidsFile.writelines('// generated using ps4_names2stubs.py\n\n')
for nid, name in nidsSorted:
nidsFile.writelines('STUB("%s", %s)\n' % (str(nid,'utf-8'), name))
nidsFile.close()
f = open(NAMES,"r")
for line in f.readlines():
line = line.strip()
name2nid(line)
f.close()
save_stubs(NEW_NIDS)