
	msdrv4.exe ver 4.5@풓^ fm /midi hCo[dl
	msdrv4l.exe version 4.5a
	ms2msf.exe version 4.5a
	mswatch0.com
	msp.asm
	msmixsb.asm
	mswatch0.asm

						by KENJI All right reserved


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


y ms2msf.exe z
	@.ms f[^[͕ҏWp̂߁A₷悤ɑSẴf[^[ 4 byte 
	PʂōĂ܂BāAf[^[ʂɂȂĂ܂܂B
	菬ȃf[^[ɂ邪 ms2msf.exe łB̃c[ɂ .msf 
	쐬AQ[̑gݍ݂ɂ͂gpǂł傤B
	@f[^[̍̉\̂ŁAQ[̑gݍ݈ȊOɂ .msf t@
	CgpȂŉB
	@ȂÃc[͓삪ɒxłBȂȂŒv̌[`
	łB


y msdrv4l.exe z
	@MSDRV4.EXE ꕔ@\폜kłłBQ[ɑgݍޏꍇ
	gpǂł傤BȉAmsdrv4.exe Ƃ̈ႢL܂B
	@NɊe buffer ܂B
	@ȃf[^[ 64kbyte ȓmۂł܂B
	@t [grph] L[ĂȂ̑܂B
	@subroutine o^o܂B

	@ۂɃQ[֑gݍރf[^[쐬ꍇ́A10 track ȓʂɂ
	āAopn  64 program Assg  32 program ʂɂ̂ǂł傤B
	ȃf[^[̂̂A.msf  20,000 ʂ傤Ǘǂł傤B
	ʉobt@[ 1,024 ʂǂł傤B̂Ƃ̏풓IvV
	>msdrv4l.exe b20000 e1024 o32 s64 t10[ret]
	łBʂȂ烁[ɃQ[gpł܂B


y mswatch0.com z
	@̃vO msdrv4.exe  total step ʍɕ\풓v
	OłBmsdrv4  seqence 荞݂|閈ɉʂ̏
	Ă܂B


y msp.asm / mswatch0.asm z
	@̃\[X msdrv4.exe gp̂߂̃TvłBꕔŜ̂p
	ꍇɂ҂̋͕Kv܂BAlbgŌJ
	͋ɗ̓t@Cl[ύXĉB


y msmixsb.asm z
	@msmixsb.asm  sb16  mixer 𒼐ڐ䂷TvƂȂƎv܂
	̂ŁAsb16 𒼐ڐ䂵ꍇɂ͎QlɂĂƍKłB


y̋L^z
	@msdrv4l.exe ̉̋L^́Amsdrv4.his QƂĉB

	v4.0a	1995	 3/10	@ver4.0a J
	v4.1a		 3/10	@ms2msf.exe  loop `FbNî
				ƈՂ
	v4.2a		 5/ 4	@ms2msf.exe  program œK midi ch R}
				ȟ off ɂĂȂ̂𒼂
			 5/20	@mswatch0.com 
	v4.3a		 6/18	@ms2msf.exe  bankprg ̂ƂɁAprogram ̍
				K off ɂȂoO fix
				@ms2msf.exe  loopstart ̂ƂɁA.ms  vol
				œK off ɂĂ̂ .msf œK
				off 悤ɂB
				@ms2msf.exe  1  msf pointer ̐K
			 7/15	ĂȂ̂𒼂
	v4.4a		 9/ 5	@ver 4.4 ɏ
	v4.4b	1996	 1/21	@ver 4.4b ɏ
	v4.5a		 4/16	@ver 4.5a ɏ


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


==============================================================================
==============================================================================
	ȏ̒ӓ_
==============================================================================
==============================================================================


ymidi  fade-out / fade-in ɂāz
	@midi-control  7 Ԃ volume gĕ\Ă܂B127 ̌Z
	ŏĂ܂̂ŁAȂ̒ł͋ɗ͂ȂŉB


yssg  noise ɂāz
	@msdrv4  ssg ̉Fɂ ssg  noise ̐ݒ肪܂܂Ă܂B
	n[h̐ア炩̐񂪂܂B
	@ssg  noise  ssg ̊e`l on/off ̐ݒ肪o܂Anoi
	se ̎g 1 wł܂Bēɑ̃`l no
	ise gp鉹FgpꍇAŌɐݒ肵F noise ̎g
	p[^[gp܂B
	@Ȃׂ ssg noise gp邱Ƃ͂B


==============================================================================
==============================================================================
	gݍݎ̒ӓ_
==============================================================================
==============================================================================


y timer z
	@Ȃꍇł timer gp܂BɂAvP[V
	^C~OꍇÂȂCɂKvȂȂ܂B
	timer ̎gpʂ opn/opna  timerA/B -> timer0 łBx 1 
	timer gp܂Bvsync 荞݂͎gp܂B
	@ȂAver4.5  Cӂ timer gp邱Ƃ\ɂȂ܂B


y ʉɂ z
	@xłȂX^[gȂƌʉ͖܂B̌͋Ȃ~߂
	ʉ点܂BhCo[풓Ax̋Ȃ[hăX^[
	g铙AHvĉB


==============================================================================
==============================================================================
	msdrv4  function
==============================================================================
==============================================================================


y풓`FbN̎dz
	@܂Aint61h ̃xN^[E܂( dos.function-35h )Bah=35h,al=
	61hZbg int21h sƁAes:bx  int61h ̃xN^[|C
	^[Zbg܂BāA|C^[ es:bx+2 ̓e "MsDRV"
	Ȃ MSDRV 풓ςłB
	@ۂ̃`FbN̎d́AL̃\[X ( check_memory_msdrv ) 
	ȂĉBȂA풓vOID  ANK ̑啶Ə݂
	܂̂ŁACtĉBcheck_memory_msdrv ́ACOM vO
	ł EXE vOłĂяoƂ\łBo͂̓[tO
	Ȃ̂ŁAR[A`FbNĉBQl܂łɁA( main00 )
	ɂȂĉB


ys̃Xe[^Xz
	@ msdrv  function sǂmF STATUS 
	B status ( inMSDRVflag )  풓id ̂ɂ܂Bꂪ
	0 ȊOȂ msdrv  function ̎słB
	@́A荞ݑS msdrv  function s邽߂
	̂łB


ymsdrv4.2 ȑO version ̏dȃoOz
	@version4.2 ȑO version  msdrv4 ɂ͏dȃoO܂BΉ
	c[ꍇAhLgɂȑÕo[WgȂ悤
	LĉBdȃoOƂ́ACvgĂȂ function 
	bp=8000h ԂĂȂłBversion4.0  4.1 ̏ꍇɂ̓c[
	NȂ悤ɂ̂ԗǂ@Ǝv܂B


check_memory_msdrv	proc	near
;
;	[풓`FbN
;
;(OUT)	Zero.Flag = 1 msdrv4.exe 풓
;		  = 0 msdrv4.exe 풓ĂȂ
;
vecint	equ	61h			; msdrv ̊荞݃xN^[ԍ
	push	ds
	push	es

	push	cs			; Đݒ
	pop	ds
	mov	ax,3500h+vecint		;荞݃xN^[E
	int	21h			; es:bx=荞݃xN^[
	add	bx,2			; es:bx+2=N̏풓vOID
	mov	di,bx
	mov	si,offset tsrid		; ds:si=풓vOID
	mov	cx,size tsrid
	repe	cmpsb			; ؏풓

	pop	es
	pop	ds
	ret
tsrid	db	"MsDRV"			; 풓ID
check_memory_msdrv	endp


main00			proc	near

	push	cs			; ZOgݒ
	pop	ds
	call	check_memory_msdrv	; msdrv 풓`FbN
	je	next00
	mov	dx,offset mes_err	; G[bZ[W\
	mov	ah,09h
	int	21h
	mov	ax,4c01h		; G[I
	int	21h
next00:	mov	dx,offset mes_000	; bZ[W\
	mov	ah,09h
	int	21h
	mov	ax,4c00h		; I
	int	21h
mes_000		db	"msdrv ͏풓Ă܂B",0dh,0ah,"$"
mes_err		db	"msdrv ͏풓Ă܂B",0dh,0ah,"$"
main00			endp


y msdrv4.exe  ver 4.0  function z
 ah = 00h	o[WE
 ah = 01h	INIT BOARD
 ah = 02h	music driver ̏풓
 ax = 0803h	ssg ̃{[E
 ax = 0804h	opn ̃{[E
 ax = 0805h	rhythm ̃{[E
 ax = 0903h	ssg ̃{[ݒ
 ax = 0904h	opn ̃{[ݒ
 ax = 0905h	rhythm ̃{[ݒ
 ah = 10h	荞ݔԍE
 ah = 11h	opn ̏E 0
 ah = 12h	opn  port E
 ax = 1800h	midi-A ̏E
 ax = 1801h	midi-B ̏E ( ver4.5  function-1800h Ɠ )
 ax = 2000h	ȃf[^[ւ̃|C^[ƃTCYE
 ax = 2001h	݂̉tԂ̏E
 ax = 2010h	track f[^[ւ̃|C^[ƃTCYE
 ax = 2011h	track ̊eւ̃|C^[E
 ax = 2020h	ssg f[^[ւ̃|C^[ƃTCYE
 ax = 2030h	opn f[^[ւ̃|C^[ƃTCYE
 ax = 2100h	ȃX^[g
 ax = 2101h	ȃX^[g fade-in
 ax = 2200h	ȃXgbv
 ax = 2201h	ȃXgbv fade-out


y msdrv4.exe  ver 4.1  function ̒ǉ z
	@ver 4.1 Œǉꂽ function ͕ҏWc[AFXȉtłp
	ɂ邽߂ɒǉꂽłB

 ax = 2002h	total step ̏E
 ax = 2102h	wʒu܂ŉt̏̂
 ax = 2103h	wʒu܂ŉt̉t{̂̂
 ax = 2104h	wʒu܂ŉtʏ퉉tɂ
 ax = 2105h	tJnɃ`l[N邩
 ax = 2106h	tJnɃ`l[N邩E
 ax = 2107h	stop pointer ̐ݒ


y msdrv4.exe  ver 4.2  function ̒ǉ z
	@ver 4.2 Œǉꂽ function  joystic ֘A sound-blaster ֘AA
	ssg ʉ֘AAď풓c[ msdrv4 ̐ƊĎs߂ɒ
	ꂽłB

 ax = 0300h	subroutine ̓o^ ( seqence Ă΂ )
 ax = 0301h	subroutine ̍폜 ( seqence Ă΂ )
 ax = 0302h	subroutine ̍ő吔E
 ax = 0303h	subroutine ̃xN^[E
 ah = 14h	sb16 ̏E
 ah = 15h	opl  port E
 ax = 2003h	music timing flag ̏E
 ax = 2004h	music timing flag ̐ݒ
 ah = 30h	joystick ̏E
 ah = 31h	joystick ( pad ) ̃f[^[E
 ah = 32h	joystick ( analog ) ̃f[^[E
 ah = 40h	effect 
 ah = 41h	effect 
 ah = 48h	effect data ւ pointer  size E
 ah = 50h	ssg effect ̐ݒE
 ah = 51h	ssg effect ݒ


y msdrv4.exe  ver 4.3  function ̒ǉ z
	@ver 4.3 Œǉꂽ function  opn/opl/midi ʉ֘AAsound-blas
	ter  mixer ֘AłB

 ah = 58h	opn effect ̐ݒE
 ah = 59h	opn effect ݒ
 ah = 60h	opl effect ̐ݒE
 ah = 61h	opl effect ݒ
 ah = 68h	midi effect ̐ݒE
 ah = 69h	midi effect ݒ
 ah = 80h	sb16  mixer  data E
 ah = 81h	sb16  mixer  data ݒ


y msdrv4.exe  ver 4.4  function ̒ǉ z
	@ver 4.4 Œǉꂽ function  ssg-pcm ֘A̕łB
ah = 90h	set ssg      (checkt datasavet)
ah = 91h	set ssg      (check datasavet)
ah = 92h	set ssg      (check datasave)
ah = 93h	ssg mix o
ah = 94h	opn  data E
ah = 95h	opn  data o       (datasave)
ah = 96h	opna  data o      (datasave)
ah = 97h	opn/opna  data o  (datasave)
ah = 98h	opn  data o       (datasavet)
ah = 99h	opna  data o      (datasavet)
ah = 9ah	opn/opna  data o  (datasavet)
ah = 9bh	ch3 mode(=timer)o
ah = a0h	get pointer to set ssg      (checkt datasavet)
ah = a1h	get pointer to set ssg      (check datasavet)
ah = a2h	get pointer to set ssg      (check datasave)
ah = a3h	get pointer to ssg mix o
ah = a4h	get pointer to opn  data E
ah = a5h	get pointer to opn  data o       (datasave)
ah = a6h	get pointer to opna  data o      (datasave)
ah = a7h	get pointer to opn/opna  data o  (datasave)
ah = a8h	get pointer to opn  data o       (datasavet)
ah = a9h	get pointer to opna  data o      (datasavet)
ah = aah	get pointer to opn/opna  data o  (datasavet)
ah = abh	get pointer to ch3 mode(=timer)o
ah = c0h	msdrv lock number E
ah = c1h	msdrv lock number ݒ肷
ah = c2h	msdrv lock number  inc 
ah = c3h	msdrv lock number  dec 
ah = d0h	pcm driver ̌` msdrv4 ֓`

y msdrv4.exe  ver 4.4b  function ̕ύX z
	@ver 4.4b ŕύXꂽ function  pc-9801-118 ֘A̕łB
 ah = 11h	opn ̏E 0
 ah = 30h	joystick ̏E
 ah = 32h	joystick ( analog ) ̃f[^[E

y msdrv4.exe  ver 4.5  function ̕ύX / ǉ z
	@ver 4.5 ŕύXꂽ function  ֘A̕łB
 ah = 10h	荞ݔԍE
 ah = 18h	midi ̏E
	@ver 4.5 Œǉꂽ function  ֘A̕łB
 ah = 13h	opn  port E
 ah = 17h	荞ݔԍ̐ݒ
 ah = 19h	midi ̏ݒ
 ax = e000h	opn ̏E 1
 ax = e008h	opn  port E
 ax = e009h	opn  port ݒ
 ax = e100h	opl ̏E
 ax = e108h	opl  port E
 ax = e109h	opl  port ݒ
 ax = f000h	118 ̏E
 ax = f001h	118-opna / 118-opl ̐؂ւ
 ax = f100h	sb ̏E 1
 ax = f108h	sb  port E
 ax = f109h	sb  port ݒ




;-----------------------------------------------------------------------------
;	system
;-----------------------------------------------------------------------------
;
;	o[WE
;
;(in)	ah@@@= 00h
;
;(out)	ah	= o[Wԍ
;	al	= rWԍ
;	bp	= 0
;
;-----------------------------------------------------------------------------
;
;	init board
;
;(in)	ah@@@= 01h
;
;(out)	bp	= 0
;
;()	board  rs232c ܂B
;
;-----------------------------------------------------------------------------
;
;	music driver ̏풓
;
;(in)	ah	= 02h
;
;(out)	bp	= 0
;
;-----------------------------------------------------------------------------
;	subroutine
;-----------------------------------------------------------------------------
;
;	subroutine ̓o^ ( seqence Ă΂ )
;
;(in)	ax	= 0300h
;	es:bx   = pointer to function
;
;(out)	bp	= 0  : success
;			ax = subroutine number
;
;	bp	= 1  : error ( ȏo^łȂ )
;
;()	msdrv4l.exe ɂ̓CvgĂ܂Bbp = 8000h Ń^[
;	܂B
;
;	ő 16  seqence Ă΂ subroutine o^邱Ƃo܂B
;	msdrv4  seqence 荞݂|閈ɓo^ꂽ subroutine  far call
;	܂Bfar call Ȃ̂ subroutine ̍Ō retf ĉBȂA
;	ē͂܂B
;	 subroutine ł܂ɏd nest [Ȃ肷̂
;	ӉB荞݋֎~͂ĂȂ̂ŁAȂɂ댯ȂƂꍇ
;	ɂ͊荞݂֎~ĉB荞݂֎~ꍇ͑₩Ɍɖ߂
;	悤SĉB
;	 subroutine ł flag WX^܂ޑSẴWX^ۑĉB
;	ʂ stack ۂɂ subroutine  local stack ĉ
;	B
;
;-----------------------------------------------------------------------------
;
;	subroutine ̍폜 ( seqence Ă΂ )
;
;(in)	ax	= 0301h
;	bx      = subroutine number
;
;(out)	bp	= 0  : success
;
;	bp	= 1  : error ( o^ )
;
;()	msdrv4l.exe ɂ̓CvgĂ܂Bbp = 8000h Ń^[
;	܂B
;
;	 subroutine 풓ۂɂ͂ function  subroutine 폜
;	B
;
;-----------------------------------------------------------------------------
;
;	subroutine ̍ő吔E
;
;(in)	ax	= 0302h
;
;(out)	bp	= 0
;	cx	= ő吔 ( = 16 )
;	ax	= o^\
;
;()	msdrv4l.exe ɂ̓CvgĂ܂Bbp = 8000h Ń^[
;	܂B
;
;-----------------------------------------------------------------------------
;
;	subroutine ̃xN^[E
;
;(in)	ax	= 0303h
;	bx      = subroutine number
;
;(out)	bp	= 0  : success
;			es:bx   = pointer to function
;
;	bp	= 1  : error
;
;()	msdrv4l.exe ɂ̓CvgĂ܂Bbp = 8000h Ń^[
;	܂B
;
;-----------------------------------------------------------------------------
;	volume
;-----------------------------------------------------------------------------
;
;	ẽ{[E
;
;(in)	ax	= 0801h : midi-A ( msdrv4 ver4.2 Œǉ )
;	ax	= 0802h : midi-B ( msdrv4 ver4.2 Œǉ )
;	ax	= 0803h : ssg
;	ax	= 0804h : opn
;	ax	= 0805h : rhythm
;	ax	= 0806h : opl ( msdrv4 ver4.2 Œǉ )
;
;(out)	dl      = volume ( 0 - 127 )
;	bp	= 0
;
;-----------------------------------------------------------------------------
;
;	ẽ{[ݒ
;
;(in)	ax	= 0901h : midi-A ( msdrv4 ver4.2 Œǉ )
;	ax	= 0902h : midi-B ( msdrv4 ver4.2 Œǉ )
;	ax	= 0903h : ssg
;	ax	= 0904h : opn
;	ax	= 0905h : rhythm
;	ax	= 0906h : opl ( msdrv ver4.2 Œǉ )
;	dl      = volume ( 0 - 127 )
;	bp	= 0
;
;-----------------------------------------------------------------------------
;	irq status
;-----------------------------------------------------------------------------
;
;	荞ݔԍE
;
;(in)	ah = 10h
;
;(OUT)	AX	= 荞ݔԍ ( irq ԍ )
;		   0 / irq0  timer0
;		   2 / irq2  vsync
;		   3 / irq3  opn   ( int0  )
;		  10 / irq10 opn   ( int41 )
;		  12 / irq12 opn   ( int5  )
;		  13 / irq13 opn   ( int6  )
;		 257 / irq13 mouse ( int6  )
;	BP	= 0
;
;-----------------------------------------------------------------------------
;	opn function ( old version )
;-----------------------------------------------------------------------------
;
;	opn ̏E 0
;
;(in)	ah = 11h
;
;(out)	ax = {[h̎
;		0:
;		1:opn
;		2:opna
;		3:opna+adpcm
;		4:86b ( opna + 86pcm )
;		5:canbe ( opna + wsspcm / ̍\ canbe  118 ڑĂ
;		  opl3 ͎gpłȂ̂ŒӂKvB̍ہAmsdrv4 ̓{[h
;		  ނ 5 ƂB )
;		6:118 ( opna/opl + wsspcm )
;	bp = 0
;
;-----------------------------------------------------------------------------
;	sb16 ( old version )
;-----------------------------------------------------------------------------
;
;	sb16 ̏E
;
;(in)	ah = 14h
;
;(OUT)	AX	= {[h̎
;		  0 / 
;		  1 / sb16
;
;	BP	= 0
;
;-----------------------------------------------------------------------------
;	select irq
;-----------------------------------------------------------------------------
set_int		proc	near
;
;	荞ݔԍ̐ݒ
;
;(in)	ah = 17h
;	bx	= 荞ݔԍ
;		   0 / irq0  timer0
;		   2 / irq2  vsync
;		   3 / irq3  opn   ( int0  )
;		  10 / irq10 opn   ( int41 )
;		  12 / irq12 opn   ( int5  )
;		  13 / irq13 opn   ( int6  )
;		 256 / irq3,irq10,irq12,irq13 ( int0,int41,int5,int6 ) opn
;		 257 / irq13 mouse int6
;	bp	= 0
;
;()	ax = 256 w肵ۂɂ́A荞ݔԍ msdrv 풓 opn ǂ
;	܂ꂽlgp܂Bopn ݂Ȃꍇɂ timer0 IɎg
;	p܂B
;
;()	 function sɂ music driver  irq ~܂Ă܂
;	B̌AxłȂX^[gȂƌʉ͖܂B̌
;	Ȃ~߂Ăʉ点܂Bx̋Ȃ[hăX^[g
;	AHvĉB
;
;()	pcm driver gꍇ́A function gpȂŉB
;
;-----------------------------------------------------------------------------
;	midi
;-----------------------------------------------------------------------------
;
;	midi ̏E
;
;(in)	ah = 18h
;	al = midi port
;		0:midi-a
;		1:midi-b
;
;(out)	ax = {[h̎
;		  0:non
;		  1:mpu-98 midi-board
;		  2:rs-midi ( port 1 )
;		  3:rs-midi ( port 2 )
;		128:super-mpu ( port a )
;		129:super-mpu ( port b )
;	bx = mpu-98/super-mpu dataport
;	dx = mpu-98/super-mpu statusport
;	bp = 0
;
;	bp = 1: al ̒l
;
;()	ver4.5  function-1800h  function-1801h ܂AԒl
;	error ̂Ƃ܂߂ēOƓȂ̂ŁASĉB
;
;-----------------------------------------------------------------------------
;
;	midi ̏ݒ
;
;(in)	ah = 19h
;	al = midi port
;		0:midi-a
;		1:midi-b
;	cx = {[h̎
;		  0:non
;		  1:mpu-98 midi-board
;		  2:rs-midi ( port 1 )
;		  3:rs-midi ( port 2 )
;		128:super-mpu ( port a )
;		129:super-mpu ( port b )
;	bx = mpu-98/super-mpu dataport ( -1 Ȃݒ肵Ȃ )
;	dx = mpu-98/super-mpu statusport ( -1 Ȃݒ肵Ȃ )
;
;(out)	bp = 0
;
;	sĉBsuper-mpu ֐ݒ肷ꍇA function ̔šA
;	 function 𔭍s܂ 3 bق wait ĉB
;
;-----------------------------------------------------------------------------
;	play & stop
;-----------------------------------------------------------------------------
;
;	ȃf[^[ւ̃|C^[ƃTCYE
;
;(in)	ax = 2000h
;
;(out)	es:di = pointer to music data
;	dx:cx = music data buffer size
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	݂̉tԂ̏E
;
;(in)	ax = 2001h
;
;(out)	ax    = 0 ~
;	      = 1 t
;	bp    = 0
;
;(Break) df
;
;-----------------------------------------------------------------------------
;
;	total step ̏E
;
;(in)	ax = 2002h
;
;(out)	dx:ax = total step
;	bp    = 0
;
;	total step ͋ȂIĂiݑ܂BVȋȂX^[gA
;	hCo[I܂Ŏ~܂܂B
;
;-----------------------------------------------------------------------------
;
;	music timing flag ̏E
;
;(in)	ax = 2003h
;
;(out)	dx = music timing flag
;	bp = 0
;
;	Ȓ music timing flag Őݒ肵lvOŏE邽߂̂
;	łBmsdrv4 ͂̒l͈̏؂܂̂ŁAݒƏEg
;	total step ł̓^C~OƂȂƂɂgpB
;
;-----------------------------------------------------------------------------
;
;	music timing flag ̐ݒ
;
;(in)	ax = 2004h
;	dx = music timing flag
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	track f[^[ւ̃|C^[ƃTCYE
;
;(in)	ax = 2010h
;
;(out)	es:di = pointer to track data
;	cx    = max track
;	ax    = 1 track size
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	track ̊eւ̃|C^[E
;
;(in)	ax = 2011h
;
;(out)	es:di = track ݂̌ end flag ւ̃|C^[
;	es:si = track ݂̌ program ԍւ̃|C^[ ( si = 0:T|[g )
;	es:bx = track ݂̌̃}XNւ̃|C^[ ( bx = 0:T|[g )
;	ax    = 0
;	cx    = 0
;	dx    = 0
;	bp    = 0
;
;()	msdrv4l.exe ͈ꕔT|[gŁAsi,bx  0 ɂȂ܂B
;
;-----------------------------------------------------------------------------
;
;	ssg f[^[ւ̃|C^[ƃTCYE
;
;(in)	ax = 2020h
;
;(out)	es:di = pointer to ssg data
;	cx    = max program
;	ax    = 1 program size
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	opn f[^[ւ̃|C^[ƃTCYE
;
;(in)	ax = 2030h
;
;(out)	es:di = pointer to opn data
;	cx    = max program
;	ax    = 1 program size
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	ȃX^[g
;
;(in)	ax = 2100h
;
;(out)	bp = 00h
;
;-----------------------------------------------------------------------------
;
;	ȃX^[g ( fade-in )
;
;(in)	ax = 2101h
;	dx = fade-in time ( m second )
;
;(out)	bp = 00h
;
;-----------------------------------------------------------------------------
;
;	wʒu܂ŉt̏̂
;
;(in)	ax = 2102h
;
;(out)	bp = 00h
;
;(out)	bp = 8000h ( msdrv4l.exe )
;
;()	msdrv4l.exe ɂ̓CvgĂ܂Bbp = 8000h Ń^[
;	܂B
;
;-----------------------------------------------------------------------------
;
;	wʒu܂ŉt̉t{̂̂
;
;(in)	ax = 2103h
;
;(out)	bp = 00h
;
;(out)	bp = 8000h ( msdrv4l.exe )
;
;()	msdrv4l.exe ɂ̓CvgĂ܂Bbp = 8000h Ń^[
;	܂B
;
;-----------------------------------------------------------------------------
;
;	wʒu܂ŉtʏ퉉tɂ
;
;(in)	ax = 2104h
;
;(out)	bp = 00h
;
;(out)	bp = 8000h ( msdrv4l.exe )
;
;()	msdrv4l.exe ɂ̓CvgĂ܂Bbp = 8000h Ń^[
;	܂B
;
;-----------------------------------------------------------------------------
;
;	tJnɃ`l[N邩
;
;(in)	ax = 2105h
;	bl = 0  ( ʏ )
;	     1 Ȃ
;
;(out)	bp = 00h
;
;(out)	bp = 8000h ( msdrv4l.exe )
;
;()	msdrv4l.exe ɂ̓CvgĂ܂Bbp = 8000h Ń^[
;	܂B
;
;-----------------------------------------------------------------------------
;
;	tJnɃ`l[N邩E
;
;(in)	ax = 2106h
;
;(out)	bp = 00h
;	bl = 0  ( ʏ )
;	     1 Ȃ
;
;(out)	bp = 8000h ( msdrv4l.exe )
;
;()	msdrv4l.exe ɂ̓CvgĂ܂Bbp = 8000h Ń^[
;	܂B
;-----------------------------------------------------------------------------
;
;	stop pointer ̐ݒ
;
;(in)	ax    = 2107h
;	bx    = track number ( 0 org )
;	es:di = poiner
;
;(out)	bp = 00h
;
;()	msdrv4l.exe ɂ̓CvgĂ܂Bbp = 8000h Ń^[
;	܂B
;
;-----------------------------------------------------------------------------
;
;	ȃXgbv
;
;(in)	ax = 2200h
;
;(out)	bp = 00h
;
;-----------------------------------------------------------------------------
;
;	ȃXgbv ( fade-out )
;
;(in)	ax = 2201h
;	dx = fade-in time ( m second )
;
;(out)	bp = 00h
;
;-----------------------------------------------------------------------------
;	joystick ֘A
;-----------------------------------------------------------------------------
;
;	joystick ̏E
;
;(in)	ah = 30h
;
;(out)	ax = pad ̐ ( opn/opna ɐڑł pad ̐ŁAʏ 2 )
;	bx = sb16/118 ɐڑł analog joystick  stick ( first )
;	      0b = joystick-a  x 
;	      1b = joystick-a  y 
;	      2b = joystick-b  x 
;	      3b = joystick-b  y 
;	cx = sb16/118 ɐڑĂ analog joystick  stick ( first )
;	      0b = joystick-a  x 
;	      1b = joystick-a  y 
;	      2b = joystick-b  x 
;	      3b = joystick-b  y 
;	dx = sb16/118 ɐڑł analog joystick  stick ( second )
;	      0b = joystick-a  x 
;	      1b = joystick-a  y 
;	      2b = joystick-b  x 
;	      3b = joystick-b  y 
;	si = sb16/118 ɐڑĂ analog joystick  stick ( second )
;	      0b = joystick-a  x 
;	      1b = joystick-a  y 
;	      2b = joystick-b  x 
;	      3b = joystick-b  y 
;	di = 0
;	bp = 00h
;
;()	 function ̏͏d̂ŉxĂԂƂAxŏ
;	ɂǂƎv܂B
;
;-----------------------------------------------------------------------------
;
;	joystick ( pad ) ̃f[^[E
;
;(in)	ah = 31h
;	al = pad number ( 255 ɂƑSĂ pad ̍vo͂ )
;
;(out)	bp = 0: 
;		ax = pad data
;		      0b = up
;		      1b = down
;		      2b = left
;		      3b = right
;		      4b = button 1
;		      5b = button 2
;
;	bp = 1: pad number ُ pad gps
;		ax = 0
;
;-----------------------------------------------------------------------------
;
;	joystick ( analog ) ̃f[^[E
;
;(in)	ah = 32h
;	al = joystick number ( ʏ 0 )
;	bl = stick number
;	      0b = joystick-a  x E邩 ( 0 = Ȃ / 1 =  )
;	      1b = joystick-a  y E邩 ( 0 = Ȃ / 1 =  )
;	      2b = joystick-b  x E邩 ( 0 = Ȃ / 1 =  )
;	      3b = joystick-b  y E邩 ( 0 = Ȃ / 1 =  )
;
;(out)	bp = 0: 
;		ax = joystick button data
;		      0b = button 1
;		      1b = button 2
;		      2b = button 3
;		      3b = button 4
;		cx = joystick-a  x  value ( 0 - 65535 / calibrate ͂
;			܂̂ app sĉ )
;		dx = joystick-a  y  value ( 0 - 65535 / calibrate ͂
;			܂̂ app sĉ )
;		si = joystick-b  x  value ( 0 - 65535 / calibrate ͂
;			܂̂ app sĉ )
;		di = joystick-b  y  value ( 0 - 65535 / calibrate ͂
;			܂̂ app sĉ )
;
;	bp = 1: joystick number ُ joystick gps
;		ax = 0
;		cx = 0
;		dx = 0
;		si = 0
;		di = 0
;
;()	 function ̏͏d̂ŉxĂԂƂAxŏ
;	ɂǂƎv܂B
;
;()	calibrate ͂Ă܂̂ app ŏĉB܂Aē
;	ݍނƂȒlԂƂ܂B
;
;kenji	2 񑱂ăf[^[Eۂ ( x  y ̂Ƃ )  1 ڂ vsync
;	҂邾őv̂悤łB
;
;-----------------------------------------------------------------------------
;	effect
;-----------------------------------------------------------------------------
;
;	effect 
;
;(in)	ah = 40h
;	bx = effect map number ( map ̔ԍŁA㗝s )
;
;(out)	bp = 0: 
;
;	bp = 1: s
;
;-----------------------------------------------------------------------------
;
;	effect 
;
;(in)	ah = 41h
;	bx = effect data number ( effect data ̔ԍ𒼐ڎw )
;
;(out)	bp = 0: 
;
;	bp = 1: s
;
;-----------------------------------------------------------------------------
;
;	effect  ( SĂ̌ʉ~߂ )
;
;(in)	ah = 47h
;
;-----------------------------------------------------------------------------
;
;	effect buffer ւ pointer  size E
;
;(in)	ah = 48h
;
;(out)	es:di = pointer to effect buffer
;	dx:cx = effect buffer size
;	bp = 0
;
;-----------------------------------------------------------------------------
;	ssg effect
;-----------------------------------------------------------------------------
;
;	ssg effect ̐ݒE
;
;(in)	ah = 50h
;
;(out)	bl = ssg effect tone  channel mask
;		0b:ssg0 ( default = 1 )
;		1b:ssg1 ( default = 1 )
;		2b:ssg2 ( default = 1 )
;	bh = ssg effect noise  channel mask
;		0b:ssg0 ( default = 0 )
;		1b:ssg1 ( default = 0 )
;		2b:ssg2 ( default = 1 )
;	cl = ssg effect envelope  channel mask
;		0b:ssg0 ( default = 0 )
;		1b:ssg1 ( default = 0 )
;		2b:ssg2 ( default = 1 )
;	bp = 0
;
;	default ł bl = 111b, bh = 100b, cl = 100b ƂȂĂAtone ݂̂
;	effect  ssg  ch0 - ch2 蓖Ă ( Ȃ̉tꎞIɒf
;	effect  ) Anoise  envelope gpʉ ssg  ch2
;	gp܂Bʏ͂̂܂܂łǂƎv܂B
;
;-----------------------------------------------------------------------------
;
;	ssg effect ݒ
;
;(in)	ah = 51h
;	bl = ssg effect tone  channel mask
;	bh = ssg effect noise  channel mask
;	cl = ssg effect envelope  channel mask
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;	opn effect
;-----------------------------------------------------------------------------
;
;	opn effect ̐ݒE
;
;(in)	ah = 58h
;
;(out)	bx = opn effect notrol  channel mask
;		0b:opn0 ( default = 1 )
;		1b:opn1 ( default = 1 )
;		2b:opn2 ( default = 1 )
;		3b:opn3 ( default = 0 )
;		4b:opn4 ( default = 0 )
;		5b:opn5 ( default = 0 )
;	cx = opn effect ch3only  channel mask
;		0b:opn0 ( default = 0 )
;		1b:opn1 ( default = 0 )
;		2b:opn2 ( default = 1 )
;		3b:opn3 ( default = 0 )
;		4b:opn4 ( default = 0 )
;		5b:opn5 ( default = 0 )
;	bp = 0
;
;	default ł bx = 000111b, cx = 000100b ƂȂĂAʏ effect  
;	opn  ch0 - ch2 蓖Ă ( Ȃ̉tꎞIɒf effect 
;	 ) Ach3  effect mode gpʉ ( operator  parall
;	el  freqency ݒł mode )  opn  ch2 gp܂Bʏ
;	̂܂܂łǂƎv܂B
;
;-----------------------------------------------------------------------------
;
;	opn effect ݒ
;
;(in)	ah = 59h
;	bx = opn effect notrol  channel mask
;	cx = opn effect ch3only  channel mask
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;	opl effect
;-----------------------------------------------------------------------------
;
;	opl effect ̐ݒE
;
;(in)	ah = 60h
;
;(out)	bx = opl0-8 effect  channel mask
;		0b:opl0  ( default = 1 )
;		1b:opl1  ( default = 1 )
;		2b:opl2  ( default = 1 )
;		3b:opl3  ( default = 1 )
;		4b:opl4  ( default = 1 )
;		5b:opl5  ( default = 1 )
;		6b:opl6  ( default = 1 )
;		7b:opl7  ( default = 1 )
;		8b:opl8  ( default = 1 )
;	cx = opl9-10 effect  channel mask
;		0b:opl9  ( default = 1 )
;		1b:opl10 ( default = 1 )
;		2b:opl11 ( default = 1 )
;		3b:opl12 ( default = 1 )
;		4b:opl13 ( default = 1 )
;		5b:opl14 ( default = 1 )
;		6b:opl15 ( default = 1 )
;		7b:opl16 ( default = 1 )
;		8b:opl17 ( default = 1 )
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	opl effect ݒ
;
;(in)	ah = 61h
;	bx = opl0 - opl8   channel mask
;	cx = opl9 - opl17  channel mask
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;	midi effect
;-----------------------------------------------------------------------------
;
;	midi effect ̐ݒE
;
;(in)	ah = 68h
;
;(out)	bl   = midi effect track0 ǂ midi ch Ɋ蓖ĂĂ邩
;						( 0 - 31 / 255 =  )
;	bh   = midi effect track1
;	cl   = midi effect track2
;	ch   = midi effect track3
;	dl   = midi effect track4
;	dh   = midi effect track5
;	di.l = midi effect track6
;	di.h = midi effect track7
;
;-----------------------------------------------------------------------------
;
;	midi effect ݒ
;
;(in)	ah = 69h
;	bl   = midi effect track0 ǂ midi ch Ɋ蓖ĂĂ邩
;						( 0 - 31 / 255 =  )
;	bh   = midi effect track1
;	cl   = midi effect track2
;	ch   = midi effect track3
;	dl   = midi effect track4
;	dh   = midi effect track5
;	di.l = midi effect track6
;	di.h = midi effect track7
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;	sb16 mixer
;-----------------------------------------------------------------------------
;
;	sb16  mixer  data E
;
;(in)	ah = 80h
;	al = mixer address
;
;(out)	bp = 0
;	al = data
;
;-----------------------------------------------------------------------------
;
;	sb16  mixer  data ݒ
;
;(in)	ah = 81h
;	dl = mixer address
;	dh = data
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;	set opn / get opn
;-----------------------------------------------------------------------------
;
;	set ssg ( checkt datasavet )
;
;(in)	ah = 90h
;	dl = ssg address ( ssg reg number)
;	dh = ssg data
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;
;	set ssg ( check datasavet )
;
;(in)	ah = 91h
;	dl = ssg address ( ssg reg number)
;	dh = ssg data
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;
;	set ssg ( check datasave )
;
;(in)	ah = 92h
;	dl = ssg address ( ssg reg number)
;	dh = ssg data
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;
;	ssg mix o
;
;(in)	ah = 93h
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;
;	opn  data E
;
;(in)	ah = 94h
;	al = opn address ( opn reg number )
;
;(out)	ah = data
;
;-----------------------------------------------------------------------------
;
;	opn  data o ( datasave )
;
;(in)	ah = 95h
;	dl = opn address ( opn reg number )
;	dh = data
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;
;	opna  data o      (datasave)
;
;(in)	ah = 96h
;	dl = opn address ( opn reg number )
;	dh = data
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;
;	opn/opna  data o  (datasave)
;
;(in)	ah = 97h
;	dl = opn address ( opn reg number )
;	dh = data
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;
;	opn  data o       (datasavet)
;
;(in)	ah = 98h
;	dl = opn address ( opn reg number )
;	dh = data
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;
;	opna  data o      (datasavet)
;
;(in)	ah = 99h
;	dl = opn address ( opn reg number )
;	dh = data
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;
;	opn/opna  data o  (datasavet)
;
;(in)	ah = 9ah
;	dl = opn address ( opn reg number )
;	dh = data
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;
;	ch3 mode(=timer)o
;
;(in)	ah = 9bh
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;	set opn / get opn ( get pointer )
;-----------------------------------------------------------------------------
;
;	pointer E ( ł far call ł )
;	set ssg ( checkt datasavet )
;
;(in)	ah    = a0h
;
;(out)	es:di = far pointer
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	pointer E ( ł far call ł )
;	set ssg ( check datasavet )
;
;(in)	ah    = a1h
;
;(out)	es:di = far pointer
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	pointer E ( ł far call ł )
;	set ssg ( check datasave )
;
;(in)	ah    = a2h
;
;(out)	es:di = far pointer
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	pointer E ( ł far call ł )
;	ssg mix o
;
;(in)	ah    = a3h
;
;(out)	es:di = far pointer
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	pointer E ( ł far call ł )
;	opn  data E
;
;(in)	ah    = a4h
;
;(out)	es:di = far pointer
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	pointer E ( ł far call ł )
;	opn  data o ( datasave )
;
;(in)	ah    = a5h
;
;(out)	es:di = far pointer
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	pointer E ( ł far call ł )
;	opna  data o      (datasave)
;
;(in)	ah    = a6h
;
;(out)	es:di = far pointer
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	pointer E ( ł far call ł )
;	opn/opna  data o  (datasave)
;
;(in)	ah    = a7h
;
;(out)	es:di = far pointer
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	pointer E ( ł far call ł )
;	opn  data o       (datasavet)
;
;(in)	ah    = a8h
;
;(out)	es:di = far pointer
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	pointer E ( ł far call ł )
;	opna  data o      (datasavet)
;
;(in)	ah    = a9h
;
;(out)	es:di = far pointer
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	pointer E ( ł far call ł )
;	opn/opna  data o  (datasavet)
;
;(in)	ah    = aah
;
;(out)	es:di = far pointer
;	bp    = 0
;
;-----------------------------------------------------------------------------
;
;	pointer E ( ł far call ł )
;	ch3 mode(=timer)o
;
;(in)	ah    = abh
;
;(out)	es:di = far pointer
;	bp    = 0
;
;-----------------------------------------------------------------------------
;	lock
;-----------------------------------------------------------------------------
;
;	msdrv lock number E
;
;(in)	ah = c0h
;
;(out)	bx = msdrv lock number
;	bp = 0
;
;()	msdrv Ɉˑ풓 tool ݂̂ msdrv 풓̂h
;	߂̕łB
;	msdrv lock number  msdrv ̏풓 0 ɂ܂B 0 ̂Ƃ
;	 msdrv ̏풓͏o܂B
;	e풓 tool ͏풓 function-c2h gp msdrv lock number  i
;	nc ܂Bɂ msdrv ͏풓łȂȂ܂B functi
;	on-c0h Ō݂ msdrv lock number EAێĂ܂B
;	e풓 tool ͏풓 function-c0h gp msdrv lock number 
;	EA풓ɕێĂ msdrv lock number Ɠl check 
;	܂BlςĂꍇɂ͏풓Ă͂܂Bl
;	Ώ풓Afunction-c3h  msdrv lock number  dec ܂B
;	邱ƂɂA{ȂłȂ풓 tool ( msdrv ܂ ) 
;	邱ƂȂ܂B
;
;-----------------------------------------------------------------------------
;
;	msdrv lock number ݒ肷
;
;(in)	ah = c1h
;	bx = msdrv lock number
;
;(out)	bp = 0
;
;()	ʏA funciton ͎gpׂł͂܂B
;
;-----------------------------------------------------------------------------
;
;	msdrv lock number  inc 
;
;(in)	ah = c2h
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;
;	msdrv lock number  dec 
;
;(in)	ah = c3h
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;	msp config
;-----------------------------------------------------------------------------
;
;	pcm driver ̌` msdrv4 ֓`
;
;(in)	ah    = d0h
;	al    = pcm type
;	es:di = pointer to start pcm
;	es:si = pointer to init pcm
;	es:bx = pointer to pcm irq entry
;	es:cx = pointer to release pcm irq
;	es:dx = pointer to reinit pcm irq
;
;(out:ssb-pcm ̏ꍇ)
;	es:di = ssg effect  work ւ pointer
;	ds:si = ssg ɖ߂ ւ pointr
;	cx:ax = ssg  ssg-pcm Ƃďւ pointer
;	dx:bx = stop_ssg_pcm_flag ւ pointer E
;	bp    = 0
;
;(out:wss-pcm ̏ꍇ)
;	es:di = pointer to wss config
;		es:di+0 byte = wss dma channel ( -1 Ȃ疢ݒ )
;	bp    = 0
;
;(out:sb16-pcm ̏ꍇ)
;	es:di = pointer to sb16 info
;		es:di+0 word = sb16 base address
;		es:di+2 byte = sb16 irq channel  ( -1 Ȃ疢ݒ )
;		es:di+3 byte = sb16 dma channel  ( -1 Ȃ疢ݒ )
;	bp    = 0
;
;(out:ȊȌꍇ)
;	bp    = 0
;
;-----------------------------------------------------------------------------
;	opn function
;-----------------------------------------------------------------------------
;
;	opn ̏E 1
;
;(in)	ax = e000h
;
;(out)	ax = {[h̎
;		0:
;		1:opn
;		2:opna
;	bx = {[h̊荞ݔԍ
;		 3:irq3  opn   ( int0  )
;		10:irq10 opn   ( int41 )
;		12:irq12 opn   ( int5  )
;		13:irq13 opn   ( int6  )
;	bp = 0
;
;	Ɍ݂ opn ̎ނԂ܂B118  opl mode ̂Ƃɂ 0 ɂȂ
;	܂B
;	{[h̊荞ݔԍ́AfBbvXCb`Ŏw肳ꂽlłBݎgp
;	Ă銄荞ݔԍł͂܂B
;
;-----------------------------------------------------------------------------
;
;	opn  port E
;
;(in)	ax = e008h ( or ah = 12h )
;
;(out)	ax = opn0 reg port
;	bx = opn0 data port
;	cx = opn1 reg port
;	dx = opn1 data port
;	si = 0 ( reserve )
;	di = 0 ( reserve )
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	opn  port ݒ
;
;(in)	ax = e009h ( or ah = 13h )
;	di = opn0 reg port ( -1 Ȃݒ肵Ȃ )
;	bx = opn0 data port ( -1 Ȃݒ肵Ȃ )
;	cx = opn1 reg port ( -1 Ȃݒ肵Ȃ )
;	dx = opn1 data port ( -1 Ȃݒ肵Ȃ )
;	si = -1
;
;	bp = 0
;
;-----------------------------------------------------------------------------
;	opl function
;-----------------------------------------------------------------------------
;
;	opl ̏E
;
;(in)	ax = e100h
;
;(out)	ax = {[h̎
;		0 / 
;		1 / opl2
;		2 / opl2+opl2
;		3 / opl3
;	bp = 0
;
;	Ɍ݂ opn ̎ނԂ܂B118  opl mode ̂Ƃɂ 3 ɂȂ
;	܂B
;
;-----------------------------------------------------------------------------
;
;	opl  port E
;
;(in)	ax = e108h
;
;(out)	ax = opl2 reg port
;	bx = opl2 data port
;	cx = opl2/3 reg port
;	dx = opl2/3 data port
;	si = 0 ( reserve )
;	di = 0 ( reserve )
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	opl  port ݒ
;
;(in)	ax = e109h ( or ah = 13h )
;	di = opl2 reg port ( -1 Ȃݒ肵Ȃ )
;	bx = opl2 data port ( -1 Ȃݒ肵Ȃ )
;	cx = opl2/3 reg port ( -1 Ȃݒ肵Ȃ )
;	dx = opl2/3 data port ( -1 Ȃݒ肵Ȃ )
;	si = -1
;
;	bp = 0
;
;-----------------------------------------------------------------------------
;	118 function
;-----------------------------------------------------------------------------
;
;	118 ̏E
;
;(in)	ax = f000h
;
;(out)	al = 118 Ă邩
;		 0b: 0:118 tĂȂ
;		     1:118 tĂ
;		 1b: 0:118-opna mode
;		     1:118-opl mode
;		 2b: 0:118-opna mode ɂłȂ
;		     1:118-opna mode ɂł
;		 3b: 0:118-opl mode ɂłȂ
;		     1:118-opl mode ɂł
;		 4b: 0:118-wss gpłȂ
;		     1:118-wss gpł
;		 5b: 0:118-joystick gpłȂ
;		     1:118-joystick gpł
;		 6b: 0:118-midi gpłȂ
;		     1:118-midi gpł (  )
;		 7b: reserved
;	ah = 0 ( reserved )
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	118-opna / 118-opl ̐؂ւ
;
;sb16  118 ̂Q̏ꍇA118  opl mode ֐؂ւ邱Ƃ͏oȂB
;
;()	118  opl mode ɂꍇAn[h̎dlɂ opn 荞݂gpł
;	ȂȂ܂BȑO opn 荞݂gpĂꍇAI timer0 
;	gp܂B
;
;(in)	ax = f001h
;	dl = mode
;		0:opna mode
;		1:opl mode
;
;(out)	bp = 0
;
;-----------------------------------------------------------------------------
;	sb function
;-----------------------------------------------------------------------------
;
;	sb ̏E 1
;
;(in)	ax = f100h
;
;(out)	ax = {[h̎
;		0:
;		1:sb1.0/1.5
;		2:sb2.0
;		3:sbpro
;		4:sbpro2
;		5:sb16,sbawe32
;	bp = 0
;
;-----------------------------------------------------------------------------
;
;	sb  base address port E
;
;(in)	ah = f108h ( or ah = 15h )
;
;(out)	ax = sb base address
;	bx = 0 ( reserve )
;	cx = 0 ( reserve )
;	dx = 0 ( reserve )
;	si = 0 ( reserve )
;	di = 0 ( reserve )
;	BP = 0
;
;-----------------------------------------------------------------------------
;
;	sb  base address port ݒ
;
;(in)	ah = f109h ( or ah = 16h )
;	di = sb base address
;	bx = -1
;	cx = -1
;	dx = -1
;	si = -1
;
;(out)	BP = 0
;


==============================================================================
==============================================================================
	track f[^[
==============================================================================
==============================================================================


yTvz
	@e track Ɉȉ̃f[^[܂B̃f[^[̌ _midi_ch 
	̒lɂČ߂ꂽAssg/opn/opl/midi  4 type ʃf[^[̂ǂ
	܂A͔JłB


_CH_POINTER	DD	?		;  ms data ւ pointer
_DRIVER_MODE	DB	?		; driver mode
					;   0 = 4 byte mode keyNO/step/gate/vel
					;   1 = 3 byte mode keyNO/step/gate
_MLOOP_SP	DW	?		; loop  stack pointer
_MLOOP_DATA0	DD	?		; loop0 ̖߂ꏊ pointer
_MLOOP_FLAG0	DB	?		; loop0 ̎c
_MLOOP_DATA1	DD	?		; loop1 ̖߂ꏊ pointer
_MLOOP_FLAG1	DB	?		; loop1 ̎c
_MLOOP_DATA2	DD	?		; loop2 ̖߂ꏊ pointer
_MLOOP_FLAG2	DB	?		; loop2 ̎c
_MLOOP_DATA3	DD	?		; loop3 ̖߂ꏊ pointer
_MLOOP_FLAG3	DB	?		; loop3 ̎c
_MLOOP_DATA4	DD	?		; loop4 ̖߂ꏊ pointer
_MLOOP_FLAG4	DB	?		; loop4 ̎c
_MLOOP_DATA5	DD	?		; loop5 ̖߂ꏊ pointer
_MLOOP_FLAG5	DB	?		; loop5 ̎c
_MLOOP_DATA6	DD	?		; loop6 ̖߂ꏊ pointer
_MLOOP_FLAG6	DB	?		; loop6 ̎c
_MLOOP_DATA7	DD	?		; loop7 ̖߂ꏊ pointer
_MLOOP_FLAG7	DB	?		; loop7 ̎c
_PITCH_BEND	DW	?		; sb`xh
_PORTAMENTO	DW	?		; |^g̒l
_PORTAMENTO_VAL	DW	?		; |^g̕
_PORTAMENTO_END	DW	?		; |^g̍ŏIn(0=|^Ȃ)
_VOL_DATA	DB	?		; volume
_STEP		DB	?		; c step
_MIDI_CH	DB	?		; o̓`l
_press_flag	db	?		; press data gpĂŒ
_press_data	db	?		; press end ޑÕf[^[
_press_pointer	dd	?		; press data ̏Iɖ߂ꏊ


==============================================================================
==============================================================================
	.ssg file
==============================================================================
==============================================================================


yTvz
	@1  program ( F ) ͉Ff[^[ƖOf[^[ 2 琬
	Ă܂B 1  .ssg file ɂ 256 program ̃f[^[
	Ă܂BȂAŌ program ̓GfBbgpłB


y.ssg t@C̍\z
	0000h Ff[^[ ( 1 program = 16 byte / 16 byte * 256 program )
	1000h Of[^[ ( 1 program = 12 byte / 12 byte * 256 program )
	1c00h end


yFf[^[z
	@1 program  16 oCgÂFf[^[݂܂BȉɃf[^[`
	L܂B

    0000hw aco & pco & pdelay
              |D15 D14 D13 D12 D11|D10  D9  D8  D7  D6| D5  D4  D3  D2  D1  D0|
              |        aco        |        pco        |         pdelay        |
    0002hw pm & dr & sr
              |D15 D14 D13 D12 D11 D10| D9  D8  D7  D6  D5| D4  D3  D2  D1  D0|
              |           pm          |         dr        |         sr        |
@@0004hb pwave & psp
                                              | D7  D6  D5| D4  D3  D2  D1  D0|
                                              |   pwave   |        psp        |
@@0005hb tone & noise & nm1 ( nm  1 bit ) & noiseg
                                           | D7 | D6  | D5| D4  D3  D2  D1  D0|
                                           |tone|noise|nm1|    noiseg    |
    0006hw rrl ( rr  0 - 1 bit ) & sl & am & adelay
              |D15 D14|D13 D12 D11 D10| D9  D8  D7  D6| D5  D4  D3  D2  D1  D0|
              | qqL |      rk     |     `l      |      `cdk`x     |
@@0008hb awave & asp
                                              | D7  D6  D5| D4  D3  D2  D1  D0|
                                              |   awave   |        asp        |
    0009hb nm0 ( nm  0 bit ) & rrh ( rr  2 - 3 bit ) & ar
                                              | D7| D6  D5| D4  D3  D2  D1  D0|
                                              |nm0|  rrh  |         ar        |
    000ahb afreq & pfreq
                                              | D7  D6  D5  D4| D3  D2  D1  D0|
                                              |     afreq     |     pfreq     |
    000bhb nwave & nsp
                                              | D7  D6  D5| D4  D3  D2  D1  D0|
                                              |   nwave   |        nsp        |

    000chW nm3,nm2 ( nm  2 - 3 bit ) & nfreq & nco & ndelay
             |D15 D14| D13 D12 D11 D10| D9  D8  D7  D6| D5  D4  D3  D2  D1  D0|
             |NM3 NM2|      nfreq     |       nco     |         ndelay        |
    000ehb gp
    000fhb gp


yOf[^[z
	@1 program  12 oCgÂOf[^[݂܂Bascii ŁA
	󔒂 " " ( 20h ) Ŗ܂Ă܂BRg[R[h͊܂܂Ȃ
	B


==============================================================================
==============================================================================
	.opn file
==============================================================================
==============================================================================


yTvz
	@1  program ( F ) ͉Ff[^[ƖOf[^[ 2 琬
	Ă܂B 1  .opn file ɂ 256 program ̃f[^[
	Ă܂BȂAŌ program ̓GfBbgpłB


y.opn t@C̍\z
	0000h Ff[^[ ( 1 program = 48 byte / 48 byte * 256 program )
	3000h Of[^[ ( 1 program = 12 byte / 12 byte * 256 program )
	3c00h end


yFf[^[z
	@1 program  48 oCgÂFf[^[݂܂BȉɃf[^[`
	L܂BFf[^[̍ŌɉF type ĂAɂ o
	pn / opl ̔ʂo܂B


yopn mode  ( F type = 0 ) z
    0000hb fb/alg
                                              | D7  D6| D5  D4  D3| D2  D1  D0|
                                              |gp |     fb    |    alg    |
    0001hb op1  dt & mt
    0002hb op3  dt & mt
    0003hb op2  dt & mt
    0004hb op4  dt & mt
                                              | D7| D6  D5  D4| D3  D2  D1  D0|
                                              | |     dt    |       mt      |
    0005hb op1  tl
    0006hb op3  tl
    0007hb op2  tl
    0008hb op4  tl
                                              | D7| D6  D5  D4  D3  D2  D1  D0|
                                              | |             tl            |
    0009hb op1  ks & ar
    000Ahb op3  ks & ar
    000Bhb op2  ks & ar
    000Chb op4  ks & ar
                                              | D7  D6| D5| D4  D3  D2  D1  D0|
                                              |   ks  | |         ar        |
    000Dhb op1  amon & dr
    000Ehb op3  amon & dr
    000Fhb op2  amon & dr
    0010hb op4  amon & dr
                                              | D7 |D6  D5| D4  D3  D2  D1  D0|
                                              |amon|gp|         dr        |
    0011hb op1  sr
    0012hb op3  sr
    0013hb op2  sr
    0014hb op4  sr
                                              | D7  D6  D5| D4  D3  D2  D1  D0|
                                              |   gp  |         sr        |
    0015hb op1  sl & rr
    0016hb op3  sl & rr
    0017hb op2  sl & rr
    0018hb op4  sl & rr
                                              | D7  D6  D5  D4| D3  D2  D1  D0|
                                              |       sl      |       rr      |
    0019hb psp          ( ʑϒx )
    001Ahb pco          ( ʑϒ )
    001Bhb pm           ( ʑϒx )
    001Chb pdelay       ( ʑϒx )
    001Dhb pwave        ( ʑϒg` )
    001Ehb asp          ( Uϒx )
    001Fhb aco          ( Uϒ )
    0020hb am           ( Uϒx )
    0021hb adelay       ( Uϒx )
    0022hb awave        ( Uϒg` )
           & as         ( U lfo  op mask )
                                              | D7| D6| D5| D4| D3  D2  D1  D0|
                                              |op4|op2|op3|op1|      awave    |
    0023hb ams & pms & lr ( lf  00b ɌŒ )
                                              | D7  D6| D5  D4| D3| D2  D1  D0|
                                              | lr=00 |  ams  | |    pms    |
						d3 ͖gpłB
    0024hb afreq & pfreq
                                              | D7  D6  D5  D4| D3  D2  D1  D0|
                                              |      afreq    |      pfreq    |
    0025hb gp
    0026hb gp
    0027hb gp
    0028hb gp
    0029hb gp
    002ahb gp
    002bhb gp
    002chb gp
    002dhb gp
    002ehb gp
    002fhb F type ( opn/opna mode )
                                              | D7  D6  D5  D4  D3  D2  D1  D0|
                                              |  0   0   0   0   0   0   0   0|


ysb16  opl mode  ( F type = 1 ) z
	@2op mode ɂ op3  op4 Ɋւp[^[ƂȂ܂B

    0000hb fb/cnt
                                              | D7  D6| D5  D4  D3| D2 |D1  D0|
                                              |gp |     fb    ||  cnt |
    0001hb op1  mt
    0002hb op2  mt
    0003hb op3  mt
    0004hb op4  mt
                                              | D7| D6  D5  D4| D3  D2  D1  D0|
                                              | |       |       mt      |
    0005hb op1  tl
    0006hb op2  tl
    0007hb op3  tl
    0008hb op4  tl
                                              | D7| D6  D5  D4  D3  D2  D1| D0|
                                              | |           tl          | |
    0009hb op1  ks & ar
    000Ahb op2  ks & ar
    000Bhb op1  ks & ar
    000Chb op4  ks & ar
                                              | D7  D6| D5| D4  D3  D2  D1| D0|
                                              |   ks  | |       ar      | |
    000Dhb op1  am & dr
    000Ehb op2  am & dr
    000Fhb op3  am & dr
    0010hb op4  am & dr
                                              | D7 |D6  D5| D4  D3  D2  D1| D0|
                                              | am |gp|       dr      | |
    0011hb op1  vib & egt & ksr & ws
    0012hb op2  vib & egt & ksr & ws
    0013hb op3  vib & egt & ksr & ws
    0014hb op4  vib & egt & ksr & ws
                                              | D7  D6| D5| D4| D3| D2  D1  D0|
                                              |gp |vib|egt|ksr|     ws    |
    0015hb op1  sl & rr
    0016hb op2  sl & rr
    0017hb op3  sl & rr
    0018hb op4  sl & rr
                                              | D7  D6  D5  D4| D3  D2  D1  D0|
                                              |       sl      |       rr      |
    0017hb gp
    0018hb gp
    0019hb psp          ( ʑϒx )
    001Ahb pco          ( ʑϒ )
    001Bhb pm           ( ʑϒx )
    001Chb pdelay       ( ʑϒx )
    001Dhb pwave        ( ʑϒg` )
    001Ehb asp          ( Uϒx )
    001Fhb aco          ( Uϒ )
    0020hb am           ( Uϒx )
    0021hb adelay       ( Uϒx )
    0022hb awave        ( Uϒg` )
           & as         ( U lfo  op mask )
                                              | D7  D6  D5  D4| D3  D2  D1  D0|
                                              |       as      |      awave    |
    0023hb gp
    0024hb afreq & pfreq
                                              | D7  D6  D5  D4| D3  D2  D1  D0|
                                              |      afreq    |      pfreq    |
    0025hb gp
    0026hb gp
    0027hb gp
    0028hb gp
    0029hb gp
    002ahb gp
    002bhb gp
    002chb gp
    002dhb gp
    002ehb gp
    002fhb F type ( opl2/opl3  2op/4op mode )
                                              | D7  D6  D5  D4  D3  D2  D1  D0|
                                              |  0   0   0   0   0   0   0   1|


yOf[^[z
	@1 program  12 oCgÂOf[^[݂܂Bascii ŁA
	󔒂 " " ( 20h ) Ŗ܂Ă܂BRg[R[h͊܂܂Ȃ
	B


==============================================================================
==============================================================================
	.ms file
==============================================================================
==============================================================================


y.ms file header z
	@.ms file header  size ͌v 00a0h byte łBe track ւ far poin
	ter Ă܂BȂAo[Wł 90h ` 9bh  S 0 ɂȂ
	Ă܂BRo[^[̃c[Ƃɂ́Ãf[^[ 0 ̎
	mFĉB

	0000hd  track1  ւ̃|C^[ ( far pointer )
	0004hd  track2  ւ̃|C^[ ( far pointer )
	0008hd  track3  ւ̃|C^[ ( far pointer )
	                     .
	                     .
	                     .
	008chd  track36 ւ̃|C^[ ( far pointer )
	0090hd  o[Wł͕K 0
	0094hd  o[Wł͕K 0
	0098hd  o[Wł͕K 0
	009chd  file size ( dword size / not far pointer )
	00a0h	end


ytrack data ̏Ӂz
	@track data  4 byte Pʂ̃f[^[ō\Ă܂Btrack data 
	ѕ͕K track łȂĂ͂Ȃ܂Bȉ̂悤Ȓu͕s
	B
		track1 data
		track3 data
		track2 data
	@܂ .ms file header f[^[wƂ֎~܂BK
	f[^[悤ɂĉB


ytrack dataz
	@track data  4 byte Pʂ̃f[^[łBȉ format L܂B

    +-------------------------+---+----------------+--------------+-----------+
    |name                     |1b |2byte           |3byte         |4byte      |
    +-------------------------+---+----------------+--------------+-----------+
    |key                      |00h|step            |gate          |vel        |
    |                         |01h|step            |gate          |vel        |
    |                         | . |step            |gate          |vel        |
    |                         | . |step            |gate          |vel        |
    |                         | . |step            |gate          |vel        |
    |                         |7fh|step            |gate          |vel        |
    +-------------------------+---+----------------+--------------+-----------+
    |set time base            |80h|time base low   |time base high|9eh        |
    |sb16 command             |81h|data 0          |data 1        |data 2     |
    |  change 2op mode        |81h|00h             |00h           |00h        |
    |  change 4op mode(*1)    |81h|00h             |00h           |01h        |
    |  ymf232 y command (a1=0)|81h|80h             |reg address   |data       |
    |  ymf232 y command (a1=1)|81h|81h             |reg address   |data       |
    |program change           |82h|program number  |9eh           |9eh        |
    |set tempo                |8ah|tempo data      |9eh           |9eh        |
    |ssg program              |8ch|program num     |data num      |data       |
    |opn program              |8eh|program num     |data num      |data       |
    |y command                |94h|opn reg number  |opn reg data  |9eh        |
    |no operation             |96h|?               |?             |9eh        |
    |loop end                 |9bh|loop number     |9eh           |9eh        |
    |loop start               |9ch|9eh             |9eh           |9eh        |
    |set track detune(ssg/opn)|9dh|detune value    |9eh           |9eh        |
    |no operation             |9eh|9eh             |9eh           |9eh        |
    |set pan                  |9fh|pan value       |9eh           |9eh        |
    |set pitch bend           |a4h|value low       |value high    |9eh        |
    |set hard lfo             |a6h|data            |9eh           |9eh        |
    |set max track            |a8h|max track       |9eh           |9eh        |
    |set ch3 mode             |a9h|ch3 mode data   |9eh           |9eh        |
    |set ch3 op mask          |aah|mask data       |9eh           |9eh        |
    |set pitch lfo patameter  |abh|parameter number|data          |9eh        |
    |set amp lfo patameter    |ach|parameter number|data          |9eh        |
    |set portamento value     |adh|value low       |value high    |9eh        |
    |set portamento end value |aeh|value low       |value high    |9eh        |
    |set now portamento value |afh|value low       |value high    |9eh        |
    |exclusive sum clear      |c2h|9eh             |9eh           |9eh        |
    |send exclusive datar     |c3h|send data       |9eh           |9eh        |
    |send exclusive sum       |c4h|9eh             |9eh           |9eh        |
    |set opna rhy data        |d0h|step            |rhythm data   |9eh        |
    |set opna rhy bass datad  |d1h|bass data       |9eh           |9eh        |
    |set opna rhy snare data  |d2h|snare data      |9eh           |9eh        |
    |set opna rhy top data    |d3h|top data        |9eh           |9eh        |
    |set opna rhy hh data     |d4h|hh data         |9eh           |9eh        |
    |set opna rhy tom data    |d5h|tom data        |9eh           |9eh        |
    |set opna rhy rim data    |d6h|rim data        |9eh           |9eh        |
    |set rolbase              |ddh|step            |address msb   |address    |
    |set rolpara              |deh|step            |address lsb   |data       |
    |set roldev               |dfh|step            |device id     |model id   |
    |bank program             |e2h|step            |program number|bank number|
    |set midi channel         |e6h|step            |midi channel  |9eh        |
    |set gradation tempo      |e7h|step            |tempo data(*2)|no use(*3) |
    |after c                  |eah|step            |pressure      |9eh        |
    |midi control             |ebh|step            |data          |data       |
    |program change with step |ech|step            |program number|9eh        |
    |after k                  |edh|step            |key           |data       |
    |set pitch bend with step |eeh|step            |value low     |value high |
    |track end                |feh|9eh             |9eh           |9eh        |
    |music end                |ffh|9eh             |9eh           |9eh        |
    +-------------------------+---+----------------+--------------+-----------+

(*1)	@midi channel  112,114,116,121,123,125  channel Ŏw\ 4op 
	mode ɂƂ channel ̒ channel gps\ɂȂ܂B
	܂ 2op mode Ȃ 2channel ƂĎgp\ȕ 4op mode ɂ 1ch
	annel ɂȂƌƂłBȂAftHgł͑S 2op mode łB
(*2)	@ȑO set tempo R}hŐݒ肳ꂽ tempo * tempo data / 64 
	 tempo ߂BƂΈȑO tempo = 120  tempo data = 
	128  2 { 240 ƂȂB̌ tempo data = 64 Ƃƌ 120 
	ɖ߂Bset gradation tempo R}h tempo ݒ肵ĂǍƂ
	 tempo ͕ύXꂸAset tempo R}hɂĕύXB
(*3)	@̃p[^[͖Bʏ 0 ɐݒ肷B

==============================================================================
==============================================================================
	.msf file
==============================================================================
==============================================================================


y.msf file header z
	@.msf file header  .mf file header ƓłB


ytrack dataz
	@track data  .ms ƈႢAϒłB.ms file  9eh Sč폜
	܂BƂ΁Aset tempo ( 8ah )  .ms file ł
		8ah,tempo data,9eh,9eh
	 4 byte łA.msf file ł
		8ah,tempo data
	 2 byte R}hƂȂ܂BȂA9eh g 1 byte  nop Ƃċ@\
	܂B

	@̑A.msf file ł̓f[^[邽߂ key f[^[ vel 
	폜郂[h܂B̏ꍇAvol R}h vel w肷邱
	ɂȂ܂B
	@ms2msf ͎I vel  / vel Ȃ ̂Ȃ܂B
	̃[h؂ւR}h set driver mode łB̃R}h 2
	byte R}hłBȉ format L܂B

    +-------------------------+---+----------------+--------------+-----------+
    |name                     |1b |2byte           |3byte         |4byte      |
    +-------------------------+---+----------------+--------------+-----------+
    |set vol                  |85h|vel             | ---          | ---       |
    |set driver mode          |8bh|mode(0=with vel)| ---          | ---       |
    |nop                      |9eh| ---            | ---          | ---       |
    +-------------------------+---+----------------+--------------+-----------+
    |key                      |00h|step            |gate          | ---       |
    |( in case                |01h|step            |gate          | ---       |
    |  driver mode = 1 )      | . |step            |gate          | ---       |
    |                         | . |step            |gate          | ---       |
    |                         | . |step            |gate          | ---       |
    |                         |7fh|step            |gate          | ---       |
    +-------------------------+---+----------------+--------------+-----------+
    |key                      |00h|step            |gate          |vel        |
    |( in case                |01h|step            |gate          |vel        |
    |  driver mode = 0 )      | . |step            |gate          |vel        |
    |                         | . |step            |gate          |vel        |
    |                         | . |step            |gate          |vel        |
    |                         |7fh|step            |gate          |vel        |
    +-------------------------+---+----------------+--------------+-----------+

	@ȉ̃f[^[ 4 byte Pʂł͂܂B

    +-------------------------+-+------------------------------+
    |name                     | |data                          |
    +-------------------------+-+------------------------------+
    |press data(*1)           |0|83h                           |
    |                         |1|start pointer (32 bit / low)  |
    |                         |2|start pointer                 |
    |                         |3|start pointer                 |
    |                         |4|start pointer (high)          |
    |                         |5|end pointer (32 bit / low)    |
    |                         |6|end pointer                   |
    |                         |7|end pointer                   |
    |                         |8|end pointer (high)            |
    +-------------------------+-+------------------------------+
    |press end(*1)            |0|84h                           |
    +-------------------------+-+------------------------------+
    |ssg packet(*2)           |0|8dh                           |
    |                         |1|program num                   |
    |                         |2|data num                      |
    |                         |3|length                        |
    |                         |4|data...                       |
    +-------------------------+-+------------------------------+
    |opn packet(*2)           |0|8fh                           |
    |                         |1|program num                   |
    |                         |2|data num                      |
    |                         |3|length                        |
    |                         |4|data...                       |
    +-------------------------+-+------------------------------+
    |send exclusive packet(*3)|0|c5h                           |
    |                         |1|length (low)                  |
    |                         |2|length (high)                 |
    |                         |3|data...                       |
    +-------------------------+-+------------------------------+

(*1)	@press data ͋ȃf[^[ߖ񂷂邽߂̕ŁAȑOɂ铯f[^[
	 ms2msf ɂ press data ɒu܂B
	msdrv4 ͂
	  1)  track f[^[̐擪 pointer ( far pointer )  end pointer ( 32
	      bit pointer ) Z܂B
	@2)  1 ŋ߂ pointer ̈ʒũf[^[ۑ܂B
	@3)  1 ŋ߂ pointer ̈ʒu press end ( 84h ) ݂܂B
	  4)  ݂̉t pointer ۑ܂B
	  5)  t pointer  track f[^[̐擪 pointer ( far pointer ) 
              start pointer ( 32 bit pointer ) Ẑɂ܂B
	̌͒ʏ퉉tƂȂ܂B msdrv4  press end 
	@6)  press end ( 84h ) ̈ʒu 2 ŕۑf[^[݁A
	@@@߂܂B
	@7)  t pointer  5 ŕۑ̂ +9 ̂Ƃ܂B
	 press data I܂B
(*2)	@ssg packet / opn packet  4 byte Pʂ̃f[^[ł͂܂B
	( 8dh / 8fh ) ̎ɍŏ̃f[^[ԍA 1 byte Ńf[^[̒
	̌ data Ă܂B
(*3)	@send exclusive packet  4 byte Pʂ̃f[^[ł͂܂B ( 
	c5h ) ̎ 1 word Ńf[^[̒Ǎ data Ă
	B


yms2msf ̓z
	@track PʂŏȂ driver mode g܂B


