MSX Datapack wiki化計画

Appendix A.1 BIOS 一覧

※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※

 ここではユーザーが利用可能なBIOSエントリを紹介します。
 BIOSにはMAIN ROMとSUB ROM内のルーチンの2種類があり、コールの手順はそれぞれ異なります。ここでエントリは次のように表記します。

 記号は次のような意味を持ちます。

記号意味
MSXMSX1からサポートされているルーチン
MSX2MSX2用に追加または機能拡張されたルーチン。
MSX2+MSX2+用に追加または機能拡張されたルーチン。

 [A]、[HL]などレジスタ名を[]で囲んだものは、そのレジスタの内容を示します。例えば、HLレジスタの内容が8000Hであった場合に、[HL]とは8000Hを示していることになります。
 【】で囲んだものは、ワークエリア中の名前と番地です。例えば、【PRTFLG(F416H)】とあれば、ワークエリアのF416H番地にあるPRTFLGという名前の場所を示します。「A.2 ワークエリア」をご参照ください。

A.1.1 MAIN ROM

 MAIN ROM内のルーチンを呼び出す場合は、通常のサブルーチンコールとしてCALL命令または、RST命令で行います。

RST関係
 以下のRSTのうち、RST 00H〜RST 28HはBASICインタプリタが使います。RST 30Hはインタースロットコールに、RST 38Hはハードウェア割り込みに使います。

CHKRAM (0000H/MAIN)
  機 能  
RAMをチェックし、システム用のRAMに使うスロットを選択します。このルーチンの実行後は、さらに初期化のルーチンへ分岐します。
 コール手順 
なし
  戻り値  
なし
変更レジスタ
すべて
SYNCHR (0008H/MAIN)
  機 能  
HLレジスタが指す文字が指定した文字かどうかを調べます。違っていたら「Syntax error」を発生し、同じであればCHRGTR (0010/MAIN)へジャンプします。
 コール手順 
HLチェックする文字。このルーチンを呼び出すRST命令の後に比較する文字を入れる(インラインパラメータ)。
  例  
         ld     hl, moji
         rst    08h
         db     'A'
               ・
               ・
               ・
moji:    db     'B'
  戻り値  
HL +1される
A 1つ選んだHLの指す文字
CYフラグ チェックした文字が数字であればセット
Zフラグ ステートメントの終わり(00Hまたは3AH)ならばセット
変更レジスタ
AF、HL
RDSLT (000CH/MAIN)
  機 能  
Aレジスタの値に対応するスロットを選択し、そのスロットのメモリを1バイト読み出します。このルーチンを呼ぶと、割り込みを禁止し、実行後も割り込みは解除されません。
 コール手順 
Aスロット操作


HL 読み込むメモリの番地
  戻り値  
A読み込んだメモリの値
変更レジスタ
AF、BC、DE
CHRGTR (0010H/MAIN)
  機 能  
BASICテキストから文字(またはトークン)を取り出します。
 コール手順 
HL 読み込む文字が入っているメモリの番地
  戻り値  
HL +1される
A 1つ選んだHLの指す文字
CYフラグ チェックした文字が数字であればセット
Zフラグ ステートメントの終わり(00Hまたは3AH)ならばセット
変更レジスタ
AF、HL
WRSLT (0014H/MAIN)
  機 能  
Aレジスタの値に対応するスロットを選択し、そのスロットのメモリに値を書き込みます。このルーチンを呼ぶと、割り込みを禁止し、実行後も割り込みは解除されません。
 コール手順 
A スロット操作(形式はRDSLTと同じ)
HL 書き込むメモリの番地
  戻り値  
なし
変更レジスタ
AF、BC、D
OUTDO (0018H/MAIN)
  機 能  
現在使っているデバイスに値を出力します。
 コール手順 
A出力する値
【PRTFLG(F416H)】0以外であれば、プリンタに出力
【PTRFIL(F864H)】0以外であれば、PTRFILで示されるファイルへ出力
  戻り値  
なし
変更レジスタ
なし
CALSLT (001CH/MAIN)
  機 能  
他のスロットのルーチンを呼び出します(インタースロットコール)。
 コール手順 
IX 上位8ビットにスロット番号(形式はRDSLTと同じ)
IY コールする番地
  戻り値  
呼び出すルーチンによる
変更レジスタ
呼び出すルーチンによる
DCOMPR (0020H/MAIN)
  機 能  
HLレジスタとDEレジスタの内容を比較します。
 コール手順 
HL 比較する値1
DE 比較する値2
  戻り値  
