70 Commits

Author SHA1 Message Date
Torbjörn Andersson
0182b46679 More renamings:
callbackOutput()   -> setupPrograms()
callbackProcess()  -> executePrograms()
updateCallback3()  -> update_setupProgram()

_unk4              -> _rhythmSection
updateCallback48() -> update_setupRhythmSection()
updateCallback49() -> update_playRhythmSection()
updateCallback50() -> update_removeRhythmSection()

svn-id: r21336
2006-03-16 18:01:14 +00:00
Torbjörn Andersson
8fcb38648d I don't know if it's our bug, or a bug in the original Kyra music driver, but
updateCallback3() would call unkOutput2(9) in at least one case. This is
obviously wrong because it a) reads outside _regOffsets[], and b) writes to
invalid Adlib registers.

Now unkOutput2() has the same safeguards as noteOff() already had, making
callbackOutput() and updateCallback3() even more similar.

svn-id: r21335
2006-03-16 17:39:23 +00:00
Torbjörn Andersson
f040ea1e82 Fixed some comments and made a couple of cleanups to make it a bit more clear
just how similar callbackOutput() and updateCallback3() are.

svn-id: r21333
2006-03-16 17:27:52 +00:00
Torbjörn Andersson
1f603fdd98 Cleanup.
svn-id: r21304
2006-03-14 23:39:42 +00:00
Torbjörn Andersson
839b5d3e86 Added workaround in FMOPL for the pathological case where a note was turned off
while still at the very beginning of the "attack" phase. This is the very
lowest point on the attack curve, yet it would continue from the beginning of
the release curve, i.e. its very highest point. This is what caused Kyra to
often play low-frequency notes at the very beginning of a new song. (That, and
a truly bizarre function for initialising the channels.)

The proper fix would be to locate the correct point on the release curve and
continue from there. For now, though, only handle the trivial case.

svn-id: r21302
2006-03-14 23:01:44 +00:00
Torbjörn Andersson
ee6f7626bf Fix typo in comment.
svn-id: r21298
2006-03-14 19:08:09 +00:00
Johannes Schickel
fa4471fae4 - Fixes a bug in update_primaryEffect (wrong sound from the birds outside brandons home is fixed with this)
- Changes _tempo, tempo, position, unk41, unk32, unk18, unk19, _unkValue3 to unsigned (should be correct this time)

