作りたいものに妥協しないために、会社を興してまで完成させた作品です。うれろー、うれろー。

2013年08月01日

PC-88とX1のタイミング調整、完結編

ここ最近、結構な工数を投入していたPC-88とX1のタイミング調整ですが、
今晩のリリースで漸く一段落つきました。

くれゆに様のサイトでPC-88のメモリウェイトの調査が公開されたり、
X1センターの佐藤様からX1のVRAMのウェイトの情報を頂いたり、
といったことがトリガーで始まった作業でしたが。

そのまま勢いで、MB8877やuPD765Aを、フロッピードライブの回転速度に
あわせたタイミングで動作するようにしたり、
Z80DMAのバスリクエストや開放、データ転送に掛かる時間を再現したり、
それに合わせて各CPUにDMA中のクロックだけ空転する処理を入れたり。

思いのほか、大工事になってしまいました(苦笑)
FDCのタイミング調整は、来年辺りにやる予定だったんだけどなー。

130801-1.png

X1で長年の懸案だった、アークスのオープニングの暴走が解決したり、
PC-88のヴァリス2のオープニングが、結構な按配で動くようになったり、
投入した工数に見合うだけの成果は得られたんじゃないかなあと思います。

かなり気合入れて作業しましたので、よろしければチェックプリーズです。


(2013/8/4 2:15追記)
仮バイナリを以下にアップしました。
http://homepage3.nifty.com/takeda-toshiya/00tmp/x1.zip

X1turboでD'がリードエラーになる問題を修正しました。
Z80DMAの問題で、最後の1byteを読みに行かずにLOST DATAしてたようです。

TVRAMのウェイトを、仮に0に変更しました。
PCG定義で失敗するソフトで、これで動くようにならないかご確認お願いいたします。
Worryは、先日の修正より以前から動いてないようです。
これとは別件の問題なんじゃないかと思います。


(2013/8/6 1:50追記)
アルファの件の対応をした仮バイナリをアップしました。
URLは上記と同様です。

ディスクの読み込みが遅い件ですが、スキューの影響のようです。
D88形式であれば、実ディスク上のセクタの並びが確認できるのですが、
2D形式などのベタイメージではその辺の情報がわかりませんので、
セクタ番号順に並んでいると仮定してトラックイメージを作っています。
そのため、最悪のケースで、次のセクタを読むのにディスクが1周回るまで
待つことになってしまって、タイミングがずれるようです。

ゲーム開始後、画面の右上が化ける件は、ちょっと難しいです。
軽くログを確認した限りでは、ディスクを読みつつ何か別の作業をしてて、
そちらが終わったら、ディスクの読み込みが完了していなくても、
Z80DMAをリセットして、読み込みを打ち切ってしまっているようでした。
従来の実装では、ディスク読み込みが高速だったため、問題なかったのですが。

取り敢えず、ベタイメージの場合は、次のセクタを読み込むまでの待ち時間を
固定値にするのと、アルファ限定で、ディスクの読み込み速度を速くすることで
逃げています。


(2013/8/7 0:30追記)
DOMEでFM音源を認識しない不具合を修正しました。
仮バイナリのURLは同上。

FM音源にデータを書き込んで、ステータスのBUSYがたつのを確認することで、
FM音源の存在判定をしていました。
現状の実装では、常にBUSYはオフになっていたのが問題だったようです。


(2013/8/8 1:40追記)
メインサイトの方で正式リリースしました。
仮バイナリの変更のほか、テキスト画面の表示上の不具合も修正しています。


(2013/8/9 0:40追記)
130809-1.png
X1turboでローグアライアンスが起動しない件の修正をしました。
ついでにCZ-8BM2とマウス対応も。

#後はWorryとばってんタヌキかな?こっちはまだ目処が立ってません。
#音関係もちょっと時間ください。


(2013/8/10 2:00追記)
130810-1.png
テープ版のWorryが動作するようになりました。
APSSもサポート出来てるような、出来てないような。

明日から帰省するため、数日IP Unreachableになるかもです。


(2013/8/23 1:00追記)
130823-1.png130823-2.png
ばってんタヌキが起動しない件、ZENONでスペースキーに反応しない件を修正しました。
仮バイナリは以下略。

ばってんタヌキは、EMMが存在する場合に、ディスクを丸ごとEMMに読み込みますが、
このときトラック0の存在しないセクタを読みにいくようになっています。
このとき、REC NOT FOUNDを返すと、存在しないセクタを延々と読もうとして、
結局タイムアウトしてしまっていたようです。

取り敢えず、ドライブレジスタを弄った後、最初にセクタが見つかるまでは、
REC NOT FOUNDを返さないように修正しましたが、これでいいのかなあ。

ZENONは、キーを押してサブCPUから割り込み要求があったときに、
Z80では割り込みは発生しないけど、サブCPUにベクタとキー情報を読みに来るようです。
このとき、サブCPU内で、次の割込みが発生しなくなってしまっていました。
割り込みへの応答でなくても、サブCPUからデータを受信したら、割り込み状態を
解除するように修正することで解決しています。

