iP6 改造日記 2 [Windy's room]

TOP > コンピュータ関係 > PC-6001のお部屋 > iP6 改造日記 2
2002年4月から5月頃です。上から下へ 並んでいます。

DATE$ と TIME$ の実装 

2002/4/8 頃

PC-6601SRの、DATE$ と TIME$と、TVヨヤクをを実装することにしました。 しかし、そのままだと、割り込み処理を待ちつづけてしまい、止まってしまうことが分かりました。 何故かというと、SUB CPUから、CPUに タイマーのデータを渡すときに、割り込みを描けているからです。

ちなみに、PC-6601SRで DATE$ TIME$のデータを読み込むときは、

書き込むときは 簡単です。

ここで初めて、割り込みを実装しました。(^^; 初めは、割り込みなんて、とても・・。と思っていましたが、ソースリストを何回も見直すことによって、分かってきました。 ただ、変更があっちこっちに渡るので、それがちょっと大変でした。(汗)

これで一応動くようになりましたが、このままだと起動したときから、DATE$ TIME$がオール0のままです。設定も出来ますが、設定した日時から時計が動かない。という状態になるので、とてもじゃないけど、時計としては使えません。(^^;

ソフトウエアで、カウントアップしようか?と思いましたが、結局、OSの日時をセットするようにしました。これなら、時計が狂うこともないでしょう。(汗) ただし、date$="06/01" 等のように、日時の設定は出来なくなりました。 というか、設定しても設定しても、OSの日時に戻ってしまいます。(^^; もし、時計がずれている場合は、OSの日時を設定し治してください。


TVヨヤク 

TVヨヤクは、当初動きませんでした。 というのも、PC-6601SRの動作として、MODE 5から、SYSTEMROM2を選択するんですが、そのメモリーマッピングを実装してなかったからです。 この、メモリーマッピングは、見よう見まねで、実装しました。 しかし、そのメモリーマッピングをしても、PC-6601SR TVヨヤクというタイトルが出て、止まってしまいます。

何故?と思いながら、逆アセンブルリストを探してみると、 タイマーから、前述の現在の日時や、TVヨヤクのデータを読み込もうとしているんです。 それの割り込み待ちでした。

TVヨヤクデータを読み込むには、

ただし、現状のTVヨヤクのデータは、空データを渡しているだけです。 そのため、TVヨヤクでヨヤクをしても、一切覚えてくれません。(汗) この辺は、あまり必要性を感じなかったのですが、 覚えるためには、TVヨヤクのデータを、ファイルに保存する必要が有りそうです。

TVヨヤク

ちなみに、モード5 ページ2の時に、リセットせずに SRの起動メニューに戻る方法があるようですね。 EXEC &h7821 とすると、TVヨヤクの画面になるので、F5を押すと、起動メニューに戻るようです。(^^;


オートスタートメニューなどの色 

オートスタートメニューや、PC-6001mk2SR等の BASIC 選択メニューの色がおかしかったのを修正しました。

原因は、PALETと、垂直同期の割り込みが 未実装だったからです。 これを実装することで、治りましたが、PALETの実装は、結構大変でした。 PALETについては、次に書きます。

auto start menu 間違い 間違いです。

auto start menu 正解 正解です。

ところで、PALET って、SCREEN 1と2でも使えるんですね。(^^; 私はてっきり、SCREEN3でしか使えないと思っていたんですが・・。


PALET の実装 

2002/4/21 頃

当然、全てのSCREEN で PALETを使えるようにしないと 行けないのですが、な、なんと、SCREEN 1の ビット配列が、SCREEN2と違うようです。

ただ、BASICのカラーコードは、どちらも同じ色配列になっているんですよね。(^^;その秘密は、SCREEN2は、カラーコード(HGRB)を書き込むだけですが、 SCREEN1は、カラーコード(HGRB)を、HBGRに変換してから書き込んでいるようです。 (何で同じ実装にしないんでしょう・・。これは推測ですが、CRTコントローラーが 外注品で、それがそういう設計になっているからかもしれません。)

とりあえず、SCREEN2の方は、そのまんま指定されたパレットを適用するだけですが、 SCREEN 1の方は、以下のようにしています。

いずれも、変換作業は、テーブルでやっています。でも、ちょっと遅いかも・・。(^^;;

ちなみに、内部的には、すべてのカラーコードのパレットを保有しているので、プログラムをちょっと改造して、I/Oを増設すれば、カラーコード13から16までと言わず、全カラーコードの色を自由に割り当てることは可能です。<オイオイ まぁ、そんなことをしても、あまり意味はないような気はしますが。(^^;;;;

あと、SCREEN 3が仮実装されだしたので、SCREEN 3でも PALETを実装する必要があります。


垂直同期の割り込み (もどき)

2002/4/21 頃

垂直同期は、画面を書き終わった時に、かかるようにしました。 ただし、他の割り込みが掛かっていれば、そちらを優先します。 でも、こんなに簡単な実装で良いんでしょうか? ちょっっと心配です。 もしかすると、タイミングによっては問題があるかも知れません。

あと、割り込みコントロール(I/O (FAH))の DI/EI も見る必要があります。 垂直同期の割り込みは、B4が0の時は、発生させてもいいですが、1の時は、発生しないようにします。 これをやっていなかったために、「ミッドナイトマジック」が動かずに、ちょっと焦りました。(^^; ということは、ミッドナイトマジックは、垂直同期の割り込みを使ってない。ということですね・・。何故か・・。

ちなみに、垂直同期の割り込みがあるので、BASIC ROMへのパッチ は不要になりましたので、取り除きました。


WIDTH 80 の実装

2002/4/29 頃

WIDTH 80と、SCREEN 3の実装も、悩みの種でした。 何故かというと、解像度が大きく変わるからです。 しかし、それをするには、膨大な 描画エンジンの書き換えが必要になってしまいますが、残念ながら、私の手には負えそうもないです・・。

私は手っ取り早くすませるために、そのときだけ、640x200ドットになるようにコーディングしました。 でも、それだと 不自然な横長になってしまうんですよねぇ・・。(^^;

width 80,25  横長

(というわけで、5月25日版では、上記の画面になるんですが、これは後日、解消することになります。)


SCREEN 3 の実装

問題は、SCREEN 3ですが、実機を引っ張り出して、VRAMの構造を解析していました。 幸い、VRAMのアクセス方法は あまり変わらなくて、表示ルーチンだけの変更で行けるようです。表示ルーチンは、モード5のSCREEN 4をベースにして改造しました。 横方向、640ドット描画するようにしました。


SRで、必要なROM

もともと、iP6をSRで使った場合、BASICROMと、CGROM60と、CGROM66と、KANJIROMと、VOICEROMと、SYSROM2 が必要でした。 そこに、私が、SYSTEMROM1と、SYSTEMROM2 も追加したので、6つのROMが必要になってしまっていました。(汗)

しかし、それらは、かなり重複しています。初めてこのプログラムを使われる人に、これらのROMが必要だというのは、かなり酷なので、重複しているROMは 読まないようにしました。(もちろん、読まないだけなので、有ったとしても、害はないですが(^^;)

ただし、プログラム中で、読まないROMを使用していたりするコードがあるので、それらを生かすために、内部で、ROMイメージを 作っていたりします。 (たとえば、BASICROM は、SYSTEMROM1 の先頭の 32KB とか・・。)

結局、SRで 実行するときに、必要なROMは 次の通りです。

ここまで作業して、改造パッチファイルを 5月25日付けで、一般公開しました。(^^; isioさん、並びに関係者の方々、本当に、ありがとうございました。(_)


つづく

ここまでで、だいぶましになってきたかな?と思いますが、まだまだ実装しなければ ならないことや、バグがたくさんあります。 それは、また後日のお楽しみと言うことで・・。

インデックスに戻る