不定記

1998年6月 / 7月 / 8月


1998年7月

1998/07/31

GIGAMIX PRESS vol.48が届いた。相変わらずアヤしい見出しと、勢いのある文章が魅力的。
今回、サタベーとMSX-BASICの(単純なループを利用した)ベンチマーク結果が載っているのだが、R800なMSX-BASICの10倍以上の速度を誇るサタベーは意外に使えそうな気配。CPU以外の能力を考えると、R800+V99x8で必死こいてアセンブラプログラムを組むより、サタベーの方が速くなる可能性もありそうで、ハードウェアパワーの進歩に脱帽。
今更、BASIC使いたくないけどね。

今回はフロントライン エキスプレス#10も同封されて、PCMは間に合いそうだけどPS/2なんたらは厳しいとのこと。Gプレ総集編はちゃんと出るらしいので、フェスタで買うことにしよう。意外と安いし。

1998/07/29

会社で古いC MAGAZINEを読んでいたら(仕事ではない)、高速な文字列検索法としてBMH法というのが紹介されていた。日本語の説明だけでコードはなかったが、とりあえずCで書いてみたのが次。

#include <stdlib.h>
#include <assert.h>

// BMH法による検索
unsigned char* BMHSearch(unsigned char* pKey, unsigned int nKeyLen,
                        unsigned char* pData, unsigned int nDataLen)
{
    // 不正な引数
    assert(nKeyLen > 0);

    // Skip tableの初期化
    unsigned int nSkipTable[0x100];
    for(unsigned int i = 0; i < 0x100; i++)
        nSkipTable[i] = nKeyLen + 1;
    for(i = 0; i < nKeyLen; i++)
    {
        int nCode;
        nCode = pKey[i];
        if(nSkipTable[nCode] == nKeyLen + 1)
            nSkipTable[nCode] = nKeyLen - i;
    }

    // 検索
    unsigned int nDataOffset = 0;
    while(nDataOffset + nKeyLen <= nDataLen)
    {
        unsigned int nOffset;
        for(nOffset = 0; nOffset < nKeyLen; nOffset++)
        {
            if(pKey[nOffset] != pData[nDataOffset + nOffset])
                break;
        }

        if(nOffset == nKeyLen)
            return (pData + nDataOffset);    // 見つかった
        else
            nDataOffset +=                    // 見つからない
                nSkipTable[pData[nDataOffset + nKeyLen]];
    }
    return NULL;
}

純粋なCではないので、C++ compilerでないと通らないかも。
で、これをZ80 assemblerにhand compile(?)してみたのだが、あまり速そうには見えない。自作Libraryの中にBMH.MACとして入れているが、少なくとも短い文字列ではCPIRで一文字目を検索して....という方が速いようである。
何か(Zero Typeの検索とか)に使えるかと思ったのだが、そう甘くはないらしい。

1998/07/25

ふじさんが来た。本当は先々週の予定だったのだが、双方用事が入って今日に。
で、RAMさんのページからダウンしたTALKIEデータをまとめて鑑賞。ファイル名だけだと内容が分からない事が多いので、適当に予想しながら見ていたのだが、G-ED.LZHとKOUN.LZHの気合に感動。いやもう、あの揺れがなんとも。

また、内容が化けまくって仕様不能になっていたたんせいRAMを修理して貰った。傍から見ていると、基盤をちょっといじっているだけなのだが、見事に復活。6.25MB環境になって、色々と実験し易くなった。感謝

ふじさんが帰った後で、貸して貰った2本のビデオ、トイレの花子さんGS美神 vol.6を見る。前者はりりかこどちゃの大地丙太郎監督作品で、対象年齢は低いが面白い。大地ファンでなくても見る価値あり。
美神の方は、原作をかなり忠実に再現しているが、それ以上の物ではないような。原作が好きだから、点が辛いのかも知れないが。

1998/07/21

MRP.COMをいじってたら、バグだらけな事が発覚。16KB RAMにインストールできない、動作確認したはずのアンインストールは暴走する、m-n型式のスロット記述を認識出来ないと、もう大変である。

慌ててデバッグしたのだが、どうしてもアンインストールが動いてくれない。なんでかなぁとソースを眺めていて、ようやく理由を発見できたのだが、余りにも間抜けな原因であった。
アンインストールのメインは、

UNINST:
        CALL    CHECK_INST      ;常駐しているか?
        RET     NZ              ;常駐していなかった

        PUSH    AF
        CALL    CHECK_UNINST    ;uninstall可能か?
        POP     BC
        RET     NZ              ;uninstall不可

        LD      L,B             ;媒体依存部を呼ぶ(table jump)
        LD      H,0
        ADD     HL,HL
        LD      DE,UNINST00
        ADD     HL,DE
        LD      E,(HL)
        INC     HL
        LD      D,(HL)
        EX      DE,HL
        LD      DE,UNINST1      ;UNINST1に返る
        PUSH    DE
        JP      (HL)

てな感じなのだが、CALL CHECK_UNINSTの前後にあるPUSH AF/POP BCを入れ忘れて、CALL CHECK_INSTで得た媒体番号が破壊されていた為に、妙なアドレスに制御が移って変な事になっていたわけだ。引数や返値の媒体を指定出来ないアセンブラでは、ありがちなバグである。

1998/07/14

TOMBOY#33が届いた。 #34は諸々の事情で9月発行になるそうだが、よく月間体制を維持出来るものだと関心しきりである。

