Emulation 是否可以按程序确定特定指令在6502上的周期数?
大多数模拟器将特定指令的周期数存储在查找表中,然后根据需要添加任何条件周期(例如,当跨越页面边界时) 我想知道是否有一种方法可以根据寻址模式和内存读/写,按程序确定一条指令的周期数 举个例子,我注意到所有使用直接寻址或相对寻址的指令都需要2个周期 所有零页指令都需要3个周期,如果更改内存,还需要另外2个周期 所有索引零页指令都需要4个周期,如果更改内存位置,还需要额外的2个周期 ……等等Emulation 是否可以按程序确定特定指令在6502上的周期数?,emulation,6502,Emulation,6502,大多数模拟器将特定指令的周期数存储在查找表中,然后根据需要添加任何条件周期(例如,当跨越页面边界时) 我想知道是否有一种方法可以根据寻址模式和内存读/写,按程序确定一条指令的周期数 举个例子,我注意到所有使用直接寻址或相对寻址的指令都需要2个周期 所有零页指令都需要3个周期,如果更改内存,还需要另外2个周期 所有索引零页指令都需要4个周期,如果更改内存位置,还需要额外的2个周期 ……等等 那么,是否有一些完整记录的程序性方法来确定上述指令的周期数?在这样一个公式中,是否存在打破决定论的例外情况?
那么,是否有一些完整记录的程序性方法来确定上述指令的周期数?在这样一个公式中,是否存在打破决定论的例外情况?是的-几乎所有精确的仿真器都是这样编写的*;请参阅文档,如。不过,这并不比简单的内存访问计数复杂多少——6502将在每个周期执行内存访问,它通常可以在访问后的剩余周期内获得有意义的结果(即,为了避免讨论什么是流水线的,什么不是流水线的;请参阅文档) 因此,例如,对于
ADC#54
,处理器必须(i)读取操作码;(ii)读取操作数。这是两个周期
对于ADC($32),Y
即:
CLI
和SEI
**。仿真器的结构不再需要像20世纪90年代那样
**)IRQ状态在每个操作的倒数第二个周期进行采样
CLI
和SEI
在最后一个循环中调整位。因此,即使中断处于挂起状态,CLI
也不会导致中断,直到CLI
之后的指令之后。它本身可能是一个SEI
。因此,当中断挂起时,CLI
/SEI
对应在执行SEI
后,设置中断标志,导致中断处理程序跳闸。如果您模拟6502的逐周期行为,这种情况会自然而然地发生。如果您正在逐操作和时间扭曲工作,则这可能是一个巨大的难题。或者,更可能的是,这种仿真器的行为显然是错误的。我总是必须使用类似a的参考来获取旧Atari 8位系列外围设备的精确计时,这些外围设备在串行接口上以52个周期或19个周期/位(1 mhz 6502)的速度手动发送或接收一个位。(~19200位/秒或~52600位/秒)。观察内存中所有读/写操作(包括冗余的读/写操作)的一个很好的资源是,这是SEI,而不是STI。@8位大师,这就是为什么你是大师!设置中断,不设置中断;固定的。