Small pascal program to find and size memory on 286-based IBM compatible machines that the BIOS does not see.
Some time ago, I aquired an old Everex RAM 8000 memory expansion card for the ISA16 bus. It was fully equipped with DRAM, the system - a Commodore PC 10-III with 1 MiB of onboard DRAM - did not find it. I cound not find any software for this card, documentation is also very rare. I tried some configurations and other computers and came to the conclusion, that it might be configured not to beginn at address 0x00100000 (1 Meg) but at 0x00400000. To test my assumption, I wrote that short program to test and find memory that the computers BIOS did not find - it stops at the first 64 KiB block it cannot write to (you may have a look at the original IBM BIOS' source code which is available on the web - I bet the code did not change a lot over decades...)
Take your favourite 80286 based computer and load the executable on a floppy disk. It should wirk with almost all flavours of DOS, however I tested it with M$ DOS v5 only lately.
Parameters are as follows:
MEMSIZE [options]
Optinos:
/NoA20 : Do not change A20
/DisA20 : Switch A20 off instead of on
/16M : Test all 16MiB, not above 1MiB
/Dump : Print LOADALL parameters
/Halt : Halt system after execution
/?, /Help : Show this little info
When executing in a PCem emulated Ami 286 system, it might look like this:
Note: up to now, the program can be compiled, but not executed.
Take a look on the FreePascal Wiki to learn how to install a MS-DOS crosscompiler for FreePascal. It works pretty well, however it generates only 8086 code. This does not hurt, except for the 80286 specific stuff (like the Mashine Status Word for example, or "SHL reg, imm8" for logical shifts). Those instructions have been framed in FPC-specific IFDEFs. To compile MEMSIZE, you may use something like this:
ppcross8086 -WmTiny -Wtcom MEMSIZE.PAS
You need to have (or find) a functioning copy of Borland's Turbo Pascal, e.g. version 7. This can be done e.g. in DOSbox. Copy all 4 .PAS-Files, and compile "CPU286.PAS" first. After that, you can compile "MEMSIZE.PAS".
All language-specific strings (I hope) are stored in separate source files. You may choose your favourite translation by changing the respective define in "MEMSIZE.PAS":
{Localization:}
{$I MSLANGDE.PAS}
Currently, "MSLANGDE.PAS" and "MSLANGEN.PAS" for German and English are available.
- 0.2.0
- FIX: should not work on all IBM286 compatibles now
- CHANGE: FreePascal can now be used to compile the sources for DOS, the program itself however does not work by now
- 0.1.0
- changed to real-mode and LOADALL, using TP7
- 0.0.1
- 1st version using protected mode exceptions, quit buggy and non portable
Parts of this software (as noted in the sources) is based in Rober R. Collin's exccelent LOADALL code for the 80286 processor, see his page about the LOADALL-instruction for details.
Alexander J. L. Hofmann – https://www.nerdlingen.de – [email protected]
Distributed under the GNU GPLv3 license. See LICENSE
for more information.