From 7c02953cfc8a61134eb9b3d3e977fb0cf3fdd5e3 Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Mon, 14 Jul 2003 12:43:51 +0000 Subject: [PATCH] New direct mapping support Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1134 --- include/mem.h | 3 ++- src/hardware/memory.cpp | 10 ++++++++-- src/ints/ems.cpp | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/include/mem.h b/include/mem.h index 23e8fcea..61d53312 100644 --- a/include/mem.h +++ b/include/mem.h @@ -42,7 +42,8 @@ MemHandle MEM_AllocatePages(Bitu pages,bool sequence); PhysPt MEM_AllocatePage(void); void MEM_ReleasePages(MemHandle handle); bool MEM_ReAllocatePages(MemHandle & handle,Bitu pages,bool sequence); -void MEM_MapPages(Bitu phys_page,MemHandle mem,Bitu mem_page,Bitu pages); +void MEM_MapPagesHandle(Bitu lin_page,MemHandle mem,Bitu mem_page,Bitu pages); +void MEM_MapPagesDirect(Bitu lin_page,Bitu phys_page,Bitu pages); void MEM_UnmapPages(Bitu phys_page,Bitu pages); diff --git a/src/hardware/memory.cpp b/src/hardware/memory.cpp index 53f6039c..d10e41cc 100644 --- a/src/hardware/memory.cpp +++ b/src/hardware/memory.cpp @@ -631,18 +631,24 @@ void MEM_UnmapPages(Bitu phys_page,Bitu pages) { } } -void MEM_MapPages(Bitu phys_page,MemHandle mem,Bitu mem_page,Bitu pages) { +void MEM_MapPagesHandle(Bitu lin_page,MemHandle mem,Bitu mem_page,Bitu pages) { for (;mem_page;mem_page--) { if (mem<=0) E_Exit("MEM:MapPages:Fault in memory tables"); mem=memory.entries[mem].next_handle; } for (;pages;pages--) { if (mem<=0) E_Exit("MEM:MapPages:Fault in memory tables"); - memory.dir.LinkPage(phys_page++,mem); + memory.dir.LinkPage(lin_page++,mem); mem=memory.entries[mem].next_handle; } } +void MEM_MapPagesDirect(Bitu lin_page,Bitu phys_page,Bitu pages) { + for (;pages;pages--) { + memory.dir.LinkPage(lin_page++,phys_page++); + } +} + MemHandle MEM_NextHandle(MemHandle handle) { return memory.entries[handle].next_handle; } diff --git a/src/ints/ems.cpp b/src/ints/ems.cpp index 063af139..81ce3b27 100644 --- a/src/ints/ems.cpp +++ b/src/ints/ems.cpp @@ -156,7 +156,7 @@ static Bit8u EMM_MapPage(Bitu phys_page,Bit16u handle,Bit16u log_page) { /* Mapping it is */ emm_mappings[phys_page].handle=handle; emm_mappings[phys_page].page=log_page; - MEM_MapPages(EMM_PAGEFRAME4K+phys_page*4,emm_handles[handle].mem,log_page*4,4); + MEM_MapPagesHandle(EMM_PAGEFRAME4K+phys_page*4,emm_handles[handle].mem,log_page*4,4); return EMM_NO_ERROR; } else if (log_page==NULL_PAGE) { /* Unmapping it is */