
	msptech.txt ver 4.5@pcmdriver dl

						by KENJI All right reserved


@pcmdriver ̎dlłB pcmdriver 𐧌䂵́AǉB
ȊÓ̕Aǂł܂Ӗ܂B


ypcmdriverz
msdrv4 p pcmdriver  ssg-pcmA86b-pcmAwss-pcmAsb16-pcm p 4 ނ
B pcmdriver  pcm data  main memoryAemb ( Ɍ xms memory )
̂ǂ炩ɒuɂ 2 ޗLAv 8 ނ pcmdriver ܂B
   +--------+-------------------------------+------------+------------+
   |name    |                               |main memory |emb         |
   +--------+-------------------------------+------------+------------+
   |ssg-pcm |opn/opna ڋ@              |mspmssg .com|mspxssg .com|
   |86b-pcm |pc-9801-86b, pc-9821a, pc-9821c|mspm86  .com|mspx86  .com|
   |wss-pcm |pc-9821xa, pc-9821np, pc-9821c |mspmwss .com|mspxwss .com|
   |sb16-pcm|soundblaster16/98              |mspmsb  .com|mspxsb  .com|
   +--------+-------------------------------+------------+------------+


ymain memory, embz
pcm data  emb ֒uƁApcmdriver  emb memory ʂÂ main memory 
] pcm o͂܂B main memory łƔׂďdȂ
B


ymsdrv oR̔z
msdrv  effect editor  pcm effect wł܂B邱Ƃɂ effect
𔭉̂Ɠ@ pcm 炷Ƃo܂Beffect editor ł pan 
volume ̎wł܂̂ŁA pcmdriver ڂ pcm 炷Kv͂Ȃ
v܂B


yfunctionz
pcmdriver ɂ common function, memory function, peculiar function  3 ނ
function ܂B܂ common function ŁA͑SĂ pcmdriver ɋʂ
B memory function  pcmdriver  memory type ɂ main memory ł
emb ł 2 ނ̂ǂ炩gp܂BŌ peculiar function ͊e pcm
driver ̓L function łB


yfunction  samplez
msdrv ̎dl̒ɓĂ msp.asm  pcm  load ƔĂ܂̂ŁA
QlɂĉB


