Board logo

标题: ===== ACEKard深层次分析,原理科普 ===== [打印本页]

作者: jun4rui    时间: 2006-10-19 08:16     标题: ===== ACEKard深层次分析,原理科普 =====

今天YY的AK卡评测完全出来了,果然入前面预见般的,需要读取TF卡带分区表的自制软件全军覆没鸟~

很多人可能会觉得jun4rui哥哥可能是瞎猫撞上死耗子,下面说一下俺对计算机方面的造诣和历史吧:
今年28岁,不过7岁还是玩街机(22年历史),13岁开始玩电脑(16年历史),13岁自己看电脑随机附送的说明书完全学会BASIC语言(16年历史)步入软件开发,14岁可以自己分析找到300行汇编语言中的错误之处修复后让程序运行。玩电脑绝对自学从来,BASIC语言最高造诣就是10年前可以自己开发直接操作屏幕缓冲区,自带字库的电子书软件。当然,现在早进化到玩J2EE和python之类的语言了。DOS、MAC OS、WIN、各种UNIX平台上面,俺用得不精的确实有,但是俺没见识过的实在有限。有玩过我这么久的,但是几乎都学了一点的估计不多。

下面还是不吹嘘自己并不值得吹嘘的历史了,继续谈谈AK。

关于AK卡,既然是采用“独特思路”开发出来,100%兼容过去现在将来的ROM的卡,绝对是不能从一般思路来看他的产品思路的。前面我也说过,他是采用磁盘文件区块映射方式实现的,映射以后,在NDS上,AK烧录卡的一个区块将完全像一个真正的NDS游戏卡一样被系统识别和使用。所以,AK烧录卡才能直接用ROM。

为什么呢?大家随便假设、分析一下就能得出结果:
1、传统采用SD卡的设备不可能100%兼容Clean ROM,因为它本身的运作方式无法被NDS当作一个“真正”的NDS游戏卡来,因为闪存卡上的磁盘格式完全不等同于NDS卡带的磁盘格式,也远比NDS真卡大得多。试问一个完全不同的硬件,如何不经过修改和转换就可以当成100%当成另外一个硬件使用?
*其实类似思路的产品已经出现过,大家还记得不久前,那个100%兼容Clean ROM的512MBit烧录卡吧,它不支持多游戏合卡,而且只有512MBit,相当于普通的NDSROM大小,对很多1Gbit的ROM无法支持。他就是完全把自己运行在NDS真卡模式下的产品。其实思路在进化一下,就达到AK卡的境界了。

2、传统烧录卡为什么要转换ROM?其实,应该不叫转换ROM,而是对ROM中的程序进行一些修改,让NDS程序执行ROM的时候,把闪存卡”当作“真的NDS卡带。

3、AK不要转,是因为它上面的ROM已经被映射成了真实卡带的地址了,所以我这一块存储空间,就相当于是一个NDS卡带所有的空间,1区块=1 NDS卡带。

4、AK卡为什么固件这么小?因为本身功能简单,固件只需要起到一个映射ROM区块的功能

5、映射到底是什么,我还是不明白?嗯,确实不好理解。换个大家熟悉的名次,映射的概念有些类似于电脑常见的“虚拟光驱”,用卡带上的逻辑电路,将TF卡上的ROM虚拟成一个NDS卡带。PC的是:ISO=>光盘,这个烧录卡是:ROM=>卡带而已。

6、映射100%和正版卡一样吗?当然不能!除非一些故意和虚拟光驱软件搞鬼的游戏光盘,否则PC的虚拟成功率还是极高的,无限接近100%。而AK烧录卡目前市场占有率压根没有,所以任天堂根本不会对这款新出的烧录卡进行针对性的“搞鬼”动作,要买的玩家大可放心。

7、映射可以用软件实现吗?难,因为映射是对NDS访问游戏卡的一个转换的过程,如果是软件实现,那软件必须全程监控NDS对游戏卡的访问,就是说这个转换软件程序必须和NDS游戏同时运行,而且要有比NDS游戏更高级别的系统优先权。但是NDS仅仅4M内存,游戏还要绞尽脑汁多抠一点出来,CPU也不快,就算你这个监控程序只有1bit(笑),NDS游戏也不可能让你运行的,再说NDS硬件能让你在游戏更高级别再跑个自制的程序的可能性还有待研究。

