forum speccy.pl

ZX Spectrum => HARDWARE => Wątek zaczęty przez: KWF w 2017.06.16, 23:53:06

Tytuł: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.16, 23:53:06
Skończyły się mi AY-ki, a w pudełku poniewierało się jedno Arduino oraz wolna ATmega8. Zamawiałem AY-ki z różnych źródeł, ale zawsze było czekanie, albo sprzedawca opóźniał, albo nawet odwoływał wysyłkę. Do tego projektu natchnął mnie @Skinner, wspominając przy okazji jakiejś rozmowy o fejsie z AYkiem, że jest emulator na ATmedze, wymieniliśmy kilka wiadomości w tej sprawie i od pomyślu do prototypu minęły prawie 2 miesiące.

Ad rem, cały emulator jest rosyjskim pomysłem, moim wkładem jest jedynie płytka, aby zamontować go zamiast oryginalnego AY-ka w trzewiach Spectrum. Od razu zaznaczę, że emulator nie emuluje portów I/O, a jedynie część odpowiedzialną za generację dźwięku. Emulator w tym stanie nie nadaje się jako zamiennik AY-ka w Toastracku, +2 czy +3, ale można go wykorzystać w klonach tj. JS128K, HQ128K, ZX Nuvo czy częściowo w Chromie (o ile nie korzysta się z porów I/O). Sama płytka jest wymiarów niewiele większych niż AY-3-8912, ma wyprowadzone złączę ICSP, aby można przeprogramować ATmegę, bez wyrywania jej z płytki.

(http://fatla.eu/pub/ZXSpeccy/AYEmul/AY-ATmega8.png)

Na chwilę obecną mam działający prototyp z zegarem 20MHz oraz wgranym 3-kanałowym emulatorem z zegarem 1.75MHz. Pierwsze testy w Chromie poszły dość dobrze, poza tym że dwa połączenia musiałem wykonać kynarem.

Płytka prototypu w Chromie wygląda tak:

(http://fatla.eu/pub/ZXSpeccy/AYEmul/AY-ATmega8_prot_01.jpg)

Zostały mi dodatkowe dwie płytki, czas rozpędzić ATmegę do 27-32MHz i zobaczyć co to cudo potrafi. Tym razem ATmege wlutuję prosto w płytkę i dam niższy kondensator, aby nie budować wieży Babel.

Docelowo w planach jest wersja  SMD o wymiarach, jak chip AY.

Jeżeli ktoś szuka więcej informacji o emulatorze, wszystko możne znaleźć na http://www.avray.ru (http://www.avray.ru).

Jakby ktoś polecił jakieś demo w którym AY poci się i wchodzi na wyżyny swoich możliwości, będę zobowiązany.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: Maryjan w 2017.06.17, 00:07:36
Że tak zapytam, taką jedną płytkę to można u Ciebie nabyć ?
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.17, 00:09:46
Tylko gotowca, po kosztach komponentów na chwilę obecną. Chcesz tę "kynarową" czy poczekasz na finalną?
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: Maryjan w 2017.06.17, 00:12:09
Jak dla mnie, może być i kynarowana.
Nawet w wersji KIT :) to się zlutuje.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.17, 00:15:55
Dwie mam już w pełni zlutowane (20 i 24MHz), trzecia czeka na kwarc 27MHz. Będziesz "beta testerem" :D
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: zaxon w 2017.06.17, 00:17:13
Nie nie nadaje sie, toto gra jak gra, a gra jak dziurawe wiadro. Trzeba chyba nie miec sluchu za grosz zeby tego uzywac.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: Maryjan w 2017.06.17, 00:21:21
Ale to jest ciekawostka.

Zawsze można sobie porównać dźwięki z oryginalnego AY-ka i z takiego "emulatora" w ramach testów muzycznych.
Oby nie zabrakło w Chinach AY-ków, puki my żyjemy :)

