FC2ブログ

記事一覧

FabGL Altair8800試用(その1)

閉店中であったラジオデパートのsigezoneさんからオンラインでTTGO VGA32を購入しました。これにArduino IDEでFabGLというファームを書き込んで使ってみるとなかなか面白かったのでご紹介します。
FabGL_TTgoVGA32.jpg

このFabGL関係のファイル一式はFabrizio Di Vittorio氏のGitHubにあります。
中にはライブラリと色々なサンプルプログラムが含まれています。ざっと試してみたところ、ゲームのサンプルプログラムには興味がわかなかったのですが、Altair8800という名前のCP/Mエミュレータは楽しめそうだと思いました。
そういえば、その昔、CP/Mマシン(i8080+中古8インチFDD)を自作した際に利用したユニバーサル基板の規格、S-100バスはこの「Altair8800」というマシン由来のバスでした。他にも当時のことを色々と思い返しましたが、ここでは止めておきましょう。

<Altair8800エミュレータ>
■問題
実はこのAltair8800(CP/Mエミュレータ)のファームを動かすにはちょっとした修正が必要です。
対応キーボードに日本語キーボードが含まれていなくて、オリジナルのままではまともに操作できないからです(対応キーボードは米語、英語(UK)、独語、伊語のみ)。
ゲームのサンプルプログラムの方は何の問題もなくプレイできるのと対照的にこちらの方は最初からほぼ使用不能ですので、ギブアップした人が多いかもしれません。

<プログラム修正>
■下準備
プログラムの修正にかかる前にまずオリジナルのプログラム(ライブラリ、スケッチ例)のインストールが必要です。
(ArduinoIDEでのESP32の開発環境はできているという前提でのお話です)
①ArduinoIDEを起動してライブラリマネージャで「FabGL」をインストールします。
②スケッチ例を読み込みます。ArduinoIDEで、ファイル-スケッチ例 - FabGL - VGA - Altair8800 とメニューを操作します。
修正を加えるためにこれをDocuments\Arduinoフォルダ下に保存しておきます(ファイル - 名前を付けて保存 です。名前は"Altair8800_JP"などお好みで)。
FabGL_Altair8080_01.jpg

■修正作業
関係するスケッチ、ライブラリの修正手順を以下に説明します。
①keyboard.cppの修正を行います。
Documents\Arduino\libraries\FabGL\src\devdriversフォルダにkeyboard.cppというテキストファイルがありますのでこれをTeraPadなどを使って修正します。
と言っても数十行分のテキストの挿入が必要ですから、こちらに修正後のファイルを置いておきましょう。オリジナルと同じ名前、拡張子に変えて、置き換えてください。
FabGL_Altair8080_04.jpg

②keyboard.hの修正を行います。
以下の2行のスクリプトを図の位置に追加します。
/** @brief JP keyboard layout */
extern const KeyboardLayout JPLayout;

FabGL_Altair8080_05.jpg

③本体のスケッチ("Altair8800_JP.ino"?)を修正します。
4行に亘って修正します。
const char * KbdLayStr[] = { "US", "JP", "UK", "DE", "IT" };
const fabgl::KeyboardLayout * KdbLay[] = { &fabgl::USLayout, &fabgl::JPLayout, &fabgl::UKLayout, &fabgl::GermanLayout, &fabgl::ItalianLayout };
constexpr int DefaultKbdLayIndex = 1; // Default: "JP"
constexpr int MaxKbdLayIndex = 4; // Max: "IT"

FabGL_Altair8080_06.jpg

■残っている問題
実はオリジナルのライブラリの構成をそのまま生かして修正していますので、問題がいくつか残っています。
①シフト’0’(ゼロ)押下でスペースが入力されます。オリジナルのライブラリの構成をそのまま生かすと、ここに何らかの文字を割り当てることが必要です。このままでも十分使えますのでこれは放置します。
②¥(円)キーを押すと$(ドル)が入力されます。この問題は、¥キーを押しても\(バックスラッシュ)を押しても生成する半角のアスキーコードは同じという日本語キーボードの仕様そのものに由来する問題です。CP/Mの文字入力は半角文字にしか対応しませんから、どちらのキーを押しても同じコードを生成するのはなんだかなぁと考えてこうしました。もちろんどちらも\を生成することでもよいと思います。
FabGL_Altair8080_03.jpg

コントロールC(ctrl-C)が入力できません。元々のライブラリがそうなっています。
この文字を入力できないと、例えば、CCPコマンドでエラーが出た場合、復帰できないことがあります。これが最も大きな問題かも知れません。ライブラリの中身の解析をのんびりやってますので、その内解決できるかも知れません
<2020/06/12追記>
ccpで"Bdos Err On X: Select"というエラーが発生したときに限ってコントロールCが効かないということが分かりました。
ccpの動作がそうなっているというだけのことのようで、BIOSの一文字入力にはちゃんとコントロールCのコードが渡されているようです。
以前の記述には取り消し線を入れておきます。

<動作状況>
CP/Mエミュレーションの起動時の画面です。
メモリは、63kBです。
FabGL_Altair8080_07.jpg

ドライブはA、Bの2つ、容量はそれぞれ300kBです。
FabGL_Altair8080_09.jpg

