環境構築
第2章「犬DOGEを作ろう!」の環境構築手順を掲載します。
準備するもの
- PC
- Windows 11
- カードリーダへの書き込みにWindowsを用います。ドライバの都合でx64版を利用します。
- Linux環境もしくはmacOS
- ソフトウェアの開発・ビルドに用います。
- WSL(WSL1, WSL2)でも問題ありません。記事作成時はWSL1 + Ubuntu 22.04を使用しました。
- Windows 11
- psdevkit
- SDK本体
- 後述
- PocketStation本体
- BIOSダンプに必要
- pk201
- PocketStationエミュレータ
- Windows向けとAndroid向けがあります
- Linux、macOSではWineを使って起動できます
- PS3用メモリーカードアダプタ
- PocketStationの読み書きに利用します。
手順
ビルド環境の準備
Windows / Linux
Windowsで作業する場合、WSL環境を整えるのが最も簡単にポケステの開発環境を整えることができます。
PowerShell (管理者権限)で以下を実行し、WSL と Ubuntu をインストールします。
wsl --installUbuntu ターミナルを起動し、必要なパッケージをインストールします。ARM 向けクロスコンパイラ arm-none-eabi-gcc もここで一緒に入ります。
sudo apt install make gcc unzip gcc-arm-none-eabi imagemagickインストール後、コンパイラが起動できるかを確認します。
arm-none-eabi-gcc --versionmacOS
macOSで作業する場合、Homebrewにてarm-none-eabi-gccをインストールするとコンパイラが入手できます。
ターミナルを起動し、必要なパッケージをインストールします。ARM 向けクロスコンパイラ arm-none-eabi-gcc もここで一緒に入ります。
brew install arm-none-eabi-gcc make unzip imagemagickインストール後、コンパイラが起動できるかを確認します。
arm-none-eabi-gcc --versionSDK の用意
ポケステには、OrisonSoftwareが制作した、psdevkitというSDKがあります。以前は無料で手に入ったようですが、現在は有料で販売されています。 https://orionsoft.itch.io/pocketstation-dev-kit から購入し、キットをダウンロードします。これがなければゼロから整備するだけで本が1冊書けてしまうほどになります。感謝感激雨アラモードです。
リポジトリの中身はざっくり以下の構成になっています。
psdevkit/
├── tools/ 変換ツール(開発環境側で使う)
├── Example/ サンプル
└── pocketlib.h ポケステ向けライブラリ本体ダウンロードしたzipを作業場所に展開します。
ツールのビルド
tools/ 以下の開発環境向けツールは、それぞれツールのディレクトリ内で main.c を手動でコンパイルします。
ビットマップを専用の形式に変換するツールである bmp2ps1b と、バイナリを8KBブロック単位にそろえてくれるツール mcpad の2つは、そのままビルドすると正しくコンパイルできないため、それぞれのmain.cの先頭に #include <string.h> を追加してからビルドします。
cd ascii2sjis && gcc main.c -o ascii2sjis && cd ..
cd tim2mcicon && gcc main.c -o tim2mcicon && cd ..
cd bmp2ps1b && gcc main.c -o bmp2ps1b && cd .. # 事前に #include <string.h> を追加
cd mcpad && gcc main.c -o mcpad && cd .. # 事前に #include <string.h> を追加bmp2ps1bやmcpadの修正イメージ:
#include <stdio.h> // 追加
#include <stdlib.h>
#include <string.h> // 追加
unsigned char data[128*1024];
// (以下略)次に、セーブデータ形式である .mcr 生成するために必要な bin2mcr を GitHub から追加で取得します。このリポジトリは筆者のものとなります。psdevkitに付属しているツールだけでは、扱いやすい mcr の形式を作成してくれないため、 mcr 形式に変換するためのツールとなります。
# tools ディレクトリ内で実行
git clone [email protected]:mikuta0407/pocketstation-bin2mcr.git bin2mcr
cd bin2mcr && gcc main.c -o bin2mcr && cd ..BIOSの吸い出し
MemcardRex 2.0 RC1 と、 PS3 用のメモリーカードアダプターを用い、 BIOS のデータをダンプ(吸い出し)します。
まずは ShendoXT/memcardrex: Advanced PlayStation 1 Memory Card editor より、MemcardRexをダウンロードします。執筆時は、 MemcardRex 2.0 RC1を利用しました。
次に、GitHubでのREADMEのHardware interfaces → 5. PS3 Memory Card Adaptorを参考にし、Zadigを用いてドライバをインストールします。
ドライバのインストールが完了したら、PS3用メモリーカードアダプタを接続した上で、ポケステを差し込みます。
OptionsからPreferencesに入り、Active hardware interfaceをPS3 MC Adaptorに設定します。

