2024年6月23日日曜日

Generative MV

ICCでやってた坂本龍一トリビュート展、お友達と見に行った時の感想の中で特に印象に残ってた〈Generative MV〉について、今通ってる芸術大学のレポート題材にして書いたのでここにも載せときます。本来は映画等の映像作品を題材にする事が期待されてたので、インタラクティブなインスタレーション作品を対象として書くのは少し冒険だったけど、ぼくの人生で一番大切なところに切り込んできたと感じた作品だったので。全体の講評を聞く感じ、自分の人生や行動にどう影響を与えたかを具体的に書いた方が高得点に繋がったっぽいかな。理系人生長かったので、人文や芸術系レポートの要求に対する細かい配慮がまだ足りてないです。

2024年4月21日日曜日

MZ-1500とQD関連

MZ-1500のメンテとQuick Disk関係で少し手を動かしたのでメモを残します。

入手したまましばらく寝てたMZ-1500の動作確認をしたところ、想定通りQDが動作しません。ファミコンのディスクシステム同様にゴムの劣化だろうと思い情報を探したら、ありがたい先人のページ(MZ-1500 QDドライブのベルト交換)を見つけ、その情報に従ってゴム交換をしたところ、無事動作するようになりました。

で、無事に動作したのでした。紹介されてる通り、千石で「φ40×1.2T ゴムベルト(角)」を入手してます。

で、あとはメディアなんですが、最初の投稿で、ファミコンのディスクを改造して使えないかなーって書いてたら「できますよ」ってコメントがあって。ディスクケースのサイズが違う事だけが問題らしいので自作する事に。

初回はこんな感じ。その後、ラベルの凹凸が逆だったのを直したり、不織布を安全に貼るために少し内部形状を変えたりってのを作って、しばらく寝かせてました。

んで、この新しいケースを使ってロポコ用のメディアを作ることにしたのが本日。いや、本当はそこまで気力なくて700取り出して動作確認だけと思ってたんだけど、ロポコ良い感じなのとQD対応してるようだったので、この際いっきにQD周りの知識を仕入れちゃおうという気力が湧いて。マニュアルとか持ってなかったのでモニタコマンドは当てずっぽうだったんですが、QXってコマンドを教えてもらえて。これ使うとテープ用のデータをそのままQDに保存できるんですね。で、最初に保存されてるやつが起動時に自動実行されるらしい。

ロポコに関しては容量的には1枚に入るんだけど、動作させるのにはテープと同じ構成で2枚に分ける必要があるっぽい。シナリオディスク読む時に先頭に保存されていないと駄目なのかな?あとセーブする時にうっかり既存の名前いれるとエラーして無限ループに入るのがちょっと危険w(→なんとアップデートでエラー時に回転止まるように修正されました。boothにてv1.2.1で修正されてます。感謝!!)

で、ある程度の確認がとれたので、このケースのデータはここに公開しちゃいます。このデータでJLCPCBで作ってもらいました。細いところもあって「このまま作ると破損するかもしれないけど良い?」みたいな事を聞かれるかもしれないので、その時は「自己責任」でOKした上で依頼してみてください。何個か割れかけたのが混ざってるかな?くらいで仕上がるとは思います。片面のデータなので、ペアにして1枚のケースを構成します。

2024/9/23追記:選ぶ材質によっては湾曲して実用にならないようです。自分もベストな選択をしているわけではないですが、SLA(Resin)-Black Reginで実用に耐える成形ができています。

実際に作る際の手順も少し書き残しときます。

まずはディスクの分解。この書き込み禁止のところが一番攻めやすい気がします。ピンセットでうまく引っ掛けて、テコの原理でミシミシっとやると良いです。磁性面が見えてる窓とかもやりやすいとは思うんですが、磁性面をに傷をつけたらアウトなので、四つ角から攻めるのが良いです。それかNintendoロゴの粉砕。あの部分もガワだけ……だけど硬いし非推奨。破片で磁性面を傷つけるリスクもありますし。


