ハンドヘルドコンピュータ(Handheld Computer)


ハンドヘルドなるもの

ハンドヘルドコンピュータの画像

文字通り持ち運べるコンピュタの総称であり、死語であり過去の遺産。Luggable Computerなんかは読みかたさえ知らないし、別に外部電源無しで使えるとも限らないのが不可解だ。

現代、苺とかラズベリーでポータブルでモバイルな機器を製作するなんてのは良く行なわれているし、クラファンサイトを一目見ればタブレットもどきで埋めつくされている。それらは軒並みフルHD、総天然色のディスプレイを持ち、静電容量式のタッチパネルと高度なGUIを搭載していて、多彩なアプリがあなたの可能性を拡げてくれる・・・・。

おいおい、そんなものは15年も前に林檎から出たばっかりじゃあないか。私が欲しいのはそうじゃない。電源を入れれば、BASICインタプリタ、気が効いてればDOSが起動する、ちゃちな反射型モノクロキャラクタディスプレイが付いたキーボードの大化け、時計屋が40年前に作ったああいうの(わからない人はHC-20やPC-2001で調べよ。1日幸せになれるでしょう。)が欲しい。現代風に、無線LAN接続でネットが見れたりすれば、色気付いた大学生がメモ帳しか使わない2in1PCの代わりには十分すぎるだろう。

執念のハードウェア

ハンドヘルドコンピュータの画像  

最低限のもので構成しよう。核となる計算機はRasberry Pi zero W。これを執筆している10年前のnetbookより高性能だ。雰囲気作りのキーとなる液晶は300円の日立のキャラクタディスプレイ(4*20文字、モノクロ、反射型、HD44780互換)、そしてLEDとブザー。電源を入れればパイロットランプが点灯し、2000Hzと1000Hzで時代錯誤の音がする。

ハンドヘルドコンピュータの画像 ハンドヘルドコンピュータの画像

芋半田と安物のこぎり、100均ボンドにビニテを駆使した高度なエンジニアリングによって、キーボードと木箱の複合ボディにラズパイ・液晶・モバブに銅製スパゲッティーを詰め込む。・・・テンキー?馬鹿言え、カーソル?ご冗談を。

たった一つの冴えた方法

ハンドヘルドコンピュータの画像

Linuxには、vcsという仮想コンソールの内容が丸々入っているスペシャルファイルが存在する。さらにRasberry Pi OS の中の開発環境の一つ、Wiring Pi には、標準でHD44780用ライブラリが含まれ、printfと同じ感覚でLCDへの文字出力が可能である。キーボードはUSBで仮想コンソールに繋っている。後はfgetsなりでvcsが更新されるたびにファイル内容をLCDに出力するプログラムをちゃっちゃと作ろう。systemdで先にsttyコマンドで仮想コンソールの画面サイズを液晶に合わせた後、前述のプログラムを自動起動させれば作業は終り。

完成・感想・改善

ハンドヘルドコンピュータの画像

膝上に置くには不安定で、机上で使うには力不足。持ち運べるがポケットには入らないコンピュータという当初の目標は達成。ボディは意外に耐久性十分で、スタバに持っていけば、wifiと計算上5時間以上持つバッテリでノマドワークが捗る。もちろん、エディタはed、表計算はsc、ブラウザはw3m、入出力はアルファベットのみ、この環境に満足できればの話。この恐しくミニマルなユーザエクスペリエンスを体験するのは、あなたがこの記事を*nixなosで閲覧しているのなら簡単だ。仮想コンソールに切り替えて、"stty -F /dev/ttyn rows 4 columns 20"(nはあなたが開いた仮想コンソールの番号)と打てばいい。お勧めはしない。もう一度同じコマンドを打って元に戻すことさえ困難だから。 つまり問題点は2つだ。

1. 表示画面が小さすぎる。物理的な画面サイズでは無く、コンソールサイズの方だ。ページャとしてw3mの操作が鬱陶しい。特に桁が不足している。BASICのみのHC-20が20*2、DOSの操作が必要なPC-2001は40*2であった事を鑑みれば、Linuxのコンソール環境では40桁が欲しい。例えば仮想画面を40*4分確保して、ホットキーで20桁ごと表示領域を切り替えたりできたら?・・・ホットキー?どうやって?
2. HD44780系のディスプレイは本来はANK文字サブセットの表示が可能である。つまり半角カナで日本語表示できる・・・が、Linuxのどんなロケールも何故かANKコードをサポートはしていない(おぃ。その上vcsの中では、というか仮想コンソールではマルチバイト文字は文字化けしているのではなく、別の文字(つまり◆みたいなやつ)に置き換えているらしく、このシンプルすぎる方法ではどうすることもできない。

未来へ

結局、ホットキーを拾ったり、日本語入出力をする為にはフロントエンド(例えば、コンソール用のuim-fepみたいな)を作らなければならない。

「キー入力」<ー>「自作フロントエンド」<ー>「シェル・アプリ」<ー>「自作フロントエンド」<ー>「LCD出力」

残念ながら、一介の経済学部生には標準入出力以前にそれらのIOがどうやってシェルに入っているのか、シェルに入る前に奪ったり、その上でアプリを動作させるなんて全くわからない。必要な知識以前に、そういう事を表現するコトバ(exec?fork???)さえ知らないから検索も出来無い。誰か知っている人が教えてくれれば・・・そう、これこそが、この記事を執筆した真の理由である。
"聡明なるOUCCの皆様、こういうlinux上のフロントエンドみたいなソフトを制作するのに必要な前提知識や、それらに繋るキーワード、できるなら学習書等々をどうかご教授下さいませ。"


2021/12/16 戻る