2006年05月28日

マルチプレーンモード 7 / Xak2 2

Xak2 の画面はしょっぱなからこんな感じで。

xak2_2.PNG

とりあえずそれは置いておいて、

面倒だなぁと思いながらも、Xak2の件もあるし、あまり実機の検証も細かくやってなかったので、r060527までに実装したマルチプレーンモード拡張アクセス時の比較読み出しとパターンレジスタ更新の機能のテストプログラムを組んでみる。
VA-EG上で実機の結果と一致すればOK。

そうしたら、ちゃんとバグが検出された。めでたい。

4プレーンあるうちの一部のプレーンだけ選択して書き込みをした場合に、
書き込み先のプレーンと、更新するパターンレジスタが間違っていた。
修正。

Xak2の表示の問題もこれが原因だったみたいで、無事正常に表示。

xak2_3.PNG

xak2_4.PNG

posted by Shinra at 22:04| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2006年05月27日

r060527 公開

r060527を公開しました。

ソーサリアンを楽しんでください(^^)
posted by Shinra at 21:56| Comment(2) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

マルチプレーンモード 6

比較読み出し機能を実装
→BASIC のPAINT命令が正しく動作
posted by Shinra at 21:54| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

マルチプレーンモード 5 / ソーサリアン 5

リリース向けビルドしたら画面がおかしなことに。

sorcerian5.PNG

デバッグ用ビルドだと正常。
こういうのはとっても困る。リリース向けビルドしたやつはブレークポイントとかのデバッグ実行の機能が使えないし調査が・・・

結局原因は、
GVRAMからのワード読み込みルーチン

return _gvram_rd(address) | (_gvram_rd(address + 1) << 8);

上位バイトと下位バイトを読み込んで結合して返却しているのだが、
_gvram_rd(address)と_gvram_rd(address+1)の実行順序が、
デバッグ用ビルドとリリース用ビルドとで入れ替わるらしい。
_gvram_rd(address) → _gvram_rd(address+1)
の順に実行されることを意図していて、それが狂うとパターンレジスタの更新の順序も狂ってしまい、表示がおかしくなっていた。

