■ 热门评测more

 30 12
发新话题
打印

CleanROM的定义 -以及我猜测的烧录卡运行机制 

CleanROM的定义 -以及我猜测的烧录卡运行机制 

刚才会一个帖子写了一段,觉得有必要让更多的人了解一下
http://bbs.yyjoy.com/thread-13863-1-1.html

       如果写过程序的兄弟就更应该明白,CleanROM应该如何准确的定义了:游戏加载的时候,不改变CleanROM内容的就是支持CleanROM ,现在看来,Acekard,SC DS, Ez5应该都是支持CleanROM的,只是各家硬件的实现水准不一样,支持的程度,就要看谁模拟正版环境模拟的更加好了。其实AK说什么"大脚"没有按照任天堂标准来开发,那也是胡扯,是他们不知道如何解释才能解释清楚,我相信是AK没考虑到  有些游戏的程序员,在写程序的时候,也许没有初始化设备或者是给变量赋值就直接使用了,这个初始化或者是赋值的操作,如果是一个C/C++程序员,那没有做,就不是一个合格的程序员:D,这个不管是不是写游戏,都是程序员的错误。---当然了,正版游戏没出错,也不能怪程序员:) ,那就换个说法,AK的程序员没想到还有这样的程序员来写游戏:)

        支持CleanROM的,菜单程序加载游戏的时候,构造一个完全模拟 NDSL自己引导正版游戏的环境(用硬件模拟),这个里面可能包括清控菜单程序使用的内存,取消中断(所谓的软复位就是在游戏ROM里面或者是直接在内存里面加中断处理),初始化CPU寄存器,初始化设备(包括显示设备等),做完这些,再把游戏加载。根据AK描述的,解决大脚游戏的问题是游戏没有初始化显卡,我猜测,一般任天堂自己开发游戏,或者说有经验的程序员开发游戏的时候,会初始化变量,初始化设备和中断,而大脚的程序员估计没有预料到会有AK这样的东西存在,所以理所当然的认为,加载游戏的时候,设备都是初始化好的,按照默认值去操作,所以会促错。我相信写过程序的人都懂我说的是什么意思,如果 你在 C语言里面写一个  int i; 不付值的话,这个i有可能等于任何值。

       而R4的打补丁(还有其他 Slot2的卡)完全不一样,要支持FAT么?好,我找到ROM里面那段访问磁盘的代码(一般都是反汇编的),然后把它访问磁盘的函数改成直接读FAT的,存档代码直接改成写到FAT去。这个过程以前是在PC端完成的,到了忍者卡开始,开始把这个过程放在烧录卡的加载程序中完成,但是最大的问题是,每个游戏读写的代码都不太一样,也许一点差别,就要升级才能找到这个需要修改代码在那里,就像杀毒软件病毒库升级一样,要是厂商的时间不够或者是技术不够,或者是人手不够....或者是......种种情况了..就有可能要忍几天才能玩到了。

再说几个被误导的地方:
        说合卡就不是CleanROM,单卡就是,我觉得这个问题就我的理解我觉得不是这么回事,NDSL的引导程序,就是玩正版的时候,选择游戏的那个界面,其实也是运行在NDSL游戏机上的一个程序,是由他来引导DS端的游戏,或者是GBA端或者是设置程序,聊天等。进入这些程序后,和引导程序就没关系了。同理,合卡的Menu程序,和NDSL游戏机上的引导程序没什么区别,单卡的游戏,只是在硬件上仿真而已,应该是最低端的技术了(相对于合卡),里面不包含任何程序。

         说将ROM COPY到卡里,运行后在COPY出来,没有变化(不管是用CRC还是MD5)的,就是CleanROM ,这也是错误的,因为修改内容有可能是在加载的时候完成,并不会把介质上的程序真实的修改了。


       第一时间我就入手AK了,刚好也是搞软硬结合的工作(手机),恰巧也写过SD卡的驱动。。。。我觉得AK采取专用格式,完全是被迫无奈,如果AK只支持PNY 1G,KingSton 1G连续区块,速度3的卡,应该是完全能做到FAT的。现在用AKFS是因为TF卡的兼容性。我的经验,有些卡,在连续读写的时候速度没有任何问题,但是随机读写的时候,速度会忽然快忽然慢,我想AKFS为什么要保持存储连续,这是一个主要的原因。其他采取FAT格式的卡,我实在是没想出来他们怎么解决这个问题的。。。。还有跨分块访问的时候,读取会有暂停这种现象...sc ds,ez5是怎么解决的,实在想不出来,有sc ds的朋友,可以测试一下 kingmax 512多copy些游戏,看看会不会出问题。 
  对了,写到这里,想到还有一个n-card..,他采取的是NAND-FLASH 的,但是他是怎么处理NAND上的坏块呢。。。这是一件比较复杂的事情,理论上他们用的那个CPLD是解决不了这个问题的,而NAND使用一段时间之后,一定会出现坏块的.