こんな感じ。ディスクシステムのケースは裏と表で非対称でオスメスある感じです。外周部にところどころある円柱とNintendoロゴがはめ込みパーツになってます。このロゴ、何気に工業デザイン的な意味合いもあったのだ。
あと、これ見て安心して良いんですが、不織布はディスク全体をくまなく覆う必要はないみたい。ケースとの接触で回転時に磁性面が傷つかないように、という役目はあるものの、大部分が覆われていたら、不織布の厚みで浮くから、ケースと直接接触することはなくなります。逆に不織布付けないと直ぐに円状の傷だらけになります。


ただ不織布にはもう1つの役目があるそうで、回転しながらディスクが拾ったゴミを拭き落とす効果が期待されています。フロッピーとかはメディアをわざと挟み込んで圧力かける機構があるくらい。んで、ディスクシステムのケースも不織布を外してみると、こんな感じで上下で45度ずれる感じで、互い違いに法線方向の細い土台が盛り上がってます。この効果で回転時には磁性面はゆるやかに波打つような動きをして要所要所で不織布に接触してゴミが落とされる感じらしい。使用エリア最内周から最外周までキッチリで作られてますね。メディアを出しっぱなしにしたり、埃っぽい環境での使用を考えるなら真面目にやった方が良いのかもしれませんが、まぁ大人だし(笑)って事でここは真面目に再現しませんでした。


不織布に関しては、CD用の不織布ケースを使って、こんな感じでケースを中に入れて、セロファン面に雑に線を引いてやって、最後に中身を抜いてセロファンと不織布を同時にカットしてあげれば不織布の部分は作れます。


最後に円から外れた角に接着剤を付けて、上からカットした不織布を載せます。接着剤が多すぎて円周内に入ってきちゃうと、固まった接着剤が磁性面を傷つける可能性があるので、外側にちょこっとだけ。全面貼らないと剥がれちゃうんじゃないかって不安になりますが、挟み込んでしまえばめくれ上がる余裕はなくて安定してますね。
最後は四つ角にある四角形の凹凸のとこに接着剤を付け、磁性面を挟んで閉じてあげれば完成です。

2024年3月23日土曜日

ついにNew City Heroが実機で遊べた

前回のNew City Hero @ j80/macの続き。

エミュレータで動作確認してから実機で〜という事で奮闘しておりました。

まずは搭載メモリの確認からです。

そしてM.K WorkshopさんのPSA基板を利用してボードを作成しようと思ったのですが……上のスレッドでも書いているように、どうにも世の中は半導体不足。表面実装の74ロジックICが思うように手配できません。指定ではLSになっている部品もやむを得ずHCを使う事に……そしておそらくこれが敗因。HCだと出力弱いからファンアウト大きくできないし遠くに飛ばすには不向きってあたりが怪しいのかな、と。

ハンダ周りを見直して気になるとこは盛り直したり、色々とチェックしてみたんだけど改善せず。タイミング周りを調査するのは手間だし、頑張ってもあまり得るものも無い気がしたので、元々の最終ゴールだった完全自作へと踏み出します。 

基本はPSAベースなのでI/O 1981年6月号の記事を読み解いていきますが、論理はCPLDに全部収める方針。また、NCHが3chサウンド対応なので、その部分の拡張も取り込んでいきます。またこのPSAではPCG-8100同様に文字コードの半分の128キャラ分を任意パターンに置き換えられるようになっていますが、256キャラ全部を置き換える拡張にも対応させました。

この辺りの回路も同期回路で置き換え。Verilogで100行ちょっとくらいの論理です。Z80からのI/Oを受けて、かつキャラクタージェネレータ側のアドレスバスとデータバスに繋げる必要がありピン数は70くらいは必要。またピン数多い=レベル変換したくないので5Vトレラントなデバイスが良い……という事で現行チップから候補を見つけるのは難しく、骨董品のMAX7000(7128STC100)

ミキサーとアンプはM.K.Workshopさんの回路を追ってこんなもんかなーって書き起こした回路図を眺めて、増幅回路の教科書的なものと見比べて怪しいと思ったところを手直し。たぶん回路を追いそびれたり読み間違えたりしてる。

そして届いたのがこれ。

表面実装のコンデンサは綺麗につけるの難しいし、確実に線が繋がってるかの自信が持ちにくい。ただでさえ回路に自信がないから不確定要素を減らすために工場で実装してもらっちゃってます。CPLDとかSRAM、ボリュームなんかはあちらで手に入らないものだから自分の方で実装。

