From 6c2363020930f22472915478b79451f713131460 Mon Sep 17 00:00:00 2001 From: Little-data <53138165+Little-Data@users.noreply.github.com> Date: Wed, 24 Jul 2024 16:50:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=A0=E4=BD=95=E5=8F=98=E6=8D=A2=E5=BC=95?= =?UTF-8?q?=E6=93=8E=EF=BC=88GTE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Little-data <53138165+Little-Data@users.noreply.github.com> --- docs/_sidebar.md | 3 +- .../20240724151939.png" | Bin 0 -> 142906 bytes docs/doc/PSX_introduces_CN/ps_gte_UTF-8.html | 2230 +++++++++++++++++ ...346\223\216\357\274\210GTE\357\274\211.md" | 429 ++++ docs/index.html | 7 +- .../Summary_of_Computer_File_Attributes.md | 221 +- 6 files changed, 2791 insertions(+), 99 deletions(-) create mode 100644 "docs/doc/PSX_introduces_CN/img/\345\207\240\344\275\225\345\217\230\346\215\242\345\274\225\346\223\216\357\274\210GTE\357\274\211/20240724151939.png" create mode 100644 docs/doc/PSX_introduces_CN/ps_gte_UTF-8.html create mode 100644 "docs/doc/PSX_introduces_CN/\345\207\240\344\275\225\345\217\230\346\215\242\345\274\225\346\223\216\357\274\210GTE\357\274\211.md" diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 275f61b..97099fe 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -13,4 +13,5 @@ * PSX介绍中文版 * [中央处理器(CPU)R3000A](/doc/PSX_introduces_CN/中央处理器(CPU)R3000A.md) * [内存](/doc/PSX_introduces_CN/内存.md) - * [图形处理芯片](/doc/PSX_introduces_CN/图形处理芯片(GPU).md) \ No newline at end of file + * [图形处理芯片](/doc/PSX_introduces_CN/图形处理芯片(GPU).md) + * [几何变换引擎(GTE)](/doc/PSX_introduces_CN/几何变换引擎(GTE).md) \ No newline at end of file diff --git "a/docs/doc/PSX_introduces_CN/img/\345\207\240\344\275\225\345\217\230\346\215\242\345\274\225\346\223\216\357\274\210GTE\357\274\211/20240724151939.png" "b/docs/doc/PSX_introduces_CN/img/\345\207\240\344\275\225\345\217\230\346\215\242\345\274\225\346\223\216\357\274\210GTE\357\274\211/20240724151939.png" new file mode 100644 index 0000000000000000000000000000000000000000..510c05085626379fec48682f89fd1b083c526b12 GIT binary patch literal 142906 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%0A(!#XU8NET1{i&oom@WXx>zb@$5 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 + + + + 几何变换引擎(GTE) + + +

几何变换引擎(GTE)

+ + + + +
名称 + 周期 + 命令 + 描述 +
DPCT + 17 + cop2 0x0F8002A + 深度化颜色RGB0,RGB1,RGB2 +
字段 + 无 +
+ + + + + +
输入 +
IR0 + 插值值 + 1,3,12 +
RGB0,RGB1,RGB2 + RGB FIFO中的颜色。 Rn,Gn,Bn,CDn + 0,8,0 +
FC + 远颜色  RFC,GFC,BFC + 1,27,4 +
+ + + + + +
输出 +
RGBn + RGB FIFO     Rn,Gn,Bn,CDn + 0,8,0 +
[IR1,IR2,IR3] + 颜色向量 + 1,11,4 +
[MAC1,MAC2,MAC3] + 颜色向量 + 1,27,4 +
+ + + + + + + + + + + + + +
计算 +
1,27,4 + MAC1=A1[R0+ IR0*(Lm_B1[RFC - + R0])] + 1,27,16   lm=0 +
1,27,4 + MAC2=A2[G0+ IR0*(Lm_B1[GFC - + G0])] + 1,27,16   lm=0 +
1,27,4 + MAC3=A3[B0+ IR0*(Lm_B1[BFC - + B0])] + 1,27,16   lm=0 +
1,11,4 + IR1= Lm_B1[MAC1] + 1,27,4    lm=0 +
1,11,4 + IR2= Lm_B2[MAC2] + 1,27,4    lm=0 +
1,11,4 + IR3= Lm_B3[MAC3] + 1,27,4    lm=0 +
0,8,0 + Cd0<-Cd1<-Cd2<- CODE +   +
0,8,0 + R0<-R1<-R2<- Lm_C1[MAC1] + 1,27,4 +
0,8,0 + G0<-G1<-G2<- + Lm_C2[MAC2] + 1,27,4 +
0,8,0 + B0<-B1<-B2<- + Lm_C3[MAC3] + 1,27,4 +
执行这个计算3次,所有3个RGB颜色都被深度化RGB颜色替换 +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
INTPL + 8 + cop2 0x0980011 + 向量和远颜色插值 +
字段 + 无 +
+ + + + + + +
输入 +
[IR1,IR2,IR3] + 向量 + 1,3,12 +
IR0 + 插值值 + 1,3,12 +
CODE + 由RGB得到的颜色。   CODE + 0,8,0 +
FC + 远颜色  RFC,GFC,BFC + 1,27,4 +
+ + + + + +
输出 +
RGBn + RGB FIFO     Rn,Gn,Bn,CDn + 0,8,0 +
[IR1,IR2,IR3] + 颜色向量 + 1,11,4 +
[MAC1,MAC2,MAC3] + 颜色向量 + 1,27,4 +
+ + + + + + + + + + + + +
计算 +
1,27,4 + MAC1=A1[IR1 + IR0*(Lm_B1[RFC - + IR1])] + 1,27,16 +
1,27,4 + MAC2=A2[IR2 + IR0*(Lm_B1[GFC - + IR2])] + 1,27,16 +
1,27,4 + MAC3=A3[IR3 + IR0*(Lm_B1[BFC - + IR3])] + 1,27,16 +
1,11,4 + IR1= Lm_B1[MAC1] + 1,27,4 +
1,11,4 + IR2= Lm_B2[MAC2] + 1,27,4 +
1,11,4 + IR3= Lm_B3[MAC3] + 1,27,4 +
0,8,0 + Cd0<-Cd1<-Cd2<- CODE +   +
0,8,0 + R0<-R1<-R2<- Lm_C1[MAC1] + 1,27,4 +
0,8,0 + G0<-G1<-G2<- + Lm_C2[MAC2] + 1,27,4 +
0,8,0 + B0<-B1<-B2<- + Lm_C3[MAC3] + 1,27,4 +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
SQR + 5 + cop2 0x0A00428 + 向量平方 +
字段 + sf +
+ + + +
输入 +
[IR1,IR2,IR3] + 向量 + 1,15,0或者1,3,12 +
+ + + + +
输出 +
[IR1,IR2,IR3] + 向量^2 + 1,15,0或者1,3,12 +
[MAC1,MAC2,MAC3] + 向量^2 + 1,15,0或者1,3,12 +
+ + + + + + + + +
计算:左边格式sf=0,右边格式sf=1 +
1,31,0或者1,19,12 + MAC1=A1[IR1*IR1] + 1,43,0或者1,31,12 +
1,31,0或者1,19,12 + MAC2=A2[IR2*IR2] + 1,43,0或者1,31,12 +
1,31,0或者1,19,12 + MAC3=A3[IR3*IR3] + 1,43,0或者1,31,12 +
1,15,0或者1,3,12 + IR1= Lm_B1[MAC1] + 1,31,0或者1,19,12    + lm=1 +
1,15,0或者1,3,12 + IR2= Lm_B2[MAC2] + 1,31,0或者1,19,12    + lm=1 +
1,15,0或者1,3,12 + IR3= Lm_B3[MAC3] + 1,31,0或者1,19,12    + lm=1 +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
NCS + 14 + cop2 0x0C8041E + 法颜色V0 +
字段 + 无 +
+ + + + + + + +
输入 +
V0 + 法颜色 + 1,3,12 +
BK + 背景颜色 RGB,GBK,RBK + 1,19,12 +
CODE + 由RGB得到的颜色值  CODE + 0,8,0 +
LCM + 颜色矩阵 + 1,3,12 +
LLM + 光源矩阵 + 1,3,12 +
+ + + + + +
输出 +
RGBn + RGB FIFO   Rn,Gn,Bn,CDn + 0,8,0 +
[IR1,IR2,IR3] + 颜色向量 + 1,11,4 +
[MAC1,MAC2,MAC3] + 颜色向量 + 1,27,4 +
+ + + + + + + + + + + + + + + + + + +
计算: +
1,19,12 + MAC1=A1[L11*VX0 + L12*VY0 + + L13*VZ0] + 1,19,24 +
1,19,12 + MAC2=A2[L21*VX0 + L22*VY0 + + L23*VZ0] + 1,19,24 +
1,19,12 + MAC3=A3[L31*VX0 + L32*VY0 + + L33*VZ0] + 1,19,24 +
1,3,12 + IR1= Lm_B1[MAC1] + 1,19,12    + lm=1 +
1,3,12 + IR2= Lm_B2[MAC2] + 1,19,12    + lm=1 +
1,3,12 + IR3= Lm_B3[MAC3] + 1,19,12    + lm=1 +
1,19,12 + MAC1=A1[RBK + LR1*IR1 + + LR2*IR2 + LR3*IR3] + 1,19,24 +
1,19,12 + MAC2=A2[GBK + LG1*IR1 + + LG2*IR2 + LG3*IR3] + 1,19,24 +
1,19,12 + MAC3=A3[BBK + LB1*IR1 + + LB2*IR2 + LB3*IR3] + 1,19,24 +
1,3,12 + IR1= Lm_B1[MAC1] + 1,19,12    + lm=1 +
1,3,12 + IR2= Lm_B2[MAC2] + 1,19,12    + lm=1 +
1,3,12 + IR3= Lm_B3[MAC3] + 1,19,12    + lm=1 +
0,8,0 + Cd0<-Cd1<-Cd2<- CODE +   +
0,8,0 + R0<-R1<-R2<- Lm_C1[MAC1] + 1,27,4 +
0,8,0 + G0<-G1<-G2<- + Lm_C2[MAC2] + 1,27,4 +
0,8,0 + B0<-B1<-B2<- + Lm_C3[MAC3] + 1,27,4 +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
NCT + 30 + cop2 0x0D80420 + 法颜色V0,V1,V2 +
字段 + 无 +
+ + + + + + + +
输入 +
V0,V1,V2 + 法向量 + 1,3,12 +
BK + 背景颜色 RGB,GBK,RBK + 1,19,12 +
CODE + 由RGB得到的颜色值  CODE + 0,8,0 +
LCM + 颜色矩阵 + 1,3,12 +
LLM + 光源矩阵 + 1,3,12 +
+ + + + + +
输出 +
RGBn + RGB FIFO   Rn,Gn,Bn,CDn + 0,8,0 +
[IR1,IR2,IR3] + 颜色向量 + 1,11,4 +
[MAC1,MAC2,MAC3] + 颜色向量 + 1,27,4 +
+ + + +
计算: +
和NCS一样,但是重复V1和V2 +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
NCDS + 19 + cop2 0x0E80413 + 法颜色深度化 +
字段 + 无 +
+ + + + + + + + +
输入 +
V0 + 法颜色 + 1,3,12 +
BK + 背景颜色 RGB,GBK,RBK + 1,19,12 +
RGB + 主颜色      R,G,B,CODE + 0,8,0 +
LCM + 颜色矩阵 + 1,3,12 +
LLM + 光源矩阵 + 1,3,12 +
IR0 + 插值值 + 1,3,12 +
+ + + + + +
输出 +
RGBn + RGB FIFO   Rn,Gn,Bn,CDn + 0,8,0 +
[IR1,IR2,IR3] + 颜色向量 + 1,11,4 +
[MAC1,MAC2,MAC3] + 颜色向量 + 1,27,4 +
+ + + + + + + + + + + + + + + + + + + + + + + + +
计算: +
1,19,12 + MAC1=A1[L11*VX0 + L12*VY0 + + L13*VZ0] + 1,19,24 +
1,19,12 + MAC2=A2[L21*VX0 + L22*VY0 + + L23*VZ0] + 1,19,24 +
1,19,12 + MAC3=A3[L31*VX0 + L32*VY0 + + L33*VZ0] + 1,19,24 +
1,3,12 + IR1= Lm_B1[MAC1] + 1,19,12    + lm=1 +
1,3,12 + IR2= Lm_B2[MAC2] + 1,19,12    + lm=1 +
1,3,12 + IR3= Lm_B3[MAC3] + 1,19,12    + lm=1 +
1,19,12 + MAC1=A1[RBK + LR1*IR1 + + LR2*IR2 + LR3*IR3] + 1,19,24 +
1,19,12 + MAC2=A2[GBK + LG1*IR1 + + LG2*IR2 + LG3*IR3] + 1,19,24 +
1,19,12 + MAC3=A3[BBK + LB1*IR1 + + LB2*IR2 + LB3*IR3] + 1,19,24 +
1,3,12 + IR1= Lm_B1[MAC1] + 1,19,12    + lm=1 +
1,3,12 + IR2= Lm_B2[MAC2] + 1,19,12    + lm=1 +
1,3,12 + IR3= Lm_B3[MAC3] + 1,19,12    + lm=1 +
1,27,4 + MAC1=A1[R*IR1 + + IR0*(Lm_B1[RFC-R*IR1])] + 1,27,16  lm=0 +
1,27,4 + MAC2=A1[G*IR2 + + IR0*(Lm_B2[GFC-G*IR2])] + 1,27,16  lm=0 +
1,27,4 + MAC3=A1[B*IR3 + + IR0*(Lm_B3[BFC-B*IR3])] + 1,27,16  lm=0 +
1,3,12 + IR1= Lm_B1[MAC1] + 1,27,4    lm=1 +
1,3,12 + IR2= Lm_B2[MAC2] + 1,27,4    lm=1 +
1,3,12 + IR3= Lm_B3[MAC3] + 1,27,4    lm=1 +
0,8,0 + Cd0<-Cd1<-Cd2<- CODE +   +
0,8,0 + R0<-R1<-R2<- Lm_C1[MAC1] + 1,27,4 +
0,8,0 + G0<-G1<-G2<- + Lm_C2[MAC2] + 1,27,4 +
0,8,0 + B0<-B1<-B2<- + Lm_C3[MAC3] + 1,27,4 +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
NCDT + 44 + cop2 0x0F80416 + 法颜色深度化V0,V1,V2 +
字段 + 无 +
+ + + + + + + + + + + +
输入 +
V0 + 法颜色 + 1,3,12 +
V1 + 法颜色 + 1,3,12 +
V2 + 法颜色 + 1,3,12 +
BK + 背景颜色 RGB,GBK,RBK + 1,19,12 +
FC + 远颜色   RFC,GFC,RFC + 1,27,4 +
RGB + 主颜色      R,G,B,CODE + 0,8,0 +
LCM + 颜色矩阵 + 1,3,12 +
LLM + 光源矩阵 + 1,3,12 +
IR0 + 插值值 + 1,3,12 +
+ + + + + +
输出 +
RGBn + RGB FIFO   Rn,Gn,Bn,CDn + 0,8,0 +
[IR1,IR2,IR3] + 颜色向量 + 1,11,4 +
[MAC1,MAC2,MAC3] + 颜色向量 + 1,27,4 +
+ + + +
计算: +
和NCDS一样,但是重复V1和V2 +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
NCCS + 17 + cop2 0x108041B + 带颜色的法颜色 +
字段 + 无 +
+ + + + + + + +
输入 +
V0 + 法颜色 + 1,3,12 +
BK + 背景颜色 RGB,GBK,RBK + 1,19,12 +
RGB + 主颜色      R,G,B,CODE + 0,8,0 +
LCM + 颜色矩阵 + 1,3,12 +
LLM + 光源矩阵 + 1,3,12 +
+ + + + + +
输出 +
RGBn + RGB FIFO   Rn,Gn,Bn,CDn + 0,8,0 +
[IR1,IR2,IR3] + 颜色向量 + 1,11,4 +
[MAC1,MAC2,MAC3] + 颜色向量 + 1,27,4 +
+ + + + + + + + + + + + + + + + + + + + + + + + +
计算: +
1,19,12 + MAC1=A1[L11*VX0 + L12*VY0 + + L13*VZ0] + 1,19,24 +
1,19,12 + MAC2=A2[L21*VX0 + L22*VY0 + + L23*VZ0] + 1,19,24 +
1,19,12 + MAC3=A3[L31*VX0 + L32*VY0 + + L33*VZ0] + 1,19,24 +
1,3,12 + IR1= Lm_B1[MAC1] + 1,19,12    + lm=1 +
1,3,12 + IR2= Lm_B2[MAC2] + 1,19,12    + lm=1 +
1,3,12 + IR3= Lm_B3[MAC3] + 1,19,12    + lm=1 +
1,19,12 + MAC1=A1[RBK + LR1*IR1 + + LR2*IR2 + LR3*IR3] + 1,19,24 +
1,19,12 + MAC2=A2[GBK + LG1*IR1 + + LG2*IR2 + LG3*IR3] + 1,19,24 +
1,19,12 + MAC3=A3[BBK + LB1*IR1 + + LB2*IR2 + LB3*IR3] + 1,19,24 +
1,3,12 + IR1= Lm_B1[MAC1] + 1,19,12    + lm=1 +
1,3,12 + IR2= Lm_B2[MAC2] + 1,19,12    + lm=1 +
1,3,12 + IR3= Lm_B3[MAC3] + 1,19,12    + lm=1 +
1,27,4 + MAC1=A1[R*IR1] + 1,27,16 +
1,27,4 + MAC2=A2[G*IR2] + 1,27,16 +
1,27,4 + MAC3=A3[B*IR3] + 1,27,16 +
1,3,12 + IR1= Lm_B1[MAC1] + 1,27,4    lm=1 +
1,3,12 + IR2= Lm_B2[MAC2] + 1,27,4    lm=1 +
1,3,12 + IR3= Lm_B3[MAC3] + 1,27,4    lm=1 +
0,8,0 + Cd0<-Cd1<-Cd2<- CODE +   +
0,8,0 + R0<-R1<-R2<- Lm_C1[MAC1] + 1,27,4 +
0,8,0 + G0<-G1<-G2<- + Lm_C2[MAC2] + 1,27,4 +
0,8,0 + B0<-B1<-B2<- + Lm_C3[MAC3] + 1,27,4 +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
NCCT + 39 + cop2 0x118043F + 带颜色的法颜色V0,V1,V2 +
字段 + 无 +
+ + + + + + + + + +
输入 +
V0 + 法向量 + 1,3,12 +
V1 + 法向量 + 1,3,12 +
V2 + 法向量 + 1,3,12 +
BK + 背景颜色 RGB,GBK,RBK + 1,19,12 +
RGB + 主颜色      R,G,B,CODE + 0,8,0 +
LCM + 颜色矩阵 + 1,3,12 +
LLM + 光源矩阵 + 1,3,12 +
+ + + + + +
输出 +
RGBn + RGB FIFO   Rn,Gn,Bn,CDn + 0,8,0 +
[IR1,IR2,IR3] + 颜色向量 + 1,11,4 +
[MAC1,MAC2,MAC3] + 颜色向量 + 1,27,4 +
+ + + +
计算: +
和NCCS一样,但是重复V1和V2 +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
CDP + 13 + cop2 0x1280414 + 颜色深度查询 +
字段 + 无 +
+ + + + + + + + +
输入 +
[IR1,IR2,IR3] + 向量 + 1,3,12 +
RGB + 主颜色      R,G,B,CODE + 0,8,0 +
IR0 + 插值值 + 1,3,12 +
BK + 背景颜色 RGB,GBK,RBK + 1,19,12 +
LCM + 颜色矩阵 + 1,3,12 +
FC + 远颜色   RFC,GFC,RFC + 1,27,4 +
+ + + + + +
输出 +
RGBn + RGB FIFO   Rn,Gn,Bn,CDn + 0,8,0 +
[IR1,IR2,IR3] + 颜色向量 + 1,11,4 +
[MAC1,MAC2,MAC3] + 颜色向量 + 1,27,4 +
+ + + + + + + + + + + + + + + + + + +
计算: +
1,19,12 + MAC1=A1[RBK + LR1*IR1 + + LR2*IR2 + LR3*IR3] + 1,19,24 +
1,19,12 + MAC2=A2[GBK + LG1*IR1 + + LG2*IR2 + LG3*IR3] + 1,19,24 +
1,19,12 + MAC3=A3[BBK + LB1*IR1 + + LB2*IR2 + LB3*IR3] + 1,19,24 +
1,3,12 + IR1= Lm_B1[MAC1] + 1,19,12    + lm=1 +
1,3,12 + IR2= Lm_B2[MAC2] + 1,19,12    + lm=1 +
1,3,12 + IR3= Lm_B3[MAC3] + 1,19,12    + lm=1 +
1,27,4 + MAC1=A1[R*IR1 + + IR0*(Lm_B1[RFC-R*IR1])] + 1,27,16  lm=0 +
1,27,4 + MAC2=A2[G*IR2 + IR0*(Lm_B2[GFC-G*IR2])] + 1,27,16  lm=0 +
1,27,4 + MAC3=A3[B*IR3 + + IR0*(Lm_B3[BFC-B*IR3])] + 1,27,16  lm=0 +
1,3,12 + IR1= Lm_B1[MAC1] + 1,27,4    lm=1 +
1,3,12 + IR2= Lm_B2[MAC2] + 1,27,4    lm=1 +
1,3,12 + IR3= Lm_B3[MAC3] + 1,27,4    lm=1 +
0,8,0 + Cd0<-Cd1<-Cd2<- CODE +   +
0,8,0 + R0<-R1<-R2<- Lm_C1[MAC1] + 1,27,4 +
0,8,0 + G0<-G1<-G2<- + Lm_C2[MAC2] + 1,27,4 +
0,8,0 + B0<-B1<-B2<- + Lm_C3[MAC3] + 1,27,4 +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
CC + 11 + cop2 0x138041C + 从光源向量和一个基本颜色计算一个颜色 +
字段 + 无 +
+ + + + + + +
输入 +
[IR1,IR2,IR3] + 向量 + 1,3,12 +
BK + 背景颜色 RGB,GBK,RBK + 1,19,12 +
RGB + 主颜色      R,G,B,CODE + 0,8,0 +
LCM + 颜色矩阵 + 1,3,12 +
+ + + + + +
输出 +
RGBn + RGB FIFO   Rn,Gn,Bn,CDn + 0,8,0 +
[IR1,IR2,IR3] + 颜色向量 + 1,11,4 +
[MAC1,MAC2,MAC3] + 颜色向量 + 1,27,4 +
+ + + + + + + + + + + + + + + + + + +
计算: +
1,19,12 + MAC1=A1[RBK + LR1*IR1 + + LR2*IR2 + LR3*IR3] + 1,19,24 +
1,19,12 + MAC2=A2[GBK + LG1*IR1 + + LG2*IR2 + LG3*IR3] + 1,19,24 +
1,19,12 + MAC3=A3[BBK + LB1*IR1 + + LB2*IR2 + LB3*IR3] + 1,19,24 +
1,3,12 + IR1= Lm_B1[MAC1] + 1,19,12    + lm=1 +
1,3,12 + IR2= Lm_B2[MAC2] + 1,19,12    + lm=1 +
1,3,12 + IR3= Lm_B3[MAC3] + 1,19,12    + lm=1 +
1,27,4 + MAC1=A1[R*IR1] + 1,27,16 +
1,27,4 + MAC2=A2[G*IR2] + 1,27,16 +
1,27,4 + MAC3=A3[B*IR3] + 1,27,16 +
1,3,12 + IR1= Lm_B1[MAC1] + 1,27,4    lm=1 +
1,3,12 + IR2= Lm_B2[MAC2] + 1,27,4    lm=1 +
1,3,12 + IR3= Lm_B3[MAC3] + 1,27,4    lm=1 +
0,8,0 + Cd0<-Cd1<-Cd2<- CODE +   +
0,8,0 + R0<-R1<-R2<- Lm_C1[MAC1] + 1,27,4 +
0,8,0 + G0<-G1<-G2<- + Lm_C2[MAC2] + 1,27,4 +
0,8,0 + B0<-B1<-B2<- + Lm_C3[MAC3] + 1,27,4 +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
NCLIP + 8 + cop2 0x1400006 + 法向剪切 +
字段 + 无 +
+ + + +
输入 +
SXY0,SXY1,SXY2 + 屏幕坐标 + 1,15,0 +
+ + + +
输出 +
MAC0 + SXY1和SXY2的外积,SXY0保持原状 + 1,31,0 +
+ + + +
计算: +
1,31,0 + MAC0 = + F[SX0*SY1+SX1*SY2+SX2*SY0-SX0*SY2-SX1*SY0-SX2*SY1] + 1,43,0 +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
AVSZ3 + 5 + cop2 0x158002D + 3个Z值平均 +
字段 + 无 +
+ + + + +
输入 +
SZ1,SZ2,SZ3 + Z值 + 0,16,0 +
ZSF3 + 除数 + 1,3,12 +
+ + + + +
输出 +
OTZ + 平均 + 0,16,0 +
MAC0 + 平均 + 1,31,0 +
+ + + + +
计算: +
1,31,0 + MAC0=F[ZSF3*SZ1 + ZSF3*SZ2 + + ZSF3*SZ3] + 1,31,12 +
0,16,0 + OTZ=Lm_D[MAC0] + 1,31,0 +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
AVSZ4 + 6 + cop2 0x168002E + 4个Z值平均 +
字段 + 无 +
+ + + + +
输入 +
SZ1,SZ2,SZ3,SZ4 + Z值 + 0,16,0 +
ZSF4 + 除数 + 1,3,12 +
+ + + + +
输出 +
OTZ + 平均 + 0,16,0 +
MAC0 + 平均 + 1,31,0 +
+ + + + +
计算: +
1,31,0 + MAC0=F[ZSF4*SZ0 + ZSF4*SZ1 + + ZSF4*SZ2 + ZSF4*SZ3] + 1,31,12 +
0,16,0 + OTZ=Lm_D[MAC0] + 1,31,0 +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
OP + 6 + cop2 0x170000C + 外积 +
字段 + sf +
+ + + + +
输入 +
[R11R12,R22R23,R33] + 向量1 +   +
[IR1,IR2,IR3] + 向量2 +   +
+ + + + +
输出 +
[IR1,IR2,IR3] + 外积 +   +
[MAC1,MAC2,MAC3] + 外积 +   +
+ + + + + + + + +
计算:(D1=R11R12,D2=R22R23,D3=R33) +
  + MAC1=A1[D2*IR3 - D3*IR2] +   +
  + MAC2=A2[D3*IR1 - D1*IR3] +   +
  + MAC3=A3[D1*IR2 - D2*IR1] +   +
  + IR1=Lm_B1[MAC1] +   +
  + IR2=Lm_B2[MAC2] +   +
  + IR3=Lm_B3[MAC3] +   +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
GPF + 6 + cop2 0x190003D + 通用目的插值 +
字段 + sf +
+ + + + + +
输入 +
IR0 + 缩放因子 +   +
CODE + RGB代码段 +   +
[IR1,IR2,IR3] + 向量 +   +
+ + + + + +
输出 +
[IR1,IR2,IR3] + 向量 +   +
[MAC1,MAC2,MAC3] + 向量 +   +
RGB2 + RGB信息 +   +
+ + + + + + + + + + + + +
计算: +
  + MAC1=A1[IR0 * IR1] +   +
  + MAC2=A2[IR0 * IR2] +   +
  + MAC3=A3[IR0 * IR3] +   +
  + IR1=Lm_B1[MAC1] +   +
  + IR2=Lm_B2[MAC2] +   +
  + IR3=Lm_B3[MAC3] +   +
0,8,0 + Cd0<-Cd1<-Cd2<- CODE +   +
0,8,0 + R0<-R1<-R2<- Lm_C1[MAC1] +   +
0,8,0 + G0<-G1<-G2<- + Lm_C2[MAC2] +   +
0,8,0 + B0<-B1<-B2<- + Lm_C3[MAC3] +   +
+

  + + + + +
名称 + 周期 + 命令 + 描述 +
GPL + 5 + cop2 0x1A0003E + 通用目的插值 +
字段 + sf +
+ + + + + + +
输入 +
IR0 + 缩放因子 +   +
CODE + RGB代码段 +   +
[IR1,IR2,IR3] + 向量 +   +
[MAC1,MAC2,MAC3] + 向量 +   +
+ + + + + +
输出 +
[IR1,IR2,IR3] + 向量 +   +
[MAC1,MAC2,MAC3] + 向量 +   +
RGB2 + RGB信息 +   +
+ + + + + + + + + + + + +
计算: +
  + MAC1=A1[MAC1 + IR0 * IR1] +   +
  + MAC2=A2[MAC2 + IR0 * IR2] +   +
  + MAC3=A3[MAC3 + IR0 * IR3] +   +
  + IR1=Lm_B1[MAC1] +   +
  + IR2=Lm_B2[MAC2] +   +
  + IR3=Lm_B3[MAC3] +   +
0,8,0 + Cd0<-Cd1<-Cd2<- CODE +   +
0,8,0 + R0<-R1<-R2<- Lm_C1[MAC1] +   +
0,8,0 + G0<-G1<-G2<- + Lm_C2[MAC2] +   +
0,8,0 + B0<-B1<-B2<- + Lm_C3[MAC3] +   +
+

 
+
字段描述
+ + + +
24   20 + 19 + 18   17 + 16   15 + 14   13 + 12   11 + 10 + 9     0 +
  + sf + mx + v + cv +   + lm +   +
+ + + +
sf + 0 + 向量格式(1,31,0) +
1 + 向量格式(1,19,12) +
+ + + + + +
mx + 0 + 乘以旋转矩阵 +
1 + 乘以光源矩阵 +
2 + 乘以颜色矩阵 +
3 + 未知 +
+ + + + + +
v + 0 + V0 源矩阵(短) +
1 + V1 源矩阵(短) +
2 + V2 源矩阵(短) +
3 + IR 源矩阵(长) +
+ + + + + +
cv + 0 + 加平移向量 +
1 + 加背景颜色向量 +
2 + 未知 +
3 + 不加向量 +
+ + + +
lm + 0 + 没有负值限制 +
1 + 限制负值到0 +
+
+
通用MVMVA指令列表
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 名称 + + 周期数 + + 命令 + + 描述 +
+ rtv0 + + - + + cop2 + 0x0486012 + + v0×旋转矩阵 +
+ rtv1 + + - + + cop2 + 0x048E012 + + v1×旋转矩阵 +
+ rtv2 + + - + + cop2 + 0x0496012 + + v2×旋转矩阵 +
+ rtir12 + + - + + cop2 + 0x049E012 + + ir×旋转矩阵 +
+ rtir0 + + - + + cop2 + 0x041E012 + + ir×旋转矩阵 +
+ rtv0tr + + - + + cop2 + 0x0480012 + + v0×旋转矩阵+平移向量 +
+ rtv1tr + + - + + cop2 + 0x0488012 + + v1×旋转矩阵+平移向量 +
+ rtv2tr + + - + + cop2 + 0x0490012 + + v2×旋转矩阵+平移向量 +
+ rtirtr + + - + + cop2 + 0x0498012 + + ir×旋转矩阵+平移向量 +
+ rtv0bk + + - + + cop2 + 0x0482012 + + v0×旋转矩阵+背景向量 +
+ rtv1bk + + - + + cop2 + 0x048A012 + + v1×旋转矩阵+背景向量 +
+ rtv2bk + + - + + cop2 + 0x0492012 + + v2×旋转矩阵+背景向量 +
+ rtirbk + + - + + cop2 + 0x049A012 + + ir×旋转矩阵+背景向量 +
+ ll + + - + + cop2 + 0x04A6412 + + v0×光源矩阵。下限为0 +
+ llv0 + + - + + cop2 + 0x04A6012 + + v0×光源矩阵 +
+ llv1 + + - + + cop2 + 0x04AE012 + + v1×光源矩阵 +
+ llv2 + + - + + cop2 + 0x04B6012 + + v2×光源矩阵 +
+ llvir + + - + + cop2 + 0x04BE012 + + ir×光源矩阵 +
+ llv0tr + + - + + cop2 + 0x04A0012 + + v0×光源矩阵+平移矩阵 +
+ llv1tr + + - + + cop2 + 0x04A8012 + + v1×光源矩阵+平移矩阵 +
+ llv2tr + + - + + cop2 + 0x04B0012 + + v2×光源矩阵+平移矩阵 +
+ llirtr + + - + + cop2 + 0x04B8012 + + ir×光源矩阵+平移矩阵 +
+ llv0bk + + - + + cop2 + 0x04A2012 + + v0×光源矩阵+背景向量 +
+ llv1bk + + - + + cop2 + 0x04AA012 + + v1×光源矩阵+背景向量 +
+ llv2bk + + - + + cop2 + 0x04B2012 + + v2×光源矩阵+背景向量 +
+ llirbk + + - + + cop2 + 0x04BA012 + + ir×光源矩阵+背景向量 +
+ lc + + - + + cop2 + 0x04DA412 + + v0×颜色矩阵。下限为0 +
+ lcv0 + + - + + cop2 + 0x04C6012 + + v0×颜色矩阵 +
+ lcv1 + + - + + cop2 + 0x04CE012 + + v1×颜色矩阵 +
+ lcv2 + + - + + cop2 + 0x04D6012 + + v2×颜色矩阵 +
+ lcvir + + - + + cop2 + 0x04DE012 + + ir×颜色矩阵 +
+ lcv0tr + + - + + cop2 + 0x04C0012 + + v0×颜色矩阵+平移矩阵 +
+ lcv1tr + + - + + cop2 + 0x04C8012 + + v1×颜色矩阵+平移矩阵 +
+ lcv2tr + + - + + cop2 + 0x04D0012 + + v2×颜色矩阵+平移矩阵 +
+ lcirtr + + - + + cop2 + 0x04D8012 + + ir×颜色矩阵+平移矩阵 +
+ lev0bk + + - + + cop2 + 0x04C2012 + + v0×颜色矩阵+平移矩阵 +
+ lev1bk + + - + + cop2 + 0x04CA012 + + v1×颜色矩阵+平移矩阵 +
+ lev2bk + + - + + cop2 + 0x04D2012 + + v2×颜色矩阵+平移矩阵 +
+ leirbk + + - + + cop2 + 0x04DA012 + + ir×颜色矩阵+平移矩阵 +
+
 
+
其他指令
+ + + + + + + + + + + +
+ 名称 + + 周期数 + + 命令 + + 描述 + + 格式 +
+ sqr12 + + - + + cop2 + 0x0A80428 + + ir平方 + + 1,19,12 +
+ sqr0 + + - + + cop2 + 0x0A80428 + + ir平方 + + 1,31, 0 +
+ op12 + + - + + cop2 + 0x178000C + + 外积 + + 1,19,12 +
+ op0 + + - + + cop2 + 0x170000C + + 外积 + + 1,31, 0 +
+ gpf12 + + - + + cop2 + 0x198003D + + 通用目的插值 + + 1,19,12 +
+ gpf0 + + - + + cop2 + 0x190003D + + 通用目的插值 + + 1,31, 0 +
+ gpl12 + + - + + cop2 + 0x1A8003E + + 通用目的插值 + + 1,19,12 +
+ gpl0 + + - + + cop2 + 0x1A0003E + + 通用目的插值 + + 1,31, 0 +
+ + + \ No newline at end of file diff --git "a/docs/doc/PSX_introduces_CN/\345\207\240\344\275\225\345\217\230\346\215\242\345\274\225\346\223\216\357\274\210GTE\357\274\211.md" "b/docs/doc/PSX_introduces_CN/\345\207\240\344\275\225\345\217\230\346\215\242\345\274\225\346\223\216\357\274\210GTE\357\274\211.md" new file mode 100644 index 0000000..cd445c6 --- /dev/null +++ "b/docs/doc/PSX_introduces_CN/\345\207\240\344\275\225\345\217\230\346\215\242\345\274\225\346\223\216\357\274\210GTE\357\274\211.md" @@ -0,0 +1,429 @@ +# 几何变换引擎(GTE) + +几何变换引擎(GTE)是PSX全部3D计算的核心。GTE可以进行向量和矩阵操作,视角变换,颜色均衡等等。它比CPU进行这些操作快得多,作为PSX的第二个协处理器,没有分配物理地址内存,所有的控制通过特殊指令完成。 + +## 基本算法 + +在3D空间中一个点(顶点)的描述是用一个向量[X,Y,Z]。在GTE操作中,有两种向量,一种是变长度的,另一种是1.0单元长度,叫做法向量。前者用来描述3D空间的一个位置和平移,第二个用来描述方向。 + +顶点的旋转是进行顶点向量和旋转矩阵的乘法。旋转矩阵是3×3的矩阵包含了3个正交法向量(它实际上是一个矩阵,描述了顶点所在的坐标系统和全局坐标系统的关系)。这个矩阵来自旋转角度,如下所示: + +$$ +sn=sin(n),cn=cos(n) +$$ + +绕X轴旋转角度A: + +| \|1 | 0 | 0\| | +| --- | --- | ----- | +| \|0 | cA | -sA\| | +| \|0 | sA | cA\| | + +绕Y轴旋转角度B: + +| \|cB | 0 | sB\| | +| ----- | --- | ---- | +| \|0 | 1 | 0\| | +| \|-sB | 0 | cB\| | + +绕Z轴旋转角度C: + +| \|cC | -sC | 0\| | +| ---- | --- | --- | +| \|sC | cC | 0\| | +| \|0 | 0 | 1\| | + +绕多个轴旋转可以通过这些矩阵相乘完成,注意相乘的顺序非常重要。GTE没有sin或者cos函数,所以这些计算要通过CPU完成。平移是简单的两个向量相加,在当前坐标系中重定位顶点,当然,顶点平移和旋转的顺序也是很重要的。 + +## 函数简要描述 + +| RTPS/RTPT | 旋转、平移和视角转换
这两个函数对1个或者3个顶点同时进行最终的3D计算。这些点先乘以旋转矩阵R再加上平移矩阵TR,最后应用一个视角转换,生成2D屏幕坐标。它也返回一个插值值用在各种深度化指令中。 | +| ----------- | ------------------------------------------------------------------------------------------------------- | +| MVMVA | 矩阵和向量乘法和加法

乘以一个向量和一个旋转矩阵或者光源矩阵或者颜色矩阵,然后加上平移向量或者背景颜色向量 | +| DCPL | 深度化光源颜色

先从光源向量(一个平面的法向量乘以光源矩阵后限制到零)和一个提供的RGB值计算出一个颜色。然后通过在远颜色向量和新得到的颜色之间插值来进行深度化。 | +| DPCS/DPCT | 单色/3色深度化

在一个颜色和远颜色向量之间插值对1个或者3个颜色进行深度化。 | +| INTPL | 插值

在一个向量和远颜色向量之间插值 | +| SQR | 平方

计算一个向量的平方 | +| NCS/CNT | 法向颜色

从一个点或平面的法向和光源和颜色计算一个颜色。法向参考的平面或点的基本颜色认为是白色 | +| NCDS/NCDT | 法向颜色深度化

和NCS/NCT类似,但是同时进行深度化(像DPCS/DPCT) | +| NCCS/NCCT | 和NCS/NCT类似,但是平面或点的基本颜色也计算在内 | +| CDP | 从光源向量(基本颜色当成白色)计算一个颜色和进行深度化(像DPCS) | +| CC | 从光源向量和一个基本颜色计算一个颜色 | +| NCLIP | 计算3个2D点的外积(例如投影后定义一个平面的3个顶点)

3个顶点相对于虚拟点应该按顺时针储存,这样如果我们面对平面的背面,函数的结果是负值 | +| AVSZ3/AVSZ4 | 累加3或者4个Z值,然后乘以一个固定点的值。这个值通常是经过挑选的,这样函数可以返回这些Z值的平均值(通常还要用2或者4去除一下,以便加到顺序表OT) | +| OP | 计算两个向量的外积 | +| GPF | 两个向量相乘。返回值作为24位RGB值 | +| GPL | 一个向量乘以一个标量后加到另一个向量。返回值作为24位RGB值 | + +## 指令 + +CPU有6个特别的针对GTE寄存器的装入和储存指令,一个指令用来向协处理器下达命令 + +| rt | CPU寄存器0-31 | +| --------- | ------------- | +| gd | GTE数据寄存器0-31 | +| gc | GTE控制寄存器0-31 | +| imm | 16位立即数 | +| base | CPU寄存器0-31 | +| imm(base) | base+imm指向的地址 | +| b25 | 25位字长数据段 | + +| LWC2 gd,imm(base) | 储存imm(base)的值到GTE数据寄存器gd | +| ----------------- | ------------------------ | +| SWC2 gd,imm(base) | 储存GTE数据寄存器到imm(base) | +| MTC2 rt,gd | 储存寄存器rt到GTE数据寄存器gd | +| MFC2 rt,gd | 储存GTE数据寄存器gd到寄存器rt | +| CTC2 rt,gc | 储存寄存器rt到GTE控制寄存器gc | +| CFC2 rt,gc | 储存GTE控制寄存器gc到寄存器rt | +| COP2 b25 | 执行GTE命令 | + +所有访问该寄存器的GTE命令和操作,GTE装入和储存指令有2个指令的延迟。 + +### 对GTE编程 + +使用GTE前要先打开它,在系统控制协处理器(cop0)的状态寄存器中分配了第30位给GTE。在使用任何GTE指令前,先要设置它。 + +GTE指令和函数不应该用在:跳转和分支的延迟中、事件处理和中断中。 + +如果在当前GTE命令未完成前读取GTE寄存器或者执行GTE命令,CPU会保持它知道指令完成。每个GTE指令所需的周期数在命令列表中显示。 + +## 寄存器 + +GTE有32个数据寄存器和32个控制寄存器,每个都是32字长。控制寄存器通称为Cop2C,数据寄存器称为Cop2D。下表描述了他们的用法。 + +**控制寄存器Cop2C** + +| 序号 | 名称 | 描述 | +| --- | ------ | ---------------- | +| 0 | R11R12 | 旋转矩阵元素11,12 | +| 1 | R13R21 | 旋转矩阵元素13,21 | +| 2 | R22R23 | 旋转矩阵元素22,23 | +| 3 | R31R32 | 旋转矩阵元素31,32 | +| 4 | R33 | 旋转矩阵元素33 | +| 5 | TRX | 旋转向量X | +| 6 | TRY | 旋转向量Y | +| 7 | TRZ | 旋转向量Z | +| 8 | L11L12 | 光源矩阵元素11,12 | +| 9 | L13L21 | 光源矩阵元素13,21 | +| 10 | L22L23 | 光源矩阵元素22,23 | +| 11 | L31L32 | 光源矩阵元素31,32 | +| 12 | L33 | 光源矩阵元素33 | +| 13 | RBK | 背景颜色红色分量 | +| 14 | BBK | 背景颜色蓝色分量 | +| 15 | GBK | 背景颜色绿色分量 | +| 16 | LR1LR2 | 光源颜色矩阵源1和2红色分量 | +| 17 | LR3LG1 | 光源颜色矩阵源3红色,1绿色分量 | +| 18 | LG2LG3 | 光源颜色矩阵源2和3绿色分量 | +| 19 | LB1LB2 | 光源颜色矩阵源1和2蓝色分量 | +| 20 | LB3 | 光源颜色矩阵源3蓝色分量 | +| 21 | RFC | 远颜色红色分量 | +| 22 | GFC | 远颜色绿色分量 | +| 23 | BFC | 远颜色蓝色分量 | +| 24 | OFX | 屏幕偏移X | +| 25 | OFY | 屏幕偏移Y | +| 26 | H | 投影平面距离 | +| 27 | DQA | 深度查询参数A(系数) | +| 28 | DQB | 深度查询参数B(偏移) | +| 29 | ZSF3 | Z3平均缩放因子(通常是1/3) | +| 30 | ZSF4 | Z4平均缩放因子(通常是1/4) | +| 31 | FLAG | 返回任何计算错误 | + +## 控制寄存器 + +GTE使用带符号定点寄存器进行运算,下面是寄存器字长描述。 + +![](./img/几何变换引擎(GTE)/20240724151939.png) + +标志寄存器 + +| 位 | 标志 | +| --- | ----------------------------------------- | +| 31 | 第30-23、18-13位的逻辑和 | +| 30 | 计算测试结果#1溢出(大于$2^{43}$) | +| 29 | 计算测试结果#2溢出(大于$2^{43}$) | +| 28 | 计算测试结果#3溢出(大于$2^{43}$) | +| 27 | 计算测试结果#1下溢出(小于-$2^{43}$) | +| 26 | 计算测试结果#2下溢出(小于-$2^{43}$) | +| 25 | 计算测试结果#3下溢出(小于-$2^{43}$) | +| 24 | 限制器A1超出范围(小于0,或者小于-$2^{15}$,或者大于$2^{15}$) | +| 23 | 限制器A2超出范围(小于0,或者小于-$2^{15}$,或者大于$2^{15}$) | +| 22 | 限制器A3超出范围(小于0,或者小于-$2^{15}$,或者大于$2^{15}$) | +| 21 | 限制器B1超出范围(小于0,或者大于$2^8$) | +| 20 | 限制器B2超出范围(小于0,或者大于$2^8$) | +| 19 | 限制器B3超出范围(小于0,或者大于$2^8$) | +| 18 | 限制器C超出范围(小于0,或者大于$2^{16}$) | +| 17 | 除法溢出(商大于等于2.0) | +| 16 | 计算测试结果#4溢出(大于$2^{43}$) | +| 15 | 计算测试结果#4下溢出(小于-$2^{43}$) | +| 14 | 限制器D1超出范围(小于-$2^{10}$,或者大于$2^{10}$) | +| 13 | 限制器D2超出范围(小于-$2^{10}$,或者大于$2^{10}$) | +| 12 | 限制器E超出范围(小于0,或者大于$2^{12}$) | + +## 数据寄存器 + +数据寄存器Cop2D + +| 序号 | 名字 | 读/写 | 31   16 | 15    0 | 定点数格式 | 描述 | +| --- | ---- | --- | ------- | -------- | -------------- | --------------------------- | +| 0 | VXY0 | R/W | VY0 | VX0 | 1,3,12或者1,15,0 | 向量0的X和Y | +| 1 | VZ0 | R/W | 0 | VZ0 | 1,3,12或者1,15,0 | 向量0的Z | +| 2 | VXY1 | R/W | VY1 | VX1 | 1,3,12或者1,15,0 | 向量1的X和Y | +| 3 | VZ1 | R/W | 0 | VZ1 | 1,3,12或者1,15,0 | 向量1的Z | +| 4 | VXY2 | R/W | VY2 | VX2 | 1,3,12或者1,15,0 | 向量2的X和Y | +| 5 | VZ2 | R/W | 0 | VZ2 | 1,3,12或者1,15,0 | 向量2的Z | +| 6 | RGB | R/W | Code,R | G,B | 每个8位 | RGB值,Code也传送但是不用在计算中 | +| 7 | OTZ | R | 0 | OTZ | 0,15,0 | Z平均值 | +| 8 | IR0 | R/W | 符号 | IR0 | 1,3,12 | 立即数0,格式可能不同 | +| 9 | IR1 | R/W | 符号 | IR1 | 1,3,12 | 立即数1,格式可能不同 | +| 10 | IR2 | R/W | 符号 | IR2 | 1,3,12 | 立即数2,格式可能不同 | +| 11 | IR3 | R/W | 符号 | IR3 | 1,3,12 | 立即数3,格式可能不同 | +| 12 | SXY0 | R/W | SX0 | SY0 | 1,15,0 | 屏幕XY坐标FIFO(注1) | +| 13 | SXY1 | R/W | SX1 | SY1 | 1,15,0 | 屏幕XY坐标FIFO(注1) | +| 14 | SXY2 | R/W | SX2 | SY2 | 1,15,0 | 屏幕XY坐标FIFO(注1) | +| 15 | SXYP | R/W | SXP | SYP | 1,15,0 | 屏幕XY坐标FIFO(注1) | +| 16 | SZ0 | R/W | 0 | SZ0 | 0,16,0 | 屏幕Z FIFO(注1) | +| 17 | SZ1 | R/W | 0 | SZ1 | 0,16,0 | 屏幕Z FIFO(注1) | +| 18 | SZ2 | R/W | 0 | SZ2 | 0,16,0 | 屏幕Z FIFO(注1) | +| 19 | SZ3 | R/W | 0 | SZ3 | 0,16,0 | 屏幕Z FIFO(注1) | +| 20 | RGB0 | R/W | CD0,B0 | G0,R0 | 每个8位 | 特征颜色FIFO(注1) | +| 21 | RGB1 | R/W | CD1,B1 | G1,R0 | 每个8位 | 特征颜色FIFO(注1) | +| 22 | RGB2 | R/W | CD2,B2 | G2,R0 | 每个8位 | 特征颜色FIFO(注1),CD2是当前执行函数的位图案 | +| 23 | RES1 | - | - | - | - | 禁止 | +| 24 | MAC0 | R/W | MAC0 | 1,31,0 | 乘积之和0 | | +| 25 | MAC1 | R/W | MAC1 | 1,31,0 | 乘积之和1 | | +| 26 | MAC2 | R/W | MAC2 | 1,31,0 | 乘积之和2 | | +| 27 | MAC3 | R/W | MAC3 | 1,31,0 | 乘积之和3 | | +| 28 | IRGB | W | 0 | IB,IG,IR | 注2 | 注2 | +| 29 | ORGB | R | 0 | OB,OG,OR | 注3 | 注3 | +| 30 | LZCS | W | LZCS | 1,31,0 | 源数据前导0计数(注4) | | +| 31 | LZCR | R | LZCR | 6,6,0 | 结果前导0计数(注4) | | + +**注1:** SXYx,SZx和RGBx是FIFO寄存器,最后计算的结果存在最后的寄存器,如果得到一个新的SXY值,下面的事情将会发生: + +    SXY0=SXY1 +    SXY1=SXY2 +    SXY2=SXYP +    SXYP=结果 + +**注2:** + +IRGB + +| 0 | R | G | B | +| ------- | ------- | ------ | ------ | +| 31   15 | 14   10 | 9    5 | 4    0 | + +当向IRGB写一个值时,发生下面的事情: + +IR1=IR格式转换到(1,11,4) +IR2=IG格式转换到(1,11,4) +IR3=IB格式转换到(1,11,4) + +**注3:** + +IRGB + +| 0 | R | G | B | +| ------- | ------- | ------ | ------ | +| 31   15 | 14   10 | 9    5 | 4    0 | + +当向IRGB写一个值时,发生下面的事情: + +IR=(IR1>>7)&0x1F +IG=(IR2>>7)&0x1F +IB=(IR3>>7)&0x1F + +**注4:** + +如果LZCS是正数,读取LZCR返回LZCS的前导0,如果是负数,返回前导1。 + +## GTE命令 + +这节描述各种GTE函数的实际进行的计算。第一行是函数的名字、周期数和简要描述,第二行包含了任何需要输入到操作码的字段,第三行是实际操作码。在列表的最后查看各字段和它们的描述。然后是一个需要输入的各个寄存器列表和输出的寄存器列表。再然后是初始化函数后进行的计算,左边格式字段是数据存放格式,右边格式字段是计算进行所需的格式。在计算的某时刻,会进行一些检查和限制,结果存在标志寄存器中,见前面的表。下面计算表中第二列内方括号的内容表示被前面的限制符限制,附加的限制标识器表示数值如果超出了范围就被限制到下限或上限。 + +| 名称 | 周期 | 命令 | 描述 | +| ---- | --- | -------------- | ---- | +| RTPS | 15 | cop2 0x0180001 | 视角转换 | +| 字段 | 无 | | | + +输入 + +| V0 | 转换向量 | 1,15,0 | +| --------------- | ------- | ------- | +| R | 旋转矩阵 | 1,3,12 | +| TR | 平移向量 | 1,31,0 | +| H | 视平面距离 | 0,16,0 | +| DQA

DQB | 深度查询插值值 | 1,7,8 | +| OFX

OFY | 屏幕平移值 | 1,15,16 | + +输出 + +| SXY FIFO | 屏幕XY坐标(短) | 1,15,0 | +| -------- | --------- | ------ | +| SZ FIFO | 屏幕Z坐标(短) | 0,16,0 | +| IR0 | 深度查询插值值 | 1,3,12 | +| IR1 | 屏幕X(短) | 1,15,0 | +| IR2 | 屏幕Y(短) | 1,15,0 | +| IR3 | 屏幕Z(短) | 1,15,0 | +| MAC1 | 屏幕X(长) | 1,31,0 | +| MAC2 | 屏幕Y(长) | 1,31,0 | +| MAC3 | 屏幕Z(长) | 1,31,0 | + +计算 + +| 1,31,0 | $MAC1=A1[TRX + R11VX0 + R12 \times VY0 + R13 \times VZ0]$ | 1,31,12 | +| ----------------------------- | ----------------------------------------------------------------- | ------- | +| 1,31,0 | $MAC2=A2[TRY + R21 \times VX0 + R22 \times VY0 + R23 \times VZ0]$ | 1,31,12 | +| 1,31,0 | $MAC3=A3[TRZ + R31 \times VX0 + R32 \times VY0 + R33 \times VZ0]$ | 1,31,12 | +| 1,15,0 | $IR1= Lm_B1[MAC1]$ | 1,31,0 | +| 1,15,0 | $IR2= Lm_B2[MAC2]$ | 1,31,0 | +| 1,15,0 | $IR3= Lm_B3[MAC3]$ | 1,31,0 | +| | $SZ0<-SZ1<-SZ2<-SZ3$ | 1,31,0 | +| 0,16,0 | $SZ3= Lm_D(MAC3)$ | | +| | $SX0<-SX1<-SX2, SY0<-SY1<-SY2$ | | +| 1,15,0 | $Lm_G1[F[OFX + IR1\times(H \div SZ)]]$ | 1,27,16 | +| 1,15,0 | $SY2= Lm_G2[F[OFY + IR2\times(H \div SZ)]]$ | | +| 1,31,0 | $MAC0= F[DQB + DQA\times(H \div SZ)]$ | 1,19,24 | +| 1,15,0 | $IR0= Lm_H[MAC0]$ | 1,31,0 | +| 注:Z值下限为0.5×H,对于更小的Z值,你要自己写程序。 | | | + +| 名称 | 周期 | 命令 | 描述 | +| ---- | --- | -------------- | ------ | +| RTPT | 23 | cop2 0x0280030 | 3点视角转换 | +| 字段 | 无 | | | + +输入 + +| V0
V1
V2 | 转换向量 | 1,15,0 | +| ------------------ | ------- | ------- | +| R | 旋转矩阵 | 1,3,12 | +| TR | 平移向量 | 1,31,0 | +| H | 视平面距离 | 0,16,0 | +| DQA

DQB | 深度查询插值值 | 1,7,8 | +| OFX

OFY | 屏幕平移值 | 1,15,16 | + +输出 + +| SXY FIFO | 屏幕XY坐标(短) | 1,15,0 | +| -------- | --------- | ------ | +| SZ FIFO | 屏幕Z坐标(短) | 0,16,0 | +| IR0 | 深度查询插值值 | 1,3,12 | +| IR1 | 屏幕X(短) | 1,15,0 | +| IR2 | 屏幕Y(短) | 1,15,0 | +| IR3 | 屏幕Z(短) | 1,15,0 | +| MAC1 | 屏幕X(长) | 1,31,0 | +| MAC2 | 屏幕Y(长) | 1,31,0 | +| MAC3 | 屏幕Z(长) | 1,31,0 | + +计算 + +和RTPS一样,但是重复V1和V2 + +| 名称 | 周期 | 命令 | 描述 | +| ----- | ------------- | -------------- | ---------- | +| MVMVA | 8 | cop2 0x0400012 | 向量乘以矩阵加上向量 | +| 字段 | sf,mx,v,cv,lm | | | + +输入 + +| V0/V1/V2/IR | 向量V0,V1,V2或者[IR1,IR2,IR3] | | +| ----------- | ------------------------- | ------ | +| R/LLM/LCM | 旋转、光或者颜色矩阵 | 1,3,12 | +| TR/BK | 平移或者背景颜色向量 | | + +输出 + +| [IR1,IR2,IR3] | 短向量 | +| ---------------- | --- | +| [MAC1,MAC2,MAC3] | 长向量 | + +计算 + +MX=mx指定的矩阵 +V =v 指定的矩阵 +CV=cv指定的矩阵 +$MAC1=A1[CV1 + MX11 \times V1 + MX12 \times V2 + MX13 \times V3] $ + +$MAC2=A2[CV2 + MX21 \times V1 + MX22 \times V2 + MX23 \times V3] $ + +$MAC3=A3[CV3 + MX31 \times V1 + MX32 \times V2 + MX33 \times V3] $ + +$IR1=Lm_B1[MAC1] $ + +$IR2=Lm_B2[MAC2] $ + +$IR3=Lm_B3[MAC3] $ + +注,cv字段允许选择远颜色向量,但是GTE不能正确加这个向量 + +| 名称 | 周期 | 命令 | 描述 | +| ---- | --- | -------------- | ------- | +| DPCL | 8 | cop2 0x0680029 | 深度化颜色光源 | +| 字段 | 无 | | | + +输入 + +| RGB | 主颜色。 R,G,B,CODE | 0,8,0 | +| ------------- | --------------- | ------ | +| IR0 | 插值值 | 1,3,12 | +| [IR1,IR2,IR3] | 本地颜色向量 | 1,3,12 | +| CODE | 由RGB得到的颜色值 CODE | 0,8,0 | +| FC | 远颜色 | 1,27,4 | + +输出 + +| RGBn | RGB FIFO     Rn,Gn,Bn,CDn | 0,8,0 | +| ---------------- | ------------------------- | ------ | +| [IR1,IR2,IR3] | 颜色向量 | 1,11,4 | +| [MAC1,MAC2,MAC3] | 颜色向量 | | + +计算 + +| 1,27,4 | $MAC1=A1[R \times IR1 + IR0 \times (Lm_B1[RFC - R \times IR1])]$ | 1,27,16 | +| ------ | ---------------------------------------------------------------- | ------- | +| 1,27,4 | $MAC2=A2[G \times IR2 + IR0 \times (Lm_B1[GFC - G \times IR2])]$ | 1,27,16 | +| 1,27,4 | $MAC3=A3[B \times IR3 + IR0 \times (Lm_B1[BFC - B \times IR3])]$ | 1,27,16 | +| 1,11,4 | $IR1= Lm_B1[MAC1]$ | 1,27,4 | +| 1,11,4 | $IR2= Lm_B2[MAC2]$ | 1,27,4 | +| 1,11,4 | $IR3= Lm_B3[MAC3]$ | 1,27,4 | +| 0,8,0 | $Cd0<-Cd1<-Cd2<- CODE$ | | +| 0,8,0 | $R0<-R1<-R2<- Lm_C1[MAC1]$ | 1,27,4 | +| 0,8,0 | $G0<-G1<-G2<- Lm_C2[MAC2]$ | 1,27,4 | +| 0,8,0 | $B0<-B1<-B2<- Lm_C3[MAC3]$ | 1,27,4 | + +| 名称 | 周期 | 命令 | 描述 | +| ---- | --- | -------------- | --- | +| DPCS | 8 | cop2 0x0780010 | 深度化 | +| 字段 | 无 | | | + +输入 + +| IR0 | 插值值 | 1,3,12 | +| --- | ---------------- | ------ | +| RGB | 颜色。 R,G,B,CODE | 0,8,0 | +| FC | 远颜色  RFC,GFC,BFC | 1,27,4 | + +输出 + +| RGBn | RGB FIFO     Rn,Gn,Bn,CDn | 0,8,0 | +| ---------------- | ------------------------- | ------ | +| [IR1,IR2,IR3] | 颜色向量 | 1,11,4 | +| [MAC1,MAC2,MAC3] | 颜色向量 | 1,27,4 | + +计算 + +| 1,27,4 | $MAC1=A1[(R + IR0 \times (Lm_B1[RFC - R])]$ | 1,27,16   lm=0 | +| ------ | ------------------------------------------- | -------------- | +| 1,27,4 | $MAC2=A2[(G + IR0 \times (Lm_B1[GFC - G])]$ | 1,27,16   lm=0 | +| 1,27,4 | $MAC3=A3[(B + IR0 \times (Lm_B1[BFC - B])]$ | 1,27,16   lm=0 | +| 1,11,4 | $IR1= Lm_B1[MAC1]$ | 1,27,4    lm=0 | +| 1,11,4 | $IR2= Lm_B2[MAC2]$ | 1,27,4    lm=0 | +| 1,11,4 | $IR3= Lm_B3[MAC3]$ | 1,27,4    lm=0 | +| 0,8,0 | $Cd0<-Cd1<-Cd2<- CODE$ | | +| 0,8,0 | $R0<-R1<-R2<- Lm_C1[MAC1]$ | 1,27,4 | +| 0,8,0 | $G0<-G1<-G2<- Lm_C2[MAC2]$ | 1,27,4 | +| 0,8,0 | $B0<-B1<-B2<- Lm_C3[MAC3]$ | 1,27,4 | + +由于markdown文档处理不方便,剩下的[内容在这里](/doc/PSX_introduces_CN/ps_gte_UTF-8.html)。 + + diff --git a/docs/index.html b/docs/index.html index 1344537..cd0e2c4 100644 --- a/docs/index.html +++ b/docs/index.html @@ -8,6 +8,7 @@ +
Loading...
@@ -35,7 +36,8 @@ '/wiki/Umd_Stream_Composer', '/doc/PSX_introduces_CN/中央处理器(CPU)R3000A', '/doc/PSX_introduces_CN/内存', - '/doc/PSX_introduces_CN/图形处理芯片(GPU)' + '/doc/PSX_introduces_CN/图形处理芯片(GPU)', + '/doc/PSX_introduces_CN/几何变换引擎(GTE)' ], editButton: { title: "在Github上编辑", @@ -61,5 +63,8 @@ + + + diff --git a/docs/wiki/Summary_of_Computer_File_Attributes.md b/docs/wiki/Summary_of_Computer_File_Attributes.md index 5a3bf7b..f537580 100644 --- a/docs/wiki/Summary_of_Computer_File_Attributes.md +++ b/docs/wiki/Summary_of_Computer_File_Attributes.md @@ -8,100 +8,127 @@ 文件头原始文本/标志一栏有乱码是正常的,因为软件也无法正常显示,就直接复制下来。 -| 计算机文件格式 | 文件头 | 文件头原始文本/标志 | 备注 | 代表作/备注 | 解包方法 | 补充说明 | -|:--------------:|:-----------------------------------:|:------------:|:-----------------------------:|:----------------------:|:--------------------------------------------------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| cpk | 43 50 4B | CPK | 游戏打包格式 | 虚空幻界、彼岸游境 | 使用garbro、CpkFileBuilder、Noesis等工具解包 | | -| hca | 48 43 41 | HCA | criware的音频格式 | vgm工具箱转换acb或者usm视频的格式 | foobar2000、格式工厂、ffmpeg | | -| acb | 40 55 54 46 | @UTF | criware的音频打包格式 | steam刀剑神域系列 | Foobar2000、vgm工具箱 | | -| awb | 41 46 53 32 | AFS2 | criware的音频打包格式 | steam刀剑神域系列 | Foobar2000、vgm工具箱 | | -| usm | 43 52 49 44 | CRID | criware的视频格式 | 原神、崩坏三等很常见的格式 | vgm工具箱、ffmpeg,一些加密的usm只能通过民间大神开发的工具解包 | | -| usm | 30 26 B2 75 8E 66 CF 11 | 0&瞮巉? | 地雷社游戏的一种视频格式 | 新次元游戏海王星、Trillion | 实际是wmv视频,修改后缀名为wmv,FFmpeg可转换mkv、mp4 | | -| unity游戏 | 55 6E 69 74 79 46 53 | UnityFS | unity大多数游戏常见的文件头 | 大多数unity游戏不一一列举 | assetstudio | | -| fsb | 46 53 42 35 | FSB5 | fmod引擎的音频打包格式 | 大多数unity游戏 | assetstudio解包时选择转换为wav、foobar2000 | | -| PFS | 70 66 38 | pf8 | 未知 | 未记录 | 使用garbro | | -| bnk | 42 4B 48 44 | BKHD | wwise引擎的音频打包格式 | 大多数unity游戏 | foobar2000 | | -| pam | 50 41 4D 46 30 30 34 31 | PAMF0041 | 未知 | steam单机游戏的一种视频打包格式 | vgm工具箱可提取,没使用ffmpeg测试 | | -| bik | 42 49 4B 69 | BIKi | bink视频,rad games tool开发的视频格式 | 逆战 | 格式工厂、ffmpeg | | -| bk2 | 4B 42 32 6A | kb2j | bink视频,rad games tool开发的视频格式 | 狂热传说、情热传说、海王星系列游戏 | radvideo和vgm工具箱,海王星系列的游戏经常伪装成usm格式 | | -| bk2 | 4B 42 32 69 | kb2i | bink视频,rad games tool开发的视频格式 | 白荆回廊 | radvideo | | -| bk2 | 4B 42 32 6E | kb2n | bink视频,rad games tool开发的视频格式 | 白荆回廊 | radvideo | | -| bra | 50 44 41 | PDA | 未知 | 妖精剑士F | bra音频可尝试用dargon unpacker解包 | | -| xwb | 57 42 4E 44 | WBND | 地雷社游戏中常见的音频文件打包格式 | 超次元游戏海王星、死亡终局轮回试炼 | unxwb提取很快,foobar2000提取极慢,如果不是为了更好的音质不建议用foobar2000 | foobar2000是音频转换工具不是文件提取器,专业不对口,所以很慢 | -| exe | 4D 5A | MZ | windows应用程序执行文件 | 常见的文件格式 | 7z | | -| dll | 4D 5A | MZ | windows应用程序扩展文件 | 常见的文件格式 | 7z | | -| xp3 | 58 50 33 | XP3 | galgame游戏常见的打包格式 | KARAKARA2 | 可尝试用garbro解包 | | -| cab | 4D 53 43 46 | MSCF | Windows的压缩格式 | 装驱动,补丁的目录下面可能会有 | 7z | | -| mid | 4D 54 68 64 | MThd | 主机掌机游戏的解包的一种音频格式 | 重装机兵2r、重装机兵3 | vgmtrans解包nds,使用foobar2000转换 | | -| moflex | 4C 32 | L2 | 3DS游戏的一种视频格式 | 重装机兵4 | 使用ffmpeg转换 | | -| pmf | 50 53 4D 46 30 30 | PSMF00 | PSP游戏的视频专用打包格式 | 刀剑神域无限时刻、英雄传说空之轨迹 | 使用pmftools转换有声音,有些游戏无法转换,使用ffmpeg转换无声音 | | -| bcsar | 43 53 41 52 | CSAR | 3DS游戏的一种音频打包格式 | 嘿!皮克敏 | 使用3DS SoundArchiveTool解包 | | -| bcwav | 43 57 41 56 | CWAV | 3DS游戏bcsar文件的音频解包格式 | 嘿!皮克敏 | foobar2000 | | -| bcstm | 43 53 54 4 | CSTM | 3DS游戏的一种音频打包格式 | 嘿!皮克敏 | foobar2000、ffmpeg | | -| vag | 56 41 47 70 | VAGp | psp游戏的一种音频格式 | 英雄传说空之轨迹 | foobar2000、ffmpeg | | -| pck | 46 69 6C 65 6E 61 6D 65 | Filename | steam单机游戏的一种pck文件 | 超女神信仰诺瓦露、约战凛绪轮回 | fmodel、umodel输入AES密钥解包 | | -| pck | 41 4B 50 4B | AKPK | unity游戏中使用wwise引擎打包的格式 | 原神、崩坏三 | 除了音频还存储图片,使用dragon unpacker解包 | | -| at3 | 52 49 46 46 | RIFF | PSP游戏的音频格式,实际上等同于wav、wem | 我的妹妹不可能那么可爱 | dragon unpacker解包,改后缀为bnk或wem使用foobar2000转换 | | -| adx | 不固定 | 不固定 | criware的音频格式 | 未记录,usm视频解包的一种音频格式 | foobar2000 | | -| ssw | 58 57 53 46 49 4C 45 | XWSFILE | 3ds游戏的一种音频打包格式 | 死或生维度 | 3DS Audio Ripper,提取出bgwav格式的音频 | | -| ktx | AB 4B 54 58 20 31 31 BB | 獽TX 11? | 手游中的一种图片格式 | 海岛奇兵 | TexturePackerGui | | -| wmv | 30 26 B2 75 8E 66 CF 11 | 0&瞮巉? | 一种视频格式 | 海王星U | ffmpeg、格式工厂等 | | -| ogv | 4F 67 67 53 | OggS | theora编码,开放免费的视频压缩格式 | 冬日树下的回忆 | ffmpeg、格式工厂等 | | -| asar | 不固定 | 不固定 | galgame游戏的一种打包格式 | 冬日树下的回忆 | winasar可以完全解包、dragon unpacker只能提取图片和音频 | | -| rpa | 52 50 41 | RPA | galgame游戏的一种打包格式 | Sakura Succubus 2 | garbro可以解包、RPA Extract | | -| pvr.ccz | 43 43 5A | CCZ | 一种图片格式 | 三国杀移动版 | TexturePackerGUI | | -| ypf | 59 50 46 | YPF | galgame游戏的一种视频格式 | 猫忍之心外传 | 使用garbro解包 | | -| rgss3a | 52 47 53 53 41 44 | RGSSAD | 一种2d rpg游戏的打包格式 | 打包格式 关于我转生变成兽人这档事 | garbro可以解包 | | -| mpg | 不固定 | 不固定 | mpeg1编码的视频格式 | G线上的魔王 | ffmpeg、格式工厂等 | | -| mp4 | 00 00 00 1C 66 74 79 70 69 73 6F 6D | ....ftypisom | 常见的mp4视频 | 白荆回廊 | ffmpeg、格式工厂等 | 下方显示mvhd | -| m4v | 00 00 00 18 66 74 79 70 6D 70 34 32 | ....ftypmp42 | 罕见的视频格式 | 圣境之塔 | ffmpeg、格式工厂 | 没有mvhd | -| nwa | 02 00 10 00 44 AC | ....D? | 罕见的音频格式 | 初恋1/1 | 格式工厂和ffmpeg无效,可以用foobar2000转换 | | -| arc | 42 55 52 49 48 4F | BURIKO | galgame游戏的一种打包格式 | Arcana Alchemia(炼爱秘仪) | garbro提取立绘和视频、音频 | | -| png | 89 50 4E 47 | 塒NG | 一种图片格式 | 各种游戏解包提取的图片格式,不一一列举 | 格式工厂、honeyview、ps、topaz全家桶的降噪、锐化、无损放大 | | -| npk | 4E 58 50 4B | NXPK | 网易neox引擎游戏打包的一种格式 | 重装上阵 | NPKExtractor | | -| mp3 | 49 44 33 | ID3 | 常见音频格式、cocos2d或者一些卡牌手游用到的音频格式 | 小花仙 | 格式工厂、foobar2000、ffmpeg | | -| wma | 30 26 B2 75 8E 66 CF 11 | 0&瞮巉? | 一种音频格式 | 暂无 | 格式工厂、ffmpeg | | -| m4a | 52 49 46 46 | ....ftypM4A | 一种音频格式 | 暂无 | 格式工厂、ffmpeg | | -| h264 | 不固定 | 不固定 | 一种h264编码的视频格式 | 星空(wiiu) | 格式工厂和ffmpeg | | -| webp | 52 49 46 46 | RIFF | 谷歌开发的一种高压缩图片格式 | 暂无 | 格式工厂 | [Google Webp](https://developers.google.cn/speed/webp/download?hl=zh-cn)

[WebP Windows CODEC](https://codecpack.co/download/WebP-Codec-for-Windows.html) | -| PSS | 00 00 01 BA | ...? | PS2游戏的视频格式 | 多浪迪警官3保护者 | vgm工具箱、格式工厂、ffmpeg、cube media player | | -| ss2 | 53 53 68 64 | SShd | PS2游戏PSS视频文件分离的音频格式 | 多浪迪警官3保护者 | 格式工厂、ffmpeg | | -| iso | 不固定 | 不固定 | PS2游戏rom | 多浪迪警官3保护者 | vgm工具箱解压、7Z | | -| iso | 不固定 | 不固定 | PSP游戏rom | 空之轨迹、我的妹妹不可能那么可爱 | 7Z | | -| ckb | 63 6B 6D 6B | ckmb | 一种音频打包格式 | 刀剑神域记忆重组 | foobar2000 | | -| snd | 4F 67 67 53 | OggS | 一种音频格式 | 约战凛绪轮回 | foobar2000、格式工厂、ffmpeg | | -| ogg | 4F 67 67 53 | OggS | 一种音频格式 | Areaea | foobar2000、格式工厂、ffmpeg | | -| wav | 52 49 46 46 | RIFF | 一种音频格式 | 很常见,不列举 | foobar2000、格式工厂、ffmpeg可以转换,文件头后面是wave | | -| wem | 52 49 46 46 | RIFF | 一种音频格式 | unity和虚幻引擎游戏中常见的文件,不列举 | foobar2000、格式工厂、ffmpeg可以转换,文件头后面是wave | | -| bank | 52 49 46 46 | RIFF | 一种音频格式 | 白荆回廊 | foobar2000、格式工厂、ffmpeg可以转换,文件头后面是fev | | -| avi | 52 49 46 46 | RIFF | 一种视频格式 | 英雄传说:闪之轨迹 | foobar2000、格式工厂、ffmpeg可以转换,文件头后面是avi | | -| at9 | 52 49 46 46 | RIFF | 一种音频格式 | psv游戏中的一种音频格式 | foobar2000、格式工厂、ffmpeg | | -| zip | 50 4B | PK | 一种可直接解压的PK类文件 | 常见的压缩包 | 很常见,电脑使用7z、手机使用MT管理器解压 | | -| apk | 50 4B | PK | 一种可直接解压的PK类文件 | 安卓手机安装包 | 很常见,电脑使用7z、手机使用MT管理器解压 | | -| xapk | 50 4B | PK | 一种可直接解压的PK类文件 | 国外安卓游戏安装包 | 很常见,电脑使用7z、手机使用MT管理器解压 | | -| obb | 50 4B | PK | 一种可直接解压的PK类文件 | 国外安卓游戏的数据包 | 很常见,电脑使用7z、手机使用MT管理器解压 | | -| fb2k-component | fb2k-component | PK | 一种可直接解压的PK类文件 | foobar2000的组件 | 不解包的根本没见过,电脑使用7z、手机使用MT管理器解压 | | -| ipa | 50 4B | PK | 一种可直接解压的PK类文件 | 苹果手机的安装包 | 虽然没用过苹果手机,但它也是一种pk文件,直接解压就行 | | -| pak | 不固定 | 不固定 | 虚幻引擎游戏的打包格式 | 白荆回廊、幻塔 | 此pak文件或大或小,大的十几二十多G,小的几十kb,fmodel、umodel输入AES密钥解包 | 有的游戏不设置密钥,如魔道兵装、碧蓝航线 | -| pak | 不固定 | 不固定 | 世纪天成csol的资产格式 | 反恐精英online | 此pak文件较小,把pak拖到cospak上解包 | | -| pak | 不固定 | 不固定 | 世纪天成csol的资产格式 | 怪物猎人崛起 | 此pak包巨大,30多个G,使用retool解包 | | -| pak | 不固定 | 不固定 | 任天堂wiiu平台的一种资产文件 | 唐老鸭历险记重制版(wiiu平台) | 此pak文件较小,最大几十mb,最小几十kb | | -| nds | 不固定 | 不固定 | nds游戏rom | 重装机兵2r、重装机兵3 | 使用vgmtrans可提取音频 | | -| STR | 00 FF FF FF FF FF FF FF FF FF FF | 空白乱码 | PS游戏ISOrom解包后的一种文件类型 | 龙珠GT 决战最终回合 | jpsxdec | | -| au | 2E 73 6E 64 | .snd | PS游戏STR文件解包后的一种音频格式 | 龙珠GT 决战最终回合 | 格式工厂、foobar2000、ffmpeg | | -| aif | 46 4F 52 4D | FORM | PS游戏STR文件解包后的一种音频格式 | 龙珠GT 决战最终回合 | 格式工厂、foobar2000、ffmpeg | | -| btsnd | 不固定 | 不固定 | wiiu游戏loadiine格式的一种音频格式 | 星空(wiiu) | 有些游戏可用foobar2000播放,格式工厂和ffmpeg无效 | | -| bfstm | 46 53 54 4D | FSTM | wiiu游戏loadiine格式的一种音频格式 | NES Remix Pack | 格式工厂、foobar2000、ffmpeg | | -| bfsar | 46 53 41 52 | FSAR | wiiu游戏loadiine格式的一种音频打包格式 | NES Remix Pack | BFSAR_Split | | -| bfwav | 46 57 41 56 | FWAV | bfsar文件解包的一种音频格式 | NES Remix Pack | EveryFileExplorer和foobar2000转换为wav | | -| wud | 57 55 50 | WUP | wiiu游戏rom的一种打包格式 | 异度之刃x(wiiu平台) | Uwizard输入密钥转换成loadiine格式,解完就像pc单机游戏了 | | -| wux | 57 55 58 | WUX | wiiu游戏wud格式rom压缩后的一种打包格式 | 异度之刃x(wiiu平台) | 未知,一般都是提取loadiine格式的资源 | | -| cso | 43 49 53 4F | CISO | ISO镜像转换而来的一种rom格式 | 女神异闻录persona(PSP平台) | 未知,一般都是提取ISO格式的rom | | -| PBP | 00 50 42 50 | .PBP | ISO镜像转换而来的一种rom格式 | 女神异闻录persona(PSP平台) | 未知,一般都是提取ISO格式的rom | | -| rar | 52 61 72 21 | Rar! | 一种压缩格式 | 常见的压缩包,文件打包格式的一种 | 7z,Winrar | | -| ssnd | 53 53 4E 44 | SSND | 3DS游戏的一种音频打包格式 | 真女神转生深渊奇异之旅 | 3DS Audio Ripper,提取出bcwav格式的音频 | | -| MIB | 不固定 | 不固定 | PS2游戏的一种音频格式 | 多浪迪警官3保护者 | 格式工厂和ffmpeg无效,可以用foobar2000播放和转换 | 第一行字节全是0,尝试删除之后仍可以正常播放,音频时长变成原来的2倍 | -| sarc | 53 41 52 43 | SARC | wiiu游戏中的一种文件打包格式 | 任天堂大陆(wiiu平台) | 把sarc文件拖到sarc_tool.exe上即可解包 | | -| dspadpcm | 不固定 | 不固定 | wiiu游戏中的sarc文件解包的音频格式 | 暂无,wiiu游戏sarc文件可以解出来 | 使用Audacity转换成wav、mp3等格式 | | -| PKG | 7F 50 4B 47 | .PKG | PS3游戏的rom格式 | 火箭鸟 铁汉雄鸡 | PS3GameExtractor | | -| msf | 4D 53 46 43 | MSFC | PS3游戏的一种音频格式 | 火箭鸟 铁汉雄鸡 | foobar2000、格式工厂、ffmpeg | | -| gz | 1F 8B 08 00 | .?.. | 一种压缩格式 | 火箭鸟 铁汉雄鸡 | 7z | linux的一种归档格式 | +| 计算机文件格式 | 文件头 | 文件头原始文本/标志 | 备注 | 代表作/备注 | 解包方法 | 补充说明 | +|:--------------:|:-----------------------------------:|:------------:|:----------------------------------:|:----------------------:|:--------------------------------------------------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| cpk | 43 50 4B | CPK | 游戏打包格式 | 虚空幻界、彼岸游境 | 使用garbro、CpkFileBuilder、Noesis等工具解包 | | +| hca | 48 43 41 | HCA | criware的音频格式 | vgm工具箱转换acb或者usm视频的格式 | foobar2000、格式工厂、ffmpeg | | +| acb | 40 55 54 46 | @UTF | criware的音频打包格式 | steam刀剑神域系列 | Foobar2000、vgm工具箱 | | +| awb | 41 46 53 32 | AFS2 | criware的音频打包格式 | steam刀剑神域系列 | Foobar2000、vgm工具箱 | | +| usm | 43 52 49 44 | CRID | criware的视频格式 | 原神、崩坏三等很常见的格式 | vgm工具箱、ffmpeg,一些加密的usm只能通过民间大神开发的工具解包 | | +| usm | 30 26 B2 75 8E 66 CF 11 | 0&瞮巉? | 地雷社游戏的一种视频格式 | 新次元游戏海王星、Trillion | 实际是wmv视频,修改后缀名为wmv,FFmpeg可转换mkv、mp4 | | +| unity游戏 | 55 6E 69 74 79 46 53 | UnityFS | unity大多数游戏常见的文件头 | 大多数unity游戏不一一列举 | assetstudio | | +| fsb | 46 53 42 35 | FSB5 | fmod引擎的音频打包格式 | 大多数unity游戏 | assetstudio解包时选择转换为wav、foobar2000 | 大部分fsb格式的文件头都是FSB5,魔窟冒险(wiiu)这个游戏例外,打乱字节仍可以播放 | +| PFS | 70 66 38 | pf8 | 未知 | 未记录 | 使用garbro | | +| bnk | 42 4B 48 44 | BKHD | wwise引擎的音频打包格式 | 大多数unity游戏 | foobar2000 | | +| pam | 50 41 4D 46 30 30 34 31 | PAMF0041 | 未知 | steam单机游戏的一种视频打包格式 | vgm工具箱可提取,没使用ffmpeg测试 | | +| bik | 42 49 4B 69 | BIKi | bink视频,rad games tool开发的视频格式 | 逆战 | 格式工厂、ffmpeg | | +| bk2 | 4B 42 32 6A | kb2j | bink视频,rad games tool开发的视频格式 | 狂热传说、情热传说、海王星系列游戏 | radvideo和vgm工具箱,海王星系列的游戏经常伪装成usm格式 | | +| bk2 | 4B 42 32 69 | kb2i | bink视频,rad games tool开发的视频格式 | 白荆回廊 | radvideo | | +| bk2 | 4B 42 32 6E | kb2n | bink视频,rad games tool开发的视频格式 | 白荆回廊 | radvideo | | +| bra | 50 44 41 | PDA | 未知 | 妖精剑士F | bra音频可尝试用dargon unpacker解包 | | +| xwb | 57 42 4E 44 | WBND | 地雷社游戏中常见的音频文件打包格式 | 超次元游戏海王星、死亡终局轮回试炼 | unxwb提取很快,foobar2000提取极慢,如果不是为了更好的音质不建议用foobar2000 | foobar2000是音频转换工具不是文件提取器,专业不对口,所以很慢 | +| exe | 4D 5A | MZ | windows应用程序执行文件 | 常见的文件格式 | 7z | | +| dll | 4D 5A | MZ | windows应用程序扩展文件 | 常见的文件格式 | 7z | | +| xp3 | 58 50 33 | XP3 | galgame游戏常见的打包格式 | KARAKARA2 | 可尝试用garbro解包 | | +| cab | 4D 53 43 46 | MSCF | Windows的压缩格式 | 装驱动,补丁的目录下面可能会有 | 7z | | +| mid | 4D 54 68 64 | MThd | 主机掌机游戏的解包的一种音频格式 | 重装机兵2r、重装机兵3 | vgmtrans解包nds,使用foobar2000转换 | | +| moflex | 4C 32 | L2 | 3DS游戏的一种视频格式 | 重装机兵4 | 使用ffmpeg转换、格式工厂 | | +| pmf | 50 53 4D 46 30 30 | PSMF00 | PSP游戏的视频专用打包格式 | 刀剑神域无限时刻、英雄传说空之轨迹 | 使用pmftools转换有声音,有些游戏无法转换,使用ffmpeg转换无声音 | | +| bcsar | 43 53 41 52 | CSAR | 3DS游戏的一种音频打包格式 | 嘿!皮克敏 | 使用3DS SoundArchiveTool解包 | | +| bcwav | 43 57 41 56 | CWAV | 3DS游戏bcsar文件的音频解包格式 | 嘿!皮克敏 | foobar2000 | | +| bcstm | 43 53 54 4 | CSTM | 3DS游戏的一种音频打包格式 | 嘿!皮克敏 | foobar2000、ffmpeg | | +| vag | 56 41 47 70 | VAGp | psp游戏的一种音频格式 | 英雄传说空之轨迹 | foobar2000、ffmpeg | | +| pck | 46 69 6C 65 6E 61 6D 65 | Filename | steam单机游戏的一种pck文件 | 超女神信仰诺瓦露、约战凛绪轮回 | fmodel、umodel输入AES密钥解包 | | +| pck | 41 4B 50 4B | AKPK | unity游戏中使用wwise引擎打包的格式 | 原神、崩坏三 | 除了音频还存储图片,使用dragon unpacker解包 | | +| at3 | 52 49 46 46 | RIFF | PSP游戏的音频格式,实际上等同于wav、wem | 我的妹妹不可能那么可爱 | dragon unpacker解包,改后缀为bnk或wem使用foobar2000转换 | | +| adx | 不固定 | 不固定 | criware的音频格式 | 未记录,usm视频解包的一种音频格式 | foobar2000 | | +| ssw | 58 57 53 46 49 4C 45 | XWSFILE | 3ds游戏的一种音频打包格式 | 死或生维度 | 3DS Audio Ripper,提取出bgwav格式的音频 | | +| ktx | AB 4B 54 58 20 31 31 BB | 獽TX 11? | 手游中的一种图片格式 | 海岛奇兵 | TexturePackerGui | | +| wmv | 30 26 B2 75 8E 66 CF 11 | 0&瞮巉? | 一种视频格式 | 海王星U | ffmpeg、格式工厂等 | | +| ogv | 4F 67 67 53 | OggS | theora编码,开放免费的视频压缩格式 | 冬日树下的回忆 | ffmpeg、格式工厂等 | | +| asar | 不固定 | 不固定 | galgame游戏的一种打包格式 | 冬日树下的回忆 | winasar可以完全解包、dragon unpacker只能提取图片和音频 | | +| rpa | 52 50 41 | RPA | galgame游戏的一种打包格式 | Sakura Succubus 2 | garbro可以解包、RPA Extract | | +| pvr.ccz | 43 43 5A | CCZ | 一种图片格式 | 三国杀移动版 | TexturePackerGUI | | +| ypf | 59 50 46 | YPF | galgame游戏的一种视频格式 | 猫忍之心外传 | 使用garbro解包 | | +| rgss3a | 52 47 53 53 41 44 | RGSSAD | 一种2d rpg游戏的打包格式 | 打包格式 关于我转生变成兽人这档事 | garbro可以解包 | | +| mpg | 不固定 | 不固定 | mpeg1编码的视频格式 | G线上的魔王 | ffmpeg、格式工厂等 | | +| mp4 | 00 00 00 1C 66 74 79 70 69 73 6F 6D | ....ftypisom | 常见的mp4视频 | 白荆回廊 | ffmpeg、格式工厂等 | 下方显示mvhd | +| m4v | 00 00 00 18 66 74 79 70 6D 70 34 32 | ....ftypmp42 | 罕见的视频格式 | 圣境之塔 | ffmpeg、格式工厂 | 没有mvhd | +| nwa | 02 00 10 00 44 AC | ....D? | 罕见的音频格式 | 初恋1/1 | 格式工厂和ffmpeg无效,可以用foobar2000转换 | | +| arc | 42 55 52 49 48 4F | BURIKO | galgame游戏的一种打包格式 | Arcana Alchemia(炼爱秘仪) | garbro提取立绘和视频、音频 | | +| png | 89 50 4E 47 | 塒NG | 一种图片格式 | 各种游戏解包提取的图片格式,不一一列举 | 格式工厂、honeyview、ps、topaz全家桶的降噪、锐化、无损放大 | | +| npk | 4E 58 50 4B | NXPK | 网易neox引擎游戏打包的一种格式 | 重装上阵 | NPKExtractor | | +| mp3 | 49 44 33 | ID3 | 常见音频格式、cocos2d或者一些卡牌手游用到的音频格式 | 小花仙 | 格式工厂、foobar2000、ffmpeg | | +| wma | 30 26 B2 75 8E 66 CF 11 | 0&瞮巉? | 一种音频格式 | 暂无 | 格式工厂、ffmpeg | | +| m4a | 52 49 46 46 | ....ftypM4A | 一种音频格式 | 暂无 | 格式工厂、ffmpeg | | +| h264 | 不固定 | 不固定 | 一种h264编码的视频格式 | 星空(wiiu) | 格式工厂和ffmpeg | | +| webp | 52 49 46 46 | RIFF | 谷歌开发的一种高压缩图片格式 | 暂无 | 格式工厂 | [Google Webp](https://developers.google.cn/speed/webp/download?hl=zh-cn)

[WebP Windows CODEC](https://codecpack.co/download/WebP-Codec-for-Windows.html) | +| PSS | 00 00 01 BA | ...? | PS2游戏的视频格式 | 多浪迪警官3保护者 | vgm工具箱、格式工厂、ffmpeg、cube media player | | +| ss2 | 53 53 68 64 | SShd | PS2游戏PSS视频文件分离的音频格式 | 多浪迪警官3保护者 | 格式工厂、ffmpeg | | +| iso | 不固定 | 不固定 | PS2游戏rom | 多浪迪警官3保护者 | vgm工具箱解压、7Z | | +| iso | 不固定 | 不固定 | PSP游戏rom | 空之轨迹、我的妹妹不可能那么可爱 | 7Z | | +| ckb | 63 6B 6D 6B | ckmb | 一种音频打包格式 | 刀剑神域记忆重组 | foobar2000 | | +| snd | 4F 67 67 53 | OggS | 一种音频格式 | 约战凛绪轮回 | foobar2000、格式工厂、ffmpeg | | +| ogg | 4F 67 67 53 | OggS | 一种音频格式 | Areaea | foobar2000、格式工厂、ffmpeg | | +| wav | 52 49 46 46 | RIFF | 一种音频格式 | 很常见,不列举 | foobar2000、格式工厂、ffmpeg可以转换,文件头后面是wave | | +| wem | 52 49 46 46 | RIFF | 一种音频格式 | unity和虚幻引擎游戏中常见的文件,不列举 | foobar2000、格式工厂、ffmpeg可以转换,文件头后面是wave | | +| bank | 52 49 46 46 | RIFF | 一种音频格式 | 白荆回廊 | foobar2000、格式工厂、ffmpeg可以转换,文件头后面是fev | | +| avi | 52 49 46 46 | RIFF | 一种视频格式 | 英雄传说:闪之轨迹 | foobar2000、格式工厂、ffmpeg可以转换,文件头后面是avi | | +| at9 | 52 49 46 46 | RIFF | 一种音频格式 | psv游戏中的一种音频格式 | foobar2000、格式工厂、ffmpeg | | +| zip | 50 4B | PK | 一种可直接解压的PK类文件 | 常见的压缩包 | 很常见,电脑使用7z、手机使用MT管理器解压 | | +| apk | 50 4B | PK | 一种可直接解压的PK类文件 | 安卓手机安装包 | 很常见,电脑使用7z、手机使用MT管理器解压 | | +| xapk | 50 4B | PK | 一种可直接解压的PK类文件 | 国外安卓游戏安装包 | 很常见,电脑使用7z、手机使用MT管理器解压 | | +| obb | 50 4B | PK | 一种可直接解压的PK类文件 | 国外安卓游戏的数据包 | 很常见,电脑使用7z、手机使用MT管理器解压 | | +| fb2k-component | fb2k-component | PK | 一种可直接解压的PK类文件 | foobar2000的组件 | 不解包的根本没见过,电脑使用7z、手机使用MT管理器解压 | | +| ipa | 50 4B | PK | 一种可直接解压的PK类文件 | 苹果手机的安装包 | 虽然没用过苹果手机,但它也是一种pk文件,直接解压就行 | | +| pak | 不固定 | 不固定 | 虚幻引擎游戏的打包格式 | 白荆回廊、幻塔 | 此pak文件或大或小,大的十几二十多G,小的几十kb,fmodel、umodel输入AES密钥解包 | 有的游戏不设置密钥,如魔道兵装、碧蓝航线 | +| pak | 不固定 | 不固定 | 世纪天成csol的资产格式 | 反恐精英online | 此pak文件较小,把pak拖到cospak上解包 | | +| pak | 不固定 | 不固定 | 世纪天成csol的资产格式 | 怪物猎人崛起 | 此pak包巨大,30多个G,使用retool解包 | | +| pak | 不固定 | 不固定 | 任天堂wiiu平台的一种资产文件 | 唐老鸭历险记重制版(wiiu平台) | 此pak文件较小,最大几十mb,最小几十kb | | +| nds | 不固定 | 不固定 | nds游戏rom | 重装机兵2r、重装机兵3 | 使用vgmtrans可提取音频 | | +| STR | 00 FF FF FF FF FF FF FF FF FF FF | 空白乱码 | PS游戏ISOrom解包后的一种文件类型 | 龙珠GT 决战最终回合 | jpsxdec | | +| au | 2E 73 6E 64 | .snd | PS游戏STR文件解包后的一种音频格式 | 龙珠GT 决战最终回合 | 格式工厂、foobar2000、ffmpeg | | +| aif | 46 4F 52 4D | FORM | PS游戏STR文件解包后的一种音频格式 | 龙珠GT 决战最终回合 | 格式工厂、foobar2000、ffmpeg | | +| btsnd | 不固定 | 不固定 | wiiu游戏loadiine格式的一种音频格式 | 星空(wiiu) | 有些游戏可用foobar2000播放,格式工厂和ffmpeg无效 | | +| bfstm | 46 53 54 4D | FSTM | wiiu游戏loadiine格式的一种音频格式 | NES Remix Pack | 格式工厂、foobar2000、ffmpeg | | +| bfsar | 46 53 41 52 | FSAR | wiiu游戏loadiine格式的一种音频打包格式 | NES Remix Pack | BFSAR_Split | | +| bfwav | 46 57 41 56 | FWAV | bfsar文件解包的一种音频格式 | NES Remix Pack | EveryFileExplorer和foobar2000转换为wav | | +| bfgrp | 46 47 52 50 | FGRP | wiiu游戏中的sarc解包的音频文件 | 蘑菇队长(wiiu) | 删除FWAV前面的字节保存为bfwav,再使用EveryFileExplorer转换为wav格式 | 不删除任何字节可以使用CubeMediaPlayer2播放,但是全是噪音 | +| bfseq | 46 53 45 51 | FSEQ | wiiu游戏中的bfsar解包的音频文件 | 动物之森Amiibo节日(wiiu) | 删除FWAV前面的字节保存为bfwav,再使用EveryFileExplorer转换为wav格式 | 不删除任何字节可以使用CubeMediaPlayer2播放,但是全是噪音 | +| sarc | 53 41 52 43 | SARC | wiiu游戏中的一种文件打包格式 | 任天堂大陆(wiiu平台) | 把sarc文件拖到sarc_tool.exe上即可解包 | | +| dspadpcm | 不固定 | 不固定 | wiiu游戏中的sarc文件解包的音频格式 | 暂无,wiiu游戏sarc文件可以解出来 | 使用Audacity转换成wav、mp3等格式 | | +| wud | 57 55 50 | WUP | wiiu游戏rom的一种打包格式 | 异度之刃x(wiiu平台) | Uwizard输入密钥转换成loadiine格式,解完就像pc单机游戏了 | | +| wux | 57 55 58 | WUX | wiiu游戏wud格式rom压缩后的一种打包格式 | 异度之刃x(wiiu平台) | 未知,一般都是提取loadiine格式的资源 | | +| cso | 43 49 53 4F | CISO | ISO镜像转换而来的一种rom格式 | 女神异闻录persona(PSP平台) | 未知,一般都是提取ISO格式的rom | | +| PBP | 00 50 42 50 | .PBP | ISO镜像转换而来的一种rom格式 | 女神异闻录persona(PSP平台) | 未知,一般都是提取ISO格式的rom | | +| rar | 52 61 72 21 | Rar! | 一种压缩格式 | 常见的压缩包,文件打包格式的一种 | 7z,Winrar | | +| ssnd | 53 53 4E 44 | SSND | 3DS游戏的一种音频打包格式 | 真女神转生深渊奇异之旅 | 3DS Audio Ripper,提取出bcwav格式的音频 | | +| MIB | 不固定 | 不固定 | PS2游戏的一种音频格式 | 多浪迪警官3保护者 | 格式工厂和ffmpeg无效,可以用foobar2000播放和转换 | 第一行字节全是0,尝试删除之后仍可以正常播放,音频时长变成原来的2倍 | +| PKG | 7F 50 4B 47 | .PKG | PS3游戏的rom格式 | 火箭鸟 铁汉雄鸡 | PS3GameExtractor | | +| msf | 4D 53 46 43 | MSFC | PS3游戏的一种音频格式 | 火箭鸟 铁汉雄鸡 | foobar2000、格式工厂、ffmpeg | | +| gz | 1F 8B 08 00 | .?.. | 一种压缩格式 | 火箭鸟 铁汉雄鸡 | 7z | linux的一种归档格式 | +| pac | 44 57 5F 50 41 43 4B | DW_PACK | 地雷社游戏的一种文件打包格式 | 海王星系列 | NR2_unpacker-PAC | | +| nsa | 不固定 | 不固定 | ONScripter是一个通用GalGame引擎,rom格式为nsa | 伊甸 | garbro可以解包 | | +| cdi | 不固定 | 不固定 | 世嘉DC游戏rom格式 | 生化危机3(DC平台) | 软碟通 | | +| pvr | 47 42 49 58 | GBIX | 一种图片格式 | 生化危机3(DC平台)、逆战模型解包的贴图 | TexturePackerGui,逆战的可以正常转换,生化危机3无效 | | +| jpg | FF E8 FF E0 00 10 4A 46 49 | (前4位乱码).JFIF | 一种图片格式 | 生化危机3(DC平台) | 格式工厂 | | +| gif | 47 49 46 | GIF | 一种图片格式 | 生化危机3(DC平台) | 格式工厂 | | +| afs | 41 46 53 | AFS | 一种文件打包格式 | 生化危机3(DC平台)、命运石之门(PSP) | AFSExplorer、SimpleAFSExtractor、vgm工具箱 | 不推荐用AFSExplorer,这里最好用的是SimpleAFSExtractor,可以解出vgm工具箱解不了的 | +| sfd | 00 00 01 BA | ...? | 一种视频格式 | 生化危机3(DC平台) | vgm工具箱、格式工厂 | | +| mdl | 49 44 53 54 | IDST | csol的模型文件 | csol、cs1.6 | HLMV1.3.5汉化版、Noesis | | +| nar | 4E 41 52 | NAR | csol除了pak之外的一种打包格式 | csol | Nar extractor | | +| mca | 02 00 00 00 01 00 00 01 | ........ | 一种音频格式 | 怪物猎人 | foobar2000 | | +| wbfs | 57 42 46 53 | WBFS | 任天堂wii平台的rom格式 | 斗真传 | WiiBackupManager或者wbfstoiso转换成iso格式 | | +| iso | 不固定 | 不固定 | 任天堂wii游戏wbfs格式的rom转换的一种格式 | 斗真传 | WIIScrubber只能转换iso格式的wii游戏rom | | +| thp | 54 48 50 | THP | 任天堂wii平台的一种音频格式 | 斗真传 | 格式工厂可以转换,vgm工具箱可以分离音频视频 | vgm工具箱分离的音频只能用foobar转换,视频可用格式工厂转换,强大的ffmpeg完全没用 | +| brstm | 52 53 54 4D | RSTM | 任天堂wii平台的一种音频格式 | 斗真传 | 格式工厂、ffmpeg、foobar2000 | | +| brsar | 52 53 41 52 | RSAR | 任天堂wii平台的一种音频打包格式 | 斗真传 | vgm工具箱advanced cutter/offset finder的RWAV Streams | | +| rwav(brwav) | 52 57 41 56 | RWAV | 任天堂wii平台的brsar文件解包的音频格式 | 斗真传 | foobar2000 | 虽然解出来是rwav,其实前面加个b改成brwav仍然可以正常播放,参考3ds的bcwav和wiiu的bfwav | +| arc | 55 AA 38 2D | U?-. | 任天堂wii平台的档案文件 | 斗真传 | EveryFileExplorer | | +| POD | 50 40 44 35 | POD5 | 微软xbox360平台的一种文件打包方式 | 星球大战原力释放2 | dragon unpacker | | +| VPK | 50 4B | PK | PSV游戏rom的格式 | 刀剑神域虚空断章(psv) | 7z解压 | 此vpk非彼vpk,起源引擎cs的vpk不能这样解 | +| bcmdl | 43 47 46 58 | CGFX | 3DS游戏的一种模型文件 | 重装机兵4 | EveryFileExplorer | | +| bctex | 43 47 46 58 | CGFX | 3DS游戏的一种图片格式 | 重装机兵4 | EveryFileExplorer | | +| bin | 不固定 | 不固定 | PS1游戏的一种rom格式 | 最终幻想8 | UltraISO | | +| img | 3B 03 00 00 | ;... | PS1游戏bin镜像解包后的一种文件 | 最终幻想8 | jpsxdec | | +| ahx | 80 00 00 20 | €.. | afs文件里解出的一种音频格式 | 命运石之门(PSP) | foobar2000、格式工厂支持转换,ffmpeg无效 | |