INT 21 - CD-ROM device driver - IOCTL INPUT
AX = 4402h
BX = file handle referencing character device for CD-ROM driver
CX = number of bytes to read
DS:DX -> control block (see below)
Return: CF clear if successful
AX = number of bytes actually read
CF set on error
AX = error code (01h,05h,06h,0Dh) (see AH=59h)
Note:   the data returned depends on the first byte of the control block; the
remainder of the control block is filled by the driver
SeeAlso: INT 2F/AX=0802h

Format of control block:
Offset  Size    Description
00h    BYTE    data being requested
00h device driver header address
01h drive head location
02h reserved
03h error statistics
04h audio channel info
05h raw drive bytes (uninterpreted and device-specific)
06h device status
07h sector size
08h volume size
09h media change status
0Ah audio disk info
0Bh audio track info
0Ch audio Q-Channel info
0Dh audio sub-channel info
0Eh UPC code
---function 00h---
01h    DWORD   device driver header address (see also AH=52h)
---function 01h---
01h    BYTE    addressing mode
00h HSG
01h Red Book
02h    DWORD   current location of drive's head
logical sector number in HSG mode
frame/second/minute/unused in Red Book mode
(HSG sector = minute * 4500 + second * 75 + frame - 150)
---function 03h---
01h  N BYTEs   undefined as of 5 Aug 88 specification
---function 04h---
01h    BYTE    input channel (0-3) for output channel 0
02h    BYTE    volume for output channel 0
03h    BYTE    input channel (0-3) for output channel 1
04h    BYTE    volume for output channel 1
05h    BYTE    input channel (0-3) for output channel 2
06h    BYTE    volume for output channel 2
07h    BYTE    input channel (0-3) for output channel 3
08h    BYTE    volume for output channel 3
Notes:  output channels 0 and 1 are left and right, 2 and 3 are left prime and
right prime; a volume of 00h is off
the default setting is for each input channel to be assigned to the
same-numbered output channel at full (FFh) volume
---function 05h---
01h    BYTE    number of bytes read
02h 128 BYTEs  buffer for drive bytes
---function 06h---
01h    DWORD   device parameters
bit 0: door open
1: door unlocked
2: supports raw reading in addition to cooked
3: writable
4: can play audio/video tracks
5: supports interleaving
6: reserved
7: supports prefetch requests
8: supports audio channel control
9: supports Red Book addressing in addition to HSG
10: audio is playing
---function 07h---
01h    BYTE    read mode
00h cooked
01h raw
02h    WORD    sector size in bytes
---function 08h---
01h    DWORD   volume size in sectors
---function 09h---
01h    BYTE    media change status
00h don't know
01h media unchanged
FFh media has been changed
---function 0Ah---
01h    BYTE    lowest audio track number
02h    BYTE    highest audio track number
03h    DWORD   start address of lead-out track (Red Book format)
--function 0Bh---
01h    BYTE    track number (set by caller)
02h    DWORD   starting point of track (Red Book format)
06h    BYTE    track control info
bits 15,14,12: track type (notice: bits not contiguous!)
000 two audio channels, no pre-emphasis
001 two audio channels with pre-emphasis
010 data track
100 four audio channels, no pre-emphasis
101 four audio channels with pre-emphasis
other reserved
bit 13: digital copy permitted
---function 0Ch---
01h    BYTE    CONTROL and ADR byte (as received from drive)
02h    BYTE    track number
03h    BYTE    point or index
04h    BYTE    minute  \
05h    BYTE    second   > running time within track
06h    BYTE    frame   /
07h    BYTE    zero
08h    BYTE    "AMIN" or "PMIN"     \
09h    BYTE    "ASEC" or "PSEC"      > running time on disk
0Ah    BYTE    "AFRAME" or "PFRAME" /
---function 0Dh---
01h    DWORD   starting frame address (Red Book format)
05h    DWORD   transfer address
09h    DWORD   number of sectors to read
Note:   copies 96 bytes of sub-channel info per sector into buffer
---function 0Eh---
01h    BYTE    CONTROL and ADR byte
02h  7 BYTEs   UPC/EAN code (13 BCD digits,low-order nybble of last byte is 0)
09h    BYTE    zero
0Ah    BYTE    "AFRAME"

See also: 214403

214402 - CD-ROM device driver - IOCTL INPUT