中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 请教:老游戏程序设计方法 上一主题 | 下一主题
proof
高级用户





积分 687
发帖 222
注册 2005-8-21
状态 离线
『楼 主』:  请教:老游戏程序设计方法 [已使用 LLM 解释]

象APPLE II 上的“警察捉小偷(淘金者)”、“空手道”
DOS上的“波斯王子”、“战斧”、“西洋封神榜”、“星球大战”、“小蜜蜂”
雅达利上的“运河大战”

那时还没有DirectX 。是如何做到的?
APPLE II 上的源码,全部是6502汇编?还是“高级语言+汇编”
同理,DOS上是用“C语言+ASM”、“Pascal+ASM”?

这类源代码,是否完全依赖设计者的个人风格?关键功能是否晦涩难懂(尤其是汇编部分)?
这几位大神,后来的岁月,是否面向公众讲解过自己的思路和设计代码?
有没有这方面的书籍、教程、源代码拆解分析?(中文版)

LLM 解释

1. 早期游戏的图形/输入/声音实现(无DirectX时代)

  • Apple II:依赖硬件直接操作。图形通过切换文本/图形模式(如低分辨率40x48、高分辨率280x192)、修改显存($2000-$3FFF)实现;输入靠读取键盘寄存器($C000)或摇杆接口;声音通过控制扬声器($C030)产生方波。
  • DOS:基础图形可用BIOS中断(int 10h设置模式、读写像素),但性能不足时直接操作显卡显存(如VGA的A000:0000段);输入用int 21h(键盘)、int 16h(键盘状态)或直接读端口(如PS/2键盘端口60h);声音通过PC扬声器(int 10h或端口61h)、AdLib/ Sound Blaster(厂商提供的汇编接口或第三方库)实现。
  • 雅达利2600:完全依赖硬件寄存器操作,如TIA芯片的图形寄存器(控制精灵、背景)、输入端口(摇杆/按键)和声音寄存器。

2. 开发语言组合

  • Apple II:早期以纯6502汇编为主(如《警察捉小偷》),后期出现BASIC+汇编混合(BASIC负责逻辑,汇编优化关键循环),但汇编占比仍极高——因BASIC解释执行速度无法满足游戏实时性需求。
  • DOS:主流是C+汇编混合(如《波斯王子》用Turbo C写逻辑,汇编优化图形/动画循环),部分用Pascal+汇编(如早期Borland Pascal游戏)。纯汇编多用于对性能要求极致的场景(如街机移植游戏)。
  • 雅达利2600:几乎全为6502汇编——硬件资源(128字节RAM、4KB ROM)极度有限,高级语言无法适配。

3. 源代码的可读性与风格

  • 依赖个人风格,但关键逻辑有共性:核心功能(如碰撞检测、动画帧更新、显存操作)的汇编实现因硬件约束相对固定(如VGA显存的行偏移计算),但整体结构、内存管理(如栈/堆使用)受设计者习惯影响较大。
  • 汇编部分的“晦涩”源于硬件耦合:汇编直接操作寄存器/端口,缺乏高级语言的抽象层,对不熟悉硬件细节的开发者而言难以理解(如Apple II的显存分页机制、DOS下VGA的模式切换时序)。

4. 开发者思路的公开情况

大部分早期游戏开发者未公开设计细节——因商业保密或时代技术分享氛围薄弱。少数例外如《波斯王子》开发者Jordan Mechner公开过设计笔记(含动画帧提取、碰撞逻辑的思考),但未发布完整源码。

5. 中文资料与分析资源

  • 书籍
    • 早期DOS游戏开发:《DOS游戏编程指南》(涵盖C+汇编混合开发、VGA图形、Sound Blaster声音)、《PC游戏编程技巧》(拆解经典游戏的图形/输入实现)。
    • Apple II/雅达利:中文版资料极少,多为爱好者翻译的零散教程(如Apple II汇编入门)。
  • 源码拆解
    • 爱好者社区(如GitHub的retro-game-source类仓库)有经典游戏的逆向工程分析(如《波斯王子》的动画循环、《小蜜蜂》的AI逻辑),但中文系统性分析较少。
    • 论坛(如早期CN-DOS、现在的“复古游戏论坛”)有用户分享的DOS游戏显存操作、声音驱动的拆解案例。

补充:当年的技术限制与误解

早期游戏的“性能优化”常依赖未定义行为(如编译器漏洞、硬件兼容bug),导致部分经验被误认为“玄学”(如调整显存访问顺序提升速度,实际是规避了显卡的等待周期)。这类误解在当年因硬件文档不全、开发者经验有限而普遍存在。



2024-3-2 22:15
查看资料  发短消息  网志   编辑帖子  回复  引用回复
LanE
银牌会员




积分 1833
发帖 648
注册 2002-11-8
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

我记得很久之前我看过一本《C游戏编程从入门到精通》的书,就是针对DOS平台的,是从turbo c自带的图形库到使用int 10h设置图形模式之后再直接操作显卡对应内存地址的方式来进行图形绘制的内容都有,后面还有关于声音的部分,印象中还有对BMP等图形文件格式的解析的讲解,时间太久了,已经记不太清了。

不过今天还有没有学习研究这个的价值就不太好说了。而且书里面的内容是不是很好也不确定,只能说参考着看一看吧。


2024-3-4 11:31
查看资料  发送邮件  发短消息  网志  OICQ (9367907)  编辑帖子  回复  引用回复

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


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



论坛跳转: