mungewell / zoom-zt2

Python script to install/remove effects from the Zoom G1Four pedal
MIT License
50 stars 10 forks source link

A1Four effects not working on G3n #66

Open mungewell opened 6 months ago

mungewell commented 6 months ago

Reported by user on Reddit, the A1Four effects (EQ_AVN.ZD2 and EQ_EVN.ZD2) are not working on his G3n.

Using my GCE-3 I was able to confirm the failure. I installed the effects (as the only ones on the device)

$ python3 ../zoomzt2.py -I EQ_AVN.ZD2 EQ_EVN.ZD2
Installing effect: EQ_AVN.ZD2
Installing effect: EQ_EVN.ZD2

$ python3 ../zoomzt2.py -s -R FLST_SEQ.ZT2
Group 2 : FILTER
    EQ_AVN.ZD2 (ver= 1.00 ), group= 2 , id= 0x2a00280 , installed= 1
    EQ_EVN.ZD2 (ver= 1.00 ), group= 2 , id= 0x2a00282 , installed= 1
Group 6 : MODULATION
Group 7 : SFX
Group 8 : DELAY

There are actually more ZD2 files on the device, but not in the FLST_SEQ.ZT2. Not sure whether safe to delete them...

I also checked to see if these were listed in the Guard file, they are not.

$ strings GUARDZDL.ZT2  | grep EQ
GT_GEQ.ZD2
GT_GEQ_7.ZD2
BA_GEQ.ZD2
ST_B_GEQ.ZD2

Then I jumped into Windows and looked with Guitar-Lab. It seemed 'confused', front panel only noted the presence of other effects, but when editing a patch NO effects were present (other than the pseudo Bypass/Rythm/Loopers). Screenshot (6) Screenshot (5)

mungewell commented 6 months ago

When returning to Linux, I found that the FLST_SEQ.ZT2 was actually empty. It looks like Guitar-Lab removed the effects...

$ python3 ../zoomzt2.py -s -w -R FLST_SEQ.ZT2

$ hexdump -C FLST_SEQ.ZT2
00000000  3e 3e 3e 00 00 00 00 00  00 00 00 00 00 00 00 00  |>>>.............|
00000010  00 00 00 00 00 00 00 00  00 00 42 59 50 41 53 53  |..........BYPASS|
00000020  2e 5a 44 32 00 00 00 00  00 00 00 00 01 00 00 00  |.ZD2............|
00000030  00 00 00 00 3c 3c 3c 00  00 00 00 00 00 00 00 00  |....<<<.........|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000039f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00        |..............|
000039fe

So I had to re-install them...

$ python3 ../zoomzt2.py -I EQ_AVN.ZD2 EQ_EVN.ZD2
Installing effect: EQ_AVN.ZD2
Installing effect: EQ_EVN.ZD2

$ python3 ../zoomzt2.py -s -w -R FLST_SEQ.ZT2
Group 2 : FILTER
    EQ_AVN.ZD2 (ver= 1.00 ), group= 2 , id= 0x2a00280 , installed= 1
    EQ_EVN.ZD2 (ver= 1.00 ), group= 2 , id= 0x2a00282 , installed= 1

$ hexdump -C FLST_SEQ.ZT2
00000000  3e 3e 3e 00 00 00 00 00  00 00 00 00 00 00 00 00  |>>>.............|
00000010  00 00 00 00 00 00 00 00  00 00 42 59 50 41 53 53  |..........BYPASS|
00000020  2e 5a 44 32 00 00 00 00  00 00 00 00 01 00 00 00  |.ZD2............|
00000030  00 00 00 00 3c 3c 3c 00  00 00 00 00 00 00 00 00  |....<<<.........|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 3e 3e  |..............>>|
00000050  3e 00 02 00 00 00 00 00  00 00 00 00 00 00 00 00  |>...............|
00000060  00 00 00 00 00 00 00 00  45 51 5f 41 56 4e 2e 5a  |........EQ_AVN.Z|
00000070  44 32 00 00 00 31 2e 30  30 00 01 80 02 a0 02 00  |D2...1.00.......|
00000080  00 00 45 51 5f 45 56 4e  2e 5a 44 32 00 00 00 31  |..EQ_EVN.ZD2...1|
00000090  2e 30 30 00 01 82 02 a0  02 00 00 00 3c 3c 3c 00  |.00.........<<<.|
000000a0  02 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00002130  00 00 00 00 00 00                                 |......|
mungewell commented 6 months ago

ToneLib-Zoom is not much help either, though might work for OP. Screenshot_2023-12-21_13-23-07

It is possible to navigate and build patches via the Midi interface, however it's quiet 'brutal'... :-(

mungewell commented 6 months ago

Firstly you need to know the effect ID in 7-bit values (as will be sent over Midi)

effect = 0x2a00280
print("Effect 0x{:08x} expands to 7-bit ->".format(effect))

