Here’s a chirp* run with a “bad” FT2D image. I’ve elided most of the "Bandplan … duplicates" warnings. The traceback occurs after loading the image, navigating to the Banks tab, when I try to click on a box in the second bank, which the radio’s user had defined with an immutable special memory location. The UI gives a modal error dialog “Failed to add # to mapping: list index out of range”, where # is the memory “Loc” I touched. The UI will never add or delete any instance in the selected bank thereafter. If one never touches a checkbox in the bank, all is OK. Chirp does not crash, but it won’t allow access to that memory bank. I believe it also does not change the entry in the bank location, so it’s not “corrupting” the memory image.
When I look at the browser, the entry for the “bad” bank is 0x1801, which is clearly too large for a 1000-entry memory. I’ve determined that the “18” bits are actually flags defining which immutable address to use for that location. They are [usually?] not in the memory image that chirp can access.
The easy changes will special-case those entries and prevent the UI from ever seeing them. I will also add the non-immutable special memory entries so that they can be displayed and changed in memedit.py. I do not think that the radio will allow those entries to be included in a bank, so they should have no effect on bankedit.py. If I could figure out the syntax, it’d probably be best to make the image actually acknowledge the top bit as an “unused” flag,
Since I do not have FT1D, I cannot test these changes on that radio. By reading the Yaesu manuals, it’s clear to me that the FT1D also has the problem that a radio can put a special memory into a bank reference, and that will cause FT1D users the same problem as an FT2D. The FTM-3200D also inherits from the FT1D. That will also need to be checked, although that radio shouldn’t be capable of getting into the special memory situation (according to its manual.)
$ chirp 2017-12-03 14:26:37.923 python2.7[17267:1313234] *** WARNING: Method userSpaceScaleFactor in class NSView is deprecated on 10.7 and later. It should not be used in new applications. Use convertRectToBacking: instead. /usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/mainapp.py:1971: Warning: invalid cast from 'GtkMenuBar' to 'GtkWindow' macapp.set_menu_bar(menu_bar) /usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/mainapp.py:1971: GtkWarning: gtk_window_add_accel_group: assertion 'GTK_IS_WINDOW (window)' failed macapp.set_menu_bar(menu_bar) WARNING: Bandplan North American Band Plan has duplicates [1800000-2000000 160 Meter Band simplex , 1800000-2000000 160 Meter Band simplex mode: CW ] … WARNING: Bandplan North American Band Plan has duplicates [29300000-29510000 Satellite downlink simplex , 29300000-29510000 Satellite Downlinks simplex ] /usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/settingsedit.py:126: Warning: value "0" of type 'guint' is invalid or out of range for property 'n-rows' of type 'guint' table = gtk.Table(len(group), 2, False) ERROR: Exception running RadioJob: list index out of range ERROR: -- Exception: -- ERROR: Traceback (most recent call last): File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/common.py", line 116, in _execute result = func(*self.args, **self.kwargs) File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/drivers/ft1d.py", line 503, in add_memory_to_mapping self.update_vfo() File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/drivers/ft1d.py", line 452, in update_vfo if not flags[channel].nosubvfo: File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/bitwise.py", line 208, in __getitem__ return self.__items[index] IndexError: list index out of range
ERROR: ---------------- ERROR: Job Args: (Memory[6], FT2Bank-1) ERROR: Job KWArgs: {} ERROR: Job Called from: File "/usr/local/bin/chirp", line 143, in <module> gtk.main() File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/bankedit.py", line 229, in do_mapping_adjustment job = common.RadioJob(do_mapping_index, fn, memory, mapping)
* I used the latest chirp from “brew” for Macintosh: CHIRP daily-20170714 on Darwin XXXXX 17.2.0 Darwin Kernel Version 17.2.0: Fri Sep 29 18:27:05 PDT 2017; root:xnu-4570.20.62~3/RELEASE_X86_64 x86_64 (Python 2.7.14)