蹂躙されるmain

Binary2.0カンファレンスというものが開催されたらしく、色んなHackネタが披露されたらしい。個人的には「lock-free synchronization」の話が興味深かったが、一番ウケたのはやはり「Hello, binary world!」かなあ。これはもうHackというより一発芸。プレゼン資料もネタ満載なので必見。「呼ばれるのに関数にしてもらえないmain」がいいね。あと「何もしないmain」に出てくるGCC拡張cleanup属性で紹介されているRAIIイディオムもどきは気づかなかった。scoped lock機構を実現出来るのはたしかに便利だ。VisualC++でも出来ないかなあ(調べてない)。
で、「呼ばれるのに関数にしてもらえないmain」の項でNX属性の話が出てくる。TEXTではなくDATAセクションでコードを動かすと反応するって奴。DATAセクションでコードを動作させる。これってアレだよなあ、アレアレ。と思っていたら、スラドの記事コメント書いてる人がいた。なつかしー。中学?高校時代はMZ80K2Eユーザだったのでよくやってた。
あとMZシリーズはRAMにシステムをロードして使うタイプだったから、BASIC(SP-5030世代)からBASIC自体にパッチを当てて使うのが常識だった。例えば、

  • キー入力のリピートウェイト解除…17828番地に0を書く。ゲームを作るのに必須。
  • ビデオ表示のVBLANK待ち解除…$3CEC?$3CEEを0(NOP)で埋める。PRINT文が高速になる。ただし画面にノイズ出まくるけど。

USR(33):USR(36)なんてのもあったな。あとはCURSOR/PRINT命令でテキスト描画すると遅いので、VRAM($D000 = 53248番地)にPOKEで直接書き込みもお約束だった。
MZ80K2Eはまだ実家に保存してある。各種カセットテープもたくさん残ってるが、多分MZ本体のカセットデッキがダメだろうな。この時期のはピンチローラのゴム劣化でダメになると聞くし。