| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #ifndef VDOS_PAGING_H
- #define VDOS_PAGING_H
- #ifndef VDOS_H
- #include "vDos.h"
- #endif
- #include "mem.h"
- #define MEM_PAGE_SIZE (4096)
- #define PFLAG_READABLE 0x1
- #define PFLAG_WRITEABLE 0x2
- class PageHandler
- {
- public:
- virtual ~PageHandler(void) { }
- virtual Bit8u readb(PhysPt addr);
- virtual Bit16u readw(PhysPt addr);
- virtual Bit32u readd(PhysPt addr);
- virtual void writeb(PhysPt addr, Bit8u val);
- virtual void writew(PhysPt addr, Bit16u val);
- virtual void writed(PhysPt addr, Bit32u val);
- virtual HostPt GetHostPt(PhysPt addr);
- Bit8u flags;
- };
- // Some other functions
- void PAGING_Enable(bool enabled);
- Bitu PAGING_GetDirBase(void);
- void PAGING_SetDirBase(Bitu cr3);
- void MEM_SetPageHandler(Bitu phys_page, Bitu pages, PageHandler * handler);
- void MEM_ResetPageHandler(Bitu phys_page, Bitu pages);
- struct PagingBlock {
- Bitu cr3;
- Bitu cr2;
- bool enabled;
- };
- extern PagingBlock paging;
- __forceinline bool PAGING_Enabled(void)
- {
- return paging.enabled;
- }
- __forceinline Bitu PAGING_GetDirBase(void)
- {
- return paging.cr3;
- }
- #endif
|