79 lines
2.2 KiB
Python
79 lines
2.2 KiB
Python
import pvs_src
|
|
import pvs_dst
|
|
import pvs_dst_bits
|
|
from pprint import pprint
|
|
|
|
code = [
|
|
0xf00203,
|
|
0xd10001,
|
|
0x1248001,
|
|
0x1248001
|
|
]
|
|
|
|
# Radeon Compiler Program
|
|
# 0: MOV output[1].xyz, input[1].xyz_;
|
|
# 1: MOV output[0], input[0].xyz1;
|
|
# Final vertex program code:
|
|
# 0: op: 0x00702203 dst: 1o op: VE_ADD
|
|
# src0: 0x01d10021 reg: 1i swiz: X/ Y/ Z/ U
|
|
# src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0
|
|
# src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0
|
|
# 1: op: 0x00f00203 dst: 0o op: VE_ADD
|
|
# src0: 0x01510001 reg: 0i swiz: X/ Y/ Z/ 1
|
|
# src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0
|
|
# src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0
|
|
code = [
|
|
0x00702203,
|
|
0x01d10021,
|
|
0x01248021,
|
|
0x01248021,
|
|
0x00f00203,
|
|
0x01510001,
|
|
0x01248001,
|
|
0x01248001,
|
|
]
|
|
|
|
def out(level, *args):
|
|
sys.stdout.write(" " * level + " ".join(args))
|
|
|
|
def parse_code(code):
|
|
|
|
ix = 0
|
|
|
|
pvs_dst_maxlen = max(len(k) for k, _ in pvs_dst.table)
|
|
print(pvs_dst_maxlen)
|
|
|
|
while ix < len(code):
|
|
print(f"ix: {ix // 4}")
|
|
dst_op = code[ix + 0]
|
|
src_op0 = code[ix + 1]
|
|
src_op1 = code[ix + 2]
|
|
src_op2 = code[ix + 3]
|
|
print(f" dst: {dst_op:08x}")
|
|
for name, parse in pvs_dst.table:
|
|
namepad = name.ljust(pvs_dst_maxlen + 1)
|
|
value = parse(dst_op)
|
|
if name == "OPCODE":
|
|
if pvs_dst.MATH_INST(dst_op):
|
|
print(" ", namepad, pvs_dst_bits.MATH_OPCODE[value])
|
|
else:
|
|
print(" ", namepad, pvs_dst_bits.VECTOR_OPCODE[value])
|
|
elif name == "REG_TYPE":
|
|
print(" ", namepad, pvs_dst_bits.PVS_DST_REG[value])
|
|
else:
|
|
print(" ", namepad, value)
|
|
|
|
print(f" src0: {src_op0:08x}")
|
|
for name, parse in pvs_src.table:
|
|
print(" ", name, parse(src_op0))
|
|
print(f" src1: {src_op1:08x}")
|
|
for name, parse in pvs_src.table:
|
|
print(" ", name, parse(src_op1))
|
|
print(f" src2: {src_op2:08x}")
|
|
for name, parse in pvs_src.table:
|
|
print(" ", name, parse(src_op2))
|
|
|
|
ix += 4
|
|
|
|
parse_code(code)
|