Marca 28, 2024, 16:10:12 *
Witamy, Gość. Zaloguj się lub zarejestruj.

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Aktualności:
Nowa strona główna  : http://www.emunes.pl
Zapraszamy do testowania !

Chat: http://chat.emunes.pl
Galeria cartów: http://carts.emunes.pl
 
   Strona główna   Pomoc Zaloguj się Rejestracja  

Reklama
Strony: 1 ... 6 7 [8] 9 10 11
  Drukuj  
Autor Wątek: Programowanie Nes'a (procesora 6502)  (Przeczytany 78603 razy)
0 użytkowników i 1 Gość przegląda ten wątek.
Koks
Major
*****
Offline Offline

Wiadomości: 580



« Odpowiedz #140 : Października 26, 2010, 16:32:46 »

V = sqrt(Vx2+Vy2)

Po co to obliczać? Do procedury skoku wystarczą poszczególne składowe, pierwiastkowanie nie jest tutaj potrzebne.
Zapisane

Częste mycie skraca życie.
"If you have a fast, shiny new Pentium II, you might try using 44 kHz for the ultimate in sound quality." - readme od Unreala
https://drive.google.com/folderview?id=0B2TXQD5v-ZIVfjVQdTl2TTZiWmJ2LWZJajJzS0V4cDZBay04WjVGQkdQdnBDQzRlYkdQVGc&usp=sharing
mog123
Chorąży
***
Offline Offline

Wiadomości: 221


WWW
« Odpowiedz #141 : Października 26, 2010, 20:47:48 »

widać że słabo z algorytmami Tongue

Są gotowe algorytmy na pierwiastkowanie i potęgowanie, o ile potrafisz czytać schematy blokowe algorytmów. Mnożenie i dzielenie jest banalne jak umiesz dodawać i mnożyć liczby.

1. Jeżeli idzie o mnożenie i dzielenie to zdaje się, że lepsze są przesunięcia bitowe i dodawania OR.
2. Co się tyczy pierwiastkowania sprawa nie jest już taka prosta, bo procesor 6502 jest wolny, a w NMI trzeba zostawić nieco cykli    na logikę gry, narysowanie kilku kolumn/wierszy (dwóch do trzech) Tilesów i transfer dma, a pierwiastkowanie to przecież i tak niewielka część procedury fizyki...Niestety moja aktualna wiedza jest lata świetlne od tematu Timing Code.

Tak jak napisał dr88, każdy osioł to wie, że szybsze. Ale co jak wykroczy poza zakres?Tongue
Zapisane

http://mog123x.blogspot.com/
Moje pięć groszy.
dr00id88
Gość
« Odpowiedz #142 : Października 26, 2010, 21:31:59 »

Zobaczysz w praniu jak to wyglada Smile
Zapisane
CodAsm
Szeregowy
*
Offline Offline

Wiadomości: 49


« Odpowiedz #143 : Listopada 01, 2010, 14:09:49 »

Może nie wygląda to najlepiej, ale wreszcie coś zaczyna działać...

http://wrzucacz.pl/file/4841288616944
Zapisane
Grucus
Chorąży
***
Offline Offline

Wiadomości: 125


« Odpowiedz #144 : Listopada 04, 2010, 02:32:33 »

No zaczyna działać... Popracuj nad obsługą pada, to co teraz zrobiłeś nazywa się, o ile mnie pamięć nie myli, koder priorytetowy... W każdym razie po wykryciu naciśnięcia przycisku, w tym rozwiązaniu, niemożliwe jest sprawdzenie pozostałych przycisków.
Zapisane
CodAsm
Szeregowy
*
Offline Offline

Wiadomości: 49


« Odpowiedz #145 : Listopada 04, 2010, 15:30:59 »

No właśnie...Wygląda, że ten sposób prowadzi w ślepą uliczkę. W jednym NMI nie da się obsłużyć na raz dwóch różnych przycisków pada.

Inny pomysł polegałby, żeby odczytywać w jednym NMI klawisze kursorów, a w drugim przycisk skoku.
*Przyciski kursorów nadają początkową Vx i inkrementują odpowiednie składowe ruchu x
*Przycisk skoku nadaje początkową Vy i inkrementuje odpowiednie składowe ruchu y (gdy postać spada rzecz ma się odwrotnie)

