中止:
6502有3个中止IRQ/BRK、NMI和RESET,每个中止都有一个16位的向量,即指针,用来寄存该中止产生时中止服务函数的地址。中止产生时CPU都会把状况标志和回来地址压栈,然后调用中止服务程序。
IRQ/BRK中止由一下两种状况产生:一是软件经过BRK指令产生,一是硬件经过IRQ引脚产生。
RESET在开机的时分触发,这是ROM被装入,6502跳到RESET向量指向的地址没有寄存器被修正,没有内存被清空,这些都只在开机是产生。
NMI指不行屏蔽中止,它在VBlank即屏幕改写时产生,持续时间依据体系(NTSC/PAL)不同而不同。NTSC是每秒60次,而PAL是每秒50次。6502的中止延时是7个时钟周期,也就是说,进入和脱离中止都需求7个时钟周期。它产生于PPU的每一帧完毕,NMI中止能够由$2000的第7位的1/0操控答应/制止。
大部分中止应该运用RTI指令回来,可是有些游戏不必,例如《最终幻想1》。它用一个很古怪的办法:手艺修正仓库指针,然后履行RTS指令。这种办法在技术上是可行的,可是应该尽量防止。
以上中止在ROM内有以下对应的地址:
6502有3个中止IRQ/BRK、NMI和RESET,每个中止都有一个16位的向量,即指针,用来寄存该中止产生时中止服务函数的地址。中止产生时CPU都会把状况标志和回来地址压栈,然后调用中止服务程序。
IRQ/BRK中止由一下两种状况产生:一是软件经过BRK指令产生,一是硬件经过IRQ引脚产生。
RESET在开机的时分触发,这是ROM被装入,6502跳到RESET向量指向的地址没有寄存器被修正,没有内存被清空,这些都只在开机是产生。
NMI指不行屏蔽中止,它在VBlank即屏幕改写时产生,持续时间依据体系(NTSC/PAL)不同而不同。NTSC是每秒60次,而PAL是每秒50次。6502的中止延时是7个时钟周期,也就是说,进入和脱离中止都需求7个时钟周期。它产生于PPU的每一帧完毕,NMI中止能够由$2000的第7位的1/0操控答应/制止。
大部分中止应该运用RTI指令回来,可是有些游戏不必,例如《最终幻想1》。它用一个很古怪的办法:手艺修正仓库指针,然后履行RTS指令。这种办法在技术上是可行的,可是应该尽量防止。
以上中止在ROM内有以下对应的地址:
中止地址 | 中止 | 优先权 |
$FFFA | NMI | 中 |
$FFFC | RESET | 高 |
$FFFE | IRQ/BRK | 低 |
NMI 非屏蔽中止
IRQ/BRK 屏蔽中止
RESET 开机中止