Jak to ruski "wynalazek" to przed odsłuchem trzeba coś "łyknąć", to może wtedy tony się złagodzą a harmoniczne wyprostują  :P
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: trojacek w 2017.06.17, 00:29:09
Prędko nie zabraknie, bo AY robiło 6 firm do wykorzystania nie tylko w komputerach, ale też w masowej produkcji automatów do gier i prostych instrumentów. Tylko nie wzięli pod uwagę, jak elektronika się szybko rozwinie i jak dzisiejszy hit stanie się szybko starociem.
A jak gra ten emulator można posłuchać na stronie autora. Gra bardzo źle - Zaxon ma rację. Szkoda zachodu, ale kto zabroni hobbyście lub bogatemu.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: Maryjan w 2017.06.17, 00:31:40
No dobra, to ja jestem ten "hobbysta" :)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: trojacek w 2017.06.17, 00:32:25
W sumie my tu wszyscy jesteśmy hobbystami...:D
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: Maryjan w 2017.06.17, 00:34:39
Zasadniczo  :D
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: zaxon w 2017.06.17, 00:38:31
Yny i hobby to hobby ale poziom jakis trzeba jednak trzymac,  to na atmedze zrobilem juz pare lat temu, posluchalem , otrzasnalem sie z wrazenia i szybko zamowilem kolejne 30 prawdziwych AY ;)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: Maryjan w 2017.06.17, 00:44:33
Czy jak chcemy np. zakończyć jakieś party, puszczamy w ruch emulator AY-ka na Atmega :)
Ew. chcemy się szybko otrząsnąć z sennego stuporu.

Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.17, 00:46:59
Sorry, ale czysto to gra Ludovico Einaudi na fortepianie na żywo, a nie 8-bitowy "piździk" z 3 kanałami z głośnika TV :P
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: zaxon w 2017.06.17, 00:54:50
Klaud,hmm.. sa ludzie ktorzy graja na czystych AY , tych "pizdzikach" , ot przykład ;) , https://www.youtube.com/watch?v=FOx9InNtU3A, 
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.17, 01:04:16
Nie mówię, że nie, ale zauważ, że są też tacy co wolą analogowe instrumenty z ich dobrodziejstwem inwentarza. Mnie osobiście "nie jara" muzyka z tego filmiku. Chwała im za twórczość, mają swoich odbiorców, niszę. Z całym szacunkiem, ale Tangerine Dream, Kraftwerk czy Klaus Schulze to nie jest, moje skromne zdanie.

De gustibus non est disputandum.

Hobby to hobby, lepsze lub gorsze pomysły, swoje realizuję dla siebie. Powiedzmy sobie szczerze, ten emulator to takie "bele co", substytut i tyle.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: zaxon w 2017.06.17, 01:15:43
Wiesz,  Yerzmyey  i Ay - Riders to jest  nisza w/g ciebie ??
 Na AY potrafi cuda zagrac, miedzy innymi dlatego tez go do Tokyo zaprosili zeby zagral koncert, ci,  ktorych brzmienie prawdziwego AY jednak jara ;) No ale inni wola udawac ze blaszane wiadro na Atmedze zagra tak samo ;)

O tempora o mores ;)


Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.17, 01:20:12
Japońce mają dziwne gusta :P im coś bardziej odjechanego tym bardziej im pasuje, łącznie z automatami z używaną bielizną, a na wjeździe do ich kraju za Playboya musisz tłumaczyć się. :P

Poza tym wyciągasz daleko idące wnioski, z czegoś czego nie napisałem.

Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: silenter w 2017.06.17, 07:51:03
Do tego projektu natchnął mnie @Skinner, wspominając przy okazji jakiejś rozmowy o fejsie z AYkiem, że jest emulator na ATmedze, wymieniliśmy kilka wiadomości w tej sprawie i od pomyślu do prototypu minęły prawie 2 miesiące.
Drobna poprawka nie @Skinner tylko @Silenter - chyba, że o czymś nie wiem.