Kolejny problem to skok z rozbiegu. Wymagałby on:
*Ciągłego czytania drugiego przycisku pada (do momentu samego skoku).
*Zmiany przyśpieszenia (żeby było widać jak postać przechodzi ze stanu chodzenie do stanu bieganie)
*Dodania jakiegoś współczynnika tarcia o ile jest sens aż tak szczegółowo to robić.
*Powiedzmy, że przycisk rozbiegu byłby odczytywany jedynie co trzecie NMI.

Nie wiem czy byłby to dobry sposób, ale to pierwsze co mi się nasuwa i chyba jest możliwie łatwe do zaimplementowania?
« Ostatnia zmiana: Listopada 06, 2010, 21:50:00 wysłane przez CodAsm » Zapisane
Grucus
Chorąży
***
Offline Offline

Wiadomości: 125


« Odpowiedz #146 : Listopada 07, 2010, 20:35:03 »

No właśnie w jednym NMI da się obsłużyć więcej, jeśli zmienisz sposób obsługi klawiatury (nie będziesz używał kodowania priorytetowego), ale i tak to jest ślepa uliczka.
Nie znam architektury NES-a, ale zdaje mi się że rozumiem jak to powinno działać, przynajmniej tak było by logicznie: CPU i PPU działają niezależnie, PPU generuje NMI gdy skończy "rysować" obraz, wtedy następuje powrót plamki z dolnego prawego rogu obrazu do górnego lewego, z czym związane jest wygaszenie plamki. Czas ten jest bardzo krótki. Chodzi o to aby nie mieszać "w locie" w rejestrach PPU podczas "rysowania" obrazu, a tylko w czasie tego krótkiego przerwania, gdy nic nie jest wyświetlane (jest kilka powodów takiego postępowania, w wielkim skrócie pozwala to uniknąć bugów graficznych) przeprogramować PPU. Zdaje się że zostało to przemyślane tak aby CPU w pętli głównej i podprogramach robił wszystko, a w NMI na podstawie tych danych tylko zapisywać odpowiednie wartości do rejestrów PPU, tak aby mógł wyświetlić kolejną klatkę obrazu. Jeśli jest inaczej proszę o dokładnie wyjaśnienie. Oczywiście czas, w którym PPU generuje obraz można dowolnie wykorzystać w CPU.
Przy powyższym założeniu możesz Skonfigurować wszystko na starcie i na podstawie odczytu klawiatury obliczyć wszystkie niezbędne zmienne do zapisania ruchu, biegu, skoku i dowolnej ich kombinacji, a w NMI tylko odczytywać klawiaturę i na podstawie tego co wyliczysz w programie głównym odpowiednio programować rejestry PPU. Na pytanie jak odczytać wiele klawiszy: twój błąd powstał z błędnego założenia że w jednej chwili tylko jeden będzie naciśnięty, gdy sprawdzasz po kolei klawisze i trafisz  na naciśnięty, nie sprawdzasz kolejnych, od razu wywołujesz funkcję mu przypisaną. Powinieneś zawsze sprawdzić w pętli wszystkie 8 klawiszy, a w razie znalezienia przyciśniętego wywołać przypisaną mu funkcję i przejść do sprawdzenia kolejnego klawisza! Aż będzie wszystkie 8, nie mniej i nie więcej, oczywiście dla każdego z osobna wywoływać jego funkcję. Mam nadzieję że coś z tego zrozumiesz.
Zapisane
CodAsm
Szeregowy
*
Offline Offline

Wiadomości: 49


« Odpowiedz #147 : Listopada 12, 2010, 19:29:18 »

Po lekturze kilku kodów źródłowych zauważam, że moim najgłupszym błędem jest pozostawienie pętli głównej pustej- w moich programach nazywa się ona forever (lepiej byłoby ją nazwać main).

