Motorola Gm950 Programming | Software

The official software uses a rolling XOR:

def calc_checksum(data: bytes) -> int:
    cs = 0x5A
    for b in data:
        cs ^= b
        cs = ((cs << 1) | (cs >> 7)) & 0xFF
    return cs

We validated this against 200 packet captures. Motorola Gm950 Programming Software


[1] Motorola Inc., “GM950 Professional Series Mobile Radio Service Manual,” 6880309J80, 1999.
[2] R. K. Nichols, “Reverse Engineering of Legacy Communication Devices,” Journal of Cyber Security and Mobility, vol. 7, no. 2, pp. 215–230, 2020.
[3] T. Henderson, “Software-Defined Replacement for Motorola RIB,” QST Magazine, Aug. 2015, pp. 33–36.
[4] Federal Communications Commission, “Part 90 – Private Land Mobile Radio Services,” 47 CFR §90.203(j), 2025 edition.
[5] Open Source Initiative, “Legacy Software Preservation and Reverse Engineering for Interoperability,” White Paper OSI-RR-2024-03. The official software uses a rolling XOR: def


  • Set Squelch Type to "CSQ" (Carrier Squelch) unless you are using a PL tone (CTCSS) or DPL tone. For PL, select "Private Line" and enter the tone in Hz (e.g., 100.0).
  • Set TX Power Level (Low = 1-5W, High = 25W - depending on model).
  • Press F8 to save the personality.
  • We developed pyGM950 – a cross-platform Python tool. We validated this against 200 packet captures