├── README.md └── docs ├── .nojekyll ├── README.md ├── _404.md ├── _sidebar.md ├── doc └── PSX_introduces_CN │ ├── img │ ├── 内存 │ │ ├── PixPin_2024-07-21_13-10-14.png │ │ ├── PixPin_2024-07-21_13-31-28.png │ │ ├── PixPin_2024-07-21_14-00-46.png │ │ └── ps_con.gif │ ├── 几何变换引擎(GTE) │ │ └── 20240724151939.png │ └── 图形处理芯片 │ │ ├── 20240721144750.png │ │ ├── 20240721145223.png │ │ ├── PixPin_2024-07-21_14-10-20.png │ │ ├── PixPin_2024-07-21_14-11-41.png │ │ ├── PixPin_2024-07-21_14-22-47.png │ │ ├── PixPin_2024-07-21_14-35-30.png │ │ └── PixPin_2024-07-21_14-37-57.png │ ├── ps_gte_UTF-8.html │ ├── 中央处理器(CPU)R3000A.md │ ├── 内存.md │ ├── 几何变换引擎(GTE).md │ └── 图形处理芯片(GPU).md ├── favicon.ico ├── img2 ├── 144.png ├── 168.png ├── 192.png ├── 48.png ├── 72.png └── 96.png ├── index.html └── wiki ├── 3ds_game_unpacking_tool.md ├── All_tool_instructions.md ├── DKZStudio.md ├── Summary_of_Computer_File_Attributes.md ├── Umd_Stream_Composer.md ├── awb格式音频.md ├── pmftools.md └── some_bats.md /README.md: -------------------------------------------------------------------------------- 1 | # Gametoolkit 2 | 3 | ![](/docs/img2/192.png) 4 | 5 | > 文件贡献伙伴 Contributorship: 6 | > 7 | > https://github.com/595554963github 8 | 9 | **I didn't make any of these tools, just saved the [files](https://github.com/Little-Data/Gametoolkit/releases)** 10 | 11 | 这些工具都不是我制作的,本仓库仅储存。集合文件[在这里](https://github.com/Little-Data/Gametoolkit/releases) 12 | 13 | 无法下载?试试[加速镜像下载](https://wiki.little-data.eu.org/#github%E4%B8%8B%E8%BD%BD%E5%8A%A0%E9%80%9F) 14 | 15 | >[!important] 16 | > 本仓库已有[文档页](https://wiki.little-data.eu.org/Gametoolkit),转到文档页查看更多 17 | > 18 | > This repository already has a [documentation page](https://wiki.little-data.eu.org/Gametoolkit), go to the documentation page to see more 19 | > 20 | > 如果在寻找一些处理脚本,请移步文档页。 21 | > 22 | > If you are looking for some processing scripts, please go to the documentation page. 23 | 24 | >[!important] 25 | > **帮助保存文件!Help with saving files!** 26 | > 27 | > 这些资源在互联网上很稀有,有一些被贩卖获取利润。These resources are rare on the Internet, and some are trafficked for profit. 28 | > 29 | > 这违背了互联网的分享精神。It goes against the spirit of sharing on the internet. 30 | > 31 | > 同时Github的仓库具有不稳定性,不知道什么时候会消失。Also Github repositories are volatile and there is no telling when they will disappear. 32 | > 33 | > 请保存文件,同时不要拿去贩卖。Please save the files and at the same time do not take it for sale. 34 | 35 | **常用资源** 36 | 37 | **Frequently used resources** 38 | 39 | - [PSP工具包](https://github.com/Little-Data/Gametoolkit/releases/tag/V1.0) 40 | - [通用工具包](https://github.com/Little-Data/Gametoolkit/releases/tag/V2.0) 41 | - [swf解包工具](https://github.com/Little-Data/Gametoolkit/releases/tag/V4.0) 42 | - [音质优化](https://github.com/Little-Data/Gametoolkit/releases/tag/V3.1) 43 | 44 | **其它资源** 45 | 46 | **Other resources** 47 | 48 | - [RPA Extract](https://iwanplays.itch.io/rpaex) 49 | 50 | 从 RenPy 游戏的 .rpa 文件中提取图像的工具 51 | 52 | Tool to extract images from RenPy games' .rpa files 53 | -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/.nojekyll -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Gametoolkit 2 | 3 | ![](/img2/192.png) 4 | 5 | **I didn't make any of these tools, just saved the [files](https://github.com/Little-Data/Gametoolkit/releases)** 6 | 7 | 这些工具都不是我制作的,本仓库仅储存。集合文件[在这里](https://github.com/Little-Data/Gametoolkit/releases) 8 | 9 | > **帮助保存文件!Help with saving files!** 10 | > 11 | > 这些资源在互联网上很稀有,有一些被贩卖获取利润。These resources are rare on the Internet, and some are trafficked for profit. 12 | > 13 | > 这违背了互联网的分享精神。It goes against the spirit of sharing on the internet. 14 | > 15 | > 同时Github的仓库具有不稳定性,不知道什么时候会消失。Also Github repositories are volatile and there is no telling when they will disappear. 16 | > 17 | > 请保存文件,同时不要拿去贩卖。Please save the files and at the same time do not take it for sale. 18 | 19 | **常用资源** 20 | 21 | **Frequently used resources** 22 | 23 | - [PSP工具包](https://github.com/Little-Data/Gametoolkit/releases/tag/V1.0) 24 | - [通用工具包](https://github.com/Little-Data/Gametoolkit/releases/tag/V2.0) 25 | - [swf解包工具](https://github.com/Little-Data/Gametoolkit/releases/tag/V4.0) 26 | - [音质优化](https://github.com/Little-Data/Gametoolkit/releases/tag/V3.1) 27 | 28 | **其它资源** 29 | 30 | **Other resources** 31 | 32 | - [RPA Extract](https://iwanplays.itch.io/rpaex) 33 | 34 | 从 RenPy 游戏的 .rpa 文件中提取图像的工具 35 | 36 | Tool to extract images from RenPy games' .rpa files 37 | 38 | **更新日志(仅记录新增文件,文档更新不记录)** 39 | 40 | 2024.07.17 41 | 42 | - FMV-Extractor 43 | 44 | 2024.07.14 45 | 46 | - 增加文档页面 47 | - 添加来自[阿斯特罗乔布斯-哔哩哔哩](https://space.bilibili.com/210298091)的文件 48 | 49 | 2024.05.26 50 | 51 | - ExtractData V1.2 52 | 53 | 2024.03.24 54 | 55 | - BloodRayne Toolset (BR2PodTools) 56 | - PP Extractor 57 | 58 | 2023.09.29 59 | 60 | 增加`.swf`文件解包工具 61 | 62 | - hugflash 63 | - jpexs-decompiler 64 | 65 | 2023.08.28 66 | 67 | 增加一个音频转换工具,弥补DKZ Studio转换后音质下降的问题 68 | 69 | - LoopingAudioConverter 70 | 71 | 2023.08.12 72 | 73 | 增加了超多工具,支持更多游戏解包: 74 | 75 | - UE Viewer 76 | - riox 77 | - luozhuangalmaPacker 78 | - AnimED 79 | - asmodean tools 80 | - atuworksPacker 81 | - AXLluozhuangResource 82 | - exafa 83 | - al2010cv 84 | - BGIunpack_0.1.1 85 | - ARC4Packer 86 | 87 | and more.... 88 | 89 | 2023.07.22 90 | 91 | 更新常用的通用解包工具: 92 | 93 | - AssetStudio 94 | - GARbro 95 | - crass 96 | - magic extractor 97 | - arc_conv 98 | 99 | 2023.01.05 100 | 101 | 第一版,PSP处理工具 102 | -------------------------------------------------------------------------------- /docs/_404.md: -------------------------------------------------------------------------------- 1 | # 404 NotFoundPage找不到惹⊙﹏⊙∥ 2 | 3 | 尝试检查关键词,或者到仓库找找吧 :) 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/_sidebar.md: -------------------------------------------------------------------------------- 1 | * [首页](/) 2 | 3 | * 工具使用说明 Tool usage 4 | * [全部工具使用说明 All tool instructions](/wiki/All_tool_instructions.md) 5 | * [DKZStudio](/wiki/DKZStudio.md) 6 | * [3ds游戏解包工具和音频提取工具](/wiki/3ds_game_unpacking_tool.md) 7 | * [计算机文件属性汇总](/wiki/Summary_of_Computer_File_Attributes.md) 8 | * [一些批处理](/wiki/some_bats.md) 9 | * [awb格式音频](/wiki/awb格式音频.md) 10 | * [pmftools](/wiki/pmftools.md) 11 | * [Umd Stream Composer](/wiki/Umd_Stream_Composer.md) 12 | * 收集的一些文档 Document Collections 13 | * PSX介绍中文版 14 | * [中央处理器(CPU)R3000A](/doc/PSX_introduces_CN/中央处理器(CPU)R3000A.md) 15 | * [内存](/doc/PSX_introduces_CN/内存.md) 16 | * [图形处理芯片](/doc/PSX_introduces_CN/图形处理芯片(GPU).md) 17 | * [几何变换引擎(GTE)](/doc/PSX_introduces_CN/几何变换引擎(GTE).md) -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/img/内存/PixPin_2024-07-21_13-10-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/doc/PSX_introduces_CN/img/内存/PixPin_2024-07-21_13-10-14.png -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/img/内存/PixPin_2024-07-21_13-31-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/doc/PSX_introduces_CN/img/内存/PixPin_2024-07-21_13-31-28.png -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/img/内存/PixPin_2024-07-21_14-00-46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/doc/PSX_introduces_CN/img/内存/PixPin_2024-07-21_14-00-46.png -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/img/内存/ps_con.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/doc/PSX_introduces_CN/img/内存/ps_con.gif -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/img/几何变换引擎(GTE)/20240724151939.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/doc/PSX_introduces_CN/img/几何变换引擎(GTE)/20240724151939.png -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/img/图形处理芯片/20240721144750.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/doc/PSX_introduces_CN/img/图形处理芯片/20240721144750.png -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/img/图形处理芯片/20240721145223.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/doc/PSX_introduces_CN/img/图形处理芯片/20240721145223.png -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/img/图形处理芯片/PixPin_2024-07-21_14-10-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/doc/PSX_introduces_CN/img/图形处理芯片/PixPin_2024-07-21_14-10-20.png -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/img/图形处理芯片/PixPin_2024-07-21_14-11-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/doc/PSX_introduces_CN/img/图形处理芯片/PixPin_2024-07-21_14-11-41.png -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/img/图形处理芯片/PixPin_2024-07-21_14-22-47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/doc/PSX_introduces_CN/img/图形处理芯片/PixPin_2024-07-21_14-22-47.png -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/img/图形处理芯片/PixPin_2024-07-21_14-35-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/doc/PSX_introduces_CN/img/图形处理芯片/PixPin_2024-07-21_14-35-30.png -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/img/图形处理芯片/PixPin_2024-07-21_14-37-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/doc/PSX_introduces_CN/img/图形处理芯片/PixPin_2024-07-21_14-37-57.png -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/ps_gte_UTF-8.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 几何变换引擎(GTE) 6 | 7 | 8 |

几何变换引擎(GTE)

9 | 10 | 11 | 16 | 21 |
名称 12 | 周期 13 | 命令 14 | 描述 15 |
DPCT 17 | 17 18 | cop2 0x0F8002A 19 | 深度化颜色RGB0,RGB1,RGB2 20 |
字段 22 | 无 23 |
24 | 25 | 26 | 28 | 32 | 36 |
输入 27 |
IR0 29 | 插值值 30 | 1,3,12 31 |
RGB0,RGB1,RGB2 33 | RGB FIFO中的颜色。 Rn,Gn,Bn,CDn 34 | 0,8,0 35 |
FC 37 | 远颜色  RFC,GFC,BFC 38 | 1,27,4 39 |
40 | 41 | 42 | 44 | 48 | 52 |
输出 43 |
RGBn 45 | RGB FIFO     Rn,Gn,Bn,CDn 46 | 0,8,0 47 |
[IR1,IR2,IR3] 49 | 颜色向量 50 | 1,11,4 51 |
[MAC1,MAC2,MAC3] 53 | 颜色向量 54 | 1,27,4 55 |
56 | 57 | 58 | 60 | 65 | 70 | 75 | 79 | 83 | 87 | 91 | 95 | 100 | 105 |
计算 59 |
1,27,4 61 | MAC1=A1[R0+ IR0*(Lm_B1[RFC - 62 | R0])] 63 | 1,27,16   lm=0 64 |
1,27,4 66 | MAC2=A2[G0+ IR0*(Lm_B1[GFC - 67 | G0])] 68 | 1,27,16   lm=0 69 |
1,27,4 71 | MAC3=A3[B0+ IR0*(Lm_B1[BFC - 72 | B0])] 73 | 1,27,16   lm=0 74 |
1,11,4 76 | IR1= Lm_B1[MAC1] 77 | 1,27,4    lm=0 78 |
1,11,4 80 | IR2= Lm_B2[MAC2] 81 | 1,27,4    lm=0 82 |
1,11,4 84 | IR3= Lm_B3[MAC3] 85 | 1,27,4    lm=0 86 |
0,8,0 88 | Cd0<-Cd1<-Cd2<- CODE 89 |   90 |
0,8,0 92 | R0<-R1<-R2<- Lm_C1[MAC1] 93 | 1,27,4 94 |
0,8,0 96 | G0<-G1<-G2<- 97 | Lm_C2[MAC2] 98 | 1,27,4 99 |
0,8,0 101 | B0<-B1<-B2<- 102 | Lm_C3[MAC3] 103 | 1,27,4 104 |
执行这个计算3次,所有3个RGB颜色都被深度化RGB颜色替换 106 |
107 |

  108 | 109 | 110 | 115 | 120 |
名称 111 | 周期 112 | 命令 113 | 描述 114 |
INTPL 116 | 8 117 | cop2 0x0980011 118 | 向量和远颜色插值 119 |
字段 121 | 无 122 |
123 | 124 | 125 | 127 | 131 | 135 | 139 |
输入 126 |
[IR1,IR2,IR3] 128 | 向量 129 | 1,3,12 130 |
IR0 132 | 插值值 133 | 1,3,12 134 |
CODE 136 | 由RGB得到的颜色。   CODE 137 | 0,8,0 138 |
FC 140 | 远颜色  RFC,GFC,BFC 141 | 1,27,4 142 |
143 | 144 | 145 | 147 | 151 | 155 |
输出 146 |
RGBn 148 | RGB FIFO     Rn,Gn,Bn,CDn 149 | 0,8,0 150 |
[IR1,IR2,IR3] 152 | 颜色向量 153 | 1,11,4 154 |
[MAC1,MAC2,MAC3] 156 | 颜色向量 157 | 1,27,4 158 |
159 | 160 | 161 | 163 | 168 | 173 | 178 | 182 | 186 | 190 | 194 | 198 | 203 |
计算 162 |
1,27,4 164 | MAC1=A1[IR1 + IR0*(Lm_B1[RFC - 165 | IR1])] 166 | 1,27,16 167 |
1,27,4 169 | MAC2=A2[IR2 + IR0*(Lm_B1[GFC - 170 | IR2])] 171 | 1,27,16 172 |
1,27,4 174 | MAC3=A3[IR3 + IR0*(Lm_B1[BFC - 175 | IR3])] 176 | 1,27,16 177 |
1,11,4 179 | IR1= Lm_B1[MAC1] 180 | 1,27,4 181 |
1,11,4 183 | IR2= Lm_B2[MAC2] 184 | 1,27,4 185 |
1,11,4 187 | IR3= Lm_B3[MAC3] 188 | 1,27,4 189 |
0,8,0 191 | Cd0<-Cd1<-Cd2<- CODE 192 |   193 |
0,8,0 195 | R0<-R1<-R2<- Lm_C1[MAC1] 196 | 1,27,4 197 |
0,8,0 199 | G0<-G1<-G2<- 200 | Lm_C2[MAC2] 201 | 1,27,4 202 |
0,8,0 204 | B0<-B1<-B2<- 205 | Lm_C3[MAC3] 206 | 1,27,4 207 |
208 |

  209 | 210 | 211 | 216 | 221 |
名称 212 | 周期 213 | 命令 214 | 描述 215 |
SQR 217 | 5 218 | cop2 0x0A00428 219 | 向量平方 220 |
字段 222 | sf 223 |
224 | 225 | 226 | 228 |
输入 227 |
[IR1,IR2,IR3] 229 | 向量 230 | 1,15,0或者1,3,12 231 |
232 | 233 | 234 | 236 | 240 |
输出 235 |
[IR1,IR2,IR3] 237 | 向量^2 238 | 1,15,0或者1,3,12 239 |
[MAC1,MAC2,MAC3] 241 | 向量^2 242 | 1,15,0或者1,3,12 243 |
244 | 245 | 246 | 248 | 252 | 256 | 260 | 265 | 270 |
计算:左边格式sf=0,右边格式sf=1 247 |
1,31,0或者1,19,12 249 | MAC1=A1[IR1*IR1] 250 | 1,43,0或者1,31,12 251 |
1,31,0或者1,19,12 253 | MAC2=A2[IR2*IR2] 254 | 1,43,0或者1,31,12 255 |
1,31,0或者1,19,12 257 | MAC3=A3[IR3*IR3] 258 | 1,43,0或者1,31,12 259 |
1,15,0或者1,3,12 261 | IR1= Lm_B1[MAC1] 262 | 1,31,0或者1,19,12    263 | lm=1 264 |
1,15,0或者1,3,12 266 | IR2= Lm_B2[MAC2] 267 | 1,31,0或者1,19,12    268 | lm=1 269 |
1,15,0或者1,3,12 271 | IR3= Lm_B3[MAC3] 272 | 1,31,0或者1,19,12    273 | lm=1 274 |
275 |

  276 | 277 | 278 | 283 | 288 |
名称 279 | 周期 280 | 命令 281 | 描述 282 |
NCS 284 | 14 285 | cop2 0x0C8041E 286 | 法颜色V0 287 |
字段 289 | 无 290 |
291 | 292 | 293 | 295 | 299 | 303 | 307 | 311 |
输入 294 |
V0 296 | 法颜色 297 | 1,3,12 298 |
BK 300 | 背景颜色 RGB,GBK,RBK 301 | 1,19,12 302 |
CODE 304 | 由RGB得到的颜色值  CODE 305 | 0,8,0 306 |
LCM 308 | 颜色矩阵 309 | 1,3,12 310 |
LLM 312 | 光源矩阵 313 | 1,3,12 314 |
315 | 316 | 317 | 319 | 323 | 327 |
输出 318 |
RGBn 320 | RGB FIFO   Rn,Gn,Bn,CDn 321 | 0,8,0 322 |
[IR1,IR2,IR3] 324 | 颜色向量 325 | 1,11,4 326 |
[MAC1,MAC2,MAC3] 328 | 颜色向量 329 | 1,27,4 330 |
331 | 332 | 333 | 335 | 340 | 345 | 350 | 355 | 360 | 365 | 370 | 375 | 380 | 385 | 390 | 395 | 399 | 403 | 408 |
计算: 334 |
1,19,12 336 | MAC1=A1[L11*VX0 + L12*VY0 + 337 | L13*VZ0] 338 | 1,19,24 339 |
1,19,12 341 | MAC2=A2[L21*VX0 + L22*VY0 + 342 | L23*VZ0] 343 | 1,19,24 344 |
1,19,12 346 | MAC3=A3[L31*VX0 + L32*VY0 + 347 | L33*VZ0] 348 | 1,19,24 349 |
1,3,12 351 | IR1= Lm_B1[MAC1] 352 | 1,19,12    353 | lm=1 354 |
1,3,12 356 | IR2= Lm_B2[MAC2] 357 | 1,19,12    358 | lm=1 359 |
1,3,12 361 | IR3= Lm_B3[MAC3] 362 | 1,19,12    363 | lm=1 364 |
1,19,12 366 | MAC1=A1[RBK + LR1*IR1 + 367 | LR2*IR2 + LR3*IR3] 368 | 1,19,24 369 |
1,19,12 371 | MAC2=A2[GBK + LG1*IR1 + 372 | LG2*IR2 + LG3*IR3] 373 | 1,19,24 374 |
1,19,12 376 | MAC3=A3[BBK + LB1*IR1 + 377 | LB2*IR2 + LB3*IR3] 378 | 1,19,24 379 |
1,3,12 381 | IR1= Lm_B1[MAC1] 382 | 1,19,12    383 | lm=1 384 |
1,3,12 386 | IR2= Lm_B2[MAC2] 387 | 1,19,12    388 | lm=1 389 |
1,3,12 391 | IR3= Lm_B3[MAC3] 392 | 1,19,12    393 | lm=1 394 |
0,8,0 396 | Cd0<-Cd1<-Cd2<- CODE 397 |   398 |
0,8,0 400 | R0<-R1<-R2<- Lm_C1[MAC1] 401 | 1,27,4 402 |
0,8,0 404 | G0<-G1<-G2<- 405 | Lm_C2[MAC2] 406 | 1,27,4 407 |
0,8,0 409 | B0<-B1<-B2<- 410 | Lm_C3[MAC3] 411 | 1,27,4 412 |
413 |

  414 | 415 | 416 | 421 | 426 |
名称 417 | 周期 418 | 命令 419 | 描述 420 |
NCT 422 | 30 423 | cop2 0x0D80420 424 | 法颜色V0,V1,V2 425 |
字段 427 | 无 428 |
429 | 430 | 431 | 433 | 437 | 441 | 445 | 449 |
输入 432 |
V0,V1,V2 434 | 法向量 435 | 1,3,12 436 |
BK 438 | 背景颜色 RGB,GBK,RBK 439 | 1,19,12 440 |
CODE 442 | 由RGB得到的颜色值  CODE 443 | 0,8,0 444 |
LCM 446 | 颜色矩阵 447 | 1,3,12 448 |
LLM 450 | 光源矩阵 451 | 1,3,12 452 |
453 | 454 | 455 | 457 | 461 | 465 |
输出 456 |
RGBn 458 | RGB FIFO   Rn,Gn,Bn,CDn 459 | 0,8,0 460 |
[IR1,IR2,IR3] 462 | 颜色向量 463 | 1,11,4 464 |
[MAC1,MAC2,MAC3] 466 | 颜色向量 467 | 1,27,4 468 |
469 | 470 | 471 | 473 |
计算: 472 |
和NCS一样,但是重复V1和V2 474 |
475 |

  476 | 477 | 478 | 483 | 488 |
名称 479 | 周期 480 | 命令 481 | 描述 482 |
NCDS 484 | 19 485 | cop2 0x0E80413 486 | 法颜色深度化 487 |
字段 489 | 无 490 |
491 | 492 | 493 | 495 | 499 | 503 | 507 | 511 | 515 |
输入 494 |
V0 496 | 法颜色 497 | 1,3,12 498 |
BK 500 | 背景颜色 RGB,GBK,RBK 501 | 1,19,12 502 |
RGB 504 | 主颜色      R,G,B,CODE 505 | 0,8,0 506 |
LCM 508 | 颜色矩阵 509 | 1,3,12 510 |
LLM 512 | 光源矩阵 513 | 1,3,12 514 |
IR0 516 | 插值值 517 | 1,3,12 518 |
519 | 520 | 521 | 523 | 527 | 531 |
输出 522 |
RGBn 524 | RGB FIFO   Rn,Gn,Bn,CDn 525 | 0,8,0 526 |
[IR1,IR2,IR3] 528 | 颜色向量 529 | 1,11,4 530 |
[MAC1,MAC2,MAC3] 532 | 颜色向量 533 | 1,27,4 534 |
535 | 536 | 537 | 539 | 544 | 549 | 554 | 559 | 564 | 569 | 574 | 579 | 584 | 589 | 594 | 599 | 604 | 609 | 614 | 618 | 622 | 626 | 630 | 634 | 639 |
计算: 538 |
1,19,12 540 | MAC1=A1[L11*VX0 + L12*VY0 + 541 | L13*VZ0] 542 | 1,19,24 543 |
1,19,12 545 | MAC2=A2[L21*VX0 + L22*VY0 + 546 | L23*VZ0] 547 | 1,19,24 548 |
1,19,12 550 | MAC3=A3[L31*VX0 + L32*VY0 + 551 | L33*VZ0] 552 | 1,19,24 553 |
1,3,12 555 | IR1= Lm_B1[MAC1] 556 | 1,19,12    557 | lm=1 558 |
1,3,12 560 | IR2= Lm_B2[MAC2] 561 | 1,19,12    562 | lm=1 563 |
1,3,12 565 | IR3= Lm_B3[MAC3] 566 | 1,19,12    567 | lm=1 568 |
1,19,12 570 | MAC1=A1[RBK + LR1*IR1 + 571 | LR2*IR2 + LR3*IR3] 572 | 1,19,24 573 |
1,19,12 575 | MAC2=A2[GBK + LG1*IR1 + 576 | LG2*IR2 + LG3*IR3] 577 | 1,19,24 578 |
1,19,12 580 | MAC3=A3[BBK + LB1*IR1 + 581 | LB2*IR2 + LB3*IR3] 582 | 1,19,24 583 |
1,3,12 585 | IR1= Lm_B1[MAC1] 586 | 1,19,12    587 | lm=1 588 |
1,3,12 590 | IR2= Lm_B2[MAC2] 591 | 1,19,12    592 | lm=1 593 |
1,3,12 595 | IR3= Lm_B3[MAC3] 596 | 1,19,12    597 | lm=1 598 |
1,27,4 600 | MAC1=A1[R*IR1 + 601 | IR0*(Lm_B1[RFC-R*IR1])] 602 | 1,27,16  lm=0 603 |
1,27,4 605 | MAC2=A1[G*IR2 + 606 | IR0*(Lm_B2[GFC-G*IR2])] 607 | 1,27,16  lm=0 608 |
1,27,4 610 | MAC3=A1[B*IR3 + 611 | IR0*(Lm_B3[BFC-B*IR3])] 612 | 1,27,16  lm=0 613 |
1,3,12 615 | IR1= Lm_B1[MAC1] 616 | 1,27,4    lm=1 617 |
1,3,12 619 | IR2= Lm_B2[MAC2] 620 | 1,27,4    lm=1 621 |
1,3,12 623 | IR3= Lm_B3[MAC3] 624 | 1,27,4    lm=1 625 |
0,8,0 627 | Cd0<-Cd1<-Cd2<- CODE 628 |   629 |
0,8,0 631 | R0<-R1<-R2<- Lm_C1[MAC1] 632 | 1,27,4 633 |
0,8,0 635 | G0<-G1<-G2<- 636 | Lm_C2[MAC2] 637 | 1,27,4 638 |
0,8,0 640 | B0<-B1<-B2<- 641 | Lm_C3[MAC3] 642 | 1,27,4 643 |
644 |

  645 | 646 | 647 | 652 | 657 |
