2010-07-08 47 views
5

事前,我对这个问题的开放性和普遍性的问题表示歉意,因为说实话,我对这个话题的知识非常多,而且我发现它很难甚至描述我的问题。我真的不想发布,但我完全和完全卡住了。基本的NES仿真理论 - 我被卡住了

我已经启动了一个NES模拟器。它的解释(所以没有动态重新计算)。

Atm它可以加载和映射ROM(映射器0 ROM)并执行init代码,直到我必须处理中断和PPU。这就是我卡住的地方。

这里是我的emu atm的输出示例。执行从8000开始,我在800a处遇到一个无限循环,在那里我不知道如何从那里进步。

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) 

所以我的问题是,有人可以请解释基础 1次迭代通过PPU渲染对我来说,包括像循环计数,中断等(即画出一个完整240扫描线屏幕,并移动到下一个)。

+0

在http://nesdev.parodius.com/上添加6502标签 – 2010-07-08 09:45:54

+1

的Ta会让您获得的结果远远快于SO。这就是它如何适用于小众主题。 – 2010-07-08 10:02:10

+0

我已经在那里发布,但5天后,我有1个回复,它基本上是阅读文档(我有100次,但我仍然有点困惑)。 – 2010-07-08 10:03:39

回答

0

那里有模拟器,你看过他们的来源寻找答案吗?通常这些都是为了表现而编写的,而且不太可读,但是你可能会发现一些小故事让你走。是等待中断被执行的代码,并且你执行了那个中断?这可能是中断修改了返回地址并允许程序继续?是无限循环轮询在寄存器中的位?或者它是自我的无条件分支?

+0

问题是我没有中断处理。我真的从存储器映射中获取操作码,执行它们并增加计数器。这一切运作良好。我在理解CPU周期时遇到困难,并且它与主循环有关。我只是在寻找一些与仿真器应该如何处理有关的基本伪代码。 – 2010-07-09 02:21:54

+0

你确定它不是一个中断吗?当然,对于视频渲染和其他原因,会有一个硬件中断让地面任务正在等待,中断例程设置一个内存位置,或者在这种情况下等待一个标志?我一直在为类似小行星的类似无限循环而努力,直到我明白这一切是如何运作的。否则,我需要更多关于该问题的信息才能提供帮助。 – 2010-07-11 02:40:10

+0

感谢队友。我已经整理出来了。大声笑@这个问题 - 当我写的时候很困惑。 – 2010-07-12 15:52:32