超ミニBASIC for SH7047 ユーザーズガイド

Copyright (C) 2003 A.Hiramatsu (03/10/14)



 この文章は、ユーザーが実際に超ミニBASIC for SH7047 を使う際にヒントになると思われることを書いたものです。

初期化動作

 CPUがリセットされるとBASICインタプリタはSH7047CPUの内蔵I/OをBASICを使うのに必要最小限なだけ初期化します。詳しくはI/O初期化についての項を見てください。

 次にワークエリアを初期化します。

 そして、$10000番地にBASICテキストがあるかどうか調べ、BASICテキストがあると思われればそれを実行します。この、最初に実行されるBASICテキストをスタートアップスクリプトといいます。ふつう、$10000番地は内蔵ROMですから、BASICインタプリタをROMに書き込む際にいっしょに$10000番地にBASICテキストも書き込んで置けば、リセット後シリアルターミナルからのコマンド受け付け状態になる前にBASICプログラムを走らせることができます。
 また、スタートアップスクリプトにメインの処理を全て書いて、スタートアップスクリプトの中でループしてしまえば、シリアルターミナル無しでも動くワンチップアプリケーションにすることができます。

 スタートアップスクリプトはテキストエディターで書いたものを cmb2s.exe で変換してください。

 スタートアップスクリプトが存在しないか、またはスタートアップスクリプトの実行が終了するとシリアルターミナルからのコマンド受けつけ状態になります。

I/O初期化について

 超ミニBASIC for SH7047は、リセット後本当に最小限の初期化しかしません。具体的にはシリアルコミュニケーションインターフェースのチャネル2、3を9600ボー、8ビット、ストップビット1に設定するだけです。

 インタプリタはSCIチャネル2は使わないので、初期化しなくてもいいのですが、ビーリバーエレクトロニクス社のSH7047ボードなどはチャネル2にもすでにRS−232Cコンバータがつながっており、これを普通のI/Oポートとして使うことは考えにくいのでシリアルポートとして使うよう設定しています。



 I/OポートはポートAのビット9、8、7、6だけをそれぞれTXD3、RXD3、TXD2、RXD2となるように設定し、他のポートはリセット直後と同じ状態のままにしています。これは、超ミニBASIC for SH7047が実際にどのようなハードウエアに載せられるかわからないので、うかつにI/Oポートを出力に設定してしまうとハードウエアによっては出力どうしがぶつかってしまう危険があるからです。

 そこで、I/Oポートはユーザー側で、それぞれのハードウエアに合わせて初期化していただくことになります。初期化プログラムはスタートアップスクリプトに書いておくとよいでしょう。

 何もつながっていない(プルアップ/プルダウンすらされていない)ポートを入力のまま放っておくと静電気等の悪影響を受ける可能性がありますので、出力に設定するなどして適宜対処してください。

・初期化の例

ビーリバーエレクトロニクス社製YS7047−1ボードで、ボード上の外付けRAMを使用し、他のポートには全く何もつながっていない場合の初期化例
100 POKE &BCR1  ,%$600E ' CS0 SPACE 8BIT
110 POKE &BCR2  ,%$FDEE ' 1 WAIT READ AFTER WRITE
120 POKE &WCR1  ,%$FFF3 ' 3 WAIT
130 POKE &PACRL3,%$03FF ' PORT A:USE SCI2,SCI3,A5..A0
140 POKE &PACRL1,%$1115 '       PA14,12,10=RD,WRL,CS
150 POKE &PACRL2,%$5000
160 POKE &PBCR1 ,%$0000 ' PORT B:USE A17,A16
170 POKE &PBCR2 ,%$0005
180 POKE &PDCRL2,%$0000 ' PORT D:USE D7..D0
190 POKE &PDCRL1,%$00FF
200 POKE &PECRH ,%$0FFF ' PORT E:USE A15..A6
210 POKE &PECRL1,%$0000
220 POKE &PECRL2,%$FF00
230 NEW $200000,131072

※ポートFについては、プログラムではどうしようもないので何もつながっていない場合プルアップ/プルダウン抵抗をつけるなどして対処してください。

 100〜120番はバスステートコントローラを設定しています。130番から220番でピンファンクションコントローラを設定しています。
 230番は、外付けRAMをBASICのテキスト領域とするためのものです。単にRAMをイネーブルしたいだけなら不要です。

割り込みについて

 超ミニBASIC for SH7047は、割り込みを一切使用していません。リセット後割り込み禁止のまま立ち上がります。
 割り込みを使いたい場合はユーザーが適当なメモリ上に割り込みベクタテーブルを置いた上でCPUのベクタベースレジスタVBRにそのベクタテーブルを設定します。BASICインタプリタにはVBRを直接操作する命令は無いので、ユーザーがVBRを設定するマシン語ルーチンを作り、USR関数で呼び出す必要があります。

メモリマップ

  超ミニBASIC for SH7047は、デフォルトのままではCPU内蔵のRAMしか使いません。その内訳は以下のようになっています。

$FFFFD000〜FRE(1)-1

BASICテキスト

FRE(1)〜FRE(2)-1

フリーエリア

FRE(2)〜$FFFFFFFF

BASICインタプリタのワークエリア