1

Witam.
To mój pierwszy post na tym forum. Zarejestrowałem się specjalnie aby rozpocząć ten wątek. W ramach wprowadzenia dodam, że jestem (nie tylko byłym) atarowcem o wieloletnim stażu (znacznie większym od średniej tego forum). Ale do rzeczy:

Posiadam telewizor Samsung LE40B650, który to już jakiś czas temu, wraz z innymi modelami, został rozpracowany przez wielu speców od grzebania w sprzęcie. Krótko mówiąc, ten multimedialny telewizor, oparty na procesorze ARM wyposażony jest w system Linux, do którego można się dostać telnetem i grzebać do woli. Wszystko jest sukcesywnie rozpracowywane i w chwili obecnej możliwe jest tworzenie i uruchamianie dowolnych aplikacji, np. z użyciem SDL (Simple Direct Layer). Telewizor jest wyposażony w USB, LAN i inne dobrodziejstwa, co pozwala po podłączeniu klawiatury i myszki zrobić z niego "normalny" komputer. I tu zaczyna się zagadnienie.

Zapoczątkowałem projekt mający na celu uruchomienie jakiegoś emulatora Atari XL/XE na tym telewizorze. Na pierwszy ogień poszedł Atari800, którego linuxowe źródła pod SDL są dostępne w sieci. Jednak kompilacja "na kolanie" nie przyniosła oczekiwanego efektu. Czarny ekran przez kilka sekund, a potem restart systemu (telewizora w tym przypadku).

Obecnie z emulatorów na ten TV dostępny jest jedynie ScummVM. Ktoś opublikował Quake, ale mi nie działa. Z innych aplikacji - udało się uruchomić przeglądarkę internetową NetSurf.

Szukam kogoś, kto może próbował już czegoś takiego i mógłby pomóc w uruchomieniu emulatora. Niestety nie mam doświadczenia w programowaniu pod linuxem ani tym bardziej SDL, ale kilka aplikacji udało mi się z powodzeniem wytworzyć lub przerobić. Mam świadomość, iż znalezienie takiej osoby może być trudne, bo najlepiej aby ten ktoś dysponował podobnym telewizorem i jednocześnie znał się na linuxie. Ale postanowiłem, że i tak warto zapytać.

Jeśli będzie zainteresowanie, postaram się przedstawić wszelkie szczegóły.

2

A nie prościej podłączyć laptopa z emu/bądź atari pod tv?

3

AS... napisał/a:

A nie prościej podłączyć laptopa z emu/bądź atari pod tv?

No więc według mojego skromnego zdania nie prościej (w sensie użytkowania, nie w sensie przygotowania, rzecz jasna). Takie rozwiązanie (na SCART) to ja już mam. Wady takiego rozwiązania można wyliczać. A tymczasem emulator można by uruchomić wciskając raptem 3 klawisze na pilocie. I nie byłoby żadnych dodatkowych mebli w okolicy telewizora.

4

Czy dotyczy to też nieco starszej serii LE40A786?

Ceterum censeo Germaniam esse delendam.

5

http://samygo.sourceforge.net/

tu jest chyba lista modeli, cholera jakis miesiac temu kupilem do atari z vbxe samsunga B530 a na tej liscie go nie ma :/ jaka szkoda, gdybym to wiedzial wczesniej....

http://atari.pl/hsc/ad.php?i=1.

6

Wydaje mi się, że może to zadziałać jedynie na modelach wyposażonych w Content Library. Ale pewności nie mam. Uruchamianie własnych aplikacji graficznych polega na utworzeniu modułu typu "gra" właśnie dla Content Library. Ta "gra" to skompilowany binarny moduł biblioteki dynamicznej (*.so), w której przy wywołaniu uruchamiana jest funkcja Game_Main().

Informacje ogólne nt. Content Library: http://www.samsung.com/pl/consumer/lear … ction.html

7 Ostatnio edytowany przez Fox (2010-06-29 13:13:47)

Sugeruję na początek spróbować uruchomić prostsze porty Atari800 - basic i curses.

https://www.youtube.com/watch?v=jofNR_WkoCE

8

Możesz dokładniej opisać "kompilację na kolanie"?

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

9

Racja, trzeba popróbować z prostszymi portami. Choć na razie nie wiem jak ;)

epi napisał/a:

Możesz dokładniej opisać "kompilację na kolanie"?

