tillnight 发表于 2009-11-15 00:40

没人吐槽这个?继立志一统汉化界后又立志横扫烧录卡业

http://forum.tgbus.com/viewthread.php?tid=672589
揭秘死机的真相 :《勇者斗死机——中断的守护者》背后的故事
本帖最后由 Joyce 于 2009-11-12 20:59 编辑

看到很多人死机我心里不好受,看到大家死得那么惨还不知道原因我更难受,所以花时间码了不少字,给大家科普一下。

内容概要
1. 死机原因:DQ9太BT,榨干了NDS的机能,导致日文字库放在一个特殊的地方,
                     那个地方只有32KB空间(DS本身机能)。日文版用了15KB但是中文字库有200KB,
                     因此汉化版只能采用相当特殊的方法加载中文字库,导致需要频繁地读TF卡。
                     而其他游戏都不是这样,所以简单地说就是:DQ9 做的太NB,L5 的程序员太BT!


2.死机责任:ACG汉化组自然有,但更重要的是烧录卡内核程序千差万别,而且大部分本身就不完善,
                  比如该检测的地方不检测,造成冲突死机。由于内核操作涉及烧录卡厂商的商业机密,
                  不可能直接拿代码,因此要想解决死机问题只能由烧录卡厂商和汉化组共同合作,
                  把所有会导致冲突的地方回避掉。离开了烧录卡厂商汉化组无力完成。
                  但是某些商家只向钱看齐,对内核程序不负责任,对合作态度极不友善,
                  或是直接神隐,难觅其踪。在死机问题上,烧录卡厂商的只顾赚钱也难逃其咎!

目我前只能建议高频死机的同学去问问跟你们用一样烧录卡,却不怎么死机的同学的配置情况:例如TF卡,内核等。
另外建议DSONE以及DSONEI用户使用官方最新的内核,用TT内核的话容易死机。


公车还告诉我们已经有人臣服了,233MAX:http://forum.tgbus.com/viewthread.php?tid=676855
AceKard官方在2009.11.14下午给我发了邮件,说明了避免AK2/AK2i高频死机的方案,如下:
"AK2和AK2i使用最新的内核,长按A键启动游戏"

对一些死机频率特高的AK2i玩家是否有效我不清楚,因为没卡。不过就我的AK2的确不怎么死机。

附上官方的原话:“我们自己也在玩,大约都在14-20小时之间,死机次数在3-4次。 ”

有问题跟贴反馈,以上。

这里替AceKard官方解释下长按A进入游戏的原因
----------------------------------------------------------------------------------------------------------------------
Joyce:我那个补丁是检测0x2000204的地11位来判断段IO是否结束的,不知道你们的卡是否该这么检测?
AceKard官方:---------长按A启动后IO是否结束我们内部已做了判断。
Joyce:另外读TF卡的时候你们用到DMA没?
AceKard官方:----------长按A启动的模式下没有用到。

青いメガネ 发表于 2009-11-15 00:50

用模拟器吧

eva02eva02 发表于 2009-11-15 01:02

任何卡和任意内核都肯定会死机

月神侠 发表于 2009-11-15 01:10

继立志一桶汉化界后又立志横扫烧录卡业

月神侠 发表于 2009-11-15 01:17

本帖最后由 月神侠 于 2009-11-15 01:20 编辑

1.背景知识简介:
1.1. DQ9字库破解概述
      对于一般的NDS游戏,高频率使用的固定资源都会被预先载入内存(NDS内存大小为4M),以此来提高访问的速度,
例如我们常说的字库文件。不过DQ9就像制作人接受采访时说的那样:“DQ9将NDS机能发挥到了极致”,以至于都没有足够的内存空间载入字库文件,所以DQ9的字库被载入到ITCM(Instruction Tightly Coupled Memory)——被直接集成在CPU芯片中的高速缓存,大小为32KB。DQ9从ITCM中划出接近15KB用作存储字库,其余的用作执行一些高速运行的指令。
      现在问题出来了:汉化用的中文字库大小为200KB,而装载字库的ITCM才区区32KB!从硬件上肯定无法解决,总不能让大家把NDS拆了换一块ITCM吧?!万般无奈下,我想到一个非常无语的方法,我称其为“动态字库技术”。就是不预先将整个字库载入内存,而是需要哪个字再从ROM里面读取。
      有程序常识的人都知道,IO(读写文件操作)是很费时的,因为会涉及到大量复杂的底层操作。为了避免频繁的IO,一般都会先建立一个缓存,将数据预读进缓存,这样访问时就直接读内存,大大提高速度。所以说这么做是“万般无奈、非常无语”。
