forum speccy.pl

ZX Spectrum => HARDWARE => Wątek zaczęty przez: smok.wawelski w 2016.07.13, 20:57:35

Tytuł: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.07.13, 20:57:35
Ponieważ to mój pierwszy post na forum, to witam wszystkich serdecznie.

Chodzi mi po głowie pomysł zbudowania akceleratora bazującego na RPi Zero (mały, tani, popularny) z wykorzystaniem minimalnego interfejsu (najlepiej bez ale chyba się nie obędzie). Podłączenie RPi daje także możliwość korzystania z internetu, interfejsów SPI, klawiatury itp., a wszystko za 5$. Dodatkowo implementacja akceleratora będzie w software, więc można go w nieskończoność rozbudowywać lub wdrażać konkurencyjne implementacje.

Co chciałbym uzyskać:
1. Komunikację po portach w obie strony, tak aby można było korzystać z akceleratora także w BASICu
2. Mirrorowanie pamięci video w celu wyświetlania jej zawartość przez RPi i dalej poprzez HDMI na monitorze
3. Możliwość zapisu i odczytu dowolnej komórki pamięci RAM ZX Spectrum (zamiast komunikacji przez port - zależy co szybsze)

W związku z tym mam pytania - jak to osiągnąć?
Znalazłem ciekawe rozwiązania bazujące na układzie 8255 jak UR-4 czy http://bneven.com/zxio.html ale czy konieczne jest użycie w ogóle dodatkowego układu? Czy nie wystarczyłby level-shifter i podpięcie się bezpośrednio pod GPIO RPi?
Mirror pamięci to zapewne sprawa trudniejsza i niemożliwa do wykonania bez układu buforującego który czytałby szynę adresową i szynę danych procesora i kopiował dane wysyłane do videoramu także do swojej pamięci - czy dobrze kombinuję? Mówię o buforowaniu, ponieważ RPi z Linuxem nie jest systemem czasu rzeczywistego i gubiłby dane. Na początek myślałem o podpięciu Teensy 3.1 (które jest tanie i posiada kontrolery DMA i odpowiednią szybkość i liczbę pinów), który zczytywałby dane i wysyłał po SPI do RPi.
Co 3 pkt. rozumiem, że nie jest to banalne jeśli w ogóle wykonalne bez ingerencji w płytę główną? Czy może coś podobnego jak jak wspomniany dzisiaj DataGear Velesofta?

Co sądzicie?
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: steev w 2016.07.13, 22:49:39
Krok 2 - do RPi dochodzi cpld i shadow RAM żeby stworzyć bufor. To rodzi kolejne pomysły, więc...
Krok 3 - wywalamy cpld i RAM, zastępując je FPGA. Rozwijamy skrzydła i...
Krok 4 - wywalamy niepotrzebny już ZX Spectrum
;)
IMHO - fajność dłubania : 10+, praktyczność : 3... może 4...

Natomiast sam pomysł sprzęgnięcia RPi z ZXem jako moduł uniwersalnego intrerfejsu jest całkiem fajny.
Osobiście jestem zwolennikiem stosowania mikrokontrolerów (każdemu jego porno) ale RPi miałby w pewnych aspektach sporą przewagę.

(btw, z interfejsowych ciekawostek : http://www.fruitcake.plus.com/Sinclair/Spectrum/Spectra/SpectraInterface.htm )
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.07.13, 23:43:38
:) Chodziło mi maksymalne obcięcie kosztów, stąd pomysł na samo "gołe" RPi.
Sam mikrokontroler nie wystarczy, ponieważ żaden nie da mi HDMI, stąd RPi (Zero).

PS. Spectrę widziałem.
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: jackfinch w 2016.07.14, 05:04:38
Witam
Gdzie można kupić RPi Zero za 5$, bo jakoś nigdzie nie mogę znaleźć w tej cenie.
Pozdrawiam
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.07.14, 08:11:38
ThePiHut.com? Pimoroni.com?
RPi Zero pojawia się średnio co dwa tygodnie i kosztuje 4 funty. Dostaję od nich notyfikację zawsze jak są na stocku. Obecnie nie ma.
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: zaxon w 2016.07.14, 09:16:33
Ben robi ZX HD, niedlugo juz powinien miec dostepne. Z tego co wiem to wlasnie bazuje na RB pi , ma wyjscie HDMI i ULE plus,

