A9VG电玩部落论坛

 找回密码
 注册
搜索
查看: 13698|回复: 24

[破解] 把Ngc DIY到底_6_对ngc和ar的深入研究v0.5完成

[复制链接]
该用户已被禁言

精华
3
帖子
88
威望
4 点
积分
174 点
种子
5 点
注册时间
2005-8-23
最后登录
2019-12-9
 楼主| 发表于 2005-9-26 23:59  ·  上海 | 显示全部楼层 |阅读模式
NGC DIY系列
文章名称作者内容简介
把Ngc DIY到底_1_自制Ngc SD卡读卡器hi_bbq介绍了ngc的sd读卡器的制作方法
把Ngc DIY到底_2_软IC的方法hi_bbq介绍了不***就可以打d版的方法
把Ngc DIY到底_3_光头超频hi_bbq介绍如何对ngc光头进行超频并且改善读盘
把Ngc DIY到底_4_各IC芯片关系和ar问题hi_bbq介绍了市面上的***芯片的关系和一些ngc金手指的问题
把Ngc DIY到底_5_mod chip金手指hi_bbq介绍了功能强大的软***金手指
把Ngc DIY到底_6_对ngc和ar的深入研究v0.5完成hi_bbq介绍了ngc的一些底层技术细节和如何自己制作ngc的金手指





把Ngc DIY到底_6_对ngc和ar的深入研究v0.5完成

经过一段时间的对ngc的研究,对ngc的底层各个方面有了一些了解,所以发这张帖子,供大家一起研究。个人认为这张帖子

是到目前为止我发的ngc diy系列中技术含量最高的一张。本贴描述了ngc的金手指制作过程,ngc的开发环境,硬件构造等

方面。各位看完本贴后应该可以制作出简单的属于自己的ngc金手指,这也是本贴的宗旨:)

大家可以用ctrl+f输入章节号直接跳到想要看的章节

文章中的软件已经给出链接的可以直接下载,没有给出的可以到http://free.***.com/?cubenet的ngc目录里下载post6.rar,软件都包含在里面了。

1.0 viper码和action replay码
2.0 action replay金手指码语法分析
  2.1 (m) Must be on, Enable codes
  2.2 基本写内存码
  2.3 条件操作码
3.0 特别的(m)代码TLB (Trans Lookaside Buffer)代码
  3.1 ngc内存地址
  3.2 TLB (Trans Lookaside Buffer)码
4.0 ngc金手指工具gcnrd的使用
  4.1 GCNrd的使用配置
  4.2 GCNrd的简单使用
  4.3 GCNrd的高级使用
  4.4 红侠乔伊1金手指
5.0 ngc的开发环境
  5.1 开发环境简介
  5.2 ngc开发环境配置
6.0 ngc硬件部分说明
  6.1 ngc的记录卡
  6.2 IPL (Initial Program Loader)
  6.3 ngc的开发机
7.0 Pal转Ntsc,逐行显示问题,qoob热启动的说明
  7.1 Pal转Ntsc
  7.2 逐行显示问题
  7.3 qoob热启动的说明
8.0 总结




1.0 viper码和action replay码

viper码是action replay(ar)码的明码形式,ar码是在viper码的加密形式。当然ar才是金手指的本源。
它们之间的区别就在于viper码是把ar的明码去掉第一行后所省的密码。
以下是美版和日版生化危机的官方金手指取自www.codejunkies.com

Resident Evil
  ar码
  (m)

WCZG-EGPA-7QM7R  //校验码
H30N-BC12-77CZ7

Infinite Health

VFMQ-R5VH-UDC1P  //校验码
9Q0P-BVGZ-XUY8Q


Biohazard
  ar码
  (m)

KRN4-R2C3-UPCP4  //校验码
DXCU-RNV0-FYPZK

Infinite Health

PZRC-VDKE-UKY7F  //校验码
WFT8-128W-MX8CA


Resident Evil
  viper码
  (m)

004E0201 88000000  //校验码
C411E410 00000800

Infinite Health

004E0444 08000000  //校验码
021F11BE 00000578


Biohazard
  viper码
  (m)

032E2178 A8000000  //校验码
C41785A4 0000FF01

Infinite Health

032E2179 28000000  //校验码
021F177E 00000578

以上的金手指是用金手指转换器转换得来的,如果你使用的是viper***的金手指那么你只要把每段密码的第一行去掉就可

