Skip to content

Commit

Permalink
PCMのモード切り替え時の処理の修正
Browse files Browse the repository at this point in the history
  • Loading branch information
BouKiCHi committed Sep 3, 2020
1 parent 003aff7 commit 924b33c
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 110 deletions.
3 changes: 3 additions & 0 deletions docs/changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -196,3 +196,6 @@ ver 0.23 2006/03/16

ver 0.48 2017/05/18
xpcm.exeでの終端の取扱いを変更した。

ver 0.49 2020/09/03
PCMのモード切り替え時の処理の修正
210 changes: 105 additions & 105 deletions docs/husic_tech.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@

行頭にトラック記号を記述することで、ノートやコマンドが使用可能になります。

|トラック記号|内容|
|:-|:-|
|A| HuC6280 Ch.0 FMLFO(\*1) |
|B| HuC6280 Ch.1 FMLFOコントロール(\*1) |
|C| HuC6280 Ch.2|
|D| HuC6280 Ch.3|
|E| HuC6280 Ch.4 ノイズ使用可(\*2) XPCM使用可(\*3)|
|F| HuC6280 Ch.5 ノイズ使用可(\*2) XPCM使用可(\*3)|
| トラック記号 | 内容 |
| :----------- | :--------------------------------------------- |
| A | HuC6280 Ch.0 FMLFO(\*1) |
| B | HuC6280 Ch.1 FMLFOコントロール(\*1) |
| C | HuC6280 Ch.2 |
| D | HuC6280 Ch.3 |
| E | HuC6280 Ch.4 ノイズ使用可(\*2) XPCM使用可(\*3) |
| F | HuC6280 Ch.5 ノイズ使用可(\*2) XPCM使用可(\*3) |

(\*1): FMLFO使用時はCh.0とCh.1を合わせて1チャンネルとして扱います。
(\*2): ノイズ使用時はノートは発音できません。
Expand All @@ -27,24 +27,24 @@
行頭に以下のいずれかの文字列があった場合、
ヘッダ行として扱います。

| 文字列 | 効果 | 備考 |
| :- | :- | :- |
| #TITLE <str> | タイトル | |
| #COMPOSER <str> | 作曲者名 | |
| #MAKER <str> | メーカー | カバー用 |
| #PROGRAMER <str> | プログラマ | |
| #OCTAVE-REV | オクターブ記号反転 | |
| #GATE-DENOM <num> | ゲートタイム分母 | qコマンドの分母 |
| #INCLUDE <file> | インクルード | ファイルを挿入する |
| #OCTAVE-OFS <num> | オクターブオフセット | |
| @XPCM<num> = { "ファイル",再生周波数 } | PCMデータ | 再生周波数は0-15 |
| @WT<num> = { ... } | 波形メモリデータ | 32サンプル分の値を書く |
| @MP<num> = { ... } | ソフトウェアLFO | |
| @EN<num> = { ... } | ノートエンベロープ | |
| @EP<num> = { ... } | ピッチエンベロープ | |
| @V<num> = { ... } | 音量エンベロープ | |
| @<num> = { ... } | トーンエンベロープ | HuSICではハードウェア仕様により音色変更時にノイズあり |
| @ME<num> = { ... } | マルチエンベロープ | | |
| 文字列 | 効果 | 備考 |
| :------------------------------------------- | :------------------- | :---------------------------------------------------- |
| #TITLE <str> | タイトル | |
| #COMPOSER <str> | 作曲者名 | |
| #MAKER <str> | メーカー | カバー用 |
| #PROGRAMER <str> | プログラマ | |
| #OCTAVE-REV | オクターブ記号反転 | |
| #GATE-DENOM <num> | ゲートタイム分母 | qコマンドの分母 |
| #INCLUDE <file> | インクルード | ファイルを挿入する |
| #OCTAVE-OFS <num> | オクターブオフセット | |
| @XPCM<num> = { "ファイル",再生周波数 } | PCMデータ | 再生周波数は0-15 |
| @WT<num> = { ... } | 波形メモリデータ | 32サンプル分の値を書く |
| @MP<num> = { ... } | ソフトウェアLFO | |
| @EN<num> = { ... } | ノートエンベロープ | |
| @EP<num> = { ... } | ピッチエンベロープ | |
| @V<num> = { ... } | 音量エンベロープ | |
| @<num> = { ... } | トーンエンベロープ | HuSICではハードウェア仕様により音色変更時にノイズあり |
| @ME<num> = { ... } | マルチエンベロープ | |

