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=000033918702: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000333918702: MISC:MSCDEX: Driver Function 8533918702: MISC:MSCDEX: Status : 010033918720: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000333918720: MISC:MSCDEX: Driver Function 0333918720: MISC:MSCDEX: IOCTL INPUT Subfunction 0933918720: MISC:MSCDEX: Status : 010033918738: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000333918738: MISC:MSCDEX: Driver Function 0333918738: MISC:MSCDEX: IOCTL INPUT Subfunction 0633918738: MISC:MSCDEX: Status : 010033918756: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000333918756: MISC:MSCDEX: Driver Function 0333918756: MISC:MSCDEX: IOCTL INPUT Subfunction 0A33918756: MISC:MSCDEX: Status : 010033918774: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000333918774: MISC:MSCDEX: Driver Function 0333918774: MISC:MSCDEX: IOCTL INPUT Subfunction 0B33918774: MISC:MSCDEX: Status : 010033918792: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000333918792: MISC:MSCDEX: Driver Function 0333918792: MISC:MSCDEX: IOCTL INPUT Subfunction 0B33918792: 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=000023347328: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000323347328: MISC:MSCDEX: Driver Function 8523347328: MISC:MSCDEX: Status : 010023347346: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000323347346: MISC:MSCDEX: Driver Function 0323347346: MISC:MSCDEX: IOCTL INPUT Subfunction 0923347346: MISC:MSCDEX: Status : 010023347364: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000323347364: MISC:MSCDEX: Driver Function 0323347364: MISC:MSCDEX: IOCTL INPUT Subfunction 0623347364: MISC:MSCDEX: Status : 010023347382: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000323347382: MISC:MSCDEX: Driver Function 0323347382: MISC:MSCDEX: IOCTL INPUT Subfunction 0A23347382: MISC:MSCDEX: Status : 010023347400: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000323347400: MISC:MSCDEX: Driver Function 0323347400: MISC:MSCDEX: IOCTL INPUT Subfunction 0B23347400: MISC:MSCDEX: Status : 010023347418: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000323347418: MISC:MSCDEX: Driver Function 0323347418: MISC:MSCDEX: IOCTL INPUT Subfunction 0B23347418: MISC:MSCDEX: Status : 010023347436: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000323347436: MISC:MSCDEX: Driver Function 0323347436: MISC:MSCDEX: IOCTL INPUT Subfunction 0B23347436: MISC:MSCDEX: Status : 010023347454: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000323347454: MISC:MSCDEX: Driver Function 0323347454: MISC:MSCDEX: IOCTL INPUT Subfunction 0B23347454: MISC:MSCDEX: Status : 010023347472: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000323347472: MISC:MSCDEX: Driver Function 0323347472: MISC:MSCDEX: IOCTL INPUT Subfunction 0B23347472: MISC:MSCDEX: Status : 010023347490: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000323347490: MISC:MSCDEX: Driver Function 0323347490: MISC:MSCDEX: IOCTL INPUT Subfunction 0B23347490: MISC:MSCDEX: Status : 010023347508: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000323347508: MISC:MSCDEX: Driver Function 0323347508: MISC:MSCDEX: IOCTL INPUT Subfunction 0B23347508: MISC:MSCDEX: Status : 010023347526: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000323347526: MISC:MSCDEX: Driver Function 0323347526: MISC:MSCDEX: IOCTL INPUT Subfunction 0B23347526: MISC:MSCDEX: Status : 010023347544: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000323347544: MISC:MSCDEX: Driver Function 0323347544: MISC:MSCDEX: IOCTL INPUT Subfunction 0B23347544: MISC:MSCDEX: Status : 010023347562: MISC:MSCDEX: INT 2F 1510 BX= 0000 CX=000323347562: MISC:MSCDEX: Driver Function 0323347562: MISC:MSCDEX: IOCTL INPUT Subfunction 0B23347562: 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=000333918792: MISC:MSCDEX: Driver Function 0333918792: MISC:MSCDEX: IOCTL INPUT Subfunction 0B33918792: 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 INPUTDevIoctlInput(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=000323347400: MISC:MSCDEX: Driver Function 0323347400: MISC:MSCDEX: IOCTL INPUT Subfunction 0B23347400: 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 ?