名称 648 | 周期 649 | 命令 650 | 描述 651 |
NCDT 653 | 44 654 | cop2 0x0F80416 655 | 法颜色深度化V0,V1,V2 656 |
字段 658 | 无 659 |
660 | 661 | 662 | 664 | 668 | 672 | 676 | 680 | 684 | 688 | 692 | 696 |
输入 663 |
V0 665 | 法颜色 666 | 1,3,12 667 |
V1 669 | 法颜色 670 | 1,3,12 671 |
V2 673 | 法颜色 674 | 1,3,12 675 |
BK 677 | 背景颜色 RGB,GBK,RBK 678 | 1,19,12 679 |
FC 681 | 远颜色   RFC,GFC,RFC 682 | 1,27,4 683 |
RGB 685 | 主颜色      R,G,B,CODE 686 | 0,8,0 687 |
LCM 689 | 颜色矩阵 690 | 1,3,12 691 |
LLM 693 | 光源矩阵 694 | 1,3,12 695 |
IR0 697 | 插值值 698 | 1,3,12 699 |
700 | 701 | 702 | 704 | 708 | 712 |
输出 703 |
RGBn 705 | RGB FIFO   Rn,Gn,Bn,CDn 706 | 0,8,0 707 |
[IR1,IR2,IR3] 709 | 颜色向量 710 | 1,11,4 711 |
[MAC1,MAC2,MAC3] 713 | 颜色向量 714 | 1,27,4 715 |
716 | 717 | 718 | 720 |
计算: 719 |
和NCDS一样,但是重复V1和V2 721 |
722 |

  723 | 724 | 725 | 730 | 735 |
名称 726 | 周期 727 | 命令 728 | 描述 729 |
NCCS 731 | 17 732 | cop2 0x108041B 733 | 带颜色的法颜色 734 |
字段 736 | 无 737 |
738 | 739 | 740 | 742 | 746 | 750 | 754 | 758 |
输入 741 |
V0 743 | 法颜色 744 | 1,3,12 745 |
BK 747 | 背景颜色 RGB,GBK,RBK 748 | 1,19,12 749 |
RGB 751 | 主颜色      R,G,B,CODE 752 | 0,8,0 753 |
LCM 755 | 颜色矩阵 756 | 1,3,12 757 |
LLM 759 | 光源矩阵 760 | 1,3,12 761 |
762 | 763 | 764 | 766 | 770 | 774 |
输出 765 |
RGBn 767 | RGB FIFO   Rn,Gn,Bn,CDn 768 | 0,8,0 769 |
[IR1,IR2,IR3] 771 | 颜色向量 772 | 1,11,4 773 |
[MAC1,MAC2,MAC3] 775 | 颜色向量 776 | 1,27,4 777 |
778 | 779 | 780 | 782 | 787 | 792 | 797 | 802 | 807 | 812 | 817 | 822 | 827 | 832 | 837 | 842 | 846 | 850 | 854 | 858 | 862 | 866 | 870 | 874 | 879 |
计算: 781 |
1,19,12 783 | MAC1=A1[L11*VX0 + L12*VY0 + 784 | L13*VZ0] 785 | 1,19,24 786 |
1,19,12 788 | MAC2=A2[L21*VX0 + L22*VY0 + 789 | L23*VZ0] 790 | 1,19,24 791 |
1,19,12 793 | MAC3=A3[L31*VX0 + L32*VY0 + 794 | L33*VZ0] 795 | 1,19,24 796 |
1,3,12 798 | IR1= Lm_B1[MAC1] 799 | 1,19,12    800 | lm=1 801 |
1,3,12 803 | IR2= Lm_B2[MAC2] 804 | 1,19,12    805 | lm=1 806 |
1,3,12 808 | IR3= Lm_B3[MAC3] 809 | 1,19,12    810 | lm=1 811 |
1,19,12 813 | MAC1=A1[RBK + LR1*IR1 + 814 | LR2*IR2 + LR3*IR3] 815 | 1,19,24 816 |
1,19,12 818 | MAC2=A2[GBK + LG1*IR1 + 819 | LG2*IR2 + LG3*IR3] 820 | 1,19,24 821 |
1,19,12 823 | MAC3=A3[BBK + LB1*IR1 + 824 | LB2*IR2 + LB3*IR3] 825 | 1,19,24 826 |
1,3,12 828 | IR1= Lm_B1[MAC1] 829 | 1,19,12    830 | lm=1 831 |
1,3,12 833 | IR2= Lm_B2[MAC2] 834 | 1,19,12    835 | lm=1 836 |
1,3,12 838 | IR3= Lm_B3[MAC3] 839 | 1,19,12    840 | lm=1 841 |
1,27,4 843 | MAC1=A1[R*IR1] 844 | 1,27,16 845 |
1,27,4 847 | MAC2=A2[G*IR2] 848 | 1,27,16 849 |
1,27,4 851 | MAC3=A3[B*IR3] 852 | 1,27,16 853 |
1,3,12 855 | IR1= Lm_B1[MAC1] 856 | 1,27,4    lm=1 857 |
1,3,12 859 | IR2= Lm_B2[MAC2] 860 | 1,27,4    lm=1 861 |
1,3,12 863 | IR3= Lm_B3[MAC3] 864 | 1,27,4    lm=1 865 |
0,8,0 867 | Cd0<-Cd1<-Cd2<- CODE 868 |   869 |
0,8,0 871 | R0<-R1<-R2<- Lm_C1[MAC1] 872 | 1,27,4 873 |
0,8,0 875 | G0<-G1<-G2<- 876 | Lm_C2[MAC2] 877 | 1,27,4 878 |
0,8,0 880 | B0<-B1<-B2<- 881 | Lm_C3[MAC3] 882 | 1,27,4 883 |
884 |

  885 | 886 | 887 | 892 | 897 |
名称 888 | 周期 889 | 命令 890 | 描述 891 |
NCCT 893 | 39 894 | cop2 0x118043F 895 | 带颜色的法颜色V0,V1,V2 896 |
字段 898 | 无 899 |
900 | 901 | 902 | 904 | 908 | 912 | 916 | 920 | 924 | 928 |
输入 903 |
V0 905 | 法向量 906 | 1,3,12 907 |
V1 909 | 法向量 910 | 1,3,12 911 |
V2 913 | 法向量 914 | 1,3,12 915 |
BK 917 | 背景颜色 RGB,GBK,RBK 918 | 1,19,12 919 |
RGB 921 | 主颜色      R,G,B,CODE 922 | 0,8,0 923 |
LCM 925 | 颜色矩阵 926 | 1,3,12 927 |
LLM 929 | 光源矩阵 930 | 1,3,12 931 |
932 | 933 | 934 | 936 | 940 | 944 |
输出 935 |
RGBn 937 | RGB FIFO   Rn,Gn,Bn,CDn 938 | 0,8,0 939 |
[IR1,IR2,IR3] 941 | 颜色向量 942 | 1,11,4 943 |
[MAC1,MAC2,MAC3] 945 | 颜色向量 946 | 1,27,4 947 |
948 | 949 | 950 | 952 |
计算: 951 |
和NCCS一样,但是重复V1和V2 953 |
954 |

  955 | 956 | 957 | 962 | 967 |
名称 958 | 周期 959 | 命令 960 | 描述 961 |
CDP 963 | 13 964 | cop2 0x1280414 965 | 颜色深度查询 966 |
字段 968 | 无 969 |
970 | 971 | 972 | 974 | 978 | 982 | 986 | 990 | 994 |
输入 973 |
[IR1,IR2,IR3] 975 | 向量 976 | 1,3,12 977 |
RGB 979 | 主颜色      R,G,B,CODE 980 | 0,8,0 981 |
IR0 983 | 插值值 984 | 1,3,12 985 |
BK 987 | 背景颜色 RGB,GBK,RBK 988 | 1,19,12 989 |
LCM 991 | 颜色矩阵 992 | 1,3,12 993 |
FC 995 | 远颜色   RFC,GFC,RFC 996 | 1,27,4 997 |
998 | 999 | 1000 | 1002 | 1006 | 1010 |
输出 1001 |
RGBn 1003 | RGB FIFO   Rn,Gn,Bn,CDn 1004 | 0,8,0 1005 |
[IR1,IR2,IR3] 1007 | 颜色向量 1008 | 1,11,4 1009 |
[MAC1,MAC2,MAC3] 1011 | 颜色向量 1012 | 1,27,4 1013 |
1014 | 1015 | 1016 | 1018 | 1023 | 1028 | 1033 | 1038 | 1043 | 1048 | 1053 | 1057 | 1062 | 1066 | 1070 | 1074 | 1078 | 1082 | 1087 |
计算: 1017 |
1,19,12 1019 | MAC1=A1[RBK + LR1*IR1 + 1020 | LR2*IR2 + LR3*IR3] 1021 | 1,19,24 1022 |
1,19,12 1024 | MAC2=A2[GBK + LG1*IR1 + 1025 | LG2*IR2 + LG3*IR3] 1026 | 1,19,24 1027 |
1,19,12 1029 | MAC3=A3[BBK + LB1*IR1 + 1030 | LB2*IR2 + LB3*IR3] 1031 | 1,19,24 1032 |
1,3,12 1034 | IR1= Lm_B1[MAC1] 1035 | 1,19,12    1036 | lm=1 1037 |
1,3,12 1039 | IR2= Lm_B2[MAC2] 1040 | 1,19,12    1041 | lm=1 1042 |
1,3,12 1044 | IR3= Lm_B3[MAC3] 1045 | 1,19,12    1046 | lm=1 1047 |
1,27,4 1049 | MAC1=A1[R*IR1 + 1050 | IR0*(Lm_B1[RFC-R*IR1])] 1051 | 1,27,16  lm=0 1052 |
1,27,4 1054 | MAC2=A2[G*IR2 + IR0*(Lm_B2[GFC-G*IR2])] 1055 | 1,27,16  lm=0 1056 |
1,27,4 1058 | MAC3=A3[B*IR3 + 1059 | IR0*(Lm_B3[BFC-B*IR3])] 1060 | 1,27,16  lm=0 1061 |
1,3,12 1063 | IR1= Lm_B1[MAC1] 1064 | 1,27,4    lm=1 1065 |
1,3,12 1067 | IR2= Lm_B2[MAC2] 1068 | 1,27,4    lm=1 1069 |
1,3,12 1071 | IR3= Lm_B3[MAC3] 1072 | 1,27,4    lm=1 1073 |
0,8,0 1075 | Cd0<-Cd1<-Cd2<- CODE 1076 |   1077 |
0,8,0 1079 | R0<-R1<-R2<- Lm_C1[MAC1] 1080 | 1,27,4 1081 |
0,8,0 1083 | G0<-G1<-G2<- 1084 | Lm_C2[MAC2] 1085 | 1,27,4 1086 |
0,8,0 1088 | B0<-B1<-B2<- 1089 | Lm_C3[MAC3] 1090 | 1,27,4 1091 |
1092 |

  1093 | 1094 | 1095 | 1100 | 1105 |
名称 1096 | 周期 1097 | 命令 1098 | 描述 1099 |
CC 1101 | 11 1102 | cop2 0x138041C 1103 | 从光源向量和一个基本颜色计算一个颜色 1104 |
字段 1106 | 无 1107 |
1108 | 1109 | 1110 | 1112 | 1116 | 1120 | 1124 |
输入 1111 |
[IR1,IR2,IR3] 1113 | 向量 1114 | 1,3,12 1115 |
BK 1117 | 背景颜色 RGB,GBK,RBK 1118 | 1,19,12 1119 |
RGB 1121 | 主颜色      R,G,B,CODE 1122 | 0,8,0 1123 |
LCM 1125 | 颜色矩阵 1126 | 1,3,12 1127 |
1128 | 1129 | 1130 | 1132 | 1136 | 1140 |
输出 1131 |
RGBn 1133 | RGB FIFO   Rn,Gn,Bn,CDn 1134 | 0,8,0 1135 |
[IR1,IR2,IR3] 1137 | 颜色向量 1138 | 1,11,4 1139 |
[MAC1,MAC2,MAC3] 1141 | 颜色向量 1142 | 1,27,4 1143 |
1144 | 1145 | 1146 | 1148 | 1153 | 1158 | 1163 | 1168 | 1173 | 1178 | 1182 | 1186 | 1190 | 1194 | 1198 | 1202 | 1206 | 1210 | 1215 |
计算: 1147 |
1,19,12 1149 | MAC1=A1[RBK + LR1*IR1 + 1150 | LR2*IR2 + LR3*IR3] 1151 | 1,19,24 1152 |
1,19,12 1154 | MAC2=A2[GBK + LG1*IR1 + 1155 | LG2*IR2 + LG3*IR3] 1156 | 1,19,24 1157 |
1,19,12 1159 | MAC3=A3[BBK + LB1*IR1 + 1160 | LB2*IR2 + LB3*IR3] 1161 | 1,19,24 1162 |
1,3,12 1164 | IR1= Lm_B1[MAC1] 1165 | 1,19,12    1166 | lm=1 1167 |
1,3,12 1169 | IR2= Lm_B2[MAC2] 1170 | 1,19,12    1171 | lm=1 1172 |
1,3,12 1174 | IR3= Lm_B3[MAC3] 1175 | 1,19,12    1176 | lm=1 1177 |
1,27,4 1179 | MAC1=A1[R*IR1] 1180 | 1,27,16 1181 |
1,27,4 1183 | MAC2=A2[G*IR2] 1184 | 1,27,16 1185 |
1,27,4 1187 | MAC3=A3[B*IR3] 1188 | 1,27,16 1189 |
1,3,12 1191 | IR1= Lm_B1[MAC1] 1192 | 1,27,4    lm=1 1193 |
1,3,12 1195 | IR2= Lm_B2[MAC2] 1196 | 1,27,4    lm=1 1197 |
1,3,12 1199 | IR3= Lm_B3[MAC3] 1200 | 1,27,4    lm=1 1201 |
0,8,0 1203 | Cd0<-Cd1<-Cd2<- CODE 1204 |   1205 |
0,8,0 1207 | R0<-R1<-R2<- Lm_C1[MAC1] 1208 | 1,27,4 1209 |
0,8,0 1211 | G0<-G1<-G2<- 1212 | Lm_C2[MAC2] 1213 | 1,27,4 1214 |
0,8,0 1216 | B0<-B1<-B2<- 1217 | Lm_C3[MAC3] 1218 | 1,27,4 1219 |
1220 |

  1221 | 1222 | 1223 | 1228 | 1233 |
名称 1224 | 周期 1225 | 命令 1226 | 描述 1227 |
NCLIP 1229 | 8 1230 | cop2 0x1400006 1231 | 法向剪切 1232 |
字段 1234 | 无 1235 |
1236 | 1237 | 1238 | 1240 |
输入 1239 |
SXY0,SXY1,SXY2 1241 | 屏幕坐标 1242 | 1,15,0 1243 |
1244 | 1245 | 1246 | 1248 |
输出 1247 |
MAC0 1249 | SXY1和SXY2的外积,SXY0保持原状 1250 | 1,31,0 1251 |
1252 | 1253 | 1254 | 1256 |
计算: 1255 |
1,31,0 1257 | MAC0 = 1258 | F[SX0*SY1+SX1*SY2+SX2*SY0-SX0*SY2-SX1*SY0-SX2*SY1] 1259 | 1,43,0 1260 |
1261 |

  1262 | 1263 | 1264 | 1269 | 1274 |
名称 1265 | 周期 1266 | 命令 1267 | 描述 1268 |
AVSZ3 1270 | 5 1271 | cop2 0x158002D 1272 | 3个Z值平均 1273 |
字段 1275 | 无 1276 |
1277 | 1278 | 1279 | 1281 | 1285 |
输入 1280 |
SZ1,SZ2,SZ3 1282 | Z值 1283 | 0,16,0 1284 |
ZSF3 1286 | 除数 1287 | 1,3,12 1288 |
1289 | 1290 | 1291 | 1293 | 1297 |
输出 1292 |
OTZ 1294 | 平均 1295 | 0,16,0 1296 |
MAC0 1298 | 平均 1299 | 1,31,0 1300 |
1301 | 1302 | 1303 | 1305 | 1310 |
计算: 1304 |
1,31,0 1306 | MAC0=F[ZSF3*SZ1 + ZSF3*SZ2 + 1307 | ZSF3*SZ3] 1308 | 1,31,12 1309 |
0,16,0 1311 | OTZ=Lm_D[MAC0] 1312 | 1,31,0 1313 |
1314 |

  1315 | 1316 | 1317 | 1322 | 1327 |
名称 1318 | 周期 1319 | 命令 1320 | 描述 1321 |
AVSZ4 1323 | 6 1324 | cop2 0x168002E 1325 | 4个Z值平均 1326 |
字段 1328 | 无 1329 |
1330 | 1331 | 1332 | 1334 | 1338 |
输入 1333 |
SZ1,SZ2,SZ3,SZ4 1335 | Z值 1336 | 0,16,0 1337 |
ZSF4 1339 | 除数 1340 | 1,3,12 1341 |
1342 | 1343 | 1344 | 1346 | 1350 |
输出 1345 |
OTZ 1347 | 平均 1348 | 0,16,0 1349 |
MAC0 1351 | 平均 1352 | 1,31,0 1353 |
1354 | 1355 | 1356 | 1358 | 1363 |
计算: 1357 |
1,31,0 1359 | MAC0=F[ZSF4*SZ0 + ZSF4*SZ1 + 1360 | ZSF4*SZ2 + ZSF4*SZ3] 1361 | 1,31,12 1362 |
0,16,0 1364 | OTZ=Lm_D[MAC0] 1365 | 1,31,0 1366 |
1367 |

  1368 | 1369 | 1370 | 1375 | 1380 |
名称 1371 | 周期 1372 | 命令 1373 | 描述 1374 |
OP 1376 | 6 1377 | cop2 0x170000C 1378 | 外积 1379 |
字段 1381 | sf 1382 |
1383 | 1384 | 1385 | 1387 | 1391 |
输入 1386 |
[R11R12,R22R23,R33] 1388 | 向量1 1389 |   1390 |
[IR1,IR2,IR3] 1392 | 向量2 1393 |   1394 |
1395 | 1396 | 1397 | 1399 | 1403 |
输出 1398 |
[IR1,IR2,IR3] 1400 | 外积 1401 |   1402 |
[MAC1,MAC2,MAC3] 1404 | 外积 1405 |   1406 |
1407 | 1408 | 1409 | 1411 | 1415 | 1419 | 1423 | 1427 | 1431 |
计算:(D1=R11R12,D2=R22R23,D3=R33) 1410 |
  1412 | MAC1=A1[D2*IR3 - D3*IR2] 1413 |   1414 |
  1416 | MAC2=A2[D3*IR1 - D1*IR3] 1417 |   1418 |
  1420 | MAC3=A3[D1*IR2 - D2*IR1] 1421 |   1422 |
  1424 | IR1=Lm_B1[MAC1] 1425 |   1426 |
  1428 | IR2=Lm_B2[MAC2] 1429 |   1430 |
  1432 | IR3=Lm_B3[MAC3] 1433 |   1434 |
1435 |

  1436 | 1437 | 1438 | 1443 | 1448 |
名称 1439 | 周期 1440 | 命令 1441 | 描述 1442 |
GPF 1444 | 6 1445 | cop2 0x190003D 1446 | 通用目的插值 1447 |
字段 1449 | sf 1450 |
1451 | 1452 | 1453 | 1455 | 1459 | 1463 |
输入 1454 |
IR0 1456 | 缩放因子 1457 |   1458 |
CODE 1460 | RGB代码段 1461 |   1462 |
[IR1,IR2,IR3] 1464 | 向量 1465 |   1466 |
1467 | 1468 | 1469 | 1471 | 1475 | 1479 |
输出 1470 |
[IR1,IR2,IR3] 1472 | 向量 1473 |   1474 |
[MAC1,MAC2,MAC3] 1476 | 向量 1477 |   1478 |
RGB2 1480 | RGB信息 1481 |   1482 |
1483 | 1484 | 1485 | 1487 | 1491 | 1495 | 1499 | 1503 | 1507 | 1511 | 1515 | 1519 | 1524 |
计算: 1486 |
  1488 | MAC1=A1[IR0 * IR1] 1489 |   1490 |
  1492 | MAC2=A2[IR0 * IR2] 1493 |   1494 |
  1496 | MAC3=A3[IR0 * IR3] 1497 |   1498 |
  1500 | IR1=Lm_B1[MAC1] 1501 |   1502 |
  1504 | IR2=Lm_B2[MAC2] 1505 |   1506 |
  1508 | IR3=Lm_B3[MAC3] 1509 |   1510 |
0,8,0 1512 | Cd0<-Cd1<-Cd2<- CODE 1513 |   1514 |
0,8,0 1516 | R0<-R1<-R2<- Lm_C1[MAC1] 1517 |   1518 |
0,8,0 1520 | G0<-G1<-G2<- 1521 | Lm_C2[MAC2] 1522 |   1523 |
0,8,0 1525 | B0<-B1<-B2<- 1526 | Lm_C3[MAC3] 1527 |   1528 |
1529 |

  1530 | 1531 | 1532 | 1537 | 1542 |
名称 1533 | 周期 1534 | 命令 1535 | 描述 1536 |
GPL 1538 | 5 1539 | cop2 0x1A0003E 1540 | 通用目的插值 1541 |
字段 1543 | sf 1544 |
1545 | 1546 | 1547 | 1549 | 1553 | 1557 | 1561 |
输入 1548 |
IR0 1550 | 缩放因子 1551 |   1552 |
CODE 1554 | RGB代码段 1555 |   1556 |
[IR1,IR2,IR3] 1558 | 向量 1559 |   1560 |
[MAC1,MAC2,MAC3] 1562 | 向量 1563 |   1564 |
1565 | 1566 | 1567 | 1569 | 1573 | 1577 |
输出 1568 |
[IR1,IR2,IR3] 1570 | 向量 1571 |   1572 |
[MAC1,MAC2,MAC3] 1574 | 向量 1575 |   1576 |
RGB2 1578 | RGB信息 1579 |   1580 |
1581 | 1582 | 1583 | 1585 | 1589 | 1593 | 1597 | 1601 | 1605 | 1609 | 1613 | 1617 | 1622 |
计算: 1584 |
  1586 | MAC1=A1[MAC1 + IR0 * IR1] 1587 |   1588 |
  1590 | MAC2=A2[MAC2 + IR0 * IR2] 1591 |   1592 |
  1594 | MAC3=A3[MAC3 + IR0 * IR3] 1595 |   1596 |
  1598 | IR1=Lm_B1[MAC1] 1599 |   1600 |
  1602 | IR2=Lm_B2[MAC2] 1603 |   1604 |
  1606 | IR3=Lm_B3[MAC3] 1607 |   1608 |
0,8,0 1610 | Cd0<-Cd1<-Cd2<- CODE 1611 |   1612 |
0,8,0 1614 | R0<-R1<-R2<- Lm_C1[MAC1] 1615 |   1616 |
0,8,0 1618 | G0<-G1<-G2<- 1619 | Lm_C2[MAC2] 1620 |   1621 |
0,8,0 1623 | B0<-B1<-B2<- 1624 | Lm_C3[MAC3] 1625 |   1626 |
1627 |

 
1628 |
字段描述
1629 | 1630 | 1631 | 1640 |
24   20 1632 | 19 1633 | 18   17 1634 | 16   15 1635 | 14   13 1636 | 12   11 1637 | 10 1638 | 9     0 1639 |
  1641 | sf 1642 | mx 1643 | v 1644 | cv 1645 |   1646 | lm 1647 |   1648 |