这篇文章如果大家感兴趣,我会不断修改和补充的,有什么问题,可以和大家一起探讨。

有一个朋友问我 NAND-FLASH坏块的问题,不太好解释,我在网上随便找了一段:
引用:
"对于nand最大的问题就是会有bad block,由于bad block的不确定性,所以进一步加大了对nand编程访问的难度。所以只有解决了bad block的问题才可能使用nand,将bad block处理的好才会最大的提升nand的access效率。
什么是badblock呢?就是在这一个block里有1个或多个bit的状态不能稳定的编程,所以就没法使用它,但是如果一个block(128KByte)有一个Bit是坏的,那么整个block放弃使用。听起来有点浪费,可能是根据物理原理使整个block的稳定性不能保证吧,或者是其他考虑。不过既然三星要求我们这么做,那么为了系统的稳定,也不要计较那几百KB的容量了。
bad block有2种,一种是initial badblock,另一种是runtime bad block。所谓initial badblock就是在三星出厂时就是坏块的。为什么出厂会有坏块?这个很正常,因为nand就是会有坏块,比LCD有坏点的几率大的多。但是可以放心的是三星在出厂前都对nand进行了测试,erase了所有的block,所以内容会都是0xFF,同时标记了bad block,这些即是initialbadblock。每一种容量的nand允许的最多坏块数都是有规定的,低于某个值是不会出厂的,同时低于98%的可用块,基本就会认为这块nand很不稳定了。
initial bad block的标记是保证坏块的前2个page里的sparearea里的第一个字节的内容不会是0xFF。即如果前2个page其中一个的2048地址(从0开始计数,以后都是这种计数方式)上的数据(就是spare area的第一个字节)是0xFF,那么这个块不是initial bad block。值得注意的一点是badblock的标记会被erase掉成0xFF,所以有可能会误被认为是good block。所以在对每一个blockearse之前一定要判断是不是bad block,否则将bad block的标志erase了,以后使用的时候会误被当作goodblock,从而有可能带来数据损失。
对于runtime的bad block,就是使用中出现的badblock,可以从erase或program后对成功与否的判断来决定这个block是否变成badblock,如果是的话则标记。一般标记的法则和initial bad block一样,在前两个page的sparearea的第一个byte上写非0xFF值,一般写0。
对于bad block的处理办法就是驱动层的问题了,做的好的话会很复杂,这个以后再介绍诸如三星的pocketstoreII这样的专门的nand driver来提供高可靠性和高perfermance。最简单的就是遇到坏块向后跳,但也是效率最差的,因为访问第n块时,你要知道0--(n-1)块一共有多少个bad block才能决定操作的偏移量,而扫描n-1块对于n比较大的情况无疑会很慢。
[ 本帖最后由 leon 于 2006-12-23 12:31 AM 编辑 ]

TOP

太专业了,捧场捧场,赞


个人看法,现在的烧录卡,其实就是一个硬件的模拟器设备,谁的模拟程度越高。兼容性自然就越高。


首先。游戏运行又要分2部分,一是游戏的运行,显示,指令执行。这需要烧录卡自身送出相应的数据,具体实现机制如何我无法得知(厂家也不会告诉我:yoci9: ),只能说这部分是各厂家自身的实力的体现。大家自己的内核加硬件对Z卡模拟程度的高低,直接决定了游戏的兼容性。

二是游戏数据的读取速度。这个问题对于使用外置存储介质的卡尤为突出,使用内置存储芯片的卡,基本在硬件上就模拟了Z卡的环境,速度基本也能达标,满足Z卡正常运行的需求。而TF卡本身的存储结构就与Z卡的存储结构不一致,各厂商除了在考虑如何在TF卡上模拟出Z卡的存储环境上,各自出招外,还要对其读取速度进行测试及修改,以达到Z卡的需求。但模拟效率有高有低,也有兼容性问题。这也是为什么几乎所有的烧录卡在执行某些游戏会稍慢,或者稍快。模拟基本达不到100%的。不管是效率还是功能上。

所以我们也能看到,部分Z卡很快的游戏在某些烧录卡上比较慢,而在有些烧录卡上又会比较快。换另一个游戏却有可能有相反的结果。这个跟各厂商所擅长的技术有关。同时也和TF卡自身的特性有关,卡本身也会影响游戏的执行速度,对速度要求高的游戏甚至会死机。比如恶魔城-废墟的肖像