1.2. 烧录卡IO概述
       烧录卡从SLOT-2需要软件烧录,发展到SLOT-1直接copy CLEANROM就可以玩无疑是一个巨大的进步。但并不想多数玩家想的那样,SLOT-1“真的支持CLEANROM RUN”。ROM原本的存贮介质是NDS卡带,而烧录卡用的是TF卡,NDS卡带和TF卡的IO(读/写文件)机制是截然不同的。
       在SLOT-2时代,烧录卡解决这个问题的方式就是用烧录软件对ROM里面的IO程序进行替换,将原来用于DS卡带的IO函数替换成TF卡的IO函数,这就是烧录过程的本质所在。SLOT-1到来之后技术出现了进步,采用了内存补丁技术:不直接在ROM上做文章,而是等ROM载入内存之后直接改内存里面的IO函数。这就不难理解为什么SLOT-1运行需要内核支持了,内核的一个很重要的作用就是给ROM打上内存补丁。
       至此可以做出一个结论:无论SLOT-1还是SLOT-2的烧录卡都有对IO进行处理,烧录卡有着自己特有的IO体系。


2.字库破解难点
主要有以下三点:
2.1. 如何hack游戏程序,使之能从ROM里面读取字库数据?
2.2. 既然烧录卡都有着自己独特的IO那读字库的时候如何去调用这些IO?
2.3. 字库IO是一个额外附加的过程,很有可能与正常读取ROM文件IO发生冲突,如何避免冲突?
第一个难点我花了两周的时间来处理,还算很顺利的解决了。

第二个难点足足问题花了我和j一个多月的时间。因为内核只能在NDS上运行,没法在PC上debug,很多东西我们只能靠现象去猜测,然后设计方案在NDS上实验,根据运行结果再猜测,再修正方案……不断往复上述过程直到得出正确的运行结果。这个破解过程很累,很枯燥,很辛苦。刚开始都是无限黑屏,什么烧录卡都进不去游戏。折腾了半个月R4终于可以运行,真激动死我了;又折腾了三周终于让市面上的主流卡都可以运行了。

第三个难点就是导致汉化版DQ9随机死机的本质原因。NDS是单线程的,不存在操作系统的概念,一旦CPU发生冲突那必定死机。解决这个问题很难,因为涉及的烧录卡IO在底层的实现,这个只有厂商才知道了。如果有厂商的协助解决起来到是很方便的:我可以根据提供的资料做出适合该卡的IO调用方案,或者厂商根据我的IO调用特点修正内核。
    我联系了多个厂商,遗憾的是只有一家厂商友好地跟我们合作了,并且解决了问题。更可贵的是他们选择了自己更新内核,没有麻烦我出手。
反观某烧录卡的技术人员,竟然以烧录卡在国内销量少、卖利润低,市场主要在国外为理由拒绝协助解决问题!AK、M3、R4、EZ等厂家则像从人间蒸发了一样杳无音信。

      实际上这个问题很隐蔽,它不是一定会发生,只要你的烧录卡IO够快就没事。我用M3Real、AK2、dsonei+1G金士顿日产TF卡测试只要不开金手指就没死机过;AK2i Timely测试过;DSTT河马测试过;R4正版参加内测的玩家测试过。都没发现某些人说的那么厉害的死机现象,通关期间死机一两次倒是有,不过当时因为开了金手指,也就被当成老金的问题了。

另外有玩家质疑说,冲突并非导致死机的原因,理由是死机多发于场景切换。其实这正恰恰证明了冲突就是罪魁祸首。


上屏幕会一直显示地图和人物的名字。每次场景切换都要从ROM读取场景数据,而且场景数据都很大,花的时间也较长;同时也会读取地图和人物的名字的字库数据,所以这里容易引发IO冲突。当然这些都是表象而已,利用NO$GBA debug做断点跟踪,证实了我的猜测是对的。


3. 问题总结
    “明明是三个人的电影”——玩家、烧录卡商、汉化组,但是烧录卡商拿到钱之后就一直缺席;本来是一场精彩纷呈的三角关系,却成了毫无激情的二人行(比喻的有点那啥了= =)。
   死机问题自然是汉化导致的。一般游戏汉化只需简单的将文本和图片改成中文即可,出现汉化版死机肯定是有汉化BUG。但是DQ9采用“动态字库技术”带来某些卡高频死机烧录卡厂商也有责任:为什么每次IO之前不检测上次IO是否结束???为什么我联系你们除了一家之外都没音信???
   本来很简单很容易解决的事情,到了某些厂商那里就变得那么难了……
