中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 07:15
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » 祥解:无3方实现任意方向滚屏
可打印版本  1,227 / 3
第1楼 sl543001 发表于 2010-02-08 17:57
中级用户 发帖 225 积分 499
祥解:无3方实现任意方向滚屏
祥解:无3方实现任意方向滚屏

无需3方,利用DEBUG就能实现任意方向滚屏,配合SYBC的彩色字符输出,可以实现千变万化的绚丽效果。
http://www.cn-dos.net/forum/viewthread.php?tid=50188&fpage=1
目前使用这个技术组合成功实现了全彩的,贪吃蛇打飞机等脚本游戏示例代码。

考虑到大多数人完全搞不懂俺发出来的示例代码,所以在此加上注释详解一下代码:
在此讲解一下关键代码:

====sybc的部分====
SET U=;A80;DB 2D 0D "11230fcS$f6Y$f1B$f9N $f3dll $f9演示脚本 0.01" 0D;;RCX;F0;G;Q
(ECHO.%SYBCOM:;=&ECHO.DW %&ECHO.%U:;=&ECHO.%)|DEBUG>NUL
首先把参数写入80位置,从而可以不生成sybc.com文件的情况下运行有参数的sybc.com
其中2D是参数长度的16进制值
引号内的内容是实际的参数
当然我们还需要提前载入sybc才行

====滚屏的部分====
(echo m b800:%X% fa0 b800:%Y%&echo q)|debug >nul

运行了16位子程序了以后,系统仍然保留在25*80@16的显示模式,没有进度条
在这个模式下,cmd窗口内的全部数据保存在B800:0000-B800:0FA0
保存方式是:一个字节的字母,然后是一个字节的颜色信息
其中如果是中文,则拆分为2个单字节分别加上颜色信息


最后就看到类似 31 07 32 07 33 07 ......
注意07的意义和color一样哦
一行80个字节算上颜色信息就是160个字节
所以从A0开始是第2行的信息

也就是说我们把0000的开始的所有数据挪到0002意味着全屏右移1字节
把0000的开始的所有数据挪到00A0意味着全屏向下移动1行
把0000的开始的所有数据挪到00A2意味着全屏向右下移动
当然你还可以反过来,或是只移动一部分内容
最后注意移动是用复制的方式,旧内容会被保留

了解了原理,移动的代码就简单了
b800:%X% 是要移动的内容的开头
fa0 是要移动的内容的结尾
b800:%Y% 是移动后的位置
注意,所有数据时16进制,开头的0可以省略
例如b800:00A0 可以省略为b800:A0




[ Last edited by sl543001 on 2010-2-9 at 14:57 ]
第2楼 qwd 发表于 2010-02-08 18:26
初级用户 发帖 56 积分 161
debug 好多人不知道,我也是刚刚接接触!知道是b800写屏,知道一点一点皮毛。做了那个纯批恢复16进制图片。不过还是有空向你多学习一下吧!
第3楼 sl543001 发表于 2010-02-09 14:59
中级用户 发帖 225 积分 499
debug可是好东西,利用它可以进行16进制编辑,以及16进制正反汇编,运行程序.
理论上可以吧各种脚本单文件化,把记录配置文件和外部命令全部集成到单个脚本中!
第4楼 sl543001 发表于 2010-02-23 21:32
中级用户 发帖 225 积分 499
俺正在研究利用DEBUG编写一个可以移动屏幕中任意方形区域的内容到另一区域的子程序,然后添加到sybn dll中.
到时候大家就可以用类似 "call sd y 5 5 10 10 5 5"的命令直接移动屏幕的一部分了,
当然还可以吧这个子程序嵌入大家自己的脚本,然后使用"call :syby 5 5 10 10 5 5"
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023