However, EMM386 may not necessary return a next higher block address depending on the size and order of what has already loaded in UMBs. It can split large blocks and/or alloc a free block with a lower address than a previously allocated one. If you're depending on that particular load/alloc behavior, you'll have to let me know not to load anything else which uses UMB's
At 06:13 PM 6/18/2004 +0400, Arkady V.Belousov wrote:
Hi!
17-éÀÎ-2004 09:47 [EMAIL PROTECTED] (Michael Devore) wrote to [EMAIL PROTECTED]:
>> 2Michael Devore: Michael, try to initialize UMB blocks, returned to
>>EMM386 caller (DOS in case of with DOS=UMB), by 'M' letter - after this
>>FreeDOS should allocate UMB memory incorrectly (because prev_mcb() in
>>umb_init() will walk after latest previously allocated block). (To be
>>precise, there is enough to place 'M' in first byte of last paragrpah of
>>returned block). May you confirm this?
MD> Not yet, because I don't understand what you want me to do. Initialize
MD> which blocks how returned where and check for what problem? What does 'M'
MD> have to do with it? It sounds like an internal DOS memory allocation chain
MD> process, rather than an XMS UMB allocation.
1. FreeDOS allocates UMB through XMS API function AH=10h (Request upper memory block). As I understand, EMM386 inserts itself into XMS handlers chain to perform this request.
2. If you fill memory block by 'M' letter (0x4D) before returning through AH=10h functions, then this should cause wrong memory allocation in FreeDOS. I wish to confirm this.
3. 'M' is indicator of valid MCB, which is not last in chain. When config.c:prev_mcb() function scans MCB chain, it checks this letter. prve_mcb() called in umb_init() when UMB_MCB chain is not terminated (by valid MCB with 'Z').
4. To make check more stable, next scanrio should be performed:
- at first requrest through XMS/AH=10h return some block (say, at 0xB000), where last paragraph (last 16 bytes) contain {'M', 0, 0, 0xff, 0xff, <other unimportant>}. This imitates valid MCB with size field equal to 0xFFFF.
- at next call to XMS/AH=10h your EMM386 should return next _higher_ block (say, at 0xC800). This should force inifinite loop in prev_mcb().
------------------------------------------------------- This SF.Net email is sponsored by The 2004 JavaOne(SM) Conference Learn from the experts at JavaOne(SM), Sun's Worldwide Java Developer Conference, June 28 - July 1 at the Moscone Center in San Francisco, CA REGISTER AND SAVE! http://java.sun.com/javaone/sf Priority Code NWMGYKND _______________________________________________ Freedos-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freedos-devel