[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 3145] Re: make21a.



KOYANAGI, Masaaki さん、こんにちは。I.Tak. です。

Wed, 06 Feb 2002 14:49:31 -0000 の
[OSASK 3139] Re: make21a.
に返信です。

>あと作業として残しているのは TOWNS版の #define ですが、
>vgadrv0.ask を見ると、以下の 3つのパラメータが定義されています。
>これらの意味は、
>TWSCRL1 ... 定義すると1ドットスクロールを行う。
>TWVSW   ... 仮想画面の幅を定義する。高さは自動的に決まる
>CRTC28  ... TWVSW == 1024 の場合は0x800f それ以外は0x803fにする。
>で正しいでしょうか。またこれで全てでしょうか。>I.Tak.さん

 ええ、合ってます。
 で、私もsb21を見てみました。……結構川合さんに直されてます(^^;
折角ですから、もう少し、直していただけませんか? マクロが冗長なのが
いまさらながら気になりますので。

 まず、冒頭をこうします。

#define TWVSW 	1024	/* must be multiple of 8 */

#if (TWVSW & (TWVSW-1))	/* TWVSW is not 0 nor power of 2. */
	#undef  TWVSWlog2	/*  !要らないかも! */
	#define IMUL_TWVSW(reg)		IMUL(reg, TWVSW);
	#define CRTC28	0x803f	/* !ここへ追加する! */
#else
	#define TWVSWlog2 10	/* log2(TWVSW) */
	#define IMUL_TWVSW(reg)		reg *= TWVSW;
	#define CRTC28	0x800f	/* !ここへ移動する! */
#endif

CRTC28はTWVSW==1024の時のみ0x800fにすべきなのでしょうが、
768以上1024以下の2の乗数は1024しかありませんから、これで十分です。

 次に、TWVSW_SHL を TWVSWlog2 に置換します。二箇所あります
このTWVSW_SHLは定義されている事に意味があるのですが、TWVSWlog2と
一蓮托生、同時にしか定義されないのです。私の失敗でした。

 これで終わりです。マクロもすっきり気持ち良くなります。

------------------------------------------------------------
I.Tak. <msy !Atmark! catvmics.ne.jp>
http://home1.catvmics.ne.jp/~msy/takhome.htm