Marca 29, 2024, 00:12:57
Witamy,
Gość
.
Zaloguj się
lub
zarejestruj
.
1 Godzina
1 Dzień
1 Tydzień
1 Miesiąc
Zawsze
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
EMU-NES #PL FORUM © 2004-2015
>
Nes/Pegasus/Famicom
>
Hacki i Romhacking/Programowanie
>
Programowanie Nes'a (procesora 6502)
Strony:
1
...
5
6
[
7
]
8
9
...
11
« poprzedni
następny »
Drukuj
Autor
Wątek: Programowanie Nes'a (procesora 6502) (Przeczytany 78609 razy)
0 użytkowników i 1 Gość przegląda ten wątek.
CodAsm
Szeregowy
Offline
Wiadomości: 49
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #120 :
Września 29, 2010, 12:20:31 »
Napisalem prosty programik, który ma załadować palety i nametable (razem z attribute table). Na wszelki wypadek dopisałem 2 procedury ładujące nametable jedna w trybie absolutnym indeksowanym, a drugą w pośrednim postindeksowanym, jednak coś jest nie tak. W Nintendulatorze i FCEU po otwarciu przeglądarek pamięci PPU nie pojawia się nic, czyli nic się nie załadowało. Binarka NameTable jest w porządku, bo ładowałem ją jednym z programów dołączonych do kursu NESASM (tego PowerPak'owego).
Ogólnie mówiąc to zauważyłem, że problemy z wyświetlaniem czegokolwiek na ekranie pojawiają się kiedy próbuję używać procedur (rozkazami jsr i rts), natomiast kiedy układam wszystko etykietami bez wejść i powrotów procedur wszystko jest ok. Nie pierwszy raz probuję skompilować coś z procedurami zamiast etykiet i kompletnie nic mi nie wychodzi.
Czy ktoś mógłby naprowadzić mnie co jest w kodzie nie tak? Oto link do plików:
http://wrzucacz.pl/file/9841285754383
Zapisane
dr00id88
Gość
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #121 :
Września 29, 2010, 14:58:46 »
Bo żeś [CENZURUJE] [CENZURUJE].
Poprawione:
Kod:
.dw nmi
.dw reset
.dw 0
edit: skończ już rzucać tymi "k**wami" i pochodnymi na forum, bo aż się odechciewa tu przebywać... [dop.daf]
EDIT:
... frustracja;)
«
Ostatnia zmiana: Września 29, 2010, 19:23:54 wysłane przez dr88
»
Zapisane
CodAsm
Szeregowy
Offline
Wiadomości: 49
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #122 :
Września 30, 2010, 11:05:54 »
Dr88
oczywiście miał rację. Kod był pełny błędów. A oto paczka z poprawionym:
http://wrzucacz.pl/file/8561285837504
Zapisane
dr00id88
Gość
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #123 :
Września 30, 2010, 14:57:22 »
taki efekt, odpalane pod FCEU 0.98.13mm June 15. Postuje, bo nie wiem czy kolory palety tak celowo, czy cos nie tak:)
Zapisane
CodAsm
Szeregowy
Offline
Wiadomości: 49
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #124 :
Września 30, 2010, 19:13:38 »
Kilka postów temu pytałem się, aby upewnić się czy wiem jak kolory są przypisywane obiektom, bo długo nie mogłem tego ogarnąć. Trochę w heksach bawiłem się i zmieniłem kilka rzeczy, żeby było widać, że nie skopiowałem obiektow z gry (wszystko jest w binarkach):
*W jednej z palet tła z mario podmieniłem kolor na fioletowy, zmieniłem kolor podłoża
*Dodałem niesymetryczne okienka w zamku, żeby było widać, że to nie z gry
*Wszystkie palety Sprite'ów ujednoliciłem do 4 tych samych kolorów, jeden z nich (ceglany bodajże) zamieniłem na fioletowy
*Poza tym napisałem sobie prockę do joya wykorzystującą przesunięcie z rotacją (z tym ror-ami i rol-ami miałem problem w x86)
«
Ostatnia zmiana: Września 30, 2010, 21:47:27 wysłane przez CodAsm
»
Zapisane
siudym
Gość
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #125 :
Września 30, 2010, 22:44:40 »
Cytat: CodAsm Września 30, 2010, 19:13:38
*Poza tym napisałem sobie prockę do joya wykorzystującą przesunięcie z rotacją
hmm odpalilem ROM i ten mario to chodzi tylko w jedna strone. Tzn jaka rotacja? Moge nim sterowac, idzie do przodu, ale w druga strona idzie tylem, wiec nie ma tu rotacji.
Zapisane
dr00id88
Gość
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #126 :
Września 30, 2010, 23:42:23 »
Siudym, jemu chyba chodzilo o zapis 4016, 8 razy jeden bit.
Zapisane
CodAsm
Szeregowy
Offline
Wiadomości: 49
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #127 :
Października 01, 2010, 21:47:27 »
1. Chodziło mi o obsłygę joya, tak aby wszystkie wyplute przez port $4016 osiem bitów zostało zebrane do jednej bajtowej zmiennej.
Przebieg pętli wygląda mniej więcej tak:
*Czytanie bitu z $4016
*Wysunięcie go do znacznika c instrukcją lsr
*Zebranie go przez rol i ewentualne przesunięcie w lewo (jeżeli pojawił się w poprzedniej iteracji)
2. Próbowałem dziś napisać procedurę. odwracania postaci, ale coś nie chciało działać. Wydaje mi się, że sposób jest ok. Kwestia
czasu, powinienem dać radę zrobić. Jeżeli będę miał problem to napiszę.
Zapisane
siudym
Gość
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #128 :
Października 01, 2010, 22:01:52 »
To bardzo proste, przypisz dla joya lewo/prawo atrybuty sprajta odpowiedzialne za ich rotacje. Np. wciskajac lewo/prawo zmienia sie atrybut HORIZONTAL FLIP spritea. Dokladnie nie napisze, bo dawno nie siedzialem w tym, ale dojdziesz w mig. Mozesz dodac takze atrybut resetujacy spr po kazdym wciskaniu L/R, wtedy np. postac stojaca bedzie patrzec twarza w strone gracza, a dopiero lewo/prawo zmieniac sie (to wazne, bo samo GOŁE zmienianie samego Horizontal ATR bedzie losowe i czasem wciskajac kilka razy L/R bedzie chodzil odwrotnie hehe). Jest masa mozliwosci, ja gdy doszedlem do pewnego poziomu kombinacji stwierdzilem, ze juz nie wiedza a checi i samozaparcie mnie ogranicza
(czyt.: Lenistwo)
«
Ostatnia zmiana: Października 01, 2010, 22:04:22 wysłane przez siudym
»
Zapisane
dr00id88
Gość
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #129 :
Października 01, 2010, 23:18:45 »
Cytat: siudym Października 01, 2010, 22:01:52
stwierdzilem, ze juz nie wiedza a checi i samozaparcie mnie ogranicza
(czyt.: Lenistwo)
i skromnosc
Zapisane
CodAsm
Szeregowy
Offline
Wiadomości: 49
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #130 :
Października 02, 2010, 08:04:00 »
Miałeś rację
Siudym
. To działa:
http://wrzucacz.pl/recived?upload_id=4861285999039
Całkiem niedawno znalazłem poniższy dokument, zobaczymy czy uda mi się zrobić procedurę skoku:
http://www.flipcode.com/documents/gravity.txt
Zapisane
dr00id88
Gość
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #131 :
Października 02, 2010, 16:51:21 »
Cytat: CodAsm Października 02, 2010, 08:04:00
Całkiem niedawno znalazłem poniższy dokument, zobaczymy czy uda mi się zrobić procedurę skoku:
http://www.flipcode.com/documents/gravity.txt
Zwykła podręcznikowa krzywa balistyczna. Poczytaj raczej teorie na temat rzutu poziomego z jakiejs fizycznej licealnej ksiazki. To samo wylozone.
Zapisane
siudym
Gość
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #132 :
Października 03, 2010, 03:24:15 »
A dopisze dla potomnych: Poza SPR ATTR mozna podkladac pod L/R np. innego tilesa, zrobic sobie w CHR jednak klatke idacego w lewo, druga w prawo i podmienic nr. tilesa pod L czy R. Dodatkowo mozna zmieniajac ATR animowac go. Np. ustawiamy petle w ATR aby gdy trzymamy np. L zmienialy sie tilesy od 1 do 5. Mialem to w demku z latajacym nietoperzem. Mozna kombinowac, ja dodatkowo animacje przyspieszalem gdy sie wciskalo kierunki - taki efekt szybszego trzepotania skrzydel w locie niz stojac w miejscu
http://www.siudym.gower.pl/nes_demo_2.nes
To wersja bez zmiany akurat lewo/prawo.
«
Ostatnia zmiana: Października 03, 2010, 03:27:30 wysłane przez siudym
»
Zapisane
CodAsm
Szeregowy
Offline
Wiadomości: 49
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #133 :
Października 19, 2010, 19:33:00 »
Próbowałem nieco sformułować procedurę umożliwiającą skok postaci, miałem jednak problem. Co do krzywej balistycznej przestudiowałem wzory, z tego co widzę to jedyne co na nesie można zastosować to listę wartości ręcznie wyliczonych z wzorów na krzywą balistyczną (tu by się prosiło o jakieś adresowanie pośrednie
). Nawet postowali o tym na forum nesdev.
Mój pomysł bazowałby jednak na tym co umieszczono we wcześniej linkowanym dokumencie (
http://www.flipcode.com/documents/gravity.txt
) :
*współrzędna x powinna być niezależna (wystarczy obsługa kursorów joypada, która już jest- ewentualnie dodanie tam animacji)
*powinno się modyfikować jedynie koordynatę y
*dla uproszczenia kodu możnaby dodać flagę określającą zwrot skoku
1 ->w górę
0 -> w dół
*konieczne byłoby utworzenie stałych:
-maksymalnej/minimalnej wysokości postaci
podłoga=208 (bo pod postacią mamy 4 Tiles'y)
najwyzszy_punkt= podłoga - jump_height
-przyspieszenia (np. a=10 )
-wysokości skoku (np. jump_height=100)
*Jeżeli jest naciśnięty klawisz skoku, to za każdym NMI wykonywałoby się następującą procedurę:
W_górę:
V=V-a
y=y-V
W_dół:
V=V+a
y=y+V
Sprawdź_Wspolrzedne:
;Kod sprawdzający czy współrzędna postaci w następnym przebiegu ma być zmniejszana czy zwiększana
;Ustawiająca flagę zwrotu skoku
AktualizacjaSprite'ów:
;Przepisanie y'ków do odpowiednich komórek SPR-RAM
______________________________________________________________________________________________________________
Nie oczekuję że ktoś rozwiąże za mnie problem, ale prosiłbym o drobną pomoc:
-czy dobrze rozumuję
-czy w tej koncepcji nie ma jakichś rażących błędów
-ewentualna pomoc w sformułowaniu szczegółowszego pseudokodu
______________________________________________________________________________________________________________
Dodam ponadto, że próbowałem zakodować w NESASM'ie to wszystko, ale coś musiałem spieprzyć z warunkami, bo postać leci cały czas w górę. (Bez ogólnej procedury kolizji coś czuję, że to będzie i tak marnota). Oto fragment kodu, który miał obsłużyć skok:
Kod:
; Procedura wywoływana w kodzie inicjalizacyjnym
init_jump_variables:
lda #$00
sta jumping
lda #$d0
; Gdy postać stoi na ziemi
sta coord_y
lda #$00
sta velocity
lda #$0a
sta acceleration
lda #$00
sta jump_dir
;początkowy kierunek skoku:
; *#$00 - W górę
; *#$01 - W dół
; Procedura skoku postaci wywołowywana w każdej klatce
handle_jump:
; Na początek należy sprawdzić czy postać skacze
lda jumping
cmp #$01
bne end_handle_jump
jump_up:
lda jump_dir
cmp #$00
bne jump_down
lda velocity
; \
clc
; \ v = v + a
adc acceleration
; /
sta velocity
; /
lda coord_y
; \
sec
; \ y = y - v
sbc velocity ; /
sta coord_y ; /
;
; a = coord_y
cmp #$a0
; if(coord_y <> 160)
bne update_sprite_y ; W następnym NMI bohater ma się nadal wznosić
; else
lda #$01 ; Ustaw kierunek na przeciwny
sta jump_dir ;
jmp update_sprite_y
jump_down:
lda jump_dir
cmp #$01
bne jump_up
lda velocity ; \
sec ; \ v = v - a
sbc acceleration ; /
sta velocity ; /
lda coord_y ; \
clc ; \ y = y + v
adc velocity ; /
sta coord_y ; /
cmp #$d0 ; if(coord_y <> 208)
bne update_sprite_y ; W następnym NMI bohater ma nadal spadać
; else
lda #$00 ; Ustaw kierunek na przeciwny (zostanie on użyty przy następnym skoku)
sta jump_dir ;
lda #$00
sta jumping
update_sprite_y:
lda coord_y
clc
adc #$08
sta $0200
sta $0204
lda coord_y
sta $0208
sta $020C
end_handle_jump:
rts
______________________________________________________________________________________________________________
Zastosowałem odwrócone znaki (gdyż chciałem operować na dodatnich wartościach i nie babrać się w kodzie U2- dodatkowe potencjalne błędy- moje dopiero raczkujące umiejętności kodowania w asm6502)
Za każdą najdrobniejszą pomoc/wskazówkę z góry dziękuję.
«
Ostatnia zmiana: Października 19, 2010, 19:40:01 wysłane przez CodAsm
»
Zapisane
dr00id88
Gość
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #134 :
Października 20, 2010, 06:23:05 »
Mowilem, sprawdz sobie ten rzut poziomy, to co napisales, ze wspolrzedna x nie jest modyfikowana to normalne, w koncu to funkcja f(x).
Zapisane
CodAsm
Szeregowy
Offline
Wiadomości: 49
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #135 :
Października 22, 2010, 14:41:33 »
W opracowaniach na temat rzutu poziomego jest sporo innych wzorów, ale zdaje się, że na NES-ie spokojnie wystarczy mi to:
________________________________________________________________________________________________________________
Prędkość i wysokość
V = sqrt(V
x
2
+V
y
2
)
h=gT
2
/2
gdzie:
V
x
=const= V
0
V
y
=g*T
I przemieszczenie uzyskane za pomocą krzyżaka (tzn. w lewo/w prawo - tego nigdzie nie trzeba liczyć)
l=V
x
*T (Nie interesuje nas, jeżeli chcemy tylko skoku w pionie)
Symbole:
g- Grawitacja (eksperymentalnie dobrana stała wartosc w programie tak, aby V
y
obliczona z powyższego wzoru była w miarę odpowiednia- na oko)
h- Wysokość (dobrać odpowiednią skalę w pikselach lub Tilesach)
T=1/60 s (gdyż w czasie sekundy mamy 60 NMI, a interesuje nas o ile wzniesie się postać w znanym ułamku czasowym)
V
y
- Prędkość w pionie
l- Droga przebyta w poziomie
______________________________________________________________________________________________________________
Jeżeli to co tu mam jest ok i wystarczające to najpierw trza napisać poniższe procedury dla liczb 16 bitowych (?):
-mnożenia
-dzielenia
-potęgowania
-pierwiastkowania (?)
______________________________________________________________________________________________________________
Moim problemem jest przełożenie sobie teorii fizyki na praktykę tzn. jak powinienem użyć wszystkich tych wielkości w kodzie. Tak więc podejmuję kolejną próbę.
EDIT:
Po przeszukaniu NESDev sporo jest na ten temat informacji wraz z wzorami:
http://nesdev.parodius.com/bbs/viewtopic.php?t=5192&postdays=0&postorder=asc&highlight=gravity&start=0&sid=4b740314897218bb76705750bae3288b
- O fizyce
http://nesdev.parodius.com/bbs/viewtopic.php?t=3096&highlight=gravity
- O skakaniu
http://tasvideos.org/GameResources/NES/Rockman/Data.html
«
Ostatnia zmiana: Października 22, 2010, 21:34:48 wysłane przez CodAsm
»
Zapisane
mog123
Chorąży
Offline
Wiadomości: 221
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #136 :
Października 26, 2010, 00:00:19 »
widać że słabo z algorytmami
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.
Zapisane
http://mog123x.blogspot.com/
Moje pięć groszy.
mog123
Chorąży
Offline
Wiadomości: 221
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #137 :
Października 26, 2010, 00:06:13 »
Cytat: siudym Października 01, 2010, 22:01:52
Jest masa mozliwosci, ja gdy doszedlem do pewnego poziomu kombinacji stwierdzilem, ze juz nie wiedza a checi i samozaparcie mnie ogranicza
(czyt.: Lenistwo)
Też doszedłem do tego momentu, gdy chciałem się uczyć to chęci było pełno. Gdy nauczyłem się wszystkiego czego chciałem i niby miałem przystąpić do "prawidłowego" pisania gry, to już mi się odechciało. Pisałem na GBA :p
Zapisane
http://mog123x.blogspot.com/
Moje pięć groszy.
CodAsm
Szeregowy
Offline
Wiadomości: 49
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #138 :
Października 26, 2010, 10:42:34 »
Cytat: mog123 Października 26, 2010, 00:00:19
widać że słabo z algorytmami
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
.
Zapisane
dr00id88
Gość
Odp: Programowanie Nes'a (procesora 6502)
«
Odpowiedz #139 :
Października 26, 2010, 11:08:13 »
a metoda Newtona-Raphsona to nie łaskaw w google pogrzebac? I nie bajeruj nam przesunieciami bitowymi, bo to kazdy osiol wie, ze szybsze.
Zapisane
Strony:
1
...
5
6
[
7
]
8
9
...
11
Drukuj
« poprzedni
następny »
Skocz do:
Wybierz cel:
-----------------------------
Nes/Pegasus/Famicom
-----------------------------
=> NES Champions League
=> News'y ze sceny NES/Famicom i nie tylko...
=> Gry
=> Emulatory/Emulacja
=> Szukam Gry
=> Hacki i Romhacking/Programowanie
=> Famicom Disk System
=> Poradniki, solucje, mapy, itp.
-----------------------------
EMU-NES #PL
-----------------------------
=> Ankiety
=> Warn & Ban
===> Regulamin forum oraz ogłoszenia admina
===> #nes ...iRC'owy kanał fanów NESa/Famicoma
-----------------------------
EMU-NES #PL Redakcja
-----------------------------
=> Pegagruz
-----------------------------
Jeszcze więcej NES-a...
-----------------------------
=> Sprzęt/Hardware
=> Kupię/Sprzedam/Zamienię - Ogłoszenia
=> Ogólne forum o Nesie/Pegasusie/Famicomie
=> Zlot EMU-NES
-----------------------------
Kategoria Nietematyczna
-----------------------------
=> Inne gry, komputery i konsole
=> Hyde Park
===> Reklama
===> Lata 80/70/60...
=> Śmietnik
Ładowanie...