我如何在 C++ 中模拟 6502 JMP、分支和 sub-routine?

How could I emulate the 6502 JMP, branching, and sub-routine in C++?

我有一个程序可以完全模拟 MOS Technologies 6502 处理器。我几乎已经将整个指令集完全实现为 c++ 函数,包括数学函数、按位函数。我什至可以模拟时钟速度。我没有成功实现的唯一指令是 JMP 和所有分支指令,以及子程序指令。这是因为我不知道如何为 C++ 创建 goto-like 循环。由于我的 header 太大而无法放入代码块,我将其链接为文件“6502.h”。任何 step-by-step 帮助将不胜感激。

https://drive.google.com/file/d/0B1j1lbKWU98iQ1dyVGNCVzRzdDA/view?usp=sharing 6502.h

部分我想将其作为题外话结束 - 'finish my code for me' 类型的问题和“为什么这段代码不起作用”在 SO 上是不可取的。

不过,现在是星期五下午,我应该写一些员工评论,这是一个很好的消遣。我不会给你代码,但我会给你一些提示:

  1. 您没有 PC(程序计数器)变量。
  2. BxC、BxS、JSR、JMP、RTI、RTS 和 BRK 都通过对 PC 进行更改来工作。

(顺便说一句,您可能想更仔细地查看 PHP/PLP 的操作码描述)

伪代码,给个思路;

// Emulation loop
opcode = memory[pc++]
switch(opcode)
case JMP
  target = memory[pc] | memory[pc+1]<<8
  pc = target
case JSR
  target = memory[pc] | (memory[pc+1]<<8)
  stack[sp--] = pc<<8
  stack[sp--] = pc&0xff
  pc = target
case RTS
  pc = stack[sp+1] | (stack[sp+2]<<8)
  sp += 2
...