From 032402542d36000dd7f88fca70050e9b0712df00 Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Mon, 16 Sep 2002 14:16:28 +0000 Subject: [PATCH] New ems code to use a handler instead of mapping for the pageframe Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@283 --- src/ints/ems.cpp | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) 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