正直日記



2008/11/29

_ 環境変数とかうんこだろ
wxWidgets を setup.exe からインストールして、とある事情により即アンイン
ストールしたんだけど、そのときに MinGW 関連の環境変数がごっそり掃除され
てしまった。CPLUS_INCLUDE_PATH とか無くなってる。

で、覚えている限りで元に戻してみたところ、boost を 使っている GBA のプロ
ジェクトがコンパイル出来なくなってしまた。

In file included from d:/devkitARM/bin/../lib/gcc/arm-elf/3.4.3/../../../../include/c++/3.4.3/cctype:49,
                 from d:/devkitARM/bin/../lib/gcc/arm-elf/3.4.3/../../../../include/c++/3.4.3/iosfwd:48,
                 from d:/devkitARM/bin/../lib/gcc/arm-elf/3.4.3/../../../../include/c++/3.4.3/bits/stl_algobase.h:70,
                 from d:/devkitARM/bin/../lib/gcc/arm-elf/3.4.3/../../../../include/c++/3.4.3/algorithm:66,
                 from C:/mingw/include/boost/pool/pool.hpp:25,
                 from C:/mingw/include/boost/pool/singleton_pool.hpp:15,
                 from C:/mingw/include/boost/pool/pool_alloc.hpp:20,
                 from lib/mem.cpp:3:
C:/mingw/include/ctype.h: In function `int isalnum(int)':
C:/mingw/include/ctype.h:150: error: `_imp____mb_cur_max_dll' undeclared (first use this function)
C:/mingw/include/ctype.h:150: error: (Each undeclared identifier is reported only once for each function it appears in.)
...

ギャース。mingw のヘッダから devkitARM のヘッダを読んでそこからまた mingw 
のヘッダを読みに行くとか、なんか滅茶苦茶になってる。以前はちゃんとコンパ
イル出来ていたはずだけど、もう環境変数がどうなっていたかなんて覚えて無い
よママン。

Windows で gcc を使い分けてる人はここらへんどうしてるんだろうな……。

2008/11/27

_ 嘘をつきました
僕が受験生だったころはまだ柏キャンパス無かったよ。
_ 東京大学にするか東京理科大学にするか悩んだ時期が僕にもありました
前者は柏にキャンパスがあって、後者は野田にキャンパスがある。
醤油が好きなら理科大で問題ない。

ちなみに悩んだ結果はこれだよ
_ TBC - twitter bokumetu committee
http://shinh.skr.jp/m/?date=20081127#p01

過去への言及とか見たい場合、リファと一緒にクエリが残ってるはずなのでそれ
だけ(アンカーのある無しも含めて)を tinyurl に突っ込めばいいような気が
する。クエリを一緒に残してない場合は

--

関係ないけど twitter って、他にだべる場所があったり、特に絡む相手がいな
かったりすると、全然書くことが無いなぁ。この事実は TBC 活動に活かせる気
がする。
_ 除算のコスト@GBA/NDS +おまけ
GBA だと組み込みの libgcc を使うか bios の除算命令を使うか、あるいは自作
するかの三択で、まぁいずれにしても遅いけどそれでも使うなら CPU state が 
ARM でも THUMB でも同様に呼び出せて、32bit バス直結で wait も最少な bios
命令を積極的に使えばいいじゃんみたいな。

ていうか GBA レベルだと極力除算は避けるので、本当に必要な機会ってフレー
ム数から時間を求めるときくらいしか無いかもしんない。1分が64秒だったら良
かったのに……。

NDS だと更に 32/64bit の除算器を積んでるから、除算が命なら積極的に DS に
移行すればいいじゃんみたいな。ビジーループが必要だけど、64/32 の除算で34
クロックっていうのは割と優秀なのかなどうなのかな。


元 intel の人が書いた黄色い本だと、80386 では div r32 が 38 と書いてあっ
た気がする。intel japan の人が書いた黒い本によると Pentium は 46。ついで
に fdiv だと 39。Pentium Pro 以降はどれくらいなんだろう。

