Yaesu VX-6 Protocol

LA4RT Jon Kåre Hellan - (email)

I investigated the protocol of the Yaesu VX-6 2m/70cm HT. It is different from the VX-7, but the similarities made it easy to get started. All info is taken from my own VX-6E, i.e. the European version. I don't expect the Asian VX-6 or the American VX-6R to be substantially different, although some details are probably different. Here are my results. I got most of it figured out, although I have to admit that I could write it up better. Please feel free to ask. Memory dumps of the Asian and American versions are also welcome.

Transfer protocol

The transfer protocol is basically as for the VX-7, see this page by Hiroto Fukui. The download size including headers is 32588 bytes, about twice as much as the VX-7.

Image downloading program

Here's a very simple Python program which I use to download memory images from the HT. It depends on the pyserial Python module. It is invoked from the command line like this:

  python <port> <outfile>

For example, using a USB programming cable on Linux:

  python /dev/ttyUSB0 vx6.out

Serial cable connected to first serial port on Linux:

  python /dev/ttyS0 vx6.out

Serial cable connected to first serial port on Windows:

  python COM0 vx6.out
The program probably works on Windows and Mac if you install Python and pyserial, but I have only tested it on Linux. Python usually comes standard with Linux, and pyserial comes prepackaged for many Linux distributions. On Ubuntu or Debian, you install the 'python-serial' package. On Windows and Mac, you can download it from the pyserial download page at Sourceforge.

If there is a glitch in communication, it is detected by means of two checksums, one at the end of an internal block, (which for good measure occurs twice - identical), and one at the end of the image.

I thought I knew how both checksums work. But recently Logan Browne W3LOG came up with a counterexample for the outer checksum. He also made another version of the image downloading program. See http://endurancetrails.com/?p=4. Until I understand this, checksum checking has been turned off in the downloading program

Example memory images

You can find all the memory images I downloaded from my own HT here.

Character set

0x0-0x9:   '0'-'9'
0xa-0x23:  'A'-'Z'
0x24:      space
0x25-0x2a: '+' '-' '/' '?' '[' ']'
Various other symbols further up until 0x40-

Representation of frequencies

Frequencies are encoded as kHz in binary coded decimal (BCD). A nice side effect is that you can read them in a hex editor (I use hexl in Emacs). Example:
05 0214 4000 c0ff ffff ffff ff00 0600 0c00 0d
     ^^ ^^^^
     144.000 MHz

Memory map

A few highlights.
0x097b:0x0a0a  24 memory bank names, each 6 bytes.

0x0a0b:0x0ae2  Home frequencies. 12 channel records, each 18 bytes.
e.g
02 4800 0540 c0ff ffff ffff ff00 0000 0c00 0d   0.540 MHz

0x0b19:0x0bf0  VFO frequencies for each band. 12 channel records, each 18 bytes

0x0c0b:0x1ca   24 memory banks, each 200 bytes.

0x1ecb:0x20f0  Channel flags. Skip, mask, etc.

0x21cb:0x6112  900 standard memories. Each channel 18 bytes.
e.g.
05 1214 5675 c024 2424 2424 2400 0600 0c00 00
     145.675   ^^ ^^^^ ^^^^ ^^ 600 kHz
     RX freq   spaces,         repeater  
	       i.e. no tag     skip

05 3516 2000 c096 0a1b 2402 0815 7400 0c00 00
     162.800   M  A R    2  8 157.400
     RX freq   Tag: 'MAR 28'  TX freq

0x6113:0x6808  99 frequency skip memories. Each channel 18 bytes.
0x6809:0x681a  Emergency Automatic ID memory. 18 bytes.
0x681b:0x6f22  50 pairs of band limit (PMS) memories. Each channel 18 bytes.
0x6f23:0x6fd6  10 direct recall memories. Each channel 18 bytes.

Rough notes

These are rough notes telling what I have found out right now. Counterexamples may make me change my mind. Byte values are in hex. 0xff is used as null.

[0x0000:0x000a] 11 bytes 'AH021' 2 e2 2 2 1 6
		   	 	      	   The '.vx6' files of VX-6
					   commander leave out the '6' byte.
					   A user on Yahoo groups reports
					   'AH021' 2 f2 2 2 1 4
146 null bytes 
[0x009d:0x00ae] 18 bytes		   curr. chan. rec. saved here
					   when in special bank mode
