超ミニBASIC for SH7047 ver0.11

Copyright (C)2004 A.Hiramatsu (04/10/24)



● はじめに

 「超ミニBASIC for SH7047」(以下、本プログラム)は、私 A.Hiramatsu (平松 明夫)が作成した日立製CPU「SH7047」(クロック49.152MHz)上で動作するBASICインタプリタです。

● 特徴

 とくにメモリを外付けしなくても、CPU内蔵のROMとRAMだけで動作可能です。また、CPUの内蔵ROMに置いたBASICテキストをCPUリセット後に実行するようにすることも可能ですので、オールBASICで簡単にSH7047ワンチップで動くアプリケーションを作成できます。
 RAMを外付けした場合、その外付けRAM上にBASICテキストを置くことも可能です。

 内蔵I/Oのレジスタアドレスを定数としてもっており、さらにビット操作命令も持っているため、SH7047の内蔵I/Oを気軽にアクセスできます。SH7047の内蔵I/Oの学習用としても最適です。

 古いタイプのBASIC(N88-BASIC や MSX-BASIC など)と違い、構造化IF構文や WHILE〜WEND、REPEAT〜UNTILなどのループ構文を持っており、わかりやすいプログラムを書くことが可能です。

● 著作権について

 本プログラム(アーカイブファイル cmb7047.zip 内に含まれている実行可能なプログラム、ソースプログラム、文書)の著作権は、私 A.Hiramatsu (平松 明夫)が所持しています。本プログラムは無料ですが、著作権は放棄していません。配布の際には必ず配布条件を守ってください。

● 配布条件

1)超ミニBASIC for SH7047 のオリジナルアーカイブファイルの再配布

 本プログラムのオリジナルアーカイブファイル( cmb7047.zip )を再配布する場合、ファイル内容には一切変更を加えないでください。また、本プログラムは無料です。配布の際に代金を請求してはなりません。ブランクディスク代金、送料、通信回線使用料などの費用がかかった場合、その実費以上の金額を請求してはなりません。

2)超ミニBASIC for SH7047 上で動作するBASICプログラムの配布

 本プログラム上で動作するBASICプログラムを作成し、それをテキストファイルやMOTファイルなどで配布する場合は以下の点を必ず守ってください。

 そのBASICプログラムを有料にするか無料にするかはBASICプログラムの作者が自由に決めて構いません。

3)超ミニBASIC for SH7047 を改造したBASIC処理系の配布

 超ミニBASIC for SH7047を改造したBASIC処理系(インタプリタ、コンパイラ等)を配布する場合は、以下の点を必ず守ってください。

 改造後のBASIC処理系を有料にするか無料にするかは改造した人が自由に決めて構いません。

4)超ミニBASIC for SH7047 を組み込んだハードウエアの配布

 本プログラムを書き込んだCPU、またはROMを搭載したハードウエアを配布する場合、以下の2つのいずれかにより配布条件が異なります。

 4−a)、4−b)どちらの場合でもそのハードウエアを有料にするか無料にするかはハードウエアの作者が自由に決めて構いません。

● 免責

 私 A.Hiramatsu (平松 明夫)は、本プログラムを使用したことにより発生した、いかなる損害についても一切責任を負いません。本プログラムを使用する方は各自の責任において使用してください。

● 連絡先

 本プログラムについてのお問い合わせは電子メールにて

宛にお願いします。

 また、私のホームページ

に、他にもH8/SH関連の工作やプログラムなどを発表していますのでよろしかったら見にきてください。

● ファイル内容

 本プログラムのアーカイブファイル( cmb7047.zip )には以下のファイルが含まれています。

cmb7047.s

超ミニBASIC for SH7047 の実行ファイルです。ROMに書きこんで使ってください。

cmb7047.asm
sh7047.inc

超ミニBASIC for SH7047 のソースファイルです。

cmb2s.exe

BASICテキストをS形式に変換するツールです。使用するにはWindowsパソコンが必要です。

index.html

あなたがいま見ている、このファイルです。

history.html

超ミニBASIC for SH7047 の改版履歴です。H8版との違いも書いてあります。

syntax.html
left.html
right.html

超ミニBASIC for SH7047 のインタプリタの文法について説明したファイルです。

guide.html

超ミニBASIC for SH7047 を実際に使う際にヒントになると思われることを書いたファイルです。



● 改版履歴

 history.html を参照してください。