最初のテストはこんな感じでCPLDの書き込みをして、次はZ80とキャラクターROMだけ載せた状態でCPLDには信号をほぼほぼパスするーするだけの本体基板相当の回路を書き込んで通常モードの動作を確認します。ここまで動けば基板の方は問題ないからCPLD側の論理のデバッグに集中できる。

んでまぁ、ここでCPLDの論理も一通り出来てたんだけど、検証してからじゃないと本体壊しても嫌だし……と2週間くらい渋るわけですが(笑)とりあえず最低限のテストをして最終動作確認へ。この辺り、趣味でやろうとすると大した環境がなくて辛い。仕事でやってた頃はQuestaでOVM使ってSystemVerilogで書いたテストをぶん回してたんですが、手頃にCI回せる選択肢となるとiverilogになってしまう。でも環境についてはVS Codeで新たにいくつか拡張を導入して試してみました。Verilog-HDL/SystemVerilog/Bluespec SystemVerilogとかWaveTraceとか。後者はライセンス購入しないと8chまでしか信号見れないので購入しちゃった。gtkwaveと比べて何が良いって全てCodeで片付くってだけではあるんだけど、まぁ高くはないし。

という事で出来た成果物はここに置いてあります。実はサイズを図って作ったにも関わらず、Z80とキャラROMの位置が少しずれてて、幅が2.5ピン分くらい狭くなってしまっています。何かしら不具合あるだろうし、この基板で確認できるとこだけでも確認しよう……とソケットの下駄を履かせ、ピンが少し外側に出るように折り曲げて2.5ピン分を補正してます(汗)もしこれを参考に自作する際には、基板は作り直してくださいませ。あとSRAMもこれはもう秋月に売ってないので別のやつに差し替えるなり。そもそもMAX7000ありますか?って話でもありますけど。

こんな感じでばっちり動作、安定してます。NCHクリアまで遊び倒したいと思います。ちなみに実装スペース的には下に一段下駄を入れて上下ちょうど収まる感じですね。下駄がないと下側で他のチップとぶつかるかもしれないし、上もこの状態でキーボード基板に接触しないスレスレでした。接触してもショートしそうな部分がないのは安心ですが、放熱的に少し心配ではありますね。Z80やROMはそれなりに熱くなりますし。

2024年3月14日木曜日

Apple IIc をメンテしてフロッピーから起動するまで

Apple IIeは持ってたんだけど、最近IIcを手に入れて。ACアダプターがなかったので海外から手配したら、なんか長年Apple IIどっぷりな方で、いろいろな資料といっしょにWozとのツーショット写真が送られてきた……というのはまた別の話。

で、IIeを持っていたけど全然使い込んでないから何から手をつけたら良いのかわからない……というところからドライブをメンテ、仮想HDや仮想FDを駆使しつつ、実FDから起動するまでのメモです。

まずは動作確認をしてみたところディスクドライブのエラーで止まる。ドライブが生きてる事は期待してなかったけど、ここで止まって何もできないのは想定外。IIcまったくわからん……ってなりかけてたんだけど、ほとんどがヘッドクリーングで治るという話をみかけてチャレンジ。

Apple IIcの分解は手前の爪を外すところがちょっと難しい。IFIXITのDisassembling Apple IIc Coverに詳細が説明されてるんだけど、写真みても実際に外してみても、うーん……どうなってたんだ?って感じでした。ここが外れたら、ディスクを下に残して、最後に裏面がまたトリッキー。うまく説明もできないので、YouTubeで誰かの修理動画さがして見て下さいw

ドライブについてはApple IIc Floppy Drive Replacementを見るとヘッドにアクセスするとこまで分解できます。1Dなのでヘッドが下面にしかついてないのが新鮮。裏面にはベルトがあります。交換し易い場所にありますが、今回はなんとまったく劣化していませんでした。気になる点は

  1. ベルトの劣化でディスクが回転しなくなってないか
  2. ヘッドが汚れていないか(問答無用でクリーニングで良いかと)
  3. ヘッドが移動するか
あたりなのかな。起動時にヘッドが外周側に向かってガガガガガガって動いて、壊れてるのかと思うけど、これは正常っぽいです(笑)。とりあえず手で内側に移動して電源入れて初期位置に戻るならOKなのかな。自分はそれで納得してクリーニングだけでフォーマット試しました。

