I've been reading it a few times. It looks very formal, like a real research paper. Made with Latex or similar I suppose?
I guess I am not so used to reading research papers, as it did feel a bit intimidating at first
I think the waveform generation for downward sine slopes (pos and neg) is 255-X instead of 256-X, if X goes from 0 to 255. X is modulo 8-bits right?
I have no good way of describing the negative sign, so any way of defining the waveform sign is OK. Usually I have not included sign in the amplitude information, I've taken it later from phase (IIRC) as that is how a real chip would do it most likely, but that is awkward non-efficient C code.
There is also one emulator that keeps the sign information in the LSB, so it uses (logamplitude<<1 | sign) in waveform table already. The rest of the attenuations need to be summed to correct position by doing a left shift, so the sign bit is kept untouched. And then it uses a log-to-pcm table with even indexes for positive and odd indexes for negative values so it does not have to think about sign bits. I think it is done with LSB so that the table can be limited to values that would output >0. It is just as correct, it just has to look if the value is small enough to be taken from the table, or if it isn't, then output is 0 or -1 if input is even or odd.
I am not sure but I think the attenuation does fit into 15 bits if everything is at maximum, so using the MSB in 16-bit value should be safe. (In C code native integer size is fastest anyway, and modern architectures fast enough to run this emulator should have at least 32-bits as native integer size).