0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

kazuedaの活動記録2024Advent Calendar 2024

Day 18

Unirom8とwindows上で動作するのnops.exeを使って初代プレステで自作プログラムを動作する

Last updated at Posted at 2024-12-17

はじめに

 初代プレステ(以降、PS1)でリージョンフリーでゲームソフトを動かす際は、FreePSXBootとunirom8の組み合わせが便利です。FreePSXBootのサイトでは、ゲーム起動の情報のみが記載されています。
 自作ソフトを動作させるためには、何らかの方法で自作ソフトをPS1に読み込ませる必要があります。それに必要なツールはどこにあるかというと、unirom8のgithubレポジトリです。
 本稿では、unirom8と一緒に配布されているツール類のうち、nops.exeを紹介します。

unirom8の配布ツール類

UNIROM_BOOTDISC_8.0.K.zipをダウンロードして展開すると、「UNIROM_BOOTDISC_8.0.K」フォルダの中に「stuff」フォルダがあります。

この中に、WindowsやMacOS、Linux(以降、母艦)側で使う各種ファイルが保存されています。
image.png
README.txtの中の、母艦に関係するものだけ紹介します。
nops.exe, ELFSharp.dll, nops
PS1と母艦との間でシリアルポート経由でファイルを転送するときに使うプログラムです。
Windowsでは、コマンドプロンプト上で「nops.exe」、MacやLinuxでは、monoをインストールした後、バッチファイルの「nops」を使って「nopx.exe」を起動します。

schematic.png
PS1とArduino UNO R3との間の配線方法が書かれています。TX用の8 kオームのプルダウン抵抗は大事。

danhans_pong.psx
Danさんの作成したソフトで、PS1上で動きます。

exe2memcard
メモリカードから自作ソフトを作成する際に使用します。使い方は、「exe2memcard」フォルダ内の「README.txt」参照。

nops.exe

 コマンドプロンプトから起動すると、使用法が表示されます。

 色々ありますが、PS1用実行ファイルの転送方法の

 NOPS.EXE /exe <FILE.EXE> COM8

が使えればいいかと思います。
 COM8の部分はwindowsだとデバイスマネージャーで、確認してください。

## danhans_pong.psxを起動
 EXEファイルと想定して、以下のコマンドでファイルを転送します。

 nops /exe  danhans_pong.psx COM19

image.png
 ファイル転送が終了すると、PS1で転送したプログラムが起動します。
image.png
 コントローラで遊びます。
image.png

nops.exeでカートリッジのROMを書き換える

 PS1の背面のシリアルポートには、チートコードを保存するカートリッジ(以降、チートカート)を接続可能です。アリエクだと、例えば以下の商品を入手可能です。
image.png
このチートカートには、AM29F10というROMが搭載されています。128 kBのPS1で起動するプログラムを保存可能です。保存されたプログラムは、PS1の電源を入れると起動します。
 unirom8とnops.exeの組み合わせで、このROMの中身を書き換え可能です。
 PS1側でunirom8を起動します。
image.png
背面のパラレルポートにチートカートリッジを差し込みます。
 Windowsマシンから、unirom8のプログラムを転送します。

nops /rom unirom_standalone.rom COM19

image.png
ROMの種類を確認し、容量の確認をします。保存可能だとわかるとファイルを転送します。
 一方、PS1の画面では、以下の表示となります。
image.png
 ROMの存在を確認し、そのIDを確認し、接続されているROMがどのようなものであるか判定します。
 次にDATAの転送を要求し、ファイルを受け取ります。ファイルが正しく転送されたことを確認したら、ROMの内容を消去します。
 その後、受け取ったファイルをROMに書き込みます。ここでは、20%書き込みが進んでいます。
 以下には、書き込みが100%になった表示が出ています。
 image.png
 100%の書き込みが終わると、PS1が再起動します。再起動中は、以下の画面が出ます。
image.png
 再起動後にunirom8が起動します。以下のunirom8はチートカートから起動しています。
image.png
 このチートカートをPS1のパラレルポートに接続しておくと、FreePSXBootを使わなくても、unirom8がすぐ起動します。

おわりに

 unirom8とnops.exeの組み合わせを使って、シリアルポート経由のファイル転送とチートカートのROMの書き換えが可能となりました。