Cの初歩的ミスの気もするが(汗

ちなみに、上記スクリーンショットのタイトルバーに出ているとおり、
当方のマシン(Pentium 4 2.4GHz)では、41FPS。
3.5GHzくらいのCPUなら(あるのかどうかしらないが)フル(56FPS)で
表示されるだろうか・・・?
posted by Shinra at 00:35| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2006年05月25日

RS-232C / Xak2

イメージ化したら、起動したくなるでしょ。


起動させたらPC-Engineの画面になるまえに停止。
RS-232Cのポートを読みに行って、未実装なために期待した値が帰らなくて
無限ループしているらしい。

9801のRS-232Cのポートの処理をそのままVA側につなげてみる。
無事起動。


xak2_1.PNG


あちこちでグラフィックが微妙におかしい。
上記の画面でも、キャラが真っ青だし。

# マイクロキャビンのは98/VA両用なんだから、np2で動かせばいいじゃん、
# っていうつっこみはしないでください(笑)
posted by Shinra at 21:50| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

XDISK2VA r060525 公開

VAのメインメモリが512Kの場合に、BASICでOverflowエラーが起きて実行できない問題がありました。
修正して公開しました。



動作確認を兼ねてXak2のディスクイメージを作成しようとしたところ、
DISK2のトラック2でどうしてもハングアップする。
FDDサブシステム側のプログラムがどっかをさまよってしまって、メイン側
とのハンドシェイクに戻ってこない。

オリジナルXDISK2でも同様にトラック2で読み取りがとまってしまう。

PC-9801+MAKE_HDではイメージ化できたが、その際の表示によると、
トラック2と3は特殊なフォーマットになっていて、通常のセクタの間にIDが
異常なセクタがはさんである。これをFDDサブシステムで読み取るときに何か
不都合が出るんだろうか。

ということで、ごめんなさい、Xak2はXDISK2VAでイメージ化できませんm(__)m
posted by Shinra at 21:43| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2006年05月24日

マルチプレーンモード 4

パターンレジスタ使用開始バイト指定(ポート552h)の実装。
ライト時のパターンレジスタ更新の実装。

テクマニだと、ライト時どのデータがパターンレジスタに入るのか不明。
CPUから書き込んだ値かと思ったら、書き込む前にGVRAMに入っているデータだった。

書き込み時にパターンレジスタの値が書き込まれるモードに設定して、
GVRAMのアドレスの小さいほうから大きい方へ順にライトしていくだけで、
GVRAM内のデータを1バイト移動させることができる。
4プレーン同時に。

へぇー。

posted by Shinra at 23:59| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2006年05月22日

マルチプレーンモード 3

パターンレジスタ使用開始バイト指定(ポート550h)の実装。

拡張アクセスモードは全く使ったこと無いから、実機で動作を調べながら。
posted by Shinra at 21:11| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2006年05月21日

マルチプレーンモード 2 / ソーサリアン 4

昨日のは、幅が7/8に縮小されて表示されていた(汗
for文でi<8とするところがi<7になっていた・・・
正しい表示はこう。

sorcerian3.PNG


ところで、1プレーンで最大64Kバイトのフレームバッファが使えるはずなのだが、
実際は、前半の32Kと後半の32Kは分離されていて、前半と後半をまたがった
フレームバッファは設定できないようだ。
# 試しにV3 BASICで、buffer 0,640,800,4 とやると、Video Memory Overflowの
# エラーになる。
アドレスは7fffhでマスクされているようで、a000:7fffの1バイト(8ドット)の次(右隣)に表示されるのは、a000:0000 となる。
a000:0000〜7fffと、a000:8000〜ffffのどちらを表示させるかの切り替えは、
FSA(ポート200h〜202h)のbit17で指定するらしい。これが0なら0000〜7fff、
1なら8000〜ffffとなる。DSA(ポート20eh〜210h)のbit17は無視され、DSAは
18bitデータではなく17bitとして扱われている。

なんだか美しくない仕様な気がするけれど、88や98との互換性のために
こうなっているのかも。


やっつけで、マルチプレーンモードの拡張アクセスモードの実装をしてみる。
一時は何にも表示されなくなったりしたが、
最終的には、

sorcerian4.PNG

一応表示されているみたい。
posted by Shinra at 19:40| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2006年05月20日

マルチプレーンモード / ソーサリアン 3

マルチプレーンモードの表示の実装に取り掛かってみる。

グラフィック画面制御パラメータ(ポート200h〜27fh、表示開始アドレスの設定など)は、シングルプレーンモード1bit/pixelと同じだろうと思っていたら、違った。
# このあたりのことはテクマニに書いてない・・・

シングルプレーンモード4bit/pixelの場合と同じ。フレームバッファ幅640ドットの場合はFBW(フレームバッファの幅をバイトで指定)=320となり、DSA(表示開始アドレス)を4変化させれば水平方向に8ドットスクロールする。
CPUからVRAMをみた場合には、フレームバッファ幅は640/8=80バイト、アドレスが4変化すれば4*8=32ドットずれることになるのだが。

どうも、表示回路からVRAMを見るときは、4bit/pixelマルチプレーンモードであっても、シングルプレーンモードに見えているっぽい。

# ただ、ドットアドレス(ポート208h)だけはシングルプレーンのときと指定方法が若干違う。

ということで、ソーサリアンのタイトルは表示できた。

sorcerian1.PNG


ゲーム画面はまだこんな感じ。

sorcerian2.PNG


よく見ると、画面が左に寄ってて変なのかな??
posted by Shinra at 23:35| Comment(0) | TrackBack(1) | EMU | このブログの読者になる | 更新情報をチェックする

2006年05月17日

XDISK2VA r060517 公開

現状で公開。
ときどき転送が途中で止まったりしていまいち不安定なんだけど・・・

公開を快く承諾してくださった原作者のciscさんに感謝します。

XDISK2VAを使うことにより、
VA→Windowsのファイル転送手段がなくても、
VA2/3でV1/V2のシステムディスクがなくてXDISK2が使えない場合でも、
PC-Engineが起動できれば
ROMの吸出しとディスクイメージの作成ができるようになります。

RS-232Cリバースケーブルが必要です。なんとかして用意してください。

需要があるのかどうか良く分からない状況で開発していますので、
これが役に立った、ということがあれば、この書き込みにでもコメントなど
していただけると、非常にありがたいです。
posted by Shinra at 21:24| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

XDISK2 13

VA側の状況表示が、画面最下行までいってもスクロールアップしない。
文字表示にテキストBIOS使っているとダメみたい。
スクリーンエディタBIOSに戻してみる。
# 元々スクリーンエディタBIOSにしていたけれど、エスケープシーケンスが
# 無効になるのでテキストBIOSに変更していた。
色付けはエスケープシーケンスを使わずにテキストBIOSのファンクションで。

posted by Shinra at 21:14| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2006年05月16日

XDISK2 12

動作確認
オリジナルXDISK2 と、移植版とで同じフロッピーをイメージ化して比較。
問題なし。

しばらくXDISK2が動かせなくて悩む。88へのファイル転送がどうしても
失敗する。(88側でLine buffer overflowエラーが発生)
ケーブルをさしなおしたりVA(88)を再起動したり、V2モードのシステム
ディスクを変えてみたりしてもだめ。
Windowsを再起動したらあっさり直った(汗

posted by Shinra at 22:21| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2006年05月15日

XDISK2 11

さっそくROMの転送に対応

・途中でハング
必要なサイズ以上のデータをRLE圧縮しようとしているらしい。
→RLE処理の移植の誤り
Z80のINC命令はオペランドが16bitの場合、フラグが変化しない。

フラグを変化させる処理
inc hl
jr z,xxx ← inc hlの影響を受けない



フラグを変化させる処理
inc bx ←ここでフラグが変化してしまう。
jz xxx ←inc bxの結果にしたがってジャンプ

に翻訳していたので、おかしくなっていた。

ディスクイメージ転送時も、特定のトラックだけ極端に
サイズが大きくなることがあって、なんか変だとは思ってたけれど
きっとこれが原因

・Windowsに転送されたデータが一部壊れている
→圧縮前のデータのバッファと、圧縮後のデータのバッファの領域が
重なっていたのが問題
圧縮後に圧縮前のデータが破壊されてしまう。
RLE圧縮してみてサイズが小さくならなければ圧縮前のデータを送信
するので、圧縮前のデータが残っている必要がある。

どちらもディスクイメージ転送時にも発生しうる問題なので、
見つかって良かった・・・
posted by Shinra at 23:53| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2006年05月13日

XDISK2 10

今日はwindows側のプログラムを修正

といっても、表示メッセージを変えたのと、転送するBASICプログラムのファイル名をXDISK2.BASからXDISK2VA.BASに変えただけ。

将来的にはROMの転送にも対応させたい。
posted by Shinra at 23:30| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2006年05月12日

XDISK2 9

Windows側から転送できるように、
プログラムをBASICのDATA文に展開して、デコードしてから実行できるように
BASICのプログラムを作成。

BASICいじるの自体久しぶりで、文字列中に"を入れるにはどうしたらいいんだっけ、とか、do〜whileはないんだっけ、とか (無いのだ)、そんな状況。行番号がわずらわしい(笑)

オリジナルのxdisk2.basはプログラムを凝ったエンコードして、デコード自体もマシン語でやってるけれど、
それを解析したりしてそこまでがんばる気力もないので、単純にHEX$使った16進文字列でエンコード。転送もデコードもV1/2モード用のオリジナルよりはるかに遅くなってしまったのは悲しいけれども。
posted by Shinra at 23:20| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2006年05月11日

XDISK2 8

今まで.comプログラムとして作っていたので、
今度はBASICからBLOADして呼び出せるように変更した。
posted by Shinra at 20:45| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

2006年05月10日

XDISK2 7

転送終了のコマンドを実装。
でも、以下の異常が。
・できたD88のサイズがヘン。各トラックの最初の3セクタのサイズが各1536バイトになっている。
・セクタの内容がでたらめ。

犯していたミスは2つ。
・cpi命令を以下のように翻訳していた

cmp al,[bx]
inc bx
dec ch

dec cxが正しい (djnzと混同したらしい・・・)
・以下のZ80コードを

bit 6,(ix+idr_density)
jr nc,IDCalcSectorSize_2

以下のように翻訳した。(ixはsiにマッピング)

test byte ptr [si+idr_density], 01000000b
jnc IDCalcSectorSize_2

個別の命令をそれぞれ翻訳したものとしては正しいが、
どうもZ80側のコードは、bit命令でCYが変化することを期待しているようで
(本を見る限りbitでCYは変化しないはずなんだけど・・・)
test命令ではCYは変化しないのでうまく動作しないと。
jncをjzに変えたところ解決。


無事ディスクイメージが転送できるようになった。
しんどかった〜〜〜


posted by Shinra at 22:21| Comment(0) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。