超ミニBASIC for H8/3048 ver1.03

Copyright (C)2004 A.Hiramatsu (04/08/28)



● はじめに

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

● 特徴

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

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

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

 また、キャラクタ液晶モジュールにも対応しています。秋葉原などで出まわっている多くの種類のキャラクタ液晶モジュールに、簡単に文字や数値を表示できます。

● 著作権について

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

● 配布条件

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

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

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

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

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

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

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

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

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

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

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

● 免責

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

● 連絡先

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

宛にお願いします。

 また、私のホームページ

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

● ファイル内容

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

cmb3048.mot

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

cmb3048.mar
h8_3048.inc

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

mk.bat

ソースファイルから実行ファイルを作るためのバッチファイルです。

cmb2mot.exe

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

index.html

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

history.html

超ミニBASIC for H8/3048 の改版履歴です。

syntax.html
left.html
right.html

超ミニBASIC for H8/3048 のインタプリタの中核部分の文法について説明したファイルです。

cmblcd.html
cmblcd_l.html
cmblcd_r.html

キャラクタ液晶モジュールサポートのために拡張された部分について説明したファイルです。

guide.html

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

led-mb.txt
led-usb.txt
lcd-mb.txt
lcd-usb.txt

サンプルのBASICプログラムです。led-mb.txt、lcd-mb.txt は秋月電子さんのAKI−H8マザーボード用、led-usb、lcd-usb.txt は同じくAKI−H8−USBボード用です。
led-*.txt は基板上のLEDを点滅させます。lcd-*.txt は液晶画面にメッセージを出します。

cmb3052.mot
cmb3052.mar
h8_3052.inc

おまけです。暫定版H8/3052(クロック25MHz)用BASICインタプリタです。3048用の、ボーレートジェネレータの設定とRAMの先頭番地だけ変えました。.mot は実行ファイル、.mar はアセンブラソースファイルです。


※ mk.batによるアセンブルについて
 アセンブルには秋月電子さんのAKI−H8開発キットに添付されているアセンブラ(a38h.exe)、リンカ(l38h.exe)、オブジェクトコンバータ(c38h.exe)とWindowsパソコンが必要です。
 また、このバッチファイルでアセンブルすると、できあがったMOTファイルにはRAM上のデータまで含まれてしまいます。そのままでは秋月電子さんのAKI−H8開発キットに添付されている書きこみソフト(flash.exe)では書きこめませんので、MOTファイルを適当なテキストエディタで開いて、終わりのほうにある"S2"で始まる行をすべて削除して保存してください(最後の"S9"で始まる行を消さないように注意すること)。

● 改版履歴

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

● 必要なもの

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

● 使い方

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

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

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

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

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

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

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

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

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

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

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



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

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

などと入力します。

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

(中略)
S1133E084F45520000003E0000FFFF914F43520010
S1133E180000000000FFFFEF4345520000003E187A
S10B3E2800FFFFEE435200000E
S9030100FC

 この一番最後の"S9030100FC"(青で着色)という行を削除してください。そしてその位置にBASICテキストから変換したMOTファイル(たとえば myprog.mot)を読みこんでください。そしてこのファイル(temp.mot)を保存してテキストエディターを終了してください。
 このファイル(temp.mot)をCPU内蔵ROM(ROMを外付けしている場合は外付けROM)に書きこむと、H8/3048CPUをリセットすると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"となっていますが、その名前は変えずに「保存」ボタンを押します。次に起動したときには今設定した条件で立ち上がります。