#別件が終わったらリリースします。
posted by 武田 at 02:07| Comment(9) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2013年07月27日

X1などのタイミング調整

ここ最近は、主にX1のタイミング調整をやっていました。
以下、仮バイナリです。(PC-88とMZ-2500はおまけ)
http://homepage3.nifty.com/takeda-toshiya/00tmp/pc88_x1_mz25.zip

FDCで、データ転送やマルチセクタ時の次のセクタの発見に掛かる時間を、
データ密度と回転数から求めるようにしたり、
(プリアンブル、ポストアンブルを考慮してないので、やや不正確)
Z80DMAで、バイト転送モード以外でちゃんとCPUにバスを要求するようにしたり、
転送に掛かったクロック数だけCPUを止めてやったり、
VRAM/TVRAM,PSG,サブCPUにアクセスする際にウェイトを掛けてやったり、

かなり実機に近いタイミングで動くようになったんじゃないかと思います。
アークス2のオープニングも、変なパッチなしで動作するようになりました。

MB8877だけでなく、uPD765Aも同様の修正をしていますので、
PC-8801の方もそれなりに改善されてるんじゃないかなと思います。

#X1のVRAMウェイトは、例によってX1センターの佐藤様に情報を頂きました。
#多謝多謝です。
posted by 武田 at 02:22| Comment(0) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2013年07月20日

PC-88とX1のプチ作業中

暫くお休みしてましたが、PC-88とX1を少々作業中です。
週末にはリリースできると思いますが、取り敢えずの仮バイナリです。
http://homepage3.nifty.com/takeda-toshiya/00tmp/x1turbo.zip
PC-88は、主にメモリウェイトやCRTCの垂直同期周波数の修正を行いました。
以下のサイトの情報を参考にさせていただきました。(多謝多謝>くれゆに様)
各モードとも、実機計測結果にかなり近い値が得られるようになっています。
http://www7b.biglobe.ne.jp/~crazyunit/pc88.html

後はVRAM周りのウェイトの調整ですね。
こちらは情報がないので、自分で実機調査しないといけないのですが、
それだけの工数が取れるかどうか(苦笑)

X1の方は、サブCPUやキーボードのCPU内蔵ROMを使用したときの問題の修正です。
非X1turboなサブCPUを使用している場合にカセットの検出に失敗する件や、
X1turboにX1仕様のキーボードが繋がったときに入力できない問題を修正しました。
また、80C48のクロック管理の問題から、キーリピートが速くなっていた件も、
これで解決しているのではないかと思います。
また、擬似サブCPUを使用する場合も、キーリピートの速さが内蔵ROM使用時と
同等になるように再調整しました。

#御心当りの方、よろしければ評価お願いいたします。m(_ _)m

PS.いっさくじつ、みそじからななつあまりました。おーのー。

(2013/7/23 2:20追記)
すみません、仮バイナリのURLが間違ってました。
今晩中にリリースしますので、メインサイトからダウンロードをお願いいたします。

(2013/7/25 2:20追記)
x1centerの情報をもとに、テキスト画面の縦倍・横倍表示の実装を修正しました。
(多謝多謝>佐藤様)
また、昨晩の修正で、設定をiniファイルに保存するようになっています。
posted by 武田 at 01:29| Comment(0) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2013年05月09日

X1のサブCPU

MZ-2200はちょっとお休みして、X1のサブCPUの改良中です。

従来のX1エミュは、Z80から見た動作を再現するような実装をしていましたが、
細かい挙動の違い(特にキー割込み)が不具合の元になっていました。

そこで、サブCPUとキーボードの周辺回路について、CPUレベルからガチンコで
エミュレーションするように改良しています。
(サブCPU、キーボードの内蔵ROMイメージが無い場合は従来動作をします)

8255のモード1,2のハンドシェイク周りの実装に梃子摺りましたが、
一通りは動作するようになりましたので、バイナリだけ仮公開しておきます。
80C48/80C49の内蔵ROMを吸い出せる方はお試しください。

http://homepage3.nifty.com/takeda-toshiya/00tmp/x1turbo.zip

X1turboのキーボードのモードA/Bの切り替えもサポートしています。
また、テキスト画面の縦2倍表示の不具合も修正しています。

CPUの内蔵ROMのファイル名は、
ノーマルX1の場合は、SUBROM.X1, KBDROM.X1、
X1turboの場合は、SUBROM.X1T, KBDROM.X1T、としてください。

※ サブCPUについては、データレコーダ内蔵の機種のものを想定しています。
外付けのCZ-8RL1と接続するタイプのROMの動作確認はできていません。

他の機種の作業もありますので、正式リリースはまた後日にでも。

#多大なご協力、多謝多謝>佐藤様
posted by 武田 at 03:26| Comment(3) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2013年04月09日

MZ-1M01対応の作業状況

音沙汰ないけど、作業は細々と進めてますよーというご報告。
#主にOh!石さんと常岡さん向け。

