atarionline.pl Emulacja ANTIC'a na GPU - Forum Atarum

Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

  • :
  • :

Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    • 1:
       
      CommentAuthorgalu
    • CommentTime24 Oct 2021 zmieniony
     
    Działa już test na desktopowym Safari (te wersje co wcześniej - AArch64). Na iPadzie i iPhonie - nie. Potem załączę logi.
    • 2: CommentAuthormrk
    • CommentTime24 Oct 2021
     

    galu:

    Działa już test na desktopowym Safari (te wersje co wcześniej - AArch64)


    Ha, super. W międzyczasie sporo zmian zrobiłem, co pozwala już uruchomić wstępnie emulator: ->link<-

    Na razie nie ma jeszcze kolizji i debuger'a, próbuję też zdebugować dlaczego wolno chodzi na mobile.
    • 3:
       
      CommentAuthorgalu
    • CommentTime27 Oct 2021
     
    Coś było zmieniane? Przestały działać (Safari / macOS): zarówno test (ten z UA), jak i emulator.
    • 4: CommentAuthormrk
    • CommentTime27 Oct 2021
     
    @galu założyłem konto na Scaleway jak kiedyś sugerowałeś, w wolnej chwili postaram się to podebugować. Możesz się też odezwać na ->link<- - może łatwiej będzie szybko przetestować kilka wersji i znaleźć co powoduje problem.
    • 5: CommentAuthormrk
    • CommentTime27 Oct 2021 zmieniony
     
    W ramach testowania nowego renderer'a możecie jeszcze kliknąć
    jeszcze to: ->link<- :)
    • 6:
       
      CommentAuthorgalu
    • CommentTime27 Oct 2021
     
    Zarejestrowałem się (Discord) - odezwę się później. Jak będzie mniej więcej wiadomo czego szukać to zainstaluję narzędzia (Rust / Bevy) i będę mógł udostępnić kiedyś zdalnie kompa (np. TeamViewer) :)
    • 7: CommentAuthorpirx
    • CommentTime27 Oct 2021
     
    o mamciu, działa pięknie ;] ubuntu chromium
    • 8: CommentAuthorgorgh
    • CommentTime27 Oct 2021
     
    kapitalistycznie to działa!
    • 9:
       
      CommentAuthorjhusak
    • CommentTime27 Oct 2021 zmieniony
     
    Haha! A miało się nie dać :D !
    Czaderski ten emulec.
    • 10: CommentAuthormrk
    • CommentTime27 Oct 2021
     
    Przypomnę że przeglądarkowe Gamepad API jest też obsługiwane (choć testowane tylko na Logitech F710)
    • 11:
       
      CommentAuthorKaz
    • CommentTime29 Oct 2021
     
    mrk - bomba! Czyli zbliżamy się do opisu :D
    • 12: CommentAuthormrk
    • CommentTime30 Oct 2021
     
    @Kaz napiszę coś wreszcie, obiecuję :) I może ogłosimy jakiś konkurs na prawdziwą nazwę (jakoś nie jestem przekonany dla "Good Enough Atari Emulator", za długie ;)
    • 13:
       
      CommentAuthorjhusak
    • CommentTime30 Oct 2021
     
    Goodenator.
    • 14: CommentAuthorpirx
    • CommentTime30 Oct 2021
     
    Colleenslaw
    colleen - a800 code name
    coleslaw - chopped raw cabbage-based side dish

    łatwo wymawiać - kolinsław, dodatkowo ma taki jakiś słowiański posmak

    maskotka:


    Logo w załączeniu :)
    • 15:
       
      CommentAuthorpebe
    • CommentTime30 Oct 2021
     
    @mrk:
    W ramach testowania nowego renderer'a możecie jeszcze kliknąć
    jeszcze to: ->link<- :)

    U mnie coś kaszani.
    - na początkowym intrze, na logo JIL migają kolory
    - rysunek wydaje się być skaszaniony :/ (a taki piękny, "amerykański" ;P )
    - ekran z napisami, błędnie widać podkolorowanie
    - we wstępie w pokoju xiężniczki, dywan jest do połowy podkolorowany (prawa część jest czarna)

    poniżej screeny:






    W grze problemów nie dostrzegłem.
    Poza tym, świetna robota.
    • 16: CommentAuthormrk
    • CommentTime30 Oct 2021 zmieniony
     
    @pebe dzięki za zwrócenie uwagi na te szczegóły, część widziałem, ale nie wszystko. Postaram się poprawić, ale pewnie po refaktorze który teraz robię.
    • 17: CommentAuthortebe
    • CommentTime30 Oct 2021
     
    obrazek tytułowy pozycjonuje PMG w rastrze, to taki tryb G2F:PGR tylko że na znakach
  1.  
    U mnie typ ma teraz ze dwa metry, co w sumie wygląda mega spoko.

    Są też różne inne glicze.

    Ale to pewnie przez ten dziwny "Renderer", bo chwilowo siedzę na wegańskim systemie operacyjnym. Zaraz dam znać jak działa z Windows.

    User Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36

    Vendor: Google Inc.

    Renderer: Google SwiftShader
    • 19:
       
      CommentAuthorDracon
    • CommentTime30 Oct 2021
     
    Jaka jest "klawiszologia" w tym emulatorze? Intro itp. poszło ale jak dalej to włączyć?
  2.  
    Na Windows śmiga elegancko!

    User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36

    Vendor: Google Inc. (NVIDIA)

    Renderer: ANGLE (NVIDIA, NVIDIA GeForce RTX 3070 Ti Direct3D11 vs_5_0 ps_5_0, D3D11-30.0.14.9649)
    • 21:
       
      CommentAuthorDracon
    • CommentTime30 Oct 2021
     
    "NVIDIA GeForce RTX 3070 Ti" - zarządziłeś sprzętem, Magistrze! :o :)
    • 22: CommentAuthorlaoo
    • CommentTime31 Oct 2021
     
    Bogacz... ;)
  3.  
    Lol :D
    To do grania w hiroski...
    • 24: CommentAuthormrk
    • CommentTime2 Nov 2021 zmieniony
     
    Ciąg dalszy refaktoryzacji silnika wyświetlania, tym razem działa już renderowanie do tekstury: ->link<-

    Dzięki pomocy @galu powinno działać też w Safari
    • 25:
       
      CommentAuthorDracon
    • CommentTime2 Nov 2021
     
    Ponowię pytanie:
    Jaka jest "klawiszologia" w tym emulatorze, tzn. co odpowiada za "fire", itp. ?
    • 26: CommentAuthormrk
    • CommentTime2 Nov 2021
     
    Klawisze od F1-F5 to Help, Start, Select, Option, Reset
    Strzałki + shift to emulowany joystick

    Powinien działać też gamepad
    • 27: CommentAuthorlaoo
    • CommentTime2 Nov 2021
     

    jhusak:

    Haha! A miało się nie dać :D !
    Czaderski ten emulec.


    Z tego co pamiętam, to sceptyczne głosy były tylko w jednym temecia, do podsumowania którego mogę zacytować

    Alex:

    GPU nijak nie nadaje się do uproszczonego generowania obrazu w emulatorze.


    Można to zrobić, jak widzimy na załączonym obrazku, ale koszt tej decyzji projektowej zamyka się w tymczasowej nazwie emulatora. Niestety na aktualnej architekturze obrazków z RastaConvertera się nie obejrzy.

    Wydaje mi się, że aktualnie ten aspekt jest dość małym wycinkiem całego przedsięwzięci i kto wie, może nawet mrk udałoby się zmieć architekturę, żeby to nie było "good enough" emulator.
    • 28:
       
      CommentAuthorjhusak
    • CommentTime2 Nov 2021 zmieniony
     
    @laoo, oczywiście. Emulatory mogą mieć różny stopień emulacji. Ograniczenia przedmiotowego emulatora są dość spore, ale i tak 99% produkcji, zwłaszcza starszych na tym pójdzie (w sensie są bardzo duże szanse). Gorzej z demami.

    Ja po prostu pamiętam ten sceptycyzm u ludzi znających ograniczenia GPU i jednocześnie z podejściem "wszystko albo nic". A tu nie zawsze o to chodzi :)
    • 29: CommentAuthorpirx
    • CommentTime2 Nov 2021
     
    co powinno być szczególnie podkreślane od czasu, gdy p. John B. Goodenough otrzymał nagrodę Nobla w 2019r :]
    • 30: CommentAuthormrk
    • CommentTime2 Nov 2021 zmieniony
     

    jhusak:

    Ograniczenia przedmiotowego emulatora są dość spore, ale i tak 99% produkcji, zwłaszcza starszych na tym pójdzie (w sensie są bardzo duże szanse). Gorzej z demami.

    Z produkcjami nowymi też nie jest źle, dobrze chodzi na przykład LastSquadron, Albert, Flob czy teraz PoP (nie mówię o jakichś glitch'ach które gdzieniegdzie widać, bo to wszystko do poprawienia jeszcze. Na razie poświęciłem bardzo mało czasu na debugowanie / poprawianie takich drobiazgów).

    Generalnie wszystko co nie zmienia rejestrów antic'a / gtia w trakcie rysowania linii powinno się dobrze docelowo renderować, a to jednak przeważająca ilość softu.

    Czy taki kompromis jest opłacalny? Moim zdaniem jest.

    laoo:

    Wydaje mi się, że aktualnie ten aspekt jest dość małym wycinkiem całego przedsięwzięci i kto wie, może nawet mrk udałoby się zmieć architekturę, żeby to nie było "good enough" emulator


    Masz rację, docelowo powinno dać się napisać backend wyświetlania CPU-only, nie działający gorzej niż taka Altirra. Swoją drogą chętnie wtedy przetestuję o ile wzrośnie zużycie tego pojedynczego rdzenia CPU, bo wydaje mi się że jednak znacząco (polecam na zerknięcie na kod shader'a który obecnie emuluje antic'a / gtia: ->link<- - funkcja 'fragment' licząca kolor pixel'a i licząca kolizje uruchamiana jest dla każdego pixel'a oddzielnie, co ciekawe część operacji tam jest wektorowa)
    • 31: CommentAuthormrk
    • CommentTime2 Nov 2021 zmieniony
     
    Swoją drogą to nie zmiany rejestrów w trakcie wyświetlania linii okazały się najbardziej problematyczne, tylko implementacja w miarę działającego wykrywania kolizji na GPU, i z tego jestem chyba najbardziej zadowolony :) Problemem jest to, że cały obraz jest rysowany z opóźnieniem (przygotowywana jest cała ramka do wyświetlenia na raz) i siłą rzeczy kod wykrywania kolizji też jest uruchamiany z opóźnieniem (w trakcie wyliczania koloru piksela). Informacje o kolizjach pobierane są raz na ramkę. A udaje się dostarczyć procesorowi zmiany w rejestrach kolizji z dokładnością co do linii wyświetlania, polecam samodzielną rozkminę jak to zrobić :)
    • 32: CommentAuthormrk
    • CommentTime2 Nov 2021
     

    laoo:

    Niestety na aktualnej architekturze obrazków z RastaConvertera się nie obejrzy.


    Hehe, prawda: ->link<-

    Natomiast zastanawiam się czy aż tak źle to powinno wyglądać :)
    • 33: CommentAuthorlaoo
    • CommentTime2 Nov 2021
     
    No fakt, że spektakularnie. Rasta zdaje się poza zmianami rej. kolorów przesuwa też sprajty (ale nie wiem, czy nie bredzę).

    Ogólnie ja doskonale rozumiem chęć zrównoleglania pracy na GPU, bo to też było moim konikiem (aczkolwiek w czasach gdy shadery się jeszcze optymalizowało i nie pisało się całych dem w jednym shaderze), ale po prostu obraz nie jest generowany równolegle. Myślę, że to jest możliwe, ale w jakiś bardziej zawiły sposób, może jakoś w pionie w kilku przebiegach. Tylko że to wciąż zagadnienie akademickie bo rozmiar problemu jest zbyt malyy, by takie podejście dało zauważalną różnicę w wydajności.
    • 34: CommentAuthormrk
    • CommentTime2 dni temu zmieniony
     
    Update:
    * użycie biblioteki egui do rysowania GUI w oknie emulatora (docelowo zastąpi pewnie interfejs w HTML'u)
    * reaktywacja debugger'a (UI pojawia się po podjechaniu do górnej krawędzie ekranu)
    * poprawiony tryb fullscreen (bardzo pomocny przy używaniu debuggera)
    * pierwsza wersja obsługi zapisu obrazów ATR

    Dzięki debuggerowi zacząłem poprawiać błędy w samym emulatorze (na przykład można już popykać (w oczekiwaniu na wersję fizyczną :) w ->link<- )

    Robienie GUI w egui to jakaś igraszka, więc w najbliższym czasie debugger powinien stać się bardziej używalny (wszelkie sugestie miele widziane), dodam pewnie też jakąś konfigurację emulatora (zapisywaną w localStorage przeglądarki)
    • 35: CommentAuthortebe
    • CommentTime2 dni temu
     
    takie pytanie? czy jest możliwość podobnie jak w jednej z wersji Atari800Win dodać zapis zestawów znaków składających się na wyświetlany obraz, albo jeszcze lepiej wszystkich rejestrów GTIA

    w załączniku wersja Atari800Win_FontRipper
    • 36: CommentAuthorilmenit
    • CommentTime2 dni temu
     
    Właśnie testuję zapis w ->link<- - wygląda na to, że działa po "Restart (Cold)" ale już po F5 w przeglądarce jest tracone. Czekam na więcej, emulator w przeglądarce jest mega.
    • 37: CommentAuthormrk
    • CommentTime2 dni temu zmieniony
     
    @tebe Hmm. Nowy format obrazu który zawiera display listę, dump'y pamięci ekranu i zestawu znaków + rejestry GTIA co linię? Dokładnie takie dane wysyłam do GPU teraz co ramkę do wyrenderowania i dość łatwo by było dodać opcję pobrania takich danych.
    • 38: CommentAuthormrk
    • CommentTime2 dni temu zmieniony
     
    @ilmenit - przeglądarka rządzi się swoimi prawami, domyślnie nie ma dostępu do systemu plików i zmienione dane trzymane są w pamięci po prostu i zapisywane dopiero jak się kliknie save (później można wczytać zapisany obraz). Można zapisywać te dane automatycznie w Indexed DB (i / albo jakichś sieciowych dyskach), ale trzeba przemyśleć dobrze jak to ma działać (sama implementacja potem będzie prosta).
    • 39: CommentAuthorilmenit
    • CommentTime2 dni temu
     
    A gdyby wykorzystać local storage? Ma chyba limit 5MB dla każdej apki. ->link<-
    • 40: CommentAuthormrk
    • CommentTime1 dzień temu zmieniony
     
    @ilmenit jasne (zresztą wykorzystuję już do trzymania jakichś ustawień konfiguracyjnych typu log level czy latency dla web audio). Myślałem o IndexedDB, bo tam nie ma tego ograniczenia 5MB nawet. Można też użyć biblioteki ->link<- - i zapisywać pliki chociażby w Dropbox'ie

    Większym problemem jest sensowne zaprojektowanie jak to ma działać razem z ATR'ami podanymi jako URL. Może zapisywać automatycznie taki ATR lokalnie jeżeli jeszcze nie istnieje, jeżeli istnieje to po prostu montować tą lokalną wersję (kluczem mógłby być po prostu url atr'a). Przy okazji działało by to jako cache (teraz te atr'y są też keszowane, tyle że w cache przeglądarki).

    Wypadało by też pewnie zrobić jakąś przeglądarkę tych lokalnie zapisanych ATR'ów z możliwością montowania w emulatorze / usuwania / eksportowania do systemu plików / importowania.