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()