それぞれのドライブのコンテンツです。
小容量のドライブが二つしかない状況で両方のドライブにMBASICと一部のトランジェントコマンドが重複して入っているのがちょっともったいない感じがします。
FabGL_Altair8080_08.jpg

<今後の対応>
もっと本格的に使い込むにはドライブ数の拡張(あるいはドライブ容量の拡張)と使い勝手の良い、外部とのファイル交換の手段が必須だと思います。
ということでWROVERモジュールにSDカードIFを付加したハードの製作に取り掛かっています。配線量は僅かなのですが、他にも多数のガジェットを製作中ですので、時間がかかるかも。
<2020/06/12追記>
えがら家さんから頂いたコメントに、FORMAT.COMでドライブC、Dが使えるようになる、とあったので早速実行してみました。
ちゃんとC、Dドライブが作れました。
サイズはやはり各300kBですが、気分的には窮屈感が大分改善されました。
えがら家さん、有難うございました。
FabGL_Altair8080_10.jpg

スケッチを見ていて気が付いたのですが、「PAUSE」キーを押すと、エミュレータの設定メニューが現れます。
FabGL_Altair8080_11.jpg

このメニューを使い、キーボードレイアウト(US/JP/UK/DE/IT)、COLOR(文字/背景)、CPU(Z80/i8080)、Terminal等々の設定を変更することができます(キーボードレイアウトのオプションにちゃんと”JP”が現れていて、オリジナルのライブラリの基本構造をいじらなくて良かったと思いました)。

さて、このメニューの中で最も期待が大きいのが、S(Send Disk to Serial)、R(Get Disk from Serial)のオプションです。
‘S’を押してディスクを指定すると しばらく“Sending Drive X”と表示されしばらく待たされますが、このときArduino IDEのシリアルモニタを開くとバイナリらしいデータの受信を確認できました。

宿題の一つ、「外部とのファイル交換の手段」の実現に期待が膨らみます。なかなか面白いですね。

スポンサーサイト



コメント

同じようのことをやってます

shigezoneさんのtweetから参りました。
同じ様なことをやっております、えがら家と申します。
日本語キーボート対応の解析中で大変参考になりました。
ドライブはC:D:がFORMAT.COMで使用できるようになります。
SDはOrangePicoのORENGE-ESPerが実装済みで技敵も通っているようなのでこちらが購入出来たら試してみようと思っています。 http://www.picosoft.co.jp/ESP32/index.html
同人活動で簡単な解説書やケースなど配布しております。
これからの参考にさせていただきたくよろしくお願いいたします。

Re: 同じようのことをやってます

えがら家様

こんにちは。

ブログを見ていただいて有難うございます。
教えて頂いた通り、ドライブC、Dがフォーマットして使えるようになりました。
有難うございました。記事に反映させていただきます。
本件を記事にして本当に良かったです(ついつい電子工作そのものに時間を費やしてしまっています)。

ORENGE-ESPerの件も全く知りませんでした。重ね重ね有難うございました。
今後もよろしくお願いいたします。



ドライブ作成について

初めまして、初心者1です
ドライブC:D: FORMAT.COMのやり方詳しく教えて頂けますか、お手数ですがよろしくお願いいたします。

Re: ドライブ作成について

こんにちは

FORMATコマンドの使い方ですね。
確かにひっかかりポイントがあります。

A>のプロンプトが出ている状態で、
"format"、リターンを入力します。
DISK DRIVE (A-P)?と聞いてきますので、例えば'c'、リターンと入力します。

"COMMAND:
VALID COMMANDS ARE: DISK,FULL,PARTIAL,TEST,STOP"と聞いてきますので、
"FULL"、リターンと入力します。
ここが問題のポイントです。ここの入力は大文字でなければいけません。

最後に、
"TYPE C TO CONTINUE, A TO ABORT WITHOUT LOSS."と聞いてきますので、
'C'を入力します。ここも大文字でなければいけません。
これでフォーマットが始まります。
しばらく待つとフォーマットが済みます。

続けて、Dドライブもフォーマットするのであれば"COMMAND"のプロンプトの後に
"DISK"と入力して、次のプロンプトで'D'を指定します。

小文字可のところと大文字必須なところが混在しているのが混乱の元ですね。
以上です。


Re: Re: ドライブ作成について

書き忘れましたが、formatコマンドの終了は、"STOP"かctrl-cです。

ドライブ作成について

有難う御座います
大変良く分かりました!
助かりました。

コメントの投稿

非公開コメント

プロフィール

vabenecosi

Author:vabenecosi
ン十年間アキバに通い続けるオジサンです。自転車&バイク=二輪で旅するのも好きです。
本ブログはリンクフリーです。
本ブログの記事の内容を元にした製作等の行為は全て自己責任で行ってください。
またコメントを頂いてもスパム対策、あるいは管理者の判断により返信しない場合や削除する場合がありますが、ご了承ください。
旅関係の記事を書くこともあるでしょうが、専ら「アルバム」にて旅の写真のみを提供するつもりです。「アルバム」はPC画面では右下方に、スマホ画面では左上のメニューボタンの中にリンクがあります。

アルバム

FC2カウンター