MSX関連
スーパーピンクソックス3について
int GBit( int L , int& DL , BYTE*& pD )//戻値:データ 引数:取得ビット数.データの残り(ビット数).データアドレス
{
static int D;//データ(保持)
int R = 0;//戻値
while( L-- )
{
if( DL-- == 0 )
{
D = *pD++;
DL = 7;
}
R = R *2 +((D >> 7) &1);
D <<= 1;
}
return( R );
}
{
int X = pD[0x14] *8;
int Y = *(WORD*)&pD[0x15];
pD += 0x19 +0x30;
BYTE* pW = pWdata;//書込アドレス
int DL = 0;//データの残り(初期化)
int F = 0;
while( pW - pWdata < X * Y /2 )
{
if( F == 0 ) F = X /2;
if( GBit( 1 , DL , pD ) )
{
int S = GBit( 1 , DL , pD );
int L = 1;
int T = 0;
for( int i=0 ; i<16 ; i++ )
{
if( GBit( 1 , DL , pD ) == 0 ) break;
L <<= 1;
T++;
}
L += GBit( T , DL , pD );
if( L > 256 ) L = 256;
T = pW[-1];
if( S ) for( int m=0 ; m < L ; m++ ) pW[m] = pW[m - X/2];
else for( int m=0 ; m < L ; m++ ) pW[m] = T;
pW += L;
F -= L;
}
else
{
while( true )
{
*pW++ = GBit( 8 , DL , pD );
if( --F == 0 ) break;
if( !GBit( 1 , DL , pD ) ) break;
}
}
}
}
PS-3-3 0x12c00-0x17dff (0x5200) PS-B-10 0x3b400-0x3efff (0x3c00) PS-B-3 0x43800-0x477ff (0x4000) PS-B-4 0x56c00-0x59dff (0x3200) PS-B-5 0x68800-0x6cdff (0x4600) PS-B-6 0x6d000-0x6fdff (0x2e00) PS-B-7 0x70000-0x73dff (0x3e00)