N2CBU's Technical Information Resource

... as always, under construction ...



README for RAM Module Programming Utility

11 December 1999 by Andrew Gerald, N2CBU


It's possible that due to a wiring error, parallel port error or software incompatibility you might erase the contents of your RAM module. If your RAM module is from an R71A you can restore its contents from the enclosed "ORIG-R71.BIN" file. I do not have any other "recovery" files and until some become available I urge caution. Perhaps it would be wise to test your interface on a RAM module from a R71A first before reading RAM modules from other radios. I will add "recovery" files for the other radios to this archive if they are sent to me.

*** Note-1: If the "WP" Write-Protect pin (see J2 on the interface schematic) is tied to ground instead of to +5v the critical lower RAM locations in the module are write protected. A simple modification to the interface board would be to add a write protect switch.

*** Note-2: If the "/WR" Write pin (see J2 on the interface schematic) is left unconnected when testing the interface then the entire RAM will be write protected. Thus you can test without much chance of erasing the contents of the RAM module.

Icom RAM board programming interface & R71A modification notes

You will need a CD4040 IC, a 78L05 voltage regulator, an 8-pin strip of 1" tall 0.1" spaced header pins, a 12-pin strip of 1" tall 0.1" spaced header pins, a DB25M, a length of ribbon or other type cable, and a piece of perf board. For the prototype I used a Radio Shack part number 276-149 prototyping board. It should be noted that my prototype does not have an on-board voltage regulator. I included the regulator on a subsequent board I built in 1991 which I gave away.

All parts may be obtained from Digikey (www.digikey.com) and certainly from other sources. A suitable header pin strip is Digikey part number "S1081-36" but any similar header pin material will work.

Circuit layout is simple, just take a look at the ram module in the R71 and imagine how the header material will have to be positioned. What you want to do is make a "socket" on the programming adapter which looks just like the "socket" in the R71A. Build up the circuit on a small piece of perf board with the 4040 in the center. The long side of the header pins will have to be bent slightly outwards for the ram module to fit. The ribbon cable from the PC will attach near the smaller header strip.

For the R71A to tune above 31 MHz, in addition to editing the RAM module, you will have to make a modification to the Logic Unit. I have included a file which describes how to do this. See the file named "R71MEM.TXT" for instructions. Credit for this part of the mod goes to the author of that file.

The software is NOT a polished product. There isn't much in the way of error checking when reading or writing a file to disk. It will however verify writes to the RAM module automatically after writing. I just added an unlisted (V)erify function accessable from the menu and an automatic CPU timing test. The software should work with a standard IBM-PC bi-directional parallel port with base addresses of 3BC, 378 and 278. Most modern computers, including laptops, now have bi-directional parallel ports. You may however need to mess with your parallel port configuration. I have not had any trouble running the software on my IBM Thinkpad 486-25 or on my AMD-K6-III-450 tower. That doesn't mean it will work for everyone though. Bi-directional mode is selected by writing a "one" bit to port base+2.5 and if your port works differently the program will likely fail. I have heard that some of the more advanced parallel port ICs need to have an "unlock" bit set before bi-directional mode can be enabled. If anyone can provide me with the necessary info I will update the software to support these ICs.

Note that values stored in the RAM module are big-endian and that the static RAM IC is only 4-bits wide (nibble mode.) Some important memory addresses (in hex) in the RAM module for the R71A are as follows:

10/11 = LSB offset
12/13 = USB offset
14/15 = AM offset
16/17 = CW offset
18/19 = RTTY offset
(FM has no offset)

30/31 = lowest frequency (factory is 100kHz)
3B/3C = highest frequency (factory 30MHz)

Example 1 - To change the lower frequency limit to 10kHz:

Original - 000: 00F1FF1FF002FFFF000B59686800032005930005000000000100000030003000
Modified - 000: 00F1FF1FF002FFFF000B59686800032005930005000000001000000030003000

Example 2 - To change the upper frequency limit to 35MHz:

Original - 000: 00F1FF1FF002FFFF000B59686800032005930005000000000100000030003000
Modified - 000: 00F1FF1FF002FFFF000B59686800032005930005000000000100000030053000

I've enclosed the file from my R71A receivers (MY-R71.BIN and the hex dump MY-R71.HEX) as a starting point for offset tweakers. The offsets are big-endian meaning that the first value is the least significant. You can compare these files against the non-tweaked files (ORIG-R71.BIN and the hex dump ORIG-R71.HEX) to see what changes have been made.