Autor Wątek: Timer КР580ВИ53 jako generator dźwięku  (Przeczytany 62744 razy)

Gelip

  • *****
  • Wiadomości: 765
    • Sysprep WinXP SP2 64-bit for pure UEFI with ACPI, AHCI, NVMe, USB 3.x
Timer КР580ВИ53 jako generator dźwięku
« dnia: 2013.06.04, 17:01:19 »
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.
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Timer КР580ВИ53 jako generator dźwięku
« Odpowiedź #1 dnia: 2013.06.04, 17:38:17 »
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.
ZX/Enterprise/CPC/Robotron/C128D

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Timer КР580ВИ53 jako generator dźwięku
« Odpowiedź #2 dnia: 2013.06.04, 17:52:57 »
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 (?)
ZX/Enterprise/CPC/Robotron/C128D

Gelip

  • *****
  • Wiadomości: 765
    • Sysprep WinXP SP2 64-bit for pure UEFI with ACPI, AHCI, NVMe, USB 3.x
Odp: Timer КР580ВИ53 jako generator dźwięku
« Odpowiedź #3 dnia: 2013.06.04, 18:07:03 »
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 (?)
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.
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Timer КР580ВИ53 jako generator dźwięku
« Odpowiedź #4 dnia: 2013.06.04, 18:34:08 »
Przeglądam kod. Na razie znalazłem taki kawałek:
; =============== 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

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.
« Ostatnia zmiana: 2013.06.04, 18:41:05 wysłana przez pear »
ZX/Enterprise/CPC/Robotron/C128D

Gelip

  • *****
  • Wiadomości: 765
    • Sysprep WinXP SP2 64-bit for pure UEFI with ACPI, AHCI, NVMe, USB 3.x
Odp: Timer КР580ВИ53 jako generator dźwięku
« Odpowiedź #5 dnia: 2013.06.04, 18:48:17 »
Widzę, że dobry jesteś w te klocki z kodem :-). Faktycznie port #EE to port I/O timera którego używa "Bajt"
Cytuj
Wychodzi na to, ze wykorzystany jest tylko jeden kanał, bo nie znalazłem żadnych innych odwołań poza tą jedną procedurą.
Jeśli możliwe jest aby kilka dźwięków (nut) brzmiało jednocześnie przy użyciu tylko jednego kanału to pewnie masz rację. Jeśli wsłuchać się w demo to raczej kilka dźwięków brzmi jednocześnie :-) - tak sądzę.
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Timer КР580ВИ53 jako generator dźwięku
« Odpowiedź #6 dnia: 2013.06.04, 18:54:37 »
Widzę, że dobry jesteś w te klocki z kodem :-). Faktycznie port #EE to port I/O timera którego używa "Bajt"
Jeśli możliwe jest aby kilka dźwięków (nut) brzmiało jednocześnie przy użyciu tylko jednego kanału to pewnie masz rację. Jeśli wsłuchać się w demo to raczej kilka dźwięków brzmi jednocześnie :-) - tak sądzę.
Jeszcze całkiem nie zardzewiałem ;)

Jest możliwe uzyskanie złudzenia kilku dźwięków jednocześnie na jednym kanale.
Przynajmniej na zwykłym beeperze z ZX się da, to tym bardziej na sprzętowym powinno się dać taki efekt uzyskać, ale na muzyce to ja się nie znam :)

Nie wiem jak dokładnie jest zbudowany Bajt. Dźwięk jest generowany tylko przez układ 8253, czy jest oprócz tego odpowiednik jednobitowego beepera ?
ZX/Enterprise/CPC/Robotron/C128D

Gelip

  • *****
  • Wiadomości: 765
    • Sysprep WinXP SP2 64-bit for pure UEFI with ACPI, AHCI, NVMe, USB 3.x
Odp: Timer КР580ВИ53 jako generator dźwięku
« Odpowiedź #7 dnia: 2013.06.04, 19:04:18 »
Nie znalazłem też żadnej pętli, która z użyciem tej procedury odgrywałaby coś z pamięci.
Chcesz powiedzieć iż procedura ta nie odczytuje danych np. tych niby muzycznych z offsetu 1FB5 ?
Nie wiem jak dokładnie jest zbudowany Bajt. Dźwięk jest generowany tylko przez układ 8253, czy jest oprócz tego odpowiednik jednobitowego beepera ?
W komputerach "Bajt" i "Bajt-01" jest też oczywiście odpowiednik BEEP'era ZX Spectrum.
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Timer КР580ВИ53 jako generator dźwięku
« Odpowiedź #8 dnia: 2013.06.04, 19:20:35 »
Chcesz powiedzieć iż procedura ta nie odczytuje danych np. tych niby muzycznych z offsetu 1FB5 ?
Z tego co przeszukałem w dostępnym zdebugowanym źródle, to niestety nie ma nic co by czytało serię danych z pamięci i posyłało na 8253.

W komputerach "Bajt" i "Bajt-01" jest też oczywiście odpowiednik BEEP'era ZX Spectrum.
Sprzętowo może być generowany jeden dźwięk, a na beeperze (na przerwaniach) drugi ?
ZX/Enterprise/CPC/Robotron/C128D

