ps2classic.exe for PS2 multidisc PKGs

PS3 ps2classic.exe for PS2 multidisc PKGs 2025-05-24

mrjaredbeta

Developer
Multi-disc functionality with ps2_netemu has finally been reversed! Custom multi-disc packages are now possible. For now, additional discs and configs need to be manually encrypted with this custom ps2classic executable. All credits go to kozarovv for reversing, and this write up.

I have tested and confirmed it is working with a custom Grandia III package, with disc two and original CONFIG2 NET config re-encrypted using this tool.

From kozarovv:

For now only disc change with reset has been tested, and there is high probability that swap without reset is broken in emulator itself.
For plain users I suggest to wait until changes will be ( if they will be :) ) implemented into GUI apps like PS2 classics GUI or pop-fe2.

Requirements:
- Modified ps2classic cli app.
- Per disc CONFIG files.
- Game discs with added LIMG segment.
- DISC.IDX file (used to preserve current disc number).

App arguments example:
Code:
ps2classic.exe e [cex/dex] [klicensee] [iso] [out data] [real out name] [CID] [disc number]
ps2classic.exe e cex klic.bin game.iso ISO.BIN.ENC2 ISO.BIN.ENC2 2P0001-PS2U10000_00-0000111122223333 2

CONFIG examples based on Grandia 3:

Config file example for disc1 (CONFIG):
Code:
3D 00 00 00 A8 3E 00 00 00 00 00 00 53 4C 55 53
2D 32 31 33 33 34 00 02 00

Config file example for disc2 (CONFIG2):
Code:
3D 00 00 00 A8 3E 00 00 00 00 00 00 53 4C 55 53
2D 32 31 33 33 45 00 02 01

Additionally to make emulator to remember current disc, put zeroed 2 bytes DISC.IDX file in to /game/<game id>/USRDIR/.

Config files also need to be encrypted using modified ps2classic app!
Like you can see config file should have game ID after 00 00 00 00 terminator, and after ID, there are multidisc info bytes. ID should match one from the disc.
Last bytes 00 0X 0Y, where X is overall disc count, and Y is disc number - 1. This data is later copied to DISC.IDX. Up to 9 discs is supported in single PKG.

Final file structure should look like this:

Code:
[<GAME ID>]
  [USRDIR]
  [SAVEDATA]
  SCEVMC0.VME
  SCEVMC1.VME
  CONFIG
  CONFIG2
  ISO.BIN.ENC
  ISO.BIN.ENC2
  ISO.BIN.EDAT
  PS3LOGO.DAT
  PARAM.SFO
  ICON0.PNG
  PIC0.PNG
  PIC1.PNG

WARNING! Modified version of ps2classic is working only on Windows, but this is isn't actually any limitation, I just made some additional Windows specific changes to make it compile under VS, which likely break Linux compilation. Changes regarding multidiscs are only in ps2classic.c file, and search for disc_num to understand them or to port them to different forks.
 

Attachments

Last edited:
question, it mentions that a DISC.IDX file is required, but where can you generate or build such file?

I can probably add this new feature to the ps2classic encryption on Apollo-ps3, but I'm not sure about that DISC.IDX file.
 
Wow nice work kozarovv i remember when we looked into this years ago, glad something finally came of it
upload_2025-5-23_16-35-28.png

2018 ? damn it doesnt feel that long ago.


question, it mentions that a DISC.IDX file is required, but where can you generate or build such file?

