mungewell / zoom-zt2

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

MS-plus: are ZD2 from MS-plus compatible with G1Four/etc, and vice-versa #87

Open mungewell opened 2 hours ago

mungewell commented 2 hours ago

The immediate answer is NO, it looks like Zoom have jeri-rigged the ID and Groups to be different between the series

$ python3 ../decode_effect.py -s B1_BOMBER.ZD2
0x07000010 : B1_BOMBER.ZD2, Bomber (v1.50 8.45%)

$ python3 ../decode_effect.py -s MS_BOMBER.ZD2
0x09000040 : MS_BOMBER.ZD2, Bomber (v1.10 8.45%)

The symbols listed in the ELF Code segment are very similar, and there are relatively small difference in the hexdump of the Code

$ diff  B1_BOMBER.ZD2.code.sym MS_BOMBER.ZD2.code.sym
28c28
< 0909210
---
> 0348410
39c39
< 0908410
---
> 0536810
70c70
< 0334410
---
> 2108010
105c105
< 0331610
---
> 1780410

These symbol name differences might just be as the ZD2 has been re-compiled. Looking at a 2nd effect (ZNR) it has completely different number symbols too...

mungewell commented 2 hours ago

There are also some differences in the GroupName, although I am not too sure how these affect the actual operation. Maybe just used for ZT2 and grouping of ZIC in the library (MS-plus).

B1 FOUR/unzipped$ find . -name "*.ZD2.dump" -exec grep groupname {} \; | sort | uniq 
    groupname = u'AMP' (total 3)
    groupname = u'CABINET' (total 7)
    groupname = u'DELAY' (total 5)
    groupname = u'DRIVE' (total 5)
    groupname = u'DYNAMICS' (total 8)
    groupname = u'FILTER' (total 6)
    groupname = u'MODULATION' (total 10)
    groupname = u'REVERB' (total 6)
    groupname = u'SFX' (total 3)
ms-60b/decoded$ find . -name "*.ZD2.txt" -exec grep groupname {} \; | sort | uniq    groupname = 'BASS AMP' (total 8)
    groupname = 'DELAY' (total 5)
    groupname = 'DRIVE' (total 5)
    groupname = 'DYNAMICS' (total 8)
    groupname = 'FILTER' (total 6)
    groupname = 'MODULATION' (total 10)
    groupname = 'PITCH SHIFT' (total 11)
    groupname = 'PREAMP' (total 6)
    groupname = 'REVERB' (total 6)
    groupname = 'SFX' (total 3)
    groupname = 'SYNTH' (total 5)
mungewell commented 2 hours ago

I just added some options which might help us...

$ python3 decode_effect.py --help
...
  --force-id FORCE_ID   Force the ID to a particular value (in Hex)
  --force-name FORCE_NAME
                        Force the Name to a particular string (max 11 chars)
  --force-gname FORCE_GNAME
                        Force the GroupName to a particular string (max 11 chars)
  -o OUTPUT, --output OUTPUT
                        output combined result to FILE

Something like :-)

$ python3 ../decode_effect.py --force-id 0x07000010 -o MOD_BOMBER.ZD2 MS_BOMBER.ZD2
Checksum Recalculated: 0x9966b592
$ python3 ../decode_effect.py -s MOD_BOMBER.ZD2
0x07000010 : MOD_BOMBER.ZD2, Bomber (v1.10 8.45%)
mungewell commented 1 hour ago

Attempting to install MS effect on my (broken screen) G1Four...

$ python3 ../zoomzt2.py -U BOMBER.ZD2
Uninstalling effect: BOMBER.ZD2

$ cp MOD_BOMBER.ZD2 BOMBER.ZD2

$ python3 ../zoomzt2.py -I BOMBER.ZD2
Installing effect: BOMBER.ZD2
uploading...

$ python3 ../zoomzt2.py -R -w -s FLST_SEQ.ZT2
Group 1 : DYNAMICS
0x01000010 : COMP.ZD2, (v1.40 1)
...
Group 7 : SFX
0x07000020 : AUTOPAN.ZD2, (v1.40 1)
0x07000041 : LPROLL3S.ZD2, (v1.10 1)
0x07000050 : HOTSPICE.ZD2, (v1.30 1)
0x07000010 : BOMBER.ZD2, (v1.10 1)
...

The real question is whether I can actual load it into a patch, which is a little more difficult with the broken screen.

Current patch is empty

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

1023 bytes read
$ python3 ../decode_screens.py temp.bin
---
Effect: Bypass (Off)
 : 
 : 
 : 
 : 
---
Effect: Bypass (Off)
...

Convert ID to 7-bit hex

>>> a = 0x07000010
>>> print(hex(a & 0x7f))
0x10
>>> print(hex(a >> 7 & 0x7f))
0x0
>>> print(hex(a >> 14 & 0x7f))
0x0
>>> print(hex(a >> 21 & 0x7f))
0x38
>>> print(hex(a >> 28 & 0x7f))
0x0

and install to current patch (slot 0)

$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 03 00 00 01 10 00 00 38 00 f7'

Decode screens changes, but does NOT display the name

$ python3 ../decode_screens.py temp.bin | head
---
Effect:  (Off)
 : 
 : 
 : 
 : 
---
Effect: Bypass (Off)
...

Downloading current patch does however

$ python3 ../zoomzt2.py -c temp.zptc
$ python3 ../decode_preset.py -s temp.zptc
Name: Empty     
Patch Volume: 100
Effect 1: 0x07000010
   Enabled: True
   Param 1: 0
   Param 2: 0
   Param 3: 0
   Param 4: 0
   Param 5: 0
   Param 6: 0
   Param 7: 0
   Param 8: 0
mungewell commented 1 hour ago

If i revert the effect to the B1Four version, it does show on 'screens'.

$ python3 ../zoomzt2.py -U BOMBER.ZD2
Uninstalling effect: BOMBER.ZD2
$ cp B1_BOMBER.ZD2 BOMBER.ZD2 
$ python3 ../zoomzt2.py -I BOMBER.ZD2
Installing effect: BOMBER.ZD2
uploading...

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

1023 bytes read
$ python3 ../decode_screens.py temp.bin | head
---
Effect: Bomber (Off)
Decay : 50
Tone : 4
Mix : 30
ON/OFF : TRGGR
---
Effect: Bypass (Off)
 : 
 : 

This at least means the pedal is not 'broken' by uploading the wrong/MS-plus version.

Note: when forcing the ID, we only changes the number in the header of the ZD2, nothing within the Code segment as altered.