DOC_handle.pc 2.56 KB

        osCartRomInit で正しいハンドラが取得できない不具合の修正


1. 修正された問題点

        一回目の osCartRomInit 関数の呼び出しが 64DD のマネージャを立
        ち上げた後に行なわれた場合、ハンドラの取得に失敗するという不具
        合がありました。この不具合を修正しています。

        なお、この不具合は 64DD に対応したカートリッジゲーム(カートリッ
        ジ起動ゲーム)でのみ起こるものです。ディスク起動のゲームや 64DD 
        に対応していないカートリッジ専用ゲームでは発生しません。


2. 関数使用時の注意点

        osCartRomInit, osDriveRomInit はそれぞれはじめて呼ばれた場合、
        ともに内部で PI バスにアクセスします(2回目以降はアクセスしま
        せん)。したがって、この関数の一回目の実行がディクアクセス中に
        なることはお避け下さい。ディスクアクセス中かどうかはっきりしな
        い場合は、ディスクアクセスが行なわれていないことがはっきりして
        いる場所に、実行位置を移動されることををおすすめします。

        今回のバグフィックスにより、osCartRomInit の呼び出しが 64DD の
        マネージャ立ち上げの後であっても、ディスクアクセス中でなければ
        正常に動作するようになりましたが、なるべく 64DD のマネージャ立
        ち上げの前に実行しておく方が良いでしょう(ディスクアクセスがな
        い、ということがはっきりしているので)。

        現在開発中のソフトで変更が容易ではない場合は、単に osInitialize 
        の直後に osCartRomInit, osDriveRomInit の2行を追加するだけで
        も結構です。2回目に osCartRomInit, osDriveRomInit が実行され
        る際は PI バスにはアクセスに行かないので、このようにしておくだ
        けで安心です。通常これらの関数は2回実行する必要はありませんが、
        この方法だと手軽に危険を回避することができます。


3. その他の変更点

        OS 内部の PI のハンドラを取り扱っている部分で使用しているグロー
        バル変数の名前を変更し、"__"(アンダーバー2つ)で始めるようにし
        ました。

        従来、ハンドラが切り替わったかどうかをハンドラのアドレスで判断
        していましたが(N64 プログラミングマニュアル第27章 97/8/25 版
        P.3 下の注意参照)、ハンドラの中の type で判断するように変更し
        ました。

        osCartRomInit, osDriveRomInit はハンドラを取得するだけで、実際
        の PI バスのアクセススピードの設定値の変更は行ないません。(設定
        値に関しては、実際はロムにアクセスする際に osEPi 関数が自動的
        に切り替えるため、開発者は意識する必要は全くありません。ただし、
        osPi 関数は設定値の切り替えを行なわないので、一つのゲームの中
        で osEPi と osPi を混在すると動作がおかしくなります。絶対に混
        在させることのないようにしてください。なるべく osEPi で統一す
        るようにしてください。)