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


TOP > PC-6001のお部屋 > iP6 改造日記 8

下から上へ 並んでいます。
注意 初めての方は、このページの下のほうから読んでください。

ユーカラJJ

2003年11月 10日

66SRに ユーカラJJというワープロソフトが付属しています。 動作自体は問題が無いのですが、ユーカラJJ起動後、ファンクションキーから、終了(f5)->RESET(f5)を選択すると、リセットがかかったようになるはずが、バグって暴走するというバグが有りました。

リセットといっても、ソフトウエア的なものです。 内部的には、下記のようなコードになっていて、画面モードをSRにして、SRのBASIC ROMをマッピングして、JP命令なしで、0000番地に突入するという感じです。

    LD	A,0C3H		;FFF4	3E C3 		
    OUT	(0F8H),A	;FFF6	D3 F8 		謎ポート(?)
        
    LD	A,0FEH		;FFF8	3E FE 		
    OUT	(0C8H),A	;FFFA	D3 C8 		画面モードSRにする

    LD	A,0F8H		;FFFC	3E F8 		
    OUT	(060H),A	;FFFE	D3 60 		N66-SR BASICのROMをマッピング

実行した命令を全て書き出してみて、ようやく分かりました。

動作的には次のようです。リセットされてから、ディスクを検査したときに、モード5のオートスタートの指示があるので、モード5の初期化ルーチンに飛ぶのですが、そこで out &H93,5 したときに、DoOut(0xF0, portF0); が実行されます。

でも、その時点ではportF0が、全てRAMを割り当てる値のままです。 というわけで、その命令実行後 メモリーバンクが全てRAMになって、ROMが隠れてしまうので、何も無いところを黙々と実行してしまい、暴走につながるようです。(汗)