1649 | 1650 | 1651 | 1655 |
sf 1652 | 0 1653 | 向量格式(1,31,0) 1654 |
1 1656 | 向量格式(1,19,12) 1657 |
1658 | 1659 | 1660 | 1664 | 1667 | 1670 |
mx 1661 | 0 1662 | 乘以旋转矩阵 1663 |
1 1665 | 乘以光源矩阵 1666 |
2 1668 | 乘以颜色矩阵 1669 |
3 1671 | 未知 1672 |
1673 | 1674 | 1675 | 1679 | 1682 | 1685 |
v 1676 | 0 1677 | V0 源矩阵(短) 1678 |
1 1680 | V1 源矩阵(短) 1681 |
2 1683 | V2 源矩阵(短) 1684 |
3 1686 | IR 源矩阵(长) 1687 |
1688 | 1689 | 1690 | 1694 | 1697 | 1700 |
cv 1691 | 0 1692 | 加平移向量 1693 |
1 1695 | 加背景颜色向量 1696 |
2 1698 | 未知 1699 |
3 1701 | 不加向量 1702 |
1703 | 1704 | 1705 | 1709 |
lm 1706 | 0 1707 | 没有负值限制 1708 |
1 1710 | 限制负值到0 1711 |
1712 |
1713 |
通用MVMVA指令列表
1714 | 1715 | 1716 | 1717 | 1726 | 1736 | 1746 | 1756 | 1766 | 1776 | 1786 | 1796 | 1806 | 1816 | 1826 | 1836 | 1846 | 1856 | 1866 | 1876 | 1886 | 1896 | 1906 | 1916 | 1926 | 1936 | 1946 | 1956 | 1966 | 1976 | 1986 | 1996 | 2006 | 2016 | 2026 | 2036 | 2046 | 2056 | 2066 | 2076 | 2086 | 2096 | 2106 |
1718 | 名称 1719 | 1720 | 周期数 1721 | 1722 | 命令 1723 | 1724 | 描述 1725 |
1727 | rtv0 1728 | 1729 | - 1730 | 1731 | cop2 1732 | 0x0486012 1733 | 1734 | v0×旋转矩阵 1735 |
1737 | rtv1 1738 | 1739 | - 1740 | 1741 | cop2 1742 | 0x048E012 1743 | 1744 | v1×旋转矩阵 1745 |
1747 | rtv2 1748 | 1749 | - 1750 | 1751 | cop2 1752 | 0x0496012 1753 | 1754 | v2×旋转矩阵 1755 |
1757 | rtir12 1758 | 1759 | - 1760 | 1761 | cop2 1762 | 0x049E012 1763 | 1764 | ir×旋转矩阵 1765 |
1767 | rtir0 1768 | 1769 | - 1770 | 1771 | cop2 1772 | 0x041E012 1773 | 1774 | ir×旋转矩阵 1775 |
1777 | rtv0tr 1778 | 1779 | - 1780 | 1781 | cop2 1782 | 0x0480012 1783 | 1784 | v0×旋转矩阵+平移向量 1785 |
1787 | rtv1tr 1788 | 1789 | - 1790 | 1791 | cop2 1792 | 0x0488012 1793 | 1794 | v1×旋转矩阵+平移向量 1795 |
1797 | rtv2tr 1798 | 1799 | - 1800 | 1801 | cop2 1802 | 0x0490012 1803 | 1804 | v2×旋转矩阵+平移向量 1805 |
1807 | rtirtr 1808 | 1809 | - 1810 | 1811 | cop2 1812 | 0x0498012 1813 | 1814 | ir×旋转矩阵+平移向量 1815 |
1817 | rtv0bk 1818 | 1819 | - 1820 | 1821 | cop2 1822 | 0x0482012 1823 | 1824 | v0×旋转矩阵+背景向量 1825 |
1827 | rtv1bk 1828 | 1829 | - 1830 | 1831 | cop2 1832 | 0x048A012 1833 | 1834 | v1×旋转矩阵+背景向量 1835 |
1837 | rtv2bk 1838 | 1839 | - 1840 | 1841 | cop2 1842 | 0x0492012 1843 | 1844 | v2×旋转矩阵+背景向量 1845 |
1847 | rtirbk 1848 | 1849 | - 1850 | 1851 | cop2 1852 | 0x049A012 1853 | 1854 | ir×旋转矩阵+背景向量 1855 |
1857 | ll 1858 | 1859 | - 1860 | 1861 | cop2 1862 | 0x04A6412 1863 | 1864 | v0×光源矩阵。下限为0 1865 |
1867 | llv0 1868 | 1869 | - 1870 | 1871 | cop2 1872 | 0x04A6012 1873 | 1874 | v0×光源矩阵 1875 |
1877 | llv1 1878 | 1879 | - 1880 | 1881 | cop2 1882 | 0x04AE012 1883 | 1884 | v1×光源矩阵 1885 |
1887 | llv2 1888 | 1889 | - 1890 | 1891 | cop2 1892 | 0x04B6012 1893 | 1894 | v2×光源矩阵 1895 |
1897 | llvir 1898 | 1899 | - 1900 | 1901 | cop2 1902 | 0x04BE012 1903 | 1904 | ir×光源矩阵 1905 |
1907 | llv0tr 1908 | 1909 | - 1910 | 1911 | cop2 1912 | 0x04A0012 1913 | 1914 | v0×光源矩阵+平移矩阵 1915 |
1917 | llv1tr 1918 | 1919 | - 1920 | 1921 | cop2 1922 | 0x04A8012 1923 | 1924 | v1×光源矩阵+平移矩阵 1925 |
1927 | llv2tr 1928 | 1929 | - 1930 | 1931 | cop2 1932 | 0x04B0012 1933 | 1934 | v2×光源矩阵+平移矩阵 1935 |
1937 | llirtr 1938 | 1939 | - 1940 | 1941 | cop2 1942 | 0x04B8012 1943 | 1944 | ir×光源矩阵+平移矩阵 1945 |
1947 | llv0bk 1948 | 1949 | - 1950 | 1951 | cop2 1952 | 0x04A2012 1953 | 1954 | v0×光源矩阵+背景向量 1955 |
1957 | llv1bk 1958 | 1959 | - 1960 | 1961 | cop2 1962 | 0x04AA012 1963 | 1964 | v1×光源矩阵+背景向量 1965 |
1967 | llv2bk 1968 | 1969 | - 1970 | 1971 | cop2 1972 | 0x04B2012 1973 | 1974 | v2×光源矩阵+背景向量 1975 |
1977 | llirbk 1978 | 1979 | - 1980 | 1981 | cop2 1982 | 0x04BA012 1983 | 1984 | ir×光源矩阵+背景向量 1985 |
1987 | lc 1988 | 1989 | - 1990 | 1991 | cop2 1992 | 0x04DA412 1993 | 1994 | v0×颜色矩阵。下限为0 1995 |
1997 | lcv0 1998 | 1999 | - 2000 | 2001 | cop2 2002 | 0x04C6012 2003 | 2004 | v0×颜色矩阵 2005 |
2007 | lcv1 2008 | 2009 | - 2010 | 2011 | cop2 2012 | 0x04CE012 2013 | 2014 | v1×颜色矩阵 2015 |
2017 | lcv2 2018 | 2019 | - 2020 | 2021 | cop2 2022 | 0x04D6012 2023 | 2024 | v2×颜色矩阵 2025 |
2027 | lcvir 2028 | 2029 | - 2030 | 2031 | cop2 2032 | 0x04DE012 2033 | 2034 | ir×颜色矩阵 2035 |
2037 | lcv0tr 2038 | 2039 | - 2040 | 2041 | cop2 2042 | 0x04C0012 2043 | 2044 | v0×颜色矩阵+平移矩阵 2045 |
2047 | lcv1tr 2048 | 2049 | - 2050 | 2051 | cop2 2052 | 0x04C8012 2053 | 2054 | v1×颜色矩阵+平移矩阵 2055 |
2057 | lcv2tr 2058 | 2059 | - 2060 | 2061 | cop2 2062 | 0x04D0012 2063 | 2064 | v2×颜色矩阵+平移矩阵 2065 |
2067 | lcirtr 2068 | 2069 | - 2070 | 2071 | cop2 2072 | 0x04D8012 2073 | 2074 | ir×颜色矩阵+平移矩阵 2075 |
2077 | lev0bk 2078 | 2079 | - 2080 | 2081 | cop2 2082 | 0x04C2012 2083 | 2084 | v0×颜色矩阵+平移矩阵 2085 |
2087 | lev1bk 2088 | 2089 | - 2090 | 2091 | cop2 2092 | 0x04CA012 2093 | 2094 | v1×颜色矩阵+平移矩阵 2095 |
2097 | lev2bk 2098 | 2099 | - 2100 | 2101 | cop2 2102 | 0x04D2012 2103 | 2104 | v2×颜色矩阵+平移矩阵 2105 |
2107 | leirbk 2108 | 2109 | - 2110 | 2111 | cop2 2112 | 0x04DA012 2113 | 2114 | ir×颜色矩阵+平移矩阵 2115 |
2116 |
 
