我怎样才能在C ++中模拟6502 JMP,分支和子程序?

时间:2015-05-15 14:59:53

标签: function branch 6502

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

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

2 个答案:

答案 0 :(得分:3)

我的一部分想要将其作为偏离主题关闭 - “为我完成代码”类型的问题以及“为什么这段代码不起作用”在SO上是不受欢迎的。

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

  1. 您没有PC(程序计数器)变量。
  2. BxC,BxS,JSR,JMP,RTI,RTS和BRK都通过改变PC来工作。
  3. (顺便说一下,您可能希望更仔细地查看PHP / PLP的操作码描述)

答案 1 :(得分: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
...