FMTowns情報

  • 1 名前: WINDY ID:5YWNmNTg5

    FMTownsのアプリケーションの動作報告用

    2020-07-28 13:17:50

  • 230 名前: 山川機長 ID:hYzE2Y2M0

    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

  • 231 名前: BCC ID:zNWRjMGRh

    ギャラクシーフォース2
    20210721版では問題ないようですが、20210929版でスプライトが表示されない・点滅するといった不具合があるようです。FREQを66以上にすると改善される。

    2021-10-07 12:26:19

  • 232 名前: 山川機長 ID:hYzE2Y2M0

    おおなるほど。FREQ 66で改善するのは多分偶然ですね。確認してみます。これは、ひょっとするとShadow of the Beastのチラつきと同じ問題かな。

    2021-10-07 22:26:19

  • 233 名前: pin ID:1ODBmY2Y3

    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

  • 234 名前: BCC ID:hNGE0ODI2

    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

  • 235 名前: 山川機長 ID:3ZDhjOTNj

    早速ありがとうございます!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

  • 236 名前: 山川機長 ID:wZGRmN2Fh

    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

  • 237 名前: BCC ID:wYTNjZDg2

    最初にテストした時と同様RAYTRACE.RAYをSUPPORT.EXPから開いて「ツール」→「レイトレーシング」、MGS設定を詳細に切り替えて実行するとボクセル分割の前処理のプロセスで発生しました。
    同じ手順を踏んでも再現できない場合は、もしかしたら山川機長さんのEASTRAYと自分のEASTRAYの違うバージョンという理由があるかもしれません。
    なお、PUSHされたソースではFPUを有効にしたまま386版を実行しても問題なく動くようになったので解決されたようです。

    2021-10-17 00:38:26

  • 238 名前: 山川機長 ID:wZGRmN2Fh

    了解しました!確認ありがとうございます!Power Driveこちらでもやってみました。空が稲妻みたいに光というのはこういう意味だったんですね。なんとなく輝度が徐々に上がって下がってしているようなので、これはビジュアルエフェクトっぽいような気がしますね。

    2021-10-17 03:16:54


