[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