「超ミニBASIC for SH7050」(以下、本プログラム)は、私 A.Hiramatsu (平松 明夫)が作成した日立製CPU「SH7050」(クロック20MHz)上で動作するBASICインタプリタです。
とくにメモリを外付けしなくても、CPU内蔵のROMとRAMだけで動作可能です。また、CPUの内蔵ROMに置いたBASICテキストをCPUリセット後に実行するようにすることも可能ですので、オールBASICで簡単にSH7050ワンチップで動くアプリケーションを作成できます。
RAMを外付けした場合、その外付けRAM上にBASICテキストを置くことも可能です。
内蔵I/Oのレジスタアドレスを定数としてもっており、さらにビット操作命令も持っているため、SH7050の内蔵I/Oを気軽にアクセスできます。SH7050の内蔵I/Oの学習用としても最適です。
古いタイプのBASIC(N88-BASIC や MSX-BASIC など)と違い、構造化IF構文や WHILE〜WEND、REPEAT〜UNTILなどのループ構文を持っており、わかりやすいプログラムを書くことが可能です。
本プログラム(アーカイブファイル cmb7050.zip 内に含まれている実行可能なプログラム、ソースプログラム、文書)の著作権は、私 A.Hiramatsu (平松 明夫)が所持しています。本プログラムは無料ですが、著作権は放棄していません。配布の際には必ず配布条件を守ってください。
本プログラムのオリジナルアーカイブファイル( cmb7050.zip )を再配布する場合、ファイル内容には一切変更を加えないでください。また、本プログラムは無料です。配布の際に代金を請求してはなりません。ブランクディスク代金、送料、通信回線使用料などの費用がかかった場合、その実費以上の金額を請求してはなりません。
本プログラム上で動作するBASICプログラムを作成し、それをテキストファイルやMOTファイルなどで配布する場合は以下の点を必ず守ってください。
そのBASICプログラムを有料にするか無料にするかはBASICプログラムの作者が自由に決めて構いません。
超ミニBASIC for SH7050を改造したBASIC処理系(インタプリタ、コンパイラ等)を配布する場合は、以下の点を必ず守ってください。
改造後のBASIC処理系を有料にするか無料にするかは改造した人が自由に決めて構いません。
本プログラムを書き込んだCPU、またはROMを搭載したハードウエアを配布する場合、以下の2つのいずれかにより配布条件が異なります。
4−a)、4−b)どちらの場合でもそのハードウエアを有料にするか無料にするかはハードウエアの作者が自由に決めて構いません。
本プログラムのアーカイブファイル( cmb7050.zip )には以下のファイルが含まれています。
cmb7050.s |
超ミニBASIC for SH7050 の実行ファイルです。ROMに書きこんで使ってください。 |
cmb7050.asm |
超ミニBASIC for SH7050 のソースファイルです。 |
cmb2s.exe |
BASICテキストをS形式に変換するツールです。使用するにはWindowsパソコンが必要です。 |
index.html |
あなたがいま見ている、このファイルです。 |
超ミニBASIC for SH7050 の改版履歴です。H8版との違いも書いてあります。 | |
syntax.html |
超ミニBASIC for SH7050 のインタプリタの文法について説明したファイルです。 |
超ミニBASIC for SH7050 を実際に使う際にヒントになると思われることを書いたファイルです。 |
history.html を参照してください。
・SH7050CPU(クロック20MHz)が搭載されているハードウエア
・SH7050CPUの内蔵ROM、または外付けのROMにプログラムを書きこむことができる環境
・RS−232Cシリアルターミナル、またはRS−232Cポートを持ったパソコンとシリアルターミナルソフトウエア
・RS−232Cケーブル(SH7050を搭載したハードウエアとシリアルターミナルまたはパソコンを接続)
・Windowsパソコンおよび適当なテキストエディターソフト(BASICプログラムをROM化する際に必要)
その他、ソースプログラムをアセンブルするにはイエローソフト社製の統合開発環境「Yellow IDE」が必要です。
cmb7050.asm をアセンブルする方法については、私のホームページで別途紹介する予定です。
本プログラムは、SH7050CPUに内蔵されているSCI1を通じてシリアルターミナル、パソコン等と通信を行いますので、SH7050が搭載されているハードウエアはSCI1からRS−232Cレベルのシリアル通信ができるような回路構成になっている必要があります。
SH7050CPUを搭載したハードウエアの多くは、ブートモードROM書きこみのためにそのような回路構成になっていると思いますが、そのようになっていないハードウエアの場合はシリアルターミナル等を接続しての使用はできません。シリアルターミナル等を接続しての使用を諦めるか(BASICテキストをROM化しての使用は可能)、回路構成を変更してください。
まず、BASICインタプリタの実行ファイル( cmb7050.s )をSH7050CPUの内蔵ROMに書きこみ、書きこみ後電源を切ってください。ブートモードで書きこんだ場合はブートモードを解除するのを忘れないでください。
CPUモード0、1でROMを外付けしている場合は外付けのROMに cmb7050.s を書きこみ、ハードウエアの電源を切ってそのROMを実装してください。
次にSH7050を搭載したハードウエアとシリアルターミナル、またはパソコンとRS−232Cケーブルでつなぎます(CPUの内蔵ROMにパソコンからブートモードで書きこんだ場合はそのままで結構です)。
そして、シリアルターミナル、またはパソコンのシリアルターミナルソフトを起動して、シリアル通信条件を9600bps、パリティなし、ストップビット1、改行文字=CR・LF※1に設定してください。また、文字ごと、行ごとのディレイ時間が設定できる場合は文字ごとのディレイを0m秒、行ごとのディレイを30m秒程度に設定してください※2。
※1 送信時、改行はCR・LFを送る、受信時、CRとLFは個別に処理する、ということを想定してプログラムを作っています。送信時CRまたはLFしか送らない、受信時CRまたはLFをCR・LFに勝手に展開するような設定だと正しく動きません。
※2 手入力のみで使用する場合ディレイの設定は必要ないのですが、コピー&ペーストなどで連続入力すると、ディレイを設定しないと文字を取りこぼすことがあります。
これでSH7050を搭載したハードウエアの電源を入れると、シリアルターミナルまたはパソコンの画面にはBASICインタプリタの起動メッセージが表示されるはずです。あとはBASICのコマンドやプログラムを打ち込んで使ってください。BASICの文法に付いては syntax.html を参照してください。
起動メッセージが表示されない場合は以下の点を調べて見てください。
BASICインタプリタをROMに書きこむ際、BASICプログラムのテキストを一緒に書きこんでおくと、SH7050CPUをリセットしたあとそのBASICプログラムが実行されるようになります。これをスタートアップスクリプトといいます。
この方法で使用する場合、実行時にシリアルターミナルやパソコンは必要ありません。ユーザーにBASICインタプリタの存在を感じさせないハードウエアを作ることも可能です。
ただし、日立が保証しているSH7050CPUの内蔵ROMの書きこみ回数は100回程度なので、あまり何度もROMに書きこむのは好ましくありません。BASICプログラムのデバッグはシリアルターミナル等を接続した状態で行い、最後に完成したBASICプログラムのテキストをROMに書きこむ、というやりかたをお奨めします。 |
などと入力します。
そして名前を変えてコピーしたファイル(temp.s)をテキストエディターソフトで開き、一番最後の方を見てください。次のようになっているはずです。
(中略) S31C00003A46000000000000000000000000000000000000000000000063 S31C00003A5D00000000000000000000000000000000000000000000004C S30900003A740000000048 S70500000000FA |
この一番最後の"S9030100FC"(青で着色)という行を削除してください。そしてその位置にBASICテキストから変換したSファイル(たとえば myprog.s)を読みこんでください。そしてこのファイル(temp.s)を保存してテキストエディターを終了してください。
このファイル(temp.s)をCPU内蔵ROM(ROMを外付けしている場合は外付けROM)に書きこむと、SH7050CPUをリセットするとBASICプログラムが動くようになります。
なお、そのBASICプログラムがEND文やエラー発生によって終了すると、シリアルポートからのコマンド待ちになります。シリアルポートからのコマンド待ちにしたくない場合(シリアルポートをつながずに使う場合)はBASICプログラムの方で無限ループするようにしてください。またじゅうぶんにデバッグしエラーが出ないようにしてください。さらに、シリアルポートからCTRL−C(文字コード $03)が送られてくるとBASICプログラムを中断してコマンド待ちになりますので気をつけてください。
HyperTerm の場合、最初に「接続」を作るところから始まります(一度作ったら以後この作業はする必要はありません)。ハイパーターミナルのアイコンをダブルクリックすると「接続の設定」というウインドウが出ますので、適当な名前("COM1-Direct"とか)を付けて、適当なアイコンを選んでOKボタンを押します。
次に「接続の設定」というウインドウが出ます。ここで、「国番号」、「市外局番」、「電話番号」などは入力せず、「接続の方法」のみを設定します。「接続の方法」の項目にはモデムや「Com1へダイレクト」「Com2へダイレクト」などが選べるようになっているはずですが、自分が使いたいシリアルポートに対応する「Com×へのダイレクト」を選んでOKボタンを押してください。
次に「COM×のプロパティ」というウインドウが出て、その中には「ポートの設定」と書いてあるはずです。ここで「ビット/秒」は9600、「データビット」は8、「パリティ」はなし、「ストップビット」は1、「フロー制御」はなしに設定しOKボタンを押します。「詳細設定」はとくに行う必要はありません。
これで一応通信できるようになります。が、一旦メニューの「通信」から「切断」を選んでください。そして、メニューの「ファイル」から「プロパティ」を選んでください。「(あなたが付けた名前)のプロパティ」というウインドウが出て、「接続の設定」と「設定」という2つのページがあるはずです。そこで「設定」の方を選んでください。その中に「ASCII設定」というボタンがあるはずなので、それを押してください。
今度は「ASCII設定」というウインドウが出ます。その中に「ディレイ(行)」、「ディレイ(文字)」という項目があるはずです。「ディレイ(行)」には50、「ディレイ(文字)」には0という数値を入れてOKボタンを押してください。そして「(あなたが付けた名前)のプロパティ」のOKボタンも押してください。
ここまでやったら、その接続を保存します。メニューの「ファイル」から「ハイパーターミナルの終了」を選びます。「セッション(あなたが付けた名前)を終了しますか?」と聞いてくるので、「はい」を選びます。これでハイパーターミナルは一旦終了しますが、ハイパーターミナルのフォルダ内にはあなたのつけた名前のアイコンができているはずです。以後はそのアイコンをダブルクリックするだけですぐ通信できるようになります。
Tera Term PRO は、起動すると最初にTCP/IPか、シリアルポートかを選ぶウインドウが出ます。もちろんシリアルを選び、ポートは実際に使うポート(COM×)を選びます。
通信条件の設定はメニューの「Setup」から行います。まず「Setup」から「Serial Port」を選び、「Baud rate」には9600、「Data」には8bit、「Parity」はnone、「Stop」は1bit、「Flow control」にはnone、「Transmit delay」の「msec/char」には0、「msec/line」には50と設定しOKボタンを押します。
次に「Setup」から「Terminal」を選び、「Newline」の「Recieve」、「Transmit」の両方ともCRにしてOKボタンを押します。
それから「Setup」から「Save setup」を選んでその設定を保存します。保存ウインドウのファイル名のところは"TERATERM"となっていますが、その名前は変えずに「保存」ボタンを押します。次に起動したときには今設定した条件で立ち上がります。