80 0044 6070 c099 161b 2406 2400 2000 0c00 00   446.070 MHz  'PMR 6 '
[0x00af:0x00c0] 18 bytes		   smart search start channel record
05 0243 4975 c0ff ffff ffff ff00 2000 0c00 0d   434.975 MHz
74 null bytes
[0x010b]	 0			   Auto power off. 
					   0-5 off/30m/1h/3h/5h/8h
[0x010c]	 1			   ARTS beep 0/1/2 off/in range/always
[0x010d]         0		           Bell. 0-5 off/1/3/5/8/cont 
[0x010e]         4                         Beep level (disp. val. - 1)
[0x010f:0x011e]  16 bytes CW ID
[0x011f]	 c			   cw training speed
					   0-10 off/4-13/15/17/20/24/30/40
[0x0120]	 5			   cw training mode
					   0-5 A/A_r/n/n_r/An/Anr
[0x0121]	 0			   Channel counter sweep width
					   0-3 5M/10M/50M/100M
[0x0122]         7			   Display brightness
[0x0123]	 1		           Current DTMF (0-9)
[0x0124:0x0125]  2 bytes 0 1
[0x0126]	 1		           Current FRG (0-63)
[0x0127:0x0128]  2 bytes ff ff
[0x0129]	 13			   EAI timer
					   0: int 1 m
					   int 2-10 15 20 30 40 50
					   con 1-10 15 20 30 40 50: 1d
[0x012a]	 2			   Emergency signal
					   0-7 BEEP/STROBE/BP+STR/BEAM/
					       BP+BEAM/CW/BP+CW/CWT
[0x012b:0x012d] 3 bytes 2 1c 18 1c
13 null bytes
[0x013b]         0			   Lamp (0 key, 1 cont, 2 off)
					   6 bits unused. 
[0x013c]         2                         Locking 2 = K+D, 3 = PTT
[0x013d]         46			   My menu (menu 1 = 0c)
[0x013e]         4                         Mic gain (disp. val. - 1)
[0x013f]         6                         Squelch
[0x0140]	 2
[0x0141]	 0			   On timer. 
					   0-90 off/10m/../24h - 10 m intervals
[0x0142]	 1			   Opening message
					   0-2: Off/DC/message text
[0x0143:0x0148]  ff ff ff ff ff ff	   Opening message text
[0x0149]	 ff			   P key function (menu 1 = 0c)
[0x014a]	 0			   Paging ABK (0=off, 2=on)
[0x014b:0x014c]	 4 2e			   Pager CDR (2 x disp. val. - 1)
[0x014d:0x014e]	 4 2e			   Pager CDT (2 x disp. val. - 1)
[0x014f:0x0152]  4 bytes		   passwd (4 digits)
[0x0153]         0
[0x0154]         0			   RF Squelch 
					   0: off. 1-9 S unit. 0a S9+
[0x0155]         1			   rx save. 
					   0-5: off/200ms/300/500/1s/2s
[0x0156]         3			   Scan resume 0-4 3s/5s/10s/Busy/Hold
[0x0157:0x015b] 5 bytes
00 0000 0000
[0x015c]        2			    TX timeout: 0-4: off/1/3/5/10min
[0x015d]        0			    Wakeup: 0-5: off/5s/10s/20s/30s/eai
[0x015e]        a8     flags.  CW ID on e8. VFO mode band:    0x80
					    CW ID:	      0x40
					    Scan lamp:	      0x20
					    Tone search slow: 0x10
					    ARS:	      0x08
				            Beep:	      0x04
					    Tone Split:	      0x02
					    DTMF auto:	      0x01
[0x015f]        c2     flags		    Busy LED:	      0x80
					    Tone search mute: 0x40
					    Busy ch lock out: 0x10
					    Band edge beep :  0x08
					    TX save:	      0x01
[0x0160]        c7     flags.  Cont. smart search:  0x20
			       EAI:		    0x10
			       CW trng flash	    0x08
			       CW trng unit         0x04  on -> WPM
			       HM/REV REV:          0x02
			       M/T-Call T-CALL:     0x01
			       
[0x0161]        51     flags.  Auto step:           0x80
			       Auto RX mode:	    0x40
			       ARTS on		    0x20
			       ARTS intv 15 s	    0x10
			       DCS Reverse:         0x04
			       store to free channel 
			       next = 1, lower = 0  0x01