IPLでCMTから1段目のローダをロードして、
ローダに処理を移して、
Z80側と8088側のプログラムをロードして、
Z80PIOでハンドシェイクして8088側のプログラムを転送して、
Z80と8088でそれぞれロードしたプログラムに処理を移して、
8088から何かコマンドを受信して、
Z80がそれに対する応答が出来ずに止まってしまう、

というところまで処理が進むようになりました。
取り敢えず、Z80から8088への転送は問題なさそうですね。
8088からZ80への転送の問題か、Z80側のコマンド実行の問題か。

楽観的な予想では、あと1週間くらいの工数を投入すればいけそうですが、
それだけの工数を確保できるのが何時になるかが微妙です(苦笑)


(2013/4/12 0:10追記)
Z-80PIOの双方向モード時のハンドシェイク周りを修正してたら、
何か動くようになっちゃいました(を
デモ動画をニコニコ動画の方にアップしてみましたのでご参照ください。



コモン側を結構弄ってるので、正式リリースは他機種の動作確認後にでも。
仮バイナリはこちらです。
http://homepage3.nifty.com/takeda-toshiya/00tmp/mz2200.zip

その他、CMTでMZT形式を読み込むとき、アトリビュートが01hの場合のみ、
直接メモリにロードするように変更しました。
BASICのプログラムなどは、内部的に波形データを生成しています。

EmuZ-700などでは、MZTを波形データに変換するのは以前からやっていたのですが、
MZ-80B/2000ではうまくロードできないためオミットしていました。
今回、BASIC-16のテープの波形整形していて気付いたのですが、
 ピーギャー(インフォメーションブロック)、
 無音1秒弱、
 ピーギャー(データブロック)
の、無音の部分がなかったのが原因だったみたいです。
posted by 武田 at 23:59| Comment(4) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2013年03月23日

eFP-200リリースしました

CASIO FP-200をサポートしてみました。

SERVICE MANUALを見つけたのが切っ掛けだったのですが、
最近MESSの方でもKale氏が作業してたみたいですね。
トリガー同じだったかも(苦笑)

明日は朝が早いので、スクリーンショットだけペタペタ。

130323-1.png130323-2.png
初回起動時はRESETコマンドで要メモリ初期化。

130323-3.png
RTCとしてRP-5C01が乗ってます。

130323-4.png130323-5.png
グラフィック周り。テキストとグラフィックの切り替えはちょっと面倒です。

130323-6.png
簡易表言語CETLを起動してみたところ。
posted by 武田 at 23:56| Comment(0) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2013年03月16日

EmuZ-2200試作

EmuZ-2000 TF-Editionが配布停止になってるので、ちょっと作ってみました。
名前が被らないように、2200ということで(苦笑)

EmuZ-2500からいらないデバイスを削って、メモリとCRTC周りだけ実装しただけなので、
実作業時間は2時間程度ですね。
正式なリリースはもうちょっと先になるかと思います。

http://homepage3.nifty.com/takeda-toshiya/00tmp/mz2200.zip

130316-1.png130316-2.png

テープイメージは、*.DAT, *.MZT, *.MTW, *.WAVに対応しています。
*.DATと*.MZTと*.MTWの前半部分は、メモリに直に読み込んで、0番地から実行します。
ディスクイメージは、私の他のエミュレータでサポートしているのと同じです。

MZ-80B対応は、まあおいおい、その内にでも。
将来的に16bitボードを乗っける予定です。(というかこれが目的です)


(2013/3/18 2:40追記)
アーカイブを更新しました。
MZ-80BとMZ-1R12に対応した他、グリーンモニタ時に背景色を無視するように修正しています。
URLは上と同じです。
posted by 武田 at 02:56| Comment(10) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2012年10月23日

色々更新

色々更新しました。

- HuC6280, i286, i386をMAME 0.147ベースに更新しました
- Family Basicでジョイスティックが機能していなかったのを修正しました
- PC-8801MA/PC-98Dで、V1(S)モードのVRAMウェイトを変更しました
- X1twinのPCエンジン部分を更新しました

121023-1.png
個人的に一番嬉しいのは、MZ-2800のデモが完走するようになった事だったり。
ずっと65536色モードのリードモディファイライトを疑っていたんですが、
まさかCPUの問題だったとは思いませんでした(苦笑)

X1twinのPCエンジン部分でガンヘッドが動くようになったのも嬉しいですね。
CPUとかVDCとか色々更新しましたが、結局のところは348KBなROMイメージの
ミラーリングの問題だったみたいです。
まあVDCの修正で、源平討魔伝の画面化けも直ってるので結果オーライ。

PC-88のV1(S)モードの件は、最近某スレで指摘されてたみたいなので。
こんなもんで大丈夫そうですか?>御心当り


(2012/10/25 3:00更新)
PC-88のV1(S)モードで、DMA転送時のウェイト値も調整しました。
4MHz時はもうちょっと速く、8MHzはもうちょっと遅くしています。


(2012/10/31 3:30更新)
http://homepage3.nifty.com/takeda-toshiya/00tmp/pc8001mk2sr.zip
uPD765AのRead Diagnosticsを修正した仮バージョンです。
PC-8001mkIISR対応の方はまだ実験的なものです。
80SR版XEVIOUSは動いてるっぽいけど、他の画面モードがあってるか不明。
posted by 武田 at 21:07| Comment(16) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2012年08月23日

MS-DOS Playerの更新

MS-DOS PlayerのCPUコアを、i286からi386に変更しました。
DDEBというデバッガをBIOS解析によく使用しているのですが、こいつが要i386でして。
これをx64環境でも使えるようにしたかったんです。

i386コアは例によってMAMEから引っ張ってきました。
今回の作業は、MAMEのソースをなるたけ変更せずに組み込む実験も兼ねてたりします。

PS.
溜まってるメールやコメントへの返信は、週末辺りからぽそぽそ進めていく予定です。
もうちょっとお時間ください。
posted by 武田 at 01:28| Comment(6) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2012年08月18日

ePC-8801MAのプチ更新

本業多忙とか娘に遊んでもらうとか、色々忙しくて長いことお休みしておりましたが、
ちょっと時間が取れましたので作業してみました。

例によってPC-8801MAの仮バイナリです。
http://homepage3.nifty.com/takeda-toshiya/00tmp/pc8801ma.zip

主な更新内容は以下の通りです。

1) 単一バイナリでGDI/Direct3D9に両対応しました。
2) テキストアトリビュート周りを修正しました。
3) mamefm.dll(V1)に対応しました。

