在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
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
改为:#include "stdio.h"
重新启动DS,进入C:\TURBOC目录,执行编译命令:
tcc a.c
程序将会自动编译并链接为一个a.exe
然后输入a就可以看到效果了,屏幕打印一串字:

Hello, world!

更多详情

用C语言在NDS上编写程序相关推荐

  1. C语言(CED)编写程序,求sum=1*1*1+2*2*2+3*3*3+4*4*4+5*5*5+····+n*n*n

    (请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 编写程序,求sum=1*1*1+2*2*2+3*3*3+ ...

  2. 让Python在Android系统上飞一会儿:第三节 在电脑上编写程序在手机上运行

    本节目录 1. 一些传统的方法 2. 将程序的代码生成二维码图片 3. 使用手机扫描生成的二维码,并将其转化为py脚本 前言 最手机上写脚本是一件每场辛苦的事情,虽然SL4A人性化的为我们提供了API ...

  3. python写手机脚本脱离电脑_让Python在Android系统上飞一会儿:第三节 在电脑上编写程序在手机上运行...

    本节目录 1. 一些传统的方法2. 将程序的代码生成二维码图片3. 使用手机扫描生成的二维码,并将其转化为py脚本 前言 最手机上写脚本是一件每场辛苦的事情,虽然SL4A人性化的为我们提供了API快速 ...

  4. C语言:利用指针编写程序,用梯形法计算给定的定积分

    题目来源:大工慕课 链接 作者:Caleb Sung 题目要求 利用指针编写程序,用梯形法计算下列公式中的定积分: ∫100(x3+12x+1)dx ∫ 0 10 ( x 3 + 1 2 x + 1 ...

  5. C语言用func函数编写程序,C语言程序设计教程第四章练习题解析(1)

    printf("该数是奇数"); } int main() { int num; scanf("%d",&num); func(num); return ...

  6. c语言字符串升序输出,编写程序将已按升序排好的两个字符串a和b中的字符按升序归并到字符串c中,最后输出”abcdefghijklmnpq”。...

    满意答案 sjoest 2014.08.18 采纳率:59%    等级:8 已帮助:663人 (1)char a[]="acegikm";       a数组没有赋予数组大小,所 ...

  7. C语言,利用数组编写程序输入30个数,分别统计正整数,0,负数个数,并求和

    代码如下: #include <stdio.h> #define N 30 int main() {int n[N],sum1=0,sum2=0;int a1 = 0, a2 = 0, a ...

  8. 【C语言】用递归编写程序计算Hermite Polynomials(厄密多项式)

    Hermite Polynomials(厄密多项式)定义: 参考代码: #include <stdio.h>int Hermite(int n,int x){if(n <= 0){r ...

  9. c语言中不定积分如何编写程序,谁能举个例子教我一下C语言的定积分运算

    [C] 纯文本查看 复制代码#include #include void main( ) { float f1(float x); float f2(float x); float f3(float ...

最新文章

  1. CSP 201812-1 小明上学 Python实现+详解
  2. 数控程序中r及q代表什么_邹军:如何利用数学公式编写cnc程序?
  3. OpenGL 实例化 Instancing
  4. 批处理 正则表达式(findstr) 整理
  5. 自学html多久能找到工作,学web前端需要多久? 自学多长时间能找到工作?
  6. 两张图片合成一张_利用溶图技巧把多张图片合成一张奇幻风格图片教程
  7. Pascal数据结构与算法
  8. 转载:Charles 使用过程中遇到问题
  9. Centos7安装字体全过程
  10. 揭秘你所看不见的技术原理 - 广告推荐系统
  11. python培训班靠谱吗-python编程培训 python培训靠谱吗
  12. 尝试“Android应用图标微技巧,8.0系统中应用图标的适配”
  13. solaris9 x86安装D-LINK DFE-530TX网卡
  14. 高清娱乐,高帧率投屏,来试试PeakDo毫米波无线投屏器
  15. scrollView无限滚动,横屏和竖屏
  16. 微信小程序之网易云音乐小案例
  17. EFR32--如何在EFR32BG22透传中添加AT指令控制
  18. 谷歌翻译无法使用/翻译页面无法使用/右键翻译成中文无法使用问题解决方法。
  19. 运放的信号叠加电路与求差电路
  20. 电脑格式化后文件还能恢复吗?好用方法分享

热门文章

  1. 国密浏览器如何完成SM2国密SSL协议协商
  2. 精简 java 库 for LumaQQ
  3. HDU 4808 数学 期望 积分
  4. 半导体器件基础06:发光二极管
  5. @click=handleClick
  6. Spring学习篇底层核心原理解析
  7. 简单工厂和抽象工厂区别
  8. 一种电子病历系统软件框架思想——B/S与C/S混合架构
  9. linux解压gcc,Linux,GCC安装(解压版)
  10. 对ArcGIS主成分分析的解释