8、为什么AK卡的存储空间要分区块?首先,我们理解前面的东东,这里就好理解了。要知道,NDS实际上的游戏卡是相当于内存的东西,访问起来和内存差不多,是靠内存地址访问的,这和虚拟光驱的概念有点不一样了(PC为了要达到最大磁盘空间利用率,所以文件并不一是按照真实地址一个个数据连续存放好,所以PC不要这么麻烦,操作系统会自己帮你搞定,所以有区别)。举例来说,在NDS卡带上,存放马里奥图像存储器地址的后面紧跟着就是耀西的图像耀西的图像后面就是酷霸王的图像,这是个绝对固定不变的。但是如果采用PC的磁盘格式(例如Fat16、Fat32之类的),马里奥图像后面在这个磁盘上可能是酷霸王,在另外一个磁盘上可能又是耀西了,甚至连马里奥的图像本身,都是分成若干块散布在磁盘扇区上的……。所以AK要用相对简单的电路来把ROM映射成NDS卡带,最省力也是最可靠的办法,就是把ROM存放在一个连续的磁盘空间!这就是AKFS的真面目!

9、为什么AK卡还要软件传ROM?当然,因为PC没法识别AKFS文件系统啊,怎么拷贝过去?而且PC对文件的操作方式决定了,他传过去也会把一个ROM存放在很多物理上并不连续的磁盘空间上的。

10、为什么需要对闪存卡读写的自制软件无法运行?很简单,一个ROM被映射成NDS卡带了,你还能读这个卡带“外面”的数据吗?希望将来有达人发明个技术,把这个ROM以外的空间当成“GBA槽烧录卡”进行读写还是有点可能性的。不过要是那样的话,DS槽的烧录卡估计也能直接跑GBA游戏ROM了,难度很大,甚至不可能实现。

11、总结AK卡特性所带来的优点:既然是“虚拟光驱”而且没有针对性的程序,AK卡的Clean ROM兼容性绝对是无比接近100%!要比它更接近的,就只有那个512Mbit,把自己当成真的NDS卡带来烧录的某无名小卡了。所以大家无须担心ROM兼容性。成本低,因为重要的是思路的转变,AK烧录卡绝对不比其它DS口烧录卡硬件成本高,甚至是属于偏低的那一档。

12、总结AK卡特性所带来的缺点:浪费闪存卡空间,AKFS系统的空间连续性,导致一些无法存放ROM文件的磁盘空间将无法被利用到,等于被AKFS系统“吃掉”了。AKFS文件系统其它设备无法用。需要读写闪存卡的自制软件极难逾越的屏障,很难想象任天堂或者第三方的API会研究并编写出怎么读写“存放在卡带以外,理论上是空气中的数据”的程序开发接口给你……,何况这些数据(例如图片、MP3等),还需要转换成连续空间存储方式(即使会出现,你会忍受连看个电子书都要转的可怕现实吗)。

[ 本帖最后由 acejun4rui 于 2006-10-19 08:19 编辑 ]
作者: LostEve    时间: 2006-10-19 08:23

顶了再看
作者: 迷路    时间: 2006-10-19 08:32

技术贴~
作者: 真忘私绵    时间: 2006-10-19 08:37

恩,说的不错~
作者: jzhl    时间: 2006-10-19 08:40

如果真的如搂主把ROM存放在一个连续的磁盘空间,那么储存卡的碎片问题就很严重了。其实如果开发商肯做一个驱动,也不一定要用独立的软件来拷贝。
作者: LostEve    时间: 2006-10-19 08:40

综上ACEKARD确实很一般啊,真正地无法以不变应万变
DS-X倒是不错
作者: jun4rui    时间: 2006-10-19 08:43

引用:
原帖由 jzhl 于 2006-10-19 08:40 发表
如果真的如搂主把ROM存放在一个连续的磁盘空间,那么储存卡的碎片问题就很严重了。其实如果开发商肯做一个驱动,也不一定要用独立的软件来拷贝。
驱动不如独立软件好的两个理由:
1、驱动开发比独立软件难度高;
2、驱动还要装,软件如果是绿色的,连安装都不要,丢在U盘里面到处可用。
作者: 蒙其D路飞    时间: 2006-10-19 08:49

简单易懂~~~~

自制软件不行的话就没意义了阿.......远目~~
作者: LostEve    时间: 2006-10-19 08:54

应该还是有对应的用户群需要这个卡的
只是该用户群的规模肯定会比之前想的小得多了
作者: 长牛角    时间: 2006-10-19 08:55

ds-x 直接拷了clean rom能运行是啥原理?
作者: LostEve    时间: 2006-10-19 09:00

DS-X没接外置卡阿
作者: apple524    时间: 2006-10-19 09:04

不错,技术强贴!
作者: jun4rui    时间: 2006-10-19 09:05

引用:
原帖由 长牛角 于 2006-10-19 08:55 发表
ds-x 直接拷了clean rom能运行是啥原理?
DS-X的原理还没有参悟,等我参悟了再说吧。AK的思路和传统的不一样,但是原理上就简单易懂一些。

看见有人觉得AKFS也可以开发自制软件,和其它烧录卡一样,但是他们也不想想,网上大把的磁盘分区格式和读写这些格式的免费函数库到处有下,为什么AK要自己费力捣鼓一个……
作者: 长牛角    时间: 2006-10-19 09:08