2117 |
其他指令
2118 | 2119 | 2120 | 2121 | 2132 | 2144 | 2156 | 2168 | 2180 | 2192 | 2204 | 2216 |
2122 | 名称 2123 | 2124 | 周期数 2125 | 2126 | 命令 2127 | 2128 | 描述 2129 | 2130 | 格式 2131 |
2133 | sqr12 2134 | 2135 | - 2136 | 2137 | cop2 2138 | 0x0A80428 2139 | 2140 | ir平方 2141 | 2142 | 1,19,12 2143 |
2145 | sqr0 2146 | 2147 | - 2148 | 2149 | cop2 2150 | 0x0A80428 2151 | 2152 | ir平方 2153 | 2154 | 1,31, 0 2155 |
2157 | op12 2158 | 2159 | - 2160 | 2161 | cop2 2162 | 0x178000C 2163 | 2164 | 外积 2165 | 2166 | 1,19,12 2167 |
2169 | op0 2170 | 2171 | - 2172 | 2173 | cop2 2174 | 0x170000C 2175 | 2176 | 外积 2177 | 2178 | 1,31, 0 2179 |
2181 | gpf12 2182 | 2183 | - 2184 | 2185 | cop2 2186 | 0x198003D 2187 | 2188 | 通用目的插值 2189 | 2190 | 1,19,12 2191 |
2193 | gpf0 2194 | 2195 | - 2196 | 2197 | cop2 2198 | 0x190003D 2199 | 2200 | 通用目的插值 2201 | 2202 | 1,31, 0 2203 |
2205 | gpl12 2206 | 2207 | - 2208 | 2209 | cop2 2210 | 0x1A8003E 2211 | 2212 | 通用目的插值 2213 | 2214 | 1,19,12 2215 |
2217 | gpl0 2218 | 2219 | - 2220 | 2221 | cop2 2222 | 0x1A0003E 2223 | 2224 | 通用目的插值 2225 | 2226 | 1,31, 0 2227 |
2228 | 2229 | 2230 | -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/中央处理器(CPU)R3000A.md: -------------------------------------------------------------------------------- 1 | 中央处理器(CPU) R3000A 2 | ================= 3 | 4 | PSX采用的R3000A芯片有些小变动,由MIPS变成LSI,它是一个32位的缩减指令集控制器(RISC)处理器,主频是33.8688MHz,每秒钟能处理3千万条指令。它有4KB的指令缓存、1KB的数据缓存和传输率为132MB/秒的总线,内含一个算术/逻辑运算器(ALU)和一个移位器,但缺少一个浮点运算器(FPU)。在R3000A里,一个字是32位,半字是16位,字节是8位的。PSX里有2个协处理器Cop,Cop0是系统控制器,Cop1是图形处理器(GPU)。 5 | 6 | ### 指令缓存: 7 | 8 | (4KB缓存的管道尺寸为16字节)。可以获得80%左右的命中率,缓存是物理寻址和标识的。 9 | 10 | ### 数据缓存: 11 | 12 | (1KB缓存的管道尺寸为4字节)。也可以获得80%左右的命中率,也是物理寻址和标识的。这是写通缓存,可以保持缓存内容和主存内容一致,为了减少写数据时CPU的停顿,总线接口单元用了一个4深度的写缓冲器以CPU的速度来捕获地址和数据,允许用较慢的速度来写入主存而不影响CPU。 13 | 14 | ### 通用寄存器: 15 | 16 | R3000A使用32个32位的寄存器,一个32位的指令指针,两个32位的乘除寄存器,见下表: 17 | 18 | | 寄存器号码 | 名字 | 用法 | 19 | | ------- | ----- |:----------:| 20 | | R0 | ZR | 常量 0 | 21 | | R1 | AT | 为汇编程序保留 | 22 | | R2-R3 | V0-V1 | 计算结果和表达式赋值 | 23 | | R4-R7 | A0-A3 | 自变量 | 24 | | R8-R15 | T0-T7 | 临时变量 | 25 | | R16-R23 | S0-S7 | 全局变量 | 26 | | R24-R25 | T8-T9 | 额外的临时变量 | 27 | | R26-R27 | K0-K1 | 为操作系统核心保留 | 28 | | R28 | GP | 全局指针 | 29 | | R29 | SP | 栈指针 | 30 | | R30 | FP | 页面指针 | 31 | | R31 | RA | 返回地址 | 32 | 33 | ### 乘除结果寄存器和指令指针: 34 | 35 | | 名字 | 描述 | 36 | | --- | ----------------------- | 37 | | HI | 乘法运算64位结果的高32位,或除法运算的余数 | 38 | | LO | 乘法运算64位结果的低32位,或除法运算的商 | 39 | | PC | 指令指针 | 40 | 41 | 尽管每个寄存器都有自己的名字,但它们都是一样的,除了2个:R0(ZR)是由硬件指定永远为0的;R31(RA)用于Link或Jump到子程序时保存返回地址,它可以像普通寄存器那样被其他指令读写。 42 | 43 | ## R3000A指令集 44 | 45 | 指令编码是基于MIPS结构的,这表示了有三种类型指令编码: 46 | 47 | I类型(Immediate立即) 48 | 49 | | op | rs | rt | immediate | 50 | | --- | --- | --- | --------- | 51 | 52 | J类型(Jump跳转) 53 | 54 | | op | target | 55 | | --- | ------ | 56 | 57 | R类型(Register寄存器) 58 | 59 | | op | rs | rt | rd | shamt | funct | 60 | | --- | --- | --- | --- | ----- | ----- | 61 | 62 | 其中: 63 | 64 | | op | 6位的操作码 | 65 | | --------- | ------------------ | 66 | | rs | 5位的源寄存器指示器 | 67 | | rt | 5位的目标寄存器或者跳转条件 | 68 | | immediate | 16位的立即数,或者跳转或者替换地址 | 69 | | target | 26位跳转目标地址 | 70 | | rcl | 5位目标寄存器指示器 | 71 | | shamt | 5位的移位总数 | 72 | | funct | 6位的函数段 | 73 | 74 | R3000A指令可以分为下面几个基本组: 75 | 76 | 装入/储存指令:在内存和通用寄存器之间移动数据,是I类型指令。唯一的寻址模式是寄存器+带符号立即数偏移寻址,这使得可以直接使用3种不同的寻址模式:寄存器+偏移、寄存器直接和立即数。 77 | 78 | 算术指令:对寄存器执行算术,逻辑和移位操作,当源操作数和结果都是通用寄存器时,是R类型;当源操作数中有一个是16位立即数时,是R类型指令。计算指令使用3个地址格式,所以操作不必影响到源寄存器的内容。 79 | 80 | 跳转和分支指令:改变程序的控制流。当跳转目标地址是联合一个26位立即数和4位指令指针得到的页面绝对地址,是J类型指令,用于调用子程序;当目标地址是通用寄存器中的32位值时,是R类型,通常用来返回和快速结束;分支指令是I类型,目标地址是指令指针+16位偏移。跳转和链接指令在寄存器R31保存一个返回地址,通常用于调用子程序,子程序的返回地址就存在R31。 81 | 82 | 协处理器指令:执行协处理器集的操作。协处理器的装入和储存总是I类型;协处理器操作性指令是依赖于协处理器的格式。在R3000A中,系统控制协处理器(cop0)包含了内存管理和异常处理的寄存器。 83 | 84 | 特殊指令:执行多种任务,包括在特殊和通用寄存器之间移动数据、系统调用和断点操作,总是R类型的。 85 | 86 | ## 指令集 87 | 88 | 下面的表是R3000A的汇编指令。 89 | 90 | ### 转入和储存指令 91 | 92 | | 指令 | 格式和描述 | 93 | | ---------------------- | -------------------------------------------------------------------------------- | 94 | | Load Byte | LB rt, offset (base)
符号扩展16位偏移+寄存器中的基址寻址
寻址字节符号扩展后装到rt | 95 | | Load Byte Unsigned | LBU rt, offset (base)
符号扩展16位偏移+寄存器中的基址寻址
寻址字节0扩展后装到rt | 96 | | Load Halfword | LH rt, offset (base)
符号扩展16位偏移+寄存器中的基址寻址
寻址半字符号扩展后装到rt | 97 | | Load Halfword Unsigned | LHU rt, offset (base)
符号扩展16位偏移+寄存器中的基址寻址
寻址半字0扩展后装到rt | 98 | | Load Word | LW rt, offset (base)
符号扩展16位偏移+寄存器中的基址寻址
寻址字装到rt | 99 | | Load Word Left | LWL rt, offset (base)
符号扩展16位偏移+寄存器中的基址寻址
寻址字左移位,使得寻址字节是字的左字节,然后合并到rt寄存器 | 100 | | Load Word Right | LWR rt, offset (base)
符号扩展16位偏移+寄存器中的基址寻址
寻址字右移位,使得寻址字节是字的右字节,然后合并到rt寄存器 | 101 | | Store Byte | SB rt, offset (base)
符号扩展16位偏移+寄存器中的基址寻址
储存rt寄存器的最低有效字节到寻址位置 | 102 | | Store Halfword | SH rt, offset (base)
符号扩展16位偏移+寄存器中的基址寻址
储存rt寄存器的最低有效半字到寻址位置 | 103 | | Store Word | SW rt, offset (base)
符号扩展16位偏移+寄存器中的基址寻址
储存rt寄存器的最低有效字到寻址位置 | 104 | | Store Word Left | SWL rt, offset (base)
符号扩展16位偏移+寄存器中的基址寻址
rt寄存器右移位,然后储存到寻址字节 | 105 | | Store Word Right | SWR rt, offset (base)
符号扩展16位偏移+寄存器中的基址寻址
rt寄存器左移位,然后储存到寻址字节 | 106 | 107 | ### 算术指令 108 | 109 | #### ALU立即指令 110 | 111 | | 指令 | 格式和描述 | 112 | | ----------------------------------- | ----------------------------------------------------------------------------- | 113 | | ADD Immediate | ADDI rt, rs, immediate
寄存器rs加16位符号扩展数到寄存器rt。2补数溢出自陷 | 114 | | ADD Immediate Unsigned | ADDIU rt, rs, immediate
寄存器rs加16位符号扩展数到寄存器rt。溢出不自陷 | 115 | | Set on Less Than Immediate | SLTI rt, rs, immediate
比较16位符号扩展立即数和带符号32位整数rs,如果rs小于立即数,rt是1,否则是0 | 116 | | Set on Less Than Unsigned Immediate | SLTIU rt, rs, immediate
比较16位符号扩展立即数和无符号32位整数rs,如果rs小于立即数,rt是1,否则是0。溢出不自陷 | 117 | | AND Immediate | ANDI rt, rs, immediate
0扩展16位立即数‘与’寄存器rs到寄存器rt | 118 | | OR Immediate | ORI rt, rs, immediate
0扩展16位立即数‘或’寄存器rs到寄存器rt | 119 | | Exclusive OR Immediate | XORI rt, rs, immediate
0扩展16位立即数‘异或’寄存器rs到寄存器rt | 120 | | Load Upper Immediate | LUI rt, immediate
16位立即数左移16位。设置字的最低有效16位为0,结果存到rt | 121 | 122 | #### 3操作数R类型指令 123 | 124 | | 指令 | 格式和描述 | 125 | | ------------------------- | ------------------------------------------------------------- | 126 | | Add | ADD rd, rs, rt
寄存器rs+rt,32位结果存到寄存器rd
2的补数溢出自陷 | 127 | | ADD Unsigned | ADDU rd, rs, rt
寄存器rs+rt,32位结果存到寄存器rd
不自陷 | 128 | | Subtract | SUB rd, rs, rt
寄存器rs-rt,32位结果存到寄存器rd
2的补数溢出自陷 | 129 | | Subtract Unsigned | SUBU rd, rs, rt
寄存器rs-rt,32位结果存到寄存器rd
不自陷 | 130 | | Set on Less Than | SLT rd, rs, rt
比较寄存器rs和rt(32位带符号整数),如果rs小于rt,rd=1,否则rt=0 | 131 | | Set on Less Than Unsigned | SLTU rd, rs, rt
比较寄存器rs和rt(32位无符号整数),如果rs小于rt,rd=1,否则rt=0 | 132 | | AND | AND rd, rs, rt
rs‘与’rt,结果存到rd | 133 | | OR | OR rd, rs, rt
rs‘或’rt,结果存到rd | 134 | | Exclusive OR | XOR rd, rs, rt
rs‘异或’rt,结果存到rd | 135 | | NOR | NOR rd, rs, rt
rs‘或非’rt,结果存到rd | 136 | 137 | #### 移位操作指令 138 | 139 | | 指令 | 格式和描述 | 140 | | ------------------------------- | ---------------------------------------------------------- | 141 | | Shift Left Logical | SLL rd, rt, shamt
寄存器rt左移shamt位,低位补0,32位结果存在rd | 142 | | Shift Right Logical | SRL rd, rt, shamt
寄存器rt右移shamt位,高位补0,32位结果存在rd | 143 | | Shift Right Arithmetic | SRA rd, rt, shamt
寄存器rt左移shamt位,符号扩展高位,32位结果存在rd | 144 | | Shift Left Logical Variable | SLLV rd, rt, rs
寄存器rt左移,移位数是寄存器rs的低5位,低位补0,32位结果存在rd | 145 | | Shift Right Logical Variable | SRLV rd, rt, rs
寄存器rt右移,移位数是寄存器rs的低5位,高位补0,32位结果存在rd | 146 | | Shift Right Arithmetic Variable | SRAV rd, rt, rs
寄存器rt左移,移位数是寄存器rs的低5位,符号扩展高位,32位结果存在rd | 147 | 148 | #### 乘除运算指令 149 | 150 | | 指令 | 格式和描述 | 151 | | ----------------- | --------------------------------------------------------- | 152 | | Multiply | MULT rs, rt
寄存器rs和rt作为2的补数相乘,64位结果存在寄存器HI/LO | 153 | | Multiply Unsigned | MULTU rs, rt
寄存器rs和rt作为无符号数相乘,64位结果存在寄存器HI/LO | 154 | | Divide | DIV rs, rt
寄存器rs和rt作为2的补数相除,32位商存在寄存器LO,32位余数存在寄存器HI | 155 | | Divide Unsigned | DIVU rs, rt
寄存器rs和rt作为无符号数相除,32位商存在寄存器LO,32位余数存在寄存器HI | 156 | | Move From HI | MFHI rd
移动寄存器HI的值到rd | 157 | | Move From LO | MFLO rd
移动寄存器LO的值到rd | 158 | | Move To HI | MTHI rd
移动寄存器rd的值到HI | 159 | | Move To LO | MTLO rd
移动寄存器rd的值到LO | 160 | 161 | ### 跳转和转移指令 162 | 163 | #### 跳转指令 164 | 165 | | 指令 | 格式和描述 | 166 | | ---------------------- | ------------------------------------------------------------------ | 167 | | Jump | J target
左移26位target地址,加上PC的高4位,1个指令延时后跳转。 | 168 | | Jump and Link | JAL arget
左移26位target地址,加上PC的高4位,1个指令延时后跳转。下一个指令地址放到r31(链接寄存器) | 169 | | Jump Register | JR rs
跳转到寄存器rs中的地址,1个指令延时 | 170 | | Jump and Link Register | JALR rs, rd
跳转到寄存器rs中的地址,1个指令延时。下一个指令地址放到r31(链接寄存器) | 171 | 172 | #### 分支指令 173 | 174 | | 指令 | 格式和描述 | 175 | | --------------------------------------------- | ---------------------------------------------------------------------- | 176 | | . | 分支目标:
所有分支指令目标地址是这样计算的:指令地址加上16位偏移地址(左移2位后扩展符号到32位),全部的分支都是1个指令延时。 | 177 | | Branch on Equal | BEQ rs, rt, offset
如果rs等于rt,转移到目标地址 | 178 | | Branch on Not Equal | BNE rs, rt, offset
如果rs不等于rt,转移到目标地址 | 179 | | Branch on Less than or Equal Zero | BLEZ rs, offset
如果rs小于等于0,转移到目标地址 | 180 | | Branch on Greater Than Zero | BGTZ rs, offset
如果rs大于0,转移到目标地址 | 181 | | Branch on Less Than Zero | BLTZ rs, offset
如果rs小于0,转移到目标地址 | 182 | | Branch on Greater than or Equal Zero | BGEZ rs, offset
如果rs大于等于0,转移到目标地址 | 183 | | Branch on Less Than Zero And Link | BLTZAL rs, offset
如果rs小于0,转移到目标地址。下一个指令地址存到r31 | 184 | | Branch on greater than or Equal Zero And Link | BGEZAL rs, offset
如果rs大于等于0,转移到目标地址。下一个指令地址存到r31 | 185 | 186 | ### 特殊指令 187 | 188 | | 指令 | 格式和描述 | 189 | | ----------- | --------------------------------- | 190 | | System Call | SYSCALL
初始化系统调用自陷,立刻转移控制到异常处理 | 191 | | Breakpoint | BREAK
初始化断点自陷,立刻转移控制到异常处理 | 192 | 193 | ### 协处理器指令 194 | 195 | | 指令 | 格式和描述 | 196 | | ------------------------------ | ------------------------------------------------------------------ | 197 | | Load Word to Co-processor | LWCz rt, offset (base)
16位符号扩展偏移+基址寻址
寻址字装到z协处理器单元的寄存器rt | 198 | | Store Word from Co-processor | SWCz rt, offset (base)
16位符号扩展偏移+基址寻址
z协处理器单元的寄存器rt存到内存寻址字 | 199 | | Move To Co-processor | MTCz rt, rd
移动CPU寄存器rt到z协处理器单元的寄存器rd | 200 | | Move from Co-processor | MFCz rt,rd
移动z协处理器单元的寄存器rd到CPU寄存器rt | 201 | | Move Control To Co-processor | CTCz rt,rd
移动CPU寄存器rt到z协处理器单元的控制寄存器rd | 202 | | Move Control From Co-processor | CFCz rt,rd
移动z协处理器单元的控制寄存器rd到CPU寄存器rt | 203 | | Move Control To Co-processor | COPz cofun
协处理器z进行一个操作,R3000A的状态不会被协处理器改变 | 204 | 205 | #### 系统控制协处理器(COP0)指令 206 | 207 | | 指令 | 格式和描述 | 208 | | ---------------------------- | -------------------------------------------------------------------------- | 209 | | Move To CP0 | MTC0 rt, rd
储存CPU寄存器rt到CP0寄存器rd。这个命令跟在普通储存操作之后。 | 210 | | Move From CP0 | MFC0 rt, rd
装载CP0寄存器rd到CPU寄存器rt | 211 | | Read Indexed TLB Entry | TLBR
装载Index寄存器指定的TLB条目到EntryHi和EntryLo寄存器 | 212 | | Write Indexed TLB Entry | TLBWI
装载EntryHi和EntryLo寄存器到Index寄存器指定的TLB条目 | 213 | | Write Random TLB Entry | TLBWR
装载EntryHi和EntryLo寄存器到Random寄存器指定的TLB条目 | 214 | | Probe TLB for Matching Entry | TLBP
装载和EntryHi和EntryLo匹配的TLB条目地址到Index寄存器,如果没有TLB条目匹配,设置Index寄存器的高顺序位 | 215 | | Restore From Exception | RFE
恢复前一个中断掩码和状态寄存器的模式位到当前状态位,恢复旧的状态位到前一个状态位。 | 216 | 217 | ### R3000A操作码编码 218 | 219 | 下面是MIPS结构的操作码编码 220 | 221 | #### 操作码 222 | 223 | | 位 | 28...26 | | | | | | | | 224 | | ----- | ------- | ----- | ---- | ----- | ---- | --- | ---- | ---- | 225 | | 38…29 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 226 | | 0 | SPECIAL | BCOND | J | JAL | BEQ | BNE | BLEZ | BGTZ | 227 | | 1 | ADDI | ADDIU | SLTI | SLTIU | ANDI | ORI | XORI | LUI | 228 | | 2 | COP0 | COP1 | COP2 | COP3 | † | † | † | † | 229 | | 3 | † | † | † | † | † | † | † | † | 230 | | 4 | LB | LH | LWL | LW | LBU | LHU | LWR | † | 231 | | 5 | SB | SH | SWL | SW | † | † | SWR | † | 232 | | 6 | LWC0 | LWC1 | LWC2 | LWC3 | † | † | † | † | 233 | | 7 | SWC0 | SWC1 | SWC2 | SWC3 | † | † | † | † | 234 | 235 | #### 特殊 236 | 237 | | 位 | 2…0 | | | | | | | | 238 | | --- | ---- | ----- | ---- | ---- | ------- | ----- | ---- | ---- | 239 | | 5…3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 240 | | 0 | SLL | † | SRL | SRA | SLLV | † | SRLV | SRAV | 241 | | 1 | JR | JALR | † | † | SYSCALL | BREAK | † | † | 242 | | 2 | MFHI | MTHI | MFLO | MTLO | † | † | † | † | 243 | | 3 | MULT | MULTU | DIV | DIVU | † | † | † | † | 244 | | 4 | ADD | ADDU | SUB | SUBU | AND | OR | XOR | NOR | 245 | | 5 | † | † | SLT | SLTU | † | † | † | † | 246 | | 6 | † | † | † | † | † | † | † | † | 247 | | 7 | † | † | † | † | † | † | † | † | 248 | 249 | #### 条件跳转 250 | 251 | | 位 | 8…16 | | | | | | | | 252 | | ----- | ------ | ------ | --- | --- | --- | --- | --- | --- | 253 | | 20…19 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 254 | | 0 | BLTZ | BGEZ | | | | | | | 255 | | 1 | | | | | | | | | 256 | | 2 | BLTZAL | BGEZAL | | | | | | | 257 | 258 | #### 协处理器z 259 | 260 | | 位 | 23…21 | | | | | | | | 261 | | ----- | ----- | --- | --- | --- | --- | --- | --- | --- | 262 | | 25…24 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 263 | | 0 | MF | | CF | | MT | | CT | | 264 | | 1 | BC | † | † | † | † | † | † | † | 265 | 266 | 协处理器特殊操作 267 | 268 | #### 协处理器0(COP0) 269 | 270 | | 位 | 2…0 | | | | | | | | 271 | | --- | ---- | ---- | ----- | --- | --- | --- | ----- | --- | 272 | | 4…3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 273 | | 0 | | TLBR | TLBWI | | | | TLBWR | | 274 | | 1 | TLBP | | | | | | | | 275 | | 2 | RFE | | | | | | | | 276 | | 3 | | | | | | | | | 277 | -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/内存.md: -------------------------------------------------------------------------------- 1 | 内存 2 | == 3 | 4 | PSX有4个512K共2M的60ns SRAM芯片,它的编址是0x00xxxxxx、0xA0xxxxxx和0x80xxxxxx,都指向相同的物理内存。PSX用Cop0来处理内存管理的几乎每一个方面,先看一下内存是如何安排的。 5 | 6 | ## 内存映像图 7 | 8 | | 开始地址 | 用途 | 结束地址 | 9 | | --------- | ---------------- | --------- | 10 | | 0000_0000 | 内核 64K | 0000_FFFF | 11 | | 0001_0000 | 用户内存 1.9M | 001F_FFFF | 12 | | 1F00_0000 | 并行口 64K | 1F00_FFFF | 13 | | 1F80_0000 | 便笺本 1K | 1F80_03FF | 14 | | 1F80_1000 | 硬件寄存器 8K | 1F80_2FFF | 15 | | 8000_0000 | 内核和用户内存镜像 2M,缓冲 | 801F_FFFF | 16 | | A000_0000 | 内核和用户内存镜像 2M,不缓冲 | A01F_FFFF | 17 | | BFC0_0000 | BIOS 512K | BFC7_FFFF | 18 | 19 | 空白格表示没有内存,镜像主要是用来缓冲和进行中断处理,内核也和用户内存一样被镜像。 20 | 21 | ## 虚拟内存 22 | 23 | PSX使用虚拟内存体系来帮助普通系统内存和缓存的管理,简单地说,PSX把2M的内存映射到3个不同的虚拟地址空间段,它们的名字是Kuseg、Kseg0和Kseg1。 24 | 25 | Kuseg从0x0000_0000到0x001F_FFFF,你可以把它叫做“真实”内存,内核可以方便的通过它访问用户内存区域。 26 | 27 | Kseg0位于虚拟地址的0x8000_0000到0x801F_FFFF,它转换到从0开始的2M的物理线性地址空间,所有通过这个段的调用都是可缓冲的。当虚拟地址的最高3位是‘100’的时候,虚拟地址驻留在Kseg0,将‘100’替换为‘000’就得到物理地址。 28 | 29 | Kseg1位于虚拟地址的0xA000_0000到0xA01F_FFFF,它也是指向从0开始2M线性空间。当虚拟地址的最高3位是‘101’的时候,虚拟地址驻留在Kseg1,将‘101’替换为‘000’就得到物理地址。不同于Kseg0的是,通过Kseg1的调用是不缓冲的。 30 | 31 | 更深入一点了解R3000A的虚拟内存,32位虚拟地址的高20位叫做虚拟页面号码(VPN),而其中只用到了最高的3位来做虚拟地址和物理地址的转换。) 32 | 33 | ![](./img/内存/PixPin_2024-07-21_13-10-14.png) 34 | 35 | 虚拟地址的三个最高位指示了处理器正在使用哪个虚拟内存段,这些段关联到各自的映射算法和是否被缓冲,页面通过替换虚拟地址的20位VPN到20位的物理帧号码(PFN)来映射。这个映射是通过译码检索缓冲器(TLB)来进行的,这个TLB是一个全相联储存器,包含64个条目,提供64个4KB页面的映射,每个TLB条目的宽度是64位,当虚拟调用Kuseg时,每一个TLB条目都会被检查是否对应到相应的VPN。 36 | 37 | 下图是TLB的示意图,整个子系统都是由Cop0来操作的。 38 | 39 | ![](./img/内存/ps_con.gif) 40 | 41 | ## Cop0 系统控制处理器 42 | 43 | 这个单元实际是R3000A的一部分,它由原来的R3000A的Cop0增加了小量的寄存器和函数改制而成,Cop0包含16个32位的控制寄存器,用来进行内存管理、系统中断管理和断点的多方面控制。大多数是和普通的R3000A兼容的,下面是寄存器一览表。 44 | 45 | | 号码 | 助记符 | 名字 | 读/写 | 用途 | 46 | | --- | ------- | ------------------------------ | --- | ------------------------------ | 47 | | 0 | INDX | Index | 读/写 | 64条目TLB文件的条目索引 | 48 | | 1 | RAND | Random | 读 | 为软件提供随机的TLB条目来写入正确的译码 | 49 | | 2 | TLBL | TBL low | 读/写 | 提供对TLB文件进行读、写和检索操作的数据路径(前32位) | 50 | | 3 | BPC | Breakpoint PC | 读/写 | 设置运行中断的断点地址 | 51 | | 4 | CTXT | Context | 读 | BADV寄存器的副本,但它的格式更适应于软件的TLB中断处理 | 52 | | 5 | BDA | Breakpoint data | 读/写 | 设置装入/储存操作的断点地址 | 53 | | 6 | PIDMASK | PID Mask | 读/写 | 进程标识符 | 54 | | 7 | DCIC | Data/Counter interrupt control | 读/写 | 断点控制 | 55 | | 8 | BADV | Bad Virtual Address | 读 | 引起中断的调用的地址 | 56 | | 9 | BDAM | Break data mask | 读/写 | 数据提取地址和这个值进行‘与’操作,然后和BDA的值比较 | 57 | | 10 | TLBH | TBL high | 读/写 | 提供对TLB文件进行读、写和检索操作的数据路径(后32位) | 58 | | 11 | BPCM | Break point counter mask | 读/写 | 指令指针和这个值进行‘与’操作,然后和BPC的值比较 | 59 | | 12 | SR | System status register | 读/写 | 包含全部主要的状态标志 | 60 | | 13 | CAUSE | Cause | 读 | 指示最近发生的中断 | 61 | | 14 | EPC | Exception Program Counter | 读 | 中断返回地址 | 62 | | 15 | PRID | Processor ID | 读 | Cop0的型号和版本 | 63 | | 16 | ERREG | ??? | ? | ???? | 64 | 65 | ### TLB相关寄存器: 66 | 67 | Index寄存器:32位可读写寄存器,其中6位用来指示TLB中的条目,最高位是状态位用来表示TLB检索(tlbp)指令是成功还是失败,失败时被设为1。它也用来指定TBL读写指令的目的条目。结构如下:(0是保留的,必须写0,读的时候也返回0) 68 | 69 | | P | 0 | Index | 0 | 70 | | --- | ----- | ----- | --- | 71 | | 1位 | 17位 | 6位 | 8位 | 72 | | 32 | 31-14 | 13-8 | 7-0 | 73 | 74 | Random寄存器:32位只读寄存器,其中6位用来指示TLB中随机的一个条目。它是一个每个时钟周期都递减的计算器,但是计数范围是从63到8,这就是可以保证Random寄存器永远不指向TLB前8个条目,这些条目就可以被软件“锁定”到TLB文件,保证在使用这些虚拟地址时TLB不会发生未命中中断,这对于操作系统尤为重要。Random寄存器最典型的是用在TLB未命中中断中,它提供一个“推荐”的TLB条目来写入正确的译码,尽管它的效率不如最近最少使用算法(LRU),但是在允许很简单的硬件软件管理条件下,提供了非常接近的性能。要进行一个TLB替换,使用TLB写随机(tlbwr)指令来写到这个寄存器指向的条目。就算使用随机TLB替换算法,两个处理器也能同步工作。在系统复位时,计算器被预置为63。软件也可以直接读这个寄存器,尽管它在设备测试和诊断之外几乎没有用处。结构如下:(0是保留的,读的时候返回0) 75 | 76 | | 0 | Random | 0 | 77 | | ----- | ------ | --- | 78 | | 18位 | 6位 | 8位 | 79 | | 32-14 | 13-8 | 7-0 | 80 | 81 | TLB High和TLB Low寄存器:这两个寄存器提供了读、写和检索TLB文件的数据路径,它的格式和TLB条目格式是一样的,如下:PID是6位的进程标识符,TBL是允许多进程共享的,当不同的进程用同一个虚拟地址指向不同物理地址时,用PID来区别条目; 82 | N是Non-Cacheable,当它被设置时,表示页面是不可缓冲的; 83 | D是Dirty,当它被设置时表示页面是脏的,即是可写,可以把它看作一个“写保护"标志,软件可以用它来防止数据被修改; 84 | V是Valid,当它被设置时表示TLB条目有效,否则表示TLBL或TLBS未命中发生; 85 | G是Global,当它被设置时将忽略PID的匹配检查,在kseg2里,它允许内核访问全部映射的数据而不要保存或恢复PID值。 86 | 0是保留的,必须写0,读的时候也返回0。 87 | 88 | ![](./img/内存/PixPin_2024-07-21_13-31-28.png) 89 | 90 | ## 中断处理 91 | 92 | 程序运行中总有些时候需要挂起当前任务去处理一些其他硬件或软件功能,R3000A提供的中断(异常)处理功能是用来确保控制权从执行程序有秩序地转移到内核。中断可以大致分为2类:一是由指令或者指令序列产生,包括一些不正常地条件出现;二是由外部事件产生,例如硬件中断。当R3000A检测到中断发生,正常的指令序列会被暂停和悬挂起来,处理器会被迫进入内核模式,来处理一些不正常的或不同步的事件,下表列出了R3000A所认识的中断: 93 | 94 | | 中断 | 助记符 | 触发 | 95 | | -------------------- | ------------------------- | ---------------------------------------------------------------- | 96 | | Reset | Reset | 复位信号,把控制权转移到指定的虚拟地址0xBFC0_0000(BIOS的开始) | 97 | | Bus Error | IBE DBE(Data) | 总线输入错误,外部事件引起。如总线超时,底层内存错误,无效物理地址或访问类型 | 98 | | Address Error | AdEL(Load)
AdES(Store) | 常识装入、提取或储存一个不联结的字,也即一个字或半字不均匀地分成4或2份;
在用户模式,调用一个最高有效位被设置的虚拟地址 | 99 | | Overflow | Ovf | 加或减溢出 | 100 | | System Call | Sys | 执行SYSCALL陷阱指令 | 101 | | Breakpoint | Bp | 执行break指令 | 102 | | Reserved Instruction | RI | 执行未定义的或保留的大操作码(31:26位)或特殊的未定义的小操作码(5:0)指令 | 103 | | Co-processorUnusable | CpU | 执行一个协处理器指令而该协处理器的CU(Co-processor  usable)位未被设置 | 104 | | TLB Miss | TLBL(Load)
TLBS(Store) | 调用的TLB条目的Valid位未被设置 | 105 | | TLB Modified | Mod | 执行储存指令时,相应TLB条目的Valid位被设置而Dirty位没有被设置 | 106 | | Interrupt | Int | 六个硬件中断中的一个有输入或Cause寄存器的两个软件中断中的一个被设置 | 107 | 108 | ### 中断相关寄存器: 109 | 110 | Cause寄存器:指示最近发生的中断,5位的中断代码,指示了当前的中断,其他位包含了这个中断的详细信息。除了SW位,其他位都是只读的。结构如下: 111 | BD:Branch Delay,如果中断发生在转移指令执行的时候,这个位会被设置,EPC会返回到跳转指令的地方,在中断返回之后重新判断转移方向,重执行转移指令; 112 | CE:Coprocessor Error,因为某个协处理器没有在SR里被使能,而导致协处理器指令出错发生中断的这个协处理号码; 113 | IP:Interrupt Pending,指示了哪个中断在处理中,而不管它是否被屏蔽了,IP区可以用来测定那个中断正在处理; 114 | SW:Software Interrupts,SW可以用写来设置或复位软件中断,只要SW的任何一个位被设置,并且在SR的中断掩字里相应的位也被设置,则发生一个中断。 115 | 0:保留,必须写0,读取的时候返回0。 116 | EXECODE:Exception Code,描述中断发生的类型,见下表: 117 | 118 | | 号码 | 助记符 | 描述 | 119 | | ----- | ---- | ----------------- | 120 | | 0 | INT | 外部中断 | 121 | | 1 | MOD | TLB修改中断 | 122 | | 2 | TLBL | TLB未命中中断(读取或指令取出) | 123 | | 3 | TLBS | TLB未命中中断(储存) | 124 | | 4 | ADEL | 地址错误中断(读取或指令取出) | 125 | | 5 | ADES | 地址错误中断(储存) | 126 | | 6 | IBE | 总线错误中断(指令取出) | 127 | | 7 | DBE | 总线错误中断(数据装入或储存) | 128 | | 8 | SYS | SYSCALL中断 | 129 | | 9 | BP | 断点中断 | 130 | | 10 | RI | 保留的指令中断 | 131 | | 11 | CPU | 协处理器不可用中断 | 132 | | 12 | OVF | 算术运算溢出中断 | 133 | | 13-31 | - | 保留 | 134 | 135 | | BD | 0 | CE | 0 | IP | SW | 0 | EXECODE | 0 | 136 | | --- | --- | ----- | ----- | ----- | --- | --- | ------- | --- | 137 | | 1位 | 1位 | 2位 | 12位 | 6位 | 2位 | 1位 | 5位 | 2位 | 138 | | 31 | 30 | 29、28 | 27-16 | 15-10 | 9、8 | 7 | 6-2 | 1、0 | 139 | 140 | EPC寄存器: 141 | Exception Program 142 | Counter,32位的EPC寄存器保存了发生中断时正常指令的虚拟地址,亦即中断服务完成后的返回地址,当中断发生在转移指令中,EPC保存的是转移指令的地址,中断后从新执行转移指令。 143 | 144 | BADV寄存器: 145 | 保存了任何发生地址错误中断的错误虚拟地址,只读。 146 | 147 | Context寄存器: 148 | 部分BADV寄存器的副本,但是它的格式更方便于软件TLB中断处理程序的使用。Context寄存器用来使软件快速测定页面表条目里错误地址在主记忆体里的地址,也使软件能快速地用一个9指令的代码序列来更新TLB。结构如下: 149 | 0:保留,读写都是0; 150 | BADV:失效虚拟页面号码(由硬件设置,和BADV一样是只读的); 151 | PTE Base:页面表条目的基址(由内核设置); 152 | 153 | | PTE Base | BADV | 0 | 154 | | -------- | ---- | --- | 155 | | 11位 | 19位 | 2位 | 156 | | 31-21 | 20-2 | 1、0 | 157 | 158 | Status寄存器: 159 | 这个寄存器包含了全部主要的状态位,任何中断都把系统置于内核模式,除了TS(TLB 160 | Shutdown)位是只读的之外,其他所有位都是可读可写的。这个寄存器里的KU(Kernel/User)位和IE(Interrupt)位有3层‘栈’(current,previous和old),每发生一个中断就压一次‘栈’,然后由中断指令的Restore来出‘栈’,这些位也是可读可写的。复位的时候,SWc,KUc和IEc位被设为0,BEV被设为1,TS被设为0,其他位在复位的时候没有被定义。寄存器结构如下: 161 | CU:Co-processor 162 | Usability,这些位分别控制用户级访问协处理器的操作,包括BrCond输入端口的表决和系统控制协处理器(CP0)如何处理。CU2是GTE,CU1是FPA(在PSX里没有用到); 163 | RE:Rverse 164 | Endianess,R3000A允许系统在复位时决定内核模式字节顺序的习惯和用户模式的缺省设置。如果该位被清除,当前用户任务使用和内核模式一样的字节顺序;如果被设置,用户任务就用相反的字节顺序。这个位对内核模式没用影响。 165 | BEV:Bootstrap Exception 166 | Vector。这个位的值决定了处理器中断向量的位置,BEV=1,处理器处于自举模式,中断向量位于BIOS 167 | ROM里;BEV=0,处理器处于正常模式,中断向量处于RAM里; 168 | TS:TLB Shutdown,这个位反映了TLB是否工作; 169 | PE:Parity Error,在起动的时候这个位应该被写一个“1”,一旦初始化之后,读这个位就总会返回“0”; 170 | CM:Cache 171 | Miss,当缓存未命中发生时这个位被设置,这个在确定内部子系统缓存的大小和操作方面很有用; 172 | PZ:Parity Zero,这个位应该写0; 173 | SwC:Swap 174 | Caches,设置这个位会引起执行核心将芯片内的指令缓存当作数据缓存来用,而将它清除则不交换缓存。这个在某些操作例如缓存填充上很有用,而在正常操作中不应该交换缓存; 175 | IsC:隔离缓存,如果这个位被设置,数据缓存是和主存隔离的;也就是储存数据时修改数据缓存不会引起主存的改变,读取数据时也只从缓存返回而不管缓存是否命中。在多种操作里,这个位也是很有用的,例如填充; 176 | IM:Interrupt 177 | Mask,这个8位的域用来对执行引擎屏蔽硬件和软件中断,也就是不允许他们引起中断。IM(1:0)用了屏蔽软件中断,IM(7:2)屏蔽6个外部中断。0禁止一个特定的中断,1使能这个中断。注意IE位是一个全局的中断使能,也就是说,如果IE禁止了中断,特殊屏蔽位的值就不起作用了,如果IE使能中断,指定的中断将受这个域内的屏蔽位影响; 178 | KUo:Kernel/User old,这是两个中断之前的特权状态,0表示内核模式; 179 | IEo:Interrupt Enable 180 | old,这是两个中断之前的全局中断使能状态。1表示中断使能,受到IM屏蔽的影响; 181 | KUp:Kernel/User previous,这是当前中断之前的特权状态,0表示内核模式; 182 | IEp:Interrupt Enable 183 | previous,这是当前中断之前的全局中断使能状态。1表示中断使能,受到IM屏蔽的影响; 184 | KUc:Kernel/User current,这是当前特权状态,0表示内核模式; 185 | IEc:Interrupt Enable current,这是当前全局中断使能状态。1表示中断使能,受到IM屏蔽的影响; 186 | 0:保留,必须写0,读取也返回0。 187 | 188 | | CU | 0 | RE | 0 | BEV | TS | PE | CM | PZ | SwC | IsC | IntMask | 0 | KUo | IEo | KUp | IEp | KUc | IEc | 189 | | ----- | ----- | --- | ----- | --- | --- | --- | --- | --- | --- | --- | ------- | --- | --- | --- | --- | --- | --- | --- | 190 | | 4位 | 2位 | 1位 | 2位 | 1位 | 1位 | 1位 | 1位 | 1位 | 1位 | 1位 | 8位 | 2位 | 1位 | 1位 | 1位 | 1位 | 1位 | 1位 | 191 | | 31-28 | 27、26 | 25 | 24、23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15-8 | 7 | 5 | 4 | 3 | 2 | 1 | 0 | 192 | 193 | PRID寄存器: 194 | 这个寄存器对于软件确定用处理器的哪个版本执行代码很有用,格式如下: 195 | Imp:3代表CoP0型号R3000A,7代表IDT单元(3041)使用REV来确定正确的配置; 196 | Rev:版本。 197 | 198 | | 0 | Imp | Rev | 199 | | ----- | ---- | --- | 200 | | 16位 | 8位 | 8位 | 201 | | 31-16 | 15-8 | 7-0 | 202 | 203 | ### 中断向量位置: 204 | 205 | R3000A把中断分到3个向量空间。每个向量的值都与状态寄存器的BEV位有关,它可以交替使用两套向量(因此有两套代码片断)。一般地说,这是用了在缓存可用之前用来分析测试的,处理器复位强迫BEV位的值变为1。 206 | 207 | ![](./img/内存/PixPin_2024-07-21_14-00-46.png) 208 | 209 | ### 中断优先权: 210 | 211 | | Reset | 任何时候(最高) | 212 | | ----- | ---------------- | 213 | | AdEL | 内存(载入指令) | 214 | | AdES | 内存(储存指令) | 215 | | DBE | 内存(载入和储存) | 216 | | MOD | ALU(数据TLB) | 217 | | TLBL | ALU(DTLB未命中) | 218 | | TLBS | ALU(DTLB未命中) | 219 | | Ovf | ALU | 220 | | Int | ALU | 221 | | Sys | RD(指令译码) | 222 | | Bp | RD(指令译码) | 223 | | RI | RD(指令译码) | 224 | | CpU | RD(指令译码) | 225 | | TLBL | I-Fetch(ITLB未命中) | 226 | | AdEL | IVA(指令虚拟地址) | 227 | | IBE | BD(I-Fetch结束,最低) | 228 | 229 | ## 断点管理 230 | 231 | 下面是Cop0里用来做断点管理的寄存器,这些寄存器在低级调试中很有用。 232 | 233 | BPC寄存器:执行断点,设置执行时的断点地址。 234 | 235 | BDA寄存器:数据访问断点,设置要中断的载入和储存操作地址。 236 | 237 | DCIC寄存器:断点控制,要使用执行断点,设PC位1;要使用数据访问断点,设DA为1或者设置R,W两者的任意组合。两种断点都可以相似地使用,当遇到断点时PSX跳到0x0000_0040。寄存器结构如下: 238 | W:1表示‘写’时中断; 239 | R:1表示‘读’时中断; 240 | DA:1表示数据访问中断使能; 241 | PC:1表示执行中断使能。 242 | 243 | | 1 | 1 | 1 | 0 | W | R | DA | PC | 1 | 0 | 244 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---- | 245 | | 1位 | 1位 | 1位 | 1位 | 1位 | 1位 | 1位 | 1位 | 1位 | 23位 | 246 | | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22-0 | 247 | 248 | BDAM寄存器:数据访问断点掩码,数据提取地址和这个值进行‘与’操作,然后和BDA比较。 249 | 250 | BPCM寄存器:执行断点掩码,指令指针和这个值进行‘与’操作,然后和BPC比较。 251 | 252 | ## DMA 253 | 254 | 为了让一个设备直接访问内存,PSX需要不时地把CPU从总线上撤下来。这些可以控制总线地设备是CD-ROM,MDEC,GPU,SPU和并行口。一共有7个DMA通道,其中GPU和MDEC各使用2个,DMA寄存器位于0x1F80_1080到0x1F80_10F4之间。DMA通道寄存器从0x1F80_1080开始,每个通道的基地址如下: 255 | 256 | | 基地址 | 通道号码 | 设备 | 257 | | ----------- | ---- | ---------------- | 258 | | 0x1F80_1080 | DMA0 | MDECin | 259 | | 0x1F80_1090 | DMA1 | MDECout | 260 | | 0x1F80_10A0 | DMA2 | GPU(列表+图像数据) | 261 | | 0x1F80_10B0 | DMA3 | CD-ROM | 262 | | 0x1F80_10C0 | DMA4 | SPU | 263 | | 0x1F80_10D0 | DMA5 | PIO | 264 | | 0x1F80_10E0 | DMA6 | GPU OTC(反向清除顺序表) | 265 | 266 | 每个通道都有3个32位控制寄存器,他们是DMA内存地址寄存器(D_MADR)位于基地址,DMA块控制寄存器(D_BCR)位于基地址+4,和DMA通道控制寄存器(D_CHCR)位于基地址+8。为了使用某个DMA通道,这个通道必须通过DMA主控制寄存器(DPCR,位于0x1F80_10F0)来使能。 267 | 268 | DMA主控制寄存器(DPCR),0x1F80_10F0,在这个寄存器里为每个通道分配了一个4位的控制块,要使能一个通道,第3位必须被设为1,其他位作用未明。 269 | 270 | | | DMA6 | DMA5 | DMA4 | DMA3 | DMA2 | DMA1 | DMA0 | 271 | | ----- | ----- | ----- | ----- | ----- | ---- | ---- | ---- | 272 | | 4位 | 4位 | 4位 | 4位 | 4位 | 4位 | 4位 | 4位 | 273 | | 31-28 | 27-24 | 23-20 | 19-26 | 25-12 | 11-8 | 7-4 | 3-0 | 274 | 275 | 如前所述,每个设备有3个32位控制寄存器位于自己的DMA地址空间里,下面描述了他们的功能。n代表了8,9,A,B,C,D,E,分别相对于0,1,2,3,4,5,6通道。 276 | 277 | DMA内存地址寄存器(D_MADR),0x1F80_10n0 278 | MADR:指向DMA读取/写入的开始地址 279 | 280 | | MADR | 281 | | ---- | 282 | | 32位 | 283 | | 31-0 | 284 | 285 | DMA块控制寄存器(D_BCR),0x1F80_10n4,通道将传输BA个BS大小的字块。注意不要把尺寸设置大于对于单元所有的缓存大小(GPU和SPU都是$10字大小的缓存)。块尺寸越大,传输越快。 286 | BA:块数目; 287 | BS:块尺寸。 288 | 289 | | BA | BS | 290 | | ----- | ---- | 291 | | 16位 | 16位 | 292 | | 31-16 | 15-0 | 293 | 294 | DMA通道控制寄存器(D_CHCR),0x1F80_10n8 295 | TR:0表示没有DMA传输忙,1表示开始DMA传输或DMA传输忙; 296 | LR:1表示传送连接列表; 297 | CO:1表示传送数据连续流; 298 | DR:传送方向。 299 | 300 | | 0 | TR | 0 | LI | CO | 0 | DR | 301 | | ----- | --- | ----- | --- | --- | --- | --- | 302 | | 7位 | 1位 | 13位 | 1位 | 1位 | 8位 | 1位 | 303 | | 31-25 | 24 | 23-11 | 10 | 9 | 8-1 | 0 | 304 | 305 | DMA中断控制寄存器(DICR),0x1F80_10F4,是用来了控制DMA中断的,用法到现在还不知道。 306 | -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/几何变换引擎(GTE).md: -------------------------------------------------------------------------------- 1 | # 几何变换引擎(GTE) 2 | 3 | 几何变换引擎(GTE)是PSX全部3D计算的核心。GTE可以进行向量和矩阵操作,视角变换,颜色均衡等等。它比CPU进行这些操作快得多,作为PSX的第二个协处理器,没有分配物理地址内存,所有的控制通过特殊指令完成。 4 | 5 | ## 基本算法 6 | 7 | 在3D空间中一个点(顶点)的描述是用一个向量[X,Y,Z]。在GTE操作中,有两种向量,一种是变长度的,另一种是1.0单元长度,叫做法向量。前者用来描述3D空间的一个位置和平移,第二个用来描述方向。 8 | 9 | 顶点的旋转是进行顶点向量和旋转矩阵的乘法。旋转矩阵是3×3的矩阵包含了3个正交法向量(它实际上是一个矩阵,描述了顶点所在的坐标系统和全局坐标系统的关系)。这个矩阵来自旋转角度,如下所示: 10 | 11 | $$ 12 | sn=sin(n),cn=cos(n) 13 | $$ 14 | 15 | 绕X轴旋转角度A: 16 | 17 | | \|1 | 0 | 0\| | 18 | | --- | --- | ----- | 19 | | \|0 | cA | -sA\| | 20 | | \|0 | sA | cA\| | 21 | 22 | 绕Y轴旋转角度B: 23 | 24 | | \|cB | 0 | sB\| | 25 | | ----- | --- | ---- | 26 | | \|0 | 1 | 0\| | 27 | | \|-sB | 0 | cB\| | 28 | 29 | 绕Z轴旋转角度C: 30 | 31 | | \|cC | -sC | 0\| | 32 | | ---- | --- | --- | 33 | | \|sC | cC | 0\| | 34 | | \|0 | 0 | 1\| | 35 | 36 | 绕多个轴旋转可以通过这些矩阵相乘完成,注意相乘的顺序非常重要。GTE没有sin或者cos函数,所以这些计算要通过CPU完成。平移是简单的两个向量相加,在当前坐标系中重定位顶点,当然,顶点平移和旋转的顺序也是很重要的。 37 | 38 | ## 函数简要描述 39 | 40 | | RTPS/RTPT | 旋转、平移和视角转换
这两个函数对1个或者3个顶点同时进行最终的3D计算。这些点先乘以旋转矩阵R再加上平移矩阵TR,最后应用一个视角转换,生成2D屏幕坐标。它也返回一个插值值用在各种深度化指令中。 | 41 | | ----------- | ------------------------------------------------------------------------------------------------------- | 42 | | MVMVA | 矩阵和向量乘法和加法

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

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

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

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

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

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

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