@系コマンドではnumは定義番号として機能します。
エンベロープに関しては"|"がループ開始記号として機能します。
Expand All @@ -68,66 +68,66 @@

行頭にトラック記号がある行では、以下のコマンドを使用することができます。

| 文字列 | 効果 | 備考 |
| :- | :- | :- |
| w[len] | ウェイト | |
| @t<num,num2> | テンポ2 | num * num2 / 192.0 |
| t<num> | テンポ | |
| o<num> | オクターブ | |
| > | オクターブアップ | |
| < | オクターブダウン | |
| l&lt;len&gt; | 音長 | |
| v+ | 音量プラス | |
| v- | 音量マイナス | |
| v&lt;num&gt; | 音量 | 0:最小 31:最大 |
| NB | バンク切り替え | |
| EPOF | ピッチエンベロープ オフ | |
| EP&lt;num&gt; | ピッチエンベロープ | |
| ENOF | ノートエンベロープ オフ | |
| EN&lt;num&gt; | ノートエンベロープ | |
| MPOF | ソフトウェアLFO オフ | |
| MP&lt;num&gt; | ソフトウェアLFO | |
| FSOF | FMLFO オフ | |
| FS&lt;num&gt; | FMLFO 有効/コントロール | num=0~3 |
| FF&lt;num&gt; | FMLFO 周波数 | |
| FR | FMLFO リセット | |
| FM | FMLFO モジュレータ周波数 | num=(oct<<4)|(note%12) |
| MV&lt;num&gt; | マスターボリューム |左右4bit、16段階。MV$ccなどと設定。 |
| N&lt;num&gt; | ノイズスイッチ | num=1でオン |
| PL&lt;num&gt; | パンL 音量 | |
| PR&lt;num&gt; | パンR 音量 | |
| PC&lt;num&gt; | パンセンター 音量 | |
| P&lt;num&gt; | パン 音量 | |
| RI&lt;num&gt; | リセット無視 | RIフラグの項目を参照 |
| W&lt;num&gt; | 波形メモリ変更 | |
| M&lt;num&gt; | モード変更 | num=1でXPCM |
| SDQR | セルフディレイ キューリセット | |
| SDOF | セルフディレイ オフ | |
| SD&lt;num&gt; | セルフディレイ | |
| D&lt;num&gt; | デチューン | |
| K&lt;num&gt; | トランスポーズ | |
| @q&lt;num&gt; | クオンタイズ2 | num=フレーム指定のクオンタイズ |
| @pe&lt;num&gt; | パンエンベロープ | @MEの定義を使用 |
| @vr&lt;num&gt; | リリース音量エンベロープ | @vと同じ定義を使用 |
| @v&lt;num&gt; | 音量エンベロープ | |
| @@r&lt;num&gt; | リリーストーンエンベロープ | @@と同じ定義を使用 |
| @@&lt;num&gt; | トーンエンベロープ | |
| &lt;ノート&gt;_&lt;ノート&gt; | ポルタメント |:c_g |
| &lt;ノート&gt;&&lt;ノート&gt; | スラー |:c&g |
| x | データ直接出力(デバッグ用) | |
| k&lt;num&gt; | キーオフ | |
| L | 曲ループ記号 | |
| &#124;: | リピート2開始 | |
| :&#124; | リピート2終了 | |
| \\ | リピート2エスケープ | |
| [ | リピート開始 | |
| ] | リピート終了 | |
| &#124; | リピートエスケープ | |
| { | 連符開始 | |
| } | 連符終了 | |
| q&lt;num&gt; | クオンタイズ | 音長のn/8以降でキーオフ |
| ^ | タイ |:c4^2 |
| ! | トラック強制終了 | この記号以降を無視する | |
| 文字列 | 効果 | 備考 |
| :---------------------------- | :---------------------------- | :---------------------------------- |
| w[len] | ウェイト | |
| @t&lt;num,num2&gt; | テンポ2 | num * num2 / 192.0 |
| t&lt;num&gt; | テンポ | |
| o&lt;num&gt; | オクターブ | |
| > | オクターブアップ | |
| < | オクターブダウン | |
| l&lt;len&gt; | 音長 | |
| v+ | 音量プラス | |
| v- | 音量マイナス | |
| v&lt;num&gt; | 音量 | 0:最小 31:最大 |
| NB | バンク切り替え | |
| EPOF | ピッチエンベロープ オフ | |
| EP&lt;num&gt; | ピッチエンベロープ | |
| ENOF | ノートエンベロープ オフ | |
| EN&lt;num&gt; | ノートエンベロープ | |
| MPOF | ソフトウェアLFO オフ | |
| MP&lt;num&gt; | ソフトウェアLFO | |
| FSOF | FMLFO オフ | |
| FS&lt;num&gt; | FMLFO 有効/コントロール | num=0~3 |
| FF&lt;num&gt; | FMLFO 周波数 | |
| FR | FMLFO リセット | |
| FM | FMLFO モジュレータ周波数 | num=(oct<<4) &#x7c; (note%12) |
| MV&lt;num&gt; | マスターボリューム | 左右4bit、16段階。MV$ccなどと設定。 |
| N&lt;num&gt; | ノイズスイッチ | num=1でオン |
| PL&lt;num&gt; | パンL 音量 | |
| PR&lt;num&gt; | パンR 音量 | |
| PC&lt;num&gt; | パンセンター 音量 | |
| P&lt;num&gt; | パン 音量 | |
| RI&lt;num&gt; | リセット無視 | RIフラグの項目を参照 |
| W&lt;num&gt; | 波形メモリ変更 | |
| M&lt;num&gt; | モード変更 | num=1でXPCM |
| SDQR | セルフディレイ キューリセット | |
| SDOF | セルフディレイ オフ | |
| SD&lt;num&gt; | セルフディレイ | |
| D&lt;num&gt; | デチューン | |
| K&lt;num&gt; | トランスポーズ | |
| @q&lt;num&gt; | クオンタイズ2 | num=フレーム指定のクオンタイズ |
| @pe&lt;num&gt; | パンエンベロープ | @MEの定義を使用 |
| @vr&lt;num&gt; | リリース音量エンベロープ | @vと同じ定義を使用 |
| @v&lt;num&gt; | 音量エンベロープ | |
| @@r&lt;num&gt; | リリーストーンエンベロープ | @@と同じ定義を使用 |
| @@&lt;num&gt; | トーンエンベロープ | |
| &lt;ノート&gt;_&lt;ノート&gt; | ポルタメント |:c_g |
| &lt;ノート&gt;&&lt;ノート&gt; | スラー |:c&g |
| x | データ直接出力(デバッグ用) | |
| k&lt;num&gt; | キーオフ | |
| L | 曲ループ記号 | |
| &#124;: | リピート2開始 | |
| &#x3a; &#124; | リピート2終了 | |
| \\ | リピート2エスケープ | |
| [ | リピート開始 | |
| ] | リピート終了 | |
| &#124; | リピートエスケープ | |
| { | 連符開始 | |
| } | 連符終了 | |
| q&lt;num&gt; | クオンタイズ | 音長のn/8以降でキーオフ |
| ^ | タイ |:c4^2 |
| ! | トラック強制終了 | この記号以降を無視する |

