1.ROMカートリッジの種類
プログラムの動き方から分類すると、以下の3つになります。
1)本体BASICの起動時に、自動的にROM内のプログラムに移り、そのまま帰ってこないもの。ほとんどのROMカートリッジのゲームがこれに当たります。
2)本体BASICの起動時に、ROM内の初期設定ルーチンだけが走り、BASICに戻ってくるもの。拡張BASICなどがこれに当たります。
3)本体BASICの起動時には、ROM内のルーチンは全く通らないもの。EXAS-BASICコンパイラなどがこれに当たります。
また、ROMには、初代PC-6001用、初代PC-6001+拡張BASIC用、mk2/66用、mk2SR/66SR用があります。
基本的に、先発の機種対応のものは、後発の機種で動作させる事が可能です。
しかし、特定の起動方法があったり、バグがあったりします(後述します)。
以下、1)2)についてです。3)は起動時にMODEを適切に選択すれば、普通に使用できます。
2.初代PC-6001用カートリッジ
本体BASIC起動時にROM内プログラムが走るROMの先頭には、以下の特定の情報が書かれています。
0x4000=0x41("A")、0x4001=0x42("B")
0x4002、0x4003 に書かれたアドレスをCALLします。
例えば、0x4000〜のデータが、
0x41、0x42、0x00、0x41、・・・
となっている場合、BASIC起動時、CALL 0x4100 が実行されます。
ゲームなどでは、そのままBASICに帰らずにプログラムが実行されますが、ツールなどの場合は、起動時の初期設定の後、RET 命令で、元のBASICに戻ります。
カートリッジ内のプログラムからRETURNしたら、BASIC起動の続きを行います。”How Many Pages?”のページ設定やワークエリアの設定などが行われます。
ROMカートリッジ内にRAMがある場合や、ROM/RAMカートリッジにROMを挿して使う場合は、RAMが32Kで起動します。
3.初代PC-6001用カートリッジをmk2/66/mk2SR/66SRで使用する
初代PC-6001用カートリッジをmk2以降で使用した場合、以下のような動作になります。
BASIC初期設定
↓
RAMサイズの設定
↓
ROM内ルーチンのチェック(0x4000、0x4001="AB"の時、CALL (4002H) )
↓
ページ設定(”How Many Pages?”)
↓
BASIC起動
0x4000、0x4001="AB"になっている場合は、RETURNした後には、N60m/N66-BASICには戻りません。そのため、MODEを選択するメニュー表示がありません。
デフォルトでは、RAMは16Kになります。RAMを32Kにしたい場合は、"2"キーを押したまま、リセットを押して再起動させます(mk2のマニュアルに記載があります)。
エミュレータで実行する場合は、一度16Kで起動した後に、BASIC上で
FOR I=0 TO 999:NEXT:EXEC 0
と直接実行して、すぐに"2"キーを押しっぱなしにするといいでしょう。
4.初代PC-6001+拡張BASIC用カートリッジ
拡張BASIC起動時にROM内プログラムが走るROMの先頭には、以下の特定の情報が書かれています。
0x6000=0x41("A")、0x6001=0x42("B")
0x6002、0x6003 に書かれたアドレスをCALLします。
上記2.のは、アドレスが違うだけです。
カートリッジ内のプログラムからRETURNしたら、BASIC起動の続きを行います。フロッピー関連の初期設定(フロッピーからの起動や”How Many Files?”など)、”How Many Pages?”のページ設定やワークエリアの設定などが行われます。
ROMカートリッジ内にRAMがある場合や、ROM/RAMカートリッジにROMを挿して使う場合は、RAMが32Kで起動します。
5.初代PC-6001+拡張BASIC用カートリッジをmk2/66/mk2SR/66SRで使用する
初代PC-6001+拡張BASIC用カートリッジをmk2以降で使用した場合、以下のような動作になります。
BASIC初期設定
↓
RAMサイズの設定
↓
ROM内ルーチンのチェック1(0x4000、0x4001のチェック。ここでは"AB"ではないはず)
↓
ROM内ルーチンのチェック2(0x6000、0x6001="AB"の時、CALL (6002H) )
↓
フロッピー関連の初期設定
↓
ページ設定(”How Many Pages?”)
↓
BASIC起動
0x6000、0x6001="AB"になっている場合は、RETURNした後には、N60m/N66-BASICには戻りません。そのため、MODEを選択するメニュー表示がありません。
拡張BASICカートリッジの代わりに、N60m/N66-BASICの拡張BASIC部分を使用します。
拡張BASICカートリッジとN60m/N66-BASICの拡張BASIC部分では、アドレスがずれているため、ROM内ルーチンを使っているものは使用できません。
デフォルトでは、RAMは16Kになります。RAMを32Kにしたい場合は、"2"キーか"4"キーを押したまま、リセットを押して再起動させます。
6.mk2/66用カートリッジ
本体BASIC起動時にROM内プログラムが走るROMの先頭には、以下の特定の情報が書かれています。
0x4000=0x43("C")、0x4001=0x44("D")
この時は、0x4002、0x4003 に書かれたアドレスをCALLします。
0x6000=0x43("C")、0x6001=0x44("D")
この時は、0x6002、0x6003 に書かれたアドレスをCALLします。
ゲームなどでは、そのままBASICに帰らずにプログラムが実行されますが、ツールなどの場合は、起動時の初期設定の後、RET 命令で、元のBASIC初期設定に戻ります。
戻ったら、フロッピーの初期設定の後、モード設定、ページ設定やワークエリアの設定などが行われます。
モード設定(MODE1〜5)は、通常はメニュー画面が出ますが、ROM内ルーチンやフロッピー起動の時、メニューをスキップする事が可能です。
0xFF4E に『MODE - 1』を書き込むと、RETURNした時にそのモードを選択した状態になって、BASICが起動します。
例えば、ROMの0x4000〜
0x43、0x44、0x04、0x40、0x3E、0x04、0x32、0x4E、0xFF、0xC9
とした場合、MODE5で起動します。ただし、ページ設定は別に設定する必要があります。
7.mk2/66用カートリッジをmk2SR/66SRで使用する
mk2/66用カートリッジをmk2SR/66SRで使用した場合、以下のような動作になります。
SR-BASIC初期設定
↓
ROM内ルーチンのチェック(0x4000、0x4001と0x6000、0x6001のチェック)
↓
(※)SR-BASICのモード選択
↓
N66-BASICの初期設定
↓
ROM内ルーチンのチェック(0x4000、0x4001と0x6000、0x6001のチェック)
↓
フロッピー関連の初期設定
↓
モード選択(MODE1〜5)
↓
ページ設定(”How Many Pages?”)
↓
BASIC起動
mk2/66用カートリッジなので、本来はSR-BASICのモード選択はスキップするべきなのですが、SR-BASICのバグによりモード選択画面が出てしまいます(上記※)。
※バグ内容:SR-BASICの0x1D9B〜で、(4000H)、(6000H)と"AB"、"CD"、の比較を行っているんですが、"CD"の方の比較を行っていません( RST 20Hが抜けている)。
そのため、モード選択画面では、使用する1〜5のMODEを選択します。
ROM内でモード設定を行っているもの(0xFF4Eに『MODE - 1』を書き込んでいるもの)に関しては、1〜5のどのMODEを選択しても、そのMODEになります(上書きされる)。
8.mk2SR/66SR用カートリッジ
本体BASIC起動時にROM内プログラムが走るROMの先頭には、以下の特定の情報が書かれています。
0x4000=0x45("E")、0x4001=0x46("F")
この時は、0x4002、0x4003 に書かれたアドレスをCALLします。
0x6000=0x45("E")、0x6001=0x46("F")
この時は、0x6002、0x6003 に書かれたアドレスをCALLします。
ゲームなどでは、そのままBASICに帰らずにプログラムが実行されますが、ツールなどの場合は、起動時の初期設定の後、RET 命令で、元のBASIC初期設定に戻ります。
戻ったら、フロッピーの初期設定の後、SR-BASICモード設定、ページ設定やワークエリアの設定などが行われます。
SR-BASICモード設定は、普通ではスキップする事ができません(BASICの初期設定の一部をROM内ルーチンに書くことで実現はできますが...)