3个顶点相对于虚拟点应该按顺时针储存,这样如果我们面对平面的背面,函数的结果是负值 | 53 | | AVSZ3/AVSZ4 | 累加3或者4个Z值,然后乘以一个固定点的值。这个值通常是经过挑选的,这样函数可以返回这些Z值的平均值(通常还要用2或者4去除一下,以便加到顺序表OT) | 54 | | OP | 计算两个向量的外积 | 55 | | GPF | 两个向量相乘。返回值作为24位RGB值 | 56 | | GPL | 一个向量乘以一个标量后加到另一个向量。返回值作为24位RGB值 | 57 | 58 | ## 指令 59 | 60 | CPU有6个特别的针对GTE寄存器的装入和储存指令,一个指令用来向协处理器下达命令 61 | 62 | | rt | CPU寄存器0-31 | 63 | | --------- | ------------- | 64 | | gd | GTE数据寄存器0-31 | 65 | | gc | GTE控制寄存器0-31 | 66 | | imm | 16位立即数 | 67 | | base | CPU寄存器0-31 | 68 | | imm(base) | base+imm指向的地址 | 69 | | b25 | 25位字长数据段 | 70 | 71 | | LWC2 gd,imm(base) | 储存imm(base)的值到GTE数据寄存器gd | 72 | | ----------------- | ------------------------ | 73 | | SWC2 gd,imm(base) | 储存GTE数据寄存器到imm(base) | 74 | | MTC2 rt,gd | 储存寄存器rt到GTE数据寄存器gd | 75 | | MFC2 rt,gd | 储存GTE数据寄存器gd到寄存器rt | 76 | | CTC2 rt,gc | 储存寄存器rt到GTE控制寄存器gc | 77 | | CFC2 rt,gc | 储存GTE控制寄存器gc到寄存器rt | 78 | | COP2 b25 | 执行GTE命令 | 79 | 80 | 所有访问该寄存器的GTE命令和操作,GTE装入和储存指令有2个指令的延迟。 81 | 82 | ### 对GTE编程 83 | 84 | 使用GTE前要先打开它,在系统控制协处理器(cop0)的状态寄存器中分配了第30位给GTE。在使用任何GTE指令前,先要设置它。 85 | 86 | GTE指令和函数不应该用在:跳转和分支的延迟中、事件处理和中断中。 87 | 88 | 如果在当前GTE命令未完成前读取GTE寄存器或者执行GTE命令,CPU会保持它知道指令完成。每个GTE指令所需的周期数在命令列表中显示。 89 | 90 | ## 寄存器 91 | 92 | GTE有32个数据寄存器和32个控制寄存器,每个都是32字长。控制寄存器通称为Cop2C,数据寄存器称为Cop2D。下表描述了他们的用法。 93 | 94 | **控制寄存器Cop2C** 95 | 96 | | 序号 | 名称 | 描述 | 97 | | --- | ------ | ---------------- | 98 | | 0 | R11R12 | 旋转矩阵元素11,12 | 99 | | 1 | R13R21 | 旋转矩阵元素13,21 | 100 | | 2 | R22R23 | 旋转矩阵元素22,23 | 101 | | 3 | R31R32 | 旋转矩阵元素31,32 | 102 | | 4 | R33 | 旋转矩阵元素33 | 103 | | 5 | TRX | 旋转向量X | 104 | | 6 | TRY | 旋转向量Y | 105 | | 7 | TRZ | 旋转向量Z | 106 | | 8 | L11L12 | 光源矩阵元素11,12 | 107 | | 9 | L13L21 | 光源矩阵元素13,21 | 108 | | 10 | L22L23 | 光源矩阵元素22,23 | 109 | | 11 | L31L32 | 光源矩阵元素31,32 | 110 | | 12 | L33 | 光源矩阵元素33 | 111 | | 13 | RBK | 背景颜色红色分量 | 112 | | 14 | BBK | 背景颜色蓝色分量 | 113 | | 15 | GBK | 背景颜色绿色分量 | 114 | | 16 | LR1LR2 | 光源颜色矩阵源1和2红色分量 | 115 | | 17 | LR3LG1 | 光源颜色矩阵源3红色,1绿色分量 | 116 | | 18 | LG2LG3 | 光源颜色矩阵源2和3绿色分量 | 117 | | 19 | LB1LB2 | 光源颜色矩阵源1和2蓝色分量 | 118 | | 20 | LB3 | 光源颜色矩阵源3蓝色分量 | 119 | | 21 | RFC | 远颜色红色分量 | 120 | | 22 | GFC | 远颜色绿色分量 | 121 | | 23 | BFC | 远颜色蓝色分量 | 122 | | 24 | OFX | 屏幕偏移X | 123 | | 25 | OFY | 屏幕偏移Y | 124 | | 26 | H | 投影平面距离 | 125 | | 27 | DQA | 深度查询参数A(系数) | 126 | | 28 | DQB | 深度查询参数B(偏移) | 127 | | 29 | ZSF3 | Z3平均缩放因子(通常是1/3) | 128 | | 30 | ZSF4 | Z4平均缩放因子(通常是1/4) | 129 | | 31 | FLAG | 返回任何计算错误 | 130 | 131 | ## 控制寄存器 132 | 133 | GTE使用带符号定点寄存器进行运算,下面是寄存器字长描述。 134 | 135 | ![](./img/几何变换引擎(GTE)/20240724151939.png) 136 | 137 | 标志寄存器 138 | 139 | | 位 | 标志 | 140 | | --- | ----------------------------------------- | 141 | | 31 | 第30-23、18-13位的逻辑和 | 142 | | 30 | 计算测试结果#1溢出(大于$2^{43}$) | 143 | | 29 | 计算测试结果#2溢出(大于$2^{43}$) | 144 | | 28 | 计算测试结果#3溢出(大于$2^{43}$) | 145 | | 27 | 计算测试结果#1下溢出(小于-$2^{43}$) | 146 | | 26 | 计算测试结果#2下溢出(小于-$2^{43}$) | 147 | | 25 | 计算测试结果#3下溢出(小于-$2^{43}$) | 148 | | 24 | 限制器A1超出范围(小于0,或者小于-$2^{15}$,或者大于$2^{15}$) | 149 | | 23 | 限制器A2超出范围(小于0,或者小于-$2^{15}$,或者大于$2^{15}$) | 150 | | 22 | 限制器A3超出范围(小于0,或者小于-$2^{15}$,或者大于$2^{15}$) | 151 | | 21 | 限制器B1超出范围(小于0,或者大于$2^8$) | 152 | | 20 | 限制器B2超出范围(小于0,或者大于$2^8$) | 153 | | 19 | 限制器B3超出范围(小于0,或者大于$2^8$) | 154 | | 18 | 限制器C超出范围(小于0,或者大于$2^{16}$) | 155 | | 17 | 除法溢出(商大于等于2.0) | 156 | | 16 | 计算测试结果#4溢出(大于$2^{43}$) | 157 | | 15 | 计算测试结果#4下溢出(小于-$2^{43}$) | 158 | | 14 | 限制器D1超出范围(小于-$2^{10}$,或者大于$2^{10}$) | 159 | | 13 | 限制器D2超出范围(小于-$2^{10}$,或者大于$2^{10}$) | 160 | | 12 | 限制器E超出范围(小于0,或者大于$2^{12}$) | 161 | 162 | ## 数据寄存器 163 | 164 | 数据寄存器Cop2D 165 | 166 | | 序号 | 名字 | 读/写 | 31   16 | 15    0 | 定点数格式 | 描述 | 167 | | --- | ---- | --- | ------- | -------- | -------------- | --------------------------- | 168 | | 0 | VXY0 | R/W | VY0 | VX0 | 1,3,12或者1,15,0 | 向量0的X和Y | 169 | | 1 | VZ0 | R/W | 0 | VZ0 | 1,3,12或者1,15,0 | 向量0的Z | 170 | | 2 | VXY1 | R/W | VY1 | VX1 | 1,3,12或者1,15,0 | 向量1的X和Y | 171 | | 3 | VZ1 | R/W | 0 | VZ1 | 1,3,12或者1,15,0 | 向量1的Z | 172 | | 4 | VXY2 | R/W | VY2 | VX2 | 1,3,12或者1,15,0 | 向量2的X和Y | 173 | | 5 | VZ2 | R/W | 0 | VZ2 | 1,3,12或者1,15,0 | 向量2的Z | 174 | | 6 | RGB | R/W | Code,R | G,B | 每个8位 | RGB值,Code也传送但是不用在计算中 | 175 | | 7 | OTZ | R | 0 | OTZ | 0,15,0 | Z平均值 | 176 | | 8 | IR0 | R/W | 符号 | IR0 | 1,3,12 | 立即数0,格式可能不同 | 177 | | 9 | IR1 | R/W | 符号 | IR1 | 1,3,12 | 立即数1,格式可能不同 | 178 | | 10 | IR2 | R/W | 符号 | IR2 | 1,3,12 | 立即数2,格式可能不同 | 179 | | 11 | IR3 | R/W | 符号 | IR3 | 1,3,12 | 立即数3,格式可能不同 | 180 | | 12 | SXY0 | R/W | SX0 | SY0 | 1,15,0 | 屏幕XY坐标FIFO(注1) | 181 | | 13 | SXY1 | R/W | SX1 | SY1 | 1,15,0 | 屏幕XY坐标FIFO(注1) | 182 | | 14 | SXY2 | R/W | SX2 | SY2 | 1,15,0 | 屏幕XY坐标FIFO(注1) | 183 | | 15 | SXYP | R/W | SXP | SYP | 1,15,0 | 屏幕XY坐标FIFO(注1) | 184 | | 16 | SZ0 | R/W | 0 | SZ0 | 0,16,0 | 屏幕Z FIFO(注1) | 185 | | 17 | SZ1 | R/W | 0 | SZ1 | 0,16,0 | 屏幕Z FIFO(注1) | 186 | | 18 | SZ2 | R/W | 0 | SZ2 | 0,16,0 | 屏幕Z FIFO(注1) | 187 | | 19 | SZ3 | R/W | 0 | SZ3 | 0,16,0 | 屏幕Z FIFO(注1) | 188 | | 20 | RGB0 | R/W | CD0,B0 | G0,R0 | 每个8位 | 特征颜色FIFO(注1) | 189 | | 21 | RGB1 | R/W | CD1,B1 | G1,R0 | 每个8位 | 特征颜色FIFO(注1) | 190 | | 22 | RGB2 | R/W | CD2,B2 | G2,R0 | 每个8位 | 特征颜色FIFO(注1),CD2是当前执行函数的位图案 | 191 | | 23 | RES1 | - | - | - | - | 禁止 | 192 | | 24 | MAC0 | R/W | MAC0 | 1,31,0 | 乘积之和0 | | 193 | | 25 | MAC1 | R/W | MAC1 | 1,31,0 | 乘积之和1 | | 194 | | 26 | MAC2 | R/W | MAC2 | 1,31,0 | 乘积之和2 | | 195 | | 27 | MAC3 | R/W | MAC3 | 1,31,0 | 乘积之和3 | | 196 | | 28 | IRGB | W | 0 | IB,IG,IR | 注2 | 注2 | 197 | | 29 | ORGB | R | 0 | OB,OG,OR | 注3 | 注3 | 198 | | 30 | LZCS | W | LZCS | 1,31,0 | 源数据前导0计数(注4) | | 199 | | 31 | LZCR | R | LZCR | 6,6,0 | 结果前导0计数(注4) | | 200 | 201 | **注1:** SXYx,SZx和RGBx是FIFO寄存器,最后计算的结果存在最后的寄存器,如果得到一个新的SXY值,下面的事情将会发生: 202 | 203 |     SXY0=SXY1 204 |     SXY1=SXY2 205 |     SXY2=SXYP 206 |     SXYP=结果 207 | 208 | **注2:** 209 | 210 | IRGB 211 | 212 | | 0 | R | G | B | 213 | | ------- | ------- | ------ | ------ | 214 | | 31   15 | 14   10 | 9    5 | 4    0 | 215 | 216 | 当向IRGB写一个值时,发生下面的事情: 217 | 218 | IR1=IR格式转换到(1,11,4) 219 | IR2=IG格式转换到(1,11,4) 220 | IR3=IB格式转换到(1,11,4) 221 | 222 | **注3:** 223 | 224 | IRGB 225 | 226 | | 0 | R | G | B | 227 | | ------- | ------- | ------ | ------ | 228 | | 31   15 | 14   10 | 9    5 | 4    0 | 229 | 230 | 当向IRGB写一个值时,发生下面的事情: 231 | 232 | IR=(IR1>>7)&0x1F 233 | IG=(IR2>>7)&0x1F 234 | IB=(IR3>>7)&0x1F 235 | 236 | **注4:** 237 | 238 | 如果LZCS是正数,读取LZCR返回LZCS的前导0,如果是负数,返回前导1。 239 | 240 | ## GTE命令 241 | 242 | 这节描述各种GTE函数的实际进行的计算。第一行是函数的名字、周期数和简要描述,第二行包含了任何需要输入到操作码的字段,第三行是实际操作码。在列表的最后查看各字段和它们的描述。然后是一个需要输入的各个寄存器列表和输出的寄存器列表。再然后是初始化函数后进行的计算,左边格式字段是数据存放格式,右边格式字段是计算进行所需的格式。在计算的某时刻,会进行一些检查和限制,结果存在标志寄存器中,见前面的表。下面计算表中第二列内方括号的内容表示被前面的限制符限制,附加的限制标识器表示数值如果超出了范围就被限制到下限或上限。 243 | 244 | | 名称 | 周期 | 命令 | 描述 | 245 | | ---- | --- | -------------- | ---- | 246 | | RTPS | 15 | cop2 0x0180001 | 视角转换 | 247 | | 字段 | 无 | | | 248 | 249 | 输入 250 | 251 | | V0 | 转换向量 | 1,15,0 | 252 | | --------------- | ------- | ------- | 253 | | R | 旋转矩阵 | 1,3,12 | 254 | | TR | 平移向量 | 1,31,0 | 255 | | H | 视平面距离 | 0,16,0 | 256 | | DQA

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

OFY | 屏幕平移值 | 1,15,16 | 258 | 259 | 输出 260 | 261 | | SXY FIFO | 屏幕XY坐标(短) | 1,15,0 | 262 | | -------- | --------- | ------ | 263 | | SZ FIFO | 屏幕Z坐标(短) | 0,16,0 | 264 | | IR0 | 深度查询插值值 | 1,3,12 | 265 | | IR1 | 屏幕X(短) | 1,15,0 | 266 | | IR2 | 屏幕Y(短) | 1,15,0 | 267 | | IR3 | 屏幕Z(短) | 1,15,0 | 268 | | MAC1 | 屏幕X(长) | 1,31,0 | 269 | | MAC2 | 屏幕Y(长) | 1,31,0 | 270 | | MAC3 | 屏幕Z(长) | 1,31,0 | 271 | 272 | 计算 273 | 274 | | 1,31,0 | $MAC1=A1[TRX + R11VX0 + R12 \times VY0 + R13 \times VZ0]$ | 1,31,12 | 275 | | ----------------------------- | ----------------------------------------------------------------- | ------- | 276 | | 1,31,0 | $MAC2=A2[TRY + R21 \times VX0 + R22 \times VY0 + R23 \times VZ0]$ | 1,31,12 | 277 | | 1,31,0 | $MAC3=A3[TRZ + R31 \times VX0 + R32 \times VY0 + R33 \times VZ0]$ | 1,31,12 | 278 | | 1,15,0 | $IR1= Lm_B1[MAC1]$ | 1,31,0 | 279 | | 1,15,0 | $IR2= Lm_B2[MAC2]$ | 1,31,0 | 280 | | 1,15,0 | $IR3= Lm_B3[MAC3]$ | 1,31,0 | 281 | | | $SZ0<-SZ1<-SZ2<-SZ3$ | 1,31,0 | 282 | | 0,16,0 | $SZ3= Lm_D(MAC3)$ | | 283 | | | $SX0<-SX1<-SX2, SY0<-SY1<-SY2$ | | 284 | | 1,15,0 | $Lm_G1[F[OFX + IR1\times(H \div SZ)]]$ | 1,27,16 | 285 | | 1,15,0 | $SY2= Lm_G2[F[OFY + IR2\times(H \div SZ)]]$ | | 286 | | 1,31,0 | $MAC0= F[DQB + DQA\times(H \div SZ)]$ | 1,19,24 | 287 | | 1,15,0 | $IR0= Lm_H[MAC0]$ | 1,31,0 | 288 | | 注:Z值下限为0.5×H,对于更小的Z值,你要自己写程序。 | | | 289 | 290 | | 名称 | 周期 | 命令 | 描述 | 291 | | ---- | --- | -------------- | ------ | 292 | | RTPT | 23 | cop2 0x0280030 | 3点视角转换 | 293 | | 字段 | 无 | | | 294 | 295 | 输入 296 | 297 | | V0
V1
V2 | 转换向量 | 1,15,0 | 298 | | ------------------ | ------- | ------- | 299 | | R | 旋转矩阵 | 1,3,12 | 300 | | TR | 平移向量 | 1,31,0 | 301 | | H | 视平面距离 | 0,16,0 | 302 | | DQA

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

