スレッド分けました。内蔵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
あ、プリンスオブペルシャは、おそらく起動時からCRTCを変更していないのではないかと思います。Amaranth IIIとかもそうなんですよね。起動時の640x400モードをそのまま使っているのですが、これだと、津軽としてはCRTCレジスタ設定時をつかまえてアプリケーションの起動を検出という手が使えないので、Amaranth IIIは何か別の手を使ったんだったような。しかし、救済IPLは変則640x480モードにしてしまうので、本来見えないはずの画面下80ピクセルが見えてしまうのだと思います。多分31KHzのまま見えなくすることも可能なのですが、見えるのはそれはそれでおもしろいような。
2022-05-15 11:22:58
見えない部分が見えて楽しいので、消すのは勿体ない気もしますね。
20Fの内蔵CDドライブでXak2の様子を見ました。
町(CD-DA)→町長の家に入るとCD-DAが1秒くらいかけてフェードアウト→FM音楽開始と同時に町長の顔表示→家を出る→FM音がフェードアウト→CD-DA演奏開始と同時に町で移動可能になる。
救済IPLでLINE-IN使用の場合
町(CD-DA)→町長の家に入ると1秒くらい経過してCD-DAの音楽が止まる→FM音楽開始と同時に町長の顔表示→家を出る→FM音がフェードアウト→CD-DA演奏開始と同時に町で移動可能になる。
Xak2ではCD-INのボリュームを徐々に下げた後にミュートをしていて、たまたまCD-INとLINE-INの両方を選択してミュートしていた事になるのかな。
ボリュームのBIOS置き換えが出来れば、CD-IN(Lチャンネル)、CD-IN(Rチャンネル)のミュートを、LINE-INのL、Rチャンネルに置き換えて、ふしぎの海のナディアの音声の問題解決になる可能性がありそうですね。
2022-05-15 17:57:53
先に書いたAfterburnerIIのCD-DAが鳴らない件ですが、CDの劣化による蒸着面の欠損でした。
内蔵ドライブに入れたら全く起動しないので、もしやと思い盤面を見たら蒸着面に小さな穴があいていました。
TownsOSのCDプレイヤーが鳴るからおかしいとは思っていたのですが…
お騒がせしました。
2022-05-15 18:11:11
>281自己レスです。
正常動作するAfterburnerIIを手に入れて、CXでFD版の救済IPLを使い起動し、ミキシングが正しく動作することを確認しました。
Towns本体は無事なようです。前のディスクとハッシュの比較しようと思ったのですがマイナーバージョンが違うのでそれは叶わず。
古いほうは1.02なんですがAB2.EXPのSHA1が"C7A27D1DD15269AD09F050B0F60B006BA0195428" でした。
難あり品のほうをWindowsPCに取り込んだら普通にイメージ化できたので津軽でSCSICDとして動かしてみたのですが、
Ver.20220330で音も動作も正常でした。どうも変なディスクです。
原因がいまいち分かりませんが、正常なディスクが手に入って良かったっす。
2022-06-11 02:27:21
私のAfterburnerIIも1.02でしたので、SHA1を出したところ下記の値で多分同じです。
SHA1: c7a27d1dd15269ad09f050b0f60b006ba0195428
ナディアのボリューム関連(ラインINとCD-IN入れ替え)のためにINT80hを変更しようと思い、リアルモードの0000:0200hを見に行ったらそれらしき物が全くなくて(RUN386使用時にINT80hが有効になる??)、
諦めて次にDXレジスタに04E2hを入れてそうなバイナリを適当にサーチして、1個所ずつ04E0hへ変更してもダメでした。
TOWNSのアンリアルモードをちゃんと調べて、丁寧に解析をしなきゃいけないなと痛感しています。
それとICカード版の追加報告で、サムライスピリッツとエルムナイトがスタート~序盤でプレー出来ました。
2022-06-21 00:11:17
サウンドBIOSの 80h のことでしたら、int 80h ではなく push 110h; pop fs; call fword ptr fs:[80h] になります。
run386は110hのセレクタを、CMOSの内容から設定します。(I/O 3b90hからの4バイトが物理アドレス、3b98hからの4バイトがサイズ)
サウンドBIOSのアドレスでしたら、たぶんこんな感じで辿れるのではないでしょうか。
tbios_phys_addr = dword_of(in(39b6h), in(39b4h), in(39b2h), in(39b0h))
snd_ptr = unreal_read_far_ptr(tbios_phys_addr + 80h)
assert selector_of(snd_ptr) == 110h
snd_phys_addr = tbios_phys_addr + offset_of(snd_ptr)
2022-06-21 01:03:11
ありがとうございます!CMOSにそのような役割があったなんて・・・。時間を作って早く調べたい。
2022-06-21 06:19:09
> aochanさん
SHA1の書き込みありがとうございます。
そうですか同じでしたか。不思議だなあorz
2022-06-21 20:00:49
山川機長さん制作のFMTOWNS起動用FRAMカードを預からさせてもらっています。
全部で4枚預かっていますが、aochanさんとD-Typeさんに1枚ずつを優先的に割り当てたいと思います。(以前に掲示板にて動作テストに手を挙げていただいた経緯です)
残りは2枚となりますが、興味がある方で動作テストに協力していただける方がいらっしゃればその方にも割り当てたいと思っていますが2名より多い場合はこの2枚を
期限を設けて皆で順に動作確認をしようと思います。
aochanさん,D-Typeさん,その他興味のある方は、下記メールアドレスにハンドル名と連絡先メールアドレスを書いてメールを入れていただけますでしょうか?
折り返し具体的な方法について私の方から(別アドレスより)メールを入れさせていただきます。
[email protected]
2022-07-01 22:40:10
FMTowns新エミュレータ Tsugaruの情報交換用スレッドです。
Tsugaru : http://www.ysflight.com/FM/towns/Tsugaru/j.html
2020-07-28 12:41:40
おおなるほど。それだと、Orgel問題はCDDAとは何か別の原因のような気がします。津軽起動時のオプションを教えていただけますか?
2022-06-05 11:42:21
データウエストロゴループ問題は原因がわかりました。
リリース版津軽と開発版で別にCMOSファイルをしていて、開発版のCMOS設定ではRAMディスクを有効にしたまま起動していたためのようでした。お騒がせしました。
ただし、その先のメッセージ画面がズレるのとマウスが動かせない症状は最新ソースでもまだ未解決のようでした。
どのバージョンから発生し始めたのかちょっと調べてみます。
2022-06-05 14:17:46
最新ソース版でもFREQを16以下にすればカーソルがプルプル震えるものの動かせる状態、v20210418までならFREQを上げていてもホスト側のカーソルに随伴するようになっていました。
2022-06-05 15:05:13
確認しました!最新版ソースでは直ったと思います。試してみてください!
2022-06-11 21:32:36
最新ソースで確認したところマウスカーソルの問題は解決しました。対応ありがとうございます。
Oh! FM TOWNSの記事を参考に1フレームで表示可能なスプライト数を計測するベンチマークプログラムを作ってみたのですが、表示数を最大の1024枚に指定すると逆に一瞬にして転送が終了してしまう症状がありました。
おそらく1024設定にするとNumSpritesToDrawの戻り値が0になってしまうのかと思います。
実行ファイルとソースコード
https://drive.google.com/drive/folders/1KDAd4OENFB20kDPm0F0hBb1avXmuCes0
検証動画50秒から、1023枚では4フレーム描画(15fps)なのに1024枚になると0~1フレーム描画(60fps)となる
https://www.youtube.com/watch?v=9ExZWcjXdwA
2022-06-12 01:04:59
ファイルはこっちでした。
https://drive.google.com/file/d/1-2AUC5IxDnptaepQpTjcW7UpXejXbMt4/view?usp=sharing
2022-06-12 01:08:19
- と & の優先順位ですね
出先なので動作は試していませんが https://github.com/pinterior/TOWNSEMU/commit/730f54342a074e6aee0a19dfc8f2b153a81dedc7 で直るんじゃないでしょうか
2022-06-12 09:01:51
ああ、本当だ!かっこひとつ足りないし。ありがとうございます!そのように修正します。
2022-06-12 16:05:27
こんにちは。
データウエストの石見銀山殺人事件ディスク入れ替え後2枚目のディスクを認識してくれません。
私は互換ROMを使っていますが、実機ROMを所持している知人は普通に2枚目も遊べているようで互換ROM側の問題なのかなと思っています。
現在の仕様として、互換ROMはCD入れ替えに対応していないのか、それとも「このゲーム」がたまたま対応していないだけなのでしょうか。
2022-07-01 20:37:31
FMTownsのアプリケーションの動作報告用
2020-07-28 13:17:50
・サイキック・ディテクティヴ・シリーズ 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
雑談スレッドでハードウェア解析や考察が話題となっていますが、個人的に別途スレッドを立てた方がよいと思ったので立てました。
強制はしませんが、今後のハードウェア解析や考察についてはこちらのスレッドで話題にしていただけると助かります。
2020-09-24 09:40:33
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
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
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
コメントしてなくてすみません、この結果、ぜひWikiの方にも書き込んでください。
そういえば、I/Oと言えば、MXって高速シリアルのためのFIFOが増えたと赤本に書いてますが、RS232CのI/Oは増えてないですよね。高速シリアルというのがどうやったら使えるのか115.2Kbpsが使えるんだったら実機にファイルを転送するのが3倍速くなるのに、と、思っているのですが。ひょっとしてMXだとi8551互換の速いチップだったりして、と思って試しにタイマーのインターバルに1を書き込んでみた(76800bps)けどやっぱりだめなんですね。それにタイマーのインターバルを最低値の1にして76800bps相当なので同じタイマーを使ってるんだったら仮にチップが受け付けたとしても76800bpsが限界だし。
2021-11-02 04:38:15
>42 山川機長さん
記憶では別にシリアルの最高速度が速くなったわけではなく、FIFOが無いと19.2Kbps位でも割と頻繁に取りこぼすのでFIFOを付けた程度だったと思います。
取りこぼす主原因は割り込みに対する反応が遅かったからではなかったでしょうか? 記憶が曖昧です。 プロテクトモード←→リアルモードのモード切り替えが根本?
2021-11-04 23:29:37
> WINDYさん
返事書くの忘れてました。取りこぼしの要因はまず間違いなくプロテクテド←→リアルモードの切り替えだと思います。津軽でRS232CのエミュレーションでXMODEMでホスト側のファイルをVMに送ることができるようになってますが、この機能を作ってるときだったと思いましたが、VMの動作を調べていて、考えてみると1バイト受け取るのにものすごい無駄な処理してる、と、思った記憶があります。
2021-11-28 10:16:03
CD-ROMエミュレータの制作のためにCD-ROMドライブのコネクタ~ドーターカード間の波形を計測していましたが、いまいち納得がいかないのでMX本体側の回路を見るためにMXを分解しています。
良い機会だと思ったので、メモリカード周辺やその他の回路を見ていたのですが、MXの基板に少々大きめのソケットに刺さったP-ROMが有ることを今更気づきました。
SYSROMにしては容量が大きいので、?と思っていたのですが、漢字ROMやCドライブ等を考えるとある意味納得のいく大きさなのかもと思っています。
(CPUバスに直結せず、メモリコントロールのASICにぶら下がるのであればCPUから見たアドレスは如何様にもなるはず)
折角ソケットに入っているのですから、機会があれば是非吸い出したいと思っていますが、場合によってはSYSROMの内容を改変してブートプロセスや何かのコントロールを変更する手だてが出来るのかもしれません。 なお、全てのモデルでP-ROMがソケットかどうかは確認していませんので、あくまで現時点ではMXに限りますけど。
2022-03-14 15:00:16
HDDから発掘された太古の .com ファイルに基づき、CMOS 3c1ah についての情報を wiki に記載しました。
1を書いておくとメモリカウントが速くなります。
エミュレータで不良メモリが積まれていることは考慮しなくてよいので、CMOSファイルが無いときのデフォルトは1でもいいかもしれませんね。
(ROMファイル吸いだし元の世代によっては機能しないかもしれませんが)
2022-03-21 20:03:37
CFカードのアクセスを調べていました。 やっとそれらしい事が判りました。
まず、PCカードアダプタに刺そうがCFカードはCFカードであり、CFカードとしてのアクセス手順を踏む必要が有りました。
CFカードはカード内にコントローラが搭載されていますので、メモリカードとしてのSRAMカードのようにメモリがそのまま見えているわけではないのでメモリに対する
アクセスはステータスを参照しながらてコマンドを送る必要が有りました。 その、コントローラのコマンドやレジスタの配置についてはCFカード自体のデーターシートに
記載されています。
問題は、#REG信号を操作する必要がありますので、CX以降でないと駄目だと思いますが・・・・ 元のツールだとモデル2でも読めたような気がするので此処は再確認が必要です。
また、上記のようなアクセスとなりますので当然のことながらブートメディアとしては使用できる筈が無いことは明白です。
もう少し詰めてみて進展が有れば報告します。
2022-06-06 18:31:45
FMTowns実機や各種FMTownsエミュレータを使用する上での質問事項
2020-07-28 13:20:43
どうやら1MB・Parallel・5V対応のSRAMがあるようなので、
https://www.mouser.com/c/semiconductors/memory-ics/sram/?organization=2%20M%20x%208%2F1%20M%20x%2016&supply%20voltage%20-%20max=5.5%20V
↑これを使えば実機・PC間ファイル転送用メモリカード作れますね。
注意点としては、TICM.SYSはREGビットを1にしたとき内容が書いてないとメモリカードではないと判断してしまうので、REG=1のときデータバスにFFFFが出るように書く必要がありますが、あるいはTICM.SYSにパッチを当てるぐらい津軽を使えば簡単なので、TOWNS側はなんとかなりそうで、転送するファイルは津軽(UNZも行けるのかな?)のメモリカードイメージに書いてしまえばOKと思います。あるいは、メモリカードイメージを作ればいいんだから、そのぐらいは独立したプログラムを書くことも可能そうです。BPBを作っておけばEDITDISKでも開けるかも。あと、まじめにバッテリバックアップしないといかんですね。あるいはUSB端子をつけて転送中だけ外部から給電できるようにしてしまうとバッテリー無くても良くて環境にやさしいかも知らんですね。
どうやってPCからメモリカードにイメージを転送するかというのが問題で、できれば手軽にUSBか何かでメモリカードライターをつなげてデータが流し込めればいいのですが、現実的に思いつくのはArduinoでしょうか。それだとほぼUSBスピードで書き込めるのでなんとかなるような気がします。(ピンが足りん、と、思ってたら電子工学科出身の友達にシフトレジスタ使ったら?と言われてやっぱり聞く人に聞くものだと思った)カードライターのテストは既にFRAMカードがあるから独立してできるし。
これから大学夏休みだから設計してみようかな。あ、学部生のプロジェクトにいいような気がしてきた。
2022-05-13 01:22:49
FM-7用PCMCIAメモリカードリーダー作りたくなってきた。(暴走)
2022-05-13 01:28:50
現状ではギリギリUSB接続タイプのPCカードリーダーは入手可能ですが、CFやSDカードリーダーに比べると手を出しにくい価格です。
「CFカードって、PCカードから信号線を削除した規格だったよな」と思ったので調べてみたら、アドレスラインが削られている。
しかも、上位16本も・・・・ これでは2Kまでしか扱えないので却下ですね。
Arduinoを使う方法は良いかもしれませんね。
SDカードスロットを付ければおまけでSDカードも扱えるようになるだろうし。(その必要があるかどうかは別として)
2022-05-13 09:36:14
ああ、そう言えばUSB→パラレル変換ICがFTDIに有ったので、それを使う手が有ります。
PC側から全ての制御を行う必要が有りますが、不可能では無いのか。
PCチップは持っているので、コネクタと付加回路を買えば試せるかも知れません。
2022-05-13 10:01:08
TOWNS実機とPCはLANでやり取りしています。仕様プロトコルはNetWare(IPX)であまりメモリを食わないのでLAN Managerのように使うときだけconfig.sys書き換えて…みたいなことをしなくてもいいので重宝しています。
サーバはLinux/FreeBSDで動作するOSSのmars_nwe(http://www.compu-art.de/mars_nwe/)というのを使っています。TOWNS相手だと最新のバージョンではだめで古いバージョン(pl19以前)を探してインストールしなければならないのですが。あと、LinuxもFreeBSDも今はIPXをサポートされなくなったので古いもの(DebianだとStretch以前、FreBSDだと8.4以前)である必要があります。
最大の難点はクライアント側で動かすソフト一式が入手困難となってしまったことです。10年前まではノベルのサイトからダウンロードできたのですが…
2022-05-13 12:38:19
>KtJ Dragonさん
そうなんですね、NetWareだとメモリをあまりくわないのですね。 でも、入手できそうに有りませんね。残念。
通信プロトコル近辺はチンプンカンプンに近いので、難航することが予想されるわけですが、一度(過去にやったことが有るような記憶が有りますが)トライしてみようと思います。
でも、DOS関連で何かと古いので情報も然りなんですが、サポートの問題も有りなんですね。
WindowsでもSMB1が廃止されたと言うことですが、ひょっとしてこれっってPCと直接接続できないって事かな?って思ってます。
まあ、NASが見れればNAS経由でファイルは送れるから大丈夫かなとは思っています。
2022-05-13 18:13:28
昔はWindows95のLANでファイル転送をしていましたが、今は電池切れもあってBUFFALOのASPIマネージャを使用するようになりました。
TOWNS本体にはSCSI接続のPCMCIAカードリーダー(I-O DATAのCARDDOCK EX/SC)を接続し、起動用FDはMS-DOS6.2で作成してASPIマネージャ、ASPIディスクドライバを登録して、
専用フォーマッタで2GBのフラッシュメモリ(SD、CFなど)の127MBだけ確保します。
Windows10では挿すだけで127MBのフラッシュメモリとして使用可能です。
フリーのASPIFMらしきドライバも入手したのですが、フリーのディスクドライバSCSIDISK.SYSを読み込んだあたりで「ブロックデバイスが多すぎます」のエラーが出て止まっていました。
他のディスクドライバも試しましたがダメでした。
MO、CD用であったのか、それともHDDは32MB未満でないと行けなかったか、ASPIFMが別物であったか、正式バージョンでなかったかもしれません。
2022-05-13 23:52:54
>WINDYさん
NetWareのクライアント(とログインに必要な実行ファイル)はNetWareサーバ4以前の日本語版に付属しており、時々ヤフオクに出品されているようです。FM50L186/187のODIドライバもついてきます。
SambaのドキュメントによればこちらもSMB1(やLM認証)はいずれ使えなくなるようです。そのうちにNASもDOSやXP以前のWindowsから参照できなくなりそうです(今のNASはまだLM認証にできるんでしょうか?)。
2022-05-14 00:30:02
>26 KtJ Dragonさん
情報を有り難うございます。
NASのLM認証に関しては、QNAPではNTLMv1認証が最低ラインのようでLM認証は駄目なような気がします。
VirtualBOXにWinXP等をを入れてTOWNSと接続する・・・ しかない?? 出来るような気がするが、これは面倒くさいような気がする。
2022-05-16 09:35:56
他愛もないない事から、悩み事までなんでもお書きください。
では、手始めに私の困ったことから。
我が家の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
>375 山川機長さん
レトロエクスプレスですが会場にいると思います…サポートスタッフとして(滅
2022-04-20 11:50:28
おおそうですか!サポートスタッフだと忙しそうですね!楽しんできてください!
アメリカでもレトロコンピュータイベントってやってるらしいんですよね。いつかTownsと77AVを持って参戦したいと思ってます。
2022-04-22 11:12:43
この間割と安くRainbow Island Extraが手に入ったので、イメージ化しよう、と思ったら、セクタ0にエラーが起きて、イメージ化できませんでした。Alcohol 52%だと全部ゼロで埋まってしまうんですね。ところが、まだSLOWモードにすると起動可能な我がMXで起動したところ、普通に起動しました。試しにCD-ROM BIOSを使って最初のセクタを読んでみたら何のエラーも無く読めてしまいました。
TOWNSでは読めるけれど、他の環境では読めないということは、コピープロテクトなのではないか?TOWNSが出た直後はCD-Rなんていうものは存在せず、CDがコピーできるなんていうことはありえないと思っていたものでしたが、途中でCD-Rが出てきてCDがコピーされるということも可能になってきたので、実はそれを見越してのことではないか?だとすると、TOWNSのソフトの中で、CDのコピー自体を拒否するコピープロテクトはこれが初確認なのではないか?と、思ったのですが、誰かRainbow Island Extraの原本持ってる人います?もしも持ってたらWindowsなりMacなりのイメージ作成ツールでセクタ0が読めるか試してみていただけると検証できるのですが。
数あるセクタの中で偶然セクタ0だけエラーが出る上に、TOWNS実機なら普通に読めるというのは偶然にしては出来すぎだと思うんですよね。
なお、MXで読み込んだセクタ0は比較はしてないですが、普通のIPLのようでした。
2022-05-08 05:13:52
これはうんづですと代替IPLを使用する必要があるソフトで、うんづで実CDをWindowsPCにセットする場合もこの設定が必要でした。
色々なソフトでイメージ化を試しても上手くいかず、バイナリエディタでイメージ修正も試したことがありますが、何も解決も出来なかった苦い思い出があります。
TOWNSのBIOS経由だと読めるのですね。
一体どんな構造をしているのだろう。
レインボーアイランドエクストラ以外にエンジェル、EVOLUTIONが同様だったと思います。
2022-05-08 11:48:59
レインボーアイランドエクストラは持ってませんがスプラッターハウスやプリルラといったRIE以降に発売されたVINGタイトルは問題なく吸い出せたり、同じようにセクター0で止まる現象はザ・マンホール・ぷよぷよ・フリコレ1で発生したことがあります。止まるタイトルのディスクデータ面に傷や汚れがついているわけではなく、吸い出すドライブを変えると正常に吸出しが完了しました。
2022-05-08 12:47:50
おおなるほど!だとするとほぼ確定ですね!うんず+物理ドライブで使う場合だと、CRCエラーが出る影響で、IPLセクタが読めなかったものと思います。だとすると、少なくともセクタ0のエラーは僕が持ってるディスク固有のものではないんですね。偶然できたエラーにしては出来すぎなので、多分意図的なコピープロテクトですね。
ただ、Evolutionはうちのドライブだと普通にイメージ化できましたね。
ありがとうございます!
2022-05-08 13:05:45
マスタリングソフトのバグを踏み抜いてしまったが、TOWNSのドライブのEDC/ECCチェックもいい加減だったために気付かれず世に出てしまった…なんてことはないですかねえ
2022-05-09 03:05:37
代替IPLを使用しない設定にしたうんづで、Evolution、エンジェル、ぷよぷよ、ザ・マンホールを試した所、どれも起動しました。
私の勘違いだったのか、それともOSやドライブが変わって読めるようになったのか・・・。
レインボーアイランドが見つからなくてテスト出来ませんでしたが、このソフトも当時は代替IPLが必要で、私のメモ書きにもそう書き残されていました。
2022-05-09 08:02:53
レインボーアイランドエクストラを、代替IPLを使用しない設定にしたうんづで試した所こちらも起動しました。
実機+救済IPL+外付CDドライブで試した所、レインボーアイランドエクストラ、Evolution、エンジェル、ぷよぷよ全て起動しました。
起動してくれて嬉しいのですけども、あの当時苦労した記憶とのギャップに困惑しております。
イメージ化をした場合のみIPLが消えるのかな。
2022-05-09 20:53:10
現在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
まさにその通りで、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
ありがとうございます
2021-02-04 11:18:48
うーん、どうしてもWindows 3.1が起動しない原因が解明できないですね。Windows 3.1を起動させるために本来のTOWNSアプリケーションのパフォーマンスが落ちるようであればあきらめようと思っていますが、原因がわからんというのが気に食わないんですよね。原因が解明できた上で、これをサポートする価値は無いという結論だったらそれはそれでいいのですが。
現在、
00A7:0000C7B8 INT 31H
AX=0602h Mark Real Mode Region Pageable
BX:CX=Starting Linear Address (0003:5410)
SI:DI=Size (0008:ABE0)
それで、このときはアドレスサイズ、オペランドサイズともに16という半端なプロテクテドモードで動作していて、Windows 3.1のDPMIインターフェースによると、INT 31H AX=0602Hは、リアルモードの線形アドレスをページ可能にするというもののようです。
この関数の中で、BFFFFHまでのリニアアドレスのページテーブル情報をごっそり消してしまうのですが、問題は、このINT 31Hの発射地点はリアルモードだとAE84:C7B8、物理アドレス=線形アドレス=BAFF8Hにあたり、戻ってきたときページが無くなっててそのままクラッシュになってしまいます。
ひょっとしてページフォールトを検出してマップしなおすのかという可能性も考えたのですが、多分それは正しくないように思います。スワップアウトするでもなく、ハイメモリ領域に移動するでもなく、いきなりページを消してしまったのでは、ページフォールトが起きてももともと何があったのかわからんと思うんですね。なので、使用中のページは消すべきではないと思うんですね。
その仮定が正しいとすると、
(1) INT 31Hを出すときのサイズ(8ABE0H)が間違っている。ちなみに、このサイズは起動時にチェックしたリアルメモリ実装量、TOWNSの場合はC0000Hから計算されている模様。
(2) そもそもこのコードがC0000H以降に置かれるべきコードが何かの間違いでBAFF8Hにある。
(3) INT 31H AX=0602hは本来使用中のリニアアドレスのページは消さないはずだが、間違ってBAFF8H付近は未使用と思ってる。
(4) INT 31Hから戻る前に本来であれば使用中ページはハイメモリに移動してページテーブルもそれに対応して更新してから戻るべきところが、なぜか移動とテーブル更新が起きてない。
などの可能性を考えているのですが、いかんせんWindows 3.1の内部という難敵を相手にしているもので、なかなか難しいですね。
このINT 31H AX=0602hの本来の挙動というのはどうあるべきか、誰か知ってますか?
2021-11-02 10:47:44
(ほぼ需要がゼロなのに)あきらめずにWindows 3.1が起動できないか試しているのですが、自爆しているプログラムがKRNL386.EXEであることまでわかりました。どうやら普通にINT 21H AH=4BH (プログラムのロードまたは実行)を使って起動しようとしているのですが、ただし、既にWindowsが起動しかかっているので INT を使うかわりに INT 21H ハンドラにCALLFを使って飛んでいるようです。その中で、どうやらBFFFhセグメントからバイナリサイズ/10hを差し引いたセグメントにKRNL386.EXEをロードして実行するのですが、上に書いた通り自身の中でリアルモードメモリ0~BFFFFhをページ可能にする、というシステムサービスを使って自分を見えなくしてしまって自爆します。
リアルモードメモリをページ可能にするというシステムサービスは正しい動きをしているようなので、KRNL386.EXEがC0000h未満にロードされる以上、必ずクラッシュするらしく、なぜC0000h未満にKRNL386.EXEをロードしてしまうのか、という謎は、アドレスを計算している場所は特定したものの、BFFFhの出どころがまだ解明できていないため、解決には至ってないという現状です。しかし、INT 21H AH=4Bh のデフォルトの挙動としてはプログラムをC0000h未満にロードするはずなので、何か特別なことをしてないとハイメモリには展開されない気がします。
一度、SETUP2.EXEを使ってハイメモリを有効にする必要があるのではないか、という指摘があったので、試しましたが結果は変わらなかったですね。しかし、これが設定の問題である可能性もゼロでは無いので、TOWNSでWindowsを起動するときなにか設定が必要だったとかもしもおぼえてる人がいたら情報をお願いします。
しかし、津軽でWindows 3.1を実行する需要がほぼゼロという問題はあいかわらずあるんですがね。
2022-01-29 02:05:09
自分ではTownsについては良く判かりませんので 参考になるかも判りませんがTownsで Windows 3.1を起動させているサイトの情報がありました。
http://www43.tok2.com/home/cmpslv/Konjo/019/019.htm
2022-02-15 23:26:42
ありがとうございます。参考にさせていただきます。たしかにMAMEのデバッガで正しい動作がどうなのか追ってみるのも手かもしれませんね。
2022-02-16 12:13:56
MAMEで動くのならCPUでしょうか。
CPUで気付いた点で、おそらくほとんどのプログラムに影響しないのでわざわざ報告するのもなぁと放置していた点が何点かあって、
・NEGがAフラグを変更しない
これに依存するプログラムはおそらく地球上にはないので、こっちはどうでもいいと思います
・オペランドへのストア前に状態を更新している
ちゃんと検証できていないのですが、 push/pop mem で PF が起きるとページをマップして再実行した結果、esp が本来の倍変化するのではないかなあと思っています
2022-02-17 01:26:02
なるほど!CPUコアの問題であることは間違いないと思うのですが、現状津軽のCPUコアはFractal Engineを走らすための必要最低限のExceptionしか対応していないので、多分PUSHでExceptionが起こるとそのままVMがAbortしてしまうかも。
が、考えてみるとWin3.1の問題個所ではPFが出るかと思ったらCS,EIPその他をスタックに詰めないのでDouble Faultになりそうな気がしてきました。実はここはDouble Faultを出すと先に進んだりして。というか、それだとするとやっぱり真面目にInstruction Fetchの段階でもException見ないといかんのかな。これを入れるとTownsネイティブアプリに効いてきそうでちょっとやだな。
2022-02-19 00:02:59
おそらく需要がゼロと思われるWindows 3.1対応ですが、DOSBOX上のDOS用Windows 3.1との動作比較の結果、現在ひっかかっている箇所の問題が特定できました。ページテーブルのbit 5, bit 6 (0x60)をチェックしてるから何かと思ったら、Dirty bit (書き込まれると立つ)とAccessed bit(読み書きで立つ)でした。そういえばDOS Extenderでは使って無さそうだから対応してなかった!
しかし、これ対応しようと思ったらメモリアクセスするたびにフラグ立てなきゃならなくなって、(ただでさえ遅いと言われてる津軽なのに)Townsアプリの実行スピードに影響が出ると思ったので、これはビルドするときにマクロ定義かなんかで対応するとして、Windows 3.1を動かしてみたい人は各自ビルドしてもらう方向にしようかな。
それにこのフラグに対応してもまだ起動までこぎつけるかどうかは不明だし。
2022-04-01 22:53:14
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
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新エミュレータ emufmtownsの情報交換用スレッドです
2020-07-28 12:45:08