## FMLFOについて

Expand All @@ -137,34 +137,34 @@ FMLFOモードを無効化するにはFSOFコマンドを使用します。

### FSコマンドの数値と機能

| 数値 | 機能 |
| :- | :- |
| 0 | 変調されない。Ch.0の波形は変化せず。 |
| 1 | 波形データはCh.0の周波数に直接加算される。 |
| 2 | 波形データは左に4回シフト(16倍)されてCh.0の周波数に加算される |
| 3 | 波形データは左に8回シフト(256倍)されてCh.0の周波数に加算される |
| 数値 | 機能 |
| :--- | :------------------------------------------------------------- |
| 0 | 変調されない。Ch.0の波形は変化せず。 |
| 1 | 波形データはCh.0の周波数に直接加算される。 |
| 2 | 波形データは左に4回シフト(16倍)されてCh.0の周波数に加算される |
| 3 | 波形データは左に8回シフト(256倍)されてCh.0の周波数に加算される |

## RIフラグ

エンベロープのキーオン時のリセットを無視するフラグです(各ビットが1で無視します)

| 機能 | ビット ||
| :- | :- | :- |
| トーン | 0 | 1 |
| ノート | 1 | 2 |
| ピッチ | 2 | 4 |
| LFO | 3 | 8 |
| パン | 4 | 16 |
| 機能 | ビット ||
| :----- | :----- | :- |
| トーン | 0 | 1 |
| ノート | 1 | 2 |
| ピッチ | 2 | 4 |
| LFO | 3 | 8 |
| パン | 4 | 16 |