Przykładowo pętla main w źródle Bill World (http://nesdev.parodius.com/billworld01.zip) :
*czyści spr-ram
*czyta joypad (zapętlenie obsługi joya, o którym wspominał Grucus)
*obsługuje pauzę
*czeka na nadejście nmi, które wykona resztę roboty
*wykonuje powyższy schemat od początku

Obsluga joya w tym kodzie wygląda mniej więcej tak (trzy pierwsze punkty obsługuje pętla main, ostatni jest zaszyty w nmi):
*zapamiętanie ostatnio odczytanego przycisku pada  \   
*odczyt aktualnie wciśniętego przycisku                  /  procedura czytająca jopad
*obsługa pauzy
*obsługa wszystkich przewidzianych w grze kombinacji przycisków (np. rożne kombinacje przycisku skoku i krzyżaka)

Niestety zdałem sobie sprawę, że jestem cały czas strasznym Newbie w temacie asemblera pod NES i muszę jeszcze wiele się nauczyć, ale myślę, że uda mi się z czasem lepiej rozpracować temat

Na koniec dwie strony:
*http://www.the-interweb.com/serendipity/index.php?/categories/8-NES/P2.html - artykuły z opracowanymi fragmentami
  zdeasemblowanrgo kodu gry Faxanadu i nie tylko)
*http://games.greggman.com/game/programming_m_c__kids/ - artykuł jednego z autorów gry M. C. Kids
« Ostatnia zmiana: Listopada 12, 2010, 19:44:21 wysłane przez CodAsm » Zapisane
mog123
Chorąży
***
Offline Offline

Wiadomości: 221


WWW
« Odpowiedz #148 : Listopada 15, 2010, 21:04:58 »

programowałeś kiedyś w C?
Zapisane

http://mog123x.blogspot.com/
Moje pięć groszy.
dr00id88
Gość
« Odpowiedz #149 : Listopada 15, 2010, 21:44:46 »


Na koniec dwie strony:
*http://www.the-interweb.com/serendipity/index.php?/categories/8-NES/P2.html - artykuły z opracowanymi fragmentami
  zdeasemblowanrgo kodu gry Faxanadu i nie tylko)

o, to dosc ciekawe!
Zapisane
CodAsm
Szeregowy
*
Offline Offline

Wiadomości: 49


« Odpowiedz #150 : Listopada 17, 2010, 13:09:30 »

programowałeś kiedyś w C?

1. mog123 Nie wiem czy to można nazwać programowaniem, nie utrzymywałem nigdy nic większego niż 100 linijek (kiedy skrobałem w WinAPI mogło być nieco więcej). Proste rzeczy. Jeżeli idzie o asm lubię go sobie zapisywać w pseudokodzie C (w taki sposób najczęściej wykorzystuję C).


Na koniec dwie strony:
*http://www.the-interweb.com/serendipity/index.php?/categories/8-NES/P2.html - artykuły z opracowanymi fragmentami
  zdeasemblowanrgo kodu gry Faxanadu i nie tylko)

o, to dosc ciekawe!

2. Co się tyczy Faxanadu ostatnio zagrywam się w to bez pamięci, jak dla mnie dzieło sztuki na MMC1.
« Ostatnia zmiana: Listopada 17, 2010, 13:18:25 wysłane przez CodAsm » Zapisane
alzen
Gość
« Odpowiedz #151 : Grudnia 26, 2010, 13:50:33 »

Nie wiem czy temat jest odpowiedni, chciałbym spytać jaką księżkę polecalibyście do nauki Assemblera 6502?

Miałem kiedyś książkę autorstwa Jana Ruszyca, "Informatyka Mikrokomputerowa - Assembler 6502 - ATARI" (jest chyba dalej do pobrania na jednym z polskich for o ATARI). Książka była z 1987 roku i jako, że na razie niemalże wcale się na tym nie znam nie wiem czy programowanie pod 6502 dla ATARI nie różni się nieco od programowania tegoż mikroprocesora dla Pegasusów/NESów.

Poza tym jak pisałem, książkę tę miałem ale chyba już na dobre się zgubiła (a na kompie czytać nie lubię), więc prosiłbym o jakieś sugestie dobrych publikacji dla noobów; nie muszą być polskojęzyczne, z angielskimi też sobie poradzę; byleby w miarę czytelnie wprowadzały w tego assemblera (ta książka Ruszyca była jak dla mnie bardzo przystępna).
Zapisane
dr00id88
Gość
« Odpowiedz #152 : Grudnia 26, 2010, 19:03:21 »

Programowac potrafisz?
Bawiles sie kiedykolwiek Asemblerem?
Nie masz rodziny badz mieszkasz w piwnicy?
Zapisane
alzen
Gość
« Odpowiedz #153 : Grudnia 26, 2010, 21:44:21 »

dr88, jak zwykle bez konkretnej odpowiedzi.

