*******************************************************************************
			PART 5 (2) PCMĐ (86)

				T.Itooka

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

@PCMĐ

@PCMƂ86^TEh{[hEWindowsSoundSystem(WSS)̏ʌ݊{[hɓڂ
ĂPCMpĖ炷f[^łBŋߗǂł낤WAVEt@C
PCM̈łBł86{[hPCM̈ɂĒǋyĂB
ȂAɋLڂĂĹẤuׁv̋LQlɁA
قƂǂ̂܂܋LڂĂB̋LQlɂƗǂł傤B

===============================================================================
@PCM(86{[h)̋@\ꗗ
===============================================================================
܂PCM̋@\ɂĐ܂B

	PCM[g(WiK)
		44.10kHz
		33.08kHz
		22.05kHz
		16.54kHz
		11.03kHz
		 8.27kHz
		 5.52kHz
		 4.13kHz

	PCM`l
		XeI(ƉEɕʁX̃f[^o)
		Left	(݂̂ɏo)
		Right	(Ê݂ɏo)
		ḿAXeIɐݒ肵ƉE
		f[^o͂邱ƂŎ

	ʎqrbg
		Wrbg
		16rbg

	PCMtH[}bg
		jAPCM̂

	f[^]
		CPU]

	̑
		FIFO32koCg

===============================================================================
@I/O|[gꗗ
===============================================================================
PCMgp邽߂ɕKvI/O|[g łB

 A460h	TEh@\ʗpIDtB[h

		 D7  D6  D5  D4  D3  D2  D1  D0
		
		    ʗpID     gp }XN

	D7`4	TEh@\ʗpID
	ذނ̂	0000:PC-98DO+
			0001:PC-98GS
			0010:PC-9801-73			(I/O|[g0188h)
			0011:PC-9801-73/76		(I/O|[g0288h)
			0100:PC-9821ذޥPC-9801-86	(I/O|[g0188h)
			0101:PC-9801-86			(I/O|[g0288h)
			0110:PC-9821Np
			0111:PC-9821Xذ
			1000:PC-9821Canbeذ
			1111:YM2608܂FMȂ

	D1`0	OPNA}XN
	ذ/ײ	00:OPN݊[h (YM2203)
			01:OPNAg[h(YM2608̊ggp)
			10:}XN	 (YM2608gpȂ)
			11:}XN	 (YM2608gpȂ)

 A466h	FIFOXe[^X(ذގ)

		 D7  D6  D5  D4  D3  D2  D1  D0
			    
			   gpH(0000)

	D7	FIFOt
	ذގ		0:FIFO͖t
			1:FIFO͖tł͂Ȃ

	D6	FIFOGveB
	ذގ		0:FIFO͋ł͂Ȃ
			1:FIFO͋

	D5	FIFOI[o[t[
	ذގ		0:FIFO̓I[o[t[ĂȂ
			1:FIFO̓I[o[t[Ă

	D0	L/RNbN
	ذގ		TvO[gɓĔ]JԂ

 A466h	dq{[(ײĎ)

		 D7  D6  D5  D4  D3  D2  D1  D0
		  
		 حёI    Abel[gl
		 	  gpH 

	D7`5	dq{[I
	ײĎ		000:OPNAڏo̓x
			001:OPNAԐڏo̓x
			010:CD-DA(PC-98Multî)ELINEڏo̓x
			011:CD-DA(PC-98Multî)ELINEԐڏo̓x
			100:CD-DAڏo̓x(PC-98GŜ)
			101:PCMڏo̓x(PC-9821,86{[ĥ)

	D3`0	Abel[gl
	ײĎ		0000`1111
			(0000:ʍő`1111:ʍŏ)

 A468h	FIFO

		 D7  D6  D5  D4  D3  D2  D1  D0
				    
				     PCM[g

	D7	FIFOtO
	ذ/ײ	0:FIFO~
			1:FIFO쒆

	D6	FIFOtO
	ذ/ײ	0:CPU FIFO(PCMĐ)
			1:FIFOCPU (PCM^)

	D5	FIFO荞݋tO
	ذ/ײ	0:FIFO荞݋֎~
			1:FIFO荞݋

	D4	FIFO荞ݗvtO
	ذގ		0:FIFO荞ݗvȂ
			1:FIFO荞ݗv

	D3	FIFOtO
	ذ/ײ	0:FIFOݒ肵ĂȂ
			1:FIFOݒ肵Ă

	D2`0	PCM[g
	ذ/ײ	000:44.10kHz
			001:33.08kHz
			010:22.05kHz
			011:16.54kHz
			100:11.03kHz
			101: 8.27kHz
			110: 5.52kHz
			111: 4.13kHz

 A46Ah	ʎqrbgEp|bg
		A468hD7D5Ƃ0̂Ƃ̂ݐݒ\
		(FIFO~EFIFO荞݋֎~)

		 D7  D6  D5  D4  D3  D2  D1  D0
		 	    
		s	 ߯     PCM[hH
				     010:ɌŒ

	D6	PCMʎqrbg
	ذ/ײ	0:16rbgPCM
			1:WrbgPCM

	D5`4	PCMp|bg
	ذ/ײ	00:PCM͏o͂Ȃ
			01:Right݂̂ɏo
			10:Left݂̂ɏo
			11:LightRightɏo(XeI)

	D2`0	PCM[h
	ذ/ײ	010Œ
			ȊOł͐퓮삵Ȃ

 A46Ah	FIFO荞݃^C~ORg[
		A468hD51̂Ƃ̂ݐݒ\
		(FIFO荞݋)

		 D7  D6  D5  D4  D3  D2  D1  D0
		
		  FIFO̊荞݃^C~Oݒ

	D7`0	FIFO̊荞݃^C~Oݒ
	ײĂ̂		128oCgPʂŐݒ
			FIFÕf[^
			(xxxxh+1)~128oCgɂȂƂ
			荞݂

 A46Ch	FIFOf[^o

		 D7  D6  D5  D4  D3  D2  D1  D0
		
		   FIFOƂ̃f[^o

	D7`0		FIFOƂ̃f[^o
	ذ/ײ	FIFÕTCY32koCgEWrbg]ɒ
			XeȈꍇLeftRight̏
			16rbg̏ꍇ͏ʁEʂ̏ɓ]
			Ⴆ΁A16rbgXeĨf[^́A
			Left	
				
			Right	
				
			̏ɓ]

 A66Eh	~[gRg[

		 D7  D6  D5  D4  D3  D2  D1  D0
		
		   gpH(ɂP)

	D0	o̓~[g
	ذ/ײ	0:TEho͂~[gȂ
			1:TEho͂~[g

===============================================================================
@荞ݔԍ擾(INT ?)
===============================================================================
@{[h̎gp銄荞ݔԍ̎擾@͎̂悤ɂ܂B

	1.̎gpI/O|[g(0188h or 0288h)0EhóB
	p͂`wB

	2.I/O|[g0188h̎018Ah(0288h̎028Ah)ǂݍނƎ̂悤
	ȃf[^擾łA荞ݔԍłB

	łɃWCXeBbN͂ǂݍ߂邪AWCXeBbN
	ĂȂƖłB

 018Ah(028Ah)	YM2608WX^0Eh:p͂`

		 D7  D6  D5  D4  D3  D2  D1  D0
		
		 ð    WCXeBbN

	D7`6	荞݃Xe[^X
	ذ		00:INT 0
			01:INT 1
			10:INT 4
			11:INT 5

	D5`0	WCXeBbN
	ذ		0ŉĂ

	D5		TRIG2
	D4		TRIG1
	D3		Right
	D2		Left
	D1		Down
	D0		Up

 ܂	WCXeBbN̏@

@OPN(OPNA)̓AhX07h(I/O|[g0188h or 0288h07ho)̓e018Ah
or 028Ahǂݍ݁AD71ɁAD60ɂ܂B

@ɃWCXeBbNPgpꍇ8FhAWCXeBbNQgp
0CFhOPN(OPNA)̓AhX0Fh(I/O|[g0188h or 0288h0Fho)ɏo
ƃWCXeBbNgp\ɂȂ܂B86{[h̏ꍇ́AWCXeBbN
Q͂܂B

TvvOQ

	018Ah(028Ah)	YM2608WX^07h:~LT[I/ORg[

		 D7  D6  D5  D4  D3  D2  D1  D0
		
		I/O߰  mCYo  g[o

	D7	I/O|[ga̓o(0œ)
	D6	I/O|[g`̓o(0œ)
	D5	bChannel̃mCYo
	D4	aChannel̃mCYo
	D3	`Channel̃mCYo
	D2	bChannel̃g[o
	D1	aChannel̃g[o
	D0	`Channel̃g[o

	018Ah(028Ah)	YM2608WX^0Fh:I/O|[gao

		 D7  D6  D5  D4  D3  D2  D1  D0
			
			 ėpo̓|[g̏o

	D7	o͕s(1̎D3`01ɂ)
	D6	̓ZNg(0:JoyStick1 1:JoyStick2)
	D5`4	ėpo̓|[g̏o(JoyStickgp0)
	D3`0	ėpo̓|[g̏o

@TvvOꗗ

@HDPCM1HDPCMsɂ̓TvPCMf[^KvłB
PCMf[^̃tH[}bǵA8bitƱ 16.54kHz XeĨf[^ŁAt@C
SAMPLE.PC8SAMPLE2.PC8̂QpӂĂB

	HDPCM1.ASM	荞݂gpȂPCMĐTv
			SAMPLE.PC8SAMPLE2.PC8̓KvŁAt@CTCY
			32kȏゾ擪32kĐ܂B

	HDPCM2.ASM	荞݂gpPCMĐTv
			SAMPLE.PC8KvŁAt@CTCY32kȏ̂ōĐ
			Ă݂ĂB16kȉ16k͖̕f[^
			Ȃ܂B

	JOY.ASM		WCXeBbNTv
			܂łBWCXeBbNĂl͎Ă݂
			B܂Ȃ̂łB

===============================================================================
@ۂ̐菇(荞݂gpȂ)
===============================================================================

@Q[̌ʉpPCMhCo̍쐬܂łɒǂĐƎv܂B
ł͊荞݂gpɁAƂ肠oĂ݂܂傤B
@{IɂPCM̐ݒ肾łB
FIFO32koCgȂ̂32k炷Ɛ擪Ƀ[vĂ܂܂B܂
32koCgȏ]ƎXFIFO̓eXVĂ܂AɍĐ
܂B̕@ŐɍĐ悤ƎvAĐɐVf[^]
邵܂񂪁AǂĐĂ邩킩Ȃߕs\łB
FIFOGveBFIFOZbgɂ܂f[^o͂ĂȂƂƂŁAĐ
ĂȂf[^ȂƂӖł͂Ȃ̂ł͗płȂB

@

	1.{[h̊mF

@܂͉{[hmFPCMgpł邩ǂ`FbN܂B
TEh@\ʃtB[h邾łB
@I/O|[gA468hǂݍ ޯ7`4 0001`0101ł86^
PCMgp\łB

	2.̐ݒ

@dꂽ86{[h́AYM2608YM2203ŎgpɂȂĂ̂ŁA
YM2608̊ggpɂĂȂƁAPCM͎gpł܂B
@PCM[gEʎqrbgEp|bgE{[̐ݒ܂B

	3.FIFOX^[g

@PCMJn܂B

@C

	4.f[^̓]

@PCMf[^]܂B炩߃t@CǂݍłĂB

@I

	5.̐ݒ̕A

@Ȃ̂悤ȏ邩ƂƁAꑼPCMhCo풓Ă
ꍇɁAPCM̐ݒ肪ύXĂƐɓ삵ȂȂÄvO
ƂƂɂȂ܂B̂͌₷̂ŏo邾NOƓ
ݒɖ߂قǂł傤B

@܂

@ĉł傤HȂPCM̐ݒmFĂB

===============================================================================
@ۂ̐菇(荞݂gp)
===============================================================================
@Ɋ荞݂𗘗pꍇ܂AȂ荞݂gpKv
̂ł傤H
łˁAĐĂȂf[^(FIFÕf[^)oCgɂȂ
Ɗ荞݂AŃf[^]Ă32kȏ̃f[^ɍĐ
ł܂B
̕@Ɋ荞݂̐ݒ肪邾łAɂȂĂ܂܂B
ɔc炢ło邾Ղ܂B

@

	1.{[h̊mF

@荞݂gpȂꍇƓlłB

	2.̐ݒ

@PCM[g̐ݒ܂B

	3.荞݂̐ݒ

@荞ݐAhXE荞݂̃}XN̐ݒ܂B

23tł\܂B

	4.FIFOX^[g

@PCMJn܂BȌ͊荞݂A荞ݐ
AhXɔт܂B

@C

	5.t@C̓ǂݍ

@16kĐIĂ(荞݂)A16koCgt@C
PCMf[^ǂݍ݂܂B荞ݒɓǂݍłǂłAĊ荞
Ƃ͕ʂɂĂ݂܂B
@ɃL[͂ĉL[ĂI܂B

@I

	6.ݒ蕜A

@̐ݒE荞݂̐ݒɖ߂܂B

@荞݃[`

	1.WX^̕ۑ

@SẴWX^ɖ߂ȂƁA荞݂IƂɃnOAbv
܂߁ASẴWX^ۑĂ܂B(gpĂȂWX^͕sv)

	2.FIFO荞ݗv`FbN

@FIFO̊荞݂OPNÃ^C}荞݂Ƙ_ao͂ɂȂĂ̂ŁAOPNÃ^C
}荞݂Ẵ[`ɔł܂̂ŁAFIFO荞݂OPNA荞
݂mFĂ܂B

	3.FIFOɃf[^o

@16koCg̃f[^FIFOɓ]Ă܂B

	4.荞݃tÕZbg

@K荞݃tOZbgĂB

	5.荞݃Rg[EOI𑗏o

@荞݂̏I荞݃Rg[ɒm点ȂƁÅ荞݂Ȃ
̂ŁAEOI𑗏o܂B

	6.WX^̕A

@SẴWX^𕜋A܂B

@܂

@܂ł傤H܂sȂꍇ͂Ɗ荞݃[`ɔ
ł邩ǂmFĂBTvvOQlɂĂB
܂ŏoPCMvC[͖ڑOłBIvVȂǂŐݒς悤
ɂΊłBƂ͂ɂʂ邩łˁB
Q[ɎgƂȂƔɕsւłBn[hfBXNǂݍ݂Ȃł
Q[ɂȂ܂BɃQ[ł́Aʉɖ邱Ƃ܂B
łłƔ􂵉߂܂AƎ(MEGUM)̍쐬풓PCM
hCouG-PCMvɂĊȒPɗꂾ܂B

===============================================================================
@G-PCM̗
===============================================================================

@

@PCM̐䕔͂܂łƈꏏłB풓邽߂̏ƁAEMS
p̏łB

	1.{[h̊mF

	2.G-PCM̏풓`FbN

@풓Ă풓ďI܂B
풓`FbN̕@́AINT 0F4htbNĂ̂ł̊荞݃xN^AhX
擾ÃAhX{SoCĝƂɏ풓`FbNpL[[huGPCMv
풓Ă܂B

	3.EMShCo̊mF

@EMSgpłȂꍇ͂̃hCo͎gpł܂B

	4.EMS̊mہEݒ

@EMS̐@QƁB

	5.荞݂̐ݒ

	6.PCM̏

	7.̈̊J

@ȂƏ풓ĂSoCg炢ʂȃc܂B
풓Ă鎞Ƀ}bvƂ݂ĔȂ̂ŁB

	8.풓I

@DOSt@NVR[łB

@FIFO荞ݎ

@قƂǈꏏłBႤ̂PCM`lo^ĂPCMf[
^{[vZEgvZEdˍ킹()E[v`FbN
邾łB

	1.SX^bNۑ

	2.FIFO荞ݗv`FbN

	3.PCMf[^̍쐬

@炷f[^̃{[EgvZďdˍ킹̂łAӂ̂
PCMf[^͕tŁÅ|Zł̓I[o[t[ɂȂĂ
܂܂B玄͏ꍇAI[o[t[͍ő͍ŏɂ
܂B

	4.FIFOɃf[^o

@3ō쐬128oCg̃f[^FIFOɓ]Ă܂B

	5.荞݃tÕZbg

	6.荞݃Rg[EOI𑗏o

	7.WX^̕A

@INT 0F4h 荞(\tgEFA荞)

	1.SX^bNۑ

	2.EMSy[W}bvۑ

@X^bN̕ۑƓEMS}bvύX̂Ŋ荞ݏIEMS
gpĂvOƁAnOAbv܂B

	3.@\ԍɂĂꂼ̃[`ɃWv

@̌ɏЉ@\ꗗQƂĂB

	4.EMSy[W}bvA

@X^bN̕AƓłB

	5.X^bN̕A

@܂

@Ă݂PCMf[^̊ǗEPCMf[^vZʓ|ȒxŁAPCM̍Đ
͉ς܂B܂hCo͍쐬łȂĂǂłBނ늄荞݂
gpPCMĐo΁APCMɊւĂ͊łBhCo̓Ƃ́A
荞݁Egp郁ǗłˁH

===============================================================================
@G-PCM(86p)̋@\ꗗ
===============================================================================
@PCMhCoG-PCM̋@\ꗗłB
\ȒPɐłāAWrbgPCMpƌƂ芄ƌyA荞ݎ
ŏȂ̂Ŕ̂PCMhCołB
̃hCo𗘗pĖʔ̂쐬ĂB

AH@@\ԍ
	̑Kvȃp[^
INT	0F4h

 AH=00h		uoblԍ ALLNAv

	SẴp[^[܂B
	sȂƑÕf[^cĂ邩܂B

 AH=01h		uoblԍf[^ǉo^v

	AL		oblԍ
	ES:[SI]		oblf[^̐擪AhX
	CX		oblf[^̃oCg
			128oCgƁir[ȏꍇ͐؂グj
			(max 32768 byte)

	폜łȂ̂ŐTdɒǉĂB
	xɒǉł̂ 32768 Byte ܂łŁAႦ
	oblԍ 1Ԃ 1024 Byte ̃f[^o^A
	     1Ԃ 10240 Byte ̃f[^ǉ邱Ƃo܂B

	Œӂ邱Ƃ́AAŒǉȂƂ܂B
	oblԍ 1ԁE 2Ԃ̏ɓo^Ă 1Ԃɒǉ͏o܂B
	܂B

 AH=02h		moblԍEL[In

	AL	oblԍ

	o^oblf[^̔Jn܂B
	16`l̎́A܂B

 AH=03h		moblԍEL[Itn

	AL	oblԍ

	̂obl~܂B
	ĂȂԍw肵ĂB

 AH=04h		uoblԍEʐݒv

	AL	oblԍ
	DX	DH:	0`FFh		(Default: 40h)
		DL:E	0`FFh		(Default: 40h)

	oblԍƂ̉ʂύX܂B(\tgEFA{[)
	Eꂼ 256 iKłB

 AH=05h		uoblԍEgݒv

	AL	oblԍ
	DX	g	(0h`FFFFh)	(Default: 4000h)
				2000h@c@PIN^[uႢ
				4000h@c@iTvOj
				8000h@c@PIN^[u

	oblԍƂ̎gύX܂B(\tgEFA)
	65536 iKłB

 AH=06h		uoblԍE[v񐔐ݒv

	AL	oblԍ
	DL	[v	0:[v	(Default: 1)
				1`FFh:[v

	oblԍƂ̃[v񐔂ύX܂B
	0 w肷Ɩ[v܂B

 AH=07h		umEXeIݒv

	AL	oblԍ
	DL	( 0:m  1:XeI)	(Default: 0)

	oblԍƂɃmXeIύX܂B
	mƃXeI܂ĂĂ\܂B

 AH=08h		un[hEFATvO[gݒv

	AL	TvO[g
		 0 = 44.10KHz
		 1 = 33.08KHz
		 2 = 22.05KHz
		 3 = 16.54KHz	(Default)
		 4 = 11.03KHz
		 5 =  8.27KHz
		 6 =  5.52KHz
		 7 =  4.13KHz

	86{[ĥobl[gύX܂B

 AH=09h		un[hEFA{[ݒv

	AL	{[	(Default: 0)
		  0 ` 15
		ő  ŏ

	86{[h̉ʂύX܂B

@PCMĐ܂Ƃ

@PCM̍Đ@łł傤HPCMĐɂĂ͂ꂪSĂłB
܂ĐoΘ^o܂ˁH
FIFOCPUɐݒ肵Ãf[^t@CɏĂΗǂ̂łB
@Њ荞݂gpPCMĐł悤ɂȂ܂Ŋ撣ĂB
́AG-PCM傢ɊpĂB(̂`)

@Ql

uׁv1993 10	PC-9821̊g@\
			Q񂱂ꂪugTEh@\vł`
			ҁ@̂