Gelip

  • *****
  • Wiadomości: 765
    • Sysprep WinXP SP2 64-bit for pure UEFI with ACPI, AHCI, NVMe, USB 3.x
Odp: Timer КР580ВИ53 jako generator dźwięku
« Odpowiedź #9 dnia: 2013.06.06, 13:05:29 »
Przyjrzałem się jeszcze raz, dokładniej danym w offsecie 1FB5. Okazuje się, wartość na 4 pozycji też jest ważna i inna - nie tylko 00 jak wstępnie podałem. Wartość ta jest stała dla kilku kolejnych danych.
Chip 8253 jest używany w "Bajcie" w trybie 3 (Mode 3 - Square Wave Generator)
Teraz zapoznaje się z tym i faktycznie dobrze wyłuskałeś kod z assemblera. W linku w sekcji Mode 3 Square Wave Generator jest instrukcja assemblera podobna do tej:
ld a, 36h ; '6'    ; wybór timera 0 w rejestrze sterującym
Komputer Sharp MZ-700 z CPU Z80 również używa chipu 8253 jako generator dźwięku w trybie 3. Na stronie www.sharpmz.org w sekcji MZ-700 jest bardzo dokładnie opisane jak generuje dźwięk :-) co może być pomocne w zrozumieniu działania chipu również odnośnie "Bajta" ;-)
« Ostatnia zmiana: 2013.06.06, 13:23:35 wysłana przez Gelip »
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Timer КР580ВИ53 jako generator dźwięku
« Odpowiedź #10 dnia: 2013.06.06, 17:46:59 »
Różnica między Sharpem a Bajtem jest według tego opisu z linku tylko taka, że układ 8253 jest aktywowany innym sygnałem sterującym procesora.
W Sharp MZ-700 wygląda, że jest to MREQ i wtedy rejestry timera są w obszarze pamięci, a odwołania są poprzez instrukcje LD.
W Bajt odpowiednio będzie to sygnał IORQ i rejestry timera dostępne są przez instrukcje OUT/IN.
ZX/Enterprise/CPC/Robotron/C128D

Gelip

  • *****
  • Wiadomości: 765
    • Sysprep WinXP SP2 64-bit for pure UEFI with ACPI, AHCI, NVMe, USB 3.x
Odp: Timer КР580ВИ53 jako generator dźwięku
« Odpowiedź #11 dnia: 2013.06.06, 18:14:37 »
Żebym wiedział jak zinterpretować te dane to bym sobie nawet ręcznie przerobił tę muzyczkę w BASIC'u za pomocą komend OUT ;-)
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Timer КР580ВИ53 jako generator dźwięku
« Odpowiedź #12 dnia: 2013.06.06, 18:44:02 »
Te dane - jeśli rzeczywiście jest to zapis zawierający muzykę - można spróbować zinterpretować, ale do tego potrzebny byłby schemat Bajta.
Jeśli te dane dotyczą muzyki, to są to wartości dzielników częstotliwości dla timera 0. Żeby wiedzieć jaka będzie wynikowa częstotliwość (ton) trzeba wiedzieć co jest przypięte do wejścia CLK timera 0 (sygnał zegarowy o jakiej częstotliwości ?).
Nie mam schematu Bajta, więc nie wiem jak to jest dokładnie zorganizowane, ale gdybym miał, to mogę pokombinować.

PS. Znajomy ma Bajta takiego jak na tym zdjęciu (to taki ?). Czekam aż się zdecyduje go pozbyć, bo nie bardzo wie co z nim zrobić  :D

ZX/Enterprise/CPC/Robotron/C128D

steev

  • *****
  • Wiadomości: 1362
  • Miejsce pobytu:
    inode 42
Odp: Timer КР580ВИ53 jako generator dźwięku
« Odpowiedź #13 dnia: 2013.06.06, 18:56:01 »
Machines should work. People should think.

Gelip

  • *****
  • Wiadomości: 765
    • Sysprep WinXP SP2 64-bit for pure UEFI with ACPI, AHCI, NVMe, USB 3.x
Odp: Timer КР580ВИ53 jako generator dźwięku
« Odpowiedź #14 dnia: 2013.06.06, 19:00:56 »
Kolego - wywal to zdjęcie z forum bo tylko zaśmieca - to nie ten "Bajt" :-). Zechciej rzucić okiem na mój awatar. Mój "Bajt" posiada własną website na której jest wszystko włącznie ze schematem w wysokiej jakości w PDF wykonanym (prawdopodobnie w AutoCAD) przez Prusak'a  - właściciela strony.
Co do twojego pytania to, VI53 jest oznaczony na schemacie jako DD68 - z prawej strony procesora Z80.

P.S. Dowiedziałem się właśnie co to za melodia :-). Okazuje się iż to znana stara francuska piosenka z 1935 roku pod tytułem: Tout va très bien madame la marquise
"Byte" Personal Computer
Брестское ПО средств вычислительной техники