Lipiec 19, 2019, 16:24:18 *
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] 2 3 ... 11
  Drukuj  
Autor W±tek: Programowanie Nes'a (procesora 6502)  (Przeczytany 56682 razy)
0 użytkowników i 1 Go¶ć przegl±da ten w±tek.
siudym
Go¶ć
« : Listopad 10, 2006, 12:48:13 »

Kilka lat temu bawiłem się w naukę assemblera 6502 oraz całego NES'a. Dzisiaj znowu wpadł mi do głowy pomysł, aby znowu coś "poPISać" Smile

Polecam tutorial (chyba najlepszy) programowania NES'a, niestety po angielsku:
http://www.patatersoft.info/gbaguy/nesasm.htm

Oraz oprogramowanie użyte w tutku:
http://nesdev.parodius.com/nesasm.zip

Wiecej info, soft, dokumentacje:
http://nesdev.parodius.com/#PC

A tutaj zrobione "niby demko" przeze mnie,
udało mi się poruszyć sprite'a  cheesy
http://bmkmoto.w.interia.pl/nesdemko.zip

Oczywiscie do tutoriala najlepiej sobie kupic ksiazke o programowaniu 6502 (atari/commodore) lub wydrukowac sobie z netu kursy programowania 6502 na atari (jest kilka w polskich wersjach) aby nauczyc sie podstaw assemblera pod ten procek.
« Ostatnia zmiana: Listopad 10, 2006, 12:51:52 wysłane przez siudym » Zapisane
DarQo
Wspiera aktywnie
Chor±ży
*
Offline Offline

Wiadomo¶ci: 159


8-bit powinno wystarczyc kazdemu


WWW
« Odpowiedz #1 : Listopad 10, 2006, 16:58:40 »

Danke! BTW je¶li kto¶ my¶li że po przeczytaniu całego tutoriala będzie już umiał robić gry to się może rozczarować :]
Zapisane

p***ole metro wole retro
siudym
Go¶ć
« Odpowiedz #2 : Listopad 10, 2006, 20:28:53 »

Da się Smile
http://nesdev.parodius.com/matrix.zip
http://nesdev.parodius.com/masmix.zip

Trzeba tylko chcieć i dobrze "zakumać" tutka Smile
Oczywiscie posiadanie jakiegos doc'a/ksiazki o 6502 tez wymagane Smile
Ja mam dwie takie:
http://www.allegro.pl/item141198823_mikrop...go_rodzina.html
http://www.allegro.pl/item132030139_atari_...zka_soeto_.html
Bardzo fajne Smile

Wersja darmowa kursu 6502 dla atari jest tutaj (to samo prawie)
http://tajemnice.atari8.info/index.html
« Ostatnia zmiana: Listopad 10, 2006, 22:17:05 wysłane przez siudym » Zapisane
dr00id88
Go¶ć
« Odpowiedz #3 : Lipiec 24, 2007, 11:57:06 »

Po godzinie udało się odpalić NESAsm na XP SP2. Potrzeba:
jakieś pliki cwsdpmi.zip, DOSBox, nerwy:], znajomość holenderskiego (forum).
Zapisane
siudym
Go¶ć
« Odpowiedz #4 : Lipiec 25, 2007, 16:07:43 »

albo wersja NESASM 2.52 dzialajaca na XP SP2 bezproblemowo od razu.. heh  heh
« Ostatnia zmiana: Lipiec 25, 2007, 16:08:02 wysłane przez siudym » Zapisane
dr00id88
Go¶ć
« Odpowiedz #5 : Lipiec 25, 2007, 16:57:23 »

Używam 2.51, bo tej drugiej jakoś dokopać nie mogłem. Szczerze mówiąc to dość proste to programowanie... Może niedługo coś swojego wypuszczę:]
Zapisane
aboabo
Spaghetti Samurai
Major
*****
Offline Offline

Wiadomo¶ci: 1110


geje we wsi


« Odpowiedz #6 : Lipiec 25, 2007, 20:44:14 »