ちなみに実際には、直さなくても先に進めるし、メディア入れてなければ壊れてなくても必ずこのエラーで止まるんだけど、それを知ったのは分解後なのであった。ちなみに、ここから内蔵BASICへ進めるにはCTRL+🍏+RESETを押せばOK。なんじゃって感じだけどRESETは単体押しだと何も起きない、ただの一般キーなのね。

How to get into Apple BASIC prompt on an Apple IIc?

ここにROMバージョンの確認の仕方があるけど、アドレス64447を読んで255なら初期版で`PR#7`でSmartPort経由の外部ドライブから起動できるらしい。それ以外だと内部ドライブが#6で外部ドライブは#6のセカンダリなのかな?そっちからは起動できない、と。自分のやつは0。新しいと3とか4もあるらしい。内蔵BASICでもディスク周りのサポートはそれらのブートだけで他の機能は何もない。

で、これは起動ディスク何か持ってないと何もできない?ってなりかけたんだけど、同じくSmartPort経由のハードディスクからは起動するようです。

というところでドライブのメンテの話に戻ります。この先どうやって動作確認を進めるかと言うと、Kero's Mac ModsさんのSPIISDを使ってProDOSで起動します。ここからCopy II Plusを使えばフロッピーのフォーマットとファイルやディスク単位のコピーが出来るので、まずはフォーマットできる事を確認して、ProDOS主要ファイルをフロッピーにコピー、無事にメディアから起動できれば確認完了。

あとは、この状態でハードディスクから起動したProDOSでイメージファイルを実FDにクローンできたら良いのだけど、その方法は知らなくて。今度はSmartPortにBMOW Floppy Emuを繋げた状態で実FDからProDOSを起動、Copy II Plusを使って仮想FDから実FDにディスクコピーという方法をとりました。ケーブルさえ用意すればSmartPortで仮想HDと仮想FDを同時に繋げる事もできるらしいけど。

これ以外でエミュレータと実機でデータやりとりするにはCiderPress IIを使う方法もあります。これは国産レトロPC向けツールで言うところのDisk ExplorerとVirtual Floppy Image Converterがセットになったようなツール。SPIISDのハードディスクイメージがProDOSフォーマットでこのソフトを使って中のファイルを読み書きできる。

フロッピーのメディアについては1Dなんだけど、2DDがあればOK。

この辺で軽く調べたんだけど、メディア的には5.25"の場合のみ2DD以前と2HD以降でコーティングに大きな違いがあり、2HD以降ではより強い磁力で書き込む必要があるらしい。ので2DD以前を想定したドライブでは2HDには書き込めない。のでその境界を越えなければ基本的にはより新しいメディアはそれまでのメディアと互換性があると思って良い。

あと1*と2*は片面両面の違いなので、1*に対して2*のメディアはちょっと細工すれば裏返して別ディスクとして使えます……って話はこの辺から。ライトプロテクションの場所に穴を開ければOK。

3.5"ディスクドライブの修理

最近やった3.5"フロッピードライブの修理について。

ディスクシステムやMSXだと決まってゴムベルトの劣化が問題なんだけど、今回はヘッドだったので少し記録を残します。たぶんドライブがベルトレスでのダイレクトドライブタイプかな?見当たらなかったってだけなので、もっと分解したらゴムが出てくるかもしれないですが。

もともとX68k compact向け3.5"メディアを読もうと思ったら、USBで持ってたドライブが1.44MBフォーマットしか対応してなくて困った、というところから。国産機では1.25MBフォーマットが主流でPC/AT機で使われてた1.44MBはIBMフォーマットとか言われてたんだけど、今ではそっちがグローバルスタンダード。3 mode対応とかうたってるドライブでしか読めなくなっており、最近の新品だと無理なのかな。まだ辛うじて2000年前後の中古USBドライブが手に入るみたいなので、そっちいくのが一番簡単。

んで、思い立ったが吉日で直ぐにでも読みたかったので、オークションで数千円で入手してたPC-9801用の外付けドライブのメンテを思い立つ。買った時に試した感じではほんのり読めたり、エラーコードA0やB0のCRCエラーが出たり、C0でセクタが見つからなかったりだったので、ヘッドの掃除くらいで治るんじゃないかとは思って放置してた。