[0x0162]        40     flags   My menu btn internet 0x80
			       Internet fn on	    0x40
			       FRG on		    0x20
			       Weather alert scan:  0x10
			       Temp in F:	    0x08
			       Attenuator:	    0x04
[0x0163:0x018a] 38 bytes
00 00
00 0000 0000 0000 0000 0000 0000 0000 0000 00
00 0000 0000 0000 0000 0000 0000 0000 0000 00
00 00
[0x018b:0x01ba] 48 bytes		2 bytes context for each of 24 banks
					ff ff: bank not valid
					otherwise, details unknown
00 1800 1000 0e00 0a00 04ff ffff ffff ffff ff
ff ffff ffff ffff ffff ffff ffff ffff ffff ff
ff ffff ffff ffff ffff ffff ff
[0x01bb:0x01ca] 16 bytes 0's
[0x01cb:0x024a] 128 bytes, see below, repeated next 128 bytes
[0x01cb]	 00		        1 DMR on / 0 DMR off
[0x01cc]	 00			unknown
[0x01cd]	 02			0 mem only / 1 or 2 otherwise ???
[0x01ce]	 02			tuning mode
					0 mem only / 1 VFO / 2 mem / 
					3 mem tun / 4 PMS / 5 home
[0x01cf:0x01d0] 2 bytes:		unknown - only 0 0 seen so far
00 00
[0x01d1]	 02			saved mem / vfo / .. (when in sp.bank)
[0x01d2]	 07			saved channel flags  (when in sp.bank)
[0x01d3:0x01d6] 4 bytes:
01 0300 65
[0x01d7]	 06			current band
[0x01d8]	 03		        VFO band
[0x01d9]	 05			flags for current channel.
					during special search, it describes
					start channel
					bit 4 (0x10): Clock shift
					bit 5 (0x20): Half deviation
					bit 6 (0x40): step has been changed
					bit 7 (0x80): alpha
[0x01da]	 03			Current power 0: LO1 1: LO2 
		 				      2: LO3 3: HI
[0x01db]	 02                     Current ch. step: 
					0-9: 
					5/10/12.5/15/20/25/50/100/9/ch.count
[0x01dc]	 01			Rpt shift dir: 
					0: simplex, 1: -, 2: +, 3: Odd split
[0x01dd]	 0			Tone mode. 
					0-7: off/TONE/TN-SQL/DCS/RV TN/
					     D CODE/T DCS/D TONE 
[0x01de]	 0c			Current CTCSS tone
[0x01df]	 0			Current DCS code
[0x01e0]	 0			Current mode: 0-2: FM/AM/WFM
[0x01e1:0x01e3]  14 57 00		Current RX freq (145.700 MHz)
[0x01e4]	 0			unknown
[0x01e5:0x01e7]  00 06 00		Current TX freq or repeater shift
[0x01e8]	 0			unknown
[0x01e9:0x01ee]  24 2424 2424 24	Current text tag
[0x01ef]	 0			unknown. Same as offset 16 in 
					memory channel record
[0x01f0]	 0			bit 7 (0x80): Pager on
[0x01f1] 	 0			1: special bank mode
[0x01f2] 	 0			80: memory bank mode.
[0x01f3] 	 5			special bank no: 3/5/6: wx/marine/radio
[0x01f4] 	 3			current channel flags
[0x01f5:0x0212]:			Same structure as [0x01d7:0x01f4]
					data for current channel saved here
					when EAI or dual watch is activated.
06 0385 0305 0000 0c00 0015 6300 0000   156.300 'MAR 6'
0600 0016 0a1b 2406 2400 0000 0005 03
[0x0213:0x0214] 2 bytes: 00 04		current channel no
					During PMS scan: P1: 1000, P2: 1002
[0x0215] 	 0			unknown
[0x0216] 	 0			bank no. (disp. no -1)
[0x0217]	 0			unknown
[0x0218]	 2			flags for current bank,
					details unknown
[0x0219]	 0			unknown
[0x021a] 	 3			current DMR no
[0x021b:0x021d] 3 bytes			unknown
00 0000
[0x021e] 1 bytes: 6			current WX ch
[0x021f:0x0220] 2 bytes: 00 16		current marine ch (gap of 2 at
					75/76, i.e. 74 stored as 74, 
					77 stored as 75)
