M5Stackで動くプログラム、なんとなく番外編!(^-^)
チャレンジというほどのモノでもないし単なる自作プログラムの移植だし。
というわけで、今回はCP/M80を動かしてみた!
最初の画像にスタートレックを持ってくる辺り、あざとさが透けて見えて良い(^-^)
このCP/M80エミュレータは、過去にLinux用として開発してあったモノだ。
Z80のエミュレータをスクラッチから作り始め、仮想的な(しかもCP/M80を動かすのにある程度理想的な)マシンを実装したのちにCP/M80を移植した。
エスケープシーケンスは端末の機能に頼らず、内部で処理を入れている。例え端末側でサポートしていないシーケンスが来ても対応が可能となっている。その分、コーディングは面倒だったけど!(^^;;
CP/Mのディスクシステムは、Linuxから見ると1つのファイルだが、CP/M80からは1つのディスクとして見える。まぁエミュレータによくあるアレだ。
今回は、この自作エミュレータをM5Stackに移植してみた。
移植と言っても……難しいところは特に無く(^^;
元はcursesライブラリを用いていたので、その部分(表示に関するところ)をM5Stack用に作り直しただけで対応が出来てしまった。
いつも思うのだがANSI準拠で書かれたコードはM5Stackへの移植が簡単だ。
これで終わってしまうのもアレなので、もう少しだけ工夫したところをご紹介してみたい!
ブログの尺も大切だww
80x24の画面表示
CP/M80のプログラムは画面の大きさが横80桁縦24行ある事を、ある程度期待して作られているモノがそれなりにある。
このブログ内でもPC-1600KにCP/M80を移植する話をしているが、この時にも画面サイズを結構気にしていた(未完成ですが…すみません…orz)。
横320ドットで80桁…というのは、ちょっと前までは現実的ではないと思っていた。しかしM5Stackのようにカラー表示が出来るLCDの場合は、中間色というか微妙な色変化を付けられるおかげが、機械的に横幅を半分にしてもなんとなく読めるフォントになる。
↑ほら、読めるよね!?
さすがにこれだと厳しい……場合しかないので、横方向に2倍した表示も用意した。
横方向に2倍というよりは、これが標準だ!
そして見えなくなってしまった右側40文字分を見たい時は、画面下にある3つのタッチボタンの右を押すと右側が見える。左に押せば元に戻る。
好きなタイミングでサイズや見える場所を変える事が出来るのは、意外に便利だ!
これは元々のプログラムに、仮想スクリーン(80x24の領域を持つ)の仕組みがあったのが功を奏した。コレを応用したおかげで80桁表示が実現できた。元の仕組みが文字列をスクロールで流してしまう構造になっていたら、おそらく面倒で対応しなかったと思う(^^;;
任意のタイミングで拡大させる事が出来るので、ROGUEで遊んでる最中だってご覧の通り!
これでゲームに熱中できるってモンです!(ホントか?)
ディスク
ディスクに関しては、最初はSDカード上にディスクイメージを置いておき、アクセスがあるたびにSDカードを読みに行っていた。
…が……大きなプログラムを起動したりすると結構遅い(^^;;
運用としては、読むことがほぼ全てで書き込むことは無さそうなので、起動時に一気にメモリに読み込むことにした!Core2は豊富なPSRAMがあるので、ここにディスク全体を読み込んでいる! It's無茶!
読み込みは比較にならないほど速くなったが、書き戻しをしていないのでセーブしたデータはもれなく消滅する(^^; 書き込みと言っても小さなセクタのやりとりだけなので、余裕とやる気があったらディスクへの書き込みも入れてみたい。
キーボード
CP/M80の運用でキーボードが無いってのはどーかと思うので、手に入れたカード型のキーボードに対応した。むしろコレがなかったらCP/M80を動かそうとは思わない(^^;;
このキーボードを使い始めた頃は「いや無理でしょコレは」と思っていたが、何日か使っていると不思議と慣れてきた(^^;
キャピタライズした文字を打ち込みたいCP/M80に対して、このキーボードはCAPSロックが出来ない(出来ないよね?)ので、入力された文字を大文字小文字を反転させた。
小文字が入力されたら大文字へ、大文字が入力されたら小文字になるように変換している。
終わりに
あくまでも「CP/M80が動いたよ」的な実験ではあったけれども、意外にもしっかりと動いてる。人に見せて驚かせるには十分だと思う(^-^)
これで往年のゲームを楽しんでみるのも良いし、簡単なアセンブラやコンパイラを動かせる端末して使っても良いかもね!
とりあえず満足した!!(^-^;;
ではまた次回!(^-^)ノ