This is an interesting analysis and comparison between Oak Technology's OAKCDROM (proprietary) and Jack's UDVD2 (free with sources).
Have you shared this with Jack? I think he would want to see this so he can improve compatibility in his driver. On Mon, Jun 7, 2021 at 9:10 PM Eric Auer <e.a...@jpberlin.de> wrote: > > > Hi gamers and coders, in particular Lukas :-) > > Wondering why some (copy protected?) games work with OAKCDROM > but not with UDVD2, I checked which differences exist between > the two. I also found a relevant DOSBOX code snippet, assuming > that DOSBOX cares more about game compatibility. Things which > are not supported in UDVD2, but are supported in OAKCDROM are: > > *driver functions* > > Driver function 3 IOCTL IN and 0x0c IOCTL OUT both have > various sub-functions, but some are not supported in UDVD2 > while others are not supported in DOSBOX. As I assume that > DOSBOX is good with games, functions which ARE supported > in DOSBOX and OAKCDROM, but not in UDVD2, are most likely > candidates for game copy protection compatibility issues. > > Driver function 7 flush (DOSBOX does not support this either) > > Driver functions 0x0d and 0x0e (open or close driver: > DOSBOX ignores this, just as UDVD2 does, no problem) > > Driver functions 0x80, 0x82 and 0x83 (0x81 is reserved) do > differ a bit, but within specs: 0x83 read long prefetch is > synonymous to SEEK (0x83) in UDVD2, while it actually behaves > as READ LONG (0x80) in DOSBOX and in OAKCDROM, all three are > different from each other (no idea what exactly they do). > > Interestingly, neither OAKCDROM nor UDVD2 support WRITING > to CD/DVD, neither with nor without verify (0x86 and 0x87) > but users of "DOSCDROAST" are probably the only ones who > notice that? Also, both drivers support play, stop and > resume audio (0x84, 0x85 and 0x88) which is great :-) > > *differences for IOCTL support* > > IOCTL OUT function 3 "audio control" (volume control?) > > IOCTL IN function 4 "audio control" (volume control?) > In DOSBOX, you can read with the latter what you wrote > with the former. > > IOCTL OUT function 4 "write bytes" (not supported in DOSBOX > either, so this is apparently not relevant for games?) > > IOCTL IN function 1 "head location" seems to be supported > in UDVD2 and DOSBOX but not OAKCDROM, but I might have > messed up my probing for that one. > > IOCTL IN function 3 "error statistics" is not supported > in UDVD2, but DOSBOX does not support it either > > IOCTL IN function 5 "read bytes" is supported by neither > UDVD2 nor DOSBOX, so probably not relevant for games > > IOCTL IN function 0x0d "subchannel info" is not supported > by UDVD2 and there seems to be a *bug* in DOSBOX because > it seems to mix up the function and 0x0c "Q-channel info"? > > IOCTL IN function 0x0e "read UPC/EAN code" is not supported > by UDVD2 and seems to be an obvious choice for doing some > minimal copy protection check in games? > > *background* > > I have used the UDVD2.ASM sources, an OAKCDROM binary > and the following two web references for my comparison: > > MSCDEX text, describing the driver API: > https://gist.github.com/abrasive/7a615e6dde0c1da962f9930cc63ee43d > > DOSBOX implementation, for comparison: > https://sourceforge.net/p/dosbox/code-0/4167/tree/dosbox/trunk/src/dos/dos_mscdex.cpp > > *conclusion* > > If you ask me, *READ UPC CODE* (IOCTL IN function 0x0e) would > be an interesting candidate to check for DOS game compatibility. > > *other thoughts* > > Audio volume control calls do not seem relevant and as far > as opening or closing the driver, reading and writing drive > control bytes or reading error statistics are concerned: > > Those are not supported by DOSBOX EITHER, so if that would > break games, DOSBOX users might have already mentioned it? > > Which of the two allowed styles "read long prefetch" does > should not matter, as long as the driver does consistently > whatever it does. I think some flag also announces that. > > Note that checking the audio playback "cursor" location is > usually done by reading the Q-channel, not head location, > but it is great that UDVD2 implements both :-) Checking the > head location can give useful "seek" progress info, I think. > > *proposed game experiment* > > I suggest the following experiment: If your OAKCDROM has > md5sum 7ed28c4b926dae81a4e9ccf1f5378f64 then changing the > bytes at offset 0x281 from 0xd6 0x04 to 0xf5 0x05 should > deliberately "break" the "read upc code" function, so if > that keeps everything else working, BUT breaks the copy > protected games, then my theory would be correct and it > might help to implement that one more function in UDVD2. > > In DOSBOX, this function returns 1 attribute byte, 8 UPC > bytes and a 0 byte. We can return ten 0 bytes on failure. > > Regards, Eric > > PS: Note that OAKCDROM has exe style relocations, so you > have to use a hex editor, not debug, to change the 2 bytes. > > PPS: The ELTORITO driver, of course, does not support any > audio and similar functions and does not implement several > other functions which are available in the other drivers. > _______________________________________________ Freedos-user mailing list Freedos-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-user