R100 index
Motorola index
Back to Home
  R100 UHF PL Station
Code Plug Information

Compiled by Robert W. Meister WA1MIK from
data provided by Bernard Barink AJ4SX
  Print this Page


Some of this data may be different on a DPL station. We did the best we could when trying the various settings in the software. All we had available to work with were PL stations.

All data in the table below is hexadecimal.
"XX" indicates a value that changes with programming.

AddressMeaning or ContentsTX ValuesRX Values
00Serial Number: high two digits XXXX
01Serial Number: low two digits XXXX
02Empty0000
03Checksum (to equal FF) XXXX
04-07EEPROM Identifier 16,81,12,0116,81,12,01
08Number of Channels (always 01h) 0101
09TX Timeout Timer XX00
0ARe-key Delay (always 00h) 0000
0B-0DEEPROM Identifier 40,C0,1100,D0,00
0EUHF=09h, else 06h. Add 10h for DPL. 09 or 1909 or 19
0FConstant Data (always 3Bh) 3B3B
10-11RX PL/DPL Value: high, low 00,00XX,XX
12-23Empty0000
24-25TX PL/DPL Value: high, low XX,XX00,00
26-38Empty0000
39-3ABand and PL/DPL Control: high, low XX,XXXX,XX
3B-3DTX Frequency: high, middle, low (CH1) XX,XX,XX00,00,00
3E-40RX Frequency: high, middle, low (CH1) 00,00,00XX,XX,XX
41-43TX Frequency: high, middle, low (CH2) XX,XX,XX00,00,00
44-46RX Frequency: high, middle, low (CH2) 00,00,00XX,XX,XX
47-7FEmpty0000

Individual Field Details and Calculations:

In the following text, binary (bit-wise) values have a trailing "b", octal values have a trailing "o", and hexadecimal values have a trailing "h". All other numbers are decimal. Commas separate multiple sequential bytes.

The Serial Number is four decimal digits that are stored as individual 4-bit quantities in the code plug. For example, a serial number of 1359 would be stored as 13,59h. Usually the last four digits of the number printed on the model label are used, but my station had 00,00h in the code plug.

The Checksum is a value that causes the eight low bits of the sum of all 128 bytes in the EEPROM to be equal to FFh. To calculate a new one, set the checksum byte to 00 and total up all of the bytes, throw away all but the low byte, then set location 03h such that the total equals FFh. For example, if the sum equals 1F,CAh, the checksum byte would need to be changed to 35h (CAh + 35h = FFh). If you put 35h into location 03h and total all the bytes again, the result should have FFh in the low byte.

The Number of Channels field is always 1 for repeater radios.