以直接使用了。但是如果你使用的是ar,而找到的金手指是viper的,那么你就必须补足这一段校验码。当然你可以使用金

手指转换器很简单的加上这一行,但是为了说明后面的问题,我们先来说明一下校验码的结构。搞清楚校验码的结构你就可

以解决ar经常报的一个错误,就是这个金手指已经被使用。

我们以Resident Evil的viper码为例
  (m)

004E0201 88000000  //校验码
C411E410 00000800

Infinite Health

004E0444 08000000  //校验码
021F11BE 00000578

在这里我们先分析一下他们的校验码部分
校验码的基本格式是

abbbcccc ddeeeeee
abbb: GAME ID 游戏不同而不同 bbb的范围是000~7FF
cccc: CODE ID 同样的ID不能重复使用
ddeeeeee:Region和Master判断

ddeeeeee就是校验码的右面8位,具有固定的格式,格式如下:

88000000:US Master 美版游戏(m)码,第一行的右八码一定是这个
98000000:UK Master 欧版游戏(m)码,第一行的右八码一定是这个
A8000000:JP Master 日版游戏(m)码,第一行的右八码一定是这个
08000000:US Normal 美版游戏普通码,第一行的右八码一定是这个
18000000:UK Normal 欧版游戏普通码,第一行的右八码一定是这个
28000000:JP Normal 日版游戏普通码,第一行的右八码一定是这个
大家用这张表再对应上面我给出的几组viper码,就会发现美版和日版的不同




由上面可知如果ar报错,很可能是因为你的GAME ID游戏编号和已有的编号冲突,只需要把编号调整为没有使用过的并再次

生成ar码就能解决问题。我在这里提供一部分已使用的GAME ID。在区域菜单里你会发现一个区域是null。现在我结合上次

发的软***金手指gcars一贴里没解决的问题来说明这个选项。对应关系如下表。

GAME ID 游戏区域对应表
            

接下来我们来解决网上找到的密码因为冲突而不能使用的状况
1. 把找到的viper码复制粘贴到输入里
2. 对应上面的右八位校验码表,分析找到的viper码是否包含校验码
3. 如果包含把所有的校验码都去掉,勾选自动识别,在游戏编号内填入一个没有使用过的游戏编号,选择相应的游戏区域
4. 点击AR码,得到新的ar码
5. 在ngc里输入得到的ar码,如果仍然提示冲突,则使用新的游戏编号并重复3,4两个步骤

区域里大家可以选择null这个区域,我用到现在好像可以通用.



去掉校验码,填入新的GAME ID生成新的可用的ar金手指


到这里大家已经初步了解了ar的转换,已经满足了通常的使用.




2.0 action replay金手指码语法分析

我们要分析ar的语法但本质是用viper码即ar的明码来分析语法.

2.1 (m) Must be on, Enable codes
就是我们俗称的m码,其作用是引导ar进入游戏端口,控制整个金手指的数目,类型,因此是最为重要的
通常为格式为
C4aaaaaa bbxxyyzz
aaaaaa:游戏的断点地址,hook值,如何取这个址后文会说到
bb:加密点,这两个标志位的取值会影响ar的加密,可以作为自己的数字签名位
xx:一般取00-03四个数中的一个,他们会影响m code的功能指向,推荐00
yy:允许一次执行多少金手指码,推荐ff,255条
zz:00,在游戏运行前执行一次金手指程序,01-0f在游戏运行时始终执行金手指,推荐:01

2.2 基本写内存码

2.2.1
8位直接写内存码
00aaaaaa 000000yy
aaaaaa:目标内存地址,如何寻找后文会提到
yy:2位操作数,就是你想填的16进制数值

2.2.2
16位直接写内存码
02aaaaaa 0000yyyy
aaaaaa:目标内存地址
yy:4位操作数

2.2.3
32位直接写内存码
04aaaaaa yyyyyyyy
aaaaaa:目标内存地址
yy:8位操作数


2.3 条件操作码

此类码与前两类不同,是多行码,就是只有当第一行条件成立时才会运行后面一行或几行

2.3.1
当条件成立就运行下一行,如果不成立就跳过
08aaaaaa yyyyyyyy
aaaaaa:目标内存地址,如何寻找后文将提到
yyyyyyyy:期望条件数值,例如:时间值,生命值,手柄按键响应,如何寻找后文将提到

2.3.2
当条件成立就运行下两行,如果不成立就跳过
48aaaaaa yyyyyyyy
aaaaaa:目标内存地址
yyyyyyyy:期望条件数值

