DKWDRV is a replacement for the original PS1DRV of Playstation 2 consoles. The original driver was heavily limited in features (sometimes on purpose and sometimes not) making user experience a real hassle. DKWDRV aims at overcoming this issues and making a much better gaming experience. Built from scratch by reversing both types of original drivers and merging them into one single unified driver. This project is not related in any way with any existing PS1 related PS2 homebrews out there.
At the moment the project can be considered BETA and many issues can come due to the big number of hardware and game differences. Users are welcome to submit issues or request features.
With time more details and documentation about PS1 operation in PS2 mode will be provided.
1.7.2
1.7.1
A full list of internal configs with proper documentation will be coming in the future.
Download the lastest release from the release page. Simple run the ELF files in any way you can. Make sure that you have a valid PS1 disc inserted prior to running. Users must configure options for the fixes and features that they want. If they want to save changes they have to use the Save Game Config option in the menu. Selection Run will boot into the game. Most options are easy to understand. Better naming and documentation coming soon. Do note that modchip CAN and WILL impact the boot sometimes and you might get black screens. Report issues in Github issues and remember to post AS MUCH INFO AS POSSIBLE. Your model, DKWDRV version, type of media, id, ids, redump links, modchip everything you find relevant. "Does not work" and "Black screen" are horrible reports! Remember to also note the information in the "INFO" section of DKWDRV. Make sure to always use the latest version.
All user per game configs are stored in the memory card. Each game will create it's own save which can be managed from OSDSYS too in case you want to copy or delete it. The reason for having a save per game and not all configs inside a main save dir is because with many files OSDSYS won't copy or delete the main file. The main file will have a formatted game copy. For example Crash Bandicoot will have SCUS-94900 as game id but the save folder will be "SCUS94900". Inside it there will be two possible files, CONFIG.TXT and CHEATS.TXT for cheats. An import other case is the problem of games with no SYSTEM.CNF which only have PSX.EXE or that do indeed have SYSTEM.CNF but BOOT filename is still PSX.EXE. Since many games share the same id for this games the save name will be PSXyyyyyyyy where yyyyyy is hex value for CRC32 of PSX.exe from that game. This is the only proper way to be able to handler that many PSX.EXE titles out there where many are homebrews. Example of a memory card listing
mc0:
SCUS147895 (folder for regular game)
CONFIG.TXT
CHEATS.TXT
PSX1DBA2151 (folder for PSX.EXE game)
CONFIG.TXT
CHEATS.TXT
In order to create the folder automatically you need to run Save Game config at least once. If many games with PSX.EXE and unsure which is which you can find it out by the hex value of CRC32 in the filename. Extract PSX.EXE from your disc in a PC and calculate it's CRC32. 7zip right click context menu would do the job just fine. Select CRC SHA and in submenu CRC32.
For DECKARD consoles users can press specific combos even while ingame.
For DECKARD consoles only cheats can be applied. Cheats must be placed inside memory folder with the game name. Users can save general config to automatically create this folder. At the root of the folder a CHEATS.TXT must be present for cheats to show. Refer to "User Configs" for more info on how to find the save folder. The desired cheats must be enabled from the menu every time prior to booting the game. Cheats are applied every vblank. An example of a cheat file:
#Infinite Lives "Boulders" Stage
8009E584 6300
#Infinite Lives "Castle Machinery" Stage
8009E88C 6300
#Infinite Lives "Cortex Power" Stage
8009E77C 6300
....
Supported cheat types: | Code(Hex) | Type(Duckstation Naming ) |
---|---|---|
00 | CodeNop | |
30 | ConstantWrite8 | |
80 | ConstantWrite16 | |
90 | ExtConstantWrite32 | |
31 | ExtConstantBitSet8 | |
81 | ExtConstantBitSet16 | |
91 | ExtConstantBitSet32 | |
32 | ExtConstantBitClear8 | |
82 | ExtConstantBitClear16 | |
92 | ExtConstantBitClear32 | |
60 | ExtIncrement32 | |
61 | ExtDecrement32 | |
10 | Increment16 | |
11 | Decrement16 | |
20 | Increment8 | |
21 | Decrement8 | |
A0 | ExtCompareEqual32 | |
A1 | ExtCompareNotEqual32 | |
A2 | ExtCompareLess32 | |
A3 | ExtCompareGreater32 | |
A6 | ExtConstantWriteIfMatch16 | |
A7 | ExtConstantWriteIfMatchWithRestore16 | |
D0 | CompareEqual16 | |
D1 | CompareNotEqual16 | |
D3 | CompareLess16 | |
D3 | CompareGreater16 | |
E0 | CompareEqual8 | |
E1 | CompareNotEqual8 | |
E2 | CompareLess8 | |
E3 | CompareGreater8 | |
50 | Slide | |
53 | ExtImprovedSlide | |
C2 | MemoryCopy |
Some initial documentation is now online. You can view it here. With time it will be updated so make sure to check regularly.