Re: Rampage Plus 286 EMS boards programming info.

Anthony Barbachan (
Wed, 20 May 1998 03:03:55 -0400

-----Original Message-----
From: Mike A. Harris <>
To: David Woodhouse <>
Cc: Linux Kernel mailing list <>
Date: Tuesday, May 19, 1998 11:34 PM
Subject: Rampage Plus 286 EMS boards programming info.

First thing you may want to check is if the board is actually an EMS board.
Since it sounds as if it was made for 286's then it would make more sense
that the board is an extended memory board as 286's could address more than
1 MB of memory. The driver disk may just be AST's version of EMM386.EXE.
Plug your board into a computer and see if the computer registers the extra
memory. Furthermore using the boards for actual memory may be impossible.
EMS was accessed thru a 64K page frame that contained 4 16K pages at one
time. This means that if the card is an EMS card it will probably be
inaccessable linearly. You will have to access it thru 16K pages, only 4 of
which will be present in the EMS page frame at any one time. If you
determine that it is an EMS board then first thing you should do is contact
AST to see if they have any techical information of the card. BTW, the card
may well be EEMS instead of EMS as AST was one of the backers of EEMS. IF
you unsuccessful in this route then its time to reverse engineer the card.
BTW, for Linux to remain unhindered by any possible lawsuits I'd also
recommend you get permission to reverse engineer, which shouldn't be a
problem for this ancient card.

Steps to reverse engineer this card:

1. Build a clean machine with the EMS card in, loading only DOS 6.22 with
minimal drivers + the EMS driver.
2. Make sure you do NOT load EMM386.EXE, unless told so by the card's
intallation instructions.
(Which shouldn't be the case as EMM386.EXE may confict.)
3. Call the DOS function "Get Memory Manager Information"
int 21H function 4402H

Need DOS 2.0 or greater
AX = Function Code = 4402H
BX = File Handle = Handle for "EMMXXXX0"
CX = Buffer Size = size is dependant on the subfunction called
DS:DX = Buffer = 1st byte sets the subfunction desired
(00H - Get API Point,
01H - Get EMM Import Structure
02H - Get Memory Manager
03H - supported but unknown,
04H - supported but only
partially known)

Return information:
CF = Status
AX = Error Code (0001H - invalid function,
0005H - access denied,
0006H - invalid handle,
000DH - invalid data)

buffer structure

0000H - 018AH - unneeded data
018BH - Byte - number of UMB frame descriptors
018CH - 4 * DWord * (number of UMB frame descriptors)
Byte - number of EMS handle info records
16 bytes * (number of EMS handle info records)
DWord - Read-mode Interrupt 67H vector
<<<<<------- NEEDED INFO
Byte - a
a * (DWord + DWord)
Byte - b
b * 12 Bytes
Byte - c
c * (Word + Word)
20 bytes
20 bytes

Call this DOS function's sub function Get EMM Import Structure Address - 01H
The needed info will point you to the possition in memory which will handle
EMS calls INT 67H
You can also write a program to just print out the vector for INT 67H
(Keep in mind that some other function might be in the way and call the
actual function)
Once you find the address of the INT 67H handler you should write a program
that allocates and deallocates memory, writes, reads, etc.
With a good debuging program trace its action in memory, setting a
breakpoint at the start of the INT 67H handler.
This way you should be able the trace what the EMS board's driver does.
Another is that with a good debug program (MS's CV is good) you can start at
the INT 67H and trace what the assembly code does for each EMS function

>On Tue, 19 May 1998, David Woodhouse wrote:
>> There's a generic driver for memory devices at

>> I've provided a driver for some ISA flash cards, and for otherwise unused
>> physical memory. It should be fairly easy to plug in a driver to handle
>> EMS boards.
>Ok great. The only problem I have now is that I don't have
>programming information for the board. It is an
>AST Rampage Plus 286 card.
>I have no idea how these cards work. What ports are used?
>IRQ's, DMA? Any pointers would be greatly appreciated.
>> It's all modules so far - just compile them with the same command line as
>> kernel modules compile with.
>> mtd.o is the basic system.
>> ftl.o does an FTL filesystem on top of whatever devices you've got
>> physmem.o and flashcard.o are the physical device drivers.
>I'm itching to do so now! I need programming info. I have the
>MSDOS driver for the card, and could possibly reverse engineer
>it, but I don't know how .SYS files load under DOS. Any ideas?
>> Have fuin.
>Thanks a lot for your help.
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to