SaveVid: push es
mov bx,offset VideoBuffer
mov ax,1c01h ;save Video Config
mov cx,0007h
int 10h
pop es
ret
;------------------------------------------------------------------------------
RestoreVid:
push es
mov bx,offset VideoBuffer
mov ax,1c02h ;Restore Video config
mov cx,0007h
int 10h
pop es
ret
因此我觉得,还是第一方案较好一点,其逻辑本身更简练。第一方案的缺点是需要付出一定的不兼容性的代价。第二方案则需要增加一个 --resume 参数,我感觉还是稍微有点别扭,虽然也可接受。一般情况下,我们尽量不制造不兼容性。但在特殊的情况下,也可以有不兼容性的。我们曾经有过不兼容性,比如,map 参数 --e820cycles 就是不兼容参数。再比如,为了让中断向量恢复得全面一点,我们不再支持那些严重破坏中断向量表的驱动程序和 TSR。最老的 grub.exe 版本是支持所有的 DOS 的,也支持所有的驱动程序和 TSR,因为我们从来不恢复中断向量表。后来我们要探测恢复中断向量表了,所以,不再支持那些有毛病的驱动程序和 TSR 了。因此,可以认为我们引入了不兼容。还有,采用 VBE 图形模式以及新的字库和 font 命令,取消 chinese 版本,用国际版替代,这也是制造不兼容。以上举例,是为了说明,兼容性也并非在任何情况下都要保持的。我们尽量保持兼容性,但也不应该束缚手脚,而把兼容性当作清规戒律。