Login
Back to forumSee the full topicGo to last reply

Posted By

TLC
on 2009-07-04
15:41:49
 Re: $ff00/$ff01

Hmmm, this is very strange. For such stuff to work (ie. both the player and the digi irq off from one single CIA interrupt) the player would have to overwrite the CIA timers continuously. This is suspicious... noone would try that, unless there's a good reason, or if there's something else...

Are you sure that you're calling the player _twice_ in a frame, but not from the same single raster interrupt? It's essential for multispeed tunes to have the calls spread equally around a frame (ie. one call, for example, at line 0, and another at line 156... the particular line numbers don't matter, only that there should always be 156 lines between the calls).

The SID is clocked from the single clock of the Plus/4 (ie. 17.734470MHz / 20, = 886.7235kHz ). Yeah, consequently, the frequency table (contained by original C64 tune players) is false for the Plus/4 SID card... well, not exactly false, but all C64 tunes play some halfnotes lower than intended (and the ADSR is also slower somewhat, for exactly the same reason). This is pretty well detailed in the docs of SIDwinder V01.23. Some tunes may sound weird, but that's pretty rare (I'd say the great majority of C64 tunes play pretty well even despite the different clocking, with some examples playing more or less weird). I'd say there's one critical point -- the player itself should be "relocated", so that it updates the SID registers at $FD40 just by itself (rewrite all references of $D4xx to $FD4x), and definitely not using some external loop that copies data from $D400 after each player calls... that usually results in nasty things, as some players update SID registers more than once during a single call (all of which only the very last one gets copied into the SID registers at $FD40, if an external loop is used).



Back to top


Copyright © Plus/4 World Team, 2001-2024