Cardputerでプログラミング!

前から少しだけ気になっていたCardputerを手に入れた!

 

少しだけ…という書き方がアレだけど、私の印象は「この小さな液晶と小さなキーボードで何かやる気が起きるんだろうか?」だったからだ。

でも、いざ買えるチャンスが訪れたら迷うこと無く手に入れてしまった(^^;;

 

SNSでの盛り上がりも後押ししたのかも知れないが、あとづけの理由としては某原稿の締切が近かったけどネタが無かったという事情もあるw

#本当は某原稿のためにギガンテスを動かしたはずなんだけど…orz

 

実際に手に入れてから、ようやくスペックを調べ始めた。

本体右上にM5StampS3がペタンと載っているのと、画面サイズが240x135ドット。

あれ?この解像度はM5StickC Plusと同じだ!うむむ、過去にM5Stickを触った時には、効果的な使い方が出来た覚えがない…。

pocketgriffon.hatenablog.com

過去のブログを参照してみたけれども、やはり画面の狭さに四苦八苦している様子がうかがえる。うーん、やっぱり今回も画面サイズで苦労しそうな予感…汗

 

開発環境の準備

まずは開発環境の整備だけど、これはM5Stackで使っているArduino IDEを利用すれば簡単に構築出来る事がわかった!特に悩むこともなくインストール出来た!

開発環境が一本化されてるのは本当に助かる(^^)

docs.m5stack.com

新規で環境を構築する場合でも、上のドキュメントに詳しく書かれているので、チャレンジしてもらいたい(^^)

 

動作確認

とりあえず、画面表示とキー入力、SDカードからの読み込み辺りをテストしてみよう。

 

表示系はM5Stackを扱ったことがある人ならば悩むことは無さそう。

setRotationで画面を回転させないと、左側が上になってしまい期待した感じの表示にならない。そのままでもテト◯ス作る分には良さそうな気がする(^^)

 

キーボードはサンプルをそのまま使っているが、特に困った点は見受けられない。

ANK文字は普通に取得できるけれど、okやoptなどは違う方法で得る。この辺りはサンプルとライブラリのソースを見てもらうのが確実かと思う(^^)

 

SDカードはサンプルが存在しなかったが、我らがNochiさん(@shikarunochi)がソースを開示してくれた。これをそのまま使えばSDカードへのアクセスが問題なく出来る。

ファイルをフルパス指定にしないと書き込み時に失敗する現象が出た。単にフルパス指定をすれば済む話なので特に問題はないと思うけど、念のための注意喚起(^^)

 

他にもCardputerは多彩なハードウェアが載っているみたいだけど、私の用途ではあまり使わ無さそうな気がしていて調査をしていない…汗

マイクとかスピーカーとかBluetoothとかWiFiとかを使って、優れたソフトウェアを作れる人が羨ましい(^-^;;

 

念のため、ライブラリのソースは読んでおくと良さそうだ。

github.com

 

どのくらいのサイズまでmalloc出来るかを知りたかったのでメモリマップを探してみた。

https://dl.espressif.com/public/esp32s3-mm.pdf

コレを見て「あ、メモリがワリと素直」と思ってしまった(^^;;

命令キャッシュが32KB、データキャッシュが64KB、汎用的に使える領域が416KB…と解釈したら良いのかな…?

まぁでっかいメモリ領域をアロケーション出来そうな雰囲気があって、かなり安心した!(^^)

 

知れば知るほど、潤沢なCPUパワーと大きなメモリ、適度な表示サイズのバランスが良いのかも…と思うようになってきた!(^0^)

 

CP/M80の移植

てっとり早く何かを動かしてみようと思ったので、過去に作ったCP/M80を移植してみた。

ここのブログでは何度も何度も出てきているので詳細は省くけれど、何年か前に私自身がスクラッチから開発したプログラムだ。

 

開発当初はcursesライブラリを用いていたが、その後SDL2へ移行し、フレームバッファ直アクセス版やM5Stack版など、多岐に渡る改造がされている。ソースもちゃんとまとめていないので、全部書き散らかした感じだ(TT)

 

今回はM5Stack版を元にCardputerへ移植してみた。移植と言っても画面サイズの違いとキーボードからの読み込みの違い、そしてSDカードに関しては初期化さえきちんとすれば、あとのアクセスはライブラリが吸収してくれた。

「動かすぞ」と思ってから30分掛からずに動いてしまったCP/M80。むしろ画面解像度の狭さから、表示をどうしようか…と悩む方が時間かかったかも?

ちなみにフォントはPC-8001のモノを利用している。

 

悪ノリしてPC-6001のフォントに変更して、ついでに背景もそれっぽくした!

BASICの画面とあいまって、PC-6001が動いてるようで楽しい(^-^)

 

Arduino BASIC

同じく、過去に移植してあったArduino BASICをCardputerへ移植してみた。

Arduino BASIC」→「SMART Response XE」→「RaspberryPi Pico」と何段階にも渡って移植されてきていて、特に私の代(Pico以降)はソースを適当に書いているため、とてもひどい(TT)

 

Picoからの移植はちょっと大変だった。

元々、PicoではLCDへのアクセスを独自で書いていたので、gpioやspiといったハードベタベタなソースコードになっていた部分が多かったが、これを全てM5ライブラリに置き換えた。

 

BASICの命令にグラフィック命令を拡張する改造もしてあった。

個人的な好みによりテキストとグラフィックを完全分離した。

内部でフレームバッファを3つ持っていて、それぞれテキスト用、グラフィック用、合成用としてある。

 

240x135x16bitの大きさを持つバッファを3つも確保したが、内部メモリの多さに助けられた。

BASICの駆動およびフレームバッファ生成はCore0で動かし、スクリーンを合成してLCDへ出力(push)するのはCore1で実行している。そのため、BASIC側の動作状況に関わらず、画面は定期的に更新される。

ただしSDカードがアクセスされた時は画面更新が止まる。

キーボードは本体付属の実キーがリアルタイムに読めるのに加え、Arduino IDEからのシリアル入力にも対応してみた。

実キーボードからの入力は、思ったよりも使い勝手は悪くなく、むしろ楽しんでプチプチ打ち込める感じだ!(^-^)

 

さすがにESP32-S3ネイティブで動くBASICはめちゃくちゃ速い!

もう少しBASICの命令数が充実していたら、大きめのプログラムも作れそうな気がするんだけどなぁ…。これはもう独自で作るしか…(^^;

 

おわりに

せっかくのCardputerなのに、機能を活かしたアプリが作れていないのが残念だ(TT

こんな大きさで、キーボードと画面が付いた立派なコンピュータであることを考えると、妄想は果てしなく広がってしまう(^^)

 

きっと画面を縦方向に対応したテ◯リスあたりは、どなたかが作られるのではないかと思う(^^)

 

無事に原稿も書けたので、これにてCardputerは封印するけれども、ちょっと使っただけでも楽しいマシンだと思った!

また次に使う機会があれば…それまでにアイディアを温めておきたい(^^)

 

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