XP启动引导文件多重启动菜单之BOOTFIX.BIN美化
这是制作完的光盘在机器上实际启动的画面,屏幕顶上还有其他非预期的提示信息在,直接造成了最后的显示信息靠在屏幕底部的囧样。于是有了美化这个想法,增加一个清屏效果。BIOS的屏显调用的是INT10中断,于是Google下相关的信息,在http://www.uv.tietgen.dk/staff/mlha/pc/Prog/ASM/INT/INT10.htm找到想要的内容
6:scroll up (clear screen) 就是我想要的效果,继续
清屏效果寄存器的设置,转化成堆栈代码
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
有了理论基础,就开始动手修改。就在
,这句显示之前加清屏效果。这句就位于BOOTFIX.BIN文件中。在找到调用相关的代码,修改CALL 129语句跳转到新增的代码段,结果一开始显示倒是和预期的效果一样,可是一倒计时,就没了。后来分析了下,随着时间的推移后面的“.”号依次增加,估计这条语句的调用应该是多次的,这样复杂度似乎是增加了些,对于像我这样急性子的人来说,当然要走捷径绝不绕远路。换个思维方式,干嘛不在BOOTFIX.BIN载入就来个清屏动作。于是分析文件的头部信息
,前面都是进栈操作,INT 13开始调用BIOS中断处理,于是把前一句“MOV dx,80”改成“call 3C9 ”,调用处理新增加的清屏代码,当然“MOV dx,80”还是得记得补上才行。由于清屏会使光标回到屏幕的最左上方(0,0),这样文字顶在屏幕边上也不好看,于是有查找了相关INT 10的光标位置设置
这样一来就完美了。
最终新增的清屏代码如下
OK,做成ISO,用虚拟机测试下均正常。接下来用可重复擦写CDRW刻成光盘,放到实机上测试下
很完美和我预期的效果完全一致,屏幕上下方均保留一行,和微软原版安装光盘启动效果保持一致