diff --git a/src/ints/ems.cpp b/src/ints/ems.cpp index d3b694de..154c7ce4 100644 --- a/src/ints/ems.cpp +++ b/src/ints/ems.cpp @@ -28,6 +28,7 @@ #include "inout.h" #include "dos_inc.h" +#define EMM_USEHANDLER 1 #define EMM_PAGEFRAME 0xE000 #define EMM_MAX_HANDLES 50 /* 255 Max */ @@ -97,8 +98,23 @@ struct EMM_Handle { static EMM_Handle emm_handles[EMM_MAX_HANDLES]; static EMM_Page emm_pages[EMM_MAX_PAGES]; static EMM_Mapping emm_mappings[EMM_MAX_PHYS]; +static HostPt emm_pagebase[EMM_MAX_PHYS]; Bitu call_int67; +#if EMM_USEHANDLER +Bit8u EMM_ReadHandler(PhysPt start) { + start-=EMM_PAGEFRAME * 16; + Bitu page=start>>14; + return readb(emm_pagebase[page]+(start&0x3fff)); +} + +void EMM_WriteHandler(PhysPt start,Bit8u val) { + start-=EMM_PAGEFRAME * 16; + Bitu page=start>>14; + writeb(emm_pagebase[page]+(start&0x3fff),val); +} +#endif + static Bit16u EMM_GetFreePages(void) { Bit16u count=0; for (Bitu index=0;index