不少玩家问我能否解“汉化带来的死机BUG”,昨晚还有人“勒令ACG汉化组承诺限期解决死机问题”。面对这些我感到很无奈、很无力,商家这么不合作我也没辙呀;同时也感到玩家和汉化组都很悲哀,为何玩家出了钱却得不到像样的售后服务?难道国外市场赚钱就可以无视国内市场的售后服务了?为什么汉化组一分钱都没从烧录卡商那里得到却要帮他们擦屁股、背骂名?

stevenzero 发表于 2009-11-15 01:21

我有吐糟就输了的感觉

光希樱恋 发表于 2009-11-15 07:46

蛋定地等天幻版

我被抹布了 发表于 2009-11-15 09:14

2U和天幻有这种特殊字库的解决方案么?

ggfsaraba 发表于 2009-11-15 09:30

没人出来说 玩游戏学日语么?

StarphoeniX 发表于 2009-11-15 10:34

AK2I 回开始的村子买东西死过一次,目前6小时没啥大问题,不过一直不敢召第四个人,据称召了之后猛死

黑上シグマ 发表于 2009-11-15 10:43

我联系了多个厂商,遗憾的是只有一家厂商友好地跟我们合作了,并且解决了问题。更可贵的是他们选择了自己更新内核,没有麻烦我出手。
这句“没有麻烦我出手”讲得还真是牛X呀……

100082685 发表于 2009-11-15 10:50

本帖最后由 100082685 于 2009-11-15 10:51 编辑

学日语吧,DQ9我玩的都审美疲劳了还从来不死机

klaith 发表于 2009-11-15 10:55

破军星 发表于 2009-11-15 14:11

日语这东西,早学早受益

意大利面 发表于 2009-11-15 14:22

切,等美版不就得了,我很淡定

pkzero 发表于 2009-11-15 14:51

我们的版本字库拆开分着放,尽量减少容量,也许大概可能不会死机……吧……

上帝保佑真主阿拉阿弥陀佛阿门阿门……

fffish 发表于 2009-11-15 14:58

如果他家自己出烧录 确实会有吸引力 OEM 用软件 卖硬件的模式

xzhychris 发表于 2009-11-15 15:07

R4打到转职神殿这里,死了2回- -;r4有没新内核能降低点死机情况、

韩笑逢生 发表于 2009-11-16 11:03

笑而不语

北京阔少 发表于 2009-11-16 11:15

玩的那么累还玩个JB

无动于衷 发表于 2009-11-16 11:17

但是某些商家只向钱看齐

===============

夸自己呢吧

射命丸文文 发表于 2009-11-16 11:30

学日语吧

某日我在地铁上看到一宅男拿了一DS打DQ9,过了一会大概遇到生僻词了又从口袋里掏出第二台DS查乐引,这是多么强大的精神力!

无动于衷 发表于 2009-11-16 11:44

学日语吧

某日我在地铁上看到一宅男拿了一DS打DQ9,过了一会大概遇到生僻词了又从口袋里掏出第二台DS查乐引,这是多么强大的精神力!
射命丸文文 发表于 2009-11-16 11:30 http://bbs.saraba1st.com/images/common/back.gif

买第二个DS当词典用

这是多么强大的任臣

fun4ever 发表于 2009-11-16 12:33

我们的版本字库拆开分着放,尽量减少容量,也许大概可能不会死机……吧……

上帝保佑真主阿拉阿弥陀佛阿门阿门……
pkzero 发表于 2009-11-15 14:51 http://bbs.saraba1st.com/images/common/back.gif

期待

ryo_sakazaki 发表于 2009-11-16 12:49

玩个游戏还查字典,累不?
遇到不懂的字词语法直接跳过,安慰自己游戏玩的就是系统,剧情就是扯。
遇到不看字也不卡关的游戏反而要逐句抠语法,和别人说只玩系统不看剧情等于白玩。

英吉 发表于 2009-11-16 13:04

烧录卡厂商负责任的确是不多是真的

hoshino612 发表于 2009-11-16 13:35

问下模拟器会死机吗?模拟器不死我上模拟器搞了。

不断樱 发表于 2009-11-16 13:42

这样玩游戏太麻烦了~

或许有人觉得DIY很好玩,不过,对于我来说,挺麻烦的~

酒多是我爹 发表于 2009-11-16 13:46

问下模拟器会死机吗?模拟器不死我上模拟器搞了。
hoshino612 发表于 2009-11-16 13:35 http://bbs.saraba1st.com/images/common/back.gif

不死

hypnossz86 发表于 2009-11-16 13:50

页: [1]
查看完整版本: 没人吐槽这个?继立志一统汉化界后又立志横扫烧录卡业