他愛もないない事から、悩み事までなんでもお書きください。
では、手始めに私の困ったことから。
我が家のTowns・・・ モデル2FとMXとHC(MXは実家に置き去りにしていますので手元には無い)ですが、MXとHCはCD-ROMが弱っているようでCD-Rが読めなかったり、
特定のCD-ROMから起動できなかったり・・・・ FDDはメディアが悪いのか,安定しない状態です。
かといってSCSIのCD-ROMドライブを持っている訳でも無いので、Windowsとのデータのやり取りに苦慮する場面がチラホラとあります。
真剣に内蔵CD-ROMを何とかする手だてを考えないといけないのだろうか・・・・ みなさんのTownsの状況は如何ですか?
2020-07-29 10:03:48
>195 りうさん
なんだか言わせてしまった感が拭えませんが、そう言って頂けると助かります。
何せ学生時代に情報を学んだ人間なのですが、その時代の「情報」は主にCOBOLとFORTRANだったのでCは未だに習得できずにいます。(記号と括弧だらけなのと言語としての自由度が逆に縛りのきつい言語から入った人間としては障壁になっています)
>196 山川機長さん
「穴があったら入ってみたい」「橋があったらくぐりたい」・・・・解るような気がします。私の場合は、それに加えて「成層圏へ行きたい」も加わります。
最近ではGTAでミッションを忘れてひたすら色々な乗り物で橋の下を通過した覚えが有ります。
2020-12-28 09:59:04
Strike Commanderですが、飛行中、WORD PTR CS:[D15D6]の値を書き換えてBGMを切り替えることができることが判明しました。Strike Commander PlusだとDS:[D5182]ですね。飛行開始して離陸待ちのタイミングで使うとゆっくり再生できますね。曲の中には、曲と曲の間のつなぎなのでフルに再生されないものがあるので、いくつかの曲はこれで通して聴くことができました。なお、この場所はMUSICをオフにした状態で書き込んでも割り込み処理ルーチンがピックアップして再生を始めます。おもしろいのは、10H,11H,12H,13Hに関しては再生後、直前に再生していた曲にスムーズに接続します。Strike CommanderはBGMのトランジションが非常によくできていました。
また、
000C:0006B60D 6A19 PUSH DWORD PTR 19H
この19HがEvent-ModeのMusic ID(In-Flightと別)で、この値(000C:6B60E)を書き換えてからView Objectsを選ぶと任意のイベントモード使用曲を再生できます。0~1Cまで曲が入っているようです。
Strike CommanderはBGMをキャプチャしたものとされるMIDIファイルが出回っていますが、その最初の曲が名曲なのですが、どう探しても入ってないという謎が残ってます。この曲はファンが作曲したものかもしれません。
また、Strike Commander Plusのオープニングは、第三の音楽再生ルーチンを使っているようで、別データになっているようです。が、PlusのオープニングはStrike Commanderの世界観とぜんぜん合ってなくて、いまいち好きじゃない人が多いのではないかと思うんですがね。Strike Commander無印(区別するためにStrike Commander Minusと呼んではどうかと一瞬思ったけど、やっぱりやめた)のオープニングは名曲と思います。
これ、いずれ.VGM形式のキャプチャができるようにしようと思っていて、その準備で解析しました。
2020-12-28 11:19:46
>197 WINDYさん
いえ、大元のRTC(1999年12月中旬頃)ではもともとそのような趣旨で発言していたので、恐縮されなくてもいいです。
…今日はそれだけ?(汁
2020-12-28 12:55:13
今年は津軽開発で大変お世話になりました。最初の1行目を書いたのは今年の1月17日で、始めたときは本当にTowns OSを起動することができるのだろうか?自分にエミュレータが書けるのだろうか?と思いながら始めたレベルなのに、まさか年内にここまで進むとは思いませんでした。自分の予想では今年中にAfterburnerが動くぐらいまで進めば大成功と思っていたので、まさかWing Commander 1/2、Strike Commander 無印/Plus、Super大戦略がクリア確認できて実機動態保存用IPLまで作れるとは。
WINDYさんにWikiと掲示板をセットアップしていただいてから開発が加速したように思います。多数のソフトウェアをテストしていただき、動作しないタイトルを迅速に特定できたことが開発の加速につながりました。また、こちらでテストできない件に関してテストプログラムを実行していただいたり、詳細な技術情報を提供していただいたことも大きかったですね。非常に助かりました。ありがとうございました。
シャープがX68000で究極の68000搭載ホビーパソコンを開発しようとしていたとき、NECがPC-9801でホビーパソコンを開発しなかったとき、富士通は究極の80386搭載ホビーパソコンを開発しようとしたことを世界に誇るべきだと思います。その足跡を残して世界に伝えることに自分なりの貢献ができたかと思っています。
この先エミュレーションを実機に近づける他にも、高速化、実機CD-ROMコネクタの信号の解明、また互換MSDOS.SYS開発などやったら楽しそうなプロジェクトはたくさん残っています。引き続きよろしくお願いいたします。
2020-12-31 08:44:39
こちらこそ‼️
2020-12-31 13:45:08
大晦日ですが、Towns実機を使ってD77形式ファイルを作れるようにしてみました。
プログラムは、https://github.com/captainys/FM/tree/master/TOWNS/MAKED77/EXE ここにあります。
run386 -nocrt MAKED77.EXP a: 1232kb -out disk.d77
みたいな感じで使います。1232kbは640kb, 720kb, 320kb, 2D, 2DD, 2HD_1232 の中から選べます。1440KBは未対応です。というか、BIOSでどう設定していいかマニュアルに書いてないし。メディアタイプが合ってないとエラーが出ます。なお、-outの代わりに-38400bpsまたは-19200bpsを指定するとXMODEMで送信するのでハードディスクが無い場合でもRS232Cでつながっていればイメージ作成ができます。
また、-listonlyオプションと、-starttrk, -endtrkオプションを組み合わせて、
run386 -nocrt MAKED77.EXP a: 1232kb -listonly -starttrk 6 -endtrk 6
みたいにすると、セクタのCHRN表示だけしてイメージ作成はしません。
CRCエラーがあると3度までリトライして、それぞれのリトライ時の読み込み結果はすべてD77に記録します。イメージはいったんメモリに作成するため、メモリは最低4MB必要です。
ハードディスクがある場合はなるべくファイルにしてLHAとかで圧縮してPCに持っていくのがいいと思います。XMODEMで送るときはディスクサイズを128の整数倍に強制的に伸ばして送るので、後ろに00がひっついたD77になります。(最後1Fで埋めてもよかったけど万が一最後のセクタの最後のバイトが1Fだったらしくじる)。
くれぐれも、99%アルコールでカビ取りをしてから読むようにしてください。今ヘッドが汚れてしまうとヘッドクリーナーを探すのがひどく大変です。
とりあえず、試した感じではDinosaurは予想通りのプロテクトでした。二カ所ほどCRCエラーがあったようなのですが、リトライで成功していたので手作業でエラーがあったトライを消せば多分イメージ化に成功したと思います。が、手元の他のファルコムのディスクは普通の番号のセクタにもCRCエラー出まくりでちょっとイメージ化失敗したっぽいです。
もしも過去にメッセージを送れるならフロッピーディスクはすべて乾燥剤と一緒に保存しろとメッセージを送りたい。
良いお年をお迎えください!
2020-12-31 14:27:03
>200 山川機長さん
遅レスで申し訳ありません。
そうか、津軽の開発開始から約1年なんですね・・・ 流石としか言いようが無い速度と実績だと思います。
少しでもお役に立てて私も嬉しく思います。
私はTOWNSが発表になった時にCPUが68000でなかった事に落胆した"いけない子"でした。
X68000への憧れは全く有りませんでしたが、当時の"ワークステーション = CPUは68000"と言う世間の風評に影響されたものでしたが、結果としてはFJ2が80386を選択した事は間違いではなかったと思います。(当時のワークステーションが68000を使用していた理由がフラットで広大なメモリ領域を利用できる点である事などは当時は知りませんでしたので)
TOWNSはある意味で"最後のホビー用パーソナルコンピュータ"の1台だと思います。
実機CD-ROMコネクタの信号の解明は残された謎の中でも特にやりたいテーマではありますので、私に出来る事であれば是非協力させて頂きたく思いますので、こちらこそよろしくお願いします。
2021-01-02 22:26:56
喪中につき新年のあいさつを控えさせていただきますが、今年もよろしくお願いします。
この年末は、DINOSAURクリア確認しました!最初の城の地下までは自力でやったんですが、いったん力尽きました。攻略サイトがあってくれて助かりました。
http://tatanet.s16.xrea.com/dino/dino_index.html ここを参考にしました。しかし、1990年のRPGは容赦ないですね。エンカウントが多すぎて歩き回るだけでも一苦労で、何度も心が折れそうになりましたが。
しかし、DINOSAURは同じ場所でリターンキーを押しっぱなしにすると、勝手に戦闘が進むんですね。しかし、それだとある程度の回数繰り返すと止まってしまうようなのですが、しかし、キーボードをトランスレーションモードにすると、キーリリースも入るので、勝手に無限に戦闘が進むことに気が付いて、二晩ほど(一日目は地下神殿、二日目は城の3階)自動レベルアップさせたらおそるべきレベルに上がってました。が、それでもなお単独行動とか二人で行動のエリアは突破が大変だったので、やっぱ容赦ないですね。
クライマックスは、新たにD77化したプログラムディスクのトラック55、サイド0、セクタ3でCRCエラーが起きていたのですが、なんと!ちょうどエンディングに必要なデータだったらしく、エンディングが途中で止まって音楽だけ流れ続けるものの画面が真っ暗で焦ったのですが、以前のRAW Binaryを使ったらエンディングが見れました。無双レベルに上げてあったのでラスボス戦が余裕だったので二度目勝利するのは楽でしたね。
攻略サイト見たらエリスの眼は治せるんですね。攻略サイトの言うがままに進めたら泉がどこにあるかわからんかった。。。。
ということで、D77イメージを作ったら津軽はDINOSAUR完全対応してます!
2021-01-03 11:32:51
悪乗り(^_^;)
DINOSAURの自動レベルアップに味を占めたので、ユニットテスト用のイベントログ機能を拡張して、↓みたいなテキストを書いて、 LOADEVT file.txt でロードして、PLAYEVTで再生、STOPEVTで停止ができるように書き換えてます。
EVT KEYPRESS
KEY TOWNS_JISKEY_T
T 0ms
EVT KEYRELEASE
KEY TOWNS_JISKEY_T
T 20ms
EVT KEYPRESS
KEY TOWNS_JISKEY_RETURN
T 50ms
EVT KEYRELEASE
KEY TOWNS_JISKEY_RETURN
T 60ms
EVT REPEAT
現状の自動レベルアップは、リターンキーを物理的に押しっぱなしにする必要があったため、自動レベルアップ中他に何もできなくなってしまうという問題がありましたが、この機能を使うことでWebブラウズなど別のことをしながら背後でDINOSAURのレベルアップを進めることが可能になります。
2021-01-03 14:07:51
FMTowns新エミュレータ Tsugaruの情報交換用スレッドです。
Tsugaru : http://www.ysflight.com/FM/towns/Tsugaru/j.html
2020-07-28 12:41:40
FM音源のエミュレーションにかなり自信が出てきたので、Emerald DragonのBGMに「チリチリチリチリ」というノイズが出るのをなんとかしようとしてるのですが、、、、
XBOX Liveで録画したやつからMP3を抜き出したところ、MP3化でなまってしまうのではっきりとはわからないものの、どうやら20msのセグメントごとに最低でも2サンプル (2/44.1K秒=45us) 程度の隙間ができているらしいということがわかり、WAVE作成にどのぐらい時間がかかっているのか計ってみたら150~300us程度かかっていました。WAVE再生が終了してからWAVE作成していたので、45usをはるかに超える隙間がここで発生していたとわかったので(ということはDirectSoundは最後の100usぐらい残ってるのに終わったと言ってる?)、ここをダブルバッファにすればギャップを詰められるはず、と思ってやってみたけど、チリチリノイズが取れない。。。。
Strike CommanderもSuper大戦略もDinosaurのオープニングもそんなチリチリノイズは聞こえないのに、なぜだっ!?しかも、このギャップの出方はCPUのスピードを下げれば小さくなるはずなのに、4MHzまで下げても変わらんし。
Windowsだけで良ければStreaming Modeを使えば多分聞こえなくなるんですがね。macとLinuxも対応しておきたいし。並列化も考えたんですが、オーディオ関係はそのスレッドにまとめないと多分だめで、FMとPCMだけ別スレッドはできないと思うので、かなり複雑になるわりに得られるパフォーマンスは20000usに対して150~300us。2%にも満たない上にMutex Lockを使ったらもっとゲインは下がるはずなのでその意義は無さそうなのでやめました。エミュレータって並列化でパフォーマンス上げるの難しいですね。
2020-12-25 05:36:02
>118 山川機長さん
問題のチリチリ音ですが…FM音源だけの再生ならあまり気になりませんが、PCM音源も同時再生すると音色によっては確かに気になります。
その他、PCM音源のループ再生でチリチリ音が目立ったり(音声モードだとより顕著です)、音声モードの再生後等に本来無音であるべきところで謎の音(周波数が低めの矩形波っぽい?)が1~2秒間ほど発生し続ける、という現象も確認しました。
あと、現在の津軽弁の状況ですが、「誰得MSVディスク Vol.1」(仮称)収録予定のPSG物の発音がUnzに近い感じになっていて改善されていると感じました…が、MSVドライバでの再生中断で余計なRelease音が残ったり(しかも長め)、FM音源 Ch.3の効果音モードでよく使われるスロット単位でのKey On/Key OffやMSVドライバに搭載されている疑似リバーブ機能で使われているKey Off時にTotal Level(というか音色パラメータ全般?)の変更が反映されないっぽいなど、YM2612(or YM3438/YMF276-M/FH1024D)をTBIOS配下(レジスタへの直接アクセスは除きます)で使っている場合は全く問題にならなさそうな点ですが、まだまだ課題は多そうに感じます。まあ、FM音源 Ch.6のDACモードはそれほど重要ではないと思いますが…。
2020-12-27 14:56:54
Strike Commander Plusもクリア確認しました!
> りうさん
リリースが残る現象は僕もちょっと気になってました。Strike Commanderで着陸後、BGMが途切れた瞬間、トーンが残る感じで。Super大戦略の音を直したとき、前のトーンの途中で新しい音がKeyOnになった場合、前のトーンのレベルからエンベロープが始まってることに気づいたので、その修正を入れた後のように思います。スロット単位のKeyOn/Offはもう間もなく対応できるところに来ているので、そちらの方は間もなく対応してみます。(現在全部オンオフしか対応してない)。Ch.3の効果音モードも、F-NUMとBLOCKを別なとこから持ってくればいいだけのはずなので、対応してみます。DACモードは、ちょっと難しいかもしれないですが、DACモードって書き込んだ値がそのまま出力のボリュームになるのかな?
2020-12-28 02:22:50
>120 山川機長さん
Free386の386SX勝手対応やらメモリサイズ認識部分の書き直しやらなんやらで遅くなりましたが。
DACモードはレジスタ2BhのMSBでEnable/Disableが切り替わり(80hでEnable)、レジスタ2Ahに対して書き込まれた8bitデータが80hを±0として00h~7Fhはマイナス値、81h~FFhはプラス値として出力されるようです(何やらレジスタ2Chでビット数が拡張できそうな情報もありましたが)。
また、DACモードのPanpotはFM Ch.6のAlgorithm/Feedback情報が書かれているレジスタ1B6hの上位2bitで制御可能です。これはメガドライブ(Genesis)では当然のように使われた機能ですが、TOWNSで使われた例は片手で数えられそうなほどしかないのですが…。
2020-12-28 02:39:30
>りうさん
おおなるほど!GenesisのマニュアルはPDFが出回ってますが、PCMという記述があって、YM2612にPCMは無いんでないの?と、思っていたのですが、たしかZ80をYM制御専用にひとつ積んでたように思うので、このDACを使ってたんですかね。と、書き込む前に自分で読んでみろという感じですね。読んでみます。
あとチリチリノイズですが、確かに、言われてみるとPCMとFM両方使ってるときに出る気がしますね。ということは、実はDirect Soundでふたつのチャンネルを再生してるのが原因なのかな?だとすると1チャンネルにするとノイズは取れるのだろうか。
2020-12-28 11:03:51
>122 山川機長さん
メガドライブ(Genesis)の音周りの設計については、20年ほど前にXM7原作者のPI.さんのサイトにも載っていました。
YM2612のPCM(ただのDACモード?)はポーリングする必要があるため、メインCPUである68000での制御には向いていないので、Z80Aから制御した方が音質的にも有利です。ただ、実際のところ、メガドライブ(Genesis)でYM2612のPCMの性能をある程度活かせたソフトはあまりなかったりしますが(大抵は風邪声)。
2020-12-28 13:00:42
リリース出しました!FMとPCMをひとつのチャンネルにまとめたところ、Emerald Dragonで出ていたチキチキノイズが無くなりました。
> りうさん、
現在、一部スロットだけのOn/Off機能を追加してみて試しています。リリースが残る問題を調べているのですが、YM2612って強制的に音を止めるレジスタなんてありましたっけか、と、書いている途中でひょっとして発音途中にRRを書き換えてるとか?と、思ったので実装してみます。うーん、しかしリリースが残る問題は、僕の環境ではStrike Commanderで着陸後ぐらいしかこちらで出てないんですよね。仕方がない、もう一周飛ぶか!(喜んでる)
と、思って読み返してみたら、
Key Off時にTotal Level(というか音色パラメータ全般?)の変更が
ああ!これはKey 「On」時にTotal Levelを変更してるんですね!なんか脳内でつながりました。やってみます!
2020-12-30 07:38:53
Strike CommanderでReleaseが残る現象解明できました!着陸して停止すると、BGMを止めるためにまずキャリアスロットのTLを126にして、その後キーオフしてるんですね。まずKeyOnの状態でのTL、RRの書き換えに対応したのですが、それでもまだリリースが残り、なんでかと思ったら、TLを126にしてからキーオフの間に一度もWAV生成が無かったので、直前の出力がまだTL更新前の出力レベルを元にしていたもんで、大きな出力レベルからリリースが始まってしまっていました。厳密には正しくないのですが、リリースに入った段階で最後の出力レベルがピーク出力を上回っていた場合はピーク出力に丸めるようにしました。リリースが残る現象はこれで解決したと思います。あと、リバーブも対応できているのではないかと思います。しかし、案外みなさんLFOは使わないんですね。ソースは先ほどPUSHしました。
2020-12-30 10:58:38
すんません、リリースが残る問題、直ってませんでした。今PUSHしたソースだと本当に直ってると思います。Strike Commanderは修正前から着陸後に「ツーン」というトーンが残る場合と残らない場合があったので、昨日テストしたときはたまたま残らなくて直ったと思ってたみたいです。
2020-12-31 01:24:53
雑談スレッドでハードウェア解析や考察が話題となっていますが、個人的に別途スレッドを立てた方がよいと思ったので立てました。
強制はしませんが、今後のハードウェア解析や考察についてはこちらのスレッドで話題にしていただけると助かります。
2020-09-24 09:40:33
Super大戦略のイントロのBGMなのですが、いまいち音が弱い原因を探していたのですが、壁に当たってしまいました。以下のような設定なのですが、Slot 0のTLは33、Slot1,2のTLは42,36となっていて、これはdB Dropなので、数字が大きい方がAmplitudeは小さくなるはずです。ところが、XM7で同じ設定で音を出すと、Slot0のAmplitudeがSlot1,2よりもはるかに小さくなってしまいます。
試しに津軽弁でSlot0のTL=40としてみたところ、XM7とほぼ一致する波形が得られました。fmgenも津軽弁も1.0=8192のスケールで出しているようで、絶対値を比べても Slot1,2,3は津軽弁と一致しているのに、Slot0だけfmgenが出すAmplitudeは津軽弁が計算するAmplitudeのほぼ半分になってしまっています。何か思い当たることありますか?今fmgen.cppを読んでいるのですが、Slot0だけEnvelopeの計算に特殊なことをしているようでもないですし。多分向こう数日はこの問題で悩み続けそうな勢いなので、何か思いつく点がありましたら、よろしくお願いします。
CH:1 F_NUM= 1098 BLOCK=5 FB=7 CONNECT=2 L=1 R=1 AMS=0 PMS=0 ActiveSlots=0F
SLOT:DT=3 MULTI= 2 TL= 33(24dB) KS=1 AR=29 AM=0 DR=31 SR= 0 SL= 0( 0dB) RR= 5 SSG_EG=0
SLOT:DT=5 MULTI= 6 TL= 42(31dB) KS=1 AR=29 AM=0 DR=31 SR= 0 SL= 0( 0dB) RR= 4 SSG_EG=0
SLOT:DT=1 MULTI= 4 TL= 36(27dB) KS=1 AR=29 AM=0 DR=31 SR= 0 SL= 0( 0dB) RR= 5 SSG_EG=0
SLOT:DT=0 MULTI= 4 TL= 7( 5dB) KS=1 AR=10 AM=0 DR=31 SR= 0 SL= 0( 0dB) RR= 6 SSG_EG=0
2020-12-16 12:41:02
YM2612についてはメガドライブ方面での研究成果があるようです。
http://gendev.spritesmind.net/forum/viewtopic.php?f=24&t=386
面白いハードウェアですね。
http://gendev.spritesmind.net/forum/viewtopic.php?f=24&t=386&start=105#p5716
http://gendev.spritesmind.net/forum/viewtopic.php?f=24&t=386&start=150#p6096
http://gendev.spritesmind.net/forum/viewtopic.php?f=24&t=386&start=705#p27098
2020-12-16 23:40:25
ありがとうございます!一応、メガドライブでの研究成果とする資料は参考にしているのですが、多分そのフォーラムから出た資料かもしれませんね。
しかし、何が違うんだろう?とさんざん頭を悩ませていたんですが、
873: // Should consider DETUNE.
まだDETUNE実装してなかった!という根本的な問題にたどり着きました!
実装したつもりだったんですが(^_^;)つもりは恐ろしいですね!音が似てるんだけど微妙に違うのはこれが結構大きかったかもしれないので実装してみます。
2020-12-17 08:20:40
やっぱ先人は偉大ですね。fmgenのソースで、フィードバックに入れる値を過去2度のサンプルの平均にしている(しかもビットシフトに組み込むことでゼロコストで平均取ってる)ので、なぜだろう?と、思っていたのですが、津軽弁のSlot0がどうしても発散する問題で、発散の仕方が1サンプルごとに上下に振れて間を取ると大体滑らかな曲線になるので、Ciscさんは過去2サンプルの平均を取ることで平滑化してたんですね。
発散する波形を見ながら、これスムージングかけてやれば良さそうなんだけどもう出しちゃった波をしかも発散してる箇所だけスムージングかけるなんてできないしなあ、と、考えているうちに過去2サンプルの平均を取る意味が理解できました。
この方法で発散問題も解決できました。まだいまいちな音もあるんですけどね。数日前より結構良くなってきたように思います。後ほどPUSHしますね。
2020-12-17 14:19:26
DETUNE実装していまいち響きが変だった音もかなり良くなり、Feedbackに入れる値を過去2サンプルの平均にすることでpremature divergenceも防止できて、よく聞くと「ちゃちゃちゃちゃっ」と鳴ってたノイズが消え、F-BASIC386のFM_1.FMBでここまでトーンが似てきて、、どうしてSuper大戦略のイントロの音の深みがいまいち出ないのか、と、思って、UNZでCh3 (僕はチャンネル0番から数えるからUNZ上だとCh4)以外をMuteしてWindows+Gで動画撮ってVLCでMP3にしてAudacityで波形見てみました!
見ると、一つ目のトーンではトーンの途中から変調がかかり始めるのですが、二つ目のトーンはトーンの先頭から変調がかかっていることが判明しました。ということは、モジュレータスロットは止めずにキャリアスロットだけオフ・オンしているっぽいですね。Super大戦略って二曲しかないのにそんな凝ったことしてたのか。印象的な曲になるわけだ。というか98バージョンよりも88バージョンよりもTOWNSバージョンのSuper大戦略の曲が一番良いと僕は思ってます。
ついに、スロット単位のオン・オフを実装するときが来てしまったか。。。。というわけで、引き続き精進します。冬休みになったし。
2020-12-18 03:05:34
自己フォローアップです。
すみません、Super大戦略が特殊なことをしているのかと思ったら、実はそうでも無いんですね。さっきXM7で波形を出して確認したのですが、Key Off->Key Onしたとき、前のトーンがまだ鳴ってる途中だと、新しいトーンをゼロから始めず残ってる音のレベルから音を始めるんですね。いずれにしても、その場合だとスロットごとにタイマーを分ける必要があるので、やっぱりスロット単位でのコントロールが必要なのでその部分は必要ですね。(しかし音が鳴ってる途中から次の音を始めたらどうなるとかはさすがにマニュアル見ても書いてなかった)。多分、この修正を加えたらSuper大戦略もあの力強い音色が再現できるのではないか、と、思ってます
2020-12-18 07:30:45
リリース出しました!Super大戦略のオープニングはほとんど本物になったと思います!
悦に入って何度も聞いてしまいました。
2020-12-18 13:27:08
エンベロープを実機に近づけようと、実機MXを使ってDecay期間だけ音がなるようにして音の長さを計測していますが、実に興味深いですね。FM TOWNS Technical Databookの208ページの表は、まず「レート」のコラムが二つに分かれている意味がなくて(右半分がKCだと仮定してもKCは31段階)、レート0の場合は無限大になるのですが、何も書かずに省略してますね。この表、同じものをYAMAHAのYM2612じゃないチップのマニュアルで見かけたと思ったのですが、どこで見たのか思い出せずにいます。実測値と比べると208ページのdecay/sustain/releaseの時間は1割程度短い(速い)ですね。とりあえず、津軽弁は実測値ベースに修正しようと思います。
あと残っているのはAttack期間の計算とKCの最下位ビットの計算方法ですね。AttackはDecayでガクンと急激に落ちるようにパラメータを工夫してサンプルすれば長さを測れるし、KCはKS=3として実測を取ると解明できると思います。エンベロープを実測ベースにしたら、ほぼ本物を再現できるようになるのではないか、と、思います。あと、エンベロープを明示的に計算する方法をドキュメントできれば後世の誰かがYMチップを再現しようとするときに使えると思います。
しかしFM TOWNS Technical Databookは結構誤植や間違いとかあって、エミュレータ作りながら「まじかよ」と思ったことが何度もありましたが、10%の誤差があるとしてもYM2612のフェーズの長さの表を出していてくれたのは助かりました。それに10%だからそんな大きな誤差じゃないですね。ところどころで「おお、これは!」と思う情報が出てますよね。
引き続き精進します。
2020-12-20 00:51:51
ソースPUSHしました。今日は朝から実機でいろいろ設定を変えてトーンをサンプルして正しいattack/decay/sustain/releaseの時間を計測して、また、謎だったNOTEの計算方法も多分解明しました。YM2608公式マニュアル(YM2612と基本互換のはず)とFM TOWNS Technical Databookには、
N3=F11*(F10+F9+F8)+~F11*F10*F9*F8
と、あるのですが、多分F11がビット10なのはわかるとして(F_NUMBERは11ビットだからビット11は存在しない)、どうやら正しくはこうですね↓
N3=F11*(F10+F9+F8)
F_NUMBERをいろいろ変えてDecayにかかる時間を計測したのですが、F11がゼロのときは、続く3ビットを変えても時間に変化はありませんでした。具体的にどういうエンベロープになるのか、これで解明できたと思います。
多分津軽が出してくるエンベロープもかなり実測と合うようになったと思います。(が、ソースの中のテーブルその他は実測に合わせたつもりだけどまだ津軽弁出力と実測と波形比べてない)。
2020-12-20 06:38:29
スレッド分けました。内蔵CDが故障してしまったTOWNSをフロッピーディスク経由でSCSI CDから起動するブートローダープロジェクト用スレッドです。一応、フロッピーディスク経由の場合と、SCSI2SDや変換番長のような仮想SCSIデバイスからの起動の両方を想定してます。似たようなことは既にYSSCSICD.SYSでできていますが、TownsOS起動ディスクに組み込む必要があるので、ディスクの再配布していいか微妙なのと、特殊なドライバを組み込むタイトルでは専用起動ディスクが必要などの問題がありましたが、このプロジェクトはその2点の解消を目指してます。
まだ津軽上の実験ですが、SCSI CDドライブからIO.SYSを読み込み、INT 93Hなどをインストールして、MSDOS.SYSまで読み込んだところで処理を迎撃することに成功しました。まだ青森県地図の表示はできてません。
しかし、迎撃地点ではMSDOS.SYSは読み込んでいるものの、まだINT 21HがEnableされていないようで、INT 21H AH=48Hでメモリを確保してやろうと思ったら固まってしまいました。これ、INT 21がまだ使えないのではなく、実はPSPとかが存在してないからという可能性もあるんですがね。ただ、考えようによってはBIOSのRedirectorをインストールしようと思ったらこの迎撃地点は悪く無くて、IO.SYSには内蔵CD-ROMから起動したと思い込ませているはずなので、ここでINT 93 AL=C0HがすべてSCSIにリダイレクトされるようにすると、IO.SYSは何事もなかったかのようにSCSI CDから起動してくるはずです。
問題は、リダイレクタをインストールしたとして、リダイレクタが使用するアドレスがその後別のプロセスに上書きされてしまうことを防止しなくてはならない点です。そのために、その後さらに調べたところ、どうも、MSDOS.SYSにジャンプするときのDXの値がMSDOS.SYSが使ってもいい最後のアドレス (DX=B800Hだと物理B8000Hまで使える)になっているようなのですが、どなたかこの解釈が正しいかご存知の方いませんか?また、そうした場合、DOS ExtenderがB8000~BFFFFを使わないと言えるのかという問題もあるのですが。nabeさんとか知ってそうと期待していたりするのですが。もしもこの解釈が正しければ C000H をDXにセットしている場所にパッチを当ててやれば、BIOSリダイレクタ置き場を作ることができるはずです。
これまで津軽のデバッガでMSDOS.SYS入り口で止めてLET DX B800H として放流してやった上でV2.1 L20上で何本かEXPファイルを走らせてみた限りではB8000~BFFFFは守られているようでした。
別な方法としては、もともとのCD-ROM BIOSはいらなくなるので、IO.SYSを識別して、もとのCD-ROM BIOSが書いてある場所にリダイレクタをインストールしてしまうという手もあるのですが、やや乱暴な方法で、多分CD-ROM BIOSは一か所に固まっているのですが他のINT 93Hがその部分のPROCを使っていたらこの手は使えないですね。
また、できればC0000H直前ではなくもっと下の方のIO.SYS直後あたりにインストールしたいところなのですが、どこでIO.SYSが使っていい領域の最初のアドレスをMSDOS.SYSに渡しているのやら。それはまだ見つかってません。ただ、IO.SYSのサイズはTownsOSのバージョンによって異なってもどのTOWNSのMSDOS.SYSを使っても起動できるということは、どこから使っていいかという情報もIO.SYSはMSDOS.SYSに絶対渡しているはずなんですがね。
2020-09-24 09:22:42
WINDYさん、
テストありがとうございます!ロストテクノロジーでも何か記録に残しておくと100年後ぐらいに誰かが見つけて役に立つかもしれませんね。
レトロPCはこうやって資料を保存できるけど最近のオンラインゲームとか将来に残らないんじゃないかと非常に不安です。まあ、この心配は今のゲームに燃えてる若い人たちがしてくれればいいことですが、学生さんとかには折に触れてコンピュータプログラムは工業製品であると同時に芸術性もあるというようなことを言う変な教員をやってますが。
2020-11-07 10:16:40
> 山川機長さん
起動オプションが保存されているのはいいですね。
今回のは津軽で見てみると16進数でカウントダウンしてブートするのですが、カーソルが2行ずつ動くようです。
実機ではブートローダーの画面が一瞬出た後に「不法な割り込みが発生しました」と表示されて落ちてしまいました。
カーソルは本家のブートセレクタとの兼ね合いもありますし、パッドでもキーボードでも動くほうがいいかと思います。
2020-11-08 00:48:20
むむむ、そうですか。やっぱ実機テストは必要ですね。というわけで今FM77AVにどいてもらったので今からMXでテストします(^_^;)
2020-11-08 03:53:54
大変失礼しました。直ったと思います。 MOV DL,60 DIV DL とすべきところを MOV DX,60 DIV DX と書いてました。津軽のCPUコアは割り算のオーバーフローを無視していたもんで。MXのFDIMAGEで動作確認したので多分大丈夫だと思います。キーボード対応も実機で確認しました。
2020-11-08 04:29:57
> 山川機長さん
無事実機での起動に成功しました。38400bpsでROMDUMPを実行してdecomrom.pyで生成したROMをTsugaruで認識できました。
Townsでこういうことが可能になるなんて凄いです。
なお、あまり重要ではないかも知れませんが、2行ずつ移動するのは津軽の起動オプションで解決しました。
"-GAMEPORT0 KEY"と"-keyboard trans2"(またはtrans1)を有効にしているときのみおきる現象で、
ANA0にしたりtrans0にすると起きないようです。
よくよく考えてみるとtrans2とKEYを同時に有効にしていること自体ちょっと変でしたね(^-^;
以上、ご報告でした。
2020-11-08 18:12:55
おおなるほど。不正な割り込みの方に気を取られてカーソルがふたつ動く問題の方が目に入ってませんでした。
矢印キーとパッドが同じ機能を持ってしまっている影響ですね。津軽の方で直す方が良さそうなので、直しておきます。津軽と実機で同じ環境が使えるのが理想ですね。
しかし、TOWNSのキーボードはキーが多いですよね。日ごろUSキーを使ってるのでそもそも変換と無変換が無く、全角・半角も無く、カタカナ・ひらがなも無いという、まさに津軽だけに「おら日本語キーボードさ行くだ」、と言いたくなってしまうのですが、日本語キーボードでもカバーしきれないですよね。実行キーないし。津軽上で長い日本語をタイプすることは無いとはいえ、仮に日本語をタイプするとしたらどうするのがいいんでしょうかね。
2020-11-09 01:00:13
キーボードエミュレーションモードの問題だから津軽側で直そう、と、思ったら実はブートローダーの方の問題でしたね。
実機でも同じことが再現できます。まずパッドの十字ボタンの下を押し、放す前にキーボードの↓キーを押し、十字ボタンを放すとカーソルが二段動きますね(^_^;)
まさにこれが発生してました。なので、ブートローダーの方を更新してパッドのリリース待ちの中でキーボードのバッファもクリアするようにしました。時間の都合でまた実機テストしないままPUSHしたのですが、さすがにキーボードバッファをクリアするだけだから実機での実害はないと思います。(でも一見無害な更新がよく大ダメージを及ぼしたりするんだな、これが。)
副産物でコード見直したらトランスレーションモードで日本語キーボードの数々のキーを送ってないことに気が付いたので送るようにしました。日本語キーボードだとタイプがちょっと快適になった鴨しれません。
2020-11-09 02:01:07
なるほどブートローダー側でしたか。判明して良かったです。実機でも津軽でもばっちりです。
キーマップの件は難しいですね。普段は別のキーボードを変換アダプタを通して使っているので、純正キーボードを引っ張り出して繋いで思い出していました。
英語キーボードの場合は英語が打てれば良いかと思いますが、日本語キーボードで現状の最低限の英数記号が入力できてWindowsのIMEが有効な状態から長い日本語を打てるように変えるとすると、IMEを無効にする必要があると思います。
ソースを見てkeytrans.cppのNULLの部分を、townsdef.hを参考に書き換えればいいのかと思ったのですがビルドは通るものの、うまくいきませんでした。
文章を入力するとしたら、最低限「ひらがな」「変換・無変換」可能なら「漢字辞書」で足りると思います。
漢字辞書キーはありませんのでShift+かな漢字とかShift+Insとかコンビネーションに割り当てればいけるでしょう。
あまり使わないキーは単語登録、単語抹消、実行と取消です。取消はごく希に使うかも知れません。
ちなみに自分の使ってるクラシックPC研究会さんのアダプタは取消がEND、実行はShift+Enterになっています。
2020-11-10 03:06:45
ありゃーす
2020-12-06 22:08:24
CMOSの件だけでも長くなる可能性があるかと思ったのでスレッド作りました。YSSCSICD.SYS開発時、津軽開発時に調べたメモに残ってるのが、
CMOS RAM
起動デバイス
[3182H] 起動デバイス種類が (Floppy:1 Harddisk:2)
[3184H] 起動デバイスユニット番号
MX ROMの逆アセンブルでも確認。2020/05/20参照。
臨時起動デバイス
[3C28H]
MX ROMの逆アセンブルによると、パッドAボタンを押して起動すると08H (AL=08,AH=00 に分解されてCD-ROM), Bボタンで 02H (AL=02,AH=00に分解されてFD0)
シングルドライブモード(多分)
[328CH] 0:解除 1:シングルドライブモード -> [33CEH]がこのバイトを含むチェックサムになってるみたい
ドライブレターをどうやったら割り当てられるのか調べてます。
2020-10-01 23:31:01
Zoomミーティング中暇だったので(不良研究員)調べました。comp_romのソースではCMOSの後半にチェックサムがあるということですが、どうもドライブレターとかシングルドライブモードが書いてある領域は、33CEHを使ってチェックサムが変わらないように調節しているようです。そういえば津軽初期のころは、なんとかシングルドライブモードの意味を解明して津軽初回起動時のCMOSの初期化はSYSROMにさせてホスト側でシングルドライブモードを解除させようと思ってたけど、このチェックサムの意味がわからなくて断念したんだよな。今ならわかる気がする。
ちなみに、ドライブレターの割り当てですが、割り当て後、31D0~31DAに「富士通」が書き込まれます。が、これは多分いつも一定だと思います。(たまたま昨日パーティションテーブルを解析しててこれと同じ文字列をチェックしていたのでわかった。すごい偶然。)
IO8:[31D0] 95 <- SJISで「富士通」
IO8:[31D2] 78
IO8:[31D4] 8E
IO8:[31D6] 6D
IO8:[31D8] 92
IO8:[31DA] CA
それで、ドライブレター割り当てですが、以下のようになっているようです。33CEHはシングルドライブモードの変更でも値が変わって、それ以外が増加した分減らして全体のサムが変わらないように調節しているように見えます。
ということで、これをもとにHD Image用ブートローダーにCMOS設定機能を追加してみます! 実現すれば津軽またはUNZ上で作ったHDイメージとSCSI仮想化ツールだけあればCMOSが死んだ状態から起動可能まで持っていけるはずです!
。。。。今日と明日はミーティングが山のようにあるんだよな。さすがにミーティング中にMASMプログラミングはできんから週末の作業だな。
IO8:[31DC] 00 <- 多分Aドライブ
IO8:[31DE] 00
IO8:[31E0] 00 <- 多分Bドライブ
IO8:[31E2] 01
IO8:[31E4] 05 <- 多分Cドライブ
IO8:[31E6] 00
IO8:[31E8] 02 <- ここが変わった (割り当て前FF)
IO8:[31EA] 00 <- ここが変わった (割り当て前FF) 上位4ビットがSCSI ID, 下位4ビットがパーティションぽい
IO8:[31EC] FF
IO8:[31EE] FF
IO8:[31F0] FF
IO8:[31F2] FF
IO8:[31F4] FF
IO8:[31F6] FF
IO8:[31F8] FF
IO8:[31FA] FF
IO8:[31FC] FF
IO8:[31FE] FF
IO8:[3200] FF
IO8:[3202] FF
IO8:[3204] FF
IO8:[3206] FF
IO8:[3208] FF
IO8:[320A] FF
IO8:[320C] FF
IO8:[320E] FF
IO8:[3210] FF
IO8:[3212] FF
IO8:[3214] FF
IO8:[3216] FF
IO8:[3218] FF <- 多分Pドライブ
IO8:[321A] FF
IO8:[33CE] 45 <- ここも変わった。↑で増えた分減ってるっぽい。多分チェックサム一定化調整。
2020-10-02 00:32:27
随分と前のことですが、モデル2のブートロムを追っかけたことが有って、その時に作成した使用CMOSの資料が有りました。
何分素人が逆アセして目で追いながら作成した資料ですので、間違っている部分も多いとは思いますが役に立てばと思い此処に書き込んでみます。
3180 ?(bit0をチェックしている)
3182 ?
3184 ?(3182とセットで使用 3184→AH,3182→AL)
318E ?(ジャンプテーブル?のベース)disk_command_04
3190 ?(上記テーブルで使用? 3198まで?)
3192 ?
3194 ?
3196 ?
3198 ?
319A ?(読んだあと、and al,0CFh xor cl,al jzと続く)
319C SS(現在のSS:SP)
319E SS
31A0 SP
31A2 SP
31A4 SI
31A6 SI
31A8 SP(ローカルSP)
31AA SP
31AC ?
31AE ?
31B0 ?
31B2 ?(起動時にクリアされる)
31B8 ?(起動時にクリアされる)
31BE ?
31CC ?
3A50~3A5A ?
3A64 ?SP(割り込み処理で使用)
3A66 ?SP
3A68 ?SS
3A6A ?SS
3A6C ?(MasterPIC IMR)
3A6E ?(SlavePIC IMR)
3A70 ?(割り込み要因レジスタの値)
3A98 ?
3B50 ?
3B60~3B6E CD_CMOS_PARA
3B70 CD_CMOS_DATA0
3B72 CD_CMOS_DATA1
3B74 CD_CMOS_DATA2
3B76 ?
3B78 CD-CMOS_DATA3
3B7A ?
3B7C ?
3B7E ?
3C22 ?
3C24 起動時のDX
3C26 起動時のDX
3FC6 ?
3FC8 ?
2020-10-02 11:09:53
ああ、ごめんなさい。
上の資料は元々モデル2で逆アセしてたのですが、途中でHCになったので混在している可能性が有ります。
2020-10-02 11:11:43
たまにはこっちにも書いてみます(?)
TownsOSや起動時の処理に影響するCMOSの内容を、既知の物も含め2点あげておきます。
3C1A 起動時メモリ診断モード(0=通常モード、1=簡略化モード) 3代目あたりから有効
3AD8 各種フラグ (bit7が1の場合、高解像度モードモードON) ハイレゾ機で有効(とはいっても起動時に参照するわけではない)
2020-11-07 12:31:39
FMTownsのアプリケーションの動作報告用
2020-07-28 13:17: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
SCSIのPhaseのMESSAGE_INとSTATUSの順を入れ替えたら、とりあえずSCSIのエラーは出なくなりました。
が、HIMEM.SYSインストール中に割り込みハンドラを破壊という現象が起きていて原因を調査中です。
なお、デバッガで BRKON INT 21 AH=3D としておくとfile openで止まるので、pri cst するとどのファイルを開くとこかわかるようになってます。
2020-07-28 12:59:54
VERR/VERWありがとうございます。VERRを通過して、CLTS(0Fh 06h)で死亡しました。T-OSはなぜタスク機能を使ってるのか……。
お盆あんまり関係ないんですよね。まとまった時間取れれば集中してドライバ書いてたいのですが。
2020-08-14 21:33:10
CLTS実装ありがとうございます。TBIOSLD.SYSとTOWNS.SYSを組み込んだ状態で起動するようになりました。
ですが、COCO で forrbios.nsd を組み込むとコードでない場所(V86モード)を実行して止まるようです。
(COCOを組み込まなくても適当なEXPを起動してると同じようなところで停止。同条件でEMM386を組み込まない場合は問題なし。)
なんとなく根が深そうなので、お時間あるときに見ていただけら嬉しいです。
2020-08-15 15:15:40
あらぬ場所にジャンプしてしまう現象は、考えられる可能性として高いのは、
(1) Exceptionを正しく出してない。
(2) Exceptionの出し方が正しくない。
(3) Task Gateを使ってジャンプしている。
(4) CPUコアに未発見のエラーがある。
と、このぐらいだと思います。多分、(1)だと思うんですね。なんとか環境を作って調べられないか検討してみます。
2020-08-16 02:51:32
>>40
TOWNS-OS on DOS6環境を作るには、DOS6をインストールしたHDD区画に対して、TOWNS-OS V2.1L40以降のシステムCDを起動して、アイコンから新規インストール先として指定すれば、DOS6上にTOWNS-OSがインストールされます。
これで128MB超えのHDD区画もバッチリ認識……じゃなかった。これで上に書いた問題も再現します(V2.1L50にて確認)。
2020-08-17 18:16:55
了解しました!詰まったら、多分実家から回収してきたFM Townsシステムセットアップガイドを見ながらなんとかできると思います。(一応共著者に名前入ってるけどDOS6の部分は全部武井先生が書いた)。やってみます!
2020-08-19 05:36:29
状況再現しました。クラッシュは↓ですね?
3FF8:000014E1 FFFF
この直前がIRETDで、NT=1となっているので、どうやらTask Returnというのを実装しなくてはならないらしいです。戻ってくるアドレス自体は正しいのですが、素直にStack ReturnsしてしまうとVMフラグをクリアしてしまって、3FF8をセレクタと解釈してとんでもないリニアアドレスだと思っているようです。
想像なのですが、ここはRUN386の中のようで、このTask Returnした先でVMフラグをクリアして3FF8:000014E1に戻してRUN386に続きをさせるということではないかと見ています。
どのぐらい簡単か難しいかまだわからないので、ちょっと勉強してみます。
2020-08-19 08:45:30
うーん、もはやどれを信じていいのかわからない。i486 Programmer's Reference ManualのPsuedo Codeによると、
(* Protected mode *)
IF VM=1
THEN #GP(0)
ELSE
IF NT=1
THEN GOTO TASK-RETURN
と、あるものの、下の説明では、
#GP(0) fault if the IOPL is less than 3, to permit emulation
しかし、VM86モードのIOPLは3のはずだから、'less than'にはあたらない。ので、Pseudo Codeとテキストの解説が矛盾してます。結構こういう誤記なのか手抜きなのかわからない表記多いんですよね。
ここの記述→では、https://www.felixcloutier.com/x86/iret:iretd
IF(EFLAGS.VM=1)
THEN GOTO RETURN-FROM-VIRTUAL-8086-MODE;
ELSE GOTO PROTECTED-MODE;
RETURN-FROM-VIRTUAL-8086-MODE:
(*Processor is in virtual-8086 mode when IRET is executed and stays in virtual-8086 mode*)
とあり、その説明では普通にNTフラグにかかわらずStack ReturnするがVMビットは影響を受けない。とのこと。しかし、そんなことはi486 Programmer's Reference Manualを見る限りまったく書いてません。POPFDではそういう記述があるんですけどね。VMフラグそのたいくつかのフラグはPOPFDによって変化しないそうです。
それで、Task Returnを調べたところ、TSSにReturn先のTRが書いてなければならないことになってますが、EMM386環境ではタスクはひとつしかなくて、ほかのタスクにリターンしたくてもそもそも戻り先タスクが存在しなさそうです。
一番都合のいい解釈は、VM86モード下のIRETではVMフラグが変わらない以外は基本的に普通のIRETと一緒、とする説なので、そのようにしてみたところ、DOS6上でTowns MENUが起動しました。例によって現在ctestを流しているので、全部通ったらソースをPUSHしますね。
2020-08-19 09:44:41
>44 山川機長さん
もうある意味解決しているのかもしれませんが、INTELのia32_arh_dev_man_vol2a_i.pdfの該当個所を見てみると、
RETURN-FROM-VIRTUAL-8086-MODE:
(* Processor is in virtual-8086 mode when IRET is executed and stays in virtual-8086mode *)
IF IOPL=3 (* Virtual mode: PE=1, VM=1, IOPL=3 *)
THEN IF OperandSize = 32
THEN
IF top 12 bytes of stack not within stack limits THEN #SS(0); FI;
IF instruction pointer not within code segment limits THEN #GP(0); FI;
EIP ← Pop();
CS ← Pop(); (* 32-bit pop, high-order 16 bits discarded *)
EFLAGS ← Pop();
(*VM,IOPL,VIP,and VIF EFLAGS bits are not modified by pop *)
とあります。
2020-09-02 14:39:35
そうですね。とりあえずDOS6を走らすレベルでは解決しましたが、ありがとうございます!一応、i486 Programmer's Reference Manualというのを参考にしていて、Intelの公式出版物のようなのですが、エラーが多いです。Intel公式のSoftware Development Manual (多分ia32_arch_dev_man_vol2a_i.pdfがそれかな?) を参考にする方が良い、と、とある知り合いの方から教えていただいたので今後はそのようにしようかと思ってます。
2020-09-03 05:33:45
FMTowns実機や各種FMTownsエミュレータを使用する上での質問事項
2020-07-28 13:20:43
FMTowns新エミュレータ emufmtownsの情報交換用スレッドです
2020-07-28 12:45:08