ZフラグHL=DEならばセット
CYフラグHL<DEならばセット
変更レジスタ
AF
ENASLT (0024H/MAIN)
  機 能  
Aレジスタの値に対応するスロットを選択し、以降そのスロットを使用可能にします。このルーチンを呼ぶと、割り込みを禁止し、実行後も割り込みは解除されません。
 コール手順 
A スロット操作(形式はRDSLTと同じ)
HL 呼び出すアドレス
  戻り値  
なし
変更レジスタ
すべて
GETYPR (0028H/MAIN)
  機 能  
DAC(デシマルアキュムレータ)の型を調べます。
 コール手順 
なし(【VALTYP(F663H)】にはDACの型が入っている)
  戻り値  
DACの型によって、S、Z、P/V、CYフラグが以下のように変化する
整数型単精度実数型文字型倍精度実数型
C=1 C=1 C=1 C=0*
S=1*S=0 S=0 S=0
Z=0 Z=0 Z=1*Z=0
P/V=1 P/V=0*P/V=1 P/V=1
各型は、*のついたフラグを調べればチェックできる
変更レジスタ
AF
CALLF (0030H/MAIN)
  機 能  
別のスロットにあるルーチンを呼び出します。
 コール手順 
rst	30h
db		n		; n はスロット番号(形式はRDSLTと同じ)
dw		nn		; nnは呼び出すスロットアドレス
  戻り値  
呼び出すルーチンによる
変更レジスタ
AF、その他は呼び出すルーチンによる
KEYINT (0038H/MAIN)
  機 能  
タイマ割り込みの処理ルーチンを実行します。
 コール手順 
なし
  戻り値  
なし
変更レジスタ
なし
INITIO (003BH/MAIN)
  機 能  
デバイスを初期化します。
 コール手順 
なし
  戻り値  
なし
変更レジスタ
すべて
INIFNK (003EH/MAIN)
  機 能  
ファンクションキーの内容を初期化します。このルーチンを実行後、画面をクリアするとファンクションキーの表示も変わります。
 コール手順 
なし
  戻り値
なし
変更レジスタ
すべて
DISSCR (0041H/MAIN)
  機 能  
画面表示を禁止します。
 コール手順 
なし
  戻り値  
なし
変更レジスタ
AF、BC
ENASCR (0044H/MAIN)
  機 能  
画面を表示します。
 コール手順 
なし
  戻り値 
なし
変更レジスタ
AF、BC
WRTVDP (0047H/MAIN)
  機 能  
VDPのレジスタに値を書き込みます。
 コール手順 
CVDPのレジスタ番号(レジスタ番号は0〜23、32〜46)
B書き込む値
  戻り値  
なし
変更レジスタ
AF、BC
RDVRM (004AH/MAIN)
  機 能  
VRAMの指定したアドレスの内容を読み出します。ただし、このルーチンはTMS9918(MSX1のVDP)に対するもので、VRAMのアドレスは下位14ビットのみが有効です。全ビットを使うときは、NRDVRM(0174H/MAIN)を使います。
 コール手順 
HLVRAMのアドレス
  戻り値  
A読み出した値
変更レジスタ
AF
WRTVRM (004DH/MAIN)
  機 能  
VRAMにデータを書き込みます。ただし、このルーチンはTMS9918に対するもので、VRAMのアドレスは下位14ビットのみが有効です。全ビットを使うときは、NVRVRM(0177H/MAIN)を使います。
 コール手順 
HLVRAMのアドレス
A 書き込む値
  戻り値  
なし
変更レジスタ
AF
SETRD (0050H/MAIN)
  機 能  
VDPにVRAMアドレスをセットして、読み出せる状態にします。このルーチンはVDPのアドレスオートインクリメントの機能を使って、連続したVRAM領域からデータを読み出すときに使います。このルーチンの実行後はポートから直接VRAMから読み出します。したがって、RDVRMをループ中で使うより高速な読み出しができます。ただし、このルーチンはTMS9918に対するもので、VRAMのアドレスは下位14ビットのみが有効です。全ビットを使うときは、NSETRD(016EH/MAIN)を使います。
 コール手順 
HLVRAMアドレス
  戻り値  
なし
変更レジスタ
AF
SETWRT (0053H/MAIN)
  機 能  
VDPにVRAMアドレスをセットして、書き込める状態にします。使用目的はSETRDと同じです。ただし、このルーチンはTMS9918に対するもので、VRAMのアドレスは下位14ビットのみが有効です。全ビットを使うときは、NSTWRT(0171H/MAIN)を使います。
 コール手順 
HLVRAMアドレス
  戻り値  
なし
変更レジスタ
AF
FILVRM (0056H/MAIN)
  機 能  
