VOGONS


Why does EMS suck on my 286?

Topic actions

First post, by maxtherabbit

User metadata
Rank l33t
Rank
l33t

I have a 286-12, 4MB 0WS onboard RAM - running PC-DOS 7.1. The motherboard maps all memory above 640kB to XMS, no onboard EMS support whatsoever.

Initially I purchased an Intel Above Board, and subsequently built the Lo-Tech 2MB EMS board, but games that use EMS malfunction with either one.

I've tried:
Swapping cards (both of them pass all diagnostics BTW)
Turning turbo off
Clean boot with nothing loaded but the EMM driver
Changing driver versions for the Above Board
Booting off MS-DOS 6.22 disk
Restricting EMM driver to LIM 3.2 functions

None of these troubleshooting measures have changed the symptoms that I'm experiencing. Which are:
Keen 4: no music in first level (but music works in overworld)
Bio Menace 1: garbled menu screen background
Spear of Destiny: crash entering first level (the "Get Psyched" bar fills up then screen goes blank and music keeps playing, no response to input)
Wing Commander: garbled cockpit when starting mission or crash during attract loop

All of these games function normally with no EMM driver loaded

Last edited by maxtherabbit on 2019-08-10, 00:44. Edited 1 time in total.

Reply 1 of 167, by Scali

User metadata
Rank l33t
Rank
l33t
maxtherabbit wrote:

running PC-DOS 7.1.