sluchajcie przydalby mi sie spis literatury dostepnej w sieci z ktorej moglbym sie nauczyc programowania pod ten procek od podstaw (posiadajac jedynie znajomosc basica). mam na mysli literature dedykowaną dla C64. materialow na ten temat jest bardzo duzo, szperanie jak wiadomo jest czasochlonne a dochodzenie do pewnych rzeczy samemu bolesne i jeszcze raz czasochlonne. poszukuje jak najkonkretniejszych materialow, ktore moglbym pobrac z netu. oczywiscie moga byc po angielsku.

na c64power jest bardzo fajny spis ksiazek ktore z pewnoscia by wystarczyly jednak nie zamierzam licytowac ich na allegro bo chetnych jest duzo, w pobliskich antykwariatach tez pusto.
Zapisane


W pewnym archiwum znajduje sie autentyczne nagranie glosu Mieszka I, przypadkiem utrwalone przez garncarza pracujacego na kole garncarskim: "Poniewaz Mieszko I krzyczal glosem bardzo podniesionym to reka garncarza zlobiaca w tym czasie spiralny rowek (wzór luzycko-warminski) w miekkiej glinie drgala w rytm glosu Mieszka I jak membrana mikrofonu. A mysmy wzieli ten wykopany z ziemi talerz, polozyli na gramofonie i odtworzyli".
siudym
Go¶ć
« Odpowiedz #7 : Lipiec 30, 2007, 21:31:32 »

ajajajajjaa..... Kombinuje jak kon pod gore... Zrobilem prosty program, poruszajacy tilesa, odpalajacy nieco dzwieku oraz wczytujacy nametable. Niby nic oryginalnego, ale chcialem za wszelka cene zrobic to TYLKO w kodzie, bez dodatkowych plikow. Czyli cala grafika CHR, PALETA, NAMETABLE itd jest definiowane w kodzie - fajnie, bo wszystko pod reka Wink (czyli NROM 32kb max + VRAM, normalnie mamy 32KB+8KB CHR ROM, wiec nieco mniej miejsca, bo dane CHR siedza w PRG, a nie w CHR ROM. Jednak 32KB to naprawde wiele miejsca, powaznie Cheesy:D )

Niestety nametable (wczytalem tylko 1-sza 32tilesowa linie pozioma) zaczyna mi sie wyswietlac dopiero od prawie srodka ekranu, a nie od poczatku od gory...

Ogolnie wiem w czym problem, w rejestrze $2006, ktory to uzywamy do przygotowania odczytu palety i nametable, dubluje sie w kodzie chyba niepoprawnie... Kombinuje i nic.

Jak wywale pierwsze
Kod:
  lda #$3F  ;set ppu to start of palette
   sta $2006
   lda #$00
   sta $2006
   ldx #$00
to nametable startuje od gory, jednak paleta nie dziala... Aj... Pojecia juz nie mam, dopiero sie w sumie ucze ass'a i niestety juz mnie glowa boli... Zmieniam, kombinuje i nic... Cheesy Dro00id jak mozesz sprawdz co-nieco ok?



source: http://siudymus.w.interia.pl/vram_demo.asm
nes rom: http://siudymus.w.interia.pl/vram_demo.nes

Kod:
.inesprg 1
.inesmap 0
.inesmir 0
.ineschr 0

.bank 1    
.org $FFFA
.dw 0
.dw Start
.dw 0

.bank 0
.org $0000

YPos .db 00
XPos .db 00

.org $8000
Start:

jsr screen_off;ekran wylaczony
jsr cleartiles;czyscimy 4KB VRAMu
jsr tiles;kopiujemy tilesy z defchr do VRAM (w karcie)
jsr loadNames
jsr screen_on;wlaczamy ekran
jsr sound

lda #$3F;set ppu to start of palette
sta $2006
lda #$00
sta $2006
ldx #$00

loadpal:

lda Paldata,x
sta $2007
inx
cpx #$20
bne loadpal

infinite:

jsr vwait

ldx #$00;set start SPRRAM
stx $2003
ldx #$00
stx $2003

lda YPos;Y
sta $2004
lda #$01;tile number w pamieci VRAM na karcie
sta $2004
lda #%00000000;attr
sta $2004
lda XPos;X
sta $2004


