易码技术论坛

 找回密码
 加入易码
搜索
查看: 2760|回复: 18

[GB/NDS] 老Lee啊,给点技术性指导吧~

[复制链接]
发表于 2008-2-17 15:06:08 | 显示全部楼层 |阅读模式
通过这几天的研究学习,问题又渐渐转移到文件系统上去了,现在才发现PAlib给的PAFS文件系统居然是把文件打包进.nds文件烧进slot2烧录卡用的,slot1烧录卡用不了!偏偏我手头的资料只有PAlib比较全,devkitpro连库的说明文档也没有……网上资料也很有限。
    对比国内自制软件作者的困难重重,Lee似乎很轻松的就把DS的Lvc给搞定了,很惊异Lee在devkitpro的资料这么缺乏的情况下就玩转了,特在此请求Lee给点指导,比如需要看点什么参考书啦,某篇文章啦或者一些经验总结之类……先在此谢过
发表于 2008-2-17 17:24:26 | 显示全部楼层
devkitpro很好用,文件系统是标准的c库:fopen,fclose,fread,fwrite,...
 楼主| 发表于 2008-2-17 23:38:38 | 显示全部楼层
我汗……例程里用到的fopen,fclose之类确实是在stdio.h里定义的(目录操作要包含dir.h)……不过这样的话烧录卡的接口驱动是怎么加进去的啊?看上去这样的话libnds里的FAT.h就没什么用处了。
发表于 2008-2-18 08:04:59 | 显示全部楼层
libfat本身已经包含若干个卡的驱动,但是不包含r4的驱动,所以俺手动加入了
 楼主| 发表于 2008-2-18 08:42:41 | 显示全部楼层
是这么回事吗?据我所知Libfat是支持DLDI的啊,也就是说编译时留出一段预留区作为DLDI段,然后根据自己的卡手动打补丁……不会是版本差异吧,我用的是devkitARM r20。
验证一下吧,用DLDI工具对.nds文件打补丁,如果成功就说明可以在其他卡上用,如果说没有DLDI段,那么……就残念了。

[ 本帖最后由 niubo_ 于 2008-2-18 08:43 编辑 ]

TGBUS_DLDI_Tools_v1.0.2007.11280.rar

441.04 KB, 下载次数: 321

DLDI Tools

发表于 2008-2-18 08:44:30 | 显示全部楼层
直接把驱动加入到libfat中就不用dldi了,可以直接识别
发表于 2008-2-18 08:47:44 | 显示全部楼层
libfat可以加上各种驱动,只要libfat已经含了某卡的驱动,就可直接识别该卡。
dldi是给libfat不识别的卡加驱动的。
把r4的驱动加入libfat不影响其他不可识别的卡加dldi。
发表于 2008-2-18 08:48:29 | 显示全部楼层
明白否?
 楼主| 发表于 2008-2-18 08:51:04 | 显示全部楼层
话说昨晚研究了一下libfat.h,里面的注释写的很详细嘛,有经验的程序员看着这些注释就能熟练运用这些函数了吧,真是,我还抱怨devkitpro没有说明文件。看到里面的函数挺丰富,连目录操作都有了,真是不错。
发表于 2008-2-18 13:37:17 | 显示全部楼层
我什么都不知道……
nds也使用arm的cpu?
发表于 2008-2-18 13:38:28 | 显示全部楼层
对.nds是使用双arm
 楼主| 发表于 2008-2-18 13:48:36 | 显示全部楼层
应该算是明白了,就是说本来libfat预留的DLDI补丁的空间现在在编译时已经加入了R4的驱动(或者理解成打上了R4的补丁),再用其他烧录卡打补丁的话就是把这段内容覆盖掉就是了,这样又可以运行在其他烧录卡上了。是这么回事吧。
PS:终于了解到DLDI诞生的始末,我以前查到的很多资料都是很旧的东西了,在那个洪荒年代,别说libfat和DLDI,连slot1烧录卡都没有,唉~如今libfat是主流了,完全不用关心那么多问题,处理数据也像在文曲星上那么方便了。
发表于 2008-2-18 14:20:58 | 显示全部楼层
不对!
是加上了r4的驱动,而没有占用dldi的空间.
 楼主| 发表于 2008-2-19 00:46:56 | 显示全部楼层
我快疯了!!!看来还是很多关键性概念没有弄清楚啊……研究了一下libfat.h,发现里面好多好用的函数,文件改名,删除还有目录操作之类,今天做了个了程序实验一下,失败~编译出的东西根本没有DIDL段……
    找了一下,一个包含libfat.h的例子都没有,用错了也不知道啊。看包含有fat.h的例程(莫非所谓的libfat支持DLDI要包含的是这个而不是libfat呀)。只用标准库里的fopen,fread这些能实现的文件操作很有限吧,实在是不甘心。
 楼主| 发表于 2008-2-19 19:08:50 | 显示全部楼层
一切的麻烦正是源自那个不知道怎么混进来的libfat.h文件,里面确实定义了很全面的文件及目录操作函数,但是那并不是libfat!!要用libfat真正要包含的是fat.h。这样就可以用标准C函数进行文件操作了,不过问题是:到底有那些函数是可用的呢?我去翻了一遍那些头文件,发现了些诸如remove,chdir,mkdir,rmdir之类的函数,只是列在那里进行编译,大部分都能编译通过,但有些像mkdir这样的函数除了路径外还有一个参数……不知如何是好了。
发表于 2008-2-19 19:27:48 | 显示全部楼层
试试就知道了
 楼主| 发表于 2008-2-20 09:16:40 | 显示全部楼层
知道问题的关键就在那个libfat.a里,可惜那是个编译好的库文件。后来突然想到libfat是开放源代码的啊(够迟钝的),马上下载源码回来研究。大概弄清楚这些驱动是怎么回事了,首先是保留段,给将来打DLDI补丁用的,然后是已知的slot1烧录卡驱动,再然后是slot烧录卡驱动,lee是把R4的驱动加进了slot1驱动部分。这次回答是正确的吧?

还有那个mkdir的第二个参数是个mode_t类型的玩意,用来指定权限的(汗,我是在一篇Linux下的C语言文章上找到的),不过具体用法回头再研究吧。
发表于 2008-2-20 09:18:50 | 显示全部楼层
有进步
 楼主| 发表于 2008-2-20 09:47:54 | 显示全部楼层
没有当初那么强烈的迷茫感了,通过阅读源码可以弥补文档材料的不足。同时也理解了devkitpro开发人员的高傲:不会读源代码的人不配用devkitpro搞开发!至于PAlib……可以很方便的做游戏,但是给定了现成的砖头能盖瓦房,我要想修条小路那就没法用了,大概也就是这么个道理。

重新安装了一遍devkitpro,开始用devkitARM r21了,这个版本和现在的PAlib不兼容,最近是用不了啦。

[ 本帖最后由 niubo_ 于 2008-2-20 09:50 编辑 ]
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-25 03:35 , Processed in 0.013677 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表