ywss Ƒ̉{[h̕pz
wss Ƒ̉{[h𕹗pꍇA荞݂Ȃ悤ɂĉBpc
-9801-86  wss ̕p͏o݂ł ( ۏ؊Oł傤B ) pcm 
 wss ̕FoȂȂ܂B


yAz
@@@@zob@@@@@@@@@@ zob11789
@@@@aar@@@@@@@KAKERA  
@@@@AgeBXlbg@@ATL0935 
	AX|lbg		ALS07436
@@@@۰ײݖȖȁ@@@@ YEN548  
@@@@~L[[mds@@MMN00562
@@@@Midnight Cat@@@@@@KENJI   
	ACI[y	IOC00449
@@@@anlalbg@@@@@BOMB0004
	NIFTY-Serve		GEG06337

	@dZꍇAԎx邱Ƃ܂BB


==============================================================================
==============================================================================
	pcmdriver  common function
==============================================================================
==============================================================================
;-----------------------------------------------------------------------------
;	common function
;-----------------------------------------------------------------------------
;
;	get version
;
;(in)	ah = 00h
;
;(out)	ah = version
;	al = revision
;	bl = pcm type ( 0 = ssg-pcm, 3 = 86-pcm )
;	bh = buffer memory type ( 0 = main memory / 1 = xms )
;	cx = pcm max ( 1 - 256, 풓Aoption m Őݒ肵l̏E )
;	dl = init ( 0 = ĂȂ(*1), 1 = łɏς )
;	bp = 0
;
;(*1)	wss ł sb16 ł function  int  dma ̔ԍݒ肵Ȃ dl = 0
;	ƂȂ
;
;-----------------------------------------------------------------------------
;
;	pcm stop ( SĂ pcm ~߂ )
;
;(in)	ah = 01h
;
;(out)	bp = 0  
;
;-----------------------------------------------------------------------------
;
;	pcm 炷
;
;(in)	ah = 02h
;	al = pcm number
;	bl = pcm volume ( 0 - 255 )
;	bh = pcm pan ( 0 - 127,128 - 255 )
;
;(out)	bp = 0  
;
;	bp = -1 s
;
;-----------------------------------------------------------------------------
;
;	pcm ̔IɊ荞݂~߂邩̏E
;
;(in)	ah = 0ah
;
;(out)	al = 0:荞݂~߂Ȃ
;	     1:荞݂~߂
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	pcm ̔IɊ荞݂~߂邩̐ݒ
;
;(in)	ah = 0bh
;	al = 0:荞݂~߂Ȃ
;	     1:荞݂~߂
;
;(out)	bp = 0  
;
;	bp = -1 s
;
;-----------------------------------------------------------------------------
;
;	pcm ̍ő哯̏E
;
;(in)	ah = 0ch
;
;(out)	al = Lȓ ( ssg-pcm = 1 - 3, 86-pcm = 1 - 8 )
;	ah = ő哯 ( ssg-pcm = 3, 86-pcm = 8 )
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	pcm ̍ő哯̐ݒ
;
;(in)	ah = 0dh
;	al = Lɂ铯 ( ssg-pcm = 1 - 3, 86-pcm = 1 - 8 )
;
;	bp = -1	s
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;
;	main volume ̏E
;
;(in)	ah = 0eh
;
;(out)	al = main volume ( 0 - 255 )
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	main volume ̐ݒ
;
;(in)	ah = 0fh
;	al = main volume ( 0 - 255 )
;
;(out)	bp = 0
;


==============================================================================
==============================================================================
	pcmdriver  memory function
==============================================================================
==============================================================================
;-----------------------------------------------------------------------------
;	memory function ( for main memory )
;-----------------------------------------------------------------------------
;
;	pcm buffer ̏E
;
;(in)	ah = 10h
;
;(out)	cx = buffer size ( kbyteP / 0 Ȃ疢m )
;	es = segment
;	bp = 0
;
;-----------------------------------------------------------------------------
풓 e option  pcm buffetr ƂĎgp main memory  size ݒ肵
Βʏ͖肠܂B program  pcm buffer 𑀍삷ۂɂ
 function gpĉB
 function gp pcm buffer  reallocate  release 肵
Ă풓Ɋmۂꂽ pcm buffer ͉邱Ƃ͂܂B
ȂAfunction 11h  pcm buffer mۂ΂AȂ炸mۂ applicatio
n  function 12h ŉĉBIƂ dos  pcm buffer 
Ă̂ɁApcmdriver m炸ɂgĂ܂܂B


(1)	1) 풓 pcm buffer m
	2) function 11h ŐV pcm buffer m
	3) function 12h  pcm buffer ̉ & 풓Ɋmۂ pcm buffer 
	   ߂

(2)	1) 풓 pcm buffer m
	2) function 11h ŐV pcm buffer m
	3) function 11h  pcm buffer ̃TCYύX
	4) function 12h  pcm buffer ̉ & 풓Ɋmۂ pcm buffer 
	   ߂

(3)	1) 풓 pcm buffer mۂȂ
	2) function 11h ŐV pcm buffer m
	3) function 12h  pcm buffer ̉ & pcm buffer ݂ȂȂ

;-----------------------------------------------------------------------------
;
;	pcm buffer VɊmۂ ( = reallocate )
;
;(in)	ah = 11h
;	cx = mۂ size ( kbyteP )
;
;(out)	bp = 0@
;
;	bp = -1	s
;
;()	ȑO pcm buffer mۂĂȂꍇ͒PȂ allocate Ƃċ@\
;	܂BȑO pcm buffer ĂꍇAI release Ǎ
;	allocate ܂B
;	ȂA풓Ɋmۂ pcm buffer ͉邱Ƃ͂܂B
;
;-----------------------------------------------------------------------------
;
;	pcm buffer  release
;
;(in)	ah = 12h
;
;(out)	bp = 0@
;
;	bp = -1	s
;
;()	function 11h Ŋmۂ pcm buffer ܂B풓Ɋmۂꂽ pcm
;	buffer ͉邱Ƃ͂܂B
;
;-----------------------------------------------------------------------------
;
;	pcm buffer Cӂ segment ɐݒ
;
;(in)	ah = 13h
;	es = segment
;
;()	Cӂ segment  pcm buffer Ƃ܂BȑO function 11h Ŋmۂ p
;	cm buffer ͉܂B
;
;-----------------------------------------------------------------------------
;	memory function ( for emb )
;-----------------------------------------------------------------------------
;
;	pcm 炷߂ buffer  emb ̏E
;
;(in)	ah = 10h
;
;(out)	cx = ݎgp emb TCY ( kbyteP / 0 Ȃ疢m )
;	dx = ݎgp emb nh
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	emb VɊmۂ
;
;(in)	ah = 11h
;	cx = mۂ emb size ( kbyteP )
;
;(out)	bp = 0@
;
;	bp = -1	s
;
;-----------------------------------------------------------------------------
;
;	emb ̉
;
;(in)	ah = 12h
;
;(out)	bp = 0  
;
;	bp = 1@NembmۂȂAłɉĂ
;
;	bp = -1 s
;
;()	NɊmۂ emb ܂B
;
;-----------------------------------------------------------------------------
;
;	pcm 炷߂ buffer ̏
;
;(in)	ah = 13h
;
;(out)	bp = 0  
;
;	bp = -1 s
;
;()	pcm 炷߂ buffer  data  read ɂ function  call
;	ĉBȂ work ނݒ肳܂B
;