VRAMの指定領域を同一のデータで埋めます。ただし、このルーチンはTMS9918に対するもので、VRAMのアドレスは下位14ビットのみが有効です。全ビットを使うときは、BIGFIL(016BH/MAIN)を使います。
 コール手順 
HL書き込みを開始するVRAMアドレス
BC書き込む領域の長さ(バイト数)
A 書き込む値
  戻り値  
なし
変更レジスタ
AF、BC
LDIRMV (0059H/MAIN)
  機 能  
VRAMからメモリへデータをブロック転送します。
 コール手順 
HL転送元のVRAMアドレス(指定するVRAMアドレスは全ビットが有効)
DE転送先のRAMアドレス
BC転送する長さ(バイト数)
  戻り値  
なし
変更レジスタ
すべて
LDIRVM (005CH/MAIN)
  機 能  
メモリからVRAMへデータをブロック転送します。
 コール手順 
HL転送元のRAMアドレス
DE転送先のVRAMアドレス(指定するVRAMアドレスは全ビットが有効)
BC転送する長さ(単位はバイト)
  戻り値  
なし
変更レジスタ
すべて
CHGMOD (005FH/MAIN)
  機 能  
スクリーンモードを変えます。パレットは初期化しません。パレットの初期化が必要なときは、CHGMDP(00D1H/SUB)を使います。
 コール手順 
Aスクリーンモード(0〜8)
  戻り値  

なし

変更レジスタ

すべて

CHGCLR (0062H/MAIN)
  機 能  
画面の色を変えます。
 コール手順 
【FORCLR(F3E9H)】前景色
【BAKCLR(F3EAH)】背景色
【BDRCLR(F3EBH)】周辺色
  戻り値  

なし

変更レジスタ

すべて

NMI (0066H/MAIN)
  機 能  
NMI(Non Maskable Interrupt)処理ルーチンを実行します。
 コール手順 

なし

  戻り値  

なし

変更レジスタ

なし

CLRSPR (0069H/MAIN)
  機 能  
すべてのスプライトを次のように初期化します。
スプライトパターンヌル
スプライト番号スプライト面番号
スプライトカラー前景色
スプライトの垂直位置(SCREEN 0〜3)209
スプライトの垂直位置(SCREEN 4〜12)217
 コール手順 

なし

  戻り値  

なし

変更レジスタ

すべて

INITXT (006CH/MAIN)
  機 能  
画面をTEXT1モード(SCREEN 0、40×24)に初期化します。このルーチンはパレットを初期化しません。パレットの初期化が必要であれば、このルーチンを実行した後、INIPLT(0141H/SUB)を実行します。
 コール手順 
【TXTNAM(F3B3H)】パターンネームテーブルのアドレス
【TXTCGP(F3B7H)】パターンジェネレータテーブルのアドレス
【LINL40(F3AEH)】1行の幅(WIDTH文によって設定する値)
  戻り値  

なし

変更レジスタ

すべて

INIT32 (006FH/MAIN)
  機 能  
画面をTEXT2モード(SCREEN 1、32×24)に初期化します。このルーチンはパレットを初期化しません。パレットの初期化が必要であれば、このルーチンを実行した後、INIPLT(0141H/SUB)を実行します。
 コール手順 
【T32NAM(F3BDH)】パターンネームテーブルのアドレス
【T32COL(F3BFH)】カラーテーブルのアドレス
【T32CGP(F3C1H)】パターンジェネレータテーブルのアドレス
【T32ATR(F3C3H)】スプライトアトリビュートテーブルのアドレス
【T32PAT(F3C5H)】スプライトジェネレータテーブルのアドレス
【LINL32(F3AFH)】1行の幅(WIDTH文によって設定する値)
  戻り値  

なし

変更レジスタ

すべて

INIGRP (0072H/MAIN)
  機 能  
画面をGRAPHIC1モード(SCREEN 2)に初期化します。このルーチンはパレットを初期化しません。パレットの初期化が必要であれば、このルーチンを実行した後、INIPLT(0141H/SUB)を実行します。
 コール手順 
【GRPNAM(F3C7H)】パターンネームテーブルのアドレス
【GRPCOL(F3C9H)】カラーテーブルのアドレス
【GRPCGP(F3CBH)】パターンジェネレータテーブルのアドレス
【GRPATR(F3CDH)】スプライトアトリビュートテーブルのアドレス
【GRPPAT(F3CFH)】スプライトジェネレータテーブルのアドレス
  戻り値  

なし

変更レジスタ

すべて

INIMLT (0075H/MAIN)
  機 能  
