MAINROM又はSUBROMのあるスロットアドレスを得る

「MAINROM又はSUBROMのあるスロットアドレスを得る」の編集履歴(バックアップ)一覧はこちら

MAINROM又はSUBROMのあるスロットアドレスを得る」(2013/01/11 (金) 00:34:06) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

MAINROM(通常はAPIやROMBASICインタプリタが記録されている)や SUBROM(2/2+以降の追加BIOS)は、Z80の物理アドレスを拡張したスロット と呼ばれる論理アドレスにマッピングされている。 このROMの場所を示すアドレスは、リニアなアドレス拡張ではないので スロットと呼ばれる形式でアドレス指定する必要がある。 (8086のセグメントベースレジスタのようなものと考えれば良い) つまり、0x8000など特定のアドレスを指定する場合は、MSXでは物理アドレスは拡張されているので正しくは、 [SLOT_POINTER(1,0)]:[ADDRESS(0x8000)] という指定になる。 スロットアドレス指定は特殊なポインタであると考えると良い。 MAINROMとSUBROMのスロットアドレスは、起動時にROMBIOSファームウエアが自身をチェックし、 その場所をワークエリア内に保存している。 実際のBIOSのスロットの場所(ポインタ)を知るにはこれらアドレスを参照すればよい。 MAINROMのスロットアドレスは0xFCC1、SUBROMのスロットアドレスは0xFAF8にある。 これらを参照し表示するCソースコードを以下に示す。 #include <stdio.h> void main(void){ unsigned char * p_slotmain; unsigned char * p_slotsub; p_slotmain=(unsigned char *)0xFCC1; p_slotsub=(unsigned char *)0xFAF8; printf("MAINROM - %u \r\n",(*p_slotmain)); printf("SUBROM - %u \r\n",(*p_slotsub)); } 通常は特殊なハードウエア構成でない限り、MAINROMはスロット0に置かれている。 得られた値はスロット形式と呼ぶフォーマットとなっている。 bit7,拡張スロットフラグ bit6 bit5 bit4 bit3,拡張スロットアドレス bit2,拡張スロットアドレス bit1,基本スロットアドレス bit0,基本スロットアドレス (bit4-6は未使用) スロットアドレスのうち、bit7は拡張スロットのセレクトフラグ。 通常は[3,0]などのようにして[基本,拡張]という2変数でスロットアドレスをポイントする。 ちなみにMAINROMとSUBROMの関係は、MAINROMがMSX1から存在するBIOS(API)やBASICインタプリタ を持っており、 SUBROMが2/2+以降に拡張されたBIOS(API)が記録されている。 FM音源などに関係するBIOSは、これらとは別。 通常、スロットページ0,1がROM、2,3がRAMで動作しているROMBASICが動作中、MAINROMにある BIOS(API)を使う時には特別にスロット物理アドレスを変更する必要はない。 しかしSUBROMにあるBIOS(API)を使う場合は特別なコール手順を使う。 それら手順は通常はAPIを通じて物理アドレスのページングをするもので、MAINROMにそのための APIが存在する。 このほかに拡張BIOSと呼ばれるものがあるが、これはSUBROMとは別であり、主にマッパーや 漢字機能、MODEM(RS232C)シリアルなどシステム寄りの追加的な機能を扱う。 拡張BIOSは、MAINROM,SUBROMとはアクセス方法は異なる。

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。