要は64ビットWindowsで,どうやってI/Oポートを自由に叩くかという話になります.
とは言え,ハードウェア構成も重要なので先に規定しておきます.
流通とネットの発展により,オークションやフリマが浸透した結果,従来であれば廃棄されてきたものがリサイクルに回るようになったため,背面拡張端子を有するPS1本体の入手は,現在でも1000円台で可能です.そのため,PS1との接続先は背面拡張端子とします.そうしますと嘗て存在した接続方法としては,出現順に以下が挙げられます.
現在,(1)(2)は,ほぼ絶滅しており,(3)は高アレルギー,(5)は数が少ない上にcaetla化もできない,ということで,事実上(4)一択となっています.caetlaの作者のK-comm氏からは,とても褒められたハードではないと評されたX-TERMINATORですが,現在では最も有用なハードとなってしまいました.3カ月くらいかける気持ちで探せば,オークションやフリマにて1000円台で入手可能です.
パラレルポートは,PCIEバスへの増設カードということになると思いますが,新品が1000円台で入手可能です.こういったレガシーデバイスとかゲーム機の補修部品に関してだけは中華業者に感謝です.
では本題のI/Oポートの叩き方です.そもそもNTカーネルになって以降,I/Oポートは直接叩けなくなっています.ですが32ビットWindowsには,抜け穴的な手法が存在(おそらくMicrosoftが意図的に用意)したため,逸汎人からは直接叩き続けられてきました.しかし32ビットWindowsの使用自体が足枷になってきたため,ついに,I/Oポートを叩くドライバが必要になったわけです.問題なのは,64ビットWindowsのドライバには厳格な署名制度があることです.つまり署名発行に,お金と信用が必要になるので企業でないと厳しいのです.回避手段が有るには有るのですが,再起動の度にやり直しが必要だったりで,非常に面倒です.ですから,署名付きドライバが非常に望まれるわけですが,こういうったニッチな用途のドライバを提供してくれる企業なんてあるのか?って話です.
驚くべきことに「そんな企業があった」で話が終わります.正確には有志が作成したドライバのケツ持ちをしたのです.そうやって出来たドライバがInpOut32で,ほぼ20年選手です.なまじ32ビットWindowsでの回避手段を知っていたため,私自身がその存在を知ったのは決して古い話ではありません.正直,もっと早く知りたかった.
後はinp(),outp()をDlPortReadPortUchar(),DlPortWritePortUchar()に変えてコンパイルするだけです.というわけで,InpOut32用のcaeflash.exeです.caeflash.comを逆アセンブルし,c言語で書き下しました.X-LINK以外の部分も実装していますが,それらの部分は検証できないため成否は不明です.
同様に,InpOut32用のcaetools的なものです.完全にプライベート用に作ったものなので,常に全パラメータを決められた順番で指定する必要があります.
caetlaのROMですが,私のうろ覚えの記憶の中では再配布禁止であるため,ここにファイルは置けません.しかし,ドキュメントは付属せず,ウェッブページも消えて久しく,確認手段がないわけですから,情を知らない皆さんがググってダウンロードするのは仕方のないことです.X-TERMINATORに対応したのはバージョン0.34からです.0.35とかもあるのですが,私は0.34を推奨するとだけ言っておきます.
mipsクロス開発環境ですが,かつて「こべる」という人がGNUのアセンブラ・コンパイラを移植していました[WEB-ARCHIVE].psx形式で出力できるよう改造されています.
使い方はNOT YAROZE[WEB-ARCHIVE]が参考になります.