中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » [推荐]面向TC的开源图形软件开发包~请大家支持下!!
作者:
标题: [推荐]面向TC的开源图形软件开发包~请大家支持下!! 上一主题 | 下一主题
凌晨一点
初级用户




积分 255
发帖 54
注册 2003-10-24
状态 离线
『楼 主』:  [推荐]面向TC的开源图形软件开发包~请大家支持下!! [已使用 LLM 解释]

  NEO SDK是一个面向 Turbo C 的免费开源图形软件开发包。它支持基本绘图、多种格式图形显示、鼠标操作、扩展内存和扩充内存的操作、时钟、音频播放、多种字体的汉字及英文显示等等特性;更激动人心的是,它可以工作于 Turbo C 库函数无法达到的高分辨率下(比如800X600、1024X768甚至1280X1024);而且,它支持8位、15位和16位三种色深!而且拥有不错的处理速度。NEO中的函数调用大部分与Allegro相似,为你今后向Allegro过渡作准备。NEO还开放所有源代码,因为我认为这样更利于让大家发现BUG,利于NEO的成长。希望你能喜欢。

  本开发包为1.1.23(修正)版。它*主要*拥有以下特性:
1、支持320X200,640X400,640X480,800X600,1024X768,1280X1024等各种分辨率;
2、全面支持8位即256色,15位32768色,16位即65536色三种色深模式;
3、齐全的基本的绘图函数,让你轻松绘制象点、线、方、圆等等各种简单的图形;
4、支持多种格式图形的显示,在这一版里,支持 .BMP 及 .ICO 和 .CUR 图形文件的显示。在以后的版本中,还会陆续增加对 .PCX, .GIF, .TGA 等格式的支持;
5、支持鼠标操作,并集成一套功能强大高级鼠标控制函数,譬如能检测双击,还支持使用 .ico, .cur文件作为光标等;
6、拥有一套高级键盘处理函数,用户可以通过篡改键盘中断来使用它们;
7、集成时钟控制函数,主要用于游戏开发,你也可以将鼠标与时钟绑定,便于鼠标的操作;(和Allegro相似);
8、支持扩展内存和扩充内存的操作,便于开发需要大内存的程序;
9、可以显示多种字体的英文和中文,并支持一些文字特效;
10、拥有两套图形显示函数,一套用于常规内存下,特点是兼容性好;另一套用于扩展内存,特点是速度更快但兼容性较差,因为要使用扩展内存必须加载 HIMEM.SYS ,未加载则无法使用第二套函数;
11、支持矩形输出裁剪,让动画等各种显示特效均成为可能;
12、支持类似 graphics.h 中库函数的作图模式,象XOR异或模式;
13、兼容 graphics.h 中的大部分函数以方便将原来使用 graphics.h 的程序移植到NEO中来;
14、强大的错误处理系统,能根据用户的设置决定输出错误信息的方式,譬如直接在屏幕上显示还是输出到错误日志,或者仅仅只用喇叭报一下警;
15、完备的编译开关组,让你有选择的采用所需的部分功能,减少可执行文件的大小,加快编译速度;
16、强大快速的调色板操作函数,你可以使用8位色彩分量长的调色板,甚至可以直接可以将某个256色文件的调色板设置为当前的系统调色板;
17、支持波形文件通过声卡的播放,让你的程序更加绘声绘色!!!
在NEO的后续版本中,还会增加对双缓冲技术的支持,对图形用户接口(GUI) 的支持,对Alpha效果的支持等等,让你感受一个强大的NEO SDK!

<更多的详细内容请阅读docs文件夹中的教程>
zft1.ys168.com
http://neosdk.91i.net

LLM 解释

技术背景与实现机制解析

NEO SDK 是 2000 年代中期中文 DOS 技术社区中极具代表性的图形开发包,由开发者“凌晨一点”开发。它针对 Borland Turbo C (TC) 默认图形库 graphics.h(即 BGI 驱动)在分辨率、色彩深度和性能上的局限性,提供了一套更接近现代图形编程接口的方案。以下是对帖中提及的技术细节及其历史背景的补充说明:

1. 高分辨率与多色深的实现 (VESA VBE)

Turbo C 自带的 BGI 驱动通常仅支持 VGA 模式(如 640x480 16色)。NEO SDK 能够支持 800x600 以上分辨率及 15/16 位高彩色(High Color),是基于 VESA BIOS Extensions (VBE) 标准实现的。

  • 15位 vs 16位色:在 DOS 编程环境下,15 位色通常指 RGB 555 格式(最高位不使用),16 位色指 RGB 565 格式(绿色通道多占用一位)。NEO SDK 在 v1.1.00 修正版中专门对 15 位色进行了兼容性处理,这是因为早期部分显卡(如一些 S3 或 Cirrus Logic 芯片)在处理 VESA 模式时对像素格式定义存在细微差异。
  • 线性帧缓冲 (LFB) 与分页切换 (Bank Switching):由于 DOS 工作在实模式下,1MB 的寻址空间无法一次性映射高分辨率下的整个显存(例如 1024x768x16bpp 需要约 1.5MB 显存)。NEO SDK 默认使用 Bank Switching 技术,通过调用 VESA 0x4F05 中断切换显存窗口。

2. 音频播放与 Windows 环境兼容性

帖中提到的 WAVPLAY.EXE 支持 8 位 WAV 播放,其技术核心是驱动 Sound Blaster (SB) 及其兼容声卡。

  • DMA 传输:在 DOS 下实现无卡顿音频播放,通常需要设置 DMA(直接存储器访问)控制器和 DSP(数字信号处理)芯片。
  • WinXP 兼容性修正:作者在 v1.1.00 修正版中解决了 XP 下的 Bug。这主要是因为 Windows NT 内核(2000/XP)对 I/O 端口和中断(IRQ)有严格的虚拟化保护(VDM 机制)。在纯 DOS 下通过 outp 指令直接操作声卡端口是合法的,但在 XP 的命令提示符下,如果不遵循 NTVDM 的模拟规范,会导致程序崩溃或音频断续。

3. 内存管理:常规、扩展 (XMS) 与 扩充 (EMS)

NEO SDK 提供了两套函数,分别对应常规内存和扩展内存:

  • 常规内存限制:TC 编译的程序通常受限于 640KB 常规内存。在加载大型位图(BMP)或音频数据时,内存极易耗尽。
  • XMS 处理:SDK 通过调用 HIMEM.SYS 提供的中断接口(INT 2Fh/INT 2Fh)来管理扩展内存。使用 XMS 存储图像缓冲区(Buffer)可以显著减轻常规内存压力,但由于实模式下无法直接读写 1MB 以上地址,SDK 必须频繁在 XMS 和常规内存之间进行块拷贝(Global Enable/Disable A20 line 及 Move Block 操作),这解释了为何作者提到“速度快但兼容性较差”。

4. 图形格式与嵌入建议

关于帖子中提到的 BMP 嵌入 EXE 及 JPG 支持:

  • 位图嵌入:在 DOS 开发中,常见做法是将二进制文件通过工具转换成 .obj 文件并作为常量数组链接,或直接将数据追加到 EXE 文件末尾,在运行时通过文件指针定位读取。
  • JPG 与 GIF 权衡:在 80286 或低频 80386 机器上,JPEG 的霍夫曼编码与离散余弦变换(DCT)计算量巨大,难以达到实时显示速度。GIF 采用 LZW 算法,由于当年 LZW 专利尚未在全球范围内完全过期(Unisys 专利在 2003-2004 年间陆续到期),开源库在 2004 年前后对 GIF 的支持通常处于敏感或刚起步阶段。