https://www.youtube.com/watch?v=5BXVwEvXEa4
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.07.14, 10:24:30
Widziałem również ZX HD i faktycznie pomysł jest bardzo podobny.
Mi chodzi o to, o czym marzyłem 30 lat temu mając pierwszego Timexa: szybka grafika w BASICu i spritey (jak zobaczyłem je pierwszy raz na SVI 738 spać nie mogłem).
Mirroring video (co widać na video ZX HD) jest jako drugi priorytet. Na początku zakładałem, że akcelerator będzie pracował jako dual screen. Potem stwierdziłem, że przecież RPi to także możliwość korzystania z internetu (np. ładowanie gier lub grafiki) oraz karty SD, więc zastąpi także DIVIDE i General Sound z samplami. RPi jako akcelerator/koprocesor ma właściwie nieskończone możliwości (USB, kamery itp) jako rozszerzenie ZX Spectrum.
Najbardziej zależało mi na komunikacji bez dodatkowych rozbudowanych interfejsów - początkowo nawet myślałem o porcie EAR/MIC ale prawdopodobnie będzie zbyt wolny do komunikacji - stąd pytanie czy nie można się po prostu podpiąć pod edge connector bezpośrednio z GPIO RPi? Co o tym sądzicie? (oprócz ewentualnej zamiany sygnałów 5V na 3.3V)?
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: zaxon w 2016.07.14, 12:01:35
W zasadzie to najprosciej podlaczyc sama membrane , a na Pi napisac emulator ZX-a  :D Ale to juz tez bylo ;)   http://sinclair.recreatedzxspectrum.com/
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: Barts w 2016.07.14, 12:14:58
Ben robi ZX HD, niedlugo juz powinien miec dostepne. Z tego co wiem to wlasnie bazuje na RB pi , ma wyjscie HDMI i ULE plus,
https://www.youtube.com/watch?v=5BXVwEvXEa4

Co rozumiesz przez "mieć dostępne"? Będzie sprzedawał, czy udostępni schematy?
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: ZX Freeq w 2016.07.14, 12:36:14
Że niedługo będzie sprzedawał. Chociaż to "niedługo" się przeciąga.... Zdaje się, że są jakieś zawirowania personalne....
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.07.14, 13:44:56
Zaxon, ja nie chcę emulatora przecież :) Tak samo jak bym nie chciał zrobić na FPGA 100x szybszego ZXa z 2GB RAMu. Dla mnie fun z takiego sprzęgnięcia RPi z ZX będzie polegał zarówno na rozwijaniu firmware'u RPi jak i wykorzystywaniu jego możliwości przez ZX - wciąż te same ograniczenia 48KB RAMu, wolny procesor itp. W pewnym sensie takie rozwiązanie jest podobne do GeneralSound'a tylko że zawiera w sobie również "koprocesor" graficzny.

Ponieważ ja jestem bardziej softwarowy niż hardwarowy to trudno mi stwierdzić jak trudny byłby ten projekt od strony sprzętowej - czy potrzebuję skomplikowanego interfejsu czy po prostu podpinam się pod szynę. Na pewno nie chcę żadnych CPLD/FPGA.
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: steev w 2016.07.14, 15:25:48
Ponieważ ja jestem bardziej softwarowy niż hardwarowy to trudno mi stwierdzić jak trudny byłby ten projekt od strony sprzętowej - czy potrzebuję skomplikowanego interfejsu czy po prostu podpinam się pod szynę. Na pewno nie chcę żadnych CPLD/FPGA.
Pi Zero ma za mało pinów, żeby się podpiąć bezpośrednio do szyny. Bez wielonóżkowego CPLD się IMHO nie obejdzie (lub bez worka  TTLi :)
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.07.15, 00:01:25
RPi Zero ma 25 GPIO. Ile wg Ciebie bym potrzebował, aby zrobić najprostszy interfejs, który siedziałby na porcie Spectrum i pozwalał na dwukierunkową komunikację?
Jeśli dobrze liczę to http://bneven.com/zxio.html używa 14 pinów + reset.
Jeśli nóżek jest za mało, do testów mam jeszcze Teensy 3.1, który ma z kolei 33 GPIO.

