siddump proces konwersji.
siddump proces konwersji.
Witam.
Parę tygodni temu zrobiłem sobie przenośny odtwarzacz SIDów (mikrokontroler avr wpisujący stany rejestrów w odpowiednim czasie do 8580). Chciałbym jednak ulepszyć swoje urządzenie, by nie trzeba było konwertować sida do postaci wartości rejestrów (bardzo pamięciochłonne) tylko by mikrokontroler w locie tłumaczył sobie dane. Szukałem na necie dosyć długo czegokolwiek o tym jak zbudowany jest kontener sid, jednak nigdzie nie ma nic więcej prócz opisanego nagłówka, a to co mnie interesuje to dane muzyczne.
Dochodzenie do tego algorytmu na podstawie źródła programu konwertującego siddump jest niestety nie na mój poziom. Jeżeli ktoś ma materiały, które mogłyby mi pomóc, bardzo proszę o ich podanie.
Parę tygodni temu zrobiłem sobie przenośny odtwarzacz SIDów (mikrokontroler avr wpisujący stany rejestrów w odpowiednim czasie do 8580). Chciałbym jednak ulepszyć swoje urządzenie, by nie trzeba było konwertować sida do postaci wartości rejestrów (bardzo pamięciochłonne) tylko by mikrokontroler w locie tłumaczył sobie dane. Szukałem na necie dosyć długo czegokolwiek o tym jak zbudowany jest kontener sid, jednak nigdzie nie ma nic więcej prócz opisanego nagłówka, a to co mnie interesuje to dane muzyczne.
Dochodzenie do tego algorytmu na podstawie źródła programu konwertującego siddump jest niestety nie na mój poziom. Jeżeli ktoś ma materiały, które mogłyby mi pomóc, bardzo proszę o ich podanie.
Trochę nie ten dział, bo twoje pytanie dotyczy programowania, a nie budowy sprzętu jako-tako.
Co do twojego pytania, to nie wydaje mi sie że firma Commodore stworzyła coś innego niż przyjęty standard zapisu danych w pliku. Tzn. nagłówek określa właśnie jak należy interpretować dane znajdujące się za nim. Czyli ile wykorzystano kanałów, format zapisu, itp. O szczegóły musisz jednak pytać kolegów koderów, szybciej i klarownie zaiste ci odpowiedzą.
Co do twojego pytania, to nie wydaje mi sie że firma Commodore stworzyła coś innego niż przyjęty standard zapisu danych w pliku. Tzn. nagłówek określa właśnie jak należy interpretować dane znajdujące się za nim. Czyli ile wykorzystano kanałów, format zapisu, itp. O szczegóły musisz jednak pytać kolegów koderów, szybciej i klarownie zaiste ci odpowiedzą.
A szóstego dnia Bóg stworzył człowieka ... Aby mógł się napić.
Jacku, wydaje mi się że raczej na pewno się mylisz.
AFAIK w pliku .sid jest po prostu zrzut zaka jako pliku wykonalnego w ML. Każdy odtwarzacz .sid'ów emuluje wykonanie kodu z tego pliku i jego wpływ na rejestry SIDa.
Jeżeli się mylę, to niech mnie ktoś skoryguje
AFAIK w pliku .sid jest po prostu zrzut zaka jako pliku wykonalnego w ML. Każdy odtwarzacz .sid'ów emuluje wykonanie kodu z tego pliku i jego wpływ na rejestry SIDa.
Jeżeli się mylę, to niech mnie ktoś skoryguje
Arise - keeping your eyes wide open since 1991.
http://www.swinkels.tvtom.pl/swinsid/ - hardware sid player made in poland
http://kevtris.org/Projects/sid/sidman.html
plik SID to naglowek + RAW DATA - czyli fragment ramu
format sid:
http://cpansearch.perl.org/src/LALA/Aud ... format.txt
btw dla UC najlepszym wyjsciem bylo by uzycie TinySID
http://www.informatik.uni-frankfurt.de/ ... inySid.htm
szkoda tylko ze autor nie udostepnia zrodel
http://kevtris.org/Projects/sid/sidman.html
plik SID to naglowek + RAW DATA - czyli fragment ramu
format sid:
http://cpansearch.perl.org/src/LALA/Aud ... format.txt
btw dla UC najlepszym wyjsciem bylo by uzycie TinySID
http://www.informatik.uni-frankfurt.de/ ... inySid.htm
szkoda tylko ze autor nie udostepnia zrodel
Plik .SID to czyste dane z C-64+nagłówek zawierający info o zaku, to wszystko jest opisane w dokumentacji.
Muzyczka na c64 czy w pliku (kontenerze:shock:) to program wykonywalny dla C-64.
Czyste dane to muzyczka czyli kod playera + dane do SIDa w kodzie c-64,
żeby takie coś zagrało kod musi zostać wykonany przez procka w C-64.
Player to program który jest krok po kroku wykonywany przez procesor
w C-64 i program ten pobiera dane z pamięci C-64 i wrzuca do rejestrów SIDa.
Nie wiem jak dziś ale kiedyś w SIDPlayu trzeba było czasem ustawiać coś takiego jak środowisko pracy SIDPlaya, tzn. jaki stan pamięci dla C-64 ma emulować aby poprawnie pobierało dane z pamięci np. zak od $a000-$c000
który pokrywał się z interpreterem Basica nie mógł być poprawnie odtwarzany jeżeli wewnętrzny player w zaku nie ustawiał $01 na #$36 itp.itd.
W dużym uproszczeniu player na pc = emulator procesora+obsługi pamięci+
+przerwań CIA-IRQ, VIC-IRQ, CIA-NMI, no i SID, ale mogę się mylić. Nie znam się.
Muzyczka na c64 czy w pliku (kontenerze:shock:) to program wykonywalny dla C-64.
Czyste dane to muzyczka czyli kod playera + dane do SIDa w kodzie c-64,
żeby takie coś zagrało kod musi zostać wykonany przez procka w C-64.
Player to program który jest krok po kroku wykonywany przez procesor
w C-64 i program ten pobiera dane z pamięci C-64 i wrzuca do rejestrów SIDa.
Nie wiem jak dziś ale kiedyś w SIDPlayu trzeba było czasem ustawiać coś takiego jak środowisko pracy SIDPlaya, tzn. jaki stan pamięci dla C-64 ma emulować aby poprawnie pobierało dane z pamięci np. zak od $a000-$c000
który pokrywał się z interpreterem Basica nie mógł być poprawnie odtwarzany jeżeli wewnętrzny player w zaku nie ustawiał $01 na #$36 itp.itd.
W dużym uproszczeniu player na pc = emulator procesora+obsługi pamięci+
+przerwań CIA-IRQ, VIC-IRQ, CIA-NMI, no i SID, ale mogę się mylić. Nie znam się.
Tutaj jest fajny opis packed SID-playera na multikontrolerze (8in1) Propeller (f-my Parallax).
P8X32A PROPELLER - datasheet tego ciekawego mikrokontrolera, który zawiera wewnątrz osiem (!) procesorów.
Niestety w młodości "słoń nadepnął mi na ucho" więc już więcej się nie wtrącam.
P8X32A PROPELLER - datasheet tego ciekawego mikrokontrolera, który zawiera wewnątrz osiem (!) procesorów.
Niestety w młodości "słoń nadepnął mi na ucho" więc już więcej się nie wtrącam.
Ostatnio zmieniony 15 sie 2010, 22:10 przez suchy, łącznie zmieniany 4 razy.
C64PLC
http://roboterclub-freiburg.de/atmega_s ... gaSID.html - takie cos jeszcze jest godne podejrzenia
Ok. Od paru dni planuję implementację emulatora 6502 do atmegi...
Pierwsza część kodu SIDa jest całkiem realna do emulowania. Nie rozumiem jeszcze dlaczego SID nadpisuje samego siebie i czemu to służy.
Czy potrzeba mi zdumpować jeszcze jakieś obszary pamięci, oprócz pamięci podręcznej na SIDa i mapowania rejestrów 8580, by program realizujący miał do tego dostęp?
Pierwsza część kodu SIDa jest całkiem realna do emulowania. Nie rozumiem jeszcze dlaczego SID nadpisuje samego siebie i czemu to służy.
Czy potrzeba mi zdumpować jeszcze jakieś obszary pamięci, oprócz pamięci podręcznej na SIDa i mapowania rejestrów 8580, by program realizujący miał do tego dostęp?
jaka pierwsza czesc kodu? ogolnie bardzo chaotycznie to napsiales albo bredzisz to ze prrgoam (sid) wpisuje dane w obszar w ktorym przebywa jest normlane bo tu przeciez nie ma rozdzialu (nojman) tak jak w atemdze na ram (dane "dynamiczne") i program we flashu (ew dane statyczne)
wiekszosc kawalkow bedzie odgrywana jesli bedzie TYLKO emulowany cpu i 8580 + timer 50hz symulujacy przerwanie. czesc mzoe wymagac tez obecnosci romu a czesc WYMAGA emulowania timera bo nie opieraja sie przerwaniu VICa.
btw WTF jaka pamiec podreczna?
wiekszosc kawalkow bedzie odgrywana jesli bedzie TYLKO emulowany cpu i 8580 + timer 50hz symulujacy przerwanie. czesc mzoe wymagac tez obecnosci romu a czesc WYMAGA emulowania timera bo nie opieraja sie przerwaniu VICa.
btw WTF jaka pamiec podreczna?
Miałem na myśli to, że cały program musi siedzieć w RAMie, nie uruchomię sida z pamięci stałej.
Aha, czyli:
- zaemulować opcody z 6502
- zmapować adresy $D4xx jako rejestry 8580
- zainicjować program z $1000
i co 50Hz puszczać procedurę z adresu $1003 i będzie grać :]
jeżeli coś pominąłem, bardzo proszę o poprawienie.
Aha, czyli:
- zaemulować opcody z 6502
- zmapować adresy $D4xx jako rejestry 8580
- zainicjować program z $1000
i co 50Hz puszczać procedurę z adresu $1003 i będzie grać :]
jeżeli coś pominąłem, bardzo proszę o poprawienie.
-dolaczasz 64k sramu do uC (choc pobawic sie mozna juz przy 8k zakladajac ze chcesz odgrywac tylko kawalki ktore siedza np 1000-2ffff w ramie)
-wykonujesz playera na emulowanym 6502 50 razy na sekunde (i to niekoniecznie $1003 - wlasciwy adres znajdziesz w naglowku sida)
dwie opcje:
-zczytujesz to co wyplul po kazdym wywoalniu player spod $d400-$d41f
wpisujesz te dane do rejestrow sida
lub
-po wykryciu jakiegokolwiek wpisu w adresy sida odrazu wpisywac do scalaka (pierwsza mniej procka zre ale moga wystapic roznice w odgrywaniu muzy wzgledem prawdziwego c64, druga nie bedzie miala tego rpoblemu ale wiecej cpu zre)
dopiero atmega128 ma wystarczajaco duzo ramu (4k) zeby myslec o wykonywaniu kodu z jej wewnetrznego ramu zamiast ext sram, ale wtedy wybor muzyki jest juz dosc mocno ograniczony.
-wykonujesz playera na emulowanym 6502 50 razy na sekunde (i to niekoniecznie $1003 - wlasciwy adres znajdziesz w naglowku sida)
dwie opcje:
-zczytujesz to co wyplul po kazdym wywoalniu player spod $d400-$d41f
wpisujesz te dane do rejestrow sida
lub
-po wykryciu jakiegokolwiek wpisu w adresy sida odrazu wpisywac do scalaka (pierwsza mniej procka zre ale moga wystapic roznice w odgrywaniu muzy wzgledem prawdziwego c64, druga nie bedzie miala tego rpoblemu ale wiecej cpu zre)
dopiero atmega128 ma wystarczajaco duzo ramu (4k) zeby myslec o wykonywaniu kodu z jej wewnetrznego ramu zamiast ext sram, ale wtedy wybor muzyki jest juz dosc mocno ograniczony.
Jak kolega chce się bawić na AVR to zestaw AVT-3505 ma na pokładzie ATMege 162 8MHz(16KB Flash + 1KB Internal RAM), 32KB zewnętrznego RAM, złącze rozszerzeń (magistrala CPU) bezproblemowo podepniesz na nim SIDa, RS232 i dodatkowo płytkę z 2 przyciskową klawiaturą wyświetlaczem LED 4 cyfry i możliwością wpięcia wyświetlacza LCD 16 znaków na 2 wiersze. Jak by co mogę wrzucić fotkę bo mam ten zestaw.
A szóstego dnia Bóg stworzył człowieka ... Aby mógł się napić.
Jeszcze jedno, mam nadzieję ostatnie, pytanie.
Jestem w trakcie pisania emulatora 6502... i zastanawiam się czy konieczne jest emulowanie wszystkich instrukcji. na pewno wykluczam te związane z przerwaniami i adresowaniem pośrednim (za wyjątkiem strony zerowej).
Czy jest może jakiś spis tych, które trzeba emulować, a które niekoniecznie w emulatorze zajmującym się jedynie sidami?
Jestem w trakcie pisania emulatora 6502... i zastanawiam się czy konieczne jest emulowanie wszystkich instrukcji. na pewno wykluczam te związane z przerwaniami i adresowaniem pośrednim (za wyjątkiem strony zerowej).
Czy jest może jakiś spis tych, które trzeba emulować, a które niekoniecznie w emulatorze zajmującym się jedynie sidami?