超ミニBASIC for H8/3664 ver1.03

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



● はじめに

 「超ミニBASIC for H8/3664」(以下、本プログラム)は、私 A.Hiramatsu (平松 明夫)が作成した日立製CPU「H8/3664 フラッシュROM版」(クロック16MHz)上で動作するBASICインタプリタです。
※H8/3664 マスクROM版は内蔵RAMが1Kバイトしかないため、マスクROM版では動作しません。

● 特徴

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

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

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

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

● 著作権について

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

● 配布条件

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

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

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

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

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

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

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

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

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

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

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

● 免責

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

● 連絡先

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

宛にお願いします。

 また、私のホームページ

に、他にもH8関連の工作やプログラムなどを発表していますのでよろしかったら見にきてください。
(H8/3048版のBASICインタプリタもあります)

● ファイル内容

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

cmb3664.mot
cmb3664.abs

超ミニBASIC for H8/3664 の実行ファイルです。ROMに書きこんで使ってください。
※注意 cmb3664.abs にはスタートアップスクリプトを組み込むことはできません。スタートアップスクリプトが必要な場合は cmb3664.mot の方を使用してください。

cmb3664.mar
h8_3664.inc

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

mka.bat
mkb.bat

ソースファイルから実行ファイルを作るためのバッチファイルです。
mka.bat は秋月の「H8/3048開発キット」に添付のツールを使ってアセンブルする場合に使用します。
mkb.bat は秋月の「H8/3664開発キット」に添付のツールを使ってアセンブルする場合に使用します。

cmb2mot.exe

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

index.html

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

history.html

超ミニBASIC for H8/3664 の改版履歴と、H8/3048版との相違点を書いたファイルです。

syntax.html
left.html
right.html

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

cmblcd.html
cmblcd_l.html
cmblcd_r.html

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

guide.html

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


※ mka.batによるアセンブルについて
 アセンブルには秋月電子さんのAKI−H8/3048開発キット(3664開発キットではありません)に添付されているアセンブラ(a38h.exe)、リンカ(l38h.exe)、オブジェクトコンバータ(c38h.exe)とWindowsパソコンが必要です。
 また、このバッチファイルでアセンブルすると、できあがったMOTファイルにはRAM上のデータまで含まれてしまいます。そのままではスタートアップスクリプトを組みこむとき困ったことになるので、MOTファイルを適当なテキストエディタで開いて、終わりのほうを見てください。以下のようになっているはずです。以下の青で着色した行を削除して保存してください。
(中略)
S11334F2534352000000FFAB445200000000FFA6FA
S11335024D41000034FEFF804D5257003506FFC285
S10735124D574400CA
S104FD8C0073
S113FE9C0000000000000000000000000000000053
S113FEAC0000000000000000000000000000000043
S113FEBC0000000000000000000000000000000033
S113FECC0000000000000000000000000000000023
S113FEDC0000000000000000000000000000000013
S113FEEC0000000000000000000000000000000003
S113FF4000000000000000000000000000000000AE
S10EFF500000000000000000000000A3
S9030100FC

※ mkb.batによるアセンブルについて
 アセンブルには秋月電子さんのAKI−H8/3664開発キットに添付されているアセンブラ(asm38.exe)、リンカ(lnk.exe)とWindowsパソコンが必要です。
 このバッチファイルで作成した cmb3664.abs ファイルにはスタートアップスクリプトを組み込むことはできません。シリアル端末からの操作のみとなります。

● 改版履歴と、H8/3048版との相違点

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

● 必要なもの

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

● 使い方

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

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

 まず、BASICインタプリタの実行ファイル( cmb3664.mot または cmb364.abs )をH8/3664CPUの内蔵ROMに書きこみ、書きこみ後電源を切ってください。ブートモードで書きこんだ場合はブートモードを解除するのを忘れないでください。

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

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

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

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

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

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

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

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



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

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

などと入力します。

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

(中略)
S11334F2534352000000FFAB445200000000FFA6FA
S11335024D41000034FEFF804D5257003506FFC285
S10735124D574400CA
S9030100FC

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