全部読む/ 最新50/ 1-100/ 掲示板トップ リロード

  • 1 名前: WINDY ID:0NzBlMGQ3

    他愛もないない事から、悩み事までなんでもお書きください。

    では、手始めに私の困ったことから。
    我が家の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

  • 282 名前: BCC ID:iYjZjZDcw

    山川機長さんがフリコレ11に応募していたFPU必須のデモ4本(\T_OS\DEMO\YS11)も起動まではいくようになっているようですが、これもマウスカーソルと操作キーのみで他に何も表示されない状態の様でした。
    例外エラーなどで強制停止せずQキーを押せば終了するようなのでEASTRAYと同様の理由なのでしょうか。

    FPUの実装とは別ですが、EASTRAY SUPPORT.EXPで「ファイル」→「イメージ表示」で適当なTIF画像を開いてウィンドウを右側に移動すると横512ドット目から黒縁がかかったように画像が表示されないようです。

    2021-10-13 19:51:30

  • 283 名前: 山川機長 ID:jYTFkZjA2

    うーん、なんでこんな巨大な値が出てくるんだ?と、思ったら単に exponent&=0x7FFF; するのを忘れていただけだったという。

    いや、よくあることよくあること。

    今大学にいるんで、うち帰ったらなおして試してみます。少なくともこれでBALL3.RAYは復活するかな。

    2021-10-14 00:44:17

  • 284 名前: pin ID:3OThkOThl

    > 80-bit浮動小数点を計算するライブラリ

    EASTRAY は exponent のマスクで解決するようですが、例えば boost の cpp_bin_float_double_extended とかでしょうか。

    2021-10-14 03:12:01

  • 285 名前: 山川機長 ID:xOTFmYWMz

    うちでも確認しました。とりあえず、ソースPUSHしました。EASTRAYはBALL3.RAYとRAYTRACE.RAYが正常動作しました。boostへのdependencyは増やしたくないので、そのうちC++の標準に組み込まれたら考えます。多分80bitが本当に必要になるケースはほとんどないと思うんですね。

    SUPPORT.EXPの絵がずれるのは、2画面モードの裏の画面の表示開始位置を間違ってるぽいですね。CRTCは結構解明したと思ったのですが、まだCRTCのエミュレーションでできていない部分があるとは。

    2021-10-14 06:30:30

  • 286 名前: 山川機長 ID:5ZGJiMGUy

    今年もDemosplash 2021、やります! (http://demosplash.org) それで、アメリカ東部時間の11月12日(金曜)の夜、日本時間13日(土曜)の午前中に、Japanese Computer I というセッションで僕が30分ほど時間をもらったので、DOOMとBad Apple!!を実機で流します!Scenesatなるサービスでネット生放送するので、良かったら見てください。

    それで、せっかくTOWNSをプロジェクタにつなぐんだから、プレゼンテーションはTowns GEARで作ろう、と、思っていきなりページの背景の絵の指定方法がわからなくて(というか、GEARってテキストに12または16ドットフォントしか選べなかったんだったか)詰まったのですが、これはどうやるんでしたっけ?Q:\FJ2\NOTEの例題ノートは各ページに背景画が貼ってあるので、同じように絵を作って貼ろうと思ったのですが、ページの背景はタイルまたは色の指定しか発見できなくて。メニュー項目はすべて絨毯爆撃したと思ったのですが。誰か背景画の指定方法覚えてますか?

    2021-10-15 00:21:55

  • 287 名前: BCC ID:kYjg3MjM1

    DOOMは最適化とバグ修正、Bad Apple!!はマウスの左右クリックどちらかを押すことで終了できるようにそれぞれちょっと更新されているので最新版のダウンロードをお願いいたします。
    https://drive.google.com/file/d/1gfXDAJU1lPA1vt_FIoGG_Xd7md9ypE_l/view
    https://drive.google.com/file/d/14jk80HTWxvjDD-W0ZnGfWnVvlz0bNY2V/view

    TownsGEARは当時から使ってみても全く直感的じゃなくてう~ん・・・と思っていたツールでしたね。
    山川機長さんのイメージしている作業かはわかりませんが、メニューの「作成」から「イメージ」、イメージフレーム作成ウィンドウで実行ボタンを押して出てきた枠を画面いっぱいまで広げて、メニューの「編集中」を「実行中」に切り替えて枠をダブルクリックするとイメージエディタに切り替わるのでここでTIFF形式の画像を貼っていくとかですかね。

    2021-10-15 01:35:36

  • 288 名前: 山川機長 ID:5ZGJiMGUy

    了解しました!使うMXは大学の机に置いてある方で、どちらもこれから走らすソフトのインストールとかするので、最新版をインストールします!

    Towns GEARは、富士通が推してたので、何度か使おうとしたのですが、僕も大変だった、という記憶しかないですね(^_^;)例題にある背景のイメージだと、固定してあって他のパーツとは違うレイアにあるみたいだったので、それを使うのがいいかと思ったのですが、やっぱりパーツとしてイメージを貼るぐらいしか思いつかないですよね。やっぱりTowns GEARで準備するのは大変かな。しかし、TOWNSとAV40とWindowsを切り替えるのも悔しいな。できればTOWNSとAV40だけで行きたい。

    なお、フリコレ11の僕のプログラム(ラジコンT-4 Blue Impulseなど)が走らなかった理由ですが、FPREMで成功の場合はFPUフラグのC2をクリアするべきところを無視していたのが原因でしたが、そこを通過しても、FST m32realが必要で、それはすぐ書いたのですが、次にFILD m64intがまだ実装してなくて止まってるというところで、時間切れになったのでボウリングの試合後にまた続きを書きます。

    2021-10-15 02:05:52

  • 289 名前: 山川機長 ID:3ZWUzYjBj

    原因解明しました!FPREMはPopしなくていいんですね。FPREMで誤ってPopしていたというのが問題だったので、それを修正してフリコレ11の僕のプログラムも動作するようになりました。ラジコンT-4 Blue Impulse、懐かしいですね。

    ぼちぼちState Saveできるようにして、GUIとコマンドオプションに出して、リリースにしようと思います。

    2021-10-16 02:09:54

  • 290 名前: 山川機長 ID:mM2EyZGIx

    ということで、CUIに-USEFPU/-DONTUSEFPU オプション、GUIにEnable 80387 FPU チェックボックスを追加したソースをPUSHしました。その後、sinにマイナスの角度を与えると正しく動作しないことがわかって修正して、F-BASIC386を起動しようとしたらFCLEXを使ってて止まったので、その命令もサポートしてF-BASIC386もFPU命令使えるようになりました。

    興味深いことに、High-Cのライブラリはsinを計算するのにFSINを使わずにFPTANを使って値をtan/sqrt(1+tan^2)としてるんですね。ひょっとしてFPUを有効にするとStrike CommanderとかFPU使って速くなったりして、という期待は破れました。確かStrike Commanderって推奨環境80486DX 66MHz以上のはずなんですが、DX関係なくない?と思いました。

    が、まだ対応してないFPU命令が多数あるので、弱気にデフォルトはオフということになってます。以後、未対応命令が発見され次第、各個撃破していこうと思います。TOWNSのアプリケーションだとそんなにFPUを使ったものは多くないかと思いますが、何か見つけたら動作報告の方に教えてください。FB386で数値演算多用してるようなプログラムがあるとヒットするかも。よろしくお願いします!

    2021-10-16 10:33:17


全部読む/ 最新50/ 1-100/ 掲示板トップ リロード

  • 1 名前: たけがみりう ID:1NjNhMmQ0

    雑談スレッドでハードウェア解析や考察が話題となっていますが、個人的に別途スレッドを立てた方がよいと思ったので立てました。
    強制はしませんが、今後のハードウェア解析や考察についてはこちらのスレッドで話題にしていただけると助かります。

    2020-09-24 09:40:33

  • 33 名前: pin ID:5MTNjMjRi

    ちょっと実機でスプライトの動作をみてみました。
    こういう感じのようです。
    https://imgur.com/a/6GVk68S

    - SPEN: スプライトレジスタの1番にあるもの
    - DP1: スプライトレジスタの6番にあるもの
    - SPD0, PAGE: はI/Oポート044Chのもの
    - display: CRTCのFA1は0として、スクリーン1の前半が表示されている場合は0、後半が表示されている場合は1

    VSYNC:
    - I/OポートFDA0hのVSYNCビットが0から1に変化するタイミング、すなわち垂直帰線区間に入った時
    - (赤本のスプライトBIOSのところにはVSYNC終了のタイミングから画面消去・転送が始まるように書いてありますが…)
    - VSYNCのアークがない状態ではこのタイミングで何も起きない
    Finish:
    - スプライトの転送が終了したとき

    I/OポートFF82hのPS2ビットと同様に、SPEN/DP1による表示領域の切り替えは表示期間中にも起こりうるので、
    スプライトコントローラを画面消去に使うソフトの対策は手間がかかりますね

    2021-02-15 00:33:29

  • 34 名前: pin ID:2MzE2MDEw

    フリコレ11の「股を愛したいですねぇ」( \T_OS\DEMO\MOTPLAY )を津軽で動かすための調査の続きです

    SPD1とPAGEレジスタの値を実機同様にVSYNCで変えてやると、とりあえずアニメーションが進むようになります
    SPEN、描画、FA1の変更を観察すると、こんな感じのようです
    https://imgur.com/a/sptRolL
    - 上段: 改造した津軽がプログラムに提示するるポートの状態
    - 中段: motplay.exp の動作
    - 下段: 表示状態の推測
    - w/o FA1: >>33 の観察結果に基づいたFA1の影響を加味しない表示ページ
    - Display: FA1(0000 or 8000 が設定される)の影響を加味した実際に表示されると思われるページ

    描画ピクセル数自体はそこまで多くないので高速なTOWNSだと1INTで描いているのに2INTの表示になってしまいそうですが、これはまた実機で試してみます

    2021-02-22 03:05:17

  • 35 名前: 山川機長 ID:2MmFkOTEy

    pinさん、

    Pull Requestありがとうございました。

    なお、最新版ソースですが、シンボルテーブルの検索機能が増えました。今まで pri sym または dm sym で全部ドドーっと出てましたが、新しいやつをコンパイルすると、symfind (wildcard)で検索できたり、sym SEG で特定セグメントのシンボルが表示できたり、symproc/symlabelを使うと、プロシージャのみ、ジャンプラベル+プロシージャのみの表示ができて、いずれもセグメント指定できます。よかったらご活用ください。

    自作MSDOS.SYSは、FAT12/FAT16のクラスタ取得とバッファリングを自作プロシージャで置き換えに成功しました。CHARデバイスからの読み込みをひとまず無視すれば、FREADもなんとかなそうです。FOPENだと今度はまたディレクトリ探したりいろいろ解析し甲斐がありそうですが。しかし、CDドライブとROMドライブのみ対応版だったら案外早くできるかもしれない、そこまでできたらフォントROM空にしてもFractal Engineとか動くかもしれないという気になってきてます。MASMで書いてますが、うーん、しかし最近だとNASMにした方がいいのかな。でもシンタックス良く知らないし書き換えるの面倒だし。

    2021-02-22 09:37:28

  • 36 名前: [email protected] ID:hMDM0NDMz

    >>35
    元々、MASM(や386|ASM)で書いててNASMに移行した経験から言うと、NASMに移行したほうが相当楽に書けると思います。コード部はほとんど一緒ですし、MASMですとCPUコード以外の部分が面倒くさくてしょうがないです。あとNASMのマクロ便利。

    2021-02-23 01:32:46

  • 37 名前: 山川機長 ID:wYmYwN2I2

    FREAD (INT 21H AH=3FH)を独自コードに置き換えることができました。CHARデバイスからfreadしようとするととりあえず止まるようにしてあるのですが、あまり使ってる場面なさそうです。試しにリダイレクトとか使ってみたけどその部分に入ってこないし。

    > [email protected]さん、

    なるほど!NASMにするとDOSBox を使わずにアセンブルできるのが楽そうなんですよね。アセンブルしてMSDOS.SYSと混ぜて津軽起動するまでが一本のScriptでできるようになるし。FMT_SYSの方は既にNASMだし。確かに、それほど大きな書き換えせずに移行できそうな感じもしますね。一念発起して移行してみようかな。

    2021-02-25 02:28:39

  • 38 名前: WINDY ID:1NTMxNzU1

    "そう言えばTOWNS用のNASMが有ったなあ"と思い出しました。

    頭脳圧搾工場 in 仙台さんの所でまだ公開されているようですね、PharLap簡易OMF-386オブジェクトフォーマット出力に対応しているので今後EXPファイルを作る際に役立つかもしれませんね。

    2021-03-11 15:53:35

  • 39 名前: pin ID:kYjkwOTM2

    I/Oポート 47ch
    画面モード27が使用している。
    4を書くと以下のようにCPUから見えるハイレゾ側VRAMレイアウトが変更される。
    (CPUキャッシュの影響を避けるため、VRAMキャッシュ無効化が必要)

    data = switch (address & 3) {
    case 3: return 0;
    default: return vram[(address >> 2) * 3];
    }

    ビット0 の 状態で 124:0(ハイレゾ1画面) に 0 1 2 ... f を書いてから...
    ビット1 で 124:0 を読む: 0 1 2 0 3 4 5 0 6 7 8 0 9 a b 0
    ビット0 で 11c:0(ハイレゾ2画面) を読む: 0 1 2 3 8 9 a b
    ビット1 で 11c:0 を読む: 0 1 2 0 3 8 9 0 a b

    セレクタ 10c, 104 でアクセスする従来VRAMには影響しない

    2021-09-28 03:36:11

  • 40 名前: pin ID:kYjkwOTM2

    47a, 47b: レジスタ番号(リセット時0, 全ビット保存される)
    47c, 47d, 47e, 47f: データ
    CRTC2と同様の、2バイトのレジスタ番号と4バイトのデータという感じでしょうか。

    0000: リセット時00000000, 変更可能なビットは 00000006
    0001: リセット時00020208, 変更可能なビットは 00020e00
    0002: リセット時ffffffff, 変更可能なビットなし
    以下未調査

    XFree86のパッチには 0x047a と 0x47c はビデオカード3のポートだと書いてありますが、はてさて…

    2021-09-28 04:08:44

  • 41 名前: pin ID:1YTBhNDI3

    d0000-effff の空間についてのメモ

    調査プログラムと素のDOS6での実行結果( https://gist.github.com/pinterior/6ddd1b6794900f37945ba36b993fbbc2 )からみると
    ・I/O 404h の「MAINMEM」が立っている → RAM
    ・「MAINMEM」が立っていないが、I/O 480h の「辞書ROM」が立っている→ 辞書ROMとCMOSが見え、その他の領域は書き込み不可の ffh
    ・どちらも立っていない → 何もない (書き込み不可の ffh)

    2021-10-01 22:38:48


全部読む/ 最新50/ 1-100/ 掲示板トップ リロード

  • 1 名前: WINDY ID:0YWYwODA1

    FMTowns新エミュレータ Tsugaruの情報交換用スレッドです。
    Tsugaru : http://www.ysflight.com/FM/towns/Tsugaru/j.html

    2020-07-28 12:41:40

  • 254 名前: pin ID:kNzFkMmVi

    互換フォントROMの一部の字形が異なっていた(0xe4と0xe7の文字が入れ替わっていた)ので、直したものを
    https://github.com/pinterior/FMT_FNT.ROM/releases/tag/1.0 の fmt_fnt-1.0.1.zip に置いておきました

    2021-09-18 02:23:43

  • 255 名前: 山川機長 ID:1YzY0ZGEw

    pinさん、

    ありがとうございます!使わせていただきます。

    ところで、ハードディスクリードアクセスを別スレッド化したソースをPUSHしてみました。多分、ファイルをオープンして読んでクローズするという処理は山のようにロックとかアンロックが発生していると思うので、大した負荷もかからずアシンクロナスにディスクを読むようになったと思うのですが、予想に反して12MHzだとまだBad Apple!!は遅れますね。初代TOWNSのメモリウェイトを考慮すると多分10~12MHz相当ぐらいで大体合ってると思うのですが。

    2021-09-20 08:04:54

  • 256 名前: Type.d ID:yMzZmZGZm

    BadApple!!の20210915のほうHCで動かしてみました。
    高速モードも互換モードもほぼ差が分からないくらいスムーズに動きました。
    東方系コンテンツをTownsという別の時代のハードで動かすというのが面白いですね。
    津軽でも同じように動くし凄いですなあ。

    2021-09-22 22:23:26

  • 257 名前: pin ID:1NDE4ZDA1

    動作報告のほうであったALLTYNEXの4面ボスは、VRAMをみてみると上2ラインからのコピー(ただし後半128KB側でのみ描画)で間違いなさそうだったので、
    以前やりかけだったダブルバッファスプライトを整理してPRにしておきました。
    スキャンライン風演出も偶数・奇数フレームで消える行が変わり、実機に近くなったと思います。
    また、個人的に好きなデモのひとつであるフリコレ11の \T_OS\DEMO\MOTPLAY も動作するようになります。
    このBBSで問題報告されていたジェノサイド2やソースコメントで触れられていたシャドウオブザビーストなどでデグレがないといいのですが、手元ではちょっと確認できないです。

    ところで今の津軽はスプライトのSPYSビット(スーパーインポーズ)を無視していますが、
    ALLTYNEXの挙動をみるにこのビットが立っていると、本来ドットを打つ場所(透明でない場所)に
    透明色を書き込むことができるんじゃないかなという気がします。

    2021-09-25 09:06:34

  • 258 名前: 山川機長 ID:wY2Q4ZWE3

    Pull Requestありがとうございます!Githubの方にコメントを上げたので、詳しい話はGithubでということで。しかし、更新個所を読んでいて、うーん、RunScheduledTasksはCPUインストラクション一個ごとにチェックしてたんだよなー、と、思って一応確認しようと思ったら、なんと!VmBaseのRunScheduledTasksがInlineになってないということに気が付いてしまって直しましたが、vmbase.h/cpp, towns.h/cppの変更なのでMergeには影響無いと思います。1インストラクションごとに関数呼び出しが1個減るとちょっとはスピードが上がるのではないか、と、期待したのですが、案外変わらんですね(^_^;)

    2021-09-26 00:37:52

  • 259 名前: 山川機長 ID:wY2Q4ZWE3

    pinさん、

    修正ありがとうございました!Mergeさせていただきました!こちらの自動テストは全て成功で、Shadow of the Beastはスプライトがチラつくものの(前からだったかもしれない)プレイに支障が出るレベルでは無さそうで、Genocideも僕が下手であまり先に進めない以外は問題無さそうです。SpriteのState Variableがふたつ増えた分、旧バージョンでセーブしたStateファイルだと多分ズレるので、その点はこちらで直しました。

    大航海時代のオープニングがものすごいスピードで流れてしまう問題を解決したら新しいリリースにしようと思ってるところですが、水曜までになんとかならなかったらそのままリリースにしようと思ってます。IOアクセスを見たらFree Run Timerをモニターしてるっぽいのですが、結構実機に近い挙動になってるはずなのにな。大航海時代は、高校の頃一年下の後輩が学校にあったPC88(だったと思うがメガドライブだったかも)でプレイしてるのを見ておもしろそう、と、思っていたので、冬休みにでもクリアを目指してみようと思ってます。

    2021-09-26 07:58:34

  • 260 名前: 山川機長 ID:wY2Q4ZWE3

    大航海時代のオープニングがあり得ないスピードでスクロールしてしまうのはきっとI/Oの実装が悪いのだろうと思ったら、ただのBUSY LOOPでタイミング取ってた。。。。orz

    2021-09-26 09:15:36

  • 261 名前: pin ID:mYjQ4YWFm

    今は画面全体を一方のページから表示することになるのですが、
    実機では DP1 による表示ページ選択、SPENによる DP1 の有効無効は上から下への走査中にも機能するので
    実機の動作を期待して DP1 や SPEN をいじっている途中に画面更新タイミングが来ているとチラつくというのはあるかもしれません。

    2021-09-26 09:15:45

  • 262 名前: 山川機長 ID:wY2Q4ZWE3

    なるほど!たしかに、プログラムが積極的にSPENのオンオフを制御してるから表示ページ選択もいじってるかもしれないですね。

    ただ、前はSPENをオフにしたタイミングで最後に一度レンダリングしてやることで対応していたのですが、同じ修正を入れてもチラつきが残ったままでした。が、プログラムが自主的に切り替えまで制御していてそれがうまくいってないのだとすると可能性があるかもしれないですね。しかし、シグノシスのゲームは、「そこいじったらだめだろう」という微妙な書き方をしてるのが多い印象ですね。

    だとしても、プレイに影響が出るほどでもなさそうです。

    2021-09-26 23:44:01


全部読む/ 最新50/ 1-100/ 掲示板トップ リロード

  • 1 名前: 山川機長 ID:1MDZmYzQ4

    スレッド分けました。内蔵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

  • 84 名前: 山川機長 ID:4ZDNhNzM3

    ご報告ありがとうございます!多分初期化さえできればあとのコマンドは同じだと思うので、初期化のタイミングが何か違うのかもしれませんね。あるいは、デバイスの種類の判別で想定しない値が返っているのかもしれません。ヤマハのドライブは残念な結果でしたが、他のドライブではまずまずの結果でしょうか。

    2021-06-13 08:54:15

  • 85 名前: Type.d ID:2ODdlZjBm

    >>83 nanさん
    なんとYAMAHAは起動しませんでしたか。自分のはYAMAHAのドライブでした。参考になります。

    2021-06-17 22:25:33

  • 86 名前: nan ID:hNTIyNzZl

    >Type.dさん
    Panasonic KXL-RW10AN-S、ポータブルですが騒音も静かで使いやすいです。
    今はこれをメインに使っています。
    PLEXSTORは騒音の面でちとうるさいです。
    YAMAHAは繋いでいないので全ての確認ができていません。

    2021-06-19 04:52:58

  • 87 名前: nan ID:hNTIyNzZl

    PanasonicのCD-R/RWドライブで朗報があります。
    PLEXTORとI-O DATAはハングアップしてTownsがSCSI-0から起動しませんでしたが、
    PanasonicとMOドライブをONにしてHRを起動するとMOドライブが生き返りました。
    同様をブートローダーで試すとSCSI CDがWAITのままで起動せず。
    Towns HRでMO起動を試したかったのですがそれは無理でした。
    そこで、Towns OS V2.1 L10はV2.1 L51を立ち上げてからMOにインストールしました。
    しかし、メモリ不足でMOのV2.1L10の再起動(REIPL)はできません。
    やりたかったことはできませんでしたが、Windows機とMacBook Proとのデータの受け渡しはMO DISKで可能になりました。

    2021-06-19 07:21:02

  • 88 名前: Type.d ID:mZTBjM2Fj

    nanさん
    SCSI機器は同時に繋いでるドライブの種類や電源のON/OFFによって相性のようなものが発生する上に、変換アダプタを挟むだけでも影響が出るので結構な作業ですよね。調査お疲れ様です。

    2021-06-19 23:54:27

  • 89 名前: WINDY ID:jYjM1MWM0

    >87 nanさん
    TOWNS OSをMOにインストール後、メモリ不足で再起動は出来なかったとの事ですが、DOSのエラーが発生したのでしょうか?
    V2.1 L51で起動後に、V2.1 L10をMOにインストールされたのは何故でしょう? V2.1 L51をMOにインストールしては駄目だったのでしょうか? この辺りのバージョンの違いや手順の違いで上記のメモリ不足が発生しているのではないかとも思うのですが・・・ (私自身は上記のように起動時とは違う版をHDDなりMOにインストールした事は無いので経験は有りません)

    TONWS/FMRの場合、MOの取り扱いについてはリムーバブルとするかどうかで起動ドライブに指定できるか(OSのインストール先として指定できるかだったかも)が決められると記憶していますので、起動に使用する場合はMOドラブ側でDIP SW等で切り換えてやる必要が有ったと記憶しているのですが、違いましたっけ?

    2021-06-21 09:51:17

  • 90 名前: nan ID:kYWJiZjll

    >WINDYさん
    ご指摘ありがとうございます。
    Panasonic CDドライブと MOドライブがONの状態の時だけ
    MOドライブが使えたので試してみたのです。
    Towns OS V2.1 L51のCD-ROMは起動しますが、HDインストールでMOに書き込めません。
    書き込み時にMOのエラーが出てきて続行できません。
    唯一、V2.1 L10のみSCSI HDDで起動して、Qドライブからインストールできましたので
    MOの再起動を試みました。
    起動しようとするのですが、メモリ不足、EMS、またはHMMを解除してくださいと出ます。
    KドライブにはDOS V6.2とWindows3.1がインストールしてあります。

    また、MO[MOS-640]にDIP-SWはついていません。
    90年代は MOにインストールしていました。
    DIP-SWはついていなかったように思います。

    2021-06-21 11:46:55

  • 91 名前: nan ID:2MzFkMWQ5

    MOの起動はHDDモードで初期化してあれば起動するようですね。

    また、CD-Rに
    CDSDMINI.SYS
    CDISC2.SYS
    ASPIFM.SYS
    が書き込んでありました。
    使い方はすっかり忘れております。今はもう必要ありませんですよね。

    2021-06-22 06:25:00

  • 92 名前: WINDY ID:4OGViOWI2

    >91 nanさん
    記憶では、MOをリムーバブルメディアとして認識させるのにはセミIBMフォーマットでフォーマットする必要が有ったと思います。
    それ以外、DOSやT-OSでの区画設定とフォーマットで認識させた場合はHDDと同じ論理フォーマットとなったと思います。 すっかり忘れているので実機で試すのが一番ですが、我が家のMOは生きているのだろうか・・・

    CDSDMINI.SYSやCDISC2.SYSは、YSSCSICD.SYSで置き換える事を目標に山川機長さんが開発されている物ですが、何かの役には立つと思います。

    2021-06-22 09:11:23


全部読む/ 最新50/ 1-100/ 掲示板トップ リロード

  • 1 名前: 山川機長 ID:1MzBkMTk0

    現在Windows 3.1の起動までこぎつけられないかと思ってCPUコアをいじってるのですが、まずLARインストラクションで詰まってたのでそれは単にLARを実装して突破したのですが、INT 91Hで詰まってます。

    どうやら、Windows 3.1は、リアルモードのバイナリのうち処理を奪う必要がある個所に 63H (ARPL)を書き込んで、Virtual 86モードでINT 6を出させて処理をいったんカーネル側に移して、その後、IP+1から処理を再開、としているようです。最初ARPLを見たときは何かの間違いではないかと思ったのですが、最初のうちそのままで順調に進んでいるようだったので、どうやらARPLを書き込むこと自体は正しいようです。ARPLが書き込まれる場所の多くは、書き込み前は90H (NOP)になっているのも多分この書き換えが意図的なものであると考えて問題なさそうです。

    INT 6ハンドラは、0048:00000102ですが、どうも169Cセグメント(DOS?)内でARPLが起きることを想定しているようで、INT 6を受けて、Exceptionが起きたインストラクションが63Hであった場合、Exception発生個所+2バイトに飛び、その場でリアルモードへの切り替えが起こるように書いてあるようです。0048セグメントはひょっとするとEMM386かも。

    しかし、あるタイミングでIDTが書き換わって、INT 6をハンドルするのが0028:80006E5Cに変わり、再度0048:00000102に変わった後で、INT 91Hのハンドラの入り口(07F9:000023F4)のARPLでINT 6が出た後、00B8セグメントのあらぬ場所にジャンプしてクラッシュしてます。INT 91Hのハンドラは先頭にARPLが書かれているのですが、+2バイトではリアルモードに切り替わるように書かれていない上に、00B8セグメントのベースは169C0Hを指したままなので、違うセグメントの無意味なアドレスにジャンプということになってます。

    MSDOS.SYS以外のINTのARPLは0028:80006E5Cだとうまくさばけるようなので、IDTが書き換わるべきではないのか、INT 91Hは別の処理の仕方であるべきなのか、そもそももっと前の時点で何かがこわれててINT 91Hが出るべきではないのか、なかなか難しいですね。どうもこの INT 91H (コンソールBIOS) はコンソールに1BHを書き込もうとしてるようなので、すでにコンソールは表示されていないことを考えると実はINT 91Hが出ていること自体が間違ってるのか。

    なお、Core i9のPCを買いました。最近シングルコア性能は世代が変わってもほとんど変わらんと思っていたのですが、案外変わってたんですね。多分486SXの66MHz近いスピードが出てるようでStrike Commanderが快適になりました。ただ、nVidiaのGPUだったので、OpenGLのVSYNC待ち(なぜかnVidiaはデフォルトでオンにしている)をオフにしないと待ちが入ってスピードが落ちるという問題がありました。

    2021-01-21 00:40:27

  • 2 名前: 山川機長 ID:zM2RlZmQ4

    その後、どうやらクラッシュしてるのはWIN386.EXEが起動に失敗してDOSに戻ろうとする途中のような気がしてきました。なにやらPage Faultが起きてるんですね。そして、そのハンドラの中で同じ場所に突っ込んでPage Faultが起きて、それをハンドルしようとしたところでどうやらあきらめてDOSに戻る途中三度目同じところに突っ込んで、三度目はIDTがEMM386のIDTに書き換わっているようで対応しきれなくてクラッシュ、みたいな感じです。そのPage Faultは000C8000~のFM-R VRAMにアクセスしようとして発生しているので、その領域にアクセスしようとしたらPage Faultになること自体は正しいっぽいのですが、多分、その領域にアクセスするパスに入ってくるべきではなさそうです。

    それで、WIN386.EXE (DOS6もだけど)の中で、RETFをCALLFとかJMPFとして使ってる個所がたくさんあって、コールスタックがめちゃくちゃになってしまうんですね。ということで、シンボルに情報としてJMPF_BY_RETF, CALLF_BY_RETFを記録してそこに突入したら適宜コールスタックの更新の仕方を変えてデバッガで流れが見やすくするところから始めようと思ってます。先は長そうですね。IRET_TO_VM86 (Stack Return to Virtual 86)は考えてみたら検出可能なので対応したのですが。

    2021-01-23 02:25:01

  • 3 名前: 山川機長 ID:xOWI1YzUw

    ↑の問題は、Page FaultでCR2にリニアアドレスを入れてないという問題でした。それを直して、今は、INT 31Hが出てるのですが、対応するIDTのエントリが壊れているらしい (80286の16-bit Trap Gateだと思ってる) というとこですね。一応、今Unit Testを流してるので、通ったらそのバージョンのソースをPUSHする予定です。

    2021-01-24 07:51:07

  • 4 名前: 山川機長 ID:hNjNhMDRl

    異なるPrivilege間のINT/IRETは同じPrivilege間のINT/IRETと微妙に動作が違うことに気が付いて実装したら↑の個所は通過したんですが、INT 31H AX=0602H (Mark Real Mode Region as Pageable)の中で戻るべきリニアアドレスのページテーブルエントリのPresentビットを0にしてしまって、IRETでPage Faultになってるところで止まってます。ひょっとするとこれが正しい動作でPage Faultを出すべきなのかもしれないんですがね、ただ、そこらじゅうでPage Faultのチェックを始めるとCPUコアが明らかに遅くなることが想定されるので、やるならIRETで抜けるところでチェックかと思ってるのですが、しかしここでPage Faultを起こすのも何か変な気がするので現在 INT 31H AX=0602H の中身を見てます。いやな予感としては、メモリを十分搭載していればPage FaultでSwapは起こらないだろうとみていたのですが、V86モードのかたまりのWindows 3.1だとPage Fault起こしまくりでリアルモードメモリをスワップしてたりして。それだと、それに対応するためにTownsオリジナルアプリの動作を遅くするぐらいならWindows 3.1は対応しない方がいいかもしれないですね。ある程度はFractal Engineのために対応してはいるのですが。

    2021-01-30 02:36:21

  • 5 名前: WINDY ID:yMWNkYjA1

    山川機長さんのお気持ちとしては、"FMTOWNSで動作していたソフトウェアは全て動作する"を目指されているのだと思うのですが、状況を見ていると仰る通りTOWNSオリジナルアプリの動作が遅くならない方法が見つかるまではWINDOWS3.1を先送りしても良いように思います。
    幸いにしてTOWNSでWINDOWS3.1を動かさないとならない人もかなり少ないでしょうし、実際の所はWINDOWS3.1に対応してもインストールする人は(ほぼ?)いらっしゃらない物とも思われます。(個人的には、WINDOWS3.1<Linux<WINDOWS95の順のような気がします)

    それにしても、WINDOWS3.1って相当アクロバティックな作りなんですね・・・

    2021-02-01 15:27:12

  • 6 名前: 山川機長 ID:hNGY3Yjgw

    まさにその通りで、Windows 3.1はとりあえずこの間実機のHDDから既にインストール済みのイメージを抜き出すことができたのでやってみている感じで、Windows 3.1そのものにはあまりモチベーションが無いんですよね。Windows 3.1が動作しなければWindows 95も動作しないと思うのでやってるというか。ひょっとするとLinuxの方が素直にできているかもしれません。

    それにしても、本来であればタスクを切り替えるとき、Page Faultが起こらないようにページをマップしたうえで切り替えるべきな気がするんですけどね。試しにIRETしたところでPage Faultを出してみたのですが、これで正しくメモリがマップされて戻ってきたらPage Faultをわざと出させている可能性が高まったのですが、ぜんぜん無関係の領域がマップされたので、それほど単純でもなさそうです。

    春学期も始まってしまったので、多分この問題はしばらく放置状態になりそうです。

    2021-02-03 00:41:18

  • 7 名前: 飯塚軍 ID:yNzdkOWM2

    ありがとうございます

    2021-02-04 11:18:48


全部読む/ 最新50/ 1-100/ 掲示板トップ リロード

  • 1 名前: 山川機長 ID:lOTRkN2Q4

    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

  • 2 名前: 山川機長 ID:mNjZmOGJk

    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

  • 3 名前: WINDY ID:4NjQwZDI1

    随分と前のことですが、モデル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

  • 4 名前: WINDY ID:4NjQwZDI1

    ああ、ごめんなさい。
    上の資料は元々モデル2で逆アセしてたのですが、途中でHCになったので混在している可能性が有ります。

    2020-10-02 11:11:43

  • 5 名前: たけがみりう ID:wMWYxNjIy

    たまにはこっちにも書いてみます(?)

    TownsOSや起動時の処理に影響するCMOSの内容を、既知の物も含め2点あげておきます。

    3C1A 起動時メモリ診断モード(0=通常モード、1=簡略化モード) 3代目あたりから有効
    3AD8 各種フラグ (bit7が1の場合、高解像度モードモードON) ハイレゾ機で有効(とはいっても起動時に参照するわけではない)

    2020-11-07 12:31:39


全部読む/ 最新50/ 1-100/ 掲示板トップ リロード

  • 1 名前: 山川機長 ID:2ZmNjY2Jj

    SCSIのPhaseのMESSAGE_INとSTATUSの順を入れ替えたら、とりあえずSCSIのエラーは出なくなりました。
    が、HIMEM.SYSインストール中に割り込みハンドラを破壊という現象が起きていて原因を調査中です。
    なお、デバッガで BRKON INT 21 AH=3D としておくとfile openで止まるので、pri cst するとどのファイルを開くとこかわかるようになってます。

    2020-07-28 12:59:54

  • 38 名前: [email protected] ID:yOTA2ZDA0

    VERR/VERWありがとうございます。VERRを通過して、CLTS(0Fh 06h)で死亡しました。T-OSはなぜタスク機能を使ってるのか……。
    お盆あんまり関係ないんですよね。まとまった時間取れれば集中してドライバ書いてたいのですが。

    2020-08-14 21:33:10

  • 39 名前: [email protected] ID:iOTlkMGEx

    CLTS実装ありがとうございます。TBIOSLD.SYSとTOWNS.SYSを組み込んだ状態で起動するようになりました。
    ですが、COCO で forrbios.nsd を組み込むとコードでない場所(V86モード)を実行して止まるようです。
    (COCOを組み込まなくても適当なEXPを起動してると同じようなところで停止。同条件でEMM386を組み込まない場合は問題なし。)

    なんとなく根が深そうなので、お時間あるときに見ていただけら嬉しいです。

    2020-08-15 15:15:40

  • 40 名前: 山川機長 ID:1YmIyYTA2

    あらぬ場所にジャンプしてしまう現象は、考えられる可能性として高いのは、
    (1) Exceptionを正しく出してない。
    (2) Exceptionの出し方が正しくない。
    (3) Task Gateを使ってジャンプしている。
    (4) CPUコアに未発見のエラーがある。
    と、このぐらいだと思います。多分、(1)だと思うんですね。なんとか環境を作って調べられないか検討してみます。

    2020-08-16 02:51:32

  • 41 名前: [email protected] ID:1OWQzZTg4

    >>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

  • 42 名前: 山川機長 ID:iZWUxZmQ0

    了解しました!詰まったら、多分実家から回収してきたFM Townsシステムセットアップガイドを見ながらなんとかできると思います。(一応共著者に名前入ってるけどDOS6の部分は全部武井先生が書いた)。やってみます!

    2020-08-19 05:36:29

  • 43 名前: 山川機長 ID:iZWUxZmQ0

    状況再現しました。クラッシュは↓ですね?

    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

  • 44 名前: 山川機長 ID:iZWUxZmQ0

    うーん、もはやどれを信じていいのかわからない。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

  • 45 名前: WINDY ID:lMWM3OGE0

    >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

  • 46 名前: 山川機長 ID:iNmQyZjc5

    そうですね。とりあえずDOS6を走らすレベルでは解決しましたが、ありがとうございます!一応、i486 Programmer's Reference Manualというのを参考にしていて、Intelの公式出版物のようなのですが、エラーが多いです。Intel公式のSoftware Development Manual (多分ia32_arch_dev_man_vol2a_i.pdfがそれかな?) を参考にする方が良い、と、とある知り合いの方から教えていただいたので今後はそのようにしようかと思ってます。

    2020-09-03 05:33:45


全部読む/ 最新50/ 1-100/ 掲示板トップ リロード

  • 1 名前: WINDY ID:kY2JlZjhk

    FMTowns実機や各種FMTownsエミュレータを使用する上での質問事項

    2020-07-28 13:20:43


全部読む/ 最新50/ 1-100/ 掲示板トップ リロード

  • 1 名前: WINDY ID:zNjIyNjU0

    FMTowns新エミュレータ emufmtownsの情報交換用スレッドです

    2020-07-28 12:45:08


全部読む/ 最新50/ 1-100/ 掲示板トップ リロード

スレッド作成

1


管理者へ問い合わせ