2014年04月09日

ROMカートリッジについて

  ROMカートリッジについてまとめました。結構知らないことがありました。


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内ルーチンに書くことで実現はできますが...)


posted by えすび at 19:16| Comment(0) | P6解析:その他 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。