而对于自制软件来说,则完全和CleanRom不同,由于自制软件现在的运行除了要考虑到nds的硬件环境,还要考虑到烧录卡的文件存储方式。由于各种卡的方案不同,在烧录卡上的自制软件不得不作妥协。使用他们提供的接口资料开发对应的接口,这种数据存储方面的不统一,也是造成现在nds自治软件开发进度缓慢的罪魁祸首之一。程序员们不得不考虑到多种接口上的数据存储。

这也是为什么现在新出的烧录卡基本都需要官方自己去修改对应的软件,才能得到支持。比如MoonShell就有对应各种卡多至8种以上的运行文件

想要自制软件开发作者一写完程序就能放到所有烧录卡上运行,除非谁能制定出一套自制软件标准来。这样才有可能避免发生由于各自硬件体系不同所引起的自制软件兼容性问题。


至于Downloadplay问题的解决方式上,怀疑老任可能采用了某种加密方法,造成对应的卡不能使用。这个只有等达人们破解咯。

[ 本帖最后由 jetlu 于 2006-12-23 02:25 AM 编辑 ]
AceKard - The Easy Way To Enjoy DS Games~

TOP

給點建議,就是不要先入為主R4是打補丁,其它不是打補丁,又或者其實全部卡都是打補丁的,然後再去想一次,你會明白更多!

打補丁的意思又是什麼? 會不會打補丁進內核,和打補丁到ROM都是打補丁的一種!

另外,要鬥的其實是CLEAN ROM或是EMU技術? 為什麼大家也解決不了RSA,但有些遊戲能解決,有些又不能呢?

P.S.: 我想我說的應該沒人明吧!:yoci9:

TOP

阿定同学看清楚了,我通篇没说其他卡没有打补丁吧,我想说的是打补丁方式,想讨论的是是否支持CleanROM,我根据我的理解来描述CleanROM,有不对的地方请指正。
我不想否定任何卡,我只是说我自己的理解。 
R4是不是通过内核修改了CleanROM的内容,我没有卡,我不是做这行的,我没有官方给我卡评测,也不会自己花钱去买来评测,我是看YY的评测做的结论。 

至于RSA,因为我不是很了解,如果阿定同学想讨论,我可以花时间学习学习。 

另外,请阿定同学不要一上来就带有色眼镜看贴。

[ 本帖最后由 leon 于 2006-12-23 01:39 AM 编辑 ]

TOP

加有MENU一定非CLEARN !!!!!

道理很简单,因为在GAME以前运行你的MENU,  NDS的所有环境已经被MENU改变.

这些改变不管你是有意还是无意,已经无法还原成NINTENDO的 RESET状态!


被MENU改变哪怕是REG的ONE bit, 也会导致GAME运行方向的重大变化.正所谓差之毫厘,失之千里.
----GAME的白屏黑屏也就由此而来.


写过ASM会深刻领会这一点!



我们暂不定义什么是CLEARN, 但我们立刻可以否定非CLEARN:

1。 非Z卡LOGO一定非CLEARN
2。串行存储一定非CLEARN

TOP

NDSL开机后的画面,本来就是一个引导程序,如果合卡的加载方式和这个引导程序一样,就不会和运行正版卡有任何区别。

TOP

我怎么感觉那篇NAND-FLASH坏块的文章那么像硬盘的坏道说明。
硬盘出厂的时候把固有坏道记录在永久缺陷表中,避免读取到那个坏块。而如果在使用中又产生了不可修复的坏道,则会把序号加入到那个表中,直到那个表超出了可允许的范围,则硬盘爆废。NAND-FLASH也和硬盘一样吗?

用TF卡就不存在坏块吗?我没有研究过,请这方面的高手解答

TOP

ls的,TF里面有一个IC,专么处理和标示 坏块的,不需要外部东西单独处理。

TOP

那么NAND-FLASH需要外部来处理那些坏块吗?我想做成成品的NAND-FLASH芯片里面加一个IC不难吧?

TOP

leon :

支持CleanROM的,菜单程序加载游戏的时候,构造一个完全模拟 NDSL自己引导正版游戏的环境(用硬件模拟),这个里面可能包括清控菜单程序使用的内存,取消中断(所谓的软复位就是在游戏ROM里面或者是直接在内存里面加中断处理),初始化CPU寄存器,初始化设备(包括显示设备等),做完这些,再把游戏加载。根据AK描述的,解决大脚游戏的问题是游戏没有初始化显卡,我猜测,一般任天堂自己开发游戏,或者说有经验的程序员开发游戏的时候,会初始化变量,初始化设备和中断,而大脚的程序员估计没有预料到会有AK这样的东西存在,所以理所当然的认为,加载游戏的时候,设备都是初始化好的,按照默认值去操作,所以会促错。我相信写过程序的人都懂我说的是什么意思,如果 你在 C语言里面写一个  int i; 不付值的话,这个i有可能等于任何值。