2.3.3
当条件成立就运行下所剩的行,如果不成立就不运行
88aaaaaa yyyyyyyy
aaaaaa:目标内存地址
yyyyyyyy:期望条件数值

2.3.4
当条件不成立就关闭所有金手指
c8aaaaaa yyyyyyyy
aaaaaa:目标内存地址
yyyyyyyy:期望条件数值

以上几种语句是比较常用的语句,ar还有很多语句,我在post6.rar里提供给大家一个cthelper.exe程序,里面有更多的ar命令

3.0 特别的(m)代码TLB (Trans Lookaside Buffer)代码

有很多游戏,大家会发现他们的(m)码有很多行,这是为什么,下文对他们进行一下分析

3.1 ngc内存地址

ngc的内存逻辑地址是0x80000000 - 0x817FFFFF 称为cached地址,就是我们ar主要操作的地址,程序运行地址,

0xC0000000 - 0xC17FFFFF 成为uncached地址,是作为寄存器和一些硬件的映射地址使用的,通常我们不接触,但后文会提

到,并有应用。在前面的第2节里我们看到aaaaaa,这个地址通常是将80取掉后取的后6位。例如:我们找到断点是80317246

,我们只要填入317246这后6位就可以了。

3.2 TLB (Trans Lookaside Buffer)码

然而,并不是所有游戏都是这样的,有的游戏使用了虚拟内存技术,例如:
Eternal Darkness 无尽的黑暗
Metal Gear Solid: The Twin S***s 合金装备:双蛇
Resident Evil 4 生化危机4
Star Wars: Rebel Strike
这些游戏的操作内存可能是0x70000000或0x40000000区段内,这样ar就无法直接实现操作,必须对金手指进行处理。在以前

的帖子里我曾经谈过,ar是一个可以执行asm的环境。现在我们就可以利用这点,在这里我们先给出这种代码的一个范例:
04002F10 3C608000
04002F14 80832F40
04002F18 28040000
04002F1C 41820014
04002F20 28049424
04002F24 41820014
04002F28 80A32F44
04002F2C 90A40000
04002F30 38630008
04002F34 4BFFFFE0
04002F38 4E800020
04002FF8 00009424
4Cxxxxxx 4E800020
00002F10 0000E800
04xxxxxx yyyyyyyy

同过这段代码我们就可以让ar操作虚拟地址了,这段代码通常是加载在正常的(m)后面,在这里我们不用深究到底应该如何

操作,因为ar还有其他方法来简化这种操作,就是同过带内存指针的操作代码来实现。
在这里给出这段代码是因为它的特殊意义在于执行了ngc的asm代码,其asm代码为:

lis r3,0x8000

loop:
lwz r4,0x2F40(r3)
cmplwi r4,0
beq next
cmplwi r4,0x9424
beq end
lwz r5,0x2F44(r3)
stw r5,0x0000(r4)

next:
addi r3,r3,8
b loop

end:
blr
这对ar来说是极为重要的,而且也是我们可以利用的。对说明很多***方面的功能有特殊意义。


4.0 ngc金手指工具GCNrd的使用

GCNrd是由Parasyte开发的ngc调试工具,它可以对ngc的程序进行调试,截图,对内存地址的搜索,对action replay的支持

。可以说功能是相当的强大。下面注意讲解GCNrd的功能。GCNrd的普通版和破解版已经放在post6.rar里了。

4.1 GCNrd的使用配置

使用GCNrd需要有BBA,因为GCNrd的调试都是基于网络的。PSO和qoob或者viper都是选配的。
GCNrd支持PSO,记录卡,sd读卡器,gcos,qoob等方式调用。另外,GCNrd已经把PSOload集成在GUI当中了,大家不用启动

专用的loader,只要把PSOloader.exe复制到GCNrd的目录里,双击gui,就会提示自动载入dol文件的。

在这里,local ip是指ngc的本机地址,大家要把它设为和gcnrd.cfg中的
[GCNrd]
#GameCube's IP address
remote =
一样。
remote ip是指pc的ip地址,大家只要按照pc的ip地址填好就可以了
在连接速度里大家选autonegusate,默认状态是10m,速度太慢了
然后拔出所有记录卡,选择save and exit
注意: 一定要拔出所有记录卡,GCNrd有个bug,在记录时可能会删除记录卡中的所有记录。我就是受害者之一,所以请在

save前拔出所有记录卡。

然后可以看见4个选项

