0

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

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

4

2 回答 2

3

我的一部分想把它作为题外话来结束——“为我完成我的代码”和“为什么这段代码不起作用”类型的问题在 SO 上是不可取的。

然而,现在是星期五下午,我应该写一些员工评论,这是一个受欢迎的分心。我不会给你代码,但我会给你一些提示:

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

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

于 2015-05-15T15:45:07.730 回答
0

伪代码,给出一个想法;

// 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
...
于 2015-05-20T12:16:24.590 回答