Ja jestem zajarany muzyką 8-bitową ale nie w stylu Yerz'a.
Mój projekt trochę przystopował bo  @ZAXON zrobił niespodziewanie wznowienie TSFMów i część funduszy odpłynęła, a potem trzeba było obadać co to jest ten TSFM. W między czasie trochę elektroniki mi odparowało bo zasilacz breadboardowy puścił 12V na układy.
Właśnie się pozbierałem i idę dalej.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.17, 08:38:45
Do tego projektu natchnął mnie @Skinner, wspominając przy okazji jakiejś rozmowy o fejsie z AYkiem, że jest emulator na ATmedze, wymieniliśmy kilka wiadomości w tej sprawie i od pomyślu do prototypu minęły prawie 2 miesiące.
Drobna poprawka nie @Skinner tylko @Silenter - chyba, że o czymś nie wiem.


Tak, Ty Sławku, przepraszam. Mea culpa, późno w noc, 3 wiadomość od osób o podobnych nickach.

Swoją drogą nie zdziwę się, jak dobrze Wam znana osoba w swojego klona HQ128K/laptopa na smd dla każdego, wsadzi ATmege:) Pytał o zastąpienie oryginału AY na rosyjskim forum:

Cytuj
DJORDJE MITIC
Thursday December 24th, 2015 at 03:36 PM
Dear!

Need two things:

1. To replace AY-3-8912 in my Spectrum Sinclair 128K your solution
(...)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.17, 20:37:48
Parę plików audio, dla różnych zegarów (od 20 do 27MHz) oraz różnych układów:

Pliki Audio (http://fatla.eu/pub/ZXSpeccy/AYEmul/Audio/)

Miłej zabawy w zgadywanie co jest co :D

Mam nadzieję, że @Tygrys i spółka wybaczą mi, używanie ich dema do testów :)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: trojacek w 2017.06.17, 23:11:57
Jak na moje ucho, to dwa brzmią tragicznie, a dwa bardzo dobrze!
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.17, 23:24:06
Które? Proszę napisz nazwy plików, które są przyzwoite, a te które są tragiczne.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: trojacek w 2017.06.18, 00:10:02
Zakładając, że to ten sam plik źródłowy:

file_1.m4a - drewno,
file_2.m4a - lepiej, nawet całkiem dobrze,
file_3.m4a - jakby brakowało polowy voiców,
file_4.m4a - soczyście, ładnie
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.18, 00:43:26
Tak wszystkie przykłady są z tego samego emulatora w wersji 24.6. Mam 3 prototypy z zegarami: 20, 24 i 27MHz, z dwoma układami ATmega8 i ATmega328P. Płytki zmontowane według tego samego schematu i listy elementów biernych.

Na chwilę obecną wszystkie mają wgraną emulację AY-ka, ale właśnie zmieniam ją na Yamahe. Za platformę testową robi Chrome od @peara, z którego wyjście analogowe podpiąłem do wejścia liniowego makówki. Tam tylko QT i zapis, tego co wychodzi analogowo z Chroma, a jest odgrywane przez BigThings. Zapisuję pierwszą minutę ścieżki dźwiękowej tego dema w m4p i te pliki wystawiłem na swoim serwerze.

Dorzucę jeszcze, co robi emulator z tabelą głośności YM.

Ostatecznie spróbuję rozpędzić AVRa do 30MHz, powyżej może nie pójść w wersji THT.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: screemer w 2017.06.19, 21:30:06
plik 6 gra najwierniej - ktory to ?

Edit: By the way - dla ATMega328p w THT wszystko co wiecej niz 20Mhz to juz duzo, a co dopiero 30 :)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.19, 21:45:57
Poczekaj do końca tygodnia, wtedy dam znać co jest co. Ankieta zaczyna wyglądać ciekawie. Nie będę psuł zabawy, dopiero zaczęła się.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: silenter w 2017.06.19, 21:47:59
Ale koniec tygodnia już był!!! ;)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.19, 21:49:24
Zeszłego na bank :)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: zaxon w 2017.06.19, 21:51:53
Ok, porobie za adwokata diabła ;)
Czyli zamiast AY-Greka za 1,5 dolara (no dobra, w hurcie ;) )  , robimy i zamawiamy płytki, lutujemy, dajemy Atmegi, programujemy je .. Zaraz, zaraz , dajemy przetaktowane i to o sporo Atmegi ...recht? I mamy kolejny piecyk.