5. 键盘与时钟中断

  • 键盘中断 (INT 09h):NEO 提供的“高级键盘处理函数”通过篡改(Hook)INT 09h 中断,实现了支持多键同按(解决鬼键问题)的功能,这对于 DOS 游戏开发至关重要。
  • 高精度定时器:利用 PC 机 8253/8254 定时计数器芯片(INT 08h/INT 1Ch),将默认的 18.2Hz(约 55ms 精度)提升到 1ms 级别,从而实现平滑的动画逻辑。

NEO SDK 的设计思路深度参考了当时著名的跨平台图形库 Allegro(由 Shawn Hargreaves 开发),这种 API 的相似性为当时 DOS 开发者向 Windows 或 Linux 环境迁移提供了便利。



2004-12-9 00:00
查看资料  发送邮件  发短消息  网志  OICQ (285749694)  编辑帖子  回复  引用回复
dos_fan
初级用户




积分 152
发帖 10
注册 2004-2-24
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

看起来功能接口做得挺多的,支持!!


2004-12-11 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
凌晨一点
初级用户




积分 255
发帖 54
注册 2003-10-24
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

已经更新为V1.0.37 Beta:
http://ckerhome.91i.net/neo_sdk.exe


2004-12-11 00:00
查看资料  发送邮件  发短消息  网志  OICQ (285749694)  编辑帖子  回复  引用回复
凌晨一点
初级用户




积分 255
发帖 54
注册 2003-10-24
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

http://neosdk.91i.net/product/neo_wave.exe
http://ckerhome.91i.net/neo_wave.exe

上面是NEO的音频播放部分公测程序1.0,下载解压后执行WAVPLAY.EXE依照提示按下任意键就可能听到WIN ME的启动音乐!发上来的目的是想让大家帮忙测试看看兼容性如何,以方便我的下一步开发。使用后麻烦你抽空将结果填写到下面的反馈表,谢谢:

是否能听到音乐:____
你使用的操作系统:____
声卡的型号:____ (不清楚就写是不是集成声卡)
主板的型号:____ (若是集成声卡就最好能写一下)

填写完后你可以直接来论坛回复;也可以到NEO资源站的留言簿http://gb.dxxo.com/index.asp?user=neosdk中回复;当然,也可以用E-MAIL发给我:ckerhome@yahoo.com.cn
再次谢谢你的参与!由于只是一个公试程序,WAVPLAY.EXE只能播放小于64KB的8位WAV文件^_^
怎么样? Turbo C播放音乐的感觉还不错吧?预计在NEO V1.1.00正式版中,音频播放例程会被加进去!到时候,你就可以在你在TC程序中加入音效了~今天是2004年12月12日,公测时间到12月30日截止,因为1月份就要准备发布NEO V1.1.00正式版了,呵呵~

更多详细情况请关注NEO资源站:http://neosdk.91i.net


2004-12-12 00:00
查看资料  发送邮件  发短消息  网志  OICQ (285749694)  编辑帖子  回复  引用回复
jiaking
中级用户




积分 223
发帖 52
注册 2004-3-7
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

好东西啊。但我在虚拟机里运行例子好像没反应。??


2004-12-13 00:00
查看资料  发送邮件  发短消息  网志  OICQ (53379921)  编辑帖子  回复  引用回复
jiaking
中级用户




积分 223
发帖 52
注册 2004-3-7
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

好东西啊。但我在虚拟机里运行例子好像没反应。??ex11可以,哈哈,美妙!!


2004-12-13 00:00
查看资料  发送邮件  发短消息  网志  OICQ (53379921)  编辑帖子  回复  引用回复
凌晨一点
初级用户




积分 255
发帖 54
注册 2003-10-24
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

虚拟机?请问你使用的是什么操作系统呢?


2004-12-13 00:00
查看资料  发送邮件  发短消息  网志  OICQ (285749694)  编辑帖子  回复  引用回复
jiaking
中级用户




积分 223
发帖 52
注册 2004-3-7
状态 离线
『第 8 楼』:   使用 LLM 解释/回答一下

