sqward napisał/a:

xxx

Na liści Hatari czytałem że używasz przerwania SCI zsynchronizowanego z SSI.
Ciekawi mnie jakie jest zastosowanie tego przerwania, bo chyba samo SCI nie jest podłączone do niczego w Falconie.

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

2 Ostatnio edytowany przez sqward (2021-12-18 00:49:29)

Timera SCI używam do periodycznego wczytywania skompresowanych (ADPCM) sampli przez SDMA. Po wczytaniu robię dekompresję podczas gdy odtwarza się druga połówka bufora sampli.

What can be asserted without proof can be dismissed without proof.

3

napisałbyś coś więcej na ten temat?
Do tej pory miałem jedynie kontakt z odbieraniem / wysyłaniem danych SDMA na przerwaniach SSI - $0C / $10
Rozumiem że trzeba inaczej skonfigurować transfer. Pytanie tylko jak.

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

4

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.

5

sqward napisał/a:

Przerwania $0c/$10 są tylko do wysyłania danych przez SSI do odbiorcy (SDMA albo CODEC).

do odbierania i wysyłania przez SSI mam taki kod:

    org $C
    jsr SSIRX

    org $10
    jsr SSITX

SSIRX:
...
    movep X:RX,X:(r0)+
...

SSITX:
...
    movep Y:(r1)+,X:TX
...
sqward napisał/a:

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.

ok, tego mi brakowało - handshake mode. kiedyś nawet o tym słyszałem ale nie dotarłem do działającego przykładu. Masz może link do źródła playera MP2?

sqward napisał/a:

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? :)

ciekawe.
Próbowałeś może sprawdzić ile maksymalnie można przepchnąć danych w trybie handshake?

Mail wysłany.

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

6

Dekoder mp2 jest na DHS: https://dhs.nu/files.php?t=single&ID=32

Co do szybkości to nie mam takich danych. Coś mi się wydaje, że ok. 1MB/s ale nie dam głowy.

What can be asserted without proof can be dismissed without proof.