svn-id: r21293
2006-03-14 15:15:04 +00:00
Johannes Schickel
9673573bec Fixes _unkTables, I made a mistake while extracting those last time it seems.
svn-id: r21287
2006-03-14 13:37:15 +00:00
Torbjörn Andersson
660c23ba3f Updated comment with more circumstantial evidence that the low-frequency note
bug is a bug in our fmopl.cpp. Ken Silverman's Adlib emulator doesn't seem to
exhibit the bug either. (But is apparently less feature complete than MAME's.)

svn-id: r21275
2006-03-14 09:55:41 +00:00
Torbjörn Andersson
784728bf8d Further clarifications to the comment about the "low-frequency notes at
beginning of music" bugs. As an experiment, I tried hooking up ScummVM with the
most recent version of the FMOPL code, and the bug went away.

Unfortunately, I believe we are stuck with the ancient version for license (and
performance?) reasons.

svn-id: r21267
2006-03-13 23:53:15 +00:00
Torbjörn Andersson
221263e275 Cleaned up the comments in unkOutput2(), and added a big note about the bug
where low-frequent noises are playing at the beginning of some new sounds.

svn-id: r21265
2006-03-13 23:05:11 +00:00
Lars Persson
d66d7ff76b Changed type for samplesleft in order for MIN macro to work properly on all platforms
svn-id: r21264
2006-03-13 21:38:20 +00:00
Torbjörn Andersson
9399a2b58e Things continue to fall into place. In other words, more renamings:
unk3  -> spacing1
unk7  -> spacing2
unk12 -> fractionalSpacing

updateCallback4()  -> update_setNoteSpacing()
updateCallback9()  -> update_stopChannel()
updateCallback15() -> update_stopOtherChannel()
updateCallback17() -> update_setupInstrument()
updateCallback28() -> update_setFractionalNoteSpacing()
updateCallback43() -> update_nop1()
updateCallback47() -> update_nop2()

svn-id: r21261
2006-03-13 13:56:19 +00:00
Torbjörn Andersson
480aee83aa I was going to hold off on this until the "Pool of Sorrow" music had been fixed
but it seems that it drifts out of sync after a few repeats even with the
original interpreter. It's a feature!

This cleanup clears up some of the more confusing break/continues in the
callbackProcess() function, and gets rid of _continueFlag.

svn-id: r21259
2006-03-13 11:57:09 +00:00
Torbjörn Andersson
1d439592dd Until now, we have confusingly used the terms "state" or "table" where we
really mean "channel". Fixed that:

OutputState     -> Channel
_curTable       -> _curChannel
_outputTables[] -> _channels[]

The biggest change was modifying all the "state" and "table" local variables
and function parameters.

Ahd, at no extra charge:

_outputTable[]  -> _regOffset[]

svn-id: r21247
2006-03-12 23:21:01 +00:00
Torbjörn Andersson
2ab85f9ea6 Renamed callback1 to primaryEffect and callback2 to secondaryEffect.
svn-id: r21246
2006-03-12 22:47:51 +00:00
Torbjörn Andersson
9f941a18cf Cleaned up comment and did some more renaming:
unk4 -> position   (measured on a very short ruler :-)
unk5 -> duration

svn-id: r21245
2006-03-12 22:33:24 +00:00
Johannes Schickel
e19d079d2b - Renames some functions:
updateCallback31 -> update_setChannelTempo
updateCallback42 -> update_resetToGlobalTempo
updateCallback55 -> update_setTempoReset
- Renames some vars:
unk1 -> tempo
unk6 -> tempoReset
- Fixes tempo bugs

svn-id: r21244
2006-03-12 21:54:06 +00:00
Johannes Schickel
20095d8e93 - Changes usage of regBx to regAx in primaryEffect2 (seems to be a bug introduced when renaming).
- Changes unk41 and unk32 to signed.
- Fixes wrong sound when dropping items (that was also a little bug in primaryEffect2)

svn-id: r21240
2006-03-12 17:58:04 +00:00
Torbjörn Andersson
63245b8eba Compensate for rounding errors in _samplesPerCallback by having readBuffer()
generate "leap samples". I doubt this will make any noticeable difference, but
at least now we can probably rule out timer inaccuracies from the list of
possible suspects for the remaining bugs.

Also removed unnecessary mutex locking/unlocking from readBuffer(), spotted by
LordHoto.

svn-id: r21239
2006-03-12 17:50:36 +00:00
Johannes Schickel
9d3136fb71 Corrects former commit which deleted sound file loading after the scene with malcolm and kallak.
Also corrects callback50() which seem to improve the sound a bit in the kallak writing scene.

svn-id: r21238
2006-03-12 17:08:46 +00:00
Torbjörn Andersson
72d2ef7221 After several days, telling LordHoto over and over that "no, I don't think the
timer inaccuracies can cause that kind of problems, or we'd have noticed it in
the other game engines as well", guess what? The other game engines do not
necessary use a timer for their Adlib music. So now Kyra doesn't either.

Fortunately for my dignity, the music is still a bit uneven at times, but the
situation does seem to have improved a bit, and the sound effects sound better
to me now.

svn-id: r21237
2006-03-12 17:05:59 +00:00
Johannes Schickel
cd28f28d32 Music in the last two intro scenes plays now again with adlib.
Cleaned up the sound code a bit (removed some unneeded functions).

svn-id: r21234
2006-03-12 14:22:27 +00:00
Torbjörn Andersson
c8347b23b1 Added debug message for the standard "note on" opcodes as well.
svn-id: r21233
2006-03-12 12:55:16 +00:00
Torbjörn Andersson
84af303787 And now, for a change, some more renamings:
update1()          -> setupDuration()
updateAndOutput1() -> setupNote()
setInstrument()    -> setupInstrument()  (just for the symmetry)
updateAndOutput3() -> noteOn()

That made the following two renamings seem natural:

updateCallback10() -> update_playRest()
updateCallback27() -> update_playNote()

I decided to number the secondary effects, even though there's only one:

update_setupSecondaryEffect()  -> update_setupSecondaryEffect1()
update_removeSecondaryEffect() -> update_removeSecondaryEffect1()

And finally, I renamed the effects callbacks:

stateCallback1_1() -> primaryEffect1()
stateCallback1_2() -> primaryEffect2()
stateCallback2_1() -> secondaryEffect1()

svn-id: r21232
2006-03-12 12:40:14 +00:00
Torbjörn Andersson
d57e2e88c0 Added a block of comments about command parsing and timing. Perhaps it will be
of use in tracking down the tempo bugs.

svn-id: r21230
2006-03-12 10:47:20 +00:00
Torbjörn Andersson
5bd5cef6cf Some more renaming:
updateCallback18() -> update_setupPrimaryEffect1()
updateCallback19() -> update_removePrimaryEffect1()
updateCallback21() -> update_setupPrimaryEffect2()
updateCallback40() -> update_removePrimaryEffect2()
updateCallback14() -> update_setupSecondaryEffect()
updateCallback30() -> update_removeSecondaryEffect()
updateCallback37() -> update_changeExtraLevel1()
updateCallback34() -> update_changeExtraLevel2()

svn-id: r21217
2006-03-11 17:25:12 +00:00
Torbjörn Andersson
47589ec06f More comments, and some very minor cleanup.
svn-id: r21208
2006-03-10 15:30:22 +00:00
Torbjörn Andersson
b07e6f6eed Added comment detailing what I believe I know about the remaining "unk"
variables in OutputState.

svn-id: r21207
2006-03-10 14:53:48 +00:00
Torbjörn Andersson
f670d2b2b7 Further guesswork: 'unk2' appears to be the priority of a sound, since the
callbackOutput() and updateCallback3() functions won't change the channel data
pointer unless the new sound has a higher unk2 and the current one.

Since it's set to 0 when the data pointer is nulled, I've changed the priority
to be unsigned.

The updateCallback22() function is now update_setPriority().

svn-id: r21206
2006-03-10 14:22:27 +00:00
Torbjörn Andersson
b294175eb6 Fleshed out some guesswork comments.
svn-id: r21205
2006-03-10 13:29:34 +00:00
Torbjörn Andersson
6f2f70d071 Renamed _unkOutputByte1 _curRegOffset. It doesn't always correspond to the
_curTable channel, but it probably does so whenever both of them are used
together.

svn-id: r21204
2006-03-10 11:26:32 +00:00
Torbjörn Andersson
a4ba0066bc Added guesswork comments for stateCallback2_1() and its related functions and
variables, and cleaned it up slightly. (Some of its variables are now signed.)

svn-id: r21203
2006-03-10 11:18:40 +00:00
Torbjörn Andersson
ac997a2493 Added guesswork comments for stateCallback1_1() and its related functions and
variables.

svn-id: r21202
2006-03-10 10:55:36 +00:00
Torbjörn Andersson
0b7f7f66ea Fixed some obvious errors in the comments I added before.
svn-id: r21201
2006-03-10 10:30:31 +00:00
Torbjörn Andersson
69b18f1744 Added some guesswork comments about stateCallback1_2() and related functions
and variables.

svn-id: r21200
2006-03-10 10:18:05 +00:00
Torbjörn Andersson
95196056bd The calculateLowByte1() and 2() functions are used for calculating the "total
level", which I believe is the individual channel volume. (The functions also
return the "scaling level" bits, but they are preserved, not calculated.) I
have renamed these functions calculateOpLevel1() and 2().

