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)