注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

深夜是徘徊在潮湿睫毛上的我的梦以及他的梦

是直到最后都无法放手的一种气息,是我们生命中最后的思念……

 
 
 

日志

 
 

每日一词(4) FC的闪屏  

2012-05-13 13:33:55|  分类: FC教程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

闪屏,就是画面一闪一闪,这是画面一下变成别的画面,又瞬间还原。

这是什么原因呢,这是没有正确解除PPU的bug。

PPU有一个BUG,就是当向PPU写入背景数据时,PPU会令屏幕移位,当前写入的地址会被拉到屏幕左上角,其余背景地址也相应滚动。

这个BUG可以被利用,也可以被解除。

怎么解除呢?大家想必很关心。具体有三个办法:

1#
第一个办法,本法也会有轻微闪的感觉,特别是代码太多的时候。
好了,好了,讲讲具本办法:
要把屏幕先关闭,再连续向PPU写入数据(用$2006和$2007),然后恢复画面位置(用$2005),最后显示屏幕。
这个办法适合"汉化"使用。
关屏和开屏的方法是控制$2001的D3,最好是独立操制D3,不影响别的位。

FC关屏汇编代码:D3设为0
LDA $2001
AND #$F7
STA $2001

FC开屏汇编代码:D3设为1
LDA $2001
ORA #$8
STA $2001

2#
第二个办法,本法能够完全解除BUG,但是要求禁止使用中断。
如果你是搞修改或汉化,那么要先确认这个游戏是否使用了中断。如果你是编游戏,那可以用本法。
先说说本办法:
(如果你是编游戏,那么在游戏初始化时,就设定好$2000的D7位,设为0)
用循环等待,$2002的D7位,如果是1,那即进入黑屏时间,
再连续向PPU写入数据(用$2006和$2007),然后恢复画面位置(用$2005)。
注意写入的数据不能太多,主要是指令要花时间,要在vblank黑屏结束前完成代码。

确认中断的办法是:
用FCdebug打开ROM,查看内存找到$2000
将数值转成二进制,检查(最高位)D7,如果是0,则是禁止中断的。如果是1,那说明使用了中断。


3#
第三个办法,本法也能够完全解除BUG,但是与办法2完全相反,本法要求使用中断。
如果是修改和汉化,可能不适用本法。如果你是编游戏,那可以用本法。
办法是:
在游戏初始化时,就设定好$2000的D7位,设为1
在NMI代码中向PPU写入数据,然后恢复画面位置,代码请尽量短,主要是指令要花时间,要在vblank黑屏结束前完成代码。


以上就是今天的内容

  评论这张
 
阅读(1129)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018