停止屏幕刷新 – INT 0x10(视频服务) – 在装配中
我的编程环境是一个MS-DOS模拟器,我在Assembly 16位编程.
我正在使用常规文本模式,我可以在其中打印字符和使用属性. 在屏幕的一部分,我每秒都会画出很多角色,成千上万的角色,这会创造出一个漂亮的动画. 问题是,为了创建动画,首先我必须删除旧的,我基本上打印空间字符大约1000次. (!) 我正在使用视频服务来完成所有输出和动画的事情.所以我的第一个想法是以某种方式阻止屏幕刷新,重新绘制所有内容,并让屏幕继续刷新. 因为这个程序每秒发生很多次,并且必须多次发生,我发现任何其他清洁方法都不是很有帮助. 解决方法
基本的问题是,如果只是瞬间,你向用户展示他们不想看的东西,一个空白的空白屏幕.这是导致闪烁的原因.您可以通过使用单个B
IOS调用(例如,INT 10h AX = 0600h)更快地擦除屏幕来改进这一点,但更好的解决方案是仅向用户显示他们想要看到的内容.
从上到下覆盖所有内容 一种方法是更改??代码,以便在绘制新框架时完全覆盖旧框架.这样就不需要擦除屏幕了.因此,例如,不是在屏幕上的不同位置跳过绘图文本,而是从左上角开始,从左到右,从上到下绘制文本.打印空间以将光标从一个位置移动到另一个位置.假设您只有两个可以使用的功能,一个是将光标移动到屏幕的左上角,另一个是打印字符并使光标前进. 绘制用户无法看到的位置 如果这太难了,你可以使用屏幕外缓冲区来完成你现在正在做的事情.擦除屏幕外缓冲区,在其上绘制文本,然后显示它.这样,用户永远不会看到他们从未打算看到的擦除屏幕.您可以在内存中创建一个屏幕外缓冲区,然后将其复制到屏幕上,也可以在视频内存中的页面之间切换. 绘制到内存中的屏幕外缓冲区 在内存中使用缓冲区意味着您无法使用BIOS功能进行绘制,但根据具体情况,这可能会更加方便.您可以使用正常的内存写入来擦除缓冲区并绘制文本,然后将整个缓冲区复制到屏幕上.基本上这是一种完全覆盖从上到下的所有内容的方法,如上所述. 绘制到非活动视频页面 在视频页面之间翻转可能会让您使用相同的BIOS功能来绘制您现在正在执行的文本.也就是说,假设他们在BH中使用参数来指定要使用的页面.并非所有的BIOS功能都有这个功能,特别是BIOS功能INT 10h,AH = 06h我之前提到过没有.您将使用两个视频页面0和1,并且您需要跟踪当前活动的页面并向用户显示.然后,您将在非活动页面上删除并绘制文本,当您完成后,您将翻页,使非活动页面成为活动页面.要执行此操作,您需要使用INT 10h AX = 05XX,其中XX是要激活的页码. 直接写入视频内存 更先进的技术是直接写入视频内存.回到MS-DOS流行的时候PC很慢,使用BIOS绘制文本对于任何类型的实际动画来说通常都太慢了.相反,大多数做这样事情的应用程序直接写入视频内存,绕过了慢速的BIOS例程.您可以结合使用上述任何技术.例如,您可以在普通存储器中绘制到屏幕外缓冲区,然后使用REP MOVS指令将其复制(“blit”)到视频存储器. 绕过BIOS的缺点是它使你的代码不那么便携.例如,原始IBM PC单色显示适配器(MDA)和彩色图形适配器(CGA)的视频内存位于不同的位置(分别为B000:0000和B800:0000).其他第三方不是100%PC兼容的计算机甚至更奇怪.有些不支持文本模式,BIOS会使用位图图形模式绘制文本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Wix卸载时不删除文件
- Windows server 2008 R2 服务器系统安全防御加固
- windows重启后浏览器无法上网的解决办法
- 如何使用Windows PC调试ios.iphone的webite
- 同一台服务器装MSFTP和Serv-U冲突的解决办法
- microsoft-office – 用于Microsoft Office 2013
- windows – 如何从C代码(Win32)生成RFC1123 Date
- 如何在Microsoft Windows中执行时停止Python关闭
- windows-server-2008 – 如何为单个办公室设置多
- .net – 了解Windows中的AppDomains