Jasne.

Z góry przepraszam przy tym starych linuxowców, ale ja dopiero zaczynam z linuxem, więc mogę pisać głupoty.

Po pierwsze, aby kompilować cokolwiek na inny CPU, należy przygotować środowisko cross-compilera (w ogólności, bo metod jest kilka, ale ja wybrałem taką). Ten proces jest opisany na stronach forum SamyGO (setting up cross-compilation toolchain). Ja postawiłem to na Fedorze i przy tej okazji zrobiłem sobie dokładniejszy opis jak to zrobić. Jak ktoś potrzebuje, to podam ten przepis.

Po zainstalowaniu cross-compilation toolchain dysponujemy linuxem na PC (i686) pozwalającym kompilować programy zarówno na x86 (przy użyciu gcc), jak i na ARM (przy użyciu arm-SamyGO-linux-gnueabi-gcc).
Do tego doinstalowałem biblioteki ZLIB, SDL, PNG w wersji dla SamyGO. Nie zaszkodzi zainstalować pozostałych.

Co dalej? Pobrałem kod źródłowy Atari800, rozpakowałem do jakiegoś katalogu, po czym trochę pobawiłem się w edycję pliku src/configure. Wykonałem zmiany w stylu:
sdl-config  ->  arm-SamyGO-linux-gnueabi-sdl-config
gcc         ->  arm-SamyGO-linux-gnueabi-gcc
cross_compiling=no -> cross_compiling=yes
(byćmoże bez sensu, bo może wystarczyłoby zrobić jakieś linki symboliczne czy coś)

Następnie utworzyłem nową funkcję Game_Main() w pliku src/atari_sdl.c i skopiowałem do niej zawartość funkcji main(), przy czym zmienne argc i argv trzeba zdefiniować "ręcznie", bo w Game_Main() ich nie ma.

W kolejnym kroku wywołałem (jednorazowo):

./configure --target=sdl

Potem wyedytowałem makefile i dodałem opcje "-shared -fPIC" do polecenia gcc (kompilacja i konsolidacja).
Pamiętajmy, że nie kompilujemy zwykłego pliku wykonywalnego, a bibliotekę dynamiczną!

poleceniem make wykonujemy (re)kompilację. Powstaje plik atari800.so, który to umieszczamy wraz z pozostałymi plikami na pendrive. Ten pendrive nadaje się do użycia w TV.
Zawartość pendrive: podkatalog Atari800 z następującymi plikami:

- clmeta.dat: plik tekstowy (XML) o zawartości:

<?xml version="1.0" encoding="utf-8"?>
<contentlibrary>
  <contentpack id="Atari800">
    <category>Game</category>
    <title language_id="English">Atari800</title>
    <startpoint language_id="English">./atari800.so</startpoint>
    <thumbnailpath>./Atari800.png</thumbnailpath>
    <totalsize>1</totalsize>
  </contentpack>
</contentlibrary>

- atari800.png: niewielka grafika z logo Atari
- ATARIBAS.ROM: nie muszę wyjaśniać
- ATARIXL.ROM: nie muszę wyjaśniać
- atari800.so: ten główny skompilowany plik binarny

Pliku konfiguracyjnego dla emulatora nie robiłem. Założyłem domyślne ustawienia.

Później dodałem trochę wstawek logujących wywoływanie niektórych funkcji i okazało się, że podczas uruchamiania telewizor restartuje się gdzieś w okolicy ładowania plików ROM. Musiałem także dodać wskazanie ścieżki do plików ROM, bo domyślnie ich nie znajdował (katalog bieżący nie jest tym gdzie leży główny program).

Sorry za chaos, ale już parę dni nie miałem czasu wrócić do tematu i piszę trochę z pamięci. Szczegóły mogę sprawdzić, ale byćmoże należałoby zacząć eksperymenty od nowa, aby moje błędy nie były powielane.

10

Spróbuj przekierować standardowe wyjście błędów do jakiegoś pliku. Może dzięki temu dowiemy się w którym momencie emulator się wysypuje. (Zapewne na otwieraniu video SDL).

A8CAS - narzędzie do 100% archiwizacji kaset Atari

11

geo650 napisał/a:

Racja, trzeba popróbować z prostszymi portami. Choć na razie nie wiem jak ;)

Skoro jest telnet, to rozumiem, że jest też jakiś shell i może da się skompilować zwykłego exe, a nie jakieś so i odpalić z tego shella?

