ZX Spectrum > MUZYKA

Timer КР580ВИ53 jako generator dźwięku

(1/15) > >>

Gelip:
Czy komuś mówi coś nagłówek MESCA a raczej stopka umieszczona w kodzie programu dla systemu CP/M? Chcę wyciąć dane muzyczne z pewnego programu WW.COM (w załączniku). Muzyka odgrywana jest na 3-kanałowym syntezatorze dźwięku КР580ВИ53 (Intel 8253). Pewności co do danych muzycznych nie ma ale na 90% są to właśnie dane muzyczne :-). Temat poruszyłem również tutaj.

Chcę uzyskać coś takiego na komputerze "Bajt" który jest zgodny sprzętowo z "Bajt-01" jeśli chodzi o rozdzielczość ekranu i chip VI53 (również porty I/O). Obrazek już rozszyfrowałem :-), został mi tylko dźwięk.

pear:
Intel 8253 to nie syntezator tylko programowalny 3-kanałowy timer.
Do generowania muzyki dość oryginalne zastosowanie, bo możliwości ma takie jak 3-kanałowy beeper :)

Może to jednak jakiś inny układ, bo opis rejestrów się nie zgadza. Inna możliwość, to albo jest błąd rosyjskiej wikipedii, albo rosyjska wersja 8253 jest zupełnie niekompatybilna na poziomie rejestrów.

pear:
Dobra, doczytałem.
Rzeczywiście w Bajcie układ 8253 jest wykorzystany jako generator dźwięku. Nadal podtrzymuję, że to oryginalne zastosowanie.

W takim razie te czwórki wartości mogą być wartościami czasów dla tych 3 timerów (zwłaszcza, że czwarta wartość w czwórce to 0).
Częstotliwość zapisu do rejestrów wynika zapewne z pętli w programie (?)

Gelip:

--- Cytat: pear w 2013.06.04, 17:52:57 ---W takim razie te czwórki wartości mogą być wartościami czasów dla tych 3 timerów (zwłaszcza, że czwarta wartość w czwórce to 0).
Częstotliwość zapisu do rejestrów wynika zapewne z pętli w programie (?)

--- Koniec cytatu ---
Mógłbyś to rozwinąć bo mi wyszło iż trzecia wartość to określenie nuty w oktawie choć wartości na tej pozycji nie zgadzają się z wartościami z tabeli w tej instrukcji. Jakby te dane można było użyć w kodzie maszynowym w BASIC'u i uruchomić player przez RANDOMIZE USR tylko właśnie skąd wziąć player :-)
Może ktoś zna się na IDA i disassemblacji. Jak coś to w tym temacie jest baza danych IDA (idb) i wydobyty kod assemblera programu WW.COM.

pear:
Przeglądam kod. Na razie znalazłem taki kawałek:

--- Kod: ---; =============== S U B R O U T I N E =======================================


sub_80C: ; CODE XREF: sub_218+15Cp sub_218+162p ...
ld a, 36h ; '6'    ; wybór timera 0 w rejestrze sterującym
out (0EEh), a
ld c, 8Eh ; 'Ž'    ; ustawienie adresu portu rejestru timera 0
out (c), l             ; wysłanie do rejestru timera 0 wartości z L
out (c), h            ; i zaraz potem z H - dwa kolejne zapisy ładują 16-bitową wartość do licznika
ld hl, 150h       ; ustawienie licznika pętli

loc_819: ; CODE XREF: sub_80C:loc_819j
; sub_80C+12j
djnz $
dec hl
ld a, h
or l
jp nz, loc_819  ; i sama pętla opóźniająca
ld a, 3Ah ; ':'    ; zatrzymanie timera 0
out (0EEh), a
ret
; End of function sub_80C
--- Koniec kodu ---

Odwołanie do portu 0xEE jest jeszcze tylko w jednym miejscu i wygląda na generowanie stałego tonu.
Wychodzi na to, ze wykorzystany jest tylko jeden kanał, bo nie znalazłem żadnych innych odwołań poza tą jedną procedurą.
Z całej czwórki bajtów użyteczne zostają więc 2 środkowe (czasy dla liczników), nadające właściwe tony dla generatora fali prostokątnej.

Nie znalazłem też żadnej pętli, która z użyciem tej procedury odgrywałaby coś z pamięci.

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

Idź do wersji pełnej