GBC游戏掌机(二)

接上

LCD状态寄存器

FF41 – STAT – LCDC 状态 (R/W)

Bit 6 - LYC=LY Coincidence Interrupt (1=Enable) (Read/Write)

Bit 5 - Mode 2 OAM Interrupt (1=Enable) (Read/Write)

Bit 4 - Mode 1 V-Blank Interrupt (1=Enable) (Read/Write)

Bit 3 - Mode 0 H-Blank Interrupt (1=Enable) (Read/Write)

Bit 2 - Coincidence Flag (0:LYC<>LY, 1:LYC=LY) (Read Only)

Bit 1-0 - Mode Flag (Mode 0-3, see below) (Read Only)

0: During H-Blank

1: During V-Blank

2: During Searching OAM-RAM

3: During Transfering Data to LCD Driver

STAT寄存器的低两位表示LCD控制器当前的状态。

状态0:LCD控制器位于水平消隐阶段, CPU此时可以存取显示内存VRAM(8000h-9FFFh)OAM(FE00h-FE9Fh)

状态1:LCD控制器位于垂直消隐阶段(或者LCD显示被禁止),CPU此时可以访问VRAMOAM

状态2:LCD控制器正在读OAMCPU此时不能访问OAM

状态3:LCD控制器正在读OAMVRAMCPU此时不能访问OAMVRAM。对于CGBCPU此时也不能访问调色板数据(FF69,FF68)

下面是LCD可以显示时的典型状态:

Mode 2 2_____2_____2_____2_____2_____2___________________2____

Mode 3 _33____33____33____33____33____33__________________3___

Mode 0 ___000___000___000___000___000___000________________000

Mode 1 ____________________________________11111111111111_____

状态位的值在0, 2, 3之间遍历的时间约为109uS。为0的时间约为48.6uS,为2的时间约为19uS,为3的时间约为41uS

状态0持续约201-207个时钟周期,状态2持续约77-83个时钟周期,状态3持续约169-175个时钟周期。经历上述3个状态的循环将持续456个时钟周期。垂直消隐持续4560个周期。整个屏幕每隔70224个时钟周期刷新一次。

LCD中断

INT 40 – 垂直消隐中断

垂直消隐中断在GB中平均每秒产生59.7次,在SGB中平均每秒产生61.1次。该中断产生在垂直消隐阶段刚开始的时候产生(LY=144)。

INT 48 – LCDC状态中断

本中断的产生存在多种起因,具体的起因由STAT寄存器的值说明。一种常见的情况是:告诉用户“视频硬件将要重绘新的一条扫描线”了。这可能在对SCX/SCY寄存器($FF43/$FF42)的值进行动态的控制以产生某些视频特效时有用。

LCD 位置和滚动

FF42 – SCY – Scroll Y (R/W)

FF43 – SCX – Scroll X (R/W)

表示256×256象素的背景图显示在LCD左上角的坐标。X/Y取值的范围是0-255,当绘图超出范围时,视频控制器将自动地把超过底部(右端)的背景图部分回卷显示到顶部(左端)。

FF44 – LY – LCDC Y-Coordinate (R)

LY表示将要传输到LCD驱动的一条扫描线数据的垂直位置。LY只可以取0-153之间的值,144-153表示垂直消隐期间的到来。任何对LY写的操作将会重置LY的值。

FF45 – LYC – LY Compare (R/W)

游戏机持续的比较LYCLY寄存器的值,当它们相等时,STAT寄存器的同步位将被置1,同时将会请求一个STAT中断(如果允许的话)。

FF4A – WY – Window Y Position (R/W)

FF4B – WX – Window X Position minus 7 (R/W)

表示窗口区域在左上角的坐标。(窗口是一个后备的背景区,显示在正常背景的上面。精灵可以显示在窗口区域的上面或者下面,跟在正常的背景图上一样。)当位置设置在WX=0-166WY=0-144的范围时,窗口才是可见的(如果允许的话)。WX=7, WY=0表示窗口区域位于屏幕的左上角。这时,它把背景区域完全覆盖了。

(未完,待续)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值