==============================================================================
==============================================================================
	pcmdriver  peculiar function
==============================================================================
==============================================================================
;-----------------------------------------------------------------------------
;	peculiar function ( for ssg-pcm, mspmssg.com, mspxssg.com )
;-----------------------------------------------------------------------------
main memory :mspmssg.com
emb         :mspxssg.com
spec          :1ch-4bit
Ή format   :1ch-4bit opna-adpcm ( .spb )
              :1ch-4bit pcm        ( .spc )
              :1ch-8bit pcm        ( .pc8 )
              :1ch-16bit pcm       ( .phl )
Ήg    :4000 - 44100
ő哯:3 voice

high-quality mode  low-quality mode ݒł܂Blow-quality mode ɂ
 driver yȂ܂Bgame ̍ŏ user ɑI΂Ɨǂł傤B
mask ̐ݒĔ ch  1ch ɂ driver yȂ܂B user 
I΂Ɨǂł傤B
;-----------------------------------------------------------------------------
;
;	pcm quality ̏E
;
;(in)	ah = 20h
;
;(out)	al = pcm quality ( 0 = high quality mode / 1 = low quality mode )
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	pcm quality ̐ݒ
;
;(in)	ah = 21h
;	al = pcm quality ( 0 = high quality mode / 1 = low quality mode )
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;
;	ssg-pcm  mask ̏E
;
;(in)	ah = 22h
;
;(out)	al = ssg pcm  channel mask
;		0b:ssg0 ( default = 1 )
;		1b:ssg1 ( default = 1 )
;		2b:ssg2 ( default = 1 )
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	ssg-pcm  mask ̐ݒ
;
;(in)	ah = 23h
;	al = ssg pcm  channel mask
;		0b:ssg0 ( default = 1 )
;		1b:ssg1 ( default = 1 )
;		2b:ssg2 ( default = 1 )
;
;(out)	bp = 0
;
;()	function-0dh gpāAő哯ݒ肷邱Ƃ͏o܂Assg
;	̂ǂ ch  pcm 蓖Ă邩ׂݒł܂BȂAfunction-0dh 
;	gp΂Assg0,ssg1,ssg2 ̏ɎgpĂ܂B
;


;-----------------------------------------------------------------------------
;	peculiar function ( for 86-pcm, mspm86.com, mspx86.com )
;-----------------------------------------------------------------------------
main memory :mspm86.com
emb         :mspx86.com
spec          :2ch-16bit
Ή format   :1ch-4bit opna-adpcm ( .spb )
              :1ch-4bit pcm        ( .spc )
              :1ch-8bit pcm        ( .pc8 )
              :1ch-16bit pcm       ( .phl )
              :2ch-4bit pcm        ( .spc )
              :2ch-8bit pcm        ( .pc8 )
              :2ch-16bit pcm       ( .phl )
Ήg    :4130, 5520, 8270, 11030, 16540, 22050, 33080, 44100
ő哯:8 voice

 ch  1ch ɂ driver yȂ܂Bgame ̍ŏ user ɑI΂
ǂł傤BȂ ŗL function ͂܂BΉgȊO pcm ͋߂̎
gƂĔ܂Apitch ̕ϊ͍s܂B