print("{:02x}".format(effect & 0x7F))
print("{:02x}".format((effect >> 7) & 0x7F))
print("{:02x}".format((effect >> 14) & 0x7F))
print("{:02x}".format((effect >> 21) & 0x7F))
print("{:02x}".format((effect >> 28) & 0x7F))

Gives

$ python3 effect_num.py
Effect 0x02a00280 expands to 7-bit ->
00
05
00
15
00

The navigate pedal to a preset you don't care about, we'll install the effect in the first (zero-th) slot by sending a SysEx

$ python3 ../zoomzt2.py -c temp.ztpc
$ python3 ../decode_preset.py -s temp.ztpc  | head
Name: Em=ty     
Patch Volume: 100
Effect 1: 0x02000070
   Enabled: True
   Param 1: 0
   Param 2: 0
   Param 3: 0
   Param 4: 0
   Param 5: 0
   Param 6: 0

$ amidi -p hw:1,0,0 -S 'f0 52 00 6e 64 03 00 00 01 00 05 00 15 00 f7'

$ python3 ../zoomzt2.py -c temp.ztpc
$ python3 ../decode_preset.py -s temp.ztpc  | head
Name: Em=ty     
Patch Volume: 100
Effect 1: 0x02A00280
   Enabled: True
   Param 1: 24
   Param 2: 36
   Param 3: 24
   Param 4: 24
   Param 5: 24
   Param 6: 24