如果你的ngc装了qoob或者viper你可以把d版放入ngc,用破解版GCNrd进行调试。否则就只能调试正版游戏了,包括用gcos

引导也是不能调试d版的。

4.2 GCNrd的简单使用

在GCNrd的screen capture标签里你可以对正在进行的游戏进行截图,这是一个很实用的功能。

在FST标签里可以查看整个游戏盘的文件结构,和一些其他信息。

用GCNrd察看红侠乔伊的文件结构



AR Manager是一个很实用的功能,在这里你可把ar的金手指直接上传到ngc里,免去了手写之苦。操作方法如下:
先把正常启动GCNrd,然后在launch disc选项时放入ar盘,运行,
把你要录入的游戏名填入其中
把你所要录入的金手指码粘贴进并单击鼠标右键,选择把第一行的名字自动填入选项,逐一按upload和手柄a键确认输入。
同样你也可以把想要的金手指下载下来,进入ar的金手指密码编辑项目,然后点击GCNrd里的download,就可以把金手指码

下载到GCNrd里了。



用GCNrd上传ar金手指


在金手指编辑画面时用GCNrd上传


在金手指编辑画面时用GCNrd下载


用GCNrd下载ar金手指




4.3 GCNrd的高级使用

在这一节里我将教大家用前面所学到的ar金手指的知识结合GCNrd来写出自己的ngc金手指,我们以红侠乔伊1日版为例,制

作两种金手指,一种是无条件金手指,另一种是有条件金手指。

4.3.1 无条件金手指制作

我们首先运行GCNrd的ngc端和pc端,在launch disc选项时放入红侠乔伊1日版,然后开始游戏,这时ngc应该和pc端连接起

来了,你可以在GCNrd的gui里可以看到hook框,在这里面就是我们前一章所说的端点值,因此我们马上可以跟据m码的格式

得到红侠乔伊1的m码

m码格式
C4aaaaaa bbxxyyzz
aaaaaa:游戏的断点地址,hook值,如何取这个址后文会说到
bb:加密点,这两个标志位的取值会影响ar的加密,可以作为自己的数字签名位
xx:一般取00-03四个数中的一个,他们会影响m code的功能指向,推荐00
yy:允许一次执行多少金手指码,推荐ff,255条
zz:00,在游戏运行前执行一次金手指程序,01-0f在游戏运行时始终执行金手指,推荐:01

红侠乔伊1
m码
C41CF520 0000FF00
1CF520 就是把hook值去掉前两位得到的,0000FF00是根据m码的格式表得来的

然后我们来找joe的生命数,其方法和修改电脑游戏很相似,选中specifec value,在数值框里填入joe的生命数02,在data

size中选8位,
8位数是00
16位数是0000
32位数是00000000
请注意,这里specifec value中填入的数值是16进制值,例如:99条命就要填63,可以通过点击covert dec to hex来转换
经过几次数值变化的搜索后我们可以找到joe的生命数地址是8026DA93,然后我们来测试一下我们找到的地址是否正确。把

鼠标点中我们找到的地址,点右键,选poke,在下方的poke区就会出现地址,在地址后面填入想改的生命数63,点击poke。

当joe再次死去后,生命变为98或99就说明我们找对了地址,然后就跟据上一章的写内存格式写出改生命数的ar码,因为63

只占两位,所以我们选择8位操作语句

8位直接写内存码
00aaaaaa 000000yy
aaaaaa:目标内存地址,如何寻找后文会提到
yy:2位操作数,就是你想填的16进制数值



红侠乔伊1
生命99
0026DA93 00000063
26DA93 就是我们找到的生命地址去掉前两位后剩下的

至此,我们已经完成了红侠乔伊1的99生命的金手指了,我们整理一下
(m)码
C41CF520 0000FF00

life99
0026DA93 00000063

把它放入第1章里说的金手指转换器里,选好区域和game id点ar码,你自己的ar金手指就诞生了,如果是viper和gcars用户

,根本不需要转换就可以直接使用了。

GCNrd主界面


查找joe的生命值,hook里就是m码的后六位地制值






只剩下1个地址,并且用poke测试



测试成功98条生命





4.3.2 有条件金手指制作

所谓有条件金手指就是指通过某些特别的条件来触发金手指,例如,按键来停止时间,当生命小于30的时候自动补满等。
在这里我们制作一个按start键后joe的生命才变为99的金手指
上面我们已经完成了两个核心金手指,接下来我们想办法找到控制手柄的条件码