./configure --target=basic && make
https://www.youtube.com/watch?v=jofNR_WkoCE

12

Fox napisał/a:

Skoro jest telnet, to rozumiem, że jest też jakiś shell i może da się skompilować zwykłego exe, a nie jakieś so i odpalić z tego shella?

Sprawa jest trochę skomplikowana. Oczywiście da się skompilować i uruchomić zwykłego exe-ka. Ale jest problem z dostępem do urządzeń. Telewizor po włączeniu uruchamia aplikację exeDSP, która jako jedyna z całego firmware nie jest opensource i nie bardzo wiadomo co się dzieje wewnątrz. Ta aplikacja steruje ekranem, głośnikami itp. Jedynym "grzecznym" sposobem wejścia ze swoją aplikacją na ekran telewizora jest obecnie wykorzystanie exeDSP jako pośrednika. Umożliwia to mechanizm uruchamiania gier w Content Library. Dlatego trzeba utworzyć "grę" i uruchamiać ją z poziomu tego zamkniętego kodu exeDSP. Grą jest zwykła biblioteka dynamiczna (plik *.so).

Byćmoże za jakiś czas ktoś opracuje inną technikę, ale obecnie tylko tak się to da zrobić. I tak to nie jest największy problem, bo jak widać wystarczy dorobić jedną funkcję Game_Main(), która zrobi to samo co main().

Programy samodzielnie działające w shellu (uruchamiane np. przez telnet) już robiłem, ale to były proste rzeczy, które do komunikacji z użytkownikiem używały funkcji printf() a nie SDL. Próbowałem zrobić samodzielnego exe-ka wyświetlającego coś przez SDL, ale nie udało się. Poza tym, nawet jakby się to udało, trzeba by było wiedzieć jak zatrzymać wyświetlanie obrazu telewizyjnego, wyciszyć tuner itp. aby nie kolidowało to z emulatorem.

Będę jeszcze czynić próby z wersją basic, ale nie znalazłem do tej pory opisu czym się ona charakteryzuje. Dziwne, że strona emulatora Atari800 nie ma nawet forum, a jedynie "staroświecki" mailing-list.

Dla zainteresowanych podam jeszcze kilka linków:
Emulator Atari800: http://atari800.sourceforge.net/index.html
Forum SamyGO: http://sourceforge.net/apps/phpbb/samygo/index.php
Kody źródłowe Samsunga: http://opensource.samsung.com/
ScummVM (inny emulator na TV): http://sourceforge.net/apps/phpbb/samyg … &t=562
Jak zbudować kompilator: http://sourceforge.net/apps/mediawiki/s … _toolchain
Co to jest ContentLibrary: http://www.samsung.com/uk/consumer/lear … ction.html

13

Wersja basic działa w trybie tekstowym przy użyciu standardowego we/wy, czyli printf i podobnych. Oczywiście da się w ten sposób uruchamiać tylko programy działające w trybie tekstowym.

Lista mailowa Atari800 ma archiwum dostępne z WWW.

https://www.youtube.com/watch?v=jofNR_WkoCE

14

Standardowe wyjście chyba widzę w telnecie, więc przekierowywać chyba nie ma czego.

Fox napisał/a:

Wersja basic działa w trybie tekstowym przy użyciu standardowego we/wy, czyli printf i podobnych. Oczywiście da się w ten sposób uruchamiać tylko programy działające w trybie tekstowym.

Oczywiście to nie jest cel tego projektu, ale mimo to warto spróbować. I spróbowałem. Musiałem jeszcze dodać opcję --disable-sound przy configure, bo sypnęły się błędy. Udało się skompilować i uruchomić standardowy plik wykonywalny. Jest trochę kłopotu ze ścieżkami do plików, bo emulator sięga do katalog głównego, gdzie chce zapisywać cfg a w TV katalog główny filesystemu jest tylko do odczytu. Ale po drobnych modyfikacjach skierowałem ścieżki do katalogu, w którym znajduje się emulator (/mtd_tlib/GGame/Atari800). Oto wynik uruchomienia wersji basic:

# ls
Atari800.png  atari800.so   atarixl.rom
atari800.cfg  ataribas.rom  clmeta.dat
# rm *.cfg
# ./atari800.so
User config file '/mtd_tlib/GGame/Atari800/atari800.cfg' not found.
Trying system wide config file: /mtd_tlib/GGame/Atari800/atari800.cfg
No configuration file found, will create fresh one from scratch:
Writing config file: /mtd_tlib/GGame/Atari800/atari800.cfg
Bus error (core dumped)