画面をMULTI COLORモード(SCREEN 3)に初期化します。このルーチンはパレットを初期化しません。パレットの初期化が必要であれば、このルーチンを実行した後、INIPLT(0141H/SUB)を実行します。
 コール手順 
【MLTNAM(F3D1H)】パターンネームテーブルのアドレス
【MLTCOL(F3D3H)】カラーテーブルのアドレス
【MLTCGP(F3D6H)】パターンジェネレータテーブルのアドレス
【MLTATR(F3D7H)】スプライトアトリビュートテーブルのアドレス
【MLTPAT(F3D8H)】スプライトジェネレータテーブルのアドレス
  戻り値  

なし

変更レジスタ

すべて

SETTXT (0078H/MAIN)
  機 能  
VDPのみをTEXT1モード(SCREEN 0、40×24)にします。
 コール手順 
INITXTと同じ
  戻り値  

なし

変更レジスタ

すべて

SETT32 (007BH/MAIN)
  機 能  
VDPのみをTEXT2モード(SCREEN 1、32×24)にします。
 コール手順 
INIT32と同じ
  戻り値  

なし

変更レジスタ

すべて

SETGRP (007EH/MAIN)
  機 能  
VDPのみをGRAPHIC1モード(SCREEN 2)にします。
 コール手順 
INIGRPと同じ
  戻り値  

なし

変更レジスタ

すべて

SETMLT (0081H/MAIN)
  機 能  
VDPのみをMULTI COLORモード(SCREEN 3)にします。
 コール手順 
INIMLTと同じ
  戻り値  

なし

変更レジスタ

すべて

CALPAT (0084H/MAIN)
  機 能  
スプライトジェネレータテーブルの開始アドレスを獲得します。
 コール手順 
Aスプライト番号
  戻り値  
HLアドレス
変更レジスタ
AF、DE、HL
CALATR (0087H/MAIN)
  機 能  
スプライトアトリビュートテーブルの開始アドレスを獲得します。
 コール手順 
Aスプライト番号
  戻り値  
HLアドレス
変更レジスタ
AF、DE、HL
GSPSIZ (008AH/MAIN)
  機 能  
現在のスプライトサイズを獲得します。
 コール手順 

なし

  戻り値  
Aスプライトサイズ(バイト数)
CYフラグ16×16のサイズの場合のみセットし、それ以外のときはリセット
変更レジスタ
AF
GRPPRT (008DH/MAIN)
  機 能  
グラフィック画面に文字を表示します。
 コール手順 
Aキャラクタコード
【LOGOPR(FB02H)】スクリーンモードが5〜12ならロジカルオペレーションコード
  戻り値  

なし

変更レジスタ

なし

GICINI (0090H/MAIN)
  機 能  
PSGを初期化し、PLAY文のための初期値を設定します。
 コール手順 

なし

  戻り値  

なし

変更レジスタ

すべて

WRTPSG (0093H/MAIN)
  機 能  
PSGのレジスタにデータを書き込みます。
 コール手順 
APSGのレジスタ番号
E書き込むデータ
  戻り値  

なし

変更レジスタ

なし

RDPSG (0096H/MAIN)
  機 能  

PSGレジスタの値を読み出します。

 コール手順 
APSGのレジスタ番号
  戻り値  
A読み出した値
変更レジスタ

なし

STRTMS (0099H/MAIN)
  機 能  

バックグラウンドタスクとして、PLAY文が実行中であるかどうかをチェックして、実行中でなければ音楽の再生を始めます。

 コール手順 
【QUEUE(F3F3H)】の示すアドレスに、中間言語に変換されたMMLデータをセット(「第2部 6.1 PLAY文BIOS」参照)
  戻り値  

なし

変更レジスタ

すべて

CHSNS (009CH/MAIN)
  機 能  

キーボードバッファの状態を調べます。

 コール手順 

なし

  戻り値  
Zフラグバッファが空であればセット、そうでなければリセット
変更レジスタ

AF

CHGET (009FH/MAIN)
  機 能  

文字を1文字入力(入力待ちあり)します。

 コール手順 

なし

  戻り値  

A 入力された文字コード

変更レジスタ

AF

CHPUT (00A2H/MAIN)
  機 能  

文字を1文字表示します。

 コール手順 
  戻り値  

なし