● 必要なもの

・SH7047CPU(クロック49.152MHz)が搭載されているハードウエア
・SH7047CPUの内蔵ROM、または外付けのROMにプログラムを書きこむことができる環境
・RS−232Cシリアルターミナル、またはRS−232Cポートを持ったパソコンとシリアルターミナルソフトウエア
・RS−232Cケーブル(SH7047を搭載したハードウエアとシリアルターミナルまたはパソコンを接続)
・Windowsパソコンおよび適当なテキストエディターソフト(BASICプログラムをROM化する際に必要)

その他、ソースプログラムをアセンブルするにはイエローソフト社製の統合開発環境「Yellow IDE」が必要です。
cmb7047.asm をアセンブルする方法については、私のホームページで別途紹介する予定です。

● 使い方

・シリアルターミナル等を接続して使用する場合

 本プログラムは、SH7047CPUに内蔵されているSCI_3を通じてシリアルターミナル、パソコン等と通信を行いますので、SH7047が搭載されているハードウエアはSCI_3からRS−232Cレベルのシリアル通信ができるような回路構成になっている必要があります。
 SH7047CPUを搭載したハードウエアの多くは、ブートモードROM書きこみのためにそのような回路構成になっていると思いますが、そのようになっていないハードウエアの場合はシリアルターミナル等を接続しての使用はできません。シリアルターミナル等を接続しての使用を諦めるか(BASICテキストをROM化しての使用は可能)、回路構成を変更してください。

 まず、BASICインタプリタの実行ファイル( cmb7047.s )をSH7047CPUの内蔵ROMに書きこみ、書きこみ後電源を切ってください。ブートモードで書きこんだ場合はブートモードを解除するのを忘れないでください。
 CPUモード0、1でROMを外付けしている場合は外付けのROMに cmb7047.s を書きこみ、ハードウエアの電源を切ってそのROMを実装してください。

 次にSH7047を搭載したハードウエアとシリアルターミナル、またはパソコンとRS−232Cケーブルでつなぎます(CPUの内蔵ROMにパソコンからブートモードで書きこんだ場合はそのままで結構です)。

 そして、シリアルターミナル、またはパソコンのシリアルターミナルソフトを起動して、シリアル通信条件を9600bps、パリティなし、ストップビット1、改行文字=CR・LF※1に設定してください。また、文字ごと、行ごとのディレイ時間が設定できる場合は文字ごとのディレイを0m秒、行ごとのディレイを30m秒程度に設定してください※2

※1 送信時、改行はCR・LFを送る、受信時、CRとLFは個別に処理する、ということを想定してプログラムを作っています。送信時CRまたはLFしか送らない、受信時CRまたはLFをCR・LFに勝手に展開するような設定だと正しく動きません。
※2 手入力のみで使用する場合ディレイの設定は必要ないのですが、コピー&ペーストなどで連続入力すると、ディレイを設定しないと文字を取りこぼすことがあります。

 これでSH7047を搭載したハードウエアの電源を入れると、シリアルターミナルまたはパソコンの画面にはBASICインタプリタの起動メッセージが表示されるはずです。あとはBASICのコマンドやプログラムを打ち込んで使ってください。BASICの文法に付いては syntax.html を参照してください。

 起動メッセージが表示されない場合は以下の点を調べて見てください。

・BASICテキストをROM化して使用する場合

 BASICインタプリタをROMに書きこむ際、BASICプログラムのテキストを一緒に書きこんでおくと、SH7047CPUをリセットしたあとそのBASICプログラムが実行されるようになります。これをスタートアップスクリプトといいます。
 この方法で使用する場合、実行時にシリアルターミナルやパソコンは必要ありません。ユーザーにBASICインタプリタの存在を感じさせないハードウエアを作ることも可能です。

 ただし、日立が保証しているSH7047CPUの内蔵ROMの書きこみ回数は100回程度なので、あまり何度もROMに書きこむのは好ましくありません。BASICプログラムのデバッグはシリアルターミナル等を接続した状態で行い、最後に完成したBASICプログラムのテキストをROMに書きこむ、というやりかたをお奨めします。



 まずはBASICのテキストをS形式のファイルに変換します。本プログラムのアーカイブ内に入っている cmb2s.exe をWindowsパソコンで実行してください。起動したら「Dest addr:」の値が $10000 であることを確認してください。
 起動したらopenボタンを押し、開いたダイアログから変換したいテキストのファイルを選びます。するとウインドウにはそのファイルの内容が表示されます。そこでconvertボタンを押すと変換され、選んだテキストファイルの拡張子を .s に変えたファイルが作成されます。たとえば選んだテキストファイルが myprog.cmb なら myprog.s というファイルができます。

 いま作った .s ファイルと、BASICインタプリタの .s ファイルを結合するのですが、オリジナルの cmb7047.s を壊さないよう適当な名前のファイルにコピーします。たとえば、DOSプロンプトで

