thammer / zoom-explorer

Tools for exploring the Zoom MS Plus series effect pedals
MIT License
5 stars 0 forks source link

Any hope of custom effects - ie DIV0 and RTFM equivalants? #1

Open mungewell opened 6 months ago

mungewell commented 6 months ago

The author of those custom ZDL effects did quite a write-up here: https://github.com/ELynx/zoom-fx-modding/blob/main/howto/RTFM.en.md#capabilities-and-how-to-make-fx-chains

and: https://github.com/ELynx/zoom-fx-modding/blob/main/library/CH_2.md#audio---the-logic-of-fx

I noted that the ZT2 listing that you had showed the 'line select' effect, any chance of downloading and de-compiling??

Group 7 : SFX
0x07000010 : AUTOPAN.ZD2, (v1.10 1)
0x07000020 : LOOPROLL.ZD2, (v1.10 1)
0x07000030 : HOTSPICE.ZD2, (v1.10 1)
0x07000040 : BOMBER.ZD2, (v1.10 1)
0x07000f00 : LINESEL.ZD2, (v1.00 1)   <----------------
0x07000ff0 : BPM_MDL.ZD2, (v1.00 1)
thammer commented 6 months ago

I downloaded the Texas Instrument CCSTUDIO-THEIA for disassembly, and the wxMEdit hex editor, followed the excellent instructions from @ELynx to extract the ELF portion from the LINESEL.ZD2 file, and ran the dis6x from CCSTUDIO on the ELF file to disassemble it.

I think the parts of the ZD2 file before the ELF data is chunk/section-based, just like the MS-50G+ patch data. There are some four-character hex strings followed by what could be chunk length. There's the familiar TXJ1 for Japanese description and TXE1 for English description. The ELF-section is inside a Zoom-style DATA chunk. There's also a chunk called ICON and a chunk called INFO. I guess you know all this already from your ventures into the ZD2 file format :-).

As for the ELF part - At first look, the disassembled output looks sane to me. It contains some assembly code at the start and some data at the end, with section names that suggest they are images.

I don't speak TI6000 assembly, so I don't know what the code does. The code labels / function names does tell a story, though, with code blocks for initialization, editing parameters, and more.

Unfortunately, it looks like @ELynx won't be developing his tools and effects any more. He has set the repository to read only and posted a closing statement a couple of months ago: https://github.com/ELynx/zoom-fx-modding/issues/14.

These MS-Plus series of pedals could be a wonderful platform for implementing custom effects. But it looks like @ELynx' conclusion is that there isn't much community interest in actually doing so.

mungewell commented 6 months ago

I'm away for the weekend, but you can use the 'decode_effect' to extract the code/ELF section.

$ python3 decode_effect.py -c LINESEL.ZD2.ELF LINESEL.ZD3

I also started pulling out some tables/shared data with 'decode_bdl', this also works on ZD2... for when you want to change the characteristics of the EQs for example.

⁣Get BlueMail for Android ​

On May 25, 2024, 9:00 AM, at 9:00 AM, Thomas Hammer @.***> wrote:

I downloaded the Texas Instrument CCSTUDIO-THEIA for disassembly, and the wxMEdit hex editor, followed the excellent instructions from @ELynx to extract the ELF portion from the LINESEL.ZD2 file, and ran the dis6x from CCSTUDIO on the ELF file to disassemble it.

I think the parts of the ZD2 file before the ELF data is chunk/section-based, just like the MS-50G+ patch data. There are some four-character hex strings followed by what could be chunk length. There's the familiar TXJ1 for Japanese description and TXE1 for English description. The ELF-section is inside a Zoom-style DATA chunk. There's also a chunk called ICON and a chunk called INFO. I guess you know all this already from your ventures into the ZD2 file format :-).

As for the ELF part - At first look, the disassembled output looks sane to me. It contains some assembly code at the start and some data at the end, with section names that suggest they are images.

I don't speak TI6000 assembly, so I don't know what the code does. The code labels / function names does tell a story, though, with code blocks for initialization, editing parameters, and more.

Unfortunately, it looks like @ELynx won't be developing his tools and effects any more. He has set the repository to read only and posted a closing statement a couple of months ago: https://github.com/ELynx/zoom-fx-modding/issues/14.

These MS-Plus series of pedals could be a wonderful platform for implementing custom effects. But it looks like @ELynx' conclusion is that there isn't much community interest in actually doing so.

-- Reply to this email directly or view it on GitHub: https://github.com/thammer/zoom-explorer/issues/1#issuecomment-2131302584 You are receiving this because you authored the thread.

Message ID: @.***>

mungewell commented 6 months ago

Well, Linux version looks like it needs Python2... which isn't native on Ubuntu any more. :-( Screenshot_2024-05-26_19-59-14

I'll see if Windows version is any easier, if not I'll have to set up a VM (or something) to work in.

mungewell commented 6 months ago

Windows version worked OK. Just selected the 'C200' tools and was able to...

C:\Users\simon\Downloads\zoom-zt2-master-20240527\zoom-zt2-master>"c:\Program Files\Python\Python310\python.exe" decode_effect.py -c ZNR.ZD2.elf ZNR.ZD2

C:\Users\simon\Downloads\zoom-zt2-master-20240527\zoom-zt2-master>c:\ti\ccstheia140\ccs\tools\compiler\ti-cgt-c6000_8.3.12\bin\dis6x.exe ZNR.ZD2.elf | vim - 

--
Disassembly of ZNR.ZD2.elf:

TEXT Section .text (Little Endian), 0x18a0 bytes at 0x00000000 
00000000            Fx_DYN_ZNR:
00000000   09902266           LDW.D1T2      *+A4[1],B19
00000004       4727           MVK.L2        2,B6
00000006       1192           MVK.S1        16,A3
00000008   071803a2           MVC.S2        B6,RILC

Not that this makes any/much sense to me. :-(

mungewell commented 6 months ago

So the most obvious difference between what was written (re ZDL) and the disassembled ZD2 is that there is no contents under the '.audio' segment. All code seems to be in the '.text'.

Just looking at the labels that are given, grep Fx_ ...

00000000            Fx_DYN_ZNR:
00001300            Fx_DYN_ZNR_thr_edit:
00001360            Fx_DYN_ZNR_onf:
000013c8            Fx_DYN_ZNR_depth_edit:
00001404            Fx_DYN_ZNR_EnvIn_edit:
00001428            Fx_DYN_ZNR_decay_edit:
00001474            Fx_DYN_ZNR_Level_edit:
000014b4            Fx_DYN_ZNR_init:
00001512       e01b           CALLP.S2      Fx_DYN_ZNR_thr_edit (PC-512 = 0x00001300),B3
00001518       ec9b           CALLP.S2      Fx_DYN_ZNR_depth_edit (PC-312 = 0x000013c8),B3
00001522       ee5b           CALLP.S2      Fx_DYN_ZNR_EnvIn_edit (PC-284 = 0x00001404),B3
00001528       f09b           CALLP.S2      Fx_DYN_ZNR_decay_edit (PC-248 = 0x00001428),B3
0000152e       f55b           CALLP.S2      Fx_DYN_ZNR_Level_edit (PC-172 = 0x00001474),B3
800002dc            _Fx_DYN_ZNR_Coe:

Does it make sense that Fx_DYN_ZNR_init is called at load time, which then goes on to call each of the _edit functions, and that Fx_DYN_ZNR is the audio processing function, called for every chunk of audio data?

_Fx_DYN_ZNR_Coe is a shared data object, is this the table of coefficients that was mentioned?