Natomiast w swoim logu widzę, że program wywala się po załadowaniu atarixl.rom i ataribas.rom (które chyba się ładują, bo nie ma błędu w funkcji Atari800_LoadImage). Muszę dorobić trochę więcej kodu debugującego, żeby zobaczyć co się dzieje dalej.

15

Jak bus error, to obstawiam, że trzeba undefować WORDS_UNALIGNED_OK w config.h.

https://www.youtube.com/watch?v=jofNR_WkoCE

16 Ostatnio edytowany przez geo650 (2010-07-04 22:28:01)

Fox napisał/a:

Jak bus error, to obstawiam, że trzeba undefować WORDS_UNALIGNED_OK w config.h.

Dzięki. Tym razem nie wywaliło się. W moim logu widzę ciągłe wywołania funkcji Atari800_Frame(), w telnecie mam jakby pusty edytor, żadnych komunikatów, nic. Klawiszami CTRL+C wyskoczyłem z procesu i to na razie tyle. Teraz czas na instrukcję obsługi, hehe. Przedtem może jeszcze sprawdzę build SDL. Dam znać co wyszło.

EDIT: daję znać: kompilacja wersji SDL przyniosła znów nagły restart telewizora. Z logu widzę, że emulator dochodzi do pierwszego wywołania funkcji Atari800_Frame(). Oto mój log (mieszanina standardowego wyjścia i dodatkowych informacji):

atari_sdl.c: Game_Main()
atari.c: Atari800_Initialise()
User config file '/mtd_tlib/GGame/Atari800/atari800.cfg' not found.

Trying system wide config file: /mtd_tlib/GGame/Atari800/atari800.cfg

No configuration file found, will create fresh one from scratch:

Writing config file: /mtd_tlib/GGame/Atari800/atari800.cfg

colours.c: Colours_Initialise()
atari_sdl.c: PLATFORM_Initialise()
atari_sdl.c: SoundInitialise()
atari_sdl.c: SoundSetup()
atari_sdl.c: ResetDisplay()
atari_sdl.c: SetNewVideoModeNormal()
atari_sdl.c: SetVideoMode()
detected 32bpp

atari_sdl.c: CalcPalette()
atari_sdl.c: ModeInfo()
Video Mode: 336x240x32

[*] Full screen  [ ] BW  [d] Width Mode  [ ] Joysticks Swapped

video initialized

atari_sdl.c: Init_SDL_Joysticks()
joystick 0 not found

joystick 1 not found

atari.c: Atari800_InitialiseMachine()
colours.c: Colours_InitialiseMachine()
atari.c: load_roms()
- machine type = XL/XE
atari.c: Atari800_LoadImage():
/mtd_tlib/GGame/Atari800//atarixl.rom
atari.c: Atari800_LoadImage():
/mtd_tlib/GGame/Atari800//ataribas.rom
atari.c: Atari800_Coldstart()
atari_sdl.c: PLATFORM_Keyboard()
atari_sdl.c: PLATFORM_Mouse()
atari.c: Atari800_Frame()

Należy dodać, że pomimo załadowanych sterowników HID, nie miałem w czasie wywołania podłączonej klawiatury ani myszki do telewizora. Ale to chyba nie jest przyczyną restartu. Efekt uruchomienia jest taki: na dole czarnego ekranu pokazuje się kilka linii jasnej "ciapy", a potem mam niespodziewany restart. Teraz wracam znów do wersji basic.

17

Prawdopodobnie wersja basic działa już poprawnie i wchodzi do Self Testu. Włącz Atari BASIC (w pliku konfiguracyjnym lub z command line), to powinieneś zobaczyć READY i móc pisać w BASICu. Możesz też uruchamiać dyskietki i execi w trybie tekstowym.

Czy w wersji SDL na pewno WORDS_UNALIGNED_OK jest taki, jak w działającej wersji basic?

Problem z WORDS_UNALIGNED_OK jest spowodowany tym, że nieprawidłowo wywołujesz configure. Poczytaj o autoconf i cross-kompilacji - powinieneś podać parametr opisujący docelowy system. Być może WORDS_UNALIGNED_OK nie jest jedynym problemem tym spowodowanym. Ogólnie nie edytuje się configure, tylko przekazuje mu parametry.