PS. Głupie pytanie: czy port joysticka (mam Timexa 2048) może być użyty jako output? Znalazłem opis Alchemista (ultra high loader) który potrafi ładować dane z prędkością 180Kbps przez port joysticka, ja potrzebuję głównie w drugą stronę.
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: trojacek w 2016.07.15, 00:04:10
czy port joysticka (mam Timexa 2048) może być użyty jako output?

Bez przeróbek - nie.
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: steev w 2016.07.15, 01:15:34
RPi Zero ma 25 GPIO. Ile wg Ciebie bym potrzebował, aby zrobić najprostszy interfejs, który siedziałby na porcie Spectrum i pozwalał na dwukierunkową komunikację?
Jeśli dobrze liczę to http://bneven.com/zxio.html używa 14 pinów + reset.
Zależy co chcesz osiągnąć.
Jeśli planujesz jedynie dwukierunkową komunikację na wybranym porcie (kolejnych portach), to mniej więcej właśnie tyle.
Jeśli chcesz sniffować szynę żeby śledzić zapisy do pamięci obrazu, powiedziałbym, że minimum 26.
Jeśli chcesz by RPi udawała równocześnie kilka urządzeń (klawiatura, myszka, joy, magnetofon, dźwięk) to zacząłbym liczyć od 28.
Jeśli chcesz przejąć szynę i modyfikować/czytać pamięć (pamiętaj o odświeżaniu i nie wchodź w paradę ULA!) przekroczysz 30.
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.07.15, 08:34:28
Zależy co chcesz osiągnąć.
Jeśli planujesz jedynie dwukierunkową komunikację na wybranym porcie (kolejnych portach), to mniej więcej właśnie tyle.
Jeśli chcesz sniffować szynę żeby śledzić zapisy do pamięci obrazu, powiedziałbym, że minimum 26.
Jeśli chcesz by RPi udawała równocześnie kilka urządzeń (klawiatura, myszka, joy, magnetofon, dźwięk) to zacząłbym liczyć od 28.
Jeśli chcesz przejąć szynę i modyfikować/czytać pamięć (pamiętaj o odświeżaniu i nie wchodź w paradę ULA!) przekroczysz 30.

Na początek komunikacja dwukierunkowa.
Potem mirror pamięci wideo.
Udawanie urządzeń - może - głównie jako zamiennik divide.

Czy sądzisz, że jestem w stanie to osiągnąć bez dodatkowego układu, korzystając tylko z pinów RPi czy w ogóle to mrzonka? Nie chodzi mi o oszczędności ale gdyby dało się spiąć oba urządzenia bez dodatkowego hardwaru, to każdy właściciel RPi mógłby sobie coś takiego zmontować na płytce stykowej.
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: steev w 2016.07.15, 11:18:52
Na początek komunikacja dwukierunkowa.
Potem mirror pamięci wideo.
Udawanie urządzeń - może - głównie jako zamiennik divide.

Czy sądzisz, że jestem w stanie to osiągnąć bez dodatkowego układu, korzystając tylko z pinów RPi czy w ogóle to mrzonka? Nie chodzi mi o oszczędności ale gdyby dało się spiąć oba urządzenia bez dodatkowego hardwaru, to każdy właściciel RPi mógłby sobie coś takiego zmontować na płytce stykowej.
Gdybym miał gdybać, to powiedziałbym, że do komunikacji dwukierunkowej wystarczy ci level shifter (ale raczej scalony, nie na rezystorkach)
Oczywiście zakładając że Pi się wyrobi czasowo i nie ominie jakiegoś zapisu/odczytu.
Mirror i pozostałe - oprócz dopasowania poziomów będą wymagać co najmniej jednego scalaka wspierającego dekodowanie adresów.
(a może jednak CPLD? załatwi i dopasowanie, i dekoder adresów, i bufor danych dla Pi... :) )
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.07.15, 13:09:42
Podejrzewałem, że level shifter będzie potrzebny i to dwukierunkowy... na szczęście to tania sprawa ale automatycznie oznacza zrobienie płytki.
Problemem będzie synchronizacja czasowa RPi, chyba że zamiast Linuxa całość będzie działać bez systemu (co rodzi inne problemy ale już softwarowe,  np. brak akceleracji sprzętowej grafiki itp.)
Jeśli Linux - zdecydowanie musi być bufor na dane (zarówno przy mirrorowaniu jak i przy komunikacji).

