0604
なんか風邪引いたのか喉が痛い。なのに諸事情でこんな時間まで起きててしまった。最悪すぎる。
寝ます。
なんか風邪引いたのか喉が痛い。なのに諸事情でこんな時間まで起きててしまった。最悪すぎる。
寝ます。
なんか普通にポケモンを楽しんでいる。パーティにケーシィを入れてしまったから、通信機能に対応しないといけなくなってしまった。元々読んでいた本にはそのあたりの記述がないので他の実装を調べている。まあそんなに難しくはなさそうなので次の週末くらいにやるか。
タマムシシティでサカキを倒したところまで。これでシルフスコープが手に入ったからポケモンタワー攻略に進めるはず。それにしても、ポケモン犯罪集団が都心の大企業本社を占拠したというのは、現実的に考えるととんでもない事件だな。ロケット団が金儲けにしか興味がないらしいのは不幸中の幸いなのかもしれない。
寝ます。なんか喉が痛い。
あまりたいしたことはしていない。エミュレイタの他の実装を読んでみたり、GBAの仕様について調べたりしていた。GBAはDMG/CGBとは全然違うらしい。カセットに互換性があるから似たようなものだと勝手に思っていたが、GBAには32bitのARMv4のプロセッサが載っていて、かなり現代的だ。これどうやって互換性を保ってるんだろう。エミュレイション?まさか古いプロセッサも載せてるのか?
まあだからDMG/CGBの延長でGBAに対応するのは難しそうだ。別にエミュレイタ作る職人になりたいわけでもないしな。ポケモン金銀のカセットが手に入ったらCGB対応してみようかな、くらいで。
あとはポケモンやってた。やはり初代はいろいろ洗練されてなくてびっくりするが、それでもどハマりしてたんだよな、これに。買った初日に4時間プレイした(週に8時間=乾電池2本分しか遊べないルールなのに)けどおつきみやまを抜けられなかったのを今でも覚えている。もうたいして迷わないけれど。
イワヤマトンネルを抜けてシオンタウンに入る。例の心細くなるBGMが流れるが、ポケモンセンターに入るといつもの音楽に戻る。異国の地で日本のコンビニを見つけたら、きっとこんな気持ちになるだろうか。
せっかくなのでポケモンリーグ制覇まではやってみるつもり。しかし、ポケモンリーグって、何がリーグやねん。リーグに四天王はおらんやろが。
寝ます。明日はなんか会議多かった気がする。
6月になると1年の半分が過ぎたと勘違いすることがあるのは、6時になったら午前中(または午後)の半分が過ぎることと混同しているためだという指摘を見た。確かにな。
今日はほぼエミュレイタのリファクタをしていた。クレートを分割したりモジュールを整理したりSDLに依存している部分を抽象化したり。これでブラウザで動かす準備ができた……のか?
ブラウザといえば、昨日せっかく苦労してマルチスレッド対応させたけど、WASMはシングルスレッドなのを思い出したので泣く泣く元に戻した。まあ別にパフォーマンス的な旨みがあるわけでもないし、いいのだけど。crossbeamの練習になったと思えばまあいい。
音声のチャンネルを切って低音パートだけ鳴らしてみたり、スプライトの描画を切ったりしてみると、なんか面白い。自分で作るとこういうのが自由にできて楽しいな。
寝ます。明日は何しようかな。とりあえずWASMでCanvasに描画させたりしてみようかな。
だんだん会議に出る機会が増えてきた。社外の人との会議って前職ではほとんど無かったのでちょっと緊張する。でもちょっとしかしないのはまあそれなりの成長という気がする。
振り返ってみると、いろいろな先輩たちの影響を受けてできるようになったことがたくさんあるなと思う。僕も誰かにそういう影響を与えられているだろうか?別にそうでなくても構わないのだけど、そうであったらそれはちょっと嬉しいことではある。
エミュレイタはついにちゃんと音が出るところまでを実装して満足!それからマルチスレッドで動作するようにした。これは別にそんな御利益があるわけではないんだけど、エミュレイタ本体部分はバックグラウンドスレッドで動くようになって、UIスレッドは画面とか音楽とかキー入力に集中するようになった。スクリーンバッファとかの共有はArc<Mutex<_>>でやっている。あとVSYNCやサウンドバッファの通知はcrossbeamのチャンネルを使っている。うまいことやらないと音声にノイズが乗ってしまうのでちょっと大変だったが、なんとなくうまく動いたのでよかった。
もう少しリファクタをして、完全にSDLを抽象化できるようにしたい。それができたらWASMにしてCanvasとかに描画することになるだろう。楽しそうだ。ところで、これは原理的にはRasPi Picoでも動くのだろうか?さすがにクロックが足りないかな?
寝ます。
エミュレイタで動かすためのポケモンとダンパーが届いたので吸い出して実行した。動いた。しかしFPSが低いので何が悪いのかなと調べていたら3時間経ってしまった。原因はSDL2のイベントポーリングをCPUサイクルごとにやってるせいだった(3μs程度掛かるので、M-cycle(900nsくらい)に間に合わなくて遅延していた)。わかってみればしょうもない話だったね。
別にそんな頻繁に見る必要ないのでVSYNCの時だけ実行するようにしたら解決した。はーー。
APUも完成させたので、あとはSDL2で音を出せるようにしたら完成。そのあとはWASM移植をしたいが、それができるようにリファクタをしなくては。
寝ます。夜更かししすぎた……
エミュレイタに簡易コルーチンをいれるリファクタを断念した。すごい頑張ればできるかもしれないが(少なくとも必要な操作はだいたいわかる)、どう考えてもコスパが悪い。それに、別に長期に亘ってメンテするようなコードでもないし……。なんだか悔しいけれども。
APUの実装を進めた。矩形はを出すところはできた(と思うが試してはいない)ので残るはノイズ生成。音が鳴るのが楽しみだ。
寝ます。夜更かししちゃった。土日に餃子食べたいな。
インフラのこと考えてたら終わった一日。AWS筋力にはまだまだ改善の余地がある。経験が足りないな。
エミュレイタ開発は簡単なリファクタとジョイパッド対応をした。といっても本当に動いてるのかわからないけど。ゲームボーイのボタンって十字キーとそれ以外が排他っぽいんだな、知らなかった。
あとはサウンドの実装がいる。これはちょっと大変そう。あとまだROMのダンパーが届かないから、リファクタを先にやった方がいいかもな。
寝ます。
あまり元気ではない。気圧のせいだという噂もあるけれど。
エミュレイタのコルーチン対応は挫折した。一応書けた?ようだけど正しく動かなかったし、所有権周りでかなり困難があったし、あと最大の問題として割り込み要求のチェックをどこでやればいいのか難しいというのがある。なのでコルーチンで解決するのは諦めることにして、マクロだけで何とかならないか(もともと本ではそうしているのだし、もっといい感じにできないか)考えることにする。他のリファクタもしたいし。
PPUの実装を終わらせたので、dmg-acid2テストが動作した。これであとはジョイパッドとサウンドを実装すればそこそこのゲームが遊べるわけだが、まだダンパーを入手できていないので、それまではリファクタをする。WASM移植とかもそのうちやりたいが、まあさすがにそれまでには届くでしょう。
寝ます。
午後から法事。なんか合同だったので30分くらいで終わる。こんなんでいいんだ。こんなんでいいんだったらやらなくてもよくない?
そのあとは両親が家に来たり晩ごはんを食べたりした。なんか途中でまた胃がパニックしてしまって辛かった。何だろうなあこれ。もしかしてワインが良くなかったりするのか?(過学習の気配がある推論)
夜はエミュレイタのリファクタをした。Nightlyに入っているコルーチンを使えば複数サイクルの命令が書きやすくなるのではと思ったのだけど、型パズルがかなりキツい。あと一歩のように見えるのだが、それが異常に遠いのがRustという言語だ。
夜更かししすぎた。体調あまり良くないのに。ハー、愚行だなあ。