mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 20:39:01 +00:00
252 lines
No EOL
6.5 KiB
C#
252 lines
No EOL
6.5 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace Cosmos.Kernel
|
|
{
|
|
[StructLayout(LayoutKind.Explicit)]
|
|
public struct PageDirectoryEntry
|
|
{
|
|
[FieldOffset(0)]
|
|
public uint PDEValue;
|
|
|
|
public uint PageTableAddress
|
|
{
|
|
get
|
|
{
|
|
return (PDEValue & ((uint)0xFFFFF000));
|
|
}
|
|
set
|
|
{
|
|
PDEValue = ((value & ((uint)0xFFFFF000)) | (PDEValue & ((uint)0x00000FFF)));
|
|
}
|
|
}
|
|
public bool Available1
|
|
{
|
|
get
|
|
{
|
|
return ((PDEValue & ((uint)0x400)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PDEValue = (value ? (PDEValue | ((uint)0x400)) : (PDEValue & ((uint)0xFFFFFBFF)));
|
|
}
|
|
}
|
|
public bool Available0
|
|
{
|
|
get
|
|
{
|
|
return ((PDEValue & ((uint)0x200)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PDEValue = (value ? (PDEValue | ((uint)0x200)) : (PDEValue & ((uint)0xFFFFFDFF)));
|
|
}
|
|
}
|
|
public bool LargePages
|
|
{
|
|
get
|
|
{
|
|
return ((PDEValue & ((uint)0x100)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PDEValue = (value ? (PDEValue | ((uint)0x100)) : (PDEValue & ((uint)0xFFFFFEFF)));
|
|
}
|
|
}
|
|
public bool Accessed
|
|
{
|
|
get
|
|
{
|
|
return ((PDEValue & ((uint)0x20)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PDEValue = (value ? (PDEValue | ((uint)0x20)) : (PDEValue & ((uint)0xFFFFFFDF)));
|
|
}
|
|
}
|
|
public bool CacheDisabled
|
|
{
|
|
get
|
|
{
|
|
return ((PDEValue & ((uint)0x10)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PDEValue = (value ? (PDEValue | ((uint)0x10)) : (PDEValue & ((uint)0xFFFFFFEF)));
|
|
}
|
|
}
|
|
public bool WriteThrough
|
|
{
|
|
get
|
|
{
|
|
return ((PDEValue & ((uint)0x8)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PDEValue = (value ? (PDEValue | ((uint)0x8)) : (PDEValue & ((uint)0xFFFFFFF8)));
|
|
}
|
|
}
|
|
public bool UserAccess
|
|
{
|
|
get
|
|
{
|
|
return ((PDEValue & ((uint)0x4)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PDEValue = (value ? (PDEValue | ((uint)0x4)) : (PDEValue & ((uint)0xFFFFFFFB)));
|
|
}
|
|
}
|
|
public bool ReadOnly
|
|
{
|
|
get
|
|
{
|
|
return ((PDEValue & ((uint)0x2)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PDEValue = (value ? (PDEValue | ((uint)0x2)) : (PDEValue & ((uint)0xFFFFFFFD)));
|
|
}
|
|
}
|
|
public bool Present
|
|
{
|
|
get
|
|
{
|
|
return ((PDEValue & ((uint)0x1)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PDEValue = (value ? (PDEValue | ((uint)0x1)) : (PDEValue & ((uint)0xFFFFFFFE)));
|
|
}
|
|
}
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Explicit)]
|
|
public struct PageTableEntry
|
|
{
|
|
[FieldOffset(0)]
|
|
public uint PTEValue;
|
|
|
|
public uint PhysicalAddress
|
|
{
|
|
get
|
|
{
|
|
return (PTEValue & ((uint)0xFFFFF000));
|
|
}
|
|
set
|
|
{
|
|
PTEValue = ((value & ((uint)0xFFFFF000)) | (PTEValue & ((uint)0x00000FFF)));
|
|
}
|
|
}
|
|
public bool Available1
|
|
{
|
|
get
|
|
{
|
|
return ((PTEValue & ((uint)0x400)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PTEValue = (value ? (PTEValue | ((uint)0x400)) : (PTEValue & ((uint)0xFFFFFBFF)));
|
|
}
|
|
}
|
|
public bool Available0
|
|
{
|
|
get
|
|
{
|
|
return ((PTEValue & ((uint)0x200)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PTEValue = (value ? (PTEValue | ((uint)0x200)) : (PTEValue & ((uint)0xFFFFFDFF)));
|
|
}
|
|
}
|
|
public bool Global
|
|
{
|
|
get
|
|
{
|
|
return ((PTEValue & ((uint)0x100)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PTEValue = (value ? (PTEValue | ((uint)0x100)) : (PTEValue & ((uint)0xFFFFFEFF)));
|
|
}
|
|
}
|
|
public bool Dirty
|
|
{
|
|
get
|
|
{
|
|
return ((PTEValue & ((uint)0x40)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PTEValue = (value ? (PTEValue | ((uint)0x40)) : (PTEValue & ((uint)0xFFFFFFBF)));
|
|
}
|
|
}
|
|
public bool Accessed
|
|
{
|
|
get
|
|
{
|
|
return ((PTEValue & ((uint)0x20)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PTEValue = (value ? (PTEValue | ((uint)0x20)) : (PTEValue & ((uint)0xFFFFFFDF)));
|
|
}
|
|
}
|
|
public bool CacheDisabled
|
|
{
|
|
get
|
|
{
|
|
return ((PTEValue & ((uint)0x10)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PTEValue = (value ? (PTEValue | ((uint)0x10)) : (PTEValue & ((uint)0xFFFFFFEF)));
|
|
}
|
|
}
|
|
public bool WriteThrough
|
|
{
|
|
get
|
|
{
|
|
return ((PTEValue & ((uint)0x8)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PTEValue = (value ? (PTEValue | ((uint)0x8)) : (PTEValue & ((uint)0xFFFFFFF8)));
|
|
}
|
|
}
|
|
public bool UserAccess
|
|
{
|
|
get
|
|
{
|
|
return ((PTEValue & ((uint)0x4)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PTEValue = (value ? (PTEValue | ((uint)0x4)) : (PTEValue & ((uint)0xFFFFFFFB)));
|
|
}
|
|
}
|
|
public bool ReadOnly
|
|
{
|
|
get
|
|
{
|
|
return ((PTEValue & ((uint)0x2)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PTEValue = (value ? (PTEValue | ((uint)0x2)) : (PTEValue & ((uint)0xFFFFFFFD)));
|
|
}
|
|
}
|
|
public bool Present
|
|
{
|
|
get
|
|
{
|
|
return ((PTEValue & ((uint)0x1)) != ((uint)0));
|
|
}
|
|
set
|
|
{
|
|
PTEValue = (value ? (PTEValue | ((uint)0x1)) : (PTEValue & ((uint)0xFFFFFFFE)));
|
|
}
|
|
}
|
|
}
|
|
} |