Quote:
S0D ~ reset echo delay (alternately, this could be disable echo writes)
S0E ~ reset echo volume (alternately, this could be enable echo writes)
S0F ~ reset echo feedback
I'll accept these changes and move Z13-Z14 to Z11-Z12 since now there's nothing there.
May as well call this big featureset "Super SNESMod" for what it's doing right now.
As of your current version (0.4)...
- Master volume can go past 7Fh... but they'll all be negative values. You can omit the check to save some bytes... just make sure to indicate that you'll get negative volume values if you go past that value.
- I actually wanted to have echo volume be applied without scaling via the master volume (Zxx can help with that by enabling and disabling the scaling). I have a special effect that I could use that involves fooling around with FIR coefficients, setting the EDL as low as possible for smooth transitions, zeroing out the feedback and master volume (without zeroing out the echo volume)... and you'll get filtering on the entire sound output.
- MODULE can be a dynamically changing variable that can also be not divisible by $100. Simply pre-compile the SPC700 source code (with MODULE being essentially a pointer to the end of the current source code... I think that converts OK for TASM), and have SMCONV make its pointers based off of which version you choose.
The following are bugs/concerns from the original SNESMod:
- Fast linear increase is never executed due to multiplication limitations. Volume only ever gets to 7E rather than 7F. This is because of a series of three multiplication operations, none of them skipped, that turns FF into FD, which in turn results in the rather unusual maximum.
- Envelope processing is improperly handled with note delays: they are not delayed with the note, and the previous envelope appears to get frozen in their tracks.
- Envelopes are reset with note slides regardless of whether they finished or not. That's not natural tracker behavior if I remember correctly... I did take advantage of this bug once, though, but I prefer mine not reset.
- The tempo change command can accidentally cause the first tick to come around much later than expected. Most commonly, this is because it's not in the first channel, at least when I noticed it.
- Why is tempo limited to 200? I understand why a lower limit of 80 is mandatory, but tempo can go all the way up to 255, and the timer is able to go that fast.
- Tempo ticks need to be recalibrated. SNESMod's timing, compared to Schism Tracker, is off by (current tempo - 3). This is best indicated when using samples that are timing sensitive to go smoothly, drumbeat samples in particular.
- Ultra low pitches produce glitched values instead of actual low value. Yes, I was crazy enough to go that low with the pitch.
The following are bugs of my original modifications:
- Noise and pitch modulation are not safe with SFX. Echo is in the same boat, but it is not as serious.
Your current version concerns me in the following fashion:
- The way your Zxx code is executed looks quite fatal to SNESMod's standard. That's because the X register is reserved for the channel ID. I would recommend saving the accumulator in m0 (which is fully open in this case), get the parameter mode, then
Also, where did your smconv and snesmod_dev.asm files go? They were here previously...