FMTownsのアプリケーションの動作報告用
2020-07-28 13:17:50
v20200729 : DAINOSAURの動作確認(こればっかりですが)
・タイトルロゴグラフィックが変 : ビットがずれているような状態? (背景の絵は正常、ロゴのみ)
・動作中にESCキーを押すと停止 : 0092:0B89 CALLF WORD PTR ES:[DI+02H] (ES=0A7E,DI=5C4B) 0A7E:5C4B以降はダンプで見ると明らかにコードでは無い様子
2020-07-30 23:29:23
了解しました!
BREAKキーのジャンプテーブルが↓で破壊されているようですね。多分RAM Diskに値を書き込んでいる箇所だと思うのですが。ジャンプテーブルの置き場所が悪いのか、RAM Diskの置き場所が悪いのかどっちかですね。ただ、CR0のPEビットが立っているのでUnrealモードを使っているのではないかと見ているのですが、だったらあえて物理の10000H台にRAM DISKを置く意味が無さそうなので、RAM Diskの位置のような気がしています。
Memory Write DWORD PTR PHYS:[00010428] (80818181)
4000:00004525 F366A5 REP MOVSD
それから、タイトルのロゴは、なんとなくXの奇数と偶数が入れ替わっているような感じがしていたのですが、やっぱりおかしいんですね?この二点調べてみます。
2020-07-31 10:22:59
Shadow of the Beastをなんとかしようとしていたのですが、またしてもPsygnosisはCD-ROMコマンド 02H (MODE1READ, Status Request無し, Int無し)を出してから Status を待つんですね。FM TOWNSテクニカルデータブックによると、コマンドのSRQビットが立っているとCDCがStatusを返すことになっていますが、このビットに意味は無いの鴨しれないという気がしてきてます。(確かに、ビットが立っているとStatusを返すとは書いてあるけど、立っていなかったらStatusは返さないとは書いていない鴨しれない。)
DINOSAURのタイトルロゴは直しました。ただBreakキーは謎のままです。RAM DiskがキーボードBIOSの一部を破壊する問題で多分RAMDISKの置き場を間違っているのだろう、と、思ったのですが、置き場はGDTに書いて合ってGDTは圧縮データを展開しているだけのようなので、10000H固定っぽいです。だとするとキーボードBIOS(ひょっとするとFalcom独自かも)の置き場ということになりますが。引き続き調査を続行します。
2020-08-01 02:20:45
まだリリースは出してないですが、Githubのソースをビルドすると、Shadow of the Beastも起動するようになりました。が、謎のCRTC設定を使っていて、画面が変です。左に歩くと画面が更新されなくなるし。CRTCの各レジスタの正しい解釈を知ってる人がいたら教えていただけると非常に助かります。ひょっとするとインタレースモードで画面が上半分に詰まってしまう現象が起こる鴨しれないですが、そういうの見かけたら教えていただけるとそれも助かります。鳥あえずAfterburnerなど試した範囲では大丈夫そうなんですがね。Vain DreamとVain Dream 2がプレイ開始までできることを確認しました。DMAのAUTOIモードは転送終了後カウントだけでなくアドレスも巻き戻すことが判明(データシートで確認)して修正したので、同じ問題でひっかかってたソフトはこれで動くようになった鴨しれません。
2020-08-01 10:30:44
>>4 DINOSAURの件
ふと、「キーのジャンプテーブルかぁー、でもスペースキーは正常だよなぁ?」「??? あのアドレス付近はジャンプテーブルっぽい内容ではなかったよなぁ???」「うんづではどうなんだろう????」「BREAKキーって押したこと無いような」と思いましたので、試しにうんづでBREAKキー(PAUSEに割り当て)を押してみました。見事に暴走します。
イメージの問題なのか、元々プロテクトが掛かっていたはずなのでそれの問題なのかは不明ですが、結果は同じアドレスでストップしますので間違いは無いと思います。
実機で実FDで試してみたら・・・・ まさかBREAKキーで止まることは無いとは思いますが・・・ それ以前に私のHCでFD起動出来るか?と言う問題が有りますが、試してみます。
2020-08-01 22:42:34
で、結果は判らずでした。
HCでは起動時にFDにしばらくアクセス後にダンマリ。TownsOS上からはProgramDiskを読み出すとIO.SYSのみが表示されるので一応はハードの故障では無いような反応ですが、以前にDOS6を起動しようとして起動できなかった記憶があるので信用できません。 model2ではTownsOS上からドライブ0側ではエラー,ドライブ1側ではIO.SYSのみが表示される状態からドライブ0側はFDDが故障している様子。 起動させてみましたが動いている様子は無く(モニターが31KHz以上なので、起動中やDINOSAURの実行中は画面が見えない)音楽も鳴らない状態です。 従ってタイトル画面までたどり着けませんでした。
model2に関してはドライブ0とドライブ1をスワップすれば起動できるかもしれませんが、HCは一部のFalcomソフトは自己書換えが有るので486以降のCPUではキャッシュの影響で動作しないと言う話を記憶しているので駄目かもしれません。
2020-08-01 23:18:17
すみません、ジャンプ「テーブル」ではないっぽいです。詳しくは見ていないのですが、Breakキー専用の飛び先っぽいですね。うんづでも暴走したということは、ひょっとすると当時から隠れたままのバグ(多分Breakキーを押して暴走しても何が起こったかわからなかった)だった鴨しれないですね。確認ありがとうございました!
2020-08-01 23:37:23
互換リストにも記入したのですが、スト2のPCMについてです。
・PCMの再生終了時にノイズが乗ることがある
タイトル画面のカーソル移動音で確認できます。他の場所でも起こります。起動直後はあまり気にならないのですが、一度ゲームプレイした後、目立つようになります。
・PCMが鳴らないことがある
バトル開始時の"FIGHT"の掛け声がたまに鳴りません。他では確認できませんでした。(気付いてないだけかも)
スト2は、長いPCMを再生するためにデータを転送しながら再生しているので、その関連かなと思います。
今回はソースを修正してCD-DAをオフにして確認しましたが、各音源の音量調整が出来るようになると便利ですね‥と、さりげなく要望など。
2020-08-02 12:48:16
了解しました。ボリューム調節機能を追加したらどのぐらいのボリュームで実機に近いか確認しやすくなっていいかもしれないですね。やりましょう!(そこまで額は後退してないけど、いや、あれは孫社長が前進してるんでしたか)
ちなみに、今は何やってるかと言うとShadow of the Beast 2でメニュー選択後の太ったドラゴン像のシーン(樽に翼とクビが生えてるようなやつ)をスキップしようとするとCD-ROMのDEI割り込みを取りこぼして無限DRY待ちという状況をなんとかしようとしてます。意図的にDEIを取りこぼさせてタイムアウトさせている可能性もあるのですが、確証が持てません。
しかしPsygnosisのCD-ROM読み取り方式は、あんなやり方でよくスピードが異なる各機種で動作したもんですね。もしもさらに新しい世代のより高速なTOWNSが開発されていたとしたら動かなかったかも。あんなリスクの高い書き方は僕にはできないと思いました。一応、スキップしなければゲームが始まるのですが、この部分をなんとかしておかないと次のイベントシーンでクラッシュするかもしれないし。
2020-08-03 23:48:42
リリースは出してないですが、GithubのソースではShadow of the Beast 2も動くようになりました。しかしもう昔のプログラムなので時効(?)鴨しれませんがMODE1READコマンドの止め方はどうかと思いました。平たく言うとMODE1READを止めるためにLost Dataエラーでコマンドが止まるまでひたすらステータスや割り込みをクリアし続けますが、その間のCD-ROMのステータスはほぼ放置で、正直CD-ROMドライブの状態はほとんど不定と言っていいように思います。無理やりエラーを起こして止めるというのは、僕はこういう書き方はできないですね。CD-ROMドライブにAbortコマンドが存在しなかったので仕方なかったのかもしれないですが。あと、コマンドか起動パラメータでFMVOL, PCMVOL指定できるようにしました。(コマンドパラメータで指定するときは -FMVOL, -PCMVOL) 値は4096がデフォルトで0~8192の値を指定できます。リリースは多分水曜か木曜に出します。
なお、作者が自分で動作確認に書き込むよりは誰か第三者の方に確認していただいた方が良いかと思って自分ではWikiに動作確認を書き込んでませんが、自分で言うのもなんですが、結構動くようになってきたと思います。PsygnosisのFM TOWNS用タイトルってFractal Engine Demo, Microcosm, Scavenger 4, Megamorph, Shadow of the Beast 1/2, Lemmings 1/2, Infestationと後何かありましたっけか?この中でまだ動作しない、または未確認なのはLemmings 2とInfestationだけになりました。僕はOriginの大ファンだったのでOrigin作品もすべて対応したいところなのですが、Wing Commander IIが厄介ですね。うんづでも動作しなかったし。うーん、あとDAPS系が試せてないか。
2020-08-04 10:16:06
最新版で、いくつかのタイトルをテストして、ソフトウェア互換リストの更新・追記しました。
私が見つけていないバグがあるかもしれません。気づかれた方は、追記して頂ければ幸いです。
2020-08-04 13:30:28
>>11
Shadow of the Beast2対応、有り難うございます。Psygnosisは結構無茶(と言うか無理やり)な事をやっていて大変では無かったでしょうか?お疲れさまです。
CRTC周りで変わったことをやっているタイトルで覚えが有るのはドラッケン辺りでしょうか?(たしか前に少しだけ試したような気がしますが・・・ もう一度試します)
ソフトウェアの互換性に関して、近頃少々怠けております。 申し訳ない。
私が挙げたリストは基本的に問題が有る物を書いている傾向があり、リスト外のタイトルで"動作した"または"動作しそうな"タイトルは除外している物も有ります。("98からのベタ移植は冒険的な事もあまりやっていないだろう"との個人的な観測から、その多くのタイトルが除外されていたりもします)
今はリストにソートが有るので、完全動作タイトルが多くなっても埋もれる事なく問題のあるタイトルが見つけられるので持っているタイトルを網羅的に埋め始めても良い時期かもしれません。
大物はDAPS系でしょうか? BIOSが改変されているとの事(確か割り込み優先度が違ったような)だったと思います。(全ては試していませんが、ほとんどタイトル以降で停止していたと思います)
思い入れの有る方も多いタイトルですので、対応が楽しみです。
2020-08-04 13:44:16
おおなるほど!割り込み優先度の変更というのは多分PICのSpecial Fully Nested Modeのことでしょうか?(多分それ以外優先順位変える方法は無い)SFNMを使っているのはShadow of the Beast 2で初めて見て対応したのですが、それに加えてRotationというのが入ってくると対応できているか自信がないですね。多分、試したらなんか変更が必要になってくるのだと思いますが、データシートというのも必ずしもわかりやすく書いてあるわけではないので、コードを見て何を期待しているか調べるのが一番良かったりしますね。引き続きよろしくお願いします!
2020-08-04 22:41:38
>>14
割り込み優先度の件に関しては、当時そんな話を耳にした程度で情報の正確性は判りませんのでそんな噂があった程度とお考えください。
私自身はその程度であれば仰る通りPICの設定を変えれば良いのでBIOSに手を加えてまでやる必要はないのではないかと思っています。
(BIOSのコードを変更する事はFJ2の許可無くして出来ない or してはいけない事だと思いますので、協力関係が有ってもしないのではと考えられる)
2020-08-04 23:08:16
>>14
連続ですみません。PICのプライオリティですが、DAPSシステムで使用しているかどうかは別としてOCW2のプライオリティコマンドを使用すれば特定の割り込みレベルを最低にする事が出来ると私は理解しているのですが・・・・ 試したことが無いので何とも言えませんが・・・・ もし、そう言うことであれば複数回のプライオリティコマンドを設定することにより好きな優先度を作り出すことが出来るのではないかと思います。
2020-08-05 10:22:47
自己レスです。
よくよく考えたら、上の発言の後半部分は間違いに近いような気がします。そもそもPICの割り込みレベルは任意の順にするような機能はなく、単に回転させて順番を変える事が出来る機能としてあるだけのような気がします。
Special Fully Nested Modeを使えば、レベルの引く割り込みを受けた後で自動的に回転する訳ですが上記のプライオリティコマンドでは任意のタイミングでコマンドを発行して回転を行うものだと思います。
2020-08-06 07:25:34
GithubのソースでThe 4th Unit Act4 Zeroは動作するようになったと思います。どうやらメモリマップI/OのCFFxxは普通のI/OのFFxxにも出ているのではないかと推測しているのですが、(FDxxがCFDxxに出ていないか心配) FF86 を IN AL,DX で読んでHSYNCをずっと待っていて止まってました。ゲームは開始してないですが、デモは見ました。マウスポインタを捕まえる必要がありますが、一応操作可能だと思います。Act 3 DUAL TARGETSの戦闘シーンでキャラクタのグラフィックが出ないのがひょっとして同じ原因ではないかと期待したのですが、違ったようですね。なんで描画しないんだろう。多分何かのタイミングでちょっとずつ描画するはずが信号が来なくて描いていないというパターンではないかと見ているのですが。
あと、ついさっきDOS6のEMM386環境でREIPLもできるようになりました。ARPLがUD例外を出してハンドルするようにしたら動くようになりました。DOS6はMODRV以外でデフォルトで入ってくるドライバはすべてインストールした状態で起動するようになりました。そのソースはまだPushしてないですが、多分こちらの晩にPushします。
2020-08-08 23:49:31
Brandishが起動しないのは、コピープロテクションでした。Raw Disk Imageでは再現できないですね。アメリカ国内でやる分にはDMCAは明示的にレトロゲームの動態保存のためのコピープロテクション解除は許可されているので僕は居住地の法律に基づいて解除しましたが、日本だと微妙なので、解除は各自の責任でお願いします。方法はここでは書きませんが、デバッガで簡単に見つかります。二か所あって、CF=1の場合無限ループとCF=0の場合無限ループになってる2か所のジャンプ命令、合計4バイトをNOP化すれば通過できます。(2バイトRETでも可)。僕はエミュレータ上で解除したのでディスクが暗号化されているかはわかりません。そこまでやってないような。それ以後は動いているように見えますが、「しまった、キー操作がわからない」に陥ってとりあえず開始直後のマップを歩き回っただけにとどまってます。なお、コピープロテクトの解除が違法なのであれば解除しなければよくて、ざっと見たところただのセクタの存在チェックのようなので、多分RAW binaryじゃなくてD77イメージを作ったら突破できそうに思います。なお、津軽はひそかにD77イメージ対応してます。そういうわけで今からタイトルのグラフィックが崩れる現象の捜査に当たりますね。
2020-08-11 10:07:51
Brandish解明しました。なお、多分UNZでも同じ方法で正常動作します。機種判別しているのですが、486のCPUコードを386SXと誤認して、GDTを386SX用に作ってます。津軽では、-PRETEND386DX オプションを追加して起動するとオープニングのグラフィックスは一切壊れませんでした。多分UNZでもCPUを386DX相当にして起動すると正常に動作すると思われます。
しかし、衝撃の事実で、386SX TownsはVRAMをA00000~にマップしてるんですね。でも、衝撃を受けたのは僕だけみたいで、FM Townsテクニカルデータブックの783ページにしっかい書いてました。うーん、これだとGUIにPretend 386DXオプション出した方がいい鴨しれない。そうしよう。
2020-08-12 08:42:05
当時、486機でファルコムゲーが動かないという話を聞いた覚えがありますが、これのことでしょうかね?ブランディッシュだけだったのかな。
2020-08-12 11:05:56
第4のユニット シリーズ 第5-7作は、"-PRETEND386DX"オプションで正常に動作するようになりました!
(うんづは、486のままでも動作します。)
ところで、皆さん、Brandishのマウスカーソルは操作できます?
私の場合、左上のRESTの上で、固まったままで、動きません。
環境の所為でしょうか。。。
2020-08-12 11:27:50
リリース出しました!昨日からの変更では、Star Cruiser 2の字が読めるようになり、Dual Targetsのバトル中のキャラクタが見えるようになりました。多分Zeroも見えるようになったのではないかと思います。マウスが暴れるタイトル用に、スピード調整ができるようになりました。Pretend 386DXオプションとマウススピード調節はGUIにも出しました。
2020-08-13 06:45:53
今、ソースを上げました。理論的にはFM Towns用ソフトの本数は有限なので僕が一本ずつ解析してマウスインテグレーションを追加していけば有限の時間内にすべてのソフトで快適にマウスが使えるようになるはずなのですが、僕の寿命が尽きる前にすべてのTowns用ソフトにインテグレーションを書けなかった場合を想定して(こんなにTBIOS使ってないソフトがあると思ってなかった) ゲームパッドのデジタル軸またはアナログ軸でマウスカーソルを移動するモードを追加しました。カーソルが振動するものや飛びまくるものはこれである程度対応できてくれると良いのですが。-GAMEPORT1の選択で、ANA0MOUSE または PHYS0MOUSE みたいな感じで指定するか、GUIでも指定可能です。
2020-08-14 11:07:26
山川機長さんの津軽へのVERR,VERW,BOUNDの実装で、IDES系のタイトルが軒並み動くようになりましたので、互換リストを更新しました。
大なり小なり、不具合のあるタイトルは、まだまだありますが、全然動かないタイトルは、もうわずかですね。
2020-08-14 12:49:19
ソースをPushしました。GameportのCOMの扱いが間違ってたので直しました。それから、PCMの割り込みですね。僕が持ってるデータシートにはなぜかバンク割り込みの記述が無いので、何が正しいのか推測するしかできないのですが、どうやら正しいIRQのタイミングはバンクが切り替わったタイミングではなく、バンクの最後のバイトを読んだとき、とすると良いようです。問題になるのはLoop-Stop Byteの扱いで、今までLoop-Stopはそのバンクが終わったとみなして必ずIRQを出していたのですが、Sim City 2000はPCMから割り込みが入るたびにバッファが終わったかどうか無視してWave Dataのポインタを進めるようでオーバーランしてしまいます。しかし、Loop-StopではIRQを出さないことにするとStrike CommanderのVoiceが壊れて永遠にIRQ待ちに入ります。それで、どうやら雰囲気として0x?FFFを読んだときIRQを出すものと仮定して、Loop-Stop Byteが0x?FFFにあったらIRQ、違うアドレスだったらIRQ出さない、ということにすると一応どっちも動くようになりました。Sim City 2000は、もうひとつI/O 4DCH を読んでビット7が0になるのを待ってる箇所がありましたが、ひょっとするとYM2612のI/Oのアドレスバスはビット2を無視してるのかもしれないですね。そういえば、同じ理由で、FM-7も公式にはFD0Fに書き込むことで裏RAMがオンになることになってますが、FD0Bでも裏RAMがオンになるんですね。手元のFM-7で確認しましたが、new7以降でもできるかどうかはわかりません。
2020-08-15 11:23:12
現在再度Wing Commander 2をなんとかしたいと思っているのですが、どなたかUNZで起動に成功した人っていますか?UNZでやってもクラッシュしてTowns MENUに戻ってくるので多分同じところで落ちているのではないかと見ているのですが。津軽だと今のバージョンではUnhandled ExceptionでAbortします。問題個所は↓で、
000C:0009367C FF153C9C0B00 CALL DWORD PTR [000B9C3CH]
ここでDS:[0B9C3CH]がゼロなんですよね。C/C++ではNULLポインタアクセスは禁止ですが、CPU自体にはPage Faultで無い限りExceptionを出す義理は無さそうですし。仮にPage Faultとしても、IDTはすべてデフォルトのDOS Extenderのハンドラっぽい(とび先セグメントが0008)ので、多分単にTMENUに戻るだけだと思うんですね。
間違った値が書き込んであるのであれば、書き込み箇所を特定して逆にたどっていけるのですが、この場合、起動時からここに到達するまで何の値も書き込まれてなくて捜査が難航してます。
2020-08-16 10:39:35
すみません、自己(半)完結ですが、Wing Commander II、クラッシュ前にINT 21H AH=40Hで"Not enough available memory"というテキストをプリントしていることが判明しました。メモリ32MBにして起動してもこのメッセージが出るのでおそらくなんらかの理由でメモリが無いと思い込んでるみたいなので、調べる手がかりができました。多分当時の標準だといくらなんでも8MBで起動できないはずは無いと思うのですが。引き続き調べてみます。
2020-08-16 22:08:53
>>28
うんづでの動作ですが、搭載RAM容量によるようです。RAMは最低5MB程度必要と思われます。
インストール時のRAM容量が自動的にアイテム設定の起動パラメータに設定されるようで、インストール時に4MB RAMで起動した状態だと"RAM=3"と登録されており、この状態ですとアイコンをダブルクリックしてもブラックアウト後、永遠に戻ってきません。
うんづのRAM容量を10MB等に設定しても、アイテム設定のパラメータ欄の"RAM=3"を"RAM=4"等に変更しないと、その後も起動できませんがパラメータを変更すると無事起動できるようになります。 時間の都合で起動後のサインコール登録までしか確認できていませんが、後は大丈夫でしょう。
※WC2はそう古くは有りませんが、初期のソフトはRAM容量を必要以上に上げると起動できないものが有ります。
16MBを超えると起動できないケースがあったと思いますので注意が必要です。
2020-08-16 23:14:30
>>28
津軽でのWing CommanderIIですが、こちらでは無事起動できています。
インストール時にRAMを8MBにしてインストールすると、アイテム登録内容は"RAM=7"となっていました。
起動できないケースではこの内容が"RAM=3"等になっていると容量不足で起動できないようですので、確認してください。
搭載RAMは自動的に認識するのではなく、インストール時のRAM容量-1が設定として登録されてしまう所がハマリ所のようです。
2020-08-16 23:29:48
おおなるほど!たった今僕も解明したとこです。RAM=4が最低のようです。この数字をSHL 14HしてADD FFDD0000Hしたものが001D0000H以上であることが必要でした。インストール時のメモリ容量は、今からチェック仕様としてたところですが、WINDYさんが確認していただいたのであれば、Wikiの方をそれに応じて修正します。ありがとうございました!
20年以上ぶりにWing Commander IIのオープニングを見て若かりし日々を思い出してました。あの頃はもっと髪があったなあ。あ、そういえばソースを見た感じだとこの数字が0だとチェック素通りになってるっぽかったのですが、一応確認してみようかな。
2020-08-17 05:27:05
ソースPUSHしました!Advantage Tennisが直ってます。今までF-29 Retaliatorが動くようにするとWing CommanderのイントロのCDDAが2秒早く始まってしまうという問題があったのですが、CDROMドライブのコードをいくら見ても何が悪いかわからなくて、ひょっとしてDisc Imageライブラリ?と、思って確認したらばっちり間違ってました。これでAdvantage Tennis, F-29 Retaliator, RAYXANBERが動いて、Wing Commanderのイントロも早くならなくなりました。それと、fuzzballさんのsprite.cppの修正をmergeしました。ありがとうございます!それから、ヒロさんのリクエストでキーボードでマウスを操作するオプションを追加しました。(-GAMEPORT1 KEYMOUSE) 一応、パッドもマウスもキーボードという場合に対応するために、ジョイパッドを矢印キーとZX、マウスはテンキーとテンキーのスラッシュとアスタリスクでボタンという組み合わせも可能になってます。(-GAMEPORT1 NUMPADMOUSE) コマンドパラメータ、GUIどちらからも選択可能です。
さっきRailroad Tycoonの起動ディスクをイメージ化してないことに気が付いてあわててイメージ化したところです(そして4重にバックアップした)。乾燥剤と一緒に保管していたのでカビとか発生してなくて無事読めたようです。あとで動作確認してみます!しかし、EDITDISKを使ったのでRAW Binaryはできたのですが、最近D77化って今難しいですよね。ファイルは一通り見えるのですが、プロテクトとかかかってないといいのですが。
2020-08-17 09:17:16
>>32
PC-6000シリーズエミュレータPC6001VのページにFD吸い出しツール「NDitt」が有ります。
http://papicom.net/p6v/tool.html
但し書きとして「PC-98フォーマットは未対応」と有りますが、ソースは公開されていますので手を加えれば何とかなるのかもしれません。
USB接続のFDDは非対応なので私の環境では試すことすら出来ませんが・・・・
2020-08-17 11:56:19
山川機長さん
-GAMEPORT1 KEYMOUSEオプション有り難う御座いました。
DORシリーズ、Brandish、Amaranth IIIが操作できるようになりました!!
(Amaranth IIIのオープニング後の本編の画面が激しく乱れていますが。。。)
2020-08-17 12:07:42
Release v20200812にて、アイ・オブ・ザ・ビホルダーIIが動作しました。
https://i.imgur.com/9KANvzr.png
https://i.imgur.com/V80lMee.png
https://i.imgur.com/Sspw6BQ.png
https://i.imgur.com/BhFL4be.png
https://i.imgur.com/EcW9QH3.png
https://i.imgur.com/ZVhTXd2.png
2020-08-18 01:50:49
YM-SHIMONDSさん、
動作テストありがとうございます!えーと、Wikiの互換リストに転載しても構わないでしょうか?
WINDYさん、
一応、NDittはあるのですが、Windows XPで内蔵FDを搭載した機種がだんだん無くなってしまって。大学に一台あるのですが、現在は入れなくなってるし、という状況です。
なお、昨日PUSHしたソースで多分Memoriesも動くようになってると思います。
2020-08-19 05:33:09
>>35,36
YM-SHIMONDSさん、
動作確認有り難うございます。WIKIの互換リストに追加しておきました。
こちらも巡回していますので、他のソフトでも確認が取れたものが有れば報告して頂けると助かります。
山川機長さん
了解です。HxC(または類似品)を使用した方が良いのかなと思っています。
2020-08-19 07:53:25
Release v20200812にて、あすか120%エクセレント BURNING Fest.が動作しました。
https://i.imgur.com/xo39wlL.png
https://i.imgur.com/sdEnvse.png
https://i.imgur.com/MQSFpK8.png
おかしい箇所
・サウンド面がPCMチャンネル(パーカッション)しか鳴らない
・タイトル後のモード選択画面から操作が効かない
山川機長さん
>Wikiの互換リストに転載しても構わないでしょうか?
全然構わないですよ。ありがとうございます。
WINDYさん
>WIKIの互換リストに追加しておきました。
追加ありがとうございます。
2020-08-19 21:03:28
YM-SHIMONDSさん
あすか120%エクセレント BURNING Fest.の動作確認、有り難うございます。
あすか120%エクセレント BURNING Fest.は私が所有していないので確認できませんのでWIKI登録にあたって1つだけ確認をさせてください。
"タイトル語のモード選択画面から操作が効かない"との事ですが、つまりは起動~モード選択までは動作するがそれ以降はモード選択画面から抜けれない為に確認できないとの事でしょうか?
※Release v20200819が公式リリースされていますのでそちらではどうでしょうか?(キーボード関連とPAD関連に修正が有りますので期待はできそうです)
2020-08-20 12:01:19
>YM=SHIMONDSさん
あすか120% Excellent BURNING Fest.でPCMパートの音しか鳴らないというのは、おそらく現状の津軽ではFM/PCMのバランスが適切に設定されていないからだと思われます。
こちらではGitHubからダウンロードしたソースを修正し、FMVOL:8192、PCMVOL:1024で調整したTsugaru_CUI.exeを使用していますが、正常にFMパートの音も鳴っています(あくまで津軽の現状の実装の範囲内では、ですが)。
また、Release v20200819ではパッド操作も正常に行えます…が、ポート1からマウスを抜いておかないとポート1側でRUNボタンを押したと誤認識されてポーズがかかりますので念の為。
>山川機長さん
ついでなのでお願いしてしまいますが、現状の津軽ではゲームパッドの十字キー入力のエミュレーションがハットスイッチ(POV)にしか対応していないため、普段使いしている6ボタンゲームパッドで十字キー操作による操作ができなくて不便なので、X軸/Y軸による入力にも対応していただけないでしょうか。もちろん強制ではありませんのでよろしくお願いいたします。
2020-08-20 14:53:39
PADに関しては、POVの無いものやボタンの数や位置の関係でユーザー毎に好みが有りますので、任意にアサイン出来ればベストなのですが、面倒ですかね?
2020-08-20 17:50:10
りうさん、
テストありがとうございます!なお、アナログ軸を十字ボタンとして使う機能はすでにありますが、GUIに出してませんでした。パラメータでは、
-GAMEPORT0 ANA0
みたいな感じで使えます。今GUIにも出しましたので、今日の晩のソースから利用できるようになります。
FM音源は、もう少しボリュームを上げた方が良いみたいですね。FMのデフォルトは全開ぐらいが良いでしょうか。
それから、ASKA 120%でPAUSEがかかりまくるということは、マウスのエミュレーションは、現在、ステートは4段階にしていて、COMオン・オフで次に進む(2ms読まなかったらステートゼロに戻る)みたいな感じにしているので、通常状態ではマウスのX軸移動量の上位4ビットが返るようになってるのですが、アイドルステートも追加して5段階にして、アイドルの場合は下位4ビットは0Fを返すみたいな感じが正しいのですかね?(くっ、実機にアクセスさえできれば。。。。というかUNZで実験すりゃいいのか。)
WINDYさん、
任意のアサインメントができれば、確かに便利そうですが、ちょっと考えます(^_^;)というか、ゲームによってはボタンにキーを割り当てられれば便利ですよね、とかいうことをWing Commander(こだわる)を快適にプレイするために考えています。
なお、多分15KHzモードで画面がずれる問題、手元のコートでは直ったと思います。またこちらの夕方PUSHする予定です。
2020-08-20 23:00:24
>山川機長さん
私自身は正直そんなに困っていませんが、多分有れば便利だろうなと思います。
確かにWingCommanderをやってると、何かとキーボードが必要になるのでTOWNSでは使わないボタンにキーコードなどが割り当てれれば便利ですね。
WingCommanderと言えばSecretMissionは確認出来ていませんので、(多分大丈夫だろうけど)確認しておきます。
2020-08-20 23:28:35
>山川機長さん
アナログ軸を十字キー操作に割り当てる機能、きちんとあったんですね(というかGUI実装前には使ってた気がしましたが、毎回入力しているとコマンドラインが長くなりすぎるのでバッチファイルを作ろうかと思った矢先にTsugaru_GUI.exeがリリースされたのでやめました)。次リリースよりGUIから使えるようになるとのことで、ありがとうございます。
あすか120%(以下略。CD-ROM版のほう)やマッドストーカー(最新版での動作検証が済んでいなくてすみません)でポーズがかかりまくる現象についてですが、これはゲームパッド(やマウス)のボタンがI/Oアクセス、TBIOS経由のどちらでも「0=押されている、1=押されていない」として取得されるのに対し、TOWNSマウス(=FM77AVのインテリジェントマウス等を含めた「MSX規格」のマウス)を接続した状態ではX方向/Y方向の移動距離がCOM信号のON/OFFで各4bitずつ取得される(ここがパッドと違い、マウスを移動していないなら十字キーに相当するbitは全て0となる)ため、マウスを接続した状態ではRUNボタンが押された状態(I/OアクセスとかTBIOS経由の「パッド入力1」、High CのTBIOSライブラリのSND_joy_in_1を使っていればSELECTボタンも、かも)だと誤認することによって起こっています(あすか120%でどのようにパッドの入力状態を調べているかはEXPファイル等を解析してみないと分かりませんが)。
また、「2ms読まなかったらステートゼロに戻る」という挙動はXM7のmouse.cと一緒なのですが(XM7ではこれでもマージンを取っている方で、インテリジェントマウス(FMMO-101A)のマニュアルにあるタイミングチャートに従って実装すると動作異常を起こすソフトがあります)、ステートは4段階(X上位→X下位→Y上位→Y下位)が正解で、下手にステートを追加すると、かえって誤動作の原因になります。
余談ですが、V-TOWNSではパッドを2個接続するとPS/2マウスによるマウスエミュレーションが無効になる(当時「凝ってるなぁ」と感心しました)ほか、キーボードから操作する隠し機能(Ctrl+Alt+ScrollLockによるTOWNSモード内リセットは結構知られている気もしますが)によってマウスエミュレーションを切り離すことが可能です。
2020-08-21 01:55:01
また↑に書くのを忘れてました(昨日からこればっかり)。
現状の津軽ではRTCの月の情報が1ヶ月前にずれています。試しにWindows側の時刻を1月にしてみたら不正な年月日と判定されたらしく、1987年2月1日に合わせられる実機での電池切れでおなじみの現象が起こりました(^^;
2020-08-21 02:08:30
おおなるほど!偶然XM7のmouse.cと同じタイミングになっていたとは。最初タイムアウトを200usにしていたのですが、マウスが飛びまくる現象を調べたら時間内に読んでないものが多かったので、2msぐらいにすれば大丈夫だろうと思って適当に選んだのですが。と、思って、コード見直したら2msにしたと思ったのは僕の記憶違いで1msにしてました(^_^;)でも、多分タイムアウトはミリセカンドのオーダーなんですね。
TBIOSがマウスを読むときは、COM On -> X-High -> COM Off -> X-Low .... と続いているようなので、一応、IDLE StateでCOM Onが来た時にX-Highを出し始めることにして、COMが何も来なかったらIDLE Stateにして下位4ビットを1にするように変えてみました。誤作動が大発生するようであれば元に戻そうと思います。TBIOSは普通に認識しているようなので、TBIOSを使ってないソフトでうまく動くかですね。一応LemmingsとLemmings2は起動してマウス操作が可能なことを確認しました。
マウスで覚えているのはサイバースティックをアナログモードにしたまま起動してしまうとTBIOSがサイバースティックをマウスだと誤認して操作できなくなったことですね。サイバースティック実装するときはつなぎっぱなしじゃなくてアナログモード・デジタルモード切り替えも追加しないといかんですね。
ちなみに僕は起動はPython Scriptからですね。GUIは積極的にテストしていないので、使ってテストしていただいて非常にありがたいです。
Pythonはあまり好きな言語では無いのですが、世の中に流されてたくさん使ってしまってます。500行ぐらいまではPythonが好きだったのですが、ある程度以上の長さのコードを書き始めたとき、まるで翼の上面の気流が剥離してストールするかのように突然いやになりました。C++が一番好きですね。Pythonよりアセンブリの方が好きかも。などということを言ってるからいつまでたっても出世しません(^_^;)
2020-08-21 02:49:44
Release v20200819にて、ジェノサイドスクウェアが動作しました。
https://i.imgur.com/doCTTI9.png
https://i.imgur.com/wVsYPxe.png
https://i.imgur.com/SxdBWAz.png
https://i.imgur.com/7BqbDT4.png
おかしい箇所
・ジェノサイド2の最初のステージでダメージを受けるとスプライト全体が固まり、以後背景だけが左右にスクロールする
https://dotup.org/uploda/dotup.org2235096.webm
WINDYさん
>※Release v20200819が公式リリースされていますのでそちらではどうでしょうか?(キーボード関連とPAD関連に修正が有りますので期待はできそうです)
Release v20200819で試したところ、モード選択で正常に操作可能になっていることを確認しました。ありがとうございます。
たけがみりうさん
>おそらく現状の津軽ではFM/PCMのバランスが適切に設定されていないからだと思われます。
なるほどそうだったんですね。ありがとうございます。
ポーズの件ですがこちらでも確認しました。
ポート0: Emulation by Keyboard
ポート1: None
の設定でも試合開始直後にポーズがかかるようです。
2020-08-22 06:03:06
ご確認ありがとうございます!Genocide Squareのスプライト問題確認しました。どうやら、僕が手抜きして、Sprite Busyは周期が合ってりゃいいだろう、と思ってBusy始まりのタイミングをVSYNCの始まりとしていたのですが、VSYNCの終了時点にするべきだったので、そのように修正したところ、スプライトが固まる現象はとりあえず起こらなくなったようです。(要するにVSYNCのタイミングとSprite Busyのタイミングが一致してると良くなかったらしい)。現在テストを流しているので、通ったらソースをPUSHします。大体今まで見たタイトルではVSYNCかSprite Busyかどっちかだけ見てタイミングを取ってるものが多かったのですが、きっとGeno2は両方見てるんですね。
ちなみに、Spriteはほかにも手抜きをしていて、厳密にはVRAM Layer 1の上半分と下半分でダブルバッファにするべきところを、常に上半分に書いてます。一応、今上半分か下半分かどっちに書いてるのかチェックするビットもあったと思ったので、それをチェックしてるタイトルがあったらどうしよう、とひやひやしています。(だったら真面目に実装しろという自分の脳内の声)
2020-08-22 09:31:12
>48 一応、今上半分か下半分かどっちに書いてるのかチェックするビットもあったと思ったので・・・
I/Oアドレス : 044Chのbit0(PAGE)かな? 最近WIKIの方で書いたので記憶に残っています。
ついでなので、ちょっとだけ細かな事が気になるのでお聞きしたいのですが、津軽はうんづや実機と比較してスプライトの動作(移動などの表示)が少々滑らかでない様な気がしますが、上記の影響などは考えられますでしょうか?
2020-08-23 07:38:05
やっぱりそう思います?多分何かのタイミングの問題なのだと思うのですが、スプライトに限らず、グラフィックの更新のタイミングの問題鴨しれません。pri timebalance とすると、実時間に対して実行が速かったか(プラス)、実行が遅れたか(マイナス)が見えるのですが、レンダリングのたびにかなり遅れてるんですね。これを速くするとちょっと良くなるかもしれません。レンダリング部分はまだぜんぜん最適化していないのでいずれ手を入れようと思っているのですが。ただ、Donald Knuth教授が"Premature optimization is axis of evil" (だったっけ?)と言ってるので、まずはもう少し動作が安定してからと思ってます。なお、一度だけ本物のDonald Knuth教授に会ったことがあります。今思えばサインをもらっておくべきでした。
2020-08-23 08:43:52
あ、そうだ。タイミングと言えば、昨日のソースでPCMのWAVE生成の頻度を20msから10msにしたのですが、Street Fighter IIのノイズ問題は少し改善してないですかね?fuzzballさんの解析によると、PCMのバンクが次に移って割り込みがかかってCPUがバンクを切り替えるまでの期間、本来再生されるべきではないバンクが再生されてしまっているとのことだったのですが、PCMの仕組みって本質的に絶対間に合わないんですね。だって、バンクの再生が終わったところでCPUに割り込みがかかるんだから、CPUが先回りして次のバンクを設定することはできないわけで。ただ、昨日の前の状態だと、20ms単位で再生終了をチェックしていたので、最悪39.9999...msの間間違ったバンクが鳴り続ける計算になります。これを10msにすると、単純に半分になると思います。
それで、ユーザがタイミングを指定できるようにして、その気になったら1msとかも指定できるようにしようかと思ったら、どうやらDirect Soundの解像度が10msっぽくて、19msとか21msにするとノイズが出るだけでなく音程が狂ってしまうことが判明して、だったら、10msにしよう、と、思って10ms単位にしてみました。これだと、多分Street Fighter 2でノイズが出るとしても期間は半分に減ってると思います。
PCMのバンク割り込みを先回りして実際より1msぐらい速く出すと、ノイズは出なくなる鴨しれません。ただ、再生時間のInquiryが比較的遅いっぽいんですよね。でも、そういうオプションは追加してもいいかもしれないですね。どうも、Street Fighter 2問題は自動的に解決するのは難しいような印象なので、ユーザがオプションでPCMを先回りさせると指定してもらえれば手があるかと思ってます。
2020-08-23 08:55:47
>50
スプライトの表示に関してはずいぶん前から気にはなっていましたが、私も最適化は最終であるべきと思うところが有りますので賛成します。
>51
StreetFighter2の構造に関しては全く知らないのですが、PCMとしてはデータを4KB読み込むと割り込みが発生出来るので波形データのサイズと格納場所を工夫する事により発生の途中で割り込みを発生させる事が出来るのでは有りませんでしたっけ?
(データサイズを8KBにして、再生させると真ん中で割り込みが発生するので割り込み処理で発生の終わった前半のバンクデータを更新する使い方)
2020-08-23 23:20:13
PCMについて、まったくその通りです。割り込みで手遅れになるのは、PCMのバンク割り込みのタイミングで直後に再生するべきバンクをセットアップあるいはセレクトするような書き方をする場合、です。大変失礼いたしました。他のプログラムで問題が出ないのは、PCMのバンク割り込みのタイミングでは直後に再生するバンクの次のバンクをセットアップするようにして、常に次のバンクは再生されても大丈夫な状態に保っているからではないかと思います。割と多く見かけた手は偶数番のバンクの末尾 (アドレス?FFFH)にリピートコード FFH を書いておいて、そのバンクのひとつ前のバンクに自動的に飛ぶように仕掛けるようにして、割り込みのタイミングではたった今再生が終わったバンクにデータを書き込むという方法のようです。
ただ、fuzzballさんの解析によるとStreet Fighter IIのノイズ問題はバンクのオーバーランによるものとのことなので、Street Fighter IIに関してはリピートコードを使わず、CPUでプレイ位置を巻き戻しているのではないかと思います。それだと、割り込みがかかった時点ですでに違うバンクの再生に突入してしまっているという感じなのではないかと思います。
なお、FM音源とPCM音源に少し手を入れました。現在FM音源は全部のスロットを同時にオンにしないと再生されなくなってますが、時間差でオンになったり一部だけオンになった場合にも対応できるようにしようとしてます。PCMのテストついでにChase HQをやったらステージクリアした時点でCD-ROMのステータスがクリアされるのを待ち続ける現象(どうやらDXが4C0Hのまま4度読み込んでステータスを読んだ気になっているらしい)が発生して、ということはこの待ちに入る時点ですでにステータスがクリアされていなくてはならないようで、どうやらCDDA Playコマンドが入ってきた時点で前のステータスはクリアする必要があるようなのでそのように修正しました。しかし、CD-ROMのステータスってQueue的な動作をしているような(I/Oは4バイトのQueueになってるけど、CDC内でもっと長いQueueを持ってそうな)気がするのですが、コマンドのたびにクリアするのが正しいのか、ちょっとよくわからんですね。とりあえずCDDA Playの場合はクリアするようにしたらChase HQは再度プレイできるようになりました。
ああ、そういえばChase HQと言えば、道路の分岐で画面が乱れますが、あれってLCDパネルをつなげた実機でも乱れたのですが、実はCRTモニタだったら乱れずに表示されるとかいう魔法だったんでしょうかね?VINGがあのグラフィックのままリリースしたんだろうか?と、疑問に思ってるのですが。誰か当時実機でプレイされた方いますか?
2020-08-24 10:02:05
>>山川機長、WINDYさん
最近ちょっと津軽を触れてなくて、PCM修正されたことは気付いていたのですがまだ試せていません。
スパ2のPCM問題ですが、バンク切り替えではなくキーオフの問題です。(バンク切り替えは少々遅れても問題ないはず)
issueに簡単な図を追加してみたので参照して下さい。 https://github.com/captainys/TOWNSEMU/issues/7
何かうまい回避策を思い付けるといいのですが‥。
2020-08-24 10:08:55
おおなるほど!他のアプリケーションでは、そういう場合はバンクの末尾に無限ループ(同じアドレスにループさせる)を仕掛けて次のバンクに進んでしまうのを回避しているようなのですが、Street Fighter IIはそれが入ってないんですね。多分、20~40msが聞こえてしまっているんですね。ただ、新しいバージョンだとそれが半分に減ってるので、ひょっとしたら目立たなく(耳立たなく?) なってるかもしれません。
ところで、Genocide Squared、スプライトのタイミングを直したら動くようになった、と、思ったら直す前の方が正しくVSYNCの終わりにSprite Busyになってました。しかし、今の最新版でGenocide Squaredが正しく動いてしまっているところを見ると、VSYNC終了からSprite Busyが出るまで少しラグがあるのが正しいのかもしれないですね。ひょっとすると、Sprite画面消去中はパターンやスプライト位置を変更してもとくに問題無さそうなので、I/OでSpriteがBusyになるのは、VSYNC終了から32us後かもしれません。いろいろ実験してみます。
2020-08-24 10:52:49
なるほど、理解しました。
メーカーが想定したであろう使用方法は恐らく2バンクを使って、途中で割り込みを受けてから読み込みが終わっているバンクに対して処理を行う方法立ったんでしょうけど
スパ2に関しては読み込みが完了した自身のバンクに対してキーオフに行っているので、当然ながらキーオフされるまでPCMが再生される訳ですね。
2020-08-24 11:21:12
>53
CHASE HQですが、「LCDパネルをつなげた実機でも乱れたのですが」と有りますが、どのように乱れましたでしょうか?
こちらはCRTですが、CHASE HQは分岐部分も含めて実機と比べても遜色有りませんでした。
2020-08-25 08:04:19
ChaseHQは、↓の42秒付近みたいな感じですね。左カーブと右カーブが重ね合わさったような感じというか。
https://www.youtube.com/watch?v=RFtJer0GKgg
YSSCSCCD.SYSを使ってパッチを当てて実機MXで外付けSCSIドライブから起動したのですが、SCSIから起動した影響は無いと思うのですが。
2020-08-25 08:40:05
>58
実機でも同じように偶数ラインと奇数ラインで左右に分かれて表示されます。
そうです、VINGがあのグラフィックのままリリースしたのです。(他に良い方法が見つからなかったのでしょう)
エミュレーションとしては正常ですのでご安心ください。
アーケードは↓の1分39秒辺りですが、「TOWNSで実現できるかと言われると無理なのかなぁ」と思われる処理ですがHSYNCタイミングでCRTCのパラメータを書き換えてもTOWNSではVSYNCタイミングでしか適用されないような書込を過去にどこかで見た覚えが有りますので、その辺りの制限上不可能なのでしょう。
https://www.youtube.com/watch?v=-nCKUE-1pvM
2020-08-25 09:52:44
なるほど!安心しました。16色モードなのにパレットを途中で切り替えて48色表示にしてる時点でマジックだと思ったのでひょっとしたら分岐も似たようなトリックを使っているのかと思ってました。
なお、動作確認にあるXak IIの問題をなんとかしようとしたのですが、これまでのところ、データディスク作成後に一度BIOSがDrive Not Readyを検出しないとディレクトリキャッシュを更新しないらしい、というところで詰まってますね。どうやらTowns OS V1.1のDisk BIOSのようで、Disk Changedフラグが無いものと思っているらしくタイマー割り込みで定期的にDrive Not Readyをチェックしてるバージョンです。どうも、Disk BIOS INT 93H AH=0EHは前回呼び出し時以降ディスクの入れ替えがあった場合DL=1を返すようなのですが、DL=0が返っていて、多分DOSはこのDLを見てビット0が立っていたらディレクトリキャッシュを更新するみたいな処理をしているっぽいです。一応、FDCはMB8876Aのデータシートは見つかったのですが、Towns 2F以降はMB89312と773ページで言ってますね。これ、Intelか何かの互換チップなのではないかと見ているのですが、データシートのありかなど知ってる人がいたら情報をいただけるとありがたいです。
Super大戦略は、一定時間Drive Not Readyになったことでディスクの入れ替えを検出していて、FD0LOADコマンドで一瞬でディスクを入れ替えるとデータディスクを読み込まないという問題があったので、たしか入れ替えた直後は一度必ずDrive Not Readyを出すんだかなんだかという修正で対応したことがありましたが、Xak IIの場合は入れ替えてないので現在謎ですね。
2020-08-25 11:00:11
>山川機長さん
MB89312はれっきとした富士通製のFDC(VFO内蔵型)です。残念ながらネット上にはデータシートは上がっていないようなのですが、挙動についてはCSPのソースがある程度参考になりそうですし、実はXM7ページからリンクを辿っていくとデータシートの表紙の画像がアップロードされているサイトもあったりします(^^;)。
2020-08-25 11:16:19
はりせんさんのTwitterによると、「トランジスタ技術 スペシャル No.11」に詳しく書かれているそうです。
https://twitter.com/haserin09/status/1228604723344789504
2020-08-25 15:14:53
>62
大変失礼しました、はせりんさんの間違いです
2020-08-25 15:17:27
>60
MB89312=MB89311+VFOとの事で、MB89311について調べました。
INTERNET ARCHIVEに該当のデータブックが1件あります。
2020-08-26 17:03:12
SUPER REAL MAHJONG PII&PIIIの動作報告です。
うんづ(Version 0.5 L30),津軽(v20200819)共にメニュー画面,ゲーム画面共に画面の右側1/5~1/6程度がはみ出して表示されずです
メニュー画面でのCRTCレジスタの設定値は以下の通り
HSW1:0090 VST1:0000 HDS0:00A0 HDE0:0380 VDS0:0046 VDE0:0406 FA0:0000 HAJ0:00A0 FO0:0000 LO0:0100
HSW2:02F0 VST2:0004 HDS1:00A0 HDE1:0380 VDS1:0046 VDE1:0406 FA1:0000 HAJ1:00A0 FO1:0000 LO1:0080
HST :037F EET :0000 VST :0419 EHAJ:0064 EVAJ:0001 ZOOM:1111 CR0:800D CR1 :000C CR2:0192 FR :0003
2020-08-26 23:43:30
テストありがとうございます!Super Real Mahjongは、720ピクセル画面モードを使ってると思います。多分Microcosmのタイトルの右が切れるのと同じ原因です。現在使ってるウィンドウライブラリ (fssimplewindow: もともとYS FLIGHT SIMULATOR用に作ったライブラリなので、Flight Simulator Window Library。)が、ウィンドウを開いた後でリサイズする関数が無い(手抜き)影響で、横方向640ピクセル固定になってます。考えてみるとこれは直し方がわかってる項目なので、直しましょう。
あと、いくつかBがついてるタイトルでマウスが変な理由は多分MOS_setposでTBIOSがカーソルを固定位置に動かしているが、津軽はカーソルをWindowsのカーソル位置に移動させようとして、取り合いになってるからではないか、と見ているのですが、MOS_setposを迎撃してマウス座標を移動してしまう機能を実装すると、Alt+Tabでウィンドウ切り替える人はいいのですが、ときどきマウスでウィンドウをクリックする以外のウィンドウ切り替え方を知らないユーザがパニックになるのではないかという危惧があって保留してます。画面下のステータスバーに余裕があるので、 MOS_setposを検出したら"Middle Button to Capture/Uncapture Mouse"みたいなメッセージを表示してもいいんですけどね。
2020-08-27 01:45:52
うんづと合わせるとホイールの回転でマウスのCputure/Uncaptureですが、センターボタンのクリックでのCputure/Uncaptureのトグル動作とホイールの回転でのCputure/Uncaptureにしてしまっても良いような気がします。
Townsにはセンターボタンもホイールも無いので問題ないし、マウスから手を離さずに切り替えれるのでうんづ方式ほ個人的にお気に入りなのです。
2020-08-27 09:52:35
そういえば、FM/PCMのボリューム問題は、結局どっちも音が小さすぎるんですかね?どっちもElectric Volumeは通ってないはずだし。デフォルトの音量と最大音量を少し上げてみようかな?
2020-08-28 22:26:43
>>68
v20200826で確認しましたが、PCMに関しては問題ないと思います。ちょっと大き過ぎるのかな?(CD-DAと比べて) トゲトゲしてる印象があります。
あとスパ2のノイズの件ですが、残念ながら変化無しでした。耳で聴いた限りではノイズの鳴り方も変わってないような気がしました。
2020-08-29 10:21:45
了解しました!動作確認の方を見た感じだとFM音源の音が小さいようなので、PCMは据え置きでFM音源のおボリュームを上げてみようと思います。
Super Street Fighter IIのノイズの件了解しました。改善してなかったですか。残念。先読みさせるという手はあるのですが、パフォーマンスの問題がありますね。あるいは、当初やってたみたいにPCM 1chにつきホストの1chを使うという方法もあるにはあるものの、今度は定期的にモニターするチャンネルが増えてやっぱりパフォーマンスに問題が出ますね。うーん、アプリケーションを識別して特別な処理をするしかないかもしれないですね。もう少し考えます。
2020-08-29 11:37:34
FM音源もなんとかせんで何をやってるのだ、と言われそうですが、Wing Commander IのVEGA星域キャンペーン、最初から最後まで通してクリアできることを確認しました!
二日半でクリアできるもんですね。寝る間を惜しんだわけでもぜんぜんなくて、プレイ時間は合計6時間ぐらいだったでしょうか。ジョイスティックインテグレーションを考えてたのですが、Wing Commander Iに関してはキーボードで余裕で操縦できますね。あとは、Towns版豪華声優のボイスをEnableするキーがわからなくて最初焦ったのですが、Sキーでした。銀河英雄伝説の世界になりますね。
2020-08-31 07:43:17
なお、富士通が最初に発売したWing Commander 1には、Secret Missionsのデータファイルも含まれてます。ただ、普通に起動すると、ファイルがありませんと言われてSecret Missions 1,2を開始することができません。
そこで、Aドライブのディスクにセーブしている場合は、Q:\GAMEDAT下のcamp.000,camp.001,camp.002の3本のファイルをセーブディスクにコピーすると、Secret Missionsが起動できます。
あるいは、Q:\WC.EXP と Q:\GAMEDAT をハードディスクにファイルをコピーして、パラメータを
kanji +m savepath=a:
としてWC.EXPをアイコン登録するとハードディスクから起動できるようになりますが、savepath=D:\GAMEDAT のようにコピー先に振ってやると、セーブパスにcamp.00?を見つけることができるので、Secret Missionsを起動できます。
なんで富士通がEnableしなかったのかは、やってみると明らかで、日本語化が全部済んでなかったり、ときどきクラッシュしたりします。だったら起動時のボタンも削除しておけばよかったと思うんですがね。でも、僕は両方ともこの方法でクリアしたので、最後までプレイ可能なはずです。僕はTownsを現役で主力機として使ってた時にこれを解明したはずなんですが、どうやって解明したんだったかよく覚えてません。386DEBUG使ったのかも。Towns Forumにもやりかた書いたんじゃなかったかなあ。今日は津軽のデバッガで見つけましたけどね。(自分で言うのもなんだけど、BRKON INT 21 AH=3Dは強力だった)
2020-08-31 09:55:46
>71
SecretMissionの動作確認をしようとしたのですがインストール中にCD-ROMを入れ換えろと言われて、「CUIから起動せねば」と思ったままです。
近いうちにSecretMissionI&IIも動作を確認しておきます。
また、SplatterHouseに関してはエンディングまで正常動作を確認しました。HI-RESO,LO-RESO共に問題は有りませんでしたが、背景グラフィックが縦にズレている(1~2ドット程度)現象が確認できましたが、支障は無いので気にはしていません。(飛翔鮫や達人王でも左へスクロールさせるとズレている箇所がありますが、原因は同じかもしれません)
2020-08-31 10:03:18
Splatter Houseクリアされたんですね!あのゲーム、難しくないですか?(^_^;)1ピクセルずれる現象確認したのですが、謎ですよね。実は、オープニングで洋館に走っていくシーンでも画面のその辺がプルプルしてるんですよ。
考えてみるとGUIにCD-ROM交換機能あった方がいいですね。追加しておきます。CD-ROMの入れ替えが必要ということは、Secret MissionsはWing Commander 1のアドオン(というかバグフィックス)になってるんですかね?だとするとCDDAとボイスはあるのかな。
2020-08-31 10:26:59
1ピクセルずれる現象は色々動かして見たのですが、VINGの物だけだったような気がします。飛翔鮫や達人王では殆ど気にもなりませんがSplatterHouseに関しては仰る通り、ピクピクとするので見つけやすいですよね。(気にはなりませんが)
ちなみに達人王に関してはステージ4位までは正常を確認しています。途中で心が折れたのですが、もう一度トライします。
CD-ROMの入替は通常はそれほど起こる事では無く、その都度津軽を立ち上げ直せば良いのですがLast Armageddonでは必須となりますので有れば助かります。
SecretMissionがWingCommanderに入っていた(中途半端では有るが)事は初めて気づきました。
どおりでSecretMissionのCD-ROMの容量が非常に小さいわけだわ。(8MB位だったと思います)
CDDAとボイスは確認しておきますが、上記の通りSecretMission自体のデータ量が少ないので期待は出来ないかも知れません。
2020-08-31 10:42:44
CD-ROMの入れ替えですが、まだその機能作ってなかったんだったっけ、と、思ったら、すでにメニューのCD-ROMからできるように作ってました。[CD-ROM]->[Select CD Image]です。Towns OS V2.1 L51のCDで起動してからAfterburner IIに入れ替えて起動できたので、多分機能していると思います。
心が折れるゲームの完走確認のためには、ぼちぼちステートセーブ機能が欲しくなってきましたね。頑張って書こうかな。
2020-08-31 12:25:47
>76
申し訳ありません、既に有ったのですね。確認が足りませんでした。
ステートセーブ機能に関してはあくまで補助的な機能と思われますので、個人的には最終段階でも構わないと思っています。
有ったら有ったでデバッグの際にも便利かもしれませんが。
2020-08-31 12:50:11
WingCommander SecretMissionですが、1も2も数回の出撃をしましたが問題はありません。CD-DAもボイスも有りです。(^o^)
久しぶりに猫に煽られてカチンと来ました。危うく最後までやるところでした。
2020-08-31 23:58:18
おおそうですか!確認ありがとうございます!ということは、パッチだったのか。僕はWing Commander Iが出てすぐ買っちゃったもんだから、Secret Missions 1,2無し版だったんですよ。たしかSecret Missions 1/2だけ単独って売ってくれなかったんじゃないかな。売ってくれたら買ったと思うのですが。
今Wing Commander IIのマウスインテグレーションをやってます。マウス座標が書いてある場所までは特定したのですが、あとは、起動時にマウスの両法のボタンを押してないとマウスを認識してくれない現象が起きているのですが、多分、今TRIGGER OUT (4D6H)を無視してるからじゃないかと思うんですよね。真面目に実装して変化を見てみます。あれは、本体からのTrigger Out(4D6H)が0のときは、ボタン押し状態にかかわらず04D0H, 04D2HのTriggerビットは0になるので多分合ってますよね。
2020-09-01 09:17:52
>79
SecretMissionとWingCommanderは別パッケージですよ。
記憶は定かでは有りませんが、CDはSecretMissionだけの物ですし。
↓を見る限りソフトコレクション海外編で番号も違うので間違いないでしょう。
https://page.auctions.yahoo.co.jp/jp/auction/x530302289
https://www.suruga-ya.jp/product/detail/127010527
マウスインテグレーションは非常に楽しみにしています。動作確認でSecretMissionを久しぶりにやったらなんだか通しでやりたくなりました。
TRIG出力の使い方は、それであっているはずです。(04D6Hのbit0-3をONさせて、04D0H,04D2HのTRIG1,TRIG2bitを読む必要が有る)
2020-09-01 09:58:40
なんと。僕はWing Commander 1を発売した後に、Wing Commander 1 + Secret Missions というパッケージが出たもんだとばかり思ってました。
なお、Wing Commander 2 のマウスインテグレーション成功して、間も無くソースをPUSHします。起動時のマウスチェックの間はマウスのデルタに0を返す必要があったので、仕方ないので CRTC設定が変わってからCDDAを開始するまでの間はデルタに0を返すようにしてます。Nav画面のみカーソルがずれますが、こればっかりはNav画面表示中かどうかは検出できなかったもんで、放置してあります。ただ、キーでも操作できるので問題ないと思います。
Wing Commander 2は1よりもしんどかった記憶があります。敵光学式ステルス機には散々苦労しました。僕は確か1995年の後半(前半だったか記憶が曖昧)にMicrosoftに降伏して主力機をDOS/Windowsを切り替えたので2はDOS用英語版でプレイしましたね。Wing Commander 3まで日本にいるうちにプレイして、4はピッツバーグに引っ越してからやったんだったかな?ネタバレになりますが4では最後に主人公に散々パワハラを続けてきたトルウィン提督に恨みを晴らすことができたので良かったのですが、最初のシリーズから続いた一大サーガの終わりとしてはやや寂しい幕切れだった感じがしました。でも、老後にもう一度一通りプレイするためにGood Old GamesからWing Commander 3, 4買ってあります。
2020-09-02 06:26:21
久しぶりにSecretMission1を3話程やっただけで結構厳しかったので、この腕のままIIは地獄かもしれません。(汗)
私はTOWNSで1,II,SecretMissionをやったけど、それ以降は出来てないのです。英語は聞き取れないだろうけど買ってみようかなぁ。
3か4あたりでマークハミルが出演していましたが、指を加えてました。(PCへの以降はGATAWAY G6-300からのなで1997~98年位)
Origin Systems社が(と言うよりギャリオット兄弟です)が好きで、Originと付くと必ず買っていました。
Origin Systems絡みで、Space Rogueの動作確認をしていましたがマニュアルが無い(実家)のでストーリーが進められず互換リストには未記載ですが
動作に問題は無いようです。(この位のポリゴンだったら当時の山川機長さんだったら出来たかもって気がします)
2020-09-02 11:03:09
このスレの展開からはだいぶ外れますが、Unzと津軽でのSCSI ID-0のハードディスクイメージ共有に成功しました…単に津軽のソースをこちらでいじって新CRTCのI/Oアクセスを無効にしただけなんですが。これでSSDの使用量が1GiB削減できましたw
2020-09-02 12:15:43
Wing Commander 3は、移動するたびにエレベーターに乗るアニメを毎回見なくてはならないのが苦痛だった記憶があります(^_^;)空中戦シーンは感動ものでしたね。今見ても通用するグラフィックだと思います。当時だと僕も渡米前で英語の聞き取りが大変だったので、アメリカに住んで22年の今ならもう少し何言ってるかわかるのではないか、と思ってるのですが。マークハミルは3と4通して出演でした。
なお、すでにさっきリリースをPUSHしてしまったのですが、Wing Commanderの中立位置発見しました。2も書いてあったので、そこから読むようにしました。それが、デバッガで見つけようとしたけどなかなか見つからず、BRKON MEMWじゃなくMONITOR MEMWみたいなのを追加してZキーを押した後で中立位置を書き込んでる場所を探さないとだめかなあ、と、思いながらZを押した後でマウス座標が何に変わってるか見たら、その直後に同じ値が書いてあって、なんとそれが中立位置でした。Wing Commander 1の方は何をやってるんだかわからないですが、ジョイスティックをぐらぐらっと動かした後でZキーを押すと以後安定するようです。明日の夕方のソースにはこれが入る予定です。なんかいい感じなのでGUIにもまもなく出します。
機関砲がおもしろいように当たるので、これだったらこの間1を通したとき唯一勝利できなかった鹵獲した敵艦の護衛ミッションも勝てるかな。2もテストがてらちょっと飛んでみましたが、2だと撃墜した敵機が完全に飛散するまで当たり判定があるんですね。空中衝突しまくってかなりのダメージを受けてしまいましたが。(Strike CommanderのテストしたときもMig-21と空中衝突した。なんか今日は空中衝突する日だった。)
2020-09-03 11:59:47
りうさん、
なるほど!それは、津軽がハイレゾモードを正式にサポートすればOKという感じでしょうか?りうさんに上げていただいたソースが非常に強力な情報源になりそうなので、Linuxのソースと合わせて参考にして対応を目指してみます。
2020-09-04 01:06:14
飛翔鮫ですが、v20200902よりCD-DAによるBGMが鳴らなくなっています。
他にも確認できた物としては達人王は1面BGMがループしなくなり、それ以降はボス面や次のステージになってもBGMは鳴らなくなります。
(つまり、開始時のBGMがループせずに終わるとそれ以降は鳴らない)
他にも何か有るかもしれませんが、原因は共通している可能性が高いので確認及びWikiの更新は行っていません。
2020-09-06 08:52:48
おおそうでしたか。CDDAで何を変えたっけかな?確認してみます。
2020-09-06 09:45:41
ああ、多分原因わかりました。ものすごく小さな音で鳴ってませんか?Electric Volumeを見るようにしたのですが、都合上再生開始時のボリュームがそのまま残ってしまうもんで、フェードインしているのではないかと思います。うーん、どうしよう。とりあえず、直近の修正としていったんElectric Volumeを無視します(^_^;)と、思ったらSetVolumeって関数すでにYsSimpleSoundに書いてあるし。いったんElevol無効にしてから、近いうちにそっちで対応するように修正しますね。多分それで直ると思います。(自分で書いた関数ぐらいおぼえておけ、と言っても趣味と仕事で書いてる分量が多すぎてどこに何を書いたか覚えきれない。)あ、初期のころのコメントにあったナディアの左右問題はこれでは直らない。うーん、なんか考えよう。
2020-09-06 09:59:39
>88
本当ですね、ホント小さな音で鳴っていました。
飛翔鮫で確認をしましたが、恐らく達人王でも同じでしょう。
2020-09-06 16:00:47
ふふふ、Strike Commanderクリア確認しましたよ!まだGUIに出してないですが、-STCMTHR joystickID axisID とすることによって、スロットルレバーの位置をフルキーの数字に割り当てるようにしました。さっきPUShしたソースでは使えるようになってます。これによってCH Pro Throttle USBでスロットルのコントロールができるようになり、-VIRTKEY key gameDevID button オプションによってゲームパッドやジョイスティックのボタンをキーボードに割り当てられるようになりました。GUIにどうやって出してやろうかと考えてるんですがね。Strike Commanderはこの拡張で無線の指示を出す時ぐらいしかキーに触らずに操縦できるようになりました。Thrustmaster Top Gun Joystickが接点不良でボタンの反応が悪くなっていたのですが、Pro Throttleに十分なボタンがあったので、よく使うキーを割り当てることができました。
一番難しかったミッションは中盤のドイツの城のミッションだったな。何度も撃墜されながら、やっとミッション成功して帰ってきたら、燃料タンクに弾食らってて最後燃料切れで自動着陸してくれなくて慌てて手動でおろしたんですが、操縦士免許持っててよかったと思いました。最後のミッションでは、メンデス機を撃墜して「勝った!」と思って帰投してきたら、ジャッカルのボスともう一戦あるのを忘れていて、いきなりミサイルを食ってエンジンがやられたものの、すれ違いざまに機関砲を何発か命中させて、最後に残ったAMRAAMが命中してくれて、あとは目の前の滑走路までなんとか緊急着陸を決められるか!?と、思ったらイベントシーンに切り替わってエンディングというなんともドラマチックな最後でした。
あとこれでフレームレートがあと2割ぐらい速かったらもっと快適だったんだろうな。高速化も考えないとなあ。
2020-09-07 12:26:05
>90
動作確認をしていないフライト物と言うと、後はAir Warriorですか・・・ 物は有りますが、サーバーが・・・
誰かサーバーを立てる猛者が居るのだろうか? 居ないでしょうね。
2020-09-07 23:18:38
Air Warriorですが後半のバージョンでは、COM機相手に飛ぶ自主トレモードが追加されていたと思います。また後半のバージョンではサイバースティック対応してたんですよね。FM音源も改善せずに何をやってるのか、と言われそうですがサイバースティック対応を検討してます(^_^;)
うちの2MXですが、どうもCD-ROMは2xモードにすると読めないようで、電源抜いてCMOSがまた飛んでからは何もなかったかのように(ゆっくり)読んでます。今日はこちらはLabor Dayの祝日なので、今朝は去年実家から回収してきたFDをかたっぱしからTownsOS起動フロッピー化しています。まずピンセットで回しながらカビてないことを確認してからやってますが、成功率は50%ぐらいですね。Aドライブはあいかわらず内側のセクタが読めないようで、CMUのComputer Clubの達人に修理できないか聞いてみようと思ってますが、バーチャル化をトライしてもいいかもしれないですね。
2020-09-07 23:56:56
>92
おお、そうでしたっけ? ではAirWarriorも動作確認を急ごうと思います。
サイバースティックも実は持ってたりするのですが、いつもの事ながら実家に置き去りです。
去年に制作したセガサターンの各種コントローラをUSBに変換する変換器を改造してサイバースティック対応に使用かなと思います。
FDDに関しては先週末にジャンクのFDDを2台ほど確保したので、こいつを実機に搭載する予定です。
そちらでは3モードFDDは入手困難でしょうから今のうちにバーチャル化しておいた方が良さそうですね。
2020-09-08 07:39:29
>93
FDが必要だった・・・ まずはFDDを治さないと駄目ですね。(汗)
因みにCDからの起動は出来て、FDを入れろとのメッセージまでは問題有りませんでした。
2020-09-08 08:01:05
ジャンクで買ってきたYE-DATAのドライブに交換してFDDは復活しました。と言うかひょっとしたら元のFDDは生きているかも。
元々HCはFDDが1台なのを、末期にFMT-FD304を買って2ドライブにしていたのですが、この前電池を外付けに改造した際に使い込んだドライブ0とほぼ使用していないドライブ1を入れ換えて組み立てたのですが、今日になって外したFDDを見ていてドライブセレクトのジャンパピンがDS1側になっているのを発見しました。
DS1に設定したFDDをドライブ0のケーブルにつないでいたのが原因なのではと思っています。
後はどうやってネットにあるイメージ化ソフトを持っていくか・・・・LANか?(色々と面倒くさい)
山川機長さんの発言を思い出して、互換モードでCD-Rを読んでみたら読めたので、CD-R経由で試してみようと思います。
ドライブセレクトの件も有るのでもう一度HCの蓋を開けるので、どのドライブで置き換えたかは確認してこちらとWIKIに情報として挙げておきます。
2020-09-08 23:16:19
うちのMXのAドライブは、FDクリーナーを2回かけたらTownsOS V2.1 L20のディスクから起動できるようになりました。ところで、MXのドライブは電源が矩形コネクタと一緒になっているので普通のDOSのドライブではコンバータを作らないと置き換えられないというようなことを聞いたのですが(確かに開けてみたら電源ケーブルっぽいのが見えない)、ピンアサインメントって解明されてますかね?実はこれがわからないとHxCとか持ってきても置き換えられない気がしてきてます。
2020-09-09 02:26:09
YD-702B-6036B D のピンアサインについてはMSXへの流用があったようで、ぽつぽつと情報が出てきます。
ピンアサイン資料 http://niga2.sytes.net/msx/FDD_READY.html
MSXにポン付けした方 http://usbsecretbase.michikusa.jp/70fd/fdd.html
そのMSXの資料 http://madscient.hatenablog.jp/entry/2016/12/25/153653
2020-09-09 04:16:19
おおなるほど!さすが!
ところで、githubのコメントにReplyしましたが、townsdef.hはできれば近いうちにHigh-Cからもそのまま#includeできるようにしようと思っているので、strongly-typed enumは回避したいところです。物理アドレスなので、High-Cからは使わなくてもいいかもしれないので、そのenumごと #ifdef __cplusplus で括ってしまうという手もあるにはあるんですがね。enumを#defineに切り替えたらなんとかなりませんかね。あと、stdint.hって2004年から存在してたんですね。いろんなライブラリが勝手なint型を定義して収集がつかなくなってるOpen Source Projectを結構見てきたので(見てきたって言ってもせいぜい2~3か)もう津軽はintが32、shortが16、long long intが64ビット決め打ち、ってことで始めたんですが、stdint.hが使えるなら徐々にintXX_tに置き換えていこうと思います。勉強になりました。
2020-09-09 05:54:50
DINOSAURなのですが、僕がやると町出て帰ってこれるのですが、すると町から出られなくなるようです。これ、町に戻れなくなります?
こちらの現象ですが、初期状態だと「扉は固く閉ざされている」というメッセージが出ますが、長老に話すと扉が開くのですが、いったん外に出て帰ってくると、メッセージは出なくて、画面が一瞬暗くなって外に出るかと思うのですが、結局出られないという現象が起きてます。現在どこにフラグがあるのか解明しようとしてます。
2020-09-10 09:55:05
DINOSAURですが、DS:106FHが扉通過回数のカウンタになってるっぽくて、値が1以下になると扉を通れないようです。僕は町から出てすぐ戻ったので入れましたが、再度出ようと思ったら出れなくなりました。ひょっとして、町から出て何かするうちにカウンタが減るイベントが発生している鴨しれません。お時間のあるときに、町に戻れなくなった時点で、試しに、
EMB PHYS:3106F 7F
と、やってみて、戻れるか試してみていただけますか?そうであれば同じ原因ということになりますね。あとは、何の拍子に値が減ってるのか解明すれば、扉が通れない問題は解決するのではないかと思うのですが。あ、違うや。減ってる箇所見つけちゃった。けど、これだと扉を通ると確実に1ずつ減っていくことになるな。。。。じゃあ回復する場所を解明しないと解決しないのか。
それから、長老にいちいち話に行くのが面倒だったら、
EMB PHYS:3EF01 5
これで話したことになります。
2020-09-10 11:18:25
>100
"EMB PHYS:3106F 7F"とやってみた所、再度町の外へ出ることができるようになります。
"DM PHYS:3106F"とやると、町を出たり入ったりするとデクリメントされるようです。
うんづでは同じアドレスはオープニング以降ずっと00Hのままですね、一瞬だと判らないですが少なくとも大きな数値は入っていないようです。
2020-09-10 12:37:04
あー、DINOSAURはコピープロテクトですね。なお、一応再度書いておくと僕はアメリカに住んでるのでDMCA法に基づいてレトロゲーム保存のためのプロテクト解除は明示的に合法とのことです。日本も早くレトロゲーム保存のための法制度が整うといいのですが。
INT 93H AX=0720Hを2度読んで、シリンダ6のサイド0に9,10,11,12,13セクタ(おそらくそれぞれ256バイト)が存在することを確認してます。チェック箇所はBRKON INT 93 AX=0720で簡単に見つかります。確認した範囲では2度に分けて読んでます。Brandishと同じ方式に見えますね。プロテクトに通った場合は、DS:[106EH](物理 3106EH)に10Hが、通らなかった場合はDS:[106EH](物理 3106EH)に01H, DS:[106FH]に03Hを書き込んでいます。これは扉を通るたびにチェックしていて、一度ひっかかってDS:[106EH]に01Hが書かれてしまうと、一度扉を通るたびにDS:[106FH]がDecrementされ、0になったら二度と通れないというものです。おそらくシナリオディスク両方がそうでしょう。
D77イメージを作ればプロテクトごと再現できるはずです。が、現在2HDのD77が作れないので、D77に変換して、シリンダ6のサイド0に256バイトのセクタを追加してみたところ、普通に何度でも出入りできるようになりました。なお、使ったツールは、僕のpublic repositoryのsrc/FM7/utilに入ってるd77analyze.exeです。publicレポジトリのFM系のソースをFMレポジトリに分離しようとしてますが、まだD77ユーティリティはpublic下に残ったままになってます。
存在しないセクタの読み込み要求があったら気にしないで適当なデータを返した方がいいんだろうか。うーん。しかし、コピープロテクトも含めて再現したいと思っているので、ひっかかったときの動作も再現したいから、やっぱとりあえずやめておこう。
2020-09-10 22:33:58
>102
プロテクトか・・・ 動き的に何だかそんな気はしていました。
プロテクトに引っかかるのも正しいエミュレーション結果ですので、方針は支持します。
WIKIの方にも記載しておきます。
2020-09-11 06:51:24
Amaranth3が動くようになりました。-APP AMARANTH3でマウスインテグレーションも対応します。Amaranth3対応のためにFM-R互換モードの表示の扱いを直したので一緒に他のタイトルもいくつか直っててくれるといいのですが。あと、Splatter Houseその他でLOW RESモードで背景の一部が1ピクセル上にずれる問題もやっと原因を究明したので、直しました。これはLOW RESモードが問題ではなくて、HDS-HAJがゼロではない状態で横スクロールしたときレンダリングでVRAMのアドレス計算を間違ってました。例によって今テストを流してるので、全部通ったらソースをPUSHします。
2020-10-17 06:21:01
Invitationですが津軽だとデモが速いということなのですが、これって実機やUNZだとCPUクロックの影響でスピード上がりませんかね?
実機でテストすりゃいいんですが、CDドライブが健全なのが2FだけなのでCPUを高速にできませんでした(^_^;)
ただ、ざっと逆アセンブルしてみた感じだとタイミングはCPUによるBusy Waitで取ってるようなのでCPUが速いと高速動作してしまいそうに見えるのですが。多分000C:00009838がWaitで、
if(DS:[63D40H]!=0)MousePolling
else BusyWait
みたいな感じなので、おそらくDS:[63D40H]が本編フラグで、本編だとマウスのポーリングがI/O 6CHでディレイを入れるのでタイミングが速くならないのではないかと思います。
2020-10-19 06:41:20
>105 山川機長さん
Invitation(オリジナル版)のデモの速度ですが、実機やうんづでもCPUクロックに比例して速度が上がります(これは同時期のMistyも一緒です)。互換モードにさえすれば問題は解決するのですが、現状の津軽にはその実装がないようで…。
あと、本編のマウスポーリングに関してですが、I/O 0x006Cは3代目になってから新設されたポートなので、初代の時点…というかCONTROL.EXEのリボン絵の表示内容からして組み込み版がそもそも古いバージョンのTownsOS(&TBIOS)のInvitationでは考慮されていない可能性が高いです。
2020-10-19 09:55:20
りうさん、
了解しました。とりあえず、何かI/Oが実装できてないとか速く進みすぎているわけではないんですね。安心しました。情報ありがとうございます!
互換モードは、メモリアクセスウェイトなどを加えた場合のパフォーマンスの影響を考えると、当面はVMのCPUクロックの調整で対応する方向で行こうと思っています。所要クロック数が486に合わせてあって、メモリアクセスウェイトも無いので、初代相当ぐらいにしようと思ったら16MHzよりも結構下げないと合わないかもしれないですね。ラストハルマゲドンとか8MHzにすると快適とか動作報告に書いてありましたね。
2020-10-19 12:15:25
名無しさんよりwikiの方に頂きました動作報告を転載させて頂きます。
アプリケーション名 : KIGEN 輝きの覇者
動作状況 : 津軽[F](動作せず),うんづ[B]
.津軽
症状としてはゲーム画面の表示が開始され、
音楽が鳴ったかあたりでエラーとなります。
以下にCUIに表示される内容を記します。
VM:Write to CRTC-HST register.
VM:VM Aborted!HST register.
Device:486DX
Reason:Undefined REG for FF
Towns Time (Nano-Seconds):11206106433
CS:EIP=7777:00007779 LINEAR:0007EEE9 EFLAGS=00006A57 CPL=00
EAX=0000FF00 EBX=00000000 ECX=00000000 EDX=00000000
ESI=00005575 EDI=000D7777 EBP=00007077 ESP=00010010
CS=7777(LIN:0007770) DS=FF00(LIN:000FF000) ES=01F0(LIN:00001F00)
FS=0018(LIN:00000180) GS=0018(LIN:00000180) SS=F8FF(LIN:000F8FF0)
CR0=00000000 CR1=00000000 CR2=00000000 CR3=00000001
CF1 PF1 AF1 ZF1 TF0 IF1 DF0 OF1 IOPL02 NT1 RF0 VM0 AC0
Default Operand Size=16 Default Address Size=16 Stack Address Size=16
SS+00000000:7F FF FF E0 FF FC 3F FF FF FF FF FF FF FF 00 00
SS+00000010:31 FD 55 FF FF FF F0 00 FF F0 01 FF FF FF FF FF
7777:00007779 FFB81B00
・うんづ
オープニング途中でサウンド途切れる
戦闘OK
ロード/セーブOK
プレイ時間:10分程度
2021-06-08 17:29:22
おおなるほど!確認してみます。ありがとうございます!
2021-06-09 01:03:20
IMAGE FIGHTですが、v20200826から動作が一定ではなく時折フレームスキップが起こっているような感じで動作します。
こちらで確認したところそれ以前のビルドでは安定していましたので、v20200826にて行われた変更の影響かと思われます。
今のところIMAGE FIGHT以外のアプリケーションでは同様の現象は確認できていません。
2021-06-09 12:22:24
110に絡む可能性が高そうですが、v20200826以降ではブライ上巻のオープニングデモの序盤,雷光のエフェクト後にパレットが戻らずフリーズします。
下巻はどうなのか試していませんが、他にも有りそうですので一旦v20200826以降のビルドが絡む報告はやめておきます。
2021-06-09 16:03:34
ご報告ありがとうございます!関係ありそうなのは、commit d67d881128ca5502f3245883b5bc08fee0ceae60 のVSYNCの変更ですかね。KIGENについて、ふたつ問題を見つけてひとつはVSYNCのようなので、同じ原因かもしれません。KIGENのもうひとつの問題は、PCMが割り込みをかけるのですが、割り込みハンドラが割り込み要因をクリアしないので、割り込みのリエントランスが起きてクラッシュというものでした。YM2612のレジスタを読んだとき同時にPCMのIRQ Requestもクリアするという仮説を立てたのですが、それだとWing Commanderで音が鳴りっぱなしになるので違うようです。PICへのアクノリッジを監視している可能性もありますが、ISRはPICの内部レジスタなのでその可能性は低いと思うんですね。
という文を書いてるそばからPICの実装が間違ってたことに気が付いたので、直します!IRRビットは単にIRピンではなく、PICの内部レジスタだったんですね。ということはRising Edgeで立って、INTを出すとクリアなのか。
2021-06-10 01:18:42
IRRを内部レジスタ扱いにすればPCM割り込み問題は解決、と、一瞬思ったんですが、解決しないですね。サウンドINT用のIRピンはYM2612のTimer A Up, Timer B Up, PCM Bank DoneのORだと思うんですが、今度はIRピンがハイになったままになって二度とサウンドのIRQが出なくなりますね。どうしたもんかな。やっぱりPCMからのINTをマスクする別の方法があるのかな?
2021-06-10 01:47:17
あ、そうか。Rising EdgeでIRRビットが立つんだったら、PCM Bank DoneはPCMがバンクの最後のバイトを読んでいる間だけ立って、それが終わったらクリアしてしまえばいいのか。(書きながら考えるな)
2021-06-10 02:06:07
>山川機長さん
早速の調査の方、有り難うございます。
PC-98からの移植物に多いリアルモード,16色のアプリケーションについては、"移植だから無茶なことはしていないだろう"と考えていましたので、私自身は動作確認のプライオリティーが低かったのですが、ある意味においては機種間の相違を埋める為や少ない色数で工夫したエフェクトを実現する必要が有るのでプロテクトモードよりもアクロバティックな構造になっている可能性も有るんですね。
更新を楽しみにしています。
ブライ 下巻完結編に関しては、少しだけ試してみた限りでは起動時に津軽がアボートしますね。
更新後に改めて確認をしたいと思いますが、チラッと見た限りではサポートしていない命令を実行したような感じでした。(記憶が定かではありませんので現時点では真剣に受け止めないで下さい)
また、昨日はDesireを確認していましたが、こちらはマウスとパッドの扱いに難が有りそうで実機ではどうだったか確認が必要です。(マウスポインタの位置によってはパッドでの選択が出来ない)
音の方も(恐らく)FM音源のドラム音が非常に大きく、うんずとの音の差が結構有りました。(これはこれで個人的には好きな方向なのですが)
2021-06-10 09:59:12
WINDYさん、
動作テストありがとうございます!とりあえずPICのIR pin状態とIRRレジスタを分けてみています。大体動作するのですが、一部のソフトで修正が必要でしたね。この修正により、VSYNCはRising EdgeでIR pinを一瞬HighにするだけでPICのIRRが立つのでVSYNC期間中ずっとIR pinを上げっぱなしにしなくても良くなった反面、これだとI/Oの 5CAH (VSYNCクリアレジスタ)の存在意義がなくなってしまいました。が、赤本に「ダミーレジスタ」とあるんですよね。ただ、VSYNCのIR pin stateをパルス動作にしないとRAYXANBERがPICのISRをクリアした後に5CAHに書き込んでいるのでVSYNCが出すぎて、操作不能になってしまうんですよね。
また、IR pinがHighになったまんまの場合のPICの動作がデータシートから読み解けていなくて(書いてない気がする)多分、ISRをクリアしたときにまだIRがHighだった場合はすぐIRRをHighにしてIRETと同時にまた同じINTが出るという動作にしないと「機甲師団」のBGMが鳴らないんですよね。
まだPCMの割り込みをどうすればいいのかが理解できてなくて、FM音源割り込み処理中、割り込み要因をクリアする前にPCMのバンク終了割り込みが発生してしまうとPCMの更新がうまく処理できなくなるのが目に見えています。。。。ん?IR pinがYM2612のTimer UpとRF5C68のEnd of BankのORだと思ってるからそうなるのか。全部Rising Edgeのデルタ関数(パルス)として扱ったら丸く収まったりするかな? 考えてみよう。 (考えながら書き込むな > Self)
2021-06-10 10:39:41
山川機長さん
PICについて詳しい人間でも無く、過去にPIC絡みのプログラムを作成した経験もない人間の戯言程度としてお聞きください。
(1)PICのトリガモードはPICの初期化時にICW1のデータにより決定されますが、TOWNSの場合は赤本によると「レベルトリガモード」固定と有ります。
(2)レベルトリガモードとエッジトリガモードの違いはISRがクリアされた際にIR入力がHi(割り込みON)の場合に、再度同一の割り込みが入るのがレベルトリガモード,無視されるのがエッジトリガモードだと思います。
(3)PICがIR入力を受けてINT信号をHiにするまでの時間は8259Aの場合、MAX350nsです。(TJHIH値)
(4)I/O 5CAHのVSYNCクリアレジスタは恐らく名称こそ「ダミー」と付いていますが、FMR互換I/Oにあるダミーとは意味が違い、ビットに意味がなく書き込み動作に意味がある事から「ダミー」と表記されているだけで、実際にVSYNC割り込みのクリアはここで行う物だと思います。
VSYNC割り込みの動作としては「機甲師団」が正しく、RAYXANBERはISRのクリアとVSYNCクリアの順序が逆じゃないかと思います。
問題は順序が逆でも実機では動いていた事で、ISRクリア~VSYNCクリア間の時間が上記(3)のTJHIH値以下の場合にはPICが次の割り込みを生成しないのかも知れないと仮定するとRAYXANBERも動作するかもしれません。
PCM割り込みについては、RF5C68チップ自体にバンク終了時に割り込みを発生させるような出力ピンは無いように見えるのですが、その場合だと外付け回路によって割り込みの生成が行われているのだと思います。
PCM割り込みの発生はRF5C68が波形RAMをアクセスするアドレスを監視すれば容易に検知できるのですが、クリアはどのタイミングで行われているのでしょう?
PCM割り込みレジスタ(04EBH)のリードで行われているのであれば、FM音源割り込み処理中(IRETまで)にFM音源側の割り込み要因がクリアされてもPCM音源割り込みは出たままなので、FM音源割り込み処理の完了で再度INT13が入って、INT13割り込み要因レジスタ(04E9H)の読取で、PCM音源に割り込みが残っていることが判断できるのではないでしょうか?
2021-06-10 15:39:15
108でWINDY氏が報告くださったKIGENの症状をWIKIに記載した者です。
今後はこちらに症状を記載致しますので、よろしくお願い致します。
VAIN DREAMでは動作には問題ありませんが、画面表示に問題があります。
https://imgur.com/SLJXJj3
https://imgur.com/0g9esNl
(問題)
表示画面に横線が入る(画像1、画像2)
通常のゲーム画面では気になりませんが、音声付きのイベント画面となるとはっきりわかります。
(備考)
上下左右の4隅に描画欠けを生じていますが、これはUNZでも同様なためゲーム固有かもしれません。
2021-06-10 21:05:51
WINDYさん、
おおなるほど!トリガモードで選べるようになってたんですね。RAYXANBERのVSYNCがISRクリアからどのぐらい近いのか、調べてみます。あるいは、実はTownsではレベルトリガーモードに固定というのが、本当はTownsOSではレベルトリガーモードに固定というだけで実はハード的には可能だったりして。もしもRAYXANBERがエッジトリガモードになっていたらそれで説明できますね。たしかに、他のあらゆるソフトでは、まず割り込み要因をクリアしてからISRをクリアしているので、RAYXANBERがなにか妙なんですよね。
RF5C68の割り込みクリアについてですが、KIGEN問題以前は、IRQ発生バンクを読んだ時点でクリアということにして、IRQバンクの各ビットのORをPICへのIRQ Requestであるということにしてうまく動いていたのですが、KIGENのIRQハンドラは、割り込み要因レジスタを読んでなくて、PCMの割り込みをハンドルしてないんですね。このため、PCMの割り込みがかかりっぱなしになるというのがKIGENクラッシュの原因になってるのですが。PCMの割り込みだけマスクするとクラッシュしなくなるのですが。
ヘルムートさん、
画面表示の横線というのはダンパーワイヤー線ですね!これは、当時のトリニトロンブラウン管の特性で発生してた線をまったくのノスタルジアで再現したものです。(多分津軽に実装した機能の中でもっとも意味がない)。ダンパーワイヤー線オプションをオフにすることで見えなくなるのでお試しください。
2021-06-10 23:12:09
RAYXANBERのVSYNCは、確かにISRをクリアしてほとんどその直後に割り込み要因をクリアしてますね。うーん、そういう問題なのだろうか。だとするとISRクリア後ちょっと待ってからIR pin状態を確認しないといかんのかな?しかし350nsということは、16MHz Townsだと1クロックが62nsだから5クロック。メモリウェイトがあったことを考えると5クロック以内にはVSYNCクリアしてないですね。エッジトリガモードにしているのであればそもそもVSYNCをクリアする意味が無いですし、ちょっと謎ですね。ISRクリア後にIRピンを次に確認するまでのラグがもう少し長い可能性もありますが。
000C:00002DCE FA CLI
000C:00002DCF E888000000 CALL 00002E5C
000C:00002E5C 50 PUSH EAX
000C:00002E5D B00B MOV AL,0BH
:
:
:
000C:00002E99 B020 MOV AL,20H
000C:00002E9B E600 OUT 00H,AL (PIC_PRIMARY_ICW1) ISRクリア
000C:00002E9D 58 POP EAX
000C:00002E9E C3 RET
000C:00002DD4 66BACA05 MOV DX,05CAH VSYNCクリア
000C:00002DD8 EE OUT DX,AL
000C:00002DD9 FB STI
2021-06-10 23:41:14
山川機長殿
仕様通りの動作ということで大変失礼致しました。
トリニトロンのディスプレイとテレビを使っていたのに、すっかり忘れていました。
津軽開発の進展を心待ちにしております。
2021-06-10 23:51:42
データシートをよく読んだら、
If LTIM='1', an interrupt request will be recognized by a 'high' level on IR Input, and there is no need for an edge detection. The interrupt request must be removed before the EOI command is issued "OR THE CPU INTERRUPT IS ENABLED" to prevent a second interrupt from occuring.
ということなので、CPUのIFがPICにも見えていて、IF=0の間はIRピン状態は見ないということのようですね。CPUのIF=0だとCPUがAcknowledgeしないから、falling edge of the first ~INTAが起こらないということか。そのように直してみよう。
2021-06-11 00:07:17
KIGENのPCM割り込み出過ぎ問題とVSYNC割り込み出ない問題のうち、VSYNCは解決しました。本来、
for(unsigned int pri=0; pri<8; ++pri)
こうあるべきところを、
for(unsigned int pri=0; pri<7; ++pri)
こう書いてました。いやあ、よく今まで動いてましたね(^_^;)かれこれ30年以上プログラミングを続けてもこんなエラーが出るという。。。。ためしにPCM割り込みを強制的にマスクしてしまうようにコードを書き換えるとKIGENは普通に起動するようになりました。が、当然これをやると他のプログラムが動きません。
あとは、何がPCMの割り込み要因をクリアしているのか、あるいは、そもそもPCM割り込みがここではかかるべきではないのかそれが解明できたら動くようになると思います。
2021-06-11 04:16:09
KIGEN起動しない原因、解明しました!I/Oの04EAH、PCM割り込みマスクレジスタは本来Read/Writeアクセスだったのに、Write Onlyとしていたのが原因でした。どうもビットをひとつずつオフにしていっていたようで、
(1) I/O 04EAHを読む → ビット0クリア → I/O 04EAHに書き戻す
(2) I/O 04EAHを読む → ビット1クリア → I/O 04EAHに書き戻す
という処理をしていたのに、津軽がI/O 04EAHのreadに対していつもFFHを返していたもんで、ビットがクリアされていませんでした。そのため、本来発生するはずのないPCM割り込みが発生してました。
ということで、PICの大改造はまったく必要なかったんですね。とりあえず、最小限の修正でKIGEN起動に対応したソースをPUSHしました。リリースも後程出します。(ほかにもPCMの修正で、Turbo Out Runとぷよぷよで発生していたノイズが無くなった)
今ちょっと迷っているのが、PICの大改造を採用するかどうかで、どうやらLevel-Triggered Modeをエミュレートするには単純にIRR bit=IR pin inputとする方法で十分のようです。VSYNCのように自動的にオフになるものは微妙に動作が違う場合があるかもしれないですが、それ以外はまったく同じ動作をすると思います。今までの動作実績を考えると小さな修正で済むものは小さな修正で済ませた方が良いような気がするので、難しいとこですね。
2021-06-11 09:17:44
ヘルムートさん
ようこそ!! 愚痴から自慢まで好きなことを気軽に書き込んでくださいね。
ダンパワイヤーだったのですね、そう言えばそのような位置だわ。
山川機長さん
PICの割り込みモードについては赤本上ではあっさりと「1=レベルトリガモード(固定)」と書かれているだけで、PIC的にはエッジドリガモードにする事も可能だと思います。
しかし、全ての割り込みモードが変更されてしまいますのでソフト的には自前の割り込みルーチンで処理をすれば問題はないのではないかと思いますが、ハード的にはレベルトリガモードを前提とした周辺機器とのやり取りに支障が出るかもしれませんね。(と言ってもゲームで使用するのはタイマー,キーボード,CD-ROM,VSYNC,音源位でしょうか?)
122のデータシートの記載については、単にレベルトリガーモードの説明ですが最後の"OR THE CPU INTERRUT IS ENABLED"がよく解らないです。
8259とCPUは限られた制御ピンとアドレスライン(8259の場合はA0)とデータライン(D7-D0)でしか接続されていませんので、8259側からCPUの状態を知ることが出来ません。
CPUの割り込みがディセーブルの時にどう言う回路となっているかは設計によりますが、普通はCPU側が単に割り込みを無視するだけでCSラインを制御して8259を切るような事は無いと思います。
RAYXANBERのタイミングについては、122のデータシートの記載の次に"In both the edge and level triggered modes the IR inputs must remain high until after the falling edge of the first INTA.If the IR input goes low before this time a DEFAULT lR7 will occur when the CPU acknowledges the interrupt."と有りますので、無視されるのではなくデフォルトを起こすようですね。
2021-06-11 09:52:56
リリースだしました!KIGEN起動するようになったと思います。ヘルムートさん、ご報告ありがとうございました!
ブライもリバーヒルソフトということなので、VSYNCがかからなくなって固まっている、あるいは割り込みがかかりすぎてスタックオーバーフローが起きているかどちらかではないかと思うのですが。
それから、ぷよぷよで効果音が鳴った後で「じーーーーー」というノイズが残る問題があったのですが、まじめに調べたら、LOOP STOPが出たとき、一瞬だけPCMの出力を0にしていて、-700 -700 -700 0 みたいな感じのループになっていてノイズが発生していました。LOOP STOPが出たら巻き戻した上で次のバイトを読むようにしたところ、まだプチプチ音が聞こえるもののノイズが無くなりました。もしやと思ってTurbo Out Runも走らせてみたら、「キーン」という音は本来の効果音ではなく、同じ原因で出ていたらしくこれも出なくなりました。
PICの"OR THE CPU INTERRUT IS ENABLED"は、「CPUがAcknowledgeしないので」という意味だと思うのですが、それだとRAYXANBERみたいな場合は本来はIR7を出すべきなんでしょうね。ん? IR7が来ること期待してるソフトあるのだろうか?
2021-06-12 00:06:05
山川機長さん
リリース有り難うございます。
BURAI 上巻,完結編共にオープニングデモと本編(本編は共に冒頭のみ)の動作を確認しました。
今のところ問題は無さそうです。
PICでデフォルトIR7が発生するのは、主に外来ノイズによる物だと思いますので通常はそこまで考慮したソフトは無いと思います。(FA用の制御ソフトとかだと有るかもしれません)
PICの件は根が深そうですので分けた方が良さそうですね。
2021-06-12 09:00:02
山川機長殿
リリースありがとうございます。
KIGENの起動とオープニング戦闘の終了まで確認しました。
多重割り込みは厄介ですね、割り込みタイミングをどうやって図示して仕様書に入れるかいつも悩みます。
タイミングや要因が複雑に絡みますので。
私はC言語までの50初頭のおっさんプログラマ(骨董品)ですので、
山川機長殿のようなプログラミングスキルを身に着けたいものです。
2021-06-12 10:49:48
山川機長さん
こっちはまだなのかもしれませんが、イメージファイトの方は変化無しでした。フレームスキップの様な感じです。
PICの大改造はMAMEの様な「汎用」を目指さない限りは必要ないのかもしれません。RAYXANBERも津軽のデバッガで見る限りではレベルモードを使用しているようですし、エッジドリガモードを使用しているソフトはまず無いと考えても良いと思います。
ヘルムートさん
私はアセンブラまで(しかも読める程度)の高級でない言語までだなァ。Cは苦手で(汗)
年齢は現役でTOWNSを触っていた人は皆その辺りではないでしょうか。
スキル付けたいなぁとは常々思ってはいますが、中々うまくは行きません。 「プログラミングは知識と経験が大きいけど、才能も有るからなぁ」と言い訳を自分に言い聞かせています。
2021-06-12 11:37:30
WINDYさん、
Image Fightは、フレームスキップというか敵機が少なくなった時に急に一瞬速くなるような感じですか? その現象は僕も気になっているのですが、メインループを見つけて何でタイミングを取ってるのか探すしかなさそうですね。やってみます。
ヘルムートさん、
僕は初代が出たのが高1のときでしたね。あのころは、もっと髪がありました!僕も授業でプログラミングなんか教えていますが、学生さんからは古風な書き方と思われてるんだろうな。
なお、結構ステートファイルに自信が出てきたので、起動時のオプションで読み込むステートファイルを指定できるように修正してます。GUIにも出すので、これで起動が遅いソフトも爆速で開始できるようになります。ただし、注意としてはDOSのキャッシュがあるのでセーブした時点からフロッピーディスクに書き換えがあると矛盾が発生する場合があります。開発環境を一気に起動するような場合は、多分High-Cの起動でキャッシュは全部Flushされると思いますが、念のため、いくつかのディレクトリを取るなどしてキャッシュを確実にクリアすると安全だと思います。
うーん、VNDRVが実現してるといいんですけどね。nabe-abkさんは、本業の方が忙しいのかな。
2021-06-12 12:58:37
>130 山川機長さん
イメージファイトの状況は仰るように、一瞬速くなるような感じです。
v20200826より前の津軽では問題が無かったのでVSYNC絡みで治るかなとも思っていたのですが・・・ お世話を懸けます。
2021-06-12 14:31:03
ImageFight問題直しました!津軽はSPEN bitに1が書き込まれると、SpriteのDevice Callbackをスケジュールに加えるのですが、ImageFightは何度も繰り返しSPENに1を書き込んでいたため、そのたびにスケジュールが上書きされてしまい、Sprite Ready->Busyに切り替わるタイミングが狂ってしまっていたというのが原因でした。Device Callbackをスケジュールに加える処理をSPENが0->1になったときということにして解決しました。多分これによる悪影響は出ないと思います。ソースは既にGitHubにPUSHしました。
2021-06-13 01:29:36
ImageFigheへの対応、有り難うございます。
SPENが"1"なのに繰り返し"1"を書き込んでいたんですね。 現在値=1で1を書き込んでも実機では無視されるだろうから、より実機に近づいたとも言えますかね。
Indiana Jhones and the Last Crusadeを試してみました。
序盤のみですが、カーソルが下に徐々に移動していくようです。重大ではありませんが他のSCUMMソフトも同じかもしれません。(Fate of Atlantisは同じように動作しました)
RAMが多いと起動時の初期化に時間がかかるようですので、2~4M位で試すのが良さそうです。
2021-06-14 12:28:23
Last Crusadeはカーソルが下に移動しますか。。。。それは不思議な現象ですね。マウスがインテグレートできているのであればTBIOSを使っているものと思いますが。詳しく調べる必要がありそうですね。
なお、Emerald Dragonを始めたのですが、なぜか僕が作ったイメージは本来よりも2秒短くなっていて、イベントシーンのコードがCD-ROMの全長をチェックするのにひっかかってイベントシーンが再生されない現象が起きてました。誰か同じ現象に遭遇した人いますかね?以前は別の原因でイベントシーンがスキップされる現象があって修正したはずなのですが、なぜかそのメモが見つからず何が原因だったのかわからなくなって結局逆アセンブルしなおしてしまったのですが。単に2秒長くすればよかったのでBINファイルに2352*75*2バイトの0を追加したらイベントシーンも再生されるようになったのですが。BIN/CUEデータは作成ソフトによって出てくるイメージが違うことがあって困りますね。
なお、CPUを66MHzにするとEmerald Dragonが起動しなくてなんでだろう?と思ったらFree-Run Timerの16-bit Readがmicro secondsを返すべきところをnano secondsを返していてなんで今まで動いていたんだろう?と、思いました。
2021-06-14 13:01:29
山川機長殿
最新の実行ファイルを用いて発生した症状です。
設定はGUI上で行っています。
CDSPEEDをデフォルト以外に設定するとパラメータチェックに引っ掛かります。
argcと*argv[]辺りをチェックされている関数の問題でしょうか。
PS.
GITHUBを使ったことはありませんし、
基本的には統合環境で開発しているのでMAKEなどは苦手です。
このソフトは何を使ってビルドされているのでしょうか。
よろしくお願いします。
2021-06-14 19:28:23
ヘルムートさん、
ご報告ありがとうございます!それは、プロセスを分けた場合の問題ですね。その問題は手元のコードでは既に修正済みなので、次のリリースでは発生しないと思います。
津軽のビルドは基本CMakeですね。コマンドユーザーインターフェースモジュールのコンパイルは割と簡単だと思います。GUIだとpublicレポジトリを別にダウンロードする必要がある点だけやや面倒かもしれません。
2021-06-14 22:33:58
返信ありがとうございます。
リリースをお待ちしております。
ソースの差異を参考にさせていただきます。
2021-06-14 23:29:57
>134 山川機長さん
以前、Zak McKrackenでは問題なかったはずでしたので試してみました。
v20210506辺りから現象が発生するようです。 今のところインディ2作品とZakとMonkeyIslandで同様の現象が発生しますので、LOOMも同様かも知れません。
状況的にはマウスを動かして、停止後にカーソルが画面下に向かってズルズルと移動し続けるような状況です。
カーソルの移動は毎回発生するわけではなく、数回のマウス移動で1回発生する程度です。
2021-06-16 09:25:01
おおなるほど。ご報告ありがとうございます!なんとなく何が起きているのかいくつか可能性が想像できますが、下向きだけというのがやや謎ですね。TBIOSを使っているのであれば、多分加速度処理の都合だと思うのですが、今ホットキーをやってるので、これが終わったら見てみます。
2021-06-16 13:06:08
山川機長殿
雑談で申し訳ありません。
134のエメドライメージ作成に関連して思い出したことがあります。
リッピングしたイメージはCDドライブとリッピングソフトによって
マスターとの差異が結構出た記憶があります。
ゲームCDの場合、
パイオニアのドライブを使用して、cd manipulator辺りでリッピングした気がします。
音楽CDの場合、
パイオニアのドライブを使用して、exact audio copyなどを使った気がします。
CDに焼き付けるときは、太陽誘電あたりのディスクを使った気もします。
Windows XPの初期頃でしょうか。
2021-06-20 20:28:59
エメラルドドラゴンを始めてしまったのですが、これ、マップを表示するのに「HELP」キーを押すと言われるのですが、TOWNSってHELPキー無いですよね。TOWNSだとどのキーを押せばいいかわかります? おそらく初期のJISキーボードに存在するキーだと思うのですが。最悪逆アセンブルという手もありますが。多分エメラルドドラゴンは実機で起動できると思うので、その時点になったらデータディスクを書き戻してトライしてもいいのですが。 (サウンドトラックを買ってあるけどクリアするまで聞かない)
コマンドタイプするごとにひとつずつインクリメントしながらキーコードを送信するコマンドでも追加してやろうかな。
2021-06-21 12:07:56
山川機長殿
DELETEキーでマップ開くようです。
私はエメドラはもうやる気はなくなりました。
シナリオは大好きですが、ステータス吟味が極めて面倒でして。
2021-06-21 17:09:51
スーパーボンバーズのFMR50/FM-TOWNS移植版(ドキュメントの記載に従って再配布します)
https://1drv.ms/u/s!Aqq3BKBfkjZ2pt5EnpXx0ILR9tqjLA?e=2CsDZ5
DOS6で試してみましたが、起動時にグラフィック画面背景のスクリーン0番パレット0番の色が暗めの緑に設定されるはずが、ときどき黒になるという不思議な現象があります。
実行キーとその他のキーの同時押しが必要なソフトでもあります。
#エメドラはEXPにデバッグオプションが残っていて、コマンドラインに足してやると壁を無視して移動できたりしたような記憶が
2021-06-21 19:05:02
ヘルムートさん、
DELETEキーでしたか!ありがとうございます!
エメラルドドラゴンはたしかにユーザーインターフェースがいまいちですね。せめてウィンドウを開く・閉じるときのウィンドウのアニメーションさえなければと思いますが。ところで、これ、戦闘に入るとほっといても味方が敵を倒してくれるので、左右のキーを交互に押してリターンキーを押すようなマクロを仕掛けると非常に他力本願な自動レベルアップができますね。
pinさん、
スーパーボンバーズ、ダウンロードしました。ありがとうございます!パレットは、謎ですね。うーん、これは突っ込んで調べてみないとすぐには原因が想像できないですね。
2021-06-21 23:45:32
パレットを0, 0, 0(黒)に戻しているのは小さいセグメントのアドレスで
ゲームがパレットを変えるときはV-SYNCを待つと思うので、
V-SYNC中か否かのレジスタの値が変わるタイミングと割り込みが発生するタイミングに実機との差があるのかとも思ったのですが
ちょっと手が付けられていません
2021-06-22 23:00:45
ジェノサイド・スクエアでダメージを受けると自機やエネミーが描画されなくなることがあります。
津軽バージョン:v20210624
Genocide2 Stage2中盤にて確認
現象は初期の頃に起きていたものに似ています。お手すきの際にでも対応して頂けると幸いです。
2021-07-01 00:34:42
ご報告ありがとうございます!その現象はv20210624より前のバージョンでは発生しないですか?メモによるとGenocide 2で以前起きていた問題は、確実にVSYNC終了した後でSprite Busyにしないとスプライトが更新されなくなるというものでした。このバージョンの変更で関係がありそうなのは、Image Fightのタイミング問題のためにSprite開始を書き込んだとき内部のタイマーをリセットしないように変更したのですが、実はリセットは必要だけど今まで正しくリセットしていなかったのかもしれません。とりあえず、こちらで同じ現象が再現できないかやってみます。
2021-07-01 01:00:00
山川機長様
すみません仰る通りで、v20210519では再現しません。
時期的にイメージファイトへの対応の頃に起きたと記憶していますm(_ _)m
2021-07-01 01:26:15
すみません、やってみようとしたのですが、あまりにも下手でStage 2まで進めません。Stage 1-2でベルトコンベアのところを通過できなくて、現象が再現するところまで進めないのですが、コマンドモードをお使いでしたら、問題が再現した時点で pri sprite コマンドでスプライトの描画数を確認していただくことは可能でしょうか?pri spriteコマンドを使うと、まずSprite個々の状態を表示した次に、
BUSY:1 SPEN:1 Screen Mode Accepts Sprite:1 #DRAW:156 1stINDEX:868
というような表示が出るのですが、#DRAW: に続く数字を知りたいです。予想ではこの数字が一定数を超えていると思います。そうであれば、応急処置でスプライト描画にかかる時間を一定にするみたいなオプションを追加することで回避できるかもしれません。ちなみにShadow of the Beastも似たような微妙なタイミングに依存する書き方をしているので、ひょっとするとこっちも動かなくなってる可能性がありますね。
2021-07-01 02:11:05
Genocide 2はなにやらステージセレクトのチートがあると↓で主張しているのですが、
https://gamefaqs.gamespot.com/fmtowns/952077-genocide2-genocide-square/cheats
HELPキーの横のREGISTRATIONキーを押しながらって言ったってHELPキーが存在しないですよね。しかし、デバッガで見たらたしかにキーボードI/Oを読んでいるので何かあるかもしれないですが、だれか知ってます?モールス信号のチート(https://togetter.com/li/743856)はGenocide 1だけなんですね。
2021-07-01 02:32:00
さっき書き込んだつもりで書き込めてなかった情報ですが、Towns版Genocide 2のチートは、OPTION画面で以下のキーをタイプでした。キーボードI/Oを読んでいるところから解析したらすぐわかりました。
amatsusae <- Stage Select
nyojitsuni <- Invincibility
しかし、スプライトは謎が深まってきました。スプライトの更新が止まる現象ですが、どうもこういうことのようです。どうやらスプライトの更新は、烏賊のような処理で実行しているようなのですが、
(1)VSYNC終了待ち
(2)While VSYNC==0, if Sprite==Idle update sprite
例えば、(1)に入ってきたとき、既にVSYNC==0だった場合で、スプライト個数が多いとき、VSYNC==0の間にSprite Readyにならないので、このフレームではスプライト位置が更新されないまま次のフレームになります。が、次に(1)のチェックにさしかかるまでの間にVSYNCが終わり、スプライト画面消去期間の32usが過ぎてしまうと、既にSprite Busyになり、そのままVSYNCが始まるまでSpriteはBusyなので、次もスプライトは更新されません。この、VSYNC=1から次のVSYNC終了待ちまでの処理がたまたまVSYNC期間+32usになってしまうとスプライトが更新されなくなってしまうというもののようです。表示スプライト個数が少ないときはVSYNC終了直後と次のVSYNC開始前に必ずSprite Readyのタイミングがあるので必ずスプライト位置は更新されます。
それで、何個スプライトを表示してるのかと思ったのですが、この現象が起きているときは200個程度のスプライトを表示しているようです。リフレッシュレート1/60とすると、1サイクルが約16.7ms。1.5~2msがVSYNC期間として約15ms。スプライト1枚あたり75usなので、15000us/75us=200で、大体計算上1/60で描き切れるスプライト個数を超えたあたりで上の問題が発生しているので仮説とマッチしますね。
応急処置としてスプライト個数にかかわらずSprite Busy期間を例えば10msにしてしまうとこの問題は発生しないようです。この応急処置を施して5分ぐらいStage 2-2をプレイしてみましたが、発生しませんでした。
しかし、これでは実機でも同じような問題が起こりそうなものなのですが、実機では発生しませんね。Sprite Busyフラグが立つタイミングは、赤本の369ページにあるのですが、1/60でスプライトをすべて転送し終わらない場合Sprite Busyフラグはどのように立つのか(ひょっとすると次の1/60は何もせずずっとBusy=0かもしれない)これがわからんですね。実機で動作を調べてみないといかんようです。ちょっとHigh-Cでプログラミングしてみますかね。
2021-07-01 06:41:08
実に興味深いことがわかりました!MXでサンプルしたところ、CRTのリフレッシュ期間に本来であれば200個程度しか描画できないはずのスプライトが実は289個表示できるということがわかりました。MXのスプライトが初期型より速いとは思えないのですが、赤本の75us/spriteという値は疑問ですね。それからVSYNC期間は案外短いですね。480ラインまで行ったらすぐにVSYNC期間に入るのかと思っていたのですが、もう少し下まで走査してから戻っているように見えました。今なんとか具体的な所要時間を測ってやろうとしてます。
2021-07-01 10:31:14
いやあ、非常に興味深いことがわかりました。まずSprite Busyフラグですが、これはVSYNCの立ち上がりと同時に1になるようです。
そして、上に書きましたが、最大290個のスプライトがCRTのリフレッシュの1サイクルで転送できるようです。ただ、ばらつきがあって、289個のときもあれば290個の場合もあるようです。
1リフレッシュサイクルで転送が終わらなかった場合ですが、その場合、引き続きSprite BUSYが続きます。そして、次にBUSYになるのは、Sprite Readyになった次のVSYNCの立ち上がりですね。なので、Sprite Readyになるのは、必ずVSYNC立ち上がりの前ということになります。
僕は赤本の369ページを元にタイミングを決めていたのですが、この図ではSprite BusyがVSYNC「終了」から始まるように書いてますがVSYNCの「開始」から始まります。そして、75us/spriteは正しくなくて実際は、(16666us-100us)/289=57us per spriteのようです。(10の位と1の位を間違えたか!?)仮にGenocide 2のようなSprite Readyの待ち方をしても、ReadyになるのはVSYNCサイクルの末なので、かならずどこかでSprite Readyを検出できることになりますね。
赤本の正誤表に追加しよう。
それから、VSYNC期間は短いですね。わずか18usという計測結果になりました。これまで津軽では16.6msから480ライン分を差し引いて1417usとしていたのですが、長すぎたようです。
この修正を入れるとGenocideも安定して動くと思います。ついでにタイミングのテストプログラムまでできてしまったので、今度は実機に近づけられると思います。タイミングテストに使ったプログラムは、津軽のソースのtestc/sprite02.cでさきほどPUSHしたので興味のある方は御覧ください。
2021-07-01 11:26:41
すみません発生するエリアですが起き易いのは1-3の瓦礫が落ちてくるところでした。
何故か再現しなくなって手間取りました。
発生中にpri spriteを打った結果は以下になります。
BUSY:1 SPEN:1 Screen Mode Accepts Sprite:1 #DRAW:222 1stINDEX:802
HOFFSET:0 VOFFSET:0 DISPPAGE:0
#ActuallyDrawn:167
実機から貴重なデータが取れたとのことで良かったです。
完成度がまた上がりますね。流石です!
2021-07-01 12:34:37
ということで、VSYNCとSprite Busyのタイミングを実機サンプルに合わせたソースをPUSHしました。まだリリースにはしてません。現在ctestを流してますが、多分パスすると思います。Genocide 2はStage 2-2を途中まで(やられるまで)3度ほど進めましたがスプライトが更新されない問題は発生しなかったので、多分直っているのではないかと思います。剣振り系のゲームは好き(ドラゴンバスターと源平討魔伝には相当な数の50円玉をつぎ込んだ)なのですが、Genocide 2はアクションが多くて難しいですね。上の敵を攻撃したくてうっかり↑を押したままジャンプしてしまうと宙返りするまで何も攻撃できないとか結構シビアですね。あと上から撃ってくる機関銃の類は一体どうやって対応すればいいのだろうか。
2021-07-01 12:40:28
Type.dさん、
PRI SPRITEの結果ありがとうございます!やはりスプライト数が200を大きく超えてましたね。上に書いた通り、赤本のように75us/spriteの時間がかかると想定すると、CRTCの1リフレッシュサイクルでは描き切れないため問題が発生しましたが、実機に合わせた57us/spriteだと220個程度は余裕で描き切るので多分問題は出なくなると思います。おそらくGenocideの書き方で実機で問題が出なかったということは、スプライト表示数が290に近づくようなことが無いように書いているのではないか、と思います。仮にそのような状況になったとしても、新しいコードではVSYNC開始前にSprite Readyが出るので、フレームが遅くなったとしても表示が更新されないということは無くなると思います。(多分)
2021-07-01 13:24:16
山川機長様
新しいコードのほう早速動かしてみました。大体同じエリアです。
>pri sprite
BUSY:1 SPEN:1 Screen Mode Accepts Sprite:1 #DRAW:250 1stINDEX:774
HOFFSET:0 VOFFSET:0 DISPPAGE:0
#ActuallyDrawn:198
これでも全体的に動きがスムーズになりました。なるほど1フレーム内で250描くところを220前後だったのですね。
何度かやってみましたが、現象は起きなくなりました。
音楽も先日の調整でデフォルトでバランス良く鳴っています。
対応して頂きありがとうございました!
2021-07-01 22:10:12
>>山川機長
当時、自作チェッカーで調べたときは、初代~HRが224~227枚、MA/MXが276枚でした。
VSync割り込みまでにスプライト描画が終了しなかったら終了、みたいな単純なものだったと思います。
もっと色んな機種で調べていたはずなのですが、ソースコードもろとも消え去ってしまいました。
もしかしたらNIFTYにもアップしていたかも知れないのですが、どなたかお持ちではないでしょうかw
2021-07-01 23:16:24
なんと、スプライトの転送速度って変わってるんですか?スプライトBusy/Readyでタイミング取ってるソフトがあったと思うんですが、、、そうか。個数が少ないと結局VSYNCと一致するのか。
なお、上の計測結果の訂正でVSYNCの期間は60usでした。1us間隔だと短すぎて正確に時間が測れてなかったようです。
2021-07-02 00:02:51
ということで、昨日からの研究成果をまとめました。
http://ysflight.com/FM/towns/spriteTiming/j.html
VSYNCの長さについては、忘れないうちに結果をまとめておこうと思って書き始めたら1us間隔で正確に時間が測れてないことに気が付いたので良かったです。なんでもまとめてみるもんですね。
また、VSYNCの長さを60usに修正したソースもPUSHしました。いや、この点ははっきりわかってなくてモヤモヤしていたので、一念発起して調べてすっきりしました。
2021-07-02 01:16:58
>>山川機長
まず、自作チェッカーについてちょっと言葉足らずだったので訂正。
誤:VSync割り込みまでにスプライト描画が終了しなかったら終了
正:スプライトの枚数をだんだん増やしていって、VSync割り込みまでにスプライト描画が終了しなかったら終了
TOWNSのスプライト枚数は220枚程度って言われてましたね。
白TOWNSで枚数が増えたのは当時から知られていたと思いますが、
だからと言って白TOWNSに合わせて作れるわけではないんですよねw
2021-07-02 10:46:48
10~20個増やす方法があると TCN ML [tcn:0088] で語られていました
また、60MHzベースの白TOWNSでは転送個数がやや低いことも語られていました(これはHB/HCのことでしょうか)
前者についてメール内では具体的な方法に触れられていないのですが、おそらくある程度垂直同期周波数を変更しても
CRTが追従してくれることを利用して、56Hz程度まで低下させるのだと思います
2021-07-02 11:31:41
>158 fuzzballさん
一応、NiftyのFTOWNSフォーラムのデータライブラリは採ってあるのですが、結構な量なので何かヒントは有りますか?
ファイル名とかが判ると絞りやすいのですが。
2021-07-04 23:25:20
>>WINDYさん
素晴らしい!
IDで検索できますか? MHG03330 です。
(ただしチェッカーは無いかも知れませんが‥)
2021-07-05 11:23:33
>164 fuzzballさん
MHG03330で手持ちのデータライブラリを検索しました。
・Rainbow Mouse (カラフルマウス鑑賞プログラム)
・CD tray Open/Close/lock/unlock CDOC ver0.20
・Rainbow Mouse Driver ver0.10
・MSM6258 to RF5C68 converter MSM2RF ver1.0
・Wave ram Loader/Saver ver0.10
・Wing Commander / 486機用マウスカーソル飛び解消パッチ
・Muscle Bomber / BWAレスラー使用パッチ
・Super Street Fighter 2 用 パッチ#02
がヒットしました。 どこかに上げましょうか?
2021-07-06 17:47:47
>>WINDYさん
うーん、スプライトチェッカーは無かったですね‥残念。
身内にしか配らなかったのかも知れません。
ツール類はフリコレに入っていて、パッチ類は昔ツイッターに上げているので、サルベージの必要は無いようです。
お手数をお掛けしただけになってしまって申し訳ないです。
2021-07-06 21:31:43
マイト アンド マジックのクラウズ オブ ジーン(COX)とダークサイド オブ ジーン(DOX)の動作確認を互換リストに追加しました。
DOXの方は問題無かったのですが、COXの方はマウスカーソルの移動に問題ありで、画面の下半分しか移動しません。
あとはPCM音量が大きいかな?という程度で、概ね良好です。
2021-07-09 23:21:12
COXの件、何か変更/調整すべき設定があれば教えて下さい。色々試してみます。
2021-07-09 23:29:29
おおなるほど。多分、それは、アプリケーションによってVRAM Offsetをマウス座標に考慮すべきものとしないでいいものの二通りがあるので、それは、設定で切り替えられるようにした方がいいかもしれないですね。ひょっとするとそれだけで直るかもしれないので、そのようにしてみます。
2021-07-10 08:32:17
とりあえず、オプションを追加したソースをPUSHしました。GUIでは、"Consider VRAM Offset in Mouse Integration"、コマンドだと-MOUSEINTEGVRAMOFFSET 1/0 で、0にするとマウスインテグレーションでVRAMオフセットを無視します。デフォルトではVRAMオフセットは考慮することになってますが、このオプションに関してはアプリケーションによってどこをマウスの原点とするかまちまちなのでユーザによる指定がどうしても必要ですね。COXでマウスカーソルが画面の下半分しか移動しないようでしたらこのオプションをオフにすることで解消するかもしれません。よかったらお試しください。
なお、最新のリリース版で、プロセスを分けない場合電源をオフにしなくてもプロファイルダイアログが出てしまうバグが出てますが、リリースを出す直前に、「あ、また忘れてた」と思ってプロセスを分けた状態から電源を切ったらプロファイルダイアログを出すように急いで追加してプロセスを分けない場合であまりテストしないままリリースにしてしまった影響です。次のリリースでは治りますので。
2021-07-11 11:28:18
それから、多分ついさっきPUSHしたソースでは、Indy Jones等でマウスカーソルが下に動いてしまう問題は解消していると思います。
2021-07-11 13:05:42
>>170 山川機長
CUIでしか試していませんが、0/1ともに変化無しでした。どちらも画面(というかVRAMですね)の下半分しか移動しません。
townsargv.cpp で considerVRAMOffsetInMouseIntegration にfalse/true を代入しているのは確認出来たので、
ビルドに問題はないと思います。
2021-07-11 22:11:38
>>170 山川機長
無理矢理でもちゃんと表示されれば何か参考になるかなと思い色々やってみたところ、
FMTowns::ControlMouse()の中を、
else if(true==crtc.InSinglePageMode())
{
//origin=crtc.GetPageOriginOnMonitor(0);
origin.Set(0, 256);
(以下略)
こうすると正しい位置にカーソルが表示されました。
元々の origin は (0, 0) です。
2021-07-11 23:59:34
おおなるほど!これは、Super大戦略みたいにVRAMオフセットでスクロールにしてるのではなく、表示位置をずらしてるパターンだったんですね。オプションが増えてしまいますが、そのオン・オフも追加してみます。
2021-07-12 00:12:02
あ、いや違うかも。単に、TownsStartParametersからFMTowns::Variableに値をコピーするのを忘れてました。今PUSHしたソースだとどうですかね?
2021-07-12 00:39:11
>>175 山川機長
それでしたw もう少し突っ込んで検証すれば良かったです‥。
ただし、-MOUSEINTEGVRAMOFFSET 0 で移動範囲が画面全体になりますが少しズレています。
origin.Set(0, 40); にするとピッタリになりました。画面の上下に黒帯の分だけズレているようです。
画面全体スクショ: https://postimg.cc/DJKgTRBL
ズレ比較スクショ: https://postimg.cc/47rWmmf7
2021-07-12 21:04:07
オーサムを試したらばっちり走らなくて、CDCとCRTCのバグが取れました。CRTCのWord-Writeでスプライトに使用可能を通知するのを忘れてた影響でスプライトがまったく見えなかったのですが、その状態だと、メニュー画面でAWESOMEのAWと選択の矢印だけ見えていてなぜだろう?と思ったら、なんでだろうと思ったらAWと矢印だけ普通にVRAMに書き、残りをスプライトで書くという技を使ってたんですね。「そこ、そんなに凝るとこか???」と思ってしまいましたが。メニュー画面だけスプライトオフにして320x240二画面モードを使ったら遥かに簡単なコードで済んだと思いますが。
プレイできるようになった感想は、なんで今まで誰も試してなかったのかわかったような気がしました(^_^;)ソースはPUSHしたのでコンパイルすれば使えます。次のリリース(多分明後日)からプレイ可能になりますんで。
2021-07-14 08:05:26
>>山川機長
COXのマウスカーソルの件、PRさせていただきました。
スーパー大戦略用にオフセットを計算しているところで、VRAMサイズを考慮するようにしました。
(スーパー大戦略は二画面モードを使用していると仮定)
これで -MOUSEINTEGVRAMOFFSET を使わずに正しい位置に表示されるようになりました。
2021-07-16 21:17:14
おおなるほど!1画面モードだったんですね。解明していただき、ありがとうございました!Mergeさせていただきました。
2021-07-16 22:47:25
>171 山川機長さん
Indy Jonesの件、対応有り難うございます。 v20210716でマウスカーソルが下へ勝手に移動する事が有る件は出なくなる事を確認できました。
LastCrusadeの方はしばらくプレーして問題は無さそうでしたが、
2021-07-17 18:13:25
>171 山川機長さん
IndyJonesの件、対応有り難うございます。 v20210716でマウスカーソルが下へ勝手に移動する事は無くなりました。
FateofAtlantisの方で本編中のマウスカーソルがシステムのカーソルに対して数十ドット下の位置に表示されますが、それ以外の問題は無さそうです。
引き続きSCUMMシステムを使用したタイトルの確認をしてみます。
2021-07-17 18:17:02
カーソル位置問題はやっぱり発生するんですね。VRAMオフセットを無視するオプションを使っても変わらないですかね?Windowsのカーソルを消してしまうという手もあるにはあるのですが、時間差があるので酔うかも。
Operation Wolfなんかはゲーム中とメニュー画面でカーソル表示位置がちょっとずれているので、ゲーム画面に合ってるからいいや、と思って放置してます。
2021-07-18 23:02:33
>>WINDYさん、山川機長
Fate of Atlantisのカーソルのズレはちょっと変わっていて、
最初は合っているのに、画面の下の方(Y=200)にカーソルを移動するとズレてしまいます。(ズレ幅は16)
TOWNS側のカーソルだけ画面下部にスーッと吸い付く感じです。
ズレてしまっても画面の上端までカーソルを移動するとズレが直ります。
2021-07-18 23:20:58
はじめて書き込みさせていただきます。
「津軽」を互換ROMで使わせていただいている者です。
Windows8.1で「オペレーションウルフ」を遊んでみたのですが、マウスカーソルのずれにより最終面の終盤で画面上方に弾が撃てなくなるという現象がありました。
詳細はブログに書きました。
https://nas-serizawa.at.webry.info/202107/article_2.html
私の環境ではブログに書いた通りゲーム画面が上にスクロールする場面でマウスカーソルが大幅にずれてしまいます。
そのため最終面がクリアできないのですが、みなさんの環境では正常に動作していますでしょうか?
(津軽の推奨動作環境に記載があるように、Windowsで使うならWindows10を使った方がよいのでしょうか?)
2021-07-19 10:11:03
>183 fuzzballさん
何だか少し私の状況と違うようで。
v20210716以前 → 普段はカーソルが合っているが、カーソルを動かして止めると、時折TOWNS側のカーソル(クロスカーソル)がズルズルと下方向に移動して、暫くすると止まる。
v20210716 → 本編中は常にWindowsカーソルよりも数十ドット位下にTOWNS側カーソルが表示される。(本編前の言語選択画面は正常)
>184 NAS芹沢さん
恐らく互換ROMの影響は考えなくても良いと思います。
ブログを読む限りでは症状が出るのはゲームの前半ではない事から、動作検証が充分されていなかった可能性が有りそうです。
実機ROM & Windows10での検証は出来る環境ですので、動作検証をしてみます。(そこまで行けるかは保証できませんが (汗))
2021-07-19 15:05:04
NAS芹沢さん、
はじめまして。Operation Wolfの動作に関してご報告ありがとうございます!Operation Wolfは、まだクリアできていないというか、最終面までたどり着いていないもので、テストできてませんでした。しかし、思い入れのあるソフトとのことなので、なんとかしたいと思います。
ものは試しなのですが、「GamePort」タブに最近追加した「Consider VRAM Offset」のチェックボックスを解除した状態で最終ステージがプレイ可能かどうか実験していただくことは可能でしょうか? 画面のスクロールに伴ってカーソルがずれるとのことでしたので、多分このチェックボックスをはずすことで解決するような気がします。この方法で解決するようであればアプリケーション用の設定でOperation Wolfを選んだとき自動的にこのオプションもはずれるように修正しますので。もしもお時間がありましたら、よろしくお願いします。
とりあえず、自分もクリアできるようにがんばってみます。ついさっき、試しに久しぶりにプレイしたら、あっさり弾を撃ち尽くして負けてしまいました! マウスボタンの連射機能も追加してみようかなと思った反面ますます弾切れが起きそうですね(^_^;)
2021-07-19 21:26:04
>183 fuzzballさん
v20210716での動作の件、fuzzballさんの仰る意味が動かしてみてようやく解りました。
仰るように画面の下側にカーソルを持っていくとTOWNS側のカーソルが下まで移動してずれ、上部の画面外に一度移動させると合うようです。
>184 NAS芹沢さん
>186 山川機長さん
まず、ROMに関しては実機のROM(HC)でも、縦スクロールが入るとその分だけカーソルがずれる現象は確認できました。
これは、186で山川機長さんが仰っている「Consider VRAM Offset」のチェックボックスを外すと大丈夫なようですのでお試しください。
ステージ間のデモで、発砲音が鳴りやまないのですが・・・ 私だけでしょうか?
久しぶりにプレイした感想は「こんなに難しかったっけ?」でした。
2021-07-19 23:07:08
直りましたか!さっき書いた後でCMUまで歩きながら、「ん?VRAMオフセットを考慮するのはTOWNSのマウスカーソルがホストのカーソルよりも下になるのを是正するためだから、この場合、TOWNSのカーソルが既にホストのカーソルの下にあるということは、解除したら逆効果?」とか思ったのですが、直ったようで良かったです。次のリリースで、アプリケーションで「OPERATION WOLF」を選んだときは自動的にVRAMオフセットを無視するように修正します。
ステージ間デモの発砲音は、気が付かなかったですね。というか、デモって実は数ステージクリアしないと出ないとか?一応3ステージはクリアしたことがあったと思ったのですが。少しがんばってOperation Wolfやってみます(^_^;)
2021-07-19 23:37:11
> 186 山川機長さん
「Consider VRAM Offset」のチェックボックスを解除して、私の環境でも全ての面が問題なくマウス操作できることを確認しました。
コンティニューを使って3周クリアしました。
エンディングのスタッフロールも正常に動作してメニュー画面に戻りましたので、まったく問題なさそうです。
ありがとうございました。
> 187 WINDYさん
> ステージ間のデモで、発砲音が鳴りやまないのですが・・・ 私だけでしょうか?
当時20Fで遊んでいるときも鳴りやまないことが数回に一回程度ありました。
(ゲーム側の仕様だと思われます)
先ほど津軽で遊んだ際もエンディング画面で鳴りっぱなしでした(笑)。
2021-07-20 03:06:14
>NAS芹沢さん、
クリアおめでとうございます!さすがです!よくよくNAS芹沢さんのBlogを読み返してみたら、弾が出る点はホストのカーソルより上だったんですね。これだとConsider VRAM Offsetをはずすと正常動作するのと辻褄が合いますね。VMは原点がやや下の方にあると思ってしまっていたので、ホストのマウスカーソルが画面上端よりも下にあるときに(0,0)としていましたが、VMは画面の左上を原点だと思っていたので、ホストのカーソル位置よりも上に弾が出てしまっていたわけですね。
音が鳴りっぱなしになる件は、実機ではごくまれにしか起きなかったことが津軽上では何かのタイミングの加減で毎回起きてしまうというようなことは発生するかもしれないので(デモ画面とかエンディングまでたどりつけるようになったら)何が起きているのか確認してみようと思います。
ご報告ありがとうございました!他にも何か気が付いたことがあったらご報告よろしくお願いします!
2021-07-20 05:08:40
射撃音が鳴りっぱなしになる問題は、PCMのCh.6で起きてますね。鳴りっぱなし状態では、PCMのCh.2,4,6,7が発声状態になっていますが、射撃音を出しているのはCh.6のみのようです。それで、どうもCh.2は4000h~5fffh, Ch.3は6000h~7fffhというように各チャンネルは8KBの領域を管轄として割り当てているようなので、Ch.6はC000h~Dfffhの間から出ないはずなのですが、なぜかE000hのバンクに突入してしまって、本来鳴るはずのない射撃音が鳴ってしまっているようです。Ch.7はというと、射撃音を鳴らすと、波形の末尾でループになるのでリピートすることはありません。
Ch.6のLoop StartはCEFEhなので、どうもWave RAM内で本来はCEFEh~DfffhのどこかにLoop Stop (FFh)が無くてはならないが、存在しないか、あるいは存在するのに我がPCMコードが取りこぼしているかのどちらかのようです。
ゲーム中なぜ射撃音が鳴らないかというと定期的にCh.6に対して発声Off -> パラメータリセット -> 発生Onを繰り返しているため、再生ポインタが毎回C000hにリセットされているのが原因でした。Loop StopがCEFEhなので、多分、音はC000h~CEFEhに入っていて、CEFFhあたりに本来FFhが書いてあるべきだと思うのですが、PCMのバイナリダンプを取るコマンドを追加して引き続き調べてみます。
もうひとつの可能性ですが、多分本来PCM再生中は、再生中のWaveRAMへの書き込みはできないと思うんですが、津軽は書き込みをブロックしてないんですね。なので、実機では不正なデータをWave RAMに書き込もうとしたとき、再生中のためたまたま書き込めなくて助かった、というような可能性もあるかもしれません。だとすると再生中バンクへの書き込みをブロックすることで解決するかもしれません。
2021-07-20 10:00:57
直ったかも。WAVE RAMの初期値を0xFFにする、というのは既に試したと思ったら、TownsPhysicalMemoryとRF5C68の二か所にWaveRAM持ってるし。そして、TownsPhysicalMemoryのWaveRAMは使ってなかった。つまり、PCM実装する前に、とりあえずWave RAMの領域だけ作っておこうと思って作った変数はばっちり忘れてRF5C68クラスに64KB確保してしまったということですね。いやあ、よくあること(^_^;)
それで、本当に使ってる方のWave RAMの初期値を0xFFにしたらCh.6のオーバーランが無くなったようで、銃声が繰り返さなくなったようです。
仮説ですが、実機でもなんらかのWAVファイルを再生した後で、REIPLでOperation Wolfを起動すると銃声リピート現象が起きたかもしれません。NAS芹沢さんが実機でもときどき発生したというのはこの状態だったのではないかと思いますね。ソースは後程PUSHします。
2021-07-20 10:24:53
あ、ひょっとして、これでいつぞやのStreet Fighter 2のノイズ問題も解決したりして。しないかな?
2021-07-20 10:26:57
>>193 山川機長
直ったかも‥?と思ったのですが、念のために調べてみると、
・0xFF初期化を0x00初期化に戻してもノイズが発生しない。
・v20210716でもノイズが発生しない。
ということで、別のタイミングでいつの間にか直ってしまった可能性があります。
現在、バージョンを遡りながら確認中です。今日は帰宅してからずっとスパ2やってますw
2021-07-21 22:34:05
v20201217ではノイズが発生しますが、
v20201229では発生しませんでした。
2021-07-21 23:19:14
連投すみません。
https://github.com/captainys/TOWNSEMU/commit/c88dd62d2fd09e044fd73c88fa0b33322de12ab0
Corrected is-playing check of RF5C68.
このコミットでノイズが発生しなくなったようです。
2021-07-22 01:04:15
テストありがとうございます!既にStreet Fighter 2のノイズ問題は解決していたんですね。ちなみに、格闘ゲームは「Iron Fist」とプレステで「鉄拳」をやった以外の経験が無いので、Muscle BomberとStreet Fighter 2はまったくクリア確認できる気配がありません。というか決定的に記憶力に自信が無いもので、技のレバーとボタンのコンビネーションをぜんぜん覚えられないんですね。
Fate of Atlantisは、とりあえずプレイは可能なレベルでしょうか? 雰囲気的に、マウス座標を直接読まずにマウス移動量を見ているのではないか、という印象ですね。
ここ数週間で結構タイミング問題とか直したので、シャーロックホームズの探偵講座の動画の音が変になる現象も直っていないか?と、思ったのですが、こっちは直ってませんでした。
今からテストを流すので、全部通ったら後程リリースを更新します。
2021-07-22 07:18:09
>>199 WINDYさん
Last Crusadeをv20210721で試してみたところ、上端は吸い付いてズレる、下端は吸い付いて直る、となりました。
Fate of Atlantisとは逆ですが直すことは可能でした。
あと、カーソルが左端まで行かないのは元々の仕様でしょうかね?
2021-07-30 23:49:39
>>200 fuzzballさん
私もv20210721で試しているのですが、下端には吸いつかないです。 何が違うんだろ?
カーソルが左端まで行かないのは実機でも同様です。(今まで気づきませんでした)
2021-07-31 12:34:03
>>201 WINDYさん
うーん、なんでしょうね。
下端というのは、絵が表示されているエリアの下端ではなく画面全体の下端ですが、間違いないでしょうか?
念のためのスクショ https://postimg.cc/bZ7R8BDf
エミュはRelease版のCUIをそのまま使っています。オプションは -KEYBOARD TRANS のみです。
CDから起動しているのでT-OSはV1.1L20です。
この前別件で、v20210716を使っているつもりがv20200716を使っていて悩んでいたことがありましたがw
2021-07-31 14:25:57
> 192 山川機長さん
v20210721でオペレーションウルフをコンティニューしながら4周クリアまでやってみましたが、音声の不具合は出ず快適に遊べました。
(前回ブログで3周クリアと書きましたが、4周クリアの間違いです)
https://nas-serizawa.at.webry.info/202107/article_5.html
前版までの津軽だと、私の環境では音声の不具合は100%出てました。対処ありがとうございます。
これまで不具合が出ていた音声ですが、MENU「MUSIC TEST」のSOUNDを聞く所で確認したところ、28番の音声っぽいです。
v20210716で28番を再生したら、鳴りやまなくなりました。
v20210721だとちゃんと一発だけ音がします。
2021-07-31 16:39:08
>>202 fuzzballさん
判明しました。 GUIで試していたのですが、fuzzballさんのスクショを見たら下側のウィンドウが自分のよりもやや大きい事が気になって、ウィンドウサイズをグラブして下側に大きくするとマウスカーソルが下側に吸いつきました。
2021-08-01 11:08:08
>>204 WINDYさん
原因が分かってスッキリしました。CUIでもちょっとだけウィンドウを小さくするとWINDYさんと同じ症状になりました。
GUIで起動したときのウィンドウがちょっと小さいようですね。下部のステータスエリアの高さが考慮されてないのかも。
2021-08-01 18:50:27
> NAS芹沢さん、
クリア確認ありがとうございます!快適にプレイできたようでよかったです。
> WINDYさん、fuzzballさん、
Indy Jonesは、ひょっとするとマウスの移動範囲指定を使っているのではないか、というか他のゲームでもそれは考慮するべきだったかもという気がしてきています。なお、現在サンフランシスコに旅行に来ていて、今日ピッツバーグに戻るので、戻ったらいろいろ調べてみます。アウトランのBGMをかけながらレンタカーでフリーウェイを走りまくりました。
2021-08-05 01:22:16
>>206 山川機長
FB386でマウス移動範囲のテストをしてみましたが、張り付くような症状も出ず正しく動作しているようですが、どうでしょうか?
https://twitter.com/fuzzball/status/1425302413905334276
2021-08-11 12:47:59
実験していただきありがとうございます!張り付き動作についてですが、僕の仮説では、MOS_rdposの代わりにMOS_motionを使っているのではないか、と見ています。普通のプログラムはマウス座標はマウスBIOSに管理させてますが、多分Indy Jonesはマウス座標を自己管理してMOS_motionで移動量を取ってきて更新しているのではないかと見ています。津軽はVMが思ってる座標と実際のマウス座標の差を計算してマウスの移動量をVMに送っているので、Indy Jonesのプログラムが管理する座標とマウスBIOSが思ってる座標とに差が出ると多分ホストのカーソル位置とIndy Jones上の座標のズレが発生すると思うんですね。ただ、Indy Jonesがマウス座標を自己管理しているとするとマウスBIOSに移動範囲を通知する必要も無いので、通知していないかもしれません。その場合だとマウスの移動範囲がIndy Jonesの移動範囲と一致させるようなオプションを追加する必要が出るかもしれません。というか、それが一番現実的で手っ取り早い気がしてきたので、あとでやってみます!
2021-08-13 00:19:37
ということで、マウス移動範囲をオプションで指定できるようにしたソースをGitHubにPUSHしました。Fate of Atlantisですが、多分、1倍換算で上下40ピクセルを使ってないようなので、
-MOUSERANGE 0 40 639 440
あるいは、この値をGUIのGamePortタブ内で指定すると、多分マウスのずれは発生しなくなるのではないか、と思うのですが。よかったらお試しください。
2021-08-13 12:27:47
>>209 山川機長
テストしてみました。
Fate of Atlantisは、ズレている上に直せないので、以前より状況は悪くなってしまいました。
■Last Crusade
-MOUSERANGE 0 32 639 447 (下部の高さは不明なので、とりあえず上部と同じにしました)
・ゲーム起動前のTownsMENUでも移動範囲が制限されてしまう。(支障はなし)
・ゲーム中は問題なし。
■Fate of Atlantis
-MOUSERANGE 0 40 639 439
・言語選択画面は問題なし。
・ゲーム中はVMのY座標が+40になる。( https://postimg.cc/JDy10P63 ここより上に移動できない )
2021-08-14 23:37:37
テストありがとうございます!
ということは、Last CrusadeはTowns MENUで移動範囲が制限される以外は解決という感じでしょうか。
Fate of Atlantisが問題ですか。-MOUSERANGE 0 0 639 439 だとどうなりますかね? これ自分でテストできるといいんですが、現在持ってないもんで。
2021-08-16 01:05:24
>>211 山川機長
Last Crusadeはひとまず解決ですね。
Fate of Atlantisですが、-MOUSERANGE 0 0 639 439だと、-MOUSERANGE指定無しと同じ動きになりました。
参考になるかどうか分かりませんが、比較動画を撮ってみました。
左が-MOUSERANGE指定無し(もしくは-MOUSERANGE 0 0 639 439)、右が-MOUSERANGE 0 40 639 439です。
2021-08-16 20:56:34
動画リンク貼り忘れw
https://twitter.com/fuzzball/status/1427236938382155786
2021-08-16 20:57:11
うーん、これは、実物見ないとわからんぽいですね。ちょっと実物をゲットするまで少しお待ちください。
とか言ってるうちにアメリカは大学が始まってしまうので、学期中は趣味プロジェクトに裂ける時間が減りますね。先ほど使う教室を見てきたのですが、3蜜を体現したような教室でした(^_^;)モデルナのワクチンを信じるのみですが、気分としては、ECMポッドを搭載して本当にこれでミサイルを回避できるんだろうなあ?と、思いながら敵地上空に突っ込んでいくパイロットの気分です。
2021-08-26 05:24:44
>>214 山川機長
はい、プレイ可能なので個人的には全然問題無いと思います。興味があれば追求してください。
ちなみに私もモデルナ2回打ちました。毎日元気に電車通勤してます!
2021-08-28 00:04:29
>>214 山川機長さん
ご自身のタイミングと興味で構わないと思います。
軽微なうえに回避策も有りますし、オープンソースなので追求する必要が有ると考える方がいらっしゃれば各々で追求できる環境でも有ります。
2021-08-31 09:57:32
最新ソースコード20210920、互換BIOSでの動作確認
・インクレディブルマシーン
HDDへのインストールおよび遊べることを確認。
・シムファーム
HDDへのインストールおよび遊べることを確認。
・宴会王 Vol.2 ~宴会王の逆襲~
少し前のソースでは画面自体乱れて遊べない状態だったが、最近のソースでクエストやミニゲームのスロットなどが遊べることを確認。
クエスト中の映像と音声が同期しない。FREQ33・16・12でテストしたがどれも同じ速度。音声部分はCD-DAで再生している。
・激闘キング2
同人の格闘ゲーム。島国大和氏がかつてVectorや自身のサイトで公開していて、その時ダウンロードしておいたフロッピーイメージからHDDにコピーしてプレイ。
キャラクター島国赤城を使ってCPU戦モードをクリアしエンディングまで進めることを確認。
・Poly Racer
3Dレースゲーム。フリコレ11版は問題なく動作。Vector版(https://www.vector.co.jp/soft/towns/game/se031974.html)は浮動小数点命令を使用しているためFPUを実装していないうんづ・津軽では動作しない。
・ALLTYNEX
フリーソフトの縦スクロールシューティング。http://siterskain.com/artifact/からダウンロード可能。
4面ステージボスが画面奥に引っ込むシーンがあるが、その時画面中央に巨大レーザーを照射しているはずがうんづ・津軽ではグラフィックが描画されず自機を中央に移動したら突然死するような状態になっている。
グラフィックバグを除けば最終ボスまで進めることを確認。
2021-09-25 00:05:55
> ・ALLTYNEX
> 中央に巨大レーザーを照射
これでしょうか https://www.youtube.com/watch?v=qWxyRX8tQn4&t=985s
ぱっと見、上2ラインに描いてスプライトの機能で縦に塗って、
スプライト転送終了後に右上と左上のR部をCPUで抜いているのかな(スプライトで透明色にすることはできないですよね?)と思いますが
それならうんづでは出そうなので他の仕組みでしょうか
2021-09-25 04:41:03
「外部サイトへ移動します」ページに t=985s が消化されるようですが、16:25 からの攻撃を指しています
2021-09-25 04:43:05
動作確認ありがとうございます!ALLTYNEXってフリーだったんですね。この問題はpinさんの修正で解決したのかな?
Poly Racerに関しては、津軽の最終目標はMX相当を作ることとしてスタートしたのでFPU作らないとそこまでたどり着けないんですが、現在FPUの勉強が止まってます(^_^;)
2021-09-28 01:48:23
すみません、動作報告で上げた「宴会王」はCDイメージ化の失敗でした。CD Manipulatorで「正しいギャップ位置取得」にチェック入れて取り直したらピッタリ映像と同期しました。他の箇所も動かした感じでは問題なさそうです。
あとは「おかしなマザーグース」も問題なく遊べることを確認しました。
他に「ザ・マンホール」も動作自体は問題ないのに音声出だしが途切れて再生される感じでこれもCDイメージ化に失敗してると思うのですが、今使っているDVDドライブとの相性のせいかギャップ位置取得しようとするとエラーが出て確認できていません。
2021-09-28 02:37:24
なんと!宴会王はそんなことが起こるんですね!実は「シャーロックホームズ」もそうだったりするのだろうか?
2021-09-28 12:34:55
津軽 20210929リリース版でALLTYNEXを最後までプレイ
https://www.youtube.com/watch?v=y5JZkrMnNKA
作者であるじるるん氏も確認したところ、見た目は完璧とのことです。ただ、FM音源部分があまり鳴らずPCM音源部分が強調されている。
Bad Apple!!も問題ないのですが、エミュレータの裏で何かソフトを立ち上げていると映像と音声が微妙にズレるようですね。やはり、ディスクアクセス関係がまだ怪しいとは思います。
2021-09-30 18:08:59
BCCさん、
ご確認ありがとうございます!今回の修正のCreditはPinさんですね。僕が大体できたからいいや、と放置してあったスプライトをかなり実機に近い再現度にしていただきました。Pinさんもありがとうございました!
PCMとFMですが、デフォルトのボリュームを調整した方がいいですかね。Bad Apple!!もデフォルトボリュームだと音が割れてしまって(一応波形としては振り切ってないと思うのだが)PCMVOL 1024ぐらいにすると割れなくなる気がします。
Bad Apple!!は、ほかのプロセスのCPUの負荷が高いときは、多分2ms以上の遅延が起きてるんだと思うんですね。2msを超えた分の時間負債は踏み倒しているもので、本来この時間内にVSYNCがかかるはずだった場合はじわじわとグラフィックが遅れていきますね。HDDイメージアクセスは別スレッドにしたのでファイル読んでる間もCPUが止まらなくなった分遅延は少なくなっていると思うのですが。劇的にCPUエミュレーションを高速化できたりするといいんですけどね。
fuzzballさん、
やっぱりそうですよね。QuickTimeムービーのような。ホームズはどこから調べていいものか。
2021-10-01 02:17:57
山川機長さん
FMとPCM共にデフォルトボリュームだと割れ気味なので3~4分の1まで下げても良さそうですが、ボリューム割れ以外にYoutubeに上がっているALLTYNEXのOSTと聞き比べてみると鳴っていないパートがあるようです。
2021-10-01 02:29:08
PCMVOL 1024にすると今度はサムライスピリッツなどでCD-DA音が大きすぎて効果音が殆ど聞こえませんでした。電子ボリュームでDA音の音量調整がされているんでしょうか?
なお、オープニングでwikiで報告されているSNK・花びらが残るというバグは直っているようです。
あと、Vectorで公開されているRUMSTORMが起動しないようです。
DL元:https://www.vector.co.jp/soft/towns/game/se107916.html
rs_main.lzhとrs_sound.lzhの両方を同じフォルダに解凍してRUMSTORM.EXPを実行。「うんづ」では問題なく立ち上がるが、「津軽」だと起動時のBOOTING THE SYSTEMと表示される画面で止まる。
-DEBUGを津軽に入れて立ち上げると以下のメッセージが表示されます。
VM Aborted!
Device:486DX
Reason:Unhandled exception! GP(0x00000000)
Debugger Enabled.
Towns TIME (Nano-Seconds): 31616228030
CS:EIP=000C:000190C5 LINEAR:0042A0C5 EFLAGS=00000206 CPL=00
EAX=00001700 EBX=00018A50 ECX=000000C5 EDX=00018AC0
ESI=000002F2 EDI=000002CE EBP=000EF998 ESP=000190C4
CS=000C(LIN:00411000) DS=0014(LIN:00411000) ES=0014(LIN:00411000)
FS=0014(LIN:00411000) GS=0014(LIN:00411000) SS=0014(LIN:00411000)
CR0=80000021 CR1=00000000 CR2=00000000 CR3=00071000
CF0 PF1 AF0 ZF0 SF0 TF0 IF1 DF0 OF0 IOPL00 NT0 RF0 VM0 AC0
Default Operand Size=32 Default Address Size=32 Stack Address Size=32
!EXCEPTION!
SS+00000000:C5 00 00 00 C5 00 00 00 C5 00 00 00 C5 00 00 00
SS+00000010:C5 00 00 00 C5 00 00 00 C5 00 00 00 C5 00 00 00
000C:000190C5 0000 ADD [EAX],AL
あと、動作報告と外れますがTsugaru_GUI.exeで「CPU Frequency」のメニューで33MHzだけ選択できていないようです。
FsGuiMainCanvas::VM_33MHzクラスで
SendVMCommand("FREQ 33\n");
と記載しないといけないところが
subproc.Send("FREQ 33\n");
となっているようです。
2021-10-03 02:16:11
ALLTYNEXの話が出たときにRUMUDERとセットでDLしてみていたのですが
RUMSTORMはror命令の修正(#36)により、次のリリースで直ると思います。
2021-10-03 20:46:39
pinさん
ありがとうございます。
2021-10-03 22:21:58
pinさん、ROL,ROR命令の修正ありがとうございました!
BCCさん、GUIの33MHzの件、見つけていただきありがとうございます!次のバージョンで修正します。CDDAのElectric Volumeは、一応対応したのですが、まず再生を開始してから変更した場合に対応してないんですね。そのうち対応しますんで。
なお、一念発起してFPUを実装してます。なんとなくわかってきたような気がします。Intel公式らしいにも関わらず誤植の多い80486 Programmer's Reference Manualを元にやってたら、FDIVとFDIVRの記述が間違ってて、一晩悩みましたが(最初から今のIntel公式ドキュメントを見ればよかった)、とりあえず基本的な演算ができて、printf("%lf\n",d);みたいなのがとりあえず出るようになりました。まだ例外処理とかまったく対応してないですが。書いてて驚いたんですが、FPUってこんなに速いんですね。いくら速いと言っても整数演算よりは5~10倍ぐらいはかかるもんかと思ってたら、そんなに変わらないクロック数で結構びっくりでした。486でこれだから、今のCPUだともっと整数演算との差が小さくなってるかもしれないですね。今の最新のソースだとena fpuコマンドで有効化できますが、当面デフォルトオフで必要に応じてオプションかコマンドで有効化できるようにしようと思ってます。
2021-10-07 08:51:04
ギャラクシーフォース2
20210721版では問題ないようですが、20210929版でスプライトが表示されない・点滅するといった不具合があるようです。FREQを66以上にすると改善される。
2021-10-07 12:26:19
おおなるほど。FREQ 66で改善するのは多分偶然ですね。確認してみます。これは、ひょっとするとShadow of the Beastのチラつきと同じ問題かな。
2021-10-07 22:26:19
BCCさん
スプライトを書き込み中の方のページを画面クリア後に表示してしまっている可能性がありますね…
CRTC の FA1 や、スプライトコントローラの SPEN, DP1 が変更されている気配はありますか?
- 最後に 440h に出力した値が 21(15h) の状態で 442h, 443h に出力する16ビットの値が FA1
- 最後に 450h に出力した値が 1 の状態で 452h に出力する8ビットの値の最上位ビットが SPEN
- 最後に 450h に出力した値が 6 の状態で 452h に出力する8ビットの値の最上位ビットが DP1
(-DEBUG 付きで起動して ena iomon 440 452 で見られます)
2021-10-07 22:27:02
commit f3c41e01での動作確認
・RUMSTORM
ROR・ROLの修正コードで起動するようになっている。2面ボスでゲームオーバーとなりましたが、そこまでは問題なく動いていることを確認。
・ギャラクシーフォース2・ジェノサイドスクウェアの2で1-3及び2-3
20210929から発生していたスプライトのチラつきが解決
・Poly Racer
FPU有効で起動及びプレイ可能
・POWER DRIVE
DL先:http://kaodashi.life.coocan.jp/download.htm
F-ZEROっぽい3Dレースゲーム。FPU・メモリ16MB(-MEMSIZE 16)以上必須
ビギナー・スタンダードともに4周完走。自機は三角形なのが正解だと思いますが、スタンダードコースで雷が光るようにゲージ欄や自機がライティングされるのは仕様?
・画像処理の鉄人達(フリコレ11収録・FPU使用のTETUJINF.EXG)
一通りフィルタを適用してみましたが、動作はしている模様。
EASTRAY・画像処理の鉄人達 通常の386版でFPUを有効にしたまま起動するとFCOM(m32real)でエラーが出て停止するようです。
他にフリコレやネットに上がっているFPU対応ソフトが探せていませんが、あと市販ソフトでFPU使っているソフトって
・ぱらPARAパラダイス
・TEO~もう一つの地球~
・エルフィッシュ
くらいですかね?
雑談スレッドで書かれていましたが、Strike Commanderの推奨環境が486DXとDXがついているのは66MHz駆動の486が当時DX版にしかなかったからだと思います。
SXで66MHz(倍率2倍)が出たのは調べたら486DX4発売後の様で、TOWNSはもちろんPC98でも採用例がないようです。
2021-10-16 22:39:35
早速ありがとうございます!FCOM(m32real)は確認して対応します。High-Cをメインで使っていた当時、HCE.LIBをリンクしても、FPUを搭載していたらFPUを使うが、各インストラクションの前にフラグのチェックが入るのでHCC.LIBより微妙に遅い、という話を聞いていたので本当かな?と思っていたのですが、そういうことなのかもしれないですね。
POWER DRIVEで白く光るのは、ひょっとすると何かの計算で64bitで値が振り切れるような場合が出ているかもしれないですね。。。。。あ、ありうるのはSpecular Reflectionの計算で1点が無限大になってしまって、あとは足しても引いても無限大になるからその白を含むプリミティブ内の補間が全部真っ白になる、という状況ですね。
ちなみに、486DX推奨というのはそういうことだったんですね。雑談の方にも書いた通りで、僕はひょっとするとFPUがあったらFPU使うように書いてあるのかも、と思っていました。ありがとうございます!
2021-10-16 23:41:33
FCOM m32realは処理を選ばないと出ないようですね。EASTRAYのどの例題を使ったか教えていただけますか?一応、FCOMはFCOMPからPopをはずすだけなので、多分対応しました。先ほどソースをPUSHしました。ついでに、FNOPも完全対応しました!完全対応とか言ってるとopCodeを間違ってたりして実は対応してなかったりするんだよな。なお、ついでに、FPU有効にした状態で386番EASTRAYのレンダリングを開始して、途中で DIS FPU としてFPUを切ってやるとFPU命令で止まるので、HCE.LIBもFPU積んでたらFPU使うというのは事実であると確認できました。
しかし、テストのためにEASTRAYの例題を何度も流してますが、僕は最近のリアルなグラフィックはすごいと思いますが、EASTRAYが出してくるみたいなグラフィックも味があっていいと思いますね。リアルなグラフィックが見たかったら自家用操縦士免許を取ればいいじゃない(マリーアントワネット語録)と、そこらじゅうで言って回ってるので、ここの掲示板でも前に言ったっけか。本当なユニットテストにEASTRAYを組み込めたらいいんだけど、絵が正しいかどうかのチェックを入れるのはちょっと大変かな。
2021-10-17 00:18:12
最初にテストした時と同様RAYTRACE.RAYをSUPPORT.EXPから開いて「ツール」→「レイトレーシング」、MGS設定を詳細に切り替えて実行するとボクセル分割の前処理のプロセスで発生しました。
同じ手順を踏んでも再現できない場合は、もしかしたら山川機長さんのEASTRAYと自分のEASTRAYの違うバージョンという理由があるかもしれません。
なお、PUSHされたソースではFPUを有効にしたまま386版を実行しても問題なく動くようになったので解決されたようです。
2021-10-17 00:38:26
了解しました!確認ありがとうございます!Power Driveこちらでもやってみました。空が稲妻みたいに光というのはこういう意味だったんですね。なんとなく輝度が徐々に上がって下がってしているようなので、これはビジュアルエフェクトっぽいような気がしますね。
2021-10-17 03:16:54
・エルフィッシュ(浮動小数点演算使用)
FPUを有効にしたまま起動するとFPU有効版(ELFISH_C.EXP)が実行される。
FPU無効版(ELFISH_E.EXP)に比べて新たな魚を作成する際のCG画像レンダリング(メインメニュー魚アイコン→レンダリング)が高速になる。
現時点での最新版ソースでFPU版が問題なく動作。ただし、画面切り替わり時にホストPC側とTOWNS側のマウスカーソルの位置がずれる。
あと自分の環境だけなのかもしれませんが、TownsOS付属のEUPプレイヤー(V2.1 L20)でCPU 33MHz以上の際に音楽の再生が異常に遅くなる現象が発生しているようです。
2021-10-22 20:51:33
ご確認ありがとうございます!マウスカーソルのずれは、一時的なものでしょうか?それとも、一度ずれたらずっとずれたままでしょうか?
音楽再生が遅くなる現象ですが、タイミングの取り方を変えてから発生するようになってます。それ以前だと、VMの実行速度が実時間より遅れるとその分次のサイクルでVMを仮想的に時間がかかったことにして追いつかせるという対応だったので、ある意味遅れたときは自動的にクロックを下げる感じでした。が、この方法は正しい方法ではなかったので、方式を変えたのですが、新しい方式だとVMの遅れが積算してしまうので、債務が無限に膨らむのを防止するためにVMが2ms以上遅れ始めると、あきらめて2ms以上の分を切り捨てることにしています。このためVMのCPUクロックが高すぎて実時間においつけない場合、townsTimeを元に出している割込みがすべて遅れ始めるという現象が起きます。
しかし、BGMが遅れるのもいまいちですね。速度調節機能だけ復活させることは不可能ではないので、復活させようかな。
ちなみに、津軽のCPUですが、FPU命令とかIDIV, IMULのように大技を連発してくれると余裕で着いていくのですが、IN AL,DX TEST AL,80H JNE IOWAITLOOP みたいなクロック消費の小さい命令が連続すると途端についていけなくなるという問題がずっと前から発生してます。何かうまい方法が無いかと模索しているのですが、ある程度のパターンを検出するような処理を加えるとヒットしない場合のオーバーヘッドになり、マルチスレッド化とかしたいけど、今度はシンクロナイズにかえって時間がかかり、ということでうまい打開策を見つけることができずにいます。
2021-10-22 22:28:30
ウィンドウ端にマウスカーソルを持っていくとそこでカーソルが止まるので左右端に動かすことでホスト側と仮想側の位置を合わせられるようになっていますが、画面が切り替わるところで毎回ずれるようになっています。
2021-10-23 01:04:10
なるほど、多分ELFISHはMOS_rdposじゃなくてMOS_motionを使って位置を計算している可能性が高いですね。ひとつの解決としてはUNZ方式を使うオプションを追加するという手がありますが、マウスカーソル位置を強制的にセットするのはちょっと気が引けるんですね。あまりエレガントではないですが、何かキーを押すと仮想的にマウスを画面の上下左右端に移動したことにするという手はありますが。あ、画像処理でマウスカーソルがある位置を特定して、それを元にマウスカーソル位置を合わせさせるとか。(絶対VMが着いてこないのとカーソルが画面右下にあるとカーソルが見えない)
ところで、なぜかうちのPCだとTowns OS V1.1 L10のTowns MENUの実行中はFREQ 66でもぜんぜんVMが着いてこれるのに、Towns OS V2.1 L20だととてもついてこれないという現象が起きていて何故なのか?と、思っていたのですが、ふと思いついて、CPU時間1msの間に何ステップのインストラクションを実行しているのかカウントしてみました。興味深いことにTowns OS V1.1 L10のTowns MENU実行中は大雑把に9600ステップだったのに対して、V2.1 L31のTowns MENU実行中は大体16000ステップ実行していました。どうやら、新しいバージョンのTowns MENUは、より所要クロック数が少ないインストラクションを使うように最適化ができていたということなんですね。VM的には同じ時間内により多くインストラクションを実行しなくてはならなくなってきつい、ということだったようです。
地道な最適化しかなさそうです。前からひっかかっているのは、メモリアクセスにvirtual functionを使っているのですが、C++でvirtualを使うと、RTTIからFunction Pointerを取ってくるので、RTTIを見る段階が余計にかかるので、使用頻度を考えるとPlainなCスタイルのFunction Pointerを使った方がいいのかな、と、思っているのですが、結構大工事になるので、そのうちやってみます。
2021-10-26 02:11:17
大航海時代の話だからこっちに書こう。どうも大航海時代の実行で、津軽のエミュレーションに問題があるのは間違いなさそうな感じですね。海賊が出ないだけだったら、途中で国王からスペイン艦隊を倒す命が下るので良かったのですが、途中からクラッシュするようになり、解析したところ、どうやらパスファインディング関数の中で、ゴールがマップ範囲外になってしまう影響で無限再帰になってスタックオーバーフローで落ちていたようです。多分CPUコアの問題だと思うので、CPUコアのエミュレーションの問題を修正するいい機会だと思って追求してます。
クラッシュするときは、必ず何かのオブジェクトの経度が47h, 緯度がF5hになってしまうらしく、それは、別のテーブルからコピーされてくる値であるというところまで確認したので、そのコピー元テーブルに47h, F5hが書き込まれるタイミングを捕まえるのが次ですね。パスファインディングには解像度縮小版の世界地図を使うようなのですが、経度方向に48h、緯度方向に24hの大きさなので、F5hというのは経度がオーバーフローしてるんですね。しかも、緯度がぎりぎりなもんだから、アドレス計算すると地図の範囲外になってしまうという。久しぶりに難しい問題に直面してました。
この 47h, F5h というのが本来間違っていて、またこのゲームでパスファインディングが必要なものと言ったらNon-Player艦隊だろうと思うので、これを直すと海賊が出なくなる問題も直るのではないか、と、希望を持ってるのですが。なお、この座標はセーブデータに書かれているので、既に変になった状態でセーブすると、復活できないみたいなので、実機にディスクイメージを書き戻してやっても海賊が出なかった理由も説明がつくんですね。
ただ、中古で買ったFDのデータを試しに読み込んでみたら、緯度が2Ahになってるのがあって、実機でやってもオーバーフローしてんじゃん!と、ちょっと不安になってますが。
2022-01-08 15:08:30
問題の原因はポインタの破壊にあるところまで突き止めたものの、このMOV BYTE PTR [EAX+04],04H に続けて LEA EDI,[EAX+0Bh] MOV [EAX+7],EDI が無いと海戦で負けた艦隊が空いた隙間に新しい艦隊を作るものの、そのときNULLにしたポインタがNULLになったまんまな気がする。
000C:00038D08 E8ABD5FEFF CALL 000262B8 {GCKANTAI ?Func returns pointer to a structure fro DS:02F4H, 53 bytes per unit.()}
000C:00038D0D C6400404 MOV BYTE PTR [EAX+04H],04H
000C:00038D11 C7461100000000 MOV DWORD PTR [ESI+11H],00000000H
000C:00038D18 81661500800000 AND DWORD PTR [ESI+15H],00008000H
000C:00038D1F 83C434 ADD ESP,34H
000C:00038D22 5F POP EDI
000C:00038D23 5E POP ESI
000C:00038D24 5B POP EBX
000C:00038D25 C9 LEAVE
000C:00038D26 C3 RET
これ、ポインタが破壊しているとNULLから始まって2FEh までの範囲内に収まるのですが、セーブデータは同じオフセットにデータがあるという前提でポインタまでfread/fwriteしちゃってるので、セーブデータにポインタがそのまま書かれているのですが、実機でプレイしていたと思われるセーブデータにも同じ破壊が見られるんですよね。これ、隠れてたバグが顕在化したのかなあ。海賊が出なかった原因もわかったし、どういう理屈で壊れてるのかもわかったけど、なんか釈然としないなあ。頑張って実機で一隻艦隊を破るとこまでプレイして、その後セーブデータを見るとかやってみるかなあ。どんどん冬休みが終わっていく。。。。
副産物で、津軽に.EXPフィアルのシンボルテーブルを読み込んで、逆アセンブル時に見えるようになるという機能がつきました。
2022-01-09 11:52:08
うん。やっぱりこれ、大航海時代のバグみたいです。いくらなんでも、ヤフオクで落としたディスクのセーブデータが、津軽を使ってプレイしたデータを書き戻したものであるはずがなく、ポインタが破壊されているのは99%間違いない自信があるので。うーん、このバグだと何度か海戦に勝った後プレイ不能になったと思うけどなあ。なお、パッチは成功して、ポインタをNULLにしてるところを、代わりにコースのゴールに到達したことにするFFhを書き込むという方法で、とりあえずポインタの破壊は防止できるようになりました。
(修正前)
000C:000488E2 C7470700000000 MOV DWORD PTR [EDI+07H],00000000H
(修正後)
000C:000488E2 8B7F07 MOV EDI,[EDI+07H]
000C:000488E5 C607FF MOV BYTE PTR [EDI],FFH
000C:000488E8 90 NOP
さすがにこれは津軽のCPUコアの問題かと思ったのですが、ポインタが破壊されてることは99%(何事も100%とは言えない)自信があって、はっきりNULLにするインストラクションは間違いようがなく、その後セットする処理がまったく見当たらない上に、実機でも起きているようなので、この件は大航海時代のバグってことで納得しておくことにしようと思います。津軽にアプリケーション対応オプションを追加して津軽からこのパッチを当てるようにしようと思います。TOWNS版はクリアできないとか話にならなかったのだろうか。もっとも最初から存在する艦隊は次々に撃破できるから、片っ端からポルトガル以外の商船や艦隊を撃破したら(ひどい)クリアできたのかな。
2022-01-09 13:17:59
「大航海時代」クリア確認しました!互換ROMで最後まで行けます!このゲーム、もうひとつバグがあって、ある条件で、0~13hの間のランダムなイベントを起こそうとしているらしい(関数名がIBENTO_MAIN)のですが、既に発生したイベントや、その時点で発生してはならないイベントがあるらしく、該当するイベントが無い状態が発生して、その状態でイベントを出そうとすると該当イベントを探し続けて無限ループに陥るようです。これをパッチ当てるのは大変そうなのですが、津軽がこれを検出して無限ループを回避させてしまうことができるかどうか。
この問題は、セーブデータから再開して、違うオプションを選んだりすることで回避できるようです。津軽の-APP DAIKOUKAI 無しで起動した場合は、多分艦隊がだんだん減っていき寂しい海になりそうなのですが、このオプションをつけて起動すると次々に海賊やスペイン艦隊が発生するようで、最後の方は海賊とスペイン海軍の両方からにらまれて大変でした。次にプレイするときはスペインの都市は取らないことにしよう。
ひょっとすると、IBENTO_MAINのバグは、パッチをあてたバグによって回避されてしまっていたのかもしれません。ただ、パッチを当てた方のバグは、運が悪いとセーブデータから再開しても時間の問題でクラッシュしてゲーム続行不能になってしまうというものだったので、これはパッチ当てた方が良いように思いますね。
2022-01-11 13:45:51
遅れましたがあけましておめでとうございます。
F-BASIC386でFPUを有効にするとFISTP(m32int)で止まるコードがあるようです。
2022-01-12 19:55:33
おおなるほど!FISTP(m32int)は多分まだ実装してないやつですね。どのコマンドかわかりますか?
試しにFB386 V2.1L10で
A%=10
B!=A%
としてみたのですが、ヒットしなかったですね。
2022-01-13 01:38:32
自分が確認した限りではフリコレ10収録の「G-ENFORCER HighPower Edition」(\T_OS\GAME\G_ENF)のBASICソースをF-BASIC386 V2.1 L20(U001アップデート適用)で実行時、及び付属のコンパイル済みEXPファイルの両方で作者名が表示されて文字の色合いが変化する場面でエラーを吐き出します。
正確に確認していませんが、おそらくこの辺りかと思っています。
170 FOR I=0 TO 200
180 WAIT 1
190 IF PTRIG(1)<>0 THEN I=200
200 G=(((I-100)/100)^2)*255
210 R=(1-(I/200)^2)*255
220 B=255
230 PALETTE 1,[G,R,B],1
240 NEXT
あと、動作報告とは関係ないですが、某所でライザンバーの0.5ドットスクロールの話が出たのですが具体的にどうやっているんでしょうか?
このG-ENFORCERの参考記述に「Oh! FM TOWNS 91年1月号 君にもできる「0.5ドットスクロール」!」っていうのがあるのでこの記事か、ライザンバーをエミュレータで動かしてCRTCのレジスタを見ればわかるのでしょうけど、あいにくどちらも持っていないので。
2022-01-13 16:26:30
>249 BCCさん
・ライザンバーの0.5ドットスクロールとは、320x240の画面モードは通常X/Y共に2倍の拡大にて表示されており、CRTのドットとしては2ドットの大きさが有る。
・スクロールは画面の倍率とは関係なく1ドット毎に行える。
の関係から、単純に2倍の拡大表示画面で1ドットスクロールを行う事ではなかったのではと思います(間違っていたらごめんなさい)
2022-01-14 09:01:18
>WINDYさん
上のコメントを書いた後にOh!FM TOWNSの該当記事の断片が上がったので自分なりに解釈すると、
・CRTCのレジスタFA0,FA1やTBIOSでのVRAMの表示位置指定では65536(16ビット)通りしかなく、画面画素数よりも少なくて最小でも2ドット単位でしかスクロール位置を指定できない。
・が、HAJ0,HAJ1でドットクロックを微調整出来てレジスタの値を増減させると、ハイスキャン時0.5ドット、ロースキャン時0.25ドット、インターレース時0.2ドット分ズレて表示されるので1ドット、更に少なくすれば0.2~0.5も行える。
という原理のようでした。
ランザイバーじゃないけど、横1ドット単位でスクロールできているタイトルを見ればある程度分かるのか。
2022-01-14 11:11:13
最新版のソースで、-APP DAIKOUKAI とすると、問題の無限再帰バグにパッチを当てて、さらにBusy WaitでなくI/O 6Chでタイミングを取るようにして、ダイアログ位置を書いてある箇所を特定したので、なんでもすべてマウスで操作しなくてはならない(特にYes/Noのためにいちいちクリックするとか方向の変更と数字入力が苦痛)問題を津軽のイベントログ機能を使ってショートカットキーで操作できるようにして、二日がかりでもう一度最初から最後まで通してプレイできることを確認しました!もしも、あまりの操作性の悪さに当時挫折した人(の中で最近の復刻版をプレイしてない人)には快適にプレイしていただけると思います!当時心残りだったゲームがもう一本クリアできてよかったです。
まだもうひとつの無限ループに陥ったパターンのパッチは難しく、それは直せないのですが、ただ、これは宝探しの依頼が来た時、まだ仲間になっていない登場人物合計3人を経由する必要があり、その3人を探そうとするものの見つからなくて永遠に探し続けているようです。ただ、二度目の通しプレイではこの無限ループにはヒットしませんでした。最初に通しプレイしたときは、イスパニアの同盟港をどんどん取ってしまって、イスパニア艦隊から付け狙われて、仕方なく撃破していた関係で生存してる人が足りなくなったのかもしれません。そう思ったので2度目の通しプレイは他国の同盟港は手を出さず、海戦は海賊に限ってプレイしました。
ただ、最後に王女様を救出した時点のグラフィックが崩れるんですね。いまだに本来どういう絵だったのかわかりません。それと、最後の決戦後、いったんセーブしてリセットしてロードしないと国王に謁見した時点で先に進まなくなるとか。さきほど実機MXでも試したらやっぱり崩れるんですね。誰か最後までプレイテストしたのだろうかと心配になってしまいました。当時だとプレイテストの方法論とか今に比べてまったくできていなかったので、効果的にバグ出しできなかったのかもしれないですね。
2022-01-16 08:52:28
FISTP対応しました!今テストを流してるので、全部通ったらアップロードします!
G ENFORCERって、木村君の作品じゃないですか!多分青森県立弘前高校の後輩の木村君と同一人物だと思うんですが。彼は元気にしてるかな。
2022-01-18 05:52:50
大航海時代のバグ問題の対処の程有り難うございます、お疲れさまでした。
しかし、これってどういう経緯で入り込んだのでしょうね、元はPC98でリリースされた商品ですし恐らくはC言語で組まれているのでしょうが機種依存部分を除く部分は共通のソースを使用すると思うのですが、PC98版ではそのような事象はWEBを見る限りは無さそうですのでTOWNS版のみのバグのような気もします。
確かにグラフィックの崩れる問題は機種依存部分に近い領域ですのでバグが混入するリスクは高いわけですが、恐らくは共通部分である進行やイベント部分に関してはTOWNS版で新たに追加された要素でも無い限りこの様なバグが入り込む余地が無いような気がしないでも有りません。
何はともあれパッチ当てで全てでは有りませんが重要な不具合を回避できることは有り難いことです。
2022-01-21 09:07:35
大航海時代は逆アセンブルを見たところ明らかにHigh-Cでコンパイルされたようだったので、他機種用で同じバグが出ていないかという点は僕も考えたのですが、TOWNS用にせっかくだから何か改良を加えようと思ってしくじったんですかね。なお、ここに書いた後で結局グラフィックが崩れるバグ、最終決戦後リセットが必要になるバグの原因も究明してパッチが書けてしまいました。別の友達に、演出もBGMもプロットも優れた傑作で、すごく楽しかったけど、プログラミングが学生さんが書いたみたいなレベルだったんだよね、と、話したら、当時は学生のアルバイトがたくさんゲーム書いてたから本当に学生が書いたんじゃない?と言われて、なるほどと思いました。
実は冬休みに2本レトロゲームをプレイしようと思ったので、12月中はFM77AV用「夢幻戦士Valis」をやってたんですが、こっちもマップを抜き出すぐらいにしておこうと思ったのに、結局一大解析作戦になってしまって、結局開発した人に聞くわけにもいかないので真相はわからないのですが実機で実験した結果も踏まえてFM77AV用ValisのAct 6はクリア不能、よってAct 5でワープを使ってAct 6を飛ばす以外にクリアできないという結論になりました。興味がありましたら、http://ysflight.com/FM/Valis/j.html に上げたので御覧ください。
次は夏休みかなあ。当時プレイしてなくて心残りになってるゲームはあるものの、あんまり長くかかりそうなやつは手が出せないんですよね。またWizardry 1,2をやってみたいけど、それを始めたらえらいことになるから老後の楽しみにしようと思ってます。
2022-01-22 02:46:57
はじめまして。
大航海時代は起動FDにEXPファイルが入っていてそこから起動したように思ったのですが、確認しようとしたところFDにカビが生えていました。
クリアしたことがないのでそれが修正版だったかはわかりません。
付属FDが無くても津軽のパッチでクリアできそうなので安心しました。
むしろ大航海時代の記事が凄くて殆ど理解できないながらも興奮気味です。
ありがとうございます。
2022-01-22 15:53:24
aochanさん、
KOEIのゲームはそのパターンが多いみたいですね。KOEI.COMがFD上にEXPがあったらそっちを、無かったらCDのEXPを読み込むように作っているようです。そして、FD上のEXPはバグ修正版であることが多いようです。どのタイトルだったか忘れたのですがFDを入れずに起動すると必ずクラッシュするので調べたらそのようなつくりになっていたものがありました。信長覇王伝だったかな?(うろおぼえ)ただ、大航海時代のFDはデータファイルで半分以上埋まっているのでおそらくFD上にEXPファイルを置く余裕は無かったと思います。
それで、FDにカビとのことですが、100%アイロプロピルアルコールでクリーニングして、もしもNEWGAME.DATだけ復活できればなんとかなるかもしれません。TIZU.DATという640000バイトのファイルが一本入っているのですが用途不明です。綺麗に640000バイトなので、多分無圧縮だと思うので、同じサイズのデータファイルを置けばなんとかなるような気がします。解明した航路図を張って行く前の世界地図のデータではないかと見ているのですが。FDのNEWGAME.DATというファイルがマップデータなど重要なデータファイルとなっているので、このファイルが無いとプレイは不可能と思います。
大航海時代はかなりハマる傑作なので是非再度プレイしてください!
2022-01-23 00:45:28
なるほど、付属FDはゲームプレーに必須でしたか。
カビ取り作業を行いイメージ化のためFDを読み込ませたのですが、半分程度のところで止まり、FDにキズが付いてしまいました。
カビの大きい箇所が2つありましたので達人級でないと復旧は難しかったかもしれませんね。
中に入っているファイル名だけは分かりました。
SAVE.DAT 61,756 #2
TIZU.DAT 640,000 #63
NEWGAME.DAT 70,677 #688
MAIN.EXP 376,570 #758
#は開始クラスタ
MAIN.EXPが修正版かもですが真相は闇の中へ・・・
もう一度洗浄してキズのついた部分以降が読み出せればNEWGAME.DATを取り出せそうな気がしますが、もう少し検討してからチャレンジしてみます。
コーエーテクモゲームスがFDイメージ販売サービスをしてくれたら嬉しいのですけどねぇ。
2022-01-23 17:52:07
おおなんと!FDにmain.expが入っているバージョンがあるとは!こちらのCDに入っているMAIN.EXPは376572バイトなのでサイズが2バイト違いますね。ただ、ゲームをプレイしようと思ったら、MAIN.EXP以外の3本のファイルだけあれば十分のはずです。ディスクにコピープロテクトはかかっていないので、空のディスクイメージを作って、その3本のファイルをディスクイメージに持っていければ大丈夫と思います。
しかし、カビが大きかったということはMAIN.EXPは無事では無さそうですね。惜しい。しかし、とくに最後の艦隊戦後のグラフィックは通してプレイしたなら見ればわかるレベルなので、さすがに直してそうですね。
2022-01-24 01:41:33
大航海時代の起動まで到達できましたのでご報告いたします。
うんづ用TOOLSに含まれているFDイメージ化ツール(FDIMGL.EXG)で、エラーセクタをリトライさせずに最後まで読み込ませてみました。
ディスクキズで壊れたのはTIZU.DATのみのようで、セビリアで砂糖を売ってロンドンまで行けました。
TIZU.DATの破損による影響がどう出るか気になるところです。
FDIMGLを使おうと準備をしていたら実機のCDドライブが壊れていてシステムソフトウェアV2.1L31の起動ができず、YSSCSICDでなんとかTMENUを拝むことが出来ました。
FDからの起動ながらも、まさか外付けCDドライブにシステムソフトウェアをセットしてTMENUを拝める日が来ようとは。
CDドライブ不動でガッカリしたものの、これはとても嬉しかったです。
2022-01-30 23:58:06
YSSCSICD、お役に立ったようで良かったです!CX以降(386SX機を除く)でしたら、SCSI CD-ROM Driveからの直接起動 (http://ysflight.in.coocan.jp/FM/towns/bootloader/j.html) もできると思いますのでよかったらお試しください!
TIZU.DATは、航海中の「情報」→「航海図」のビットマップなのではないかと思ってるのですが、そのビットマップ崩れてないですかね?きれいに640000バイトだから、多分無圧縮だと思うんですよね。
なお、こちらでは昨日、「宴会王」と「宴会王の逆襲」を試していて「逆襲」の方が起動しなくて、今度こそ未知のCPUコアのエラーか!?と、思ったら、mallocが返してきたリニアアドレスを見て、ふと、メモリ大きすぎるんだったりして、と思って-MEMSIZEを8にして起動したら無事起動しました。
2022-01-31 09:42:18
気になったのでTIZU.DATをもう少し調べてみたのですが、どうもセーブデータの一部のようです。セーブデータには別のファイルがあるのですが、TIZU.DATにも書き込んだ後があり日付が更新されている点、ゲーム再開時に特定の位置にSEEKして1F400hバイトを読みこんでいる点、1F400hバイト×5か所のセーブポイントで640000バイトになる点などから、多分間違いないと思います。なので、破損ファイルがTIZU.DATだったのであれば、セーブしたときに破損個所は上書きされてしまうと思います。ですので、おそらく大丈夫でしょう!
2022-01-31 13:44:06
ありがとうございます。
破損しているのはTIZU.DATのセーブ4番(5DC00h~7CFFFh)内の4セクタ分ぽかったので、4番に上書き保存したところ何事もなく置き換わりました。
このまま行けそうな感じです。
搭載メモリが多いと起動できないゲームは、シグノシスの物にありがちでしたね。
シャドーオブザビースト2だと他より少ない6MBまでだった気がします。
ブートローダーの方はCD-Rディスクが無かったのでFDIMAGE.BINで試しました。
システムソフトウェアV2.1L31で作った起動ディスクよりずっと速いですね。
CDのシステムソフトウェアがすぐに立ち上がりました。
こんな方法があったのですね。ビックリしました。
このFD版ブートローダーでゲームを何本かチェックしたところ、プレーできたのは
アルシャーク、ザ マンホール、シムシティ2000の3本で
サーク2、プリンスオブペルシャの2本は画面が真っ暗なまま反応なし
スカベンジャー4はCD読み込み中にリセットがかかります。
パラメデスはシステムソフトウェアV1.1のロゴが表示された後、起動中の1枚絵が表示されて止まりました。
2022-02-01 20:41:24
IPLのテスト結果ありがとうございます!結構TOWNSのゲームの中にはCD-ROM I/Oを直接攻撃しているものが多くあって、YSSCSICD.SYS(IPLも起動中にこっそりYSSCSICD.SYSを入れ込む)はBIOSのリダイレクションなのでBIOS使ってないと走らないという問題があります。スカベンジャー4とかFractal Engineを使ったやつはI/Oを直接攻撃しまくりで内蔵CD-ROMの割り込みを前提に作っているのでパッチを書くのは相当大変そうです。Oh!FM TOWNSの記事で実はFractal Engine Demoにはハードディスクにインストールする評価版というのが存在したという記事がありましたが、そういうの作れるといいんですけどね。最近意外なことにMs.Detective #1がDAPS再生中に普通にCD-ROM BIOSを使ってディスクを読んでいることがわかったので、案外動いたりして?と、思って試しましたがだめでしたね。これは原因を調べてみたいと思ってます。
そういうゲームはパッチを当ててI/Oを使ってる部分をBIOS使うように置き換えると起動するようになる場合があります。実は津軽を作り始めたモチベーションのひとつが、パッチを作るために強力なデバッガが欲しいというものだったんですが、気が付けばパッチ作りは止まってます(^_^;)最近、見もしないビデオを保存しておくのは無駄だから捨ててしまおう、という意見を見ますが、それは録画の意味を間違っていて、あれは見るためではなく、見ようと思えばいつでも見れるという安心感のために保存しているのだ、と、僕は思ってるのですが (アカウントが消えたら見えなくなるストリーミングサービスは安心感にカウントされない) 津軽があるからパッチ作ろうと思えばいつでも作れるや、という安心感は得たものの、いつでもできると思うと後にしてしまうという。同じ理由で以前住んでたアパートの直下に割と有名なレストランがあったのですが、いつでも行けると思ってるうちにつぶれてしまいました。コロナよりずっと前のことですが。
2022-02-01 23:56:45
Ms. DetectiveがYSSCSICD.SYSまたは救難IPLから起動できなかった問題、多分解決しました。実機でまだテストしてないのですが、津軽はこのためにSCSI CD-ROMドライブのエミュレーションをつけたので、津軽上でテストしたところ、YSSCSICD.SYSがINT 93H AX=01C0HでDLにドライブモードを返してないことが判明して、直したところ、とりあえずDAPSのオープニングムービーが流れて事務所に入ってゲーム開始まで行けたので、多分そのまま走るのではないかと思います。修正版をGitHubに上げましたので、良かったら最新版のYSSCSICD.SYSまたは起動IPLにアップデートしてください!
2022-02-02 14:25:09
ありがとうございます。早速試させてもらいました。
動作しなかったソフトに関しましては変化ありませんでした。
追加で6本をほんの少しだけ試したところ、The 4th Unit 1&2リンケージ、AD&D ドラゴンオブフレイム、プロフェッショナル麻雀悟空、レミングスはプレーできました。
達人王とプリルラでは音楽の切り替わらない場面が見られるもののプレー自体はできました。
音楽の切り替わらなかった場面は、達人王ではボス戦、プリルラはキャラクター選択画面とボス戦です。
パッチを作るためのデバッガですか・・・なるほど、それはいいなぁと思いつつまず私はソースコードの置かれているGitとは何だろうって所から始めないと行かなそうです。
2022-02-03 02:22:13
軽微な不具合ですが、津軽でキーボード設定(Keyboard Mode)を変更している際、アンダーバー"_"をタイプすると2つ入力されます。
2022-02-06 01:41:17
・館
かつてNiftyやVector、作者サイトで公開されていたフリーソフトの3Dアドベンチャーゲーム。オープニングからエンディングまで一通り通して動作。
・ギャラクシーフォース2
Auto Release v20211026からゲーム画面下部分が途切れて表示されているようです。
動作確認報告ついでに要望で実機にあった互換/高速モードの実装って予定していますか?津軽上でCPU/CDドライブ速度を切り替えずに、TownsOSのアイコン登録でバッチを使い動作切り替えプログラムを登録して自動的にゲーム起動時は互換終わったら高速になって戻っていくほうが手間がないと思ったので。
VSGPやスーパーシューティングTOWNSの動きを見た限り、津軽は8MHz設定で386 16MHz/3ウェイトと同等くらいになるようです。
2022-04-03 01:49:00
動作確認ありがとうございます!
ギャラクシーフォース2は、はて、何を変えたかな?確認してみます。
互換・高速モードは、CPUクロックを切り替えられればあまり必要が無いかと思って実装してなかったのですが、バッチで切り替えるという用途があったんですね。思いつきませんでした。VRAMアクセスウェイトとかぜんぜん考慮してないので、CPUクロックを変更するぐらいしか手が無いですが、実装してみましょうかね。AB2.COMのソースがあったから、これを使うとなんとかなるかな。
2022-04-04 07:33:29
実機では互換モードにするとメイン/VRAMのメモリウェイトが初代機相当(3/6)、486以降のCPU搭載機種ではキャッシュメモリの無効化、CDドライブが標準速読み取り/キャッシュ無効相当の速度になるようです。
https://wiki3.jp/fmtowns/page/161
https://wiki3.jp/fmtowns/page/211
https://wiki3.jp/fmtowns/page/213
https://wiki3.jp/fmtowns/page/109
津軽なら互換モードレジスタ設定になっていたら一時的にCPU 8MHz・CD速度を1xに変え、高速モードだったら元の設定に戻す実装が楽でしょうか。
SCSIの応答速度が2割ほど高速になるという話も聞いたのですが、それらしきレジスタが見つからないので単純にウェイトが外れてソフトウェア処理が高速化した恩恵だったんですかね?
またスレ違いな話ですが、SPRITE_ONE_TRANSFER_TIME(スプライト1個の転送時間)の値をMX実機相当の57000の他、43500に切り替える設定って追加できませんか?MX実機の速度とは違いますが、このくらいの転送速度にすると激闘キング2・記憶の旅人2・サムライスピリッツのフレームレートが改善するので。
FMV-TOWNSだと秒間650枚程度まで高速にするI/O設定があったようですが、それ相当や43000以下まで調整にすると今度は激闘キング2と記憶の旅人2のオープニング・アフターバーナーのゲーム中が高速に流れてしまうという問題が出てくるので43500がちょうどよい値でした。
2022-04-04 10:21:33
AB.COMのソースを見てるのですが、一応2CX対応なことになってますが、I/O 5ECh使ってないですね。ということは、ウェイトレジスタが非公式にCX以降でも対応なのかもしれないですね。MXだと、機種不明TOWNSということで何もしてくれないようだし。。。AB.COMの全機種対応版ってありましたっけ?なお、見てるのは、Oh!FM TOWNS 1992-1月号掲載だったとDOCにあるバージョンです。なお、赤本の794ページによると、2CX以降だと、FASTモードでSCSIのDMA転送サイクルが2us/cycle -> 1.65us/cycleになる、と書いてあるのでSCSIの応答速度は本当に高速になっていたようです。
2022-04-05 08:00:25
AB.COMはそれ以降バージョンアップされたという情報はなさそうです。類似のソフトはフリコレなどで公開されていて、CX以降の機種では05EChのみ操作、それ以前の機種ではメモリウェイト変更となっているようです。
記憶違いじゃなければMXだと高速モード時にメイン/VRAMのウェイトレジスタの値が0/4となっていて、互換モードにすると3/6にはなるけどウェイトレジスタの値を変更するソフトで変更してもVRAMの方は値こそ変わっても動作自体は何も変化がなかったような気がします。
2022-04-06 11:30:46
了解しました。やってみます。
ところで、ギャラクシーフォース2が以前正常に見えていたのは、画面モードにかかわらず1x相当で480ピクセルは表示するようにしていたからですが、全画面モードでストライクコマンダーとかウイングコマンダーの画面の下の方に黒い余白ができてしまうのをなんとかしようと思って、CRTC設定から予想される高さに変更したからですね。
ギャラクシーフォースのゲーム画面の設定を見てみたら VDEx=036Ah, VDSx=036Ah, FOx=0 なので、表示範囲は VDE-VDS=0300h=768で、FOx=0の場合は2で割って384にしてしまっているのですが、このFOx=0の場合2で割るのが間違ってるのかもしれません。現実問題としてCRTは物理的に小さくならないので、1x換算で480まで必ず表示した方がいいのかな?CRTCの設定はまだ完全に解明できてないですね。
2022-04-06 13:44:53
ギャラクシーフォースは直ってないですが、FASTモードI/Oに対応してみました。ソースをGithubに上げたのでお試しください。
今までのステートセーブデータもそのまま使えるはずですが、問題は、今までFASTモードを無視していたので、セーブしたCMOSで起動すると突然動作が遅くなって、とくに海外のユーザから何が起きたのか?と思われるかと思ったので、起動時CMOSを読み込んだ後でFASTモードフラグを強制的に1にしています。どうやらこのバイトはチェックサムに含まれないようなので、1にしてもチェックサムにひっかかってCMOSがリセットされることは無いようです。デフォルトのCMOSデータも同様にFASTモードにしました。
2022-04-07 12:41:24
ギャラクシーフォースのCRTCに関してですが、表示する範囲は(VDE-VDS)/2=384で合ってそうな雰囲気なのですが、表示開始位置が(64,48)なんですね。この上の余白部分を加えてモニタの表示範囲の下端は384+48=432とすると、大体見える感じなので、そのようにしてみました。
他のゲームでウィンドウが縦に長すぎにならなければ多分この解釈で合ってるのではないかと思います。大体どのゲームも表示開始位置は(0,0)なので、ほぼ影響はないと思います。他に表示開始位置を大きくいじってたゲームあったかな?
2022-04-07 13:22:42
早速の対応ありがとうございます。
確認したところ互換BIOSでTownsOSのメニューから互換/高速モードの切り替え、ギャラクシーフォース2の表示が正常なことを確認しました。
また動作報告なのですが、アリスソフト アーカイブズで公開されていた「Super D.P.S」(フロッピーイメージはHDM形式だが拡張子をBINにして読み込む)を起動したところ、オープニングが終わってタイトルロゴが出た以降進まずフリーズするようです。
それはそうと、これらのアリスソフト配布フリー宣言になっているディスクイメージ、IO.SYSとTBIOS.SYSが入っていてAUTOEXEC.BATを書き換えればTownsOSなしでも別のフリーソフトのゲームとかを現在遊ぶ手立てになりますね。
Super D.P.Sのディスクイメージ内のAUTOEXEC.BATを書き換えてCDイメージ内に収録したALLTYNEXやパニックボール2を起動させることができました。
2022-04-07 14:14:54
配布フリー宣言の趣旨を鑑みれば、
公言するようなことではないでしょう。
2022-04-07 16:29:21
不必要な記載でした。誠に申し訳ございません。
管理者様にはお手数となってしまいますが、該当の書き込みを削除していただいて構いません。
2022-04-07 17:26:07
えーと上の書き込みが消えてしまったら脈絡が無くなりますが、この点、実際のところどうなんでしょうかね?確認したいけど確認してダメって言われたらいやだから確認もできないのですが、Towns OS V2.1から追加された「システムの複写」でフォーマットしたディスクは再配布してはいかんのでしょうか?僕としては誰も確認してないだけで、実は再配布しても良いのではないかという気がしているんですがね。
今であれば中にTBIOSとかIO.SYSとか入っているので権利はどうなんだろう?と、考えてしまいますが、当時だとこの「システムの複写」オプションというのはきっと同人ソフトとかを配るためのオプションに違いない、と、思って何も考えずに配っていたように思います。またFM-7時代だとDisk BASICから起動するソフトが普通に売られていましたが、売ってた人たちは多分Disk BASICの権利がどうなってるか確認してなくて、おそらく富士通もDisk BASICに関して深く考えてなかったのではないかと思います。この「システムの複写」も同様だったのではないかというのが僕の想像なんですが。
システムの複写でフォーマットしたディスクの中のファイルでひっかかりそうなのは大半が富士通が書いたコードなので、富士通がOKであればよくて、desperateにTownsのソフトが増えてほしかった富士通が、この部分の再配布を渋っていたとは思えないんですよね。RUN386がPharLap製ですが、当初PharLapのDOS Extenderをそのまま使ってたのかと思ったらTowns用にかなり手が入っているようなので、おそらく富士通が拡張して再配布する権利を結構な金額で買い取ったのではないかと思います。
たしか、FM TOWNSのロゴをつけるには何か手続きがあったような記憶があるのですが、システムの複写をしたフロッピーディスクに関しては黙って再配布しても問題無さそうな気がするんですがね。
ただ、IPL書くためにいろいろ調べてわかったのですが、どうやら起動可能なCDに書いてあるIO.SYSと起動ディスクのIO.SYSは同じものっぽいですよね。だとすると、起動可能なCD-ROMがあったら、それをもとに起動可能なフロッピーディスクを作成することは可能なはずなんですね。それだと、Towns用ソフト一本さえ合法的に持ってれば、津軽からフリーソフトを起動するための起動ディスクイメージを作成することは可能なはずなんですね。それを作成しようと思ったら、ディスクをいじくるツールを書けばいいのですが、それを言い出すとEDITDISKはバイナリしか使えなくてD77対応してないしハードディスクイメージにも対応してないから、D77フォーマットとかTownsのハードディスクイメージとかにも対応した、ディスクイメージ操作ツールが作れればなあ、と、考え始めてあまりにも壮大過ぎてやっぱり手が出ない、という状況に陥ってますが。。。。
2022-04-07 23:58:22
TOWNSの不透明な部分であるIPLやIO.SYSの著作権に対しての考察は、私自身は"不必要"とは思っていません(必要だとすら考えています)ので、BCCさんの投稿に関しては残そうと思います。
事情をお察しください > 皆様。
私も山川機長さんとほぼ同じ感想で、"当時"の富士通の考えは実の所は深く考えていなかったのだろうと思います。
IPLとIO.SYSを含む起動FDに含まれるファイルについての著作権を考えたときに、一旦は富士通に問い合わせようかと思ってもいましたが"当時"と"現在"では取り巻く環境の違いや主幹の違いから、当時とは異なるスタンスを取られても困りますので、"敢えてグレーにしておくべきかもしれない"と考えて問い合わせはせずにいました。
>279 山川機長さん
EDITDISKですが、うんづのツールアーカイブに入っている物を使えばHDDは利用可能です。
2022-04-08 09:34:50
TownsシステムソフトウェアV2.1(多分L20)に付属するご使用条件の②では「本ソフトウェアが、別のソフトウェアに組み込んで使用されることを予定した製品である場合には・・・」との記述があるのですが、組み込み用のパッケージでもあったのでしょうかね。
ゲームで使用されているIO.SYSはV1.1、2.1系?共に76KBが多い印象で、V2.1系の一部で108KB(起動時に文字が表示される事が多い?)の印象です。
V2.1L31でシステムの複写でフォーマットすると、IO.SYSがFDに入っていなくて同等の機能がIPLに統合されているような感じで、L20だと108KB、V1.1で作成可能なCDプレーヤーFD用なら76KBでした。
FD版のMistyの説明書によりますと、オートスタートするのがPC-88、X1Turbo、FM77、MSX2、X68000、TOWNS
オートスタートしないのが、PC-98、FMR、J3100で、別途MS-DOS3.1以降が必要です。
オートスタート対応機種のうち、MS-DOS2のように無料組み込み配布可能なOSがあれば、その使用許諾書と比較してみたいところです。
2022-04-18 02:22:31
>281 aochanさん
この場合の"組み込み"とは、一般的な産業用途の組み込みではなくアプリケーションディスクに組み込む事を指しているのではないでしょうか?
CDから起動すると一旦TownsMenuが立ち上がって、アイコンをクリックしてアプリケーションを起動するイメージであったり、アイコンのクリックは必要ないとしてもTownsMenuをアプリケーションの土台として使っている場合とかがその条件に当てはまるのではないかと。
でも、そこに書いてあったのですね、見てみます。
2022-04-18 08:58:41
動作確認しました。
■不思議のナディア
起動 ○
プレイ △
音声が二重になる。
このゲームの音声はCD-DAに収録されていてステレオの左右で違う音声になっており実機の場合には左右のどちらかの必要な方の音声が再生される様になっていた。
2022-05-19 00:57:18
>ふしぎの海のナディア
電子ボリュームでCD-DA左右のどちらかから出力するか設定しているようで、津軽のソースコード内にもCD-DA電子ボリュームの仮実装があるのですが
// Temporarily disable electric volume.
// When CDDA is fading in, it stays low volume.
と記載されておりフィードイン時にボリュームが小さいままになるとのことでコメントアウトされていましたが、具体的にどのソフトでなるのでしょうか?
C32、C0、ENビットの設定が反映されていないようだったのでコメントアウトされている部分を消して
unsigned int FMTowns::GetEleVolCDLeft(void) const
{
if (!state.eleVol[TOWNS_ELEVOL_FOR_CD][TOWNS_ELEVOL_CD_LEFT].EN)
{
return -63;
}
return state.eleVol[TOWNS_ELEVOL_FOR_CD][TOWNS_ELEVOL_CD_LEFT].vol;
}
unsigned int FMTowns::GetEleVolCDRight(void) const
{
if (!state.eleVol[TOWNS_ELEVOL_FOR_CD][TOWNS_ELEVOL_CD_RIGHT].EN)
{
return -63;
}
return state.eleVol[TOWNS_ELEVOL_FOR_CD][TOWNS_ELEVOL_CD_RIGHT].vol;
}
ととりあえずENビットだけ有効になるようにしてみたところナディアの音声は問題なく聞こえるようになるようです。
2022-05-20 22:15:18
あ、CDDA再生後に音量調整しても反映されないってことでしたか。すみません。
2022-05-22 00:50:37
おおなるほど!ENだけでコントロールできるんですね!フェードインはどのソフトだったか、はっきり覚えてないのですが、割と初期に報告があって対応したやつなんですが。他にもフェードアウトしなくてブツっと切れてしまうものもあるらしいんですがね。
この機能は正式に直しますんで、少しお待ちください。CDDAには他にも問題があって、Direct Soundの再生時間の制限にひっかかるとそこで切ってしまうので、津軽をバーチャルCDプレイヤーにしようとするとCD全部再生できないという問題があるので、これを直すときに一緒に直しますんで。
2022-05-22 00:56:19
>この機能は正式に直しますんで、少しお待ちください。
よろしくお願いします。
2022-05-22 21:48:10
えーと、多分直ったと思います。どうやったかというと、CDDAもFMやPCMと同じようにちょっとずつプレイバックするようにしたので、40ms単位でElectric Volumeの変更に対応できます。さらに、ちょっとずつ送るので、再生区間がどれだけ長かろうが正しく再生します。ソースPUSHしました。
今出先でmacOSで試すことができない状況なんですが、多分大丈夫だと思うんですがね。
2022-05-25 08:49:38
山川機長さん
最新ソースで試したところ正常に再生されることを確認できました。対応ありがとうございます。
https://twitter.com/bcc2528/status/1529414454467002370
2022-05-25 19:52:27
もしかしたら、FM・PCM音とCD-DAがある程度大きめの音量で重なると音割れでノイズが発生するようです。上のナディアもちょっと音声にノイズが入っている状態。
2022-05-26 00:05:40
やっぱりそうですか(^_^;)実はWindowsはDirectSoundがあまりにも出来が悪くて、ストリーミングではなく、WAVEの再生終了をポーリングして次のWAVEを送り出すようにしています。この方法だとどんなに速くても一瞬の間が発生してしまうのは仕方ないのですが、しかし、ストリーミングにしようと思ったら、DirectSoundのストリーミングの時間精度がありえない40msで、FM/PCMでこれをやるととてもBGMなどは聞けたものではなくなってしまいます。(ピアノで和音とか左右のタイミングがずれまくってる感じ)
CDDAの場合は40msもあれば十分かもしれないので、CDDAは必ずストリーミングを使ってみるという手がありますね。これだと、DirectSoundのバッファに空きができたタイミングで次のデータを送り出すので途切れなく音が鳴り続けることになります。という修正をPUSHしてみました。
ミキシングはDirectSoundに任せているので、多分出力が大きすぎて割れているということはないと思うのですが。しかし、他のエミュレータはどうやっているのだろうか。
2022-05-26 11:51:55
PUSHされたソースで試したところ、ノイズは無くなりましたが今度はナディアで再生終了後も音声がループして再生されてしまう、スプラッターハウスなどでBGMがフィードアウト後に別のBGMに切り替わる際一瞬だけ再び鳴る現象があるようです。
2022-05-26 13:52:48
おおなるほど。直してみました。これは、なんでFMとPCM (のmacとLinux用)でこの処理がいらなかったんだろう?という処理ですが、多分これで直ってると思います。ソースPUSHしたので試してみてください!
2022-05-26 14:52:10
横から失礼します。
私も今日時点の最新のmasterブランチをビルドして試したのですが、ナディアで音声がループ再生されてしています。
2022-05-26 23:44:58
すみません、確認したらPUSHできてませんでした。今度こそPUSHできたと思います。f797836bcf48bad8009dad4bf8c5b126c35c7e39 が最新になります。
2022-05-27 07:24:52
最新のコミットでビルドしてました。
ナディアの音声がループせずに正常に動きました。
対応ありがとうございました。
2022-05-28 19:09:22
・サイキック・ディテクティヴ・シリーズ vol.4 オルゴール
正確にどのバージョンからおかしくなったかは不明ですがv20220330で動かしたところ、データウエストロゴの後フロッピーを入れることを催促される画面で表示がズレる、更にマウスカーソルが動かず続行不可能となっていました。
また最新ソースだとデータウエストロゴ画面が永遠とループされる。
2022-06-01 01:15:42
おおなるほど!多分ですが、画面がずれる現象は、Galaxy Force 2に対応したあとでなんかPoly Racerの画面が変になったような気はしてたんですよね。おそらく同じ原因のような気がします。一応画面は見えていたようなので放置していたのですが、真面目に直します。
それから、RAYXANBERでは、トラックの最後のフレームが再生されたことを確認するまでタイトル画面で待っていたので、似たような現象かもしれません。現在、ストリーミング再生に変更したので、再生中のフレームは最後にストリーミングバッファにデータを送ったタイミングとしているのですが、Direct Soundの都合で40msずつ送っているので、3フレームずつ進んでしまっているので、どうしようかと思ったのですが、これは、最後にデータを送ってた時点のVM時間を記録して、Inquiryが出たとき記録された時間から進んだ分フレームに足してやればいいですね。そのように変更してみます。
2022-06-01 05:28:10
タイトル:ゆみみみっくす
状況:コピーライト画面から進みません。
それと、どのソフトでも同じなのですが、少し前から津軽の最新ソースをコンパイルしたものだと音が全く鳴りません。何か解決する方法はありませんか?
v20220330は鳴ります。
Win11Pro/vs2022/Nvidia HD Audio
再生デバイスをSound blaster play!に変えても鳴りませんでした。
2022-06-12 20:07:28
音が鳴らない問題は深刻ですね。CDDA, FM・PCM, Beepどれも鳴らないですか?
2022-06-14 22:25:18
念のため再度確認しましたが、どれも鳴りませんでした。
2022-06-15 02:46:53
うーん、そうですか。具体的にどのRevisionかわかりますか?サウンド全体にかかわるような変更は、
commit 9214e94df0d1c34e3e3789b4135ddb5f20da4c54
↓
commit 5ab9436b298378741acb3f560deea4c3e8ad885b
ここでナディア対応のために(というかCDDAの左右のボリュームを変えられるようにするため)Panningを加えたのですが、ひょっとすると、ドライバがPanning非対応とかなってるのかもしれません。というのもちょっと考えにくいのですが、このふたつのCommitの間で音が出なくなるかチェックしていただくことは可能でしょうか?
こちらでも同様の現象が発生してくれれば、バイセクションサーチでどのCommitで問題が起きたのかlog2(N)ステップでたどりつくことができるのですが、こちらでその現象が発生していないもので。
あ、あとCUI版GUI版どっちも音が出なくなってますか?(CUIとGUIで違いは出ないはずですが一応)
よろしくお願いします。
2022-06-15 19:48:16
すみません過去ソース取得に少々手こずっていました。
原因がはっきりとしなかったのですが、CUI版は鳴るようになりました。GUI版は鳴りませんでした。
> commit 9214e94df0d1c34e3e3789b4135ddb5f20da4c54
> commit 5ab9436b298378741acb3f560deea4c3e8ad885b
こちらも同様にCUIは鳴り、GUIは鳴りませんでした。
Webから取得したv20220330は鳴りましたが、ソースを取得してビルドしたところ鳴りませんでした。
何がきっかけでこうなったのか、切り分けが困難な状態です。
今使っている環境は別のWin10から環境移行したものですが、移行元は既にWin11になっており、そちらでビルドしても音は鳴らないものが生成されました。
こうなると自分のビルド方法が悪いのかと思うのですが、音だけ鳴らなくなるということはあるのでしょうか。
パラメータはx64 Native Tools Command Prompt for VS 2019にバッチで
> cd main_gui
> cmake --build . --config release --target Tsugaru_GUI
という感じでビルドしています。slnをGUIで開いてビルドしても同じでした。
cmosクリアは効果がなく、他のWin10PCにvs2019を入れてみても同じ現象でした。
恐らく津軽の更新は原因ではないと考えています。
要領を得ず申し訳ないです。
2022-06-17 20:33:46
ああ、原因わかったかも。publicレポジトリPUSHするのばっちり忘れてました。今PUSHしたので、試してみてください。
2022-06-18 16:12:40
おお、鳴りました。対応ありがとうございます!
2022-06-18 21:32:54
ゆみみみっくす、放置してすみません。忘れてたわけではないのですが。とりあえず、原因は、Shadow of the Beast 2対策が邪魔してました。
Shadow of the Beast 2が何をやってたかというと、CD-ROMのIRQハンドラが、Data ReadyのSIRQとDEIが交互に入ってくることを期待していて、直前のDEIが処理される前にSIRQが出てしまうと永遠にDEIを待ち続け先に進まない、という状況に陥りました。そのため、直前のInterrupt RequestがConsumeされていない場合はData Readyを出さない、という方法でShadow of the Beast 2が走るようになったのですが、ゆみみみっくすの場合、直前のInterrupt Requestが処理されてなくてもData Readyが出ないと先に進まないという状況ですね。
さてどうしたもんか、と、思ったのですが、ここまで書いてて、直前のInterrupt Requestが処理されてなくて、かつDEIが1のときだけ待たせればいいのではないか、ということに気が付いたのでやってみます。
2022-09-05 08:19:57
ゆみみみっくす、起動できるようになりました!ソースPUSHしたので、よかったら試してみてください!
2022-09-05 08:40:22
ゆみみみっくす対応ありがとうございます!
起動できるようになりました!
2022-09-08 22:01:29
仮想ゲーム機エンジン「PICO-8」向けに作られていたフリーゲーム「CELESTE Classic」をFM TOWNSに移植してみました。
https://bcc.hatenablog.com/entry/2022/09/10/234539
エミュレータ「津軽」「うんづ」及びFM TOWNS MARTY実機上でクリアまでいけることを確認したんですが、「津軽」上だと髪の毛や吹雪の表示が問題ないのにMARTY実機で試したところ髪がズレて表示されたり吹雪がすべて2ドット分の大きさで表示されてしまう現象が発生しました。
おそらく津軽の再現性の問題かと思いますので、確認をよろしくお願いします。
TOWNS版CELESTEの表示方法は
・画面は全てスプライト表示。表示枚数は最大448枚。
・スプライトは縮小表示で8*8相当に縮めている。
・128*128で描いたスプライト面を3倍拡大して384*384にして画面中央に表示
という手順をとっています。
2022-09-11 14:25:28
髪は知りませんが、雪は縮小アルゴリズムの実機との差異ですね
CELESTE側ではスプライトを定義する際に2x2ドットの境界をまたがないようにするか、
そもそも縮小を使わない(左上8x8のみ使用して残りを透過色で埋める)ようにしてはどうでしょうか
2022-09-11 21:13:21
なるほど!津軽上では問題なかったけど、実機に持って行ったときと動作が違うということですね。
たしかに、津軽上で実機用ソフトを開発するときにそれに当たると困りますね。FM77AV上でコード書いてて、FM-7に持ってきたらVRAMアクセスフラグ立て忘れてて画面が変、みたいな状況ですね。(違うかもしれない)
動画拝見しましたが、チップチューンのBGMがいい感じですね。
縮小は単に1ドットずつ飛ばして書いてるだけだろうと思ったのですが、実機だと何か複雑なことしてるのだろうか。あと、Martyと他の実機では違いがあるのだろうか。MXでテストコード書いて試してみます。X=奇数のピクセルが白のスプライトとX=偶数のピクセルが白のスプライトを縮小表示してみれば何かわかるかな。
2022-09-11 21:40:45
通常スプライトRAM側で奇数番目(あるいは奇数行目)のピクセルが表示されるのですが、透明色の場合に偶数番目を参照するようです。
件の雪は(-: 透明ピクセル, x: 不透明ピクセル, |: バイト境界)
+56 ...|-x|x-|...
+64 ...|-x|x-|...
のように定義されていたため、1x1で表示して欲しいところ2x2になっていました
SYPSが立っていた場合の優先順位はまた違うかもしれません。
また、X, Yともに縮小の際の候補4ピクセルの優先順位も調べる必要があります。
2022-09-11 21:46:42
たろすけさんの書き込みを見て、試しに環境が違うものの「オルゴール」を遊んでみたのですが、
・FREQ 8MHz設定時に口パクと音声がある程度合うものの、FM音源が音痴となる。
・ゲーム中に選択メニューUIが出てくると更に音痴となる。25~33MHz設定で安定してくる。もちろんこの設定だと口パクが早く終わってしまう。
・ゲーム自体はエンディングまで問題なく進行可能。
・DAPSリプレイはCD読み込み速度を1Xにしておかないと音声が途切れる。
・桜沢加奈子が車の窓を開けるシーンでフリーズする(Wikiの互換リストにはデータウエストロゴに戻ってしまうとあるがVM自体がAbort)。
ようでした。DAPSのフリーズするシーンでのログは
VM Aborted!
Device:486DX
Reason:Interrupt to lower-privilege level should raise exception.
Towns TIME (Nano-Seconds): 237666079125
CS:EIP=000C:000100D7 LINEAR:0AFFFCD7 EFLAGS=00000086 CPL=02
EAX=00000144 EBX=00000014 ECX=0000005D EDX=00009787
ESI=00003C6A EDI=06550100 EBP=00000000 ESP=00037CA7
CS=000C(LIN:0AFEFC00) DS=0014(LIN:0AFE0A42) ES=0014(LIN:0AFE0A42)
FS=0014(LIN:0AFE0A42) GS=0014(LIN:0AFE0A42) SS=0060(LIN:00000000)
CR0=80000001 CR1=00000000 CR2=4335891C CR3=00058000
CF0 PF1 AF0 ZF0 SF1 TF0 IF0 DF0 OF0 IOPL00 NT0 RF0 VM0 AC0
Default Operand Size=32 Default Address Size=32 Stack Address Size=32
SS+00000000:7F 1A 00 00 18 00 00 00 86 02 00 00 14 00 00 00
SS+00000010:44 01 00 00 4E BB 00 00 00 00 4B 00 7E 04 57 37
000C:000100D7 C8C8C8C8 ENTER C8C8H,C8H
2023-05-15 23:32:44
・Windows用浮動小数電卓「FCalc2」 (FM TOWNS用ディスクマガジン「やみなべDX 廃刊号」収録)
「/」及び「^」演算を行うと「FIDIV(m32int)DWORD」「FPUINST」命令でAbort
付属のドキュメントに転載可能という表記があったので実行ファイルとソースファイルを上げておきます。
https://drive.google.com/file/d/1YOs25sRnVZcUghimpbBYO-WaZ2GUsZFD/view?usp=sharing
2023-05-18 01:34:17
おおなるほど。オルゴールは結構難しいことをしてそうですね。シャーロックホームズの探偵講座ではCDを1Xにしておかないと先読みが速すぎてバッファオーバーフローを起こしてクラッシュ、というのがありましたが、音が途切れるのは似たような現象かもしれませんね。問題の車の窓を開けるシーンというのは、割と起動して初期のシーンでしょうか?そうでない場合セーブデータとか送っていただくことは可能ですかね?
FCalc2確認してみます。ありがとうございます!
2023-05-18 22:24:05
解析などお疲れ様でございます。
オルゴールの対応状況について雑誌やカタログを調べたところ、
Oh!FM TOWNS 94年1月 P55の記事によりますとME,MA,MXではセリフが途切れるとのことでした。
富士通の94年3月のカタログでは、サイキックディテクティブシリーズ1~7のうちオルゴールだけMA,MX,ME,MF,Freshで動作しないと注意書きがあります。
95年のカタログにはオルゴール(リメイク版)が掲載されるようになりましたので、問題が発生したのは旧版かなと予想しています。
リメイク版と旧版との見分け方は、パッケージ絵が着物女性の絵でCDなどにDAPSとDCCSのロゴがあればリメイク版、パッケージ絵が建物でCDなどにはDAPSのロゴのみであれば旧版になります。
HRでは動作するそうなので、互換モードでも埋められない違いが何かあるのでしょうね。
2023-05-18 22:56:17
https://drive.google.com/file/d/1rc8kE6WrmEiufvPU_fSPEzAKT33Dhjvf/view?usp=sharing
このSAVE_A.DATをOrgolのフロッピーにコピーすればタイトルメニューで「DAPSリプレイ」というのが出ているのでそれを選ぶと再生され、4~5分頃に該当のシーンに行くと思います。
もう少し調べたところMEDIUM_FIDELITYにしていると0Cセグメントの値がすべてC8で埋め尽くされており、HIGH_FIDELITYにしているとCD読み込み後wikiの通りデータウエストのロゴに戻ってしまいました。
音が途切れるのはどうもREP命令の所要クロック数が実機よりも大きいからかもしれません。
https://www2.math.uni-wuppertal.de/~fpf/Uebungen/GdR-SS02/opcode_i.html
こちらのサイトの486所要クロックを参考にREPのクロック数(REPCheck)を7→3、MOVSB・MOVSからclocksPassed+=7をコメントアウトして最初にclocksPassed=7、CMP・SCA・STOもそれぞれ記述通りのクロック数にしたところ、
TOWNSベンチマーク(フリコレ10収録)でどのFREQ値にしてもCPUとメモリの項目の両方が初代TOWNS相当と同等の1.00とならなかったのがFREQ 5でどちらも約1の値になるようになり、
オルゴールもFREQ 5で口パクとFM音源の歪みが最小限になったようです。
試した結果
https://twitter.com/bcc2528/status/1659086072712765441
仕事場のPCでCore i7 3630QMのノートPCがあるので試してみたのですが、REP MOVSD命令はFREQ 25くらいにしてようやく初代TOWNS相当の性能になるにもかかわらず、このクラスのCPUだとFREQ 25はVM自体が遅れるので、REP MOVSを多用するオルゴールはどうやっても歪んでしまいました。
2023-05-18 23:20:07
BCCさん、
反応が遅くてすみません、大航海時代2にはまって、オットー、ジョアン、カタリーナのシナリオまでクリアしてしまいました。大航海時代2、スクリプト言語みたいなのでシナリオを記述してるみたいで、ゲームシステムはもともと8ビット用だった大航海時代1に比べてはるかに洗練されていますね。ただ、ジョアンとカタリーナのシナリオちょっと後味が悪かったような。民間商船を襲撃するの、最初ものすごく抵抗があったのですが、民間商船も大砲で反撃してくれたのは救いでしたが。あと、攻略サイトなどは見ないけど解析は辞さない縛りでやっているので、途中次に何をすればいいかわからなくなったら逆アセンブルして次にするべきことを発見してみたり。(これが結構楽しい)。ここまでやったら残る3シナリオもやろうと思ってるので、しばらく遊んでると思います。
なお、Fcalc2のFDIV(m32int)と、FIST(m16int)対応しました。ありがとうございました。電卓だと直接実行結果を確認できてありがたいですね。途中、FYL2XP1を出すこともできたのですが、なぜかその後どういう法則で出るのかわからなくなって再現できなくなりましたが。次に遭遇したら実装したいと思います。
2023-06-06 00:43:07
山川機長さん
Fcalc2のFYL2XP1は演算結果が1以下の時に^を求めようとすると発生するようです。
例えば1/5=0.2とか1/1=1で計算を出してそれを^するとFYL2XP1でAbortします。
あと気になったのですが、スプライト表示を行っているソフトを起動している最中にVMをリセットするとテキスト表示が再度スプライトコントローラの初期化が行われるまでおかしくなってしまうのは、実機通りなのかそれともエミュレータの不具合のどちらでしょうか。
実機を使っていた時にリセット時にそのような現象があった記憶がないので。おそらくTownsSprite::State::ResetにPowerOn()を追加しておくのが良いと思います。
2023-06-06 21:39:15
>319 BCCさん
確か初期モデル(2代目あたりまで?)でスプライトEnableのままリセットをするとテキスト表示に異常が発生したような記憶があります(曖昧)。これ、なぜかマーティーの体験版CDにスプライト機能を停止する.COMファイルが入ってたんでわかったような気も…。
3代目以降では間違いなく発生しない事象で、ブートROM内にスプライト機能を停止するコードが入っているものと思われますので、単に互換ROMにそのコードが入っていないだけかもしれません。
2023-06-19 19:25:11
>たけがみりうさん
ありがとうございます。これが正常ということですね。
2023-06-19 21:30:24
Orgel状況確認しました。リアルモードでVSYNCがかかってきて、それをプロテクテドモードのハンドラにフォワードしようとしてしくじってるような感じですかね。ハンドラは、000C:000100D7のようで、同じ処理がクラッシュする前に何度も発生しているようなのですが、クラッシュしたとき何が変わっているのか調べると原因がわかりそうです。LDTが壊れてるのかな?引き続き調べてみます。
2023-06-29 10:34:33
むむむ、Orgelですが、実機MXで試したところ、同じ場所でクラッシュするなあ、と、思ったらばっちりaochanさんの書き込みを見逃していました。Orgelはリメイク版じゃないとMXだと動かないんですね。
クラッシュの原因はPage Faultが起きて、そこからリカバーできないうちに次の割り込みがかかってということでした。デバッガで追跡してみたのですが、すべて予定通りの動作をしていて、とつぜんとんでもないオフセットから値を読もうとしてPage Faultになってるようでした。とんでもないオフセットの出どころはCDの特定のセクタから読み込んだ内容なのですが、とくに読み込みエラーが起きているようでもないですし。スピードが問題なのであれば動作クロックとCDの動作スピードを下げてやればなんとかなりそうな気がするのですが、そういうものでもないようで、旧型機でたまたま動いてしまっていたのだとすると、それを再現するのは結構難しそうですね。
ところで、YSSCSICD.SYSだとDOS6上にTowns OSをインストールできないという報告があったのですが、同じ現象起きてますか?津軽上の実験では、(1)DOS6をHDDにインストール (2)でRescue IPLでCDから起動 (3)Towns OSをHDDインストールという手順では普通にインストールできるようで、Rescue IPLは中にYSSCSICD.SYSを含んでいるので、大丈夫そうな気がするのですが。
2023-07-03 11:22:46
>323 山川機長さん
YSSCSICD.SYSの件、実機でのお話ですよね?
実機だとなかなか今の環境を再構築するのが大変なので手が出しづらいのですが、外付けHDDか使ってないHDDでも探してトライ出来るかな。
2023-07-06 09:13:04
すぐに試せそうな環境でしたので実機で試してみました。
救済IPL+外付けCDドライブを使ってのDOS6区画へのTowns OS V2.1L51のインストールは、区画が127MB以下のMS-DOS領域であれば問題なくできました。
そのインストールした区画を救済IPL経由で起動た場合でも、外付けCDドライブは見えませんでした。
CDアイコンには内蔵CDドライブが割り当てられます。
DOS6上で外付けCDドライブを使う場合は、別途CDドライバを使う必要がありそうです。
今更なのですが、救済IPLに起動ドライブ選択以外のメニューがある事に気づきました。
電池切れ機で運用していますので、CMOSバックアップやCPUモード切り替え、起動装置切り替えは便利ですね。
起動装置をFDにしておけば、FD→ICカード→HDDの順に起動するようで、ICMキーを押さなくてもICカード版救済IPLが起動しました。
2023-07-06 22:06:23
>325 aochanさん
フォロー有り難うございます。
PCになれている方(ほぼ全ての方?)にとってはまり所はドライブ構成の設定でしょうか?
久しぶりに触ると自分自身も忘れてたりしますが、これを行ってないとドライブが見えないので初期化すら出来ないので困ったものです。
また、電池切れでCMOSの内容が破壊されていると予測が付かないのでCMOSは初期化してもらった方が良いかもしれませんね。
2023-07-07 09:06:52
aochanさん、
ご確認ありがとうございます!救済IPLからのインストールもOKですね!
救済IPLはハードディスクから起動する場合はBIOSリダイレクタをインストールしないように作ったと思います。というのもハードディスクから起動するのであればYSSCSICD.SYSを組み込むことができるし、うちのMXのようにプレスしたCDだったら読めるみたいな状況だとCONFIG.SYSでどっちを使うか選べた方が便利かと思って、そのようにしたと思います。
長いこと電源が入ってなかったTOWNSに、救済IPLからドライブ構成を一発で設定できるようになるといいんですけどね。チェックサムとかが解明できてなくて今だといったんCDなどから起動してIO.SYSにCMOSを初期化してもらってからでないとできんですね。
2023-07-08 01:44:59
山川機長さん、
ありがとうごあいます。そうだったのですね。
CDドライバを組み込んだMS-DOS6.2の起動FDで試したところ、YSSCSICD.SYSをCONFIG.SYSに組み込む事で外付けCDドライブが使用できました。
YSSCSICD.SYSを組み込んでいないMS-DOS6.2の起動FDを救済IPLから起動した場合は、外付けCDドライブは認識されませんでした。
手動組み込みとする事で、好きな方を選べるようにされているのですね。
>救済IPLからドライブ構成を一発で設定できるよう
これは今の救済IPLにある、ドライブ構成を手前から順番に追加する機能の一括版でしょうか?
救済IPLにあるCMOSクリアと、IO.SYSに行ってもらうCMOS初期化(SETCRASHですよね?)は別ですか?
HDD1台に作った複数の区画のうち、好きな区画から起動できる機能(もしくは起動区画の変更)を、救済IPLの機能追加リクエストにあげようと考えていたのですが、
このあたりはDOS6.2+TownsOS区画を起動設定にしておき、OS起動後にReiplでDOS3ベースのTownsOS区画やWindows95を起動するのが一般的なやりかたでしょうか。
Townsユーザーの皆様はどのような運用だったのでしょう。
2023-07-08 14:30:09
オルゴールのDAPSリプレイですが、
白TOWNSで動かない、486 CPUであるHRでは問題ないということでDMACかCDドライブ周りしかないと思ってそこらへん弄ってみたところ、townsdef.hのTOWNS_CD_READ_SECTOR_TIME_1Xを13300000から15000000に変更してみたら動きました。
動作確認動画(ネタバレ注意)。音楽のテンポが変になる箇所があるが最後まで再生可能。
https://www.youtube.com/watch?v=WenZuWU-gdI
白TOWNSのCDドライブは倍速に変更になったようですが、互換モードで標準速相当に落としても実際にはそれ以前よりもセクタ読み込み速度やシーク時間に差があるからでしょうか。
2023-07-23 01:21:34
実機でDAPSリプレイを試したところ、次のような動作でした。
時間が長いので、クラッシュしない場合は橋が崩れる場面で終了しています。
全て互換モードです。
①Fresh 音声が時々途切れる。
②HA 音声が①より少し多めに途切れる。
③HC相当(HAにHCのCPUボードを取り付け) 音声途切れは多分無し。
④HC相当+救済IPL+外付10倍速CDドライブ 車の窓を開ける場面でクラッシュ
互換モードでクラッシュするのは、MA、MXまたは高速なCDドライブを使った場合なのかな。
①②③でクラッシュするなら、HRのCDドライブへ交換しようと準備していました。
2023-07-23 20:34:31
おおなるほど!これって、15000000以上の値であればなんでも動きますかね?たしか津軽のCD読み込みスピードは1セクタ2KB、読み込み150KB/secから計算した値だったと思います。2/150=1.33333なので、下二桁合ってればよかろうと思ってこのようにしたんだったかな?
CDのセクタは実際は2048byteに加えてエラー修正情報が入っているので、ひょっとすると150KBというのはエラー修正情報を含めての値かもしれません。15000000/13300000が1.148、2352bytes/2048bytesの比が1.1278だから近いと言えば近いような。
Sherlock Holmesの探偵講座が絶対にCD-ROMが再生に追いつくことは無いという前提で書いてあるっぽくてCDが速いとバッファオーバーフローが起こるという現象が起きてましたが(最近githubにも同じissueが上がってきてたけど、確かに、ソース読まないとわからなかったかも)似たような状況鴨しれないですね。
実機でなんとか計測できないものだろうか。長い区間を連続読み込みさせてDMAが入ってくる間隔を測ればわかるかな。明日から出張なもので、戻ったらやってみます。
2023-07-24 05:47:38
オルゴール DAPSリプレイを簡単にテストした限りでは
20000000→問題なし
15000000→問題なし
14500000→フリーズ、稀に進む時がある
13333333→フリーズ
といった感じでした。
cdrom.hのコメントに1X CD-ROM should be 1second/75frames=13.3ms per sectorと記載されているので133000000という数字はその通りだと思います。
ネット上にあったTOWNSのCDコントローラ(マーティーに実装されていることを確認)であるYM6063のデータシートには、CDからCDコントローラバッファメモリへの1セクタの読み込み時間そのものは13.3msで問題ないようなのですが、ECC/EDCのデータ補正とバッファメモリからのデータ転送時間は別に時間をかけて(正確な時間が表記されてないが表から推測するに20msくらい?)からホスト側に転送されるようなのでこれが実際の読み込み時間に相当するのかもしれません。
2023-07-24 13:26:53
おおなるほど!実験ありがとうございます。そうか。2KB/150KBでも1sec/75framesでも同じ結果になりますね。
しかし、それだとCDCにそんなに大きなバッファがあるとも思えないので、連続読み込みするときはそのうちデータ転送よりもヘッドが先に進んでLost Dataが起きそうですね。それはCDCが吸収しているとすると、Lost Data発生後はディスクが一周するまで待たなくてはならないはずなので、平均的な読み込み速度は150KB/secよりもかなり落ちそうな気がしますね。あるいは、数セクタに一度読み込み時間が大幅に増えるとか。
考えてみるとFractal EngineがSEEKコマンドを使ってCD割り込みを無理やり引き起こしていたのですが、すでにヘッドがある位置から同じセクタにシークするように指示を出すと、一瞬で戻ってくるのではなく、ディスクが一回転するまで戻ってこないとすると結構割り込みがかかるまでの間隔は結構長時間だった鴨しらんですね。Lemmings 2がCPUのスピードを下げるとその部分でクラッシュするのがなぜなのか謎になってたのですが。
2023-07-24 23:27:17
https://wiki.console5.com/tw/images/8/83/YM6063B.pdf
8ページ目にモード1、9ページ目にモード2のバッファメモリの読み込み時の状態が記載されていますが、8KBあるバッファメモリを三分割して2336バイトのセクタを3つ分格納、最初に読みこんだセクタのエラー補正/ホストへのデータ転送時は2番目のバッファにデータ読み込み、2番目のバッファデータのエラー補正/データ転送時は最後のバッファにデータ読み込み、とトリプルバッファのようです。最初(最後)のセクタ読み込み時はエラー補正/データ転送文余分に読み込みに時間がかかることになりますが、シーケンシャルアクセスならそれ以降は読み込み時間は遮蔽されるはずです。
2023-07-24 23:57:10
1F/2Fにも搭載されていた様ですので、縦型とMartyにはCDCとして搭載されていたのかもしれませんね。
8K SRAMのバッファはスピードなどの具体的な記載は有りませんが容量については指定されていますのでCDCの外に実装されているものと思われます。
8Kの使い方はBCCさんの仰る通り3分割でトリプルバッファとして使い、連続したセクタリードで途切れる事なく読み込めるようですね。
エラー補正とデータ転送にどの程度かかるのかは未記載ですが、タイミングチャート上では1セクタリードの1/3程度・・・・
ただ、タイミングチャートなので全く信用できませんが少なくとも連続読み込みを破綻させない以上は、1セクタリード時間よりは短いはず。
2023-07-28 09:53:08
よく見たら赤本のブロック図(6ページ)にCDCの型番が明記されていました。
また、調べたらSRAMとしてMB881C78がCDCの近隣に有りますので、おそらくこのSRAMがCDCのワークRAMでしょう。
2023-07-28 11:25:21
なるほど!それだと1セクタ読み込みにかかる時間はやはり0.013333秒ということになりそうですね。DAPSはINT 93H AH=05の特別モードCH=FF (物理アドレスへの直接読み込み)を使ってできる限り速くCDを読もうとしているようなので。CDを遅くしたら走るということは、他の何かを相対的に速くしても動くようになる鴨しれません。CPUは速いままCDを1Xにするのはすでに試してだめだったのでCPUではなさそうですが。PCMだろうか。
現在、手元でタイミング関係で解決できてない問題としては、
- Lemmings2がCPU Freqを下げるとオープニングのアニメでクラッシュ。CDのSEEKコマンドが速すぎる疑い。
- Rocket RangerのセリフのPCM再生がうまくいかない。
というのがあるんですが、Lemmings 2は根っこが同じ鴨しれないですね。
2023-07-28 13:18:48
どうやらセクタ読み込み時間は0.0133333秒で合ってそうなので、セクタ読み込み時間を変更する代わりにシークにかかる時間をエミュレートしてみました。DAPSリプレイ、5連続で成功したので、多分大丈夫と思います。ソースをPUSHしたので、よかったらお試しください。
2023-08-18 09:56:27
PUSHされたソースでテストしてみましたが、自分の環境では窓を開けるシーンで前ソースと同様にフリーズしてしまいました(FREQ 5、CDSPEED 1、TOWNS_CD_READ_SECTOR_TIME_1Xの値は元の値に戻している)。
TOWNS_CD_READ_SECTOR_TIME_1Xの変更やシーク時間追加コードでなく
制御レジスタ(04C6h,TOWNSIO_CDROM_TRANSFER_CTRL)のWriteのところで
townsPtr->ScheduleDeviceCallBack(*this,townsPtr->state.townsTime+state.readSectorTime);
となっているところを
townsPtr->ScheduleDeviceCallBack(*this,townsPtr->state.townsTime+state.readSectorTime + 1700000);
とするだけで進行することを確認しました。
2023-08-18 21:10:22
おおなるほど!たしかに、freq 5だとうちでも落ちますね。freq 11までだとクラッシュして、freq 12から走るようです。たしかに、CPUに対してCDが速すぎるとクラッシュするようなので、CDアクセスを遅くしてもその分CPUも遅いとクラッシュするようですね。これ、多分まず間違いなく先読みし過ぎなんですよね。CPUが消費するよりも速くCDを読んでしまうというシャーロックホームズの探偵講座と同じ現象だと思うのですが。ただし、多分動画が速く進み過ぎないようにCPUにはある程度タイマーでウェイトを入れてるはずなので、FREQ 12以上だと多分動画再生速度が飽和してるということだと思います。BCCさんの環境でfreq 12で試してみていただけますか?
2023-08-19 01:53:26
FREQ 12では問題なく進むのですが、この設定ですとアニメーション速度が速すぎて音と映像の同期が取れていない(オープニングのデータウェストロゴの段階でCDの回転が速い、セリフより先に口パクが終わってしまう)です。
FREQ 5設定時にピッタリになり、別のベンチマークプログラムの演算・メモリ速度測定値も初期型TOWNSと同等になることを確認してるんで、単純な演算・メモリ操作命令は486相当の方がサイクル数が小さいもののIO操作命令は386相当の方がサイクル数が小さいせいですかね。
2023-08-19 19:55:47
Orgelは難しいですね。僕の予想では、タイマーかVSYNCかFM音源割り込みが動画を進めつつ、メインループはひたすら先読みするのかと思ったら、逆アセンブルを見たところ、どうも動画の再生ポインタがあって、それをメインループとFM音源割り込みと両方が読むような感じにできていて、必ずしも割り込みハンドラとメインループで明確な役割分担があるわけではなさそうです。
どうするのが正しいのかがいまいちわからんですね。わかっているのは、CD読み込み時間を長くすると動作するということですが、1セクタあたりの読み込み時間は13.3msが正しいみたいなのでこれを変更すると、読み込むセクタの個数に比例して時間が長くなるので正しくないと思います。実際には津軽が前はカウントしてなかったシークにかかる時間が効いていると思うのですが、正しい計算方法と実のところどのぐらい時間がかかっていたのかがわからんですね。
cdrom.hの中で、
MAX_SEEK_TIME= 2000000000, // 2000ms to seek from inner most to outer most. (Just guess)
最大シークタイム(CD-ROMのセクタ0から最後のセクタまでシークさせたとしてかかる時間)を2000msにしてみたら動作するようなのですが、どうでしょう?実際はスパイラル状なので線形ではなさそうですが、今適当に線形に保管してますが。考えてみると端から端までシークするという事態はほとんどなかったと思うので、実のところどのぐらいかかったものか。
ただ、シークタイムもものすごく大雑把で場当たり的に追加したものなので、どうせならもっとストレートにアクセスのたびに一定の時間ペナルティを追加するようなオプションを追加して、Orgelの初期バージョンでは使用が必要みたいにした方がいいような気がしてきた。そのようにしようかな。
2023-08-27 12:24:59
シーク時間2秒かつFREQ 5でオルゴールのDAPSが最後まで再生されることを確認しました。ありがとうございます。
2代目TOWNSのシーク時間がカタログスペックですと3秒でこれが平均時間なのか最大時間なのかわかりませんが、TOWNS以外では当時のCDドライブはおおよそ最大3秒だったようなのでおそらくこの数字は最大時間かと思います。
現状でシーク時間まで考慮しないといけないタイトルはオルゴール DAPSのみしか確認できず、厳密に計算する必要もないかと思いますので平均時間として2秒固定のオプションを設けるだけでよいと思います。
2023-08-28 21:10:26
おおなるほど。カタログで最大3秒だったんですね!Orgelはやっぱり-APP ORGELで対応しようかと思ったのですが、そういうデータがあるのであれば、そのまま残そうと思います。ありがとうございます!
2023-08-30 01:37:43
山川機長さん ご無沙汰しています(こちらの掲示板では初めましてですね)
今は消えてしまったunzの掲示板で「Tsugaruの動作確認します」と書いてから随分時間が経ってしまいましたが、unzの方の確認がほぼ終わったのでTsugaruの確認に着手しました。
当面はunzでは動作しない(起動しない、もしくは致命的な不具合がある)ものを中心に確認したいと思います。
早速の報告です。「Engage Errands 」→ありがとうございます。デフォルト設定で動きました! ※ROMはMXのものです。
このソフト、unzで起動はするもののマウスカーソルが表示されずゲームがスタートできない状態でした。ただし実機のV-TOWNSでも同様の現象なのでunz固有の問題というわけでもないかも?
今後は確認結果をこの掲示板やX(https://twitter.com/fmtownsworld)に投稿します(予定・・・)
TOWNS専用タイトル約1500本のうち確実にunzで起動/動作しないものは50~100本ほどと思います。(本数が曖昧なのは現物がなく試せないものがあるため)
unzの動作結果については私のサイト(http://fmtowns.fanweb.jp/)にまとめています。
2023-09-10 17:09:22
直前の投稿でURLのリンクがエラーに(ここの仕様を理解してませんでした。。。すみません)
以下、改めて
X:
https://twitter.com/fmtownsworld
私のサイト:
http://fmtowns.fanweb.jp
これだけだとあれなので、もう1本確認結果を
「CITY LIGHTS」→動きませんでした。起動時にMIDIカードをチェックしていてそこでひっかかっている模様。(実機なら起動だけはする)
2023-09-10 17:34:59
千尋さん、ご無沙汰してます!動作確認ありがとうございます!
City Lightsは、貴重品っぽいですね。MIDI関係は、実機を使っていた当時もMIDI機材は持ってなかったもので、そこでひっかかられるとつらいのですが、最近RS232CをTCP/IPにリダイレクトする機能を追加したので、誰かRS-MIDIのエミュレータとか作ってくれないかという他力本願なことを考えてます。もしもMIDIで止まっているとしてRS-MIDI対応であればそれが実現したら動くかもしれないですね。
MIDIカードのI/Oの情報があればせめてMIDIカード無し、という情報を返すようにしたいところですが、どこかに情報ありますかね?そういえば、同様の問題としてはLANカードのI/Oがわからないというのがありますが。
2023-09-11 04:07:50
山川機長さん
コメントありがとうございます。I/Oに詳しい方の登場に期待しつつ・・・少し補足情報です。
このソフトは同じメーカーのシリーズで5~6本あり、内部的には2種類に大別できます。
401のMIDIカードのみ対応のものと、402/403のMIDIカードにも対応しているものになります。
前者はTsugaruでメニュー画面まで表示されそこでハングアップ。後者はメニュー画面がでる前にチェックされてブラックアウトします。
なお、この結果はMIDIに対応しているはずのUnzでも同様の結果でした。原因の切り分けが難しいですね。
2023-09-11 22:03:13
手持ちのタイトルでMIDI対応の物はジェノサイドスクェアとF-BASIC 386 V2.1 L20しかパッと思いつきませんが、
おそらく拡張スロットのI/Oポートと思われる範囲でデバッグ(BRKON IOR 0E00 0FFF)したところ
ジェノサイド スクェアで0x0E51というところが読み込まれるようで、これを0を返すように変更したところ今までMIDIの項目で選んでもすぐ「OFF」に切り替わってしまっていた「BORAD」(拡張スロット?)が選択可能となりました。
ただし、MIDI BOARDを選択したままゲームを開始するとMIDIからの返答がないためかゲームが開始されませんでした。
F-BASICの方は起動時に0x0E51のほかに0E59・0E61・0E69・0E71というポートにも読み書きが発生していましたが、これはFMT-402/403で追加された部分ですかね。
現状でも一応はMIDIカード無し(ポート0E51の値はFF)となるような形になっているようなのですがチェック方法は何か特殊なんでしょうか。
2023-09-12 02:33:05
もう1タイトル、動きました。
ASKA BASE
Unzではタイトル画面でハングしていましたが、津軽では問題なく起動しました!
2023-09-15 21:45:38
Linuxのソースにmidi.cなるMIDIドライバがありました。
TOWNSってMIDIボード4枚刺しまで対応しているぽいですね。
0E59・0E61・0E69・が増設分
0E71はMIDI受信割り込みマスクらしいです。
シリアルチップを初期化→FIFOをON→シリアルチップのコマンドレジスタを読んで、これがFFでなければMIDIボードありの判定をしているような印象です。
「CITY LIGHTS」が起動しない原因は何でしょうね。
MIDIカード無しを返す場合は、ボードが無ければ0E51はFFとの事ですし問題無さそうな気がします。
ディスカバリーのミラージュですと設定画面で401、402の切り替えが出来たと思います。
401、402って2chシリアルぽいのですが、これ一枚でSC-88の64音に対応出来たのでしょうか。
2023-09-16 10:15:42
しまった、またFirefoxから書き込んで、書いた内容が消えてしまった。。。。仕事関係はChrome、それ以外はFirefoxという使い分けをしてたんですが、最近ここにFirefoxから書くと無視される現象が発生してるんですが、うちだけですかね?
なお、津軽を結構大規模に改造して、ときどきサウンドバッファがアンダーランしてノイズが聞こえる現象に決着をつけるべく、入力+画面描画を別スレッドに分けました。これにより、ウィンドウ動かしてる最中とかでも音楽が鳴り続けるとかいう副産物ができたり、あとCDDAもストリームにせざるを得なかったので、今までCDを最初から最後まで再生させようとか思ったらオーディオバッファの都合で途中で止まってたものが、全部流れるようになったりしました。
最初からそうすればいいのに、と思われそうですが、OpenGL使ってる都合で、ちょっと苦戦しましたね。OSごとにこの部分別々にコード書きたくなかったもので。でも、これでどう切り分ければいいのか大体わかったから陸奥も同じ手でマルチスレッド化しよう。
一応、自動テストは全部通過して、M1 MacBook Airでも短時間ですが問題なく動作することを確認したのですが、結構大改造だったもんで、他力本願で申し訳ないのですが、ソースからビルドできる方でお時間がありましたら、最新版ソースをビルドしていくつかテストしていただけると非常にありがたいです。
2023-09-18 09:26:10
最新ソースを試してみましたが、フレームレートが大幅に下がったようで画面の更新がかなりカクカクしています。
2023-09-18 15:44:11
動作報告(と、以前の報告のアップデート)
・魔彩子雀 → 動作せず(Unzと同じ現象) ※FD版ソフト
タイトル画面でメニューはでるもののゲームスタートボタンが押せない(無反応)
ただし、同じメニュー内の終了ボタンだけは押せるので、もしかしてプロテクト?
・CITY LIGHTS → 改めてテストしたところMIDIカードチェックはしていたようです。(メッセージが速くて見えなかった。「FMTボードがありません」のようなメッセージが一瞬出てそのままブラックアウトしますのでMIDIカードチェックではないかと思います)
2023-09-18 16:55:34
BCCさん、
なんと。フレームレート下がりましたか??かなり落ちたのは、60fpsが30fpsになったとかいうレベルでなく10fpsとかぐらいになってますか?
従来版だと新しい画面イメージができるたびに強制的に描画していたものが、今のバージョンではWindow Threadが約1/60ごとにその時点の最新の画面イメージを描画するように変えたのですが、カクカクするということは、多分その1/60のはずがもっと遅くなってるっぽいですね。最新の画面更新のタイミング取りをbusy waitにするという手もあるにはあるのですが。現在、描画回りは、VMスレッドがレンダリングスレッドにVRAMを渡して、その後VMスレッドがイメージができたことを確認してWindowスレッドにイメージを渡すというまわりくどいことをやっているので、Window Threadが分かれた今となっては、VRAMをWindow Threadに投げてあとは放っておくように書き換えた方がすっきりするので、まずそっちをやってみます。
2023-09-19 01:27:41
山川機長さん
ちゃんとフレームレートを図ったわけではないですが、15fps以下になっている印象でした。ゲームだけでなくTMENUのマウスカーソルの動きすら目に見えて遅い。
ちょっと調べた感じでは、main_cui\main.cppやmain_gui\runvm.hのrun関数内で
while(true!=window.CheckVMClosed())
{
window.Interval();
auto t=std::chrono::high_resolution_clock::now();
auto dt=t-t0;
if(16<=std::chrono::duration_cast<std::chrono::milliseconds>(dt).count())
{
window.Render(true);
t0=t;
}
std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
となっているところを
if(16<=std::chrono::duration_cast<std::chrono::milliseconds>(dt).count())
{
window.Render(true);
t0=t;
std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
とif内にsleepを移したところフレームレートが向上しました。ただ、まだこの状態でもカクツキが見受けられます。
CD-DA再生時のフリーズ現象はなくなったようなのですが、バックグラウンドで別アプリを動かしている時などには音が歪む現象はそのままでした。
2023-09-19 02:18:46
実験していただきありがとうございます!Windowsだと、std::this_thread::sleep_forがどんなに短い時間を指定しても16msは寝てしまうという問題があるので、試しにそのsleepを消してしまったら変わりますかね?
2023-09-19 03:23:38
sleep_forそのものを消してしまうと動作速度そのものがかなり遅い状態となってしまい余計悪化してしまいました。
Windowsのsleepの精度はtimeBeginPeriod()を使うと2msまでは向上するというのを見つけたのですが役に立ちませんかね。他のエミュのコードでもタイマ精度を上げるために使用されてるものです。
時間がある時に効果があるか自分でも試してみます。
https://qiita.com/Ocean0000/items/eda88323e568ddbd13bc
2023-09-19 08:41:08
おおなるほど。そんな関数があったとは。さすがです!"Windows sleep less than 10 ms"みたいなキーワードで検索しても、そんな方法は無い、としか出てきませんでした。
なお、timeBeginPeriodを使うようにして、レンダリングもWindowスレッドにさせるようにしたソースをPUSHしたので、よかったらお試しください。
バックグランドが重くなって津軽のスレッドがある程度以上のスピードで走らなくなるとどうしても音が切れる現象は発生してしまいますが、スレッドがふたつ全力で走れる状態であれば音がプチプチ途切れる現象は無くなるはずなのですが。
2023-09-19 11:49:36
千尋さん、
動作確認ありがとうございます!しかし、どちらもなかなか入手が難しそうなタイトルですね。魔彩子雀ですが、もしもコピープロテクトだとすると、まだ原本ディスクが生きていればFM TOWNS実機でFDDUMP (https://github.com/captainys/FM/tree/master/TOWNS/FDDUMP/exe) を使って.RDD形式イメージにするととりあえずMB8877 FDCで取れる情報はすべて取ってくるので通過すると思うのですが。今のところTOWNSで確認できているプロテクトは、D77形式で再現できないものは見つかっていないので、これも同じであればKryoFluxとかPaulineとかで取ってD77に変換したやつでも通ると思うのですが。
フロッピーディスクは劣化が困りますよね。古くならなくてもよく消えて泣いた記憶がありますね。TOWNSが登場したとき、他人がCD-ROMは書き込めないから意味が無い、などと言ってるのを聞いて、うっかり書き込んで消してしまう心配もなくて、しかもほっといても劣化しないなんて、なんてすごいメディアなんだ!と、思った少数派でしたが。ディスクやテープが劣化して何度も泣いた結果、いつも最低三重にバックアップ取ってないと不安で眠れなくなってしまって、ここ20年以上、一日分以上の作業を失ったことがありません。
2023-09-19 21:47:02
PUSHされたコードで試したところまだややカクツキがある(旧verと比較)ようですが大分改善されました。1スレッドのCPU使用率が100%で張り付いてしまう問題も解決しているようです。ありがとうございます。
timeBeginPeriod・timeEndPeriodをコメントアウトして試したところ前と同じ状態になったので、これを使えば問題なくsleepの精度が向上しているようです。
スレッド処理の話は一旦おいて実装されていないFPU命令の動作報告ですが、
フリコレ11に収録されているDNA Duplication、Tiny Radio Control、Srf View、Terrain Walk Demosのデモ類のWindows 3.1版がFST STi、FSUBR ST STi、FDIV ST STiの3命令を使用(Pullリクエスト済み)
Another TownsのCDに収録されていたTOWNS版午後のこ~だ(MP3デコーダ)がFADD STi ST、FLDLG2、FMUL STi ST、FFREEの4命令を使用しているようです。
2023-09-19 22:59:33
確認ありがとうございます!しかし、まだややカクツキがあるんですね。フレームレートが落ちたときの感じですが、VMは本来の速度で走っているものの、画面の更新頻度だけ落ちてる感じですか?それともVMごと速度が落ちてる感じですか?VM threadとWindow thread間でstd::mutexを使ってロックをかけてますが、ロックがかかってる時間をできる限り短くしたつもりなのでこれによってラグが発生することは無いだろうと甘く見ていたのですが。
謎なのが、Super大戦略起動時、BGMが鳴り始めた後でディスクアクセスが入ったときBGMが(実機でも)一瞬間延びする現象がありますが、マルチスレッド化する前は津軽上でも発生していたのですが、マルチスレッドにしたら発生しなくなってしまいましたね。あとStrike Commanderでブラックアウトをオンにした状態で強いGをかける、またはグレアをオンにした状態で太陽の方に機首を向けるとBGMが遅くなる現象に気が付いたのですが、これは実機でも起きていたものかどうか。
なお、一か所ロックが正しくなかったところを修正して、ループあたりのロックの回数を減らしたバージョンをPUSHしたのですが、これで改善してないですかね?
FPUの件もありがとうございます!確認してみます。
2023-09-20 01:23:16
山川機長さん
ロック修正では変化が見受けられませんでしたが、最新のnewImageRenderedフラグ追加でマルチスレッド化以前に近いフレームレートになったようです。
2023-09-20 18:53:31
山川機長さん
>まだ原本ディスクが生きていればFM TOWNS実機でFDDUMP~
アドバイスありがとうございます。原本は実家にあるので回収できたら試してみます。
湿度に注意して保管しているので前回(数年前)見たときはカビはありませんでした。いまも読めるといいのですが。
フロッピーに比べると適当に保管しているCD-ROMですが、幸いは読めなくなったものは今のところ1枚もありません。
ただ、媒体より先にTOWNS実機が壊れました・・・。
2023-09-24 11:54:07
山川機長さん
ちょっと時間が空いてしまいましたが、UNZで動かないソフトを試してみました。
「ドライブシミュレーターHOME NAVI」 です。(ゼンリンのカーナビCDをTOWNS上で表示するためのソフト)
アプリ自体は起動するのですが画面が出ません。症状としてはナビCDを読みだせないようで、UNZも同じ現象でした。
以前どこかのレビュー(たぶんOh!誌)記事に「このソフトは特殊なCDアクセスを行っている」とあったのでそれが原因なのかもしれません。
2023-11-04 09:45:55
おおなるほど。ドライブシミュレータも、なかなか入手が難しいやつですね。ちょっと対応は難しい鴨しれないですね。
でも、貴重な情報をありがとうございます!
2023-11-06 06:56:08
山川機長さん
コメントありがとうございます。いまさら古いナビのソフトに需要はないと思うので、単なる参考情報でした。
CDが読めないという意味では「DATA TOWNSMAN」(SONYの電子ブックEB規格のCDを表示するためのソフト)
これも同じ症状でアプリは起動してもCDを読むことができません。UNZも同様です。
もちろん実機では正常にCDを読めるので、やはり特殊なアクセス方式なんでしょうかね。
2023-11-06 22:33:59
はじめまして。
ソフト「プリンセスメーカー2」なのですが、新作「プリンセスメーカー2 リジェネレーション」が発売になるので、プレイしたいと思い昔のバージョンVer.2020_10_21では問題なく動いてくれます。(作者様感謝です。) 久しぶりに最新バージョンVer.2023_09_13で起動してみたら名前入力画面から音が飛び(ぶ?)ます。設定等があるのでしょうか?教えて下さるとありがたいです。m(__)m。タウンズは亡き父が所有していたので私は詳しくないのですみません。
2023-11-20 20:41:26
>プリンセスメーカー2
自分が確認した限りではVer.2023_09_13でも、最新ソースからコンパイルしたものでも音飛びなどは発生しませんでした。
津軽以外にアプリを起動している場合は全て終了しておく、CPU Speed(FREQ)を16程度まで下げてみる等は試しましたか?
2023-11-20 21:25:51
おおなるほど!プリンセスメーカー2ってリメイクされるんですね!
すでにBCCさんがコメントされている通りですが、CPU速度を下げると音が飛びにくくなる傾向があります。それから、うちの環境ではDOSBoxを起動してると音が飛びやすくなるような傾向があるので、多分ほかにも相性の悪いソフトはあると思うので、他のプログラムをクローズしてみてください。津軽は速いCPUにべったり依存してしまっているもので。
また、最近オーディオの再生方法を大規模に変更したので、以前のバージョンと音が飛ぶ条件に変化はある鴨しれません。一応、以前に比べると飛びにくいはずなのですが、CPUコア数が少ないやつだとかえって飛びやすくなった可能性もあります。
2023-11-21 02:46:08
あ、そうか。オーディオ再生方法変更してからまだリリースしてなかったような気がしてきたから、ぼちぼちリリース作った方がいいのか。
2023-11-21 02:49:22
BCC ID:zNDIzYzZk様
山川機長 ID:3ODc2ZmE4様
とりあえず時間を見てアドバイス頂いたようにCPU Speedを16にして起動。再起動して他のアプリを一度も起動させていない状態で起動。
どちらもプリンセスメーカー2の音飛びとオープニングデモがカクカク起動。ドラゴンスレイヤー英雄伝説も音飛び。麻雀美少女伝リップル=音楽がずれる、ゲームが遅い。
(Ver.2023_09_13で動いていたソフト)
プリンセスメーカー2では以下の通りでございます。(同じ条件でも起動画面まで最新のものの方が遅い気がします。)
Ver.2022_01_17 OK
Ver.2022_09_24 NO
起動実験時間が空いたらまたやって報告いたします。
2023-11-21 13:02:37
お世話になります。
とりあえず色々ド素人知識で試しましたが、音飛び、ゲームの動きが遅い等・・・、がVer.2022_03_30~Ver.2023_09_13で症状が出ます。
TownsOS_V2.1_L51を再インストールし直し、CDプレイヤーでCDを聞いてみたら異常ありませんでした。
2023-11-21 19:52:48
m(__)m申し訳ございませんでした。
直近でRevo Uninstallerというレジストリ(?)までクリーニングするアプリでアンイストールを多数したので
これで余計なものまで削除してしまったかなと思い、システムの復元を11月13日までしてみたら、この素晴らしい
アプリ「津軽」が復活しました。(windows11のシステムの復元は評判悪いのであまり使いたくなく最終手段でした。)
音がおかしいのも動作が遅いのも治りました。これからはコントロールパネルからアンインストールしたいと思います。
治そうと考えヒントがないかと、昨日から作者様のホームページとこのサイトの掲示板を読みインターネット等で調べ一つ
わかった事がございます。作者様が中心になって皆さんの力で作成しているエミュレーターなんだという事を!
本当にありがとうございますm(__)m ご迷惑をおかけしました。m(__)m
これからも宜しくお願い致しますm(__)m
2023-11-22 15:23:17
直って良かったです!
なお、リリース出しました。前回のリリースと比べて音がブツブツ切れる現象は大幅に改善しているはずです。よかったらお試しください。
2023-11-26 03:53:54
リリースありがとうございます。
私の所ではどうだろうとプリンセスメーカー2で確認したところ、
2023_11_24版では特に問題ありませんでした。
一つ前の2023_09_13版では、ずっとプツプツプツ・・・とほぼ一定周期のノイズ音が鳴りまして、
CPUクロックを下げるとプツプツの間隔が長くなり、上げると間隔が短くなり、66HMzまで上げると連打音みたいになります。
CPUは第3世代のCOREi3です。
2023-11-26 20:38:20
山川機長様
ありがとうございますm(__)m。ご迷惑をお掛け致しました。お騒がせしてすみませんでした。
新リリースありがとうございます!
ソフトはまだまだありますのでこれからもご報告させていただきます。
2023-12-01 14:06:51
Rocket Rangerのセリフがなぜ正しく再生されないのか解明できたので、いつかクリアしたいと思っていたRocket Rangerを今ならステートセーブの力でクリアできるだろう、と、思ったら、
第二章に入って、博士とジェーンを救出に向かって捕まったところのムービーが途中で終わってしまって、無視して進めると第三章に進むことができるのですが、次のイベントムービーが捕まったところのムービーをまた再生してしまって、感じとしてこのまま進めてもクリアできなさそうな状況になってしまったのですが、誰か実機でクリアした人います?
一応念のためメモリ16MB積んでるとおかしくなる可能性を考えて、2MBで再開して、今度は原因を究明すべく解析しながら進めてますが、実機で果たして捕まったとこのムービーは正しく再生されるのか、次のムービーに進むことができるのか、あるいは486だと動かないとか何か情報ありますかね? 実機でやったときは離陸があまりにも難しくてアメリカに戻るたびに2か月ずつ浪費してほとんど先に進めなかったもんで。(当時、ものすごく期待して買ったのに、あまりの難しさにものすごくがっかりした記憶がある。)
Amiga版のプレイ動画(https://www.youtube.com/watch?v=m75x4iNhTB0) を見ると、TOWNS版はストーリーが微妙に違ってAmiga版には無いシーンが追加されてるようですね。止まってるのはこの追加されたムービーシーンのようです。
2024-04-04 01:24:15
>378 山川機長さん
Rocket Rangerですが、過去に実機でクリアしました。
その当時特に困った状況になった覚えも有りませんので何事も無くクリアできたことは事実です。ただし、当時は恐らくmodel2でしたがMXやHCでクリアした覚えは無いので、486だとどうかは不明です。
時代背景が好きなので何度もクリアしましたが、今度HCや津軽でやってみます。
このゲーム、今居る場所から行きたい都市までの燃料計算に付属の計算尺(と言うほどの物でも無い)が必要なので、ある意味物理的なコピープロテクトが有るのが特徴ですね。
ゲーム自体はミニゲームの集まりなのですが、仰る通り離陸がネックで、私も慣れるまでは何度もずっこけた記憶があります。
2024-04-04 09:14:39
すごい!ロケットレンジャーを実機でクリアできる人がいたとは!これ、離陸さえできればあとはなんとかできそうな気がするのですが。Fort Dixからの離陸がどうしてもうまくいかないんですよ。というかステートセーブできるんだから練習したらうまくなるだろうか。
しかし、これ、多分バグですね。捕まって尋問されるシーンで正しい受け答えをしないとCL=0でルーチンを抜けてしまうのですが、そうすると何の説明も無くスカンジナビア半島から再開してしまうのですが、正しい受け答え、
彼女に手を触れるな→やめてくれ、話す!→縄を解いてくれ、そうしたら話す
これを選ぶと、イベント続行になりました。
解析したらCL=0以外の場合続行することがわかって、ひょっとしてCL!=0で出てくるパターンがあるかと思って調べたらあっさり見つかりました。正しい受け答え以外出荷前に誰もテストしなかったというパターンだろうか。この部分、CL=0で出てくるののは誤りなのでパッチ当ててデバッグしようと思ったらデバッグできるから、大航海時代みたいに津軽のapplication specific augmentationでバグ取ってやろうかな。
2024-04-04 10:13:43
ロケットレンジャー (ステートセーブしまくりで) クリア確認できました!
なお、問題のイベントシーンは放置してもその後ロケット部品をすべて集めれば普通に先に進んだかもしれません。ステート保存してあるのでいろいろやってみます。多分、選択を間違うと本当はゲームオーバーに移行するはずが、バグって間違ったステートに移行してしまったのではないかと見ています。
2024-04-04 21:14:06
DUNGEON MASTERシリーズについて書き込みます。うんずでDM1、続DMカオス、DMIIスカルキープとも動作するのですが矢印キーが反応しない、CD-DAが再生されない・・・と今一つだと思っているところで津軽を見つけました。情報交換の板の説明通り、最新の20240223をダウンロードし、ROMはうんずから移植、CMOS.DATも移植と準備をしました。DM1は問題なく動くのですが、続DMカオス、DMIIともシステムエラー(システムが入っていない?)といったエラーがでて始まりません。津軽はHDDにシステムをインストールするなどしないといけないといったことがあるのでしょうか?それともうんずでは最初からできている設定が、津軽では自分でやらないといけないなどあるのでしょうか?別のHPでそれぞれ動作確認されているのは見ました。
2024-05-02 13:06:53
DM2は持ってないのでわかりませんが、カオスの逆襲はgithub上の互換BIOS使用、津軽は20240223および最新ソースからコンパイルしたもので問題なく起動しました。設定もGUI版でBootタブにてCD、あとはCDイメージを選択しただけで特別なことはしていないはずです。
イメージ化に失敗している可能性があるのでCD Manipulatorを使用し、「正しいTOCとギャップ位置の取得」にチェックを入れて読みこんでみてください。
2024-05-02 13:35:30
CMOS.DATも移植したということですが、念のためこれも一度削除して初期化したほうがいいと思います。
2024-05-02 13:39:12
早速ご教授頂きありがとうございます。ROMをGit Hub互換のものに変えてCDからのBootを選択、ディスクイメージは改めてCD Manipulatorで作り直しました。これで続DMカオスはきちんと動作しました。一方DMIIはタイトルまでは良かったのですが、その後の「New、Resume、Quit」の「New」を選ぶと「SYSTEM ERROR 50」というエラーが出て止まってしまいました。悩んだ末にROMを再度うんずから移植し直したところこちらもきちんと動作しました!おかげさまで無事にダンジョンで迷うことができそうです。
2024-05-02 14:59:39
Samurai Spirits津軽で試した人いますか?普通に起動するじゃん、と思っていたら、途中から画面が崩れて、ざっと調べたところSPENが頻繁にOn/Offしていて、SPENの動作を追ったらVSYNC割り込み内でOn、割り込み終了後どこかのタイミングでOffという怪しい動きをしていて、現在ここで調査が止まってますが、スプライトが何枚描画されたところで止まったのか計算して正確に再現しないとだめか、、、、という予感がしてるんですが。(ひょっとすると画面クリアまでやらせてるだけ鴨しれない)
2024-08-08 23:44:35
SPEN=1でVSYNCを迎えてビジー(スプライト描画中)になれば、途中でSPEN=0にしても指定個数を全て描き終えるまではビジーです
もしDP(スプライト停止時の表示ページの切り替え)も変更しているならなかなか厄介ですが、どんな具合でしょうか…
2024-08-09 04:57:10
pinさん、いつもヒントをありがとうございます!
原因は、Samurai SpiritsはSPENを0にするとき、一緒に表示枚数をコントロールするIND9-0をクリアしていたのが原因でした。津軽は実機のようにインクリメンタルにスプライトを描画せずに、一気に描画してしまうので、描画タイミング(Sprite BUSY->READYに切り替わる、またはSprite BUSYの状態でSPENをゼロにする)でIND9-0がゼロだと1024枚描画してしまっていたのですが、本来はスプライトBUSYになったタイミングでのIND9-0の値が表示枚数をコントロールするので、差が発生していました。そこで、IND9-0をSpriteがBUSYになるタイミングでキャプチャするように変更して問題解決しました。最新版ソースだとSamurai Spiritsも正常動作すると思います。
2024-08-09 10:49:39
最新ソースを試したところ、サムライスピリッツのオープニングで花びらが画面上に残り続ける問題は修正されたようですが、今度はデスブレイドでキャラクターがチラついて表示される不具合が発生してしまっているようです。
2024-08-10 01:58:30
https://www.youtube.com/watch?v=FrX65IFsOos&t=256s
同チャンネルの近い時期の投稿に実機のメンテ動画があるので、おそらくこれも実機で動かしてのレビューですが
"first of all, the character sprites flicker quite a lot." とのことですので、
ある程度のチラつきは実機通りではないでしょうか。(あるいは津軽のそれはプレイに支障をきたすレベルのチラつきでしょうか?)
2024-08-10 03:53:25
>pinさん
支障とまでは言えないですが、その動画よりチラついている印象です。動画中のキャラと同一にしても常時体上部に欠けるスプライトがある。ただ前バージョンはチラつきしなさすぎたのでこっちのほうが実機に近いかもしれません(普通に表示されていたというのは記憶違いだったか)。
2024-08-10 09:02:45
うーん、Death Bladeは難しいですね。見たところ、 VSYNC待ち→なんかちょっと処理→スプライト枚数設定 とやっているようなので、ばっちりSprite Busyなタイミングで枚数設定をしてますね。多分スプライト表示枚数の設定(IND9-0)は画面消去中に間に合えば良いのかもしれません。ときどきチラつくのはおそらくときどき間に合ってないからで。という仮説のもと、スプライト画面消去完了のタイミングで表示枚数をキャプチャするように変更してみたのですが、そうすると今度はSamurai Spiritsがまた壊れました。とりあえず、ちらつきを防止するには、スプライト終了のタイミングでIND9-0を再キャプチャすればいいので、そのような修正を入れたのをPUSHしましたが、Death Bladeを実機に忠実にチラつかせるのは難しいようです。
2024-08-11 21:35:38
素晴らしいアプリケーションを作成して頂き、ありがとうございます。
ROM dirに漢字があるとSTARTさせた時にアプリケーションがクラッシュします。パスを英数字だけにすると落ちないので解決策はありますが、何かのタイミングで修正して頂けると幸いです。
2024-09-03 16:26:57
山川機長さん
>まだ原本ディスクが生きていればFM TOWNS実機でFDDUMP~
→だいぶ長く(約1年)かかってしまいましたが、やっと原本ディスクを回収できました。
早速実機でFDDUMPを試したところ、FDDUMP自体が正常に動作せずイメージ化できませんでした。
症状としてはFDDUMPのコマンドを叩いたあと、FDランプ点きっぱなしでそのまま先に進まない。というものです。
ハードウェアとしては実機のモデルMFにSCSIのMOを接続し、そこを出力先に指定しています。
FDはノンプロテクトの適当なブランクディスクで、DOS単独起動とT-MENUのコンソールの両方で試しましたがどちらも同じ結果でした。
パラメータはあっていると思うので、FDDがハードウェア的に逝ってしまっている可能性もあり、まずはクリーニングしてみます。
2024-10-06 23:55:03
すみません、最近互換TOWNS OS書いててこっち見るの忘れてました。なお、互換TOWNS OS、Discordの方でBCCさんと盛り上がってるんですが、既にVSGP, SkyDuel, Panic Ball 2, Alltynexなどフリーソフトに加えて、Afterburner 2とGalaxy Forceまで動くようになってます。なお、こちらです。 https://github.com/captainys/FreeTOWNSOS
nonameさん、
漢字ファイル名でクラッシュしましたか。うーん、多分システムエンコーディングをUTF-8にするとクラッシュしないと思うんですが、日本で売ってるWindowsだとまだデフォルトShift-JISなんでしょうか? 多分、いずれデフォルトUTF-8になる日が来ると思うので、とりあえず様子見てます。
千尋さん、
そうですか。MFであればFDDUMP動作しそうですね。うまく読めるといいのですが。出力先がMOなのは問題ないと思うんですが。続報お待ちしてます。
2024-10-26 12:06:46