Gdzie tu sens i logika? No chyba ze na zasadzie "bo mozna" no to nie mam wiecej pytan ;)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: silenter w 2017.06.19, 22:00:13
@ZAXON - nie wszystko musi być robione dla kasy czy praktyczności. Dla mnie w tym wszystkim ważniejsza jest frajda.
np. ja sobie kupiłem uszkodzone fdd 3000.
Nie wysłałem go do PEAR'a (pewnie dawno by już w pełni sprawne wróciło). Czeka sobie grzecznie spakowane, czeka na jesienne wieczory. Frajda odkrywania go i naprawiania na pewno będzie większa niż późniejsze używanie.
Zresztą twoje +D wydaje mi się obecnie wygodniejszym rozwiązaniem.
:)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.19, 22:02:04
@Zaxon, cena jednego AY-3-8912 w jUKej od sprawdzonego sprzedawcy ... 6-7 funtów + przesyłka. W Twoim przypadku nie ma sensu, kupujesz po 1.5 dolca po 100szt. :P

ATmega8 można dostać za 1.5 funta z przesyłka w detalu.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: screemer w 2017.06.19, 22:09:53
EEE nawet taniej - mega8 w pakietach po 5 sztuk z Azji kosztuje 3 funciaki z darmowa przesylka.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.19, 22:11:20
@screemer: Zapomniałeś dodać, że nie jest z wylutów :D Swoją drogą pisałem o lokalnych dostawcach.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: zaxon w 2017.06.19, 22:21:16
Silenter, alez oczywiscie, sam robie sporo roznych dupereli ot tak dla frajdy i zobaczyc gdzie sie tym razem zadymi ;) D+ nie jest moje, to tylko odswieżony stary projekt .

Klaud, i mam pewnosc ze to co zalozylem mi sie nagle nie wygruzi z powodu przegrzania czy bledow w sofcie ;)  Atmega8  za 1,5 funta tez moze sie wcale nie chciec krecic na 24,27,czy 30 MHZ ;)


Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: tooloud w 2017.06.20, 00:45:50
o, będę słuchał jutro w dzień :)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.25, 10:37:41
Dziękuję tym co wzięli udział w głosowaniu.

Przykłady były generowane przez następujące układy:

Podsumowując, trzy osoby na 7 głosujących poprawnie wskazały pliki ze ścieżką odtwarzana przez oryginalny układ AY-3-8912 (pliki 2 i 6).

Tak na marginesie, odpaliłem AVR Studio i przeglądnąłem plik źródłowy w ASM, ponieważ byłem zaskoczony tragicznym dźwiękiem z ATmega328P. Skompilowałem pliki i wyszło, że coś nie tak było z tymi pobranymi ze strony autora projektu. Pliki wynikowe różniły się w 80%, jednak nawet nowa kompilacja niewiele pomogła. Mam jeszcze ATmega48 i nie ma wielkiej różnicy pomiędzy dźwięk generowany przez ten układ a przez ATmega8. Także nie ma większych róźnic pomiędzy emulacją AY and YM. Mogę napisać, że tylko układy ATmega8 i ATmega48 dają zadawaląjące rezultaty przy taktowaniu od 20 do 25MHz. Kręcenie AVR w obudowie DIP powyżej 25MHz nie ma sensu.

Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: pear w 2017.06.25, 11:17:36
Szóstki byłem pewien. Co do dwójki się wahałem. Za bardzo eksploatowane były efekty szumowe ;)
Gdyby nie wsłuchiwanie się w każdy egzemplarz AmpY nie usłyszałbym żadnej różnicy :D
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.06.25, 11:43:36
@pear: miałeś łatwiej, ponieważ Chrome wg. Twojego projektu robił za poletko doświadczalne :D
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: Maryjan w 2017.06.25, 22:53:40
Jak do mnie dotrze, to sobie potestuję :)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.07.03, 23:14:55
Będzie co testować, ponieważ autor emulatora pracuje nad nowszą wersja ;)

