ブートローダのコマンド

マニュアルの目次に戻る




ブートローダの概略

 ブートローダは、H8の内蔵EEPROMに焼かれています。(H8CPUの新品時から焼かれているわけではありません。MSX−H8カートリッジに載せる前にあらかじめ秋月H8マザーボードで焼く必要があります。)

 MSX−H8カートリッジがリセットされた直後、最初にMSX側のプログラムと対話するのはこのブートローダです。カートリッジの存在確認もブートローダが正しい応答を返すかどうかによって行います。

 その後、ブートローダは、MSXからのコマンドを受け取り解釈し、MSXからH8へのデータやプログラムの転送、H8上でのプログラムの実行などを行います。

 また、ブートローダは以下のような極めて簡素ながら一応のデバッグ機能ももっています。


ユーザープログラム中断機能

・リセット

・NMI

・トラップ


ブートローダコマンドの送りかた

 ブートローダのコマンドは8255のポートAからコマンドをバイトデータ列として送ることによって行います。コマンドによってはH8から戻り値を返してくることもあります。言うまでもないことですが、それら1バイト1バイトのやり取りは8255モード2のハンドシェーク手順にしたがって行います。

 コマンドをやり取りする際、パラメータや戻り値として2バイト〜4バイト数値を扱うこともありますが、そのバイト並びの順は「モトローラ方式」、すなわち高位バイトから先に送ります。

 好ましいことではないのですが、コマンドのデータ列やH8から戻ってくる戻り値をやり取りしている最中に、エラーなどによってどうしても中断せざるを得ないときがあります。中断した後、次のコマンドを送ろうとしてもブートローダ側はコマンド受け付け状態になっていません。そのような場合はNMIをかければコマンド受け付け状態にすることができます。

 ここで言うエラーとはMSX側の問題です。たとえばH8側のメモリ内容を大量にダンプしてディスクに書き出す等の処理を行っている最中にディスクがいっぱいになってしまった、といったケースなどです。
 基本的にMSXとH8の間のデータ化け等のエラーは無いものとしています。MSX本体に供給されているAC100Vの瞬間的な停電、電子ライターの着火時の火花、違法無線局等の強烈な電波、あるいは宇宙のかなたからやってくる宇宙線などにより、データ化けが起こる可能性は皆無とは言い切れませんが、対処のしようがありません。



ブートローダコマンドリファレンス

HELOコマンド

コマンド: 080H
戻り値 : 0F0H (GOOD) または 0F1H (BAD)


VERコマンド

コマンド: 081H
戻り値 : 'H' '8' VERh VERl
	048H 038H 000H 001H


LOADコマンド

コマンド: 096H  ADRh ADRm ADRL  LENh LENm LENl  {データ列}
戻り値 : なし


DUMPコマンド

コマンド: 097H  ADRh ADRm ADRL  LENh LENm LENl
戻り値 : {データ列}


POKE/POKW/POKLコマンド

コマンド(POKE): 090H  ADRh ADRm ADRl  DATA
    (POKW): 092H  ADRh ADRm ADRl  DATAh DATAl
    (POKL): 094H  ADRh ADRm ADRl  DATAhh DATAhl DATAlh DATAll
戻り値    : なし


PEEK/PEKW/PEKLコマンド

コマンド(PEEK): 091H  ADRh ADRm ADRl
    (PEKW): 093H  ADRh ADRm ADRl
    (PEKL): 095H  ADRh ADRm ADRl

戻り値(PEEK) : DATA
   (PEKW) : DATAh DATAl
   (PEKL) : DATAhh DATAhl DATAlh DATAll


LDCMコマンド

コマンド: 098H  ADRh ADRm ADRL  LENh LENm LENl  {データ列}
戻り値 : なし


RELCコマンド

コマンド: 09AH  PADRh PADRm PADRl  TADRh TADRm TADRL  RADRh RADRm RADRL
戻り値 : なし


MOVEコマンド

コマンド: 099H SRCh SRCm SRCl LENh LENm LENl DSTh DSTm DSTl
戻り値 : なし


CALLコマンド

コマンド: 09FH  ADRh ADRm ADRl
戻り値 : 0F2H(正常終了)または 0F3H(TRAPA #3 による中断)


※注意 タイムアウトチェックについて


「MSXからのアクセス」には、ブートローダコマンドのタイムアウトチェックはせいぜい数ミリ秒で良い、と
書きましたが、MOVEコマンド、RELCコマンドは処理すべきデータ量によっては、次のコマンドを受け付けるまでに秒近い時間がかかることがありますので気を付けてください。