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

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(5) | 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(0) | 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) | 開発 | このブログの読者になる | 更新情報をチェックする

2011年08月22日

J-3100SL難航中

110822-1.png110822-2.png
110822-3.png110822-4.png

紆余曲折を経て何故かJ-3100SLの作業中なのですが、例によって難航してます。
SL/SSシリーズは通常のJ-3100と比べると専用I/Oが多いのですが、
undocumentedなものが多くて、IPLのチェックを中々抜けられません。

ノート系の独自I/Oって結構電源周りとかのクリティカルなのが多くて、
うかつに叩くとハードにダメージを与える場合もあるので、怖くて実機調査が
し難いんですよね(苦笑)
結局は時間を掛けて、丹念にIPLのコードを解読していくしかないんですが、
QEMU/9821のときみたいに、かなりの長丁場を覚悟しないといけないかも。

初代J-3100の実機も一応確保してあって、IPLの吸出しも出来てますので、
こっちを先にすませるかもしれません。
J-3100GTもあるんだけど、こっちはハードディスクのクラッシュが原因で
フロッピーからすらブートできない始末。
この辺の初期シリーズは纏めて片したいところだけど仕方ないですね。
posted by 武田 at 02:21| Comment(7) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2011年05月28日

eHC-20リリース

何とか週末までにリリースすることができました。

HD6301の内蔵I/Oの仕様を理解しながらの作業になりましたので、
CPUコアの実装に思いのほか手間取りましたが、
HC-20の調査と実装自体は思ったより順調だったように思います。

110528-2.png 110528-3.png 110528-4.png

初回起動時には、必ず初期化処理を行ってください。
(そうしないと、メニューを選択したところでTRAPエラーになります)

まだサブCPU側のコマンドが殆ど未実装なので、周辺装置を触ろうとすると
簡単にフリーズしてしまうかと思います。
データレコーダとフロッピードライブを中心に、その辺の作業を進める予定です。


今回のリリースで、Y.S.さんにご指摘頂いたMB8877とZ80DMAの修正もしています。
おかげさまで、X1/X1turboエミュレータとしては随分実用的になりました。
いつもいつも有難うございます。


(2011/6/1 23:30追記)
110601-1.png
サブCPUのコマンドの実装中です。
サウンド周りは大体動作するようになっているかと思います。
データレコーダは、SAVEは出来るけどLOADはまだエラーになります。
TF-20についてはEPSPプロトコルも面倒みないと駄目なのかな?

50機種目用に、MB8861を実装中です。
FM16βも平行して進めていたのですが、折角なのでネタ度を優先ということで(苦笑)
posted by 武田 at 01:56| Comment(10) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2011年05月25日

HC-20の作業報告

現状はこんな感じです。

110525-1.png 110525-2.png 110525-3.png

現状では、BASICを起動しようとするとTRAP割り込みが発生しています。
メモリのバンク切り替えの問題かと思うのですが、HD6301の問題かもしれません。

週末までには最低限BASICが動くところまでいきたいなあ。
posted by 武田 at 23:18| Comment(2) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2011年05月19日

MZ-800のスクロールとJXの高解像モード

色々と一気に更新しました。

110519-1.png

昨晩リリースしたMZ-800について、スクロールレジスタを修正しました。
CP/Mなどで、スクロールした際に画面が乱れる問題が解決しています。

普通の機種だと、スクロールレジスタって画面の表示上だけの機能なのですが、
MZ-800だと、CPUから見たVRAMのアドレスにも反映するみたいでして。
どれだけスクロールしても、画面の表示位置とCPUから見たVRAMのアドレスは
変わらないようになっています。なんと面妖な。

110519-2.png

PC/JXで、高解像モードをサポートしました。
$A0000-$AFFFFに割り当てられる専用VRAMと漢字ROMの切り替え方と、
高解像モード・標準モードの切り替え方の調査にちょっと手間取ってました。

110519-3.png

X1turboの方は、Y.S.さんからご提供いただいたZ80DMAの修正の取り込みと、
HD46505の信号発生タイミングの高精度化が中心です。
青き狼と白き牝鹿が動くようになっています、多謝多謝。

HD46505の修正はPC/JXにも関係してくるものですが、総スキャンライン数を#defineで
定数として宣言しているため、画面解像度の変更によってライン数が変更されたときに、
信号の発生に問題が生じていました。
X1turboの方では無理やり誤魔化してましたが、今回JXでも同じ問題に直面したため、
この際一気に修正を図っています。

X1の方は、これで何か新しく動くようになったソフトがある訳でもないですが、
まあ自己満足ですね(苦笑)


(2011/5/20 0:50追記)
110520-1.png
更にY.S.さんからご提供いただいたZ80DMAの修正を取り込んでいます。
お陰様で随分と色々なソフトが動くようになってきています。

CPUを回しながら転送する件は、i8237やuPD71071、8086/186/286やi386などへの
横展開も考慮して、もう少し一般化した形で取り込ませて頂きました。
ループを抜けるのは、DMAの転送モードがシングルモード(BYTEモード)のときのみで、
他のモードでは従来通り最後まで転送するようにしています。

本当は、8237のブロック・デマンド・カスケードの各モードの違いも考慮すべきですが、
その辺はまたその内にでも。

サウンドバッファの50msec対応も一緒にやってます。
ただ、2〜3フレーム内にバッファを更新する必要がありますので、流石に厳しいですね。
posted by 武田 at 04:10| Comment(13) | TrackBack(0) | 開発 | このブログの読者になる | 更新情報をチェックする
まるくん、がんばれ、ちょうがんばれ