kategorie: ANSI C, Asembler
[#1] ADPCM w C i w asm
Witam
Próbuję użyć odgrywania muzyki ADPCM w moim kodzie w C.
Wziąłem kod od Kalms'a (https://github.com/Kalmalyzer/adpcm-68k) który fajnie, jako standalone, się kompiluje i uruchamia, i gra to co ma grać.
Do pisania w C używam rozszerzenie GCC od Bartmana/Abyss (dla VSCode) chciałem ten kod Kalmsa użyć w C. Zrobiłem w zasadzie to co w przykładzie Kalms'a tyle, że w C. Pod debuggerem widzę, że wszystkie procedury asm kompilują się i linkują jak należy. muzyka w formacie .adpcm z przykładu kalms'a jest w pamięci ale w programie nic nie gra. Muzyka w formacie jest (powinna?) w Fast RAM.

Więc pytania:
1. Raczej robię coś źle, ale co? Może są jakieś wymagania/ograniczenia jak wołać tę procedurę kalms'a w przerwaniach?
2. może trzeba jakoś specyficznie te przerwania ustawić i to z domyślnego przykłady (template'a) w C jesr błędne? To pytanie raczej do tych co widzieli template w VSCode.
2. jak w ogóle zacząć szukać przyczyny że nie gra? Jak diagnozować co się dzieje? jakiekolwiek hinty będą pomocne.
3. może ktoś ma gotowca w C albo przerabiał tę procedurę od Kalmsa?

Z góry dzięki za wszelkie podpowiedzi.
[#2] Re: ADPCM w C i w asm

@c64portal, post #1

Format pliku wav prawilny? IMA ADPCM 22kHz?
[#3] Re: ADPCM w C i w asm

@Jazzcat, post #2

Tak.
w przykładowym kodzie od Kalmsa i mój plik z muzyką i jego pliki grają bez problemu.
[#4] Re: ADPCM w C i w asm

@c64portal, post #1

A VBR masz ogarnięty u siebie ?
[#5] Re: ADPCM w C i w asm

@asman, post #4

A VBR masz ogarnięty u siebie ?

tak.
przerwanie jest wykonywane bo robię w nim całą masę innych rzeczy, które działają.
chyba że potrzebuję VBR jeszcze do czegoś?

tak na marginesie: template kodu od Bartmana przewiduje takie rzeczy i ma wbudowane.
[#6] Re: ADPCM w C i w asm

@c64portal, post #5

To jeszcze DMA Audio musisz sprawdzić, ja nie ograniałem jak to działa, sprawdź pod emu jak jest ustawione i jak Ty masz ustawione.
[#7] Re: ADPCM w C i w asm

@c64portal, post #1

Jesli ten player dziala ok, to mozesz go uzyc, jak chcesz.

link

Zrodla sa na stronie WT.
Ja osobiscie nie lubilem nigdy zbyt profesjonalnych zrodel.
[#8] Re: ADPCM w C i w asm

@Don_Adan, post #7

Wygląda na to, że ogarnąłem temat, co mnie bardzo cieszy. :)
Dla zainteresowanych i dla potomności:
Problemem było to, że używałem kodu Kalms'a który był w całości w assemblerze tzn miał np definicje sekcji BSS albo co ważne w tym przypadku BSS_C czyli obszar pamięci w CHIPie. Był tam trzymany bufor na odgrywany właśnie fragment sampla adpcm.
Całość kompilowała się i linkowała bez zgłaszania błędów ale te zdefiniowane sekcje BSS_C przepadały gdzieś podczas linkowania i linker wstawiał jakieś adresy od czapy np w FAST Ramie a to jak wiadomo nie jest miejsce na odgrywanie sampli ;)
Tak czy siak musiałem lekko przerobić kod Kalmsa w asm a w moim programem w C alokować pamięć i przekazywać adres zaalokowanego CHIPu na bufor samplowy do assemblera.
I zadziałało.

Jak tak pomyśleć to w sumie to raczej oczywiste że linker nie będzie pilnował tych sekcji BSS czy DATA ale doszedłem do tego po ponad tygodniu debugowania.
Swoją drogą debugowanie takiego kodu to masakra więc jak macie jakieś ciekawe sposoby na debugowanie to chętnie poczytam.
4
[#9] Re: ADPCM w C i w asm

@c64portal, post #8

Tak, nie uzywaj linkerow to jest ZUO.
A jezeli starasz sie odegrac sampla w fascie zamiast w chipie to na Amidze slychac dosc charakterystyczne trzaski.
Pod emulatorem to nie wiem.
Czyli uzywanie uszow do debugowania dzwiekow.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem