6502个指令时钟周期背后的逻辑是什么?
What is the logic behind 6502 instruction clock cycles?
6502 数据表第 10 页中需要考虑的一些问题:
http://archive.6502.org/datasheets/rockwell_r650x_r651x.pdf
- "Add 1 to N if page boundary is crossed" 第 10 页是什么?
- 第 10 页意味着什么 "Add 1 to N if branch occurs on the same page?"
- 如果分支发生在不同的页面,N 加 2 是什么意思?
- 读写其他设备ie.RAM是否会导致时钟周期不规则?
- 是否有任何其他因素会影响 6502(更具体地说是 NES)上的时钟周期?
关于 6502 条机器指令。指令地址被计算并存储为两个八位字节。在使用寄存器索引指令或分支指令的目标地址等进行地址计算时,可能存在从最低有效字节到最高有效字节的内部进位。这就是 'crossing a page boundary' 的意思——'page' 是 256 字节。内部进位过程可以施加一个周期的惩罚。
为了看得更清楚,如果你用十六进制编码你的地址,那么地址的低字节就是右边的两位数。例如地址 $1234 hex,低位字节将包含 $34 hex 和高位字节 $12。如果您从 'crosses the page boundary' 分支到或加载或存储的地址,通过将高位字节翻转一个,例如地址 $1300,则会产生周期惩罚。
如果分支是 'taken',则使用分支指令会添加一个循环,换句话说,满足条件并且程序跳转到新位置。所以如果分支碰巧进入另一个页面,那么实际上将添加 2 个循环。
6502 数据表第 10 页中需要考虑的一些问题:
http://archive.6502.org/datasheets/rockwell_r650x_r651x.pdf
- "Add 1 to N if page boundary is crossed" 第 10 页是什么?
- 第 10 页意味着什么 "Add 1 to N if branch occurs on the same page?"
- 如果分支发生在不同的页面,N 加 2 是什么意思?
- 读写其他设备ie.RAM是否会导致时钟周期不规则?
- 是否有任何其他因素会影响 6502(更具体地说是 NES)上的时钟周期?
关于 6502 条机器指令。指令地址被计算并存储为两个八位字节。在使用寄存器索引指令或分支指令的目标地址等进行地址计算时,可能存在从最低有效字节到最高有效字节的内部进位。这就是 'crossing a page boundary' 的意思——'page' 是 256 字节。内部进位过程可以施加一个周期的惩罚。
为了看得更清楚,如果你用十六进制编码你的地址,那么地址的低字节就是右边的两位数。例如地址 $1234 hex,低位字节将包含 $34 hex 和高位字节 $12。如果您从 'crosses the page boundary' 分支到或加载或存储的地址,通过将高位字节翻转一个,例如地址 $1300,则会产生周期惩罚。
如果分支是 'taken',则使用分支指令会添加一个循环,换句话说,满足条件并且程序跳转到新位置。所以如果分支碰巧进入另一个页面,那么实际上将添加 2 个循环。