Temat: 6502 w przejściówce do myszki?
https://www.quora.com/Does-a-USB-to-PS- … -protocols
Ciekawe, naprawdę stosuje się rdzenie 6502 w takich zastosowaniach?
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
thing neo 1.60 Olivier Landemarre wydał nową wersję desktopu Thing.
VIII. Basque Tournament of Atari 2600 Kolejna relacja, wśród otrzymywanych od naszego przyjaciela Egoitza z Kraju Basków.
Przezroczysta obudowa dla Atari 800XL Rusza przedsprzedaż wyjątkowej, przezroczystej obudowy do komputera Atari 800XL!
RECOIL 6.4.5 RECOIL to przeglądarka retro plików graficznych, obsługująca ponad 550 formatów, dostępna na różnych systemach operacyjnych, z regularnymi aktualizacjami.
ABBUC Software 2024 - wyniki Ukazały się wyniki tegorocznego ABBUC Software Competition
Zaloguj się lub zarejestruj by napisać odpowiedź
https://www.quora.com/Does-a-USB-to-PS- … -protocols
Ciekawe, naprawdę stosuje się rdzenie 6502 w takich zastosowaniach?
Nie widzę żadnego odniesienia do 6502. To na pewno ten link co trzeba?
Szczerze mówiąc wątpię, nie widziałem żadnego CPU opartego o rdzeń 6502 z wbudowanym "serial engine" do obsługi USB. Jeżeli już ktoś tworzy takie "hybrydy" oparte o jakiś 8-bitowy rdzeń, to są to raczej rdzenie zgodne z 8051. Lub takie dla których został opracowany jakiś sprawdzony/komercyjny/porządny kompilator języka C, najlepiej ze wsparciem producenta.
Oczywiście to że ja nie widziałem żadnego rdzenia 65xx ze zintegrowanym USB, nie znaczy że takim wcale nie ma, bo być może istnieją ale są mało popularne w regionach EU, czy USA. Być może ktoś w Azji wpada na tak szalone pomysły :)
Patrząc na te przejściówki z którymi miałem styczność, to były zwykłe przelotki (zero elektroniki w środku), obsługę USB lub PS/2 realizował MCU który znajdował się w myszce... to właśnie ten MCU orientował się podczas startu do jakiego interface jest podpięty i uruchamiał odpowiedni kawałek softu w zależności od tego do jakiego interface myszka została podłączona. W przypadku PS/2 dwa piny I/O stawały się liniami CLK, DATA w przypadku gdy podłączono mysz do USB, MCU konfigurował piny tak że stawały się liniami D+, D- interfejsu USB.
Ostatnio edytowany przez seban (2021-04-19 16:49:23)
Nie widzę żadnego odniesienia do 6502. To na pewno ten link co trzeba?
Pod zdjęciem adaptera: "It has a full-fledged computer inside it, usually a simple embedded processor with a 6502 core".
Warunkiem de facto koniecznym do stosowania 6502 w takich nietrywialnych miejscach jest istnienie dobrego kompilatora C, tak jak wspomniał Seban. Ja żadnego nie znam. Wiem o istnieniu komercyjnych kompilatorów C, ale nie mam zielonego pojęcia jakiej one są jakości, bo na oczy żadnego nie widziałem. Nawet WDC ma swój kompilator
O... jak pisałem tego posta, to odkryłem, że narzędzia programistyczne od WDC są dostępne za free: https://wdc65xx.com/WDCTools
Te narzędzia jeszcze do nie tak dawna nie były darmowe... rzuciłem na nie okiem w momencie kiedy WDC udostępniło je, ale nie byłem zachwycony tym co wypluwał ten kompilator. Do tego instrukcja i sam kompilator i linker wydawały mi się strasznie toporne i chwilę mi zajęło zanim poprawnie udało się skompilować cokolwiek :)
Zresztą nie oszukujmy się... 6502 nie jest przyjaznym procesorem jeżeli chodzi o kompilatory, w większości przypadków tam gdzie ktoś wkłada 65xx pisanie w C mija się z celem, bo kod wygenerowany przez kompilator przy małym projekcie jest tak duży że tracimy połowę zasobów tylko dlatego że "kompilator".
Widziałem kiedyś też to co generuje komercyjny kompilator IAR-a, mimo że firma ma długą tradycję w pisaniu kompilatorów i ich kompilator robił co mógł, to kod nie był również zachwycający, niestety jak pisałem już wcześniej same ograniczenia architektury powodują że nie da się wygenerować sensownego kodu przy bardziej złożonych "konstrukcjach językowych". Może w przypadku 65816 jest lepiej, ale tutaj nie mogę się wypowiedzieć bo nie zajmowałem się analizą kodu wygenerowanego dla 65816 przez jakikolwiek kompilator.
Ostatnio edytowany przez seban (2021-04-20 07:38:51)
Parę minut się pobawiłem i faktycznie, nie dość, że d... nie urywa, to nawet kod wynikowy wygląda na gorszy niż cc65. Ciekawostką jest, że jak przypadkiem zrobiłem błąd w kodzie źródłowym, to zamiast dostać komunikat, to dostałem crash kompilatora :)
6502 w istocie nie jest przyjazdy dla języków wysokiego poziomu z ich tradycyjnymi konstrukcjami (stos, struktury), ale wierzę, że przy odpowiednim wysiłku dałoby się zrobić to dobrze. Tylko nikt, kto potrafi nie ma czasu, a kto ma czas, to nie potrafi :)
Ostatnio edytowany przez laoo/ng (2021-04-20 08:01:27)
6502 w istocie nie jest przyjazdy dla języków wysokiego poziomu z ich tradycyjnymi konstrukcjami (stos, struktury), ale wierzę, że przy odpowiednim wysiłku dałoby się zrobić to dobrze.
...co chyba obserwujemy w MadPASCAL TeBe-go ;) Nie używam, ale tak mi się wydaje.
Dzięki za odpowiedzi! Autor posta chyba popłynął. W komentarzu ktoś mu wytknął, że nie wszystkie myszki działają z pasywną przejściówką.
Hmmm, nie szukają w tym WDC inżyniera kompilatora? ;)
Z C na 6502 są dwa podstawowe problemy:
większość kodu operuje na intach, które są co najmniej 16-bitowe
mocno używany jest stos, a 6502 oferuje tylko dostęp do elementu na wierzchu i ma mały stos
65816 rozwiązuje oba te problemy. Nie widziałem kodu wygenerowanego dla 65816, ale mogę się założyć, że jest znacznie bardziej wydajny, niż dla 6502.
6502 w istocie nie jest przyjazdy dla języków wysokiego poziomu z ich tradycyjnymi konstrukcjami (stos, struktury), ale wierzę, że przy odpowiednim wysiłku dałoby się zrobić to dobrze. Tylko nikt, kto potrafi nie ma czasu, a kto ma czas, to nie potrafi :)
Kiedyś liczyłem na to że KickC ma szansę stać się całkiem fajnym kompilatorem, ale prawdę mówiąc przestałem śledzić zmiany i postępy w projekcie, bo miał on fazę kompletnego zastoju.
...co chyba obserwujemy w MadPASCAL TeBe-go ;) Nie używam, ale tak mi się wydaje.
Z MadPascalem mam ten problem że to Pascal, to był co prawda jeden z pierwszych języków (po BASIC, ASM, etc.) których się uczyłem, ale gdy tylko przesiadłem się na C, to pisanie w Pascalu jakoś przestało być, hmmm... no nazwijmy to "atrakcyjne". Doceniam oczywiście starania TeBe i ogrom pracy który włożył w MadPascala, ogromny szacun za to! Ale sam Pascal jakoś mnie odrzuca, być może mam jakieś bezsensowne uprzedzenia i pewnie gdybym posiedział i przystosował się ponownie to by to jakoś poszło, ale ja po prostu robię za małe rzeczy aby wytaczać taką armatę jak MadPascal to moich prostych/prymitywnych projekcików... jestem jeszcze z tego pokolenia dla którego pisanie w pure ASM to czysta radocha :)
Z C na 6502 są dwa podstawowe problemy:
większość kodu operuje na intach, które są co najmniej 16-bitowe
mocno używany jest stos, a 6502 oferuje tylko dostęp do elementu na wierzchu i ma mały stos
65816 rozwiązuje oba te problemy. Nie widziałem kodu wygenerowanego dla 65816, ale mogę się założyć, że jest znacznie bardziej wydajny, niż dla 6502.
Ponieważ się "nie znam" to się wypowiem ;) Wydaja mi się że w przypadku 65xx i C problemem stają się również operacje które wymagają użycia dużej ilości wskaźników, przykładowo:
ctx->iocb.len = 256;
będą również kłopotliwe do prostej/optymalnej realizacji za pomocą "zasobów" które są dostępne w 65xx.
Do kompletu jakieś nie ma mowy o ramkach stosu, etc. Trzeba tak naprawdę emulować "duży" stos, jeżeli chcemy mieć możliwość operowania na większych strukturach danych, czy lokalnych zmiennych znajdujących się na stosie.
Ostatnio edytowany przez seban (2021-04-20 08:42:24)
Z C na 6502 są dwa podstawowe problemy:
większość kodu operuje na intach, które są co najmniej 16-bitowe
mocno używany jest stos, a 6502 oferuje tylko dostęp do elementu na wierzchu i ma mały stos
Myślisz zbyt "szablonowo" - język wejściowy to jedno, kod generowany to drugie. Można spokojnie napisać kompilator, który wsiorbie kod w C a wypluje bytecode dla maszyny wirtualnej Javy. Bez żadnego problemu. Kwestia określenia maszyny docelowej. To zadanie dla studenta 3-go roku informatyki (z sensownej uczelni). Można więc wygenerować taki kod, żeby był odpowiednio wydajny.
Inną sprawą jest to, jak faktycznie robią to kompilatory C generujące kod dla Atari, które mamy. Ja bawiłem się chwilę cc65, napisałem sobie w nim jakiś kawałek kodu robiący prosty efekt (paletę 256 kolorów i, osobno, taki "bouncing scroll") ale przyznam, że nie przyglądałem się temu jak wygląda wygenerowany kod maszynowy.
@seban: no, ja asm to prawie nie znam, ale jakoś też mi się lepiej pisze drobnostki w C niż w Pascalu. Ale wiem, że to tylko przyzwyczajenia, ale im jestem starszy, tym jakoś mam mniej czasu na własne sprawy... A może to wina sytuacji i zmęczenia zdalną pracą, czego nie wykluczam...
Dzięki za odpowiedzi! Autor posta chyba popłynął.
Nie popłynął. Pogóglałem chwilkę i dokopałem się do mikrokontrolera CHESEN CSC0101A.
EDIT: oraz do konwertera Speed-Link SL-6502, ale tu chodzi i o inne PS2, i o inne 6502, mwahaha.
Ostatnio edytowany przez Krótki (2021-04-20 08:51:56)
Wow! No to tak jak myślałem... "zawsze można liczyć na braci z Azji" :D Prawdę mówiąc jestem zdziwiony że użyli właśnie rdzenia 65xx... zdziwiony to nawet mało powiedziane. O ile słyszałem o stosowaniu rdzeni podobnych do 65xx w układach skalerów do monitorów, to nie sądziłem że ktoś będzie integrował ten rdzeń z jakimś kawałkiem "Serial Engine" obsługującego USB, szczególnie w chwili kiedy dostępnych jest bazylion rozwiązań opartych np. 8051 czy inne 8-bitowce z o wiele większym wsparciem i bardziej rozbudowanymi bibliotekami do obsługi wszystkiego.
EDIT:
idąc tropem który pokazał Krótki, można znaleźć tego więcej: http://www.weltrend.com.tw/en-global/pr … /66/83/252
i dla zainteresowanych nota katalogowa: WT65F1, i jeszcze jedna trochę bardziej "rozbudowana": WT65F1 JTech.
Patrząc na zasoby tego typu wynalazków, wątpię aby dało się sensownie użyć jakiegoś języka wyższego poziomu. Zapewne cały soft zawarty w tego typu przejściówce powstawał w ASM.
btw. mam te przejściówki, w środku jest wersja "scalaka" bez obudowy i wyprowadzeń, czyli krzem położony na płytkę drukowaną, drutowany do PCB i zalany plasticzanym blobem :)
Ostatnio edytowany przez seban (2021-04-20 09:09:54)
Też się nie znam, ale się wypowiem ;). A nie można używać TSX/TXS i LDA 256,x do dostępu do innych obiektów na stosie? Zawsze się zastanawiałem czy ktoś w ogóle myślałem o wykorzystywaniu tego do zrobienia kompilatora języka opartego o stos.
Też się nie znam, ale się wypowiem ;). A nie można używać TSX/TXS i LDA 256,x do dostępu do innych obiektów na stosie? Zawsze się zastanawiałem czy ktoś w ogóle myślałem o wykorzystywaniu tego do zrobienia kompilatora języka opartego o stos.
Da się oczywiście i w ten sposób, ale stos jest po prostu za mały aby dało się nieco bardziej skomplikowane rzeczy w ten sposób zrealizować, nie wiem jak jest dokładnie w CC65 (trzeba by podpytać np. Fox-a) ale wydaje mi się że stos jest emulowany (przynajmniej gdy wybierzemy "większy model pamięci/adresowania"). Niestety narzut kodu przy realizacji w tego w ten sposób jest dość spory i mam wrażenie że wydajność kodu generowanego przez kompilator drastycznie spada.
Myślisz zbyt "szablonowo" - język wejściowy to jedno, kod generowany to drugie.
To, że kompilatory istnieją, to jedno, a jaki generują kod, to drugie. Problem jest wielowarstwowy, ale chyba kwintesencją mogłoby być to, że języki programowania ewoluowały razem z procesorami w swoistym sprzężeniu zwrotnym i współczesny kod w C, taki jak się robi go zgodnie ze sztuką nijak ma się do możliwości 6502, za to świetnie współgra z możliwościami współczesnych procesorów. Ja jestem pod wielkim wrażeniem jakie cuda potrafi wygenerować Clang na x64, arm, czy riscv, ale podejrzewam, że backend na 6502 mógłby nie być już taki spektakularny, gdyż 6502 może nie spełniać minimalnych wymagań maszyny na jaką Clang jest w stanie cokolwiek sensownego wygenerować. Jako konkretne problemy można wymienić chociażby kwestie zarządzania pamięcią na tymczasowe zmienne lokalne (naturalny jest stos, który na 6502 trzeba emulować, bo sprzętowy jest mały i trudno dostępny), popularne wzorce adresowania pamięci (które nie mają wsparcia w 6502 przez jego dość specyficzne tryby adresowania), czy rozmiar operandów (dla 6502 nawet 16-bitów jest trudne i pisząc w asemblerze unika się tego sztuczkami, na które niekoniecznie możne sobie pozwolić kompilator nie znający kontekstu i tego co programista miał na myśli).
@mormon
Oczywiście da się zrobić tak jak zaproponowałeś. Tak się nie robi tylko dlatego, że programując w asemblerze nie używa się do tego stosu, a programując w języku wysokiego poziomu nie używa się do tego stosu sprzętowego, bo jest niebezpiecznie mały.
Ten WT65F1 to nawet fajna zabawka... 3 porty I/O w tym jeden z High Current. Aż kusi by się pobawić.. ale niestety.. jest słabo dostępny... na Ali sztuka kosztuje 140 zł. Więc odpada.
Myślisz zbyt "szablonowo" - język wejściowy to jedno, kod generowany to drugie. Można spokojnie napisać kompilator
(...)
nie przyglądałem się temu jak wygląda wygenerowany kod maszynowy.
Ciekawe podejście do problemu.
@Fox: Możesz wyspecyfikować, o co ci chodzi? Czego według ciebie nie zrobiłem lub co zrobiłem a nie powinienem? I przede wszystkim, czemu powinienem byl tak zrobić (lub nie)? Konkrety proszę. Przyglądałem się fragmentom, np. jak robiona jest pętla dla tablicy dłuższej niż jedną strona albo jak jest robione memcpy. Ale całego kodu nie przeglądałem bo nie było to dla mnie interesujące.
Panowie... wątek jest SPRZĘTowy... :-)
jaki on tam sprzętowy :) raczej dywagacyjno-research-o-naukowo-edukacyjny :) no i teraz jeszcze będzie offtopicowo-humorystyczny :)
nie wiem jak jest dokładnie w CC65 (trzeba by podpytać np. Fox-a) ale wydaje mi się że stos jest emulowany (przynajmniej gdy wybierzemy "większy model pamięci/adresowania"). Niestety narzut kodu przy realizacji w tego w ten sposób jest dość spory i mam wrażenie że wydajność kodu generowanego przez kompilator drastycznie spada.
ABI cc65 stosuje do argumentów i zmiennych lokalnych stos programowy. Na stronie zerowej jest wskaźnik o identyfikatorze "sp". Stos sprzętowy jest używany tylko do adresów powrotu i na dane tymczasowe. Odczyt z wierzchołka stosu programowego wygląda tak:
ldy #1
lda (sp),y
tax
dey
lda (sp),y
Na tej zasadzie mamy dostęp do wierzchnich 256 bajtów stosu.
Wydaja mi się że w przypadku 65xx i C problemem stają się również operacje które wymagają użycia dużej ilości
wskaźników, przykładowo:ctx->iocb.len = 256;
Tu widzę tylko jeden wskaźnik: ctx. Zagnieżdżone struktury mają offsety będące stałymi czasu kompilacji.
; AX=ctx
sta ptr
stx ptr+1
ldy #offsetof(ctx_iocb.len)
lda #<256
sta (ptr),y
iny
lda #>256
sta (ptr),y
@Fox: Możesz wyspecyfikować, o co ci chodzi? Czego według ciebie nie zrobiłem lub co zrobiłem a nie powinienem? I przede wszystkim, czemu powinienem byl tak zrobić (lub nie)? Konkrety proszę. Przyglądałem się fragmentom, np. jak robiona jest pętla dla tablicy dłuższej niż jedną strona albo jak jest robione memcpy. Ale całego kodu nie przeglądałem bo nie było to dla mnie interesujące.
Twierdzę, że wydajność kodu zależy od tego, czy ISA jest dostosowana do semantyki języka programowania.
Twierdzisz, że "można spokojnie napisać kompilator", "Bez żadnego problemu", "zadanie dla studenta 3-go roku informatyki", ale nawet nie zajrzałeś do wyników cc65, nie wspominając o jego algorytmach optymalizacji.
Jeśli nie było to dla Ciebie interesujące, to skąd tak śmiałe tezy?
Ostatnio edytowany przez Fox (2021-04-20 12:53:09)
Ja to wiem jedno...wątek humorystyczny i owszem ale jak już xxl się dołączył to wróżę mu szybki koniec jako takiego :-) no chyba, że to będzie czarny humor :-)
@xxl - bez urazy :-)
Ostatnio edytowany przez pancio.net (2021-04-20 12:24:16)
Zaloguj się lub zarejestruj by napisać odpowiedź
[ Wygenerowano w 0.098 sekund, wykonano 13 zapytań ]