nops.exeには他の機能もありますので、以下の「おまけ」やnops.exeの説明を参考に、自作プログラム開発に活用してください。

おまけ

オプションを付けずにnops.exeを実行した時のメッセージを記載します。

================================================================================
    Totally NOtPsxSerial v14 (8.0.J)
    Thanks: Jihad of HITMEN, Shendo, Type79, Dax,
            r0r0, Skitchin, danhans42, Schnappy,
            Nicolas Noble, T0fuZ & Arthur!

            Instructions :  http://unirom.github.io
            Discord      :  http://psx.dev
================================================================================

        Note: You may have to install mono and launch via 'mono nops.exe /args' if...
      - Windows cant put your serial device (FTDI, etc) into 115200baud
      - You are using a Sharklink/Net Yaroze cable
      - Any flavour of *nix/OSX


    Usage : NOPS.EXE [/args] [FILENAME] [COMPORT]
    Usage : NOPS.EXE [/args] [FILENAME] [IPADDRESS:PORT]

    Bridge: NOPS.EXE /bridge [LOCALIP:PORT] [COMPORT]
            bridges e.g. a local serial device and port, allowing remote connections


      Send an .EXE :  NOPS.EXE /exe <FILE.EXE> COM8

      Flash a .ROM :  NOPS.EXE /rom <FILE.ROM> COM8

      Send a  .BIN :  NOPS.EXE /bin 0xADDRESS0 <FILE.BIN> COM8

      Jump addr (jr) :  NOPS.EXE /jmp 0xADDRESS0 COM8
      Call addr (jal):  NOPS.EXE /jal 0xADDRESS0 COM8

    Dumpy Stuff:
                RAM  (  2m) :  NOPS.EXE /dump 0x80000000 0x200000 <DUMP.BIN> COM8
                ROM  (128k) :  NOPS.EXE /dump 0x1F000000 0x20000  <DUMP.BIN> COM8
                ROM  (384k) :  NOPS.EXE /dump 0x1F000000 0x60000  <DUMP.BIN> COM8
                ROM  (512k) :  NOPS.EXE /dump 0x1F000000 0x80000  <DUMP.BIN> COM8
                BIOS (512k) :  NOPS.EXE /dump 0xBFC00000 0x80000  <DUMP.BIN> COM8
                SPAD (  1k) :  NOPS.EXE /dump 0x1F800000 0x400    <DUMP.BIN> COM8

                WARNING! If named dump file already exist it will be overwritten!
                Also note that you can use * for <DUMP.BIN> to have automagically generated filename

    Memory Cards:
               MC0->File :  NOPS.EXE /mcdown 0 filename.mcr COM8
               MC1->File :  NOPS.EXE /mcdown 1 filename.mcr COM8
               File->MC0 :  NOPS.EXE /mcup 0 filename.mcr COM8

    Pokey Poke:
                 8 bits :  NOPS.exe /poke8 0x80100001 0x01 COM8
                16 bits :  NOPS.exe /poke16 0x80100002 0x0202 COM8
                32 bits :  NOPS.exe /poke32 0x80100004 0x04040404 COM8

    Continuous Hex Dump (to screen):
                CD REGS:   NOPS.EXE /watch 0x1F801800 0x4 COM8

    Extra switches:
                /m to open the Serial IO monitor (can be used /m COM8 alone)
                /fast to enable or continue using 500k baud
                /debug to enable experimental /bin & /dump during gameplay

    Examples:
                nops /fast /rom unirom_b.rom COM14
                nops /exe mything.exe /m COM14
                nops /fast /poke8 0x80100000 0x04 COM14

   Debug Functions:   (Must be in debug mode via L1+Square or nops /debug)
                Halt the PSX                       : nops /halt
                Continue from halt/exeception/hook : nops /cont
                Show registers from last interrupt : nops /regs
                Set a register while halted        : nops /setreg 0xADDR 0xVALUE
                Hook (halt) on memory read  *      : nops /hookread 0xADDR
                Hook (halt) on memory write *      : nops /hookwrite 0xADDR
                Hook (halt) on memory exec  *      : nops /hookex 0xADDR
                Unhook (read/write/exec)           : nops /unhook
                * = Resume with nops /cont

  STDIN Functions:
                Types a string into stdin  : nops /type "something"
                at about 1 char per frame  : nops /type 'something'
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?