https://www.youtube.com/watch?v=jofNR_WkoCE

18 Ostatnio edytowany przez geo650 (2010-07-05 18:43:10)

Fox napisał/a:

Prawdopodobnie wersja basic działa już poprawnie...
Czy w wersji SDL na pewno WORDS_UNALIGNED_OK jest taki, jak w działającej wersji basic?...

Zgadza się, wersja basic działa wzorowo. Po wywołaniu z opcją -basic zobaczyłem READY w telnecie.
Co do wersji SDL, to próbowałem jeszcze różnych opcji configure, m.in. wyłączenie dźwięku, veryslow, wyłączenie urządzeń R: itd. Bez zmian. Restart wydarza się cały czas w tym samym momencie - na pierwszym wywołaniu Atari800_Frame(), a właściwie INPUT_Frame() z input.c. Sprawdziłem też, że SDL działa prawidłowo, poprzez doklejenie na początku własnego krótkiego kodu wyświetlającego bitmapę na 5 sekund.
Zagłębiam się dalej. Parametr WORDS_UNALIGNED_OK wyłączam (jeszcze nie sprawdziłem, w jaki sposób wyłączyć to przez configure, ale tymczasem po edycji config.h robię make). Postaram się trochę wczytać w temat, choć to nie przychodzi łatwo.
Dzięki za pomoc.

EDIT: No i próbnie wywaliłem zawartość funkcji INPUT_Frame() przez wstawienie return na początku. I co ? Otrzymałem to co na załączonym obrazku! Nie ulega wątpliwości, że jesteśmy coraz bliżej celu.

http://img30.imageshack.us/img30/4066/selftestonle40b650t2w.jpg
Ciekawe jak będzie z wydajnością. Miganie napisu w selfteście jest raczej powolne, ale trzeba mieć też na uwadze, że tworzony jest log i to dosyć gęsty, bo również z funkcji GTIA. Klawiatura mi nie zadziałała, ale się nie dziwię. Telewizor musiałem wyłączyć telnetem, hehe. Pozdrowienia!

19

Nieźle! Może sypie się na odczycie joysticków w SDL? Emulator ma opcję -nojoystick.

geo650 napisał/a:

(jeszcze nie sprawdziłem, w jaki sposób wyłączyć to przez configure, ale tymczasem po edycji config.h robię make).

Spróbuj tak:

./configure --host=arm-SamyGO-linux-gnueabi --target=...

Prawdopodobnie Twoje zmiany w configure okażą się wtedy niepotrzebne.

https://www.youtube.com/watch?v=jofNR_WkoCE

20 Ostatnio edytowany przez geo650 (2010-07-05 23:39:58)

Przed chwilą udało mi się odegrać (co prawda w ślimaczym tempie ale zawsze) melodyjkę z SELF TESTu. Nie znając klawiszologii tego emulatora powciskałem chyba F3 jako SELECT i chyba F4 zrobił za START. Faktycznie wyciąłem obsługę joysticków w tej feralnej funkcji INPUT_Frame() a w dodatku usiłowałem powyłączać co się da. Już nie grzebię w configure. Ostatnie opcje jakie wpisywałem wyglądały tak:

./configure --host=arm --target=sdl \
--disable-unalignedwords \
--enable-pagedattrib \
--disable-eventrecording \
--disable-pbi_mio \
--disable-pbi_bb \
--disable-pbi_xld \
--disable-linuxjoystick \
--disable-rnetwork \
--disable-rserial \
LDFLAGS="-shared -fPIC"

Widząc Twoje podpowiedzi (teraz, po moich próbach) stwierdzam, że z pewnością nadal muszę trochę się podszkolić.
Obecnie wykonuję próby niejako "na brudno". Jak już będę się w tym poruszał w miarę swobodnie, na nowo rozpakuję kod źródłowy i zrobię porta ładnie i z opisem. Na pierwszą kulawą wersję do opublikowania powinno wystarczyć.
Nawet jeśli RiverRaidu nie da się uruchomić to i tak to już daleko zaszło. Teraz chciałbym sprawdzić jak uruchomić BASIC na starcie tak aby przebadać działanie klawiatury USB. Opcje wiersza poleceń nie działają chyba z tego XMLa od Content Library a z plikiem konfiguracyjnym jeszcze nie doszedłem do ładu. Niewykluczone też, że trzeba będzie dorobić jakiś kod obsługujący pilot telewizora aby przyciskiem EXIT lub RETURN można było bezpiecznie wyłączyć emulator. Jest zabawa!

