-
Notifications
You must be signed in to change notification settings - Fork 0
/
zm15.txt
711 lines (491 loc) · 30 KB
/
zm15.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
MEASURE15
MPCM.X
ここではZMUSIC Ver.3.0と組み合わせて使用する
PCMドライバ「MPCM」について解説します。
15.1. MPCM.Xとは
MPCM.XはX680x0シリーズの本体内蔵ADPCM用のドライバである。Z-MUSIC V3と組み
合わせることで、内蔵音源の表現力を上げる事を目標に開発された。
扱えるデータの種類はADPCM/8bitPCM/16bitPCMとなっており、すべての種類の
PCMデータに対して各機能が利用できる。
MPCMファンクションコールを利用することで、ZMUSIC Ver.3.0以外のユーザー
アプリケーション・プログラムからも簡単に利用することが可能となっている。
ここでは代表的な機能とその仕組みについて解説する。
15.1.1.PCMデータの多重再生
X680x0本体のADPCM音源では、通常は1音分のADPCMしか再生できないが、MPCM.Xでは
PCMデータをリアルタイムに合成することで、擬似的に最大25音(演奏用チャンネル16音
+効果音用チャンネル8音+IOCS用チャンネル1音)の再生が可能である。ただし、全チャ
ンネルで再生するためにはかなりのCPUパワーが必要となる。(リアルタイムにPCMを
合成するためには、高速なPCM変換アルゴリズムを用いなければならないが、MPCM.X
ではPCM8.Xとほぼ同じ物を使っている。)
MPCM.Xでは、再生するチャンネルが、音楽演奏用/効果音(IOCS)用と分かれており、
音楽演奏用のチャンネルでは、音程・音量変換やPCMデータのループ再生などが行える
が、少し処理が重くなります。効果音(IOCS)用のチャンネルでは音程・音量変換や
ループ再生などはできないが、その分処理は軽くなっている。用途によって使い分ける
とよい。
15.1.2.音程のリアルタイム変換
MPCM.Xでは、PCMデータの音程をリアルタイムに変換しながら再生を行うことがで
きる。つまり、最初にPCMデータを1つだけ登録しておけば、あとから自由な音程で
そのデータを再生することができる。これまでのように、音程毎のPCMデータを自分で
用意しておく必要はない。また、再生中にも音程を変化させられるため、ピッチモジュ
レーションなども可能となる。
MPCM.XではPCMの音程変換を、PCMデータの再生周波数を擬似的に変化させてやること
で実現している。PCMデータを数個飛ばしで再生してやると、擬似的に再生周波数が上
がり、結果として音程もあがる。逆に、同じPCMデータを数回繰り返して再生した場合、
再生周波数は下がり、音程も下がる。(本来飛ばしたデータや、繰り返したデータの間
を補間してやれば、もう少し高音質な音程変換を行うことが可能なはずであるが、処理
速度との兼ね合いでMPCM.Xでは行っていない。)
処理速度については、PCMデータの原音程(音程変換をしない場合)での再生は専用
ルーチンを使い速度を稼いでいる。しかし、微妙に音程をずらした場合はかなり重く
なる。またADPCMデータの場合は、音程を上げる場合、データの先読みが発生するため
(ADPCMデータは前のデータとの差分でしかなく、飛ばすデータに対してもPCM変換の
計算を行う必要がある)、音程を上げれば上げるほど、CPUパワーを必要とする。
逆に下げれば下げるほど処理は軽くなるが、再生時の音質が悪くなってくる。
8bit/16bitPCMデータは、いくら音程を変化させても処理の重さが変わらないため、
音程変化を頻繁に行う用途の場合はこちらのPCMデータ形式を用いた方がよい。
15.1.3.音量のリアルタイム変換
MPCM.XではPCMデータの音量を、リアルタイムに128段階に変化させることができる。
PCM8.Xなどよりも細かい音量調節が可能となっている。
音量変換は、指定された音量に対応する定数を、PCMデータに対して掛け算すること
で実現している。この掛け算に使われる定数の配列(音量マップと呼ぶ)をユーザーが
作成登録することもでき、ユーザー独自の音量変化を設定することも出来る。例えば、
デフォルトではMPCM.Xの音量変化はPCM8.Xとは異なっているが、音量マップをユーザー
側で作成し、これを登録すればPCM8.X互換の音量変化も可能となる。
音量変化には掛け算命令を使用するため、相当量のCPUパワーを消費する。
15.1.4.ループ再生
MPCM.Xでは、再生するPCMデータの指定範囲を繰り返し再生する事ができます。
ループをうまく利用することによって、小さいPCMデータで長い再生時間を得ることが
出来る。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 8,16ビットPCMデータ方式 ┃
┃ ┃
┃ ┃
┃ X680x0に搭載されるADPCM音源のADPCMデータとはいわばサンプリングしてできた ┃
┃ ┃
┃PCMデータが一種のアルゴリズムで圧縮されていると考えられます。 ┃
┃ ┃
┃音量の変更や周波数変換、合成処理を行うにはこのADPCMデータ方式から線形な┃
┃ ┃
┃PCMデータ方式へ変換しなければなりません。MPCM.Xではこの変換処理を割り込み┃
┃ ┃
┃処理でリアルタイムで行っていますが、もしこの処理を省けるならば、MPCM.Xの ┃
┃ ┃
┃PCM再生処理をかなり軽くすることが出来るはずです。そこでMPCM.XではADPCMでは ┃
┃ ┃
┃ない、無圧縮のPCMデータも再生出来るようになっています。 ┃
┃ ┃
┃ 16ビットPCMデータ方式は符号付き16ビット整数(-32768~32767)により ┃
┃ ┃
┃表現されるデータです。同一音長のADPCMデータの4倍のデータ長になります。┃
┃ ┃
┃ちょうどZVT.Xで'-C'スイッチにより生成されるPCMデータと同じもの ┃
┃ ┃
┃です。1つのデータが2バイト構成であることから必ずデータ長は偶数でなければ ┃
┃ ┃
┃正常に鳴りません。 ┃
┃ ┃
┃ 8ビットPCMデータは方式は同様に符号付き8ビット整数(-128~127)により ┃
┃ ┃
┃表現されるデータです。同一音長のADPCMデータの2倍のデータ長になります。┃
┃ ┃
┃ ZMUSIC Ver.3.0およびZPCNV3.Rではこれら8ビットPCMデータ/16ビット ┃
┃ ┃
┃PCMデータ専用のZMSコマンドが用意されています。(MEASURE4,MEASURE6参照) ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
15.2. MPCM.Xの常駐時に設定出来るコマンドオプション
ZMUSIC Ver.3.0をはじめとするアプリケーションで利用する場合、MPCM.Xをかならず
それらを常駐する前にMPCM.Xを常駐させておかなければならない。
以下にMPCM.X常駐時に設定出来るコマンドオプションを示す。
----------------------------------------
●常駐モード選択
-FH
-FL
本体内蔵のADPCM音源チップ(MSM6258V)の動作周波数を7.8/15.6/31.2kHzから
選択することができる。'-FH'は31.2kHz、'-fl'は7.8kHzでMSM6258Vを動作させる。
本オプションを設定せずに常駐した場合はデフォルトとして15.6kHzで動作する。
'-FH'はADPCM音源チップをクロックアップしたマシンでのみ有効で、高品質の
PCM再生を行える。しかし、単位時間に処理しなければいならないPCMデータ量が、
デフォルト状態の15.6kHzに比べ2倍になるため、それなりのCPUパワーを持った
マシンでないと正しく動作出来ない。
一方、'-FL'では音質は劣化するものの処理が軽くなるため、音質よりも、
より多くの発音を求める場合には有効なオプションとなる。
----------------------------------------
15.3. MPCM.Xの常駐後に設定出来るコマンドオプション
MPCM.Xを、以下に示す、MPCM.X常駐後に設定出来るコマンドオプションを用いて
実行すると、既に常駐しているMPCM.Xに対してアクセスすることが出来る。
----------------------------------------
●常駐解除
-R
MPCM.Xの常駐を解除します。他のアプリケーションにMPCM.Xが占有されている場合は
解除を行えない。現在MPCM.Xを占有しているアプリケーションの一覧は、コマンド
オプション'-S'で参照することが出来る。
----------------------------------------
●デバッグモード切り換え
-D
-D0
-D1
常駐しているMPCM.Xのデバッグモードを切り替える。'-D0'でデバッグモードOFF
(デフォルト)、'-D1'でデバッグモードON、'-D'のみだとON/OFF状態を交互に切り
替える。
デバッグモードにすると、画面に青い帯が表示される。帯の幅がPCMデータを処理
している時間で、この幅の変化で現在の負荷の状態を伺い知ることが出来る。通常は
設定する必要はない。
このコマンドオプションは常駐後も何度も設定変更可能となっている。
----------------------------------------
●MPCM.X常駐ステータスの表示
-S
常駐しているMPCM.Xの現在のステータスを表示する。
----------------------------------------
15.4.MPCM.Xのファンクションコール
MPCM.XのファンクションはMPCM.X常駐時のみ利用することができる。
よって、利用する前には前に必ずMPCM.Xの常駐判定をする必要がある。
MPCM.Xの常駐の判定は、trap #1の指すベクタの手前8バイトが
'MPCM/???'
になっているかどうかで行う。
???の部分はバージョン番号をあらわす文字列で、例えばバージョン番号が
0.20のとき、
'MPCM/020'
のようになる。
例
check_MPCM:
* MPCMの常駐をチェックし、バージョンが0.20より高いかを判定
*
* 判定結果
* d0.l=-1:常駐していない
* = 0:常駐している
* = 1:バージョンが古い
move.l a1,-(sp)
movea.l $84.w,a1
cmpi.l #'MPCM',(a1)
bne not_kept
cmpi.l #'/020',4(a1) *バージョンが0.20より古いか新しいか
bcs ver_too_old *古い時はエラー
moveq.l #0,d0
exit_check_MPCM:
move.l (sp)+,a1
rts
not_kept:
moveq.l #-1,d0
bra exit_check_MPCM
ver_too_old:
moveq.l #1,d0
bra exit_check_MPCM
15.4.1.MPCM.Xのファンクションコールの利用方法
MPCM.Xのファンクションコールには、trap #1を使用する。
例
move.w #n,d0 * n=ファンクションナンバー
lea.l ~,a1 * パラメータが必要であれば設定
move.l #m,d1 * パラメータが必要であれば設定
trap #1
----------------------------------------
■演奏チャンネル用ファンクション
----------------------------------------
ファンクション $00xx M_KEY_ON
機能: 指定の演奏用チャンネルをキーオンする。
引数: d0.w=$0000 + チャンネル番号(0~15,255)
戻り値:なし
備考: PCMデータ登録($02xx)で登録されたデータを再生する。
----------------------------------------
ファンクション $01xx M_KEY_OFF
機能: 指定の演奏用チャンネルをキーオフする。
引数: d0.w=$0100 + チャンネル番号(0~15,255)
戻り値:特に無し
備考: 指定チャンネルのPCMの再生を打ち切る。
----------------------------------------
ファンクション $02xx M_SET_PCM
機能: 指定の演奏用チャンネルにPCMデータを登録する。
引数: d0.w=$0200 + チャンネル番号(0~15,255)
d1.l=0 (予約)
a1.l=PCM情報テーブルアドレス
戻り値:d0.l≧0 正常終了
<0 エラー
備考: 引数のa1.lに指定する、PCM情報テーブルの内容を以下に
示す。
$0000(a1).b=PCM種類
(-1:ADPCM 0:データ無し 1:16bitPCM 2:8bitPCM)
$0001(a1).b=PCMのオリジナルノート番号
(0~127、負の値で原音程固定)
$0002(a1).b=0(予約)
$0003(a1).b=0(予約)
$0004(a1).l=PCMアドレス(絶対番地)
$0008(a1).l=PCMの長さ
$000c(a1).l=ループ開始点のデータ先頭からのオフセット
$0010(a1).l=ループ終了点のデータ先頭からのオフセット
$0014(a1).l=ループ回数(0で無限ループ、通常は1)
PCMの長さ(+$0008)は、PCMの種類に関係無く、バイト単
位で指定する。従って、16bitPCMの場合は必ず2の倍数で
なければならない。同様に、各種ループオフセット(+$000
c,+$0010)も、バイト単位で指定する。各種オフセットは、
PCMデータの先頭からのバイト数で表す。
オリジナルノート番号(+$0001)は、そのPCMの原音程を、
音階のどこに割り付けるかを指定する。例えば、オリジナ
ルノート番号を10として、音程に(10+12)*64+0(ファンク
ション $04xxを参照)を指定すると、1オクターブ上の音
程で再生される。
このファンクションがエラーで帰ってくるのは、16bitP
CM登録時に、アドレス、長さ、ループポインタのいずれか
が奇数である場合などである。
このファンクションでPCMデータを登録しただけでは、
データの再生は行われない。再生するためには、ファンク
ション $00xx(PCM KEY ON)を呼ぶ必要がある。
----------------------------------------
ファンクション $03xx M_SET_FRQ
機能: 指定の演奏用チャンネルのPCM再生周波数を設定する。
引数: d0.w=$0300 + チャンネル番号(0~15,255)
d1.w=再生周波数
0= 3.9kHz
1= 5.2kHz
2= 7.8kHz
3=10.4kHz
4=15.6kHz
5=20.8kHz
6=31.2kHz
戻り値:d0.l≧0 正常終了
<0 エラー
備考: このファンクションで設定する再生周波数と、再生時の
音程は完全に独立している。例えば、元が15.6kHzのデー
タを、原音程、再生周波数7.8kHzとして再生すると、7.8k
Hzで再生される。
d1.w=5、6は、ADPCMをクロックアップしているマシン
に対応したものだが、クロックアップしていないマシンで
も、擬似的に再生する。
----------------------------------------
ファンクション $04xx M_SET_PITCH
機能: 指定の演奏用チャンネルのPCM再生音程を設定する。
引数: d0.w=$0400 + チャンネル番号(0~15,255)
d1.w=音程
0~127(ノート番号)*64+0~64(ディチューン)
FM音源とほぼ同じ考え(4倍はしなくてよい)
戻り値:なし
備考: d1.wのノート番号は、±1で約半音分音程が変化する。
ディチューンはその間をもっと細かく変化させたい場合に
指定する。(半音の間が、64段階に分かれているイメージ
である。)
ファンクション$00xx(PCM KEY ON)で発音した後も、任
意のタイミングで再設定可能である。
----------------------------------------
ファンクション $05xx M_SET_VOL
機能: 指定の演奏用チャンネルのPCM再生音量を設定する。
引数: d0.w=$0500 + チャンネル番号(0~15,255)
d1.b=音量(0-127)
戻り値:なし
備考: d1.wは、音量マップ(ファンクション$8005参照)上のど
の値を音量変換に使用するかを決定している。実際の音量
は、音量マップ上の値をPCMデータに掛け算することで決
定している。
----------------------------------------
ファンクション $06xx M_SET_PAN
機能: 指定の演奏用チャンネルのパンポットを設定する。
引数: d0.w=$0600 + チャンネル番号(0~15,255)
d1.b=PAN
0:無音 1:左 2:右 3:中央 (3段階指定)
$80 + 0(左)~64(中央)~127(右) (128段階指定)
戻り値:なし
備考: 128段階指定の場合、現在のところ、0~31が左、32~95
が中央、96~127が右出力となる。各チャンネル独立して
おらず、最新の設定に全チャンネルが影響される。
----------------------------------------
ファンクション $07xx M_CHG_PCMKIND
機能: 指定の演奏用チャンネルのPCMデータの種類を変更する。
引数: d0.w=$0700 + チャンネル番号(0~15,255)
d1.b=PCM 種類 (-1:ADPCM 0:無し 1:16bitPCM 2:8bitPCM)
戻り値:なし
備考: ファンクション$02xxで登録したPCMデータの種類のみを
変更する。ファンクション$02xxを呼んだ後で、PCMデータ
種類を変更したい場合にのみ使用する。通常は$02xxの方
で指定すること。
----------------------------------------
■効果音チャンネル用ファンクション
----------------------------------------
ファンクション $10xx M_EFCT_OUT
機能: 指定の効果音用チャンネルでPCMを再生する。
引数: d0.w=$1000 + 効果音チャンネル番号(0~7,255, $e0)
d1.l=PCM種類
(-1:ADPCM 0:無し 1:16bitPCM 2:8bitPCM)*$1000000
+音量(現在は64のみ指定可)*$10000
+再生周波数
(0:3.9kHz 1:5.2kHz 2:7.8kHz 3:10.4kHz 4:15.6kHz
5:20.4kHz 6:31.2kHz) * $0100
+PAN(0-3 / $80+0-127)
d2.l=PCM長さ
a1.l=PCMアドレス
戻り値:d0.l≧0 正常終了
<0 エラー
備考: 基本的にIOCSコンパチ。d1.lレジスタのみ拡張されてい
る。音量は無視されるが、将来のために64($40)として呼
び出すこと。それ以外の値で呼んだ場合は将来動作を保証
できない。
また、チャンネル番号に$e0を指定した場合、効果音チ
ャンネルの先頭からファンクション$8005で指定したチャ
ンネル数分、空きを探して再生する。全部ふさがっていた
場合、再生残り部分が一番短いチャンネルで再生される。
この場合、戻り値は実際に割り当てた効果音チャンネル番
号を返す(0~7)。
このファンクションで再生を行った場合、PCM8.Xなどで
行っていた、d2.l=0で発音中止ということは行わず、フ
ァンクション$13xxを利用すること。
----------------------------------------
ファンクション $11xx (reserved)
----------------------------------------
ファンクション $12xx (reserved)
----------------------------------------
ファンクション $13xx M_EFCT_STOP
機能: 指定の効果音用チャンネルの発音を中止する。
引数: d0.w=$1300 + 効果音チャンネル番号(0~7,255)
戻り値:なし
備考: ファンクション$10xxで再生を行ったらこのファンクショ
ンで再生を停止すること。
----------------------------------------
■MPCM制御用ファンクション
----------------------------------------
ファンクション $8000 M_LOCK
機能: MPCMを常駐解除できないように占有する。
引数: d0.w=$8000
a1.l=アプリケーション名を指すの文字列アドレス
戻り値:d0.l=0 占有できた
<0 占有できなかった
備考: MPCMの常駐を前提に自分も常駐するアプリケーションでは、
このファンクションで必ず占有すること。同時に占有でき
る数は32個まで。a1.lに指定するアプリケーション名は、
mpcmの-sスイッチで表示されるものである。文字列の終端
には0.bをおくこと。名前の長さは終端の0.bを含み32byte
までとする。それ以降は無視される。また、先頭に0.bを
おいて、アプリケーション名の省略は行ってはならない。
----------------------------------------
ファンクション $8001 M_FREE
機能: MPCMの占有解除。
引数: d0.w=$8001
a1.l=アプリケーション名の文字列アドレス
戻り値:d0.l=0 占有解除できた
<0 占有されていなかった
備考: ファンクション$8000でMPCMを占有したアプリケーション
は、必ず終了時にこのファンクションで占有解除を行うこ
と。a1.lに指定するアプリケーション名は、ファンクショ
ン$8000で設定したものと同じでなければならない。
----------------------------------------
ファンクション $8002 M_INIT
機能: MPCMの初期化。
引数: d0.w=$8002
戻り値:なし
備考: すべての設定値を初期化してしまうので、呼出には注意。
音源ドライバ等で利用するなら、常駐時に1回だけ呼べば
よい。
----------------------------------------
ファンクション $8003 M_SET_MASK
機能: MPCMのDMA割り込み中のMPU/MFPの割り込みマスクの設定。
引数: d0.w=$8003
d1.l=マスクデータ
≧0 割り込みマスク設定
<0 割り込みマスク収得
戻り値:d0.l=変更前の割り込みマスク
関係ないビット(31~19)は0になる。
備考: d0.lの内訳を以下に説明する。
ビット18~16 : MPU 割り込みレベル(0~7 推奨3以上)
15~ 8 : MFP 割り込みマスクA (IMRA)
7~ 0 : MFP 割り込みマスクB (IMRB)
ビット15~0では、1で割り込み前と同じ状態になる。
(つまり、MFPのIMRA,IMRBとANDをとる)
割り込みについてよく理解してから使用すること。
デフォルトは %00000000_00000011_11011111_00000000
である。
----------------------------------------
ファンクション $8004 M_SET_MODE
機能: MPCMの動作モードの設定。
引数: d0.w=$8004
d1.l=設定データ
≧0 モード設定
<0 モード収得
戻り値:d0.l=動作モード
関係ないビットは0になる。
備考: 現時点では機能しない
----------------------------------------
ファンクション $8005 M_SET_VOLTBL
機能: MPCMの音量マップの設定
引数: d0.w=$8005
d1.l=音量テーブルセレクト
0: 128段階モード
1: 16段階モード(PCM8.X互換)
-1: ユーザー定義
a1.l=ユーザー定義の音量テーブルアドレス
(d1.l=-1の時のみ有効)
戻り値:なし
備考: 音量変換に使う音量マップを設定する。音量マップはフ
ァンクション$05xxで渡されたパラメータ(ここでは@vと表
現することにする)から、実際にPCMデータに掛け算する定
数を計算するために利用されるテーブルである。テーブル
は128個のワードデータからなっており、それぞれが@vに
対応する定数になる。値の単位は1/128である。ユーザー
定義では自由な値に設定できるが、@v64に対応する定数を
128とし、@v64が原音量で再生されるような設定にするの
が望ましい。
なお、MPCMの内部処理の関係で、定数が
16,24,32,40,48,64,80,96,128
160,192,256,320,384,512,640
の場合、処理が高速化されるので、この値をうまく使って
ほしい。
参考として、d1.l=0(128段階) と d1.l=1(16段階)のテ
ーブル内容を以下に示す。
・128段階モードの場合
+0 +1 +2 +3 +4 +5 +6 +7
@v0 16, 17, 18, 19, 20, 21, 22, 23
@v8 24, 25, 26, 27, 28, 29, 30, 31
@v16 32, 33, 34, 35, 36, 37, 38, 39
@v24 40, 41, 42, 43, 44, 45, 46, 47
@v32 48, 50, 52, 54, 56, 58, 60, 62
@v40 64, 66, 68, 70, 72, 74, 76, 78
@v48 80, 82, 84, 86, 88, 90, 92, 94
@v56 96, 100, 104, 108, 112, 116, 120, 124
@v64 128, 132, 136, 140, 144, 148, 152, 156
@v72 160, 164, 168, 172, 176, 180, 184, 188
@v80 192, 200, 208, 216, 224, 232, 240, 248
@v88 256, 264, 272, 280, 288, 296, 304, 312
@v96 320, 328, 336, 344, 352, 360, 368, 376
@v104 384, 400, 416, 432, 448, 464, 480, 496
@v112 512, 528, 544, 560, 576, 592, 608, 624
@v120 640, 656, 672, 688, 704, 720, 736, 752
・16段階モードの場合
+0 +1 +2 +3 +4 +5 +6 +7
@v0 16, 16, 16, 16, 16, 16, 16, 16
@v8 24, 24, 24, 24, 24, 24, 24, 24
@v16 32, 32, 32, 32, 32, 32, 32, 32
@v24 40, 40, 40, 40, 40, 40, 40, 40
@v32 48, 48, 48, 48, 48, 48, 48, 48
@v40 64, 64, 64, 64, 64, 64, 64, 64
@v48 80, 80, 80, 80, 80, 80, 80, 80
@v56 96, 96, 96, 96, 96, 96, 96, 96
@v64 128, 128, 128, 128, 128, 128, 128, 128
@v72 160, 160, 160, 160, 160, 160, 160, 160
@v80 192, 192, 192, 192, 192, 192, 192, 192
@v88 256, 256, 256, 256, 256, 256, 256, 256
@v96 320, 320, 320, 320, 320, 320, 320, 320
@v104 384, 384, 384, 384, 384, 384, 384, 384
@v112 512, 512, 512, 512, 512, 512, 512, 512
@v120 640, 640, 640, 640, 640, 640, 640, 640
----------------------------------------
ファンクション $8006 M_SET_ECHCNT
機能: MPCMの効果音発声数を設定する。
引数: d0.w=$8006
d1.l=効果音発声数(0-8)
戻り値:なし
備考: ファンクション$10xxで、チャンネル番号に$e0を指定し
た場合に、空きを探すチャンネルの範囲を設定する。空き
を探す際に、チャンネル番号 0~d1.l-1 までを調べる。
ファンクション$10xxでチャンネル番号に$e0を使わずに
チャンネル番号を直接指定した場合は、このファンクショ
ンの設定値は無視され、指定通りのチャンネルで演奏され
る。255を指定した場合も同様に無視される。
----------------------------------------
ファンクション $8010 (reserved)
----------------------------------------
ファンクション $8011 (reserved)
----------------------------------------
ファンクション $8012 (reserved)
----------------------------------------
ファンクション $8013 (reserved)
----------------------------------------
15.5.P8EMU.Xとは
P8EMU.XはMPCM.Xを使ってPCM8.Xのエミュレーションを行うソフトウェアで、
ZMUSIC Ver.2.0など、PCM8.Xを前提に製作されたソフトなどをMPCM.Xを用いて
利用する場合などに使用する。ただし、エミュレーションは完全ではないため
PCM8.X対応のすべてのアプリケーションが使用可能になる、というわけではない。
使用する場合には、必ずMPCM.Xを常駐させた後でP8EMU.Xを常駐させなければ
ならない。