Bawiłem się tyle o ile; ale chciałbym się w tym trochę rozeznać bo to jednak interesująca kwestia. Co do programowania, poza kilkoma skryptami w Bashu raczej niewiele więc raczej nie programuję. Zdaniem wielu to bardzo utrudnia podejście do Assemblera ale mam to w nosie Smile.

Polecajcie dobre publikacje i nie marudźcie; Ruszyc super zrobił tą książkę bo wychodził od przeliczania dzięsiętnych na szesnastkowe co też musiałem przerobić i sugeruje przerabianie rozdziałów jeden po drugim więc jak najbardziej dla mnie; ale może jest jeszcze coś ciekawego. Albo poszukam Ruszyca albo czegoś innego, jak nie to zostaną publikacje z sieci ale wolałbym to co miałem a sieciowymi jeśli coś załapię to się posiłkować raczej.
Zapisane
siudym
Gość
« Odpowiedz #154 : Grudnia 27, 2010, 11:53:43 »

ana Ruszyca, "Informatyka Mikrokomputerowa - Assembler 6502 - ATARI" (jest chyba dalej do pobrania na jednym z polskich for o ATARI)

A daj se na luz ze sciaganiem... Na alleraztanioidrogo.pl masz je czesto ponizej 10zl. Ja chyba kupilem za 9+wysylka.
Ja sam mam wlasnie ta ksiazke. Procek ten sam, wiec co za roznica czy NES czy ATARI czy komoda. Wiadomo ten NES'owy ma chyba mniej rozkazow, ale te najwazniejsze i samo sedno sprawy jest te same. Kup i czytaj.

Dla przykladu:
http://www.siudym.gower.pl/nes_demo_2.nes

Sposob animowania tego nietoperka wyszukalem wlasnie w tej ksiazce. Oczywiscie nie bylo to opisane w sensie "jak cos animowac" ale szukalem rozwiazania petli. Znalazlem przykladowy kodzik i w symie bez wiekszych zmian NESASM slicznie go przyswoił.

Dobra rada - kup ta ksiazke + te tutoriale ASM dedykowane dla NES z nesdev i je sobie podrukuj. Wsio.

A jak jednak chcesz sciagac:
http://atarionline.pl/biblioteka/materialy_ksiazkowe/Asembler%206502%20%28v2%29.pdf
« Ostatnia zmiana: Grudnia 27, 2010, 11:57:39 wysłane przez siudym » Zapisane
alzen
Gość
« Odpowiedz #155 : Grudnia 27, 2010, 21:24:13 »

Thx siudym.
Zapisane
CodAsm
Szeregowy
*
Offline Offline

Wiadomości: 49


« Odpowiedz #156 : Stycznia 05, 2011, 14:53:36 »

1. Ponieważ link polskiej wersji Tutoriala NESAsm jest już dawno niekatualny, podaję nowy (poprawiłem kilka drobnych błędów)

http://wrzucacz.pl/file/8231294235601

Tak na marginesie kompletny kurs NESAsm i dużo więcej o programowaniu gier pod NES można znaleźć  na forum NintendoAge pod poniższymi adresami:
    http://nintendoage.com/forum/messageview.cfm?catid=22&threadid=7155
    http://nintendoage.com/forum/messageview.cfm?catid=22&threadid=33287

2. (Do alzen'a)
    Programowanie NES różni się od ogólnego programowania 6502 przede wszystkim poniższymi:
    -mapą pamięci (po prostu inna organizacja pamięci dla danych graficznych i muzycznych)
    -urządzenia I/O (czyli inaczej obsługujemy wyświetlanie grafiki i granie przez chip dźwiękowy)
      używamy po prostu innych adresow portów I/O
    -brak obsługi trybu dziesiętnego (systemy BIN/HEX muszą być samodzielnie przez programistę
     zamieniane na BCD)
    -NES nie ma żadnego systemu operacyjnego, a więc i procedur ułatwiających nam życie
     (np. do obsługi liczb ułamkowych), trzeba je sobie samemu napisać
    -w NES-owej wersji procesora 6502 nie ma kilku instrukcji, które są w Atarynce czy C64

    *Wspólną cechą NES i innych konsol działających na procesorach 6502 jest to że kod wykonujący  
      obliczenia jest niemalże identyczny i można go wklejać w kod źródłowy prawie w postaci
      niezmienionej(Np. dodawanie,mnożenie i obliczanie jakiejś funkcji).
      Jednak w przeciwieństwie do innych maszyn w NES sami musimy zatroszczyć o tryb dziesiętny
      jak napisałem w 3 myślniku.
    
3. alzen jeżeli nie będziesz czegoś rozumiał/wiedział, to służę pomocą o ile sam będę wiedział.
« Ostatnia zmiana: Stycznia 06, 2011, 18:51:27 wysłane przez CodAsm » Zapisane
CodAsm
Szeregowy
*
Offline Offline

Wiadomości: 49


« Odpowiedz #157 : Czerwca 09, 2011, 22:14:18 »

1. Ostatnio na forum nesdev znalazłem link do fajnego symulatora 6502. Jest dość prosty w użytku.
   Zanim umieści się jakąś prockę w kodzie nes można sobie ją przetestować.

  http://home.pacbell.net/michal_k/

2. Link do wtyczki przeznaczonej do IDA pro umożliwiającej debugowanie rom'ów NES (i do wątku na   
    którym go znalazlem).

  http://www.openrce.org/repositories/users/dennis/NESpackage.zip
  http://nesdev.parodius.com/bbs/viewtopic.php?p=40454&sid=f1ab6cadbccc30268721e1c140be5c73

