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

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

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

 
 
 

日志

 
 

V-Blank是什么  

2009-10-24 23:22:32|  分类: FC知识整理 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

引用《任天堂产品系统文件》

水平和垂直消隐:

所有的游戏机都有一个刷新动作,用来重新定位电子枪显示可见的数据。最通用的显示设备是电视机,它分为每秒刷新60次的NTSC制式和50次的PAL制式。电子枪从左到右画出象素,它每次只能画一条扫描线,画下一条之前要先回到左面并且做好准备,这之间有一段时间叫做水平消隐(HBlank)。在画完全部256条扫描线之后它又回到屏幕左上角准备下一次画屏幕(帧),这之间的一段时间就是垂直消隐(VBlank)。电子枪就是一个不断的走‘之’字形的过程。VBlank标志就是$2002的D7,它表明PPU是否在VBlank期间,当VBlank标志存在时,你就可以通过$2006和$2007访问PPU内存。一个程序可以通过读$2002来使D7复位。在屏幕刷新期间,我们不能访问PPU,而PPU会在CPU背后修改VRAM指针,这样我们很容易在写入VRAM时出错,为了让PPU停下来,可以对$2000和$2001写00。

-----------------------------

引用http://hi.baidu.com/danielkwok/blog/item/635cc5dc9464f5a9cd1166aa.html

垂直消隐和水平消隐

 

        电子枪从左到右画出象素,它每次只能画一条扫描线,画下一条之前要先回到左边并做好画下一条扫描线的准备,这之间有一段时间叫做水平消隐(HBlank)。

        在画完全部256条扫描线之后它又回到屏幕左上角准备下一次画屏幕(帧),这之间的一段时间就是垂直消隐(VBlank)。

        【具体的说就是】电子枪从右端移动到左端的那段时间叫做水平消隐; 电子枪从右下角移动到左上角的那段时间就是垂直消隐。

-----------------------------

V-Blank是什么 - 维京人 - 深夜是徘徊在潮湿睫毛上的我的梦以及他的梦

上图中,水平回扫就是HBlank,垂直回扫就是VBlank。

 

===================================

 

如果你是任意写PPU的VRAM(即要改变背景,或以背景方式显示图案),你会看到错位。如果你用2005来修正它,你也会看到闪屏的。

在vblank期间写PPU的VRAM,有两个方法。

第一个方法:不断测试$2002的D7位。直到测得vblank,就进入写PPU的VRAM的流程。就是用2006和2007来操作。。

这个方法适合初学者使用。建议使用第二个方法。

第二个方法:使用中断(即NMI)$2000的D7是中断的开关。打开中断后,在VBLANK期间,程序会进入中断程序,而主程序会停下来。我们必须在代码里手工写“现场保护”代码(即将寄存器全部入栈),同时在中断结束时出栈。

不会栈道的初学者还是别用。在中断程序里我们一般写背景,手柄扫描,写背景音乐。

 

好多特技是用HBlank和VBlank做的。那是玩弄眼睛的手段。

 

 

---------------------------------------------

飞的更高:
  猎人兄,请教个问题,用多帧背景产生动画的时候,在写入一帧图像数据后,是不是要把NMI中断关掉
维京猎人 19:44:17
  错!
  最好在NMI内完成画背景

飞的更高 19:45:41
  我现在做出来的效果,每一帧后会变黑屏闪一下,然后才是下一张图片,看起怪怪的
  我是这样做的:把第一张图的数据送入PPU后,然后打开显示,延时一段时间,然后关显示再送第二张图的数据,打开显示,延时。。。。。。这个流程对不对?
  就像用ACDSEE 看图软件,播放动画一样,不知这个思路对不对?
 
维京猎人 20:16:07
  照你的做法,有一个小小的修良方法。

  1关闭中断的方法,
  你先延时,并测试2002,看是否进入Vbanlk
  如果是,则送入第一张图。
  再延时,直到离开vblank
  延时一段时间,让人看清图画。
  再延时,测试2002,看是否进入Vbanlk
  如果是,则送入下一张图。...
 
维京猎人 20:16:37
  2用中断的方法,
  就在中断的过程中送入你的图

飞的更高 20:18:45
  是不是在送入第一张图后,要隔几个中断,再送每二张?
维京猎人 20:19:37
  不是
  可以不隔中断
  要在中断是里头送图
  进入vblank就是中断的开始

飞的更高 20:21:19
  在中断里头送第一张图后
  是不是要延时一下,再等中断,送第二张图?
维京猎人 20:22:14
  每次送图必须在中断里头,这才不闪
飞的更高 20:22:44
  明白了,谢谢猎人兄!
 
维京猎人 20:22:52
  每个vblank可以看成是1帧
飞的更高 20:23:39
  近现在FC的硬件速度,好像一个中断只能送一帧是不是?
维京猎人 20:25:05
  一个中断就是电视机的一帧,这是PPU规定的。

飞的更高  20:27:57
  我是不是可以这样理解,就CPU中断开始的时候,其实是电视开始扫描
维京猎人  20:38:15

  电视的扫描源于输入的信号,这是(模拟)电视的原理。
  而这个信号就是PPU发出的。我们要用的不是开始扫描的信号,反而是结束的信号。
  同时PPU向2002也发出1个vblank信号,vblank就是电视的“回扫描线”。这个时候电视是黑屏的。是结束扫描,电子束回到开始位置。这是要一小段时间的。
  PPU的内容在这个时间发生改变是不会影响视觉的。
  2002同时也是中断的开始信号。中断是可以禁止的。
  如果禁止了中断,可以自己测试2002得到vblank信号。
  如果利用中断,那可以很简单的在中断的代码中加入你的动画代码


----------------------

  评论这张
 
阅读(1712)| 评论(5)
推荐 转载

历史上的今天

评论

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

页脚

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