I hope to have some free time later this weekend and will try to get caught up on a few FreeDOS items, including your requested test, a stand-alone UMB stress test, and code up an XMS block auto-grabber/releaser for Erwin Veermans' NWDSK if it proves feasible and fixes the immediate problem with NIOS load limitations.

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

Reply via email to