by Ross Wolin
This is a 68HC11EVB running with 12K of RAM. The circuit shown is more complicated that the one described and uses a surface mount 74LS00 NAND gate. See Q&A section for more details. This modified EVB has been used for several weeks with no problems.
Hey, are you one of the lucky embedded systems developers that happens to have a 68HC11 EVB development board that Motorola sold about 10 years ago? (If you were really fortunate, you got it during the student promotion for $68.11) You know, the ones with the BUFFALO monitor ROM, 8K onboard RAM, two DB25 serial connectors and a 2x30 pin header on the left side? If so, this article is for you.
If you were a really, really big spender, you have probably already upgraded your EVB to 8K by plugging another 6164 static RAM into the USER RAM socket. This worked well for a while, but some of the newer 68HC11E series ICs sport 12K of onboard EPROM/ROM. To emulate one of these with the EVB you may need more RAM. True, if you are writing in assembler it would be a pretty impressive program to top more than 8K, and even if you are writing it C (or even Forth) it's a pretty good size programming effort... but the size creeps up on you before you know it, your program gets too big to load, and despite your space preserving attempts you just need more memory.
Here's what to do....
Checking the memory map of the EVB, the optional 8K RAM that you have already installed in socket U4 maps to $6000-$7FFF. If the memory space from $8000-$9FFF were free, it would be a simple matter piggyback a second 8K RAM on top of the first one (bending out E1* pin 20 on the top RAM), use Y4* as the top's E1, and map it into the next 8K. Unfortunately, it isn't that simple....
The memory map shows the Terminal ACIA (serial port) is mapped into the space from
$9800-$9FFF. Other than that, there are no other devices mapped into the $8000-$9FFF
space, so 4K of memory space from $8000-$8FFF is free for our use.
The optional 8K RAM's E1* (enable) pin is connected to the Y3* of an HC138 3-8 decoder that decodes address lines A15-A13. This means that Y3* is low (active) whenever an address in the range $6000-$7FFF is accessed, (i.e. A15=low, A14=high, A13=high.) If we were to piggyback a second RAM on the first one with the exception of E1*, all we'd have to do is come up with a way to get E1* to go low when addresses from $8000-$8FFF are accessed.
The Y4* signal on the HC138 3 to 8 decoder is low whenever the address range is
$8000-$9FFF, (i.e. whenever A15=high, A14=low, and A13=low.) To limit instead to
$8000-$8FFF, we need to look at address bit A12 also. Since all our new RAM's valid
addresses will start with an 8, A12 must always be low when we address it. Therefore, if
A12 is low AND Y4* is low, E1* should be low because we are in the $8000-$8FFF address
range. The schematic shows one way to accomplish this; however note that a 74LS32 is a
quad 2 input OR gate, not a NAND (74LS00.) Logically an OR gate is the same as an AND with
the inputs and outputs bubbled. A more detailed explanation can be found in the Q&A section.
Okay, enough rambling - here's how to do it.
Piggyback two 6164 static RAMs of access time 250ns or faster together, except for E1*.
OR the RAM's A12 and U6-Y4* together and connect the output to the E1* pin on the top RAM.
Plug this into the EVB's U4 socket and install J3. You now have 12K of user RAM mapped
from $6000-$8FFF. Run the included memory test to make certain the memory works properly.
First, obtain two 6164 static RAMs of at least 250ns access time. Admittedly these days it may be hard to find a RAM that small. I was a good little scrounger during the 80s and had a box of these and other random ICs that I had pulled out of junked boards at Wang Laboratories. (Remember when Wang was a hardware company?) A quick way to determine the access speed of the RAM (this usually works) is to check the part number on the chip. For example, a 6164-200 has an access time of 200ns. If you aren't lucky enough to have a box of junk to pull RAMs from, let me know where you buy them.
You will need to piggyback one RAM on top of the other. Piggybacking is a common technique used when two chips need to go into the same spot and all the pins should be connected to the same signals, except for a few oddballs. Carefully place one RAM on top of the other so that all the pins on the top RAM touch all the pins on the bottom one. Don't mash the top chip into the bottom one so the bodies touch- just set it on top, so there is an airgap between the two RAMs (this will improve cooling, although I'm making no guarantees.) Bend pin 20 out on the top RAM, then carefully solder the remaining pins on the top IC to the pins on the bottom IC. Do not coat the bottoms of the pins on the bottom RAM with solder, as it still has to fit in the chip socket on the EVB. Also, do not spend a lot of time heating the pins or you might heat damage the RAMs. (If you're not good at soldering, consider having someone else do this for you.)
Insert the piggybacked RAMs into the EVB socket U4
Turn a 74LS32 quad 2 input OR upside down and glue it to the top of the top RAM, so it's legs are in the air like it's dead. You can use a surface mount chip like I did, although a DIP package part (as shown in the picture) will make the soldering a lot easier.
Wire pin 28 on the RAM to pin 14 on the OR chip for +5V.
Wire pin 14 on the RAM to pin 7 on the OR chip for GND.
Wire top RAM pin 20 to OR chip pin 11. This connects the Y4 output of the OR gate to the E1* enable on the top RAM.
Wire RAM pin 2 to OR chip pin 12. This connects A12 to the OR gate input A4.
Wire U6 pin 11 to OR chip pin 13. This connects Y4* from the 3-8 decoder to OR gate input B4.
Install jumper J3 to connect the enable for the lower RAM.
You now have 12K of user RAM mapped from $6000-$8FFF. Run the attached memory test to make sure your new RAM works properly.
Q: What does the '*' on the end of some signal names (i.e. E1*) mean?
A: The '*' means the signal is active low, or low/gnd when TRUE.
Q: Hey, can't you add? I've just piggybacked 2 8K RAMs together. Why do I only get 12K?
A: The ORing of A12 and Y4* means that only addresses $8000-$8FFF will cause top RAM's E1* to go low. In other words, E1* is only low whenever A12 is low and Y4* is low: any address starts with an 8 will activate E1*.
Q: Why didn't you decode $8000-$97FF instead, and get 14K of RAM rather than 12K?
A: Originally this is what I had planned to do, although it isn't really necessary since nothing I would be emulating with the EVB has 14K of program EPROM/ROM. It didn't work: when I tried writing locations in the $9000-$97FF range I got errors from BUFFALO saying they were ROM. I'm not quite sure why: it could be a software or hardware problem. I really only wanted the extra 4K, so going after the extra 2K on top of that wasn't worthwhile at the time. (Shown is my original attempt. If someone succeeds in getting 14K to work or figures out why it won't work, please let me know.)
Q: Your schematic shows a NAND gate - why are you telling me to use an OR gate?
A: An OR gate is equivalent to a AND gate with the inputs and output inverted, as shown by my schematic shows. (!(!A & !B)) is the same as (A+B), by DeMorgan's theorem.
Q: Why does the chip on top of the RAM in your EVB
picture have more wires on it than mine?
A: When I built this circuit, I bought a quad 2 input NAND gate because I was going to try for 14K (see two questions back) using a slightly different decode circuit. When it didn't work, I made due with the NAND package because it was already glued to the RAM. Remember that an OR gate is simply a NAND gate with both inputs inverted. And a NAND gate with both inputs tied together is an inverter. So, if you're a real hack, you can make an OR gate out of 3 NAND gates (this is what I did by eliminating A11 and tying A12 to both inputs) and still have one NAND gate to spare.
Q: What the heck does BUFFALO stand for?
A: Bit User's Fast Friendly Aid to Logical Operation
A: Don't ask me, I just work here.
Did you like this article?
Did you upgrade an EVB? (If so, did it work?)
Let me know!
The introduction board photo was done by Bryan Swadener, available for birthday parties, weddings, barmitzvas, and flaming ski jumps.