atarionline.pl Nielegalne instrukcje procesora 6502C - 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.  
      Witam
      Szukam wszelakich informacji na ten temat , lacznie z radosna tworczascia wykorzystujace tego typy rozakazy
      • 2: CommentAuthormono
      • CommentTime10 Oct 2010 02:10
       
      Trochę jest w "Mikroprocessor 6502 i jego rodzina", którego możesz szukać w tym serwisie w zbiorze książek.
      Warto by przejrzeć magazyny dyskowe (w Syzygy albo Serious bodajże coś było).
      • 3: CommentAuthormarok
      • CommentTime10 Oct 2010 12:10
       
      W Bajtku z marca 1995 roku można znaleźć artykuł KMK "Nielegalne rozkazy 6502" z opisem i dokładną charakterystyką tych rozkazów (poza trzema które operują na wskaźniku stosu i nie zostały w artykule opisane, na co specjalnie zwrócił uwagę autor). Prawie jestem pewien że w którymś Seriousie jest artek Krógera na ten sam temat. Nie pamiętam dokładnie czy treści tam zawarte poszerzają wiedzę jaką można uzyskać z tego pierwszego źródła, ale na pewno warto to sprawdzić.
      • 4: CommentAuthortebe
      • CommentTime10 Oct 2010 13:10 zmieniony
       
      nielegale to sobie można używać na C64, a nie na XE/XL, problem polega na różnych modelach 6502 montowanych w XE/XL, tak że jeśli nielegal zadziała u Ciebie nie masz gwarancji że zadziała u innego użytkownika XE/XL

      jeśli jeszcze ktoś ma zamontowany 65816 to już wogóle zapomnij, chyba że chcesz mu "powiesić" maszyne
      • 5:
         
        CommentAuthorKrótki
      • CommentTime10 Oct 2010 19:10
       
      Nieprawda Tebe, w każdym (niezmodyfikowanym) Atari zestaw nielegalnych rozkazów jest taki sam. Zapewne myślisz tutaj o procesorze 65C02, ale ten nie był montowany w Atari.
      • 6: CommentAuthorBartoszP
      • CommentTime10 Oct 2010 19:10
       
      Popatrz tu:

      ->link<-
      ->link<-
      ->link<-
      ->link<-

      Albo po prostu tu:
      ->link<-
      • 7: CommentAuthortebe
      • CommentTime10 Oct 2010 21:10
       
      kiedyś napisałem intro do inertii playera, u mnie na 65XE działało z nielegalami, na 800XL były śmieci
      • 8:
         
        CommentAuthorKrótki
      • CommentTime10 Oct 2010 22:10
       
      A, to sory. Ciekaw jestem jaki procesor siedział w tym 800XL.
      • 9: CommentAuthor0xF
      • CommentTime11 Oct 2010 08:10
       
      Dobrym źródłem jest kod źródłowy emulatora Atari800.
    2.  
      Dzieki za pomoc :-)
      • 11: CommentAuthorxxl
      • CommentTime11 Oct 2010 10:10
       
      tak na szybko to jest kilka rozkazow ktore faktycznie mogly by sie do czegos przydac:
      INS;
      DCM;
      LAX;
      ANX;
      NOP 2 i 3bajtowy
      • 12: CommentAuthorpin
      • CommentTime11 Oct 2010 13:10
       
      .. a ja zastanawiam się nad czymś innym. Co by było, gdyby dla 65c816 kod przestawiał by sobie stronę zerową tak, by ta zawsze znajdowała się w obszarze wykonywanego kodu. Bo jeśli rozkazy odwołujące się do strony zerowej są wykonywane w określonej - mniejszej liczbie cykli, to tym sposobem można by znacznie przyspieszyć działanie programu. Nie jestem koderem, nie znam się, tak tylko pytam. TeBe - czy to możliwe do zrealizowania?
      • 13: CommentAuthor0xF
      • CommentTime11 Oct 2010 16:10
       
      Ogólnie nie ma co liczyć, że te rozkazy są przydatne do optymalizacji. Kiedyś widziałem jeden efekt na C64 używający LAX, a sam wymyśliłem efekt używający ALR.

      Pin - nic z tego. Rozkazy używające strony zerowej są szybsze, bo mają 2 bajty zamiast 3. Nie ma znaczenia, gdzie te bajty są.
      • 14: CommentAuthorxxl
      • CommentTime11 Oct 2010 17:10
       
      wezmy przyklad, chcemy drukowac napisy np. na waskim ekranie, tryb hires, zestaw znakow mamy standardowy.

      ldy #7
      ldx #$e0
      start
      lda fonts,y
      sta ekran,x
      txa
      sec
      sbc #$20
      tax
      dey
      bpl start


      z rozmazem nielegalnym moze to wygladac tak:

      ldy #7
      ldx #$e0
      start
      lda fonts,y
      sta ekran,x
      txa
      sax #$20
      dey
      bpl start


      czyli oszczednosc kilku bajtow dlugosci programu oraz 32 cykle procesora mniej na 1 znak ? dobrze mysle?

      moze by sie zebrac w sobie i napisac kilka przykladowych procedurek jak nielegale moga byc uzywane?

      0xF ma chyba najwieksze w tym doswiadczenie wiec moze by cos zapodal?
    3.  
      Celem zebrania informacji o "nielegalnych" rozkazach byla wlasnie chec jak najwiekszej optymalizacji - 32 cykle procesora to calkiem sporo czasu na inne zadania :-).
      Problemem tylko jak mniemam bedzie "uruchomialnosc" tego kodu na innych atarynkach :-(
      • 16:
         
        CommentAuthorTheFender
      • CommentTime11 Oct 2010 21:10
       
      Miejmy tylko nadzieję (w świetle niedawnego wiodącego tematu zastępczego), że za nielegalne instrukcje Sanepid nie zaplombuje Atarek ;) (...przepraszam, musiałem :)
      • 17: CommentAuthor0xF
      • CommentTime12 Oct 2010 10:10
       
      Nie mam pod ręką żadnych gotowych przykładów.

      Powyższy przykład jest niezły, ale na pierwszy rzut oka widać, że sec można wynieść przed pętlę. Możemy też optymalizować go na różne inne sposoby - np. przeorganizować font, aby indeksować go X - i już mamy tak samo szybki kod bez uciekania się do nielegalnych rozkazów.
      • 18: CommentAuthorxxl
      • CommentTime12 Oct 2010 10:10 zmieniony
       
      ale kosztem tego, ze nalezaloby trzymac w pamieci dwa zestawu znakow jeden dla ekranow graficznych a drugi dla ekranow tekstowych, a przy rozkazie nielegalnym tylko jeden zestaw wspolny. zauwazylem tez rozkaz ktory mozna uzywac tak: ldx (zp),y lub dec (zp),y - to jest tez bardzo uzyteczne

      ---
      np. zXemulator bardzo czesto korzysta z takich kontrukcji

      lda (zp),y
      tax
      lda adres,x


      a moglo byc

      lax (zp),y      ; nielegalny
      lda adres,x


      oszczednosc bajtu i 2 cykle. moglo by to przyspieszyc dzialanie...
      • 19:
         
        CommentAuthorpirx
      • CommentTime12 Oct 2010 15:10
       
      miałem atarkę "made in china", ale raczej nie 800XE, na której nie działały procki z nielegalami. dokładnie nie badaliśmy sprawy, uznawszy, że skoro coś działa a coś nie działa to nie można tego używać w komercyjnym sofcie :)

      Ale teraz czasy są inne - to i tak hobby, więc myślę, że spokojnie można już nielegali używać, szczególnie gdyby demko / gra sprawdziła, czy dany sprzęt / emulator nielegale wspiera :]
      • 20: CommentAuthorpin
      • CommentTime12 Oct 2010 23:10
       
      Jeśli program sprawdza czy można fizycznie użyć nielegala - to czemu nie. Jeśli nie sprawdza - to na większości zlotów temat nie przejdzie, lub być może odbędzie się osobne kompo :)
      • 21: CommentAuthorgorgh
      • CommentTime12 Oct 2010 23:10
       
      na AAge niejaki supercat pisał ciekawie o przyczynach niestabilności nielegalnych instrukcji
      ->link<-
      • 22: CommentAuthortebe
      • CommentTime13 Oct 2010 08:10
       
      pin na Twojej atarce nielegale nie zadziałają, masz pzecież 65816
      • 23: CommentAuthorAmun-Ra
      • CommentTime13 Oct 2010 21:10
       
      Nielegalne instrukcje to bardzo zły pomysł.
      • 24:
         
        CommentAuthorKaz
      • CommentTime22 Oct 2010 14:10
       
      Amun-Ra, eee... dlaczego? Demko prezentujace efekty z wykorzystaniem nielegali byloby ciekawe.
      • 25: CommentAuthorxxl
      • CommentTime7 Oct 2020 19:10
       
      publikacja z 88 roku "Komputer", uzycie trzybajtowego NOPa

      • 26: CommentAuthorpin
      • CommentTime7 Oct 2020 22:10
       
      ojojojojjjj - daj na mszę ;)
      • 27:
         
        CommentAuthorjhusak
      • CommentTime8 Oct 2020 11:10 zmieniony
       
      Ten 3bajtowy nop można zastąpić instr. bit, będzie to samo.

      Pytanie: dlaczego jesteście przeciwnikami nieudokumentownych rozkazów?

      Ja tylko bym tego nie stosował w komercyjnych produkcjach i chyba w systemach operacyjnych i ważnych użytkach. Ale to ja.

      Życzę wszystkim świetnej zabawy z nieudokumentowanymi rozkazami :)
      • 28: CommentAuthorxxl
      • CommentTime8 Oct 2020 12:10
       
      na stosowaniu nielegali "przylapano" takich wydawcow jak: Hudson, Virgin, Bandai, Microprose, Taito, Mindscape ;-)
      • 29: CommentAuthorpin
      • CommentTime8 Oct 2020 13:10
       
      i ileż to programów w nielegalami opublikowali? :)
      • 30: CommentAuthorbob_er
      • CommentTime8 Oct 2020 16:10
       
      @Kuba - przyczyna jest taka, że pewna ilość osób zainwestowała w 65816, a na nim nielegale nie działają.
      No, i się awanturują przy każdym ich wspomnieniu.
      Jako, że aktywnych koderów na asm6502 jest chyba z 10 (liczę tych, co w ostatnich 5 latach coś w asm napisane wydali) albo niewiele więcej, jakaś ich część ma 65816 więc te pozostałe niedobitki, które nie mają nic przeciwko nielegalom giną w tłumie :).
      • 31: CommentAuthorpin
      • CommentTime8 Oct 2020 18:10
       
      Właściwie to dochodzi do tego zysk oscylujący w okolicach zera. No może w intrach 256 te kilka bajtów do przodu jest wydoczną korzyścią, fakt :)
      • 32: CommentAuthortomaswoj
      • CommentTime8 Oct 2020 18:10
       
      Zysk jest niezerowy, zwlaszcza w cwiartkach ;)

      A koderow 6502 tez sie jeszcze kilku znajdzie.

      Osobiscie nielegali uzywam, ku uciesze takich ich smakoszy jak pin czy vasco :P
      • 33: CommentAuthorbob_er
      • CommentTime8 Oct 2020 19:10
       
      @pin - ale tu nie chodzi o zysk, tylko o radochę :)
      • 34: CommentAuthorpin
      • CommentTime8 Oct 2020 19:10
       
      Chyba tylko, bo kolega z miejscowości uzdrowiskowej insynuje zysk zdaje się :)
      • 35: CommentAuthorszeryf
      • CommentTime9 Oct 2020 15:10
       
      nielegale rulez! :)
      • 36: CommentAuthorbob_er
      • CommentTime9 Oct 2020 20:10 zmieniony
       
      No, niektóre są fajne, np. LAX, dzięki któremu mamy odpowiednik nieistniejącego LDX (zp),y.
      Swoją drogą - ciekawe, czy ktoś znalazł racjonalne użycie dla ARR dla D=1?

      edit: uwaga o D.