siddump proces konwersji.

Tutaj możemy porozmawiać o sprzęcie i modyfikacjach C64.
Wiadomość
Autor
aldarn
Posty: 4
Rejestracja: 14 sie 2010, 20:54

siddump proces konwersji.

#1 Post autor: aldarn »

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.

Jacek31
Posty: 230
Rejestracja: 02 maja 2009, 21:33

#2 Post autor: Jacek31 »

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ą. :wink:
A szóstego dnia Bóg stworzył człowieka ... Aby mógł się napić.

Awatar użytkownika
wackee
Posty: 1609
Rejestracja: 05 paź 2008, 23:05
Grupa: Arise
Kontakt:

#3 Post autor: wackee »

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 :)
Arise - keeping your eyes wide open since 1991.

k.

#4 Post autor: k. »

podejrzewam że jeszcze musi być częstotliwość odtwarzania. czy 1x czy 12x na ramkę.

Awatar użytkownika
Raf
Posty: 584
Rejestracja: 14 wrz 2008, 23:30
Grupa: Vulture Design

#5 Post autor: Raf »

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 ;)

Jacek31
Posty: 230
Rejestracja: 02 maja 2009, 21:33

#6 Post autor: Jacek31 »

wackee :arrow: czyli jak dobrze cię zrozumiałem to odtwarzacz SIDów to nic innego jak emulator 6502 (no chyba że ktoś dorwie mikrokomputer z rdzeniem 6502), który po prostu wykonuje program zawarty w pliku SIDa :?:
A szóstego dnia Bóg stworzył człowieka ... Aby mógł się napić.

fenek
Posty: 95
Rejestracja: 15 wrz 2008, 20:43
Grupa: Arise

#7 Post autor: fenek »

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ę.

Awatar użytkownika
Raf
Posty: 584
Rejestracja: 14 wrz 2008, 23:30
Grupa: Vulture Design

#8 Post autor: Raf »

nio to czym Fenek pisze to prawda ;) przy czym te srodowiska juz takiej roli nie graja przy nowszym formacie (v2ng - jest to juz wpisane w pliku), warto tez zobaczyc player Swinkelsa.

suchy
Posty: 282
Rejestracja: 21 paź 2009, 16:16

#9 Post autor: suchy »

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" :wink: więc już więcej się nie wtrącam.
Ostatnio zmieniony 15 sie 2010, 22:10 przez suchy, łącznie zmieniany 4 razy.
C64PLC

Awatar użytkownika
Raf
Posty: 584
Rejestracja: 14 wrz 2008, 23:30
Grupa: Vulture Design

#10 Post autor: Raf »

http://roboterclub-freiburg.de/atmega_s ... gaSID.html - takie cos jeszcze jest godne podejrzenia ;)

aldarn
Posty: 4
Rejestracja: 14 sie 2010, 20:54

#11 Post autor: aldarn »

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?

Awatar użytkownika
Raf
Posty: 584
Rejestracja: 14 wrz 2008, 23:30
Grupa: Vulture Design

#12 Post autor: Raf »

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?

aldarn
Posty: 4
Rejestracja: 14 sie 2010, 20:54

#13 Post autor: aldarn »

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.

Awatar użytkownika
Raf
Posty: 584
Rejestracja: 14 wrz 2008, 23:30
Grupa: Vulture Design

#14 Post autor: Raf »

-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.

Jacek31
Posty: 230
Rejestracja: 02 maja 2009, 21:33

#15 Post autor: Jacek31 »

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ć.

aldarn
Posty: 4
Rejestracja: 14 sie 2010, 20:54

#16 Post autor: aldarn »

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?

Awatar użytkownika
Raf
Posty: 584
Rejestracja: 14 wrz 2008, 23:30
Grupa: Vulture Design

#17 Post autor: Raf »

w sieci sa pelne implementacje 6502 dla avr - mozesz skorzystac z gotowca.

logicznym jest, ze skoro jest to fragment pamieci to moze sie tam pojawic kazda instrukcja.

k.

#18 Post autor: k. »

jak się zrobi sprytnie implementacje to nie ma znaczenia ilość emulowanych opkodów. Ja za wzór sobie biorę zawsze c64TTL;)

ODPOWIEDZ