[0x0221] 	 0			unknown
[0x0222] 	 35			current SW station
[0x0223:0x022a] 8 bytes:		unknown
00 0000 0000 0000 14
[0x022b:0x022c] 2 bytes: 00 16		priority channel
[0x022d]         00	 		scan width
					0-n  1M/2M/5M/Band/All/P1/P2/..
[0x022e]         04	 		mem scan width
					0-n  ?/Tag 1/Tag 2/Band/All chan/P1/P2/..
[0x022f]	 01			unknown
[0x0230]	 0			scan mode 
					0/1/2/5/8/0a
					none/vfo/memory/dual
					watch/smart scan/channel counting
[0x0231:0x0238] 8 bytes			unknown
02 0124 2406 0300 00
[0x0239:0x23b]  3 bytes: 08 81 00	scan start freq?
[0x023c:0x0240] 5 bytes			unknown
0000 0300 00
[0x0241]	 ff			band edge (PMS) no, ff if n/a
[0x0242:0x0246] 5 bytes			unknown
00 00 00 02 00 
[0x0247]	 0			EAI ?
[0x0248]	 0			unknown
[0x0249]	 27			last menu item (disp. no -1)
[0x024a]	 29			checksum: sum [0x01cb:0x0249] & 0xff
[0x024b:0x02ca] same as [0x01cb:0x024a]
[0x02cb:0x036a] 160 bytes		DTMF codes 0-9 - 16 bytes each
[0x03db:0x07da]	1024 bytes		FRG codes 0-63 - 16 bytes each
					8 bytes code, 8 bytes alpha, other?
416 null bytes
[0x097b:0x0a0a] 144 bytes (24*6), step 6    Bank names
11 0a16 241d 1b16 0a1b 121d 1219 161b 2424 24     'HAM TR' 'MARITI' 'PMR   '
11 0a16 2418 1c11 0a16 241c 240b 0a17 1424 06     'HAM OS' 'HAM S ' 'BANK 6'
0b 0a17 1424 070b 0a17 1424 080b 0a17 1424 09     'BANK 7' 'BANK 8' 'BANK 9'
0b 0a17 1401 000b 0a17 1401 010b 0a17 1401 02     'BANK10' 'BANK11' 'BANK12'
0b 0a17 1401 030b 0a17 1401 040b 0a17 1401 05     'BANK13' 'BANK14' 'BANK15'
0b 0a17 1401 060b 0a17 1401 070b 0a17 1401 08     'BANK16' 'BANK17' 'BANK18'
0b 0a17 1401 090b 0a17 1402 000b 0a17 1402 01     'BANK19' 'BANK20' 'BANK21'
0b 0a17 1402 020b 0a17 1402 030b 0a17 1402 04     'BANK22' 'BANK23' 'BANK24'
[0x0a0b:0x0ae2] 216 bytes (12*18), step 18    Home frequencies
02 4800 0540 c0ff ffff ffff ff00 0000 0c00 0d   0.540 MHz    1 (BC)
00 4000 1800 c0ff ffff ffff ff00 0000 0c00 0d   1.800 MHz    2 (SW)
00 0003 0000 c0ff ffff ffff ff00 0000 0c00 0d   30.000 MHz   3 (50 MHz ham)
05 8708 8000 c0ff ffff ffff ff00 0000 0c00 0d   88.000 MHz   4 (FM BC)
05 8617 4000 c0ff ffff ffff ff00 0000 0c00 0d   174.000 MHz  
05 4510 8000 c0ff ffff ffff ff00 0000 0c00 0d   108.000 MHz  5 (Air)
05 0214 4000 c0ff ffff ffff ff00 0600 0c00 0d   144.000 MHz  6 (144 MHz ham)
05 8617 4000 c0ff ffff ffff ff00 0000 0c00 0d   174.000 MHz  7 (VHF TV)
05 0222 2000 c0ff ffff ffff ff00 0000 0c00 0d   222.000 MHz  8(222 MHz ham)
05 0543 2000 c0ff ffff ffff ff00 0000 0c00 0d   432.000 MHz  9 (430 MHz ham)
05 8647 0000 c0ff ffff ffff ff00 0000 0c00 0d   470.000 MHz  a (UHF TV)  
05 0286 0000 c0ff ffff ffff ff00 0000 0c00 0d   860.000 MHz  b (Action band) 
54 null bytes (3*18)
[0x0b19:0x0bf0] 216 bytes (12*18), step 18     VFO frequencies
02 4800 0540 c0ff ffff ffff ff00 0000 0c00 0d   0.540 MHz    1
00 4000 8900 c0ff ffff ffff ff00 0000 0c00 0d   8.900 MHz    2
00 0005 8995 c0ff ffff ffff ff00 0000 0c00 0d   58.995 MHz   3
05 8708 8000 c0ff ffff ffff ff00 0000 0c00 0d   88.000 MHz   4
05 8617 4000 c0ff ffff ffff ff00 0000 0c00 0d   174.000 MHz
05 4511 1112 c0ff ffff ffff ff00 0000 0c00 0d   111.112 MHz  5
05 0214 6025 c0ff ffff ffff ff00 0600 0c00 0d   146.025 MHz  6
05 8617 4000 c0ff ffff ffff ff00 0000 0c00 0d   174.000 MHz  7
05 0239 9975 c0ff ffff ffff ff00 0000 0c00 0d   399.975 MHz  8
05 0245 5550 c0ff ffff ffff ff00 2000 0c00 0d   455.550 MHz  9
05 8655 5550 c0ff ffff ffff ff00 0000 0c00 0d   555.550 MHz  a
05 0288 0000 c0ff ffff ffff ff00 0000 0c00 0d   880.000 MHz  b
26 null bytes
[0x0c0b:0x0cd2] 200 bytes - a memory bank. 
		26 bytes - 13 channels - in use