## ノート表記

行頭にトラック記号がある行では、ノート(音符)を使用することができる。

||||ファ||||休符|
|:-|
|c|d|e|f|g|a|b|r|
|||| ファ |||| 休符 |
| :- | -- | -- | ---- | -- | -- | -- | ---- |
| c | d | e | f | g | a | b | r |
"ノート[音長]"となり、音長を付加しない場合はlコマンドの設定値が音長になる。

|文字列|内容|
|:-|:-|
|n<数値>[,音長]|ノート番号直接入力|
| 文字列 | 内容 |
| :------------- | :----------------- |
| n<数値>[,音長] | ノート番号直接入力 |
8 changes: 5 additions & 3 deletions hescode/main.s
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
;
;
; This file generated by HuC (v3.21, 2005/04/09, Denki release)
; on Sat May 13 15:33:59 2017
; on Fri Sep 04 00:14:32 2020
;

HUC = 1
Expand Down Expand Up @@ -344,6 +344,8 @@ LL24:
stx _xpcm_flags
LL25:

__ldb_s 2
call _pcm_off
LL23:

LL19:
Expand Down Expand Up @@ -4092,8 +4094,8 @@ LL190:
.bank CONST_BANK
.org $4000
LL0:
.db 72,117,83,73,67,32,49,55
.db 48,53,49,51,0,83,69,76
.db 72,117,83,73,67,32,50,48
.db 48,57,48,52,0,83,69,76
.db 69,67,84,32,83,79,78,71
.db 0
_freq:
Expand Down
15 changes: 15 additions & 0 deletions songs/sample_pcmchg.mml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
; sample.mml

@WT0={
$13,$19,$1b,$18,$13,$0f,$10,$14,
$1b,$1f,$1e,$19,$12,$0c,$0a,$0d,
$12,$15,$13,$0d,$06,$01,$00,$04,
$0b,$0f,$10,$0c,$07,$04,$06,$0c
}


@XPCM0 = { "pcm.pd4",0 }

F L t120 M0 W0 o4 v31
F cr dr er fr gr ar br > cr <
F M1 n0 r n0 r n0 r n0 n0 n0 n0
2 changes: 1 addition & 1 deletion src/husic/title.h
Original file line number Diff line number Diff line change
@@ -1 +1 @@
#define PRG_TITLE "HuSIC 170513"
#define PRG_TITLE "HuSIC 200904"
3 changes: 2 additions & 1 deletion src/husic/xpcmdrv.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ char ch;
if ( ch == XPCM_CH ) xpcm_play_flags &= XPCM_MASK;
if ( ch == XPCM2_CH ) xpcm_play_flags &= XPCM2_MASK;

if (!xpcm_play_flags ) dis_irq_tmr();
if (!xpcm_play_flags) dis_irq_tmr();
}

pcm_stop ( ch )
Expand Down Expand Up @@ -119,6 +119,7 @@ char mode;
} else {
if ( ch == XPCM_CH ) xpcm_flags &= XPCM_MASK;
if ( ch == XPCM2_CH ) xpcm_flags &= XPCM2_MASK;
pcm_off(ch);
}
}

Expand Down

0 comments on commit 924b33c

Please sign in to comment.