• Please review our updated Terms and Rules here

8-bit ISA 1MB RAM Board

pearce_jj

Veteran Member
Joined
May 14, 2010
Messages
2,808
Location
UK
I've developed a simple RAM board for IBM PC, PC/XT and clones. It's 8-bit ISA and has 16 switches to enable each of the physical pages to be provided by the RAM board (or not) - so it can work in any system and provide the full 640KB, and fill any available upper memory pages.

Initial results look like it works :) More info and pictures here: http://www.lo-tech.co.uk/wiki/1MB-RAM-Board
 
Any possibility of an Expanded Memory board- or ratherm on the hardware end, a means to control RAM pages in software by talking to a mux or something- so an eager forum member can implement EMS?
 
Yes, I have a 2MB EMS board done based on the same SRAM chips. I just need some time to assemble and test!
 
Yes, I have a 2MB EMS board done based on the same SRAM chips. I just need some time to assemble and test!

I think I will definitely buy one of those so I can take a stab at writing my own EMS driver...
 
It shouldn't be too hard, since only a small subset of commands are required in the spec. My board (hopefully) follows the bare minimum spec - one 64KB page frame, four page registers, and 16KB pages. I've added some info here. Seems I made some errors in the address decoding, leaving really just one valid combination of resources, but with that limitation hopefully it will work OK :)
 
If I pay you extra, would you be willing to send me a completed board? I cannot surface mount solder to save my life, but I'd like to try making an open source "universal" driver myself. Besides... it's about time that I learn how to write an MSDOS device driver anyway. Pity I've never found a good online source for it- seems to mainly be in out of print books.

Also, I'd like to ask while it's own my mind- this is irrelevant since you're using SRAM, but if you were using DRAM, you'd have to provide your own refresh circuitry, correct (since the 8237 only is required to refresh the first 640k)? I wonder how one would sync accesses from the CPU to the board... gratuitous wait states?
 
Yes, that's why I went with SRAM, it just seemed to bypass the whole issue!
 
Interesting...

A few comments:
- Any particular reason for not using through hole components? I believe they would fit nicely on the similarly sized board, and make assembly much easier.
- 74HCT245 is not the best choice for the buffer, it has relatively low output current... I'd suggest 74F245 or 74ACT245. Otherwise these SRAMs are TTL compatible with characteristics similar to that of 74HCT-series, so the buffer is not really needed.
- Why to use 74HCT688 (essentially configured as an 8-input NAND gate) for address decode? Why not to use 74*30 8-input NAND instead? 74*30 is smaller, cheaper, and likely faster that a comparator (and also available in faster 74AHCT series)
 
Looks interesting...

A few comments:
- Any reason for not using through hole components? I believe they would fit nicely on the similarly sized board, and make the assembly process much easier.
- 74HCT245 is not the best choice for the buffer, it has relatively low output current... If you think the buffer is needed I'd suggest using 74F245 or 74ACT245. But I doubt that the buffer is needed - these SRAMs are TTL compatible with output characteristics similar to that of 74HCT-series (and exceeding 74LS).
- Why to use 74HCT688 (essentially configured as an 8-input NAND gate) for address decode? Why not to use 74*30 8-input NAND instead? 74*30 is smaller, cheaper, and likely faster that a comparator (and also available in faster 74AHCT series)
 
Sergey, thanks for the input. In order....

- I might do a THT design, for now it's SMT because it's a derivative of the EMS board which won't fit on the Eagle Lite board area in THT.
- Thanks for the input on the HCT component, seems like the F or ACT would be better.
- Not sure on the 688... if there is any demand for this board I'll change that part as well.

Cheers!
 
It seems to me like this board may be able to advertise LIM EMS 3.2 compatibility.

Is the bracket with a hole cut into it really necessary for a memory board?

I think C000 is not likely to be a popular choice in many XT systems due to the use of that space for a hard disk BIOS, and in an AT system due to EGA and VGA. 040 and 060 I/O addresses are obviously not useful.
 
I think C000 is not likely to be a popular choice in many XT systems
F000 is not a good choice either as it is used by BIOS and ROM BASIC. So you can either exclude that area at all (hint: this will free up one of the DIP switches, so you can eliminate the JP1 jumper), or make it possible to enable smaller chunks (e.g. 16 KiB size) with some additional jumpers and address decode circuitry.
 
Last edited:
Is the bracket with a hole cut into it really necessary for a memory board?

I think C000 is not likely to be a popular choice in many XT systems due to the use of that space for a hard disk BIOS, and in an AT system due to EGA and VGA. 040 and 060 I/O addresses are obviously not useful.

My goal is just to provide a consistent bracket across my boards, and that bracket is designed to allow the board to be only 100mm wide, which reduces PCB production costs.

F000 is not a good choice either as it is used by BIOS and ROM BASIC. So you can either exclude that area at all (hint: this will free up one of the DIP switches, so you can eliminate the JP1 jumper), or make it possible to enable smaller chunks (e.g. 16 KiB size) with some additional jumpers and address decode circuitry.

I wanted to keep C000h as my storage cards can (mostly) go elsewhere, so it may be free in my use-case. So that gives a choice of three usable page frames, and we get F000h as a side effect, even though that is of course no use.
 
About 15 years ago, I was working with somebody who ridiculed the idea of EMS and its 16KB page slices. Wouldn't it have been easier and more convenient just to have 64KB switching? I can imagine in 64KB pages could be more less efficient with small data types than 16KB pages, but as memory needs increased it must felt more like an annoyance having to keep track of four things instead of one.
 
I'm especially interested in the comment about LIM3.2. According to LIM4, only functions 1-7 were required, but software should check the version reported in function 7 before using the advanced commands (>7). Is there some list somewhere of which commands are required in which version of the spec?
 
Yes I've not added on the archives yet... I want to be sure the boards are working properly first :)
 
Back
Top