Przerwania $0c/$10 są tylko do wysyłania danych przez SSI do odbiorcy (SDMA albo CODEC). W moim przypadku jest to CODEC otwarzający sample. Na przerwaniu timera, które cały czas utrzymuję zsynchronizowane z odtwarzaniem sampli w buforze ($0c...), przy każdym wywołaniu wczytuję nowy bufor skompresowanych sampli (movep X:<<M_RX,...).
SDMA ma dwa tryby przesyłu danych: synchorniczny i z handshakiem. Ostatecznie to się sprowadza do tego, że w synchronicznym dane przepływają z predkością próbkowania (razy ilość kanałów). W przesyle z handshakiem to DSP kontroluje czy chce dostać kolejną porcję danych.
Takiego sposobu przesyłu danych (z handshakiem) używany jest przez player mp2, do którego źródła są w internecie. Różni się on tym od mojego playera, że dekodowanie i przesył danych odbywa się poza przerwaniem. W moim przypadku dekowowanie i przesył na przerwaniu timera pozwala używać DSP do efektów w demie całkowicie transparentnie.
Ciekawostką jest to, że Atari w dokumentacji wspomina, że przesył synchroniczny nie gwarantuje bezbłędnego dostarczenia danych. Efekt tego widać w Falcampie, gdzie czasem program się po prostu zawieszał. Player mp2 nigdy nie miał takiego problemu bo używa innego trybu przesyłu danych. Nikogo chyba nie zaskoczy, że problem ten znika całkowicie po instalacji clock patcha? :)
Jeśli potrzebujesz więcej info to napisz emaila. Mogę Ci wysłać jakieś źródła.
What can be asserted without proof can be dismissed without proof.