こいつちゃん。わりとオークションで見かけるモデルだと思う。これに1.44切り替えスイッチついてるやつが上位モデルか後期モデルか知らないけど、ロゴマークの色が違うやつも良く見る。

分解は素直にネジを外してけば、混乱する事もなくここまでは進む。

真上からだとわかりにくいけど2段積みがセットネジ止めされた状態。これを1台ずつ外して掃除。

ここだけ爪で引っかかってるのでピンセット使って外してあげる必要があった。これだけでヘッドにアクセスできるようになるので、無水エタノールと綿棒で拭き掃除。

こんな感じで仮組みして動作を確認しつつ。電源入れたまま、ケーブル差したままの掃除は各自安全と思う範囲で自己責任のもとに……自分はドライブ全体の電源落としてから、ドライブユニットのケーブル抜いて取り外して作業してました。

そんなに何度もトライ&エラーする事もなく復活。読めない時は大事なディスク使うのは控えた方が良いかも。最初に読めなかったディスクはドライブ復活後も読めない事が多い気が……。今回最初に試してたメディアも見た目なんの傷もないのに読めるようにはならなかった。

って事で、無事に外部3.5"から起動できたので、本来読みたかったメディアをイメージ化して、5.25"に書き戻して68から利用して一件落着でした。

そうそう、後から当時のクリーニングディスクを入手しました。楽器屋でまだ新品が当時価格かな?で売ってた。ヤマハ製です。これがあれば突っ込んで電源いれるだけで直せてたかも。磁気ディスク、調べるほどに当時思ってたほど繊細じゃなくて、ヘッドもカセットテープのヘッドみたいなやつで上下から挟んでディスクをぐるぐる回転。え?これで傷つかないの?って感じ。3.5"もバラして円盤に不織布を貼り付ければクリーニングディスクになるかも。必要ならエタノール吸わせて。



2024年2月29日木曜日

X68000でBlueSCSIを使ってみる

修理したSASIポートでSxSIの力を借りてBlueSCSIを繋いでみました。BlueSCSIにはパリティを無効化する設定があり、もともとX68000+SxSIで動くという報告があったので、それの追試験と、容量の限界に対する詳しい情報についてです。

まずSxSIですが、はうさんのch30_omakeの最新版をこちらから頂き、SRAM常駐させてます。

Phantom搭載機なのでfull版を入れてます。これでSASIポートに繋がったSCSIデバイスからbootできるようになりますし、SxSIのドライバなどをconfig.sysに登録しなくてもSASIポート版SCSI IOCSが利用できる状態でbootします。この状態だと起動時にSCSI IOCSが見えるからデバイスドライバはhumanのやつが利用されるのかな?

ちなみにSCSI 0番からはbootできませんでした。デバイス名も取得できず名前が一覧に出ませんでした。本来SxSIでは番号を空けずに0番から受けてく事が推奨されているので、0番が使えないのは030_omakeの制限なのかもしれません。この点については詳しく調べずに0版はDynaPortをアサインしてしまいました。これについては今回は触れませんが、SCSIに繋がるWIFIポートになります。READ/WRITEしたものがイーサーネットに出入りするので、将来的にはNeptune互換で使えるようドライバを書きたいです。

で、今回詳しく記録に残すのはハードディスクやファイルシステムの容量関係の話。SxSIやSCSIで利用できる最大サイズやファイルシステムの限界の話です。

SCSI IOCSの仕様的にはブロックサイズ256B/512B/1024Bがサポートされているようです。指定可能な論理アドレスサイズ×ブロックサイズでアクセス可能なHDDの範囲が決まるので、一番大きな1024Bを設定するのが良いです。BlueSCSIではファイル名で指定するのでHD1_1024.HDAみたいなファイル名になります。

またSCSIではREAD6/WRITE6/SEEK6という21bitアドレス指定のコマンドグループと、READ10/WRITE10/SEEK10という32bitアドレス指定のコマンドグループがあります。これらはSCSI IOCSではREAD/WRITE/SEEKとREADEXT/WRITEEXT/SEEKEXTとしてAPI化されているようです。動作をみた感じではアクセスする範囲に応じて必要ならEXT系を利用して*10の方のコマンドが出てきており、32bitフルにアクセスできるのではないかと思います(注1)。つまり4GB x 1024Bなので4TBまではSCSI的にはアクセス可能。

