File size: 1,843 Bytes
7b2dc1c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/usr/bin/env python3
"""Original MD3 bytes directly through recovered QVM packed vertex decoder."""
import hashlib,itertools
from pathlib import Path
from qvm_research_support import source
from md3 import MD3
from md3_vm import map_md3
from analyze_md3_contract import selected
from analyze_qvm_leaf_vertices import vertices,LOCAL,NODE
from analyze_qvm_acceleration import word
from analyze_qvm import write_json
ADDRESS=0x70000000
def main():
q,raw,h,ins=source();rows=[]
for path in selected():
data=path.read_bytes();model=MD3(data);s=model.surfaces[0];triangle=model.triangle(s,0)
for (a,b),fraction in itertools.product([(0,model.frames-1),(model.frames-1,0)],[0,.5,1]):
m={};bs={};mapping=map_md3(m,bs,model,ADDRESS,[a,b]);m.update({LOCAL+152:ADDRESS+s.offset,LOCAL+148:ADDRESS+s.offset+s.triangles_offset,LOCAL+440:NODE,NODE:a,NODE+4:b,NODE+8:word(fraction)})
for o in [84,88,92,100,104,108,116,120,124,132,136,140]:m[LOCAL+o]=0
for o in [84,104,124]:m[LOCAL+o]=word(1)
_,r=vertices(ins,m,bs);r.update({'path':str(path),'sha256':hashlib.sha256(data).hexdigest(),'mapping':mapping,'frame_a':a,'frame_b':b,'fraction':word(fraction),'surface_offset':s.offset,'vertex_offset':s.vertices_offset,'vertex_count':s.vertices,'triangle':triangle,'packed_a':[model.vertex(s,a,j)['packed'] for j in triangle],'packed_b':[model.vertex(s,b,j)['packed'] for j in triangle]});rows.append(r)
write_json(Path('docs/research/md3-vm-bridge.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Original MD3 byte ranges copied verbatim into explicit sparse QVM memory windows. Actual23929–24514 decoder, identity transform/origin fixture. No original loader/native buffer execution. Unselected frame/region reads reject.'})
if __name__=='__main__':main()
|