FMTowns新エミュレータ Tsugaruの情報交換用スレッドです。
Tsugaru : http://www.ysflight.com/FM/towns/Tsugaru/j.html
2020-07-28 12:41:40
プロジェクトGitHub → https://github.com/captainys/TOWNSEMU
作者ホームページ → http://ysflight.in.coocan.jp/
[使用方法] *ダウンロードから初期設定
(1)GitHubのReleasesより、"windows_binary_latest.zip"をダウンロード
(2)zipファイルを適当なフォルダに解凍後、Tsugaru_GUI.exeを実行
(3)「ROM dir:」ボタンを押してTownsのROMの場所を指定 (ROMはうんづのROMを使用)
(4)必要に応じてCPU SpeedでCPUのクロック周波数,RAMで搭載RAM容量,Scallingで画面の拡大率を指定
(5)必要に応じてSCSIタブより、接続するハードディスクイメージ(うんづの物を流用する場合は拡張子を.binに変更)を指定
(6)必要に応じてGamePortタブより、TownsのPAD/MOUSEポートへ何をつなぐのかを指定(通常はポート0にゲームパッド,ポート1にマウス)
(7)必要に応じてBootタブより、優先する起動先を指定
(8)Fileより、「Save as Default」を選択して設定をデフォルトとして保存
[使用方法] *運用
(1)「CD Image」/「FD0:」/「FD1:」でメディアを指定 ※1
(2)「START」ボタンにより動作開始
(3)FMTownsをお楽しみください。
※1 CD-ROMはISOまたはCUEファイル,FDはBINファイルを使用する。 D88ファイルはうんづ等を使用して変換しておく事,また、HDMファイルは拡張子をBINに変更するとそのまま使用できる。
[注意1] 新たにFDやHDのイメージファイルを作るには現時点ではGUIではなく、CUI環境(Tsugaru_CUI.exe)でパラメータを指定して起動する必要が有ります。 面倒な方でうんづを使用されている場合はうんづ上で作成してコピーするのが良いでしょう。
[注意2] SCSIを利用される方は初期状態ではドライブ構成が出来ていませんので、初回はCD-ROMにシステムCDを指定してTownsOSよりドライブ構成を行う必要が有ります。 うんづを使用されている方はうんづで使用していた"CMOS.DAT"をドキュメントフォルダ下の"Tsugaru_TOWNS"にコピーすると良い
2020-07-29 10:55:28
山川機長様
今どきあまり無いとは思いますが、Windowsバイナリ限定なのか不明ですがホスト側でオーディオデバイスが搭載されていなかったり、デバイスマネージャで無効化していたり、スピーカー類(イヤホンも含む)が全く接続されていない場合にVMの起動中にVMがシャットダウンしますが、オーディオに関しては無視して頂くことは可能でしょうか? 以前のリリースでは問題なかったと思うのは私だけでしょうか?
2020-07-30 15:49:50
PCMの音量が小さいように思うのですが、これは全体的な問題ということでいいでしょうか?(互換リストには個別に記入していません)
2020-07-30 21:55:18
うーん、サウンドデバイスが無い場合は、今WAVE生成のタイミング取るのにひとつのセグメントが終わったことを利用しているので、無いと多分変になりますね。ちょっと変更が大きい鴨しれません。
PCMの音量、やっぱり小さいですかね。8チャンネル全部最大の時、WAVの最大音量(+-32767)になるようにしたのですが、もう少し音量を上げて振り切れたときは+-32767で切り落とすようにした方がいいですかね。
2020-07-31 10:30:35
to山川機長様
サウンドデバイスの件、音無しでTownsを利用しようとする方がどれ程なのか謎ですが、あまり多くはないと思いますので、相当後回しでも構わないと思います。
しかし、現状だとエラー表示等がなくVMが終了してしまうので当てはまる環境の方が動作させようとした際に戸惑う可能性が有るかなと思いますので、コンソール画面への表示は欲しいと思います。
2020-07-31 12:57:24
>>5
スト2やマッスルボマーをプレイした時に、PCMがあまり聴こえませんでした。
両方ともBGMがCD-DA、効果音がPCMです。FM音源は使っていません。
考え方としては、PCM1chで最大音量に合わせて8ch合成した時に溢れた分はカット、だと思います。
合成というのは単純な足し算です。8chだから8で割る、というようなことはしません。
もちろん「最大音量に合わせて」というのは考え方の話であって、
実際には実機の鳴り方に合わせることになると思いますが。
2020-07-31 21:21:59
津軽のビルドについて質問です。
スレッドを作ろうかとも思ったのですが、一瞬で終わりそうな気がしたのでとりあえずこちらで。
Visual Studioをインストールして、Developer Command Promptを開いて、
src\buidフォルダを作って、その中で cmake .. を実行したところ下記のエラーが。
一度、buidフォルダを消してみたのですがエラーは変わらず。
これはどうすればいいでしょうか?
Visual StudioもCMakeも使ったことがないド素人なので優しくお願いします。
CMake Error at externals/fssimplewindow/src/CMakeLists.txt:56 (message):
In-source build prohibited.
Clear cache and Start cmake from somewhere else.
-- Configuring incomplete, errors occurred!
See also "E:/projects/TOWNSEMU/src/build/CMakeFiles/CMakeOutput.log".
2020-08-01 20:19:43
はじめまして、ヒロと申します。
私も、CMake初心者ですが、津軽のために、初チャレンジして
ビルドできております。
(VS6以来、Cのプログラミングはやってないエセ プログラマです。
この10年ぐらいは、メインはRでデータマイニングやっています。)
fuzzballさんのように
Developer Command Promptから実行しなくても、
GUIだけで、ビルド可能でした。
CMakeのGUIを立ち上げて、
ソースコードのパスと
バイナリ出力パスを入力しますが、
ここで、ソースコードのパスとバイナリ出力パスが同じだと、
fuzzballさんのようなエラーが出ました。
私は以下の様にパスを設定しています。(例です)
ソースコードのパス
C:/UTY/EMU/TOWNS.TSUGARU/v20200731/TOWNSEMU-master/src
バイナリ出力パス
C:/UTY/EMU/TOWNS.TSUGARU/v20200731/TOWNSEMU-master/bin
一度失敗していたら、
キャッシュを消してから、「Configure」のボタンを押すと
VS 2019を選べるので選んで(私の場合は、最初から選択されていた)、
「Finish」を押して
「Generate」を押して、
「Open Project」を押すとVSが立ち上がるので、
x64 でリリースモードになっているか確認して、
(私の場合、いつもDebugになっていることが多いです。)
F7でソリューションのビルドを実行すると
C:/UTY/EMU/TOWNS.TSUGARU/v20200731/TOWNSEMU-master/bin
の下のどこかに、exeファイルが出来ています。
このようにやってもうまく行かなかったら済みません。
2020-08-01 21:05:31
ちなみに出力先を
C:/UTY/EMU/TOWNS.TSUGARU/v20200731/TOWNSEMU-master/src/bin
としても、同じエラーがでますので、
ソースファイルのパスの下に出力先を設定しているのが問題かと。
2020-08-01 21:46:38
ヒロさん、ありがとうございます。無事にビルド出来ました!
‥で終わちゃうと面白くないので、コマンドラインでのビルドに挑戦しました。
試行錯誤した結果、個人的な趣味で以下のフォルダ構成/手順で行うことにしました。
1. プロジェクトルートに buid\ を作成して移動
2. cmake ..\src でConfigure/Generate
3. cmake --build でビルド
以上です。
無事にシャドー・オブ・ザ・ビースト起動しました。
2020-08-01 23:11:06
なんだかあちこちで buid と書いちゃってますが build のtypoです‥。(編集できなくて悲しい)
2020-08-01 23:14:44
fuzzballさん
無事に、うまくいったようで良かったです。
また、情報有り難う御座います。
私も、コマンドラインで試してみまして、
srcが見えているディレクトリで、binへ出力したいのであれば、
以下の2コマンド実行するだけでビルドできました。
(ディレクトリ移動やディレクトリ作成は必要無いようです。)
cmake -S src -B bin
cmake --build bin
2020-08-02 00:04:15
何度も済みません。
cmake --build bin
だと、デバッグモードで、ビルドされてしまうので、
cmake --build bin --config Release
ですね。
2020-08-02 00:19:23
ビルドできたようで、良かったです。僕がCmakeを使い始めたころ、何度かうっかりソースの中でcmakeコマンドをタイプしてしまってその後ビルドファイルをクリーンするのにものすごく苦労したことがトラウマになったので、ビルドディレクトリは完全にソースの外に無いとCMakeできないようになってます。
2020-08-02 11:42:19
忙しくてぜんぜん触れてないのですが、
cloneした状態のソースから、Tsugaru_GUIのビルドに成功している人いますか?
そもそもターゲットに出てこないんですよね……。
2020-08-02 17:01:35
src/ の下に無いから単独でビルドすれば‥と思ったら gui/src/public/src が上がってないようですね。
秘密のpublicソースなのかも知れませんw
2020-08-02 17:55:51
あ、わかりにくくてすみません。guiサブディレクトリにbuild_instruction.txtがあるので、それに沿ってやってみてください。
GUIモジュールは、僕が別にオープンソースで開発している(仕事+趣味兼用)ライブラリ群れが必要なので、CUIが単体でコンパイルできるようにディレクトリを分けました。
なお、全部コンパイルするとものすごく時間がかかるので、Tsugaru_GUIだけビルドするのがいいと思います。
2020-08-02 22:10:00
>>山川機長
もしかして、ルートの.gitignoreの build* に引っ掛かって上がってないのでは?
2020-08-02 23:55:16
大変失礼しました。その通りでした。先ほどPUSHしました。
2020-08-03 01:55:33
リリース出しました!Towns OS V2.1 L51 on DOS6.2がEMM386.EXEをロードした状態で少なくともTowns MENUまで起動するようになりました。(まだしばらくかかるだろうと思ってた)。キーボードBIOSが、キー00H (そんなキーは存在しない)が押しっぱなしになっていると思っていたので、そうならないようにキーボードを修正しました。あと、ゲームパッドのCOMビットを記憶してないというバグがあったので、それも直しました。キーボード、パッドでひっかかってたものはこの修正で正常になる鴨しれません。
サイバースティック対応のコードを書き始めてますが、まだ対応はできてません。当時Air RaiderとかTactical Air WingとかFormation Flightとか用に書いたサイバースティックのコード(Oh!FMTOWNSの記事を見ながら書いたんだと思った。EASTさんの記事でしたっけ?)が残っているので、それを元に書いてます。
ついでに、Wing Commander 1を無理やりジョイスティックとスロットルレバーに対応させるプロジェクト開始。Wing Commander II以降はDOS版と大差無いのですが、1に関してはオーケストラのBGMがついてるTowns用が最高の出来だと思ってます。
2020-08-20 07:46:58
>山川機長さん
ありがとうございます! 当方でもT-OS V2.1L51 on DOS6.2の起動、およびTownsMENU・MGV2(画像ビュアー)・ViVA(MSVプレーヤー)の動作を確認しました。
ただ、MiV(画像ビュアー・シェアウェア) v3.86はCPUID命令を実行しようとしてVMがAbortします。フリコレ11収録のv3.21なら大ジョブなのですが…
なお、インテルプロセッサにおけるCPUID命令の検出方法については以下のURLに資料がありますので参考にされてはいかがでしょうか。
https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/Processor_Identification_071405_i.pdf
2020-08-20 15:44:25
↑で書くのを忘れてました。DOS3ベース/DOS6ベースを問わないのですが、512×480ピクセルモードでマウスカーソルの位置がずれます(汁
2020-08-20 15:59:43
>22(ただの自爆)
MiV v3.86がCPUID命令で落ちる現象は、EFLAGSレジスタの空きbit(MXあたりのi486DX2だとbit31~19)は本来0固定でなければいけないのに現状の津軽では全bitが保存・取得できるためにCPUID命令があると誤認識していたのが原因です(i486系の途中の製品からCPUID命令が追加され、EFLAGSのbit21が有効になっています。Fresh・FS/FTのAm486DX4も対応してたかも)。
この仮説の検証のため、こちらでEFLAGSのbit31~19を強制的に保存されないよう勝手ビルド(しかも手抜きな中途半端やっつけ仕事(汁))してみたところ、MiV v3.86も津軽で問題なく動くようになりました。
2020-08-21 02:04:38
おおなるほど!EFLAGSレジスタの件、修正します!512x480ピクセルモードはひとつだけCRTC設定と僕の解釈が合わない画面モードでっ、、、、て、マウスの位置だけでしたか?いつの間に動くようになったんだろう。なんか直したときに直ってしまっていたのか。確認してみますね。あ、あとRTCも直さなきゃ。RTC直そうと思ったまま放置してきたので、今日こそ直そう。
2020-08-21 03:15:58
ソースPUSHしました!アナログ軸をパッドの十字ボタンに使うオプションをGUIに出しました。IRETD, POPFDでEFLAGSのビット19以上をゼロに維持するようにしてみました。マウスは試しに5ステートにしてIDLE状態ではLow 4bitはすべて1を返すようにしてみました。PAUSEがかかりまくる現象がこれで収まってくれると良いのですが。RTCの月を直したのですが、見たら僕の環境では時計がローカルタイムと4時間ずれてますね。その現象発生しているでしょうか?RTCは正しいローカルタイムを返しているようなのですが。あとは、マウスインテグレーションで画面の表示位置を考慮するようにしたので、512x480モードでカーソルのずれはなくなりました。I/Oにいつだか掲載された「空飛ぶ箱庭エディタ」で確認しました。あと、多分15KHzモードで画面表示がずれる問題も直っていると思います。
2020-08-21 08:57:19
昨日少しだけ検証してみました。MiV v3.86がCPUID命令を実行しようとする件が修正されていることが確認できました。ありがとうございます。
マウスのIDLEステート時の実装は不要だと思います。本題(あすか120%)のほうではPAUSEはかからなくなったのですが、これがあると逆に一部のデータウエストDAPSタイトルでアイドル時にマウスポインタが右に飛んでいく現象が出てしまいます。こちらから報告する際に「実機でもマウスを接続した状態では同じ現象が起こります」と書き添えておけばよかったのですが…後出し情報で申し
訳ありません。512×480ピクセルモードでのマウスインテグレーションも正しい位置にマウスポインタが来ることが確認できました。
RTCの日時・時刻は日本国内ではどうやら正常に動作しているようです。
15kHzモードの画面表示ですが、画面表示自体が思いっきりずれることはないようですがインタレースモードの表示が正常でないようです(太っ腹No.1のTOWNS-Telopのデモで確認しました…ってなんでそんなので確認するんだか)。
2020-08-22 16:18:58
おおなるほど!それだと、実機ではマウスつないでるとPAUSEがかかるのが正しいんですね!では、IDLEステートは廃止の方向で検討します。
インタレースモードは、難敵ですね(^_^;)CRTCレジスタの値と本来こう見えるであろう見え方から意味を推測しながら微調整を繰り返してるのですが。太っ腹No.1のTOWNS-Telop、試してみます。一応技術の保存という観点では、そのうちスーパーインポーズとか対応した方が良いのかとか思ってます。
なお、今日はFM-7用のRS232Cカードが欲しいという方がいたので、ひさしぶりに半田ゴテを握ってました。物資の回収のためだけ短時間自分のオフィスに入ってもいい許可がやっと出たのでいろいろ回収してこようと思ってます。
2020-08-23 03:40:24
手前画面の拡大率が後ろ画面の拡大率の約数ではないとき、
memcpy(renderer.cpp内)によって前景描画中に背景用に描画した内容が変更されてしまうようです。
2020-08-23 11:14:00
おおなるほど!コードをずいぶん読んでいただいているようで、ありがとうございます!
確認してみます。その現象を確認できたアプリケーションがわかりましたら教えていただけますか?
2020-08-24 10:03:42
>山川機長さん
CRTCレジスタの設定値についてですが、基本的にはVSTのbit0が0である場合にインタレースモードと見なせば問題ないと思います。
実際のインタレースモードの表示動作については、ライン番号を上から0,1,2…と数えていった場合、偶数ラインはLOxで設定されたオフセットに従い、奇数ラインはLOxで設定されたオフセットにさらにFOxで設定されたオフセットが加算されるといった感じの実装で行けるはずです(UnzもFOxの設定が通らなくて480ラインインタレースモードにすると表示が崩れます)。
余談ですが15kHzモードでなくてもインタレースモード自体は使用可能です。あまり意味はありませんが。
2020-08-24 14:57:53
>30 山川機長さん
https://imgur.com/a/qpgGrnM
フリコレ10の T_OS/GAME/RAGNAROK にある Return of Ragnarok のエンカウントアニメーション中の一コマです。
背景は 3x3 に拡大されるはずが、3x2 と 3x4 の混じったようになってしまっています。
(もっと簡単に確認できるソフトを思いつけばよいのですが、他に思いつきませんでした)
2020-08-25 01:30:06
りうさん、
了解しました!ありがとうございます。現在インタレースであるかどうかは無視してレンダリングしているので、変になるのはこのへんの影響かもしれないですね。
pinさん、
ありがとうございます!確認してみます。
2020-08-25 11:13:18
どのスレッドに書こうかちょっと迷ったのですが、Genocide Squaredって起動中にRS232Cに何か書いてますね。ひょっとすると、応答するともっと長いメッセージが出たりするのかもしれないかと思ったのですが、これって既にみんな知ってる話でしょうか?ざっとGoogleで探したところでは見つからなかったですが、こういうの見つけると逆アセンブルして調べたくなりますね。
2020-08-25 13:13:51
>34
私は知りませんでした、興味が湧きます・・・・
シリアルデバッグでもしてたのかな?
2020-08-25 13:37:43
>>34
ジェノサイドと言えば、作者の方が裏技公開してましたねw https://togetter.com/li/743856
2020-08-25 20:46:06
RAGNAROK見てみました!これは、重ね合わせ問題以前に、ページ1の表示位置が間違ってますね。VRAMの左端をモニタ上のどのへんにするかの設定はCRTCのHDSレジスタで決まるらしいのですが、これがHDS=0だとVRAMの左端はモニタの左端よりも左に行ってしまうので、ゼロではない位置をセットすることになってるようなのですが、EGBの標準画面モード以外の正しい値が公開されてなくてこれもまた推測で実装してるんですね(^_^;)
HDSに設定するべき値はCLKSELとHSTレジスタで決まるようなのですが。ただ、どうも、CLKSEL, HSTの他にもPM, SCSELが関わってるのではないかという気がしているのですが、まだ法則がつかめてません。
どうも、これを調べてるうちに実はViewpointの画面表示も中央に表示して左右に空白があるのではなく、画面いっぱいに拡大しているのではないかという疑いを持ってしまったのですが、この拡大率も謎なんですよね。TBIOSのいくつかの画面モードには水平方向の最低拡大率が4のものがあって、その場合5倍設定にすることで256ピクセルを画面いっぱいに引き延ばすことができたのですが(確認せずに記憶で書いてるので微妙な間違いがあるかも)、CRTCのどのレジスタが水平方向の最低拡大率をコントロールしてるのかもまだわかってなくて。
既に大半の場合で動くようになってきているので、多分ちょっとした解釈の拡張が必要なのだと思うんですね。VINGが使ってるCLKSEL=3,HST=029DHと、RAGNAROKが使ってるCLKSEL=1,HST=0131FH の二種類は他に見ないパターンなので、とりあえず今はこの二種類の特殊処理にしておいて、特殊処理のケースがたくさんたまってきたら見直して一般解を探すという方向で対応しようかと思ってます。
もう、大量にサンプルしてMatrix Solverに力技で解かせてみようかな。と、言ってもサンプル数が少ないからやっぱだめか。
なお、FDCは奇跡的にトランジスタ技術スペシャルの記事を読むことができたのですが、とくにフォーマットコマンド後に一時的にDrive Not Readyになるとも書いてなくて、Xak II問題は引き続き謎が続いてます。何度か読んでいるうちに見落としてたことに気が付いて打開できるということはよく発生するので、今晩も再度読み直してみます。というか、Disk BIOSがフォーマットしてるんだから、フォーマットコマンドが来た時点で DS:[SI+0DH] を1 (多分要ディレクトリ再キャッシュフラグ)にしておくべきだと思うんだけどなあ。なんでそうなっていないんだろう。
2020-08-26 22:18:30
>37 山川機長さん
Ragnarokは表示位置も確かにずれているのですが、>29, >32 に上げたのは不均等な拡大のことでした。
フリコレ9のIRON-FIST(みんなで遊ぼう以下)でもっと簡単に確認できるようです。
https://github.com/pinterior/TOWNSEMU/tree/fix-zoom
このように変更すればよくなるのですが、もっとよい方法があるようにも思います
2020-08-27 01:22:59
おお、Iron Fist! 研究室でVSGP、Sky Duelとともにかなり流行りました。一応、直ったと思います。Backgroundに関してはmemcpyを使ってForegroundでは使わないように修正してみました。
表示位置問題はまだ直ってないのでRagnarokは心の目で主人公が表示位置より横に2ブロックずれたところにいると思わないとプレイしづらいかもしれません。
なお、まもなくリリース出します。横幅が640を超える場合Windowをリサイズするようにしたので、Microcosmが全画面見えるようになりました。ただ、アニメの表示位置が左にちょっとずれてます。表示位置問題は、なかなか根本的な解決が難しいですね。
2020-08-27 09:27:52
31番のたけがみりうさんの内容を見ていて、改めてVSTの関係とインタレース/ノンインタレースの関係を赤本で見ていたのですが、赤本改定3版の98ページ.表I-4-1 画面モード一覧の内容で、画面モード8,10のインタレースと書いてある所はひょっとしてノンインタレースの誤記でしょうか? 何やらその2つだけ"ノン"の入る隙間が有るような印刷ですが・・・
2020-08-27 11:38:18
画面モード8はインタレースで合ってると思います。でも、たしかに、画面モード10はノンインタレースですね。画面モード10の320x240 32Kのアンダースキャンモードは一昨年書いたDemoでも使ったので間違いないと思います。あ、301ページのEGBの説明も間違ってる。
2020-08-27 13:01:03
"VSTのbit0=0 → インタレース"とすると、136ページの表I-4-22にある画面モード8が絡むレジスタセットは、15,18,25となり、次ページからの表I-4-23のレジスタ設定値のVSTの値が、レジスタセット15,18,25は共に020BH(bit0=ON)となりますし、そもそも表I-4-1の画面モード7と画面モード8の違いが無くなってしまいます。
301ページの画面合成の所も画面モード8の合成可能なモードとして11が入っているのはおかしいのではないでしょうか?(11はノンインタレース)
総合すると画面モード8はインンたレースではなくノンインタレースとすると、全てに辻褄が合いますが、如何でしょう?
2020-08-27 14:02:52
おおなるほど。一応、CRTC設定の表が間違ってないか確認するために津軽で画面モード8,8としてCRTCレジスタキャプチャした値は↓です。
0x08,0x08,
0x0074,0x0530,0x0000,0x0000,0x0617,0x0006,0x000C,0x0012,0x020B,0x00E7,0x04E7,0x00E7,0x04E7,0x002A,0x020A,0x002A,
0x020A,0x0000,0x00E7,0x0000,0x0080,0x0000,0x00E7,0x0000,0x0080,0x0056,0x0001,0x0303,0x0005,0x0001,0x0002,0x0188,
CR0=5, HST=617Hなので、CLKSEL=1, Base clock=24545400Hz, 水平周波数15.744Hzとなりますね。15KHzモードはすべてインタレースだと思っていたのですが、たしかに、画面モード11は 15KHzなのにノンインタレースとなってますね。案外15KHzかつノンインタレースは可能だったのかもしれないですね。
2020-08-27 22:44:27
横位置について確認するため、赤本情報だけでCRTCとシフタの実装を想像してrendererを書いてみました。
HAJ = HDS であるほとんどの画面モードでは、x = HDS で行の描画を開始するときのVRAMアドレスは (FA + (y / ZV) * LO) * 4 になっているはずです。
HAJ < HDSのとき(Ragnarok, 達人王等)、HDSから描画を開始するときにVRAMのアドレスが
(HAJ-HDS) / (ZH * (1 << CL)) * 4 進んでいればよいと思います。(ここで、CLはCR0にある方)
気軽に除算しているけど割り切れないときはどうなんだ、というのは実機で要確認ですね…
https://imgur.com/a/ssTnAZr
https://imgur.com/a/5ilmh34
ソースにコメントのあるエメドラのような HDS < HAJ のケースでは、HDSからHAJまでは黒ないし透過で、HAJから FA + (y / ZV) * LO でしょうか。
(CDは出てきたのですが、たしかフロッピーが必要だったはずで確かめられない…)
2020-08-29 15:57:42
誤 (HAJ-HDS) / (ZH * (1 << CL)) * 4
正 (HDS - HAJ) / (ZH * (1 << CL)) * 4
失礼しました
2020-08-29 15:59:39
pinさん、
ご協力ありがとうございます!多分、LO, FOを使うとインタレースっぽい表示をエミュレートできるのではないかと想像しているのですが、現状ではまだ無視してました。RAGNAROKのスクリーンショットでスプライトの位置が背景と一致しているように見えるのですが、レイア1の表示開始位置(VRAMの左上をモニタ上のどこにマップするか)はどのように計算されているでしょうか?RAGNAROKの場合レイア0,1両方 HAJ-HDS==0 となっているので、VRAMの読み出し開始位置のズレはゼロのように思います。VRAMの左上に対応するモニタ上の位置は、31KHzモードの場合h、HDS-8AH になるようなのですが、これが仮に (HDS-8AH)*ZH であるとすればRAGNAROK問題は解決するのですが、他のタイトルでずれそうな気がします。 → 実験したらやっぱりずれますね。
2020-08-29 23:21:59
RagnarokはHDS=HAJでしたね
クロックと走査線を基準にした HST+1 x ((VST + 1) / 2) の描画領域があるとして、(ここでのHSTは赤本の図のビット10~1ではなくレジスタの値全体)
その中の (HDS0, VDS0/2) から (HDE0, VDE0/2) に描画するイメージです。
HAJがHDSより小さいときはVRAMアドレスの計算が(HDS-HAJ)クロック前から始まっているのですが、何クロックに1回カウントアップするかは
CL(CR0のほう)とZHによる――ZHクロックに1度シフタを駆動し、CLで決まる回数駆動したら次のdwordをフェッチする――だと思われます。
まだ書いただけで整理が全く追いついていないのですが一応コードもpushしておきました
https://github.com/pinterior/TOWNSEMU/blob/akahon-crtc/src/towns/render/render.cpp
2020-08-30 00:40:09
コード見ました!ありがとうございます。
2020-08-30 02:30:35
(全部書く前に書き込んでしまった)。HDS0とHDS1の小さいほうを基準にする方法ですね。そのようにレンダリングして画面の表示部分をセンタリングする、あるいはウィンドウサイズを表示部分に合わせて変えてしまうという手もあるかと思います。
とりあえず、pinさんのコードを読んで気が付いたのは、僕のコードではCLKSEL==1の場合は、開始位置を((HDS-0x8A)>>1)としていたのに対して、pinさんのコードではHDS-min(HDS0,HDS1)と取っている点ですね。自分のコードを見直してみたところ、どうやら表示開始位置のXは15KHzモードで(HDS-基準値)>>1, それ以外で(HDS-基準値)とすることで大体合っているようです。多分、僕がpinさんのコードのShiftとFetchの部分をもう少し理解すると、なぜこのルールになるのか理解できそうなのですが、とりあえず、RAGNAROKに関しては15KHz以外の場合は表示開始位置を2で割らないルールを適用することでずれが無くなったので、とりあえずこの方向で行こうと思います。
2020-08-30 02:54:58
実機が動くようになったらいじわるなテストスイートを作ってみようと思います。
15kHz非対応のモニタに隠し機能のスキャンコンバートを有効にして繋いでいた気がするのでインターレースや15kHzのテストは難しいかもしれませんが…
山川機長さんのコードで15kHzモードにおいて2で割るのが必要なのは、GetPageZoom2Xで15kHzのときに拡大率の解釈を変えているのと関係しているでしょうか?
2020-08-30 03:21:04
多分関係しているのだとは思うのですが、それぞれやってみて出てきたCRTC設定と本来あるべきと思われる見え方を元に調整したものです。
CRTCにはまだ僕は理解してない部分が多いですね。最終的にはMXのハイレゾにも対応したいと思っているのですが、困難が予想されてます。
2020-08-30 11:05:27
15kHzや24kHzは今となっては障壁ですよね。
私もどうしても実機で動作検証を行う必要が有る場合は、モデル2を使用するのですがTownsOSが立ち上がるまではモニターに何も映らず、31kHzでしか動作確認が出来ない状況です。
実家にFMT-DP8711が,屋根裏にFMT-DP532が眠っていますので、必要であれば復活させます。
でも、PC→Towns間の受け渡しにこれまた障壁が・・・(うちのはFDDが不安定なのです)
2020-08-31 10:15:03
そういえば、pinさんも書かれてましたが、MXに存在するという15KHzを31KHzに変換して出力する機能を有効化する方法ってわかりますか?フリコレに有効化するプログラムがあった(確か)ので試したのですが、だめで、どこかのサイトでI/Oが出ていたのを見て有効化するプログラムを書いてみたけどそれもだめで、CRIのゲームとか起動時にAボタンを押すのを忘れてるとモニタに何も映らない現象が発生します。まあ、実機でCRIのゲーム走らせるのは年二回ぐらいなのでそれほど大問題ではないのですが。
2020-08-31 10:37:38
M*シリーズに存在するスキャンコンバータに関しては、残念ながら存在は知っているのですが詳細は判らないです。
「Oh!誌に情報が載ったんだっけ?」という曖昧な記憶しかありません。
MX等のハイレゾ関連に関してはLinuxのXserverのソースが参考になります。(と言うかそれ以外に資料がない)
crtc_dr.cを見ているのですが、CRTCInit関数でcrtcChipがFMCRTC2の場合が新しいCRTCで従来の場合との違いが判ります。
2020-08-31 10:54:37
31KCHK.COMをみると新CRTCのレジスタ3番の最下位ビットを立てている(out 0x0472,3 -> out 0x0474,1)ようですが、
ドキュメントによると再起動が必要と書いてあるにも関わらず、それなしに有効になっていた記憶があるので本体のロット等によって細かな動作が違うのかもしれません。
24kHzはアナログ入力のあるFlexScanが結構対応しているので、なぜか今も流通しているサンワサプライのAD-D15NEを1000円ほどで買ってくれば使えます。
2020-08-31 22:26:34
>55
新CRTCレジスタですか・・・ そっちはハイレゾとフルカラー対応だけかと思ってました。
新CRTCレジスタ3のbit0は、Linuxのソースを見ても一切触ってないようですが、bit9は初期化のときにONとしていますのでディスプレイ関連の動作フラグが羅列されているのかも知れませんね。
24kHz対応は、I/OデータのハイスペックでないLCDモニターには今でも対応しているものが結構有るのはメーカーの優しさだと思っています。
家のモニターは名称こそFlexScanですが、相当古いCRTで24kHzには対応してないのです。何とかしたいのですが何ともならないものかと考えています。
2020-09-01 10:12:49
>pinさん、WINDYさん
新CRTCのスキャンコンバート設定レジスタ(0x0003)ですが、bit1が24kHz→31kHzコンバート設定、bit0が15kHz→31kHzコンバート設定となっており、どちらも1=ON、0=OFFとなっており、初期値はMX/MAでは0x0002、HA/HB/HCでは0x0003となっています。恐らくこれ以外のbitは未使用だと思います。
pinさんの考察では31KCHK.COMは0x0472に0x0003、0x0474に0x0001を書いているのではないか、とのことですが、ソースを見た感じでは0x0474にも0x0003を書き込み、ERRORLEVELとして1を返しています。
しかし、まさかフリコレ11でほとんど同ネタのツールがかぶるとは思ってなかったなぁ…某SCANCONV.COMはいろいろ付け足したからバイナリが大きくなったからなのか、あんまり目立たない場所(Q:\MS_DOS\TOOL\RHGTOOLS)に入ってたからなのか…orz
2020-09-01 14:19:44
>57 たけがみりうさん
情報の方、有り難うございます。
新CRTCに関しては赤本にも内容は載っていないので、情報が殆ど無かったので助かります。
大まかにはXserverのソースを観て把握はしていたのですが・・・・ よくご存じでしたね。 この辺ってどこかに情報が有りましたっけ?
他の機種でも未公開機能は当然ながら有るのですが、Townsに関してはそういった情報が(当時は有ったのかもしれませんが)なかなか見つからないので苦慮していました。
2020-09-01 15:08:55
>WINDYさん
全く資料はありませんでしたが、新CRTCを適当にいじってたら発見しました。
ほかにもTBIOSにパッチを当てて800×600ピクセル32768色モード(ただし1024×768ピクセルのまわりに空白を空ける形)を作ったりしてました。一応新CRTCやビデオカード3のレジスタについてはいろいろ調べたものがどこかにあったのですが、どこにいったんだろう…
2020-09-01 21:57:59
おおなるほど!そういうことだたったんですね!記憶をたどっていくと、たしか僕が試したのは31KCHK.COMで、リセットが必要だということだからCMOSに設定が書き込まれて起動時にSYSROMが何かするのかと思ったのですが、ということは電源切ったら再度実行しないと有効にならないんですね。今度やってみよう。ありがとうございます!貴重な技術資料ですね!ということは、I/Oのどこかに値を書き込んだら有効というのは僕の勘違いだったのかな?
なお、Wing Commander 2のマウスインテグレーション半分成功しました。マウスがプルプル震えるのて、これだとそのうちジョイスティックをマウスに使うモードを作ったとしてもとても操縦できないと思って、(なぜそこまでWing CommanderとStrike Commanderにこだわる?と思われても)気合入れて調べたのですが、そしたら、マウスの移動量はVSYNCの中で読んだものをイベントキューに貯めて、後にイベントキューを読んでマウス座標を更新するということをやってたので、現時点のマウス座標を元にマウス移動量を送ってやるとその移動量がイベントキューに何度も追加されてオーバーシュートしてました。これは、Lemmings 2がプルプルするのと同じ原因かもしれないですね。TBIOSを使ってるのにプルプル震えるやつは多分違う原因ですが。あとは、Wing Commander 2はマウスチェックの間マウス移動量は0を送り続けなくてはならないので、どうやってマウスチェックが終わったことを判定するか、デバッガ有効にしてCS:EIPを見たら簡単ですがパフォーマンスがガクっと落ちるからそれはだめで、デバッガを使わずにパフォーマンスにあまり影響を与えない方法でマウスチェック終了を検出する方法を模索してます。CDDA開始だと滅多に発生しないから、これがよさそうですね。
あ、そうだ、ついでに、Dual Targetsってデモ見たら止まりますかね?試したのですがデモ付きで初めても普通にゲーム始まったんですが。あと、Pulse per pixelを迎撃するようにしたので、-MOUSEINTEGSPDオプションを使わなくてもマウスがプルプルしなくなってます。
2020-09-01 23:11:02
>山川機長さん
いえ、スキャンコンバート機能の設定はI/Oレジスタに書き込む(0x0472←0x0003、0x0474←0x00000003)だけでOKです(書き込む前に新CRTCの存在チェックを行なう必要があれば0x0470を読んでbit7をチェックしておいた方がいいかも)。リセットも必要ありません。効果は即効性ありです。
ついでに。昨日やっとのことでSCANCONV.COM(フリコレ11に入っていたもう1本のスキャンコンバータ設定ツール)のソースが掘り出せましたんで(HCのHDDのバックアップから出土しました)、起動メッセージ等少しだけ変更したやつを置いときます。TOWNS用なのでLZHファイルです。ベースは25年前にでっち上げで書いたとんでもなくアレなものですが、31KCHK.COMにならって(?)ソース付きにしました。私が組んだ、数少ない対リアルモード用コードって意味では一見の価値があるかもしれないし、ないかもしれない(あとはTTBBSくらい(謎))。
http://retropc.net/ryu/unz/sconv15.lzh
もいっちょ。半非公開ページのTOWNSのサウンド出力比較ページに津軽(20200826版)を追加しておきました。現状の津軽では手元にあるPMDFMドライバを組み込むと初期化処理でコケてるっぽくてVM Abortもせずに止まるのでどうしようかと考えていたら、手元にあるPMDFMプレーヤーでPMDFM.EXPだけは動いたので助かりました。FMVOL:8192、PCMVOL:1280の設定にしておけばまぁまぁ本物と似た感じのバランスになってるんじゃないかと。
http://retropc.net/ryu/unz/snd/sndcompare.htm
ただの自分のサイトの宣伝になってしまうとマズイので(^^;)最後に。ソフトウェア互換リストでAになっているDAPSタイトルのうち、いくつかはDAPSリプレイで不具合が出ます。Orgelでは桜沢加奈子がドアの窓を降ろしたところで確実に停止、まだリストに出ていないAYAリメイク版でも何カ所かでSCSI ID:2のHDDにアクセスランプが点灯したまま止まります(どちらもまだ解析には手を付けていません)。もう一回最新版で調べた方がいいのかな…。
2020-09-02 08:57:45
ついでに。津軽には何の関係もありませんが(^^;)、V-TOWNSのTOWNSモードではMIDIカードを認識させるか否かの設定がI/Oからできるようになっていて、実際には同やるかというとI/Oポート0x0520(R/W)のbit0で設定します(0=なし、1=あり)。なお、初代でこの設定を1にすると純正EUPドライバを使ったソフトが全滅します(^^;;;;;;;;;;
2020-09-02 09:12:12
なるほど!テストありがとうございます!やはりDAPSは甘くなかったですか。多分かなり限界のことをやってたでしょうからね。
ちなみに、Air Combat II、ユーティリティからキーボードの割り当てができたので、見たらキー操作がすべてわかったのですが、それだと操縦しにくいのでカスタマイズしようと思ったら、ユーザディスク作成ができないことが判明したので、Cグレードに下げました。とくに変わったことはしてなくてCD-ROM BIOSを使って音楽演奏しているのですが、なぜかPAUSEもSTOPもしないままファイルを読もうとしているようです。現在調査中です。
2020-09-02 09:34:34
さらについでですが、だいぶ前に書いた隠しI/O情報、V-TOWNSのメモリマップ、各機種の機種ID/開発コードネームを書いたテキストファイルを置いておきます。なんか微妙に役に立ちそうにもないですが(^^;)
http://retropc.net/ryu/unz/tmp/towns_etcetra.zip
2020-09-02 10:07:43
たけがみりうさん
貴重な情報を有り難うございます。まだ準備は出来ていませんが、準備が整い次第WIKIの情報に追加させて頂きます。
探しもしなかった私と比べると、恐ろしい探究心ですね。 敬服いたします。
2020-09-02 10:21:04
>WINDYさん
20年くらい前に書いた資料に加筆修正した程度なので特に大したことはしてません。
あと、私のことは「りう」で構いません。NIFTYのハンドルが「RYU」→「RYU君」→「りゅうくん☆」→「Ryu」→「りう」→「たけがみりう」と変化してきたので(^^;)。ちなみに元ネタは某有名格闘ゲームの主人公…ってそのまんますぎるだろ!!
2020-09-02 10:31:11
>りうさん
了解しました。以後、そのようにさせて頂きます。 元ネタ・・・ 私のはちょっとアレですね、トヨタのカローラII WINDYのCMをしていた方の大ファンだった・・・ あ、今もか。
WIKIの主たる目的はWEBに散りばめられたり、過去に置いて来たFMTOWNSの情報を集約することです。
私は大した情報を持っていない(Oh!誌位?か関連図書)のですが、得られる情報は今となっては非常に大切なものですので感謝しています。
2020-09-02 10:40:50
Air Combat II Specialでユーザディスクを作成しようとしたら、CDDAを止めないままCD上のファイルを読もうとしてDrive Not Readyの無限ループが起こったのですが、どう見てもCDDAを止める気がなさそうだったんで、UNZで動作を見たのですが、ショックを受けました。CDDA止まってないのにユーザディスクができてしまうようです。別にエミュレータなので、この現象を再現するにはコマンドA0でCD演奏中のステータスを返さないことにすればできるのですが、そんなことが可能だったのでしょうか???
ただ、その後津軽で試したところ、実はユーザディスク作成しなくてもただのフォーマット済みディスクをAドライブに入れておけばキーのカスタマイズができるようなので、実はUNZはDOSの24Hを無視している(単にIRETしてるのかも)可能性もあるかもしれません。というのは、Emerald Dragonでフロッピーディスクにライトプロテクトをかけた状態でイベントシーンに入るとき、どう見てもDOSのINT 24Hに入って抜けられなくなるとしか思えないのですが、UNZだと抜けてくるんですよね。なおキーカスタマイズしたら普通に操縦できました。というわけなので、ランクをBに上げさせていただきます(^_^;)
デバッガからCDDAを強制終了するコマンドを追加して、CDDAが止まった状態でユーザディスクが作成できるか見てみようかな。
2020-09-02 11:17:03
元ネタに参戦すると、僕がFTOWNSにいた当時のハンドル名YS11は、自分のイニシャルが苗字を先にすればYSで、なぜか子供のころトイレの壁に貼ってあった学研か小学館の付録のポスターに「国産旅客機YS11」というのが出てたのがなぜか頭に残っていたので、そのようにしてましたね。あの辺から航空ファンになる片鱗があったらしい。今は、(セスナ172だけど)本当に機長になったので、山川機長 (英語のときは CaptainYS) にしてます。と、言うことを友達に言ったら、英語のPilot In Commandと機長は微妙に違うんじゃない?と言われましたが、でも、Pilot In Commandを訳したら機長で合ってると思うんですよね。ただ、CaptainとPICは違うので、CaptainYSは誇大広告だろうと言われるとその通りでございます。
2020-09-02 11:33:22
間違い。UNZでユーザディスク作ろうとしたとき既にキー割り当てが入ったディスクイメージに書こうとしたもんだからディスクがブランクでないというメッセージが一瞬出て消えてただけでした。ブランクディスクでやりなおしたらUNZでもやっぱりCDが入ってないというエラーが出ますね。やっぱり津軽もUNZも正しい動作をしてる気がする。CDDA鳴らしたままファイルを読むなんてできたのか!?とショックを受けたのですが、やっぱりできなかったようです。安心しました。
ユーザディスクは、どうもCDの\AC2\D1\CONFIG.KEY, DISKID, REPLAY1.DAT, REPLAY2.DAT, REPLAY3.DAT の3本のファイルをFDにコピーすればいいだけのようなので、想像として、マニュアルの他に一枚別紙が入っていてユーザディスクを作成するには、この5本のファイルをFDにコピーしてください、みたいなことが書いてあったとか、あるいは、いったんCDを開けて閉めてからユーザディスクを作成するようなインストラクションが入っていたとか、あるいは、「CDが入ってません」というエラーが出たら直感的に取る行動としてはCDを開けて閉めなおすという行動だろうから、結局みんなそうやってなんとかしてしまっていたとかそういうことだったのかも。実機でやってみりゃいいんだよな。
2020-09-02 13:05:00
>65 WINDY
まぁ、特にV-TOWNSに関してはいろいろ解析して最後にはTOWNSモード用のチューンナップツール(vttuneup)やらキーマップ変更ツール(elena)まで作ってしまったくらいなので。
vttuneupでも設定可能なスプライトのアレ(V-TOWNSでリミッターを解除すればスプライトが大量に表示できる件)は、富士通の技術陣がこっそり仕込んでいた機能がad hoc氏作のvtowns.com(ATモードからTOWNSモードを起動するツール)に隠しコマンドとして組み込まれていたものを1999/2/28…そう、忘れもしない初代TOWNS発表10周年の際に当時担当していたFTOWNSの週刊ダイジェストで触れたことがきっかけで、TOWNSカードのPCIコンフィグレーションレジスタを解析していた段階でどこを書き換えればいいのか自力で調べ、週刊ダイジェストで発表してから1年半くらい経ち、その他メモリサイズ設定等も発見して解析結果もまとまったので、改めてvttuneupとして発表したんですが、某pediaにスプライトの件の記載があることでそれを自分の功績と言わんばかりに上から目線で某匿名掲示板のTOWNSとはあまり関係ないスレに書きまくるのは困ります…本気で「てめーは何もしてないだろうが」と言いたいです。こういうのが多いから某匿名掲示板は困る…。
…って文章がグダグダだなorz
2020-09-02 13:13:13
>71(自爆)
あ、冒頭のWINDYさんの敬称が抜けてました。ごめんなさい>WINDYさん
2020-09-02 13:23:41
HCのHDDの中を漁っていたら新CRTCの適当な検証ツール(コマンドモードで新CRTCから出力するためのツール…でいいんだっけ(汁))が出てきたのでリンクしておきます。何の保証もしません(^^;
http://retropc.net/ryu/unz/tmp/RHG.C
2020-09-02 14:03:22
>69,70 山川機長さん
YS11は名機ですね、乗った事が有るらしいのですが2歳位だったので記憶に有りません。(見た事は何度も有り)
因みに私の部屋の壁にはB52のコックピットが貼ってありました。そのおかげ(?)でミリタリー好きで航空ファン誌も随分沢山買いました。
AirCombatIIは持っていますので実機で試す事が出来るかな?
問題はモデル2ではモニターの関係で24kHzが映らない(多分AirCombatIIは24kHzだと思う)のと、HCはCD-ROMが不良でCDから起動できるかが微妙・・・
あとは、FDDが動くか不安(前にやったときは何とか動いた)ですが、一度駄目もとでやってみます。
ひょっとして、CD-DA再生中にファイルの読み込みコマンドを送信したら、CD-DAの再生が中断またはキャンセルされるような動作なのでしょうかね。
>71 りうさん
あー、ホントだ。今気づきました! 全く問題有りませんよ。
元々本名が読みづらく、読み間違えられたり書き間違えられたりする事が日常茶飯事ですので、名前に関しては双方が認識するために必要な記号または音としか考えていませんので。
2020-09-02 14:09:07
りうさん、
なんと貴重な!ありがとうございます!参考にさせていただきます!
WINDYさん、
僕も当初MODE1READコマンドが出たらCDDAが止まるのかと思っていたのですが、その前の段階のコマンドA0でCDDA再生中をチェックしてエラーを返してしまっているので、MODE1READまで行ってない模様でした。コマンドA0に対してCDDA再生中のステータスを返すのは正しいはずで、こうしておかないと動かないタイトルもあったはずです。CRTCは、たしかに24KHzですね。とりあえず、津軽ではユーザディスク作成時はCDDASTOPコマンドで対応ができるので現実的は問題は無いですね。あとは、実はただのブランクディスクを入れておけば問題ないという可能性もあって、ユーザディスク作成しなくてもただのブランクディスクにキー割り当てを保存することができました。Air Combat IIはもう少し調査が必要のようです。
ちなみに、CD BIOSはCDDA再生中に別のREADコマンドなどを実行するとエラーになりますが、CD BIOSを経由せずに直接CDCにコマンドを送るとCDDAは止めて新しいコマンドを実行するのが正しいみたいです。
まだこちらでは確認していないのですが、マイクロコズムの動作確認にCDDAが始まった後でゲームを開始するとCDDAが止まらないとあるのは多分CDDA PAUSE/STOPコマンドを送らないでMODE1READを出してしまっているのだろうと思っています。津軽だとコマンドA0に対してCDDA再生中ステートを返さなければCD BIOSはCDのファイルを普通に読めるはずなのでそういうオプションを追加してみてもいいですね。
2020-09-02 21:19:56
>75 山川機長さん
AirCombatIIの実機動作の件、少しお待ち頂けますか?
先程モデル2でAirCombatIIを起動させて、モニターは映らないので音楽がなってからRETURNキーを押して音楽が変わってから↓キーを2回,ENTERキーでユーザーディスクの作成を見えない状態で行ってみたのですが、何かしらのエラーとなっている様でFDDのアクセスランプは1度点灯するのですがデータをコピーしている様子はなさそうでした。どういったメッセージが出ているかを確認しないとなんともならない様子です。(その時は、CD-DAから音楽を演奏しながらFDDのランプは点灯していました。)
HCは案の定CDからの起動は出来ない状態でした。
24kHzを表示できるモニターを実家or屋根裏からサルベージしますが、屋根裏のFMT-DP532は使っていた当時モニター無いからパチパチと時折音が出ていましたので使う気にはなれないので実家のFMT-DP8711を持ってくる方向で考えます。
2020-09-02 22:48:21
>76 WINDYさん
FMTDP8711は確か15kHz/31kHz/48kHz/56kHzの4モードスキャンなんでそれじゃ24kHzモードは映らないんじゃ…
2020-09-03 00:47:36
この間研究室から回収してきたコネクタなどを使ってMX稼働状態にしました!このMXは去年ヤフオクで落としたままテストもしていなかったもので、どのぐらいHealthyなのかわからなかったのですが、CD-ROMも生きていて内蔵HDも生きてます。が、ハードディスクにはOS以外何も入ってない模様でした。OASYSが入ってたからOASYS用に使ってたのかな?このディスクイメージ取りたいけどどうすりゃいいのかな。OASYSパーティションが生きているので貴重です!ディスクBIOSとRS232C経由でイメージ取るプログラム書けるけど192bpsでハードディスクイメージ転送っていつ終わるかわかんないし。RS232C経由でディスクイメージ転送するツールを作って、使ってないラップトップを一台数日がかりで送信する役割に充てようかな。多分1MBが1時間ぐらいとして、200MBだと、200時間!8~9日か。できないことはない。どっちかというと9日もMX連続稼働させて大丈夫かって方が心配。
それで、Air Combat II Specialですが、実機でも音楽演奏中にユーザディスクの作成はできませんでした。バグですね。ふたをあけてCDDAを強制的に止めることによってユーザディスク作成できました。これは、多分マニュアルの他に一枚紙がペラっと入ってたパターンではないかと思います。開発中はハードディスクから起動してて気が付かなかったとかですかね。CD-ROMに焼いた後のテストは既に作ってあったユーザディスクでテストしたから気が付かなかったとかいうパターンが想像できますが。実機での動作はふたを開けて閉めると、次にもう一度エラーが出てからユーザディスクが作成できますが、これはおそらくDisk Changedを見ているからと思います。津軽のCDDASTOP機能を使えばエラー無しでユーザディスクが作れるようです。CDDASTOPは今日の晩のリリースから(GUIからも)使えるようにします。
2020-09-03 01:18:07
ひらめいた!セクタの生データ読んでSCSI2SDのパーティションにセーブしたやつをWindowsに持って来りゃいいんだ!また今週末にも許可もらってSCSI2SD回収に行ってこよう。
2020-09-03 02:12:19
>77 りうさん
有り難うございます、あやうくデカい物を運んでくるところでした。
であれば、FMT-532しか無いですね。 しばらく使ってないから完全放電してるだろうし通電前に内部のクリーニングでもすれば大丈夫かな。
あとはFDDも調子が宜しくないようなので、ついでにクリーニングしようと思います。
2020-09-03 07:51:54
あ、でもAirCombatIIでの確認は出来たようなので急ぎではないものの、何時か必要になるのでそのうちやろう。
2020-09-03 09:53:25
新しいリリースをPUSHしました!今Githubがコンパイルしてくれてます(今終わったらしい)。なお、実験的にアナログジョイスティックをマウスにトランスレートする機能を追加してみました。Strike Commander, Wing Commander 2がものすごく操縦しやすくなって、Wing Commander 2ではおもしろいように弾が命中しました。ジョイスティックをちょっとぐらぐらっと動かすと有効になって、マウスを動かすとまたマウスが有効になるようにしたのでどっちも使えます。Wing Commanderはひねくれてて中立位置のマウスXYがコロコロ変わるので、どこに書いてあるのか解明してやろうと思ってます。Zキーを押すとマウス座標を中立位置に動かしてるらしいので、そのタイミングをつかまえるか、あるいは飛行中にマウス位置を読んでる箇所を特定すればそれに続いて中立位置との引き算をしているはずなので、見つけられるだろうと思ってます。
まだGUIには出してないですが、-FLIGHTMOUSEオプションです。
Wing Commander 2 -FLIGHTMOUSE 0 320 135 400 300
Strike Commander -FLIGHTMOUSE 0 320 200 400 300
みたいな感じで使えます。最初の数字がジョイスティックID、以降が中立位置、左右の移動幅です。どっちもApplication Specific Augumentationを有効にしてないとマウス座標を送れないので機能しません。この機能を有効にした状態でTowns MENUとか起動してジョイスティックをちょっと動かしてみるとどんな感じにトランスレートしてるか視覚的にわかると思います。
2020-09-03 10:47:33
>82 山川機長さん
マウストランスレートを試してみました、見違えるような操作感となり非常に面白い機能だと思います。
1点だけ余裕が有ればお願いしたいのですが、私のコントローラが少しボロいのかセンターで安定しない傾向がある事も要因ですが、センターに遊びが有れば少しのアナログ値のふらつきに敏感に反応しなくなるので、"-FLIGHTMOUSE 0 320 135 400 300 10"みたいな感じで設定できると良いかと思います。 ←の場合は10%
2020-09-03 23:09:44
おおなるほど!やりましょう!というか、やりました。今晩のソースでZero-Zoneが指定できるようになります。
2020-09-04 00:58:09
ハードディスクのサルベージ成功しました!必要なのは、津軽の環境の他にSCSI2SD(または相当品)と、動作可能なTOWNS実機です。詳しくは津軽のドキュメントに書きますが、
(1)実機上でイメージツール(ソースはひそかに既にGithubのtownsapp/hdimage/hdread.c)を使って、SCSI2SDのドライブにイメージをファイルとして保存。
(2)Win32DiskImagerなどを使ってSDカードのイメージをPCに読み込み。
(3)津軽にマウント
(4)津軽ファイル転送プロトコルを使ってイメージファイルを抜き出す
(5)つなげて終わり。
です。津軽ファイル転送プロトコルは、VNDRVで双方向のファイル転送が実現するようになったらそっちの方が手軽になると思われますが、とりあえず当面のつなぎとして使えると思います。CUIからしか使えませんが、コマンドで、
VM2HOST vmFileName hostFileName
というコマンドを打っておいて、VM上でこれもソースはgithubにある ftclient.exp を実行するとファイルが転送されるという仕組みになってます。Host to VMの場合はHOST2VM。これも、EXPファイルをgithubに出さないと使えないですね。そのようにします。
で、OASYSを起動してみようと思ったのですが、I/OにリセットをかけてHLTがかかって止まりました。そういえば、リセットボタンやI/Oによるリセットのシーケンスがわからなくて実装してないのですが、どうやったもんですかね。基本的に各デバイスにリセットかけてCPUの起動ベクトルに飛ばせばいいのかな?でもそれだと普通にTownsOSが起動してしまう気がする。
しかし、OASYSのイメージができたのは大きい。実家から回収してきたOASYSのフロッピーディスク読めなかったし。
2020-09-06 23:21:03
ついさっきPUSHしたソースで、ストライクコマンダー専用 -STCMTHR オプションをGUIにも出しました。これを使うとストライクコマンダー以外のアプリケーションではフルキーの1,2,3,...,0をアナログ軸を動かすことで入力できます。ストライクコマンダー以外にまったく使い道が思いつきません!
あと、バーチャルキーもGUIに出したのでパッドのボタンにキーを割り当てられるようになりました。RPGなんかで移動にパッド、他の操作にキーを使ってたようなやつには応用できる鴨しれません。これってUSキーボード使ってるときかな漢字変換キーに割り当てておくとテストに使えるという実用的な意味があることも判明しましたが。しかし、OAKを使ったことがあると今のMS IMEがあまりにも頭が悪くて日本語はTOWNS上でタイプしたくなってくる。というか、Windows 10についてくる最新版って、前のバージョンにはあったアルファベットと数字を常に半角に変換する機能が無くなってるのは英語版Windowsに日本語をプラスしたからなんでしょうか。あと、まったく学習しない気がするのですが。何度やっても僕が頻繁に使う単語を覚えないし。日本語版Windows 10だとここまで酷くないもんですかね。あまりにも日本語と英語が混じった文をタイプしづらいのでATOKを買ってしまおうかと思ってるのですが。ううう、富士通にはOAKだけ売ってほしい。
2020-09-09 09:43:18
>86
アップデート有り難うございます。-STCMTHRオプションは確かにニッチすぎる実装ですが、こう言ったオプションはある意味において可能性を示す無いようだと思います。
OAKは流石に今は有りませんが、OAKの後継としてはJAPANISTが有ります。2021年5月で終売,2026年6月でサポート終了です。
私はWINDOWS環境では頑なにMS-IMEとATOKを拒み、JAPANISTを使っております。使い心地はほぼOAKなのでこれを機に是非ー検討ください。
https://www.fujitsu.com/jp/products/software/applications/applications/japanist/
2020-09-09 09:56:39
リリース出しました!内容は、既にここで書いた通りですね。
ちなみにI/O 0020Hによるリセットに対応して、OASYSが起動しないか、と、思ったんですが甘かったですね。赤本だと0020Hに1を書き込むとCPUとFPUにリセットがかかるということですが、他にリセットするべきものがあるのかどうかですね。ただ、4A20:10E6でOUT DX,ALでリセット信号出して、次のバイトでHLTで、SYSROMのブートコードを通ってきてHLTの次のバイトにジャンプしてくるので、シーケンスは正しいっぽいです。でも、残念ながらその後エラーメッセージを出そうとして止まってますね。Windows 3.1も試しに起動しようとしてみましたが、Windows 3.1のロゴまでで止まりました。UNZってOASYSとWin3.1って対応してましたっけ?UNZでトライしてもCS:IPを見ると同じとこまでで止まってるっぽいので、イメージ化に失敗したかそもそもディスクドライブの内容が既に壊れていたという可能性もあるんですがね。明日 CR2032のソケットが来るのでMXのバッテリーを新しくしたら実機でどうなるかいろいろやってみるつもりです。
2020-09-10 09:03:21
>88
OASYSですが、うんづの掲示板に以下の様な書込が過去にあります。その後に動かないとの書込がないと言うことは動いたのでは?と思います。
https://8730.teacup.com/townsemu/bbs?page=24&
2020-09-10 09:49:54
おおなるほど!書き込みを見ると、OASYSパーティションからの起動にも対応すれば完璧、というような記述があるのでひょっとするとFD起動しか対応していない可能性もあるでしょうか。OASYS.EXEの動作を調べているのですが、多分OASYSのIPLと思われるコードをセグメント4A20H~に読み込んで、その中でI/O 0020Hに1を書き込んでCPUにリセットをかけているのですが(書き込み後HLT)、その後SYSROMは、HLT命令の次のアドレスにジャンプしてきて処理を続行するのでおそらくOASYSパーティションのIPLを読み込んで、正しい起動シーケンスが始まっている模様です。しかし、エラーメッセージが出るもののメッセージは完全に壊れているというとこで止まってます。今試している方は実機で起動を確認していないので、起動が確認できている昨日の晩にイメージ取った方でどうか、やってみます。FD再度見てみたのですが、カビがひどいんですね。多分読み込めないし、一応拭き取れる限りのカビは99%アルコールでクリーンしたものの、FDドライブに入れるのも不安という状況でした。
2020-09-11 21:46:32
いつぞや津軽のエミュレーションスピードに関して、リニアアドレス→物理アドレスのお話があったと思います。
PC-9821エミュレータであるSL9821のページ(http://www.satotomi.com/sl9821/)にある、技術的なはなしのなかで同様の事項が有りますが作者であるsatotomiさん工夫が紹介されています。
津軽のエミュレーションエンジンの構成まで見てなのでアレですが、毎回リニア→物理変換を行わずにセグメントごとに内部でキャッシュしておいて対応しているようですね。
2020-09-30 17:49:18
おおなるほど!ページングのキャッシュ問題はその作者さんとまったく同じ疑問を持ってました。キャッシュしたいが、CPUがページ有効にしたままページテーブルを書き換えてしまった場合に備えてページテーブルをモニタしたらキャッシュで得られるパフォーマンスがほとんど無になってしまう、と、思ったらなんかページテーブル書き換えたら必ずCR3に書き込む処理が入ってる、が、インテルの公式マニュアルを見てもCR3の書き込みが必要とは一言も書いてない、という問題です。実行中にばんばんページテーブル書き換えるのは、たしかフラクタルエンジンで見たと思いました。しかし98のアプリでも書き換えたらCR3を上書きする処理が入るということはインテルの公式文書のどこかにそういう注意書きが書いてあるのかな?あれも長いマニュアルだから端から端まで読んだわけではないですし。ページテーブルキャッシュ入れてみようかな。
2020-09-30 21:54:55
Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3 ですと、
4.10.4.1 Operations that Invalidate TLBs and Paging-Structure Caches に記載があるようです。
2020-10-01 05:15:18
なるほど!ということは、Page Tableの変更があった後に必ずCR3への書き込みがあると期待してもよさそうですね。そうだったらガバっとキャッシュを作ってしまうことで結構高速化ができそうな気がします。やってみます!
2020-10-01 09:29:43
>64 りうさん
towns_etcetra.zip内のIO.TXTに記載が有る、I/O 05E0h,I/O 05E2hのメインRAMウェイト制御レジスタはバイトデータでしょうか?
もし覚えていらしたら教えていただけませんか?
これって、モデル2が出て暫く後でメモリウェイトを少なくするソフト(AB.COMでしたっけ)で使ってた奴ですよね、随分とお世話になったなぁ
2020-10-02 18:13:17
>>94
手元にある80386のマニュアル(本)にも、ページテーブルキャッシュ(TLB)をクリアするには
mov eax,cr3
mov cr3,eax
しろと書いてありますね。ただし、不在ページはキャッシュに入らないので、不在ページが新たに存在するようになったときはcr3をロードしなくても良いとも書いてあります。
2020-10-02 18:44:28
津軽のCPUコアにページテーブルキャッシュ実装してソースをPUSHしました!感覚としては数%速くなったような感じがしますが、どんなもんですかね。クロック数をちょっと上げても着いてきてるような。Fractal Engine Demo、Megamorphのオートデモ、Microcosmのオートデモも走ることを確認したので正しく処理できていると思います。
最初単純に1M個のuint32_tにして、ビット1 (Present bit)が1のときは有効、0のときは無効にして、CR3に値が書かれるたびに全部ゼロクリアしたら妙に遅くなって、何事かと思ったらリアルモードに行ってプロテクテドモードに戻ってくるときにゼロクリアが発生してリアルモードのINTが出るたびに1M個のintがクリアされるという現象が起きてたので、カウンタをつけて、カウンタが閾値未満の場合はキャッシュ無効ということにして閾値を1プラスするだけでクリアできるようにしました。
2020-10-04 06:02:10
>97
今のところは数パーセントで上々では無いでしょうか。
他の機種の事情はよく解りませんが、TOWNSの場合はリアル←→プロテクトの切り替えがBIOSの関係で頻繁に起こるので効果が薄いのかも知れませんね。
最適化も充分にしていない状態でしょう、数パーセントの積み重ねが大事だと思います。
2020-10-04 22:47:08
>95 WINDYさん
基本的にI/Oポート 0x05E0~0x05F1は全てバイトアクセス前提で設計されていると思います。
ワードアクセスしてもあまり意味がないし、もし2代目以降で65535ウェイトなんて設定ができても誰も喜ばないので。
0x05E0,0x05E2,0x05E6あたりはまさにAB.COMで制御していたポートですね。懐かしい…
2020-10-11 14:17:31
現在ハイレゾモードでTowns MENUが使えるようにしたいと思っているのですが、りうさんのソースで解像度はなんとなくわかってきて、オフセットがわからないけど多分ハイレゾでスクロールゲームは出てなかったと思うからとりあえず無視するとして、色数の指定がどれだかわかりますかね?モードとしては、16色1024x768x2Layer, 256色1024x768x1Layer, 24bit 640x480x1Layerと32K色モードもありましたっけか?
なお、アナウンスしてなかった気がしますが、ひそかにMaximize WindowモードとAuto Scalingモードが増えてます。コマンドパラメータ、GUI両方使えます。
2020-10-20 10:06:23