reactos操作系统实现(25)
在操作系统里,有时候需要从保护模式转换为实模式来调用BIOS一些功能。因此在硬件抽象层里,就需要提供这样的函数支持,这个函数代码如下: #001 BOOLEAN #002 NTAPI #003 HalpBiosDisplayReset(VOID) #004 { #005 ULONG Flags = 0; #006
保存CPU所有状态寄存器,然后关闭中断。 #007 /* Disable interrupts */ #008 Ke386SaveFlags(Flags); #009 _disable(); #010
映射内存到虚拟8086的实模式。 #011 /* Map memory available to the V8086 real-mode code */ #012 HalpMapRealModeMemory(); #013
切换到实模式的中断处理。 #014 /* Use special invalid opcode and GPF trap handlers */ #015 HalpSwitchToRealModeTrapHandlers(); #016
配置实模式的IOPM和TSS。 #017 /* Configure the IOPM and TSS */ #018 HalpSetupRealModeIoPermissionsAndTask(); #019
现在开始在实模式里调用BIOS的功能。 #020 /* Now jump to real mode */ #021 HalpBiosCall(); #022
恢复中断处理函数。 #023 /* Restore kernel trap handlers */ #024 HalpRestoreTrapHandlers(); #025
恢复TSS和IOPM。 #026 /* Restore TSS and IOPM */ #027 HalpRestoreIoPermissionsAndTask(); #028
恢复低端内存。 #029 /* Restore low memory mapping */ #030 HalpUnmapRealModeMemory(); #031
恢复保存的状态寄存器。 #032 /* Restore interrupts if they were previously enabled */ #033 Ke386RestoreFlags(Flags); #034 return TRUE; #035 }
上面函数是保存了现场状态后,就切换到虚拟8086实模式,这样才可以调用BIOS功能,这是由于在保护模式下不能运行BIOS的程序决定的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |