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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值