00 0000 0100 0200 0300 0400 0500 0600 0700 0800 0900 0a00 0b00 0c
ff ff ..
[0x0cd3:0x0d9a] 200 bytes - a memory bank
		18 bytes - 9 channels - in use
00 1400 1500 1600 1700 1800 1900 1a00 1b00 1cff ffff ..
[0x0d9b:0x0e62] 200 bytes - a memory bank
		16 bytes - 8
00 1e00 1f00 2000 2100 2200 2300 2400 25ff ffff ..
[0x0e63:0x0f2a] 200 bytes - a memory bank
		12 bytes - 6 channels - in use
00 2800 2900 2a00 2b00 2c00 2dff ffff ..
[0x0f2b:0x1eca] 200 bytes - a memory bank
		6 bytes - 3 channels - in use
00 3200 3300 34ff ffff ..
[0x0ff3:0x1eca] 3800 null bytes - 19 unused memory banks
[0x1ecb:0x208c] 450 bytes           channel flags 4 bits/channel
				    900 standard memories
37 3733 3333 3323 2222 2237 3337 3373 7777 77
77 6277 7777 7700 7707 0000 00..
[0x208d:0x20bd] 49 bytes 0's        channel flags, 98 frequency skip memories
[0x20be]        10                  channel flags 
				    EAI channel, 99th frequency skip memory
[0x20bf:0x20f0] 50 bytes            channel flags
				    50 pairs of band-edge memories