Dzięki wielkie za pomoc.
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.09.16, 13:18:12
Projekt posuwa się do przodu. Na ten moment gotowy jest soft po stronie klienta (obecnie to PC), które dekoduje obraz ZX (.scr) i potrafi go wyświetlić (różne opcje skalowania, sztucznego interlace'u i antyaliasingu). Jeśli udałoby się poprawnie zaimplementować podsłuchiwanie pamięci, to przy okazji powstałby dość tani (aczkolwiek wymagający komputera lub RPI) konwerter HDMI do wyświetlenia zawartości ekranu ZX w oknie na PC lub na TV/monitorze.

Obecnie korzystam z Teensy 3.1 do podsłuchiwania szyny ZX Spectrum i pojawił się problem. O ile wydaje mi się, że sygnały RD/WR i MEMREQ odkodowuję poprawnie, o tyle po odczytaniu szyny adresowej dostaję bzdury, a raczej nie to, czego się spodziewałem.

Przykładowo, po uruchomieniu programu BASIC, który POKEuje adres 16384 nigdy nie widzę go po odkodowaniu szyny adresowej przy niskim sygnale WR i MEMREQ. Teensy działa z taktowaniem 96Mhz więc (teoretycznie) powinno się wyrobić z odkodowaniem adresu, w trakcie kiedy Z80 próbuje zapisać dane.

Szynę odkodowuję zgodnie ze algorytmem: A0-bit najmniej istotny, bit A15 << 15. Co może iść nie tak? ZX podczas "jałowej" pracy - czyli uruchomiony kursor BASICa wygląda jakby próbował pisać w wysokie adresy RAM (45-60 KB), nie wykrywam poprawnie zapisu do pamięci video podczas komendy CLS i tak dalej, widzę zapisy do obszaru adresowego ROMu co jest już chyba całkiem bez sensu. Pomyślałem, że może część z tych zapisów to obsługa IO, więc dodałem detekcję IOREQ ale nie poprawiło niczego.

Jedyny pomysł jaki mam na ten moment (po wielu próbach) to ustawianie niskiego stanu WAIT podczas dekodowania adresu (może część bitów zdąży się zmienić podczas odczytywania pinów?)

A może jest prostszy sposób odczytywania pamięci bez konieczności ciasnego dopasowania timingów bezpośrednio z układów pamięci?
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: Phonex w 2016.09.16, 13:34:27
ZX podczas "jałowej" pracy - czyli uruchomiony kursor BASICa wygląda jakby próbował pisać w wysokie adresy RAM (45-60 KB) ..

Może to zapis na stosie? Stos po resecie standardowo jest pod 65xxx.
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.09.16, 14:08:32
Zapis na stosie nie tłumaczy braku zapisów pod adresy video RAMu :(. W każdym razie dzięki za wskazówkę.
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: pear w 2016.09.16, 14:31:00
Może to ULA zakłóca przebiegi (floating bus). Te zapisy do video RAM, to może być odświeżanie przez ULA.
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: trojacek w 2016.09.16, 14:48:04
Pear, wybacz, ale się zgubiłem.
Smok.wawelski napisał, że w obrębie pamięci obrazu nie widać żadnej aktywności.
Poza tym cykl odświeżania nie jest raczej widoczny jako zapis.
Poza poza tym, ULA raczej nic nie odświeża, poza systematycznym siekaniem w pamięć cyklami odczytu?
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: pear w 2016.09.16, 14:57:48
Nie doczytałem :P Ale ... Czy nie jest to tak, że na złączu widać tylko tą stronę szyny, która jest przypięta do procesora ?
Pamięć obrazu jest podłączona do ULA, a do procesora przez rezystory.
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: trojacek w 2016.09.16, 15:07:42
I tak, i nie.
Bo gdyby było tak jak piszesz - procesor nie miałby dostępu do pamięci obrazu, a przecież ma (w 48K właśnie przez rezystory). Ale skoro Z80 jest w stanie odczytać pamięć obrazu poprzez rezystory (470 ohm), to elektronika podłączona do złącza krawędziowego też będzie mogła. Ma ona dokładnie ten sam "punkt widzenia", co CPU.
I tak właśnie działa np. interfejs Spectra.
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: trojacek w 2016.09.16, 17:49:10
Obecnie korzystam z Teensy 3.1 do podsłuchiwania szyny ZX Spectrum i pojawił się problem.

A jaki soft masz zainstalowany? Rozumiem, że Teensy to po prostu MCU na USB i nic więcej.
Pewnie wiesz, że nie do wszystkich pinów możesz podłączać 5V?

Cytuj
Teensy działa z taktowaniem 96Mhz więc (teoretycznie) powinno się wyrobić z odkodowaniem adresu, w trakcie kiedy Z80 próbuje zapisać dane.

Z tego co widzę, to nie 96, a 72 MHz. I jest to zegar procesora - zakładam, że odczyt stanu wejścia wymaga co najmniej kilku komend w asemblerze, więc pojawia się duże ryzyko "przegapiania" istotnych danych.
Nie można tego triggerować np. zmianą sygnału MREQ? Teensy nie ma wejść przerwań?

Cytuj
Jedyny pomysł jaki mam na ten moment (po wielu próbach) to ustawianie niskiego stanu WAIT podczas dekodowania adresu (może część bitów zdąży się zmienić podczas odczytywania pinów?)

Niezły pomysł. Tylko, o ile mnie pamięć nie myli, przy zbyt długim WAIT zaczniesz tracić zawartość górnej pamięci RAM z powodu braku jej odświeżania ;)
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.09.16, 18:17:23
Dokładnie mówiąc, nie mam zapisu pod adres 16384 mimo, że tam robię POKE. CLS nie daje wyraźnego efektu w postaci setek zapisów do obszaru pamięci obrazu - chyba, że jednak nie nadążam z odczytaniem ale musiałbym "mijać" bardzo wiele cykli. Ciężko uwierzyć mając 96Mhz pod ręką.... Jak próbkuję sygnał CLK to widzę 00011100011100 czyli odczytuję jeden sygnał wielokrotnie (liczba powtórzeń przykładowa).

Sprawdzałem dwukrotnie czy podpiąłem prawidłowo sygnały - czy nie ma błędu, że A5 odczytuję jako A8 (czyli 2^7 zamiast do 2^4) i go nie znalazłem (ale pewnie sprawdzę jeszcze raz jak nie znajdę problemu gdzie indziej). Sprawdzałem każdy sygnał oddzielnie i każdy pin czasem jest 1 a czasem 0, co wyklucza brak połączenia.

PS. Przy okazji odpowiem Trojackowi:
Teensy to takie 32bitowe arduino, więc soft napisałem sam - generalnie jest to kilka digitalRead(pin). Używam zegara 72Mhz lub 96Mhz (overclock) ale podobne efekty mam przy ustawieniach na 24Mhz lub 48Mhz - brak zapisów w obszar video RAM.
Teensy ma możliwość triggerowania przerwania ale wtedy musi odłożyć wszystkie rejestry na stos, co również trwa. Ciasny polling pinów jest szybszy - więc jak tylko wykryję WR/MREQ == LOW, to od razu zczytuję A0-A15. Jak robię odwrotnie (tzn. odczytuję cały czas A0-A15) to efekty podobne.

RAM zacznie zanikać dopiero po 100ms WAIT jak wyczytałem z dokumentacji, to całe wieki dla Teensy :)
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: trojacek w 2016.09.16, 18:23:11
Większość RAM ma cykl odświeżania 2 ms, więc w to 100 to raczej bym nie wierzył ;)
Ale skoro nic sensownego nie możesz odczytać, to popełniasz jakiś błąd w metodzie, nie w detalach. Bo jednak od czasu do czasu coś powinno dać się złapać.
Ja bym zaczął łopatologicznie - podłączyłbym bramki pod MREQ, WR, A15 i A14, by uzyskać iloczyn logiczny (MREQ low, WR low, A15 low, A14 high). Tym iloczynem popędziłbym diodę LED :)
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: trojacek w 2016.09.16, 20:50:01
Zrobiłem mały test. Wpiąłem analizator stanów pod linie MREQ, WR, A15 i A14.
Zapisy do pamięci pojawiają się cyklicznie - pewnie ze względu na migający kursor.
Próbkowanie - zaledwie 24 MHz...

