adeed manual processing using UVtools

This commit is contained in:
cpu
2026-06-12 13:36:22 +02:00
parent a731b064b6
commit 9a8635aa98
11 changed files with 340 additions and 38 deletions

66
diagnose/probe_laye.py Normal file
View File

@@ -0,0 +1,66 @@
#!/usr/bin/env python3
"""
probe_laye.py — find where 9024 and 5120 are actually stored in a pm4n file,
and dump LAYE + Mode sections in detail.
Run: python3 probe_laye.py Dummy.pm4n
"""
import struct, sys
path = sys.argv[1]
data = open(path, 'rb').read()
fsize = len(data)
print(f"File: {path} ({fsize} bytes)\n")
# Search for 9024 and 5120 as u32 LE, u16 LE, and as floats
targets = {
'u32 9024': struct.pack('<I', 9024),
'u32 5120': struct.pack('<I', 5120),
'u16 9024': struct.pack('<H', 9024),
'u16 5120': struct.pack('<H', 5120),
'f32 9024': struct.pack('<f', 9024.0),
'f32 5120': struct.pack('<f', 5120.0),
'f32 153.408': struct.pack('<f', 153.408),
'f32 87.040': struct.pack('<f', 87.040),
}
for label, needle in targets.items():
pos = 0
while True:
idx = data.find(needle, pos)
if idx < 0:
break
print(f" {label} found at 0x{idx:06X} ({idx})")
pos = idx + 1
print()
# Dump LAYE section
laye_off = data.find(b'LAYE')
if laye_off >= 0:
print(f"LAYE raw (first 160 bytes from 0x{laye_off:06X}):")
for i in range(0, 160, 16):
row = data[laye_off+i : laye_off+i+16]
if not row: break
hex_p = ' '.join(f'{b:02X}' for b in row)
interp = []
for j in range(0, len(row)-3, 4):
u = struct.unpack_from('<I', row, j)[0]
f = struct.unpack_from('<f', row, j)[0]
interp.append(f"0x{u:08X}/f={f:.5g}")
print(f" +0x{i:02X} {hex_p:<48} {' | '.join(interp)}")
print()
# Dump Mode section
mode_off = data.find(b'Mode')
if mode_off >= 0:
print(f"Mode raw (first 96 bytes from 0x{mode_off:06X}):")
for i in range(0, 96, 16):
row = data[mode_off+i : mode_off+i+16]
if not row: break
hex_p = ' '.join(f'{b:02X}' for b in row)
interp = []
for j in range(0, len(row)-3, 4):
u = struct.unpack_from('<I', row, j)[0]
f = struct.unpack_from('<f', row, j)[0]
interp.append(f"0x{u:08X}/f={f:.5g}")
print(f" +0x{i:02X} {hex_p:<48} {' | '.join(interp)}")
print()