[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00431] Re: 16bit 版 LSIC-86WW



なるなると申します。

 > <200009030535.OAA05039@mail.fa2.so-net.ne.jp>
 > From: erupi@fa2.so-net.ne.jp
 > Date: Sun,  3 September 2000 14:35:05 +0900

 > test.c 42: out of memory
 > 
 > のメッセージが出て、コンパイルに失敗してしまいました。
 > 以下がコンパイルに失敗するソースです。

エラー自体は、リンカとは関係なくて一般的にメモリが足りなくなったというもの
だと思います。(malloc() に失敗したとか内部で持っている固定長バッファを使い
切ったとか) 試食版でもコンパイルできませんでした。

速度的には面白くありませんが、このあたりの一連のコードをサブルーチン呼び出
しに置き換えるしかないでしょう。

 > 			cdst[0*2+j] =
 > 					(csrc[7*2+j] & 0x80) |
 > 					(csrc[6*2+j] & 0x80) >> 1 |
 > 					(csrc[5*2+j] & 0x80) >> 2 |
 > 					(csrc[4*2+j] & 0x80) >> 3 |
 > 					(csrc[3*2+j] & 0x80) >> 4 |
 > 					(csrc[2*2+j] & 0x80) >> 5 |
 > 					(csrc[1*2+j] & 0x80) >> 6 |
 > 					(csrc[0*2+j] & 0x80) >> 7 ;

他にも書き方はあると思いますが、こんな感じです。

--
void frcdsub0(unsigned char far *csrc, unsigned char far *cdst, int j)
{
    cdst[0*2+j] =
	    (csrc[7*2+j] & 0x80) |
	    (csrc[6*2+j] & 0x80) >> 1 |
	    (csrc[5*2+j] & 0x80) >> 2 |
	    (csrc[4*2+j] & 0x80) >> 3 |
	    (csrc[3*2+j] & 0x80) >> 4 |
	    (csrc[2*2+j] & 0x80) >> 5 |
	    (csrc[1*2+j] & 0x80) >> 6 |
	    (csrc[0*2+j] & 0x80) >> 7 ;
	/* 以下略 */
}

void frcdsub1(unsigned char far *csrc, unsigned char far *cdst, int j)
{
    cdst[4*2+j] =
	    (csrc[7*2+j] & 0x08) << 4 |
	    (csrc[6*2+j] & 0x08) << 3 |
	    (csrc[5*2+j] & 0x08) << 2 |
	    (csrc[4*2+j] & 0x08) << 1 |
	    (csrc[3*2+j] & 0x08) |
	    (csrc[2*2+j] & 0x08) >> 1 |
	    (csrc[1*2+j] & 0x08) >> 2 |
	    (csrc[0*2+j] & 0x08) >> 3 ;
	/* 以下略 */
}

void fontRotateColorData(void far *src, void far *dst, int length)
{
    unsigned char	far *csrc, far *cdst;
    int		i, j;
	
    csrc = (unsigned char far *)src;
    cdst = (unsigned char far *)dst;
    for ( i = 0; i < length; i++ )
    {
	for ( j = 0; j < 2; j++ ) {
	    frcdsub0(csrc, cdst, j);
	    frcdsub1(csrc, cdst, j);
	}
	csrc += 16;
	cdst += 16;
    }
}

# cdst + j, csrc + j を渡したほうが良いですね。



ML Archives