48k LOW POWER MEMORY by Roger Liddiard
Made specifically for the Jupiter Ace computer, this 48k Low Power Static Random Access Memory was designed around the MG12512 CMOS 64k x 8 SRAM, a 32-pin 0.3" wide integrated circuit. The MG12512 has an advantage not available on smaller capacity memory chips in that it has a non-inverted chip select (CS) pin as well as the usual inverted CS pin.
The memory needs to be selected whenever the computer wishes to write to or read from any address between 16348 (4000) and 65535 (FFFF). This occurs when either of the address lines A14 or A15 = 1 and can be simply achieved using a basic resistor-diode OR gate rather than a logic chip. Consequently the only integrated circuit in this design is the memory itself. The diodes are signal diodes which are very fast acting.
Printed Circuit Board
When designing a printed circuit board for a memory device, it's worth bearing in mind that as far as the memory chip is concerned, the numbering of both the data bus lines and the address lines is entirely arbitrary. It matters to the computer, of course and some address lines are used to select the memory (A14 and A15 in this case), but the data and address lines can be in any order on the memory.
This simplifies the design which was etched on a single-sided pcb with only 5 links on the underside. Unusually the memory IC and the discrete components were mounted on the copper side of the pcb. This facilitated drilling holes for the edge connector pins through the case and then soldering the pins to the pcb inside the case.
This memory takes its power from the 9v rail on the computer's edge connector, generating its own 5v supply internally rather than putting additional load on the voltage regulator in the computer, which gets very hot. The Low Power Memory draws around 20mA from the 9V rail when selected and 7mA on standby.
MG12512 64kx8 SRAM 32 pin 0.3" DIP
74L05 TO92 5v voltage regulator
2 in no. 1N1418 signal diodes
2 in no. 47uF 16v electrolytic capacitors
The normal test for memory capacity is to enter:
15384 @ U.
which prints out the RAMTOP - the first address past the last address in RAM. For a 48k memory it should read 0, indicating that the last address in RAM is actually 65535. But this simple test will not check that the memory actually works correctly throughout its range. This short program provides a physical check to achieve this:
: MEMTEST 0 15384 @ BEGIN 99 - DUP 20 - 15419 @ SWAP U< WHILE SWAP 5 + OVER OVER SWAP ! OVER U. OVER OVER SWAP @ = IF ." Valid" CR SWAP ELSE ." Invalid" SWAP DROP 15419 @ CR THEN REPEAT DROP DROP ." Test complete" ;
It should only be used when there are no other programs loaded. It loads a value into the memory and then checks that it can be retrieved correctly in locations 99 bytes apart (an odd number so all the data lines are checked) starting at 100 below RAMTOP (to avoid upsetting the Return Stack) and running down to 100 bytes above STACK. The value loaded and retrieved is increased by 5 every time.
From breadboard ..... ..... to completed project.