方法如下
首先按住手柄上的某个键或某几个键,跟举这几个键的16进制操作数来找到相对应的地址,在这里我提供一个计算手柄16进

制操作数的工具,点选上面的按键就可以算出对应的操作数。
首先我们按住X+Y键,在搜索栏中填入对应操作数0c00,搜索,找到一堆地址。不断搜索,直到找到只剩下一个地址,这个

地址就是我们要找的按键地址了,802C4CD4

于是我们可以根据上一章的知识写出条件码
当条件成立就运行下一行,如果不成立就跳过
08aaaaaa yyyyyyyy
aaaaaa:目标内存地址,如何寻找后文将提到
yyyyyyyy:期望条件数值

红侠乔伊1
start99
082C4CD4 00000010
因为只需要运行下一行程序,所以我们选择08码,2C4CD4是手柄内存地址去掉前两位得到的,00000010是手柄的按键值
这个手柄的按键值是要调试的,方法如下
点击memeory view标签,在内存地址里填入我们找到的手柄地址按回车,在auto update里打钩。然后按手柄上不同的按键

,观察802C4CD4的变化,按键时出现的就是我们要的操作数了。在这里按start键时802C4CD4对应为10
082C4CD4 00000010表示当802C4CD4的操作数为10时执行下一行代码。把上一节找到的99条命的代码放在条件代码后面就可

以了
整理一下我们的到的代码

(m)码
C41CF520 0000FF00

start99
082C4CD4 00000010
0026DA93 00000063

按照上一节的方法转化代码,我们测试一下。这次joe一出来并不是99条命,死了也没有99条命,而当你按过start键后,

joe再死,就是98条命了,这就说明我们的代码成功了。举一反三,你可以按照这个思路做出其他的条件金手指。

寻找手柄按键响应地址,0c00是按键X+Y


寻找数次后只剩下唯一地址



用memory view功能察看内存对应的手柄按键变化






察看生命值的内存变化


按下start



金手指被激活



4.4 红侠乔伊1金手指

红侠乔伊金手指 AR码

(m)
2Q8V-075A-PCY56
0UTW-0U21-KY1TN

begin99
1XUE-MXJ6-7P66G
XQZV-PHKE-68KM0

start99
4PBU-870V-UHPET
3X1K-P8KE-A9P2A
XQZV-PHKE-68KM0




红侠乔伊金手指 viper码

(m)
C41CF520 0000FF00

begin99
0026DA93 00000063

start99
082c4cd4 00001000
0026DA93 00000063




5.0 ngc的开发环境

5.1 开发环境简介
目前网上流行的ngc开发环境有两种。
一种是基于官方硬件的开发环境,大家可以在http://www.warioworld.com/找到,再上面还可以找到gba和nds的官方开发工

具。当然前提是你是任天堂授权的开发者。或者使用mirc或者emule下载。虽然官方的开发工具功能很强大,并且又很完备

的说明手册,甚至还有ngc的开发者journal,里面介绍了游戏制作的基本问题和部分游戏的算法,但是官方的开发工具有时

需要特别的硬件支持,否则不能使用,而且如果没有得到任天堂的授权是违法行为,老任可以起诉你。

另一种是Torlus的devkitcube或devkitPPC基于gcc的编译环境加上peter的libogc的函数库。这种开发环境对用熟了IDE的人

来说简直就是恶梦,基本要靠console命令来完成编译工作。但是毕竟这个环境是合法的,所以大家现在看到的homebrew都

是用这个环境开发的。

这里给大家贴几张官方的开发工具的图片

5.2 ngc开发环境配置

5.2.1 所需要的基本程序
devkitcube可以在http://www.gcdev.com/download/devkitcube-r1.zip下载,有linux和win32两个版本,最新的win32版是r1
libogc可以在http://www.dextrose.com/files/gc/source/libogc-2003-06-22.zip下载,最新的是2003-06-22
同时我们下载http://www.dextrose.com/files/gc/source/gc/pong.zip这个范例
把三个下载下来的两个包解压到c:\gc\ 结构如下:
C:\GC
├─devkitcube
│  ├─bin
│  ├─lib
│  │  └─gcc-lib
│  │    └─powerpc-eabi-elf
│  │       └─3.3
│  │          ├─include
│  │          └─install-tools
│  │            └─include
│  └─powerpc-eabi-elf
│    ├─bin
│    ├─include
│    │  ├─machine
│    │  └─sys
│    └─lib
│       └─ldscripts
├─libogc-2003-06-22
│  ├─docu
│  │  └─html
│  └─lib
└─pong
   └─gfx