2)は、ブラスティーの画面化けとかメルトダウンの敵弾化けが直ってます。
3)は、exeと同じディレクトリにmamefm.dllが存在すると自動的に使用されます。

本格的な活動再開はもうちょっと後になるかと思います。
posted by 武田 at 01:26| Comment(3) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2012年03月06日

ePC-8801MA更新

2/22から溜まっていた更新を反映した新バージョンをリリースしました。

120306-4.png120306-5.png

追加で、MISTY BLUEがブートしない件と、アルファのアトリビュートの件を修正しました。

MISTY BLUEの方は、ADPCMのデータ書き込み時にIRQが発生していたのが原因でした。
Reg #29で、タイマーとADPCMそれぞれのIRQのマスクが出来るようになっていますが、
このレジスタはMISTY BLUEでは書き込みが行われていないようです。
そこで、Reg#29の初期値として、タイマーIRQだけ発生するように修正しています。


(2012/3/15 1:50追記)
120315-1.png120315-2.png

新しいバージョンをリリースしました。
データレコーダをサポートした他、リップスティックADVの音楽のテンポが遅くなる
不具合を修正しています。
また、テンキーのコンマを、CTRL+フルキーのコンマで入力できるようにしました。

細かい使い勝手の改良として、CPUクロックを切り替えた後、再起動しなくても
リセットで即反映させられるようにしました。
PC-88だと割と切り替える機会がありますので、地味に便利になったかと思います。

内部的には、一旦VMクラスのインスタンスを破棄してnewしなおして、挿入されていた
フロッピーディスクを挿し戻すという、ちょっと乱暴な対応をしています(苦笑)
イベントマネージャを弄くるより、こっちの方が楽かなーと。


(2012/3/20 2:00追記)
120320-1.png

一部ソフトでBGMのテンポが遅くなる件を改めて修正しました。
I/OでOPN(A)のクロックを切り替えられるという情報もあったのですが、
実際のところはサウンドIRQの取り回しの問題だったようです。
内蔵タイマのリセットやIRQマスクを設定するタイミングによっては、
1回タイマがあふれたときに、2回割り込みが発生するようですね。
posted by 武田 at 02:39| Comment(15) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2012年02月16日

ePC-8801MAリリース

PC-8801MAエミュレータをリリースしました。
PC-98DOのPC-88側を単体バイナリとして独立させたものです。
結構再現性が向上してきましたし、そろそろいいかなという事で。

それに伴い、PC-98DOで本来サポートされていない機能要素を廃止しています。
OPNA音源、ジョイスティック、辞書ROMとかです。
それらが必要な場合は、PC-8801MAのバイナリをお使いください。

120216-1.png

スタートレーダーが途中で止まってしまう問題が解決しました。

メッセージデータ中の、文字色変更などの制御コードを誤認識して、
メッセージにごみが表示されたりしていましたので、
CPUとかメモリ周りとか、そっちを色々疑って調査していたのですが。

実際にはVRAMのアクセス制御レジスタの問題でした。
拡張アクセスモードに入ったら、独立アクセスモードで使っている、
VRAMプレーンの選択レジスタをクリアする必要があったようでして。

#そんなん分かるかいな(苦笑)

CPUの問題の切り分けのため、Z80コアを最新のMAMEベースで再実装しています。
何か他の機種で影響が出てましたらご報告いただけますと幸い。

あと必要な機能としては、主にデータレコーダのサポートですかね。
ビデオアートボードとかは需要ありますでしょうか。
と言っても、仕様も判らないし、ボードを使うソフトも当てがないんですが。


