*******************************************************************************
		PART 5   SOUND		(CDDA,PCM)

			T.Itooka / T.Noda

					Ver 1.00 : 1997/12/06(Sat) 21:06:34

*******************************************************************************

@߂

PCCDDAĐ
QCPCMĐ

@̏͂ł́APC98̃TEh@\ɂĂ̎gЉĂ܂Bł
gpړIQ[ƂɂĂ܂BQ[̌ʉĐɂPCMAwiy
̍ĐCDDAƂĂ܂B{FMMIDI̎gpׂȂ̂ł傤
AƂ肠rIȒPɂłACDDAȂ炵Ĕwiyɗp邱Ƃɂ܂B


*******************************************************************************
			PART 5 (1) CDDA (MSCDEX gp)

				T.Noda

					Ver 1.00 : 1997/12/06(Sat) 21:07:56
*******************************************************************************


@CDDAĐ

@CDDAƂ͊ȒPɌCDROM̃TEhgbÑf[^łBCDv[
ŕĂ鉹̃f[^łBŋ߂PC98łCDROMhCu͔rIL
Ǝv̂ŁAgƂ͂قǖł͂ȂƂ܂B
@̍Đ𒼐ڍsƂ͂ƂĂȂ̂ŁAʂ̓foCXhCog
p܂B̃foCXhCo܂Qi\ɂȂĂ܂B
@PiڂCDROMhCű@ŗLCDROMhCołB̏ڍׂɂĂ
mKv͂ȂƎv܂Bɗp̂͂Qiڂ̃hCołB
@ꂪMSCDEXƌĂ΂hCołB̃hCo@ŗL̐ʉ
Bɗp₷Ă̂łB

@MSCDEX̗p

@āȀ̖ړICDDA̍Đł̂ŁAMSCDEX̋@\̈𗘗p
ƂɂȂ܂B̂߂MSCDEXɂđ̒m͕słB̉i
܂傤B
@MSCDEX̃t@NVRg[DOS̃t@NVR[ɂׂāAp
PbgPʂŏ󂯓n̂ŁAGɂȂ̂ŒӂKvłB
@ȂAgpMSCDEX̃o[W2.1ȏł邱ƂOɂĂ܂B

===============================================================================
@MSCDEX̃t@NVꗗ
===============================================================================

@ׂ̑OɁAt@NVꗗ܂Bȉ̐͂̃t@NV
̎gp̐ƂȂ܂B

		OOg	CDROMhCu𓾂
	荞	INT	2Fh
			AH	15h
			AL	00h			;@\R[hO
			BX	0000h
	o		BX	CDROMhCu̐
				BX = 0000h	:MSCDEXCXg[
						Ȃ
			CX	ŏ̃hCuԍ
				{ 0 = A,1 = B ,,,,,,,		}
			MSCDEX̏풓mFƎgpCDROMhCuԍ擾
			Bȉ̃t@NVR[CX̒lKvɂȂ܂
			̂łۑKv܂Bnh݂Ȃ
			łB

		OPg	hCuXg𓾂
	荞	INT	2Fh
			AH	15h
			AL	01h			;@\R[hP
			ES:BX	obt@AhX
	o		ES:BX	GgAhXꗗ
				GgAhXꗗgp
					-------------------------
			1hCu	BYTE	| hCuԍ
					DBYTE	| hCowb_AhX
					--------------------------------
					:
					:
					
			PhCuToCg̏񂪍őAZ26*5= 130
			oCgKvɂȂB

			MSCDEX Ver 2.0ȑÕo[Wł͂̃t@NV
			pāAfoCXhCõGgAhX𓾂āAFAR
			CALL sȂKv܂A݂ł͕sւł̂
			gȂł傤B

		Obg	MSCDEX o[W擾
	荞	INT	2Fh
			AH	15h
			AL	0Ch			;@\R[hb
			BX	0000h
	o		BX	o[W
				0000h = version 1.0
				0200h = version 2.0
				020ah = version 2.1
			MSCDEX ̃o[W擾܂B

		POg	MSCDEX hCoNGXg
	荞	INT	2Fh
			AH	15h
			AL	10h			;@\R[hPO
			CX	hCuԍ
			ES:BX	NGXgwb_AhX
	o		Ȃ
			MSCDEX Ver 2.1ȍ~̂ݎgp\B
			CDROMhCo𒼐ڌĂяo܂B
			NGXgwb_ɕKvȏŁÃt@N
			VR[ɓnāAs܂BꂪMSCDEX̃t@
			NVł̃CƂȂ܂B

@IOCTLNGXgwb_̍\

@{IɁÂقڑSĂ͂IOCTL NGXgpPbgčs܂B
@̍\͈ȉ̂ƂɂȂĂ܂B͂b̍\̂gďƗǂ
傤B܂炳ɁA|C^AŃR}hNGXgpPbgȂ
p[^̎󂯓ns܂B

	IOCTL NGXgpPbg

	SIZE	|			|Ӗ
	----------------------------------------------
	BYTE	|IOCTL_PLength		|NGXgwb_̃TCY
	BYTE	|IOCTL_Unit		|0Œ
	BYTE	|IOCTL_RequestCommand	|NGXgR}hԍ
	WORD	|IOCTL_Status		|Xe[^XԂ
	BYTE[8]	|IOCTL_Reserve[8]	|U[ü

		IOCTL_Status	̍\ƈӖ
		
		 DF DE DD DC DB DA D9 D8 | D7 D6 D5 D4 D3 D2 D1 D0
		---------------------------------------------------
		  {  Reserve   }     {     Error Code      }
		                  Done Bit
		Error Bit          Busy Bit

		Error Bit : R}hŃG[ƃZbg(1ɂȂ)
		Busy  Bit : Audio Play Mode ̂ƂZbg
		Done  Bit : IɃZbg

		Error Code ꗗ
		------------------------------------------------
		0	CgveNgᔽ
		1	UNITԍȂ
		2	foCXfCԂłȂ
		3	R}hȂ
		4	CRCG[
		5	hCuNGXgwb_̒s
		6	SEEKG[
		7	fBAȂ
		8	ZN^Ȃ
		9	Printer out of paper  ??????
		A	ݎs
		B	ǂݍݎs
		C	ʃG[
		D	Reserve
		E	Reserve
		F	fBXN

		 RequestCommandꗗ
		------------------------------------------------
		 0	
		 1	fBA`FbN	(Block Device)
		 2	BPB		(Block Device)
		 3	IOCTL INPUT
		 4	ǂݍ
		 5	NONDESTRUCTIVE INPUT NO WAIT
		 6	INPUT STATUS
		 7	INPUT FLUSH
		 8	
		 9	OUTPUT With VERIFY
		 A	OUTPUT STATUS
		 B	OUTPUT FLASH
		 C	IOCTL OUTPUT
		 D	DEVICE OPEN
		 E	DEVICE CLOSE
		 F	REMOVABLE MEDIA(Block Device)
		10	OUTPUT UNTIL BUSY
		80	READ LONG
		81	Reserve
		82	READ LONG PREFETCH
		83	SEEK
		84	PLAY Audio
		85	STOP Audio
		86	WRITE LONG
		87	WRITE LONG VERIFY
		88	RESUME Audio

@ȏ̂悤ɁÃR}h݂܂A̒Ŏĝ́A

	3	IOCTL INPUT
	C	IOCTL OUTPUT
	80	READ LONG
	83	SEEK
	84	Audio Play
	85	Audio Stop
	88	RESUME Audio

@炢̂łB̃R}h̏ڂȉɑĂ܂傤B

 0x03 IOCTL INPUT

@̃R}h͔ɏdvłB̃R}hgėlXȏǂ݂Ƃ邱Ƃ
ł܂B̃R}h͂̉ɑ̃R}h\Ă܂B
@̃R}hɏЉ܂傤B

	 IOCTL INPUT R}hꗗ
	-----------------------------------------------------
	0	Return Adress of Device Header
	1	Location of Head
	2	Reserve
	3	Error Statistics
	4	Audio Channel Info
	5	Read Drive Byte
	6	Device Status
	7	Return Sector Size
	8	Return Volume Size
	9	Media Changed
	A	Audio Disk Info
	B	Audio Track Info
	C	Audio Q-Channel Info
	D	Audio Sub-Channel Info
	E	UPC Code
	F	Audio Status Info

	10FF	Reserved

̃R}hsɂ͈ȉ̍\̃pPbggp܂

	 R}hNGXgpPbg

	SIZE	|			|Ӗ
	----------------------------------------------
	BYTE[13]|RequestHeader		|NGXgwb_
	BYTE	|NotUseArea		|gp
	WORD	|IOCTLParameterOffset	|IOCTLp[^f[^OFFSET
	WORD	|IOCTLParameterSegment	|IOCTLp[^f[^SEGMENT
	WORD	|IOCTLParameterNum	|IOCTLp[^oCg
	WORD	|IOCTLStartLocation	|gp
	DWORD	|IOCTLVolumeIDPointer	|gp

̃pPbgɂꂼ̃R}hԍw肵AIOCTL̃p[^̃obt@
AhXwAp[^̃oCgw肵ăt@NVR[MSCDEX h
CoNGXgs邱ƂŁA̋@\gƂł܂B
NGXgwb_̐̕ݒȂĂ͂܂񂪁B
@ł͂悢悻R}ĥPÂɂčׂĂ܂傤B

 IOCTL INPUT R}hڍ

		O	Return Adress of Device Header
			foCXhCo擪AhX擾
	IOCTL INPUT COMANND ԍ	0
	p[^ubN
		BYTE	IOCTL COAMMD ԍ
		DWORD	foCXhCo擪AhX
			IOCTL COAMMD ԍ = 0
	o		foCXhCo擪AhX
			foCXhCo̐擪AhXԂ܂

		P	Location of Head
			ǂݎwbh݈ʒu擾
	IOCTL INPUT COMANND ԍ	1
	p[^ubN
		BYTE	IOCTL COAMMD ԍ
		BYTE	AhbVO[h
				{ 0 = HSG      AhX }
				{ 1 = Red Book AhX }
		DWORD	ǂݎwbhʒu
			IOCTL COAMMD ԍ = 1
			AhbVO[h
	o		ǂݎwbhʒu
			ǂݎwbh݈ʒuԂ܂BAhX`Q
			邱ƂɒӂĂB

		R	Error Statistics
			G[擾
	IOCTL INPUT COMANND ԍ	3
	p[^ubN
			
			IOCTL COAMMD ԍ = 3
			
	o		
			

		S	Audio Channel Info
			AUDIO `l󋵎擾
	IOCTL INPUT COMANND ԍ	4
	p[^ubN
		BYTE	IOCTL COAMMD ԍ
		BYTE	.............
		BYTE	.............
			IOCTL COAMMD ԍ = 4
	o		
			

		T	Read Drive Byte
			hCuXe[^X擾
	IOCTL INPUT COMANND ԍ	5
	p[^ubN
			
			IOCTL COAMMD ԍ = 5
			
	o		
			

		U	Device Status
			foCX󋵂Ԃ܂
	IOCTL INPUT COMANND ԍ	6
	p[^ubN
		BYTE	IOCTL COAMMD ԍ
		DWORD	foCXXe[^X
			IOCTL COAMMD ԍ = 6
	o		foCXXe[^X
			foCX̏ԂƃT|[g̏Ԃrbg}bve[u
			ŕԂ܂B
		
		@foCXXe[^Xrbg}bve[u

		Bit	| Ӗ
		-------------------------------------------------
		0	|Door Open Close	{0:Close ,1:Open}
		1	|Door Lock		{0:Locked , 1:Unlocked}
		2	|Read Mode		
			|	{ Read Mode = 0 :Only Cooked Mode}
			|	{ Read Mode = 1 :Cooked Mode & Raw Mode}
		3	|Read Write Flag
			|	{ Flag = 0 : Read Only}
			|	{ Flag = 1 : Writable }
		4	|Audio Mode Flag
			|	{Audio Mode Flag = 0 : None Play Audio or Video}			|	{Audio Mode Flag = 1 : Play Audio or Video}
		5	|Interleave Flag
			|	{Interleave Flag = 0 : None Interleave}
			|	{Interleave Flag = 1 : Surport Interleave}
		6	|Reserve
		7	|Rrefech Mode Flag
			|	{Rrefech Mode Flag = 0:No Rrefech}
			|	{Rrefech Mode Flag = 1:Support Rrefech}
		8	|No Audio Manupulation
		9	|Adressing Mode Flag
			|	{Flag = 0 : Only HSG Adressing }
			|	{Flag = 1 : HSG & Red Book Adressing }
		A	|Reserve
		B	|Disk Flag
			|	{Flag = 0 : Disk is Present}
			|	{Flag = 1 : No Disk is Present}
		C	|Sub Channel Support Flag
			|	{Flag = 0 : Not Support R/W Sub Channels}
			|	{Flag = 1 : Support R/W Sub Channels}
		D1F |Reserved

		V	Return Sector Size
			ZN^TCYԂ܂
	IOCTL INPUT COMANND ԍ	7
	p[^ubN
		BYTE	IOCTL COAMMD ԍ
		BYTE	AhX[h
		WORD	ZN^TCY
			IOCTL COAMMD ԍ = 7
			AhX[h
				{ 0 : Cooked Mode}
				{ 1 : Raw Mode}
	o		ZN^TCY
			ZN^TCYԂ܂B

		W	Return Volume Size
			{[TCY擾
	IOCTL INPUT COMANND ԍ	8
	p[^ubN
		BYTE	IOCTL COAMMD ԍ
		DWORD	{[TCY
			IOCTL COAMMD ԍ = 8
	o		{[TCY
			݃ZbgĂ郁fBÃ{[TCYԂ
			

		X	Media Changed
			fBA󋵎擾
	IOCTL INPUT COMANND ԍ	9
	p[^ubN
		BYTE	IOCTL COAMMD ԍ
		BYTE	fBA
			IOCTL COAMMD ԍ = 9
	o		fBA
			{ 0x00 : Ȃ }
			{ 0x01 : ĂȂ }
			{ 0xff : ꂽ }
			fBA󋵂܂

		`	Audio Disk Info
			݃ZbgĂCDROMTOC̋Ȑ擾
	IOCTL INPUT COMANND ԍ	A
	p[^ubN
		BYTE	IOCTL COAMMD ԍ
		BYTE	ŏgbNԍ
		BYTE	őgbNԍ
		DWORD	ŏIgbNAhX
			IOCTL COAMMD ԍ = A
	o		
			ŏgbNԍ
			őgbNԍ
			ŏIgbNAhX
			݃ZbgĂCDROMTOC̋Ȑ擾
			ŏgbNԍ͂PԂn܂܂B
			܂ŏIgbNAhX͍Ō̋Ȃ̍ŏIAhX
			Ă܂B
			̃R}hpċȐvZ܂B
			܂Ȃ̒vZ邽߂ɍŏIgbNAhXۑ
			قǂł傤B

		a	Audio Track Info
			݃ZbgĂCDROMTOC̃gbNƂ̏擾
	IOCTL INPUT COMANND ԍ	B
	p[^ubN
		BYTE	IOCTL COAMMD ԍ
		BYTE	gbNԍ
		BYTE	JnAhX
		BYTE	Rg[
			IOCTL COAMMD ԍ = B
			gbNԍ
	o		
			JnAhX
				(Red Book Adress ŕԂ܂)
				(Flame : Sec :Min : 00h )̏ɕł܂B
			Rg[

			rbg|Ӗ
			----------------------------------------------
			00x00000  |2audio channels without pre-emphsis
			00x10000  |2audio channels with pre-emphsis
			10x00000  |4audio channels without pre-emphsis
			10x10000  |4audio channels with pre-emphsis
			01x00000  |Data Track
			01x10000  |Reserve
			11x00000  |Reserve
			xx0x0000  |digital copy prohibited
			xx1x0000  |digital copy permitted

			݃ZbgĂCDROMTOC̃gbNƂ̏
			܂B
			@JnAhXRed Book AdressŕԂĂ̂Œӂ
			KvłB

		b	Audio Q-Channel Info
			݂̃wbḧʒu擾
	IOCTL INPUT COMANND ԍ	C
	p[^ubN
		BYTE	IOCTL COAMMD ԍ
		BYTE	Rg[
		BYTE	gbNԍ
		BYTE	t[Yԍ
		BYTE	݂̃gbN擪	
		BYTE	݂̃gbN擪	b
		BYTE	݂̃gbN擪	t[
		BYTE	00h
		BYTE	݂̃fBXN擪	
		BYTE	݂̃fBXN擪	b
		BYTE	݂̃fBXN擪	t[

			IOCTL COAMMD ԍ = C
	o		
			Rg[
			gbNԍ
			t[Yԍ
			݂̃gbN擪	
			݂̃gbN擪	b
			݂̃gbN擪	t[
			݂̃fBXN擪	
			݂̃fBXN擪	b
			݂̃fBXN擪	t[

			݂̃wbhʒuԂ܂BpăgbN̉t
			ԂfBXN擪̎Ԃ擾邱Ƃł܂B
			gbNԍAt[YԍBCDl??????????

	D	Audio Sub-Channel Info
	E	UPC Code
	F	Audio Status Info

 0x80 Read Long (CDf[^gbN[h)

@̃R}hCD̃f[^gbNZN^Pʂœǂݍނ̂łB
@ڂ͂܂KvȂł傤Bȉ̃pPbggpāAs܂B

	 R}hNGXgpPbg 

	SIZE	|			|Ӗ
	----------------------------------------------
	BYTE[13]|RequestHeader		|NGXgwb_
	BYTE	|Adressing_Mode		|gpAhX` 
		|			|  0x00 = HSG Adress
		|			|  0x01 = Red Book Adress
	WORD	|BufferOffset		|ǂݍ݃f[^]OFFSET
	WORD	|BufferSegment		|ǂݍ݃f[^]SEGMENT
	WORD	|ReadSectorNum		|ǂݍ݃ZN^
	DWORD	|ReadStartAdress	|ǂݍ݊JnAhX
	BYTE	|Read_Mode		|ǂݍ݌`
		|			|  0x00 = Cooked Mode(2048 Byte)
		|			|  0x01 = Raw    Mode(2352 Byte)
	BYTE	|Inter_Size		|C^[[uTCY
	BYTE	|Inter_Skip		|C^[[uXLbv

 0x83 Seek

@̃R}hCD̓ǂݍ݁i݁jwbḧʒuړ̂łB
@ڂ͂܂KvȂł傤Bȉ̃pPbggpāAs܂B

	 R}hNGXgpPbg 

	SIZE	|			|Ӗ
	----------------------------------------------
	BYTE[13]|RequestHeader		|NGXgwb_
	BYTE	|Adressing_Mode		|gpAhX` 
		|			|  0x00 = HSG Adress
		|			|  0x01 = Red Book Adress
	WORD	|BufferOffset	(gp)|ǂݍ݃f[^]OFFSET
	WORD	|BufferSegment	(gp)|ǂݍ݃f[^]SEGMENT
	WORD	|Reserve		|
	DWORD	|ReadStartAdress	|V[NAhX

 0x84 Play

@̃R}hړỈtJnR}hłB
@ȉ̃pPbggpāAs܂BR}h̕A̐ݒp
[^擾Ƃ̕ςł̂ŁA̕ɁAׂ܂B
@QlɂĂB

	 R}hNGXgpPbg 

	SIZE	|			|Ӗ
	----------------------------------------------
	BYTE[13]|RequestHeader		|NGXgwb_
	BYTE	|Adressing_Mode		|gpAhX` 
		|			|  0x00 = HSG Adress
		|			|  0x01 = Red Book Adress
	DWORD	|PlayStartAdress	|tJnAhX
	DWORD	|PlaySectionAdress	|tԐ(tԐ)

 0x85 Stop Play

@̃R}h͉t~܂B
@ȉ̃pPbggpāAs܂B

	 R}hNGXgpPbg 

	SIZE	|			|Ӗ
	----------------------------------------------
	BYTE[13]|RequestHeader		|NGXgwb_

 0x88 Audio Resume

@̃R}h͉t~ꏊAtJn܂B
@ȉ̃pPbggpāAs܂B

	 R}hNGXgpPbg 

	SIZE	|			|Ӗ
	----------------------------------------------
	BYTE[13]|RequestHeader		|NGXgwb_

===============================================================================
@CDROM̃AhX`
===============================================================================

@CDROMł́AAhX`Qʂ肠܂B͂Ȃ蒍ӂׂڂłB
@́AHSGAhX`Red Book AhX`̂QʂłB

 (1) HSGAhX

  HSGAhX͐̂炠AhX\@ŁA{IɎgAhX`łB
  ͕ʂ̃AhX`ƓlɁA߂̕AIɐĂ
  łBTCY32BitłB
  
 (2) Red BookAhX

  Red BookAhX̓I[fBÏׂɂ̂ŁAԂɂȂĂ̂ł
  B͈ȉ̂悤ȃtH[}bgɂȂĂ܂B
  
  D31   D23  D15      D7  D0
  +------------------------+
  |    0|  |b  |t[|
  +------------------------+

@ȏ̂悤32Bit̑傫Ă܂AŌ1Byte͈ӖȂ܂B
@̂悤ɁAlԑ猩AhX`Ȃ̂ŁAۂ̍ƂɎgɂHSGɕϊ
ǂꍇ悤łB

@(HSGAdress - RedBookAdressϊ)

  HSGAdress =  * (75*60) +  * 75 + t[ + 150
  
  ƂȂ܂Bt[ƂPʂŏ1/75błB
  HSGAdressPiނ1/75biނƂƂłB

Œӓ_HSGAdressRedBookAdress150傫ȒlĂ邱Ƃ
ӂĂB


===============================================================================
@ۂ̐菇
===============================================================================

@āA낢Ƌ@\ЉĂ܂i܂܂܂jA낻O
ĂƎv̂ŁAۂ̎菇Љ܂傤B
@MSCDEX̃t@NV͎ɖcŁAA̍\GɂȂĂ̂ŁAP
xɗɂ͌\ςł̂ŁAiŉB

@

	1,foCXhCȍ풓mF

@܂foCXhCo𗘗pɂ͂̃hCoɏ풓Ă邩mF
ȂĂ͂܂B̏̕@͂낢날܂AȒPȕ@ɂڂĐ
܂B

@ԊȒPȕ@́AMSCDEX̃t@NVR[Ă݂鎖łB

@MSCDEX:(Int 0x2F,AX:0x1500,BX:0x0000)	s܂Biڂ͏ڍׂQlj

@ꂾŁA풓Ă邩fł܂BȒPłˁB
@ABX̒l0ȂΏ풓Ă܂B
@܂ACX̒ĺAꂩ̐ɕKvȂ̂ŁALĂKv܂B
@̓nhԍ݂ȂłB

TvvOQ


	2,MSCDEX̃o[WmF

@ꂩpAt@NVVer 2.1ȏłȂƎgȂ̂̂ŁA
o[W̊mFsKv܂B

@MSCDEX:(Int 0x2F,AX:0x150C,BX:0x0000)	s܂Biڂ͏ڍׂQlj

@BXɕԂĂlo[WłB̒l0x020aȏłΖ͂
܂B

TvvOQ


	3,fBAhCuɓĂ邩mF

@܂AmF鎖͂܂B炷ׂCDhCuɓĂƂ͌܂
B̂߂̊mF͕KvłB
@͂ɁAIOCTL INPUT R}hgƂɂȂ܂B͐v
dvȓ_łB

IOCTL INPUT R}h̎gp

	  1,IOCTL NGXgpPbg,R}hNGXgpPbg̊m

@܂́AIOCTL NGXgpPbgĂB̏ڍׂ͏QƂĂ
BɂAAR}hNGXgpPbgmۂKv
B

	  2,p[^ubN̊m

@AR}hƂɌ܂Ăp[^ubN܂B
@Media Changed@R}h̏ꍇ͈ȉ̂ƂłB

Ex) (C)
	struct {
		unsigned char Command;
		unsigned char MediaByte;
	} DataBlock;

	  3,R}hNGXgpPbg̐ݒ 

@NGXgpPbg̃p[^̐ݒs܂B
@ݒ肷ׂڂ͈ȉRłB

	1,pPbg̃TCY
	2,IOCTL_Unitԍ(0Œ)
	3,IOCTL_RequestCommandԍ (̏ꍇ3ł)

Ex) (C)
	/* pPbg̃TCY */
	CRHeaderBuffer.RequestHeader.IOCTL_PLength = 26;
	/* IOCTL_Unitԍ(0Œ) */
	CRHeaderBuffer.RequestHeader.IOCTL_Unit = 0;		/* 0Œ */
	/* IOCTL_RequestCommandԍ */
	CRHeaderBuffer.RequestHeader.IOCTL_RequestCommand = 3;

	  4,IOCTL NGXgpPbg̐ݒ 

@IOCTL NGXgpPbgɃp[^ubÑ|C^A܂B
@܂p[^̐ݒKvłB

Ex) (C)
	/* p[^̃AhXݒ */
	CRHeaderBuffer.IOCTLParameterOffset = (unsigned int)&DataBlock;
	segread(&segregs);
	CRHeaderBuffer.IOCTLParameterSegment = segregs.ds; /* Samll Model */
	/* p[^̏ */
	CRHeaderBuffer.IOCTLParameterNum = 2;

	  5,p[^ubN̐ݒ

@Ōɂ̎sR}h̃p[^̐ݒs܂B

Ex) (C)
	/* p[^e[u̐ݒ */
	DataBlock.Command = 0x09;		/* Check Media Changed */
	DataBlock.MediaByte = 0;		/* Media Byte */

	  6,MSCDEX hCoNGXgs

@ł܂ŁAݒ肵p[^R}hMSCDEXɑAR}h̎s
s܂B̓t@NVR[p܂Bi̕@܂A
Ver 2.1ȍ~͂ꂪԊȒPȕ@łj

@MSCDEX:(Int 0x2F,AX:0x1510,CX:hCuԍ,ES:BX:NGXgwb_AhX)
					s܂Biڂ͏ڍׂQlj

@̂ƂAǂ̃hCuɃR}h𑗂̂w肷Kv܂BŁA
ŏ̏풓mF̂ƂɊmۂԍg܂B


	  7,R}h̐mF

@R}hsꂽmF܂B܂p[^ubNɂ́AlԂ
܂B
@R}h̐mFɂ NGXgwb_̃Xe[^Ẍ邱ƂŊmFo
܂Bڍׂ͏QlĂB

Ex) (C)
	/* R}h̐mF */
	if((CRHeaderBuffer.RequestHeader.IOCTL_Status & 0x8000) != 0){
		return 0xff;					/* s */
	}

@p[^̐ݒ͏Ԃ͊֌W܂B\̂̃ACgɂ͒ӂ
B(ByteEłȂƂƂłȂƂɂȂ܂)

	p[^̍\

@łɁACÂĂƂ܂Ap[^̍\͑ς肭łĕ
ɂ̂ɂȂĂ܂BȒPɉLɂ̗̏ꍇ̍\L܂B

  +- IOCTL NGXgpPbg -+
  |   IOCTL_PLength            |<----pPbgŜ̒(26 Byte)
  |   IOCTL_Unit               |<----OŒ
  |   IOCTL_RequestCommand     |<----̏ꍇ0x03
  |   IOCTL_Status             |<----Xe[^XԂ
  |   IOCTL_Reserve[8]         |<----Reserve
  +----------------------------+
  | R}hNGXgpPbg |       +- p[^ubN --+
  |   NotUseArea               |       |  Command(R}hԍ)|<--IOCTL INPUT
  |   IOCTLParameterOffset }---+------>|  MediaByte            |   ̔ԍ
  |   IOCTLParameterSegment}---+------>|                       |
  |   IOCTLParameterNum        |<--+   +-----------------------+
  |   IOCTLStartLocation       |   +-----------p[^(2 Byte)
  |   IOCTLVolumeIDPointer     |              (p[^ubNŜ̒)
  +----------------------------+

@ȏ̂悤Ȋ֌WɂȂĂ܂B̓Tv̍\̐錾QlɂĂ
B

Ex)pPbg\̐錾

 /* IOCTL NGXgpPbg */
typedef struct {
	unsigned char IOCTL_PLength;	/* pPbg̃TCY */
	unsigned char IOCTL_Unit;	/* 0Œ */
	unsigned char IOCTL_RequestCommand;/* */
	unsigned int  IOCTL_Status;
	unsigned char IOCTL_Reserve[8];	/* U[ü */
} IOCTLRequestHeader;

 /* R}hNGXgpPbg */
typedef struct {
	IOCTLRequestHeader RequestHeader;	/* IOCTL NGXgpPbg */
	unsigned char NotUseArea;			/* gp̈ */
	unsigned int  IOCTLParameterOffset;	/* IOCTLp[^AhX */
	unsigned int  IOCTLParameterSegment;
	unsigned int  IOCTLParameterNum;	/* IOCTLp[^ */
	unsigned int  IOCTLStartLocation;	/* gp */
	unsigned long IOCTLVolumeIDPointer;	/* gp */
} CommandRequestHeader;

@ꂪgp@łBȉł͔͂̕΂܂BtɌ΁A̕
Η悤Ȃ̂łBƂ́AƎ𓮂݂̂łB


	4,hCu󋵊mF

@x̓hCũhA܂Ă邩A܂Ăbc͍Đo邩A
󋵂mF܂B
@mFɂIOCTL INPUT  UԂDevice Statusg܂B
@gp@̗͐ɂāAꕔ邾łB
@ŁA͏IłBƂ͎sR}h邾łA܂
̒ӎ܂̂ŁAǂĐ܂B


@CDDA̎wgbNĐ

@ꂪAڎwׂڕWłAȒPɂ͂ǂ܂BȂȂAMSCDEX
t@NV̉yĐR}h͎wgbÑAhXw肵AȂA
ĐԂ̐ݒsȂ΂ȂłB
@̂߈ɍĐƂĂȀ擾ĉHāAnȂ
΂Ȃ̂łB̎菇܂傤B

	1,ĐCD̑S̏󋵂擾

@͍Đbc̃gbNǂꂾ̂ƁAŏIAhXԍ͉Ԃ
擾邽߂ɍs܂Bœ͋ȊԌvZɎgp܂̂ŁAۑĂ
܂傤B
@IOCTL INPUT  0x0AԂAudio Disk Infog܂B

	2,ĐgbNԍ̏擾

@IOCTL INPUT  0x0BԂAudio Track Infog܂BŁAĐ
擪AhX擾邱Ƃł܂B܂ÂƂɂ̃gbNI[fBI
gbNmF邱Ƃo܂B
@ɁAt鎞Ԃ̐ݒȂĂ܂B̌vZ͏Xʓ|łB
@bc̍Ō܂ŉt̂Ȃ΁APœŏIAhXԍpāA

@tԁ@@ŏIAhXԍ@|@gbN擪AhX

@ŌvZł܂B
@AwgbNԂ݂̂̏ꍇ͈ȉ̂悤ɂ܂B

 (1)ĐgbNŏIgbNŖꍇ

@tԁ@@iĐgbN{P(܂莟̋)̐擪AhX:j@|@
@@@@@@@@@@@@@@iĐgbN̐擪AhXj

 (2)ĐgbNŏIgbN̏ꍇ

@tԁ@@ŏIAhXԍ@|@ĐgbN擪AhX

@ƂԂ܂B

	
		CDROM̃AhX`ɂ͂Qʂ̕\@܂B
		(CDROM̃AhX`ɏڍׂL)

	3,ĐR}hs

@悤₭AĐɕKvȃp[^̂ŁAĐR}hsł܂B
ĐR}hIOCTL INPUT ł͂܂񂩂璍ӂĂB
@̃p[^[ 0x84 Play ]̃pPbgɓnāAs܂B
@pPbg̐ݒԈႦȂ悤ɂĂB
@ȂAĐR}hp̃pPbg邱ƂɒӂĂBIOCTL INPUTp
pPbggƂ͏o܂񂩂B

@ł悤₭AȂȂ͂łB낢Ɩʓ|L̂ŁACu
xƍقǂł傤B
@Tv\[X͂łɃCǔ`ԂĂ̂ŁAgĂ炦
łBłɂ͖ڂʂقǂƎv܂B


@ȏオAMSCDEXpCDDA̍Đ̕@łBMSCDEX͑ϋȋ@\߂Ă
̂ŁA܂܂Љt@NV̂łAĐɂ͊֌WȂA܂
قǁAdvȂ̂̂ł̒xŏI炵Ă炢܂B



@T|[g@

@̃eLXĝႤƂ܂AЋĂB
@܂A͂̃X^CA{̃~XȂǂ܂AȂĂB
@tɁA̋LɍڂĂȂƂɕtĂ̎܂AЋĂ
Bɗǂ̂ڎw܂̂ŁA肢܂B


@쌠E]ړɂā@

@쌠

@@̃eLXgɊւvOEhLg̒쌠T.NODAL܂B

@]ځEĔzz

@@]ځEĔzzɂĂ͓ɐ܂B񂶂΂܂ĂB
@@ȂAˑR͂TvXV邱Ƃ̂ŁÂƂ͓悤
@@΂܂ĂB

@@]ڂ̍ۂɂ̓A[JCut@C̓e͕ςȂ悤ɂĂB
@@ISH, UU Ȃǂ̔zz`͐܂B

@@AGȂǂɌfڂ̍ۂɂ͕K҂܂ŘA肢v܂B
@@iG̕t^Et[\tgWւ̎ڂ͑劽}ł̂ŁAǂX肢
     ܂Bj

@Ɛ

@@̃vO̎gpɂ艽̑QĂA҂͐ӔC𕉂܂B

@Ql@

@ׁ@1993 12 fCDROM			S.Unozawa

@Microsoft MSCDEX Ver 2.1 t@NVhLg
							Microsoft

