NDS程序设计(二)
一、硬件介绍:
先贴一个网上流传甚广的NDS硬件清单:
主机名任天堂DS[NTR-001(JPN)]
尺寸、重量(机器闭合时)- 长:148.7毫米 宽:84.7毫米 厚:28.9毫米
– 重量:约275克(含电池、触摸笔)
Display采用上下双液晶屏幕同时显示并进行游戏,下方屏幕更可直接使用触摸笔及手指进行操作。
•上方屏幕
– 3英寸(对角线距离)半透反射型TFT彩色液晶
– 带有背光灯
– 分辨率256 X 192像素,点距.24
– 26万色
•下方屏幕
– 3英寸(对角线距离)半透反射型TFT彩色液晶
– 带有背光灯
– 分辨率256 X 192像素,点距.24
– 26万色
– 附带高强度透明模拟触摸屏
主要操作部分- 十字键,A/B/X/Y/L/R键,START/SELECT键
– 触摸屏(使用触摸笔、触摸吊带绳、手指)
– 内置MIC(玩家可使用声音控制进行游戏,如任天狗)
输入输出端- DS卡带插槽,GBA卡带插槽
– 耳机麦克风接口
无线通信机能对应IEEE802.11及任天堂自定特别协议2种
– 通信距离:10米~30米(视周边环境而定)
– 类似GBA可进行一卡多人游戏,内置MIC可使玩家通过互联网进行语音聊天
CPU- ARM 9和ARM 7双CPU
内置最新开发的图形引擎,能表现出良好的游戏画面
声音- 内置立体声喇叭(通过软件可实现环绕效果)
其他机能- 内置真时时钟(可显示日期时间/附带闹铃功能)
– 触摸屏校准
– 内置图文聊天软件,允许最多16台NDS之间进行无线手绘图文通信
自行设定- 切换启动模式
– 使用语言:日语、英语、德语、法语、西班牙语、意大利语
– 玩GBA游戏时可切换显示屏幕
– 用户资料
电源和电池- 内置可充锂电池
– 电池连续使用时间:6~10小时(视使用软件而定)
– 完全充电时间:4小时
– 睡眠模式等电源管理以节省电力
– 附带AC电源(110V)
对应软件- DS专用卡带
– GBA专用卡带
从编程的角度看,这份清单中的一些重点内容还是需要强调一下:
- CPU:
NDS有两个CPU,一个是ARM7,一个是ARM9。也算是异构双CPU了。这两个CPU的制作厂家都不清楚,估计不会是市面上常用的Samsung 2410、4510;Intel的xScale;或者是Freescale的Dragonball系列。我猜测很有可能是任天堂自己License了ARM的IP然后自己做的。ARM7的具体型号是ARM7TDMI;ARM9的具体型号是ARM946E-S。ARM7TDMI没啥么好说的,说说这个ARM946E-S,它的详细资料可以在ARM的网站上找到,地址是:http://www.arm.com/products/CPUs/ARM946E-S.html。ARM9这个CPU有两点我想说一下:第一,它没有MMU,只有一个MPU。第二,它有增强的DSP指令支持。
啥</a>?不知道MMU、MPU是什么?好吧,MMU就是内存保护单元,Windows上的那个虚拟内存总知道了吧,我们就拿Windows说事儿。以前一些Windows扫盲文章上经常说:虚拟内存是操作系统和硬件共同完成的“把戏”。这里所谓的硬件就是指的MMU了,它有两大功能:一个是虚实地址映射,虚实地址映射让你的每一个进程有了4GB的虚拟地址空间(什么,又不知道,就当我没说)。另外一个是内存保护,内存保护让你有了一个稳定的操作系统(什么,你说你的Windows还是不稳定总死机,也成,“非法操作即将关闭”这个对话框总见过吧,这就是MMU内存保护的作用了)。那MPU是什么呢?MPU就是把MMU的虚实映射拿掉,只保留内存保护。没有MMU意味着什么呢?怀有把Windows CE,Pocket PC,Smartphone,Symbian……等操作系统移植到NDS上的想法的哥们,可以想想别的去了。硬件支持不够,干这个是不可能了。啥?你说现在就有个在NDS上跑的Linux?对,现在是有个DSLinux可以在NDS上跑,但是它移植的是ucLinux,这个版本的Linux是专门为没有MMU的CPU设计的。
啥?也不知道DSP是什么?其实我也不是非常非常熟悉。总体来说呢,有DSP就可以快速的处理一些多媒体数据,例如音效和图形,尤其是那个3D啊。这两个东西对于游戏来说可是至关重要。
老任挑CPU可真会挑啊。ARM9系列的CPU,就这么几个型号的没有MMU,其他几乎都有。老任就专挑这个没有MMU的,估计是怕以后BT程序员把一些操作系统移植到NDS上,然后拿来当PDA用吧。(虽然没有MMU,依然有一些BT的程序员开始这么想了…)
双CPU意味着什么呢?在NDS工作的时候,两个CPU都在同时跑程序,如果要给NDS写程序,那也就是传说中的“并行/并发程序设计”了,如果各位计算机的同学在这门课堂上听老师讲的头头是道但是自己依然云里雾里,NDS可是一个锻炼的好平台阿。并发也就意味着两个CPU之间要协同工作,要同步数据。在NDS里面,很多外设都只能由一个CPU来访问,然后把数据传给另外一个CPU,挺有挑战性。
- 外设
NDS上的外设主要有这么几类:
输出设备(两块屏幕,喇叭)
输入设备(键盘 / 触摸屏 / 麦克封)
交互设备(WIFI无线网)
扩展槽(NDS和GBA两个游戏卡的插槽)
虽然与PC比,还是缺不少东西,但是作为一个游戏机,这些外设已经很多很多了。依然有几个东西要插嘴几句:
NDS的上下双屏设计非常独特,这也是DS的名字由来,DS是Dual Screen的意思。下屏是触摸屏,上屏是普通屏。有了触摸屏,对于Coding来说,触摸屏在嵌入式系统,尤其是手机、PDA里面早就见多不怪了,但是对于专用游戏机,触摸屏是第一次出现,好多用触摸屏玩的游戏都很有创意,例如任天狗的爱抚,生化危机的小刀捅僵尸……
NDS的键盘与SFC的布局基本是一样的:上下左右ABXYLR再加上Select和Start。够用是够用了。写程序的时候也不难操作。
麦克风是NDS的另外一大创新,借此促生了一大批语音游戏,想象一下:逆转裁判对着机器大声喊“异议!”来抗议对方律师;炸弹人里对着屏幕喊“嘣!”来引爆炸弹;任天狗里面对着狗狗喊“jump”来让狗狗跳跃……这种类型的游戏,历史上还是第一次有,也算一次革命性创新了。
另外一大创新就是WIFI。学名IEEE802.11,土名无线网。就是游戏机里面带一块无线模块,只要在有无线覆盖的地方,就可以上网跟别人联机打游戏了,当然这东西也可以用来根附近的人联机对战。我就每个晚上在被窝里跟同屋的人连炸弹人连得不亦乐乎。
对Coding来说,上面的这些东西当然不重要。重要的是怎么可以用代码操作这些东西。这也是我们以后会谈到的。
// TODO:Add block chart of peripheral
好了,废话到此结束了,真的结束了,下面就开始写code了,下面就是在游戏机上编写我们熟悉的Hello World了。