物理6502にBASICを搭載したスマートウォッチ







6502プロセッサは40年以上使用されており、現在でも多くの組み込みシステムで使用されています。 WDCは、65C02および65Cxxシリーズの周辺機器の生産を続けています。 著者は、PLCCおよびQFPパッケージで利用できるようになったことを発見しましたが、これらのチップオプションはめったに使用されません。 DIPパッケージの超小型回路は、自家製メーカーだけの需要が少なすぎるため、もはや利用できません。 著者は6502で最小のシングルボードを作ることを決めました。 このプロセッサで知られている最小の自作シングルボードプロセッサ(非自作で、たとえば、たまごっちなど)である可能性があります。 その結果、必要に応じてストラップ付きのリストケースを開発できるデバイスが完成します。 ディスプレイはNokia 5110から取られ、シェルは美しいインターフェースで書かれており、6502で唯一のスマートウォッチであることが判明しました。



時計には、クロック周波数8 MHzの65C02プロセッサ、65C22チップ、ボード上のLCD制御ボタンと外部キーボード、外部キーボード、Nokia 5110ディスプレイ(84x48ピクセル)、32 kBのスタティックRAM、16 kBのROMがアドレス空間に含まれています。 電源電圧は3.3 Vです。



そして最も重要なことは、ドッキングステーションとして、キーボードマトリックスをCommodore 64からボード上のコネクタに接続し、セイコーUC-2000に似たものを取得できることです( Habréのレビュー )。









KiCadでコンパイルされたプリント回路基板の回路とトポロジ。 両面ボードの寸法は3x1.5インチです。 PLCCパネルを除くすべてのコンポーネントはSMDであり、キーボードとLCDのコネクタも同様です。















図のトポロジは、縮尺どおりではありません。 組み立て前のボードの外観:















後:















アーカイブ (回路、ボード、ファームウェアなど)



ウォッチでは、いくつかの組み込みアプリケーションを実行できます。 その1つであるG'Mon(Generic Monitor)は、メインの開発およびデバッグツールです。 メモリの内容を個別のセルとフラグメントで表示および編集し、プログラムに切り替え、指定されたバイトでRAMセクションを埋め、アドレス空間でフラグメントを移動することができます。 時計で使用されるモニターのバージョンは、EhBasicがROMに収まるように簡素化されています。 彼はそれをかろうじて取得しましたが、残っているのは〜100バイトだけです。 インタープリターは、コアと結合できるように再作成されます。 次に、すべての初期化ルーチンが含まれており、外部インターフェースを操作し、利用可能なすべてのソフトウェアの関係を処理します。 そして別のアプリケーション-メインメニュー。



かなりの量のコアが、6522を介してソフトウェアで実装されたSPIプロトコルを介してNokia 5110のLCDと対話するコードで占められています。WriteBYTEおよびCommandルーチンは、それぞれグラフィックデータとコマンドをLCDに送信します。 ハードウェアテキストモードがないため、画面に文字を送信する手順が記述されています。 文字ジェネレータはROMに格納され、2つのルックアップテーブルで表されます。1つは上位バイト用、もう1つは下位バイト用です。 一緒に、ROMの開始文字バイトの絶対位置を示します。 書き込みルーチンは、ASCIIコードがプロセッサバッテリに書き込まれた後に実行する必要があり、ルックアップテーブルのX座標としても使用されます。 このルーチンは、最初にメモリ内の画面バッファーにASCIIコードを書き込みます。 次に、彼女は対応するタイルのデータを検索し、それにポインターを設定します。 ポインターから連続した8バイトを表示して、CCheckサブルーチンを呼び出します。 プログラムはカーソルの位置をプログラムで確認し、画面がいっぱいの場合、Scrollサブルーチンを呼び出して、画像を1テキスト行移動します。 作成者はLCDコントローラーからの読み取りを実装しなかったため、テキストはカーソルの位置に従ってインデックス付けされ、メモリー内のバッファーに書き込まれます。 Scrollサブルーチンは、LCDのバッファーから下の3行を表示し、下の行をスペースで埋めます。 LCDを操作するための残りのルーチンはCReturnです。 彼女は次の行の初期位置を検索テーブルで検索し、現在の行が最下部でない場合、カーソル位置を1つ増やします。 一番下の行の場合-Scrollプロシージャを呼び出してから、終了します。



キーボードは、GetKeyサブルーチンによって6522を通じてポーリングされます。 キーボードマトリックスを1行ずつ読み取り、バイトをメモリに書き込みます。 ビットがゼロであることが判明した場合、ルックアップテーブルを介して押されたキーのASCIIコードを判別します。 基本的に、コードには可能な限り迅速に動作するためのサイクルが含まれていません。 与えられたビットをインデックスに変換するサブルーチンはルックアップテーブルを使用しませんが、結果として、コードは非常に大きく、非効率的であることが判明しました。



ビデオ:





作者はこのファームウェアを使用しなくなったため、他のプロジェクトに切り替えました。 彼は、コードがNokia 5110からLCDをシングルボードから6502に制御したい人に役立つことを望んでいます。対応するルーチンは他のソフトウェアに簡単に転送できます。 これらの最も重要なものは、Write、Write_NS、Command、WriteBYTE、LCDInit、LCDClear、CCheck、CCheck_NS、CReturn、Scroll、およびSETCursorです。 他の便利なルーチンはLCDHomeとWriteBMPです。 LCDCursor、GTmp、GTmp5、およびGTmp6変数をメモリに配置する必要があります。また、84バイトの長さのScreenテーブルも必要です。 それらに加えて、CRTbl、CTableX、およびCTableYルックアップテーブル、およびすべてのタイルを含むCharおよびChar2ビットマップが必要です。



他のタイルセットを作成する場合は、Assetsフォルダーのテンプレートを使用します。 GIMPで、ビットマップをRGB(RGBXではなく)形式の.dataファイルにエクスポートします。 .palファイルに注意を払わず、アーカイブからBitConvertフォルダーに.dataファイルを配置します。 Convert.sh filename.dataを実行して、タイルのセットとなるFONT.binファイルを取得します。



All Articles