//--------------------------------------------------------------------------
//  Title: SDP (SaveDataPatcher)
//  Version: 0.1.1
//  Copyright: Dr.Hell, 2001
//  Web: http://members.tripod.co.jp/DrHell/
//--------------------------------------------------------------------------

There are some hardwares to linkage between PlayStation2 memory card and PC,
for example, "Memory Juggler" and "Direct Memolink" in Nippon.
SaveDataPatcher is a binary(hex) editor with PAR-compatible codes.
I made this to edit save data files copied to PC by using items below.

$ PlayStation2PARR[h̓R[hT[`ɓȊKvƂ邱Ƃ
$ zɓ܂B]Ċ{IɃJbgɗ炴𓾂Ȃ̂łA
$ ͂܂ł̎Rȉo҂ɂƂĕs̑傫̂łB

$ ̂߁Aꕔ̐lX́ÃZ[uf[^ɉAĂ䂭킯łA
$ ɗp̓\tg̑VFAEFAƂVBŐ߂Ă
$ Q킵ԂłAŔĵׂ̃t[EFAłB

$ ܘ_A`FbNTR[hT|[gĂ܂A
$ [WO[ƃ_CNgNƂŁAR[h𓯈ɏo
$ d|pӂĂ܂B

$ R̂ƂȂAPCQ[̃Z[ut@C\łB

$ x̂ƂȂADelphi2ɂ쐬ĂAX^hA
$ st@CTCY300KoCgȉ(UPXkɂAق100KoCg)
$ Small Tool()łA@\͌Smallł͂Ȃ͂łB

//--------------------------------------------------------------------------
//  Cheat Instructions   $ ̊{Iȗ
//--------------------------------------------------------------------------

(1)Select "Main" or "Sub" tab.
(2)Open the file which you want to patch(edit).
  Click "Open" button to select or drag&drop the file.
(3)Select "Cheat" tab.
(4)Input Patch Codes
  Select from the list, or open an external file which you have already
  input codes in.
(5)Click "Patch(Main)" or "Patch(Sub)" button.
(6)Select "Main" or "Sub" tab.
(7)Click "Save" button.

$ (1)"Main""Sub"^uI
$ (2)pb`𓖂Ăt@Cǂݍ
$   "Open"{^đI邩AhbO&hbv
$ (3)Cheat^uI
$ (4)pb`R[h͂
$   Ot@CǂݍނAXgI邩Aړ͂
$ (5)"Patch(Main)""Patch(Sub)"{^ăpb`𓖂Ă
$ (6)"Main""Sub"^uI
$ (7)"Save"{^ăt@Cۑ

$ T[`ꍇɂFlagp̃KvłACheat OnlyȃGh[U
$ ɂ͕svȂ̂łB̂SDUłFlag Clear{^Ƃ
$ ߂FlagpmۂAT[`\ɂȂ܂B

//--------------------------------------------------------------------------
//  Supported Codes   $ SDUT|[gR[h
//--------------------------------------------------------------------------

$ {IɁAPS-PARcaetlaR[h̎dlq؂Ă܂B
$ 炩ɕsvȂ̂͏A҂LĂ܂B

$ ȉ͓Ǝɒ`R[hłB

$ C8,C9: `FbNTR[h
$   S?X  CUE_LOGIC_CODE ͂邱Ƃ\ȔʁA@\ɑ΂ď璷
$   Ȃ܂񂩁H

$ CB: x[XAhXύXR[h
$   rR[hƕp΁A[WO[ƃ_CNgNƂ
$   R[h𓝈ł܂B

$ caetlaER[hE8R[hɕύX
$   16K𒴂t@CҏW邱Ƃ͖őɂȂvł傤?
$   ꍇCBR[hőΏĂB

$ 18,19: 32 BIT ZR[h

$ A8: f[^񏑂݃R[h

----------------------------------------------------------------------------
WRITE SIMPLY

* 30aaaaaa ??dd        8 BIT
* 80aaaaaa dddd       16 BIT
* 90aaaaaa dddddddd   32 BIT

 aa..address
 dd..value

$ aa.. oCgڂ dd.. 
----------------------------------------------------------------------------
SUM/DEC

* 10aaaaaa dddd       SUM 16 BIT
* 11aaaaaa dddd       DEC 16 BIT
* 18aaaaaa dddddddd   SUM 32 BIT
* 19aaaaaa dddddddd   DEC 32 BIT
* 20aaaaaa ??dd       SUM  8 BIT
* 21aaaaaa ??dd       DEC  8 BIT

 aa..address
 dd..value

$ aa.. oCgڂ̒l dd.. Z
----------------------------------------------------------------------------
REPEAT

* 50??llaa dddd
  30yyyyyy ??xx  or  80yyyyyy xxxx

 yy..start address
 xx..start value
 aa..address step
 dd..value step
 ll..loop number

$ yy.. oCgڂ aa.. oCǧv ll.. ӏɁA
$ l xx.. ɑ΂ dd.. ݐςl
----------------------------------------------------------------------------
WRITE DATA ARRAY

* A8aaaaaa llllllll
  dddddddd dddddddd
  dddddddd dddddddd
          :

 aa..start address
 ll..number of data
 dd..data array

$ f[^ dd.. ̂ ll.. oCg aa.. oCgڂ珑
----------------------------------------------------------------------------
REPEAT2

* Blllaaaa dddddddd
  30yyyyyy ??xx  or  80yyyyyy xxxx  or  90yyyyyy xxxxxxxx

 yy..start address
 xx..start value
 aa..address step
 dd..value step
 ll..loop number

$ yy.. oCgڂ aa.. oCǧv ll.. ӏɁA
$ l xx.. ɑ΂ dd.. ݐςl
----------------------------------------------------------------------------
COPY DATA

* C2aaaaaa llll
  ??yyyyyy ????

 aa..start address(source)
 yy..start address(destination)
 ll..number of data

$ aa.. oCgڂ ll.. oCg yy.. oCgڈȍ~ɃRs[
----------------------------------------------------------------------------
CHECKSUM

* C8aaaaaa msssllll   LITTLE ENDIAN
* C9aaaaaa msssllll   BIG ENDIAN
  30yyyyyy xxxxxxxx or 80yyyyyy xxxxxxxx or 90yyyyyy xxxxxxxx

 aa..start address
 ss..address step
 ll..loop number
 xx..address of initial value
   when xx.. is higher than $FFFFFF, initial value is zero.
 yy..address to write a result(checksum)
 m..mode
   m=0    8 Bit XOR
   m=1    8 Bit SUM
   m=2    8 Bit DEC
   m=4   16 Bit XOR
   m=5   16 Bit SUM
   m=6   16 Bit DEC
   m=8   32 Bit XOR
   m=9   32 Bit SUM
   m=A   32 Bit DEC

$ aa.. oCgڂ ss.. oCǧv ll.. ӏ̒l
$ xx.. oCgڂ̒llƂĘ_ZAyy.. oCgڂɏ
$ lw肵Ȃ(0ɂ)Ƃ́Axx..  FFFFFF ȏ͂
----------------------------------------------------------------------------
COMPARE
                 ignore 1 following code
* D0aaaaaa dddd   IF NOT EQUAL  (16 BIT)   $ ȂΖ
* D1aaaaaa dddd   IF EQUAL      (16 BIT)   $ Ζ
* D2aaaaaa dddd   IF NOT LESS   (16 BIT)   $ ȂΖ
* D3aaaaaa dddd   IF NOT GREATER(16 BIT)   $ 傫ȂΖ
* E0aaaaaa ??dd   IF NOT EQUAL  ( 8 BIT)   $ ȂΖ
* E1aaaaaa ??dd   IF EQUAL      ( 8 BIT)   $ Ζ
* E2aaaaaa ??dd   IF NOT LESS   ( 8 BIT)   $ ȂΖ
* E3aaaaaa ??dd   IF NOT GREATER( 8 BIT)   $ 傫ȂΖ

 aa..address
 dd..value

$ aa.. oCgڂ̒l dd.. rAΎɗ1R[h𖳎܂
----------------------------------------------------------------------------
COMPARE2
  Ignore several(ll..) following codes if not equal

* E8aaaaaa ddddllll

 aa..address
 dd..value
 ll..number of codes to ignore

$ aa.. oCgڂ̒l dd.. łȂ΁Aɗ ll.. ̃R[h𖳎܂
----------------------------------------------------------------------------
CHANGE BASE ADDRESS

* CB?????? aaaaaaaa

 aa..base address(default base address is zero.)

$ ȍ~̃R[hɂ̓x[XAhX aa.. Z܂

//--------------------------------------------------------------------------
//  Update(Written in Japanese, hard to translate for me)   $ XV
//--------------------------------------------------------------------------

*** 0.1.1(2001/08/19) ***

CB(x[XAhXύX)R[hǉ܂B
ɂA[WO[ƃ_CNgNƂ
R[h̋ʉ\łB
ƂA̕(ۂ̃f[^̃ItZbg\)
̕RȋC܂B

1oCgA2oCg̃`FbNTvZɂ錅オ}XNp~܂B
(ŏIIɌʂޒiKŌ߂΂ƂA
ꍇɂĂ͌オ𗘗pĂꍇ邽)

Subւpb`𓖂Ă悤ɂ܂B

R[h
 AutoRead:t@C
̕񂪂ꍇA"Patch(Auto)"{^
IɎwt@CǍ݁Apb`𓖂āAۑ܂B
t@C̓tpXŎw肵܂B
͏o܂̂ŁAl񋓂ĉ()B

ۑ̍ۂɃt@CTCYł͂Ȃobt@TCYŕۑĂ
oOC܂B[WO[ł͗҂v̂
ƂĂ܂B

TCY0̃t@CǍ܂Ȃ悤ɂ܂B

񂩂st@CUPXk邱Ƃɂ܂B

_CNgNĂ݂܂
͂茾ă[WO[̕{g܂B
[WO[̓VXet@C
s̑̂obNAbvł邵
ACR܂߂ĊSɃobNAbv̂
Ȃ[J[hɃf[^ǉł̂ɑ΂āA
_CNgN̕
Rs[\̑̂̂ŁAf[^݂̂̌B
܂t@C𕜌ۂɁA\ߓID̃t@C
瑤Ń[J[hɑ݂ĂKvB
͒vI(SXL񂾂Ȃ񂾂)B
܁A̕ӂ͏Iɂ͉ƂȂ肻ȋC
ȂłȂłAm肵Ȃ͔lȂB
USBXbgȂlȊO͐ΎoȂƁB

*** 0.1.0(2001/07/22) ***

J

//--------------------------------------------------------------------------
//  Disclaimer(Written in Japanese, hard to translate for me)   $ Ɛӎ
//--------------------------------------------------------------------------

{vO͓{ɂʗpt[EFÅTOɑ̂łB
{vO̎gpɂ萶@Ȃ镾Qɑ΂Ă⏞v܂̂
̎|𗝉ꂽ̂݌gpB
lɂĔzzǎ͈͓̔ł̉ς
X(Ɠcn)̋𓾂Kv͂܂񂪁A
pzzɓYtꍇɂ́A(Ɠcn)̋KvƂ܂B
̏ꍇ͓ŐRAꍇɂĂ
Ή(Xɂďpzẑ)v邱Ƃ܂B
(ǐSIȒliݒ肪Ă̂ɂĂ͖œ]ڋƂƂł)

My pen name is Dr.Hell in English or Ɠcn in Japanese.
xxxxxxxx@lycos.ne.jp
