PHPerKaigi2019で登壇してきました。全体の感想などは後編に書きます。
カンファレンスで発表するのは3年ぶりぐらい。今回はPHPのファミコンエミュレータ実装をGolangで写経してた時の話をしてきました。
ファミコンエミュレータはPHPやGolang, Rustなどたくさんの実装があり、厳密に決まってるCPUやメモリの仕様を元に実装されてます。その実装を通してコンピュータアーキテクチャの理解が進む、低レイヤーの入り口に立てる、という柱を立てて発表しました。PHPで読めて、コンピュータアーキテクチャが学べるって最高じゃないですか?
登壇後は、ファミコンエミュレータに興味を持った、作ってみたいというフィードバックを頂きました。今回の発表のゴールに到達できたかと思います。
議論や交流が活発、これがPHPerKaigiだ!
PHPerKaigiでは、登壇後も別のホールで椅子に座って、質問やフィードバックがあれば気軽に話にいけるAsk the Speakerというシステムがあり、そこでファミコンのソフトを作ってたさっぴーさんとお話できました。
土曜日の懇親会(茶会)では、これまたファミコンのソフト制作に関わっていた郡山さんの昔話が聞けたり、それを起点にkoyhogeさんの昔話も聞けたり、最高の体験になりました。
ファミコンのソフト作ってた人が二人も会場にいるって、考えるとすごいですね。
PHPerKaigiは、正しいこと、完璧なことを一方的に話して終わる場ではなく、議論や交流ができることが重要というスタイルになっているので、発表者としては非常にありがたい場になります。たとえ間違ったところがあったとしても、それは問題ではなく、その後に議論ができて正しくなれば良いだけなのです。最高ですね。
そもそも、この内容で応募する時点で、私より詳しいPHPのファミコンエミュレータ作者がいるのがわかってますし、マイコンやアセンブラをバリバリやってたという方もちらほらいるので、発表するまですごく不安でしたが、発表することで私より詳しい人から色々なお話がきけて、それが共有できるのであれば、こんな素晴らしいことはありませんね。
登壇後も、Twitterでここがちょっと間違ってるよというツイートもありました。
聞いてた時にもちょっとアレっと思ったのだけど、P14の構造はカセットの構造ではなくて、 .nes ファイルの構造じゃないかな。カセットは先頭からいきなりプログラムROMから始まる気がする。そんでPC初期値が0x8000で。
— 長谷川智希 / とむぞう (@tomzoh) April 1, 2019
メモリ空間にマッピングされるのは0x8000-0xffffまでの32KB固定じゃないかな。(実際にはもっと小さいかもしれないけど。)そして、もっと大きいROMカセットの場合、0x8000-0xffffの間のどこかに何かを書き込むとマッピングされる内容が変わる、という。
— 長谷川智希 / とむぞう (@tomzoh) April 1, 2019
.nes のヘッダは「このカセットがどんなマッパ(どこに何を書き込むとどうなるパターンか)なのか」という情報を持っている。物理カセットはカセット自身のハードウェアとソフトウェアがそれを知っているのでその情報は(ファミコン本体は)知る必要が無いので不要。
— 長谷川智希 / とむぞう (@tomzoh) April 1, 2019
色々な知見をいただけて最高でした。
(エミュレータを作り始めた頃はハードウェアの知識がなさすぎて、このような意見をもらっても理解できなかったかもしれない)
スカイラブハリケーン
もう一つ、最高な体験がありました。
私の後のセッションで、 @DQNEO さんが「コンパイラ作りの魅力を語る」という話をしていました。
コンパイラ作りの魅力を語る by DQNEO | プロポーザル | PHPerKaigi 2019 - fortee.jp
私が作ってるファミコンエミュレータはGo言語で実装しています。@DQNEOさんは自作のGoコンパイラを書いてます。もうわかりますね?
懇親会で @DQNEOさんから、彼のコンパイラで私のファミコンエミュレータをコンパイルして動かしてみましょう、という夢の提案がありました。熱い!
私のgolangのファミコンエミュレータを@DQNEO さんの自作Goコンパイラでコンパイルした時の画面 #phperkaigi ありがとうございました pic.twitter.com/9eSykmXNM3
— cakephper (@cakephper) March 31, 2019
内部でパッケージを分けてたため、残念ながらうまくコンパイルできませんでした。まだそこが未実装だったためです。今後、そこが実装されたら動きそうなのでワクワクしますね。
こんな素敵なコラボレーションがあるとは、もう大興奮ですね。
@cakephper さんのファミコンエミュレータの1コミット目をコンパイルするのに成功しました 🎉https://t.co/1lFbyU0ts3
— どきゅねお (@DQNEO) April 1, 2019
これは楽しい 👨💻 pic.twitter.com/RniSfiU1VT
進捗がありました!
前編のまとめ
PHPerKaigiでは、議論や交流の場がうまく設けられていて、発表者としては最高の体験ができました。
私は低レイヤーの知識が乏しく、ファミコンエミュレータだって移植してみただけで、完全に理解している状態ではありませんでした。ですので登壇するまでは不安で、何度もスライド変えたり発表リハーサルしたりしました。
いま思うのは、完璧な状態や強い状態になってから登壇するよりも、ある程度の知見や経験がたまり、伝えたいという想いがあれば、とにかくピッチに立つことが大事なんだなと感じます。とくにPHPerKaigiのようなスタイルのカンファレンスには。
もし来年PHPerKaigi2020があるのであれば、絶対に登壇者応募するのをオススメします。
後半へつづく・・