NDSL开机后的画面,本来就是一个引导程序,如果合卡的加载方式和这个引导程序一样,就不会和运行正版卡有任何区别。




支持上述观点,但是现在谁能够100%恢复CPU/REG/,DISPLAY 的INI?
----没有!所以等同于一个BUG补丁!

  那这个技术价值5W块钱,而且很快就可以卖出的.

TOP

太专业了,看得有点眼花了:yoci9:

TOP

其实看明白了不复杂的,已经说的比较直白了。我想外置的存储卡应该更难模拟cleanrom,因为毕竟还要多一个接口的处理,且每个品牌的存储卡都有各自的特点,所以会出现挑卡的现象。

TOP

其实我感觉你们说的都不对,所谓支持CLEAN ROM,这个话题完全是为了占有市场搞出来的一个口号!!

AK当初怎么说他支持CLEAN ROM的?他说他支持直接的复制与粘贴!这才是他们口中为用户设计的CLEAN ROM!哪怕是在AK自带的AM软件里进行复制与粘贴,那也是直接进行的操作!

厂家口中的支持CROM,无非就是让拷贝的过程时间最短化,直接复制,没有像M3那种先打补丁再复制的过程。

于是,做到这一点的,都可以叫作支持CROM。像DS-X,R4,SCDS等等。我们不用管游戏的运行机制,不用在乎NDSL运行卡里的游戏时候,是直接调用卡里ROM的数据还是调用已经被卡内核打过补丁的数据,因为厂家只说过能直接复制,并没有说运行的时候是直接读取。

楼上有位兄弟说只要是带MENU的卡都不是CLEAN ROM的支持卡,我想这很不现实。没有MENU怎么选游戏?难道一个卡里只放一个游戏?那可真是用烧录卡在模拟Z卡了……

总之,我感觉对卡是否支持CLEAN ROM这种话题来得不是十分有意义,对游戏的兼容与速度才是最主要的。一些周边的功能,比如听歌,看电影,难道你买来NDSL是当MP4用的吗?我建议,有这种功能追求的同志,买一块AK或者SCDS用来游戏,再买一块M3L,专门用来实现周边功能:yoci9:

不过话又说回来,最实际的周边功能,还是软复位。相信不会有哪位玩家为了CLEAN ROM就花上比其他人多上几倍的开关使用率吧?

TOP

to [url=profile-uid-22766.html]abcd8866[/url]:
    我认为初始化是一件很简单的事情,因为NDSL使用的并不是专用架构,他用的是ARM7和ARM9而已,而且还是标准CPU,所以我想这些资料都是公开的,不会有什么难度,我的猜测正不正确,我们接下来看AK,SCDS他们这些slot1的卡的兼容性表现吧。

to fireman9999:
   您对CleanROM的解释,就像X9,忍者卡,R4这类的卡他们强调的"CleanROM"是偷换了概念,支持FAT支持直接复制和粘贴并不代表CleanROM.恰巧您也说到了游戏兼容度和速度才是最重要的,所以,让我们静观其变,看看各卡的表现如何吧?

to tangyuncat:
如果要直接使用NAND-FLASH,那一定要处理,不管是软件还是硬件都要维护一张坏块表,我看了DS-X的照片,他是用硬件实现的,不知道N-CARD是如何实现的?但我感觉N-CARD并未处理坏块问题。 

TOP

从某中意义上说,所有卡都要打补丁,方式不同而已。道理很简单:nds只能执行Z卡,烧录就是烧录,要模拟成Z卡才能用,AK也不例外。

AKFS其实是AK在偷懒,Z卡数据都是连续存放的,好模拟。当然好处也是明显的:速度快,而且最接近Z卡结构,兼容性高。

支持fat的关键并非速度问题,关键是要将fat的链表方式模拟成Z卡的连续存放方式。

TOP

完全看不明白。。。:yoci7:

TOP

不太明白说的是什么撒

TOP

留个名字,以后慢慢看
粉NDSL,黑PSP,灰Trēo680,银SONY PRS-505,银X51V,小小黄蜂

乱逛于各大板块,为广大玩家服务

(发现不良或者不水产的人员或者帖子,欢迎向我举报,谢谢!)

Life is Short,Play More

TOP

挖个坑...看看:yoci9:

TOP

某些东西纯属lz猜测,特别的那个什么初始化的,不敢苟同

TOP

 30 12
发新话题