-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathzm13.txt
1103 lines (784 loc) · 40.9 KB
/
zm13.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
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
MEASURE13
ワークエリア
ここでは、演奏トラックワークとその他の
ワークの内容についての解説を行います。
ZMUSIC支援ツールを制作する時などに
役立ちます。
13.1. 演奏トラックワーク
13.1.1. 演奏トラックワークの解説を読むにあたって
・演奏トラックのワークの解説は
ワーク名(ワークサイズ) ワークオフセット
{ワークの説明}
の書式で記述されている。ワークサイズは
(.B) バイト
(.W) ワード(2バイト)
(.L) ロングワード(4バイト)
とする。
・同時に使用されることがないと保証されているワーク・アドレスは、重複して
2つ以上のワークが設定されていることがある(例えば1/8モード・ピッチ・
モジュレーションと波形メモリによるピッチ・モジュレーションは同時に
使用できないため、関連ワークは重複するオフセットアドレスに設定されている)。
・解説文中では以下の略号が用いられている。
PM ピッチ・モジュレーション
AM アンプリチュード・モジュレーション
・具体的なワークへのアクセス法はリスト1、リスト2のようにして行う。
リスト1
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃Z_MUSIC macro func *ドライバへのファンクションコール・マクロ ┃
┃ moveq.l func,d1 ┃
┃ trap #3 ┃
┃ endm ┃
┃ ┃
┃ moveq.l #n,d2 *1≦n≦80:トラック番号 ┃
┃ Z_MUSIC #$3c *a0:トラックnの演奏トラックワークの ┃
┃ *先頭アドレス ┃
┃ ┃
┃*アクセス例 ┃
┃ move.w p_gate_time(a0),d0 *トラックnのある瞬間の ┃
┃ *ゲートタイムを得る ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
リスト2
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃Z_MUSIC macro func *ドライバへのファンクションコール・マクロ ┃
┃ moveq.l func,d1 ┃
┃ trap #3 ┃
┃ endm ┃
┃ ┃
┃ moveq.l #1,d2 *トラック番号=1 ┃
┃ Z_MUSIC #$3c *a0:トラック1の演奏トラックワークの ┃
┃ *先頭アドレス ┃
┃ move.l a0,seq_wk_tbl *ベースアドレスとなるのでこれを格納 ┃
┃ ┃
┃ *トラック12のワーク先頭アドレスを求める時 ┃
┃ movea.l seq_wk_tbl(pc),a0 *ベースアドレス取り出し ┃
┃ moveq.l #11,d0 *トラック番号12(内部表現では11) ┃
┃ lsl.w #8,d0 *256倍 ┃
┃ adda.w d0,a0 *a0:トラック12のワーク先頭アドレス ┃
┃*アクセス例 ┃
┃ move.w p_gate_time(a0),d0 *トラックnのある瞬間の ┃
┃ *ゲートタイムを得る ┃
┃ ┃
┃seq_wk_tbl: ds.l 1 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
13.1.2. 演奏トラックワークの解説
p_on_count(.W) $00
現在発音中の音符の音長カウンタ(ステップタイム)。定められたテンポに従って
-1されていく。0になった時点でZMUSICは次の音符を演奏しにいく。
p_gate_time(.W) $02
現在発音中の音符の発音長カウンタ(ゲートタイム)。定められたテンポに従って
-1されていく。0になった時点でZMUSICはキーオフ処理を行う。
p_data_pointer(.L) $04
その時点のZMDコマンドポインタ。ステップタイムが0になるたびに、
そのコマンド長分、増加していく。
p_fo_spd(.B) $08
フェードイン/アウトのスピードの絶対値。1≦p_fo_spd≦85。
p_ch(.B) $09
そのトラックがアサインされている絶対チャンネル。0≦p_ch≦25。
PCM8独立チャンネルモードにおけるADPCM拡張チャンネル番号については
後述のp_extra_ch(.B)を参照。
p_not_empty(.B) $0a
そのトラックの生死。
-1:死亡
0:演奏中
1:演奏終了
$7f:同期待ち中
$99:演奏停止中(m_stop時)
$EE:同期待ち停止中(m_stop時)
p_amod_step(.B) $0b
ディレイモード・AM(拡張ARCC)の波形生成用・整数増分。
p_mstep_tbl(.W) $0c~$1b
1/8モード・PM(拡張PM)用波形生成用・整数増分。(×8)
p_wvpm_loop(.L) $0c
PM(拡張PM)用・波形メモリループ開始アドレス。
p_wvpm_lpmd(.W) $10
PM(拡張PM)用・波形メモリループモード。(-1,0,+1)
p_altp_flg(.B) $12
PM(拡張PM)用・波形メモリ反復モードフラグ。(0:順行中、1:逆行中)
p_fo_mode(.B) $1c
現在のフェードモード。( -1:フェードアウト
+1:フェードイン
$47:ファンクション$47/$4C実行中)
p_pgm(.B) $1d
現在の音色番号。(0~199)
p_pan(.B) $1e
現在のパンポット。(0~3)
p_vol(.B) $1f
現在の音量。(127最小~0最大)
p_mrvs_tbl(.B) $20~$27
1/8モード・PM(拡張PM)用波形生成用・補正値。(×8)
p_wvpm_point(.L) $20
PM(拡張PM)用・波形メモリ・ポインタ。
p_wvpm_end(.L) $24
PM(拡張PM)用・波形メモリ・終了アドレス。
p_sp_tie(.W) $28
FM音源互換タイ・モード(@J1)においてスラーを行った時の
2つの音の音程の差を格納してある。
例
c&e では683×4=2732がここに格納される。
p_om(.B) $28
FM音源音色パラメータのOMの値。(&b0000~&b1111)
p_sync(.B) $29
FM音源音色パラメータのSYNCの値。(0,1)
p_af(.B) $2a
FM音源音色パラメータのAFの値。
p_se_mode(.B) $2b
そのトラックが現在効果音モードかどうか。
$ff:normal
$00:se mode
$01:masking mode(FNC $44 or $4B)
p_pmod_tbl(.W) $2c~$3b
1/8モード・PM(拡張PM)の振幅値。(×8)
(-32768~32767)
p_total(.L) $3c
その時点までのステップタイムの合計。ファンクション$19
または、ファンクション$43を実行後のみ意味を持つ。
p_fo_lvl(.B) $40
フェーダーの出力割合。(MIN)0~128(MAX・NORMAL)
p_note(.B) $42~$49
現在発音中のノート一覧。(×8)
p_extra_ch(.B) $4a
PCM8独立チャンネルモード時のADPCM拡張チャンネル番号。(0~7)
p_aftc_n(.B) $4b
アフタータッチ・シーケンスのポインタ。(0~7)
p_bend_rng_f(.W) $4c
オート・ベンドのベンド幅(FM音源トラック専用)。
半音=64で表される相対表現値。(-768~768)
p_bend_rng_m(.W) $4e
オート・ベンドのベンド幅(MIDIトラック専用)。
半音≒683で表される相対表現値。(-8192~8191)
p_detune_f(.W) $50
ディチューン(FM音源トラック専用)。(-768~768)
p_detune_m(.W) $52
ディチューン(MIDIトラック専用)。(-8192~8191)
p_port_dly(.W) $54
ポルタメント・ディレイ。(0~32767)
p_bend_dly(.W) $56
ベンド・ディレイ。(0~32767)
p_port_work(.B) $58
ポルタメント用補正値ワーク。
p_port_rvs(.B) $59
ポルタメント用補正値。
p_port_work2(.W) $5a
ポルタメント/オート・ベンドにおける現在のピッチベンド値。
FM音源トラックでは半音=64、MIDIトラックでは半音≒683とする。
p_amod_tbl(.B) $5c~$63
1/8モード・AMの振幅値。(×8)
(-128~127)
p_arcc_tbl(.B) $5c~$63
1/8モード・ARCC(拡張ARCC)の振幅値。(×8)
(-128~127)
p_arvs_tbl(.B) $64~$6b
1/8モード・AM(拡張ARCC)用波形生成用・補正値。(×8)
p_wvam_point(.L) $64
AM(拡張ARCC)用・波形メモリ・ポインタ。
p_wvam_end(.L) $68
AM(拡張ARCC)用・波形メモリ・終了アドレス。
p_pmod_work4(.W) $6c
PM(拡張PM)用スピードワーク。
p_port_flg(.W) $6e
ポルタメント実行中かどうか。
0:off
-1 or +1:補正する方向(on)
p_bend_flg(.W) $70
オート・ベンド実行中かどうか。
0:off
-1 or +1:補正する方向(on)
p_aftc_tbl(.B) $72~$79
アフタータッチ・シーケンス値。(×8)
(0~127,負数は省略値)
p_aftc_dly(.W) $7a
アフタータッチ・シーケンス用 音長の1/8カウント。
p_aftc_work(.W) $7c
アフタータッチ・シーケンス用 音長の1/8カウントワーク。
p_astep_tbl(.B) $7e~$85
1/8モード・AM(拡張ARCC)用波形生成用・整数増分。(×8)
p_wvam_loop(.L) $7e
AM(拡張ARCC)用・波形メモリループ開始アドレス。
p_wvam_lpmd(.W) $82
AM(拡張ARCC)用・波形メモリループモード。(-1,0,+1)
p_alta_flg(.B) $84
AM(拡張ARCC)用・波形メモリ反復モードフラグ。(0:順行中、1:逆行中)
p_pmod_step2(.W) $86
PM(拡張PM)用波形生成用・整数増分(使い捨て)。
p_pmod_work(.W) $88
PM(拡張PM)用ディレイワーク。
p_pmod_work2(.W) $8a
PM(拡張PM)用 現在の音程。
・FM音源トラックでは半音=64
・MIDIトラックでは拡張モード1では半音=64
拡張モード2では半音≒683とする。
p_pmod_work3(.B) $8c
PM(拡張PM)用波形生成用・補正値ワーク。
p_pmod_n(.B) $8d
1/8モード・PM(拡張PM)用ポインタ。(0~7)
p_sync_wk(.B) $8e
トラック同期コマンド用ワーク。
$00:同期信号受信
$ff:同期待ち状態
p_rpt_last?(.B) $8f
|:~:|の繰り返しコマンドにおいて、繰り返しが最後かどうか。(bit=1:last)
bit0:多重ループ深い
bit1: ↑
: |
: ↓
bit7:多重ループ浅い
p_@b_range(.B) $90
ピッチベンドレンジ。(0~127)
p_arcc(.B) $91
MIDIトラック:ARCC(拡張ARCC)で制御するコントロールチェンジ番号(0~127)。
FM音源トラック:AMでどのオペレータに対してモジュレーション操作をするか。
bit=1:操作対象オペレータ
bit=0~3:オペレータ1~4
p_pmod_flg(.W) $92
現在PM(拡張PM)が実行中かどうか。
・FM音源トラックのPM、MIDIトラックの拡張PMではワードサイズ
0:off
-1 or +1:補正する方向(on)
・MIDIトラックの通常PMではバイトサイズ
0:off
0以外:on
p_pmod_sw(.B) $94
PM(拡張PM)のスイッチ。
・FM音源トラックのPM、MIDIトラックの拡張PM
0:off
-1 or +1:補正する方向(on)
・MIDIトラックの通常PM
0:off
0以外:on
p_amod_sw(.B) $95
AMのスイッチ。
0:off
-1 or +1:補正する方向(on)
p_arcc_sw(.B) $95
ARCC(拡張ARCC)のスイッチ。
・通常ARCC
0:off
0以外:on
・拡張ARCC
0:off
-1 or +1:補正する方向(on)
p_bend_sw(.B) $96
オート・ベンドのスイッチ。
0:off
-1 or +1:補正する方向(on)
p_aftc_flg(.B) $97
現在アフタータッチ・シーケンスを実行中か。
0:off
0以外:on
p_md_flg(.B) $98
汎用ワーク。
bit0 ピッチ・ベンドをリセットするかどうか
(MIDIトラック専用 0:no 1:yes)
bit1 ピッチ・モジュレーションをリセットするかどうか
(MIDIトラック専用 0:no 1:yes)
bit2 ARCC(拡張ARCCをリセットするかどうか
(MIDIトラック専用 0:no 1:yes)
bit3 MIDIのタイ/スラー・モード
(MIDIトラック専用 0:normal 1:extended mode)
bit4 PM(拡張PM)の波形のリセットを行うかどうか
(0:行う 1:行わない)
bit5 AM(拡張ARCC)の波形のリセットを行うかどうか
(0:行う 1:行わない)
bit6 PM(拡張PM)の波形のキーオンとの同期非同期のモード
(0:同期 1:非同期)
bit7 AM(拡張ARCC)の波形のキーオンとの同期非同期のモード
(0:同期 1:非同期)
p_waon_flg(.B) $99
現在発音中の音は和音かそれとも単音か。($00:単音 $ff:和音)
p_pmod_dly(.W) $9a
PM(拡張PM)用ディレイ。(0~65534)
p_amod_dly(.W) $9c
AM用ディレイ。(0~65534)
p_arcc_dly(.W) $9c
ARCC(拡張ARCC)用ディレイ。(0~65534)
p_port_step(.W) $9e
ポルタメント/オート・ベンド用 音程整数増分、
FM音源トラックでは半音=64、MIDIトラックでは半音≒683とする。
p_bank_msb(.B) $a0
MIDI音色バリエーション上位バイト(0~127)
p_bank_lsb(.B) $a1
MIDI音色バリエーション下位バイト(0~127)
p_effect1(.B) $a2
MIDI汎用エフェクト1(0~127)
p_effect3(.B) $a3
MIDI汎用エフェクト3(0~127)
p_ol1(.B) $a0
FM音源音色パラメータのオペレータ1のトータル・レベル(アウトプット・レベル)。
p_ol2(.B) $a1
FM音源音色パラメータのオペレータ2のトータル・レベル(アウトプット・レベル)。
p_ol3(.B) $a2
FM音源音色パラメータのオペレータ3のトータル・レベル(アウトプット・レベル)。
p_ol4(.B) $a3
FM音源音色パラメータのオペレータ4のトータル・レベル(アウトプット・レベル)。
p_d6_last(.B) $a4
拡張ARCCにおいて前回送信したコントロールチェンジ値を保存しておくワーク。
p_cf(.B) $a4
FM音源の4つのオペレータのうちどのオペレータがキャリアかを示している。
bit=1:carrier
bit=0~3:オペレータ1~4
p_amod_step2(.B) $a5
AM(拡張ARCC)用波形生成用・整数増分ワーク(使い捨て)。
p_pb_add(.B) $a6
bit0:休符の時ベンド後のピッチを保存するか。(0:しない 1:する)
bit1:休符の時ピッチを保存するか。(0:しない 1:する)
p_vset_flg(.B) $a7
キーオン前に音量をリセットするか。(0:しない 0以外:する)
p_arcc_rst(.B) $a8
ARCC(拡張ARCC)終了時の初期化値。
p_arcc_def(.B) $a9
ARCC(拡張ARCC)開始時の基準値。
p_coda_ptr(.L) $aa
[coda]のあるアドレス。
p_pointer(.L) $ae
[segno]のあるアドレス。
p_do_loop_ptr(.L) $b2
[do]のあるアドレス。
p_pmod_work5(.W) $b6
1/8モード・PM(拡張PM)用 音長の1/8カウント。
p_pmod_work6(.W) $b8
1/8モード・PM(拡張PM)用 音長の1/8カウントワーク。
p_amod_flg(.B) $ba
現在AMが実行中かどうか。
0:off
-1 or +1:補正する方向(on)
p_arcc_flg(.B) $ba
現在ARCC(拡張ARCC)が実行中かどうか。
・通常ARCC
0:off
0以外:on
・拡張ARCC
0:off
-1 or +1:補正する方向(on)
p_aftc_sw(.B) $bb
アフタータッチ・シーケンスのスイッチ。($00:off $00以外:on)
p_dumper(.B) $bc
ダンパー。($00=off $00以外=on)
p_tie_flg(.B) $bd
前の音符にタイ/スラーの指定があったか。(0:なかった 0以外:あった)
p_pmod_dpt(.W) $be
ディレイモード・PM(拡張PM)の振幅値。(1/8モード時は0になる)
p_seq_flag(.B) $c0
bit0:[d.c.]処理をしたことがあるか。(0:ない 1:ある)
bit1:[fine]処理をすべきかどうか。(0:すべきでない 1:すべきである)
bit2:[coda]を以前に設定したことがあるか。(0:ない 1:ある)
bit3:[segno]が今までにあるかないか。(0:ない 1:ある)
bit4:[d.s.]処理をしたことがあるか。(0:ない 1:ある)
bit5:reserved。
bit6:key off bit。(キーオフ処理をするたびに、このビットが1になる)
bit7:key on bit。(キーオン処理をするたびに、このビットが1になる)
p_do_loop_flag(.B) $c1
[do]が以前に設定されているか。($00:されていない $01~:現在の繰り返し回数)
p_pmod_spd(.W) $c2
PM(拡張PM)の波長の1/4カウント。(1~32767)
p_amod_spd(.W) $c4
AM(拡張ARCC)の波長の1/4カウント。(1~32767)
p_total_olp(.L) $c6
[do]~[loop]外のステップタイムの合計。ファンクション$19
または、ファンクション$43を実行後のみ意味を持つ。
p_pmod_step(.W) $ca
ディレイモード・PM(拡張PM)の波形生成用・整数増分。
p_tie_pmod(.B) $cc
タイ/スラーの途中でPM(拡張PM)関係のパラメータチェンジが
行われたかどうか。($00:行われなかった $00以外:行われた)
p_tie_bend(.B) $cd
タイ/スラーの途中でオート・ベンド関係のパラメータチェンジが
行われたかどうかン。($00:行われなかった $00以外:行われた)
p_tie_amod(.B) $ce
タイ/スラーの途中でAM関係のパラメータチェンジが
行われたかどうか。($00:行われなかった $00以外:行われた)
p_tie_arcc(.B) $ce
タイ/スラーの途中でARCC(拡張ARCC)関係のパラメータチェンジが
行われたかどうか。($00:行われなかった $00以外:行われた)
p_tie_aftc(.B) $cf
タイ/スラーの途中でアフタータッチ・シーケンス関係のパラメータチェンジが
行われたかどうか。($00:行われなかった $00以外:行われた)
p_pan2(.B) $d0
パンポット。(L M R)
(0~64~127)
p_non_off(.B) $d1
キーオフ無しモードかどうか。($00:通常モード $00以外:キーオフ無しモード)
p_frq(.B) $d2
ADPCMの再生周波数。(0~6)
(ただし5,6はPCM8独立チャンネルモード時のみ有効)
p_velo(.B) $d3
ベロシティ。(0~127)
p_amod_work4(.W) $d4
AM(拡張ARCC)の波長の1/4カウントワーク。
p_pmod_rvs(.B) $d6
ディレイモード・PM(拡張PM)用補正値。
p_waon_dly(.B) $d7
和音用ディレイ値。(0~255)
p_waon_work(.B) $d8
和音用ディレイワーク。
p_waon_num(.B) $d9
和音において何番目のノートをキーオンするか。(0~7)($ff:全ノートキーオン終了)
p_note_last(.B) $d9
単音で発音したノートのノート番号の一時退避ワーク。
p_rpt_cnt(.B) $da~$e1
その時点での繰り返し回数。($00は空きワーク 1~255:繰り返し回数)
$da:多重ループ深い
$db: ↑
: |
: ↓
$e1:多重ループ浅い
p_maker(.B) $e2
そのトラックが操作している楽器のメーカーID。
@Iコマンドの第1パラメータに相当。
p_device(.B) $e3
そのトラックが操作している楽器のデバイスID。
@Iコマンドの第2パラメータに相当。
p_module(.B) $e4
そのトラックが操作している楽器のモデルID。
@Iコマンドの第3パラメータに相当。
p_last_aft(.B) $e5
前回アフタータッチ・シーケンスで出力されたアフタータッチ値。
p_amod_work(.W) $e6
AM用ディレイワーク。
p_arcc_work(.W) $e6
ARCC(拡張ARCC)用ディレイワーク。
p_amod_work2(.B) $e8
AM用 現在の音量。(0~127)
p_arcc_work2(.B) $e8
ARCC(拡張ARCC)用 現在のコントロール値。(0~127)
p_amod_work3(.B) $e9
AM(拡張ARCC)用波形生成用・補正値ワーク。
p_amod_work7(.B) $ea
AM(拡張ARCC)用 ノコギリ波生成用ワーク。
(一周期終了後の、波形の開始値の記憶)
p_amod_n(.B) $eb
1/8モード・AM用ポインタ。(0~7)
p_arcc_n(.B) $eb
1/8モード・ARCC(拡張ARCC)用ポインタ。(0~7)
p_arcc_work5(.W) $ec
1/8モード・AM用 音長の1/8カウント。
p_amod_work5(.W) $ec
1/8モード・ARCC(拡張ARCC)用 音長の1/8カウント。
p_arcc_work6(.W) $ee
1/8モード・AM用 音長の1/8カウントワーク。
p_amod_work6(.W) $ee
1/8モード・ARCC(拡張ARCC)用 音長の1/8カウントワーク。
p_pmod_wf(.B) $f0
PM(拡張PM)の波形形状。
-31~-8:ユーザー波形番号
0:ノコギリ波
1:矩形波
2:三角波
3:ノコギリ波シングル
p_amod_dpt(.B) $f1
ディレイモード・AM(拡張ARCC)の振幅値。(1/8モード時は0になる)
(-128~127)
p_amod_wf(.B) $f2
AM(拡張ARCC)の波形形状。
-31~-8:ユーザー波形番号
0:ノコギリ波
1:矩形波
2:三角波
3:ノコギリ波シングル
p_dmp_n(.B) $f3
FM音源トラック用ダンパー処理ワーク。
p_ch+p_dmp_nしたチャンネルで次回の発音を行う。(0~7)
p_pmod_omt(.B) $f4
1/8モード・PM(拡張PM)用 パラメータ省略ビットパターン。
bit=0:省略
bit=1:有効
bit0~7:第1パラメータ~第8パラメータ
p_amod_omt(.B) $f5
1/8モード・AM用 パラメータ省略ビットパターン。
bit=0:省略
bit=1:有効
bit0~7:第1パラメータ~第8パラメータ
p_arcc_omt(.B) $f5
1/8モード・ARCC(拡張ARCC)用 パラメータ省略ビットパターン。
bit=0:省略
bit=1:有効
bit0~7:第1パラメータ~第8パラメータ
p_pmod_mode(.B) $f6
拡張PMのモード番号。
-1:通常PMモード
0:半音=64モード
1:半音≒683モード
p_arcc_mode(.B) $f7
拡張ARCCのモード番号。
-1:通常ARCCモード
0:拡張ARCCモード
p_pmod_chain(.B) $f8
1/8モード・PM(拡張PM)波形接続ワーク。
-1:接続待機
0:波形通常実行中
1:強制接続
p_amod_chain(.B) $f9
1/8モード・AM、ARCC(拡張ARCC)波形接続ワーク。
-1:接続待機
0:波形通常実行中
1:強制接続
p_jump_flg(.B) $fa
[!]コマンド・ステータス・ワーク。
-1:通常演奏状態
0:ジャンプ実行中
1:ジャンプ終了
p_waon_mark(.B) $fb
主チャンネルのパラメータ変更をしたか。(0:していない 0以外:した)
p_marker(.W) $fc
p_marker+0(.B):このトラックは効果音トラックか。
(0:通常トラック 0以外:効果音トラック)
p_marker+1(.B):フェーダー移動フラグ(オーバーフローするとフェーダーが動く)。
p_amod_rvs(.B) $fe
ディレイモード・AM、ARCC(拡張ARCC)用補正値。
p_ne_buff(.B) $ff
効果音トラックにおけるp_not_empty(.B)の一時退避ワーク。
p_user(.B) $ff
ユーザー汎用ワーク。
13.1.3. ワーク参照にあたっての注意
ワークの不当な書き替えは、演奏に支障をきたすだけでなく、ZMUSICの暴走を
引き起こす可能性もあるため、細心の注意を必要とする。また、特殊な使用目的
以外では、各ワークは読み出し専用と考え、書き替えはなるべく行わないように
すべきである。
各ワークは、必ずしも使用されているとは限らず、条件によっては、そのワークが
持つ値は何の意味も持たない場合がある。例えばPMのスイッチp_pmod_sw(.B)が
OFF(0)の場合、PM関連ワークに格納されている値は何の意味も持たない。
また、MMLやコマンドで与えたパラメータ値とワーク内部で表現される
内部表現形式とは多少の食い違いがあるので注意すること。例えば音色番号は
MMLパラメータでは
@<音色番号:1~200>
であるが、ワーク(内部表現)では
p_pgm(.B):0~199
となっている。
13.1.4. ブレゼンハムのアルゴリズム(Bresenham's algorithm)について
ZMUSICではオートベンドやポルタメント、ピッチ・モジュレーションや
アンプリチュード・モジュレーションなどの波形の生成実行にブレゼンハムの
アルゴリズム(Bresenham's algorithm)を使用している。このパラメータ計算と
その実行について解説をする。
・パラメータの計算
図1のようなv1→v2への値変化を行いたい場合を考える。つまり、絶対カウント
st間にちょうどv1からv2へ幅yだけ変化させたいということである。
整数増分パラメータは
<整数増分パラメータ>=int(y/st) (ただしst≠0。yは正数、負数いずれも可)
そして補正パラメータは
<補正パラメータ>=abs(y mod st)×256/st
<補正方向>=sgn(y)
で求められる。
┏━━━━━━━━━━━━━┓
┃ v2 ┃
┃ / ↑ ┃
┃ / | ┃
┃ / |y ┃
┃ / | ┃
┃ / ↓ ┃
┃ v1←───→ ┃
┃ st ┃
┗━━━━━━━━━━━━━┛
図1パラメータ
・実行
実際の実行は
st≠0
v1←初期値
rvs_wk(補正値ワーク):=0
として、
repeat
v1:=v1+<整数増分パラメータ>
rvs_wk:=rvs_wk+<補正パラメータ>
if (Carry flag is set) then v1:=v1+<補正方向>
st:=st-1
until st=0
のようなアルゴリズムにより施行される。
なお、演奏トラックワークとブレゼンハムのアルゴリズムにおけるパラメータとの
対応は
●ポルタメント
補正値:p_port_rvs(.B) $59
補正方向:p_port_flg(.W) $6e
整数増分:p_port_step(.W) $9e
補正値ワーク:p_port_work(.B) $58
計算結果:p_port_work2(.W) $5a
●オート・ピッチベンド
補正値:p_port_rvs(.B) $59
補正方向:p_bend_flg(.W) $70
整数増分:p_port_step(.W) $9e
補正値ワーク:p_port_work(.B) $58
計算結果:p_port_work2(.W) $5a
●ピッチ・モジュレーション
補正値:p_pmod_rvs(.B) $d6
補正方向:p_pmod_flg(.W) $92
整数増分:p_pmod_step2(.W) $86
補正値ワーク:p_pmod_work3(.B) $8c
計算結果:p_pmod_work2(.W) $8a
●アンプリチュード・モジュレーション/拡張ARCC
補正値:p_amod_rvs(.B) $fe
補正方向:p_amod_flg(.B) $ba
整数増分:p_amod_step2(.B) $a5
補正値ワーク:p_amod_work3(.B) $e9
計算結果:p_amod_work2(.B) $e8
のようになっている。また、1/8モードのピッチ・モジュレーションや、1/8モードの
アンプリチュード・モジュレーションでは整数増分と補正値が8つ分テーブルに
格納されており、随時使用される。
●1/8モード・ピッチ・モジュレーション
補正値テーブル:p_mrvs_tbl(.B) $20~$27
整数増分テーブル:p_mstep_tbl(.W) $0c~$1b
●1/8モード・アンプリチュード・モジュレーション/拡張ARCC
補正値テーブル:p_arvs_tbl(.B) $64~$6b
整数増分テーブル:p_astep_tbl(.B) $7e~$85
13.2. バッファ管理ワーク
ファンクション$45でZMUSICの各バッファのアドレスを知ることができる。
ここでは、これらのバッファの構造や役割について解説をする。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ファンクション$45 buffer_info ┃
┃ ┃
┃機能: 各バッファのアドレス、サイズ、終了アドレスの情報を得る ┃
┃ ┃
┃引数: なし ┃
┃ ┃
┃戻り値: 0(a0)=トラックバッファの先頭アドレス trk_top ┃
┃ 4(a0)=トラックバッファのサイズ trk_buf_size ┃
┃ 8(a0)=トラックバッファ終了アドレス trk_buf_end ┃
┃ =ZMUSICの最終アドレス (dev_end_adr) ┃
┃ 12(a0)=ADPCMバッファ先頭アドレス adpcm_buffer_top ┃
┃ 16(a0)=ADPCMバッファサイズ adpcm_buffer_size ┃
┃ 20(a0)=ADPCMバッファ終了アドレス adpcm_buffer_end ┃
┃ 24(a0)=汎用ワークエリア先頭アドレス adpcm_work_top ┃
┃ 28(a0)=汎用ワークエリアサイズ adpcm_work_size ┃
┃ 32(a0)=汎用ワークエリア終了アドレス adpcm_work_end ┃
┃ ┃
┃ 36(a0)=新規に登録される adpcm_buffer_next ┃
┃ ADPCMデータが ┃
┃ 格納されるアドレス ┃
┃ adpcm_buffer_top≦adpcm_buffer_next≦adpcm_buffer_end ┃
┃ ┃
┃ 40(a0)=次にワークが使用される場合の adpcm_work_now ┃
┃ 汎用ワーク使用可能開始アドレス ┃
┃ adpcm_work_top≦adpcm_work_now≦adpcm_work_end ┃
┃ ┃
┃ 44(a0)=汎用ワークエリアの本当のサイズ adpcm_work_true_size ┃
┃ ┃
┃ 48(a0)=演奏トラックワーク格納アドレス seq_wk_tbl ┃
┃ 52(a0)=効果音トラックワーク格納アドレス seq_wk_tbl2 ┃
┃ ┃
┃ 56(a0)=ADPCMデータの管理テーブル adpcm_tbl ┃
┃ 格納アドレス ┃
┃ ┃
┃ 60(a0)=波形メモリの管理テーブル wave_tbl ┃
┃ 格納アドレス ┃
┃ ┃
┃ 64(a0)=FM音源音色バッファのアドレス neiro ┃
┃ ┃
┃ 68(a0)=各トラックの先頭アドレス trk_po_tbl ┃
┃ 格納テーブルアドレス(1,2,3,...80) ┃
┃ ┃
┃ 72(a0)=m_allocで確保した各トラックの trk_len_tbl ┃
┃ サイズ格納アドレス(1,2,3,...80) ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
●トラックバッファ
トラックバッファはZMDを格納するために確保されているが、MDD作成時に
汎用ワークとして使用されることがある。
外部アプリケーションで確保したメモリ領域をZMUSICから参照させるには
(trk_top)=メモリ領域の先頭アドレス
(trk_buf_size)=メモリ領域のサイズ
(trk_buf_end)=メモリ領域の最終アドレス
を設定する。
●ADPCMバッファ
ADPCMバッファにはZPDをはじめとしたADPCMデータが格納される。
ADPCMバッファのサイズが0の時はADPCM関連の命令やファンクションは
使用できない。
外部アプリケーションで確保したメモリ領域をZMUSICから参照させるには
(adpcm_buffer_top)=メモリ領域の先頭アドレス
(adpcm_buffer_size)=メモリ領域のサイズ
(adpcm_buffer_end)=メモリ領域の最終アドレス
(adpcm_buffer_next)=メモリ領域の先頭アドレス
を設定する。
●汎用ワークエリア
汎用ワークエリアは、ADPCMコンフィギュレーション一時退避場所としてや、
ADPCMデータ加工時のワークエリア、波形メモリのバッファ(ZMS時)、
MDD作成時のワークエリアとして多目的に使用される。
ADPCMコンフィギュレーション一時退避場所、波形メモリの
バッファ(ZMS時)として使用した場合は便宜上のワークサイズ(adpcm_work_size)が
伸縮する。
外部アプリケーションで確保したメモリ領域をZMUSICから参照させるには
(adpcm_work_top)=メモリ領域の先頭アドレス
(adpcm_work_size)=メモリ領域のサイズ
(adpcm_work_end)=メモリ領域の最終アドレス
(adpcm_work_now)=メモリ領域の先頭アドレス
(adpcm_work_true_size)=メモリ領域のサイズ
を設定する。
●演奏トラックワーク
演奏中の各トラックのワーク。トラックは80本あり(ZMSC.Xでは32本)
1本のトラックにつき256バイトのワークが割り当てられている。各ワークの
役割については13.1.を参照のこと。
(seq_wk_tbl)+トラック番号(0~79)×256
で任意のトラックのワーク先頭アドレスを求めることができる。
●効果音トラックワーク
効果音トラックの演奏トラックワーク。トラックは32本あり、役割、
ワークサイズはまったく演奏トラックワークと同等。
●ADPCM管理テーブル
各ノート番号に割り当てられたADPCMデータを管理するワーク。
バンク1
ノート番号0 ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
ノート番号1 ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
ノート番号2 ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
:
:
ノート番号127 ADPCMデータアドレス(.L),ADPCMデータサイズ(.L)
バンク2