I can probably add this new feature to the ps2classic encryption on Apollo-ps3, but I'm not sure about that DISC.IDX file.
Some of the info above, and im uploading a clean one here for you to examine yourself. Its basically just a 2 byte file with 00 00 in by default. (had to zip the file because the site doesn't like the IDX extension)
 

Attachments

Correct, DISC.IDX is simply a blank, 2 byte file that is updated when discs change. If you switch from disc 1 to disc 2 and exit, the game will then start at disc 2 when you relaunch the game.

DISC.IDX is also not technically required, but without it the game will always start on disc 1.
 
thanks for the info and details about DISC.IDX

I was comparing the ps2classic.c with the code I have on Apollo and it should be possible to add this specific mod for ps2classic encryption. My idea would be to:
- let the user select the ISO to convert to ps2classic
- ask the user if it should be a multi-disc encryption
- if multi-disc, ask which disc (1, 2, ..., 9)
- encrypt the ps2classic ISO

My last question would be: for regular single disc ps2 ISOs, this addition should be skipped, or can be encrypted with "disc_num = 1"
 
thanks for the info and details about DISC.IDX

I was comparing the ps2classic.c with the code I have on Apollo and it should be possible to add this specific mod for ps2classic encryption. My idea would be to:
- let the user select the ISO to convert to ps2classic
- ask the user if it should be a multi-disc encryption
- if multi-disc, ask which disc (1, 2, ..., 9)
- encrypt the ps2classic ISO

My last question would be: for regular single disc ps2 ISOs, this addition should be skipped, or can be encrypted with "disc_num = 1"
Good idea. Just dont overwrite the savedata (if possible). Saludos
 
thanks for the info and details about DISC.IDX

I was comparing the ps2classic.c with the code I have on Apollo and it should be possible to add this specific mod for ps2classic encryption. My idea would be to:
- let the user select the ISO to convert to ps2classic
- ask the user if it should be a multi-disc encryption
- if multi-disc, ask which disc (1, 2, ..., 9)
- encrypt the ps2classic ISO

My last question would be: for regular single disc ps2 ISOs, this addition should be skipped, or can be encrypted with "disc_num = 1"

I would use the new code only for the multi-disc PKGs, and keep the original logic for the single disc games.

multi-disc PKGs are the exception. "If it ain't broke, don't fix it." :D
 
Did you get any further with this?

I tried it with webMAN MOD using a dummy iso with the ELF id set in the SYSTEM.CNF as SLUS_999.99
I renamed the iso as
SLUS-21334.iso & SLUS-21335.iso but SLUS-21335.iso was hidden from the game list, the correct disc2 is actually SLUS-21345, it's used by another game already
SLUS-21335 The Hustle - Detroit Streets
, unlike the japanese release that just uses SLPM-65976 & SLPM-65977, how would we name the isos anyway?
Grandia III (Disc 1).iso
Grandia III (Disc 2).iso
or
Grandia III [SLPM-65976](Disc 1of2).iso
Grandia III [SLPM-65977](Disc 2of2).iso
 
Last edited:
Did you get any further with this?

I tried it with webMAN MOD using a dummy iso with the ELF id set in the SYSTEM.CNF as SLUS_999.99
I renamed the iso as
SLUS-21334.iso & SLUS-21335.iso but SLUS-21335.iso was hidden from the game list, the correct disc2 is actually SLUS-21345, it's used by another game already
SLUS-21335 The Hustle - Detroit Streets
, unlike the japanese release that just uses SLPM-65976 & SLPM-65977, how would we name the isos anyway?
Grandia III (Disc 1).iso
Grandia III (Disc 2).iso
or
Grandia III [SLPM-65976](Disc 1of2).iso
Grandia III [SLPM-65977](Disc 2of2).iso
Updated the incorrect ELF ID.

This is specifically for encrypted games ran from the game folder, not for ISOs ran on WebMAN MOD. It will not work for anything over than that.
 
Updated the incorrect ELF ID.

This is specifically for encrypted games ran from the game folder, not for ISOs ran on WebMAN MOD. It will not work for anything over than that.

Ok, I tried making a .BIN.ENC from the .ISO with Apollo but WebMAN Mod complained about the image being encrypted with DEX & not CEX or vice-versa my console is converted from CEX to DEX, doesn't Apollo apply the same current console encryption to the .ISO to encrypt & decrypt, why is it showing as missmatched encryption?
 
@mrjaredbeta @aldostools I was just thinking... could this be used to "bundle" a ps2 cheat disc and a ps2 game iso?

I mean, now that we figured out how to build proper ps2classics that can swap discs, I'm thinking something like:

- CD1: use code breaker / action replay max / ps2 cheat device / gameshark image
- CD2: any ps2 game that you want to play with cheats

then build the ps2classic image with both discs,
- start the game, it should launch the Code Breaker app
- select the cheats
- when Cheat app asks to swap disc, use ps2classic menu to change to CD2 (the game image)
- launch game with cheats
- profit!

I haven't tested this theory (I've too many projects on my plate), but what do you think? it's possible to build and "abuse" the ps2classic swap trick?
 
@bucanero Currently, this disc swap functionality has only been tested with swap and reset method as that was the only function ever released officially. However, this should *hopefully* be possible with an added "00" byte at the end of the config to enable hot-swapping functionality, as in getting the "Switch Disc" menu to show in the PS Button menu, and being able to swap discs without needed to reset: https://www.psdevwiki.com/ps3/PS2_Emulation/PS2_Config_Commands (first command, added fourth byte)

I also have a lot on my plate and really have no means to test right now, but it has a high chance of working.
 
Well Swap Magic is blacklisted by netemu, but Crazy Taxi is allowed, it does some data check to make sure it's a valid Crazy Taxi copy an not a hybrid cheat disc using the Crazy Taxi splice.
 
@mrjaredbeta @aldostools I was just thinking... could this be used to "bundle" a ps2 cheat disc and a ps2 game iso?

I mean, now that we figured out how to build proper ps2classics that can swap discs, I'm thinking something like:

- CD1: use code breaker / action replay max / ps2 cheat device / gameshark image
- CD2: any ps2 game that you want to play with cheats

then build the ps2classic image with both discs,
- start the game, it should launch the Code Breaker app
- select the cheats
- when Cheat app asks to swap disc, use ps2classic menu to change to CD2 (the game image)
- launch game with cheats
- profit!

I haven't tested this theory (I've too many projects on my plate), but what do you think? it's possible to build and "abuse" the ps2classic swap trick?

It sounds like a great idea... multi-disc could be used also to create game collections, bundles of modded games (e.g. GTA) or retroarch packs.
 
It sounds like a great idea... multi-disc could be used also to create game collections, bundles of modded games (e.g. GTA) or retroarch packs.

You can definitely do that.
I tested with a package consisting of DevilSummoner and Scarface and you can reset back and forth between the two games.
Not sure if it is super useful though since it does mean that SoftwareManual only covers the first game, and ...
...
...
don't we really want ALL the games to show up beautifully and individually on the XMB ? And a collection would kind of defeat that. :)


For someone that wants to test some more,
I created a test version for it in pop-fe2 in the multiswap branch.
./pop-fe2.py --swap=0 --ps3-pkg=g.pkg G.iso H.iso I.iso ...

--swap=0|1 to inject that optional fourth byte in command 0.
Or skip --swap completely and that fourth byte will be skipped too.

Not sure if I will fold this into the master branch. But if you want tooling to test collections or cheat-disks, here you go.

But it is there , in the multiswap branch, if someone wants to do some not so very quick (it takes forever to create very large PKGs, transfer to the PS3 and then install them) tests.
 
Last edited:

Similar threads

Back
Top