微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

配置实模式的IOPMTSS

#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

恢复TSSIOPM

#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的程序决定的。

原文地址:https://www.jb51.cc/react/308522.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