First post, by gidierre
- Rank
- Member
did a little debugging compare work between -ioctl (failing) & -noioctl (working) cdrom mount in Vista, used TR1 as the dos app to test with,
using to be precise a fresh dosbox install with DOSBox0.72-Debug-win32-installer.exe (the DOSBox 0.72 heavy debug version install package dated 2007-8-31 @ 11:51 am by Qbix)
see attached ioctl/noioctl debug logs,
now, extracting for you some lines from those logs, in short I spotted these snippets,
one from noioctl log (working with cdaudio tracks playing) :
33918684: MISC:MSCDEX: INT 2F 1500 BX= 0000 CX=0000
33918702: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
33918702: MISC:MSCDEX: Driver Function 85
33918702: MISC:MSCDEX: Status : 0100
33918720: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
33918720: MISC:MSCDEX: Driver Function 03
33918720: MISC:MSCDEX: IOCTL INPUT Subfunction 09
33918720: MISC:MSCDEX: Status : 0100
33918738: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
33918738: MISC:MSCDEX: Driver Function 03
33918738: MISC:MSCDEX: IOCTL INPUT Subfunction 06
33918738: MISC:MSCDEX: Status : 0100
33918756: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
33918756: MISC:MSCDEX: Driver Function 03
33918756: MISC:MSCDEX: IOCTL INPUT Subfunction 0A
33918756: MISC:MSCDEX: Status : 0100
33918774: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
33918774: MISC:MSCDEX: Driver Function 03
33918774: MISC:MSCDEX: IOCTL INPUT Subfunction 0B
33918774: MISC:MSCDEX: Status : 0100
33918792: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
33918792: MISC:MSCDEX: Driver Function 03
33918792: MISC:MSCDEX: IOCTL INPUT Subfunction 0B
33918792: MISC:MSCDEX: Status : 0100
and the other is its approximate paragon from ioctl log (no cdaudio play) :
23347310: MISC:MSCDEX: INT 2F 1500 BX= 0000 CX=0000
23347328: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347328: MISC:MSCDEX: Driver Function 85
23347328: MISC:MSCDEX: Status : 0100
23347346: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347346: MISC:MSCDEX: Driver Function 03
23347346: MISC:MSCDEX: IOCTL INPUT Subfunction 09
23347346: MISC:MSCDEX: Status : 0100
23347364: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347364: MISC:MSCDEX: Driver Function 03
23347364: MISC:MSCDEX: IOCTL INPUT Subfunction 06
23347364: MISC:MSCDEX: Status : 0100
23347382: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347382: MISC:MSCDEX: Driver Function 03
23347382: MISC:MSCDEX: IOCTL INPUT Subfunction 0A
23347382: MISC:MSCDEX: Status : 0100
23347400: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347400: MISC:MSCDEX: Driver Function 03
23347400: MISC:MSCDEX: IOCTL INPUT Subfunction 0B
23347400: MISC:MSCDEX: Status : 0100
23347418: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347418: MISC:MSCDEX: Driver Function 03
23347418: MISC:MSCDEX: IOCTL INPUT Subfunction 0B
23347418: MISC:MSCDEX: Status : 0100
23347436: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347436: MISC:MSCDEX: Driver Function 03
23347436: MISC:MSCDEX: IOCTL INPUT Subfunction 0B
23347436: MISC:MSCDEX: Status : 0100
23347454: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347454: MISC:MSCDEX: Driver Function 03
23347454: MISC:MSCDEX: IOCTL INPUT Subfunction 0B
23347454: MISC:MSCDEX: Status : 0100
23347472: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347472: MISC:MSCDEX: Driver Function 03
23347472: MISC:MSCDEX: IOCTL INPUT Subfunction 0B
23347472: MISC:MSCDEX: Status : 0100
23347490: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347490: MISC:MSCDEX: Driver Function 03
23347490: MISC:MSCDEX: IOCTL INPUT Subfunction 0B
23347490: MISC:MSCDEX: Status : 0100
23347508: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347508: MISC:MSCDEX: Driver Function 03
23347508: MISC:MSCDEX: IOCTL INPUT Subfunction 0B
23347508: MISC:MSCDEX: Status : 0100
23347526: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347526: MISC:MSCDEX: Driver Function 03
23347526: MISC:MSCDEX: IOCTL INPUT Subfunction 0B
23347526: MISC:MSCDEX: Status : 0100
23347544: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347544: MISC:MSCDEX: Driver Function 03
23347544: MISC:MSCDEX: IOCTL INPUT Subfunction 0B
23347544: MISC:MSCDEX: Status : 0100
23347562: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347562: MISC:MSCDEX: Driver Function 03
23347562: MISC:MSCDEX: IOCTL INPUT Subfunction 0B
23347562: MISC:MSCDEX: Status : 0100
the way I can get it, it's clear the paths part here with
33918792: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
33918792: MISC:MSCDEX: Driver Function 03
33918792: MISC:MSCDEX: IOCTL INPUT Subfunction 0B
33918792: MISC:MSCDEX: Status : 0100
that's where -noioctl presumably takes off to SDL interface (CDROM_Interface_SDL as per cdrom.cpp)
after a couple of failed (I think, because MSCDEX status : 0100 then bit 15 : set) attempts to call
INT 2F 1510,
driver function 03,
ioctl input subfunction 0B,
corresponding to Audio Track Info request,
as I gather (hoping I'm not getting it all wrong)
from looking up
dos_mscdex.cpp
function MSCDEX_Interrupt_Handler()
switch (funcNr) {
case 0x03 : { /* IOCTL INPUT */
...
static Bit16u MSCDEX_IOCTL_Input(PhysPt buffer,Bit8u drive_unit) {
Bitu ioctl_fct = mem_readb(buffer);
switch (ioctl_fct) {
case 0x0B :{/* Audio Track Info */
Bit8u attr; TMSF start;
Bit8u track = mem_readb(buffer+1);
mscdex->GetTrackInfo(drive_unit,track,attr,start);
mem_writeb(buffer+2,start.fr);
mem_writeb(buffer+3,start.sec);
mem_writeb(buffer+4,start.min);
mem_writeb(buffer+5,0x00);
mem_writeb(buffer+6,attr);
break; };
etc.
In sapucdex.c source, where there's no chance it can resort to noioctl calls and in fact cdaudio music also fails in Vista, I guess that would match
void DevIoctlInput(DRIVE_POINTER *DrvInfo, DEVICE_REQUEST *VdmReq)
the relevant spot being as I figure
void DevIoctlInput(DRIVE_POINTER *DrvInfo, DEVICE_REQUEST *VdmReq);
...
void ApiSendDeviceDriverRequest(void)
{
int drive;
DRIVE_POINTER *DrvInfo;
DEVICE_REQUEST *VdmReq;
....
switch (VdmReq->header.cmd)
{
case DEV_IOCTL_INPUT: // IOCTL INPUT
DevIoctlInput(DrvInfo, VdmReq);
break;
Now my question to the developers would be :
from the ioctl log snippet, no sound being heard in Vista, it's clear that there
23347400: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=0003
23347400: MISC:MSCDEX: Driver Function 03
23347400: MISC:MSCDEX: IOCTL INPUT Subfunction 0B
23347400: MISC:MSCDEX: Status : 0100
ten times poor subfunction 0B keeps on knocking at the door, until it gives up and it just goes on without music.
If my attempted divination makes sense (does it ?) how could the ioctl failure be bypassed to have sound as noioctl sdl gets, but keeping the more powerful features the ioctl structures could provide ?