forum speccy.pl
Komputery z Z80 => POLSKIE KOMPUTERY => Wątek zaczęty przez: coberr w 2016.02.25, 02:10:25
-
MAm pytanie - może ktoś przypadkiem byłby w stanie mi pomóc?
Kiedyś w Bajtku ukazał sie artykuł o układzie AY 3-8910 (wraz ze schematem).
W tej chwili nie jestem w stanie juz go wyszperać.
Czy ktos pamięta może - na jakich dokładnie portach siedzi AY w zx spectrum? (także 128/+2/+3)
Czy adresy w tym interfejsie z Bajtka byly te same? (wydaje mnie sie, że tak).
Ktos pamięta moze który to byl numer Bajtka?
-
Bajtki
11-89 s12 - schemat AY do ZX
3/4-90 s13 - płytka do AY w ZX
7/8-90 s30 - errata do powyższego oraz różnica między AY3-8910 a AY3-8912, tu jest nieco o pinach/nóżkach
9/10-90 s15-16 - 80K+AY w Spectrum --- 11-90s15 wersja do Timexa
7-92 s12 - opis rejestrów AY3 w klanie Amstrada
Tyle mi się udało znaleźć na szybko. :)
-
A standardowe porty dla AY w Spectrum 128 to $BFFD i $FFFD. Poza Unipolbritem/Timexem chyba wszystkie modele Spectrum i jego klony miały/mają AY na tych samych portach, żeby zapewnić zgodność z ZXS 128.
-
Zbyniur, Matofesi - bardzo wam dziekuje - tyle mi w zupelności wystarczy :)
Będę miał niedlugo pewnie jeszcze kilka pytań ale dopiero jak podłączę ten wynalazek do swojej cobry :)
Tak przy okazji - mam AY3 -8913 - taki oto wynalazek mnie sie trafił. (mam nadzieje ,ze nie malowanka)
-
8913 nie ma wyprowadzonych portów równoległych. Jeśli będziesz tego używał tylko do dźwięku i nie jest malowanką to nie powinno być problemów :)
-
docelowo on ma slużyć tylko i wyłącznie do dźwięku. Portów moja COBRA ma juz az zanadto :) (2x8255 - chyba wystarczy :D). Stąd tez m.in. wybór wersji najuboższej.
A że zostało mi akurat miejsca na 24 pin - to jakos może wcisnę tam tego AY-greka .
Własnie chodziło mnie glownie o ten bajtkowy schemat wraz z opisem. - w sieci krąży skan samego schematu i tak cos mnie sie kojarzylo , ze to może byc to ale nie bylem pewien. Teraz juz jestem, że to bylo to.
Schemacik juz sobie przerobiłem i zaadaptowalem do swoich potrzeb.
-
O ile mnie pamięć nie myli, pierwszy schemat AY w Bajtku był błędny!
-
tak jest - tak własnie było ale to jest drugi - poprawiony( bajtek 11/89)
Zreszta tez przeprowadzilem sobie pełną analizę sygnałow na magistralach - powinno być o.k.
-
No - po ciężkiej i nierównej walce AY ruszył mi na COBRZE. Po wpisaniu prostego programu w assemblerze (wartosci rejestrow z Bajtka) - układ generuje dźwięk wystrzału.
0000 01FDFF LD BC,0FFFDH
0003 3E06 LD A,06H
0005 ED79 OUT (C),A
0007 01FDBF LD BC,0BFFDH
000a 3E1F LD A,1FH
000c ED79 OUT (C),A
000e 01FDFF LD BC,0FFFDH
0011 3E07 LD A,07H
0013 ED79 OUT (C),A
0015 01FDBF LD BC,0BFFDH
0018 3E07 LD A,07H
001a ED79 OUT (C),A
001c 01FDFF LD BC,0FFFDH
001f 3E08 LD A,08H
0021 ED79 OUT (C),A
0023 01FDBF LD BC,0BFFDH
0026 3E10 LD A,10H
0028 ED79 OUT (C),A
002a 01FDFF LD BC,0FFFDH
002d 3E09 LD A,09H
002f ED79 OUT (C),A
0031 01FDBF LD BC,0BFFDH
0034 3E10 LD A,10H
0036 ED79 OUT (C),A
0038 01FDFF LD BC,0FFFDH
003b 3E0A LD A,0AH
003d ED79 OUT (C),A
003f 01FDBF LD BC,0BFFDH
0042 3E10 LD A,10H
0044 ED79 OUT (C),A
0046 01FDFF LD BC,0FFFDH
0049 3E0C LD A,0CH
004b ED79 OUT (C),A
004d 01FDBF LD BC,0BFFDH
0050 3E12 LD A,12H
0052 ED79 OUT (C),A
0054 01FDFF LD BC,0FFFDH
0057 3E0D LD A,0DH
0059 ED79 OUT (C),A
005b 01FDBF LD BC,0BFFDH
005e 3E00 LD A,00H
0060 ED79 OUT (C),A
0062 C300C0 JP 0C000H
(ten skok na końcu - to skok jak przy wykonaniu RESET - odzyskuje kontrole nad tym wynalazkiem)
GEnerator - prosty 7404+RC po wstawieniu elementow generuje przebieg o czestotliwości bodajże 1,8 lub 1,89MHz - już nie pamiętam. (pewnie jest to nieco wyżej niz standard?)
Co prawda to nie ZX spectrum ale mam nadzieję, że mnie tu nie zlinczujecie za tę małą profanację :)
mam pytanie - czy są dostępne jakieś playery np. plików AY lub innych w postaci samego modulu programowego?
DO dyspozycji mam pamieć o adresach 0...49151 oraz 53248...61439.
Sam moduł powinien jedynie odtwarzać plik i nie korzystać z żadnych innych zasobow sprzętowych (np. grafika).
Nie wskazane również użycie przerwań - niech to pożera całą moc procesora nawet na NOPy ale niech odtwarza plik z prawidłową prędkoscią :)
Jest coś takiego ?
-
Tutaj jest coś na ten temat: http://speccy.pl/forum/index.php/topic,1226.15.html
-
@coberr Bez przerwań to chyba będziesz miał problem. W normalnych warunkach muzyczkę się odpala właśnie na przerwaniach (w ZXS 50Hz), stosowny player zjada jakieś 1000-3000 cykli procesora (zależnie od rodzaju playera/trackera) i resztę czasu masz na swój program. Będziesz musiał się jakoś synchronizować do zewnętrzengo źródła bo czas wykonania playera jest nierówny i samymi pętlami opóźniającymi ciężko będzie to zrobić dobrze. A zrobienie źle da ci brzydko grająca muzyczkę.
-
no wlasnie tego sie kurcze obawiałem :)
Sęk w tym, ze cobra nie wykorzystuje przerwań :). ZObaczę - moze jakoś to z czasem przetrawie.
A może z innej mańki - czy którys z formatów plików na AY greka posiada jedynie same wartości dla niego - ew. cale sekwencje rozkazow dla procesora - przeznaczone bezpośrednio do "wyplucia" na sam scalak?
-
Ja nie znam nic takiego. Zakładając, że potrzebujesz 13 (o ile pamiętam) rejestrów na ramkę daje ci to 650 bajtów na sekundę czyli prawie 40 kilo na minutę muzyki. Właściwie każdy tracker to player do skompilowanej do jakiegoś p-code'u muzyki. Można by spróbować zrobić jakąś procedurę kompresji - o ile pamiętam Kaz w Shocku w części z paskami na cały ekran miał coś takiego, żeby muzyka zajmowała jak najmniej czasu. W ostateczności można też zrobić tak, że ładujesz muzyczkę do emulatora Spectrum, robisz programik w BASICU który inicjuje player a potem w pętelce woła odpalenie dla kolejnej ramki, odczytuje rejestry i pakuje je gdzieś do pamięci. A potem te dane sobie zgrywasz z emulatora i możesz próbować je odtwarzać u siebie.
-
chyba będe musial przeryć dokumentacje plików AY. WYdaje się, że to będzie chyba najlepszy pomysł w tej chwili :)
http://www.worldofspectrum.org/projectay/tech.htm
Twoje rozwiązanie MAtofesi wydaje się być logiczne. Jednak narazie sobie odpuszczę te oryginalne playery na spectrum - własnie z uwagi na fakt - , że cobra nie ma obsługi przerwań. (obie linie procka sa wolne)
Playera nadeslanego przez Tygrysa chyba też na szybko nie dam rady rozpracować :)
Będe musiał jakiegos własnego prymitywa stworzyć - wszelkie BASICe odpadają :)
Jedynie assembler.
-
Może proście będzie wytworzyć przerwanie 50 Hz z zasilacza niż rozkopać player ?
-
a już sobie tak myślalem nad tym - musialbym sie podpiąc do sekcji generującej sygnał synchronizacji pionowej. Musialbym sprawdzić - jak szeroki jest impuls- ew. dopasować go do wymaganego minimum (maksimum) przez z80. Jest to do zrobienia.
Ew. wykorzystac sygnal wygaszania pionowego i zaadaptowac go do procesora
W dalszej kolejności musiałbym zmodyfikowac sam program monitora zaszytego w EPROM i dodac kilka instrukcji. (takze tych, które przenoszą częśc kodu bezpośrednio do RAM po starcie systemu).
Głowna różnica miedzy spectrum a CObrą jest taka - ze ZX startuje od adresu 0000h. Cobra zaś od C000h. W spectrum napoczatku 16KB to ROM - pozniej 16KB slow RAM zamulane przez ULA i na koncu 32KB "FAST" RAM.
Czyli adresy skoków po przyjeciu INT mamy juz w ROM (chyba ze inny tryb wybrano).
CObra ma inną organizacje pamieci - jest to w sumie czasem dośc wygodne (ze wzgl. na pisane programy - z reguly od adresu 0000h)
w zależnosci od konfiguracji - mamy 16 lub 32 lub 48KB RAM (0...49151)
DALEJ - 2KB EPROM (z możliwoscią rozszerzenia do 4KB - na płycie "głownej" ) - czyli 49152...51199 - 2KB (ew. 49152...53247 - 4KB)
Następnie 10KB wolnej przestrzeni ( na ew. zewn. EPROM - 53248 - 63487)
Ja juz u siebie zapakowałem 8KB EEPROM pod adresami 53248...61439.
Ze wzgl. na ten nietypowy obszar trzeba go było troche nietypowo adresować (zamiast liniami A15,A14 - Dekoder adresow siedzi na A15...A12. Zaś linia A12 EEPROM sterowana jest linią A13 systemu :) )
Ostatnie 2KB pamiec wizji - a odkładniej 768 bajtów z obszaru 63488...65535
Wpadł mi jeszcze jeden pomysł - a mianowicie - "podrasowanie" cobry do poziomu ZX 81.
Oba komputery wykorzystuja ten sam tryb - tekstowy. Nalezałoby dołożyć źródło przerwań, dopisac procedurę, która przenosi dane ekranu dla ZX 81 - do obszaru wizji cobry i na poczatek coś by moze było (pomijam obsługe klawiatury)
W takiej sytuacji byc moze udałoby sie bezpośrednio uruchomic jakiś player z ZX81 :)
-
Mam aplikacje do ładowania plików AY ale pod CP/M, działało to na sprzęcie samoróbce i nie potrzebowało przerwań - po prostu w pętli czekał odliczoną ilośc cykli aby wyszło 20ms i robił call pod int_addr (pole wyciągnięte z pliku ay) - jakoś to grało. Napisane w C (odczyt pliku i parsowanie) oraz asm (pętla). Jak chcesz to moge ci wyslać zródła (wyślij email na pw).
W przypadku cobry i plików ay obawiałbym się, że int_addr wskazywał powyżej 48K. Nie mam teraz jak na szybko odpalić tej aplikacji żeby to sprawdzić.
-
Czy w ZX Spectrum 48 AY jest na tych samych portach bo zamierzam podłączyć go do swojego klona?
-
A standardowe porty dla AY w Spectrum 128 to $BFFD i $FFFD. Poza Unipolbritem/Timexem chyba wszystkie modele Spectrum i jego klony miały/mają AY na tych samych portach, żeby zapewnić zgodność z ZXS 128.
-
Sprawdziłem w emulatorze ZXMAK2 emulację klona "Bajt" i w trybie zgodności z ZX Spectrum AY działa (działa nawet COVOX) :-) więc w realu też chyba powinno działać. W załączniku kawałek wideo z pracy emulatora.