33 3300 00..
[0x20f1:0x218c] 156 bytes 33's
[0x218d:0x21ca] 62 bytes 0's
[0x21cb:0x6112] 16200 bytes - 900 standard memories
05 0214 5500 c024 2424 2424 2400 0600 0c00 00   145.500 MHz    1
05 1214 5600 c024 2424 2424 2400 0600 0c00 00   145.600 MHz    2
05 1214 5625 c024 2424 2424 2400 0600 0c00 00   145.625 MHz    3
05 1214 5675 c024 2424 2424 2400 0600 0c00 00   145.675 MHz    4
05 1214 5700 c024 2424 2424 2400 0600 0c00 00   145.700 MHz    5
05 1214 5712 c024 2424 2424 2400 0600 0c00 00   145.712 MHz    6
05 1214 5750 c024 2424 2424 2400 0600 0c00 00   145.750 MHz    7
05 1214 5787 c024 2424 2424 2400 0600 0c00 00   145.787 MHz    8
05 1543 4675 c024 2424 2424 2400 2000 0c00 00   434.675 MHz    9
05 1543 4775 c024 2424 2424 2400 2000 0c00 00   434.775 MHz    10
05 1543 4850 c024 2424 2424 2400 2000 0c00 00   434.850 MHz    11
05 1543 4900 c024 2424 2424 2400 2000 0c00 00   434.900 MHz    12
05 3214 5425 c024 2424 2424 2443 4600 0c00 00   145.425 MHz    13
05 3214 5425 c0a4 2424 2424 2443 4600 0c00 00   145.425 MHz    
05 0543 4675 c0a4 2424 2424 2400 2000 0c00 00   434.675 MHz
05 0215 6700 c09d 2411 0a1f 1700 0600 0c00 00   156.700 MHz    
05 0215 6300 c096 0a1b 2406 2400 0600 0c00 00   156.300 MHz
05 1214 5600 c0a4 2424 2424 2400 0600 0c00 00   145.600 MHz
05 1214 5637 c0ff ffff ffff ff00 0600 0c00 0d   145.637 MHz
05 1214 5737 c0ff ffff ffff ff00 0600 0c00 0d   145.737 MHz
05 0515 6300 c096 0a1b 2406 2400 0600 0c00 00   156.300 MHz    21
05 0515 6700 c09d 2411 0a1f 1700 0600 0c00 00   156.700 MHz    22
05 0515 6800 c096 0a1b 2401 0600 0600 0c00 00   156.800 MHz    23
05 0516 1600 c096 0a1b 2402 0015 7000 0c00 00   161.600 MHz    24
05 3516 2000 c096 0a1b 2402 0815 7400 0c00 00   162.000 MHz    25
05 3516 0925 c096 0a1b 2406 0615 6325 0c00 00   160.925 MHz    26
05 0515 6725 c09c 140a 171c 0e00 0600 0c00 00   156.725 MHz    27
05 0515 5500 c096 0a1b 2415 0100 0600 0c00 00   155.500 MHz    28
05 0515 5525 c096 0a1b 2415 0200 0600 0c00 00   155.525 MHz    29
05 0515 5650 c096 0a1b 2415 0300 0600 0c00 00   155.650 MHz    30
00 0044 6005 c099 161b 2401 2400 2000 0c00 00   446.005 MHz    31
00 0044 6020 c099 161b 2402 2400 2000 0c00 00   446.020 MHz    32
00 0044 6030 c099 161b 2403 2400 2000 0c00 00   446.030 MHz    33
00 0044 6045 c099 161b 2404 2400 2000 0c00 00   446.045 MHz    34
00 0044 6055 c099 161b 2405 2400 2000 0c00 00   446.055 MHz    35
00 0044 6070 c099 161b 2406 2400 2000 0c00 00   446.070 MHz    36
00 0044 6080 c099 161b 2407 2400 2000 0c00 00   446.080 MHz    37
00 0044 6095 c099 161b 2408 2400 2000 0c00 00   446.095 MHz    38
05 1543 4875 c0ff ffff ffff ff00 2000 0c00 0d   434.875 MHz
05 3214 4687 c0ff ffff ffff ff43 4862 0c00 0d   144.687 MHz
05 1214 5637 c024 2424 2424 2400 0600 0c00 00   145.637 MHz    41
05 1214 5737 c024 2424 2424 2400 0600 0c00 00   145.737 MHz    42
05 1214 5762 c024 2424 2424 2400 0600 0c00 00   145.762 MHz    43
00 1043 4600 c024 2424 2424 2400 2000 0c00 00   434.600 MHz    44
05 1243 4875 c024 2424 2424 2400 2000 0c00 00   434.875 MHz    45
05 3214 4687 c024 2424 2424 2443 4862 0c00 00   144.687 MHz    46
05 1243 4875 c024 2424 2424 2400 2000 0c00 00   434.875 MHz    47
05 0214 5500 c024 2424 2424 2400 0600 0c00 00   145.500 MHz    48
ff ffff ffff ffff ffff ffff ffff ffff ffff ff   never used
ff ffff ffff ffff ffff ffff ffff ffff ffff ff   never used
05 1214 5650 c024 2424 2424 2400 0600 0c00 00   145.650 MHz    51
05 1214 5775 c024 2424 2424 2400 0600 0c00 00   145.775 MHz    52
05 1543 4875 c024 2424 2424 2400 2000 0c00 00   434.875 MHz    53
ff ffff ffff ffff ffff ffff ffff ffff ffff ff   never used
..
[0x6113:0x6808] 1782 bytes -  99 frequency skip memories
00 0004 8135 c0ff ffff ffff ff00 0000 0c00 0d   48.135 MHz (?)
ff ffff ffff ffff ffff ffff ffff ffff ffff ff   never used
..
[0x6809:0x681a] 18 bytes - EAI channel memory
05 1214 5600 c024 2424 2424 2400 0600 0c00 00   145.600 MHz  EAI
[0x681b:0x6f22] 1800 bytes - 50 pairs of band-edge (PMS) memories
05 1214 5600 c024 2424 2424 2400 0600 0c00 00   145.600 MHz  L1
05 1214 5787 c024 2424 2424 2400 0600 0c00 00   145.787 MHz  U1
05 1243 4600 c024 2424 2424 2400 2000 0c00 00   434.600 MHz  L2
05 1243 4975 c024 2424 2424 2400 2000 0c00 00   434.975 MHz  U2
ff ffff ffff ffff ffff ffff ffff ffff ffff ff   never used
..
[0x6f23:0x6fd6] 180 bytes - 10 direct recall memories 
05 0214 4000 c0ff ffff ffff ff00 0600 0c00 0d   144.000 MHz
05 0214 4000 c0ff ffff ffff ff00 0600 0c00 0d   144.000 MHz
05 0214 4000 c0ff ffff ffff ff00 0600 0c00 0d   144.000 MHz
05 0243 4900 c0ff ffff ffff ff00 2000 0c00 0d   434.900 MHz
05 0214 4000 c0ff ffff ffff ff00 0600 0c00 0d   144.000 MHz
05 0214 4000 c0ff ffff ffff ff00 0600 0c00 0d   144.000 MHz
05 0214 4000 c0ff ffff ffff ff00 0600 0c00 0d   144.000 MHz
05 0214 4000 c0ff ffff ffff ff00 0600 0c00 0d   144.000 MHz
05 0214 4000 c0ff ffff ffff ff00 0600 0c00 0d   144.000 MHz
05 0214 4000 c0ff ffff ffff ff00 0600 0c00 0d   144.000 MHz
116 null bytes
[0x704b:0x708a] 64 bytes 0's
[0x708b:0x709e] 20 bytes d's
3754 null bytes
[0x7f49]         c9			unknown
[0x7f4a]	 ff			unknown
[0x7f4b]	 e7			checksum sum[0x0010:0x7f4a] & 0xff
					or       sum[0x000f:0x7f49] & 0xff