http://www.avray.ru/news/new-version-coming-soon/ (http://www.avray.ru/news/new-version-coming-soon/)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: Maryjan w 2017.07.04, 00:05:33
To miłe ze strony autora emulatora, że docenił Twój wkład w testowanie jego projektu.
Poczekamy, zobaczymy, co tam nowego powstanie.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2017.07.08, 23:43:14
Pojawiła się nowa wersja emulatora (24.7) z porawkami generatora szumu. Do tego, otrzymałem informację od autora, jak zmieni konfigurację emulacji na AY/YM z dowolnym zegarem, np. 1.79MHz.

Niestety chwilowo, nie będę miał czasu posiedzieć nad tym. Może w przyszły weekend.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2019.09.11, 23:33:42
Kopalnia roku, ale jest nowa wersja wsadu do Atmegi o numerze 25.0 (https://www.avray.ru/ru/ay_ym_emulator/).

Zmiany w poziomach sygnałów wyjściowych dla generatora szumu i tonów. Chyba będę musiał odgrzebać Chroma 128 i sprawdzić jak to bzyczy.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: Maryjan w 2019.09.12, 11:22:53
Masz może jeszcze płytki do tego emulatora ?
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2019.09.12, 11:32:36
Chyba mam do SMD. Poszukam.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: Maryjan w 2019.09.12, 11:33:52
Ok.
I'am waiting
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2019.09.12, 11:44:43
https://oshpark.com/shared_projects/Jp0BUGlk
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: Maryjan w 2019.09.12, 11:47:12
Dzięki :)
Zamówię sobie.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: skoti w 2019.09.12, 12:17:06
Prośba do posiadaczy emulatora o puszczenie programu z załącznika. Pochodzi ze strony http://hypr.ru/blog/747.html Głównie chodzi mi o część gdzie testowane są rejestry AY.
Tak przy okazji to genialna apka do testowania pojedynczych AY i TurboSound.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2020.09.09, 09:31:38
skoti: niezły programik :) do testowania chińskich malowanek

:) Ukazała się nowa wersja (26.0) emulatora: https://www.avray.ru/ay_ym_emulator/ (https://www.avray.ru/ay_ym_emulator/)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2020.09.29, 23:37:22
Schemat emulatora, co wisi na OSHPark.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2021.01.21, 13:55:39
Wgrywanie emulatora to ATmegi8.

Używałem do tego celu programatora TL866A ze złączem ICSP. Aby go wgrać poprawnie emulator należy zwrócić uwagę na:

1. Kod emulatora
W paczce z emulatorem znajdują się skompilowany pliki z kodem emulatora pod kilka układów serii ATmega: 8, 48, 88, 168 i 328. Dodatkowo dla każdego typu MCU są wersje dla 2 kanałów lub 3 kanałów audio oraz wersje z tabelami głośności do emulacji układów typu AY-3-891x lub YM. Do zamiennika rzeczywistego PSG w wersji AY-3-891x na ATmega8 należy wybrać wersję 3 kanałową, dedykowaną do tego MCU i z tabelą głośności np. AY. Kod emulatora wgrywa się do pamięci flash MCU (Code):
(http://fatla.eu/pub/ZXSpeccy/AYEmul/ATmega8_code_flash.png)


2. Konfiguracja emulatora
Plik konfiguracyjny emulatora jest uzależniony od trzech czynników:
Plik konfiguracyjny wgrywamy do pamięci EEPROM MCU (Data):
(http://fatla.eu/pub/ZXSpeccy/AYEmul/ATmega8_data_config.png)


3. Bity konfiguracyjne MCU
Ostatnią rzeczą jest poprawne ustawienie fuse-bitów, a one mają inne wartości dla każdego typu MCU, np, dla ATmega8 odpowiednio:
Lock-bitów nie ustawiamy (!!!) i bajt je opisujący powinien mieć wartość 0xFF.
(http://fatla.eu/pub/ZXSpeccy/AYEmul/ATmega8_fuses.png)

Wszystkie powyższe informacje są zawarte w pliku tekstowym załączonym do paczki z emulatorem. W tym pliku jest też zawarta instrukcja, w jaki sposób zaprogramować MCU przy użyciu AVRDUDE.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2021.03.06, 20:11:40
Hahaha: R.I.P. AY (https://www.youtube.com/watch?v=Ii5gcyprhAg)

Swoją drogą zmajstrowałem zamiennik w SMD ponad 3 lata temu:
(http://fatla.eu/pub/ZXSpeccy/AYEmul/AY-ATmega8_smd_prot_02.jpg)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: Maryjan w 2021.03.07, 00:14:47
Raczej wątpię, żeby ktoś uruchomił linię produkcyjną AY-3-89xx, dlatego sprzętowy emulator wydaje się atrakcyjnym rozwiązaniem.
Problemem jest tylko brak portów I/O.
Układy WD 1770 i WD 1772 też się już kończą - ceny powoli robią się na nie kosmiczne.
Więc być może i tu będzie pole do popisu dla emulatora sprzętowego.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2021.03.07, 07:24:31
https://github.com/alexanderk23/ayx - co prawda na STM, ale z portami I/O.

Swoją drogą prawie 2 lata temu Rosjanie rozrysowali całą wewnętrzną strukturę układu AY-3-8910.

Istnieje też niezła implementacja AY/TS w HDL.

Moim zdaniem "emulowany" AY, to tylko kwestia czasu oraz wielkości rynku. Swoją drogą kilka firm nadal nadal robi zamienniki pełnowymiarowego AYka i w sumie nie są one gorsze od oryginału.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: Maryjan w 2021.03.07, 21:24:57
A tej implementacji AY-ka nie widziałem.
Ciekawe, jak to gra.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: damik w 2022.05.20, 15:33:28
Trochę odkopię temat, bo jakiś czas temu pojawiła się nowsza (chyba finalna) wersja softu do tego.

Jest też na Github'ie podobny projekt: https://github.com/Yevgeniy-Olexandrenko/avr-ay-board

W porównaniu z wersją Klaudiusza ma to jeszcze dołożone filtry RC na wyjściach ABC, ale z nimi to gra strasznie cicho jednak można jeszcze poeksperymentować zmniejszając rezystory i dobierając kondensatory.

Zmontowałem akurat  z nudów na szybciora to cacko na Atmega88-20AU i "ćwierka" mi to w miarę poprawnie przy 30MHz, bo taki kwarc akurat znalazłem.  ;)

BTW, zostało mi jeszcze kilka gołych płytek gdyby ktoś się chciał pobawić.



Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: ArturM w 2025.01.10, 10:33:15
Z góry przepraszam za takie wykopaliska, ale trafiłem na ten wątek dopiero teraz, gdy poskładałem sobie dwie płytki v1.4 z układem ATmega48PA@20MHz.

Przejdźmy jednak do rzeczy. Emulacja AY jeśli chodzi o generator dźwiękowy działa. Niestety tryb pracy jako 3 kanały wyjściowe ma pewien mankament. Otóż kanał B jest odtwarzany zdecydowanie ciszej niż A i C. Można to "naprawić" ustawiając tryb pracy jako 2 kanały z programowym mikserem i eliminując standardowy układ miksera na rezystorach. Ewentualnie zmieniając układ by tylko dostosowywał poziom wyjściowy z emulatora (Który jest zdecydowanie większy) do tego co daje oryginalny AY.

Teraz pytanie: Dlaczego tak się dzieje, i dlaczego jeszcze to nie zostało wychwycone i poprawione? Odpowiedź być może jest taka, że w układzie docelowym tego projektu - czyli samodzielnego grajka to nikomu nie przeszkadzało :-X. Pozostaje tylko kwestia skąd to się bierze.

Takie zachowanie w trybie pracy z 3-ma kanałami wynika IMHO z błędnych założeń układowych i programowych.
Jeśli zajrzymy do kodu źródłowego to będzie można zauważyć, że licznik TIMER1 nie tylko pracuje jako generator dwóch przebiegów PWM - 1-bitowy DAC - dla kanałów A i C, ale jest też podstawą czasu generowanego dźwięku. Dlatego też bitowość tego przetwornika zależy od... częstotliwości pracy kwarcu (załącznik).
Przy konfiguracji licznik TIMER1 jest skracany do wartości wymaganej by dźwięk był poprawny w zakresie jego tonacji.

    ; Defines the counter's TOP value
    ; ICR1H = 0
    ; ICR1L = config
    out     EEARL, YH               ; set EEPROM address 2
    sbi     EECR, b0
    in      r18, EEDR               ; load byte 2 from EEPROM to r18
#if MCU_TYPE == 0
    out     ICR1H, C00
    out     ICR1L, r18              ; set PWM speed from byte 2 of EEPROM (affect AY chip frequency)
#else
    sts     ICR1H, C00
    sts     ICR1L, r18              ; set PWM speed from byte 2 of EEPROM (affect AY chip frequency)
#endif
    ; ICR1L value formula (28000000/109375/2 - 1) where 28000000 = 28MHz - AVR oscillator frequency
    ; 109375 is for 1.75 MHz version, formula is (PSG frequency / 16) e.g. for 2MHz it is 2000000/16 = 125000

Można to zrobić, bo konstrukcja tego licznika na to pozwala.
Natomiast kanał B jest generowany przez licznik TIMER2, którego bitowość PWM nie jest już zależna od kwarcu. I zawsze jest 8 bitowa.
Załóżmy, że kanały A i C są 7 bitowe (mniej więcej tyle ma wyjść z równania), stąd wartość 127 wpisana do rejestru daje wypełnienie 100% - najwyższa amplituda na wyjściu analogowym. Ale nie jest tak dla kanału B, bo wpisanie tam wartości 127 daje nam tylko 50% wypełnienia! I w kodzie nie znalazłem na to działań naprawczych, a dostępne są dwa:

Pierwsze, to skrócenie licznika TIMER2 też do wartości zależnej od kwarcu. Teoretycznie da się to zrobić, bo licznik też można sprzętowo skrócić, ale jest pewien haczyk. Wtedy nie możemy dla kanału B skorzystać z wyjścia OCR2A, tylko trzeba by było skorzystać z wyjścia OCR2B, które jest tak niefortunnie umieszczone, że koliduje z jednym z przerwań zewnętrznych, z którego kod korzysta do reakcji na zmiany BDIR/BC1. Zatem ten sposób naprawy odpada już w przedbiegach.

Zostaje rozwiązanie drugie - programowe. Czyli wartość przekazywana do "przetwornika DAC" trzeba po prostu pomnożyć o jakiś faktor.
Najprościej byłoby po prostu wartość pomnożyć przez dwa: 127*2 = 255, i mamy zależność 127 = 100% wypełnienia.

#elif CHANNELS == 3
// three channel version ----------------------------------------
    lsl  OutB             ; napraw głośność B (szybkie, pomnóż OutB przez 2)
#if MCU_TYPE == 0
out OCR2,OutB
#else
sts OCR2A,OutB
#endif
// --------------------------------------------------------------
#endif

Lecz nie mamy pewności co do tego, czy dla danego kwarcu wartość max będzie właśnie <= 127 by się po przemnożeniu zmieściła w 8 bitach. Dlatego można pójść nieco inną drogą - nieco kopiując rozwiązanie kilka linijek wyżej (Mikser programowy dla dwóch kanałów).

#elif CHANNELS == 3
// three channel version ----------------------------------------
    mov     YL,OutB         ; TMP = TMP + (TMP/4 + TMP/8);
    lsr     OutB            ; napraw głośność B (bezpieczne, zwiększ o ok. 65%)
    lsr     OutB
    add     YL,OutB
    lsr     OutB
    add     OutB,YL

    #if MCU_TYPE == 0
out OCR2,OutB
#else
sts OCR2A,OutB
#endif
// --------------------------------------------------------------
#endif

Można jeszcze poeksperymentować z formułą, choć będzie to wpływać na długość kodu, a zatem na szybkość wykonania pętli emulacji.

Jak znajdę chwilę czasu to przetestuje oba rozwiązania.


ps. Jest jeszcze jedna możliwość poprawy tego kodu, choć wymaga daleko idących zmian. Całkowite odcięcie timingów od generowania PWM. Czyli: timingami zajmuje się niewykorzystany licznik TIMER0 pracujący w trybie CTC, czym zachowujemy elastyczność i zależność tonacji od częstotliwości kwarcu. Zaś liczniki TIMER1 i TIMER2 puszczamy na 8 bitów, i wtedy grają równo...
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: damik w 2025.01.10, 11:35:41
Ciekawe obserwacje i spostrzeżenia, widzę że trochę to rozkminiales, ja nie byłem aż tak dociekliwy.  :)

Kolejny problem to brak obsługi portu równoległego i w związku z tym zastosowanie tego np w Amstrad CPC będzie problemem bo na tym bazuje obsługa klawiatury.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2025.01.10, 14:22:09
@ArturM: dzięki za te informacje, tylko wszystkie zmiany byłyby oddzielną dystrybucją od oryginalnej. Zresztą zamiennik od Bena lub Charliego też jest odpryskiem tego co zrobił autor tego emulatora.
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: ArturM w 2025.01.10, 15:53:42
"Wiesz co robi ten miś? On odpowiada żywotnym potrzebom całego społeczeństwa. To jest miś na skalę naszych możliwości. Ty wiesz co my robimy tym misiem? My otwieramy oczy niedowiarkom. Patrzcie, mówimy, to nasze, przez nas wykonane i to nie jest nasze ostatnie słowo!" :D

W sumie to chciałbym tylko sprawdzić czy moje wnioski były słuszne i czy taka modyfikacja da zamierzony efekt.

I drobna autopoprawka. "Bezpieczny" kod miał wyglądać tak:
    mov     YL,OutB         ; TMP = TMP + (TMP/2 + TMP/4);
    lsr     OutB            ; napraw głośność B (bezpieczne, zwiększ o ok. 65%)
    add     YL,OutB
    lsr     OutB
    add     OutB,YL
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: ArturM w 2025.01.11, 20:31:02
ps. Jest jeszcze jedna możliwość poprawy tego kodu, choć wymaga daleko idących zmian. Całkowite odcięcie timingów od generowania PWM. Czyli: timingami zajmuje się niewykorzystany licznik TIMER0 pracujący w trybie CTC, czym zachowujemy elastyczność i zależność tonacji od częstotliwości kwarcu. Zaś liczniki TIMER1 i TIMER2 puszczamy na 8 bitów, i wtedy grają równo...
No, proszę. Ktoś chyba doszedł do takich samych wniosków. Otóż istnieje kod zwany avr-psg, który w 99,9% właśnie w ten sposób poprawia to oprogramowanie układowe (Różnica jest kosmetyczna co do wykorzystania sposobu jak skracać licznik TIMER0). Zatem mamy:
- licznik TIMER0 jako konfigurowalna poprzez dane w EEPROM podstawa czasu,
- liczniki TIMER1 i TIMER2 działają jako 8 bitowe w trybie FastPWM - więc mamy 3 identyczne przetworniki DAC 1-bit,
- z tego co analizowałem, to poprawiono też tabelę głośności i obwiedni by operowała na 8 bitach.

Jak to gra? IMO nieźle. Możecie się sami przekonać odsłuchując nagrania. Specjalnie nagrania są zapisane w wysokiej jakości jako FLAC 24-bit 48KHz. Wszystkie nagrane w tych samych warunkach, przez wejście liniowe prosto z mojego Multiinterface. Odtwarzaniem zajmował się HQ48 SMD z uruchomionym programem SoundTracker. AVR-PSG działał na ATmega48PA taktowanym 20MHz (bez OC :P ).

https://filebin.net/asv278if9delwx5u# (plik zip, 150MB)
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2025.01.12, 10:29:50
Gdzie można poczytaj o tym kodzie "avr-psg"? Mógłbyś podzielić się linkiem?
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: ArturM w 2025.01.12, 11:56:28
Gdzie można poczytaj o tym kodzie "avr-psg"? Mógłbyś podzielić się linkiem?
https://github.com/Yevgeniy-Olexandrenko/avr-ay-board/tree/main/firmware/avr-psg
Tytuł: Odp: Emulator AY-3-8912 na AVR
Wiadomość wysłana przez: KWF w 2025.01.14, 23:22:13
Dzięki. Nie zauważyłem, że ta wersja jest tez na githubie.