というわけで、一応、SRモードになったときに、portF0を初期化するようにしたら、治りました。 でも、こんなのでいいのでしょうか? (^^;;

ちなみに、F5→F5 を押す前に、ディスクを抜いておけば、現状のiP6 Plus でも暴走はしません。

そういえば、謎ポート(I/O F8H)が嫌な感じですが、何か意味があるのかな?

デバッガ

2003年11月初め頃

すこしづつ、デバッガとなるべき画面を作成中です。 デバッガといっても、全然それらしくなってきてないのですが・・。 一番肝心な、Z80 CPUを一時停止させるところまで行ってません。(^^;;

マルチスレッド

2003年11月6日頃

Windows版を、Z80 CPUをマルチスレッドで動かせるようにしていました。 これは、チョコぼんさんに、実装してもらったのですが、違う点は、 変数で、シングルスレッドに戻すことも出来る点です。

ただ、一長一短があって、今までウインドウタイトルをさわっただけでも、 Z80 CPUが止まっていたのですが、止まらなくなります。(汗) ということは、ゲームとかで、一時停止したいときとか、困りますよね。 あと、スナップショットも、とりにくくなります。 一時停止ボタンが要るかも・・。(^^;;

デバッガを実装するのは、楽なのかな?うーん。どうなんでしょうか?

ちなみに、Unixは・・というと、まだメニューもないので、あまり意味が無いかな? と思っています・・。(汗)

SCREEN 2,2,1 問題 再び

2003年10月 27日頃

SCREEN 2,2,1 とすると、普通なら、画面がテキスト画面のままで、描画のみグラフィックになされるのですが、 画面が化けてしまっていました。(汗) これは、前から気になっていたのですが、全然分からなかったのですが、ついに分かりました。(^^;

現象的には、テキスト画面の描画ルーチンが、グラフィック用のVRAM を見ながら描画をしてしまう・・。 ということのようです。 というわけで、グラフィックと、テキストで、VRAMのアドレスを保持する変数を分けたら、 すっきりと治ってくれました。(^^;

ちなみに、再びとしたのは、前も、この手のバグが有ったからなんです。(^^; SRは、グラフィックVRAMへのアクセスが、特殊なので困りものです。

その上、いわゆるパックドピクセルなので、 ゲームのキャラクターをVRAMに書くときの 合成処理がややこしくなるのも困りものですねぇ・・。(汗) ゲームが少なかったのも、無理は無いかも・・。(汗)

SR(モード6)の拡張ROM

2003年10月 27日頃

SRのモード6では、拡張ROMが正しくマッピング出来ていませんでした。すいません・・。 結局、拡張ROMの方のアドレスは 計算しなくても良いみたいです。

これは、チョコぼんさんに見つけていただきました。ありがとうございました。 >とはいうものの、拡張ROMは持ってないので、拡張ROMもどきでしか、確認できていません。(汗)

TAPEを、LOAD用とSAVE用で分けました。

2003年10月27日頃

強いご要望にしたがって、TAPEをLOAD用と、SAVE用で分けました。(^^; これで、LOAD時と、SAVE時で、いちいちTAPEを入れ替えなくても済みます。 ゲームのデータをセーブするときとかに重宝するかもしれません。

ただし、LOAD用は読み込みしか出来なくなり、SAVE用は書き込みしか出来なくなりました。 LOAD用は、ファイルが書き込み禁止属性であっても大丈夫ですが、SAVE用で書き込み禁止属性だと、ファイルのオープンに失敗するので、注意が必要です。

今のところ、GUIはWindows版だけです。 誤操作を防ぐために、初期状態では、SAVE用TAPEのメニューは無効になっています。設定ダイアログで設定したら、使えるようになります。 あと、SAVE用TAPEのカウンタを、画面の下に出すようにしました。

ファイルを上書きするときは、一応警告が出ますが、「はい」を選ぶと、大切なデータで有っても、失われてしまうので、注意が必要です。 出来れば、SAVE用TAPEだけ、ディレクトリを分けたほうが、いいと思います。

2004年1月3日追記

ちなみに、何故、Windowsのステータスバーを使わないの?といわれそうですが、私自身、ステータスバーが嫌いなのと、フルスクリーンにしたときに、隠れてしまうからです。(汗)

スキャンラインの有無 変更できるように

2003年10月24日

今までは、640x400にすると、必ずスキャンライン有りにしていたんですが、切り替え方式にしました。 ただし、320x200の時は、自動的にスキャンライン無しになります。

画面の上部に絵が残る

2003年10月19日

これは、上部を綺麗にするはずの処理が、一生懸命、違うところを消していたからです。(汗) というわけで、やっと治りました。 すいませんでした。(_) 今のところ、Rel.4.7に取り込み予定です。

SRのグラフィックのY座標

2003年10月22日

SRのグラフィックをアクセスするときは、Y座標 を、I/O のCEHに下位8ビットと、CFHに上位1ビット出力します。 すると、アドレス0からのメモリに、VRAMの内容が投影されるので、そこに対して、アクセスします。

ということは、両方あわせると、9ビット= 512ラインも指定できます。 でも、SRのグラフィックは、最高で204ラインしかないんです。(^^; ということで、204以上の値をセットした場合は、どうなるんでしょうか?

答えは、指定値から204 引かれます。(汗) でも、(Rel.4.6)までは、そこまで考慮してなかったので、VRAMの外までアクセスしてしまっていました。(汗) 今まで動いていたのは、ソフト側がお行儀が良かったからだと思います。(^^;;

それにしても、512ラインとは大きいですね。これは、SRの採用しているグラフィックコントローラが、もともとY方向 512ラインまであった名残ではないか?

とか考えていますが、真相は定かでは有りません。 ということは、X方向も512ドットもあったのかな?

拡張ROMカートリッジの対応

2003年10月16日

かなり、遅くなってしまいましたが、 16Kbの拡張ROMカートリッジをセットできるようにしていました。 Unix版ではできていたのですが、Windows版では出来てなかったんです。

ただし、問題がありました。iP6 では、8KB のROMを 2個にして セットするようになっています。 実際に、8KBのROMが2個刺さっているので、これ自体は間違いではないのですが、 PC6001Vでは、16kb のROMを 1個でセットするようになっているようです。

エミュレータによって、ファイルを分割しておかないといけないとなると、不便ですし、 というわけで、16KB 一式で、セットできるようにしました。

コマンドラインオプションを使えば、従来どおりの 8KB x 2 のセットもできます。

2003/11/23 追記

↑と思っていたんですが、実は iP6は初めから、16KBx1のセットも出来るみたいです。(汗) 1つ目のROMで最大16KBまで読めるところまで読んで、2つ目のROMがセットされていたら、最大8KBまで読めるところまで読むんですね。(^^; 知りませんでした。 というわけで、元に戻しました。

って、ちゃんとソースリストに書いてあるじゃないですか。(汗) 私の見落としです。うーん。恥ずかしい限りです。

FM音源 (YM-2203)

2003年10月 13日

FM音源のYM-2203ですが、内部カウンタをカウントアップするようにしました。 とはいっても、カウントアップ値が良く分かってないので、いい加減ですが・・。

あと、YM-2203のステータスを返すようにしました。 おまけに、BUSYも返すようにしました。 といっても、読み出し回数を数えて、何回目までBUSYを返して、それ以降はREADYを返すというだけですが・・。

以上で、TimerA と、TimerBのオーバーフローに対応した(つもり)です。(^^; これで、ようやく、SR付属の泣き声プログラムが、鳴るようになりましたが。 まだまだ、何を言っているかわからないといことは、やはりまだまだだめなようですが・・。(汗)

フルスクリーン

2003年10月某日

Windows版でフルスクリーンを実装していました。 窓の枠をとって、メニューをとって、解像度を変えるだけなんですね・・。(^^;; 初め、メニューの取り方が分からずに、四苦八苦しておりましたが、ようやく分かりました。

ただし、320x200になっていると、強制的に、640x400にしてから、フルスクリーンにします。(汗) 何故かと言うと、SRでは、640x400の解像度が必要になるときがあるからと、 設定ダイアログがでかすぎて、320x200では、入りきらないからです。(汗)

ちなみに、まだまだ未公開ですが、SDL版にも実装しました。 初め、SDL_WM_ToggleFullScreen で、何で切り替わらないの〜。と思っていたんですが、 Windows では SDL_SetVideoModeでやらないといけないらしい・・。(^^;; うーん。変なの。(^^;

あと、Windows版で、フルスクリーンのときは、右クリックで、メニューがでるようにしました。(^^;

でも、実は、640x400じゃなくて、640x480の解像度にしています。何らかの情報を表示したいので。

SDLのサウンド

2003年10月某日

SDLのサウンドがどうもおかしいので、生成された音楽データをファイルに書き出してみて、唖然・・。 前半分しか生成されておらず、後半は0のままだったり・・。(^^; これだと、どうやっても、ノイズのりまくりは必死です。 うーん。同じ過ちを、WinSoundでもやっていたよなぁ・・。とか思ってしまった。

これを直したので、だいぶましになったけど、まだまだプチノイズがたっぷり入っています。(汗) やっぱり、SDL内部のバッファの数が2個では足りないような気がするけど・・。 勝手に増やしてもいいんだろうか?(^^;;

ディスクへのアクセス時にウエイト

2003年10月5日

ディスクへのアクセス時に、若干のウエイトを入れるようにしました。(^^; これで、ディスクから絵を読み込んでくるタイプのソフトで、ウエイトしないもの (ハイドライドのタイトル画面など)が、なんとか見れるようになると思います。

PC-6001 I/Oポート

2003年9月20日

PC-6001 のI/Oポートは、80hからDFHまでしかないとか。 E0H - FFHは、存在しないらし・・。

確かに考えてみると、E0Hからは、音声合成なので、PC-6001にはない。 F0Hからは、メモリーコントローラなんだけど、PC-6001には、そもそもバンク切り替えの必要がないので、 ないんですよね。

しかし、なんとiP6 Plusでは、PC-6001でも、I/O PORTのF0h を出力していて、 わざわざメモリー参照エラーの原因を作っていたそうです。(汗)

結局、F0h以降は、PC-6001 と、mk2SR/66SR のモード6では、存在しないらしいことが分かりました。(^^; mk2SR/66SR でも、モード5などでは、存在します。

2ms Timer割り込みの発生条件

2003年9月16日

2ms Timer の発生条件は、前から手を焼いていました。PC-6001では、発生を禁止させる方法が1通りだったのが、mk2以降 2通りになったのですが、どうも ちゃんと禁止できていないかったからです。(汗)

これも、偶然発見しました。Interrupt 関数の中にも、条件を追加しないといけないようです。(汗)

これで、いくつかのゲームソフトは、正常に起動するようになったとおもいますが・・。(^^;; どうなんでしょうか?(汗)

そうです!あのゲームです。

インデックスに戻る

日記7に戻る