It is unclear how this checksum works. On my own HT, I can get a
matching checksum by summing - modulo 256, either the byte range
[0x0010:0x7f4a], or the range [0x000f:0x7f49], or the range
[0:0x7f4a], but excluding the byte at 0xa. However, neither of these works
for W3LOG's image. The '.vx6' files of VX-6 commander leave out the
byte at 0xa.

There are 
900 standard memories
99 frequency skip memories
11 home channels
50 sets of band-edge memories
24 memory banks, up to 100 channels each.
1 emergency automatic ID channel.
10 direct memory recall channels.

Channel record is 18 bytes
[0]:     bit 4 (0x10): Clock shift
	 bit 5 (0x20): Half deviation
	 bit 6 (0x40): step has been changed
		       the bit stays on even after you switch back to
		       default step.
[1]:     bits 0-3 (0x0f): step. 0-8: 5/10/12.5/15/20/25/50/100/9
	 bits 4-5 (0x30): Rpt shift dir. 0.3: simplex/-/+/odd split
	 bits 6-7 (0xc0): mode: 0-2: FM/AM/WFM
[2:4]:   RX Freq
[5]:     bits 0-2 (0x07): tone mode: 
	                  0-7: off/TONE/TN-SQL/DCS/RV TN/D CODE/T DCS/D TONE 
         bit  3   (0x80): Pager
         bits 6-7 (0xc0): power 0-3: LOW 1/LOW 2/LOW 3/HI
[6:11]:  Text tag. If displayed, initial letter ored with 0x80 flag.
	 Tag can be all ff or all space.
[12:14]: TX Freq or repeater shift
[15]:    CTCSS tone
[16]:    DCS code
[17]:    unknown. VFO, home and DMR channels have 0d. When you choose
	 a freq with VFO and save, you get 0d. Most memory channels
	 have 0, but change to 0d first time  CTCSS or DCS is
	 activated, and never change back. It's possible that all
	 0's are from channels programmed by VX-6 Commander.

Channel flags starting at 0x1ecb
Half bytes switch places in a hex editor. It is '2 1 4 3' ..
bits 0-1 (0x3): 0: Not valid
		1: Masked
		2: Masked
		3: Regular
bit 2 (0x4):    Set if skipped memory
bit 3 (0x8):    Set if preferential scan memory