引用:
原帖由 acejun4rui 于 2006-10-19 09:05 发表

DS-X的原理还没有参悟,等我参悟了再说吧。AK的思路和传统的不一样,但是原理上就简单易懂一些。

看见有人觉得AKFS也可以开发自制软件,和其它烧录卡一样,但是他们也不想想,网上大把的磁盘分区格式和读写 ...
ds-x不就是fat分区么,是不是意味着未来外接tf卡的slot 1 直接(拷贝后)运行clean rom的真完美卡出现可能?
作者: jzhl    时间: 2006-10-19 09:09

引用:
原帖由 acejun4rui 于 2006-10-19 08:43 发表

驱动不如独立软件好的两个理由:
1、驱动开发比独立软件难度高;
2、驱动还要装,软件如果是绿色的,连安装都不要,丢在U盘里面到处可用。
难度我觉得对于厂商来说应该不成问题,安装也不是大问题,想想现在的流氓软件。
作者: 长古川    时间: 2006-10-19 09:11

强啊,不过偶的要求蛮低,能玩游戏就行了,自制软件就无视咯~
作者: jun4rui    时间: 2006-10-19 09:12

引用:
原帖由 jzhl 于 2006-10-19 09:09 发表


难度我觉得对于厂商来说应该不成问题,安装也不是大问题,想想现在的流氓软件。
AK的主页都没时间弄,发的几个文章也是简单得很。我想他们暂时还没有功夫来弄这个……
作者: henryzyl    时间: 2006-10-19 09:14

只关心游戏功能..
作者: samuelz    时间: 2006-10-19 09:24

太长了.顶了再看.
作者: leica    时间: 2006-10-19 09:47

纯粹技术帖子,没怎么看得懂。应该是说ak为了迎合nds的rom的格式,而不得不放弃兼容自制软件吧
作者: amm    时间: 2006-10-19 09:54

楼主厉害的
作者: Kuzuryuusen    时间: 2006-10-19 09:56     标题: ..

听起来有点像样以前的gba自制软件,无论啥东西都得先打包成.gba文件才可以烧进卡里……
只是现在还没有能够把自制软件打包成.nds的冬冬。
这也没啥大不了的嘛
作者: jun4rui    时间: 2006-10-19 10:02

引用:
原帖由 Kuzuryuusen 于 2006-10-19 09:56 发表
听起来有点像样以前的gba自制软件,无论啥东西都得先打包成.gba文件才可以烧进卡里……
只是现在还没有能够把自制软件打包成.nds的冬冬。
这也没啥大不了的嘛
除非将来AK烧录卡的市场非常大,否则大量现在已经采用直接读取文档的自制软件来说,为AK专门开发一套程序是不是太辛苦了点?
打包也要能打啊,例如那个看漫画的,打到20M以上的时候就容易罢工了,要是我要听周杰伦的高音质《依然范特西》,不要打个几十M乃至上百M的NDS包?问题是,这样的.NDS文件,NDS认不认,而且退化到以前的,干什么都要“转格”的时代了。

综上三点,AK要玩转读卡型自制软件,不是那么简单的
作者: seawindcg    时间: 2006-10-19 10:05

进来学习,LZ还真懂
作者: Kuzuryuusen    时间: 2006-10-19 10:29

引用:
原帖由 acejun4rui 于 2006-10-19 10:02 发表



除非将来AK烧录卡的市场非常大,否则大量现在已经采用直接读取文档的自制软件来说,为AK专门开发一套程序是不是太辛苦了点?
打包也要能打啊,例如那个看漫画的,打到20M以上的时候就容易罢工了,要是我 ...
哦,明白了。
俺刚刚开始玩gba烧录,以为“打包”仍然是标准操作呢……
原来早已跨入拖放时代了哦
看来是俺落伍鸟
作者: jinwyp    时间: 2006-10-19 11:04

引用:
原帖由 acejun4rui 于 2006-10-19 09:05 发表

DS-X的原理还没有参悟,等我参悟了再说吧。AK的思路和传统的不一样,但是原理上就简单易懂一些。

看见有人觉得AKFS也可以开发自制软件,和其它烧录卡一样,但是他们也不想想,网上大把的磁盘分区格式和读写 ...
感觉自己开放一个文件系统 技术也比较牛了 dos当时不就是一个 文件系统

可惜现在看了有点费力不讨好.
作者: rezly88    时间: 2006-10-19 11:50

对楼主的敬仰如滔滔江水、连绵不绝…………
支持技术帖!分析得有道理
作者: 大头木    时间: 2006-10-19 12:22

DS卡槽永远不可能玩GBA游戏.排除寻址方式的因素.
GBA卡槽的读取时钟频率比s1足足快了一倍多.

再说lz说的寻址.地址都是一样的,根本就不会改变什么寻址方式.

