RaspberryPi PicoでPC-1360エミュレータ!

f:id:PocketGriffon:20220316214213j:plain

 

今回はRaspberryPi Picoの小型液晶に挑戦してみた!(^-^)

ついでにPC-1360エミュレータも動かしてみたのでご紹介したい。

ちなみに今回もひどーく苦労した(T-T)

 

f:id:PocketGriffon:20220316174009j:plain

今回使ったのは、スイッチサイエンス社から販売されている小型の液晶。

一連のPicoで小型液晶を使うにハマっていた時に、一緒に購入していた。

 

www.switch-science.com

↑これ!(^-^)

 

f:id:PocketGriffon:20220316181759j:plain

裏にひっくり返せば、RaspberryPi Picoが張り付いている。

 

f:id:PocketGriffon:20220316181858j:plain

斜めから見ると下にPicoがついてるのが分かる(^^)

 

このボードのLCDにはAQM1248Aというものが使われているらしい。

ポピュラーな液晶なんだろか??

久しぶりすぎて液晶の制御なんて覚えてないなー(T-T)

不安があるとすればソコだけかも…?

 

画面に何も出ない!

せっかく手に入れたからには使ってみないともったいない!

プログラムを組んでみようじゃないの(^^)

 

そう思って、開発資料が欲しくて↑スイッチサイエンスのページを見に行ったけれど…基板仕様接続ポート一覧という情報のみがあるだけで、サンプルプログラムとか載ってない…。

 

