3edd751ex76cfd0d82db1&690.jpg
3edd751ex7247fb64d523&690.jpg
这是制作完的光盘在机器上实际启动的画面,屏幕顶上还有其他非预期的提示信息在,直接造成了最后的显示信息靠在屏幕底部的囧样。于是有了美化这个想法,增加一个清屏效果。BIOS的屏显调用的是INT10中断,于是Google下相关的信息,在http://www.uv.tietgen.dk/staff/mlha/pc/Prog/ASM/INT/INT10.htm找到想要的内容
3edd751ex76cfd3306ff7&690.jpg
6:scroll up (clear screen) 就是我想要的效果,继续
3edd751ex7247fba6459b&690.jpg
清屏效果寄存器的设置,转化成堆栈代码

push       ax
push       bx
push       cx
push       dx
mov        ah,7
mov        al,0
mov        cx,0
mov        dx,0184F

mov        bh,7
int         10

pop        dx
pop        cx
pop        bx
pop        ax

有了理论基础,就开始动手修改。就在
3edd751ex76cfd5bdeeca&690.jpg,这句显示之前加清屏效果。这句就位于BOOTFIX.BIN文件中。在3edd751ex76cfd96c07d0&690.jpg找到调用3edd751ex76cfd5bdeeca&690.jpg相关的代码,修改CALL 129语句跳转到新增的代码段,结果一开始显示倒是和预期的效果一样,可是一倒计时,3edd751ex76cfd5bdeeca&690.jpg就没了。后来分析了下,随着时间的推移3edd751ex76cfd5bdeeca&690.jpg后面的“.”号依次增加,估计这条语句的调用应该是多次的,这样复杂度似乎是增加了些,对于像我这样急性子的人来说,当然要走捷径绝不绕远路。换个思维方式,干嘛不在BOOTFIX.BIN载入就来个清屏动作。于是分析文件的头部信息
3edd751ex76cfdad16976&690.jpg
,前面都是进栈操作,INT 13开始调用BIOS中断处理,于是把前一句“MOV dx,80”改成“call 3C9 ”,调用处理新增加的清屏代码,当然“MOV dx,80”还是得记得补上才行。由于清屏会使光标回到屏幕的最左上方(0,0),这样文字顶在屏幕边上也不好看,于是有查找了相关INT 10的光标位置设置
3edd751ex76cfdc14cff9&690.jpg
这样一来就完美了。

最终新增的清屏代码如下
3edd751ex76cfe1cecf3d&690.jpg
OK,做成ISO,用虚拟机测试下均正常。接下来用可重复擦写CDRW刻成光盘,放到实机上测试下
3edd751ex76cfe369943f&690.jpg
3edd751ex76cfe4bd0ed0&690.jpg
很完美和我预期的效果完全一致,屏幕上下方均保留一行,和微软原版安装光盘启动效果保持一致

标签: none

添加新评论