lda #$01;reset pada (od)
sta $4016
lda #$00
sta $4016

lda $4016
lda $4016
lda $4016
lda $4016;reset pada (do)

lda $4016
and #1
bne PressU
lda $4016
and #1
bne PressD
lda $4016
and #1
bne PressL
lda $4016
and #1
bne PressR

jmp PressN

PressU:  ;tutaj jest to, co ma byc odpalone gdy wciskamy up

lda YPos
sbc #1
sta YPos
jmp PressN

PressD:  ;tutaj jest to, co ma byc odpalone gdy wciskamy down

lda YPos
adc #1
sta YPos
jmp PressN

PressL:  ;tutaj jest to, co ma byc odpalone gdy wciskamy left

lda XPos
sbc #1
sta XPos
jmp PressN

PressR:  ;tutaj jest to, co ma byc odpalone gdy wciskamy prawo
  ; jak dodam jsr vwait, to chodzi wolniej
lda XPos; bo czeka za kazdym ruchem na vb
adc #1
sta XPos
jmp PressN

PressN:  ;tutaj jest to, co ma byc wykonane gdy nic nie wciskamy
jmp infinite

screen_on:

jsr vwait
lda #%00000000
sta $2000
lda #%00011110;spr on, bg off, spr no clipp
sta $2001
rts


screen_off:

jsr vwait
lda #0
sta $2000
sta $2001
rts

vwait:

bit $2002
bpl vwait
rts

Paldata:

.db $3F,$20,$10,$00,$3F,$10,$10,$10,$3F,$10,$10,$10,$3F,$00,$00,$00
.db $3F,$16,$19,$01,$3F,$00,$00,$00,$3F,$00,$00,$00,$3F,$00,$00,$00

loadNames:

jsr vwait
lda #$20;set ppu to start vram
sta $2006
lda #$20
sta $2006
loadNames1:
lda nametable,x
sta $2007
inx
cpx #32;zmieniamy w zaleznosci od wielkosci nametable
bne loadNames1
rts

nametable:

.db $01,$01,$01,$01,$02,$02,$02,$02,$01,$01,$01,$01,$02,$02,$02,$02
.db $01,$01,$01,$01,$02,$02,$02,$02,$01,$01,$01,$01,$02,$02,$02,$02


tiles:                ;copy defchr tiles to VRAM

        lda #0        ;set VRAM row for first row of tiles ($0000)
        sta $2006
        lda #$10      ;skip the first tile (blank space)
        sta $2006
        ldy #0        ;reset indexer
tiles1:
        lda tileset,y
        sta $2007
        iny
        cpy #$20      ;number of tiles x 16 bytes ($10) per tile
        bne tiles1
        rts

cleartiles:                    ;clears out $0000-$0FFF in VRAM

        jsr vwait
        lda #0
        sta $2006
        sta $2006
        ldy #$10
cleartiles1:
        ldx #0
cleartiles2:
        sta $2007
        dex
        bne cleartiles2
        dey
        bne cleartiles1
        rts

sound:

lda %00011111
sta $4015

lda #%10101011
sta $4000
lda #%11111111
sta $4001
lda #%11111111
sta $4002
lda #%11111111
sta $4003
rts

tileset:

.defchr $23333331,\
  $32000013,\
  $30200103,\
  $30021003,\
  $30012003,\
  $30100203,\
  $31000023,\
  $13333332

.defchr $30000003,\
  $00000000,\
  $00223300,\
  $00211300,\
  $00211300,\
  $00223300,\
  $00000000,\
  $30000003

.defchr $00001111,\
  $00110000,\
  $11000000,\
  $00000000,\
  $00000000,\
  $00000000,\
  $00000000,\
  $00000000

; .defchr $00000000,\
;  $00000000,\
;  $00000000,\
;  $00000000,\
;  $00000000,\
;  $00000000,\
;  $00000000,\
;  $00000000
;dummy tile

*
Kod:
-> nieco rozpierniczyl skladnie kodu, jak cos dalem link do .SRC