;-----------------------------------------------------------------------------
;	peculiar function ( for wss-pcm, mspmwss.com, mspxwss.com )
;-----------------------------------------------------------------------------
main memory :mspmwss.com
emb         :mspxwss.com
spec          :2ch-16bit
Ή format   :1ch-4bit opna-adpcm ( .spb )
              :1ch-4bit pcm        ( .spc )
              :1ch-8bit pcm        ( .pc8 )
              :1ch-16bit pcm       ( .phl )
              :2ch-4bit pcm        ( .spc )
              :2ch-8bit pcm        ( .pc8 )
              :2ch-16bit pcm       ( .phl )
Ήg    :5510, 6620, 8000, 9600, 11025, 16000, 18900, 22050, 27420, 32000
              :33075, 37800, 44100, 48000, 54840, 64000
ő哯:8 voice

 ch  1ch ɂ driver yȂ܂Bgame ̍ŏ user ɑI΂
ǂł傤BȂ ŗL function ͂܂BΉgȊO pcm ͋߂̎
gƂĔ܂Apitch ̕ϊ͍s܂B
wss-pcm  dma channel w肷Kv܂B̕@ɂ msdrv4 ̋N op
tion Ŏw ( = WSSDn )Apcmdriver ̋N option Ŏw ( = Dn )Apcmdriver 
 function Őݒ ( function-07h ) ̂ǂꂩsĉB
;-----------------------------------------------------------------------------
;
;	݂ wss  dma channel ̏E
;
;(in)	ah = 06h
;
;(out)	al = ݂ dma channel ( -1 Ȃݒ肵ĂȂ )
;	bl = ̋@Ŏgp\ dma
;		0b:dma0 = 1
;		1b:dma1 = 0 / 1 ( pc9821np ł͎gps\ )
;		2b:dma2 = 0     ( wss ł͎gps\ )
;		3b:dma3 = 1
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	wss  dma channel ̐ݒ
;
;(in)	ah = 07h
;	al = dma channel ( 0,1,3,-1 )
;
;(out)	bp = 0  
;
;	bp = -1 s
;


;-----------------------------------------------------------------------------
;	peculiar function ( for sb16-pcm, mspmsb16.com, mspxsb16.com )
;-----------------------------------------------------------------------------
main memory :mspmwss.com
emb         :mspxwss.com
spec          :2ch-16bit
Ή format   :1ch-4bit opna-adpcm ( .spb )
              :1ch-4bit pcm        ( .spc )
              :1ch-8bit pcm        ( .pc8 )
              :1ch-16bit pcm       ( .phl )
              :2ch-4bit pcm        ( .spc )
              :2ch-8bit pcm        ( .pc8 )
              :2ch-16bit pcm       ( .phl )
Ήg    :5000 - 45000
ő哯:8 voice

