New direct mapping support
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1134
This commit is contained in:
parent
344afaf577
commit
7c02953cfc
3 changed files with 11 additions and 4 deletions
|
@ -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);
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Add table
Reference in a new issue