ps. vjupiter: Ja sam do wszystkiego dochodze, metoda prob i bledow i czytania NESCTECH docow... Wszelkie tutoriale ASM jakos mi nie pomagaja Cheesy Na forum nesdev tez banda filozofow... zero pomocy  smiley

EDIT: Polecam ten tutorial http://www.c64power.com/?strona=programowanie
Duzoo pomaga w podstawach Wink
« Ostatnia zmiana: Lipiec 30, 2007, 21:41:45 wysłane przez siudym » Zapisane
aboabo
Spaghetti Samurai
Major
*****
Offline Offline

Wiadomo¶ci: 1110


geje we wsi


« Odpowiedz #8 : Lipiec 30, 2007, 21:43:15 »

chodzilo mi tylko o lepsze zrozumienie tematu poprzez czytanie wlasciwej literatury. to i tak tylko wiedza ktora lezy u podstaw, wiadomo ze zaraz potem zaczynaja sie schody.
Zapisane


W pewnym archiwum znajduje sie autentyczne nagranie glosu Mieszka I, przypadkiem utrwalone przez garncarza pracujacego na kole garncarskim: "Poniewaz Mieszko I krzyczal glosem bardzo podniesionym to reka garncarza zlobiaca w tym czasie spiralny rowek (wzór luzycko-warminski) w miekkiej glinie drgala w rytm glosu Mieszka I jak membrana mikrofonu. A mysmy wzieli ten wykopany z ziemi talerz, polozyli na gramofonie i odtworzyli".
dr00id88
Go¶ć
« Odpowiedz #9 : Lipiec 31, 2007, 09:51:37 »

Ale ty skromny jesteś:]

Nigdy w życiu do głowy by mi nie przyszło żeby grafikę do .asm dawać:] No i lepiej używać przerwań do VBlanka.
Co GBAGuy to myślę że dobre na początek, ale tak w połowie to zmieniasz tutorial, bo już nic nie rozumiesz, tak zamieszał.

Niedługo się zabieram za poważniejszy projekt. Interesuje mnie jednak obsługa myszy i klawiatury. Chyba to te same $4016, ale pewnie w inny sposób odczytywane.

Co do samego języku (biorąc pod uwagę kompilator NESASM) to różni się od klasycznego Asemblera, więc jeśli chcesz zaczynać to najpierw powinieneś poznać tajniki x86, a bynajmniej podstawy. Ułatwia sprawę...

Siudym: zobacz czy masz w Emu ustawioną Emulację PAL.
Zapisane
Senshu
Wspiera aktywnie
Major
*
Offline Offline

Wiadomo¶ci: 648


« Odpowiedz #10 : Lipiec 31, 2007, 10:07:28 »

Cytuj
Co do samego języku (biorąc pod uwagę kompilator NESASM) to różni się od klasycznego Asemblera, więc jeśli chcesz zaczynać to najpierw powinieneś poznać tajniki x86, a bynajmniej podstawy. Ułatwia sprawę...
[snapback]14429[/snapback]

Każdy to pisze, i dodatkowo można to wyczytać w prawie każdym tutorialu...Pytam tylko po co ? Podstawy może załapać ucząc się asm dla NESa, będzie robił to co lubi i pozna tajniki tego procesora, więc nie widze powodu żeby kombinował najpierw z x86...dobrze mu idzie z NES.
Zapisane
siudym
Go¶ć
« Odpowiedz #11 : Lipiec 31, 2007, 10:25:02 »

Cytuj
Ale ty skromny jesteś:]

Nigdy w życiu do głowy by mi nie przyszło żeby grafikę do .asm dawać:] No i lepiej używać przerwań do VBlanka.
Co GBAGuy to myślę że dobre na początek, ale tak w połowie to zmieniasz tutorial, bo już nic nie rozumiesz, tak zamieszał.

Niedługo się zabieram za poważniejszy projekt. Interesuje mnie jednak obsługa myszy i klawiatury. Chyba to te same $4016, ale pewnie w inny sposób odczytywane.

Co do samego języku (biorąc pod uwagę kompilator NESASM) to różni się od klasycznego Asemblera, więc jeśli chcesz zaczynać to najpierw powinieneś poznać tajniki x86, a bynajmniej podstawy. Ułatwia sprawę...