一方でファイルシステム上の制限もあります。HumanはFAT16を採用しているため、クラスタアドレスは16bitで指定できる範囲に限られます。4GBの仮想HDDに対してformatコマンドを使って最大サイズのパーティションを確保したところ、クラスタサイズは65535Bでフォーマットされました。つまりは4GBフルに使えてます。また同じイメージをSxSIのscsiformatでフォーマットしたらクラスタサイズは倍の128KBになり、これも正しく使えているため、おそらく4GB以上のディスクでもクラスタサイズが適切に大きくなって扱える可能性が高いです。軽く確認した範囲では16GBを超えると認識時にセクタサイズが大きすぎると言われてリセットになります(注2)。これも厳密には16381MBが限界だったと思います。ただ、4GBが32bitで表現できる限界なので、これを超えるとアプリケーションレベルで色々なところに弊害が出てきます。例えばディスク空き容量なんかは正しく表示できなくなります。よって、安全に使うなら4GB(MB指定だと4095MB)で使うのが無難なのかなぁ、と思います。

あと実機上での利用では関係ないですが、BlueSCSIのイメージをDiskExplorerを使ってWindowsから読み書きしようとした場合、scsiformatでフォーマットしたイメージはパラメータを調整しても読めませんでした。SCSI搭載機でformatを使って初期化したイメージはプリセットで読めているので、scsiformatは避けるのが無難かもしれません。原因は深く追っていないので、倍になったクラスタサイズのせいかもしれず、別のサイズのイメージだったら違う結果になるかもしれません。またDiskExplorerも古いソフトなので32bitの4GB制約があるかもしれないので、イメージからのデータ読み書きには4GB以下のイメージを使うのが無難でしょう(注3)。

以下、立花さんに教えてもらったLIBCのソースに含まれるSCSI.DOCを読んで判明した(というか大昔に読んだ記憶あったので思い出した?)情報です。

(注1)SCSIコマンドを発行してディスクを読むドライバはハードディスクの先頭付近に置かれているようです。なので32bitアドレス版のコマンドを使っているかどうかはフォーマットしたプログラムに依存するかもしれません。

(注2)この制約はformat.xが書き込むドライバの制限だそうで、LBAが24bitに制限された結果のようです。確かにこの実験はXVIでやっているので、format.xのドライバに依存してそうです。

また、format.xでフォーマットした際に1GB以上のHDDから起動するためには田圃さんのGOVERHD.xが利用できるそうです。自分はch30_omakeからこのパッチなしで起動できてしまっています。田圃さんのSCSI周りの数々の功績には頭が下がります。BlueSCSIも田圃さんのArdSCSinoのforkのforkです。

以下、田圃さんのコメントに基づく注釈です。

(注3)SEEKがsigned 32bitなので、2GBを超えるファイルの操作は危険が伴います。より安全を見るなら2GBが無難です。

2024年2月28日水曜日

X68000 EXPERT SASIポートの修理

昨年にX68000 修理にて復活!という投稿をしました。

電源をATX電源化、電池はケース化したうえで交換、VRAMが1つ故障していたので交換したところまでが修理の内容でした。ハードディスクはXVIを使って吸い出したもののEXPERTのSASIポートではうまく動作しないままでした。今回はその残るSASIポートの修理についてのメモです。

SASIポート周りについてはOutside X68000付属の初代機の回路図が参考になります。各ポートの制御はIX0909というカスタムチップが1つ鎮座しており、ソフトに見えるレジスタはおそらくその中に入っています。SASIはハードでは制御らしい制御はなく、このカスタムがレジスタアクセスに応じて直接SASIバスの信号を出し入れし、その外にある回路はバッファ程度なので、壊れるとしたらカスタムかバッファに使われているロジックIC、後者なら交換で簡単に直せるはずです。