(2012/2/17 2:45追記)
120217-1.png
PC-8801FAのデモが途中で止まるようになっていたのを修正しました。
サイトの方も更新しましたので、そちらのバイナリをお使いください。

単にメモリウェイトを有効にするか無効にするかの差なんですが、
微妙なタイミング依存で問題が発生していたようです。


(2012/2/18 0:45追記)
Direct3D9のテストバイナリです。
Windows Vista/7などGDIが遅い環境で、従来のバイナリと比較して
パフォーマンスが改善しているか、テストにご協力ください。
Linuxなどの環境でWineで動作するかも確認していただけると幸いです。

http://homepage3.nifty.com/takeda-toshiya/00tmp/pc8801ma.zip

ついでにフルスクリーンで画面引き伸ばし時の画質を改善してみました。
Screen - Stretch Screenをチェックすると、アスペクト比を保って
画面全体に表示するようになっていますが、このときディスプレイの解像度が
仮想マシンの整数倍になっていないと、ドットの大きさにムラがありました。

これを、一旦ディスプレイより一回り大きく拡大して、それを縮小することで、
比較的綺麗にスケーリングするようになっています。
従来のGDIオンリーだと、重くて実用的な処理じゃなかったんですが…


(2012/2/18 1:15追記)
某所で要望がありましたので、サウンド合成の周波数の選択肢のうち、
48000Hzを55467Hzに変更してみました。
OPNA/OPNに与えるクロックは7987248Hz/3993624Hzにしてあります。

仮バイナリのURLは上と同じです。

#仮想マシン側で何か修正点がありましたらご指摘頂けますと幸いです。
#パッチ送って頂けたら益々幸いです(を


(2012/2/19 2:55追記)
120219-1.png
400ライン時、テキストアトリビュートから色を取得するように修正しました。
ご指摘多謝です。
上のURLの仮バイナリを更新していますので、お試しください。

FRの歯の鍵盤は、やっぱりメモリウェイト関係なんでしょうか。
具体的に、4/8MHz時に、RAM/高速RAM/VRAM/VRAM拡張/ROMのそれぞれで、
どれくらいウェイトが掛かるものか、何か情報ありましたら教えてください。

ついでに、画面のスケーリング周りにおいて、memcpyをループに置き換えることで、
私の環境だと10%ほど処理が軽くなりました。
計測した限りだと、memset>ループ>memcpyといった感じです、意外だなあ。

あと、全画面のスケーリングを伴わない場合に、メニューから画面キャプチャをしても
正しく画面が保存されない問題を修正しました。
仮想マシンが、可能な限りDirect3D9のバッファに直接描画するようにした関係で、
従来のDIBSectionなバッファが更新されていないことを忘れてました(苦笑)


(2012/2/20 5:00追記)
D88のマルチボリュームに対応しました。
まだ実験的な実装なので、念のためディスクイメージのバックアップをしてから
お試しください。
拡張子がD88かD77だと、無条件でD88フォーマットだと信じて末端まで読み込みます。
末端にゴミが付いているなどの場合は多分おかしな動作になりますのでご注意ください。

ディスク交換時に暫くディスクが抜けている状態をつくる処理はまだ未実装です。


(2012/2/20 23:55追記)
Direct3D9やD88マルチボリューム対応を含む形で、正式リリースしました。
ディスク交換時に、0.5秒間ディスクが抜かれた状態を維持するようになっていますので、
新九玉伝についても、普通にディスク交換できるようになっています。

メモリウェイトは、仮にm88と同じ程度のウェイトを掛けるようにしました。
ここから、FRのデモにあわせて微調整していく予定です。
マウスの件も、標準バスマウスを今後おいおいサポートしていくつもりです。
他の独自形式は…えーと、どうしよう(苦笑)

ボリューム調整については、今後の課題ということにさせてください。
1機種だけ考えるのであれば、ダイアログを作るのも簡単なことなんですが、
色々な機種で共用することを考えると、どう実装したものか悩ましいです。


(2012/2/21 2:05追記)
120221-1.png
さっき更新したばっかりなんですが(苦笑)
PC-8801mkII FRのデモにあわせてメモリウェイトを微調整しました。

4MHzモードで大体合ってるような、そうでもないような感じです。
頭とお尻のタイミングは大体合ってるけど、途中はちょっと外れたりします。


(2012/2/28 0:15追記)
120228-1.png120228-2.png
先日報告した通り、RST MUSIC DISK vol.12の画面化けを解決しました。
αの件と同様に、アトリビュートを例外処理で展開するようにしています。

また、KOB-SOFTのソフトが多分ブートするようになっているかと思います。
RTCの読み込みで詰まってたのですが、PC-8801MAも98DOと同様に、
uPD4990Aが使われているようです。

Windows7環境で画面とび音とびが発生する件は、一応対策をしてみました。
現象が再現しないのでこちらでは確認できていませんが、テストお願いいたします。

例によって仮バイナリを以下にアップしてあります。
http://homepage3.nifty.com/takeda-toshiya/00tmp/pc8801ma.zip
posted by 武田 at 23:13| Comment(52) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2012年02月06日

