0768d01522
new experimental stripped-down version of plex86, which is now a user-code-only VM. I ripped out all the fancy stuff in plex86, such that under that right conditions, user-code (protection level 3) can run at near native speeds inside the plex86 VM. The general idea is that bochs emulates all the initial real-mode code, and guest kernel code (protection level 0). When it senses the right conditions (like the context switches to user-code), a shim is called to execute the guest inside the plex86 VM. All guest-generated faults/exceptions are then forwarded back to bochs to be handled in the emulator. Actually, I'm not yet adding the mods to the bochs code (other than the shim code which is in a separate file), until I hear that we're back in a more development mode with bochs after the 2.0 release. The plex86 subdirectory is really a separate project. It's just more convenient to co-develop it with bochs for now. Both projects are currently LGPL, but each should be taken to be a separate project, and have their own license file. Plex86 (it's only a kernel driver now) could ultimately be used with other projects, as it's modular. I talked with Bryce, and we both agreed it's OK to keep plex86 as a subdir in bochs for now.
79 lines
2.0 KiB
C
79 lines
2.0 KiB
C
/*
|
|
* plex86: run multiple x86 operating systems concurrently
|
|
* Copyright (C) 1999-2003 Kevin P. Lawton
|
|
*
|
|
* eflags.h: Bitfields of EFLAGS registers
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef __EFLAGS_H__
|
|
#define __EFLAGS_H__
|
|
|
|
/*
|
|
* the eflags field looks like this:
|
|
* bit: 0 1 2 3 4 5 6 7 8 9 A B C/D E F 10 11 12 13 14 15 16
|
|
* flg: CF 1 PF 0 AF 0 ZF SF TF IF DF OF IOPL NT 0 RF VM AC VIF VIP ID 0
|
|
*/
|
|
|
|
#define FLG_CF (1<<0)
|
|
#define FLG_PF (1<<2)
|
|
#define FLG_AF (1<<4)
|
|
#define FLG_ZF (1<<6)
|
|
#define FLG_SF (1<<7)
|
|
#define FLG_TF (1<<8)
|
|
#define FLG_IF (1<<9)
|
|
#define FLG_DF (1<<10)
|
|
#define FLG_OF (1<<11)
|
|
#define FLG_IOPL (3<<12)
|
|
#define FLG_NT (1<<14)
|
|
#define FLG_RF (1<<16)
|
|
#define FLG_VM (1<<17)
|
|
#define FLG_AC (1<<18)
|
|
#define FLG_VIF (1<<19)
|
|
#define FLG_VIP (1<<20)
|
|
#define FLG_ID (1<<21)
|
|
|
|
|
|
typedef union {
|
|
struct {
|
|
Bit8u cf:1;
|
|
Bit8u R1:1;
|
|
Bit8u pf:1;
|
|
Bit8u R3:1;
|
|
Bit8u af:1;
|
|
Bit8u R5:1;
|
|
Bit8u zf:1;
|
|
Bit8u sf:1;
|
|
Bit8u tf:1;
|
|
Bit8u if_:1;
|
|
Bit8u df:1;
|
|
Bit8u of:1;
|
|
Bit8u iopl:2;
|
|
Bit8u nt:1;
|
|
Bit8u R15:1;
|
|
Bit8u rf:1;
|
|
Bit8u vm:1;
|
|
Bit8u ac:1;
|
|
Bit8u vif:1;
|
|
Bit8u vip:1;
|
|
Bit8u id:1;
|
|
Bit16u R31_22:10;
|
|
} __attribute__ ((packed)) fields;
|
|
Bit32u raw;
|
|
} __attribute__ ((packed)) eflags_t;
|
|
|
|
#endif /* __EFLAGS_H__ */
|