Closed shooking closed 2 years ago
I can promise to ask dumb questions.. ;-)
What is that probe message actually reading? What sort of thing... effect setting, patch, ????
probeString="F0 52 00 65 31 ${hexFX} 01 ${hexValueLow} ${hexValueHigh} F7"
I grabbed the B1on FW and extracted the ZDLs. There was not a FLST_SEQ.ZT2
(or equiv) which might have been a quick way to get the the IDs. I assume that they might be of a similar 32bit format, with ID, group and version.
Looking at the ZDL file there does not seem to be much before the actual DSP code (following ELF
).
$ hexdump -C ZNR.ZDL | head
00000000 00 00 00 00 53 49 5a 45 08 00 00 00 38 00 00 00 |....SIZE....8...|
00000010 bc 2c 00 00 49 4e 46 4f 30 00 00 00 5a 4f 4f 4d |.,..INFO0...ZOOM|
00000020 20 45 46 46 45 43 54 20 44 4c 4c 20 53 59 53 54 | EFFECT DLL SYST|
00000030 45 4d 20 56 45 52 20 31 2e 30 30 00 01 01 00 00 |EM VER 1.00.....|
00000040 50 00 00 01 31 2e 30 30 00 00 00 00 7f 45 4c 46 |P...1.00.....ELF|
00000050 01 01 01 40 00 00 00 00 00 00 00 00 03 00 8c 00 |...@............|
00000060 01 00 00 00 b4 02 00 00 7c 26 00 00 1c 27 00 00 |........|&...'..|
00000070 00 00 00 00 34 00 20 00 05 00 28 00 24 00 23 00 |....4. ...(.$.#.|
00000080 00 00 00 00 00 00 00 00 00 00 00 00 d8 0f 10 03 |................|
00000090 66 e2 9b 0f 7c 21 c6 31 13 88 00 10 4c 01 27 46 |f...|!.1....L.'F|
Your listing suggests that ZNR.ZDL
is Group 0x02 and ID 0x0000a1.
https://github.com/shooking/ZoomPedalFun/blob/main/B1ON/DerivedData/FXID_GID.txt#L12
So it looks like there IS a FLST_SEQ.ZDT
file in there, I remember that the JAR tool only lists files if knows about... maybe there's a another way to grab it?
B1on_v1.30_Win_E/extract/.rsrc/1041/BIN$ hexdump -C 136 | grep _SEQ
000034b0 46 4c 53 54 5f 53 45 51 2e 5a 44 54 ff ff ff ff |FLST_SEQ.ZDT....|
00005dd0 46 4c 53 54 5f 53 45 51 2e 5a 44 54 ff ff ff ff |FLST_SEQ.ZDT....|
00007dd0 46 4c 53 54 5f 53 45 51 2e 5a 44 54 ff ff ff ff |FLST_SEQ.ZDT....|
000094b0 46 4c 53 54 5f 53 45 51 2e 5a 44 54 ff ff ff ff |FLST_SEQ.ZDT....|
002e7840 65 63 74 54 79 70 65 5f 53 45 51 5f 46 69 6c 74 |ectType_SEQ_Filt|
002e7bc0 66 65 63 74 54 79 70 65 5f 53 45 51 5f 46 69 6c |fectType_SEQ_Fil|
002e7c50 69 63 45 66 66 65 63 74 54 79 70 65 5f 53 45 51 |icEffectType_SEQ|
Looks like you can get directly at the patches via the 133
file.
$ python3 ~/SearchBin-github/searchbin.py -t "UK Groove" *
Match at offset: 1125 465 in 133
00000400 21 00 c0 02 03 50 00 0a 00 ca 23 28 02 00 00 00 |!....P....#(....|
00000410 00 00 21 00 20 8a 02 50 00 0c 80 01 25 03 00 00 |..!. ..P....%...|
00000420 00 00 64 00 01 00 00 00 00 00 00 00 00 00 00 00 |..d.............|
00000430 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 |................|
00000440 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................|
00000450 00 00 00 00 00 00 00 00 00 00 40 32 04 00 00 00 |..........@2....|
00000460 20 03 00 00 00 55 4b 20 47 72 6f 6f 76 65 20 00 | ....UK Groove .|
Since these are in the binary, and also that the ASCII name is not encoded (7bit <-> 8bit), why would the rest be???
For the G1Four, the EBTG
section of the patch was a weird bit reversed format, and the parameters were either 12 or 8 bits (and not aligned to the original bytes).
Remember this is with the bytes reversed... https://github.com/mungewell/zoom-zt2/blob/master/decode_preset.py#L39
If we focus on the 'UK Groove' patch, what are the values for each of the parameters for each effect in the patch? ie. as shown on the pedal itself.
Rough first stab... b1on_test.py.zip
Hi there. Well this opens up a lot of interesting avenues for investigation.
I invited you to the ZoomPedalFun github. My hope is we can wiki some of this for others.
I didn't get the 133 file business. But I have managed to decode the parameters etc based on your work. The code in under the B1ON directory.
Today my Pi won't boot off the SSD. Got to fix that then I will document the UK Grove both what is on screen, in the dumps and what i decode. Later on the 8 bit patch data seems to be there. That's what got me to see the FXID and GID in the firmware albeit just for the Patches.
On Wed, 4 Aug 2021, 06:57 mungewell, @.***> wrote:
If we focus on the 'UK Groove' patch, what are the values for each of the parameters for each effect in the patch?
Rough first stab... b1on_test.py.zip https://github.com/mungewell/zoom-zt2/files/6928933/b1on_test.py.zip
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/mungewell/zoom-zt2/issues/30#issuecomment-892385468, or unsubscribe https://github.com/notifications/unsubscribe-auth/AFO7EVYRZXYAJRWRBYPIUODT3DJFVANCNFSM5BPQKXGA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email .
OK so I used WIKI on my site to summarise what I had found to date: https://github.com/shooking/ZoomPedalFun/wiki/De-re-B1On
FXM_ID.sh -> this can set the FXID but not the group. Recall on the B1XFour there are additional parameters to the sysex that sets the group as well. If you get it wrong you get missing.
Pi is still restoring. I had to copy all the data off the SSD then reformat it. Lost bootloaders etc.
So I manually decoded the UK groove here
https://github.com/shooking/ZoomPedalFun/blob/main/B1ON/DerivedData/Patches/UKGroove.txt
I would like to get my Pi back before I send you on a wild goose chase. So what I want to do is confirm that when I set patch parameters, dump the sysex, then decode it that I get the right results. I am sure I did - but the data from the B1On firmware seems a bit odd.
Ok I updated again
So the sysex I thought was related to the UK Groove in the firmware is quite different from what ends up in the pedal. I updated https://github.com/shooking/ZoomPedalFun/blob/main/B1ON/DerivedData/Patches/UKGroove.txt to reflect fresh capture. I also posted the bit masks I use to pull out the parameters from the 7->8 data,. I found it helps to consider 5 x 18 bytes for FX1 - 5 then FX6 seems to write into the next area (volume?) and finally you get to the names.
So I am pretty confident I can pull out the correct parameter decode - it's the FXID I am after.
I got these by inference (setting pedal FX, setting parameters to 0 .. oh look the first 4 bytes seem to be the FXID and GID). It seems to me similar patterns exist in the firmware.
Really intrigues on what means 133 files.
finally your hint about the pattern for ZDL was gratefully accepted. I used it and some other python to pull out the ZDLs I will compare them with other ZDLs tomorrow - getting late here
https://github.com/shooking/ZoomPedalFun/blob/main/B1ON/DerivedData/README.md
I think that you are misunderstanding the patch format, it seems that you don't have the 'enabled' bit accounted for (the LSB of the 1st byte). I have adapted my code now you explain the parameter settings and get this decode from Midi.
I am not confident on param5..8, if you post sample with more parameters active we can tweak.
reversed = Container:
control = Container:
param8 = 0
param7 = 0
param6 = 0
param5 = 100
unknown2 = 0
param4 = 10
param3 = 70
param2 = 30
param1 = 565
unknown = 0
id = 134217736 (0x8000008)
enabled = True
You are right that the binary and decoded midi are not the same, the parsing does not work on the binary one.
From binary:
00000000: 21 00 C0 02 03 50 00 0A 00 CA 23 28 02 00 00 00 !....P....#(....
00000010: 00 00 21 00 20 8A 02 50 00 0C 80 01 25 03 00 00 ..!. ..P....%...
00000020: 00 00 64 00 01 00 00 00 00 00 00 00 00 00 00 00 ..d.............
00000030: 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 ................
00000040: 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................
00000050: 00 00 00 00 00 00 00 00 00 00 40 32 04 00 00 00 ..........@2....
00000060: 20 03 00 00 00 55 4B 20 47 72 6F 6F 76 65 20 00 ....UK Groove .
None
From midi (after 7bit -> 8bit)
00000000: 11 00 00 50 8D F0 00 46 40 01 80 0C 00 00 00 00 ...P...F@.......
00000010: 00 00 11 01 00 84 02 28 00 19 80 0C 00 00 00 00 .......(........
00000020: 00 00 00 00 21 00 20 8A 02 50 00 0C 80 01 25 03 ....!. ..P....%.
00000030: 00 00 00 00 64 00 01 00 00 00 00 00 00 00 00 00 ....d...........
00000040: 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................
00000050: 00 00 00 00 00 00 00 00 00 00 40 32 04 00 00 00 ..........@2....
00000060: 20 03 00 00 00 55 4B 20 47 72 6F 6F 76 65 20 00 ....UK Groove .
I was right about the JAR project only shows some files... https://github.com/Barsik-Barbosik/Zoom-Firmware-Editor/blob/31539401b470af380100dcab726d26887e00a663/src/main/java/zoomeditor/controller/ApplicationController.java#L148
Can you see if you can use the csplitb
technique to extract the ZDT file? I think that the ZDT will be fairly readable and might confirm the IDs/Groups for the effects.
Managed to pull it, though it's not too useful - just the ASCII names.
The description here does not seem to match what you had suggested, is it possible that the patch has been overwritten on your pedal? https://tonelib.net/forums/threads/factory-a0-uk-groove.275/
Effect: "BassDrive" (Overdrive / Distortion), active - "yes"
"Bass" = 2
"Trebl" = 0
"Prese" = 0
"Gain" = 80
"Blend" = 30
"Level" = 65
"Mid" = 7
reversed = Container:
control = Container:
param8 = 0
param7 = 0
param6 = 17 (mid 7, if -10..+10)
param5 = 65 (level)
unknown2 = 0
param4 = 7760 (gain and blend??? - something wrong here)
param3 = 10 (pres 0)
param2 = 10 (treble 0)
param1 = 12 (bass +2, if -10..+10)
unknown = 0
id = 23068688 (0x1600010)
enabled = True
Fixed
reversed = Container:
control = Container:
param8 = 0
param7 = 17
param6 = 65
param5 = 30
param4 = 80
param3 = 10
param2 = 10
param1 = 12
unknown = 0
id = 23068688
enabled = True
Snap on the FLST_SEQ.ZDT - I had posted it here:
So it seems to me the byte after the 3e3e3e 00 is related to the GID. I can rationalize them all except for the Folder ID 5 (SVT).
What I suggest I do is make a list over the weekend of factor restored patch v parameters v decode.
I am pretty sure I get them right (although I only tested all the parameters of a random sample of the 100 presets).
The enabled part - IIRC this is reason for x1 in 1st byte. x0 would be off (which we can control via sysex).
I also posted a question to Barsik incase he had some idea if the FXID/GID is encoded in the ZDL itself OR an artifact of installing the FX on the pedal.
If it is the latter, then I need to discover the equivalent (if it exists) of your live pedal state dump.
On a side note I just got me a Zoom GCE. About to make a YT video on it then will be seeing what can be controlled via midi. It's tiny - but claims to be able to store and emulate most of the pedals. Just how much fun can one have for £60 quid these days!
Interesting! So for sure I reinstalled the 1.30 firmware to the B1On. BUT ... that wasnt enough to reset it. So then I followed the "hold down HOME" and switch on Now my 1st patch is still UK Grove but has FX: Bass Drive: display Bass:2, Trebl: 0, Prese: 0, Gain:80, Blend: 30, Level: 65, Mid: 7 midi value: 12. 10, 10, 80, 30, 65, 17 FX: SVT: display Bass: 0, Mid: 0, Trebl: 0, Mid_F: 200Hz, Gain: 40, Level: 25, Ultra: off, CAB: SVT, Mix:50 midi values: 10, 10, 12, 12, 40, 25, 0, 0, 50
Effect: "BassDrive" (Overdrive / Distortion), active - "yes" "Bass" = 2 "Trebl" = 0 "Prese" = 0 "Gain" = 80 "Blend" = 30 "Level" = 65 "Mid" = 7
reversed = Container:
control = Container:
param8 = 0
param7 = 17
param6 = 65
param5 = 30
param4 = 80
param3 = 10
param2 = 10
param1 = 12
unknown = 0
id = 23068688
enabled = True
Perfect!!
A bingo - and it makes more sense to me now.
I'm not suggesting that you pillage ToneLib's forum, but they do have a decode for each of the factory patches https://tonelib.net/forums/forums/zoom-b1on-b1xon.14/page-9
They also have a download in their own format, which might also be a 3rd way to confirm things.
You mentioned (noticed) the byte after '>>>' in FTSL_SEQ, you may be correct that this is a group. Knowing FX used in the patches (from Tonelib) and their groups, you may be able conclude whether the ID in the decode is correct.
Excellent idea. I will ask my Pi to churn our the patches and decode them. Then try to build descriptions in git. Meantime like you suggest I will see what tonelib is up to. I will recreate from my pedal for consistency. But we already know Tonelib isn't really reading the pedal since it doesn't know about new FX. I strongly suspect it rewrites the patches from store FX snippets. Hence why I started to look for alternative approach.
hi so I wrote sysex (0x29) patches out plus their "all parameters 0" here: https://github.com/shooking/ZoomPedalFun/tree/main/B1ON/DerivedData/1.30
I also added Total_Decode.txt which is my current decode status.
I will make a start looking at the ToneLib - I suspect they used 1.21 firmware. In which case I will try to reload that and generate content for that state to compare.
I am reasonably positive the same names ZDL gives different FXID numbers. So I plan to find some examples from say a CDR70, inject it, test itex).
I dont think I got the FXID/GID decoding wrong - but so long as I get it right in the end I will be happy. Doesnt help if I cannot discover the magic sysex (except to know what to inject in full patch sysex).
I got me a GCE-3. Fun - 65 00 10 00 rather than B1X 65 00 00 00. Lots of new sysex sentences to try! I think I will open up a folder on my github to collate the info. It is doing the FLST_SEQ trick - nice.
hi @mungewell I think I can sort of decode the FX/GID from a ZDL now. I would appreciate a 2nd opinion .. never sure if one should use 128 or 256 as a multiplier!!
You can see my full decode/comparison here: https://github.com/shooking/ZoomPedalFun/blob/main/B1ON/DerivedData/NewerDecodeLogicForFX.txt
# -*- coding: ascii -*-
import sys
def check(name):
f = open(name, "rb")
f.read(64)
x = f.read(8)
f.close()
print( "{} {} {} {}".format( hex(x[0]), hex(x[1]), hex(x[2]), hex(x[3]) ) )
mult = 256
if x[2] & 0xC0 == 0:
print("{} \t\t{} {} {}{}{}{}".format(name, hex( x[1] * mult + x[0] ), hex(x[3]) ,
chr(x[4]), chr(x[5]), chr(x[6]), chr(x[7])) )
else:
print("{} \t\t{} {} {}{}{}{}".format(name, hex( x[1] * mult + x[0] ), hex(( (x[3] * mult) + (x[2] & 0xC0)) >> 4) ,
chr(x[4]), chr(x[5]), chr(x[6]), chr(x[7])) )
if __name__ == "__main__":
if len(sys.argv) == 2:
check(sys.argv[1])
As you discovered, the modern ZT2 format stores the GID, type and version. The B1On doesnt. But I lucked out today. No idea why but I got attracted to 0x40 offset of a ZDL. And well the above python (checkme.py) reads the FXID, GID and version from a ZDL.
F:\Interests\Guitars\Zoom Effect Manager - 1.1.1\files\effects>more checkme.bat
@echo off
del decodeFLST_SEQ.txt
for /f %%g in (FLST_SEQ.txt) do python checkme.py %%g >> decodeFLST_SEQ.txt
@echo on
``
I downloaded and installed the "Zoom Effect Manager - 1.1.1\". It has files\effects files.
Now when one sets the FXID via sysex it doubles value and adds 1.
Alas I have not worked out how to send the GID also. Bummer.
There is some trickery to do with if 3rd byte (index 2) has top 2 bits set.. If yes, then GID = ((byte[3] & 0x0F) << 8) + byte[2] & 0xC0) >> 5.
That;s if the hex is 256 rather than 128.
Otherwise I got to scale it back a bit.
The key thing is I can obtain numbers from the patch and from the ZDL and I can find a way to correlate them.
I do hit on exception above with a GID - I will look into it
F:\Interests\Guitars\Zoom Effect Manager - 1.1.1\files\effects>python checkme.py "_BASSDRV.ZDL" 0x10 0x0 0x60 0x1 _BASSDRV.ZDL 0x10 0x14 1.00
F:\Interests\Guitars\Zoom Effect Manager - 1.1.1\files\effects>python checkme.py _BASSMUF.ZDL 0x30 0x0 0x40 0x1 _BASSMUF.ZDL 0x30 0x14 1.00
So the 0x140 does seem to imply they should be in same group. FLST_SEQ suggests otherwise.
I will check later in the week
![FXGID_FROM_ZDL](https://user-images.githubusercontent.com/22934103/133660164-9220b409-7669-4594-bdff-8d4ab8a38666.png)
.
Closing as I managed to find where in a ZDL the IDs are stored. On a B1On we can only set part of the FXID - we cannot change the group with a short sysex command. The only viable way I know is to send full patch.
Hi Mungewell.
You did offer a while back to help brainstorm some B1On right?
So I can find some Sysex that sets 50% of the required values ... but I cannot yet work out the next part.
probeString="F0 52 00 65 31 ${hexFX} 01 ${hexValueLow} ${hexValueHigh} F7"
And this sets 1st byte to 2xhexValueLow +1 2nd to hexValueHigh But not worked out how to influence the next bytes - I did try extending sentence 00 vl vh but that didnt work.I have used the clean 1.30 B1On firmware - so that way no pedal is strictly necessary (but I do love that these B1/G1's can play most of the ZDL FX - Effect Manager 1.1.1 from some Russian source on a VM seems to work nicely!).
Anyhow here I have derived the decoded patch on a B1On - https://github.com/shooking/ZoomPedalFun/blob/main/B1ON/DerivedData/FXID_GID.txt
My method was to create an empty patch. Then cycle the FX one at a time,. And set all the parameters to 0.
So for example I make Ba GEQ have 31 00 00 04 in the first 4 bytes of an FX. Recall on a B1on there are 5 slots, 18 bytes long (once processed). Most efforts to date seem to work on not understanding the crucial roles the 7bit encoding plays in the understanding.
Today I took the B1On 1.3 updater exe. And I found I could search for UK Groove (the first patch) and there it is!
So I started to decode as follows:
working on the others over time.
Anyhow I can see if I mask the unpacked sysex patches, as encoded in the updater, I should be able to work backward to get many of the FXIDs and GIDs.
What I am really interested in - you also found the FXID/GID is in a ZD2 for G1XFour etc. It isnt yet clear to me if this exists in a ZDL file. And yet the nice Russian dude's program seems to be allowing loading of MS-CDR70 and other pedal's ZDLs. So for the LoLs I created a firmware with the B1On's FX and a host of others. Surprisingly the FX appear to have changed FXID/GID - to be verified.
Now I also happened across the zDownload on one of the issues here .... and that is producing IDENTICAL ZD2 between pedals. So it seems to me possible that the older pedals "know" which pedal the ZDL is made for?