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

继立志一统汉化界后巴屎又立志横扫烧录卡业

揭秘死机的真相 :《勇者斗死机——中断的守护者》背后的故事
http://forum.tgbus.com/viewthread.php?tid=672589

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


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

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


有兴趣了解技术细节的可继续往下看(小白慎入,会晕掉的!)
------------------------------------------------------------------------------------------------------------------------------
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汉化组承诺限期解决死机问题”。面对这些我感到很无奈、很无力,商家这么不合作我也没辙呀;同时也感到玩家和汉化组都很悲哀,为何玩家出了钱却得不到像样的售后服务?难道国外市场赚钱就可以无视国内市场的售后服务了?为什么汉化组一分钱都没从烧录卡商那里得到却要帮他们擦屁股、背骂名?



已经有烧录卡厂商臣服了:
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 13:09:51

我联系了多个厂商,遗憾的是只有一家厂商友好地跟我们合作了,并且解决了问题。更可贵的是他们选择了自己更新内核,没有麻烦我出手。



这句“没有麻烦我出手”牛B大了

axlsdsg 发表于 2009-11-15 13:18:51

本帖最后由 axlsdsg 于 2009-11-15 13:22 编辑

以前是其他汉化组发布汉化作品犯法,
现在其他卡商也跟着犯法了吗?
最后就是统一机子了......神游最上,日产欧产赶出国门

海战用巴比伦 发表于 2009-11-15 13:36:50

唉力挺巴士
沒巴士,唉这穷人玩不起游戏

qisiwole 发表于 2009-11-15 14:11:18

为什么汉化组一分钱都没从烧录卡商那里得到却要帮他们擦屁股、背骂名?

继续笑而不语

ygo 发表于 2009-11-15 16:23:30

玩Z版,一了百了

rockloman 发表于 2009-11-15 17:23:52

真搞 他们不是一直在和ACEKARD有联系 卖广告的么

hman 发表于 2009-11-15 17:24:16

哪啥...BUS是啥

lillet 发表于 2009-11-15 17:58:53

总而言之,这次是一个烧录卡厂商和汉化组一起协作才有可能更好地完成的项目。烧录卡厂商是否愿意协助汉化组取决于他们自己的意愿,汉化组也不能在此因为双方的技术因素使自己有可能遭受玩家的单向指责而强求烧录卡厂商,即便可能烧录卡真的某处不够完善。

另外,文中个别用词是有可能欠斟酌,这个倒也不必太过较真了。

其实我想问一下关于AK、AK+、AK RPG(不含之后推出的AK2、AK2i等)这三款是靠什么方式运行的?当初宣传时AK厂商就宣称和R4等内核补丁方式的卡工作方式完全不同,而且当时的确有不少特殊游戏R4等内核补丁方式的烧录卡需要更新内核来支持这些游戏,而上述三款几乎从来不需要(除了一个因为存档容量过大问题的大合奏DX)

5809771 发表于 2009-11-15 18:43:57

这些人只是在推卸责任而已,懒得去耗费时间找BUG..

成步堂龙二 发表于 2009-11-15 20:27:53

为什么汉化组一分钱都没从烧录卡商那里得到却要帮他们擦屁股、背骂名?
哦,不知道那之前宣称5位数的人是谁了……

砂之私语 发表于 2009-11-15 21:55:09

人家烧录卡跑原版ROM没问题,跑其他汉化没问题,单独跑你这个汉化有问题

然后结论居然是“我就汉化成这样了,想要不死机的话,你让烧录卡解决去!”,真是突破地心的下限
为什么烧录卡厂商一分钱都没从汉化组那里得到却要帮他们擦屁股、背骂名?

另,可能我眼花了,我记得原来在哪个汉化游戏的开头看见某网站的LOGO和烧录卡广告来着,谁来告诉我这不是真的

kallin 发表于 2009-11-16 10:38:13

我在想下面一堆回贴还要码字来去感谢bus的人有几个是真的?还是说真有这么多人那么小白?

cuicuicui 发表于 2009-11-16 12:06:00

一分钱没拿=。=

沉积岩 发表于 2009-11-16 13:21:23

我一分钱都没拿

月神侠 发表于 2009-11-17 00:10:06

下次汉化PSP游戏死机就要怪记忆棒厂家还是怪SONY?

sevenstar 发表于 2009-11-17 06:28:15

为了一个汉化组技术上的问题,所有烧录卡厂商要配合他们?
3个人的电影?某汉化组太把自己当人看了……
说到底还是那些成天哭着喊着求他们汉化的小白把他们惯坏了
让他们以为他们是什么人物,还三个人的电影……
某八屎太把自己当东西了,屎就要有屎的自觉……
不要因为有很多蛆在你身上爬来爬去你就以为自己不是屎了……
页: [1]
查看完整版本: 继立志一统汉化界后巴屎又立志横扫烧录卡业