使う機会も無く塩漬けにしたまま半年が経ってしまったので、ソース込みで 公開することにした。homebrew用途のMIDIベースなサウンドドライバは全く 無いようなので、ひょっとしたら需要があるかもしれないし。 amdrv_051231.zip 最低限のreadmeは書いたけど、もし使い方が分からなければ、この日付にで もコメント付けてくれれば答えますですよ。改変はご自由に。
なんか設計を見直してたら、結局XSPと同じような実装になってしまったよ。 というか、XSPと同じような実装になって初めて、XSPのソースがまともに追 えるようになった。アセンブリを追うのはダルいけど、「こーいうアルゴリ ズムになってるはず」と分かっていればなんてことはないな。 コメントがしっかり書かれてるんだからあれくらいは読めないとマズい、と 言われそうな気がしないでもない。まぁ場数踏んでいくしかないか。
挿入ソートよりもバケツソートの方がいいんじゃないかと指摘され、いつも メモリがメモリが〜と呟いてる俺としては先入観から却下、なのだったが、 ちゃんと計算してみると結果的にはバケツソートで実装した方がメモリ消費 量も(もちろん試行回数も)少ないということが分かったので、またもや目 から鱗が落ちた。くそう!やはり他人には相談してみるべきだと思った。
タスクシステムの空きブロックを管理するためにqueueを使ってたんだけど、 そもそもタスクブロック構造体はlistになってるんだから、管理側もlistに しちゃえば良かったんだな。目から鱗が落ちたというか、鱗が落ちたことに ビックリした!なぜこんな単純なことが思いつかなかったのか。なぜこんな 単純なことを思いつけなかったのか。悔しい!やっぱり他人のソースは読む べきだと思った。
普通、タイルを並べるときは 12345678 910111213141516.. という風に、横に並べがちだけど、これを 1917 21018 : という風に、縦に並べるといいのでは、と思った次第。これを90度回転して 鏡像反転するとあら不思議。何が不思議なのかはそのうち書くわ(多分書か ない)
遂に……遂に、とうとう、GRADIUS Vをクリアしてしまった。買ってから1年 半の間、殆どやらずに(やると必ず舌打ちするので)たまに思い出してはプ レイして(やはり舌打ちするのだが)クレジットが10回分に増えた時点で、 ようやくクリアしてしまった(ここでまた舌打ち)。 長い道のりであった。里芋面のつまらなさに舌打ちし、壁に衝突する雑魚敵 に舌打ちし(RSじゃねえんだからさ…)、エレファントギアをすり抜ける敵 弾にも舌打ちし、飛ばせないリアルタイムムービーにも舌打ちをし、長すぎ るプレイ時間にもこっそり舌打ちして……何度コントローラを投げつけよう と思ったか分からないくらいイライラさせられたゲームだったが、スタッフ ロールに載っている開発メンバーの少なさを見て「しゃあねえな」と溜飲を 下げるしかなかった。無理矢理下げさせられてしまった。「こちら、お下げ してもよろしかったでしょうか?」と訊いてくる余地すら無かった。
マップデータはマップデータで、16bitに二枚入るからリニアになんねえや。 やり直し。
http://forum.gbadev.org/viewtopic.php?t=403 ここに「VCOUNT割り込みでBGキャラクタバンクとアフィンレジスタを弄れば、 120x80限定だけどmode 1/2(タイルマップ)でもリニアなビットマップが作 れるぜ?hehehe..」みたいなことが書かれてるんだけど、具体的に何をどう するんだ?3日間考えてるけど、何も思い浮かばないぞ。 いや待て、やっぱ嘘。実は何も考えてなかったので、書きながら考えるから。 横サイズは半分になるってのが多分ヒントになるんだよなー。あと、VRAMは 16bit以上の単位でしかアクセスできない。そして16bitにつき16色で4ドット 256色で2ドット入る。で、多分256色にして、アフィン変換で横サイズを半分 に圧縮すれば、16bitで1ドットってことになるので4ドットまでならリニアと みなせる。おお!この調子だ! 次に縦方向についてだけど、だけど……駄目だ思いつかねえや。ひらめいた 人はコメントするように。 で、それとは別にちょっと思いついたんだけど、縦横それぞれ1/8に圧縮すれ ばマップデータで1024x1024の1/8で最大128x128のリニアなビットマップが作 れねえ?こんな感じで。まあ実際には、マップは256x256で一枚とみなすタイル状に並 んでいるので(ややこしいな)完全にリニアってわけにはいかないけどさ。
ARMステートで書いてる関数からは標準関数が呼べないんですよね。何故かと 言うとリンク時に relocation truncated to fit : R_ARM_PC24 エラーが出 るから。じゃあどうするのかというと、bxで飛ぶようにすればいいわけで。このように使いたい関数に対してlong_call属性をつけてやればいいわけ。 というか、これが思いつくまで3日間悩んでたよ……。extern int sprintf(char *, const char *, ...) __attribute__ ((long_call)); CODE_IN_IWRAM void hoge(int num) { char str[128]; sprintf(str, "test: %d", num); vbalog(str); return; }最初こんな感じで回避出来るだろと思ってたら出来ねえしー。 なんなのよもう!でも、これでprintfデバッグが出来るようになったわよ! 女の子はいちいちデバッガなんて起動してらんないのよ!ぷんぷん!CODE_IN_IWRAM void hoge(int num) { void (*pfunc)(char *, const char*, ...); pfunc = sprintf; pfunc(str, "test: %d", num); vbalog(str); }
今、俺の中でまた超連射が熱い!ってゆうか熱すぎ!熱すぎていつでもどこ でも誰とでも超連射をやりたい衝動に駆られすぎ!そして、そんな俺が取る べき行動は…… 1. 目コピで移植する 2. 移植しない 3. XM6を移植する。GBAは明らかに無理だからPSPとかで。 4. 移植しない 5. XM6の動くハンディPCを買う。具体的にはOQOとか。いや、動くのか? 6. 買わない すげえ!6つも選択肢があるよ。幸せだなあ。 で、結局、XSPのref/frm/xspデータをGBAで表示できるようにコンバータを 作ってしまった。そしたらなんか満足してしまったよ。
しつこいけど、普段から使うものだからこそ使い勝手には拘りたい!という わけでまだFirefox1.5への言及は続くわけですが、なんつーかバグっつーか 仕様の変更というか、やっぱりバグかもしんないけど、多くね? 特に一番気になったのが、_blank以外のtarget要素が指定されているときに 新窓(タブ)を開かなかったり、Shift+クリックでも同じタブで開かれたり、 どういう挙動なんだかよく分からんけど著しく不便だ。TabMixPlusが悪さし てんのかもしんねーけど、外して確認するのも面倒だ。(使い勝手に拘って るんじゃなかったのかよ!) でも直ってるバグもあるね。新規窓を開いてリンクをクリックすると戻れな いバグが直ってたので偉い。 さて1.0.7に戻すか……。
画像の読み込みバグに関してpigfoot, stipe, officialを試してみたところ pigfoot : 画像の読み込みをOFFにしても読み込まれる stipe : 画像の読み込みをOFFにしても読み込まれる official : 画像の読み込みをOFFにすれば読み込まれない つまりunofficial buildsに発生しているバグなのか? 普通にオフィシャルリリース版を使うことにするよ……。
1.0.7(pigfoot) に 1.5-(pigfoot) をプロファイルそのままで上書きしてみ たところ、非対応の拡張とテーマが無効にされるものの、スンナリ入ってし まったので拍子抜けしてしまった。これまでは一度プロファイルをまっ更に して新しく入れ直す必要があったからな。 ページの戻る・進むが超速くなった。ネットサーフィン(私語)をするとき に、新規タブを開かずに行ったり戻ったりでリンクを辿る俺的には、これは 凄い利点だ。 画像の読み込みで for the originating site only にチェックを入れても 有効になってない気がする(他所のサイトの画像だろうと開いてしまう)。 バグかなあ。バグだよなあ。pigfootだけのバグかもしれないので後で確認 する。(多分しない) あと若干挙動が違うところがいくつか。例えば横長のページでHome/Endキー を押したときに、 1.0:左右のスクロール位置は左端に合わさる 1.5:左右のスクロール位置は固定したまま上下スクロール という違いがあった。二段・三段柱になっているページは見やすいのかな。 そういうページはPageUp/Downでスクロールしつつ見るから、これは要らない なあ。Home/Endは生のテキストファイル、例えばCソースだったりアクセス ログだったりを見るときにを使っているので、左に合わさってくれたほうが 便利なんだけど。
ぁ方面(ぁほうづらと読む)の人っぽいと言われてたのでぁ方面の人っぽく なくしてみた。ファイヤーフォクサーの人は、View->PageStyle->Kokubanで 今までどおり黒板色に戻せます。