Uploaded to ftp://ftp.devoresoftware.com/uploads are himem64.zip (executable) and 
himem64s.zip (source) for a new test release of HIMEM64 (morphing to HIMEM in official 
releases).  The files are dated April 18, 2004.

This version of HIMEM64 has three new options and greatly changed behaviors to allow 
precision in specifying how HIMEM behaves and to pinpoint problems that may arise with 
different PCs.

HIMEM64 now supports the /X option, matching Microsoft HIMEM; modifies /NOABOVE16 to 
match Microsoft; adds the /MAX:<value> option to limit XMS memory controlled by HIMEM; 
and adds the /METHOD option to allow forcing a particular A20 method as a parameter.  
The A20 methods are more thoroughly tested in a couple of spots and have a new test 
order:  Always On, BIOS, FAST, PS/2 (fast alternate detection), KBC (formerly KBC-2), 
and Port 92 (fast alternate, no qualification tests),

Read on for programmatic and usage notes:

As indicated, the order of A20 tests have changed.  Always On is tested first, by 
seeing if the A20 line is enabled on entry to HIMEM.  If enabled, that method is 
chosen, as discussed here.  Hopefully there aren't any perverse machines out there 
which enable A20 at startup and then shut it down later.

FAST, PS/2, and Port 92 methods all use the same A20 method, but they use different 
tests to get there and give different method text feedback.  FAST uses BIOS INT 15h, 
function 2403h; PS/2 checks if the machine is a PS/2, and Port 92 simply tries the 
port 92h method to see if it works.  This approach is for three reasons: 1. when 
debugging problems, it is useful to know exactly how the machine got where it did; 2. 
Port 92 checks are not performed until all other methods are tried since it can lock 
up some machines; and 3. If in the future we need to change behavior for a subset of 
the three methods, it can be done much more easily.

KBC was renamed from KBC-2 and the original KBC routine was turned off.  KBC-2 was 
used by many more machines, possibly compatible with all of them.  Yes, I know this is 
a bit confusing, but if the original KBC remains turned off it eliminates end-user 
confusion on why there is a KBC-2 when there is no KBC, or why KBC-2 is far more 
common than KBC.  If original KBC comes back, I'm gonna call it KBC Alternate 'n'.  We 
made up a lot of these names in the last great HIMEM64 testing get-together anyway.

The /X option turns off function E820 memory detection, just like Microsoft's HIMEM.  
/NOABOVE16 now turns off only function E801 memory detection like Microsoft, whereas 
/NOABOVE16 originally turned off both E820 and E801 function calls.  It's not a bad 
idea to separate the two for better testing and control purposes, such as a problem in 
one of the two functions in a particular machine BIOS.  I admit the mnemonics are 
totally stupid, but Microsoft is the culprit, not me.

The /MAX:<value> option limits the total extended memory controlled by HIMEM as XMS.  
This is to help control and debug any problems with large or misbehaving memory 
machines.  <value> is a value in K and specifies the amount of XMS memory that HIMEM 
controls, including HMA, UMB, and EMS allocations.  So, if you have a 256M machine and 
specify /MAX:150000, only 150M of extended memory will be available as XMS and to any 
later EMM386 allocations.  This option is NOT Microsoft standard, but it's a highly 
useful option and follows many of their other utilities.  The closest option behavior 
with Microsoft is INT15 and it's a subtracted calculated number with special behavior 
related to INT 15h which isn't nearly as neat.  I vote we keep /MAX around.

The /METHOD:<method> option allows one to specify exactly which A20 option will be 
used by HIMEM.  I figured after the fifth e-mail request on the topic from [name 
withheld], it would be quicker to stick it in there then keep reading the e-mails.  It 
actually should be useful when debugging problematic machines to allow forcing them to 
a known A20 method.  This generally follows Microsoft's /MACHINE: options but, I 
think, makes more sense as it directly addresses the A20 method rather than trying to 
match up a few zillion machine types to one of two dozen chosen.  The /METHOD 
<method>'s are in order parsed:  ALWAYSON, BIOS, FAST, PS2, KBC, PORT92.  If you force 
a method on which is not compatible with your machine, it WILL crash.

The A20 testings methods were merged into one main testing routine, so that all 
methods (except Always On), always test that both an enable and disable of A20 is 
successful on the chance that the BIOS lies like a rug about what it supports.

In the source code, I merged a routine or two to compress the HIMEM resident memory 
footprint a few bytes without undue violence to the source code structure.  A fair bit 
more could be done, although I would worry about readability if one were too 
aggressive.

Finally, it is obvious that I unilaterally changed quite a bit of source and HIMEM 
behaviors in this release.  This was because I needed to make a number of important 
decisions in a short period of time.  We can change some of HIMEM stuff back or to a 
different way of working if it seems appropriate.  The changes aren't carved in stone.

Please let me know of your results, particularly in view of the many changes.  We may 
have to resurrect one or two dead A20 methods, or add new ones, but I hope not.




-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
Freedos-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freedos-devel

Reply via email to