@sb16 ɕtĂ풓hCo[͕Kv܂Bmsdrv4.exe P̂őSĂ̓
܂BBLASTER ϐݒ肳Ăꍇɂ͂̐ݒg܂Bop
l3 ̎gpł͊ϐ̐ݒKv܂ sb16 p pcmdriver ̎g
p̍ۂɂ͎gp int  dma w肵Ȃ΂Ȃ܂Bmsdrv4 ̏풓 op
tion Ŏw ( = SBIn , SBDn )Apcmdriver ̏풓 option Ŏw ( = Dn , = I
n )ABLASTER ϐŐݒApcmdriver  function Ŏw ( function-06h,07h )
̂ǂꂩKvłB
;-----------------------------------------------------------------------------
;
;	݂ sb16  dma channel ̏E
;
;(in)	ah = 06h
;
;(out)	al = ݂ dma channel ( -1 Ȃݒ肵ĂȂ )
;	bl = ̋@Ŏgp\ dma
;		0b:dma0 = 1
;		1b:dma1 = 0 ( sb16 ł͎gps\ )
;		2b:dma2 = 0 ( sb16 ł͎gps\ )
;		3b:dma3 = 1
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	sb16  dma channel ̐ݒ
;
;(in)	ah = 07h
;	al = dma channel ( 0,3,-1 )
;
;(out)	bp = 0  
;
;	bp = -1 s
;
;-----------------------------------------------------------------------------
;
;	݂ sb16  irq number ̏E
;
;(in)	ah = 08h
;
;(out)	al = ݂ irq number ( -1 Ȃݒ肵ĂȂ )
;	bx = ̋@Ŏgp\ irq number
;		 0b:irq0  = 0 ( sb16 ł͎gps\ )
;		 1b:irq1  = 0 ( sb16 ł͎gps\ )
;		 2b:irq2  = 0 ( sb16 ł͎gps\ )
;		 3b:irq3  = 1
;		 4b:irq4  = 0 ( sb16 ł͎gps\ )
;		 5b:irq5  = 1
;		 6b:irq6  = 0 ( sb16 ł͎gps\ )
;		 7b:irq7  = 0 ( sb16 ł͎gps\ )
;		 8b:irq8  = 0 ( sb16 ł͎gps\ )
;		 9b:irq9  = 0 ( sb16 ł͎gps\ )
;		10b:irq10 = 1
;		11b:irq11 = 0 ( sb16 ł͎gps\ )
;		12b:irq12 = 1
;		13b:irq13 = 0 ( sb16 ł͎gps\ )
;		14b:irq14 = 0 ( sb16 ł͎gps\ )
;		15b:irq15 = 0 ( sb16 ł͎gps\ )
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	sb16  irq number ̐ݒ
;
;(in)	ah = 09h
;	al = irq number ( 3,5,10,12,-1 )
;
;(out)	bp = 0  
;
;	bp = -1 s
;



===============================================================================
===============================================================================
	.msp file  data `
===============================================================================
===============================================================================
0000h.b		PCM̐(0`255,0org)
0001h`00FFh	

0100h.l		pcm00 ւ pointer
0104h.l		pcm00  size
0108h.w		pcm00  freq
010Ah.b		pcm00  data type
			0b-3b	0000= 1 bit data
				0001= 4 bit data
				0010= 8 bit data
				0011=16 bit data
			4b-5b	00  = 1ch data
				01  = 2ch data
			6b-7b	00  = pcm
				01  = opna-adpcm ( 4bit-1ch ̂ )
010Bh.b		pcm00  PAN
			0b-2b	left  111= mask
				      000= 1ch data put
				      001= 2ch data put
			3b-5b	right 111= mask
				      000= 1ch data put
				      001= 2ch data put
			6b-7b	not use
010Ch.b		pcm00  volume ( 0 - 255 )
010Dh.b		pcm00  priority ( 1 - 255 )
010Eh.b		pcm00  pan ( 0 - 127,128 - 255 )
010Fh.b		gp

0110h.l		pcm01 ւ pointer
0114h.l		pcm01  size
0118h.w		pcm01  freq
011Ah.b		pcm01  data type
			0b-3b	0000= 1 bit data
				0001= 4 bit data
				0010= 8 bit data
				0011=16 bit data
			4b-5b	00  = 1ch data
				01  = 2ch data
			6b-7b	00  = pcm
				01  = opna-adpcm ( 4bit-1ch ̂ )
011Bh.b		pcm01  PAN
			0b-2b	left  111= mask
				      000= 1ch data put
				      001= 2ch data put
			3b-5b	right 111= mask
				      000= 1ch data put
				      001= 2ch data put
			6b-7b	not use
011Ch.b		pcm01  volume ( 0 - 255 )
011Dh.b		pcm01  priority ( 1 - 255 )
011Eh.b		pcm01  pan ( 0 - 127,128 - 255 )
011Fh.b		gp

0120h.l		pcm02 ւ pointer
0124h.l		pcm02  size
0128h.w		pcm02  freq
012Ah.b		pcm02  data type
			0b-3b	0000= 1 bit data
				0001= 4 bit data
				0010= 8 bit data
				0011=16 bit data
			4b-5b	00  = 1ch data
				01  = 2ch data
			6b-7b	00  = pcm
				01  = opna-adpcm ( 4bit-1ch ̂ )
012Bh.b		pcm02  PAN
			0b-2b	left  111= mask
				      000= 1ch data put
				      001= 2ch data put
			3b-5b	right 111= mask
				      000= 1ch data put
				      001= 2ch data put
			6b-7b	not use
012Ch.b		pcm02  volume ( 0 - 255 )
012Dh.b		pcm02  priority ( 1 - 255 )
012Eh.b		pcm02  pan ( 0 - 127,128 - 255 )
012Fh.b		gp
