2010-07-08 19 views
5

Önceden açık uçukluktan ve bu sorunun genel arzulu-yıkanmasından dolayı özür dilerim, çünkü dürüst olmak gerekirse konuyla ilgili bilgim çok yamalı ve ben bunu çok zor buluyorum benim problemimi bile tanımlamak için. Ben gerçekten göndermek istemedim, ama tamamen ve tamamen sıkışmış durumdayım.Temel NES Öykünme teorisi - Takılıyorum

Bir NES öykünücüsü başlattım. Yorumlandı (böylece dinamik bir yeniden kodlama yok).

Atm, romleri (mapper 0 roms) yükleyebilir ve eşleştirebilir ve init kodunu, kesintiler ve PPU ile uğraşmak zorunda olduğum yere kadar çalıştırabilir. Bu benim sıkıştığım yer.

İşte emu atm'dan bir örnek çıktı. İcra 8000'de başlıyor ve 800a'da sonsuz bir döngüye çarptım, oradan nasıl ilerleyeceğime dair hiçbir fikrim yok.

8002: LDA #$10 ; read immediate value to set PPU control registers 
8004: STA $2000 ; store value 
8007: LDX #$FF ; load immediate value into X register 
8009: TXS   ; store X register into stack 
800a: LDA $2002 ; read PPU flags into accumulator (set N flag based on bit 7) 
800d: BPL   ; test N flag, branch to 800a if not positive, (N is set) 
800a: LDA $2002 
800d: BPL 
800a: LDA $2002 
800d: BPL 
800a: LDA $2002 
800d: BPL 
etc, etc etc (inf loop) 

Benim soru birisi döngüsü sayımı gibi şeyler, kesmeler vs (yani bir bütün 240 scanline ekranını çizip üzerine taşımak dahil benim için işlemek bir PPU aracılığıyla temelleri 1 tekrarlamanın açıklayabilir misiniz vardır Sonraki).

+0

Bir http://nesdev.parodius.com/ adresinde bir 6502 etiketi eklemek için –

+1

adresinden Ta, sonuçlarınızı SÜ'den çok daha hızlı ve daha iyi alacaktır. Bu sadece niş konular için nasıl bir şey. –

+0

Oraya zaten gönderi yaptım, ama 5 gün sonra 1 cevabım var ve aslında dokümanlar okuyordum (ki bu 100 kere var, ama hala biraz kafam karıştı). –

cevap

0

Dışarıda emülatör var, onların cevabına bakmak için kaynaklarına baktınız mı? Bunlar genellikle performans için yazılır ve çok okunabilir değildir, ancak size gitmek için bir bitit bulabilirsiniz. Bir kesme işleminin yürütülmesini bekleyen kod ve bu kesintiyi gerçekleştirdiniz mi? Kesme, dönüş adresini değiştirir ve programın devam etmesine izin verebilir mi? Sonsuz döngü bir kayıttaki bir noktayı yoksaymak mı? ya da kendi kendine koşulsuz bir dal mı?

+0

Sorun, kesinti işlemem yok. Hafıza haritasından tam anlamıyla opcodes alıyorum, onları çalıştırıyorum ve sayacı artırıyorum. Her şey yolunda. CPU döngülerini ve ana döngü ile ilişkisini anlamak söz konusu olduğunda sıkışıp kaldım. Emülatörün nasıl işlemesi gerektiğine dair bazı basit sözde kodları arıyorum. –

+0

Bir kesinti olmadığından emin misiniz? Kesinlikle video oluşturma ve diğer nedenlerden ötürü, yer üstü görevinin beklediği bir donanım kesintisi olacak, kesinti rutini bir bellek konumu ayarlıyor ya da bu durumda bir bayrak için bekliyor? Tüm bunların nasıl çalıştığını anlayana kadar Asteroidler için benzer sonsuz bir döngü ile boğuştum. Aksi halde, yardım için sorun hakkında daha fazla bilgiye ihtiyacım var. –

+0

Teşekkürler dostum. Onu sıralıyorum. LOL @ bu soru - yazdığımda çok karıştı. –

İlgili konular