Open mungewell opened 2 months ago
We already have a script to decode the patterns....
ZoomFW/MS-200D Plus_v1.20_Win_E/unzipped/.rsrc/1041/BIN$ python3 ~/SearchBin-github/searchbin.py -t "12/8" 144
Match at offset: 793580 C1BEC in 144
ZoomFW/MS-200D Plus_v1.20_Win_E/unzipped/.rsrc/1041/BIN$ python3 ~/SearchBin-github/searchbin.py -p "00 00 00 1d 00 5d 00 8c 00 7c" 144
Match at offset: 782702 BF16E in 144
ZoomFW/MS-200D Plus_v1.20_Win_E/unzipped/.rsrc/1041/BIN$ python3 ~/zoom-zt2-sdw-github/decode_patterns.py -P -T 793580 -D 782702 144
NewWave 0x000BF16E
R&B1 0x000BF2F6
PopRock 0x000BF466
Samba2 0x000BF51E
Disco 0x000BF686
MtlCore 0x000BF736
16Beats3 0x000BFBD6
Pop 0x000BFC7E
Samba1 0x000BFD26
Funk1 0x000BFDCE
Funk2 0x000BFE76
Shuffle2 0x000BFF1E
Country 0x000BFFC6
16Beats2 0x000C006E
16Beats1 0x000C024E
12/8 Grv 0x000C05E6
FunkRock 0x000C067E
FastPunk 0x000C0716
70s Soul 0x000C07AE
HipHop 0x000C08D6
JazzFunk 0x000C0966
Motown 0x000C0BA6
Blues2 0x000C0F76
Fusion 0x000C165E
TomTomBt 0x000C16E6
R&B2 0x000C3CDE
2nd Line 0x000C3D5E
90s Soul 0x000C3DDE
Breaks2 0x000C3ED6
HeavyMtl 0x000C40B6
IndiePop 0x000C412E
Rock3 0x000C41A6
R'n'R 0x000C421E
8Beats3 0x000C44C6
HardRock 0x000C4536
Rock2 0x000C45A6
8Beats2 0x000C47CE
8Beats1 0x000C483E
Breaks1 0x000C48AE
Rock1 0x000C491E
Steppers 0x000C4B36
Breaks3 0x000C4D3E
Shuffle1 0x000C4DA6
Bossa1 0x000C53B6
Bossa2 0x000C5416
Swing2 0x000C5536
Emo 0x000C5646
Punk 0x000C569E
EuroPop 0x000C57FE
Rockers 0x000C5856
Ska 0x000C58AE
Swing1 0x000C5906
5/4 Grv 0x000C59FE
Blues1 0x000C5D06
OneDrop 0x000C5D4E
ROCKABLY 0x000C5EAE
Jazz2 0x000C6506
JzWaltz2 0x000C653E
Waltz 0x000C6576
CtWaltz2 0x000C686E
CtWaltz1 0x000C6D96
Jazz1 0x000C6F4E
JzWaltz1 0x000C73BE
GUIDE 0x000C7766
Metro5 0x000C777E
Metro4 0x000C7956
Metro3 0x000C7C8E
Metro 0x000C7FBE
ZoomFW/MS-200D Plus_v1.20_Win_E/unzipped/.rsrc/1041/BIN$ python3 ~/zoom-zt2-sdw-github/decode_patterns.py -p 1 -T 793580 -D 782702 144
Pattern 1 : 12/8 Grv (0x000C05E6)
Bars 2 (12/8)
---
Kik1.raw :# X # # X # $ X :
SnrAmb.raw : x x x x :
Snr1.raw : # # # # :
: :
HHC.raw :$ X X $ X X $ X X $ X X $ X X $ X X $ X X $ X X :
: :
HHCAmb.raw :o , , o , , o , , o , , o , , o , , o , , o , , :
KikAmb.raw :x , x x , x o , :
Click.raw : :
My memory was slightly wrong, it was an effect for the GCE-3.
$ python3 decode_effect.py -m -s ./zoom_fx_AllZDL6/GCE-3/GL/RHYTHM_100.zd2
0x1e000010 : RHYTHM_100.zd2, Rhythm (v0.01 8.37%), 29a4e140f56c287320a9a1ab0f37d273
I guess (hope) this might work on MS-plus, but I'm a little too scared to upload to my new/expensive pedal.
Not sure that the ZD2 actually does anything... it's code segment is pretty sparse.
GCE-ZD2$ python3 ../decode_bdl.py -l RHYTHM_100.zd2
.audio
.text
.stack
.args
.neardata
.rodata
.bss
.text
.cinit
.cio
.const
.data
.switch
.sysmem
.far
.fardata
.ppinfo
.ppdata
.plt
0362810
.text
__TI_pprof_out_hndl
__TI_prof_data_start
__TI_prof_data_size
__TI_STATIC_BASE
Dll_Dummy
Trying to figure out remote control on the GCE-3, which has the '' effect.
Installing
$ python3 ../zoomzt2.py -I RHYTHM.zd2
Installing effect: RHYTHM.zd2
$ python3 ../zoomzt2.py -s -R FLST_SEQ.ZT2 | tail
0x09000040 : HD_HALL.ZD2, (v1.50 1)
0x09000050 : SPRING.ZD2, (v1.50 1)
0x09000060 : FDSPRING.ZD2, (v1.40 1)
0x09000070 : PLATEREV.ZD2, (v1.50 1)
0x09000080 : EARLYREF.ZD2, (v1.40 1)
0x090000a0 : CHURCH.ZD2, (v1.40 1)
0x090000d0 : CHAMBER.ZD2, (v1.40 1)
0x090000e0 : GATE_REV.ZD2, (v1.40 1)
Group 30 : RHYTHM
0x1e000010 : RHYTHM.zd2, (v0.01 1)
$ python3 ../decode_effect.py -7 -s RHYTHM.zd2
0x1e000010 : RHYTHM.zd2, Rhythm (v0.01 8.37%)
10 00 00 70 01
$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 03 00 00 01 10 00 00 70 01 f7'
$ amidi -p hw:2,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)
PATTERN : GUIDE
BPM : 0
VOL : 0
---
Effect: Bypass (Off)
:
:
:
:
---
Turn it 'on', but no sound...
$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 03 00 00 00 01 00 00 00 00 f7'
$ amidi -p hw:2,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: (On)
PATTERN : GUIDE
BPM : 0
VOL : 0
---
Effect: Bypass (Off)
Can't seem to set BPM or Vol. Going to jump to Windows/GuitarLab to see what happens there.
It looks like my GCE3 (as G1XFour) had unknown effect in the patch and it was NOT offering to install 'Rhythm'.
Switched to GCE3 (as G3n) and could install 'Rhythm', but it is NOT listed in ZT2 and in fact it is using the longer/clipped file name "RHYTHM_100.z"
This is seen as my gui code scans for files...
00000000: 52 00 6E 60 04 25 00 00 17 00 00 00 00 00 52 48 R.n`.%........RH
00000010: 59 54 48 4D 5F 31 30 30 2E 7A 00 00 00 22 1B 00 YTHM_100.z..."..
00000020: 00 00 00 00 00 00 00 .......
None
00000000: 52 00 6E 60 04 25 00 00 17 00 00 00 00 00 47 55 R.n`.%........GU
00000010: 41 52 44 5A 44 4C 2E 5A 54 32 00 00 00 10 08 00 ARDZDL.ZT2......
00000020: 00 00 00 00 00 00 00 .......
None
00000000: 52 00 6E 60 03 7A 7F 7F 7F 0F R.n`.z....
None
I can install this effect into a patch (via midi commands), but not control it. GuitarLab would start/stop the effect as was enabled/disabled.
I managed to grab and decode what GuitarLab does, it's 4x SysEx - looks like it's pressing then releasing the button.
$ hexdump -C rhythm_on_off_slot0.syx
00000000 f0 52 00 6e 64 03 00 0a 01 00 00 00 00 00 f7 f0 |.R.nd...........|
00000010 52 00 6e 64 03 00 0a 03 01 00 00 00 00 f7 f0 52 |R.nd...........R|
00000020 00 6e 64 03 00 0a 01 00 00 00 00 00 f7 f0 52 00 |.nd...........R.|
00000030 6e 64 03 00 0a 03 00 00 00 00 00 f7 |nd..........|
0000003c
$ hexdump -C rhythm_on_off_slot2.syx
00000000 f0 52 00 6e 64 03 00 0a 01 00 00 00 00 00 f7 f0 |.R.nd...........|
00000010 52 00 6e 64 03 00 0a 05 01 00 00 00 00 f7 f0 52 |R.nd...........R|
^^ changes according to slot
00000020 00 6e 64 03 00 0a 01 00 00 00 00 00 f7 f0 52 00 |.nd...........R.|
00000030 6e 64 03 00 0a 05 00 00 00 00 00 f7 |nd..........|
0000003c
It seems that you need to press the correct 'slot' (where the RHYTHM effect it) for it to actually register.
NOTE: it seems that the pedal is very sensitive to locking up here and not really working correctly afterwards. Going into GuitarLab and removing the patch seems to be the cure.
Grrr.... took me a while to figure out preset selection via midi on the G3n
Preset 150:
$ amidi -p hw:2,0,0 -S 'b0 20 31 c0 02';python3 ../zoomzt2.py -c temp.zptc;python3 ../decode_preset.py -s temp.zptc | head
Name: Rhythm
Patch Volume: 100
Effect 1: 0x1E000010
Enabled: True
Param 1: 0
Param 2: 0
Param 3: 0
Param 4: 80
Param 5: 0
Param 6: 0
And then I can start the rhythm with
$ amidi -p hw:2,0,0 -s rhythm_on_off_slot0.syx
So here's a thing.....
$ python3 ../decode_effect.py --force-target 0xA0 -o MS_RHYTHM.ZD2 RHYTHM_100.zd2
Checksum Recalculated: 0x5b9adbab
$ cp MS_RHYTHM.ZD2 RHYTHM.ZD2
$ python3 ../zoomzt2.py --include-zic -I RHYTHM.ZD2
Installing effect: RHYTHM.ZD2
uploading...
Uploading icon: RHYTHM.ZIC
Gives us a selectable effect, which has dial/parameters that can be changed. The tempo follows the Tempo effect value... I just don't have a way to start the drums actually playing. :-(
hi @mungewell So I published a video on this a while back here
I seems you are rediscovering independently what I did - and that led me to revisit. Here's my current understanding.
Example
I have put a rhythm as physical slot 8. 1 = Rack Comp 2 = Comp 3 = SlowATTCK 4 = ZNR 5 = MuteSW 6 = OptComp 7 = NoiseGate 8 = Rhythm 9 = Comp
[[just to allow me to anchor slots]]
I dont seem to be able to say "toggle FS8". The best I can do is "prime" the window to include the Rhythm in an FS1 - 4.
WINDOW1 1 = Rack Comp 2 = Comp 3 = SlowATTCK 4 = ZNR ------ Rhythm not selectable 5 = MuteSW 6 = OptComp 7 = NoiseGate 8 = Rhythm 9 = Comp
... WINDOW5 1 = Rack Comp 2 = Comp 3 = SlowATTCK 4 = ZNR ------ Rhythm selectable as FS4 5 = MuteSW 6 = OptComp 7 = NoiseGate 8 = Rhythm 9 = Comp
... WINDOW6 1 = Rack Comp 2 = Comp 3 = SlowATTCK 4 = ZNR 5 = MuteSW ------ Rhythm selectable as FS3 6 = OptComp 7 = NoiseGate 8 = Rhythm 9 = Comp
Demo next post
So with WindowsStart.sh 5 Rhythm is at 4
shooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ ./WindowStart.sh 5
F0 52 00 6E 64 03 00 0a 01 04 00 00 00 00 F7
shooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ ./RhythmStartStopWindow.sh 4
f0 52 00 6e 64 03 00 0a 06 01 00 00 00 00 f7
15 bytes read
00000000 f0 52 00 6e 64 03 01 07 00 01 00 00 00 00 f7 |.R.nd..........|
0000000f
shooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ ./RhythmStartStopWindow.sh 4
f0 52 00 6e 64 03 00 0a 06 01 00 00 00 00 f7
15 bytes read
00000000 f0 52 00 6e 64 03 01 07 00 01 00 00 00 00 f7 |.R.nd..........|
0000000f
Now we move alone one.
hooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ ../B1XFour/GetMoreData.sh
0 bytes read
shooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ ./WindowStart.sh 6
F0 52 00 6E 64 03 00 0a 01 05 00 00 00 00 F7
shooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ ./RhythmStartStopWindow.sh 3
f0 52 00 6e 64 03 00 0a 05 01 00 00 00 00 f7
15 bytes read
00000000 f0 52 00 6e 64 03 01 07 00 01 00 00 00 00 f7 |.R.nd..........|
0000000f
shooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ ./RhythmStartStopWindow.sh 3
f0 52 00 6e 64 03 00 0a 05 01 00 00 00 00 f7
15 bytes read
00000000 f0 52 00 6e 64 03 01 07 00 01 00 00 00 00 f7 |.R.nd..........|
0000000f
shooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $
So I knew I needed to "prime" the rhythm (and looper!). What I didnt fully appreciate is why - it is so that FS1 - 4 selected the right FX slot in the patch. Windowing is the key. Gonna be a swine to code - keeping track of relative slot based on preceding FX widths.
also - with the loop the subsequent control depends on holding a FS down for a set period - I was thinking some logic in the kit - but I am guessing it must be emulated in the Zoom Guitar Lab somehow
The LP-MONO and LP-STEREO dont play nicely like rhythm or LP-MN2 and LP-ST2.
For the latter - the stop buttons are the SECOND FX - kinky!
I spent way too long last night trying to find a 'prime' and 'toggle' SysEx to actually start the Rhythm playing.... no success. I guess that it's either a completely different message, or that the pedal doesn't actually have a Rhythm thread/process running to receive the message.
On the (real) G5n/G3n does the known message actually press the footswitch on other ZDLs, so that one would see another indication of it working. Or is it specific to the Rhythm/Looper?
A good example would be 'Bomber' where the Foot-Switch triggers the noise....
I'll try to upload a video to YT later today with sysex and PIP video of the G5n. Then I will see if I can get it working on a GCE-3 emulator.
https://youtu.be/CMEuxgvYT9k?si=CXCInKx4COLNI3N_
I should rename my command to simply FS.sh [1-4] [01]
And, depending on model, render FS and move them according to windowing.
@shooking Thanks for the confirmation, and video. I don't think the 'Window' applies too much to the MS-plus as they only display one effect at a time.
Thomas' page confirms that the 'move/display to XX' is slightly changed, and does work https://github.com/thammer/zoom-explorer?tab=readme-ov-file#commands--message-types
$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 64 01 00 00 00 00 00 f7'
In theory the trigger would be similarly changed (with '03' indicating slot 0, of a 1 effect 'window').
$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 64 03 01 00 00 00 00 f7'
Triggering the foot-switch was not working on 'Rhythm' late monday. I am trying again today, but with 'Bomber' effect, seeing if I can trigger the sound via SysEx..... still doesn't work for me :-(
I tried changing the data value, but without luck.
Neither command returns a SysEx 'ack'.
So looking at @shooking script for the G5n, it's directly accessing the 'Effect On/Off' control - not 'pressing a fake' footswitch. https://github.com/shooking/ZoomPedalFun/blob/main/G5n/FS.sh
If I do the equvialant on MS-60B+ it CAN trigger the Bomber effect when in 'Trigger' mode.
simon@the-void:~/zoom-zt2-sdw-github/GCE-ZD2$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 00 00 01 00 00 00 00 f7'
simon@the-void:~/zoom-zt2-sdw-github/GCE-ZD2$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 00 00 00 00 00 00 00 f7'
I do have to do the 2nd one to turn off the LED and allow another sound to be triggered later. When using the real foot-switch the LED turns off automatically.
It does NOT work with the 'Rhythm' effect. Manually pressing the button toggle's LED (but does NOT grey out effect), via SysEx doesn't affect the LED at all (even if already on).
A short SysEx should respond with a read of a value.... it appears I can set it (on/off value) low, but then it's automatically set high; previous 2 responses buffered, 3rd response is the 'read'.
$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 00 00 00 00 00 00 00 f7'
$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 00 00 f7' -r temp.bin -t 2; hexdump -C temp.bin
45 bytes read
00000000 f0 52 00 6e 64 20 01 00 00 00 00 00 00 00 f7 f0 |.R.nd ..........|
00000010 52 00 6e 64 20 01 00 00 01 00 00 00 00 f7 f0 52 |R.nd ..........R|
00000020 00 6e 64 20 01 00 00 01 00 00 00 00 f7 |.nd .........|
0000002d
If fact 'Rhythm' always reads a '01', regardless of what it shown by the LED.
Perhaps (as I mentioned before) the task which generates the Rhythm sounds it not actually running on the MS-60B+.
There are strings in the FW image which seem to relate to tasks, but that's not actually guarantee that it's started.
TaskSupport
g_SemId_1msTask
g_Task_MainApp
g_Task_SendUSB_MIDI
g_Task_UpdateUI
g_Task_QFuncService
g_Task_1msTask
g_Task_TunerService
g_Task_SwitchNrmlSpdRead
g_Task_RepeatEventHandler
g_Task_PopUpTimeCounter
g_Task_RhythmService
g_Task_LooperUI
g_Task_AD
g_Task_PreLoad
g_Task_DataStore
g_Task_LooperAudioEv
g_Task_AudioProcess
It could be that the frame work is in place from the G2Four, and just not enabled on the MS-plus pedals. Maybe there's a configuration block, or bitfield determining this.... does the pedal have I2C/SPI memory for the serial number?
Interestingly the only MS-plus to support USB Audio is the MS-80IR (so it means that the hardware is capable). https://zoomcorp.com/en/jp/multi-effects/multistomp-pedals/ms-80ir/
2-IN / 2-OUT Audio Interface function (via built-in USB-C port)
So looking at @shooking script for the G5n, it's directly accessing the 'Effect On/Off' control - not 'pressing a fake' footswitch. https://github.com/shooking/ZoomPedalFun/blob/main/G5n/FS.sh
If I do the equvialant on MS-60B+ it CAN trigger the Bomber effect when in 'Trigger' mode.
simon@the-void:~/zoom-zt2-sdw-github/GCE-ZD2$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 00 00 01 00 00 00 00 f7' simon@the-void:~/zoom-zt2-sdw-github/GCE-ZD2$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 00 00 00 00 00 00 00 f7'
I do have to do the 2nd one to turn off the LED and allow another sound to be triggered later. When using the real foot-switch the LED turns off automatically.
It does NOT work with the 'Rhythm' effect. Manually pressing the button toggle's LED (but does NOT grey out effect), via SysEx doesn't affect the LED at all (even if already on).
A short SysEx should respond with a read of a value.... it appears I can set it (on/off value) low, but then it's automatically set high; previous 2 responses buffered, 3rd response is the 'read'.
$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 00 00 00 00 00 00 00 f7' $ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 00 00 f7' -r temp.bin -t 2; hexdump -C temp.bin 45 bytes read 00000000 f0 52 00 6e 64 20 01 00 00 00 00 00 00 00 f7 f0 |.R.nd ..........| 00000010 52 00 6e 64 20 01 00 00 01 00 00 00 00 f7 f0 52 |R.nd ..........R| 00000020 00 6e 64 20 01 00 00 01 00 00 00 00 f7 |.nd .........| 0000002d
If fact 'Rhythm' always reads a '01', regardless of what it shown by the LED.
No sorry it isnt. FS.sh
hexSlot == physical slot - 1
probeStringOnOff="F0 52 00 6E 64 03 00 ${hexSlot} 00 ${onOff} 00 00 00 00 F7"
whereas RhythmStartStopWindow.sh
logicalFS=windowSlot + 2
probeString="f0 52 00 6e 64 03 00 0a ${FSSlot} 01 00 00 00 00 f7"
So let's say I am at FX slot 9, windows slot 4 9 - 1 = 8 cf 4 + 2 == 6 Notice also the 0x0a in RhythmStartStopWindow where the hexSlot is for FS.
F0 52 00 6E 64 03 00 08 00 01 00 00 00 00 F7 for FS 8 1
F0 52 00 6E 64 03 00 0a 06 01 00 00 00 00 f7 for FS4
Ah, OK.... Must be getting old, one late night and my brain goes to mush. ;-)
I had previous tried with the '0x0A' command, didn't work neither did any adaption of it. I think this ticket will be on hold for a bit.
Glancing at hexdump of the unzipped FW, and it looks like both the MS-60B+ and the MS-200D+ have the table/patterns similar to the G1Four format
Although a drum machine feature is NOT mentioned in the menu. IIRC The G5n has a effect which can be placed in a slot in order to control it's drum machine.