Mały update: po dalszej analizie sczytanych analizatorem danych już wiem, że cykliczne zapisy do pamięci były po prostu uaktualnianiem zmiennej systemowej FRAMES. Regularnie co 20 milisekund. A zmienne siedzą w tej samej ćwiartce pamięci RAM, co obraz.
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.09.17, 00:33:26
Wygląda na to, że Teensy się nie wyrabia mimo całej swojej szybkości. Prawdopodobnie zanim odczytam ostatni z 16 bitów zmienia się jego zawartość, stąd bzdurne wartości.
Przy odczycie tylko 2 pinów faktycznie zaczęło działać lepiej - tzn. widzę zapisy w poprawne adresy ale ewidentnie nie wyłapuję wszystkich. Znalazłem dwie metody na przyspieszenie całej operacji ale zaczynam powątpiewać czy uda mi się odczytywać wartości w odpowiednim tempie (w sumie 26 pinów)
W każdym razie wielkie dzięki za pomysły!
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: trojacek w 2016.09.17, 00:39:15
Bo moim zdaniem trochę źle podchodzisz do zagadnienia.
Na szynie masz sygnały adresowe, danych, MREQ i WR - czyli dane do przechwycenia i stroby, mówiące kiedy "strzelić fotkę". Zbuduj 24-bitowy zatrzask (latch) na układach TTL, strobowany iloczynem (MREQ = LOW AND WR = LOW AND A14=HIGH AND A15=LOW). Dane w latchu Ci nie znikną po kilkuset nanosekundach. Ja bym sygnał strobujący puścił też jako przerwanie do procesora, który ma te dane czytać.
Żaden soft ni zastąpi kawałka porządnego hardware'u ;)
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.09.17, 09:51:22
Tak, masz absolutnie rację :) Tylko, że ja chciałem bez budowania płytki - samo Teensy. To co proponujesz jest jak najbardziej dobrym pomysłem, bo w ogóle dekodowanie adresów w software to średni pomysł skoro już 8255 sprzed 30 lat potrafił to w hardwarze. Ale my na tym forum nie jesteśmy raczej normalni i najprostsza droga nie jest zawsze najciekawsza.