PC-98DOの更新(続き)

先ほど新バージョンをリリースしました。
前の記事のコメント欄が延びてきたので、リセットの意味も込みで。

前回からの更新内容は、

120203-1.png120203-2.png

ロマンシアやソーサリアンなどの画面周り(特にテキスト画面)の修正と、

120206-4.png

TELNET MUSIC-BOXの音が鳴らない不具合の修正と、

120203-3.png

うっかりOPNAをサポートしてしまった件ですね。

ファイナルゾーンの不具合は、調査が中々大変そうな感じです。
現象的には割り込み絡みかなあとは思っているのですが。

また不具合を見つけられましたらご報告いただけますと幸いです。

#PC-88/98側ともに、CPUクロックを変更したときの挙動の違いに戸惑ってます。
#まだまだ奥が深いですね。


あと忘れてましたが、MZ-2500でマウスが動かなくなっていたのも修正しています。
ハイドライド3のジョイスティックの件で、OPNのI/Oポートが出力設定のときの
リード動作を変更したときに、エンバグしてしまっていたようです。
OPNのI/Oポートの動作というより、その先の回路による挙動の違いみたいですね。


(2012/2/7 1:20追記)
PC-98DOの98モードで、8MHz時にフロッピーがブートしない不具合解決しました。
トラックが移動しないときに、シークコマンドが完了するまでのウェイトの問題でした。
タイミング依存の問題は、中々根絶が難しいです。

120207-1.png
ついでに、テキスト画面のセミグラフィック表示にも対応しました。
正直なところ、PC-98の時代になって、今更セミグラを使ってるソフトがあるとは
想像もしてなかったので、ちゃんと実装してなかったんですよね(苦笑)


(2012/2/9 23:30追記)
120209-1.png
メルヘンヴェールのテキスト画面の問題解決しました。
1行のデータは80桁+アトリビュート2byte*20個で120byteと決め打ちしてましたが、
こいつはアトリビュートを0個に設定していたようです。

仮バイナリは例によってここです。
http://homepage3.nifty.com/takeda-toshiya/00tmp/pc98do.zip


(2012/2/9 23:55追記)
120209-2.png
マンハッタンレクイエムもOKです。
400ラインとモノクロの両方のbitが成立したときだけ400ラインなんですね。


(2012/2/11 4:25追記)
120211-4.png120211-5.png
スタートレーダーやテグザーが起動しない問題を解決しました。
サブシステム側とメイン側でデータ転送する際に、ハンドシェイクに使用する、
8255のポートCの操作に問題があったようです。
直接ポートCを操作するのではなく、8255のコントロールレジスタにおいて、
モードを切り替える際に、各ポートのラッチがクリアされるのを利用していました。
この辺の8255の実装が不十分だったため、ハンドシェイクがうまくいかずに、
データの取りこぼしが発生していたようです。

起動しない系の不具合は、これで大体解決してるんじゃないかと思います。

120211-3.png
アルファの方は、何だか不可解なアトリビュートを設定していたため、
暫定的に例外処理で誤魔化すようにしておきました。
サウンドがならない件は、後日あらためて調査してみます。

サイトの方を更新していますので、新バイナリはそちらをお使いください。
posted by 武田 at 01:02| Comment(24) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2012年01月29日

ePC-98DO更新

例によってPC-8801側の修正です。

120129-1.png

ドラゴンナイト2で、エルフロゴのところで暴走していた不具合を修正しました。
既に割り込み要求がなされているときに、割り込みマスクされた場合に、
CPUに対して正しく割り込み要求がキャンセルされていなかったのが原因でした。

この修正で、新たに幾つか動くようになったソフトがあるかもしれません。

120129-2.png

Ys3で、画面上下に白い帯が表示される問題を修正しました。
ご報告有難うございます>たつまき様

多分スクロール関係で、ゴミが表示されてしまう部分を、テキスト画面の方で
不透明な黒色の豆腐を重ねて隠すようになっていたのですが、
アトリビュートが変なところで変化してしまっていたのが原因だったようです。

これであってるのか、ちょっと自信がないのですが。
何か変な副作用が発生しているようでしたらご報告お願いいたします。

#しかしメジャー機種をやるのも結構楽しいものですね。
#特にスクリーンショットが華やかになるのが(笑)


(2012/1/30 1:45追記)
120130-1.png
ドアドアのタイトルの色化けの件が解決しました。
ご指摘ありがとうございます>m様


(2012/1/30 2:35追記)
120130-2.png
ドラゴンナイト2でディスク交換できない不具合を修正しました。
PC-98側だとディスク交換時にIRQを発生させないといけなくて、
PC-88側だと逆にIRQを発生させてはいけない、みたいなんですが。
この差異がどこからくるのか、今後のためにも検証しないといけませんね。


(2012/1/31 1:25追記)
120131-1.png
キーボードのCAPS/カナロックが効いていなかった不具合と、
PC-88/98共にカレンダが機能していなかった不具合を修正しました。