3. Męczę się z konfiguracją ca65 (cc65) przez ostatnie dni. Bardzo polecany kompilator na
    bbs-ie. W poniższym wątku piszą trochę o konfiguracji, gdyby ktoś miał ochotę pobawić ca65 to
    poza samą dokumentacją kompilatora i programu np. GNU Make na początek polecam przeczytać
    ten wątek. W ogóle serwis, na którym znajduje się poniższe forum jest całkiem ciekawy.

   http://www.nesworld.com/cgi-bin/yabb/YaBB.pl?num=1263859326

   
Zapisane
dr00id88
Gość
« Odpowiedz #158 : Czerwca 10, 2011, 00:25:24 »

no to sie przerzuc juz na asm6
Zapisane
CodAsm
Szeregowy
*
Offline Offline

Wiadomości: 49


« Odpowiedz #159 : Czerwca 12, 2011, 09:31:57 »

1.Na początek linki do dyskusji dotyczących, który jest lepszy ca65 czy asm6:

http://nesdev.parodius.com/bbs/viewtopic.php?t=7014&highlight=asm6+cc65
http://nesdev.parodius.com/bbs/viewtopic.php?t=3605&start=0

2. Linki o tym jak lepiej ogarnąć ca65:

http://www.nesdev.com/bbs/viewtopic.php?p=4582&sid=e330a1ab803685a8b32253faed1c5721
https://bitbucket.org/ddribin/nerdy-nights/src

3. Każdy z tych asemblerów ma swoje wady i zalety:

   asm6:
   *łatwość przeniesienia kodu z NESASM, gdyż składnia jest podobna
   *prosta asemblacja, bo odbywa się w jednym kroku (kompilator i linker to jedno)
   *obsługa wygodnych etykiet lokalnych '+' i '-'
   *obsługa większej ilości banków niż nesasm, więc lepiej jest z mapperami
   *łatwość tworzenia małych plików  

   ca65:
   *składnia nieco różni się od NESASM (chodzi tu głownie o określanie adresów w romie i konfigurację)
   *proces kompilacji jest rozbity na kilka etapów (asemblacja i łączenie) co daje elastyczność
   *konieczność przygotowania pliku konfiguracyjnego .cfg i reguł w pliku makefile
   *mappery nie stanowią tu żadnego problemu ze względu na możliwości konfiguracji
   *nieco inna obsługa etykiet lokalnych '+' i '-'
   *dużo kombinowania i możliwość wystąpienia błędów na wielu etapach co może być irytujące

4. Większość lepszych programistów na nesdev preferuje ca65. Jakimś cudem udało mi się szczęśliwie skonfigurować  
    wszystko. Poza tym każdy programista, student informatyki powinien według mnie przynajmniej  
    orientować się jak działa mechanizm skryptów makefile, więc póki co pozostaję przy ca65. :-P
« Ostatnia zmiana: Czerwca 12, 2011, 16:56:58 wysłane przez CodAsm » Zapisane
Strony: 1 ... 6 7 [8] 9 10 11
  Drukuj  
 
Skocz do:  

Działa na MySQL Działa na PHP Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC Prawidłowy XHTML 1.0! Prawidłowy CSS!
Strona wygenerowana w 0.069 sekund z 19 zapytaniami.