5.2.2 环境变量的设置

1. 鼠标右键点击我的电脑,属性,高级,环境变量
2. 系统变量,新建,变量名称: DEVKITCUBE 变量值: c:\gc\devkitcube
3. 系统变量,找到Path变量,编辑,在最后添加%DEVKITCUBE%\bin;%PATH%
4. 重启计算机









5.2.3 编译第一个ngc程序

按照http://www.gcdev.com/download/GCQuickstart.txt文档里的说明修改main.c文件。在这里说明一下,如果你是美或日版的机器就不能按照quick文档来修改79行,要

把79行改成VIDEO_Init (VIDEO_640X480_NTSC_YUV16);运行make.bat,就应该可以正常编译了。然后qoob用户可以刻盘运

行这个dol文件,BBA用户可以上传此dol运行。

至此,简单的ngc开发环境就建立好了,我们在这里不深究ngc程序的编写。

5.2.4 反编译第一个ngc程序

我们刚才编译了我们第一个ngc程序,现在我们来反编译它,首先下载DolTool.exe,然后执行DolTool -b pong.dol把dol文

件转换为bin文件
然后修改da.bat里的文件名,把abc.bin改为你要反编译的文件名,把abc.txt改为你要输出结果的文件名,这里我们把

abc.bin改为pong.bin,把abc.txt改为pong.txt,运行da.bat,在目录里你可以看到名为pong.txt的文件这个就是反编译后

的文件。这里我们观察一下它,这里节选6行

A                B                C
80003100:     3c 60 80 00      lis     r3,-32768
80003104:     80 23 00 34      lwz     r1,52(r3)
80003108:     7c 78 e2 a6      mfspr     r3,920
8000310c:     64 63 a0 00      oris     r3,r3,40960
80003110:     7c 78 e3 a6      mtspr     920,r3
80003114:     7c 70 fa a6      mfdbsr     r3

观察反汇编代码的A区域,会发现这是ngc程序的运行地址,而B区域则是地址中的操作数,C区域是与操作数相对应汇编代码

,这样就说明我们可以用ar的写地址语句把B区域的操作数直接写入内存地址,让ar来运行,达到与C区域的汇编语句相同的

功能。
像软***的sdload就是用了这种方法,直接对ngc进行汇编操作来引导sd读卡器的。

6.0 ngc硬件部分说明

这一节里我们只讨论ngc硬件的几个方面。

6.1 ngc的记录卡

前两天看了sigmasun的关于记录卡的测评,这里对文章里的具体硬件进行一下补充,大家就可以知道原装记录卡和组装记录

卡之间的具体不同了。

记录卡容量和对应芯片表


由上表可见任天堂和Datel两家大公司都是用的是MX Flash芯片,而第三方用的则是CMOS芯片,暴利可见。

6.2 IPL (Initial Program Loader)

IPL (Initial Program Loader),就是ngc的启动芯片,又可以叫bootrom,我在以前的帖子里曾经说过它的版本问题。其实

欧版和美版的IPL是不同的,差别在于其大小不同,而这就导致了ngc的IPL的解密,产生了modchip的可能。国外的黑客就是

通过对两个不同的bios进行异或来解密ngc的IPL的。

6.3 ngc的开发机

ngc零售系列共有4个硬件版本,分别是:
HW1: ngc的原型机,从未零售
HW2: 最早发售的ngc,拥有所有的硬件接口,包括串口
HW2 2nd: 第二批的ngc,取消了Serial Port 2 串口2,其他接口齐全,现在看来应该叫半阉割机,呵呵
HW2 3rd: 最后一批ngc,俗称阉割机,同样没有Serial Port 2 串口2,还取消了分量的数字接口,正宗阉割机

ngc的开发机:

GDEV 和 DDH hardware development kit units这是任天堂官方的开发机,他们包括了USB和SCSI硬盘的支持,硬件规范基

于HW2,但是芯片速度比HW2要慢,内存比HW2要多,以供debug使用

TDEV 和 ProDG 是SNSystems开发的由任天堂授权的开发机,同样也支持PC到USB,有自己的特有debug

以下是开发机的一些图片:

















7.0 Pal转Ntsc, 逐行显示问题, qoob热启动的说明

7.1 Pal转Ntsc