中身の方だが、NASUさんのイベントに関する文章(結構長め)が載っているのには驚いた。で、この文章、フロマガに載った同種のものより質が高いような気がする。なんとなく。
残念だったのはちょっとチャッとが載らなかったこと。アンナの終わった現在、一番楽しみな記事なので、毎号載せて欲しいところである。
アンケート結果を見ると、面白かったコーナーの延べ数が129。この値の1/3強がアンケート返送者と考えられるから、多目に見積もっても50人いるかどうかである。TOMBOYの部数が落ちているのか、返送率が下がっているのか分からないが、かなり危険な数字じゃなかろうか。

講座物ではボビーさんの口より先に手を出そうが.....状態。やたらとglobal変数好きなのは何故?これじゃ、オブジェクト指向がどうのと言ったところで、全然説得力無いってばさ。

1998/07/12

Linux CD-ROMの中身を見る。
PPP他、TCP/IP関係のソースはすぐに見つかったが、全部gzipで圧縮されている。もちろんMSXで使えるgunzipなんて持ってないので、ソースが目の前にありながら読めないという間抜けな状況。

とりあえずgunzipのソースを見れば移植できるかもという、淡い期待を抱いてCD-ROM内を探索するが、見つかったのはgzip圧縮されたgzipソースのみ。これをどうしろと?

大学時代なら、gzipファイルを大学のserverに転送して解凍、出来たファイルをlhaで圧縮してMSXに転送するという技が使えたのだが、今となっては無理である。unxi shellを開放しているRIM-NETを使う手もあるが、まだ契約していないのであった。

1998/07/11

ふじさんが遊びに来るはずだったのだが、急用ができたそうでいきなり暇になる。
仕方無いので明日行く予定だった日本橋へ。目的はCD-ROM driveとLinux or FreeBSDである。

まずSOFMAP1号店5FでCD-ROM driveを発見。SCSI 4倍速の外付けで6800円。ちと高いので他を当たることにする。が、6連装で7800円というのしか見つからない。
どちらを買うか迷った挙句、単装6800円の方を入手。6連装はデカくて重くて持って帰るのが大変そうだったのと、構造が複雑な分、故障し易そうな気がしたので。

次はLinuxだが、下らないinstall本が付いてくる物は金の無駄なので、CD-ROM屋を捜すことにする。が、見つからない。いい加減歩き疲れた頃、T・ZONEの看板にPC UNIXの文字を見つける。売り場(4F)に上がってみると、種類がやたらと多くてどれを買えばいいのか分からない。
結局、一番安かったSlackware3.5(2980円)にしたが、これにソースは入っているか?と質問して店員さんを困らせた。ソースだけが目的なので、どうしても慎重になってしまったのだ。店員さん、ごめん。これを読んでいる事はないと思うけど。

目的は達したので、わんだーらんどという本屋(マンガ屋?)で面白そうなのを物色。日本アニメ史学研究序説という本に、アニメ版うる星やつらの評論があったので買う。第1〜2クールが、何故あれほどスカだったのか解る(解った気になれる)資料である。
他にスカタン天国のVol.1も。馬鹿で笑える関西マンガ。

で、家に帰ってCD-ROM driveをMEGA-SCSIに接続。ESETでD:に割り当てた後、MSX CD extensionを常駐させると問題無く読めた。畏るべし似非職人工房。もっとも一つだけ問題はある。CD extensionが常駐していると、プライマリマッパの不足でEsTermが使えない。
RAM増設する技術はないし、やっぱりGT欲しいぞな。

1998/07/06

常駐するだけで何もしないプログラムが完成。
ESC/Pプリンタを、松下製MSXの内蔵ワープロから使えるようにする計画の出だしの部分に相当する物で、これを完成と呼ぶのは妙なのだが、常駐物のフレームと考えれば再利用が効くかも知れない。

とりあえず、常駐先にMapper RAM・16KB RAM・PACを選べることから、それぞれの頭文字を取ってMRP.COMとした。読み方はマープなので、ある種の心配がある人にはお勧めかも知れない(意味不明)。

1998/07/03

行きつけの草の根BBSに、RELAを転載。ちなみに、ハードの高速化に走らなくても、ソフトの力でここまで出来るという感動を与えてくれる、史上最強の超高速アセンブラである > RELA
MARIO-NETにバイナリを上げるのは本当に久しぶりで、操作法を調べるのに一苦労であった。アップ報告の書き込みをしようとして、間違えて新規ノートを作っちゃうし。

何はともあれ、無事広まってくれる事を願うばかりである。

1998/07/02

ここ数日、渡されたプログラムの拡張という仕事をしているのだが、これが中々恐ろしい。曲がりなりにも現代のプロが書いたコードだから、割と分かり易いしコメントも多い。とりあえず読む分には苦労しないのだが、問題は修正を加えるときである。

ソースはVisual C++で書かれているせいか、全てC++の構文で書かれている。ただし、C++なのは見た目だけで、書いてる人間の頭がCのままだから、それはもう無茶苦茶である。
まず、全ての関数がclassのメンバとして存在するのだが、class内部でしか使われないヘルパ関数も含め、全てpublicメンバ。事情は変数についても同じで、4割がpublicメンバの6割がglobal変数という恐ろしさ。どこで何をいじってるのか、見当もつかない。

もっと分からないのは、

        CClass* pClass = new CClass;
        pClass->Function();
        delete pClass;

といったコードがそこら中にある事で、しかも呼ばれた関数ではglobalな領域にデータを書き込むだけという意味の無さ。classの設計も無茶苦茶で、Cで書いたコードをソース毎にclassとしているような感覚がある。

で、ここに修正を加えるわけだが、重要な変数が全部globalなので怖くて仕方がない。結局、後の人間が迷惑被る羽目になるんである。ちきしょ〜。


1998年6月 / 7月 / 8月

Web master: Nakayama Atsushi
E-mail: anaka@yo.rim.or.jp