OFY | 屏幕平移值 | 1,15,16 | 304 | 305 | 输出 306 | 307 | | SXY FIFO | 屏幕XY坐标(短) | 1,15,0 | 308 | | -------- | --------- | ------ | 309 | | SZ FIFO | 屏幕Z坐标(短) | 0,16,0 | 310 | | IR0 | 深度查询插值值 | 1,3,12 | 311 | | IR1 | 屏幕X(短) | 1,15,0 | 312 | | IR2 | 屏幕Y(短) | 1,15,0 | 313 | | IR3 | 屏幕Z(短) | 1,15,0 | 314 | | MAC1 | 屏幕X(长) | 1,31,0 | 315 | | MAC2 | 屏幕Y(长) | 1,31,0 | 316 | | MAC3 | 屏幕Z(长) | 1,31,0 | 317 | 318 | 计算 319 | 320 | 和RTPS一样,但是重复V1和V2 321 | 322 | | 名称 | 周期 | 命令 | 描述 | 323 | | ----- | ------------- | -------------- | ---------- | 324 | | MVMVA | 8 | cop2 0x0400012 | 向量乘以矩阵加上向量 | 325 | | 字段 | sf,mx,v,cv,lm | | | 326 | 327 | 输入 328 | 329 | | V0/V1/V2/IR | 向量V0,V1,V2或者[IR1,IR2,IR3] | | 330 | | ----------- | ------------------------- | ------ | 331 | | R/LLM/LCM | 旋转、光或者颜色矩阵 | 1,3,12 | 332 | | TR/BK | 平移或者背景颜色向量 | | 333 | 334 | 输出 335 | 336 | | [IR1,IR2,IR3] | 短向量 | 337 | | ---------------- | --- | 338 | | [MAC1,MAC2,MAC3] | 长向量 | 339 | 340 | 计算 341 | 342 | MX=mx指定的矩阵 343 | V =v 指定的矩阵 344 | CV=cv指定的矩阵 345 | $MAC1=A1[CV1 + MX11 \times V1 + MX12 \times V2 + MX13 \times V3] $ 346 | 347 | $MAC2=A2[CV2 + MX21 \times V1 + MX22 \times V2 + MX23 \times V3] $ 348 | 349 | $MAC3=A3[CV3 + MX31 \times V1 + MX32 \times V2 + MX33 \times V3] $ 350 | 351 | $IR1=Lm_B1[MAC1] $ 352 | 353 | $IR2=Lm_B2[MAC2] $ 354 | 355 | $IR3=Lm_B3[MAC3] $ 356 | 357 | 注,cv字段允许选择远颜色向量,但是GTE不能正确加这个向量 358 | 359 | | 名称 | 周期 | 命令 | 描述 | 360 | | ---- | --- | -------------- | ------- | 361 | | DPCL | 8 | cop2 0x0680029 | 深度化颜色光源 | 362 | | 字段 | 无 | | | 363 | 364 | 输入 365 | 366 | | RGB | 主颜色。 R,G,B,CODE | 0,8,0 | 367 | | ------------- | --------------- | ------ | 368 | | IR0 | 插值值 | 1,3,12 | 369 | | [IR1,IR2,IR3] | 本地颜色向量 | 1,3,12 | 370 | | CODE | 由RGB得到的颜色值 CODE | 0,8,0 | 371 | | FC | 远颜色 | 1,27,4 | 372 | 373 | 输出 374 | 375 | | RGBn | RGB FIFO     Rn,Gn,Bn,CDn | 0,8,0 | 376 | | ---------------- | ------------------------- | ------ | 377 | | [IR1,IR2,IR3] | 颜色向量 | 1,11,4 | 378 | | [MAC1,MAC2,MAC3] | 颜色向量 | | 379 | 380 | 计算 381 | 382 | | 1,27,4 | $MAC1=A1[R \times IR1 + IR0 \times (Lm_B1[RFC - R \times IR1])]$ | 1,27,16 | 383 | | ------ | ---------------------------------------------------------------- | ------- | 384 | | 1,27,4 | $MAC2=A2[G \times IR2 + IR0 \times (Lm_B1[GFC - G \times IR2])]$ | 1,27,16 | 385 | | 1,27,4 | $MAC3=A3[B \times IR3 + IR0 \times (Lm_B1[BFC - B \times IR3])]$ | 1,27,16 | 386 | | 1,11,4 | $IR1= Lm_B1[MAC1]$ | 1,27,4 | 387 | | 1,11,4 | $IR2= Lm_B2[MAC2]$ | 1,27,4 | 388 | | 1,11,4 | $IR3= Lm_B3[MAC3]$ | 1,27,4 | 389 | | 0,8,0 | $Cd0<-Cd1<-Cd2<- CODE$ | | 390 | | 0,8,0 | $R0<-R1<-R2<- Lm_C1[MAC1]$ | 1,27,4 | 391 | | 0,8,0 | $G0<-G1<-G2<- Lm_C2[MAC2]$ | 1,27,4 | 392 | | 0,8,0 | $B0<-B1<-B2<- Lm_C3[MAC3]$ | 1,27,4 | 393 | 394 | | 名称 | 周期 | 命令 | 描述 | 395 | | ---- | --- | -------------- | --- | 396 | | DPCS | 8 | cop2 0x0780010 | 深度化 | 397 | | 字段 | 无 | | | 398 | 399 | 输入 400 | 401 | | IR0 | 插值值 | 1,3,12 | 402 | | --- | ---------------- | ------ | 403 | | RGB | 颜色。 R,G,B,CODE | 0,8,0 | 404 | | FC | 远颜色  RFC,GFC,BFC | 1,27,4 | 405 | 406 | 输出 407 | 408 | | RGBn | RGB FIFO     Rn,Gn,Bn,CDn | 0,8,0 | 409 | | ---------------- | ------------------------- | ------ | 410 | | [IR1,IR2,IR3] | 颜色向量 | 1,11,4 | 411 | | [MAC1,MAC2,MAC3] | 颜色向量 | 1,27,4 | 412 | 413 | 计算 414 | 415 | | 1,27,4 | $MAC1=A1[(R + IR0 \times (Lm_B1[RFC - R])]$ | 1,27,16   lm=0 | 416 | | ------ | ------------------------------------------- | -------------- | 417 | | 1,27,4 | $MAC2=A2[(G + IR0 \times (Lm_B1[GFC - G])]$ | 1,27,16   lm=0 | 418 | | 1,27,4 | $MAC3=A3[(B + IR0 \times (Lm_B1[BFC - B])]$ | 1,27,16   lm=0 | 419 | | 1,11,4 | $IR1= Lm_B1[MAC1]$ | 1,27,4    lm=0 | 420 | | 1,11,4 | $IR2= Lm_B2[MAC2]$ | 1,27,4    lm=0 | 421 | | 1,11,4 | $IR3= Lm_B3[MAC3]$ | 1,27,4    lm=0 | 422 | | 0,8,0 | $Cd0<-Cd1<-Cd2<- CODE$ | | 423 | | 0,8,0 | $R0<-R1<-R2<- Lm_C1[MAC1]$ | 1,27,4 | 424 | | 0,8,0 | $G0<-G1<-G2<- Lm_C2[MAC2]$ | 1,27,4 | 425 | | 0,8,0 | $B0<-B1<-B2<- Lm_C3[MAC3]$ | 1,27,4 | 426 | 427 | 由于markdown文档处理不方便,剩下的[内容在这里](/doc/PSX_introduces_CN/ps_gte_UTF-8.html)。 428 | 429 | 430 | -------------------------------------------------------------------------------- /docs/doc/PSX_introduces_CN/图形处理芯片(GPU).md: -------------------------------------------------------------------------------- 1 | # 图形处理芯片(GPU) 2 | 3 | GPU控制了一个1MB的帧缓存,提供了一个最大1024×512分辨率16位像素的屏幕。它同时也包括了一个2KB的材质高速缓存。可以以15位或24位色显示。 4 | 5 | 因为PSX缺乏一个FPU,所以增加了第二个协处理器,成为几何变换引擎 6 | GTE(Geometry Transformation Engine)。GTE是PSX上所有3D运算的核心,它能够进行向量和矩阵运算,视角转换,颜色平衡等等。它对这些操作比CPU快得多,作为第二个协处理器(Cop2),它没有分配物理地址。 7 | 8 | 1MB的帧缓存不能被CPU访问,只能通过向GPU发送命令或者DMA传送数据。它有一个64字节的命令FIFO缓存,可以保存3条命令,它连接到一个DMA通道用来传送图像数据和链接命令列表(通道2)和一个DMA通道用来反向清楚一个顺序表(通道6)。 9 | 10 | ## 通讯和顺序表(OT) 11 | 12 | 所有的绘图和绘图环境数据都作为信息包送到GPU。每一个信息包都告诉GPU怎样和在哪里绘一个图元,或者设置一个绘图环境参数。显示环境通过GPU的控制端口用一个单字命令设置。 13 | 14 | 信息包可以通过数据端口逐字送到GPU也可以用DMA大量传送。所以创建了一个特殊的DMA模式来方便地传送和管理大量的信息包。在这种模式,发送的是一个包列表。其中每一个条目都包含了一个头部(一个包含了下一个条目地址和信息包大小的字)和包本身。这样做的好处是信息包没有必要进行顺序储存,使得容易控制信息包被处理的顺序。GPU按照获得信息包的顺序处理它们,所以列表的第一个条目最先被画出。要插入一个包,只需要进行链表的插入操作,修改地址。 15 | 16 | 顺序表OT(OrderingTable)用来辅助在列表中寻找位置。在一开始,它是一个0字节包的链接条目,仅仅是包头部列表,没一个条目指向下一个条目。由程序生成的图元可以加入到这个表的某一个索引中。先读取表条目中的地址,将它替换成新包的地址,然后将表中的地址存到包里。当所有的包都生成后,只需要将第一个列表条目的地址传到DMA,就能够按照你输入表的顺序画出各个信息包。表中包条目索引值低的比索引值高的先画出。输入同一个索引的包,最后输入的最先画出。 17 | 18 | 在3D作图中,通常希望高Z值的图元先画出,所以Z值可以用作索引值。很简单,只要做一个表,其中每一个条目指向前一个条目,然后在最后一个表条目开始DMA。可以用一个特殊的DMA通道辅助你创建这样的表。 19 | 20 | ## 帧缓存 21 | 22 | 帧缓存是储存了所有GPU在绘图和显示图像过程中能够访问和处理的图像数据的内存,它个内存不能被CPU直接访问。大小是1MB,可以看作1024×512像素,每个像素大小是一个字(16bit)。它不像通常内存那样线性访问,而是通过坐标访问,左上角(0,0),右下角(1023,511)。 23 | 24 | 当数据从帧缓存中显示的时候,在这个记忆体中按照指定的坐标读取一个矩形区域。区域的大小可以从几种硬件定义的类型中选择。注意这些硬件大小只有在‘X和Y停止/开始’寄存器处于缺省值的时候才有效。显示的区域可以用两种颜色格式显示:15位直接或24位直接,数据格式如下: 25 | 26 | 15位直接显示 27 | 28 | ![](./img/图形处理芯片/PixPin_2024-07-21_14-10-20.png) 29 | 30 | 也就是每种颜色值是0~31,最高位(M)是掩码。 31 | 32 | 24位直接显示 33 | 34 | ![](./img/图形处理芯片/PixPin_2024-07-21_14-11-41.png) 35 | 36 | GPU也可以设置为24位模式,这种情况下,一个像素3个字节,每种颜色1字节。这样2个显示像素用3个帧缓存像素编码,显示为[R0,G0,B0] [R1,G1,B1]。 37 | 38 | ## 图元 39 | 40 | GPU能够绘制的基本图形叫做图元,它可以绘制下面这些东西: 41 | 42 | ### 多边形 43 | 44 | GPU可以画3点和4点多边形,每一点指定了帧缓存中的一点。可以带辐射阴影。4点多边形定点的顺序如下 45 | 46 | | 1 | | 2 | 47 | | --- | --- | --- | 48 | | | | | 49 | | 3 | | 4 | 50 | 51 | 一个4点多边形在内部当作2个3点多边形处理。GPU画多边形的时候最右边和最下边的边不会画出,所以(0,0)-(32,32)实际画出(0,0)-(31,31)。要使两个多边形相接,只要使它们坐标相同就可以了。 52 | 53 | ### 带材质的多边形 54 | 55 | 这种图元和上一种是相同的,特别之处是它可以用材质。多边形的每个顶点映射到帧缓存中的材质页中的一点。也可以带辐射阴影。 56 | 57 | ### 矩形 58 | 59 | 一个矩形用左上角定点和宽度、高度来定义,宽度和高度可以是任意的、8×8的或者是16×16的。它画得比多边形快得多,但是没有辐射阴影。 60 | 61 | ### 精灵 62 | 63 | 一个精灵是一个材质矩形,在材质页面的坐标上定义一个矩形。如同矩形那样画得比多边形快,但是没有辐射阴影。虽然它也叫做精灵,但是它和传统意义上的精灵没有任何相同之处,仅仅是一个矩形图像小片。传统的精灵和PSX精灵不同,它不是画到位图里的,而是在显示的时候特别送到屏幕上的特殊位置的。 64 | 65 | ### 直线 66 | 67 | 一条直线是两点之间的连线,可以有阴影。特殊的形式是多点线,可以指定任意多的点。 68 | 69 | ### 点 70 | 71 | 点图元在指定的位置用指定的颜色绘制一个像素,实际是一个特殊的矩形,大小是1×1。 72 | 73 | ## 材质 74 | 75 | 材质是放到多边形或精灵的一个图像,它需要预先在帧缓存中准备好数据。这个图像叫做材质图案,材质图案放在帧缓存中某个地方的标准大小的材质页中。材质数据可以用3中不同的模式存放。 76 | 77 | ### 15位直接模式 78 | 79 | | 索引0 | | | | 80 | | --- | --------- | --------- | -------- | 81 | | S | 蓝 | 绿 | 红 | 82 | | 15 | 14     10 | 9       5 | 4      0 | 83 | 84 | 这表示了每种颜色的值是0~31,最高有效位(S)用来表明这个像素是否半透明的。 85 | 86 | ### 8位调色板模式 87 | 88 | 每个像素用8位定义,它的值通过调色板转换为15位的颜色,很像标准VGA图片。这样可以使用256种15位精度的颜色。 89 | 90 | | 索引1 | 索引0 | 91 | | ------ | ------ | 92 | | 15   8 | 7    0 | 93 | 94 | 索引0是左边像素的调色板索引值,索引1是右边的。 95 | 96 | ### 4位调色板模式 97 | 98 | 和上面的一样,除了只有16种颜色,数据安排如下: 99 | 100 | | 索引3 | 索引2 | 索引1 | 索引0 | 101 | | ------ | ------ | ------ | ------ | 102 | | 15  12 | 11   8 | 7    4 | 3    0 | 103 | 104 | 索引0到索引3先后从左到右绘制。 105 | 106 | ### 材质页 107 | 108 | 材质页是一个256×256像素的单元,什么颜色模式对它没有影响。就是说,在帧缓存中它在4位调色板模式时是64像素宽,8位调色板模式时128像素宽,15位直接模式时256像素宽。像素的寻址是相对于材质页的位置,而不是帧缓存。所以材质页左上角的材质坐标是(0,0),右下是(255,255),页面可以位于帧缓存中的X乘以64和Y乘以256的地方。可以建立多个材质页,但是图元只能使用一个材质页里的材质。 109 | 110 | ### 材质窗口 111 | 112 | 材质窗口里面的区域是材质页的重复,数据实际上并不知存在于整个材质页,但是GPU当它们存在而重复读取。X和Y和H和W必须乘以8。 113 | 114 | ### 调色板 115 | 116 | 调色板在帧缓存中作如下安排:8位调色板模式是256×1的图像,4位调色板模式是16×1的图像。每个像素是16位的值,前15位用作15位颜色,第16位作半透明标志。调色板数据可以安放在帧缓存中X乘以16(0,16,32,48等等)和Y(0~511)的位置。可以有多个调色板,但是一个图元只能够使用一个。 117 | 118 | ### 材质高速缓存 119 | 120 | 如果要显示带材质的多边形,GPU需要从帧缓存中读取这些东西,将会减慢绘图过程,导致在给定的时间内能够绘制的多边形减少。因此GPU配上了一个材质高速缓存,材质高速缓存的大小依据材质颜色模式而不同。在4位调色板模式,它的大小是64×64,8位调色板模式是32×64,15位直接模式是32×32。 121 | 122 | ### 高速缓存块 123 | 124 | 材质页被分割为不重叠的高速缓存块,每块的大小依据颜色模式。这些高速缓存块被平铺在材质页中。 125 | 126 | | 高速缓存块0 | 1 | 2..... | 127 | | --------------------- | --- | ------ | 128 | | .

.

. | | | 129 | 130 | ### 高速缓存条目 131 | 132 | 每个高速缓存块分为256个高速缓存条目,按顺序编号,8字节宽,所以一个高速缓存条目包含了16个4位调色板像素,或者8个8位调色板像素,或者4个15位直接像素。 133 | 134 | 4位和8位调色板: 135 | 136 | | 0 | 1 | 2 | 3 | 137 | | --- | --- | --- | --- | 138 | | 4 | 5 | 6 | 7 | 139 | | 8 | 9 | ... | | 140 | | c | ... | | | 141 | 142 | 15位直接: 143 | 144 | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 145 | | --- | --- | --- | --- | --- | --- | --- | --- | 146 | | 8 | 9 | a | b | c | d | e | f | 147 | | 10 | 11 | ... | | | | | | 148 | | 18 | ... | | | | | | | 149 | | ... | | | | | | | | 150 | 151 | 高速缓存只能保存一个高速缓存条目。 152 | 153 | ## 描绘选项 154 | 155 | 有3种模式影响GPU向帧缓存描绘图元。 156 | 157 | ### 半透明 158 | 159 | 当设置一个像素是半透明时,GPU会读取帧缓存中的目标像素和需要进行半透明的源像素,然后根据选择的半透明模式计算新目标像素的颜色。处理器速度也因此会减慢下来,GPU共有4种半透明模式。 160 | 161 | B是从帧缓存读取的像素,F是半透明像素。 162 | 163 | ●1.0×B+0.5×F 164 | 165 | ●1.0×B+1.0×F 166 | 167 | ●1.0×B-1.0×F 168 | 169 | ●1.0×B+0.25×F 170 | 171 | 每个图元都可以设置新的半透明模式,没有材质的图元可以选择半透明模式。有材质的图元最高有效位是半透明标志,所以一些像素可以设为半透明,其他可以是不透明的。对于调色板模式,半透明位从调色板中取得。 172 | 173 | 当颜色是黑色(BGR=0),半透明的处理方法和不是黑色(BGR<>0)时不同,如下表: 174 | 175 | | 透明处理(命令包的第1位) | | | | 176 | | ------------- | ----- | --- | --- | 177 | | BGR | 半透明标志 | 关 | 开 | 178 | | 0,0,0 | 0 | 透明 | 透明 | 179 | | 0,0,0 | 1 | 不透明 | 不透明 | 180 | | x,x,x | 0 | 不透明 | 不透明 | 181 | | x,x,x | 1 | 不透明 | 透明 | 182 | 183 | ### 阴影 184 | 185 | GPU有阴影功能,可以比例缩放图元的颜色到指定的亮度。有2种阴影:单调阴影和辐射阴影。单调阴影用一个亮度值指定整个图元的,辐射阴影则可以指定每个顶点的亮度,中间点自动进行插值。 186 | 187 | ### 掩码 188 | 189 | 掩码功能可以阻止GPU向帧缓存中特定的像素写东西,就是说GPU向一个掩码区域画图元的时候,先读取它要写向的坐标点的像素,检查掩码标志,如果设置了就不写这个像素。掩码标志是像素的最高有效位,和不透明标志一样。GPU提供了一个掩码模式来设置这些位,写像素的同时设置它们的最高有效位。如果掩码和掩码检测都打开了,GPU就不向设置了最高有效位的像素写东西,而写没有设置的那些像素,同时把它们也设置成掩码像素。 190 | 191 | ### 绘图环境 192 | 193 | 绘图环境设置GPU绘制图元所需的全部全局参数。 194 | 195 | ●绘图偏移 196 | 197 | 绘图区域的左上角坐标,图元坐标的原点设在这点上。所以绘图偏移是(0,240),一个多边形顶点坐标是(16,20),则它会被画到帧缓存的(0+16,240+20)的地方。 198 | 199 | ●绘图修剪区域 200 | 201 | 指定了GPU绘制图元的最大范围,用它来制定绘图区的左上角和右下角。 202 | 203 | ●抖动使能 204 | 205 | 当抖动使能时,GPU绘制阴影时会抖动该区域。内部以24位色运行,抖动颜色后再转会15位色。当它关闭时,只是简单的发散每个颜色的最低3位。 206 | 207 | ●画到显示区使能 208 | 209 | 使能/禁止画到当前显示区域。 210 | 211 | ●掩码使能 212 | 213 | 使能时,所有画到帧缓存的像素,GPU都会加上掩码标志(设置最高有效位)。 214 | 215 | ●掩码判断使能 216 | 217 | 绘图时是否判断帧缓存中的掩码数据。 218 | 219 | ### 显示环境 220 | 221 | 包含了显示信息和显示区域。 222 | 223 | ●帧缓存中的显示区域 224 | 225 | 指定了显示的分辨率,可以是以下大小: 226 | 227 | 宽度:256,320,384,512或者640像素 228 | 229 | 高度:240或者480像素 230 | 231 | - 这些设置仅仅是指定了显示分分辨率,指明绘制多少像素。 232 | 233 | ●显示(开始/结束) 234 | 235 | 指定屏幕的显示区域和发送多少数据到屏幕,屏幕显示区域大小只有在水平/垂直、开始/结束处于缺省值时才有效。可以通过改变这些来放大/缩小显示屏幕。大多数电视机在周围有一些黑边,可以设置使屏幕早一点开始晚一点结束来消除。像素的大小不会被这些设置改变,GPU只是简单地发送多一些数据到屏幕。 236 | 237 | ●隔行扫描 238 | 239 | 当使能的时候,GPU会交错显示奇数行和偶数行。当使用480行而电视机屏幕又没有480条扫描线时需要使用这个功能。 240 | 241 | ●15位/24位色直接显示 242 | 243 | 切换15位/24位色显示模式 244 | 245 | ●视频模式 246 | 247 | 选择视频模式是PAL或者NTSC制式。 248 | 249 | ## GPU控制寄存器 250 | 251 | 有2个32位IO端口用于GPU,分别是0x1F80_1810的GPU数据寄存器和0x1F80_1814的GPU控制/状态寄存器。数据寄存器用于交换数据,控制/状态寄存器在读取时给出GPU状态,在写入时设置控制位。 252 | 253 | ### 控制/状态寄存器 254 | 255 | 0x1F80_1814(读取) 256 | 257 | ![](./img/图形处理芯片/PixPin_2024-07-21_14-22-47.png) 258 | 259 | Width(宽度) 260 | 261 | | W0 | W1 | | 262 | | --- | --- | ----- | 263 | | 00 | 0 | 256像素 | 264 | | 01 | 0 | 320 | 265 | | 10 | 0 | 512 | 266 | | 11 | 0 | 640 | 267 | | 00 | 1 | 384 | 268 | 269 | Height(高度) 270 | 271 | | 0 | 240像素 | 272 | | --- | ----- | 273 | | 1 | 480 | 274 | 275 | Video(视频) 276 | 277 | | 0 | NTSC | 278 | | --- | ---- | 279 | | 1 | PAL | 280 | 281 | isrgb24(颜色模式) 282 | 283 | | 0 | 15位直接模式 | 284 | | --- | ------- | 285 | | 1 | 24位直接模式 | 286 | 287 | isinter(扫描模式) 288 | 289 | | 0 | 隔行扫描关闭 | 290 | | --- | ------ | 291 | | 1 | 隔行扫描打开 | 292 | 293 | den(显示使能) 294 | 295 | | 0 | 显示使能 | 296 | | --- | ---- | 297 | | 1 | 显示禁止 | 298 | 299 | busy(忙) 300 | 301 | | 0 | GPU忙(例如正在绘制图元) | 302 | | --- | -------------- | 303 | | 1 | GPU空闲 | 304 | 305 | img(影像) 306 | 307 | | 0 | 未准备好发送图像(信息包$C0) | 308 | | --- | ---------------- | 309 | | 1 | 准备好 | 310 | 311 | com(命令) 312 | 313 | | 0 | 未准备好接收命令 | 314 | | --- | -------- | 315 | | 1 | 准备好 | 316 | 317 | dma(DMA) 318 | 319 | | 00 | DMA关闭,通过GP0通讯 | 320 | | --- | ------------- | 321 | | 01 | 未知 | 322 | | 10 | DMA CPU-->GPU | 323 | | 11 | DMA GPU-->CPU | 324 | 325 | lcf(交错行) 326 | 327 | | 0 | 偶数行交错描绘 | 328 | | --- | -------- | 329 | | 1 | 非偶数行交错描绘 | 330 | 331 | tx(材质页X) 332 | 材质页X=tx×64 333 | 334 | ty(材质页Y) 335 | 336 | | 0 | 0 | 337 | | --- | --- | 338 | | 1 | 256 | 339 | 340 | abr(半透明状态) 341 | 342 | | 00 | 0.5×B+0.5×F | 343 | | --- | ------------ | 344 | | 01 | 1.0×B+0.5×F | 345 | | 10 | 1.0×B-1.0×F | 346 | | 11 | 1.0×B+0.25×F | 347 | 348 | tp(材质页颜色模式) 349 | 350 | | 00 | 4位调色板 | 351 | | --- | ----- | 352 | | 01 | 8位调色板 | 353 | | 10 | 15位 | 354 | 355 | dtd(抖动模式) 356 | 357 | | 0 | 抖动关闭 | 358 | | --- | ---- | 359 | | 1 | 抖动开启 | 360 | 361 | dfe(画到显示区域) 362 | 363 | | 0 | 禁止画到当前显示区域 | 364 | | --- | ---------- | 365 | | 1 | 允许画到当前显示区域 | 366 | 367 | md(掩码模式) 368 | 369 | | 0 | 不设置绘图像素的掩码标志 | 370 | | --- | ------------ | 371 | | 1 | 设置绘图像素的掩码标志 | 372 | 373 | me(掩码检测) 374 | 375 | | 0 | 不检测掩码标志 | 376 | | --- | ------- | 377 | | 1 | 检测掩码标志 | 378 | 379 | ### 控制/状态寄存器 0x1F80_1814(写入) 380 | 381 | | 命令 | 参数 | 382 | | -------- | -------- | 383 | | 31    16 | 15     0 | 384 | 385 | 一个控制命令组成如上表,每个命令的参数都不一样。 386 | 387 | 复位GPU 388 | 389 | | 命令 | 0x00 | 390 | | --- | ----------------------------- | 391 | | 参数 | 0x000000 | 392 | | 描述 | 复位GPU,同时关闭屏幕。(设置状态为$14802000) | 393 | 394 | 复位命令缓存 395 | 396 | | 命令 | 0x01 | 397 | | --- | -------- | 398 | | 参数 | 0x000000 | 399 | | 描述 | 复位命令缓存 | 400 | 401 | 复位IRQ 402 | 403 | | 命令 | 0x02 | 404 | | --- | -------- | 405 | | 参数 | 0x000000 | 406 | | 描述 | 复位IRQ | 407 | 408 | 显示使能 409 | 410 | | 命令 | 0x03 | 411 | | --- | --------------------------------------- | 412 | | 参数 | 0x000000 显示禁止

0x000001 显示使能 | 413 | | 描述 | 关闭和打开显示,关闭屏幕时如果选择了NTSC模式会使PAL屏幕发送NTSC闪烁 | 414 | 415 | DMA设置 416 | 417 | | 命令 | 0x04 | 418 | | --- | ------------------------------------------------------------------------------------------------- | 419 | | 参数 | 0x000000 DMA禁止

0x000001 未知DMA功能

0x000002 DMA CPU到GPU

0x000003 DMA GPU到CPU | 420 | | 描述 | 设置DMA方向 | 421 | 422 | 开始显示区域 423 | 424 | | 命令 | 0x05 | 425 | | --- | ------------------------------------------------------------------ | 426 | | 参数 | 0x00-0x09位 X(0-1023)

0x0A-0x12位 Y(0-512)

即=Y<<10+X | 427 | | 描述 | 确定显示区域的左上角 | 428 | 429 | 水平显示范围 430 | 431 | | 命令 | 0x06 | 432 | | --- | ---------------------------------------------------------------------------------------------------- | 433 | | 参数 | 0x00-0x0B位 X1(0x1F4-0xCDA)

0x0C-0x17位 X2

即=X1+X2<<12 | 434 | | 描述 | 指定水平显示范围,显示相对于显示开始位置,所以X坐标0位于X1。显示结束位置和开始位置无关。在320模式发送到屏幕的像素个数是(X2-X1)/8。实际可见数依赖于电视机(通常是0x260-0xC56) | 435 | 436 | 垂直显示范围 437 | 438 | | 命令 | 0x07 | 439 | | --- | -------------------------------------------------------------------------------------------------------------------- | 440 | | 参数 | 0x00-0x09位 Y1

0x0A-0x14位 Y2

即=Y1+Y2<<10 | 441 | | 描述 | 指定垂直显示范围,显示相对于显示开始位置,所以Y坐标0位于Y1。结束位置和开始位置无关。在240模式发送到显示器的像素数目是Y2-Y1。(缺省值不确定,大概是NTSC
0x010-0x100,PAL 0x023-0x123) | 442 | 443 | 显示模式 444 | 445 | | 命令 | 0x08 | 446 | | --- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 447 | | 参数 | 0x00-0x01位 宽度0

0x02        高度

0x03        视频模式

0x04        Isrgb24

0x05        Isinter

0x06        宽度1

0x07        方向标志 | 448 | | 描述 | 参见显示模式 | 449 | 450 | 未知 451 | 452 | | 命令 | 0x09 | 453 | | --- | ------------- | 454 | | 参数 | 0x000001 ?? | 455 | | 描述 | 使用时值为0x000001 | 456 | 457 | GPU信息 458 | 459 | | 命令 | 0x10 | 460 | | --- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 461 | | 参数 | 0x000000

0x000001

0x000002

0x000003 绘图区域左上角

0x000004 绘图区域右下角

0x000005 绘图偏移

0x000006

0x000007 GPU类型,对标准的GPU返回2 | 462 | | 描述 | 返回请求信息,从GP0读取结果。似乎0,1也是返回绘图区域左上角,6也是返回绘图偏移 | 463 | 464 | ????? 465 | 466 | | 命令 | 0x20 | 467 | | --- | ------------- | 468 | | 参数 | ?????? | 469 | | 描述 | 使用时值是0x000504 | 470 | 471 | ## 命令包,数据寄存器 472 | 473 | 图元命令包使用8位命令,它包含了一个3位的类型区段和一个5位的选项区段,选项根据类型不同而不同。 474 | 475 | 类型 476 | 477 | | 000 | GPU命令 | 478 | | --- | ----- | 479 | | 001 | 多边形图元 | 480 | | 010 | 直线图元 | 481 | | 011 | 精灵图元 | 482 | | 100 | 传输命令 | 483 | | 111 | 环境命令 | 484 | 485 | 配置图元的选项块如下: 486 | 487 | | 多边形 | | | | | | | | 488 | | --- | --- | --- | --- | --- | --- | --- | --- | 489 | | 类型 | 类型 | 类型 | 选项 | 选项 | 选项 | 选项 | 选项 | 490 | | 0 | 0 | 1 | IIP | VTX | TME | ABE | TGE | 491 | | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 492 | 493 | | 直线 | | | | | | | | 494 | | --- | --- | --- | --- | --- | --- | --- | --- | 495 | | 类型 | 类型 | 类型 | 选项 | 选项 | 选项 | 选项 | 选项 | 496 | | 0 | 1 | 0 | IIP | PLL | 0 | ABE | 0 | 497 | | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 498 | 499 | | 精灵 | | | | | | | 500 | | --- | --- | --- | ---- | --- | --- | --- | 501 | | 类型 | 类型 | 类型 | 选项 | 选项 | 选项 | 选项 | 502 | | 1 | 0 | 0 | Size | TME | ABE | 0 | 503 | | 7 | 6 | 5 | 4或3 | 2 | 1 | 0 | 504 | 505 | | IIP | 0 简单阴影
1 辐射阴影 | 506 | | ---- | --------------------------------------------------------------- | 507 | | VTX | 0 3顶点多边形

1 4顶点多边形 | 508 | | TME | 0 材质映射关闭

1 材质映射打开 | 509 | | ABE | 0 半透明关闭

1 半透明打开 | 510 | | TGE | 0 映射材质时计算亮度

1 关闭(只描绘材质) | 511 | | Size | 00 自由尺寸(通过W/H指定)

01 1×1

10 8×8

11 16×16 | 512 | | PLL | 0 单线(2个顶点)

1 多段线(n个顶点) | 513 | 514 | ●颜色信息 515 | 516 | 颜色信息是24位传送的,被GPU解析为15位的。 517 | 518 | | 蓝色 | 绿色 | 红色 | 519 | | ------- | ------- | ------- | 520 | | 23   16 | 15    8 | 7     0 | 521 | 522 | ●阴影信息 523 | 524 | 带材质图元阴影数据用这个包传送,和颜色数据一样排列,RGB值控制了各种颜色(0x00-0x7F)的亮度。颜色值为0x80将取前者作为数据。 525 | 526 | | 蓝色 | 绿色 | 红色 | 527 | | ------- | ------- | ------- | 528 | | 23   16 | 15    8 | 7     0 | 529 | 530 | 材质包信息 531 | 532 | ![](./img/图形处理芯片/PixPin_2024-07-21_14-35-30.png) 533 | 534 | | TX | 0x0-0xF X×64 材质页X坐标 | 535 | | --- | -------------------------------------------------------------------------------------------------------------- | 536 | | TY | 0       0    
材质页Y坐标

1       256 | 537 | | ABR | 0       0.5×B+0.5×F 半透明模式

1       1.0×B+1.0×F

2       1.0×B-1.0×F

3       1.0×B+0.25×F | 538 | | TP | 0       4位调色板

1       8位调色板

2       15位调色板 | 539 | 540 | ●调色板ID 541 | 542 | 指定调色板数据的位置 543 | 544 | ![](./img/图形处理芯片/PixPin_2024-07-21_14-37-57.png) 545 | 546 | ### 包列表 547 | 548 | 包作为成组数据传送到GPU,每个都是一个字长。数据必须顺序写到GPU数据寄存器(0x1F801810),当所有的数据都被接收后,GPU开始操作。 549 | 550 | #### 包命令一览: 551 | 552 | ●图元绘图包 553 | 554 | | 0x20 | 单色3点多边形 | 555 | | ---- | --------- | 556 | | 0x24 | 材质3点多边形 | 557 | | 0x28 | 单色4点多边形 | 558 | | 0x2C | 材质4点多边形 | 559 | | 0x30 | 渐变3点多边形 | 560 | | 0x34 | 渐变材质3点多边形 | 561 | | 0x38 | 渐变4点多边形 | 562 | | 0x3C | 渐变材质4点多边形 | 563 | | 0x40 | 单色直线 | 564 | | 0x48 | 单色多段线 | 565 | | 0x50 | 渐变直线 | 566 | | 0x58 | 渐变多段线 | 567 | | 0x60 | 矩形 | 568 | | 0x64 | 精灵 | 569 | | 0x68 | 点 | 570 | | 0x70 | 8×8矩形 | 571 | | 0x74 | 8×8精灵 | 572 | | 0x78 | 16×16矩形 | 573 | | 0x7c | 16×16精灵 | 574 | 575 | ●GPU命令和传送包 576 | 577 | | 0x01 | 清除高速缓存 | 578 | | ---- | --------- | 579 | | 0x02 | 帧缓存矩形绘图 | 580 | | 0x80 | 在帧缓存中移动图像 | 581 | | 0xA0 | 发送图像到帧缓存 | 582 | | 0xC0 | 从帧缓存拷贝图像 | 583 | 584 | ●绘图模式/环境设置包 585 | 586 | | 0xE1 | 绘图模式设置 | 587 | | ---- | --------- | 588 | | 0xE2 | 材质窗口设置 | 589 | | 0xE3 | 设置绘图区域左上角 | 590 | | 0xE4 | 设置绘图区域右下角 | 591 | | 0xE5 | 绘图便宜 | 592 | | 0xE6 | 掩码设置 | 593 | 594 | ### 包描述 595 | 596 | #### 图元包 597 | 598 | ![](./img/图形处理芯片/20240721144750.png) 599 | 600 | #### GPU命令和传输包 601 | 602 | ![](./img/图形处理芯片/20240721145223.png) 603 | 604 | #### 绘图模式/环境设置包 605 | 606 | 其中有些也是图元包,无论什么情况它都是GPOU最后接收的包。所以如果一个图元设置了材质页信息,它会覆盖存在的数据,即使它是由0xE?包发送的。 607 | 608 | | 0xE1 绘图模式设置 | | | | | | | | 609 | | ----------- | ------ | --- | --- | ------- | ------- | --- | ------ | 610 | | 31 24 | 23 11 | 10 | 9 | 8     7 | 6     5 | 4 | 3    0 | 611 | | 0xE1 | | dfe | dtd | tp | abr | ty | tx | 612 | 613 | 对于某些不是标准类新的GPU(0x10000007命令不返回2),状态寄存器的第11-13位似乎也可以用这个命令传送。 614 | 615 | | 0xE1 材质窗口设置 | | | | | | 616 | | ----------- | ------ | ------ | ------ | ----- | ----- | 617 | | 31 24 | 23 10 | 19 15 | 14 10 | 9 5 | 4 0 | 618 | | 0xE2 | | twx | twt | tww | twh | 619 | 620 | | twx | 材质窗口X,(twx×8) | 621 | | --- | ------------------ | 622 | | twy | 材质窗口Y,(twy×8) | 623 | | tww | 材质窗口宽度,256-(tww×8) | 624 | | twh | 材质窗口高度,256-(twh×8) | 625 | 626 | | 0xE3 设置绘图区域左上角 | | | | 627 | | -------------- | ------ | ------ | ------ | 628 | | 31 24 | 23 16 | 15 8 | 7 0 | 629 | | 0xE3 | | Y | X | 630 | 631 | 设置绘图区域左上角,X和Y是帧缓存绝对坐标。 632 | 633 | | 0xE4 设置绘图区域右下角 | | | | 634 | | -------------- | ------- | ------ | ------ | 635 | | 31     24 | 23   16 | 15   8 | 7    0 | 636 | | 0xE4 | | Y | X | 637 | 638 | | 0xE5 绘图偏移 | | | | 639 | | --------- | -------- | ------- | ----- | 640 | | 31    24 | 23    16 | 15    8 | 7   0 | 641 | | 0xE5 | | Y便宜 | X便宜 | 642 | 643 | 偏移Y=Y<<11,设置绘图区域便宜。X和Y是帧缓存中的便宜。 644 | 645 | | 0xE6 绘图掩码 | | | | 646 | | ---------- | --------- | --- | --- | 647 | | 31      24 | 23      2 | 1 | 0 | 648 | | 0xE6 | | 掩码2 | 掩码1 | 649 | 650 | 掩码1:绘图时设置掩码位,1=开 651 | 652 | 掩码2:绘图掩码检测,1=开 653 | 654 | ## DMA和GPU 655 | 656 | GPU有两个DMA通道。DMA通道2用来发送链接包列表到GPU以及和帧缓存传送图像数据。DMA通道6用来建立一个空的链接列表,其中每个条目指向前一个条目(例如方向清空一个顺序表OT)。 657 | 658 | 第二DMA内存地址寄存器(D2_MADR) 659 | 0x1F80_10A0 660 | 661 | | 31          0 | 662 | | ------------- | 663 | | MADR | 664 | 665 | MADR:指向DMA将开始读写的虚拟地址。 666 | 667 | 第二DMA块控制寄存器(D2_BCR) 0x1F80_10A4 668 | 669 | | 31    0 | | 670 | | ------- | --- | 671 | | BA | BS | 672 | | 16 | 16 | 673 | 674 | BA: 块的总数 675 | 676 | BS:块的大小(按字计算) 677 | 678 | 设置DMA块,当开始DMA后将会发送BA个BS字长的块。不要设置块大小大于0x10字,因为GPU命令缓存只有64字节。 679 | 680 | 第二DMA通道控制寄存器(D2_CHCR) 0x1F80_10A8 681 | 682 | | 31    0 | | | | | | | 683 | | ------- | --- | --- | --- | --- | --- | --- | 684 | | 0 | TR | 0 | LI | CO | 0 | DR | 685 | | 7 | 1 | 13 | 1 | 1 | 8 | 1 | 686 | 687 | | TR | 0 没有DMA传输忙
1 开始DMA传输/DMA传输忙 | 688 | | --- | -------------------------------- | 689 | | LR | 1 传输链接列表(只限于GPU) | 690 | | CO | 1 传输连续流数据 | 691 | | DR | 1 方向:从内存

0 方向:向内存 | 692 | 693 | 用来配置DMA通道,当第18位被设置时开始DMA,当第18位被清除DMA立刻结束。要向VRAM发送或接收数据,先向GPU发送适当的包(0xA0/0xC0)。 694 | 695 | 第六DMA内存地址寄存器(D6_MADR) 0x1F80_10E0 696 | 697 | | 31          0 | 698 | | ------------- | 699 | | MADR | 700 | 701 | MADR:指向DMA将开始读写的虚拟地址。 702 | 703 | 第六DMA块控制寄存器(D6_BCR) 0x1F80_10E4 704 | 705 | | 31          0 | 706 | | ------------- | 707 | | BC | 708 | 709 | BC:列表条目数 710 | 711 | 第六DMA通道控制寄存器(D6_CHCR) 0x1F80_10E8 712 | 713 | | 31     0 | | | | | | | 714 | | -------- | --- | --- | --- | --- | --- | --- | 715 | | 0 | TR | 0 | LI | CO | 0 | DR | 716 | | 7 | 1 | 13 | 1 | 1 | 8 | 1 | 717 | 718 | | TR | 0 没有DMA传输忙
1 开始DMA传输/DMA传输忙 | 719 | | --- | -------------------------------- | 720 | | LR | 1 传输链接列表(只限于GPU) | 721 | | CO | 1 传输连续流数据 | 722 | | DR | 1 方向:从内存

0 方向:向内存 | 723 | 724 | 用来配置DMA通道,当第18位被设置时开始DMA,当第18位被清除DMA立刻结束。要向VRAM发送或接收数据,先向GPU发送适当的包(0xA0/0xC0)。当这个寄存器被设为0x11000002,DMA通道会创建一个D6_BCR个条目地址位于D_MADR的空链接列表。每个条目大小是0,指向前一个条目。如果D6_MAD=0x80100010,D6_BCR=0x00000004,会生成一个列表如下: 725 | 726 | | 0x8010_0000 | 0x00FF_FFFF | 727 | | ----------- | ----------- | 728 | | 0x8010_0004 | 0x0010_0000 | 729 | | 0x8010_0008 | 0x0010_0004 | 730 | | 0x8010_000C | 0x0010_0008 | 731 | | 0x8010_0010 | 0x0010_000C | 732 | 733 | DMA主控制寄存器(DPCR) 0x1F80_10F0 734 | 735 | | | DMA6 | DMA5 | DMA4 | DMA3 | DMA2 | DMA1 | DMA0 | 736 | | --- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | 737 | | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 738 | 739 | 在这个寄存器中每个寄存器分配了一个4位的控制块。 740 | 741 | | 位3 | 1=DMA使能 | 742 | | --- | ------- | 743 | | 2 | 未知 | 744 | | 1 | 未知 | 745 | | 0 | 未知 | 746 | 747 | ### 一步步建普通GPU函数 748 | 749 | ●初始化GPU 750 | 751 | | 1 | 复位GPU(GP1命令0x000),同时关闭显示器 | 752 | | --- | ---------------------------- | 753 | | 2 | 设置水平和垂直开始/结束(GP1命令0x06,0x07) | 754 | | 3 | 设置显示模式(GP1命令0x08) | 755 | | 4 | 设置显示偏移(GP1命令0x05) | 756 | | 5 | 设置绘图模式(GP0命令0xE1) | 757 | | 6 | 设置绘图区域(GP0命令0xE3,0xE4) | 758 | | 7 | 设置绘图便宜(GP0命令0xE5) | 759 | | 8 | 使能显示 | 760 | 761 | ●发送链接列表 762 | 763 | 通常发送大量图元是使用链接列表DMA传送,列表最后一个条目的指针应该是0xFFFFFF,是终止符。如果条目大小设为0,没有数据被传送到GPU,然后处理下一个条目。要发送一个列表应该: 764 | 765 | | 1 | 等待GPU准备好接收命令(第0x1C位=1) | 766 | | --- | ---------------------------------------- | 767 | | 2 | 使能第二DMA通道 | 768 | | 3 | 设置GPU到DMA CPU-->GPU模式(0x04000002) | 769 | | 4 | 设置D2_BCR为0 | 770 | | 5 | 设置D2_CHCR到链接模式,内存-->GPU和使能DMA0x01000401) | 771 | 772 | ●通过DMA上传图像: 773 | 774 | | 1 | 等待GPU空闲和DMA完成。如果必要,使能第二DMA通道 | 775 | | --- | ------------------------------------------------------------------------------------------------------------------------- | 776 | | 2 | 发送‘发送图像到VRAM’图元(可以通过DMA发送,使用上面描述的链接列表) | 777 | | 3 | 设置DMA到CPU-->GPU(0x04000002)(如果你没有在前面完成了这个步骤) | 778 | | 4 | 设置D2_MADR到列表的开始 | 779 | | 5 | 设置D2_BCR的第31-16位=要发送的字数(H×W/2)

             
15-0位=块大小为1个字(0x01)

如果H×W是奇数,加1。(像素是2个字节,发送一个额外的空像素填补内容) | 780 | | 6 | 设置D2_CHCR到连续模式,内存-->GPU和使能DMA(0x01000201) | 781 | 782 | 注意,H,W,X和Y总是以帧缓存像素为单位,即使你传送的图像数据是其他格式的。如果需要更快的速度,可以使用大一点的块尺寸。如果要发送的字数不是块大小的整数倍,则要单独发送剩下的部分,因为GPU只能接受一个额外的半字。同时注意不要使用大于0x10的块尺寸,因GPU命令缓存只有64字节(=0x10字)。 783 | 784 | ●等待发送命令 785 | 786 | 你可以在DMA终了和GPU准备好时发送新的命令 787 | 788 | | 1 | 等待D2_CHCR的0x18位变为0 | 789 | | --- | ------------------ | 790 | | 2 | 等待GP1的0x1C位变为1 | 791 | -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/favicon.ico -------------------------------------------------------------------------------- /docs/img2/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/img2/144.png -------------------------------------------------------------------------------- /docs/img2/168.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/img2/168.png -------------------------------------------------------------------------------- /docs/img2/192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/img2/192.png -------------------------------------------------------------------------------- /docs/img2/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/img2/48.png -------------------------------------------------------------------------------- /docs/img2/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/img2/72.png -------------------------------------------------------------------------------- /docs/img2/96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Little-Data/Gametoolkit/5ed177f7c8e179a355bfb9f85322a7cfcbdb0121/docs/img2/96.png -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Gametoolkit 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
Loading...
15 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /docs/wiki/3ds_game_unpacking_tool.md: -------------------------------------------------------------------------------- 1 | # 3ds游戏解包工具 2 | 3 | 文件来自[阿斯特罗乔布斯-哔哩哔哩](https://space.bilibili.com/210298091) 4 | 5 | 感谢他的无私奉献! 6 | 7 | [文件](https://github.com/Little-Data/Gametoolkit/releases/tag/V4.2) 8 | 9 | # cia转换cci方法 10 | 11 | ```batch 12 | makerom-x86_64.exe -ciatocci 文件名.cia 13 | ``` 14 | 15 | # 3ds游戏解包流程(白嫖党) 16 | 17 | 没有NS主机的3ds游戏解包流程: 18 | 19 | ## 准备工作: 20 | 21 | 准备3ds游戏rom,`cia`转换成`cci`,再手动改成3ds格式,有3ds格式的rom最好,准备好`3dstool`,把需要解包的游戏rom放到`3dstool`文件夹。缺少`xorpad`文件,输入的命令简化,此方法仅适合白嫖党。 22 | 23 | ## 第一步:提取cci 24 | 25 | 按住键盘上的`SHIFT`键,同时右击文件夹中空白处,点击在此处打开命令窗口,输`MD cci`创建文件夹cci,接着键入命令: 26 | 27 | ```batch 28 | 3dstool -xvt0f cci cci\0.cxi input.3ds --header cci\ncsdheader.bin 29 | ``` 30 | 31 | 可以发现提取出了一个`cxi`和`ncsdheader.bin`文件。 32 | 33 | 在CMD中提示`INFO: partition 1(7) is not extract`的话指的是在`cci`文件中,还有第1分区的`1.cfa`和第7分区的`7.cfa`没有被提取出来,然后我们就需要改变命令中的参数重新提取这两个文件: 34 | 35 | ```batch 36 | 3dstool -xvt17f cci cci\1.cfa cci\7.cfa input.3ds 37 | ``` 38 | 39 | 如果只有第1分区没提取出来,则输入: 40 | 41 | ```batch 42 | 3dstool -xvt1f cci cci\1.cfa input.3ds 43 | ``` 44 | 45 | ## 第二步:提取cxi/cfa 46 | 47 | 输入该命令创建文件夹:`MD cci\cxi0`,接着键入以下命令: 48 | 49 | ```batch 50 | 3dstool -xvtf cxi cci\0.cxi --header cci\cxi0\ncchheader.bin --exh cci\cxi0\exh.bin --plain cci\cxi0\plain.bin --exefs cci\cxi0\exefs.bin --romfs cci\cxi0\romfs.bin 51 | ``` 52 | 53 | 成功提取出5个bin文件,这样cxi0就提取完了。 54 | 55 | 创建文件夹`MD cci\cfa1`,键入命令: 56 | 57 | ```batch 58 | 3dstool -xvtf cfa cci\1.cfa --header cci\cfa1\ncchheader.bin --romfs cci\cfa1\romfs.bin 59 | ``` 60 | 61 | 以实际分区为准,如果是分区7则输入`cfa7`,必须倒过来写,不能写`7.cfa`或`1.cfa` 62 | 63 | ## 第三步:提取提取bin 64 | 65 | 直接键入代码: 66 | 67 | ```batch 68 | 3dstool -xvtf romfs cci\cxi0\romfs.bin --romfs-dir cci\cxi0\romfs 69 | ``` 70 | 71 | 接下来`exefs.bin`文件也是使用同样的方法进行提取,但是这里请注意,exefs提取时,可能需要把`-xvtf`改为`-xvtfu`,因为在部分游戏中,exefs文件是使用反向LZ77压缩的(具体是否需要添加`-u`,需要查看exh中的hex16进制信息,若是`exh.bin`的0000000d位的值为1时,需要加`-u`),所以需要将代码改为: 72 | 73 | ```batch 74 | 3dstool -xvtfu exefs cci\cxi0\exefs.bin --exefs-dir cci\cxi0\exefs 75 | ``` 76 | 77 | `cfa1`文件夹中的romfs.bin文件也使用相同的方法进行提取: 78 | 79 | ```batch 80 | 3dstool -xvtf romfs cci\cfa1\romfs.bin --romfs-dir cci\cfa1\romfs 81 | ``` 82 | 83 | 好了,到此为止,所有的提取工作都完成了,我们得到了ROM中的资源文件。 84 | 85 | # 3DSAudioRipper音频提取 86 | 87 | 软件界面 88 | 89 | `save location` 设置输出路径 90 | `open source file` 打开文件 91 | `formats to dump` 导出文件类型 92 | `process file` 点击执行 93 | 94 | # 3DS_Multi_Decryptor破解加密3ds游戏 95 | 96 | 把ROM拖到`ctrKeyGen.py`上 97 | 98 | # 3DS SoundArchiveTool音频提取 99 | 100 | 3ds游戏里打包格式为`bcsar`或者`bfsar`的文件拖到exe上即可解包,使用Foobar2000转换音乐。 101 | -------------------------------------------------------------------------------- /docs/wiki/All_tool_instructions.md: -------------------------------------------------------------------------------- 1 | # 全部工具使用说明 All tool instructions 2 | 3 | 推荐安装在默认目录下。 4 | 5 | 由于一些软件比较老,可能不支持高版本。 6 | 7 | 部分软件有特殊说明,请到侧边栏查看对应软件。 8 | 9 | It is recommended to install in the default directory. 10 | 11 | Because some software is relatively old, it may not support higher versions. 12 | 13 | Some software has special instructions, please go to the sidebar to check the corresponding software. 14 | -------------------------------------------------------------------------------- /docs/wiki/DKZStudio.md: -------------------------------------------------------------------------------- 1 | # DKZStudio 2 | 3 | 该软件必须安装在默认目录下。 4 | 5 | The software must be installed in the default directory. 6 | 7 | 最高支持Win 10,更高版本会出现功能无法使用。 8 | 9 | Up to Win 10 is supported, and functions may become unavailable in higher versions. 10 | 11 | 转换的音频音质可能会降低,请使用[LoopingAudioConverter-3.1](https://github.com/Little-Data/Gametoolkit/releases/tag/V3.1)转换 12 | 13 | The converted audio quality may be reduced, please use [LoopingAudioConverter-3.1](https://github.com/Little-Data/Gametoolkit/releases/tag/V3.1) to convert -------------------------------------------------------------------------------- /docs/wiki/Summary_of_Computer_File_Attributes.md: -------------------------------------------------------------------------------- 1 | # 计算机文件属性汇总Summary of Computer File Attributes 2 | 3 | 来自[阿斯特罗乔布斯-哔哩哔哩](https://space.bilibili.com/210298091),有改动。 4 | 5 | 使用uestudio 16进制。 6 | 7 | 提示:可以点左下角的三个横线收起侧边栏。 8 | 9 | 文件头原始文本/标志一栏有乱码是正常的,因为软件也无法正常显示,就直接复制下来。 10 | 11 | | 计算机文件格式 | 文件头 | 文件头原始文本/标志 | 备注 | 代表作/备注 | 解包方法 | 补充说明 | 12 | |:--------------:|:-----------------------------------:|:------------:|:----------------------------------:|:----------------------:|:--------------------------------------------------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------:| 13 | | cpk | 43 50 4B | CPK | 游戏打包格式 | 虚空幻界、彼岸游境 | 使用garbro、CpkFileBuilder、Noesis等工具解包 | | 14 | | hca | 48 43 41 | HCA | criware的音频格式 | vgm工具箱转换acb或者usm视频的格式 | foobar2000、格式工厂、ffmpeg | | 15 | | acb | 40 55 54 46 | @UTF | criware的音频打包格式 | steam刀剑神域系列 | Foobar2000、vgm工具箱 | | 16 | | awb | 41 46 53 32 | AFS2 | criware的音频打包格式 | steam刀剑神域系列 | Foobar2000、vgm工具箱 | | 17 | | usm | 43 52 49 44 | CRID | criware的视频格式 | 原神、崩坏三等很常见的格式 | vgm工具箱、ffmpeg,一些加密的usm只能通过民间大神开发的工具解包 | | 18 | | usm | 30 26 B2 75 8E 66 CF 11 | 0&瞮巉? | 地雷社游戏的一种视频格式 | 新次元游戏海王星、Trillion | 实际是wmv视频,修改后缀名为wmv,FFmpeg可转换mkv、mp4 | | 19 | | unity游戏 | 55 6E 69 74 79 46 53 | UnityFS | unity大多数游戏常见的文件头 | 大多数unity游戏不一一列举 | assetstudio | | 20 | | fsb | 46 53 42 35 | FSB5 | fmod引擎的音频打包格式 | 大多数unity游戏 | assetstudio解包时选择转换为wav、foobar2000 | 大部分fsb格式的文件头都是FSB5,魔窟冒险(wiiu)这个游戏例外,打乱字节仍可以播放 | 21 | | PFS | 70 66 38 | pf8 | 未知 | 未记录 | 使用garbro | | 22 | | bnk | 42 4B 48 44 | BKHD | wwise引擎的音频打包格式 | 大多数unity游戏 | foobar2000 | | 23 | | pam | 50 41 4D 46 30 30 34 31 | PAMF0041 | 未知 | steam单机游戏的一种视频打包格式 | vgm工具箱可提取,没使用ffmpeg测试 | | 24 | | bik | 42 49 4B 69 | BIKi | bink视频,rad games tool开发的视频格式 | 逆战 | 格式工厂、ffmpeg | | 25 | | bk2 | 4B 42 32 6A | kb2j | bink视频,rad games tool开发的视频格式 | 狂热传说、情热传说、海王星系列游戏 | radvideo和vgm工具箱,海王星系列的游戏经常伪装成usm格式 | | 26 | | bk2 | 4B 42 32 69 | kb2i | bink视频,rad games tool开发的视频格式 | 白荆回廊 | radvideo | | 27 | | bk2 | 4B 42 32 6E | kb2n | bink视频,rad games tool开发的视频格式 | 白荆回廊 | radvideo | | 28 | | bra | 50 44 41 | PDA | 未知 | 妖精剑士F | bra音频可尝试用dargon unpacker解包 | | 29 | | xwb | 57 42 4E 44 | WBND | 地雷社游戏中常见的音频文件打包格式 | 超次元游戏海王星、死亡终局轮回试炼 | unxwb提取很快,foobar2000提取极慢,如果不是为了更好的音质不建议用foobar2000 | foobar2000是音频转换工具不是文件提取器,专业不对口,所以很慢 | 30 | | exe | 4D 5A | MZ | windows应用程序执行文件 | 常见的文件格式 | 7z | | 31 | | dll | 4D 5A | MZ | windows应用程序扩展文件 | 常见的文件格式 | 7z | | 32 | | xp3 | 58 50 33 | XP3 | galgame游戏常见的打包格式 | KARAKARA2 | 可尝试用garbro解包 | | 33 | | cab | 4D 53 43 46 | MSCF | Windows的压缩格式 | 装驱动,补丁的目录下面可能会有 | 7z | | 34 | | mid | 4D 54 68 64 | MThd | 主机掌机游戏的解包的一种音频格式 | 重装机兵2r、重装机兵3 | vgmtrans解包nds,使用foobar2000转换 | | 35 | | moflex | 4C 32 | L2 | 3DS游戏的一种视频格式 | 重装机兵4 | 使用ffmpeg转换、格式工厂 | | 36 | | pmf | 50 53 4D 46 30 30 | PSMF00 | PSP游戏的视频专用打包格式 | 刀剑神域无限时刻、英雄传说空之轨迹 | 使用pmftools转换有声音,有些游戏无法转换,使用ffmpeg转换无声音 | | 37 | | bcsar | 43 53 41 52 | CSAR | 3DS游戏的一种音频打包格式 | 嘿!皮克敏 | 使用3DS SoundArchiveTool解包 | | 38 | | bcwav | 43 57 41 56 | CWAV | 3DS游戏bcsar文件的音频解包格式 | 嘿!皮克敏 | foobar2000 | | 39 | | bcstm | 43 53 54 4 | CSTM | 3DS游戏的一种音频打包格式 | 嘿!皮克敏 | foobar2000、ffmpeg | | 40 | | vag | 56 41 47 70 | VAGp | psp游戏的一种音频格式 | 英雄传说空之轨迹 | foobar2000、ffmpeg | | 41 | | pck | 46 69 6C 65 6E 61 6D 65 | Filename | steam单机游戏的一种pck文件 | 超女神信仰诺瓦露、约战凛绪轮回 | fmodel、umodel输入AES密钥解包 | | 42 | | pck | 41 4B 50 4B | AKPK | unity游戏中使用wwise引擎打包的格式 | 原神、崩坏三 | 除了音频还存储图片,使用dragon unpacker解包 | | 43 | | at3 | 52 49 46 46 | RIFF | PSP游戏的音频格式,实际上等同于wav、wem | 我的妹妹不可能那么可爱 | dragon unpacker解包,改后缀为bnk或wem使用foobar2000转换 | | 44 | | adx | 不固定 | 不固定 | criware的音频格式 | 未记录,usm视频解包的一种音频格式 | foobar2000 | | 45 | | ssw | 58 57 53 46 49 4C 45 | XWSFILE | 3ds游戏的一种音频打包格式 | 死或生维度 | 3DS Audio Ripper,提取出bgwav格式的音频 | | 46 | | ktx | AB 4B 54 58 20 31 31 BB | 獽TX 11? | 手游中的一种图片格式 | 海岛奇兵 | TexturePackerGui | | 47 | | wmv | 30 26 B2 75 8E 66 CF 11 | 0&瞮巉? | 一种视频格式 | 海王星U | ffmpeg、格式工厂等 | | 48 | | ogv | 4F 67 67 53 | OggS | theora编码,开放免费的视频压缩格式 | 冬日树下的回忆 | ffmpeg、格式工厂等 | | 49 | | asar | 不固定 | 不固定 | galgame游戏的一种打包格式 | 冬日树下的回忆 | winasar可以完全解包、dragon unpacker只能提取图片和音频 | | 50 | | rpa | 52 50 41 | RPA | galgame游戏的一种打包格式 | Sakura Succubus 2 | garbro可以解包、RPA Extract | | 51 | | pvr.ccz | 43 43 5A | CCZ | 一种图片格式 | 三国杀移动版 | TexturePackerGUI | | 52 | | ypf | 59 50 46 | YPF | galgame游戏的一种视频格式 | 猫忍之心外传 | 使用garbro解包 | | 53 | | rgss3a | 52 47 53 53 41 44 | RGSSAD | 一种2d rpg游戏的打包格式 | 打包格式 关于我转生变成兽人这档事 | garbro可以解包 | | 54 | | mpg | 不固定 | 不固定 | mpeg1编码的视频格式 | G线上的魔王 | ffmpeg、格式工厂等 | | 55 | | mp4 | 00 00 00 1C 66 74 79 70 69 73 6F 6D | ....ftypisom | 常见的mp4视频 | 白荆回廊 | ffmpeg、格式工厂等 | 下方显示mvhd | 56 | | m4v | 00 00 00 18 66 74 79 70 6D 70 34 32 | ....ftypmp42 | 罕见的视频格式 | 圣境之塔 | ffmpeg、格式工厂 | 没有mvhd | 57 | | nwa | 02 00 10 00 44 AC | ....D? | 罕见的音频格式 | 初恋1/1 | 格式工厂和ffmpeg无效,可以用foobar2000转换 | | 58 | | arc | 42 55 52 49 48 4F | BURIKO | galgame游戏的一种打包格式 | Arcana Alchemia(炼爱秘仪) | garbro提取立绘和视频、音频 | | 59 | | png | 89 50 4E 47 | 塒NG | 一种图片格式 | 各种游戏解包提取的图片格式,不一一列举 | 格式工厂、honeyview、ps、topaz全家桶的降噪、锐化、无损放大 | | 60 | | npk | 4E 58 50 4B | NXPK | 网易neox引擎游戏打包的一种格式 | 重装上阵 | NPKExtractor | | 61 | | mp3 | 49 44 33 | ID3 | 常见音频格式、cocos2d或者一些卡牌手游用到的音频格式 | 小花仙 | 格式工厂、foobar2000、ffmpeg | | 62 | | wma | 30 26 B2 75 8E 66 CF 11 | 0&瞮巉? | 一种音频格式 | 暂无 | 格式工厂、ffmpeg | | 63 | | m4a | 52 49 46 46 | ....ftypM4A | 一种音频格式 | 暂无 | 格式工厂、ffmpeg | | 64 | | h264 | 不固定 | 不固定 | 一种h264编码的视频格式 | 星空(wiiu) | 格式工厂和ffmpeg | | 65 | | 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) | 66 | | PSS | 00 00 01 BA | ...? | PS2游戏的视频格式 | 多浪迪警官3保护者 | vgm工具箱、格式工厂、ffmpeg、cube media player | | 67 | | ss2 | 53 53 68 64 | SShd | PS2游戏PSS视频文件分离的音频格式 | 多浪迪警官3保护者 | 格式工厂、ffmpeg | | 68 | | iso | 不固定 | 不固定 | PS2游戏rom | 多浪迪警官3保护者 | vgm工具箱解压、7Z | | 69 | | iso | 不固定 | 不固定 | PSP游戏rom | 空之轨迹、我的妹妹不可能那么可爱 | 7Z | | 70 | | ckb | 63 6B 6D 6B | ckmb | 一种音频打包格式 | 刀剑神域记忆重组 | foobar2000 | | 71 | | snd | 4F 67 67 53 | OggS | 一种音频格式 | 约战凛绪轮回 | foobar2000、格式工厂、ffmpeg | | 72 | | ogg | 4F 67 67 53 | OggS | 一种音频格式 | Areaea | foobar2000、格式工厂、ffmpeg | | 73 | | wav | 52 49 46 46 | RIFF | 一种音频格式 | 很常见,不列举 | foobar2000、格式工厂、ffmpeg可以转换,文件头后面是wave | | 74 | | wem | 52 49 46 46 | RIFF | 一种音频格式 | unity和虚幻引擎游戏中常见的文件,不列举 | foobar2000、格式工厂、ffmpeg可以转换,文件头后面是wave | | 75 | | bank | 52 49 46 46 | RIFF | 一种音频格式 | 白荆回廊 | foobar2000、格式工厂、ffmpeg可以转换,文件头后面是fev | | 76 | | avi | 52 49 46 46 | RIFF | 一种视频格式 | 英雄传说:闪之轨迹 | foobar2000、格式工厂、ffmpeg可以转换,文件头后面是avi | | 77 | | at9 | 52 49 46 46 | RIFF | 一种音频格式 | psv游戏中的一种音频格式 | foobar2000、格式工厂、ffmpeg | | 78 | | zip | 50 4B | PK | 一种可直接解压的PK类文件 | 常见的压缩包 | 很常见,电脑使用7z、手机使用MT管理器解压 | | 79 | | apk | 50 4B | PK | 一种可直接解压的PK类文件 | 安卓手机安装包 | 很常见,电脑使用7z、手机使用MT管理器解压 | | 80 | | xapk | 50 4B | PK | 一种可直接解压的PK类文件 | 国外安卓游戏安装包 | 很常见,电脑使用7z、手机使用MT管理器解压 | | 81 | | obb | 50 4B | PK | 一种可直接解压的PK类文件 | 国外安卓游戏的数据包 | 很常见,电脑使用7z、手机使用MT管理器解压 | | 82 | | fb2k-component | fb2k-component | PK | 一种可直接解压的PK类文件 | foobar2000的组件 | 不解包的根本没见过,电脑使用7z、手机使用MT管理器解压 | | 83 | | ipa | 50 4B | PK | 一种可直接解压的PK类文件 | 苹果手机的安装包 | 虽然没用过苹果手机,但它也是一种pk文件,直接解压就行 | | 84 | | pak | 不固定 | 不固定 | 虚幻引擎游戏的打包格式 | 白荆回廊、幻塔 | 此pak文件或大或小,大的十几二十多G,小的几十kb,fmodel、umodel输入AES密钥解包 | 有的游戏不设置密钥,如魔道兵装、碧蓝航线 | 85 | | pak | 不固定 | 不固定 | 世纪天成csol的资产格式 | 反恐精英online | 此pak文件较小,把pak拖到cospak上解包 | | 86 | | pak | 不固定 | 不固定 | 世纪天成csol的资产格式 | 怪物猎人崛起 | 此pak包巨大,30多个G,使用retool解包 | | 87 | | pak | 不固定 | 不固定 | 任天堂wiiu平台的一种资产文件 | 唐老鸭历险记重制版(wiiu平台) | 此pak文件较小,最大几十mb,最小几十kb | | 88 | | nds | 不固定 | 不固定 | nds游戏rom | 重装机兵2r、重装机兵3 | 使用vgmtrans可提取音频 | | 89 | | STR | 00 FF FF FF FF FF FF FF FF FF FF | 空白乱码 | PS游戏ISOrom解包后的一种文件类型 | 龙珠GT 决战最终回合 | jpsxdec | | 90 | | au | 2E 73 6E 64 | .snd | PS游戏STR文件解包后的一种音频格式 | 龙珠GT 决战最终回合 | 格式工厂、foobar2000、ffmpeg | | 91 | | aif | 46 4F 52 4D | FORM | PS游戏STR文件解包后的一种音频格式 | 龙珠GT 决战最终回合 | 格式工厂、foobar2000、ffmpeg | | 92 | | btsnd | 不固定 | 不固定 | wiiu游戏loadiine格式的一种音频格式 | 星空(wiiu) | 有些游戏可用foobar2000播放,格式工厂和ffmpeg无效 | | 93 | | bfstm | 46 53 54 4D | FSTM | wiiu游戏loadiine格式的一种音频格式 | NES Remix Pack | 格式工厂、foobar2000、ffmpeg | | 94 | | bfsar | 46 53 41 52 | FSAR | wiiu游戏loadiine格式的一种音频打包格式 | NES Remix Pack | BFSAR_Split | | 95 | | bfwav | 46 57 41 56 | FWAV | bfsar文件解包的一种音频格式 | NES Remix Pack | EveryFileExplorer和foobar2000转换为wav | | 96 | | bfgrp | 46 47 52 50 | FGRP | wiiu游戏中的sarc解包的音频文件 | 蘑菇队长(wiiu) | 删除FWAV前面的字节保存为bfwav,再使用EveryFileExplorer转换为wav格式 | 不删除任何字节可以使用CubeMediaPlayer2播放,但是全是噪音 | 97 | | bfseq | 46 53 45 51 | FSEQ | wiiu游戏中的bfsar解包的音频文件 | 动物之森Amiibo节日(wiiu) | 删除FWAV前面的字节保存为bfwav,再使用EveryFileExplorer转换为wav格式 | 不删除任何字节可以使用CubeMediaPlayer2播放,但是全是噪音 | 98 | | sarc | 53 41 52 43 | SARC | wiiu游戏中的一种文件打包格式 | 任天堂大陆(wiiu平台) | 把sarc文件拖到sarc_tool.exe上即可解包 | | 99 | | dspadpcm | 不固定 | 不固定 | wiiu游戏中的sarc文件解包的音频格式 | 暂无,wiiu游戏sarc文件可以解出来 | 使用Audacity转换成wav、mp3等格式 | | 100 | | wud | 57 55 50 | WUP | wiiu游戏rom的一种打包格式 | 异度之刃x(wiiu平台) | Uwizard输入密钥转换成loadiine格式,解完就像pc单机游戏了 | | 101 | | wux | 57 55 58 | WUX | wiiu游戏wud格式rom压缩后的一种打包格式 | 异度之刃x(wiiu平台) | 未知,一般都是提取loadiine格式的资源 | | 102 | | cso | 43 49 53 4F | CISO | ISO镜像转换而来的一种rom格式 | 女神异闻录persona(PSP平台) | 未知,一般都是提取ISO格式的rom | | 103 | | PBP | 00 50 42 50 | .PBP | ISO镜像转换而来的一种rom格式 | 女神异闻录persona(PSP平台) | 未知,一般都是提取ISO格式的rom | | 104 | | rar | 52 61 72 21 | Rar! | 一种压缩格式 | 常见的压缩包,文件打包格式的一种 | 7z,Winrar | | 105 | | ssnd | 53 53 4E 44 | SSND | 3DS游戏的一种音频打包格式 | 真女神转生深渊奇异之旅 | 3DS Audio Ripper,提取出bcwav格式的音频 | | 106 | | MIB | 不固定 | 不固定 | PS2游戏的一种音频格式 | 多浪迪警官3保护者 | 格式工厂和ffmpeg无效,可以用foobar2000播放和转换 | 第一行字节全是0,尝试删除之后仍可以正常播放,音频时长变成原来的2倍 | 107 | | PKG | 7F 50 4B 47 | .PKG | PS3游戏的rom格式 | 火箭鸟 铁汉雄鸡 | PS3GameExtractor | | 108 | | msf | 4D 53 46 43 | MSFC | PS3游戏的一种音频格式 | 火箭鸟 铁汉雄鸡 | foobar2000、格式工厂、ffmpeg | | 109 | | gz | 1F 8B 08 00 | .?.. | 一种压缩格式 | 火箭鸟 铁汉雄鸡 | 7z | linux的一种归档格式 | 110 | | pac | 44 57 5F 50 41 43 4B | DW_PACK | 地雷社游戏的一种文件打包格式 | 海王星系列 | NR2_unpacker-PAC | | 111 | | nsa | 不固定 | 不固定 | ONScripter是一个通用GalGame引擎,rom格式为nsa | 伊甸 | garbro可以解包 | | 112 | | cdi | 不固定 | 不固定 | 世嘉DC游戏rom格式 | 生化危机3(DC平台) | 软碟通 | | 113 | | pvr | 47 42 49 58 | GBIX | 一种图片格式 | 生化危机3(DC平台)、逆战模型解包的贴图 | TexturePackerGui,逆战的可以正常转换,生化危机3无效 | | 114 | | jpg | FF E8 FF E0 00 10 4A 46 49 | (前4位乱码).JFIF | 一种图片格式 | 生化危机3(DC平台) | 格式工厂 | | 115 | | gif | 47 49 46 | GIF | 一种图片格式 | 生化危机3(DC平台) | 格式工厂 | | 116 | | afs | 41 46 53 | AFS | 一种文件打包格式 | 生化危机3(DC平台)、命运石之门(PSP) | AFSExplorer、SimpleAFSExtractor、vgm工具箱 | 不推荐用AFSExplorer,这里最好用的是SimpleAFSExtractor,可以解出vgm工具箱解不了的 | 117 | | sfd | 00 00 01 BA | ...? | 一种视频格式 | 生化危机3(DC平台) | vgm工具箱、格式工厂 | | 118 | | mdl | 49 44 53 54 | IDST | csol的模型文件 | csol、cs1.6 | HLMV1.3.5汉化版、Noesis | | 119 | | nar | 4E 41 52 | NAR | csol除了pak之外的一种打包格式 | csol | Nar extractor | | 120 | | mca | 02 00 00 00 01 00 00 01 | ........ | 一种音频格式 | 怪物猎人 | foobar2000 | | 121 | | wbfs | 57 42 46 53 | WBFS | 任天堂wii平台的rom格式 | 斗真传 | WiiBackupManager或者wbfstoiso转换成iso格式 | | 122 | | iso | 不固定 | 不固定 | 任天堂wii游戏wbfs格式的rom转换的一种格式 | 斗真传 | WIIScrubber只能转换iso格式的wii游戏rom | | 123 | | thp | 54 48 50 | THP | 任天堂wii平台的一种音频格式 | 斗真传 | 格式工厂可以转换,vgm工具箱可以分离音频视频 | vgm工具箱分离的音频只能用foobar转换,视频可用格式工厂转换,强大的ffmpeg完全没用 | 124 | | brstm | 52 53 54 4D | RSTM | 任天堂wii平台的一种音频格式 | 斗真传 | 格式工厂、ffmpeg、foobar2000 | | 125 | | brsar | 52 53 41 52 | RSAR | 任天堂wii平台的一种音频打包格式 | 斗真传 | vgm工具箱advanced cutter/offset finder的RWAV Streams | | 126 | | rwav(brwav) | 52 57 41 56 | RWAV | 任天堂wii平台的brsar文件解包的音频格式 | 斗真传 | foobar2000 | 虽然解出来是rwav,其实前面加个b改成brwav仍然可以正常播放,参考3ds的bcwav和wiiu的bfwav | 127 | | arc | 55 AA 38 2D | U?-. | 任天堂wii平台的档案文件 | 斗真传 | EveryFileExplorer | | 128 | | POD | 50 40 44 35 | POD5 | 微软xbox360平台的一种文件打包方式 | 星球大战原力释放2 | dragon unpacker | | 129 | | VPK | 50 4B | PK | PSV游戏rom的格式 | 刀剑神域虚空断章(psv) | 7z解压 | 此vpk非彼vpk,起源引擎cs的vpk不能这样解 | 130 | | bcmdl | 43 47 46 58 | CGFX | 3DS游戏的一种模型文件 | 重装机兵4 | EveryFileExplorer | | 131 | | bctex | 43 47 46 58 | CGFX | 3DS游戏的一种图片格式 | 重装机兵4 | EveryFileExplorer | | 132 | | bin | 不固定 | 不固定 | PS1游戏的一种rom格式 | 最终幻想8 | UltraISO | | 133 | | img | 3B 03 00 00 | ;... | PS1游戏bin镜像解包后的一种文件 | 最终幻想8 | jpsxdec | | 134 | | ahx | 80 00 00 20 | €.. | afs文件里解出的一种音频格式 | 命运石之门(PSP) | foobar2000、格式工厂支持转换,ffmpeg无效 | | 135 | -------------------------------------------------------------------------------- /docs/wiki/Umd_Stream_Composer.md: -------------------------------------------------------------------------------- 1 | # Umd Stream Composer 2 | 3 | 用于将AVI和WAV文件转换封装为MPS文件。 4 | 5 | [下载](https://wololo.net/downloads/index.php/download/8188) 6 | 7 | ## 使用说明 8 | 9 | 该软件非常古老,只能运行在WindowsXP以下系统中。 10 | 11 | 如果想要在新系统中使用,按以下步骤进行: 12 | 13 | * 完全解压压缩包的内容 14 | 15 | * 进入`runtime`目录,将里面的所有文件剪切到`bin`目录 16 | 17 | * 找到`UmdStreamComposer.exe.manifest`文件并删除 18 | 19 | * 打开`UmdStreamComposer.exe`出现需要安装`DirectPlay`,可以跳过不装 20 | 21 | 具体操作可看[生成PSP专用PMF格式视频文件的方法](https://www.bilibili.com/read/cv26819398) 22 | -------------------------------------------------------------------------------- /docs/wiki/awb格式音频.md: -------------------------------------------------------------------------------- 1 | # awb格式音频 2 | 3 | AWB文件是由CRI Middleware开发的各种Sega Dreamcast,PlayStation 2,GameCube和Wii视频游戏使用的音频包。 它包含ADX或ADX2格式的音频,通常用于游戏中的声音效果,音乐和对话。 4 | 5 | ## 方法一 6 | 7 | 使用[LoopingAudioConverter-3.1](https://github.com/Little-Data/Gametoolkit/releases/tag/V3.1)转换。 8 | 9 | 简单粗暴,但是大概率只有一条音频。 10 | 11 | ## 方法二 12 | 13 | [使用VGMToolbox](https://github.com/Little-Data/Gametoolkit/releases/tag/V4.2) 14 | 15 | 打开软件拖到`VGMToolbox/Misc.Tools/Extraction Tools/Common Archives/CRI ACB/AWB Archive Extractor`里。 16 | 17 | 不能保证100%可行。 18 | 19 | 大概率为`bin`文件。 20 | 21 | 如果到进行到这里了,将文件后缀改为`hca`,使用**方法三**。 22 | 23 | ## 方法三 24 | 25 | [阿斯特罗乔布斯-哔哩哔哩](https://space.bilibili.com/210298091)提供。 26 | 27 | 用[foobar2000](https://github.com/Little-Data/Gametoolkit/releases/tag/V4.2)解。 28 | 29 | `acb`、`awb`、`hca`、`adx`也适用。 30 | 31 | 拖到foobar2000上直接转换。 32 | -------------------------------------------------------------------------------- /docs/wiki/pmftools.md: -------------------------------------------------------------------------------- 1 | # pmftools 2 | 3 | 该工具可以将pmf转换为MP4文件,亦可以将MP4转换成pmf 4 | 5 | 不保证都能使用。 6 | 7 | ## 版本一 8 | 9 | [该版本](https://github.com/Little-Data/Gametoolkit/releases/tag/V1.0)只是在原版的基础上整合了UmdStreamComposer 10 | 11 | ## 版本二 12 | 13 | [该版本](https://github.com/Little-Data/Gametoolkit/releases/tag/V4.2)在版本一的基础上做了一下修改: 14 | 15 | * h264编码改成更先进的h265编码。 16 | 17 | * 加入视频的码率、帧率、质量(crf)、分辨率,以保证pmf转换出更高质量的mp4。 18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/wiki/some_bats.md: -------------------------------------------------------------------------------- 1 | # 一些批处理 Some .bat 2 | 3 | 有些需要`ffmpeg`,请下载后并添加到系统环境变量! 4 | 5 | 请自行复制然后改后缀为`.bat` 6 | 7 | 文件来自[阿斯特罗乔布斯-哔哩哔哩](https://space.bilibili.com/210298091) 8 | 9 | ## bin改hca 10 | 11 | ```batch 12 | ren *.bin *.hca 13 | ``` 14 | 15 | ## bytes改成bank 16 | 17 | ```batch 18 | ren *.bytes *.bank 19 | ``` 20 | 21 | ## mp3压缩成aac 22 | 23 | ```batch 24 | for %%i in ("*.mp3") do ffmpeg -i %%i -c:a aac -b:a 32k "%%~ni.aac 25 | pause 26 | ``` 27 | 28 | ## srt批量转换ass软字幕 29 | 30 | ```batch 31 | for %%i in ("*.srt") do ffmpeg -i %%i "%%~ni.ass 32 | pause 33 | ``` 34 | 35 | ## vp9编码usm视频批量转换webm 36 | 37 | ```batch 38 | for %%i in ("*.usm") do ffmpeg -i %%i -c:v libvpx-vp9 -preset fast -b:v 20M -r 60 -crf 16 -vf scale=2048:1080 "%%~ni.webm 39 | pause 40 | ``` 41 | 42 | ## wav改wem 43 | 44 | ```batch 45 | ren *.wav *.wem 46 | ``` 47 | 48 | ## 给文件加后缀 49 | 50 | ```batch 51 | ren *. *.ab 52 | ``` 53 | 54 | ## 批量去视频软字幕 55 | 56 | ```batch 57 | for %%i in ("*.mkv") do ffmpeg -i %%i -c:v copy -c:a copy -sn "%%~ni.mp4 58 | pause 59 | ``` 60 | 61 | ## 批量删除后32位字符 62 | 63 | ```batch 64 | @echo off 65 | ::Deep Lee 66 | setlocal enabledelayedexpansion 67 | for %%f in (*.usm) do ( 68 | echo %%f 69 | set name=%%f 70 | ren !name! !name:~0,-36%!.usm 71 | ) 72 | pause 73 | ``` 74 | 75 | ## 批量删除前N个字符 76 | 77 | ```batch 78 | @echo off 79 | setlocal enabledelayedexpansion 80 | 81 | ::批量去掉文件名前N个字符,如果有文件夹会搜索文件夹下的每个文件进行修改 82 | set /p format=请输入需要操作的文件格式:wav 83 | set /p deletenum=请输入需要删除文件名前多少个字符: 84 | for /r %%i in (.) do ( 85 | for /f "delims=" %%a in (' dir /b "%%i\*.%format%" 2^>nul ') do ( 86 | set "t=%%~na" 87 | ren "%%i\%%a" "!t:~%deletenum%!%%~xa" 88 | ) 89 | ) 90 | 91 | pause 92 | ``` 93 | 94 | ## 删除bak字符 95 | 96 | ```batch 97 | @echo off 98 | Setlocal Enabledelayedexpansion 99 | set "str=.bak" 100 | for /f "delims=" %%i in ('dir /b *.*') do ( 101 | set "var=%%i" & ren "%%i" "!var:%str%=!") 102 | ``` 103 | 104 | ## 删除bik视频字符 105 | 106 | ```batch 107 | @echo off 108 | Setlocal Enabledelayedexpansion 109 | set "str=_0000FFFF.video" 110 | for /f "delims=" %%i in ('dir /b *.*') do ( 111 | set "var=%%i" & ren "%%i" "!var:%str%=!") 112 | ``` 113 | 114 | ## 删除bik音频字符 115 | 116 | ```batch 117 | @echo off 118 | Setlocal Enabledelayedexpansion 119 | set "str=_00000000.audio.multi" 120 | for /f "delims=" %%i in ('dir /b *.*') do ( 121 | set "var=%%i" & ren "%%i" "!var:%str%=!") 122 | ``` 123 | 124 | ## 删除pam视频264字符 125 | 126 | ```batch 127 | @echo off 128 | Setlocal Enabledelayedexpansion 129 | set "str=_000001E0" 130 | for /f "delims=" %%i in ('dir /b *.*') do ( 131 | set "var=%%i" & ren "%%i" "!var:%str%=!") 132 | ``` 133 | 134 | ## 删除pam音频aa3字符 135 | 136 | ```batch 137 | @echo off 138 | Setlocal Enabledelayedexpansion 139 | set "str=_000001BD" 140 | for /f "delims=" %%i in ('dir /b *.*') do ( 141 | set "var=%%i" & ren "%%i" "!var:%str%=!") 142 | ``` 143 | 144 | ## 删除usm视频字符 145 | 146 | ```batch 147 | @echo off 148 | Setlocal Enabledelayedexpansion 149 | set "str=_40534656" 150 | for /f "delims=" %%i in ('dir /b *.*') do ( 151 | set "var=%%i" & ren "%%i" "!var:%str%=!") 152 | ``` 153 | 154 | ## 删除usm音频字符 155 | 156 | ```batch 157 | @echo off 158 | Setlocal Enabledelayedexpansion 159 | set "str=_40534641" 160 | for /f "delims=" %%i in ('dir /b *.*') do ( 161 | set "var=%%i" & ren "%%i" "!var:%str%=!") 162 | ``` 163 | 164 | ## 删除wem字符 165 | 166 | ```batch 167 | @echo off 168 | Setlocal Enabledelayedexpansion 169 | set "str=.wem" 170 | for /f "delims=" %%i in ('dir /b *.*') do ( 171 | set "var=%%i" & ren "%%i" "!var:%str%=!") 172 | ``` 173 | 174 | ## 删除括号 175 | 176 | ```batch 177 | @Echo Off&SetLocal ENABLEDELAYEDEXPANSION 178 | 179 | FOR %%a in (*) do ( 180 | 181 | set "name=%%a" 182 | 183 | set "name=!name: (=!" 184 | 185 | set "name=!name:)=!" 186 | 187 | ren "%%a" "!name!" 188 | 189 | ) 190 | 191 | exit 192 | ``` 193 | 194 | ## 替换文字 195 | 196 | ```batch 197 | @echo off 198 | set /p str1= 请输入要替换的文件(文件夹)名字符串(可替换空格): 199 | set /p str2= 请输入替换后的文件(文件夹)名字符串(若删除直接回车): 200 | echo. 201 | echo 正在操作中,请稍候…… 202 | for /f "delims=" %%a in ('dir /s /b ^|sort /+65535') do ( 203 | if "%%~nxa" neq "%~nx0" ( 204 | set "file=%%a" 205 | set "name=%%~na" 206 | set "extension=%%~xa" 207 | call set "name=%%name:%str1%=%str2%%%" 208 | setlocal enabledelayedexpansion 209 | ren "!file!" "!name!!extension!" 2>nul 210 | endlocal 211 | ) 212 | ) 213 | exit 214 | ``` 215 | 216 | ## 转换高质量视频 217 | 218 | ```batch 219 | for %%i in ("*.mkv") do ffmpeg -i %%i -c:v libx265 -r 60 -crf 16 -preset fast -vf scale=2048:1080 -c:a aac -b:a 1536k "%%~ni.mp4 220 | pause 221 | ``` 222 | --------------------------------------------------------------------------------