The screen is bust on my G1Four (it's the first one I use for doing 'weird' stuff), but reading the 'screen' through SysEx it looks like effect is installed and working

$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 64 02 00 09 00 F7' -r screen.bin -t 2
1023 bytes read

$ python3 ../decode_screens.py  screen.bin 
---
Effect: A.Vn GEQ (On)
131 : 0.0
270 : 0.0
450 : 0.0
524 : 0.0
1.4k : 0.0
3.0k : 0.0
6.0k : 0.0
VOL : 80
---

However using ToneLib, it shows as 'Bypass'. Screenshot_2023-12-21_13-44-22

mungewell commented 6 months ago

Doing the same on the GCE-3_as_G3n was not as successful. It appears that the 'screen' does NOT show the effect name, this is behavior we have seen before...

$ amidi -p hw:1,0,0 -S 'b0 20 20 c0 01'
$ python3 ../zoomzt2.py -c temp.ztpc
$ python3 ../decode_preset.py -s temp.ztpc  | head
Name: Empty     
Patch Volume: 100
Effect 1: 0x00000000
   Enabled: True
   Param 1: 0
   Param 2: 0
   Param 3: 0
   Param 4: 0
   Param 5: 0
   Param 6: 0

$ amidi -p hw:1,0,0 -S 'f0 52 00 6e 64 03 00 00 01 00 05 00 15 00 f7'

$ python3 ../zoomzt2.py -c temp.ztpc
$ python3 ../decode_preset.py -s temp.ztpc  | head
Name: Empty     
Patch Volume: 100
Effect 1: 0x02A00280
   Enabled: True
   Param 1: 0
   Param 2: 0
   Param 3: 0
   Param 4: 0
   Param 5: 0
   Param 6: 0

$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 64 02 00 05 00 F7' -r temp.bin -t 2
1015 bytes read
$ python3 ../decode_screens.py  temp.bin 
---
Effect:  (Off)
 : 
 : 
 : 
 : 
---

I then confirmed that the ZD2 are (still) installed.

$ python3 ../zoomzt2.py -s -w -R FLST_SEQ.ZT2
Group 2 : FILTER
    EQ_AVN.ZD2 (ver= 1.00 ), group= 2 , id= 0x2a00280 , installed= 1
    EQ_EVN.ZD2 (ver= 1.00 ), group= 2 , id= 0x2a00282 , installed= 1

So it appears that these ZD2 are somehow incompatible with the G3n... time to look into the Code segment I guess.

mungewell commented 6 months ago

To get at the code segment...

$ python3 ../decode_effect.py EQ_AVN.ZD2 -c EQ_AVN.ZD2.code
$ python3 ../decode_effect.py EQ_EVN.ZD2 -c EQ_EVN.ZD2.code
$ mips64-linux-gnuabi64-readelf -a EQ_AVN.ZD2.code > EQ_AVN.ZD2.code.readelf.txt
$ mips64-linux-gnuabi64-readelf -a EQ_EVN.ZD2.code > EQ_EVN.ZD2.code.readelf.txt

EQ_AVN.ZD2.code.readelf.txt EQ_EVN.ZD2.code.readelf.txt

There doesn't seem to be anything (too obviously) calling external SONAMEs, which is the case with the modules of the V3 and V6 voice processors. There could be some data value (minimum supported revision etc) which stops the effect loading.

These symbols look like they are defining the parameters for each of the EQ sliders, so should be possible to duplicate their values into the other EQ effect, if that's all the OP actually needs.

    42: 80000468    28 OBJECT  LOCAL  HIDDEN    13 geq7_freq
    43: 800004c8    28 OBJECT  LOCAL  HIDDEN    13 geq7_q
    44: 80000488    28 OBJECT  LOCAL  HIDDEN    13 geq7_max
    45: 800004a8    28 OBJECT  LOCAL  HIDDEN    13 geq7_min
    46: 800004e8    28 OBJECT  LOCAL  HIDDEN    13 geq7_type

A patched version of decode_bdl.py could be used for doing this....

$ python3 decode_bdl.py EQ_AVN.ZD2
Table located: geq7_freq 0x80000468
ListContainer: 
    131.0
    270.0
    450.0
    524.0
    1400.0
    3000.0
    6000.0
Table located: geq7_q 0x800004c8
ListContainer: 
    5.0
    6.5
    2.200000047683716
    8.0
    1.0
    6.0
    1.0
Table located: geq7_max 0x80000488
ListContainer: 
    12.0
    18.0
    12.0
    12.0
    12.0
    12.0
    12.0
Table located: geq7_min 0x800004a8
ListContainer: 
    -12.0
    -18.0
    -12.0
    -12.0
    -12.0
    -12.0
    -12.0
Table located: geq7_type 0x800004e8
ListContainer: 
    1.401298464324817e-44
    1.401298464324817e-44
    1.401298464324817e-44
    1.401298464324817e-44
    1.401298464324817e-44
    1.401298464324817e-44
    1.1210387714598537e-44

Note: that last table is obviously something other than an array of float32.

mungewell commented 6 months ago

For reference here's what the normal G3n EQ has for it's settings...

$ python3 decode_bdl.py ../zoom_fx_AllZDL6/G3n/unzipped/GT_GEQ_7.ZD2
Table located: geq7_freq 0x80000690
ListContainer: 
    100.0
    200.0
    400.0
    800.0
    1600.0
    3200.0
    6400.0
Table located: geq7_q 0x800006f0
ListContainer: 
    1.4142135381698608
    1.4142135381698608
    1.4142135381698608
    1.4142135381698608
    1.4142135381698608
    1.4142135381698608
    1.4142135381698608
Table located: geq7_max 0x800006b0
ListContainer: 
    12.0
    12.0
    12.0
    12.0
    12.0
    12.0
    12.0
Table located: geq7_min 0x800006d0
ListContainer: 
    -12.0
    -12.0
    -12.0
    -12.0
    -12.0
    -12.0
    -12.0
Table located: geq7_type 0x80000710
ListContainer: 
    1.401298464324817e-44
    1.401298464324817e-44
    1.401298464324817e-44
    1.401298464324817e-44
    1.401298464324817e-44
    1.401298464324817e-44
    1.1210387714598537e-44
mungewell commented 6 months ago

change to decode_bdl.py

tables = ["geq7_freq", "geq7_q", "geq7_max", "geq7_min"]

geq7_freq = [131.0, 270.0, 450.0, 524.0, 1400.0, 3000.0, 6000.0]
geq7_q =    [5.0, 6.5, 2.200000047683716, 8.0, 1.0, 6.0, 1.0]
geq7_max =  [12.0, 18.0, 12.0, 12.0, 12.0, 12.0, 12.0]
geq7_min =  [-12.0, -18.0, -12.0, -12.0, -12.0, -12.0, -12.0]
mungewell commented 6 months ago

Also noted is that the ASCII of the 'screen' is stored in another symbol GraphicEQ. This is about twice the size in the GT_GEQ_7.ZD2 (compared to EQ_AVN.ZD2) and looks to have the information repeated twice for some reason ??

It might be necessary to hand edit this symbol/values in a Hex-editor. :-(

There are also the 'Text' and 'XML' blocks of the ZD2, but we can automatically copy these with the 'donor' system.

$ python3 ../decode_effect.py -D EQ_AVN.ZD2 -T -X GT_GEQ_7_violin.ZD2 -o GT_GEQ_7_violin.ZD2
mungewell commented 6 months ago
$ cp GT_GEQ_7_violin.ZD2 GT_GEQ_7.ZD2 
$ python3 ../zoomzt2.py -U GT_GEQ_7.ZD2
Uninstalling effect: GT_GEQ_7.ZD2
$ python3 ../zoomzt2.py -I GT_GEQ_7.ZD2
Installing effect: GT_GEQ_7.ZD2
uploading...

$ amidi -p hw:1,0,0 -S 'f0 52 00 6e 64 03 00 00 01 53 00 00 10 00 f7'
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 64 02 00 05 00 F7' -r screen.bin -t 2

1015 bytes read
$ python3 ../decode_screens.py  screen.bin  | head -n 20
---
Effect: Gt GEQ 7 (On)
131 : 0.0
270 : 0.0
450 : 0.0
524 : 0.0
---
Effect: Gt GEQ 7 (Off)
1.4k : 0.0
3.0k : 0.0
6.0k : 0.0
VOL : 80
---

Can't publish the whole ZD2 for copyright reasons, but can upload a binary patch

$ md5sum *.ZD2
da72d92780aff2ed32d156ee3edd06e8  EQ_AVN.ZD2
65c03e7ed20e5d66f085eed21fa26224  EQ_EVN.ZD2
9d1d4743d438fa9ccb8026562577f923  GT_GEQ_7_orig.ZD2
76d39c48b031831fea9fd8374df81a1e  GT_GEQ_7_violin.ZD2

$ bsdiff GT_GEQ_7_orig.ZD2 GT_GEQ_7_violin.ZD2 violin.patch
$ gzip violin.patch

violin.patch.gz

mungewell commented 6 months ago

Wow, I wasn't expecting it, but happily surprised to see that GuitarLab reports the adjusted values for the sliders...

Screenshot (7)

mungewell commented 6 months ago

Figured out why the 'screen' values are duplicated, this effect is 'wide' and uses the Right button as a A/B toggle.

Also noted that although the modified effect has different adjustment range for 270Hz (+/-18dB), this is not shown in Guitar-Lab. Makes me suspicious that there is a bug in effect, and that maybe the Q values aren't different either...

nomadbyte commented 6 months ago

Nice work!

Indeed, all of the A1 FOUR EQ effects are 1U, that is "wide" yet made for 1-screen units. These should be compatible with G1 FOUR and similar. G3n has 3 screens, so these EQ modules won't be compatible as-is.

ToneLib does not support A1 FOUR in general and its specific effects either. Thus you saw these as BYPASS.

So pulling the freqs from the A1 FOUR and plugging them into G3n/G5n "native" GT_GEQ_7.ZD2 module is the way to go. Not sure if this is worth that much of an effort for just an EQ.

There are several "wide" effects for A1 FOUR:

wide file size version DSP usage cat fxmodid
w BAGGSEQ.ZD2 30831 1.01 9.36 FLT 0x02400030.Baggs EQ
w BONE_EQ.ZD2 28379 1.01 9.36 FLT 0x02400040.Bone EQ
w EQ_HARM.ZD2 15765 1.00 6.77 FLT 0x02a00160.Hm GEQ
w EQ_AVN.ZD2 16750 1.00 6.77 FLT 0x02a00280.A.Vn GEQ
w EQ_EVN.ZD2 15867 1.00 6.77 FLT 0x02a00282.E.Vn GEQ
w EQ_TP.ZD2 18488 1.00 6.77 FLT 0x02a00380.Tp GEQ
w AWAH_TP.ZD2 16901 1.00 10.17 FLT 0x02a00382.Tp A.Wah
w EQ_SAX.ZD2 15744 1.00 6.77 FLT 0x02a00410.Sax GEQ
w ATK_FLT.ZD2 23187 1.00 13.82 FLT 0x02a00414.SaxAtkFlt
w DIST_VN.ZD2 24553 1.00 19.26 DRV 0x03a00280.Vn DIST
w CHOHM.ZD2 19385 1.00 20.50 MOD 0x06a00160.Hm Chorus
w CHOVN.ZD2 20005 1.00 20.50 MOD 0x06a00280.Vn Chorus
w CHOTP.ZD2 19885 1.00 20.50 MOD 0x06a00380.Tp Chorus
w CHOSAX.ZD2 19417 1.00 20.50 MOD 0x06a00410.SaxChorus
w DUALPIT.ZD2 30198 1.00 12.21 MOD 0x06a01010.DualPitch
w ENVPHA.ZD2 24880 1.00 9.81 MOD 0x06a01030.EnvPhaser
w RNDMPHA.ZD2 18453 1.00 10.79 MOD 0x06a01040.RndPhaser
w PERCDLY.ZD2 40337 1.00 15.78 DLY 0x08a01000.PercusDly
mungewell commented 6 months ago

Not sure if this is worth that much of an effort for just an EQ.

It seems that Zoom thinks its worth making multiple EQ for different instruments, but maybe they are just padding the list of effects.

Really it's not that much effort given what we know now; and now it's done for the 'violin.patch' all you need is to apply the binary patch file over the top of 'GT_GEQ_7.ZD2'. I even found a Python module to do this... so platform independant, yay!

https://pypi.org/project/bsdiff4/

mungewell commented 6 months ago

so these EQ modules won't be compatible as-is

Maybe this is the answer to the incompatibility; in that the single screen effects implement a mechanism where the 4th dial is used to change page to get to the extended settings (ie when then are more than 4 settings to be changed).

nomadbyte commented 6 months ago

IIRIC, the paging also involves injection of Dummy effect (fxid:0x01) for the "third" page, this is in addition to the Dummy slot added explicitly for "wide" effects.

Technically, it's possible to generate a patch of 5 "wide" effects, thus occupying a total of 10 slots (or 15, counting the injected page-slots); however, the firmware caps the G1 FOUR patches to two wide effect per patch.

mungewell commented 6 months ago

Back to the question on what effects actually work, and why the others don't... I wrote a script to install each effect in turn into a patch and see what the 'Display' says (ie does it actually accept the effect as usable). test_effect.py.txt

Run like this...

$ find ../zoom_fx_AllZDL7/A1\ FOUR/unzipped/ -name '*.ZD2' -exec bash -c "echo {}; python3 test_effect.py -id '{}'" \;
../zoom_fx_AllZDL7/A1 FOUR/unzipped/MDL_LG0.ZD2
Installing Effect 0x14400120 into slot-0
Effect:  (Off)
../zoom_fx_AllZDL7/A1 FOUR/unzipped/PHASER.ZD2
Installing Effect 0x06000040 into slot-0
Effect: Phaser (On)
...

gce_as_G3n_success_for_A1Four.txt

The ones which work are

Effect: Phaser (On)
Effect: OptComp (On)
Effect: Chamber (On)
Effect: FD-B4x10 (On)
Effect: Octave (On)
Effect: Step (On)
Effect: Plate (On)
Effect: Chorus (On)
Effect: LMT-76 (On)
Effect: HotSpice (On)
Effect: Exciter (On)
Effect: AutoWah (On)
Effect: SeqFLTR (On)
Effect: CloneCho (On)
Effect: Comp (On)
Effect: RndmFLTR (On)
Effect: Spring (On)
Effect: ModDelay (On)
Effect: NoiseGate (On)
Effect: Cry (On)
Effect: FD Spring (On)
Effect: AnalogCho (On)
Effect: GateRev (On)
Effect: Room (On)
Effect: Slicer (On)
Effect: RackComp (On)
Effect: EarlyRef (On)
Effect: WarpPhase (On)
Effect: RingMod (On)
Effect: LowPassFL (On)
Effect: Resonance (On)
Effect: RC Boost (On)
Effect: BendCho (On)
Effect: VinFLNGR (On)
Effect: TS Drive (On)
Effect: ParaEQ (On)
Effect: StonePha (On)
Effect: SuperCho (On)
Effect: FilterDly (On)
Effect: AutoPan (On)
Effect: BlackOpt (On)
Effect: HD Hall (On)
Effect: TapeEcho (On)
Effect: Vibrato (On)
Effect: Church (On)
Effect: PitchSHFT (On)
Effect: Hall (On)
Effect: Air (On)
Effect: Tremolo (On)
Effect: Detune (On)
Effect: TheVibe (On)
Effect: LFO FLTR (On)
Effect: SlowATTCK (On)
Effect: HPS (On)
Effect: GrayComp (On)
Effect: MonoPitch (On)
Effect: StereoCho (On)
Effect: ZNR (On)
Effect: FD-DX1x12 (On)
nomadbyte commented 6 months ago

There are 18 "wide" effects specific to A1 FOUR listed above. Generally, neither should be compatible with G3n/G5n/B3n.

As for the "wide" effects from G1/B1 FOUR, there are already non-1U equivalents for the G3n/G5n/B3n. So those should be used instead.

mungewell commented 6 months ago

@nomadbyte I'm not quite following what you are saying.... by 'wide' I mean effects which are designed to show across two LCD screens (ie on G3n/G5n). None of the G1-Four/A1-Four will be 'wide'. As you note the 1U equivalents will use the 4th knob for paging on a single screen.

I double checked my GCE-3_as_G3n and manually removed ALL effects, before installing all that GL7 lists for the A1-Four.

That gives me: FLST_SEQ.ZT2.txt GUARDZDL.ZT2.txt gce_as_G3n_success_for_A1Four.txt

Looks like only 59 (out of the 176 possible) effects actually install, add to patch and report parameters.... this can't be just down to the amount of parameters.

A couple of the effects (AG_PUSL.ZD2 and ANTI_FB.ZD2) only have 1 parameter.

mungewell commented 6 months ago

We know the highest byte of the Effect ID is the 'group', do we know what the next byte is (D23..16)?? Seems that most of the A1-Four effects have bits set in this, whereas most of the G3n do not...

Is this a bit field for 'requirements'? https://github.com/mungewell/zoom-zt2/blob/master/zoom_fx_AllZDL7/A1%20FOUR/unzipped/list_sorted.txt https://github.com/mungewell/zoom-zt2/blob/master/zoom_fx_AllZDL7/G3n/unzipped/list_sorted.txt

nomadbyte commented 6 months ago

I mean "wide" as designed to occupy 2 slots (rather 2x4 parameter screens).

These effects usually have 8 parameters. 1U models page these parameters; 3U and more models spread these 8 parameters over 2 screens. Just as I mentioned earlier, 1U models have their own version of such "wide" modules (and blacklist the non-1U modules in GUARDZDL.ZT2 file, along with effects that support delay > 3s).

nomadbyte commented 6 months ago

I think of the highest byte of the Effect ID as category id.

The 7th byte is used more like a mnemonic to further classify the effects: 0x80:Bass, {0xA0, 0x40):Acoustic. This is not a universal scheme, it's just like that for the G5n family/platform.

nomadbyte commented 6 months ago
mungewell commented 6 months ago

So just running the numbers... and removing the (obvious?) know reasons for not installing - ie '3S' and '1U' effects, and 0x14 group/categories.

We still have the following failing to install. So of these have more than 4 params, but quiet a few have 4 or less.

$ grep -f working_effects.txt -v ../zoom_fx_AllZDL7/A1\ FOUR/unzipped/list_sorted.txt | grep -v "3S.ZD2" | grep -v "1U.ZD2" | grep -v "0x14"
0x01800030 : 160 Comp (v1.40, 12.63%), 0xe0466bc7b7b7c883dc47c9cc195aa35a, ./A1 FOUR/unzipped/160_COMP.ZD2
0x01800040 : DualComp (v1.30, 8.12%), 0x0623cbb370726464fef95e93fc1f68fd, ./A1 FOUR/unzipped/DUAL_CMP.ZD2
0x01800050 : MB Comp (v1.40, 20.84%), 0x2853b07a0b8b5d4b17b7abf741190c37, ./A1 FOUR/unzipped/MB_COMP.ZD2
0x01800060 : DYN Comp (v1.40, 5.66%), 0x838c2b190d1ecd9fc2e7b16d46061614, ./A1 FOUR/unzipped/DCOMP.ZD2
0x01800070 : Glam Comp (v1.30, 12.72%), 0x5ab2cf86de30a1ad44794feed42305e1, ./A1 FOUR/unzipped/GLAMCOMP.ZD2
0x01a01000 : Adv.NR (v1.00, 4.92%), 0xdd031ffef73f6d2a91ae636821ea783d, ./A1 FOUR/unzipped/ADVNR.ZD2
0x02000071 : ParaEQx2 (v1.00, 4.43%), 0x0c8caf402b15a6a293d8c7d3d09d4682, ./A1 FOUR/unzipped/PARAEQ2.ZD2
0x02400001 : AG PU SEL (v1.00, 6.81%), 0x7eebf8398c7a560d7a16e0af171f71b0, ./A1 FOUR/unzipped/AG_PUSL.ZD2
0x02400010 : BaDePiezo (v1.00, 9.68%), 0xf36a21b8fca0f7bf5cc3d2e9dca309d6, ./A1 FOUR/unzipped/DPZ_BA.ZD2
0x02400020 : Fish EQ (v1.00, 6.23%), 0xe220b80a053fe008bc9712b909e2daaa, ./A1 FOUR/unzipped/FISH_EQ.ZD2
0x02400030 : Baggs EQ (v1.01, 8.61%), 0x856c18e315debf2c23397362511fd8e7, ./A1 FOUR/unzipped/BAGGSEQ.ZD2
0x02400040 : Bone EQ (v1.01, 8.61%), 0x9da024d0ece8fe400e252efd6848fdb5, ./A1 FOUR/unzipped/BONE_EQ.ZD2
0x02800010 : BassA-Wah (v1.40, 7.10%), 0x346b6b3c9b2849f30334ba32bfce8ed5, ./A1 FOUR/unzipped/B_ATWAH.ZD2
0x02800020 : Z Tron (v1.30, 6.40%), 0x613a4f60ad45cfe5b0e00c388df0969f, ./A1 FOUR/unzipped/Z_TRON.ZD2
0x02800030 : A-Filter (v1.40, 7.22%), 0xa9e9f0d387ffaf40e2b60b3d77b1a4b5, ./A1 FOUR/unzipped/A_FILTER.ZD2
0x02800040 : Bass Cry (v1.40, 9.68%), 0xf9a8eff68973ae85587719138bd48427, ./A1 FOUR/unzipped/BA_CRY.ZD2
0x02800070 : BassPEQ (v1.40, 4.18%), 0xf11be755bbb11dbc3ebce91a6910a4e6, ./A1 FOUR/unzipped/BA_PEQ.ZD2
0x02800080 : Splitter (v1.40, 5.58%), 0x4267c5eff40e0e22011a4434a5962db3, ./A1 FOUR/unzipped/SPLITTER.ZD2
0x02800090 : Low EQ (v1.40, 4.43%), 0xd26515731123d8806e8284ec2274b923, ./A1 FOUR/unzipped/LOW_EQ.ZD2
0x02800095 : High EQ (v1.30, 3.32%), 0x9f2ec5566c4cd3eaf1f4e6223d0c9c59, ./A1 FOUR/unzipped/HIGH_EQ.ZD2
0x028000a0 : EnvFilter (v1.30, 13.12%), 0xab187e09b5168a4d4c06e3ef18392ee9, ./A1 FOUR/unzipped/ENV_FLTR.ZD2
0x02a00160 : Hm GEQ (v1.00, 6.23%), 0x4e7952cbcbb1545a6a34511d2caed581, ./A1 FOUR/unzipped/EQ_HARM.ZD2
0x02a00162 : Hm A.Wah (v1.00, 8.86%), 0xba1dd89f860e6ff624edc259fe4b1083, ./A1 FOUR/unzipped/AWAH_HM.ZD2
0x02a00164 : Hm Preamp (v1.00, 3.69%), 0x7f7d65b960e7ab82746ef0580e88f2cd, ./A1 FOUR/unzipped/HARM_PRE.ZD2
0x02a00166 : Hm Bullet (v1.00, 9.02%), 0x872d90b3a6c607ef37e2e345a2dbde8c, ./A1 FOUR/unzipped/B_MIC.ZD2
0x02a00280 : A.Vn GEQ (v1.00, 6.23%), 0xda72d92780aff2ed32d156ee3edd06e8, ./A1 FOUR/unzipped/EQ_AVN.ZD2
0x02a00282 : E.Vn GEQ (v1.00, 6.23%), 0x65c03e7ed20e5d66f085eed21fa26224, ./A1 FOUR/unzipped/EQ_EVN.ZD2
0x02a00284 : Vn A.Wah (v1.00, 9.52%), 0xa5b13e77625445c0d44d31284cdea1d1, ./A1 FOUR/unzipped/AWAH_VN.ZD2
0x02a00286 : VnDePiezo (v1.00, 6.03%), 0x15054c10fffe2aece55f3a6d723787a2, ./A1 FOUR/unzipped/PZPREVN.ZD2
0x02a00380 : Tp GEQ (v1.00, 6.23%), 0x356644c445f47da63c0ff816f88d3a75, ./A1 FOUR/unzipped/EQ_TP.ZD2
0x02a00382 : Tp A.Wah (v1.00, 9.35%), 0xadd745ffb74ba14e969effabcb9b3b40, ./A1 FOUR/unzipped/AWAH_TP.ZD2
0x02a00410 : Sax GEQ (v1.00, 6.23%), 0x96fa02a8a112b43613d11c6fbedf9f74, ./A1 FOUR/unzipped/EQ_SAX.ZD2
0x02a00412 : Sax A.Wah (v1.00, 7.06%), 0x10326142baf4c4ff95227d77a4c1fa46, ./A1 FOUR/unzipped/AWAH_SAX.ZD2
0x02a00414 : SaxAtkFlt (v1.00, 12.72%), 0xb81f7722fbc88a4cdbb0ac780315f959, ./A1 FOUR/unzipped/ATK_FLT.ZD2
0x02fffff0 : Anti FB (v1.00, 5.33%), 0x68fec4e5d22f18230462bf7df811c50e, ./A1 FOUR/unzipped/ANTI_FB.ZD2
0x03a00280 : Vn DIST (v1.00, 17.72%), 0x7cc9c92762d200582dfa6ce0a39b4f49, ./A1 FOUR/unzipped/DIST_VN.ZD2
0x06400000 : AG Detune (v1.00, 5.90%), 0x1cff85a688817e4476b7e8674084690a, ./A1 FOUR/unzipped/ACDETUNE.ZD2
0x06400010 : AG Chorus (v1.00, 19.81%), 0x577f811e38e82f81d78b961c848a8c8e, ./A1 FOUR/unzipped/AC_TRCHO.ZD2
0x06800020 : BassStCho (v1.40, 6.89%), 0xd2a1aa6195a39495ba87e0436c8428ad, ./A1 FOUR/unzipped/B_ST_CHO.ZD2
0x06800040 : BaVinFLNG (v1.40, 7.38%), 0xbcf70695d08cd3d69de71d91de586b70, ./A1 FOUR/unzipped/B_VFLNG.ZD2
0x06800050 : Ba Octave (v1.40, 7.46%), 0x97972514cbec1fe3076906beadf5ded7, ./A1 FOUR/unzipped/B_OCTAVE.ZD2
0x06800060 : Ba Detune (v1.40, 12.14%), 0x0434c21005837040465eea99a0bfc878, ./A1 FOUR/unzipped/B_DETUNE.ZD2
0x06800070 : BaMnPitch (v1.40, 10.50%), 0xd919e15fa7f5c8aaae4a1021a8e2abf9, ./A1 FOUR/unzipped/B_PITCH.ZD2
0x06800080 : BassPhase (v1.40, 9.84%), 0xae5447b3f32f81856b00206bed0fddb5, ./A1 FOUR/unzipped/BASS_PHA.ZD2
0x06a00160 : Hm Chorus (v1.00, 18.86%), 0xb37fde87a220cf8b48f3a4635cf643d8, ./A1 FOUR/unzipped/CHOHM.ZD2
0x06a00280 : Vn Chorus (v1.00, 18.86%), 0xac55327f702fdfb8234da62e66c45502, ./A1 FOUR/unzipped/CHOVN.ZD2
0x06a00380 : Tp Chorus (v1.00, 18.86%), 0xa38f8ff22c2688789f16df467db468b8, ./A1 FOUR/unzipped/CHOTP.ZD2
0x06a00410 : SaxChorus (v1.00, 18.86%), 0x7e1028a62c86799c7be55b1b9a26dcc2, ./A1 FOUR/unzipped/CHOSAX.ZD2
0x06a00412 : Sax Growl (v1.00, 10.66%), 0x3028613aa00e51d95d38b22d75452b28, ./A1 FOUR/unzipped/GROWL.ZD2
0x06a01000 : PolyOctUp (v1.00, 25.84%), 0xf9e5e5ee0489e3ff694a5e988395447f, ./A1 FOUR/unzipped/POCT_UP.ZD2
0x06a01001 : PolyOctDw (v1.00, 14.76%), 0xf1ba5f876ac2d7ac4c22cedddd5d9a08, ./A1 FOUR/unzipped/POCT_DWN.ZD2
0x06a01010 : DualPitch (v1.00, 11.24%), 0x8ef957fdf33b09b254a0e65e9ff9b99b, ./A1 FOUR/unzipped/DUALPIT.ZD2
0x06a01020 : Ensemble (v1.00, 29.53%), 0xbf779bb2f6f65028c845bbc54e303b5a, ./A1 FOUR/unzipped/ENSEMBLE.ZD2
0x06a01030 : EnvPhaser (v1.00, 9.02%), 0xe9c09d6058efeac61b25926d62dffa07, ./A1 FOUR/unzipped/ENVPHA.ZD2
0x06a01040 : RndPhaser (v1.00, 9.92%), 0x47937b2218b70274e94b4032ca089dd2, ./A1 FOUR/unzipped/RNDMPHA.ZD2
0x07800010 : StdSyn (v1.30, 20.18%), 0xd0bce6033bc1404447ca2afd20b553d6, ./A1 FOUR/unzipped/STDSYN.ZD2
0x07800020 : SynTlk (v1.30, 20.10%), 0xa916e19318d365d746f5ad42790244b1, ./A1 FOUR/unzipped/SYNTLK.ZD2
0x07800040 : Defret (v1.40, 7.06%), 0x879863552d0733b476e6031bb73e4a39, ./A1 FOUR/unzipped/DEFRET.ZD2
0x07800050 : PH+Dist (v1.40, 17.72%), 0xeaa9b3242583cf5872883131ebddb1bd, ./A1 FOUR/unzipped/PH_DIST.ZD2
0x08400000 : Ac TpEcho (v1.00, 17.64%), 0x8c08dadf02637a57a604e753b8bf188f, ./A1 FOUR/unzipped/AC_TPECH.ZD2
0x08a01000 : PercusDly (v1.00, 14.52%), 0x87100c928a959e362d6f8b172f913830, ./A1 FOUR/unzipped/PERCDLY.ZD2
0x09400000 : ModReverb (v1.00, 17.14%), 0x217e83cc27534431a43ded5f60210148, ./A1 FOUR/unzipped/MOD_REV.ZD2
0x09a01000 : DryPlate (v1.00, 22.31%), 0xd553a6ab16dd6b2c480f11d8baa651d3, ./A1 FOUR/unzipped/DRYPLATE.ZD2
mungewell commented 6 months ago

So, if the Effect ID is a determining factor... can we just change that?

$ python3 ../decode_effect.py -s AC_TPECH.ZD2.orig
0x08400000 : Ac TpEcho (v1.00, 17.64%), AC_TPECH.ZD2.orig
$ python3 ../decode_effect.py --force-id 0x08000000 -o AC_TPECH.ZD2.mid AC_TPECH.ZD2.orig
Checksum Recalculated: 0x6f864492
$ python3 ../decode_effect.py -s AC_TPECH.ZD2.mid 
0x08000000 : Ac TpEcho (v1.00, 17.64%), AC_TPECH.ZD2.mid

But that does NOT work, the modified Effect still does not install. :-(

Maybe 'Effect ID' is also contained within the ELF binary...

$ python3 ../decode_effect.py -c AC_TPECH.ZD2.code  AC_TPECH.ZD2
$ python3 ~/SearchBin-github/searchbin.py -p 08400000 AC_TPECH.ZD2.code
$ python3 ~/SearchBin-github/searchbin.py -p 00004008 AC_TPECH.ZD2.code
Match at offset:          23098         5A3A in  AC_TPECH.ZD2.code
Match at offset:          25530         63BA in  AC_TPECH.ZD2.code