1

https://www.quora.com/Does-a-USB-to-PS- … -protocols

Ciekawe, naprawdę stosuje się rdzenie 6502 w takich zastosowaniach?

https://www.youtube.com/watch?v=jofNR_WkoCE

Nie widzę żadnego odniesienia do 6502. To na pewno ten link co trzeba?

Atari: FireBee (Falcon030 CT60e SuperVidel SvEthlana CTPCI) TT (520ST Pak030 Frak PuPla Panther) (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435) (1040STFM UltraSatan SM124) (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224) 260ST, 520 ST+, (MEGA ST SM125) (65XE Rapidus U1MB VBXE SIDE2 SIO2PC) (Jaguar JagCD SkunkBoard GameCart) (Lynx II AgaCart GameCart) 2xPortfolio Hades

3 Ostatnio edytowany przez seban (2021-04-19 16:49:23)

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.

4

Adam Klobukowski napisał/a:

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".

https://www.youtube.com/watch?v=jofNR_WkoCE

5

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

6 Ostatnio edytowany przez seban (2021-04-20 07:38:51)

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.

7 Ostatnio edytowany przez laoo/ng (2021-04-20 08:01:27)

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 :)

8

laoo/ng napisał/a:

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.

Sikor umarł...

9

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.

https://www.youtube.com/watch?v=jofNR_WkoCE

10 Ostatnio edytowany przez seban (2021-04-20 08:42:24)

laoo/ng napisał/a:

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.

Sikor napisał/a:

...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 :)

Fox napisał/a:

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.

11

Fox napisał/a:

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.

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

12

@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...

Sikor umarł...

13 Ostatnio edytowany przez Krótki (2021-04-20 08:51:56)

Fox napisał/a:

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.

A8CAS - narzędzie do 100% archiwizacji kaset Atari

14 Ostatnio edytowany przez seban (2021-04-20 09:09:54)

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 :)

15

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.

16

mormon napisał/a:

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.

17

perinoid napisał/a:

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.

18

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.

https://systemembedded.eu/ ... https://www.youtube.com/watch?v=GwS7Es1x6mw
""Ja bardzo przepraszam, ale podejrzenia panów są całkowicie bezpodstawne. Ja niczym nie handluję. Ta pani przyszła do mnie w tym Pancake-u i w nim wychodzi.""
ABBUC Member #319. Preferowana forma kontaktu: email

19

mormon napisał/a:

A nie można używać TSX/TXS i LDA 256,x do dostępu do innych obiektów na stosie?

dosc czesto stosowany trik - nawet nie trik ale sa wydajniejsze metody. "emulacja" 16-bit rejestrow indeksowych jest dla 6502 zabojcza.

http://atari.pl/hsc/ad.php?i=1.

20

perinoid napisał/a:

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.

https://www.youtube.com/watch?v=jofNR_WkoCE

21

@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.

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

22

Panowie... wątek jest SPRZĘTowy... :-)

https://systemembedded.eu/ ... https://www.youtube.com/watch?v=GwS7Es1x6mw
""Ja bardzo przepraszam, ale podejrzenia panów są całkowicie bezpodstawne. Ja niczym nie handluję. Ta pani przyszła do mnie w tym Pancake-u i w nim wychodzi.""
ABBUC Member #319. Preferowana forma kontaktu: email

23

jaki on tam sprzętowy :) raczej dywagacyjno-research-o-naukowo-edukacyjny :) no i teraz jeszcze będzie offtopicowo-humorystyczny :)

24 Ostatnio edytowany przez Fox (2021-04-20 12:53:09)

seban napisał/a:

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.

seban napisał/a:

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
perinoid napisał/a:

@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?

https://www.youtube.com/watch?v=jofNR_WkoCE

25 Ostatnio edytowany przez pancio.net (2021-04-20 12:24:16)

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 :-)

https://systemembedded.eu/ ... https://www.youtube.com/watch?v=GwS7Es1x6mw
""Ja bardzo przepraszam, ale podejrzenia panów są całkowicie bezpodstawne. Ja niczym nie handluję. Ta pani przyszła do mnie w tym Pancake-u i w nim wychodzi.""
ABBUC Member #319. Preferowana forma kontaktu: email