The unk25 and unk26 variables have been renamed opLevel1 and opLevel2. These
are called oplvl_1 and oplvl_2 in our MidiDriver_ADLIB class.

The unk26, unk27 and unk28 variables are potentially added to both operator
levels, and have been renamed opExtraLevel1, opExtralevel2 and opExtraLevel3.

The updateCallback25() function has been remamed update_setExtraLevel1().
The updateCallback33() function has been renamed update_setExtraLevel2().
The updateCallback32() function has been renamed update_setExtraLevel3().

Note that these callbacks aren't quite as similar as their names would seem to
indicate: They differ in whether or not the volume is updated and/or how the
parameters are passed.

svn-id: r21199
2006-03-10 09:24:50 +00:00
Torbjörn Andersson
8a9286ce53 Renamed "algorithm" "twoChan" to be more consistent with our MidiDriver_ADLIB
class, where the corresponding variable is called _twochan.

svn-id: r21198
2006-03-10 08:55:19 +00:00
Torbjörn Andersson
37b5e3bcca Since updateAndOutput2() is the only function that sets up wave forms and
stuff, it pretty much has to be our "set instrument" function. Also, while I'm
not entirely sure of the implications, "unk23" is the Algorithm bit for the
Feedback / Algorithm register, so I've renamed it "algorithm".