21

Teraz chciałbym sprawdzić jak uruchomić BASIC na starcie tak aby przebadać działanie klawiatury USB.

w SELF TEST możesz zrobić test klawiatury tak samo jak "odegrałeś muzyczkę"

___
Press play on tape...

22

maw napisał/a:

w SELF TEST możesz zrobić test klawiatury tak samo jak "odegrałeś muzyczkę"

RACJA! Ale ze mnie baran, że zapomniałem o tym. To widocznie wynik późnej pory i zmęczenia ;) Ale BASIC i tak uruchomię, bo wtedy sprawdzę więcej rzeczy.

23

Dla przeciętnego atarowca ważniejsze, żeby działał joystick, niż klawiatura. W Atari800 jest klawiatura ekranowa - wybierasz przycisk najeżdżając na niego strzałkami.

https://www.youtube.com/watch?v=jofNR_WkoCE

24

Zgadza się. Postaram się zrobić tak aby działało jedno i drugie. Chwilowo jadę na przyciętej funkcji INPUT_Frame(). Klawisze liter i cyfr nie działają, natomiast pozostałe klawisze - owszem. Udało mi się uruchomić grę: RIVER RAID. A jakże! W niej po wciśnięciu START (F4) samolocik sam zaczyna lecieć i strzela, więc joystick też coś zmyśla. Ale to nic. Muszę się wczytać w opcje wywołania i kod źródłowy. Zlokalizowałem już parę ważnych rejonów.
Menu pod klawiszem F1 działa śpiewająco. I co ważne, po wyłączeniu logowania emulator zaczął działać z normalną prędkością, tj. jak włączam wskaźnik, to wskazuje 99-100% oryginalnego Atari. Dźwięk SDL nie jest zbyt dobrze obsługiwany, bo tnie i szarpie a także jest opóźniony: np. melodyjka z SELF TEST nie gra się płynnie, a "jąka się" i wybrzemiewa jeszcze po wyjściu do głównego menu. Ciągle słychać także okresowe pykanie z głośnika, coś jakby pętla bufora cyklicznie odtwarzanego była krzywo zamknięta. Regulacja siły głosu działa z poziomu pilota TV, ale to już zapewne zasługa wbudowanej obsługi SDL. Choć jeszcze mało zbadałem, to generalnie muszę powiedzieć, że emulator działa dosyć stabilnie.
Był problem z załadowaniem gry, bo katalogiem bieżącym był ten, w którym znajduje się telewizorowa aplikacja exeDSP (a jest to podkatalog read-only), ale polecenie chdir() w głównej funkcji rozwiązało problem i jest dostęp do całej przestrzeni plikowej.
Tempo narzuciłem sobie wysokie więc trochę się pobawię i dłubię dalej. Pozdrawiam!

25

geo650 napisał/a:

Dźwięk SDL nie jest zbyt dobrze obsługiwany, bo tnie i szarpie a także jest opóźniony: np. melodyjka z SELF TEST nie gra się płynnie, a "jąka się" i wybrzemiewa jeszcze po wyjściu do głównego menu. Ciągle słychać także okresowe pykanie z głośnika, coś jakby pętla bufora cyklicznie odtwarzanego była krzywo zamknięta.

Domyślam się dlaczego. Funkcja SDL_OpenAudio() pobiera w 1. parametrze _proponowany_ rozmiar bufora dźwięku, ale funkcja ta może ten rozmiar zaakceptować albo nie. W 2. parametrze zwraca ona rzeczywisty rozmiar bufora, który udało się uzyskać. W Atari800 ten 2. parametr jest ignorowany - bufor ma ustalony na sztywno rozmiar 1024 sampli. Zobacz atari_stl.c/SoundSetup(), wywołanie SDL_OpenAudio(&desired, &obtained).

Wydaje mi się, że SDL_OpenAudio zwraca rozmiar większy niż 1024 sample, a Atari800 to ignoruje i przy każdym  wywołaniu SoundCallback wypełnia tylko 1024 pierwsze sample bufora, i stąd pykanie.

A8CAS - narzędzie do 100% archiwizacji kaset Atari