初代機とEXPERTではカスタムチップの型番とピン配置が少し違います。ロジックICも使っているピンが違ったりはするのですが、基本的には同じ構成です。データバスは74LS642で出し受けしており、双方向バッファの方向は外から入ってくるI/Oで決まりますが、開放時は出力方向になっています。制御信号のうち入力は74LS19がシュミットトリガーで受け、出力は74LS38でオープンコレクタ。すべての信号がロジックの内側は5V、外側は約3Vで動いており、抵抗で分圧したうえでpull-upされてます。

場所的には底面基板に各種IOやFM音源がいます。CPU側のメイン基板から来てるケーブルにバスが全部載っており、電源側の基板からは電源と各ポートの入出力が繋がってます。Sと書かれた2本線がサウンド出力で内蔵スピーカーに向かっているようです。

投稿でカスタムと642の場所を説明してますが、さらに38は642の右に2つ並んでる38のうち左側のものがSASIとカスタムの間にあるやつです。今回は642にあたりを付けて交換しましたが、制御がおかしい場合にはこの38を交換する必要があるかもしれません。他にはアレイ抵抗が壊れてショートしていないかなども注意した方が良いと思いますが、底面基板なので電源入れて直接電圧を確認するのは難しいです。もし怪しいと思ったら、外に出てるSASIポートの電圧で確認するのが良いと思います。

データバスに関してはソフトでレジスタ叩いて出力の変化を見るのが良いかもしれません。

カスタムは出力中でもピンの電位を読み出せるようです。つまり、書いた後に読んだ値が実際にカスタムと642の間のデータバスの電位になります。ここで値がおかしいようなら642が外向きになっていなかったり、バッファが死んで常にGNDやVCCに張り付いているような状況が疑われます。一部張り付いているなら642を、全部張り付いてるなら38から入ってるI/Oを疑うのが良いかもしれません。またこの値は反転した形でSASIのデータバスに出ますから、ポートの電圧を測る事で642経由で期待通りの信号が出てるか確認できます。bitの値が0なら約3V、1なら約0Vですね。

今回は交換するまでは良かったんですが、交換時にソケット化したせいでICの位置が高くなってしまいシールドに接触するという大失態を侵しました。場所的にまさにシールドが出っ張っている位置なので要注意です。C1とか81あたりしか書けなかったら同じことをやらかしてる可能性大(笑)

という事でSASIポートが直ったのでSxSIを使ってBlueSCSIを接続するわけですが、それはまた別のエントリで詳しく書こうと思います。

ちなみにSASIのバスを3Vで駆動しているけど、これは何もバスが3V論理だという事ではないようです。SCSIの仕様書をみると5Vも許容範囲ですし、EXPERTや初代の回路的にも5Vを受けられるように設計されてます。3Vでpull-upしているのはターミネーターの推奨値だからかな?初代機の抵抗値はSCSIリファレンスの分圧でターミネートする時の推奨値でした。EXPERTはもう少し小さい値で近い比率で分圧してたように思います(具体的な数字はメモしてなくて忘れてしまった)。

2024年1月12日金曜日

PC-9801RAにBlueSCSIを繋いでみた記録

年末年始、集めたまま火を入れてない物の中で、特に興味の高いものを整理してました。PC-9801RAもその中の一つ。8001もそうでしたが、NECのパソコンはほとんど触れずに来ていて、大学の時に譲ってもらったPC-486で(いや、それはNECじゃない……)少し曲を作ったりはしてたんですが、身内の手違いで破棄されてしまって(良くあるような悪い話ではない……はずです)。詳しい資料や当時の情報を持っていないので手探りで環境構築してます。

その中でも今となっては厄介なのがハードディスクの整備。とりあえず今から物理ドライブ使うのはデータ消失が怖いし、ネットワークないマシンだとデータのやり取りも大変。という事で、変換器使った何かを考えていたのですが、9801系で有名どころと思われる変換番長が半導体不足で在庫がない状況だったので、せっかくだから少し冒険。オープンソースなら最悪どうにでもなるだろって事でBlueSCSIを選びました。設計データまで公開されてるので自分で基板から作っても良いのですが、最初からそれだと問題切り分けが大変です。国内ではヤフオクで完成品を公式に扱ってる人がいるので、そちらをあたってみる事にしました。自分はmac用のDB25直差し用を購入してます。というのも、自分も元macユーザーで将来はそっちでも使いたいってのと、当時使ってたDB25 to アンフェノールハーフピッチのケーブルが手元に残っているのと、さらにDB25のオスメス変換器が安く売っていたのと。接続は