其实ngc的Ntsc和Pal的制式转换都是通过对ngc的显示寄存器进行操作来实现的,通俗的说就是在负责图像输出的寄存器里

填入不同的数值来改变制式。我在这里给出大家Ntsc,Pal60,Pal50的特征值,显示寄存器的内存影射地址是从0xcc002000开

始的。

ntsc:
      0x0F060001, 0x476901AD, 0x02EA5140, 0x00030018,
      0x00020019, 0x410C410C, 0x40ED40ED, 0x00435A4E,
      0x00000000, 0x00435A4E, 0x00000000, 0x00000000,
      0x110701AE, 0x10010001, 0x00010001, 0x00010001,
      0x00000000, 0x00000000, 0x28500100, 0x1AE771F0,
      0x0DB4A574, 0x00C1188E, 0xC4C0CBE2, 0xFCECDECF,
      0x13130F08, 0x00080C0F, 0x00FF0000, 0x00000000,
      0x02800000, 0x000000FF, 0x00FF00FF, 0x00FF00FF;
      
pal60:
      0x0F060001, 0x476901AD, 0x02EA5140, 0x00030018,
      0x00020019, 0x410C410C, 0x40ED40ED, 0x00435A4E,
      0x00000000, 0x00435A4E, 0x00000000, 0x00050176,
      0x110701AE, 0x10010001, 0x00010001, 0x00010001,
      0x00000000, 0x00000000, 0x28500100, 0x1AE771F0,
      0x0DB4A574, 0x00C1188E, 0xC4C0CBE2, 0xFCECDECF,
      0x13130F08, 0x00080C0F, 0x00FF0000, 0x00000000,
      0x02800000, 0x000000FF, 0x00FF00FF, 0x00FF00FF;
      
pal50:
      0x11F50101, 0x4B6A01B0, 0x02F85640, 0x00010023,
      0x00000024, 0x4D2B4D6D, 0x4D8A4D4C, 0x00435A4E,
      0x00000000, 0x00435A4E, 0x00000000, 0x013C0144,
      0x113901B1, 0x10010001, 0x00010001, 0x00010001,
      0x00000000, 0x00000000, 0x28500100, 0x1AE771F0,
      0x0DB4A574, 0x00C1188E, 0xC4C0CBE2, 0xFCECDECF,
      0x13130F08, 0x00080C0F, 0x00FF0000, 0x00000000,
      0x02800000, 0x000000FF, 0x00FF00FF, 0x00FF00FF;


其实qoob的ntsc和pal强制输出就是通过改变寄存器的数值来实现的。现在我们通过类似的方法来把忍者***变成默认为

ntsc输出。忍者***的默认输出是pal50,所以我们看到的引导画面是黑白闪烁的。方法很简单,我们通过直接修改

ninja.dol里的负责显示的特征字符串来达到目的。

首先使用ultraedit打开ninja.dol,然后选择搜索替换,在查找选项里填入pal50的特征值,在替换里填入相对应的ntsc的

特征值。例如:搜索11F50101,替换0F060001,一对一对的搜索替换,如果没有找到就跳过。当完成所有的32对特征值的搜

索替换后保存文件,运行修改过的ninja.dol,其默认的输出就是彩色的ntsc版了。以上的信息告诉我们,完全可以通过编

制一个ar的金手指或者直接修改游戏镜像的dol文件来改变游戏的制式。

7.2 逐行显示问题

在qoob里有一个把游戏牵制输出为逐行显示模式的功能,其实这个功能和qoob改变游戏制式的功能实现方法类似,也是通过

改变寄存器的值来做到的。我在这里给出它的寄存器内存影射地址和对应的值:

0xCC00206C:0x0001
最后的1表示打开,0表示关闭

7.3 qoob热启动的说明

在qoob中有一个很实用的功能就是按住手柄上的键重启ngc,其实这个功能是通过执行特别的汇编程序,对ngc的寄存器进行

操作来完成的,这里我给出这段汇编程序:

lis r3,0
      lis r9,0xCC00
      sth r3, 0x2000(r9)
      li r4, 3
      stw r4, 0x3024(r9)
      stw r3, 0x3024(r9)
      nop
loop__:
      b loop__

使用这段程序就可以达到重启ngc的功能。

还有一种汇编程序据说也可以重启,是由#gcdev上的给出的

lis 4 , 0xcc00
ori 4 , 4 , 0x3024
lis 3 , 0x0000
ori 3 , 3, 0x0000
stw 3 , 0(4)