簡単なテストを書いてみた。divtest.cpp

Thoroughbred コアの Athlon XP で 39 くらいらしい。けど、なんか安定しない
し、N と M の数を 1 にすると 35 とか出るし、どうも自分で信用できない。

まぁ動作クロックが上がってるとかスーパスケーラとかスーパパイプラインとか
チータメンとかで相対的に除算のコストは下がってるっぽいから、考えるのをや
めた方がいいのかもしんない。

ちなみにこのエントリの後半は、かなり無理して書きました。

2008/11/23

_ Flash 化断念
Alchemy って windows で使うには cygwin が必要なのね。
どうにか mingw で使えないか模索してみましたが、どうにも出来なかった……っ!
なのでソースを同梱することにしました。

 mid2siopm.zip

最大発音数を下げたときに、endmark ";" が出力されないバグも解消しました。

2008/11/22

_ これが和音対応 MML コンバータの威力だ
というわけで、mid2siopm を使うとアルペジオの打ち込みが簡単になります。

meiq2_01.txt
meiq2_28.txt

難読化にもなって一石二鳥ですね。

http://mesudak.googlepages.com/siopm_js_poc.html
ここにコピペして play で鳴ります。


関係ないけどこれが凄すぎる。
http://www.nicovideo.jp/watch/sm5306419

2008/11/21

_ MML をあきらめたあなたが最後に読むべき記事
ありそうで無かった和音対応 MID2MML コンバータを作ってみた。
標準出力に MML を吐くので適当にリダイレクトしてください。

 mid2siopm.zip

和音対応といいつつ、デフォルトだと単音な MML しか吐きません。対応させる
には MIDI シーケンサーで CC#55 を埋め込み、各チャネル毎に最大和音数を仕
込んでおく必要があります。


Windows バイナリしか用意してませんが、swf 化すればマルチプラットフォーム
でいけるんじゃないかなーと思案中。もうなんでもブラウザ経由でやっちゃえば
いいと思うよ。

追記(2009/07/09):
バージョンアップしました。

keim > Full action script のMIDI音源もそう非現実的でないかもしれないですね,これは,すごい.  (2008/11/22 20:58:05)
kashiwa > MIDI on SWF やるなら SMF を直に触った方がいいと思います…!  (2008/11/23 07:45:45)

2008/11/19

_ 教育用としてのメガドラ
倫理的な問題(があるとして、それ)を抜きにすれば、メガドラがアリなんじゃ
ないかと思う。アセンブリャが何をやってるのか位は分かるようになる?例えば
MPU。メガドラには高速な MC68000 と低速な Z80 の、二つの MPU がある。しか
し教科書どおりにアセンブラで作ると MC68000 しか使えず、ちょっとしたもの
を作るには物足りなくなってしまう?じゃあどうするのかと言うと、Z80_BUSREQ
を使うことで、Z80 用メモリ領域にアクセスできるようになる。Z80_BUSREQ が
何をしているのかは調べてみるまでもなく単なるメモリマップド I/O なので気
にしないでいい。そしてそこで Z80 という CPU があるのだな、と意識するよう
になる。ということは MC68000 という MPU もあるのだなと連想出来るし(だん
だん破綻してきたぞ)、MPU は自動的に MC68000 が使われるのかなと思いつく。

ごめん勢いが足りなかった。
_ 教育用としてのGBA
倫理的な問題(があるとして、それ)を抜きにすれば、GBA がアリなんじゃない
かと思う。リンカが何をやってるのか位は分かるようになる。例えばメモリ配置。
GBA には高速小容量な IWRAM と低速大容量な EWRAM の、二つのメモリがある。
しかし教科書どおりに C で作ると IWRAM しか使えず、ちょっとしたものを作る
には足りなくなってしまう。じゃあどうするのかというと、大域変数宣言の真後
ろに IN_EWRAM と書き添えてやることで、大域変数が EWRAM に配置されるよう
になる。IN_EWRAM が何をしているのか調べてみると

