Roland MV-8000, S-7xx: convert the envelope times with the table of the sound engine - #371
Merged
git-moss merged 1 commit intoAug 21, 2026
Conversation
…he sound engine Every time is a 0-127 setting which the sound engine looks up in a 128 entry table, and that table sits in the firmware of both machines: at offset 0xB63EE of the S-760 system disk (version 2.24) and 0x50538C of the decompressed MV-8000 operating system (3.54), with all 127 overlapping entries identical. That the two share it is also what shows the MV-8000 runs the S-7xx sound engine, not the XV one whose category list it borrows. The unit follows from the S-760 owner's manual, which documents the LFO delay - a 0-127 setting like the envelope times - as covering "0.01 - 22 sec". The table runs 30 to 65535, so an entry is 1/3000 second and the range is 0.0100 to 21.845 seconds, matching both ends of the documented range within one percent. The formula used before, borrowed from the S-7xx with no calibration, spans only 64:1 and cannot express anything below 302 ms. It was up to 29 times too slow where the music is - a setting of 1 is 0.011 s and not 0.313 s, and 15, the median of the factory patches, is 0.025 s and not 0.496 s - and agreed only near the top of the range.
douglas-carmichael
force-pushed
the
roland-s7xx-envelope-times
branch
from
August 20, 2026 15:39
ff7d0ae to
14ebb90
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Both formats convert their envelope times with
20 * 2^((v-127)/21), a formula which was never calibrated - the MV-8000 borrowed it from the S-7xx, and on the S-7xx it carries the comment "0 is instant - without this case every envelope stage would take at least 302 ms". That floor is the tell: a sampler whose fastest non-zero envelope stage is a third of a second is not credible, and the formula spans only 64:1 where every law we have recovered from firmware spans far more (Akai S1000 16384:1, Casio FZ 10922:1, the ZEN-Core law measured on a FANTOM-0 2150:1).The table
Every time is a 0-127 setting which the sound engine looks up in a 128 entry table, and that table is in the firmware of both machines:
S760224.OUT, Roland's own download)0xB63EE0x50538CAll 127 overlapping entries are identical. It runs 30 to 65535 as a geometric series, ratio 1.0624 per step, spanning 2184:1.
That the two firmwares share it is incidentally what settles the lineage: the MV-8000 runs the S-7xx sound engine, not the XV one whose category list it borrows. Two further tables are shared (a 2:1 pitch ratio ramp and a linear ramp), the S-760 system disk identifies itself as
S770 MR25A, and the MV-8000 OS carries dedicated S-7xx patch/partial/sample loaders.The unit
The S-760 owner's manual documents LFO Delay, Partial, [0]-[127] as "the time (0.01 - 22 sec)". The table's ends are 30 and 65535, so
Both ends of a documented range matched within one percent, which fixes the unit:
What changes
The two agree only near the top. Measured over the 4324 envelope times of the 103 factory patches, 62 % are non-zero with a median of 15 - squarely in the range where the old law was 20 times too slow. The factory 'Mark V' electric piano now attacks in 0.011 s and releases in 0.016 s, as an electric piano does, instead of taking 0.3 s to do either.
Please read this before merging
One step is inference, not proof. The manual documents that range for the LFO delay, and I could not locate the code which indexes the table, so that the envelope times use the same table is not shown directly.
What supports it:
Why the code was not found: the S-760's CPU is an Intel S80C196KB whose 64 KB address space is expanded to 1 MB by the
HG62E33B0Bgate array, with 1 MB of program DRAM holding the whole disk image. Overlay mappings can be recovered exactly where a computed goto appears (add Rn,#imm; br [Rn]puts the branch table at a known file offset), which gives K =0x8400for file0xA5DB-0xF100- but under every recovered mapping the table lies outside 16 bit range, and which window the gate array maps is internal to that custom part.Recording the hardware would settle it in about ten minutes: one patch mapping a looped sine to a row of pads whose only difference is the time under test. I have that patch and the analysis script ready and would gladly hand them to anyone with an MV-8000 or MV-8800 - the same recording also confirms the curve shape. Happy to hold this until then if you would rather not take the inference; the current law is wrong either way.
The table conversion round-trips exactly over all 128 settings, so an MV0 read and written back keeps its stored values.
Note: this rewrites the paragraph about the unknown time curve in
documentation/design/MV8000_FORMAT.md, which #369 also touches - if #369 goes in first this needs a trivial rebase, just say the word.