Siudym: zobacz czy masz w Emu ustawioną Emulację PAL.
[snapback]14429[/snapback]

Wlasnie nie rozni sie od typowego asemblera. Chyba, ze chodzi ci o ASM x86 to jasne jest inny, jednak jesli chodzi o ASM samego proca 6502 to oczywiscie to samo, identycznie wszystko jak w C64, wiec tutoriale na C64 mile polecane. Atari tez, sam mam dwie ksiazki ASM ATARI. Oczywiscie komputery maja jeszcze swoje rejestry systemowe, wiec te nie beda dzialac na NES'ie, wiadomo  heh

Tak wiec nie szukajcie jak cos NEs ASM'a jako tutka, ale 6502 ASM ogolnie Wink

GbaGuy - tak, dokladnie. Wlasnie napisalem, ze na DOBRY poczatek jest ok, ale tylko do nauki, bo nic z tego co napisal prawie nie dziala Cheesy No moze przesadzam, no i fajne info o SRAM napisal hehe, akurat w necie nie bylo tego, a dziala fajnie.

Ja sporo sie nauczylem z samych NESTECH docow, ladowalem rozne wartosci do rejetrow itd.

A emulator mam na PAL, a nawet jak zmienie na ntsc to bedzie to samo, jedynie przesokoczy o 8pix w dole i gorze - czyli to samo bedzie Wink

A przerwania VB jak widzisz czesto uzywam,  testowo gdzie sie da, fajna sprawa, mozna nawet nieco spowalniac co-nieco w kodzie vblankami Wink

A musz i kawiataura... No nie wiem czy to $4016, bo moze byc tak, ze te konsole maja dodatkowo jakis uklad sterujacy Cheesy Bo $4016 nie ma az tylu mozliwosci, ale kto wie... Zreszta nie widze nmigdzie info o tym...

PS. Jako testera kompilacji NES ASM polecam NESTOPIA lub FCEU, inne emu jakos ciezko radza sobie z jego wypocinami (przynajmniej te z "nauki jazdy" Smile
« Ostatnia zmiana: Lipiec 31, 2007, 10:28:45 wysłane przez siudym » Zapisane
siudym
Go¶ć
« Odpowiedz #12 : Lipiec 31, 2007, 10:39:56 »

Cytuj
Sorry... raczej $4017 - bo drugi port (dla drugiego gracza). I wtedy coś tam grzebie. Usiłowałem to wy-"trace'ować":] ale kiepskie wyniki. Trudno jednocześnie tą samą myszą obsługiwać breakpointy  i nią poruszać... a pod FCEUD nie działa (testowałem Educational Computer).

Do pseudo-perfekcji (czyli potrzeb) brakuje mi trzech rzeczy... rzetelny dokument o komponowaniu muzyki, obsługi tej pierd**onej myszy i czegoś gdzie jest sensownie wytłumaczone:

.dw NMI
.dw Reset
.dw IRQ
[snapback]14432[/snapback]


Do dzwieku mam jeden super, prosta sprawa jednak Smile
Jak znade ci dam, mozna nawet w kodzie ASM napisac prosta muzyke (no nie zaraz prposta, zalezy ile bedziesz siedziec przy jej robieniu Cheesy )
http://nesdev.parodius.com/2A03%20technical%20reference.txt
Mialem drugi jeszcze, jak znajde podam.
Pomocna tez mapa rejestrow: **** JSR na dole**** heh



A:

.dw NMI
- Przerwanie niemaskowalne, jak ustawisz BIT7 w 2000 to mozesz je wlaczyc lub wylaczyc. Jak wlaczysz to .dw NMI bedzie WYKONYWANE zawsze w czasie VBLANK (wymuszony). Czyli robisz cos takiego np.:  Ustawione .dw NMI (nie musi byc nazwa NMI, mozy byc COKOLWIEK, bo te 3 maja priorytet, czyli NMI->RESET->IRQ) wiec mozna nazwac nawet: (bo te nazwy to etykiety)

