现在的位置: 首页 > 综合 > 正文

用C语言在NDS上编写程序

2013年09月13日 ⁄ 综合 ⁄ 共 2454字 ⁄ 字号 评论关闭

在DS上进行开发是我一直的梦想,虽然有DSBasic, DSLua等解释器,但是总感觉很别扭,而且没有更多的语言支持。昨天偶然发现了一个DS上的x86虚拟机,我想在这上面测试一下。

我们需要以下组件:

**DSx86**
在DS上模拟x86环境的虚拟机
地址:http://dsx86.patrickaalto.com/,目前最新版本0.14Beta
需要的文件有:
DSx86.nds --- 引导文件
DSx86.ini --- 配置文件
DSx86Cfg --- 配置设置工具
把下载的文件解压到/data/dsx86/就行了。
但是这只是x86虚拟机,我们还需要一个操作系统。(往下看)

**4DOS**
命令提示符外壳
地址:ftp://jpsoft.com/4dos/files/,目前最新版本7.2
这里需要的文件只有:
4dos.com
下载到/data/dsx86/4dos/, /data/dsx86/, /4dos/中任意一个文件夹都可以,其他的几个辅助文件也可以一并下载。

**Vim**
文本编辑工具
地址:http://www.vim.org/download.php#pc
我们需要的部分是:
vim71d16.zip --- 16位dos下的可执行文件
vim72rt.zip --- 所有版本vim所需要的运行时包,包括了文档,语法还有其他的配置文件
把上面的文件下载后解压到/vim/vim71/进行一些配置来时编辑器更加符合程序员的使用,在/vim/下创建_vimrc文件,内容为下面的语句
syntax enable
set smartindent
set tabstop=4
set shiftwidth=4
set nu!
这里面已经包括了设置语法高亮,自动缩进,行号等功能了。

**DJGPP**
一个GNU在DOS下的编译系统实现
地址:http://www.delorie.com/djgpp/
我们可以在他给出的ftp中找到需要的文件:
gccXXXb.zip --- GNU C编译器
gppXXXb.zip --- GNU C++编译器
bnuXXXb.zip --- 链接库
djdevXXXb.zip --- 库,头文件等
csdpmiXb.zip --- DOS 保护模式方法接口
makXXXb.zip -- GNU Make工具
注:以上的X替换为你能找到的最新版本。
把下载到的文件都解压到/djgpp/下

到此,我们已经完成了虚拟机,操作系统,编译环境,代码编辑工具的搭建。
现在我们来开发在DS上的第一个项目:Hello, World!

打开DS,从你烧录卡的引导器中找到/data/dsx86/DSx86.nds并启动,屏幕将会出现如下画面:
***** DSx86 v0.14 by Patrick Aalto *****

BIOS date: Jun 8 2010
Initializing llibDAT: Success!

/DATADSX86/DSX86.INI loaded!
Starting command shell:
Try C:/DATA/DSX86/4DOS/4DOS.COM ...OK!

4DOS EMS swapping initialized (240K)

4DOS 7.50 DOS5.00
Copyright 1988-2004 Rex Conn & JP Software Inc. All Rights Reserved
C:/>_

这说明4DOS已经载入成功,可以开始运行DOS程序了。
进入Vim目录,并创建a.c源文件:
C:/>cd vim/vim71
C:/vim/vim71>vim a.c
按I进入插入模式,输入程序:
#include <stdio.h>
int main()
{
  printf("Hello, world!/n");
  return 0;
}
按ESC返回普通模式,用ZZ命令保存并退出。

要得到可执行文件必须先编译,我们首先要设置编译器路径,在命令提示符下输入以下命令:
set PATH=C:/DJGPP/BIN;%PATH%
set DJGPP=c:/djgpp/djgpp.env
现在可以开始编译了,使用命令:
gcc -o a.c

这时屏幕提示错误并输出一堆乱码:
80386 required.

好,我们的工作到这里暂时告一段落,首先说明一下,为什么我们没有得到可执行文件。
根据DSx86主页上作者的说明,目前DSx86只能模拟到没有保护模式的80286,也就差不多等于80186。而我们的编译环境需要80386,当然就不能

进行编译了。
所以,如果我们需要用DJGPP完成开头提出的目标,比如等待作者继续更新DSx86,使它支持80386,或者自己重新编译gcc,让它支持80186实模

式。

没有合适的自由软件或免费软件,我们只能用商业软件代替了。一款古老的编译器,Turbo C将会帮助我们完成接下来的工作。

**Turbo C**
Borland的古老的C编译器,我们需要的是2.0版,虽然同时代同系列的最新版本是3.0,但是经测试,TC3.0需要的处理器最低为80386。
安装TC2.0后在PC上运行TC.EXE,依次展开Options-Directories菜单,将里面的路径设置为正确的,如:
Include directories: C:/TURBOC2/INCLUDE
Library directories: C:/TURBOC2/LIB
Output directories:
Turbo C directories: C:/TURBOC2
Pick file name:
设置完毕后使用Options-Save options命令保存刚才的设置。
并且在TC2目录下建立刚才的a.c文件。因为TC2年代久远,当时的C标准与现在不同,所以我们的程序需要修改一下才能运行。
把第一行的:#include <stdio.h>
改为:#include "stdio.h"
重新启动DS,进入C:/TURBOC目录,执行编译命令:
tcc a.c
程序将会自动编译并链接为一个a.exe
然后输入a就可以看到效果了,屏幕打印一串字:

Hello, world!

到此,我们已经成功地在DS上编写C程序并编译运行。

抱歉!评论已关闭.