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 环境迁移提供了便利。