The TX Timeout value is the number of five-second increments that should be used. The legal values (at least from the software's perspective) are: 00h = None, 24h = 3 Minutes, B4h = 15 Minutes.

The Re-key Delay Time value in seconds is always 00h for the R100 radios but it can have a non-zero value in the MC-Compact radios.

The Band and PL/DPL control bytes specify the operating band and tell the radio whether coded squelch is used in the radio, and whether it is PL or DPL. The radio treats PL or DPL as "coded" since there is one microprocessor for PL and a different one for DPL. The low 4 bits in location 0Eh are 09h for UHF or 06h for all other bands. Also the 10h bit in location 0Eh is set for DPL encode or decode. Typical UHF values are: 40,50h = TX no pl; 40,58h = TX coded; 4C,40h = RX no pl; 4E,40h = RX coded and these are depicted in the table below as individual bits.

Condition High Byte BitsLow Byte Bits
80402010842 1804020108421
TX No PL01 000 000 010 100 00
TX Coded01 000 000 010 110 00
RX No PL01 001 100 010 000 00
RX Coded01 001 110 010 000 00

Or, when viewed another way, we get this matrix.

BitHigh ByteLow Byte
80hbandalways 0
40hbandalways 1
20hbandalways 0
10hband1 for TX
08h1 for RX1 for coded TX
04h1 for RXalways 0
02h1 for coded RXalways 0
01halways 0always 0

The band bits (high nibble of high byte) are 10h for 66-88 MHz, 20h for 136-174 MHz, 30h for 174-225 MHz, and 40h for UHF.

The TX PL frequency value is (7986 * PL Freq in Hz) / 1000. Another formula that works is (8177 * PL Frequency in Hz) / 1024. Use the integral part of the result.

The RX PL frequency value is (6111 * PL Freq in Hz) / 100. Another formula that works is (15644 * PL Frequency in Hz) / 256. Use the integral part of the result.

TX DPL value: 023o = 60,26h; 073o = C0,76h; 445o = 02,4Ah; 754o = E3,D8h. This can be calculated as 2 times the (octal) DPL code + something in the high six bits.

RX DPL value: 023o = 60,27h; 073o = C0,77h; 445o = 02,4Bh; 754o = E3,D9h. This can be calculated as 2 times the (octal) DPL code + 1 + something in the high six bits.

The "something in the high six bits" is actually part of the 23-bit Golay code that is used in DPL signaling. There's a lookup table in both the programming software and the radio's CPU (in the DPL version) that provides eight more bits towards the final 23. For example, the full Golay code for DPL code 023o is: 11-101-100-011-100-000-010-011b.
The right-most 9 bits are the DPL code. The 100b in the middle is an unseen "4" digit that precedes all DPL codes. The remaining left 11 bits (11-101-100-011b) are check digits used for error correction and detection. When the 12-bit DPL code is left-shifted and 1 is added (for RX), the code becomes: 111-011-000-110-000-000-100-111b.
Note that the unseen 100b bits (the unseen "4") in the middle got changed to 000b. When this is arranged in four-bit groups and turned into hex, we get: 1110-1100-0110-0000-0010-0111b or EC,60,27h.
The code that's stored in the EEPROM is 60,27h, the rightmost 16 bits. The software and radio CPUs use a lookup table to recover the remaining 8 bits (ECh in this example) based on the original 9-bit DPL code.

TX and RX frequency calculations: the radio uses something similar to an MC145158 divider chip as its synthesizer. This device has two programmable dividers: N and A. The "N" register is 10 bits wide and the "A" register is 7 bits wide. The "N" register value occupies the 1st and 2nd (high and middle) bytes; the "A" register value is left-shifted one bit and it occupies the entire 3rd (low) byte. The VCO frequency is stored as three bytes that represent (N * 127) + A. If the frequency is blank, all three bytes are 00h.

The value "127" is part of these calculations because the UHF synthesizer uses a divide-by-127 prescaler chip to bring the synthesized frequency down to the range that the phase locked loop chip can work with. Other bands have different prescaler values.

Bit 2 (04h) in the 1st byte is set to 0 if the frequency is a 5 kHz multiple or set to 1 if it's a 6.25 kHz multiple. If the frequency is a multiple of both, then the 5 kHz step will be used.

It's easiest to do the math if the frequencies are represented as kHz rather than MHz.

Here's one example: TX = 454.01250 MHz with 6.25 kHz steps.
N * 127 + A = 454,012.50 kHz / 6.25 kHz = 72,642.
N = 72,642 divided by 127 = 571 (023Bh).
A = the remainder of 72,642 divided by (MOD) 127 = 125 (0111 1101b or 7Dh).
Put N (first 2 bytes) and A (3rd byte shifted left 1 bit = 1111 1010b or FAh) in the proper places and you get: 02,3B,FAh.
Because it's 6.25 kHz and not 5 kHz, set bit 2 (04h) in the 1st byte: 06,3B,FAh. This is the value that's stored in the EEPROM in two locations.

Another example: TX = 454.00000 MHz with 5.0 kHz steps.
N * 127 + A = 454,000.00 kHz / 5.0 kHz = 90,800.
N = 90,800 divided by 127 = 714 (02CAh).
A = the remainder of 90,800 divided by (MOD) 127 = 122 (0111 1010b or 7Ah).
Put N (first 2 bytes) and A (3rd byte shifted left 1 bit = 1111 0100b or F4h) in the proper places and you get: 02,CA,F4h. This is the value that's stored in the EEPROM in two locations.
Because it's 5 kHz, not 6.25 kHz, we DON'T set bit 2 (04h) in the 1st byte.

The RX frequency uses the same calculation except you need to subtract 21.4 MHz from the frequency first, due to low-side injection. In other words, the programmed frequency in the code plug will be the desired receive frequency minus 21.4 MHz. If you perform the calculations in kHz, remember to subtract 21,400 kHz!

One of the example code plug Bernard and I acquired had an odd quirk. In all frequency calculations, if the "A" value would be zero, they decrement the "N" value by 1 and set the "A" value to the prescaler value used in the calculations. I tested my UHF R100 station and determined that it generates exactly the same transmit carrier frequency whether A=0 or N got decremented and A got set to 127, so we don't think this is a necessary step in the calculation.

A repeater always has both CH1 and CH2 transmit and receive frequencies programmed the same, so the radio's frequency-select input lines will have no effect. Oddly, they didn't duplicate the PL/DPL information, which certainly could be different for each channel.

VHF Addendum:

In November 2020 Javier EB1WB sent me some photos of a VHF (136-174 MHz) R100 repeater and asked some questions about it. He eventually sent me the two code plug files and with Bernard's help we decoded some of the information in them. The text below documents the differences. The manual for the MC-Compact repeater is remarkably similar to the R100 repeater and the MC-Compact came in 66-88 MHz, 136-174 MHz, 174-225 MHz, and 450-470 MHz ranges.

The programming software he used for his VHF radios was exactly the same as the program we use for our UHF radios, so that program must be able to determine the operating band of the radios and limit the frequencies accordingly. We just have no way of testing this theory because the R100.COM program will only write to or read from a radio, and not a disk file, and we here in the United States only have UHF stations available.

The prescaler chip used in the UHF radios divides by 127(decimal). This value is used when calculating the TX and RX frequency data. For 66-88 MHz and 136-174 MHz radios, the prescaler chip divides by 40(decimal). For 174-225 MHz radios the prescaler chip divides by 64(decimal).

The Intermediate Frequency (IF) of all radios is 21.4 MHz. In the 66-88 MHz radios, the coded receive frequency is 21.4 MHz above the desired frequency (high-side injection). In all other bands, the coded receive frequency is 21.4 MHz below the desired frequency (low-side injection).

Contact Information:

The author can be contacted at: his-callsign [ at ] comcast [ dot ] net.
Bernard can be contacted at: Radio [ at ] PeKoRF [ dot ] com.

Back to the top of the page
Up one level (R100 index)
Up two levels (Motorola index)
Back to Home

This page originally posted on Tuesday 26-Sep-2012



Article text, artistic layout, and hand-coded HTML © Copyright 2012 by Robert W. Meister WA1MIK.

This web page, this web site, the information presented in and on its pages and in these modifications and conversions is © Copyrighted 1995 and (date of last update) by Kevin Custer W3KKC and multiple originating authors. All Rights Reserved, including that of paper and web publication elsewhere.