17.04.2012 16:23, Bart Oldeman wrote: > On 14 April 2012 07:17, Stas Sergeev <s...@list.ru> wrote: >> I've just had a look into a possibility of using >> LOWMEM() for the mappers, eliminating the >> special meaning of MAPPING_LOWMEM and >> MAPPING_HMA, which are adding lowmem_base >> to the source. The mappers can use LOWMEM() >> explicitly, instead of using the magic flags, because >> the EMM can map from both the lowmem_base shm >> and the malloc()'ed areas, so it needs to set the >> source addr explicitly. >> But it turned out that the mapping code is >> over-complicated to do even that simple change. > I wonder if the best way to solve the issue with using conventional > memory to map EMS memory is to have the mapping code set up and > maintain some kind of page table: (conv+hma)/4k=(1024+64)/4=272 > entries with pointers. That way, dosaddr_to_unixaddr just needs a > quick table lookup like this: > > void* dosaddr_to_unixaddr(unsigned dosaddr) > { > /* use proper #define's in the real code ;) */ > if (dosaddr < (1024+64)*1024) > return alias_table[dosaddr/4096] + (dosaddr & 4095); > else > /*DPMI memory, no alias */ > return &mem_base[dosaddr]; > } Very probably; although we currently have kmem_map array for the similar purpose with kmem: it would be good to not have 2 lookup arrays, but just one. I am currently busy with the mapping cleanup, have already about a dozen of patches. :) dosaddr_to_unixaddr() is much later (or you do).
------------------------------------------------------------------------------ Better than sec? Nothing is better than sec when it comes to monitoring Big Data applications. Try Boundary one-second resolution app monitoring today. Free. http://p.sf.net/sfu/Boundary-dev2dev _______________________________________________ Dosemu-devel mailing list Dosemu-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dosemu-devel