#この時期には既にuPD1990AからuPD4990Aに切り替わってたのかと
#ちょっと新鮮な驚きです。


(2012/2/1 4:00追記)
120201-1.png
武将風雲録も一応動くようになりました。
CRTCが停止状態になってて、VRTC割り込みが発生しなくなっていたのが
原因なのですが、CRTCが停止していても割り込みは発生するものなのか、
それともCRTCが停止してしまっているのが問題だったのか。
その辺をもう少しちゃんと追求してから正式リリースに回そうかと思います。
仮バイナリはいつもの00tmpの下です。


(2012/2/1 23:55追記)
120202-2.png
ヴァリスのタイトル画面でフリーズする件が解決しました。
Z80コアの問題で、DD/FDを意味もなく命令頭に付けた場合でも、
正常に動作するように修正しています。
今晩辺り、もう少し作業したらリリースしますが、それまで
一応00tmpにも仮バイナリをアップしておきます。


(2012/2/3 3:30追記)
120203-1.png120203-2.png
ロマンシアで、カーソルが表示される件と、
ソーサリアンで、画面中央あたりに黒い帯が表示される件が解決しました。

どちらも問題はDMAオーバランが原因だったようです。
DMAからCRTCに送られるデータ長が、テキスト画面を表示するのに
不十分な場合、CRTCが停止するようになっていて、
このため、カーソルが表示されたり、黒帯(不透明黒のセミグラ)が
表示されることはない、というオチでした(苦笑)

最初ソーサリアンの方は、1行辺りのドット数の問題かと思って、
そういう修正の仮バイナリを出していたんですが、
これだとYs3で画面上下のマスクが正しく表示されないことに
後から気付きまして。

後、ロマンシアで画面が白黒になる問題も解決しています。
アナログパレットを指定した上で、デジタル表示に切り替えるような
変な動作をしているのですが、どうやらデジタル・アナログ切り替えは
パレットレジスタへのアクセス方法が異なるというだけで、
パレットの実態はどちらも同じだったというのが真相のようですね。

120203-3.png

あと、勢い余ってOPNAをサポートしてしまいました。
本当のPC-98DOはOPNまでなんですが、以前にジョイスティックも
既にサポートしてしまってるし、まいっかということで。

PC-98側は、PC-98DO+内蔵音源として認識するようになってます。
OPNAだけでDSPも86PCMも乗ってない、という状態です。

仮バイナリは例によってここです。
http://homepage3.nifty.com/takeda-toshiya/00tmp/pc98do.zip

今からサイト更新はしんどいので、そっちはまた週末にでも。
posted by 武田 at 15:08| Comment(24) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2012年01月26日

ざかりて、ざかりて

120125-1.png

PC-8801モードでシルフィードが動作するようになりました。
PC-9801モードでマウスが動かなかった問題も解決しています。
結構色々と動くようになってきましたね。
今くらいが一番いけいけどんどんな感じで楽しいです。


それとは別に、余り目に見えない、イベントマネージャの更新が今回のメインです。

仮想マシン内時間はCPUのクロックが基準ですが、これを64bitで管理するようにしました。
従来は32bitで、8MHzだと9分くらいで溢れてしまうため、各イベントの時間管理は、
現在時間から発火するまでの残り時間で表現していて、仮想マシン内時間が経過するごとに、
いちいち全部のイベントの時間をデクリメントしていました。
64bitだと、起動時からの絶対時間として発火時期を表現できるようになるため、単純に
現在時間との比較だけすれば済むようになりました。

また、従来の実装だと、イベント発火時に、次に発火するイベントをいちいち検索する必要が
ありましたが、今回の実装では、イベントを登録する時点で発火する順番に並べておくことで、
常に先頭のイベントだけ、現在時間を比較する形になってます。
これは、各イベントに、前後に発火するイベントへのポインタを持たせて、イベントを
数珠繋ぎに出来るデータ構造に拡張することで実現しました。
このデータ構造だと、任意の順番にイベントを挿入したり、任意のイベントを削除したり、
といったことも簡単に表現できます。

こんな感じで、イベントの発火タイミングの判定にかかるコストが減りましたので、
その分、CPUで1命令実行するごとに、イベントの発火を判定するようにしています。
従来の、次のイベントまで一気にCPUを進める形式だと、その間に、すぐ発火するような
短時間のイベントを登録した場合の時間精度に問題がありましたが、それも解決です。

これを、他のデバイスを極力修正しないで済むように、イベントマネージャの外部仕様を
変更せずに実現するのが結構大変でしたが、我ながらいい仕事をしたと自画自賛してます。
posted by 武田 at 00:58| Comment(13) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2012年01月21日

SC3000+SF7000とMZ-3500の作業報告

PC-8801からちょっと離れて、過去の遣り残しの後始末中です。
今日は作業報告だけで、リリースはまた後日。

120121-1.png

SC-3000のSF-7000対応。
ディスクの存在判定がユニークで、FDCのインデックスホールの検出信号を監視して、
波長が一定の時間であるかでディスクが回っていると判定しています。