.dw Jako
.dw Baba
.dw Mandaryna

Dobra dalej, bo zamace:
Masz ustawiony bit 7 w 2000 na 1 i .dw NMI, te NMI to etykieta jakiegos programu
np.

NMI:
tutaj dajesz jakis program, ktory bedzie ZAWSZE!! wykonywany 1/50 lub 1/60 sekundy czyli w czasie VBLANK - zawsze!

To samo z:

.dw Reset
.dw IRQ

.dw Reset (etykieta, ja mam np. Start wpisany) to przerwanie POWERU i RESETU (klawiszy lub przerwania programoweg).

Reset:
tutaj dajesz w odzie program, ktory wykonuje sie NA SAMYM poczatku, gdy wcisniesz power off w konsoli lub wcisniesz RETET. Zawsze zacznie sie od tego miejsca (labela)

.dw IRQ jest ogolnie NIE UZYWANY, bo nie ma pozytku w NESIE z niego Cheesy No chyba, ze podlaczysz cos pod pin /IRQ w procesorze, jakis dodatkowy sprzet itd.

Zazwyczaj uzywa sie go tak:

.dw IRQ


IRQ:

rti ; czyli return from interupt (spierdaczaj z przerwania i wracaj skad przylazles  heh ) - w sumie to chyba nigdy nie wykonywane...

 heh  heh  heh  heh


Kod:
   +---------+----------------------------------------------------------+
    |  $4000  | pAPU Pulse #1 Control Register (W)                       |
    |  $4001  | pAPU Pulse #1 Ramp Control Register (W)                  |
    |  $4002  | pAPU Pulse #1 Fine Tune (FT) Register (W)                |
    |  $4003  | pAPU Pulse #1 Coarse Tune (CT) Register (W)              |
    |  $4004  | pAPU Pulse #2 Control Register (W)                       |
    |  $4005  | pAPU Pulse #2 Ramp Control Register (W)                  |
    |  $4006  | pAPU Pulse #2 Fine Tune Register (W)                     |
    |  $4007  | pAPU Pulse #2 Coarse Tune Register (W)                   |
    |  $4008  | pAPU Triangle Control Register #1 (W)                    |
    |  $4009  | pAPU Triangle Control Register #2 (?)                    |
    |  $400A  | pAPU Triangle Frequency Register #1 (W)                  |
    |  $400B  | pAPU Triangle Frequency Register #2 (W)                  |
    |  $400C  | pAPU Noise Control Register #1 (W)                       |
    |  $400D  | Unused (???)                                             |
    |  $400E  | pAPU Noise Frequency Register #1 (W)                     |
    |  $400F  | pAPU Noise Frequency Register #2 (W)                     |
    |  $4010  | pAPU Delta Modulation Control Register (W)               |
    |  $4011  | pAPU Delta Modulation D/A Register (W)                   |
    |  $4012  | pAPU Delta Modulation Address Register (W)               |
    |  $4013  | pAPU Delta Modulation Data Length Register (W)           |
    +---------+----------------------------------------------------------+
    |  $4014  | Sprite DMA Register (W)                                  |
    |         |                                                          |
    |         |  Transfers 256 bytes of memory into SPR-RAM. The address |
    |         |  read from is $100*N, where N is the value written.      |
    +---------+----------------------------------------------------------+
    |  $4015  | pAPU Sound/Vertical Clock Signal Register (R)            |
    |         |                                                          |
    |         |    D6: Vertical Clock Signal IRQ Availability            |
    |         |           0 = One (1) frame occuring, hence IRQ cannot   |
    |         |               occur                                      |
    |         |           1 = One (1) frame is being interrupted via IRQ |
    |         |    D4: Delta Modulation                                  |
    |         |    D3: Noise                                             |
    |         |    D2: Triangle                                          |
    |         |    D1: Pulse #2                                          |
    |         |    D0: Pulse #1                                          |
    |         |           0 = Not in use                                 |
    |         |           1 = In use                                     |
    |         +----------------------------------------------------------+
    |         | pAPU Channel Control (W)                                 |
    |         |                                                          |
    |         |    D4: Delta Modulation                                  |
    |         |    D3: Noise                                             |
    |         |    D2: Triangle                                          |
    |         |    D1: Pulse #2                                          |
    |         |    D0: Pulse #1                                          |
    |         |           0 = Channel disabled                           |
    |         |           1 = Channel enabled                            |
    +---------+----------------------------------------------------------+