This is what looks suspicious to me. That's a DOS from well into the Windows 9x era, where 386+ machines and virtualized EMS was standard (along with all sorts of aggressive memory management with UMBs and all that jazz). But I don't think that necessarily makes it the obvious choice for an older machine with real EMS.
Have you tried using a DOS that is somewhat 'contemporary' to a 286 with physical EMS?
Say somewhere in the region of DOS 3.3 to 6.22.
DOS 5.0 would be my go-to version (that's what I had on my 386SX-16, which had a NEAT chipset with physical EMS, and a custom driver, worked like a charm). Just regular MS-DOS would be fine. I wouldn't use PC DOS on anything other than IBM machines, but that's just me (I also think PC DOS 7.x is overhyped).

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 4 of 167, by Scali

User metadata
Rank l33t
Rank
l33t

Also, testing the EMS card(s) in a different system would be useful. If you can make them work there, you at least know the cards are working, and you know how to set up a working configuration.
There should be a 'memory hole' between 640k and 1m, where normally the video cards and various other memory mapped devices go, including the EMS page frame.
Check your BIOS to see if there's an option for that.
Also disable all shadow RAM, to make sure it won't interfere with the EMS.

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 5 of 167, by rmay635703

User metadata
Rank Oldbie
Rank
Oldbie

Wrong address or

On one 286 I had and on 1 386sx I had
the systems had a bios option to relocate memory in the himem area into extended ram.

Given these units only had 1mb total memory getting an extra 384kb was useful
But my experience was that if I installed an ems card it wouldn’t work unless I turned
The feature off resulting in only 640kb base memory useable out of 1mb and EMS then would work

Reply 6 of 167, by maxtherabbit

User metadata
Rank l33t
Rank
l33t

Again, as mentioned in the OP - both cards pass all diagnostic tests (the Intel Above board comes with it's own utility, and both of them passed TESTEMS as well as the Checkit long test) and the motherboard DOES NOT have any memory relocation settings. All physical onboard memory above 640kB is hard-mapped to 1MB and onward for XMS use.

I am confident the cards are not physically defective in any way. I have also tried using different I/O ports for both cards which made no difference.

I would try using a different page frame, but I have no room for one. E0000-FFFFF is used by the system ROM, my SCSI adapter's BIOS resides in the Cxxxx range, and I have both VGA and MDA adapters using A0000-BFFFF.

Reply 7 of 167, by Scali

User metadata
Rank l33t
Rank
l33t
maxtherabbit wrote:

All physical onboard memory above 640kB is hard-mapped to 1MB and onward for XMS use.

If that's not true (no memory hole), it's probably not going to work. The physical memory will clash with the EMS window. Which I expect is what's happening, because why else wouldn't it work?
Again, have you tested the cards in another PC, and do they work there?

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 8 of 167, by maxtherabbit

User metadata
Rank l33t
Rank
l33t
Scali wrote:
maxtherabbit wrote:

All physical onboard memory above 640kB is hard-mapped to 1MB and onward for XMS use.

If that's not true (no memory hole), it's probably not going to work. The physical memory will clash with the EMS window. Which I expect is what's happening, because why else wouldn't it work?
Again, have you tested the cards in another PC, and do they work there?

I'm not sure you understood what I posted - there is in fact a memory hole from 640kB-1MB. The board maps the first 640kB to conventional and everything else to 1024kB-3456kB

No I have not tested them in another PC, I don't have another ISA box handy with available slots.

Reply 9 of 167, by maxtherabbit

User metadata
Rank l33t
Rank
l33t

There are exactly 4MB of DIP DRAM chips on the motherboard.

20190808_165435.jpg
Filename
20190808_165435.jpg
File size
1.05 MiB
Views
2141 views
File license
Fair use/fair dealing exception

Reply 10 of 167, by Scali

User metadata
Rank l33t
Rank
l33t
maxtherabbit wrote:

I'm not sure you understood what I posted

Pretty sure my response fits exactly with what you said.

maxtherabbit wrote:

No I have not tested them in another PC, I don't have another ISA box handy with available slots.

Well, there's a problem then.
It could be anything...
The cards could not be working properly at all.
The cards could be working properly, but there's an issue with your specific PC.
The cards and your PC could be working properly, but there's a specific issue with the software you listed... Which may or may not be unique to your PC.

All I can say is that I've never actually tried any of the 4 games you mentioned on any actual EMS configuration, as far as I can remember. So I have no idea if these games are even capable of behaving properly at all with EMS.
If they work at all, then the next question is: do they work properly on most configurations, or are there bugs that may or may not surface, depending on your specific configuration? And if so, is that because of the EMS card or your motherboard?

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 11 of 167, by maxtherabbit

User metadata
Rank l33t
Rank
l33t

I strongly doubt that both cards could be physically defective whist passing all diagnostics, so I suspect it is either an issue with my specific PC or the software I'm using. Which is why I started the thread.

If you have suggestions for alternate software to test with, I'd be more than happy to try something else but I was unable to find a list of games that utilize EMS.

The lo-tech card is bog simple, it's 4 SRAM chips and some 74 series logic, I was using it as a "control" if you will since the Above Board is far more complex.

ETA: both Day of the Tentacle and King's Quest 4 run fine with EMS enabled, they supposedly also use EMS.

Last edited by maxtherabbit on 2019-08-08, 21:29. Edited 1 time in total.

Reply 12 of 167, by maxtherabbit

User metadata
Rank l33t
Rank
l33t
rmay635703 wrote:
On one 286 I had and on 1 386sx I had the systems had a bios option to relocate memory in the himem area into extended ram. […]
Show full quote

On one 286 I had and on 1 386sx I had
the systems had a bios option to relocate memory in the himem area into extended ram.

Given these units only had 1mb total memory getting an extra 384kb was useful
But my experience was that if I installed an ems card it wouldn’t work unless I turned
The feature off resulting in only 640kb base memory useable out of 1mb and EMS then would work

That's curious, but I can't for the life of me think of a logical explanation for that behavior.

Reply 13 of 167, by Scali

User metadata
Rank l33t
Rank
l33t
maxtherabbit wrote:

I strongly doubt that both cards could be physically defective whist passing all diagnostics, so I suspect it is either an issue with my specific PC or the software I'm using.

Well, I don't know how that software tests... but here's a thought:
What if the software simply assumes that EMS 'works', and all it does is a stress-test?
It would perform some read-write cycles on all memory. Probably from low to high.
You can use up to 64k of EMS in a single frame, so it probably tests in chunks of 64k at a time, then moves the frame up 64k and repeats the test cycle until it has covered all memory.

If you have a test like that, you never actually test the contents of the memory. You don't know what was in memory before you started the test, so you can only write some values and read them back to verify. So you would only test the memory while it is visible in the page frame. You don't actually write data to memory, then page it out, modify other memory, and page it back in to see if the values 'stuck'.

Such a test will pass even if your EMS card is somewhat broken, and it cannot actually move the window, so you are always testing the same 64k.
It will even pass if your EMS card is actually working, but the writes to the EMS frame are actually going to main memory, so you are actually testing 64k of main memory.

In that case, any software that only requires 64k of EMS or less, will also work.
It will only break down as soon as any software tries to use more than 64k, and actually expects data to remain in memory even when it is not currently paged into the frame.

That is my theory anyway.
So that could be caused by 1 of 2 things:
1) The EMS card works, but somehow writes to the IO ports aren't handled properly, so the page frame can't be moved around.
2) The EMS card works, but its memory is 'hidden' because there is system memory mapped into the page frame, which takes precedence on the bus.

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 14 of 167, by maxtherabbit

