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

[OSASK 2928] Re: GUIGUI code conv.



  こんばんは、川合です。


I.Tak. さんは 2002/01/14 14:26:24 の「[OSASK 2927] GUIGUI code c
onv Re: Fullset EUC」で書きました:

> GLやGRはC0、空白、DEL、C1を含みません。GR側に空白は無いのです。

  がーん。そうだったのか・・・僕はなんと恥ずかしい誤解を・・・。

> 文字集合の話にはエンコードを離れて群面区点番号(コードではない)
>を使うものです、ということでした。ひらがなは第三面ですね。

  それは、2000JISの中に組み込むとしたら、の話ですよね?・・・そ
うではなくて、川合語として・・・っていうか、こんなどうでもいいこ
とにこだわってもしょうがないですね。この話はやめます(笑)。

> ……ナニワともあれ(^^; シフトJISを含む変換ルーチンができました。
>http://home1.catvmics.ne.jp/~msy/tak/garage/ggc.lzh

  みてみました。SJISの部分が「本当にこれでOKなのか?」という感じ
です(笑)。次のバージョンか、もしかしたらその次のバージョンにな
るかもしれませんが、それくらいには組み込みます。今はディスク周り
を重点的に拡張しているところなので。・・・どっちにしても、1週間
以内に組み込めると思います。しばらくお待ちください。

> それで質問です。MS拡張文字の変換はどういう仕組みなんですか?
>六つあるうちの第何面がベースいくつで、というのを教えてください。

  ああなるほど。そういえばその辺の説明をしていませんでした。今か
ら説明します。

<全角文字領域>
・+0x00000〜0x4507f : JISの0x2121〜0x7e7e (第一水準〜第三水準)
・+0x45080〜0x47f7f : NEC拡張の0x7921〜0x7c7e相当 [7f21-827e]
・+0x47f80〜0x496ff : リザーブ (全角188文字分) [8321〜847e]
・+0x49700〜0x49bdf : Win拡張 シフトJISコード 0xfa-0x40〜0xfa-0x5b [8521〜853c]
・+0x49be0〜0x49bff : リザーブ (全角12文字分) [853d〜8548]

ということになっているので、こうしてください。

---

  a : 第一バイト, b : 第二バイト

    x = (a - 0xfa) * 94 + (b - 0x40);
    if ((unsigned) b >= 0x80)
        x--;

で計算されるxに対して、以下の方法で、yを求める。

  0 <= x <= 27 : y = x * 2        + 0x4970 + base1;
  28 <= x      : y = (x - 28) * 2 + 0x4508 + base1;
                   = x * 2 - 0x38 + 0x4508 + base1;

そして、(y), (y + 1)を出力すればよい。

---

  例によって、ソースにコメントです。

>   if (al ccB 94) { /* GRのみ (0xffを許すと半角256個まで溢れる) */

  うーん、微妙ですねえ・・・(笑)。

  OKです。半角256文字ならやっちゃってください。切りをよくするた
めに、94x94の後には全角188文字+半角384文字以上が存在するので。多
分このルールは今後も守りますし。

  97行目をEDX = EAX;にすれば、129行目はなくせそうです。

  106行目や、122行目の*2は、EAXにつけるのを間違っているんですよ
ね?

  それと、

>MITSUNARI's way:
>    x=(x^0x20)-0xa1;

これと、実際に実装されているコード

>        al ^= 0xa0;
>        al -= 0x21;

とが微妙に違う気がするんですが、どっちが正しいのでしょうか?もし
やどっちも同じ結果になる???いや、ならないみたいですね。これは
実装の方が書き違ったみたいです。

  それにしても、全体的にかなり精練されていますね。・・・この調子
で全部のルーチンをいじられたら、OSASKは半分くらいになってしまう
かもしれません。だあああ〜。ま、いいです。今は雑に作っている段階
なので(いいわけ)。

  仕様面での問題は全く見付けられませんでした。おまけ機能であるグ
ラフィックキャラクターへの変換よりも、面倒な場合分けを減らすこと
を優先しているみたいですし。

> OSASK/TOWNSでもVRAM幅800ができました!近日発表です。
>ちなみに800と768は差が32しか無く、横スクロールが無駄な感じです。

  言えてますね・・・。1024x512では縦スクロールが無駄っぽくて、80
0x655では横スクロールが無駄っぽいですか・・・。

  yが600を超えればいいわけですから、xを800以上にしていただいても
いいんですが・・・。まあ、I.Tak.さんのセンスにお任せします。

  AT版の方も800x600にこだわる必要はないんですが、800x600モードと
描画ルーチンを兼用にしている関係で、結局800x600になっています。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/