misterblack1/isa-ram-expansion

UMB not showing up on AT machine

Closed this issue · 0 comments

Hi Adrian, you are probably quite busy at the moment, but can you help me out?

I finally got around to building your isa ram expansion card and put it in my IBM 5170 which, as you know, has only 512k of ram on board and no extra empty sockets on the board to put some more in.

I know that is an AT machine and the card is meant for XT machines but since (AFAIK) no one came up with a similar open source ram card for the 16 bit isa slot and original AT ram expansion cards from back in the day are too expensive for my taste, I thought I'd give this a try.

Many games and applications give me a "not enough memory" complaint, some will start anyway just to crash or lock up shortly after - so I think adding more memory, even if it is slow, might at least solve the crashing.

The idea was to expand the conventional memory from 512k to 640k and maybe have some more between the VGA (640-768k) and the BIOS (960-1024), although, since the VGA card also has the video BIOS starting right after 768k and I have an XT-IDE rom somewhere after that, all I'd be able to get out of that expansion card would be the last 64k block before the BIOS.

I probably should not load DOS or anything speed sensitive into this high block, but I may shift some less important stuff there to free up more conventional memory (like that scan.sys driver that a certain photo editing application wants to have, even when there is no scanner connected).

The card is configured like this: DIP switches #5 and #8 UP (OFF) and JP2 set to 2-3 (I assume that will chop the topmost 128k chunk enabled by switch #8 in half to not conflict with the BIOS rom - correct?)

Expanding the conventional memory to 640k works already (the memory count at boot up slows down significantly after 512k, as expected) but the upper 64k block does not show up.

  • checkit does not see it
  • test!umb.exe does not see it (it does only see the video ram)
  • loading use!umb.sys at startup does produce text output on boot but DOS still reports no upper memory

What am I missing?

Edit:
I think I figured it out.
While searching the Web for this particular issue did not bring up anything useful, I found a possible answer yesterday when I stumbled upon another random "let's build a 16 bit memory board" forum thread that went nowhere - it contained 8 pages of discussion but went silent in May 2022 - too bad.

However, there was a bit of back and forth about how to handle MEMCS16# (also called M16*) and that gave me some Information I was missing.

That MEMCS16# signal is a way for an AT system to detect wether it is talking to a "legacy" device with 8 bit data bus or a true 16 bit one.

The thing is that MEMCS16# can only be set for a whole 128k chunk at a time.

That would explain why adding a whole 128k block of 8 bit memory between 512k and 640k works while adding 64k before the BIOS (which is certainly 16 bit) does not - some circuitry on the mainboard asserts MEMCS16# for the topmost 128k chunk so the cpu can access the 64k BIOS rom in 16 bit mode and the 64k of 8 bit RAM in that same 128k block gets ignored