はじめに
初代プレステのシリアルポート経由でプログラムを転送する場合、プレステ上のunirom8とwindows上のnos.exeを組み合わせて用いるのが一般的です。
MacOSやLinux上では、monoを使ってnops.exeを動かすようです。
ファイル転送元をMCU搭載の小さなボードにしたい場合、windowsの実行ファイルよりはpythonプログラムの方が適しています。
しかし、転送プログラムのsioload.pyやpypsxserial.pyとunirom8の組み合わせでは、ファイル転送できません。
本稿では、sioload.pyを修正してunirom8との間でのファイル転送を実現した話を紹介します。
本稿の内容には、「東海道らぐの万鹿博覧会ライトニングトーク大会 in 大阪南港」と「Unagi.py 勉強会61枚目 (Python勉強会in浜松市)」の発表内容が含まれます。
sioload.py
sioload.pyは「sioloader v1.0」に含まれているpythonプログラムで、SIOLOAD.EXEの起動しているプレステにファイル転送する機能をもっています。SIOLOAD.EXEに対しては1036.8 kbpsの転送速度で、PSXSEIAL.EXEやUNIROM.EXEに対しては、115.2 kbpsの転送速度でデータを送ることが可能です。
転送実験とsioload.pyの修正
Unirom8の起動しているプレステに対して、sioload.pyを使ってファイル転送を試みます。
ファイル転送が始まると、プレステの画面に「DOWNLOADING.EXE…」が表示されますが、sioload.pyから転送した場合、画面表示も変わりません。nops.exeでは、「SEXE」 という文字列を送ることで、unirom8側がファイル受信状態になります。
sioserial.pyを「SEXE」を送ってからファイル転送する用修正したプログラムで転送を行いました。
「DOWNLOADING.EXE…」が表示されましたが、「CHECKSUM ERROR」が表示されます。
DOWNLOADING .EXE…
CHECKSUM ERROR: CHECK YOUR CABLES!
EXPECTED: 0 CALCED: 1A3570
LLMを利用して、チェックサムエラーの修正を試みますが、通り一遍のチェックサムエラーの回避法しか提案してくれません。unirom8のソースファイルは公開されていません。
解決法が見つからないのでDISCORDのPSXDEVで相談したところ、nops.exeのソースファイルを参照するようにアドバイスを受けました。
githubのリポジトリを見ると、「TransferLogic.cs」に転送の段取りが記載されているようですので、LLMにファイルをアップロードして解説してもらいました。
2番目に、修正したい「sioload.py」をアップロードして、 「TransferLogic.cs」の転送の段取りを追加させるよう、LLMに指示しました。
生成された修正後の「sioload.py」の動作を確認しました。以下は、windowsのコマンドプロンプトです。
ファイル転送に成功し転送したプログラムが動作しましたが、エラーが出ています。
エラーメッセージをLLMに伝えて、プログラムを修正させました。
エラーがでなくなりました。
おわりに
LLMを使ってプレステ用のファイル転送pythonプログラムのsioload.pyを修正しました。
LLMを使ってプログラムを修正する場合、参照するプログラムの提示後の解説をさせることにより、精度よく修正ができるようです。プログラムが表示するエラーメッセージを伝えることも、精度良く修正する際に重要だとわかりました。