2024-02-23 21:32:32 +00:00
|
|
|
# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
|
2023-10-06 16:54:19 +00:00
|
|
|
# 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)
|