tu doklaniej opisane
http://nesdev.parodius.com/2A03%20technical%20reference.txt
« Ostatnia zmiana: Lipiec 31, 2007, 10:51:12 wysłane przez siudym » Zapisane
dr00id88
Go¶ć
« Odpowiedz #13 : Lipiec 31, 2007, 10:46:09 »

Cytuj
.dw IRQ


IRQ:

rti

Taką kombinację też widziałem i wydawała mi się kretyńska:)
Czekam na dokument...

btw. muszę tą mysz rozszyfrować:D
Zapisane
siudym
Go¶ć
« Odpowiedz #14 : Lipiec 31, 2007, 10:48:24 »

No bo w sumie po co to? Lepiej zrobic tak:

.dw 0 (jako irg) i po klopocie

:]
Zapisane
dr00id88
Go¶ć
« Odpowiedz #15 : Lipiec 31, 2007, 18:31:42 »

Moje małe testowe dzieło sztuki:)
NES Testing Pad
Zapisane
siudym
Go¶ć
« Odpowiedz #16 : Lipiec 31, 2007, 23:25:15 »

heh. Poprawione.

dziala idealnie, nametable wyswietla, porusza tilesa, odpala pare dzwiekow (wciskajac START testujemy wszystkie kanaly, jedynie bez PCM)  i wszystko w kodzie. Plik NES 16KB, bo tylko 1 bank bez chr (wszycho jest w prg) heh
Teraz mozna sie bawic dalej Smile Postaram sie zrobic cos w stylu berzerk albo tron z atari ;P

http://siudymus.w.interia.pl/vram.nes




EDIT:

Testowalem na konsoli, niestety tylko nametable sie wyswietla, jeszcze ucina gorne 32x8 pixeli. Zreszta nie ma sie co dziwic, wiele dem testowalem i masa bledow zawsze Wink Aha. Moj kod to NROM PRG+VRAM, dzieki temu dev-cart UNROM idealnie nadaje sie jako tester programu Cheesy Juz na forum pisalem o tym, ze na UNROM'ie mozna odpalac NROM'y ale bez CHR ROMU, jednak NROM z VRAM mozna hehe Smile

Jak widac nieco przyciety obraz z lewej strony, jednak to nie wina kodu, a jedynie kijowego centrowania obrazu TV.


Drugie demko, ludzik i labirynt. Mam problem ze zmiana polozenia sprite'a, jest o polowe pix niesymetrycznie wzgledem tla w pionie... W tle napis emu nes, niestety zapomnialem polaczyc labirynt, wiec nikt nie wlezie tam hehe. A nie chce juz mi sie juz tego poprawiac Wink
http://siudymus.w.interia.pl/lab.nes
« Ostatnia zmiana: Sierpień 01, 2007, 07:40:02 wysłane przez siudym » Zapisane
Mejs
Chor±ży
***
Offline Offline

Wiadomo¶ci: 196



« Odpowiedz #17 : Sierpień 01, 2007, 14:08:47 »

Dobry Siudym!!

Jak już tyle umiesz to tylko krok do wydania gry.
Szalej całym ciałem a gra wyjdzie, hoho, na szpitalnej!


hehe. ;]
Zapisane
siudym
Go¶ć
« Odpowiedz #18 : Sierpień 01, 2007, 14:12:54 »

Oj... Nawet nie wiesz jaka jeszcze dluuuuuuuuuuuuuuuga droga do tego.... heh

ps. Mozna zaladowac cala tablice nie uzywajac 16-bitowych wartosci. hehe Wystarczy wczytac ja "na raty". To dla tych, co tez beda miec problem z tym na poczatku Wink
Kod:
loadNames:

lda #$20;set ppu to start vram
sta $2006
lda #$00
sta $2006
loadNames1:
lda nametable1,x
sta $2007
inx
cpx #$FF
bne loadNames1