User metadata
Rank l33t
Rank
l33t
Scali wrote:
That is my theory anyway. So that could be caused by 1 of 2 things: 1) The EMS card works, but somehow writes to the IO ports ar […]
Show full quote

That is my theory anyway.
So that could be caused by 1 of 2 things:
1) The EMS card works, but somehow writes to the IO ports aren't handled properly, so the page frame can't be moved around.
2) The EMS card works, but its memory is 'hidden' because there is system memory mapped into the page frame, which takes precedence on the bus.

At this point I can only beg you to believe me that there is not system memory mapped into the page frame, nor anywhere else in the upper memory area.

In addition to checkit, I have also used the software TESTEMS - which absolutely without a doubt moves the page frame around in the process of its test. (And with respect to the Above Board, its very own comprehensive test utility)

Reply 15 of 167, by Scali

User metadata
Rank l33t
Rank
l33t
maxtherabbit wrote:

At this point I can only beg you to believe me that there is not system memory mapped into the page frame, nor anywhere else in the upper memory area.

How do you know for sure?

maxtherabbit wrote:

In addition to checkit, I have also used the software TESTEMS - which absolutely without a doubt moves the page frame around in the process of its test. (And with respect to the Above Board, its very own comprehensive test utility)

What I described wasn't just about moving the page frame around, but actually verifying that data remains in memory even after the page frame has been moved a few times.
Unless you can tell me exactly what these tests do, I don't think anyone of us knows exactly what they test or how? And we're left to guessing what we're looking at, and why it doesn't work.

Of course, writing your own test would make sure that you know what is going on.

http://scalibq.wordpress.com/just-keeping-it- … ro-programming/

Reply 16 of 167, by maxtherabbit

User metadata
Rank l33t
Rank
l33t
Scali wrote:
maxtherabbit wrote:

At this point I can only beg you to believe me that there is not system memory mapped into the page frame, nor anywhere else in the upper memory area.

How do you know for sure?

I can visually verify there is exactly 4096kB of DRAM on the motherboard, by counting ICs. I have confirmed working/usable 640kB of conventional memory and 3456kB of extended memory. There is none left over to map into the UMA! Unless you are proposing some bizarre arrangement where the same physical memory location is mapped to multiple logical addresses??

Something else to note: I believe that Keen4 (and likely all the Galaxy engine games) only uses the page frame (it reports 64kB of EMS available on the startup screen regardless of how much is in the system) and it still has issues.

Reply 17 of 167, by maxtherabbit

User metadata
Rank l33t
Rank
l33t

Just had a thought - I'm running an Adaptec 1542B SCSI controller, which uses a form of ISA bus mastering... I wonder if that could be interfering with EMS somehow?

Reply 18 of 167, by kjliew

User metadata
Rank Oldbie
Rank
Oldbie
maxtherabbit wrote:

I would try using a different page frame, but I have no room for one. E0000-FFFFF is used by the system ROM, my SCSI adapter's BIOS resides in the Cxxxx range, and I have both VGA and MDA adapters using A0000-BFFFF.

For debugging EMS issue, you need to be able to exactly tell the address of the EMS Page Frame in the upper memory region. The Lo-Tech 2MB EMS board uses jumpers to configure this, and it can only be configured at C0000h, D0000h or E0000h. The Intel Above board may have more sophisticated configuration. Base on your above information, I guess your EMS Page Frame is configure at D0000h.

A0000 - used
B0000 - used
C0000 - Video BIOS 32KB
C8000 - SCSI BIOS (what size???)
D0000 - EMS Page Frame (64K)
E0000 - used (System BIOS)
F0000 - used (System BIOS)

Please use MS-DOS MSD to tell the detailed information of the upper memory block. There are a few possible causes that your EMS could fail:
- Video BIOS + SCSI BIOS is more that 64KB, causing EMS Page Frame overlapped with SCSI BIOS.
- SCSI BIOS does not start at C8000 right after Video BIOS or end at CFFFF, causing EMS Page overlapped with SCSI BIOS.
- EMS Page Frame does not start at D0000, and overlapped with System BIOS.

Reply 19 of 167, by maxtherabbit

User metadata
Rank l33t
Rank
l33t

that's correct my page frame is D0000h, jumpered on the lo-tech and software configured on the Above Board

the SCSI card's BIOS is located between C8000-CBFFF