但是,我们也知道,修改金手指074E的值时,并不一定会使地形发生改变:VirtuaNES不会改变地形,FCEUX会改变地形,而FCEU可能会也可能不会。这中间的差别在哪里呢?就在于FCEU中提供的“读取替补”功能。
事实上,“读取替补”这个功能反映了金手指的两种不同的工作方式:一种是改写内存,使读取到的内存值发生变化;另一种就是“读取替补”,也就是在需要这个内存值时直接读取金手指提供的数值作为内存值的替补。
那么,这两种方式又有什么区别呢?这个074E对地形的影响情况就是一个很好的例子,让我们来分析一下。先看“改写内存”的方式,使用这种方式时,实际上是在频繁向内存中写入修改后的数值,有多频繁呢?反正达不到“指令级”,即不可能每执行一条指令就改写一次内存值。这样,内存值就可能被其他指令重新改写。在本例中,我们开启了金手指074E 03之后,虽然内存074E的值变成03了,但是再执行一句STA $074E,就又把074E的值改回去了,于是后面的LDY $074E就会仍然读取到未经金手指修改的内存值,地形自然就不会发生变化了。
而如果改用“读取替补”的方式呢?不管前面的STA $074E如何改写074E的值,后面的LDY $074E总是会读取金手指的值03,这样,读取到的地形指针就会变化,地形就改变了。