Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
arduino library to interface with 30-pin simm ram
C Assembly Arduino
branch: master
Failed to load latest commit information.
avr-asm-ram-version fix grammar
ram fix license
LICENSE Initial commit
README.md datasheet
ram_test.ino varios cambios a la API
schematic.txt fix

README.md

30pin-simm-ram-arduino

Library to interface with 30-pin simm ram using an atmega328p on Arduino

Copyright (C) 2014 - Rafael Ignacio Zurita rafaelignacio.zurita@gmail.com LICENSE : read below.

This work was inspired and based for the great hack to run Linux on a 8bit MCU by Dmitry Grinberg http://dmitry.gr/index.php?r=05.Projects&proj=07.%20Linux%20on%208bit

The code is also based in the KM41C4000D 4M x 1Bit CMOS Dynamic RAM datasheet http://pdf.datasheetcatalog.com/datasheets/400/250350_DS.pdf

Introduction

This repo contains the library to interface with 30-pin simm ram modules, like the ones which were used in AT (286), 386, 486, Macintosh Plus, Macintosh II, Quadra, Atari STE and Wang VS systems. Using an atmega328p on Arduino.

It will give you extra RAM to store and restore dynamic data in your sketches.

Pictures and Video : on the bottom

License

The library has two versions : C and avr assembler version. Both for atmega328p (Arduino).

Both version are free software, you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

Read the LICENSE file for details, and the README file under the assembler version directory.

Usage

WARNING: using this kind of RAM will put your Arduino CPU to refresh the SIMM RAM data most of the time. It means that your sketches (programs) could run slow. Also, we need to use most of the Arduino pins to be soldered with SIMM RAM pins so there will be just few available extra pins for your project.

  1. Connect the 30-pin SIMM RAM like schematic.txt file explains.

  2. Copy the ram/ directory under sketchbook/libraries/. If you prefer using the avr assembler version for better performance copy the files under avr-asm-ram-version/* instead. Read the REAMDE file there as well.

  3. The usage of the RAM is easy. In your main code (or sketch) call ram_init() just once, and then ram_write() and ram_read() to store and recover data from SIMM RAM.

Example

#include "ram.h"
...

ram_init();

/* write one byte to RAM */
ram_write(1, 2, 7);     /*# row=1, col=2, store byte = 7 */

/* write several bytes to RAM */
char gb[] = "Good Bye!";
for (i=0, i<strlen(gb), i++)
    ram_write(2, i, gb[i]); /* row=2, col=i, store byte = i of gb */

/* read from RAM */
c = ram_read(1, 2);     /* restore byte = 7 from row=1, col=2 */
d = ram_read(2, 0);     /* restore letter "G" from row=2, col=0 */

You can use the ram_test.ino as example for using your 30-pin simm ram.

Limitations

SIMM RAM has 12 bit address for rows and columns. Max RAM size here is 16MB. We are using just 6 pins for rows and columns, so we are limited to 4KB of RAM space.

Addresses space will be of 64rows x 64columns = 4096 addresses 1 byte each = 4KB of space.

If you need to use more RAM you can solder the 3 analog pins remaining to simm ram module pins A6, A7 and A8. It will give you 256 KB of RAM space.

References

Dmitry code for atmega168 did not work as is. In order to have a proper working code we needed to read several datasheets. At least we studied the KM41C4000D, KM41V4000D CMOS DRAM datasheet and other sources of RAM chips, like

http://www.pjrc.com/mp3/simm/datasheet.html and http://www.pjrc.com/mp3/simm/simm.html

KM41C4000D 4M x 1Bit CMOS Dynamic RAM datasheet http://pdf.datasheetcatalog.com/datasheets/400/250350_DS.pdf

Pics

simm ram and atmega328p simm ram and atmega328p simm ram and atmega328p simm ram and atmega328p

Video

arduino interfacing with simm ram module

Something went wrong with that request. Please try again.