1
0
Fork 0

New direct mapping support

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1134
This commit is contained in:
Sjoerd van der Berg 2003-07-14 12:43:51 +00:00
parent 344afaf577
commit 7c02953cfc
3 changed files with 11 additions and 4 deletions

View file

@ -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);

View file

@ -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;
}

View file

@ -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 */