atarionline.pl Emulacja POKEY'a w przeglądarce - 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: CommentAuthortebe
    • CommentTime4 Oct 2021
     
    "Zrozumieć, o co chodzi z tym nowym hype’m" :)

    ->link<-
    • 2: CommentAuthormrk
    • CommentTime4 Oct 2021 zmieniony
     
    @tebe
    Nie taki znowu nowy ten hype, sam język z tego co widzę na wikipedii ma już 11 lat, ja swój pierwszy projekt w nim zacząłem robić jakieś 2.5 roku temu (związany z atari zresztą ->link<- )

    A podsumowanie które podesłałeś bdb
    • 3:
       
      CommentAuthorbocianu
    • CommentTime4 Oct 2021
     
    podsumowanie bardzo dobre, mój kolega z pracy to pisał :D
    • 4: CommentAuthorastrofor
    • CommentTime4 Oct 2021 zmieniony
     
    W skrócie rust to petarda jak c++, tylko nowocześniejsza, na której i tak większość programistów średniego poziomu połamie sobie zęby. Ps trochę offtopic. Czy ktoś coś kiedyś robił w objective-c?
    Dla mnie ten język to szczyt nie-inuicyjności, nieczytelności, po prostu koszmar.Czy tylko jak tak mam ?
    • 5:
       
      CommentAuthorjhusak
    • CommentTime4 Oct 2021 zmieniony
     
    Jedyny czytelny język od zawsze, to C. Na równi z pythonem. Pascal już sporo przegadany.

    Jak to mój kolega powiedział, każdy programista przez 90% czasu czyta kod, przez 10% czasu go pisze. Więc tworzenie nieczytelnego języka nie ma sensu.
    • 6: CommentAuthortebe
    • CommentTime4 Oct 2021
     
    punkt widzenia zależy od punktu siedzenia ;)
    • 7: CommentAuthor0xF
    • CommentTime4 Oct 2021
     
    Ja całkiem rozumiem tylko asembler 6502.

    Jeśli chodzi o C, to miesiąc temu dowiedziałem się o tym: ->link<-
    • 8: CommentAuthorilmenit
    • CommentTime4 Oct 2021 zmieniony
     
    @0xF - wliczając (z pamięci) działanie overflow flag? ->link<- ;)
    A odnośnie używania w C (lub jakimkolwiek innym języku) konstrukcji, które może działają, ale nie zrozumie ich większość programistów, to powinien być to powód zwolnienia z zakazem wykonywania zawodu. Chyba, że autor potrafi uzasadnić czemu używa np. ->link<- (różne dziiiwne sztuczki do przyspieszenia kodu widziałem np. w interpreterach).
    • 9: CommentAuthorilmenit
    • CommentTime4 Oct 2021
     
    @mrk - sorry za jeszcze większy off-topic, ale czy oprócz Rusta testowałeś też Ziga? Mniej popularny ale ludzie też na jego punkcie szaleją.
    • 10:
       
      CommentAuthorjhusak
    • CommentTime4 Oct 2021 zmieniony
     
    @0xF, napisz dokładniej, co Cię zaskoczyło :) Tam jest kilka rzeczy, które mogą być zaskakujące, pewnie to dziwne odwołanie a->m :)
    Ja np. często stosuję konstrukcję typu:
    "0123456789ABCDEF"[i]

    (oczywiście na Atari, bo normalnie się sprintfa w tym przypadku używa)
    a czasem nawet jeszcze większe wygibasy, jak sobie przypomnę, to zapodam.
    Generalnie nie czuję się jakimś-tam guru od C, ale jak się wie co jest czym (że tablica to nakładka na wskaźniki) to łatwo się to rozkminia.
    --edit--
    O mam.
    printf("%d\n",(int[3]){1,2,3}[1]); 

    co jest przydatne do mapowania tu i teraz, np.:
    bit=0 albo 1;
    putchar((char[2]){'0','1'|0x80}[bit]);

    i otrzymujemy bit zgaszony 0 a w inwersie 1 (na Atari)

    Co nie zmienia faktu, że C jest dość dobrze wyważony pod względem i czytelności i ilości kodu do napisania (tu jest prawie optymalnie) I ma smaczki :) Po ponad 40 latach nieźle się broni :)

    @ilmenit, w sumie ten Duff's device to nawet gdzieś zastosowałem o tym nie wiedząc :)

    W sumie jak się całe życie w C robi... Pamiętam ciężkie początki za dzieciaka, te wskaźniki do wskaźników, kropki etcetery, pirx mi tłumaczył :)
    • 11: CommentAuthormrk
    • CommentTime4 Oct 2021 zmieniony
     
    @ilmenit nie, ale z tego co widzę używa LLVM jako backendu, więc może i na 6502 będzie się dało kiedyś coś skompilować ;)
    • 12: CommentAuthor0xF
    • CommentTime4 Oct 2021 zmieniony
     
    wliczając (z pamięci) działanie overflow flag

    Tak. To nie jest takie trudne: ->link<-
    Coś trudniejszego to:
    asl @
    adc #$80
    rol @


    Duff's device to klasyka. Kiedyś dostałem pytanie o to na rozmowie rekrutacyjnej. Natomiast w praktyce nie widziałem go użytego. Od przynajmniej dwóch dekad nie ma sensu, bo kompilatory same rozpętlają.

    napisz dokładniej, co Cię zaskoczyło

    No nie spodziewałem się, że na tablicy działa "->".
    "0123456789ABCDEF"[i]

    jest normalne, dziwne jest:
    i["0123456789ABCDEF"]

    i teraz powiedz mi, że C jest czytelny.

    ale jak się wie co jest czym (że tablica to nakładka na wskaźniki)

    No właśnie nie.
    extern int a[];
    extern int *p;

    Jest duża różnica.
    printf("%d\n",(int[3]){1,2,3}[1]); 

    Z głowy to wygląda jak GNU extension.

    Co nie zmienia faktu, że C jest dość dobrze wyważony pod względem i czytelności i ilości kodu do napisania (tu jest prawie optymalnie)

    Ma swoje zastosowania. Natomiast brakuje operacji na tekście i kolekcjach o nieustalonym rozmiarze.
    • 13: CommentAuthormrk
    • CommentTime4 Oct 2021 zmieniony
     

    0xf:

    jest normalne, dziwne jest: i["0123456789ABCDEF"]

    E tam, trzeba tylko pamiętać że a[b] to syntatic sugar dla *(a+b) i wtedy to oczywista oczywistość ;) ->link<-
    • 14:
       
      CommentAuthorjhusak
    • CommentTime5 Oct 2021
     
    To miałem na myśli, że tablica to nakładka na wskaźniki. Z tego *(a+b) wynika wszystko co napisane wyżej o tablicach :)
    • 15:
       
      CommentAuthorlaoo
    • CommentTime5 Oct 2021 zmieniony
     

    mrk:

    A podsumowanie które podesłałeś bdb

    No tak nie do końca, bo pan, który to pisał, brzmi jakby edukację C++ zakończył w latach 90-tych na książkach Grębosza i bez sensu porównywać antyczny C++ z nowym językiem. Nikt już teraz nie robi new i delete, a "każdą" pamięć ładuje się w shared_ptr/unique_ptr i tam tak samo mamy moving i borrowing. Jedyne co może się stać, to zrobić sobie krzywdę cyklem jak się nieumiejętnie połączy wskaźniki. To raczej wiedza elementarna.
    • 16: CommentAuthor0xF
    • CommentTime5 Oct 2021
     
    Zgadzam się z Laoo.

    Poza tym:

    Zabezpiecza przed wyciekiem pamięci? Jeśli mamy do dyspozycji kolekcję o zmiennym rozmiarze, to wyciek pamięci jest możliwy.

    Nie rozumiem, dlaczego brak OOP jest zaletą?

    Dlaczego kompilowanie do kodu maszynowego jest zaletą? Użytkownicy mają różne procesory. Np. .NET zoptymalizuje kod pod procesor użytkownika, a nie ten, który ustalił programista.

    Wygląda mi to na taki sam hype, jak kiedyś na Javę, Rubyego, Haskella i inne języki funkcyjne, w których widzieliśmy rekurencyjne implementacje silni i ciągu Fibonacciego.
    • 17: CommentAuthorilmenit
    • CommentTime5 Oct 2021 zmieniony
     
    @laoo
    Zgoda odnośnie new/delete, ale każdy język można uznać za bezpieczny, dopóki się w nim pisze w bezpieczny sposób i nie popełnia błędów ;) Rust (i niektóre nowe języki), próbują przenieść do czasu kompilacji wykrywanie i uniemożliwianie błędów, które w innych językach zostają wykryte (lub nie) dopiero powodując błąd w czasie działania. Zasada podobna jak w przypadku stosowania silnego typowania, const correctness (nie wiem jak jest po PL), czy używania referencji zamiast wskaźników. Te "bezpieczne języki" próbują wymuszać stosowanie bezpiecznych konstrukcji i uniemożliwiać te niebezpieczne. Czy to zwiększy bezpieczeństo? Na pewno usunie wiele błędów, ale exploity się tworzy nie tylko na tak niskim poziomie.

    @0xF
    Jeżeli uznajemy, że dowolna kolekcja o zmiennym rozmiarze może powodować wyciek pamięci, to musimy porządnie zdefiniować co uznajemy za wyciek. Zwykle uznaje się za wyciek sytuację, gdy pamięć zostaje przydzielona a traci właściciela, a w przypadku kolekcji to ona nim jest.

    Brak dziedziczenia (bo Rust może być uznawany za OOP chociaż dziedziczenia nie posiada ->link<- ) jest współcześnie uznawana za zaletę ("composition over inheritance"), ale wg mnie bez OOP tworzenie niektórych systemów (jak biblioteki GUI) bez dziedziczenia to drapanie się za uchem piętą ;) ale da się ->link<-

    Kompilowanie do kodu maszynowego jest zaletą tam, gdzie jest zaletą :) Rust jak widzę próbuje zastąpić C/C++ np. w programowaniu OS czy embedded, gdzie kompilacje "first-run AOT" czy "runtime JIT" są problematyczne.

    Myślę, że nie będzie to tymczasowy hype, ale język - jak Python - zagości w wielu miejscach, ale w bardzo konkretnych zastosowaniach.
    • 18:
       
      CommentAuthorgalu
    • CommentTime5 Oct 2021
     

    jhusak:

    mb pro z 2013.


    Możesz sprawdzić czy pod Safari na Intelu uruchamia się emulator mrk? Zakładając, że macOS 11.5.x i włączono WebGL 2.0 w Develop > Experimental Features:
    ->link<-

    (na ARM nie (macOS, iOS, iPadOS), a chyba pod macOS x86_64 startował i pod Safari i w symulatorze iPhone / Xcode).
    • 19: CommentAuthor0xF
    • CommentTime5 Oct 2021
     
    @ilmenit
    Rzeczywiście definicja wycieku jest dyskusyjna. Dla mnie sytuacja z niepotrzebnie rosnącą kolekcją jest analogiczna do wskaźnika, którego wartość mamy dostępną, ale nie wykonujemy na nim free, kiedy trzeba. Zgodzisz się, że malloc bez free to jest wyciek?

    Nie jestem fanem C++, ale tak się złożyło, że to wciąż popularny język i bardzo się rozwija w ostatniej dekadzie.
    Przepisywanie kodu daje okazję do poprawiania błędów, niezależnie od tego, na jaki język się przepisuje (nawet na ten sam).
    Nie uważam, że Rust jest srebrną kulą, a niestety przytoczony artykuł jest w tym tonie.
    Natomiast mogę uwierzyć, że zagości w konkretnych zastosowaniach.
    • 20: CommentAuthorilmenit
    • CommentTime5 Oct 2021
     
    @0xF - malloc bez free to wyciek, tak to potraktuje każde narzędzie do wykrywania wycieków (typu Valgrind). Ale malloc na początku programu i odpowiednie mu free na jego końcu, to już nie wyciek. Jeżeli rosnąca kolekcja jest niszczona na zakończenie programu (bo jest np. jako static dla singletona) to nie uważam to za wyciek, ale założenie programowe.
    A z Rustem zobaczymy jak będzie, co mi się w nim jeszcze podoba, to łatwość kompilowania do WebAssembly, gdzie dla C++ (z Emscripten) czy C# (http://bridge.net/ jak widzę już deprecated) to często męka.
    • 21: CommentAuthor0xF
    • CommentTime5 Oct 2021
     
    Mam na myśli sytuację, gdy element jest dodawany do kolekcji za każdym kliknięciem, odtworzeniem utworu, czy obsługą żadania sieciowego. Odpowiednio długo działający program zużyje w ten sposób całą pamięć, czy to napisany w Javie, Pythonie czy Rust.
    • 22: CommentAuthorilmenit
    • CommentTime5 Oct 2021
     
    Jasne, ale zużycie całej dostępnej pamięci nie zawsze jest powodowane wyciekiem pamięci. Twój przykład to bardziej "space leak". ->link<- opisuje różnice między "memory leak" a "space leak". W niektórych językach jak Haskell taki "space leak" może następować częściej niż w innych
    ->link<- lub ->link<-
    • 23: CommentAuthor0xF
    • CommentTime5 Oct 2021
     
    Nie znałem tego terminu, dzięki!
    • 24:
       
      CommentAuthorjhusak
    • CommentTime5 Oct 2021 zmieniony
     
    @galu, na BigSurze jeszcze kompa nie mam. I jakiś czas nie będę jeszcze. A na mojave jeszcze nie działa.
    • 25:
       
      CommentAuthorpirx
    • CommentTime5 Oct 2021
     
    koledzy, dziękuję za kształcący wątek!!!
    • 26: CommentAuthormrk
    • CommentTime5 Oct 2021 zmieniony
     
    Wracając nieśmiało do tematu wątku

    tatqoo:

    Error report:

    W moim oldskul filink z newer daj na samym początku jest taki zjazd na bębnach w dół. Tutaj to gra jakby zupełnie czystym dźwiękiem.


    Poprawione (mam nadzieję): ->link<- Swoją drogą zajefajny kawałek :)

    BTW w details można wybrać prędkość PAL / NTSC
    • 27:
       
      CommentAuthormav
    • CommentTime5 Oct 2021
     
    Co jak co, ale lecące tracki w konsoli mnie rozwaliły :D
    • 28: CommentAuthormrk
    • CommentTime5 Oct 2021
     

    mav:

    Co jak co, ale lecące tracki w konsoli mnie rozwaliły :D

    Jakieś ekstra alokacje pamięci są na pewno przez to (i co za tym idzie pewnie większe przycinki z powodu GC) ale nie mogłem sobie odmówić :]
    • 29:
       
      CommentAuthormav
    • CommentTime5 Oct 2021
     
    Widziałem, że kanały stereo już dodałeś, więc pewnie to kwestia czasu, jak tracki z konsoli przeniesiesz bezpośrednio na stronkę ;)
    • 30: CommentAuthormrk
    • CommentTime5 Oct 2021
     
    @mav Prawie dobrze łączysz te kropki (z naciskiem na prawie) ;)
    • 31: CommentAuthormrk
    • CommentTime5 Oct 2021 zmieniony
     

    jhusak:

    Na Safari tym od Mojave nie działają, pewnie dlatego: Unhandled Promise Rejection: ReferenceError: Can't find variable: AudioContext
    w linijce 61.

    Może to to? ->link<-


    A możesz napisać co zwraca ci w konsoli js:

    console.log(`${window.webkitAudioContext && 'exists'}, ${window.AudioContext && 'exists'}, ${window.webkitAudioWorkletNode && 'exists'}, ${window.AudioWorkletNode && 'exists'}`)


    EDIT: dodałem obsługę tego prefiksu webkit, daj znać czy coś pomogło (czy ewentualnie zaczął sypać innym błędem)
    • 32:
       
      CommentAuthorgalu
    • CommentTime6 Oct 2021
     
    @Mrk: to było do Good Enough Atari Emulator czy Web Pokey?

    Web Pokey działa(l) chyba OK, ->link<-
    • 33:
       
      CommentAuthorgalu
    • CommentTime6 Oct 2021
     
    Good Enough Atari Emulator w najnowszym Safari Technology Preview (logi):
    • 34: CommentAuthormrk
    • CommentTime6 Oct 2021
     

    galu:

    to było do Good Enough Atari Emulator czy Web Pokey?

    Do Web Pokey - @jhusak pisał wyżej ->link<- że nie działa na którejś wersji Safari, z linka który podał wynika że AudioContext jest dostępny jako webkitAudioContext. Dodałem obsługę tego, ale obawiam się że jakichś niekompatybilności będzie więcej)
    • 35: CommentAuthormrk
    • CommentTime6 Oct 2021
     

    galu:

    Good Enough Atari Emulator w najnowszym Safari Technology Preview (logi):


    Czekaj, czekaj, na tym Safari chodzi Web Pokey, ale wywala się w ten sposób emulator atari? Pogubiłem się już w tych wszystkich wersjach Safari :)
    • 36:
       
      CommentAuthorDracon
    • CommentTime6 Oct 2021 zmieniony
     
    /offtopic

    Galu, jak można poużywać (potestować) Twój webowy emulator Amiga dla systemu iOS ("iMiga") ? Tak się składa, że od jakiegoś czasu mam iPada. :) Pytam z pozycji zwykłego użytkownika, który nie umie lub nie chce kompilować źródeł, itp.
    /offtopic
    • 37:
       
      CommentAuthorgalu
    • CommentTime6 Oct 2021 zmieniony
     
    @Mrk: Web Pokey działał od poczatku chociaż nie wiem czy nie bez problemów z wydajnością (sprzętom na którym odpalam nie brakuje mocy). Jhusak ma starszego Maka z Intelem i trochę starszy system (i wersję Safari) i chyba ma problem z wydajnością właśnie.
    Good Enough nigdy nie działał - pierwsze wersje się odpalały ale z błędami przy wyświetlaniu (w wątku Antic na GPU na forum został ślad) a po chwili przestał się wczytywać - możliwe, ze w momencie jak dodałeś obsługę audio.

    @Dracon: Podeślę dzisiaj link do hostowanej wersji (jeszcze nie upubliczniałem) i instrukcję, przypomnij proszę maila (priv). Jaki iPad? Masz Apple Pencil (pytanie bez związku z emulatorem)? :)
    • 38:
       
      CommentAuthorDracon
    • CommentTime6 Oct 2021
     
    @Galu
    Odpisałem na priv. Pencila, ma się rozumieć, posiadam.
    • 39: CommentAuthorastrofor
    • CommentTime7 Oct 2021
     
    Jeszcze odnośnie wykorzystania rusta:
    It's 2050.
    Linux is written in Rust and it's called Windows

    ->link<-
    • 40:
       
      CommentAuthorjhusak
    • CommentTime8 Oct 2021
     
    Emulator Amigi by @galu jest za@#$%ty.
    • 41: CommentAuthortatqoo
    • CommentTime8 Oct 2021
     
    A pójdzie TV Sports Basketball na nim ??
    • 42:
       
      CommentAuthorjhusak
    • CommentTime10 Oct 2021
     

    mrk:

    console.log(`${window.webkitAudioContext && 'exists'}, ${window.AudioContext && 'exists'}, ${window.webkitAudioWorkletNode && 'exists'}, ${window.AudioWorkletNode && 'exists'}`)

    exists, undefined, undefined, undefined

    Wszystko w eksperimental mam włączone.
    Jak łatwo się da, to super, a jak nie, to użyję FF
    Jeszcze sprawdzę na ipadzie.
    • 43: CommentAuthormrk
    • CommentTime11 Oct 2021
     
    @jhusak
    Obawiam się że nic z tego nie będzie - wygląda na to że nie ma `AudioWorkletNode` (także z prefiksem webkit), a to na nim uruchomiona jest cała emulacja.
    • 44:
       
      CommentAuthorjhusak
    • CommentTime11 Oct 2021 zmieniony
     
    Może warto wpisać taką pętelkę sprawdzającą istnienie potrzebnych ficzerów/obiektów javascript i wypisać komunikat: "Brakuje tego i tego." Tak dla ludzi, co nie zaglądają do logów :)
    • 45: CommentAuthormrk
    • CommentTime11 Oct 2021
     
    @jhusak - zdecydowanie.

    Na razie czeka mnie wielkie przepisywanie emulatora na nowszą wersję bevy, która jest mega niekompatybilna do tyłu. Ale opłaci się: oprócz wersji przeglądarkowej dość trywialne powinno być potem zbudowanie wersji natywnej. A wersja przeglądarkowa będzie dodatkowo dostępna na nowym backendzie WebGPU ->link<- (obok WebGL2 oczywiście)
    • 46:
       
      CommentAuthorjhusak
    • CommentTime12 Oct 2021
     
    Na iPadzie Pro hula. iOS 14.6, safari od niego.
    • 47:
       
      CommentAuthorgalu
    • CommentTime13 Oct 2021
     
    @mrk: A jakie są jeszcze opcje poza WebGPU i WebGL2? :)

    @tatqoo: Jak masz współczesnego iPada lub iPhone (A10 lub nowsze) to odezwij się "na priv". Na innym sprzęcie nie pójdzie.
    • 48: CommentAuthormrk
    • CommentTime13 Oct 2021 zmieniony
     

    galu:

    A jakie są jeszcze opcje poza WebGPU i WebGL2? :)

    W przeglądarce? Można przepisać emulację Antic'a by nie wymagała GPU i rysować choćby na Canvas 2D (BTW chcąc poprawić jakość emulacji trzeba by było to zrobić (zmiany rastra w trakcie rysowania linii czy kolizje które są teraz zaimplementowane bardzo trikowo ;))

    A na desktopie bevy chodzi na OpenGL, Vulcan, Metal, DirectX :)
    • 49:
       
      CommentAuthorlaoo
    • CommentTime14 Oct 2021
     
    Kurcze, nie mogę znaleźć wątku dla Good Enough Emulatora, a mam feedback. To piszę tu: sobie go odpaliłem i zauważyłem, że emulacja dźwięku nie przeżywa naciśnięcia reset (F5).
    • 50: CommentAuthormrk
    • CommentTime14 Oct 2021 zmieniony
     

    laoo:

    emulacja dźwięku nie przeżywa naciśnięcia reset (F5).


    A na czym testujesz (dasz linka?) Na self-teście po resecie działa: ->link<-

    Pewnie warto też spróbować wyczyścić cache przeglądarki (albo dać shift+reload w takim chrome) by wymusić przeładowanie skryptów js - dość często robię jakieś update'y i mogą się ładować niezbyt świeże pliki z cache.

    EDIT: ok, ładnie to widać na przykład na lasermanii: ->link<- - pewnie wystarczy wyzerować rejestry pokey'a podczas resetu (choć chyba warm reset powinien to robić - popatrzę sobie na to)