void PPU6528::ScanlineStart()
{
if (PPU.m_REG[1] & (PPU_SHOWBG | PPU_SHOWSPR))
{
m_CurLineOft = m_ScreenOffset;
m_CurByteIndex = m_ByteIndex;
m_Counter = (m_Counter & 0xF3E0) | (m_Register & 0x0C1F);
/*
渐进 ---------------->
|
|
|
\|/
m_Counter 0x0NNN NNNN NNNN NNNN
& 0xF3E0 0x1111 0011 1110 0000
0x0NNN 00NN NNN0 0000
### ## ###
| \
| \
| \
| \
| \
| \
| \
\|/ _\/
yOft D10->MAX(...)
<-------------------------------------------
恒定 ----------------->
|
|
|
\|/
m_Register 0xNNNN NNNN NNNN NNNN
&0x0C1F 0x0000 1100 0001 1111
0x0000 NN00 000N NNNN
## # #### D5->MAX(2^5 - 1)
|
|
|
|
|
|
|
|
|
\|/
命名表地址 %10($2800)
%11($2C00)
%01($2400)
%00($2000)
每一个属性表偏移 为 64Bytes
共占 6 Bits 2^6 刚好占用 64 Bytes
属性表 Offset 索引
\
\
\
\
_\/
高三位 由 m_Counter D8-D10 决定 ...(渐进)
低三位 由 m_Register D3-D5 决定 ...(恒定)
*/
}
}
NES -Tips
最新推荐文章于 2024-04-23 20:40:43 发布