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

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



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

初期化動作

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

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

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

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

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

I/O初期化について

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

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



 I/OポートはポートGのビット6、5、3、2だけをそれぞれRXD1、TXD1、RXD0、TXD0となるように設定し、他のポートはリセット直後の状態のまま手をふれていません。これは、超ミニBASIC for SH7050が実際にどのようなハードウエアに載せられるかわからないので、うかつにI/Oポートを出力に設定してしまうとハードウエアによっては出力どうしがぶつかってしまう危険があるからです。

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

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

・初期化の例

ビーリバーエレクトロニクス社製YS7050−3ボードで、ボード上の外付けRAMを使用し、他のポートには全く何もつながっていない場合の初期化例
100 POKE &BCR1,%$000D  ' CS1 SPACE 8BIT
110 POKE &BCR2,%$F3DD  ' CS1 SPACE NO IDLE CYCLE,NO CS ASSERT EXP.
120 POKE &PACR,%$FFFF  ' PORTA ALL ADDRESS BUS(A15..A0)
130 POKE &WCR1,%$FF0F  ' CS1 SPACE NO WAIT
140 POKE &PBCR,%$BFC0  ' PORTB USE ADDRESS BUS(A12..A16)
150 POKE &PBIOR,%$FFFF ' PORTB OTHER PIN OUTPUT
160 POKE &PCCR1,%$C000 ' PORTC UPPER GENERAL I/O
170 POKE &PCCR2,%$0FFF ' PORTC LOWER USE CS1,RD,WAIT,WRL,WRH
180 POKE &PCIOR,%$FFFF ' PORTC OTHER PIN OUTPUT
190 POKE &PDCR,%$FFFF  ' PORTD ALL DATA BUS
200 POKE &PECR,%$8000  ' PORTE GENERAL I/O
210 POKE &PEIOR,%$FFFF ' PORTE OUT
220 POKE &PFCR1,%$FF00 ' PORTF UPPER GENERAL I/O
230 POKE &PFCR2,%$00AA ' PORTF LOWER GENERAL I/O
240 POKE &PFIOR,%$FFFF ' PORTF OUT
250 POKE &PGIOR,%$FFFF ' PORTG OUT (WITHOUT RXD1,TXD1,RXD0,TXD0)
260 NEW $400000,131072

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

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

割り込みについて

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

メモリマップ

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

$FFFFE800〜FRE(1)-1

BASICテキスト

FRE(1)〜FRE(2)-1

フリーエリア

FRE(2)〜$FFFFFD00

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