変更レジスタ
CHPUT (00A2H/MAIN)
LPTOUT (00A5H/MAIN)
LPTSTT (00A8H/MAIN)
CNVCHR (00ABH/MAIN)
PINLIN (00AEH/MAIN)
INLIN (00B1H/MAIN)
QINLIN (00B4H/MAIN)
BREAKX (00B7H/MAIN)
BEEP (00C0H/MAIN)
CLS (00C3H/MAIN)
POSIT (00C6H/MAIN)
FNKSB (00C9H/MAIN)
ERAFNK (00CCH/MAIN)
DSPFNK (00CFH/MAIN)
TOTEXT (00D2H/MAIN)
GTSTCK (00D5H/MAIN)
GTTRIG (00D8H/MAIN)
GTPAD (00DBH/MAIN)
GTPDL (00DEH/MAIN)
TAPION (00E1H/MAIN)
TAPIN (00E4H/MAIN)
TAPIOF (00E7H/MAIN)
TAPOON (00EAH/MAIN)
TAPOUT (00EDH/MAIN)
TAPOOF (00F0H/MAIN)
STMOTR (00F3H/MAIN)
CHGCAP (0132H/MAIN)
CHGSND (0135H/MAIN)
RSLREG (0138H/MAIN)
WSLREG (013BH/MAIN)
RDVDP (013EH/MAIN)
SNSMAT (0141H/MAIN)
ISFLIO (014AH/MAIN)
OUTDLP (014DH/MAIN)
KILBUF (0156H/MAIN)
CALBAS (0159H/MAIN)
SUBROM (015CH/MAIN)
EXTROM (015FH/MAIN)
EOL (0168H/MAIN)
BIGFIL (016BH/MAIN)
NSETRD (016EH/MAIN)
  機 能  
VDPにアドレスをセットして、VRAMの内容が読める状態にします。
 コール手順 
HL VRAMのアドレス
  戻り値  
なし
変更レジスタ
AF
NSTWRT (0171H/MAIN)
  機 能  
VDPにアドレスを設定して、VRAMに書き込める状態にします。
 コール手順 
HL VRAMのアドレス
  戻り値  
なし
変更レジスタ
AF
NRDVRM (0174H/MAIN)
  機 能  
VRAMの内容を読み出します。
 コール手順 
HL 読み出すVRAMのアドレス
  戻り値  
A 読み出した値
変更レジスタ
F
NWRVRM (0177H/MAIN)
  機 能  
VRAMにデータを書き込みます。
 コール手順 
なし
  戻り値  
なし
変更レジスタ
HL 書き込むVRAMのアドレス
A 書き込む値
RDRES (017AH/MAIN)
  機 能  
RESETポートの内容を読み出します。
 コール手順 
なし
  戻り値  
A 読み出した値
変更レジスタ
なし
WRRES (017DH/MAIN)
  機 能  
RESETポートに値を書き込みます。ハードウェアリセットをシミュレートするときは、AレジスタのMSBを0にして、このBIOSをコールした後、BIOSの0番地にジャンプします。
 コール手順 
A 書き込む値
  戻り値  
なし
変更レジスタ
A

A.1.2 SUB ROM

 SUB ROM内のルーチンを呼び出す場合は、以下のようにインタースロットコールを呼び出して使います。

ld     ix, BIOS entry address
call   extrom

 IXレジスタを壊したくない場合は、次のように呼び出します。

push   ix     ; save IX
ld     ix, BIOS entry address
jp     SUBROM
GRPPRT (0089H/SUB)
NVBXLN (00C9H/SUB)
NVBXFL (00CDH/SUB)
CHGMOD (00D1H/SUB)
INITXT (00D5H/SUB)
INIT32 (00D9H/SUB)
INIGRP (00DDH/SUB)
INIMLT (00E1H/SUB)
SETTXT (00E5H/SUB)
SETT32 (00E9H/SUB)
SETGRP (00EDH/SUB)
SETMLT (00F1H/SUB)
CLRSPR (00F5H/SUB)
CALPAT (00F9H/SUB)
CALATR (00FDH/SUB)
GSPSIZ (0101H/SUB)
GETPAT (0105H/SUB)
WRTVRM (0109H/SUB)
RDVRM (010DH/SUB)
CHGCLR (0111H/SUB)
CLSSUB (0115H/SUB)
DSPFNK (011DH/SUB)
WRTVDP (012DH/SUB)
VDPSTR (0131H/SUB)
SETPAG (013DH/SUB)
INIPLT (0141H/SUB)
RSTPLT (0145H/SUB)
GETPLT (0149H/SUB)
SETPLT (014DH/SUB)
BEEP (017DH/SUB)
PROMPT (0181H/SUB)
NEWPAD (01ADH/SUB)
CHGMDP (01B5H/SUB)
KNJPRT (01BDH/SUB)
REDCLK (01F5H/SUB)
WRTCLK (01F9H/SUB)