PS3 MC Adaptor → PocketStation → Dump BIOSを選択します

ダンプが開始されます

ダンプが終わると、吸い出したBIOSの情報が表示されます。

左下Save BIOSから、データを保存します。このとき、後ほどpk201(エミュレータ)で使うため、KROMという名前で保存しておきます。拡張子は不要です。
エミュレータの用意
ポケステのエミュレータは pk201 を使います。
DEEPER THAN POCKETS から、pk201 をダウンロードできます。
pk201 の動作には 2 つのファイルが必要です。
- KROM : ポケステ本体に内蔵された BIOS ROM のダンプ。おそらく Kernel ROM の略称
- FROM : メモリカードのフラッシュ ROM に対応するファイル
これらは pk201 で読み込ませるためにはファイル名が固定となります。 KROMが、先程吸い出したファイルになります。 FROM は、自分でビルドした .mcr ファイル(PS1のメモリーカード用のファイル形式)を、 FROM という名前に変更したものです。
これらを準備した状態で、 pk201 の File メニューの Misc 内から両方ロードさせ、 Run メニューから Start させることで、ポケステのエミュレートができるようになります。


操作方法は、 WASD キーが上下左右、 K キーが右のボタンとなります。S キー K キーを押して時計設定をひとまず終えると(WASD, K キーで操作ができます)、待受状態になります。
example を動かしてみる
まず付属の example サンプルをビルドして、ちゃんと動く環境かどうか確認してみましょう。
元の Example/Makefile のままでは bin2mcr を使った .mcr 生成が設定されていないため、以下の修正が必要です。
Example/Makefile の修正箇所
LDをarm-none-eabi-ldからarm-none-eabi-gccに変更makefileLD = arm-none-eabi-gccLDFLAGSを以下に変更makefileLDFLAGS = -nostartfiles -lc -lgcc #-Map ${PROG}.map${PROG}.binターゲットのmcpadのパスの変更と、bin2mcrの呼び出しを追加makefile${PROG}.bin: ${PROG} ${OBJCOPY} -O binary ${PROG} ${PROG}.bin # ここまで同じ ../tools/mcpad/mcpad ${PROG}.bin # 相対パスに変更 ../tools/bin2mcr/bin2mcr BESNESP00000GAMETEST ${PROG}.bin ${PROG}.mcr # 追加
完成版は以下です
PROG = test
SRCS = ${PROG}.c
OBJS = header.o ${SRCS:.c=.o}
CC = arm-none-eabi-gcc
LD = arm-none-eabi-gcc
AS = arm-none-eabi-as
OBJCOPY = arm-none-eabi-objcopy
OBJDUMP = arm-none-eabi-objdump
LDFLAGS = -nostartfiles -lc -lgcc #-Map ${PROG}.map
CFLAGS = -Os -msoft-float
ASFLAGS =
all: ${PROG}.bin
${PROG}.bin: ${PROG}
${OBJCOPY} -O binary ${PROG} ${PROG}.bin
../tools/mcpad/mcpad ${PROG}.bin
../tools/bin2mcr/bin2mcr BESNESP00000GAMETEST ${PROG}.bin ${PROG}.mcr
${PROG}: ${OBJS}
${LD} -o ${PROG} ${OBJS} -Tldscript ${LDFLAGS}
clean:
rm -f ${OBJS} ${PROG} ${PROG}.map
fclean: clean
rm -f ${PROG}.bin
disasm:
${OBJDUMP} --disassemble ${PROG} > ${PROG}.DISASM.S修正が済んだら、実際にビルドを行います。
make正常にビルドが出来ると test.mcr が生成されます。これが先ほど pk201 のところで触れた FROM として渡すファイルになります。
test.mcr を pk201.exe と同じディレクトリに FROM としてリネームして配置し、pk201 を起動して KROM と FROM を読み込み、Run メニューから起動するとエミュレートを開始されます。
時計設定後、S キーで右画面に移動すると、Pocket Lib EXAMPLE Orion_ と書かれたタイトルページが現れます。

ポケステの画面に音楽が流れながら、文字が動くプログラムが起動します。

ここまで動けば開発環境は OK です。