Sprawdziłem dokumentację: jeden digitalRead na Teensy trwa ok. 70 mikrosekund - stąd problem. Na szczęście jest metoda na odczytywanie kilku sygnałów za jednym strzałem (trochę jak zastrzask) więc spróbuję tą drogą.

Przy okazji przerwania: przerwanie na tym procesorze będzie mniej efektywne niż ciągły polling pinów - podczas przerwania Teensy odkłada całą masę danych i to trwa dziesiątki cykli, a potem i tak muszę odczytać piny, chociaż na pewno jest rozwiązaniem "eleganckim".
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: trojacek w 2016.09.17, 13:26:45
Po prostu takie rozwiązania trzeba implementować w assemblerze...
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.11.14, 18:56:44
Działa ;)
Teensy 3.5 @168Mhz. Wygląda na to, że czasem się jednak nie wyrabia. Na początek pierwsza próba, potem trochę lepiej... odrobina artefaktów.
W porównaniu do TK Pie niestety biednie ale zawsze coś. Dane czytam przez USB i wyświetlam w aplikacji, która dekoduje ekran Spectrum.

PS. Takie groźne buczenie z beepera to ULA, której się wchodzi w paradę? Chyba niechcący zrekonfigurowałem pin na output...
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: trojacek w 2016.11.14, 19:31:08
Nooo, wygląda to coraz lepiej! Brawo!
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: steev w 2016.11.14, 21:01:54
168MHz? Przetaktowałeś go?
(Aż zacząłem się zastanawiać jak sprawdziłby się w tym przypadku PSoC... Na szczęście nie mam pod ręką żadnej żywej maszynki, żeby się podpiąć i próbować :)
Tytuł: Odp: Akcelerator graficzno-dźwiękowy do Spectrum
Wiadomość wysłana przez: smok.wawelski w 2016.11.14, 22:42:32
@Steev: Tak. Teensy 3.5 chodzi standardowo 120Mhz, przetaktowuje się do 168Mhz. Teensy 3.6 (niestety nie ma tolerancji 5v) pracuje z 180Mhz do 240Mhz stabilnie. Muszę zakupić konwerter 5v-3.3v. Co ciekawe, starszy model - Teensy 3.1 z 96Mhz chodzi stabilnie na 144Mhz. Następna próba na Teensy 3.6 z konwerterami napięć.