PAR1.3以前では連続書き込みコード(シリアルコード)
が使用で出来ず、ちょっと不便です

連続書き込みコード(シリアルコード)は
本来ならば何十行も入力しなければいけないコードを
たったの2〜3行で済ませれる効果を持っています
実例で言えばDDRMAX2のインフォメーション全部や
ライルさん投稿のジェネレーション〜Vのアイテム全部
などがあります。

PAR1.3ではそれが使えないので
(厳密には使用できるが制約が多すぎる)
何十行ものコードは1行ずつ全て入力しないとダメなので面倒です
今はPAR2やエクスプローダーを持ってる人が殆どだと思いますが
1.3時代から変えていない人も少なからずいるので
短くて誰でも不具合無く使えるコードがあれば便利ですね?

とここで考えたのが、自分でプログラムを組んで
シリアルコードと全く同じ動きを再現してしまうという方法です

実例を含めて説明します、題材は「真・三国無双3」です
まずは、下ごしらえに自作プログラムへ処理を回す場所を探します
PARコードと同じく、毎フレーム呼ばれれば自作プログラムもその分実行されるので
自作プログラムを組み間違わない限りは
効果が出ないという事は無いと思われます
最有力はscePadReadのjr ra命令です
ここから000F0000へ処理を飛ばすようにしましょう

作るのは全武将出現プログラム
これは実際にはシリアルコードが使えず
本当に手作業で入れるしかないコードです
しかし、プログラムを使えば数行で済んでしまいます

まずは、武将の出現フラグのアドレスと
次のキャラとのアドレス差、武将人数を計算します
その結果、一人目の出現フラグは004370E8
アドレス差はここから+18hずつで42人と分かりました
これを元に実際にプログラムを組んで見ましょう

全武将出現プログラム部
000f0000 lui t0,$0043
000f0004 addiu t1,zero,$0001
000f0008 addiu t2,zero,$002a
000f000c sb t1,$70e8(t0)
000f0010 addiu t2,t2,$ffff
000f0014 addiu t0,t0,$0018
000f0018 nop
000f001c nop
000f0020 nop
000f0024 bne t2, zero, $000f000c
000f0028 nop
000f002c jr ra

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
それぞれの行の役割を説明します
000f0000 lui t0,$0043
t0レジスタにアドレスの基盤となる数値をセット

000f0004 addiu t1,zero,$0001
出現フラグを立てる時に使う0001という数値を
t1レジスタに格納する

000f0008 addiu t2,zero,$002a
武将の残り人数をt2レジスタに格納

000f000c sb t1,$70e8(t0)
ここで出現フラグを1人分立てる

000f0010 addiu t2,t2,$ffff
残り人数から0001をマイナス

000f0014 addiu t0,t0,$0018
フラグのアドレスを
次の武将のアドレスへと18hズラす

000f0018〜000f0020 nop
PS2の仕様上の不具合を解消するスペース
詳しくはページ後半で

000f0024 bne t2, zero, $000f000c
t2レジスタの値が0000で無い場合は
000f000cまで処理をループさせる

000f0028 nop
遅延スロット

000f002c jr ra
全体的な処理を終了


分岐命令でフラグをストアする命令まで戻らせ
武将の人数から0001をマイナス
アドレスを次のキャラのアドレスまでズラす
残り人数が0000になっていなければまた処理を戻す
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

この繰り返しで、シリアルコードを再現します
残り人数(t2)が0000になった時に分岐命令が無効になり
シリアルプログラムは終了します
基本は、書き込みたい回数をレジスタにセットし
その回数分、データをストアさせるもので
原理は聞くと簡単な物です(笑)

今回はフックと復帰も含め、PARコードで言えば
たったの9行分で42行分のコードの効果を出しました
慣れてくればシリアル再現はすぐ作れるようになるので
PAR1.6j以降専用のシリアルコードも復号化して
書き込み回数やアドレス差などを計算すれば
自分でプログラムに直す事も出来ます。


このプログラムの注意するべき点は
分岐や残り書き込み回数の設定を誤ると
場合によっては無限ループに陥ってしまい
ゲームが始まらなくなってしまうという事です
そうならないよう、点検をしてから実験して下さい