#define IN_EWRAM __attribute__ ((.section (".ewram")))

と定義されていて、 .ewram というセクションがあるのだなと意識するようにな
る。ということは IWRAM は .iwram と連想出来るし、変数は自動的に .iwram 
セクションに放り込まれるようになってるのかなと思いつく。ていうかセクショ
ンって何だろう? 〜〜〜 途中すっ飛ばして、gba_cart.ld にたどり着くと、そ
こには C の参考書で malloc のところにチラリと書いてあるヒープみたいな単
語が目に入る。おぉーここにあったのか heap よ、と思ったりする。


あ、勢いでここまで書いて気づいたけど、ヒープ領域は EWRAM に確保されてる
ので、malloc を使う前提なら "教科書どおりに C で作ると IWRAM しか使えず" 
のくだりが完全に嘘だわ。なんだー crt0.S で bss クリア / data セクション
コピーするところまで話を繋げて、あわよくばスタックとか割り込みとかCPUレ
ジスタとかの話まで広げられるんじゃないかと思ったのに。やっぱ駄目だ GBA じゃ。
_ 32X は slave か
32X なデモの ASM ソースを読んでみたら、m68k から SH 用のコードを 32X に
転送する部分があって、ずらっと16進数が並んでた。考えてみりゃ当然なんだけ
ど、扱い的には Z80 なんかと一緒なのかと連想したら思わず何かを噴きそうに
なったよ。

それにしても、m68k, z80, sh-2 と3種もコンパイラ / アセンブラを使い分けな
きゃいけないのは凄いな。開発者はポップアップしまくってたんじゃなかろうか。

2008/11/18

_ firefoxが特定のリンクを(不定期のタイミングで)履歴に残さなくなった(4)
拡張を一つ一つ disable して検証した結果、Favicon Picker 3 に原因があ
りそうな感触を得た。

この拡張はブックマークアイコンを差し替える他に、 tabbrowser.xul を上書
きして、favicon 読み込みの高速化(本来Firefox はページを読み込み終わっ
た後に favicon をロードするらしい)や、既に DB へ登録されているアイコン
へのタブアイコンの差し替えなんかを行っているみたいだけど、それらの動作が
絶妙なタイミングでコンフリクトを起こし、履歴への登録を妨害している気がす
る。

すいませんがソースを把握仕切れないヘタレなんで「らしい」とか「みたい」と
か「気がする」とか、おぼつかない言葉で語尾を濁しますよ。

2008/11/15

_ ネバーランドのアレ
マイケル・ジャクソン、豪邸「ネバーランド」を手放す - CNN.jp

つまりセガが寄贈したと言われるアレが開放されることもあるかもしれないって
わけか。やったね。
_ 擬似ゲーセン再現プラグイン
・壁紙に人影が映る
死なずに進むと徐々に増えていくが、途中で死ぬか、ALLすると一斉に散っていく

・突然画面が左右に揺れる
隣の筐体がガンダムの時に有効。2P使用時は確率アップ

・置きコイン
置かれた場合、コンティニュー不可になる。初起動時は 100% の確率で置かれ、
経過時間とともに確率が下がっていく

・突然奇声
プレイ内容とは関係なしに、ランダムで奇声が上がる

2008/11/12

_ firefoxが特定のリンクを(不定期のタイミングで)履歴に残さなくなった(3)
既訪リンクの色が未訪の色に戻る - BugTrack-Fx3/116

これかなぁ。履歴に全く残らない(or即座に消える?)のでなんか違う気もする。
_ firefoxが特定のリンクを(不定期のタイミングで)履歴に残さなくなった(2)
動画をとってみた。


not_left_history.wmv

サイドバーとタブの両方でアンテナを開き、ハイパーリンクを適当に開いた後、
アンテナをリロードしてみる。すると、訪問済みになったはずのリンクが、何故
か未訪問に戻る。ちゃんと訪問済みのままになることもあるのが謎すぎる。

