超ミニBASIC for H8/3664 ユーザーズガイド
Copyright (C) 2003 A.Hiramatsu (03/09/14)
この文章は、ユーザーが実際に超ミニBASIC for H8/3664 を使う際にヒントになると思われることを書いたものです。
初期化動作
CPUがリセットされるとBASICインタプリタはH8/3664CPUの内蔵I/OをBASICを使うのに必要最小限なだけ初期化します。詳しくは
I/O初期化についての項を見てください。
次にワークエリアを初期化します。
そして、$4000番地にBASICテキストがあるかどうか調べ、BASICテキストがあると思われればそれを実行します。この、最初に実行されるBASICテキストをスタートアップスクリプトといいます。$4000番地は内蔵ROMですから、BASICインタプリタをROMに書き込む際にいっしょに$4000番地にBASICテキストも書き込んで置けば、リセット後シリアルターミナルからのコマンド受け付け状態になる前にBASICプログラムを走らせることができます。
また、スタートアップスクリプトにメインの処理を全て書いて、スタートアップスクリプトの中でループしてしまえば、シリアルターミナル無しでも動くワンチップアプリケーションにすることができます。
スタートアップスクリプトはテキストエディターで書いたものを cmb2mot.exe で変換してください。CPU type を H8/3664 にするのと、Dest. addr が $4000 になっていることを確認するのを忘れないようにしましょう。
スタートアップスクリプトが存在しないか、またはスタートアップスクリプトの実行が終了するとシリアルターミナルからのコマンド受けつけ状態になります。
超ミニBASIC for H8/3664は、リセット後本当に最小限の初期化しかしません。具体的にはシリアルコミュニケーションインターフェースを9600ボー、8ビット、ストップビット1に設定するだけです。
I/Oポートについては一切初期化を行っていません
(ポート2のビット1〜2のみ、SCIとして初期化されます)。リセット直後の「入力」のままになっています。これは、超ミニBASIC for H8/3664が実際にどのようなハードウエアに載せられるかわからないので、うかつにI/Oポートを出力に設定してしまうとハードウエアによっては出力どうしがぶつかってしまう危険があるからです。
INITLCD文を実行すると、キャラクタ液晶モジュールを接続しているポートについては初期化されます。
|
そこで、I/Oポートはユーザー側で、それぞれのハードウエアに合わせて初期化していただくことになります。初期化プログラムはスタートアップスクリプトに書いておくとよいでしょう。
何もつながっていない
(プルアップ/プルダウンすらされていない)ポートを入力のまま放っておくと静電気等の悪影響を受ける可能性がありますので、出力に設定するか、内蔵プルアップMOSを持っているポートならプルアップをONにするなど適宜設定してください。
・初期化の例
10 POKE &PUCR1,$FF ' PULL UP ON
20 POKE &PCR2,$FF ' BIT 1 OUTPUT
30 POKE &PUCR5,$3F ' PULL UP ON
40 POKE &PCR5,$C0 ' BIT 7,6 OUTPUT
50 POKE &PCR7,$FF ' OUTPUT
60 POKE &PCR8,$FF ' OUTPUT
70 END
|
※ポートBについては、プログラムではどうしようもないので何もつながっていない場合プルアップ/プルダウン抵抗をつけるなどして対処してください。
割り込みについて
超ミニBASIC for H8/3664は、割り込みを一切使用していません。リセット後割り込み禁止のまま立ち上がり、その後CCRのIビット、UIビットには全く手をふれません。
ユーザーがマシン語で割り込みルーチンを自作し、それを使用したい場合は割り込みジャンプテーブルを設定した上でCCRのIビット、UIビットを0にします。
・割り込みジャンプテーブル
ふつう、0〜$3F番地の割り込みベクタ領域はROMになっており、プログラム実行中には書き換えられないのですが、超ミニBASIC for H8/3664 は、ユーザーが割り込みを使うことができるよう、割り込みジャンプテーブルというものを用意しています。
割り込みジャンプテーブルは、$FF02〜$FF3F番地にあり、1エントリ2バイトで計31エントリあります。これは、$02〜$3F番地の割り込みベクタエントリと一対一対応しています。
ユーザーが割り込みルーチンをつくった場合、この割り込みジャンプテーブルの該当エントリに割り込みルーチンの番地を書いておけば割り込み発生時ユーザーの割り込みルーチンを起動することができます。
H8/3048版では、割り込みジャンプテーブルのエントリには4バイトのジャンプ命令を書き込む仕様になっていたのですが、1エントリ4バイトも使うのはもったいないので、H8/3664版は番地のみ2バイトを書く仕様にしました。
なお、RTE命令はBASICインタプリタ内部で実行しますので、ユーザーの割り込みルーチンはRTS命令で終わるようにしてください。また、余計なおせっかいかもしれませんが、CPUレジスタER0〜ER6の退避/復帰もBASICインタプリタが行っていますのでユーザールーチンの方で行う必要はありません。
割り込み要因フラグのクリヤはユーザールーチンの方で行ってください。
メモリマップ
超ミニBASIC for H8/3664 が使用するCPU内蔵のRAMの内訳は以下のようになっています。
$F780〜FRE(1)-1
|
BASICテキスト
|
FRE(1)〜FRE(2)-1
|
フリーエリア
|
FRE(2)〜$FEFF
|
BASICインタプリタのワークエリア
|
$FF00〜$FF3F
|
割り込みジャンプテーブル
|
$FF40〜$FF7F
|
BASICインタプリタのワークエリア
|