#カセットビジョン #CassetteVision #RLD777 #μPD777 #ゼビウス #シーケンサー #与作
ほりまチャンネルご視聴ありがとうございます。今回は短編です。
説明文は長くなってしまいました。自分用の備忘録でもあるのでお許しください。
動画ではμPD777C-004 (与作)となっていますが、正しくはμPD777C-005 (与作)です。訂正いたします。
RLD777に、機能を追加してカセットビジョンのμPD777シリーズLSIの音源を直接コントロールできるようにしました。
機能はシーケンサー部分とμPD777シリーズLSIとのインターフェース部分で構成されます。
シーケンサー部分はPIC18F4525のソフトウェアで構成されます。
μPD777シリーズLSIとのインターフェース部分は、シークレットモード再現や、プログラム・パターンROM読み出しで実装していたものと変わりありません。
今回新たに追加したプログラムは、μPD777シリーズLSIに対し、音程データを順次送るシーケンサーです。
μPD777シリーズLSIには音源を制御するためのレジスタとしてFLSとFRSの2つがあります。音程はレジスタに設定する値で決まります。値の範囲は1~127です。この値で水平同期周波数である15734Hzを分周した結果の周波数の音が出ます。1を設定した場合は音を停止します。
与作のμPD777Cー005を使用していて、小口様のドキュメントとは少し異なるのですが、実験では前述のような周波数になるので、そのように設計しています。
レジスタ設定値と分周後出力される周波数を考慮すると、μPD777シリーズLSIで表現できる音域は下の表ようにC3~C6の3オクターブとなります。効果音としてはもっと高域も出ますが、音階として成り立ちません。
C3が120分周になっているのは120が約数を多く持つためいい感じです。
鍵盤 平均律(Hz) 音名 MIDI 設定値 分周周波数 差異 倍音
28 130.813 ド3 C3 48 120 131.119 +0.23% 1
29 138.591 ド#3 C#3 49 114 138.020 -0.41%
30 146.832 レ3 D3 50 107 147.049 +0.15% 9/8
31 155.563 レ#3 D#3 51 101 155.785 +0.14%
32 164.814 ミ3 E3 52 95 165.624 +0.49%
33 174.614 ファ3 F3 53 90 174.825 +0.12% 4/3
34 184.997 ファ#3 F#3 54 85 185.109 +0.06%
35 195.998 ソ3 G3 55 80 196.678 +0.35% 3/2
36 207.652 ソ#3 G#3 56 76 207.030 -0.30%
37 220.000 ラ3 A3 57 72 218.531 -0.67% 27/16
38 233.082 ラ#3 A#3 58 68 231.386 -0.73%
39 246.942 シ3 B3 59 64 245.848 -0.44%
40 261.626 ド4 C4 60 60 262.238 +0.23% 2
41 277.183 ド#4 C#4 61 57 276.040 -0.41%
42 293.665 レ4 D4 62 54 291.375 -0.78% 9/4
43 311.127 レ#4 D#4 63 51 308.515 -0.84%
44 329.628 ミ4 E4 64 48 327.797 -0.56% 81/32
45 349.228 ファ4 F4 65 45 349.650 +0.12% 8/3
46 369.994 ファ#4 F#4 66 43 365.913 -1.10%
47 391.995 ソ4 G4 67 40 393.357 +0.35% 3
48 415.305 ソ#4 G#4 68 38 414.060 -0.30%
49 440.000 ラ4 A4 69 36 437.063 -0.67% 27/8
50 466.164 ラ#4 A#4 70 34 462.772 -0.73%
51 493.883 シ4 B4 71 32 491.696 -0.44%
52 523.251 ド5 C5 72 30 524.475 +0.23% 4
53 554.365 ド#5 C#5 73 28 561.938 +1.37%
54 587.330 レ5 D5 74 27 582.751 -0.78% 9/2
55 622.254 レ#5 D#5 75 25 629.371 +1.14%
56 659.255 ミ5 E5 76 24 655.594 -0.56% 5
57 698.456 ファ5 F5 77 23 684.098 -2.06% 16/3
58 739.989 ファ#5 F#5 78 21 749.251 +1.25%
59 783.991 ソ5 G5 79 20 786.713 +0.35% 6
60 830.609 ソ#5 G#5 80 19 828.119 -0.30%
61 880.000 ラ5 A5 81 18 874.126 -0.67% 27/4
62 932.328 ラ#5 A#5 82 17 925.545 -0.73% 7
63 987.767 シ5 B5 83 16 983.391 -0.44%
64 1,046.502 ド6 C6 84 15 1,048.951 +0.23% 8
65 1,108.731 ド#6 C#6 85 14 1,123.876 +1.37%
曲データはこんな感じになっています(今回の00の曲)
APLAY_DATA_00 ;ゼビウス
DB .15,.72 ;TEMPOと1小節の長さ(カウント数)
DW XEVIOUS1_RTrack ;FLS register (左右を逆にしています)
DW XEVIOUS1_LTrack ;FRS register
;-----------------------------------------------------------
XEVIOUS1_RTrack
DB F5,n4.,RST,n4,C5,n8,F5,n8,A5,n8,C6,n8,A5,n8,RST,n8,F5,n8
DB G5,n8,RST,n8,G5,n8,G5,n8,RST,n8,D5,n4,RST,n8,G5,n8,F5,n8,RST,n8,E5,n8
DB F5,n4.,RST,n4,C5,n8,F5,n8,A5,n8,C6,n8,A5,n8,RST,n8,F5,n8
DB Gb5,n8,RST,n8,Gb5,n8,Gb5,n8,RST,n8,F5_,n8,F5,n2
DB P_END,P_END
;-----------------------------------------------------------
XEVIOUS1_LTrack
DB A4,n4.,RST,n4,A4,n8,A4,n8,C5,n8,F5,n8,C5,n8,RST,n8,A4,n8
DB Bb4,n8,RST,n8,Bb4,n8,Bb4,n8,RST,n8,Bb4,n4,RST,n8,Bb4,n8,Bb4,n8,RST,n8,Bb4,n8
DB A4,n4.,RST,n4,A4,n8,A4,n8,A4,n8,A4,n8,A4,n8,RST,n8,A4,n8
DB Bb4,n8,RST,n8,Bb4,n8,Bb4,n8,RST,n8,A4_,n8,A4,n2
DB P_END,P_END
DBで記述した後のデータは、音名,長さ.....と続けて記述し、終わりにP_END,P_ENDを書くとそのパートは終了です。
n4は四分音符、n4.は付点四分音符。
同音が連続する場合は自動的に最小単位の休符が入りますが、音名の後ろに_を書くとタイになります。
アセンブラの疑似命令で音名はMIDI番号に変換、長さも以下のように数値に変換されます。
n32 EQU 3 ;32分音符 3
n16 EQU n32*2 ;16分音符 6
n8 EQU n16*2 ;8分音符 12
n4 EQU n16*4 ;4分音符 24
n2 EQU n16*8 ;2分音符 48
nZ EQU n16*16 ;全音符 96
n16. EQU n16+n32 ; 9 付点16分音符
n8. EQU n8+n16 ; 18
n8.. EQU n8+n16+n32 ; 27
n4. EQU n4+n8 ; 36
n4.. EQU n4+n8+n16 ; 27
n4... EQU n4+n8+n16+n32 ; 30
n2. EQU n2+n4 ; 72
n2.. EQU n2+n4+n8 ; 84
n2... EQU n2+n4+n8+n16 ; 90
n2.... EQU n2+n4+n8+n16+n32 ; 93
; 三連符実装
t32 EQU 2
t16 EQU t32*2 ;4
t8 EQU t16*2 ;8 三連8分音符(一拍三連)
t4 EQU t16*4 ;16 三連4分音符(ニ拍三連)
t2 EQU t16*8 ;32 三連2分音符
なお、高度な技術的内容について、
小口様のサイト
https://www.oguchi-rd.com/
大浦様のサイト
https://oura.oguchi-rd.com/
より情報をいただいております。ありがとうございます。
Информация по комментариям в разработке