# 開いたタブはこの後スタッフが読みました。

2008/11/10

_ メガダブラー
寝る前にメガドラの資料を読んで、目が覚めたら気づいたけど、メガドラの SPR
Attribute Table は VRAM 内なら(512 bytes バウンダリで)自由にアドレスを
変えることが出来る……つまりスプライトダブラの実装がしやすいってことじゃ
ないか。どう考えても属性テーブルを水平帰線期間中には転送しきれないよなぁ
とか思ってた。優先度とサイズの件を一切考えなければ一瞬で作れそうだな。

あと HSCR / VSCR 用のテーブルなんかあるみたい。ラスタ/縦分割スクロールは
VDP が勝手にやってくれるってことね。垂直帰線期間中に転送するべきデータの
全貌が見えてきたわね。

2008/11/08

_ VisualboyアレをSDLでコンパイルする
配布する際はなるべくエミュレータの存在をおおっぴらにしたくないと思ったの
で、イメージを内蔵してソレ単体で動くように、専用の Visualboyアレを作って
みる。

Visualboyアレ はライセンスが GPL なので、まぁソースを公開することになる
んだろうしそれは構わないけど、内蔵するイメージも GPL が適用されるのかが
謎だ。

恐らくは
const char binaryImage[] = { 0xde, 0xad, 0xbe, 0xef, ... };
なソースになると思うし、それで良ければ公開しても構わないっちゃ構わないん だけど、本当にそれでいいんだろうか。 あと配布されているソースが 1.7.2 までしかないので、処理オチなどの調整も そっちでやらなくちゃならないな。1.8.0-b3 の方が実機にタイミングが近くて いいんだけど……。

2008/11/07

_ そうか、実はもう月末だったんだな。(・ω・)
ムフー。(;´ω`)
_ STG NEWSとか(8) 人海戦術?
個人ニュースサイトもこれからは人海戦術が当たり前になるのかなあ。 MOON STONE 10/20
CMS などで簡単に作れることもあって、参加型の個人(?)ニュースサイトを作 る試みは増えているんだろうけど(よく知らないけど)、人海戦術ってやつが期 待できるかと言うと、それは疑問だなぁ。 (前回の考察はこちら) 例えば newStage の場合だと、ぶっちゃけ管理人である僕の投稿が 7〜8 割を占 めていたりするかな。あまり人海って感じじゃないですわ。
_ firefoxが特定のリンクを(不定期のタイミングで)履歴に残さなくなった
これなんてバグ?困るよぉ。

http://localhost/antenna/hogeurl|0123456789 ~~~~~~~~~~更新時間
自作アンテナのリンク URL 形式が上記のような感じで、クリックするとスタイ ルシートの a:visited { display: none; } によって消えるようにしているんだ けど、なぜか踏んでも履歴に残らないリンクがある(たまに残るので条件がさっ ぱり分からない)。そのせいで、更新を確認したリンクとそうでないリンクとの 区別がつかなくて非常に困る。
_ スパマーも選挙期間中はスパムどころじゃなかったらしい(笑)
1ヶ月ほどナリを潜めていたスパム投稿が、昨日あたりから復活した様子。この
日記とか newStage とかはガードを固くしているので表には出てきませんが、水
面下では一日に30件近くのスパムを闇に葬っているらしいです。

それにしても、大統領選挙が終わるとほぼ同時にスパム活動が復活するというの
が興味深い。何か因果関係があるんだろうか。個人的に、彼らは何らかのスクリ
プトを使って絨毯爆撃していると思っていたんだけど、もしかして手動だったん
だろーか。

最新
2010 | 01 04
2009 | 01 02 03 04 05 06 07 09 10 11 12
2008 | 01 02 03 04 05 06 07 08 09 10 11 12
2007 | 02 03 04 05 06 07 08 10 11 12
2006 | 01 02 03 04 05 06 07 08 09 10 11 12
2005 | 01 02 03 04 05 06 07 08 09 10 11 12