98本体(アンフェノールハーフメス)⇔ケーブル(アンフェノールハーフオス→DB25オス)⇔変換器(DB25メス→DB25メス)⇔BlueSCSI(DB25オス)

こんな感じ。手持ちが違う人は違うやつ選んだ方が良いかもしれません。

んでBlueSCSIなんですが、なんと元はたんぼ(TNB製作所)さんが作ったArdSCSinoだそうで。Arduinoで動いていたものがARM(STM32)に移植されArdSCSino-stm32となり、そこから派生してBlueSCSIが出てきたようです。現行のv2はSTM32から更にターゲットを変えて、Raspberry Pi Picoで動いてます。さらに最近ではPico Wを使うことでWIFI機能を使い、SCSIバス上に仮想ネットワークカードを繋げられるようです。この機能はホスト側でドライバを書く必要があるので、現状では開発者がメインターゲットにしてるMacintoshのみの機能かな、と思います。が、ゆくゆくは国産レトロ機でもドライバが出てくると面白そうです。

開発者が主にMacintoshユーザーなので、その他の環境への対応がどうなったのか心配なところでもあるのですが、対応してるSCSIコマンドは他のプロジェクトより多そうなので、最悪ちょっとコードいじればなんとかなりそうな感じがありますし、互換性リストではX68000なんかも入ってます。標準SCSIインタフェースでも動くし、旧機種のSASIでもSxSIを使えば本体改造なしで動きそうです(サンプルではパリティを無効にする設定が入ってます)。

で、詳しい経緯に興味ある人はこちらの一連のポストを見てもらうとして、とりあえず無事に動作したので設定をまとめようと思います。

98だとSCSI I/Fも大量に出てると思うのですが、自分が成功したのはIF-92Bになります。が、98固有の問題は内包してるので、他のボードでも状況は似たような感じじゃないかと思います。NEC純正はベンダー設定が必要かも。

[SCSI]
; Debug=1
; Vendor=NEC
System="Generic"
Quirks=0
DisableROMDrive=1
SectorsPerTrack=8
HeadsPerCylinder=32

この中で必須だと思われるのは最後の2つです。この辺りは98固有の事情に関係してるようで、SCSI BIOSのアドレス指定がLBAではなくCHSになっている事に起因するかと思います。これらの情報はNEC純正ではSCSI非標準の問い合わせで得るようですが、サードパーティー製や後期純正だと内部的にこれら8/32の値を想定して変換を行うようです。SCSI BIOSが純粋に全部の変換を行いLBAでディスクにアクセスしてるなら設定不要で動いても良さそうなのですが、少なくともIF-92Bではここを違う値にするとFORMAT.EXEが0除算で落ちるようになります。

また設定以外にディスクイメージも必要ですが、注意点としては

  • セクタサイズは512バイトにする事
  • イメージサイズは8×32×512の倍数にする事
  • 大きすぎると認識されないのでインタフェースの限界にあったサイズにする事
を満たす必要があります。セクタサイズはファイル名に埋め込むようになっているので注意が必要です(設定でBlockSizeを書いても良いかもしれませんが試してません)。この辺りはソースコード見れたので調査がはかどりました。やっぱりオープンソース選んで正解。

% dd if=/dev/zero of=HD0_512.hda bs=131072 count=4096

自分はこんな感じで作りました。Linuxやmacなら同様に、WindowsならWSL使えば同様にできるし、中身空で良いので他にも色々と方法はあるかと思います。

ちなみにcount=4096はIF-92B v1.10の限界っぽいです。サイズとしては512MBですね。1GBまで認識はするようなのですが、領域確保できるのが512Bまででした。巷では1.01や1.20も出回っているので、それぞれ限界は違うかと思います。1.20だと2GBまでいけるって話も見かけます。BIOSパッチ当てられれば良いんだけど、ここはホームグラウンドじゃないから、ひとまずこれで様子見です。

ちなみにボード自体もDIPSWがサウンドボードとぶつかっていて変更したり、画面に何も出ない設定になっていたり、そもそもコンデンサもげて挙動自体が怪しかったり……がスタート地点だったので、色々とリスト減らした上でなんとか正解にたどり着けた感じでした。