NetBSD/pc98$B$K$*$1$k(Bmidi interface$B$K$D$$$F!#(B

NetBSD$B$K$OL$$@!"(Bkernel midi interface$B$O$"$j$^$;$s!#(B
$B$=$3$G!"(BNetBSD/pc98$B$G$O!"<B83E*$J(Binterface$B$r@_$1$^$7$?!#(B

$B8=>u$G$O(BLinux sequecer$B$N(Binterface$B$,I8=`$G$"$C$F!":#8e(BNetBSD$B$,(B
$B$=$l$H0[$J$k<BAu$r$7$F$bI8=`$K$O$J$j$=$&$b$"$j$^$;$s!#(B
$B$3$N;v$r9MN8$7$?>e$G!"(B
  *) IP$BAX$N$h$&$J6K$a$F4pK\E*$+$D%7%s%W%k$J<BAu$K$9$k!#(B
  *) compat/osssound$B$G(BLinux sequecer emulation$B$,<BAu$7$d$9$$$h$&$J!"(B
     $B4pK\AX$H$J$k$h$&$K$9$k!#(B
$B$H$$$&4p=`$G0J2<$N$h$&$K%G!<%?9=B$$rDj$a$^$9!#(B

kernel midi interface$B$K$*$1$k!"A4$F$N(Bmidi$B%G!<%?$O!"(B
$B@hF,$K(Bmidi_packet_header$B9=B$BN$r;}$A$^$9!#(B

struct midi_packet_header {
	u_int16_t mp_code;
	u_int16_t mp_size;
	u_int	mp_ticks;
}

mp_code$B$O%Q%1%C%H$N<oJL$G$"$j!"Bg$-$/J,$1$F#2$D$N(B
 MIDI_PKT_SYSTM
 MIDI_PKT_DATA
$B$N<oJL$,$"$j$^$9!#(B 

MIDI_PKT_SYSTM$B$O(Bmidi kernel interface $B%3%s%H%m!<%kL?NaMQ$N(Bpacket$B$G$"$j!"(B
$B<B:]$K(Bmidi interface$B>e$K$O$J$,$l$^$;$s!#(B
MIDI_PKT_SYSTM | MIDI_TIMER_INIT    kernel$B%?%$%^!<$N=i4|2=(B(0)
MIDI_PKT_SYSTM | MIDI_TIMER_PAUSE   kernel$B%?%$%^!<$N(Bpause
MIDI_PKT_SYSTM | MIDI_TIMER_UNPAUSE kernel$B%?%$%^!<$N(Bunpuase

MIDI_PKT_DATA$B$O<B:]$N(Bmidi data$B$G$9!#%+!<%M%k$O%G!<%?FbMF$K$D$$$F(B
$B$$$C$5$$4XCN$7$^$;$s!#(B 

mp_size$B$O(Bmidi_packet_header$B0J2<$KB3$/%G!<%?$N%5%$%:!#(B

mp_ticks$B$O(B 1ms$BC10L$N(BMIDI_TIMER_INIT$B$+$i$NAjBP;~4V$G$"$j!"(B
$B$3$N;~4V$K<B:]$K(Bmidi interface$B$+$i(Bmidi$B5!4o$K%Q%1%C%H$,Aw$j$@$5$l$^$9!#(B
$B$^$?!"(Bmidi$B5!4o$+$i$NF~NO$N>l9g$O!"Ev3:(Bpacket$B$r<u$1<h$C$?;~4V$G$9!#(B

$B<B:]$K%-!<%\!<%IEy$+$i$/$k(Bmidi packet$B$O!">e5-(Bformat$B$G(B/dev/midi$B$+$i(B
$BFI$_=P$;$^$9!#$3$l$r!"(BSMF mode 0$B$N(Bmidi file$B$K$9$k$N$OHs>o$K4JC1$G$7$g$&!#(B

midi port 0$B$K(Bkeyboard$B$H2;8;$,7R$,$C$F$$$k$H$7$F!"(B
cat /dev/midi0 > midi.data
cat midi.dat > /dev/midi0
$B$G:F@8$G$-$^$9!#(B

*) nplaymidi$B$K$D$$$F(B
SMF format 0 $B$H(B SMF format 1$B$N%U%!%$%k$r:F@8$G$-$^$9!#(B
-g options$B$rIU$1$k$H!"(Bgraphics$BI=<($G?J9T>u67$rI=$7$^$9!#(B
$B$?$@$7!"(B $B$3$N>l9g2hLL$H(Bmidi$B$rF14|$5$;$k$?$a!"N"$G(Bcompile$B$J$I$7$F(B
$BK;$7$$>u67$G$O2;Ht$S$,H/@8$7$^$9!#$3$N$h$&$J>u67$G$O!"(B-g$B$r(B
$B;H$o$J$$$[$&$,NI$$$G$7$g$&!#(B

*) recmidi
$B<g$K(Bmidi$B3Z4o$r(Bin port$B$K7R$2!"(Bout port$B$K2;8;$r7R$2$?>uBV$r(B
$BA[Dj$7$?%W%m%0%i%`$G$9!#(B

In port$B$+$iF~$C$F$/$k(Bmidi$B%G!<%?$r(Bgraphical$B$KI=<($7$?>e$K!"(B
out port$B$G%j%@%$%l%/%H$7$^$9!#(B
$B$^$?!"3F(Bchannel$B$N(Bbank/program number$B$rF0E*$KJQ99=PMh$^$9!#(B

midi keyboard$BEy$N(Bbank/program number$BJQ99$OLLE]$JA`:n$,I,MW$G$9$N$G!"(B
recmidi$B$G9T$&$H3Z$G$7$g$&!#$"$H!"(Benvelope(attack $B%?%$%`!KEy$N(B
NPRN$BL?Na$NH/9T$r%5%]!<%H$9$kM=Dj$G$9!#2;:n$j$K$OIT2D7g$G$9$+$i$M!#(B

*) Midi$B$N(Bresolution$B$K$D$$$F!#(B

Kernel timer$B$O(B10ms$B$,:G>.C10L$G$9$N$G!"$3$l0J>e$N@:EY$OF@$i$l$^$;$s!#(B
$B$3$l$O!"(Bmidi$B$G$OCWL?E*$K@:EY$,0-$$Lu$G$9!#(B
$B0lHLE*$K(Binteligent mode$B$r%5%]!<%H$7$?(Bmpu$B0J30$O!"@:EY$N9b$$(B
timer$B$rB>$+$iF@$k;v$,IT2D7g$G$9!#(B
NetBSD/pc98$B$G$O!"(Bwss$BEk:\5!<o$N(Btimer mode$B$r;HMQ$7$F!"(B1ms$B$N@:EY$r(B
$BF@$k$h$&$K$7$F$"$j$^$9!#(B(temp 120$B$G(B 480$B$NJ,2rG=$,F@$i$l$^$9$M!K(B
$B$3$l$rM-8z$K$9$k$?$a$K$O!"(Bkernel config$B$K(B
psudo-device sndtm
$B$rDI2C$7$F$/$@$5$$!#(B
