/*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (c) 2003-2009 Silicon Graphics International Corp. * Copyright (c) 2012 The FreeBSD Foundation * Copyright (c) 2014-2017 Alexander Motin * Copyright (c) 2017 Jakub Wojciech Klama * Copyright (c) 2018 Marcelo Araujo * All rights reserved. * * Portions of this software were developed by Edward Tomasz Napierala * under sponsorship from the FreeBSD Foundation. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. * 2. Redistributions in binary form must reproduce at minimum a disclaimer * substantially similar to the "NO WARRANTY" disclaimer below * ("Disclaimer") and any redistribution must be conditioned upon * including a substantially similar Disclaimer requirement for further * binary redistribution. * * NO WARRANTY * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * $Id$ */ /* * CAM Target Layer, a SCSI device emulation subsystem. * * Author: Ken Merry */ 上記はFreeBSD13.1のsys/cam/ctl/ctl.cのコピーです。 私が改変した部分は下にまとめます。 さて これはなんですか?という部分です。 AdaptecのPCIバス用SCSIカードを使って レトロパソコンのSCSI-HDDの代わりをさせよう という目論見です。 まずは12.2で先に試されていたこの方のレポートをぜひ読んでください。 https://qiita.com/yamori813/items/0203a6f0d016a68bdfc6 それをAdaptecの石でも真似しよう、と試したところ 現行のものでは使えなかったのを PC-98では使えるように改変したので それを皆様に共有しよう、というものです。 OldMacintoshやFM TOWNS,X68kなどで使えるかどうかのレポートは大歓迎です。 必要なもの AdaptecのPCIなSCSIカード 必須です。なければどうにもなりません。 私の手持ちは2930CU 2940AU 2930U2 2940U2W 29160 39160 2910Bです。 UltraからUltra160のカードで試しています。FASTSCSIでも大丈夫なようです。 残念ながらUltra320のカードではダメです。 きちんとしたSCSIケーブル PCIなSCSI側が50pinだったり68pinだったりしますし レトロコンピュータはSCSIのピン配置が特殊だったりします。 USBブータブルなPCIバスを備えたi386アーキテクチャなパーソナルコンピュータ もしくはamd64アーキテクチャのパーソナルコンピュータ 486やPentiumな機種で試すべきではないと思います。きちんと動くものを準備してください。 core2あたりの世代のPCがほぼ無料で手に入れられた時代は過ぎてしまいましたが 何か準備してください。Windows11がTPMというものを必須にしたので そのうちそれに非対応なものが一気に市場に安く出てくるタイミングもあると思います。 x86版では手元のi7 2600kの機械でデータ化けが頻発します。 そのような場合efiから立ち上がるx64版をお試しください。 2GB以上の壊れてもいいUSBメモリ FreeBSDのシステムを置くにはこの程度の容量が必要でした。 これをダウンロードした場所に置いてあった FreeBSDのブータブルUSBメモリ型イメージファイルを書き込めるマシン ちょー簡単な使い方 USBメモリにイメージファイルを書き込みます。 (Windowsでもdd for winなどイメージを書き込むソフトはもうどこででも手に入ります。 なんとかしてください。) 外付けHDDのふりをさせたいパソコンにSCSIカードを挿して電源を入れます。 (その際uEFI専用のマザーボードでは以下のことはできません。CSMモードが存在するなら一時的にこちらに変更してください。) CTRL+Aを押してBIOS設定画面を呼び出します。(eepromに保管されるものを変更します。) IDを7以外の適当なものに変更してください。7のままにした場合起動中に0に変更させます。 BIOSが搭載されていない2910Bなどのeepromを書き換えるソフトはscsiselectですが 98用には互換プログラムを作りましたのでそれで変更してください。 (PC-98側のIDを7以外に変更できるならこれは不要ですが、 PC-98ではSCSIカードのIDは7固定であることがほとんどです。) ターミネート設定はまずは自動のままで構いません。 ついでにID7に対する速度設定もしておくのがよいかもしれません。 非同期設定でないと動作しないようなものがあるかもしれません。 私は最高速度設定のまま使っています。 (一時的にCSMにしていたらこの設定が終わった時点ではuEFIに戻して構いません。) SCSIケーブルで二つの機械をつなぎます。 USBメモリを外付けHDDのふりをさせたいパソコンに挿してブートさせます。 (内蔵HDDなどははずしておいた方がよいとは思いますが任せます。) 画面が青くなったらHDDとして使われる準備が完了しています。 PC-98側の電源を入れます。 BIOSスキャンが画面に表示されるタイプのSCSI-BIOSですと認識状況が見えますので確認します。 フロッピーを挿していなければ、pc98_boot_selectorの画面が表示されます。 そこで設定IDのHDDの中のFreeDOS(98)のパーティションを選択すれば FreeDOS(98)の20220123版が起動します。 https://github.com/lpproj/fdkernel/tree/nec98test 起動した段階でSCSI接続の40MBのHDDとして認識されているはずです。 このとおりに起動できなかったらぜひ報告ください。 動くことは保証できませんが、解決に向かっての努力はしたいと考えています。 まずは上記設定画面でターミネートを自動からDisableやEnableに変えてください。 それでもダメでしたらまたご報告ください。 この使い方で満足できる方は以下を読む必要はありません。 そのままお使いください。 電源を切る時はDOSならばPC-98側をいきなり切っても大丈夫です。 外付けHDDのふりをしている方のパソコンも今時だとACPIがあるでしょうから 電源ボタンを押せばシャットダウンされます。 電源が落ちたのを確認してからUSBメモリを取り外してください。 では上級者編です。 できること PC-9800シリーズ用のSCSIボード PC-9801-55などにつないでパソコンに外付けHDDやその他SCSI機器のふりをさせます。 (上のレポートも参考にしてください。) WindowsNTでもModeSenseでのHSパラメータ取得(32Gの壁をこえられます) できないこと PC-9800シリーズのBIOSの制限事項にひっかかる使い方 容量の壁にはかなり気を使っていますがそれでもダメな使い方はありえます。 (拙作壁こえSCSIを使えば2TBまで可能になります。) PC/AT互換機側でSCSIカードをinitiatorモードで同時に使うこと 見つかっている問題点 複数枚で設定を行う場合ターミネートの設定やケーブルの品質に注意する必要があります。 新しい機種で使おうとすると早すぎて追従しない場合があるかも?です。 最近のCPUを使ったLinux環境ではPCIパススルーでemulatorが使えます。その場合、手元の機種ではKVMを無効にしないと動作しないようです。 私は以下のコマンドで使っています。qemu以外のemulatorは試せていません。 qemu-system-x86_64 -device vfio-pci,host=22:00.0 -m 8G -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2-ovmf/OVMF_CODE.fd とEFIな方がよいようです。PCIパススルーをSCSIで使う、ということが開発者さまたちにはそもそも余り想定されていないかもしれません。 メリット ULTRA2で同期転送をすれば40MB/sを越える速度も可能です。(DOS上で45MB/sを確認しています。) PC-98でテストをしているのでPC-98特有の問題には気を使っています。 当時のものを大事に持っているなら新たに何かを購入しなくてもよいです。 PC/AT互換機側でPC-98で使っていたSCSIディスクをそのままマウント可能にしてあります。 (通常はconv98atというとても便利なものを使ってくださいね。) WindowsNTでの32GBを越えるアクセス(デメリットも参照) デメリット PC-98以外でのテストをまったくしていません。(レポート大歓迎) 小型コンピュータを使ったSCSIemulatorが2022年現在いくつか存在します。 それらに比べて明らかに場所と電力とHDDとして認識させるための起動にかかる時間 比較するのもバカらしいくらい劣っています。 まだ読み書きと認識ができたことを確認しただけで、まともな長期テストもされていません。 SCSIカード1枚あたり1IDしか使えません。 複数デバイスはLUNで動作させますのでPC-98BIOS環境下ではとても不便です。 NECベンダ設定をすると非同期速度にされてしまう場合(NECなOEMのAdaptec製で自動設定の場合)があります。 さて起動した時点では40MBのHDDのふりをさせていますが、そんな容量じゃ少なすぎる! という方向けのことを書きます。 FreeBSDのctlという仕組みで外付けHDDのふりをさせていますが その設定ファイルが /etc/ctl.confにあります。(実体は/hdd/ctl.confに存在) 中身はこうなっています。 target eui.1111111111111111 { port ahc0 lun 0{ path /hdd/40M.img option vendor "NEC__" # device-type 0 # blocksize 512 # headsize 8 # sectorsize 32 } # lun 1{ # path /hdd/cdrom.iso # option vendor "NEC" # option product "CD-ROM DRIVE:462" # device-type 5 # blocksize 2048 # } } # target eui.0000000000000000 { # port ahc1 # lun 0{ # path /hdd2/6G.img # option vendor "NEC6" # device-type 0 # blocksize 512 # } # } target eui.2222222222222222 { port camsim lun 0{ path /hdd/40M.img } } ここでahcがscsiボードの選択です。複数挿しているなら1 2 3 と数字が大きくなっていきます。 lunが設定するlunです。63までの複数のlunが可能のはずですがそこまで試していません。 pathが実際にマウントされるHDDイメージです。初期状態ではFreeDOS(98)を入れた40MBのものを設定しています。 option vendorはNECとしておかないと55ボードで拒否されるため不可欠です。 NECにしておくとSCSI機器側がバージョン1時代のものと返事をするようにしておきました。 そうでない場合はSCSI-3時代であるとの返事をします。 そして8GBまでは8:32、32GBまでは8:128のNT標準ドライバが半強制的に使うパラメータが"BIOSから"あてがわれます。 そうでないとっても古いBIOSに対してもこの値を返しますがその場合511MBより大きいものでは危ない、という認識は持ってください。 PC-98で使う場合では、ベンダのNEC設定を極めて強く推奨します。 しかしCDドライブにNECベンダをあてがった場合、各CDROMドライバがベンダ特有コマンドを送ってきてしまいます。 これにまともに対処しておりませんので、CDドライブ(device-type 5)に関しては不要なベンダ設定はしないでください。 (もちろん実験や改造のためにはお使いください。) そしてcamsimがローカル側にマウントさせる場合のオプションです。 ローカルにマウントさせますがFATですから色々ややこしいことはあります。 同時に書き込むのは止めた方がよいです。 98側から書き込んだものを反映させる場合、一度unmountしてからmountしなおすときちんと読み直してくれます。 mount /tftpbootでマウントしますし umount /tftpbootでunmountされます。 MS-DOSを使う場合マウントしながら使うのは危ない気がします。動かないようでしたらログインしてumountしてください。 逆もしかりでAT互換機側から書き込んだものを反映させたい場合は98をリセットしてください。(ソフトリセットでOKです。) このディレクトリ名で何をやれるかピンと来た人はそういう使い方もぜひしてください。 device-type blocksize headsize sectorsizeは文字列から意味を想像してください。 基本的にはその意味を理解している人向けオプションです。 少しだけ解説すると 実機から吸い出したIDEベタイメージを使うなら headsize 8 sectorsize 17とやってやるとそのまま読み書きできますし hdnとして広まっているべたいめーじ形式なら headsize 8 sectorsize 25 hdsならheadsize 8 sectorsize 32とやればいいとかそんな話です。 詳しくはここには書きません。 (総シリンダ数を4095に丸めますのでHDDとして初期化しようとすると全体サイズが想定より小さく見えます。 どこかで作ったイメージを使う、という用途には使えますがパーティションの切り直しはやめたほうがよいでしょう。) ここでUSBメモリの中で /hddが第2パーティションのFAT16(約700MB)に宛てがわれています。 ですのでこのUSBメモリを適当なWindowsマシンにつなげばここのFAT16のディレクトリが見えるはずです。 40M.imgという名前で適当な容量のものを配置すればそれに外付けHDDのふりをさせます。 ファイル名が気にくわなければ当然設定ファイルの方を書き換えても構いません。 またtarget eui.2222222222222222{ port ahc1 lun 0{ path *** } } と追加していけば別のSCSIカードもSCSI機器になります。 私はAHA-29160がahc0で、AHA-2940U2Wをahc1として割り当てられた状態で 両者を内部68ピンケーブルで接続し PC-98をつないで2台の仮想HDDを割り当てて使いはじめました。 その後39160が手に入り壁こえSCSIのLUNをSCSIIDにみせかける機能追加により複数カードが不要になったため その一枚で外付けWIDEケーブルを接続してそこそこの長期使用しています。 ただし容量の壁には注意してください。8GBを越える容量を無視するBIOSや 8GBを越える容量のものをつないでいるだけで暴走(0除算)するBIOSはたくさんあります。 またPC-9801-92ボードなどは本来、1GBまでしか正常にアクセスできないBIOSです。 それらへの対処はきちんと行ってください。 壁こえSCSIは自信作ですがどなたからも便利だとの声をいただかないので 大容量は不要なのかもしれませんが。 ちなみにFreeBSDの世界では標準エディタはviしかありません。 ですので設定ファイルはWindowsなどからもアクセスできる場所に配置しました。 キーボード配列も日本語キーボードの方は大変だと思います。 (後ろも参照してください。) 以下その不要と思われる大容量のディスクを使うのに必要なことを書きます。 USBメモリから起動すると青い画面になっています。 ここでLiveを選ぶとログインプロンプトに入れます。 しかし一度installを選んでキーボードを選択した方が後で楽になります。 Japanese106の人はそうしておきましょう。 install続行を選ばずに途中でcancelを選べば戻ってこられます。 FreeBSDですからrootで入れます。パスワードは設定していません。 外部ネットワークにつなぐことも可能ではありましょうが推奨しません。 まずはctlを殺しましょう。 ps -ax|grep ctld とやってctldのプロセスIDを見つけてください。 次にkill (見つけた番号)****とctldをまず終了させてください。 そして cp /hdd/ctl.conf /tmp/ctl.confなどとして設定ファイルを避けておいてください。 さらに umount /hdd としてFAT16パーティションのマウントも解除してください。 次に gpart show とうちこんでください。 USBメモリのパーティション情報が見えます。 例えばうちの32GBのものですと da0に BSDスライスとFAT16パーティションが見えます。 1 ******** da0 MBR(29G) 1 2457600 1 freebsd[active] (1.2G) 2457601 1433600 2 fat16 (700M) 3891201 ********* -free- こんなものが見えるはずです。 ここで残りのものもFAT32パーティションにしてしまいましょう。 gpart delete -i 2 da0 gpart add -t FAT32 -i 2 da0 newfs_msdosfs /dev/da0s2 これでうしろの全域がFAT32で再初期化されました。 ここにもう一度40M.img名のファイルをおいてください。 それで完結できます。とはいえFAT32はファイルサイズ4GBの制限があります。 Windowsで準備することを考えるとexFATかNTFSが必要です。 exfatには対応させました。 コマンドの後半を gpart add -t ntfs -i 2 da0 mkfs.exfat /dev/da0s2 に変えてください。これで残りをexfatで初期化します。 しかし/etc/fstabがこのままでは自動でマウントしてくれませんので 変更をしなければなりません。 mount -o rw / vi /etc/fstab と打ち込んでください。 viの操作で(頑張ってください。) 3行目の#を消して2行目の頭に移してください。 amd64版の方では最初からexfatにしておきました。 パーティションを切り直すのは gpart delete -i 3 da0 gpart add -t ntfs -i 3 da0 mkfs.exfat /dev/da0s3 で行ってください。 etc/fstabは書き換える必要はありません。 ここまでが終わったら mount -aで再度マウントをし cp /tmp/ctl.conf /hdd/ctl.conf と設定ファイルを書き戻してください。 そして電源を落とし Windowsなどから必要なファイルを書き込んでからまたこのUSBメモリでブートしてください。 修正追記 キーボード設定をしないままで日本語配列キーボードをお使いの場合 "_"が通常の位置のものを押しても出ません。 "ほ=" のキーをシフトを押しながら押してください。 それで日本語キーボードで"_"が出ます。 HDDイメージファイルはべた形式のみに対応です。 世の中に出回っている形式のものには非対応です。 対応するにはctl_backend_block.c内のファイル読み書き部分に 公開されているヘッダ情報やらを追加してコンパイルしなおしてください。私は行いません。 以下改変部分の解説 sys/dev/aic7xxx aic7xxx.seq /* セレクション後にATN信号が届かない場合に即処理終了されていたのを 粘って同期信号を取ろうと変更、それでもこなかった場合非同期扱いにした。 同期信号自体を送ってこないタイプのものが見つかったのでその場合数値をごまかすことに変更 (PCIタイプのSCSIカードに多数存在) 100ボードのASPIドライバなどが2930CUに対しては同期信号にC0hを送ってくる。(29160には送ってこない。) おかしくなるので40hも強制的に落とした。 この方式で弄くりを一度止めます。 target_inb2付近 */ 色々と一番弄くったものです。上記のやり方ではLUN番号で間違いが発生していました。 まずULTRA2のカードではセレクションされたあとに謎の待ち時間が必要です。それをやらないとレジスタの読み書きが不可能になってしまいます。 ATNなしでのコマンド送信をPC-98のInt1Bは頻繁に行いますのでその判別だけを入れてあります。 メッセージフェーズに行った場合にさらに待ち時間をいれないとまたレジスタの読み書きができなくなってしまいます。 (デバッグメッセージを表示させるなどしてこの時間をずらすとまた読み書きできなくなることを確認しています。) このためULTRA2のカードは謎の待ち時間が大量に入ってあります。 そうでないカードでは待ち時間はほとんど必要ありませんが、その代わりにIDENTIFYFLAGに切断不可能フラグが入ってあっても消します。 aic7xxx.c //Someone RESET の画面表示がうっとうしいのでprintfをコメントアウトした。 コメントアウトを戻してます。 いくつかpanic条件を満たした場合でもpanicしないように変更 LUNをCDBで指定してあった場合に取り込むことに aic7xxx_osm.c 非同期に戻された後に(リセット後などに)同期速度を戻そうとする部分を黙らせた。 usr.sbin/ctld token.l parse.y ctld.h ctld.c kernel.c HSオプションを足した。 sys/cam/ctl ctl.c INVLDコマンドが来るとステータスが失敗扱いになってしまう。 DOS6のFORMATコマンドが使うSCSIコマンドがふるーいものなのでそれを無視できるように変更。 mode_senseのページ1のサイズが10byteでとても困るので6byteに変更できるように ページ4のサイズもNTのドライバは確認しているので変更 2025-7-1版ではpcもちゃんとやるように変更、モードセンスの返事は修正しました。 2025-7-2版では再修正 SEEKコマンドが失敗扱いになるとRvIIのBIOSが無効にするので VERIFYに変換して何もさせずに正常終了するように変更 LUN0以外で実行不可能コマンド扱いされていたものを無視しないように変更 容量によってCの最大が4095に収まるようにHとSをテキトウに選択。 準備してある40MBのものは8:32になります。 //適当に選択しなかった場合0のままだと0除算してしまう場合があったので255:255をデフォルトに変更(BIOSからは見ない値) デバイスをマウントした場合にもサイズ設定を行うことに Inquiryの有効ページの返事がおかしかったので修正(WindowsNTがインストールできるようになってます。) ctl_private.h ベンダがNECの場合だけmode_senseのページ1のサイズを6byteに変更するようにした。 ページ4のサイズもNTのドライバは確認しているので変更 ctl_backend.h ctl_ioctl.h ctl_backend_block.c オプションでHSを選択できるように追加 ctl_cmd_table.c SEEKをVERIFYで処理 READ_6をCDでも使えるように変更 scsi_ctl.c CAM_SEND_STATUS付近の 書き込み終了時のステータスを強制変更 IDが7のまま起動した場合は0に変更するように変更 cam_periph.c DIR_INとDIR_OUTの向きが間違えている。 https://qiita.com/yamori813/items/0203a6f0d016a68bdfc6 で報告されているとおり scsi_target周り /usr/share/example/scsi_targetにあります。とはいえこちらは今回からは触っていません。大本通りです。 /* こちらでは起動後にIDの変更が可能です。 さらにctlと違ってユーザープログラムなので暴走してもシステム全体を狂わせることは少ないと思います。 scsi_target.h 定義されている最大値を大きめに取り直した。 scsi_target.c CHSの調整(壁こえSCSIと同じ方式) abort_all_pendingで死ぬことがあるので無効化 書き込み時問題が出るのでnotaio = 1を強制 scsi_cmd.c 必要そうなコマンド追加 mode_senseを55ボードのものに合わせた。 書き込み時にCAM_SEND_STATUSが立たない問題はこちらも同じ こちらではそれを追加しておきながら、残り0byteまでは繰り返させる方式にした。 */ PC98型パーティションをOSから見えるようにするための変更部 sys/geom/part/g_part_pc98.c sys/sys/diskpc98.h FreeBSD11.4までには存在していたものをそのまま復活 HSパラメータは壁こえSCSIが設定する方法と同じ方法で取得 パーティション先頭がシリンダ境界になくとも一応は認識するはずです。 sys/fs/msdosfs/msdosfs_fat.c FATIDとメディアディスクリプタが一致しない場合(NEC製DOSはそのように作ります)に素通しするように sys/usr.sbin/fstyp sys/geom/label/g_label_msdosfs.c BPBが55AAのシグネチャで終わっていない場合(NEC製DOSの作るFATはそうなります) 無視していたのを無効、BPB内のFAT12、FAT16の文字列などで一応安全策はとられていると思います! sys/sbin/mount_msdosfs.c デフォルトオプションでデコードをCP932 ローカル側をUTF-8に設定 GUIでやるならbsdisksを使って/usr/local/etc/bsdisks.confで設定すべき値です。 ファイル名にアルファベット小文字を指定してしまうバグを公式に報告しましたが治ってるか確認してません。 こちらは対処しています。 謝辞 先に紹介させていただいたもりやさんの報告がなければ このような使い方に気づきもしませんでした。大変感謝申し上げます。 なお @yukkurizさん ArdSCSinoやBluePillの改造経験からさまざまなアドバイスをいただけました。 特にATN信号のロジアナでの解析情報は大変参考になりました。 sava @lpprojさん FreeDOS(98)の現行開発者さまです。 いつも素晴らしいつぶやきをされています。ファンです。 HDDイメージにFreeDOS(98)を使ってもよいか?との質問に助言をいただきました。 ありがとうございます。 リサイクル掲示板の参加者のみなさま いつも、わたしの戯言に相手をしていただけてとても感謝申し上げます。 特に くりすと @kurist2010さんの報告がなければ WindowsNTでのmode senseパラメータへの対応は不可能と思い込んでいました。 情報の公開に感謝致します。 最後に これをPC-9800以外でも使えるよ、やっぱり98でも使えなかったよ、という報告は 使えなかった、というものも大変励みになりますのでぜひ報告ください。 ライセンス FreeBSDですからバイナリだけでも構わないのですが商用、非商用含めて そのあたりは注意だけはしてください。私も注意します。 BIOS動作試験 target 2930U2 6000MB設定(mode sense 15:255) PC-9801-55U OK 非同期 PC-9801-92 OK 非同期 PC-9801-100 OK 非同期 DOSでもASPIドライバを組み込むと同期10.0MHzに SC-98II OK 同期10.0Mhz LHA-201B OK(headをrigid diskから取得)同期5.0MHz IFC-NN OK 同期10.0MHz IF-2560 IF-2771 同期10.0MHz LHA-521UA OK(headをrigid diskから取得) SC-UPCI OK(headをrigid diskから取得) AHA-2940AU/JA OK RvIIオンボード(2940AU相当) OK Xt13オンボード(2940N相当) OK 速度設定が強制自動のためNECベンダのディスクに対しては非同期になってしまう IFC-DP 8:32設定に強制設定される Windows9xのドライバはBIOS設定値を使ってくれると思います。 ログイン直後にインストールドライブならば64kBを越える転送(どのファイルか調査していません。)を行います。ここで必ずこけていました。 インストールせずにデータドライブとしての使用に問題なかったので気づきませんでした。2025-7-1版で修正 WindowsNT 92互換ドライバ 3.51でインストールOK 100ボードドライバ OK SMITドライバ OK RvIIオンボードOK 他未チェック そのうちやります。 Windows2000 Adaptec製カードしかチェックしてません。リセットをはさまないとインストール及び起動ができない感じがあります。 データドライブの場合は特に気にせず使える気配がありました。 複数LUN試験 Xt13オンボード ASPI8DOS.SYS /Lオプションと ASPICD.SYS /LオプションでDOSからアクセスできたことを確認 RvIIオンボード Windows2000のドライバが何も設定しなくともアクセスしてくれたことを確認 CバスSCSI LUN対応のASPIが存在しない そのうち作りたいと思ってます。Windows95ドライバでは55、92互換ドライバではLUN対応している。 ctladmコマンドで入れ替えやら何やら色々できるみたいです。 試したこと ctladm devlist -v で設定されているものがまず見えます。lの番号を確認してから ctladm modify -l 1 -b block -s 1234567890 -o file=/hdd/cdrom.iso などとやるとファイル名のものと入れ替わるようです。 -s で自動でサイズチェックしてくれないようですのでテキトウな数値を放り込んでください。 2022-11-18 0:07(JST) この版ではUSBメモリ上のda0s1aのファイルシステムが狂っていました 2022-11-18 14:30(JST)誤記など微修正 USBメモリイメージが壊れていたので修正アップロード 2022-11-22 セレクション周りを改修(98側がPCIでの認識がましになったと思います。)、 100ボードのASPIドライバ対策、実験機器の公開 2022-11-28 NT3.51からWindows2000までのSCSIでmode senseからパラメータを取らせられるようにもろもろ解析 256Bytes/Sectorにも対応 2022-11-29 AdaptecからOEMで出された板の場合BIOS設定ができない場合があり(手持ちの2940U2W) そのためIDが7のまま起動していたものは6に変更することにした。 2023-1-26 FreeBSD13.1をベースに変更 NEC256オプションは無意味なので削除 (option blocksizeだけで適切に対応可能) 同期設定が終わった後にPC-98側をリセットした場合に 一度非同期に戻った後に、ターゲット側から速度変更を頼む という機構を潰した。 CバスSCSIのほとんどのものはターゲット側からの速度変更を考慮していない。 複数LUN設定に対応 ASPI8DOS.SYSとASPICD.SYSの組み合わせでDOSからのCD読み出しが可能であることを確認 HS設定をオプションで細かく設定だけはできるように追加 FreeBSD/pc98 11.4のCDROMイメージをテスト用に同梱、SCSIーCDからブートできてしまう事実を眺める専用 2023-1-28 x64版を追加 exFATのブート時自動マウントができてなかった間違いを修正 2023-1-31 CDB内でLUNの0ー7を指定できるように追加、シリアルコンソールを有効化、inetdでtelnet ssh tftpだけ開けた 2023-2-12 HSパラメータ未設定時に起きる0除算バグを取り外し、PC-98でフォーマットしたディスク(512Byte/s限定)をOSから読めるように変更、 40M.imgをローカル側にもマウント 2023-11-30 readmeだけ改版 長期使用中、今のところ気になった問題はwindows2000でのHS設定値の動作だけです。 PC-98のDOSはFATテーブルの0番クラスタの次の1番クラスタを見ている気がします。 PC-UNIX系のFATドライバはこの1番クラスタにdirtybitとclearbitを設定しているものがあります。 アンマウント状態でないと98側でMS-DOSの起動が止まる気配があります。FreeDOS(98)は大丈夫のようですが 気になるので次回(があるならば)はdirtybit機構をドライバから外すつもりです。 2024-9-10 公開場所の変更に伴って少し文言修正 CP932(SJIS)にロケール変更 2025-7-1 Windows9xのログイン画面で必ず起こる一度に64kB以上のサイズの転送、これに対処 SCSIIDが7だった場合に変更する値を6ではなく0にした。 Inquiryの有効ページ報告を直した。 モードセンスの返事がおかしかったところも全体に弄った。 デバイスをマウントした場合にHS設定が効かなかったのを有効に変更 FATの小文字問題を勝手に訂正 付属40M.imgを手もとの最新FreeBSD.MBRに入れ替え 2025-7-2 モードセンスのRIGID_DISKのページサイズをWindowsNTのドライバが見てることを再確認できたので削除から復活 2025-7-4 x86版の/etc/fstabの設定ミス修正 https://twitter.com/drachen6jpの人 リウ名義で掲示板に出没しています。