N2CBU's Technical Information Resource

... as always, under construction ...





ReadMe for Icom RAM Module Programmer

(Revised 12 January 2001)


A word of caution before you begin:

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.

Safeguard #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.

Safeguard #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.


Construction Notes:

You will need a CD4040 IC, a 78L05 voltage regulator, an 8-pin strip of 1 inch tall 0.1 inch spaced header pins, a 12-pin strip of 1 inch tall 0.1 inch 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.


Software notes:

 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 accessible 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+ 500MHz workstation. This 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.


Frequency range expansion notes:

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.

I have enclosed the file from my R71A receivers, MY-R71.BIN and the hex dump MY-R71.HEX, as a starting point for offset tweakers. You can compare these files against the non-tweaked files, ORIG-R71.BIN and the hex dump ORIG-R71.HEX, to see what changes I made.  Note that values stored in the RAM module are big-endian, meaning the first value is the least significant, and that the memory locations in the static RAM IC are only 4-bits wide.

The RAM module memory addresses (in hex) containing the lower and upper frequency limits are:


30/31 = lowest frequency limit  (factory limit is 100kHz)

3B/3C = highest frequency limit  (factory limit is 30MHz)

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

000: 00F1FF1FF002FFFF000B59686800032005930005000000000100000030003000  (Original)

000: 00F1FF1FF002FFFF000B59686800032005930005000000001000000030003000  (Modified)

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

000: 00F1FF1FF002FFFF000B59686800032005930005000000000100000030003000  (Original)

000: 00F1FF1FF002FFFF000B59686800032005930005000000000100000030053000  (Modified)

Each mode, except for FM, has a frequency display correction factor, or offset, so the frequency display can be zeroed.  Without being able to edit these offsets you have no choice but to set the BFO to the Icom-specified frequencies if you want the R71's frequency display to read true.  These factory offsets are less than optimum especially when different IF filters are installed.  Now, you can set the BFO to the optimum frequency for the types of filters installed in the radio and then adjust the offset for each mode until the frequency display reads true.  This ability  is especially handy in the CW mode. You can now adjust the BFO frequency to produce a CW note at your preferred pitch, have it coincide with the CW filter's center, and have the frequency display read true.  To do this, select the CW narrow mode and tune a steady unmodulated carrier until the S-meter peaks, adjust the BFO until your preferred note is obtained, then edit the frequency offset so the display reads true.

The RAM module memory addresses (in hex) containing the frequency display offsets are as follows:

10/11 = LSB offset

12/13 = USB offset

14/15 = AM offset

16/17 = CW offset

18/19 = RTTY offset

Note that the FM mode has no entry in the table since the offset is zero by design:



That's all for now...  12-January-2001.