只是NDS卡带用的是matrix 的3D卡带.存储的方式自然和普通闪存不大相似.
这点才是需要转换的原因.

[ 本帖最后由 大头木 于 2006-10-19 12:31 编辑 ]
作者: 卖哥    时间: 2006-10-19 12:38

嗯,那么DS-X可能也是用映射的

很简单
FAT16里面,每个簇大小是32k,簇内部还是连续访问的
32kB就相当于ROM大小的256K

那个烧录卡可能有本地内存,然后在本地内存里顺序的排列映射的簇的地址信息。

那么就可以同样达到顺序访问的效果。
作者: jun4rui    时间: 2006-10-19 18:48

引用:
原帖由 大头木 于 2006-10-19 12:22 发表
DS卡槽永远不可能玩GBA游戏.排除寻址方式的因素.
GBA卡槽的读取时钟频率比s1足足快了一倍多.

再说lz说的寻址.地址都是一样的,根本就不会改变什么寻址方式.

只是NDS卡带用的是matrix 的3D卡带.存储的方式 ...
有逻辑地址和物理地址的差别。就拿PC来说,内存是才用段和偏移量寻址的,类似NDS卡带。而磁盘是物理地址零散,但是逻辑地址是连续的。

开发过C语言的也知道,char型字符串在内存中的物理排列实际上就是连续地址的。字符串 "jun4rui" ,在内存中的物理地址肯定是连续排列的,但是磁盘中一个文本文件的一串字符,拿存储的位置可就未必是连续的了
作者: jun4rui    时间: 2006-10-19 18:51

引用:
原帖由 卖哥 于 2006-10-19 12:38 发表
嗯,那么DS-X可能也是用映射的

很简单
FAT16里面,每个簇大小是32k,簇内部还是连续访问的
32kB就相当于ROM大小的256K

那个烧录卡可能有本地内存,然后在本地内存里顺序的排列映射的簇的地址信息。

...
这个可能性顶楼就说过了,簇内部是连续的根本没用,簇外部还是散乱的,你要把不连续的物理地址转换成逻辑地址,要么用软件驻留内存,但是不可能(前面说过),要么用硬件,造价激增。AK的方法是最简易可靠的。
作者: 洛克狼    时间: 2006-10-19 20:31

买和不买……,以后再说。
作者: 卖哥    时间: 2006-10-19 21:08

引用:
原帖由 acejun4rui 于 2006-10-19 18:51 发表


这个可能性顶楼就说过了,簇内部是连续的根本没用,簇外部还是散乱的,你要把不连续的物理地址转换成逻辑地址,要么用软件驻留内存,但是不可能(前面说过),要么用硬件,造价激增。AK的方法是最简易可靠的。
没错我的意思就是卡内带本地内存
FAT16的16就是簇的地址长度,16位
就是用16位去映射32kB
即使考虑未来4G大小的游戏的需求,
有32KB的卡内本地内存即可

确实者需要加不少成本,但是也谈不上激增。

如果FAT的ROM无法运行的原因就是顺序访问,那么DS-X能做到如此,很有可能用的就是这招。
作者: jun4rui    时间: 2006-10-19 21:15

引用:
原帖由 卖哥 于 2006-10-19 21:08 发表


没错我的意思就是卡内带本地内存
FAT16的16就是簇的地址长度,16位
就是用16位去映射32kB
即使考虑未来4G大小的游戏的需求,
有32KB的卡内本地内存即可

确实者需要加不少成本,但是也谈不上激增。
...
应该是FAT16的磁盘结构并不是和NDS卡带内结构不太相似,甚至NDS真卡内根本就没有FAT16的一些引导扇区、分区表之类的结构概念,读取扇区之类的操作也和NDS真卡不一样,映射起来也许无法做到结构上的1:1对应,需要通过硬件或者软件转换,这种转换会带来一些什么损失(读取速度、寻址速度或着成本什么的)。

如此这样,反而还不如将闪存卡格式化成构造更近似于NDS真卡的AKFS更好一些。即可以保证兼容性,又不需要做额外的工作,而且可靠度更高。
作者: cc0128    时间: 2006-10-19 22:34

= =
TF卡能分区么?
干脆分个FAT再分个AK吧。。。
作者: rb    时间: 2006-10-19 22:56

坦白讲,不要我刷机,直接能运行游戏,就满足我的要求了。360块……还好啦。

说道自制软件么,psp那么大屏幕,我要用你nds干吗……
作者: ahzhuo    时间: 2006-10-20 00:32

一个完全无名的厂商
未知的售后服务保障
不菲的价格
很难让人下定决心的
当初的mk2/mk3也是被吹得天花乱坠后来证明始终是昙花一谢




欢迎光临 TGFC Lifestyle (http://bbs.tgfcer.com/) Powered by Discuz! 6.0.0