svn-id: r21197
2006-03-10 08:19:53 +00:00
Torbjörn Andersson
19aba0e88f Some more/updated comments.
svn-id: r21196
2006-03-10 07:56:22 +00:00
Johannes Schickel
f0106cd59c - Removes deleted waitTicks prototype in KyraEngine
- Adds sound fading support to the adlib player
- Adds support for stopping running tracks

- Changes baseFreq type back to uint8
- corrects octave handling in updateAndOutput1
(Thanks to eriktorbjorn for doing that)

svn-id: r21185
2006-03-09 20:50:19 +00:00
Torbjörn Andersson
a5e0c392ba As LordHoto pointed out to me, updateCallback41() was slightly different after
all: it adjusts the frequency even when state.unk16 is zero. Fixed that, and
added some comments to hopefully explain the differences between the cleaned up
code and the original disassembly.

svn-id: r21184
2006-03-09 18:42:05 +00:00
Torbjörn Andersson
c571026a20 More cleanups and renamings:
* Rewrote updateCallback41() in terms of updateAndOutput1(), since they were
  almost identical to begin with.
* Rewrote updateAndOutput1() for better readability.
* Made unk10 signed, and renamed it baseOctave.
* Made unk14 signed, and renamed it baseNote.
* Made unk15 signed, and renamed it baseFreq.
* Renamed unk17 regAx. It appears to be a cache for that register.
* Renamed unkOutputValue1 regBx. It appears to be a cache for that register.
* Renamed updateCallback8() update_setBaseOctave().
* Renamed updateCallback13() update_setBaseNote().
* Renamed updateCallback20() update_setBaseFreq().

Which still leaves the mystery of unk16 and _unkTables[]. Perhaps *this* is the
pitch bend?

svn-id: r21183
2006-03-09 17:04:00 +00:00
Torbjörn Andersson
671450fcb8 Set down in comments what I know about _outputTable[], and what I suspect about
_unkTable[]. Investigating the latter further might help unravelling several of
the "unk" variables. (Right now, I'm suspecting that unk15 is the pitch bend.)

svn-id: r21164
2006-03-09 12:36:11 +00:00
Torbjörn Andersson
9d19f7d32e Corrected a few comments where I had mistaken the note on/off bit for one of
the octave bits.

The unkOuput1() function always turns off the note, so I've renamed it
noteOff(). I've added some comments to unkOuput2() as well, but I'm still not
quite sure what its purpose is. It seems unlikely that it's simply a "note on"
function, given the many things it will clear for the channel. It does end by
turning the note on, though. Strange.

svn-id: r21162
2006-03-09 12:04:41 +00:00
Max Horn
d9a9fac937 Fixed tons of format string warnings for debug/error calls (including several errors where the format string didn't match the number of arguments to the call)
svn-id: r21141
2006-03-08 11:37:25 +00:00
Oystein Eftevaag
cca7da5ba1 The adlib code was calling the Kyra delay() function instead of the
system delay, which was causing concurrency problems.

svn-id: r21136
2006-03-08 01:38:27 +00:00
Johannes Schickel
4aaa3eacbd Renamed setTempo to update_setTempo, also fixed tempo handling (intro is too fast now though, but seems to be another problem).
Also changed some unsigned values to signed.

svn-id: r21111
2006-03-06 16:37:03 +00:00
Torbjörn Andersson
628d64f136 More renamings: _unkTableByte1 is now _tempo, and updateCallback29() is
setTempo().

svn-id: r21110
2006-03-06 16:31:19 +00:00
Torbjörn Andersson
ddd312cea7 Cleanup
svn-id: r21109
2006-03-06 15:10:48 +00:00