为什么在这里我要给出这些汇编程序,因为这些汇编程序可以通过编译,反编译,然后再转为ar码来执行,这样就说明ar的

功能是很强壮的,是可以执行简单程序的。

8.0 总结

帖子写了这么长时间终于完成了,实在是累。感谢大家对我的支持。其实ngc对我来说已经不是单纯的游戏机了,我更希望很完整地去了解它的每个部分。DIY的乐趣也就在其中了。国外有很多的高手讨论主机的DIY,但是国内就比较少了,可能是受到条件的限制,但是只要大家踊跃地研究,一定还是会有我们自己的一片天空的,而ngc还有很多的东西可以讨论和研究。在这里感谢a9vg的良好的讨论气氛,吉克拉的部分截图帮助。由于暂时受到条件限制我不能放出更多的原创金手指,但是我一定会在将来放出更多我们自己做的ngc金手指。下一帖准备讨论ngc上的模拟器应用,希望大家到时候捧场。

大家有什么问题可以直接跟贴,我会解答的。LoL.

精华
39
帖子
20880
威望
42 点
积分
22629 点
种子
0 点
注册时间
2004-5-5
最后登录
2010-7-23
发表于 2005-9-27 10:51  ·  北京 | 显示全部楼层
又是一篇研究系强文,期待楼主早日完成   

尽管俺们一看就想起了小时侯看过的一部动画片叫《天书奇谭》……     
该用户已被禁言

精华
1
帖子
510
威望
2 点
积分
682 点
种子
0 点
注册时间
2005-3-21
最后登录
2022-8-19
发表于 2005-9-27 13:37  ·  广东 | 显示全部楼层
看不懂@_@
看样子楼主得降低点难度系数,或者补充点细节:)

终结者

超人^^

精华
2
帖子
8950
威望
3 点
积分
9200 点
种子
52 点
注册时间
2003-6-7
最后登录
2019-6-6
发表于 2005-9-27 16:33  ·  福建 | 显示全部楼层
越是看不懂越会让人感觉楼主是高人.
gxb

征服者

Retro Gamer

精华
7
帖子
4313
威望
13 点
积分
6423 点
种子
5 点
注册时间
2005-4-7
最后登录
2018-2-5
发表于 2005-10-1 23:30  ·  浙江 | 显示全部楼层
不错的帖子,有深度
可惜无法搞到开发机啊
swq

精华
0
帖子
227
威望
0 点
积分
290 点
种子
0 点
注册时间
2004-7-29
最后登录
2010-6-10
发表于 2005-10-2 07:43  ·  上海 | 显示全部楼层
        哇赛,看花眼了,搂住是神啊,拜一下

精华
1
帖子
763
威望
1 点
积分
890 点
种子
71 点
注册时间
2005-5-20
最后登录
2024-5-2
发表于 2005-10-2 21:12  ·  上海 | 显示全部楼层
很棒啊,看来C语言要好好学了,以后游戏不玩玩程序,保佑我有学习势头吧
该用户已被禁言

精华
3
帖子
88
威望
4 点
积分
174 点
种子
5 点
注册时间
2005-8-23
最后登录
2019-12-9
 楼主| 发表于 2005-10-3 22:56  ·  上海 | 显示全部楼层
文章和图片的基本结构已经完成了,图片在这两天会注释的,文件下载在这两天也会给出。大家有问题可以跟贴,或者pm我,我会回答的。写这张贴真是累啊,太长了。

精华
0
帖子
1849
威望
0 点
积分
1925 点
种子
0 点
注册时间
2005-5-7
最后登录
2013-7-28
发表于 2005-10-4 09:47  ·  英国 | 显示全部楼层
老兄你可以用到破解版的GCNrd了?我也要,给个下载地址吧!

至于AR的记忆卡我有疑问,最近拆开了几块1.14b配套的4M记忆卡,全部是黑胶封装芯片,不太像Flashrom,感觉还是Cmos。
该用户已被禁言

精华
3
帖子
88
威望
4 点
积分
174 点
种子
5 点
注册时间
2005-8-23
最后登录
2019-12-9
 楼主| 发表于 2005-10-4 20:51  ·  上海 | 显示全部楼层
破解版的也必须有qoob或者viper支持才能用的。我只是给出官方列表,具体封装可能不一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|A9VG电玩部落 川公网安备 51019002005286号

GMT+8, 2024-5-2 21:28 , Processed in 0.223223 second(s), 17 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部