loadNames2:
lda nametable2,x
sta $2007
inx
cpx #$FF
bne loadNames2

loadNames3:
lda nametable3,x
sta $2007
inx
cpx #$FF
bne loadNames3

loadNames4:
lda nametable4,x
sta $2007
inx
cpx #$FF
bne loadNames4

rts

"loadNames*" i "nametable*" to etykietki oczywiscie. Podzielone na 4 czesci po 256 tilesow (czyli FF - 8bitowa wartosc).


Wyczyscilem nieco kod, teraz robie przerwe sobie... Juz oczy mnie bola od tego siedzenia w cyferkach.... Kod znowu przerobilem na VRAM only, a op przerwie bedzie trzeba dodac jakis poruszajacych sie przeciwnikow lub strzelanie or cos tam...  heh



A tutaj NSF load program... Niestety cos nie dziala, jeszcze posiedze przy nim, bo dzialac powinien Wink Wzorowany na kodzie nullsleep'a (oryginalnie pod X816, jednak kod prosty i odpalenie go pod NESASM nie powinno byc problemem. Obecnie nawet nie wywala bledow przy kompilacji, wiec jest ok. Jedynie gdzies haczyk jest...  Smile  Adresy LOAD, INIT i PLAY trzeba samemu z headera NSF wczytac (sa pod 0008h, 000A i 000C)

Kod:

.inesprg 1
.ineschr 0
.inesmir 0
.inesmap 0


.org $C48D ; wczytujemy LOAD adres z NSF (z headerem to -$80)
.incbin "demo.nsf"; include NSF (header -$80 lub bez)

.org $8000

RST:
cld  ; clear decimal flag
sei  ; disable interrupts
lda #%00000000 ; nmi off
sta $2000

WaitV1:

lda $2002 ; czekamy na vb aby ppu ruszylo dupsko
bpl WaitV1

WaitV2:

lda $2002 ; i raz jeszcze dla pewnosci, ze ruszylo;)
bpl WaitV2


lda #$00 ; zerujemy przed lopem
ldx #$00 ; czyszczenia rejestrow dzwieku

Clear_Sound:

sta $4000,x ; prosty clear jak ch****... czysci 16bajtow 4000
inx
cpx #$0F
bne Clear_Sound

lda #$10
sta $4010
lda #$00 ; czyscimi DPCM
sta $4011
sta $4012
sta $4013

lda #%00001111 ; all channels on
sta $4015 ; poza dpcm

lda #$C0 ; synchronize the sound playback routine
sta $4017 ; to the internal timing of the NES

lda #$02 ; numer utworku w nsf
ldx #$00 ; $00 dla NTSC i $01 dla PAL
jsr $BE34 ; wczytujemy INIT adres z nsf

lda #%10000000 ; enable vblank (NMI)
sta $2000
Loop:   ; w kolo macieju...
jmp Loop


NMI:
lda $2002 ; read $2002 to reset vb flag
lda #%00000000 ; nmi off  
sta $2000
lda #%10000000 ; a teraz nmi on
sta $2000
jsr $F2D0 ; wczytujemy PLAY adres z NSF
rti

IRQ:

rti

.bank 1    
.org $FFFA
.dw NMI
.dw RST
.dw IRQ

« Ostatnia zmiana: Sierpień 03, 2007, 19:29:26 wysłane przez siudym » Zapisane
śmigło .::.
Go¶ć
« Odpowiedz #19 : Sierpień 04, 2007, 18:41:57 »

Cytuj
Testowalem na konsoli, niestety tylko nametable sie wyswietla, jeszcze ucina gorne 32x8 pixeli.

Prawdopodobnie to też jest kwestia wyświetlania obrazu na TV. Np. przy pisaniu programów na atarkę dobrym nawykiem jest umieszczenie na początku listy obrazu bodajże 24-ech pustych linii.
« Ostatnia zmiana: Sierpień 04, 2007, 18:45:32 wysłane przez śmigło .::. » Zapisane
Strony: [1] 2 3 ... 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.056 sekund z 19 zapytaniami.