※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※
ここではユーザーが利用可能なBIOSエントリを紹介します。
BIOSにはMAIN ROMとSUB ROM内のルーチンの2種類があり、コールの手順はそれぞれ異なります。ここでエントリは次のように表記します。
記号は次のような意味を持ちます。
記号 | 意味 |
MSX | MSX1からサポートされているルーチン |
MSX2 | MSX2用に追加または機能拡張されたルーチン。 |
MSX2+ | MSX2+用に追加または機能拡張されたルーチン。 |
[A]、[HL]などレジスタ名を[]で囲んだものは、そのレジスタの内容を示します。例えば、HLレジスタの内容が8000Hであった場合に、[HL]とは8000Hを示していることになります。
【】で囲んだものは、ワークエリア中の名前と番地です。例えば、【PRTFLG(F416H)】とあれば、ワークエリアのF416H番地にあるPRTFLGという名前の場所を示します。「A.2 ワークエリア」をご参照ください。
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)ならばセット |
- RDSLT (000CH/MAIN)
| Aレジスタの値に対応するスロットを選択し、そのスロットのメモリを1バイト読み出します。このルーチンを呼ぶと、割り込みを禁止し、実行後も割り込みは解除されません。 |
- CHRGTR (0010H/MAIN)
| BASICテキストから文字(またはトークン)を取り出します。 |
| HL | +1される |
| A | 1つ選んだHLの指す文字 |
| CYフラグ | チェックした文字が数字であればセット |
| Zフラグ | ステートメントの終わり(00Hまたは3AH)ならばセット |
- WRSLT (0014H/MAIN)
| Aレジスタの値に対応するスロットを選択し、そのスロットのメモリに値を書き込みます。このルーチンを呼ぶと、割り込みを禁止し、実行後も割り込みは解除されません。 |
| A | スロット操作(形式はRDSLTと同じ) |
| HL | 書き込むメモリの番地 |
- OUTDO (0018H/MAIN)
| A | 出力する値 |
| 【PRTFLG(F416H)】 | 0以外であれば、プリンタに出力 |
| 【PTRFIL(F864H)】 | 0以外であれば、PTRFILで示されるファイルへ出力 |
- CALSLT (001CH/MAIN)
| 他のスロットのルーチンを呼び出します(インタースロットコール)。 |
| IX | 上位8ビットにスロット番号(形式はRDSLTと同じ) |
| IY | コールする番地 |
- DCOMPR (0020H/MAIN)
| Zフラグ | HL=DEならばセット |
| CYフラグ | HL<DEならばセット |
- ENASLT (0024H/MAIN)
| Aレジスタの値に対応するスロットを選択し、以降そのスロットを使用可能にします。このルーチンを呼ぶと、割り込みを禁止し、実行後も割り込みは解除されません。 |
| A | スロット操作(形式はRDSLTと同じ) |
| HL | 呼び出すアドレス |
- GETYPR (0028H/MAIN)
| なし(【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 |
- CALLF (0030H/MAIN)
rst 30h
db n ; n はスロット番号(形式はRDSLTと同じ)
dw nn ; nnは呼び出すスロットアドレス
- KEYINT (0038H/MAIN)
- INITIO (003BH/MAIN)
- INIFNK (003EH/MAIN)
| ファンクションキーの内容を初期化します。このルーチンを実行後、画面をクリアするとファンクションキーの表示も変わります。 |
- DISSCR (0041H/MAIN)
- ENASCR (0044H/MAIN)
- WRTVDP (0047H/MAIN)
| C | VDPのレジスタ番号(レジスタ番号は0〜23、32〜46) |
| B | 書き込む値 |
- RDVRM (004AH/MAIN)
| VRAMの指定したアドレスの内容を読み出します。ただし、このルーチンはTMS9918(MSX1のVDP)に対するもので、VRAMのアドレスは下位14ビットのみが有効です。全ビットを使うときは、NRDVRM(0174H/MAIN)を使います。 |
- WRTVRM (004DH/MAIN)
| VRAMにデータを書き込みます。ただし、このルーチンはTMS9918に対するもので、VRAMのアドレスは下位14ビットのみが有効です。全ビットを使うときは、NVRVRM(0177H/MAIN)を使います。 |
- SETRD (0050H/MAIN)
| VDPにVRAMアドレスをセットして、読み出せる状態にします。このルーチンはVDPのアドレスオートインクリメントの機能を使って、連続したVRAM領域からデータを読み出すときに使います。このルーチンの実行後はポートから直接VRAMから読み出します。したがって、RDVRMをループ中で使うより高速な読み出しができます。ただし、このルーチンはTMS9918に対するもので、VRAMのアドレスは下位14ビットのみが有効です。全ビットを使うときは、NSETRD(016EH/MAIN)を使います。 |
- SETWRT (0053H/MAIN)
| VDPにVRAMアドレスをセットして、書き込める状態にします。使用目的はSETRDと同じです。ただし、このルーチンはTMS9918に対するもので、VRAMのアドレスは下位14ビットのみが有効です。全ビットを使うときは、NSTWRT(0171H/MAIN)を使います。 |
- FILVRM (0056H/MAIN)
| VRAMの指定領域を同一のデータで埋めます。ただし、このルーチンはTMS9918に対するもので、VRAMのアドレスは下位14ビットのみが有効です。全ビットを使うときは、BIGFIL(016BH/MAIN)を使います。 |
| HL | 書き込みを開始するVRAMアドレス |
| BC | 書き込む領域の長さ(バイト数) |
| A | 書き込む値 |
- LDIRMV (0059H/MAIN)
| HL | 転送元のVRAMアドレス(指定するVRAMアドレスは全ビットが有効) |
| DE | 転送先のRAMアドレス |
| BC | 転送する長さ(バイト数) |
- LDIRVM (005CH/MAIN)
| HL | 転送元のRAMアドレス |
| DE | 転送先のVRAMアドレス(指定するVRAMアドレスは全ビットが有効) |
| BC | 転送する長さ(単位はバイト) |
- CHGMOD (005FH/MAIN)
| スクリーンモードを変えます。パレットは初期化しません。パレットの初期化が必要なときは、CHGMDP(00D1H/SUB)を使います。 |
なし
すべて
- 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)にします。 |
なし
すべて
- SETT32 (007BH/MAIN)
| VDPのみをTEXT2モード(SCREEN 1、32×24)にします。 |
なし
すべて
- SETGRP (007EH/MAIN)
| VDPのみをGRAPHIC1モード(SCREEN 2)にします。 |
なし
すべて
- SETMLT (0081H/MAIN)
| VDPのみをMULTI COLORモード(SCREEN 3)にします。 |
なし
すべて
- CALPAT (0084H/MAIN)
| スプライトジェネレータテーブルの開始アドレスを獲得します。 |
- CALATR (0087H/MAIN)
| スプライトアトリビュートテーブルの開始アドレスを獲得します。 |
- GSPSIZ (008AH/MAIN)
なし
| A | スプライトサイズ(バイト数) |
| CYフラグ | 16×16のサイズの場合のみセットし、それ以外のときはリセット |
- GRPPRT (008DH/MAIN)
| A | キャラクタコード |
| 【LOGOPR(FB02H)】 | スクリーンモードが5〜12ならロジカルオペレーションコード |
なし
なし
- GICINI (0090H/MAIN)
| PSGを初期化し、PLAY文のための初期値を設定します。 |
なし
なし
すべて
- WRTPSG (0093H/MAIN)
なし
なし
- RDPSG (0096H/MAIN)
PSGレジスタの値を読み出します。
なし
- 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の内容が読める状態にします。 |
- NSTWRT (0171H/MAIN)
| VDPにアドレスを設定して、VRAMに書き込める状態にします。 |
- NRDVRM (0174H/MAIN)
- NWRVRM (0177H/MAIN)
- RDRES (017AH/MAIN)
- WRRES (017DH/MAIN)
| RESETポートに値を書き込みます。ハードウェアリセットをシミュレートするときは、AレジスタのMSBを0にして、このBIOSをコールした後、BIOSの0番地にジャンプします。 |
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)