世の中のプログラマさんは、これらの情報だけでプログラム出来るんだろうか…(-_-;

私も1年前だったら「面倒だからやーめた」になっていたかも知れない(^^;;

でも今だったらチャレンジしてみちゃうぜ!!!

 

…と思ってやりはじめたけど、まぁ当初の予想通りうまくいかない(T-T)

相変わらずGPIO、SPIなどの言葉が、概念的にもすっきり頭に入っていないので、何をどうしたら画面が表示されるのか突破口が見えない。

 

スイッチサイエンスのページからAQM1248Aの資料ページに飛べる。

https://akizukidenshi.com/download/ds/xiamen/AQM1248.pdf

f:id:PocketGriffon:20220316181549j:plain

これを見ながら、データの出力方法や初期化などを拾っていく。

そう、これを見ればコマンドやデータの送信方法や、LCD自体の初期化方法は書かれてる。問題はSPIの初期設定をどうすれば良いのかがさっぱり分からないのだ(T-T)

 

Arduinoの資料を見つつ、LCDの資料とにらめっこをしながらプログラムを組み立てていくが、全然うまくいかず改良してるのか改悪してるのかすらもわからない。

画面を見てもピカとも反応せず、挙句の果てにはこの液晶、壊れてるんじゃないかな…と疑い出す始末…(^^;;

 

結局、その晩は何も進展が無く、枕を涙で濡らしつつ寝る事に(T-T)

 

布団に入りながら考えてみたが、そういえばArduinoの資料を見ていたけれど、コントローラはRaspberryPi PicoなんだからRaspberryPiの資料を見ないといけないのでは…と気がついた(^^;

 

それが突破口となり、翌日には無事に画面に絵を表示させる事が出来た!!

f:id:PocketGriffon:20220316184552j:plain

ひー!苦労した!!!(T^T)

やっぱりGPIOとかSPIとか苦手かもなぁ…。苦手というか理解が及ばないというか。

数こなせばもう少し分かるようになるんですかね…?(-_-;;

 

分からない事を少しだけ書いてみると…

例えばSPIの初期化にはSPI.beginとspi_initがあり、どちらもエラー無く呼べてしまう。

同じようにdigitalWriteとgpio_putというのがあり、これらは何が違うのか…。

こういう似て異なりそうなものがさっぱり理解出来てない(T-T)

なかなかハードルは高そうだ!!

 

さて、出来上がったのはハードウェアSPIによるデータ転送プログラム。

全画面を書き換える時間は、約1msとかなりの高速。

データ量が768バイトしかないからそんなモンかも…??

よっし、これで表示に関する不安は無くなった!ヽ(=´▽`=)ノ

 

PC-1360を載せてみる!

せっかくの横長のモノクロ液晶なんだから、ポケコンを動かしてみたいよね!

PC-1360のRAY FORCEが動いたら面白そうじゃん!と、ワリと気軽に検討を始める。

移植し終わってから気がついたが、Picoの小ささよ(^-^;;

f:id:PocketGriffon:20220316215714j:plain

 

ROM

まず最初に気になったのがROMサイズ。PC-1360はシステムが大きくなった分、ROMもでかいサイズを積んでる。16KB * 8バンクで128KBものサイズがある。

これをそのままPicoのRAMに載せる事も出来なくはなさそうだけど…ここはFlashメモリに置いたままにしてアクセスした方が良さそうだ!

Flashは2MBもあるので、今回はどう頑張っても埋められない(^-^)

 

RAM

RaspberryPi PicoのRAMは256KB以上あり、PC-1360の実装では余裕だった!

標準構成のPC-1360は8KBの拡張メモリが添付されているが、今回のエミュレータでは32KBの拡張メモリを(仮想的に)載せている。

それに加えて、$2000からの8KBにウソっ子メモリ(本来ならばPC-1360には存在しないRAM)も載せている。

これらを積んでもメモリ的にはかなり余裕のPico!

いいね!(^-^)

 

表示

PC-1360を動かしてみよう!……って考えてた時、なぜ横幅のドット数が足りないと気が付かなかったのか…(^^;; なんか完全に思考の外にあって「大丈夫!」と思っちゃってたんですよね…汗

 

この液晶、横が128ドット縦が48ドットの構成となっている。PC-1360は150x32ドット。横方向に22ドットも足りなくなってしまった!

仕方ないので、画面の右側は映らない仕様としてしまった…。

こんな重要な部分、割り切って良いところなんだっけ?(T-T)

画面を目一杯使ったプログラムを動かすと、残念ながら右端は見る事が出来ない(T-T)

 

内部的には256x64ドットの表示バッファを確保してある。横方向を256にした意味は正直あんまりない!乗算が出来るCPUなので素直に150にしとけば良かったじゃん…と思う(^^;

LCDのドットフォーマットとPC-1360のソレが同じなため、複雑なドット変換せずそのまま素直に書き込めばドットが表示される。

 

キーボード

今回は完全にノーケアとした。
いつかUSBキーボードに繋げてみたい野望は持ち続ける!(^^)

 

PC-1360の実装!

過去にM5Stackへ移植したプログラムを、ほぼそのまま持ってきた!

M5Stackに比べてPicoはSDカードが無い、RAMが大きくないなど細かな違いはあったけれど、むしろプログラムは楽になる方向だった。

 

SDカードにアクセスしていたものは全てプログラムに内包し、ビルドする事でFlashメモリに配置されるようになった。楽ちんその1。

 

全てのメモリアクセスは1つの関数にまとまっていたので、FlashROMに置かれているPC-1360のROMをアクセスする部分も、この1箇所(しかも1行!)を書き換えるだけで対応出来てしまった!楽ちんその2(^^)

 

PicoはCPUのコアが2つあるので、CPUエミュレーションと画像表示を別コアに割り振った!

……んだけど……速度が速すぎて…なんだこれは???(@_@;;

CPUエミュレーションも画像表示コアも、大体90%が休むという異例の状態に……汗

あれ?Picoってこんな早かったっけ???

PC-1360が遅いのかな…そうかも??

 

おわりに

結局、夜に液晶を取り出して一晩悩み、翌日の夕方にはPC-1360が動いてしまった!

この手のエミュレータは移植がとてもしやすい(^^)

 

まぁサウンドもキー入力も実装していない時点で、人に見せられるものでは本来ないのですが(^^;; 自己満足ということで許してほしい!

 

Picoに関して言えば、まだ他にも周辺ハードをいくつか手に入れてあって、この先も楽しめそうだ!

f:id:PocketGriffon:20220316213952j:plain

それぞれのハードにPicoがつくため、取り外しが面倒で1ハード1Picoにしてしまってる!このご時世で珍しくPicoは手に入りやすいので、ちょっと贅沢だけどこの先もそうするよ!

あと4Picoもすでに手元にある!(^-^)

 

やっぱPico楽しいなぁ!

プログラムしやすいハードだと思う!(^^)

 

ではまた次回!(^-^)ノ