atarionline.pl Problem z dodawaniem w MADS - 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: CommentAuthorMaterion
      • CommentTime22 Dec 2020 12:12 zmieniony
       
      Dobra, udalo mi sie ogarnac - zle wpisalem liczbe ktora laduje sie do akumulatora. Sorka za smietnik :)
      • 2: CommentAuthorMaterion
      • CommentTime23 Dec 2020 11:12 zmieniony
       
      A taki maly bump w temacie - czy uzywacie arytmetyki z ujemnymi liczbami ? Bo w Ruszycu o tym czytam i jest napisane tam, ze niektorzy olewaja calkowicie operowanie na ujemnych liczbach bo wiecej z tym problemu niz pozytku.
      • 3:
         
        CommentAuthorlaoo
      • CommentTime23 Dec 2020 12:12
       
      To nie jest tak, że się używa albo nie używa. Wszystko jest płynne i zależne od interpretacji. Zamiast odjąć 1 można dodać 255 i wyjdzie to samo, zależy jak na to patrzysz. Ale co jest pewne, że trzeba mieć świadomość jak działa kod U2 i bit C.
      • 4: CommentAuthorMaterion
      • CommentTime23 Dec 2020 12:12
       
      No przy dzialaniach ze znakiem jeszcze dodatkowo trzeba kontrolowac znacznik V i N wiec nie wiem czy po prostu wlasnie nie jest lepiej po prostu uzywac samych liczb dodatnich i odpowiednio te liczby interpretowac bo przy ujemnych jest wiecej "bawienia" sie.
      • 5:
         
        CommentAuthorlaoo
      • CommentTime23 Dec 2020 12:12 zmieniony
       
      Patrząc retrospektywnie przez 25 lat jak piszę w 6502, to w przeważającej większości przypadków interpretowałem liczby jako bezznakowe i bit V w tym celu w jakim go stworzono sprawdzałem może kilka razy. I zawsze było to okupione bólem i koniecznością konsultowania się z literaturą, więc się nie przejmuj, jeśli to wydaje się skomplikowane. W praktyce używa się takiej precyzji jaka jest potrzebna i wynik operacji rzadko wychodzi poza spodziewany zakres i rzadko to stanowi problem, żeby koniecznie sprawdzać bit V, który sygnalizuje sytuację, że wynik operacji wyszedł poza zakres liczby ze znakiem i bit N nie ma poprawnej wartości (np jak dodaliśmy dwie liczby dodatnie i wynik wyszedł większy niż 127).

      W ogóle to w sieci jest sporo fajny tutków na ten temat: ->link<-
      • 6: CommentAuthorMaterion
      • CommentTime23 Dec 2020 13:12 zmieniony
       
      Dzieki za odpowiedz :). No wydaje sie mi sie troche skomplikowane i staram sie to ogarnac swoim umyslem. Np. w Ruszycu jest taki przyklad dodawania dwoch ujemnych liczb - wynik jest niepoprawny celowo:

      10000001 -127
      11001110 -50
      ---------------
      1 01001111 +79 C=1 V=1

      Dlaczego znacznik V jest ustawiony na 1 ? Skoro nie widze tutaj w tym dodawaniu przeniesienia z bitu 6 na 7. Widze tylko z 8 na 9 i rzeczywiscie wtedy C=1. Kurde przy pisaniu sie ladnie formatuje a przy postowaniu sie psuje i rozjezdza.
      • 7:
         
        CommentAuthorlaoo
      • CommentTime23 Dec 2020 13:12 zmieniony
       
      Bo taką ma formułę. W linku który zamieściłem jest taka tabelka:



      V jest ustawiany w dwóch przypadkach: gdy jest przeniesienie z b6 przy dodawaniu dwóch liczb dodatnich i gdy nie ma przeniesienia z b6 przy dodawaniu dwóch ujemnych. Trzeba to po prostu przetrawić.
      • 8: CommentAuthorMaterion
      • CommentTime23 Dec 2020 13:12 zmieniony
       
      O, dzieki ! Nie ma tej informacji w Ruszycu w tym momencie ksiazki jak sobie czytam bylo tylko cos takiego "Znacznik V jest istotny przy dodawaniu i odejmowaniu liczb ze znakiem. Spelnia wowczas wazna role w uzyskaniu poprawnego wyniku, sygnalizujac przeniesienie z bitu b6 do b7."
      Sorka, ze tak mecze ale zejscie z C#, Pythona do asemblera jest spore i czytajac tego Ruszyca rodza sie z mojej glowie rozne pytania i watpliwosci. Dobrze, ze w tych czasach jest cos takiego jak internet dzieki czemu moge miec kontakt z wieloma nauczycielami czyt. Wami w razie watpliwosci :).
      • 9:
         
        CommentAuthorlaoo
      • CommentTime23 Dec 2020 14:12
       
      To w ogóle ciekawa sprawa od jak różnych stron można zaczynać zabawę z 6502. Ja zaczynałem od BASICa i pierwsze kody w asemblerze pisałem w liceum, nawet bez asemblera tylko pisało się na kartce i asemblowało ręcznie (dalej pamiętam kody rozkazów kilku instrukcji, co się niekiedy przydaje ;p) a wiedzę czerpało się z "Poradnika programisty Atari" Zientary i ona nie była zbyt precyzyjna, ale za to w szczenięcym wieku miało się dużo czasu na eksperymenty.
      • 10: CommentAuthor0xF
      • CommentTime23 Dec 2020 15:12
       
      Arytmetyka U2 bardzo się przydaje, warto ją rozumieć nie tylko przy programowaniu w asemblerze.
      Ja myślę o tym tak, że w obrębie bajtu mamy tylko wartość modulo 256. Więc młodszy bajt 255 może być z liczb 255, 511, 767, 1023, ale równie dobrze -1 (255-256), -257 (255-512) itd. Dopóki nie zaczniesz interpretować tej liczby, nie wiadomo, czy chodzi o 255 czy o -1.
      Nawet pisząc ponga znacznie łatwiej mieć prędkość piłeczki -2 (=254-256), niż osobno trzymać, w którą stronę leci piłka a osobno z jaką prędkością.

      Nigdy nie myślę o V jak o przeniesieniu z b6, to by rzeczywiście ryło mózg. ;)
      Znacznik V ustawiony po dodawaniu oznacza, że dodaliśmy dwie liczby tego samego znaku, a wynik ma znak przeciwny, czyli:
      - dodatnia plus dodatnia, wynik ujemny
      - ujemna plus ujemna, wynik dodatni
      Przy odejmowaniu też należy myśleć o tym tak, że V=1 oznacza, że znak powinien być przeciwny.
      Wielu programistów nie pamięta, że prawidłowe porównanie liczb ze znakiem wymaga też sprawdzenia V. Nie załatwimy tego przy pomocy CMP, bo CMP nie ustawia V (a szkoda). 6502 nie ma instrukcji "skocz, gdy mniejsze ze znakiem", której warunek byłby (N^V).
      • 11:
         
        CommentAuthorMq
      • CommentTime23 Dec 2020 15:12
       
      ...Bo w Ruszycu o tym czytam...
      ...Np. w Ruszycu jest taki przyklad...
      ...Nie ma tej informacji w Ruszycu...
      ...czytajac tego Ruszyca...

      Kolego, ten pan, o którym mowa, to on się Ruszczyc nazywa. Jan. Postać o tyle wielka i ważna, że bez niego (i jeszcze pewnie dwóch innych) raczej większość programistów na Atari w Polsce nie programowała by w ogóle.

      ...zejscie z C#, Pythona do asemblera jest spore...

      Słuchaj, nie chcę się czepiać, nie to mam na celu, więc nie zrozum mnie źle, ale to bardzo wiele wyjaśnia i mówi, no a że zasięgasz porad tutaj od ludzi, którzy programują od lat, to myślę, że spora część się zgodzi, że to może być droga tak mocno pod górkę, że się wcześniej zniechęcisz niż zrobisz coś ciekawego.
      Moim skromnym zdaniem, żeby programować na ATari w assemblerze, to trzeba zacząć od języka wyższego poziomu, poznać możliwości sprzętowe, strukturę komputera, poszczególne układy i to co na nich można zrobić, a dopiero później w miejscach gdzie język wyższego poziomu nie da rady, to stopniowo przechodzić na assembler.
      Myślę, że tak jak laoo napisał, to pewnie z 99% programistów na Atari zaczynało od Basica czy Turbo Basica i potem szli dalej. To było kiedyś. Dziś z Twoimi podstawami wybrał bym Mad Pascala, albo C i w tym pisał, a stopniowo włączał sobie w to wstawki assemblerowe.
      Co jest jeszcze dobre: można robić kod np. w Mad Pascalu i patrzeć jak kompilator robi sobie z tego kod do Madsa - bo on tak to robi i dopiero potem kompiluje dalej do wynikowego programu. W ten sposób jak sobie napiszesz dodawanie, albo mnożenie "po ludzku" w Mad Pascalu, to zobaczysz jak to zrobić w assemblerze.
      • 12: CommentAuthorbob_er
      • CommentTime23 Dec 2020 15:12
       
      Zgadzam się z Laoo - też od dobrych kilku(nastu) lat (albo i więcej) dłubię w 6502 i szczerze powiedziawszy do arytmetyki to chyba ani razu V nie użyłem.
      • 13: CommentAuthor0xF
      • CommentTime23 Dec 2020 15:12 zmieniony
       
      Ja patrzę na to od drugiej strony: jak już czujesz się pewnie w asemblerze 6502, to wszystkie inne języki programowania to bułka z masłem. Gdy czegoś nie rozumiem w C++, wrzucam na ->link<- i patrzę na skompilowany asm.
      I nie jest to wiedza tylko o starych komputerach, bo wcześniej czy później w C# natkniesz się na problem w rodzaju:
      int x = 2000000000;
      Console.WriteLine(x + x);

      Oczywiście asm (ani C++) to nie jest język na naukę programowania w ogóle, ale jeśli panujesz nad 1000-linijkowym skryptem w Pythonie, to nie musisz się uczyć całego Atari BASICa.
      • 14:
         
        CommentAuthorbocianu
      • CommentTime23 Dec 2020 16:12
       
      Niekoniecznie jak czujesz się pewny w asemblerze 6502 to inne rzeczy to bułka z masłem. Trzeba pamiętać, że Atari to nie tylko procesor 6502. Ja znam już asemblera 6502 na poziomie powiedzmy średnim, a nie byłbym w stanie od ręki napisać dużego programu na C64, Apple II czy NESa. Mimo ze tez można to zrobić w assemblerze 6502 który znam.
      Tutaj muszę się zgodzić z Mq i pozostałymi, że jeżeli faktycznie myślisz o pisaniu czegoś konkretnego na Atari, to nauka assemblera niekoniecznie jest dobrym wstępem do takiego zadania.
      Z pewnością się przyda, ale na późniejszym etapie.
      Na początek zabrałbym się za display listy, pmg, pokeya, sio, kontrolery, przerwania...
      Jak już mowiłem 6502 to tylko kawałek Atari. I to wcale nie ten, który sprawia ze ten komputer jest wyjątkowy ;)
      • 15: CommentAuthorMaterion
      • CommentTime23 Dec 2020 17:12 zmieniony
       
      Szkoda, ze w Atari Basicu nie mozna tak mieszac asm jak np. w BBC Basicu na BBC Micro ;). To chyba idealne rozwiazanie do nauki ;). Z drugiej strony pisaliscie, ze zaczac od czegos wyzszego i jak sie nie da w tym to wtedy asm sie wspomoc - no wlasnie ale by sie wspomoc tym asm to trzeba go umiec bo inaczej nic sie nie zrobi. Dlatego wlasnie chce sie nauczyc tych podstaw asm by moc sobie w nim cos pogrzebac uzywajac czegos wyzszego pozomu. A w sumie FastBasic jest fajnym rozwiazaniem wysokopoziomowym tylko szkoda, ze nie mozna w nim mieszac kodu z asm. Myslalem tez nad MAD Pascalem i chyba sie na niego zdecyduje po przerobieniu "Asemblera 6502". Wtedy bede mogl sie bawic sprzetem na wyzszym poziomie + co nieco podlubac uzwajac wstawek w asm. Co myslicie o takim rozwiazaniu?

      @Bocianu - z drugiej strony znajac tylko uklady specjalizowane a nie znajac kompletnie asm nie bylbys w stanie z nich w calosci skorzystac wiec to dziala w dwie strony.
      • 16:
         
        CommentAuthorbocianu
      • CommentTime23 Dec 2020 18:12
       
      Ja myślę, że takie rozwiązanie będzie ok.
      Masz podstawy asm, a teraz sięgnij do Mad-Pascala albo CC65.
      Tam kod asemblerowy możesz wtrącać niemal "inline", przestrzegając paru drobnych ograniczeń.

      @Bocianu - z drugiej strony znajac tylko uklady specjalizowane a nie znajac asm nie bylbys w stanie z nich w calosci skorzystac wiec to dziala w dwie strony.


      Nie trzeba znać asm żeby skorzystać ze WSZYSTKICH układów i peryferiów Atari. I i w assemblerze do obsługi większości z nich wystarczą Ci dwa rozkazy ;) lda i sta. Tylko trzeba wiedzieć co wpisać, gdzie wpisać i jaki będzie tego efekt. I to jest wiedza która będzie Ci najbardziej potrzebna w praktyce.

      Po prostu rzuć się w temat, zacznij pisać i sprawdż ;)
      A niech atariki, de re atari i inne poradniki na stałe zagoszczą w Twoich zakładkach przeglądarki.


      Na samym dole tej strony: ->link<- znajdziesz dział "źródła informacji". To moje najczęstsze kompendium wiedzy podczas pisania na Atari. I te narzędzia powyżej, choć już widzę, że powinienem zaktualizować parę rubryk ;)
      • 17: CommentAuthorMaterion
      • CommentTime23 Dec 2020 19:12
       
      Tak zrobie :). Poducze sie lekko asm by co nieco o nim wiedziec a potem wskocze do MAD Pascala i tam bede juz sie bawil w kodzenie.