などと入力します。

 そして名前を変えてコピーしたファイル(temp.s)をテキストエディターソフトで開き、一番最後の方を見てください。次のようになっているはずです。

(中略)
S31C00003CDA0000000000000000000000000000000000000000000000CD
S31C00003CF10000000000000000000000000000000000000000000000B6
S30900003D0800000000B1
S70500000000FA

 この一番最後の"S70500000000FA"(青で着色)という行を削除してください。そしてその位置にBASICテキストから変換したSファイル(たとえば myprog.s)を読みこんでください。そしてこのファイル(temp.s)を保存してテキストエディターを終了してください。
 このファイル(temp.s)をCPU内蔵ROM(ROMを外付けしている場合は外付けROM)に書きこむと、SH7047CPUをリセットするとBASICプログラムが動くようになります。

 なお、そのBASICプログラムがEND文やエラー発生によって終了すると、シリアルポートからのコマンド待ちになります。シリアルポートからのコマンド待ちにしたくない場合(シリアルポートをつながずに使う場合)はBASICプログラムの方で無限ループするようにしてください。またじゅうぶんにデバッグしエラーが出ないようにしてください。さらに、シリアルポートからCTRL−C(文字コード $03)が送られてくるとBASICプログラムを中断してコマンド待ちになりますので気をつけてください。

《付録》パソコンのシリアル通信ソフトの設定例

・HyperTerm(ハイパーターミナル)の例

 HyperTerm の場合、最初に「接続」を作るところから始まります(一度作ったら以後この作業はする必要はありません)。ハイパーターミナルのアイコンをダブルクリックすると「接続の設定」というウインドウが出ますので、適当な名前("COM1-Direct"とか)を付けて、適当なアイコンを選んでOKボタンを押します。

 次に「接続の設定」というウインドウが出ます。ここで、「国番号」、「市外局番」、「電話番号」などは入力せず、「接続の方法」のみを設定します。「接続の方法」の項目にはモデムや「Com1へダイレクト」「Com2へダイレクト」などが選べるようになっているはずですが、自分が使いたいシリアルポートに対応する「Com×へのダイレクト」を選んでOKボタンを押してください。

 次に「COM×のプロパティ」というウインドウが出て、その中には「ポートの設定」と書いてあるはずです。ここで「ビット/秒」は9600、「データビット」は8、「パリティ」はなし、「ストップビット」は1、「フロー制御」はなしに設定しOKボタンを押します。「詳細設定」はとくに行う必要はありません。

 これで一応通信できるようになります。が、一旦メニューの「通信」から「切断」を選んでください。そして、メニューの「ファイル」から「プロパティ」を選んでください。「(あなたが付けた名前)のプロパティ」というウインドウが出て、「接続の設定」と「設定」という2つのページがあるはずです。そこで「設定」の方を選んでください。その中に「ASCII設定」というボタンがあるはずなので、それを押してください。

 今度は「ASCII設定」というウインドウが出ます。その中に「ディレイ(行)」、「ディレイ(文字)」という項目があるはずです。「ディレイ(行)」には50、「ディレイ(文字)」には0という数値を入れてOKボタンを押してください。そして「(あなたが付けた名前)のプロパティ」のOKボタンも押してください。

 ここまでやったら、その接続を保存します。メニューの「ファイル」から「ハイパーターミナルの終了」を選びます。「セッション(あなたが付けた名前)を終了しますか?」と聞いてくるので、「はい」を選びます。これでハイパーターミナルは一旦終了しますが、ハイパーターミナルのフォルダ内にはあなたのつけた名前のアイコンができているはずです。以後はそのアイコンをダブルクリックするだけですぐ通信できるようになります。

・Tera Term PRO の例

 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"となっていますが、その名前は変えずに「保存」ボタンを押します。次に起動したときには今設定した条件で立ち上がります。