120121-2.png

MZ-3500も取り敢えずディスクがブートするようになりました。

uPD765Aでは、操作対象となるドライブはコマンドで指定するのですが、
MZ-3500では何故か外部I/Oでドライブを指定するようになっています。
そのため、従来コマンド中のドライブ指定情報は無視していたのですが、
実はヘッドの指定だけはコマンド中の情報を参照していたようです。
なんつー変態な仕様なんだ(苦笑)

後はキーボードのコードテーブルだけ調査すればリリース出来そうです。
MZ-2000+16bitボードを除いた全MZのエミュレータが漸く揃いますね。
posted by 武田 at 01:54| Comment(1) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2012年01月13日

PC-98DOの作業中

http://homepage3.nifty.com/takeda-toshiya/00tmp/pc98do.zip
まだリリース前なので、バイナリだけ。

ハイドライド3で、ジョイスティックが全部押されっぱなし状態になっていたのを修正。

ドラゴンナイト2がブートしない不具合を修正。(現状まだエルフロゴで暴走します)
これはフロッピーのシークが一瞬で終わっていたのが原因でした。

ぎゃわんぶらぁ自己中心派がブートしない不具合を修正。
これはFDCがリザルトフェースのときにTCを受け付けないのが原因でした。

ドアドアmk2もブートするようになりました。

もうちょっと他にご報告頂いているソフトの調査をするのと、
FDC周りで色々弄っているので、他機種への影響を確認してからリリースします。


FDCへのアクセスをトリガに、Z80の実行中のニーモニックやレジスタの値を
デバッグログに吐く機能が地味に活躍中です。
こんなに役に立つなら、8086のディスアセンブラも実装しとかないとなあ。
posted by 武田 at 02:32| Comment(0) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2012年01月11日

イベントマネージャとCRTCの大更新

PC-88DOの絡みでイベントマネージャの大更新をしていましたが、
HD46505およびuPD7220の修正でようやく一段落つきました。

イベントマネージャでは各デバイスの時間管理をしていて、
例えばフレーム毎、水平同期ごとにイベントを発生させたりします。
このタイミングを指定するフレーム数やスキャンライン数は、
従来は固定値でしたが、これを動的に変更できるようになりました。

そこで、HD46505やuPD7220側で、CRTの同期信号を発生させる
設定値を変更すると、供給クロックの値を元に、正確なフレーム数や
スキャンライン数を算出して、イベントマネージャ側にそれらを
反映させられるように改良しました。

今回、これらのCRTCを使用している各機種について、CRTCへの
供給クロックの値を定義することで、従来よりも正確なタイミングで
動作するようになっています。

特にX1turboやPC-98(+PC88)についても、200/400ラインの切り替え時に、
CRTCの供給クロックを15KHz/24KHzに切り替えるようにすることで、
それぞれの画面モードでも正確なタイミングで動作できるようになりました。

従来はスキャンライン数が固定だったため、X1turboの400ライン時に
色々と怪しげなトリックで誤魔化していましたが、これでようやく
すっきりとした実装になったかと思います。

後は、MZ-2500など独自のCRTCを使用した機種への横展開ですね。
こちらはまあ追々。
posted by 武田 at 04:15| Comment(2) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2011年12月31日

ご挨拶動画を投稿してみました



50機種到達を記念して、ご挨拶動画を投稿してみました。
何でこんな活動をしているか、お話聞いて頂けますと幸いです。

色々偉そうなこと言ってますが、やってて楽しいというのがやっぱ一番ですね。

最近何かと忙しくなってきていますが、年内に一つの大台に乗ることができて、
ちょっとほっとしています。
本当は夏の終わりには投稿できる筈だったんですが、うまく行かないものです。
来年はどれぐらい活動できるのかなあ。
posted by 武田 at 17:34| Comment(0) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

PC-98DOリリース&50機種達成

PC-98DOエミュレータをリリースしました。
これで足掛け11年、ようやく50機種を達成です。
これが50機種目でいいのかという突っ込みはOKです。
…本当は秋前には50機種の予定だったんですけどねえ。

111231-1.png

PC-98モードは大体問題なく動いていると思います。
V30なので、286以降を要求するソフトは動きませんのでご注意ください。

111231-2.png

PC-88モードは、ディスクBASICが動くようになっています。
ゲーム関係はまだ動作しないものが多いようです。
まあ今はネタでも、数年後にはeX1twin/turboのように実用的になればいいなあ。

111231-3.png

PC-88のサブシステムの副産物で、PC-9801/E/F/MでPC-80S31Kをサポートしました。
これで2Dのソフトがブートするようになってます。

111231-4.png

あと、QC-10でCP/M Plusがブートしない不具合を修正しています。

これで一区切りですね。
最近は娘の誕生とか、仕事が忙しくなったとかで余り作業できなくなってます。
来年以降はちょっと活動が低調になりそうです。
posted by 武田 at 15:44| Comment(7) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする
まるくん、がんばれ、ちょうがんばれ