win2k+virtual PC这个开发包很不错!!我准备用到我的程序上。但能不能把bmp文件嵌到执行文件里呢?这样就“集成度”高些,免得让人家替换掉。还有,能显示JPG图了吗?BMP太大了。支持您!!期望下一版本。有要测试的请发给我:zhuhuijia@126.com。谢谢


2004-12-17 00:00
查看资料  发送邮件  发短消息  网志  OICQ (53379921)  编辑帖子  回复  引用回复
凌晨一点
初级用户




积分 255
发帖 54
注册 2003-10-24
状态 离线
『第 9 楼』:   使用 LLM 解释/回答一下

以下是引用jiaking在2004-12-17 1:39:28的发言:

win2k+virtual PC
这个开发包很不错!!我准备用到我的程序上。但能不能把bmp文件嵌到执行文件里呢?这样就“集成度”高些,免得让人家替换掉。还有,能显示JPG图了吗?BMP太大了。
支持您!!期望下一版本。有要测试的请发给我:zhuhuijia@126.com。谢谢

有道理啊,把位图整合到执行文件——主意不错~
JPG文件解码过程较复杂,以致会影响速度。你看PCX和GIF格式的怎么样?


2004-12-17 00:00
查看资料  发送邮件  发短消息  网志  OICQ (285749694)  编辑帖子  回复  引用回复
jiaking
中级用户




积分 223
发帖 52
注册 2004-3-7
状态 离线
『第 10 楼』:   使用 LLM 解释/回答一下

GIF能动,肯定好。但只能支持到256色,美中不足。最好能支持各种图片格式,混合着用,这样既又能真彩又会动,您说呢?你能行的。另外一种矢量图DXF格式我觉得也很有必要支持,个头小、易实现,在工业、CAD设计方面很多应用。期待你的下一精彩!!


2004-12-18 00:00
查看资料  发送邮件  发短消息  网志  OICQ (53379921)  编辑帖子  回复  引用回复
凌晨一点
初级用户




积分 255
发帖 54
注册 2003-10-24
状态 离线
『第 11 楼』:   使用 LLM 解释/回答一下

呵呵
谢谢你的建议,我会好好考虑的^_^


2004-12-20 00:00
查看资料  发送邮件  发短消息  网志  OICQ (285749694)  编辑帖子  回复  引用回复
jiaking
中级用户




积分 223
发帖 52
注册 2004-3-7
状态 离线
『第 12 楼』:   使用 LLM 解释/回答一下

楼主开发得怎样了?支持gif了吗?


2004-12-26 00:00
查看资料  发送邮件  发短消息  网志  OICQ (53379921)  编辑帖子  回复  引用回复
凌晨一点
初级用户




积分 255
发帖 54
注册 2003-10-24
状态 离线
『第 13 楼』:   使用 LLM 解释/回答一下

GIF格式已经有眉目了,现在主要是实现了音频播放功能:NEO V1.1.00 正式版发布!!新特性如下:
增加音频播放例程,可以用来播放.wav波形文件!
增加了加载时钟例程后的精确定时函数neo_clock()
修改了一些小错误
NEO教程升级为1.25版
增加了几个实例
下载地址:http://neosdk.91i.net/product/neo_sdk.exe
最新动态请关注NEO资源站:http://neosdk.91i.net


2004-12-26 00:00
查看资料  发送邮件  发短消息  网志  OICQ (285749694)  编辑帖子  回复  引用回复
凌晨一点
初级用户




积分 255
发帖 54
注册 2003-10-24
状态 离线
『第 14 楼』:   使用 LLM 解释/回答一下

NEO DOS图形编程群已经开通:7713568
欢迎各位对图形、游戏编程技术有兴趣的同道加入一起交流讨论!
还有大量的共享资源哦!


2004-12-30 00:00
查看资料  发送邮件  发短消息  网志  OICQ (285749694)  编辑帖子  回复  引用回复
拉菲尔
初级用户




积分 208
发帖 41
注册 2004-3-25
状态 离线
『第 15 楼』:   使用 LLM 解释/回答一下

支持一下,楼主加油!


2005-1-1 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: