間違いなくRaspberryPi Picoを作った方は「違うんだよ…そういう使い方をするハードじゃないんだよ…」って思ってるに違いない!(^-^)
今回はRaspberryPi PicoでPC-8001エミュレータを動かしちゃったお話!(^^;;
一応、反省はしてるw
事の発端は……
MI68で手に入れたX68000 Compact XVIの形をしたRaspberryPi Zeroケースに、Zeroを入れるべくお店まで出向いていった時に、何気に目に入ったのがコレ。
サイズと名前から想像するに、RaspberryPi Picoに取り付ける液晶ユニットっぽい。
解像度は240x135ドットと、M5Stickと同じ。
そうかー、これがあったらPC-8001のエミュレータ動くのかな…と何気に頭をよぎる。
よぎっちゃったら……やるしか無くない?!(^-^)
そんな単純な理由でパーツを買ってくる私であったw
液晶ディスプレイの中身は…
写真ではPicoも一緒に映っちゃってますが、別売りですw
そうか…Picoって薄っぺらい基板だけだから、ピンヘッダをはんだづけしないといけないのか…。うーん、久しぶりのはんだづけ。
ブレッドボードを利用しつつはんだづけをしていく。
どうも私はピンヘッダが苦手で……その…節足動物みたいに見えるよね?(T-T)
今にも動き出しそうでちょっとイヤなんですよねー…(TOT)
Picoと液晶を合体させるとこんな感じ!
Picoの上に固定されるので、変にケーブルが伸びたりせず液晶が邪魔にならずに済む!
サイズ的に……えーと、ほぼいっしょ?
液晶サイズも同じに見えるので、何を作っても見た感じの驚きはないかも(T-T)
まぁでもPicoで何かが動くってのは重要でしょ?! ←そうなの?
MacでPicoの環境を整える!
これが一番大変だったかも知れない!
今まで、RaspberryPi用のプログラムを組む場合、完成までMac上で開発して、最終的な動作確認のみをRaspberryPi実機でビルドするようにしていた。それで問題がなかったし、むしろそれが普通な感じだった。
しかしPicoの場合は本体にOSというものが載ってなく、セルフビルドが現実的ではない。どうしてもホストマシンでのクロスビルド環境が必要となる。
そのため、私自身も手持ちのMacで環境を整えた。
ネットに書かれていた記事を参考にしつつ環境をダウンロードした。
その後、独自であれこれ触ってしまったために、だいぶオリジナル環境になってしまったかも。
ビルド環境全体がCMakeに依存しているので「CMakeってなんぞ?」って方には厳しいかも…。でもなんとなくファイルを触ってたら分かるよ、うん(^^;;
もうひとつ大変だったのは↓こっち!
ちょっと分かりにくいけれど、基板上にある「BOOTSEL」と書かれたボタンを押しながらUSBケーブルを挿し込むと、Picoにデータを書き込めるようになる。これが結構辛い。
ピンヘッダがついてるので指に刺さるし、その状態でボタン押しながら差し込みづらいUSBケーブルと格闘する事数回。
何かのはずみでボタンが壊れてしまった!
私が壊したんじゃない!壊れちゃったんだと言いたい!!(^-^;;
結局、これはボタンそのものが完全に壊れてしまったので、別のPicoを使うことに(T-T)
ダウンロード回数5回ほどの寿命でした(ToT)
この故障を教訓に、いくつかの対策を施した。
まずはUSBコネクタの挿抜回数を減らすために、スイッチ付きのUSBハブを用意。
USBの線を抜かなくても、スイッチをパチパチすれば電源のON/OFFが出来る!
これは本当に便利だ!
さらに!!!
ネットでこんなPicoカバーを見つけた!これがあれば、あの忌まわしいボタンを直接触らなくても、間接的にポッチン出来る!
実際に取り付けてみてから気がついたが…
液晶がついている面の、反対側にぼっちょがついてるので、液晶を上にした状態でPico自体を下にぐっと押す(意味分かる?)と、ボタンが押される。この状態でUSBハブのスイッチをONにすれば書き込みモードで起動する…というワケだ。
実際にやってみると、格段に使いやすくなった!これであのボタンも勝手に壊れる事はないだろう!(あくまでも壊してないと言い張る)
PC-8001エミュレータの移植
今回のPicoは、M5Stickに構成が近く載っているメモリはM5Stickの半分の264KB。
そのため、M5Stickからソースコードを移植するのが簡単だと判断した。
Z80エミュレータなどのファイルを何も考えずにコピーしてきて、CMakeLists.txtに必要なファイルを書き加えていくだけの作業だ(^^)
M5Stick特有な機能は、pc8001.inoファイルに集めてあったので、このファイルの代わりになる、Pico用のC++ファイルを用意すれば良いだけの話である。
エミュレータ初期化、エミュレータ駆動、表示系実装という感じに順を追って動作確認をして行ったが…驚いたことに、メモリ確保(malloc)と表示系(LavyanGFX)を数行書き替えただけで動いてしまった!(^-^;;
Picoのビルド環境が出来上がってから、ほぼ1時間でエミュレータが動いた!
M5StickとRaspberryPi Picoはライブラリ的には互換性がないので移植は大変かと思われていたが、そもそもMac環境からM5Stickへ移植してるくらいなので、元々のソース自体が環境に依存している部分が少なかった。
Pico側の勉強については、表示サンプルファイルを1つ読んだだけだった。
でもそれで十分だったよ!(^-^)
RaspberryPi Picoに液晶ユニットを載せて、PC-8001エミュレータを動かしてみた!
— PocketGriffon (@GriffonPocket) 2021年10月12日
画面更新が秒間2コマくらいしか出なくて、もはやゲームするとか無理でした!(^^;
イメージとしてはCPUエミュレーションは速いけど、画面更新が間に合ってない感じ。 pic.twitter.com/u3CE4QSvCX
Picoにコアが2つあることをすっかり忘れていて、最初に動かした時は秒間2コマくらいしか表示されず、まぁ133MHzだったらこんなモンかも?と思い込んでしまった。
その後、コアを2つ使うように修正し、必要な箇所のみ画面更新するようにしたところ、実機よりも速く動くようになった!
ちなみに、Picoでマルチコア対応をする時は CMakeLists.txtのtarget_link_librariesにpico_multicoreを追加する必要がある。
その後、もう少し最適化してみたら、遜色のない速度で動くようになった!下手すると実機よりも速い?
— PocketGriffon (@GriffonPocket) 2021年10月12日
133MHz DualCoreでも十分動くと分かった!(^-^)
RaspberryPi Picoも楽しいなぁ!#RaspberryPi pic.twitter.com/RJVpjVZk0Q
終わりに
完全に手探り状態で移植したワリには、それなりに動いてしまった事に驚く!
特に表示系が思った以上に速いのは、可能性が広がる(^-^)
メモリの空き情報など分かってない事が多いけれど(特に意味もなく)他の機種を動かしてみても楽しいかもね…と思った!
ではまた次回!(^-^)ノ