Sub channel reading

ePSXe

Sub channel reading
Previous  Top  Next


First off, let's clearify what the heck we are talking about here : Sub channel reading basicly allows you to get around many protections without getting a PPF file to patch the emulator. This is mostly interresting for NTSC J (japan) and PAL (europe, asia) users, as these versions of the game often come with such a copy protection (the most popular example would be Final Fantasy 9 here). The new option just needs to be activated in ePSXe v1.5.1 and you're settled. Now below is a detailed text, written by Pete Bernert (author of the famous Pete plugins collection), which gives you about any detail you might know (even some which rather belong into the documentation directory), so I just pasted it in here :

First let me try to explain in an easy way what "subchannels" are for: Beside the "real data" in a cd sector, there are also a few extra informations for each sector. That extra informations ("subchannel data") are usually used on audio tracks, to give informations about the current head position (unlike a data track, an audio track needs all bytes in a cd sector for the audio data, so there is no space left for sync infos or error correction infos... but in the q subchannel there is a track number, an index number and even absolute/relative timestamps, so the audio cd player can use that for synchronisation while playing cd audio).

The subchannels are also present on data tracks, even if no file system will need them... and once-upon-a-time game companies had a "great" idea for copy protections: usually the timestamp in subchannel data will give the position of the playing position... but data tracks don't need that info... so why not abuse the data? Why not change, for example, the timestamp of a few special data sectors to some nonsense values? The game can read back the subchannel of that sectors, and detect illegal cd copies that way (since most cd writers will write correct timestamps, and not the "nonsense" ones of the original cd).

OK, now I can hear the questions of many users, asking "so what's the problem? I only use original games, so I don't care about copy protection issues."
Unluckily that's not true... unlike the psx cd drive, there are some problems reading subchannels on pc drives. The 'official' scsi commands for reading subchannel data will give you not the exact sub q data of a sector, the values are usually from a +/- 1 second wrong sector (that's because the command was designed to give only rough position infos for audio playing, nothing else).
There _are_ vendor-specific subchannel read commands for most drives, but the vendors are not giving such informations easily to interested users (I am really wondering why... hell, it's my drive, and if it can read such data, and if I want to use it to do that, why refuse to give me the required informations? And next time when I buy a car, I prolly will not even get the keys for it, pfff).

So, in the past, users of _original_ but copy-protected psx game cds had to search the net for special game PPF patches (which removed the protection), if they wanted to play such a game in an emulator. Not very nice, isn't it?

The first emu team which tried to get around that situation was FPSE, afaik...FPSE 0.10 was never released, but LDChen (main coder of FPSE) claimed he had some copy-protected games up and running, without any PPF patches (and I have no doubts about that... prolly he had found a command on his cd drive, which was reading the subchannel data).

Well, lately more emu teams were trying to emulate copy protected games (to freely quote lu_zero: "Cheats and hacks are bad! Only real emulation is the true way!"), and so I (as the creator of this small cdr plugin) was forced to try my luck with subchannel reading as well :)

"Pain in the ass" doesn't describe my cdr coding sessions... it was a more overall pain, I can assure you ;) But with much talks and more tests between the members of various psx emu teams (hi to calb, _Demo_ and shunt), I can now proudly present version 1.10 with subchannel support.

So, now let's move to the new options:

1.there is a mode called "Don't read subchannels". If your game doesn't have a copy protection, use that one. That mode will work like the previous versions of my cdr plugin, no loss, no gain.  
2.A mode called "Read subchannels". Go figure ;) Well, I advise NOT to use that mode, ehehe. Confused? Aahhh... lemme try to explain: I've coded four different sub channel read modes (one is working on my Pioneer in BE_2 scsi read mode, one is working on my Teac in combination with the 28_1 mode, one is using the standard scsi "read subchannel" command (gives not the exact values on my drives), and one is only available in W2K/XP (and also doesn't give exact values on my drives). But all of them will SLOW DOWN the cdrom access (well, the BE_2 mode is kinda OK, but the teac mode has the same effect as a FPS limitation to 3 FPS if a game is accessing the cd all the time). And I've noticed that a randomly accessed subchannel reading of sectors can lead to some wrong bits in the subchannel data from time to time, due to the lack of some error correction... bad thing! So, that leads us to the 3. RECOMMENDED mode:  
3."Use subchannel SBI/M3S info file". What's that? Easy: the plugin will only do the normal, fast data reading (like mode 1), and everytime when a game wants to have subchannel data, the plugin will use the subchannel data stored into a file on your harddisk. So, you just have to create a subchannel info file of your copy protected game one time, and activate that file in the plugin if you want to play that special game (that's when a frontend like ePSXeCutor comes handy, for creating different game configs, ehe :) So, it kinda works like my PPF option, but of course you can create your own info files, you don't need the help of some cracking crew =)  

How to create such subchannel info files? Easy as well: there is a special button in the cdr config window, which will let you create the files directly from your original cd, or (if your drive is not supported by my subchannel reading funcs), you can convert a CloneCD SUB file... of course you will need CloneCD as well to do that, but it's the only way to get the subchannels from a drive not supported by my plugin (and prolly there are many not supported drives...)

I support 2 different subchannel info file types: a format which is also used by epsxe, called "M3S". This files will ever be 71 kbyte in size, but they don't contain _all_ subchannels from a game, just the ones of the minute 3 sectors... usually that's enuff for psx copy protections, but to be sure I made my own file format as well, called "SBI". That one will contain all "nonsense" datas from track 1 of a game cd, so the size will vary (usually it's small, though, only 5 - 20 kbytes). It takes more times to create "SBI" files, well, so it's up to you :)

Ok, so you have created the subchannel info file, you did configure the plugin to use it... and still the game doesn't work??? Why??? First: the main emu has to support the new subchannel commands... if it doesn't, it will not work. At the time I am typing that text only ePSXe 1.5.1 can be used with subchannels, but I am sure that more emus will follow... so stay tuned =) Second: There is an option called "Enable subchannel support" in ePSXe 1.5.1 (and in ePSXeCutor 1.0.5.1 as well, of course). You have to ENABLE that epsxe option, or otherwise epsxe will NOT use the subchannel data.