最終更新:ID:JeMc9UHrxQ 2015年01月28日(水) 20:58:49履歴
メモリ空間 | 2 |
---|---|
ルーチン番号 | $15 |
AccAのSG番号のレジスタ番号に、AccBに格納されている音程、音量、ノイズのデータを設定します。
PSGSYCは簡単なシンセサイザとして機能を発揮します。
SGは、トーン発生器+減衰器、ノイズ・ジェネレータ、エンベロープ・ジェネレータ、ミキサから構成され、下記の手順でレジスタを設定します。
PSGSYCは簡単なシンセサイザとして機能を発揮します。
SGは、トーン発生器+減衰器、ノイズ・ジェネレータ、エンベロープ・ジェネレータ、ミキサから構成され、下記の手順でレジスタを設定します。
- 音階の設定
- ノイズの周波数
- トーン・ノイズ・チャンネルの選択
- エンベロープの設定
- エンベロープ周波数の設定
- エンベロープの波形選択
AccA:
SG番号:0または1(2個のSGの内1つを選択)
レジスタ番号:0〜13
AccB:データ
●エンベロープの周期
f=fclock/256*D
T=1/f
ただし、Dはレジスタ11、12に書き込むデータ
D7 | - | - | - | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
SG番号 | レジスタ番号 |
レジスタ番号:0〜13
レジスタ番号 | データ | 動作 | 備考 | |||||||
---|---|---|---|---|---|---|---|---|---|---|
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||
0 | 下位8ビット・データ | チャンネルAの音階 | 音階は12ビットのデータで表現する | |||||||
1 | - | 上位4ビット・データ | ||||||||
2 | 下位8ビット・データ | チャンネルBの音階 | ||||||||
3 | - | 上位4ビット・データ | ||||||||
4 | 下位8ビット・データ | チャンネルCの音階 | ||||||||
5 | - | 上位4ビット・データ | ||||||||
6 | - | 5ビット・データ | ノイズ周波数 | ノイズの平均周波数を指定する | ||||||
7 | - | ノイズ | トーン | ノイズ/トーンのチャンネル選択 | 各チャンネルから出す音を指定する | |||||
C | B | A | C | B | A | |||||
8 | - | M | 4ビット・データ | チャンネルAの音量 | M=0のとき下位4ビットが音量調節 M=1のときエンベロープ作動 | |||||
9 | - | M | 4ビット・データ | チャンネルBの音量 | ||||||
10 | - | M | 4ビット・データ | チャンネルCの音量 | ||||||
11 | エンベロープデータの下位8ビット | エンベロープ周期 | ||||||||
12 | エンベロープデータの上位8ビット | |||||||||
13 | - | エンベロープ波形 |
- レジスタ番号0〜5は、3個のオシレータの発振周波数を決めます。ただし0〜1、2〜3、4〜5はペアで、上位4ビットと下位8ビットの合計12ビットのデータが有効です。f=fclock/(16xD)、ただし、fclock=1.008MHz、Dは書き込むデータ。
- レジスタ番号6はノイズの平均周波数を決めます。下位5ビットが有効です。f=fclock/(16xD)、ただし、fclock=1.008MHz。
- レジスタ番号7は各チャンネルを選択します。対応する各ビットを0にすることにより、設定します。
- レジスタ番号8〜10は各チャンネルの音量を設定します。下位4ビットが有効で、最大音量は15です。ビット4を1にするとエンベロープ・モードにより、音量の指定が無効となります。
- レジスタ番号11〜13はエンベロープを制御します。
レジスタ番号13の下位4ビット | エンベローブ・パターン(縦軸は音量、横軸は時間) | |||
---|---|---|---|---|
0 | 0 | - | - | \_________ |
0 | 1 | - | - | /│________ |
1 | 0 | 0 | 0 | \│\│\│\│\│\ |
1 | 0 | 0 | 1 | \_________ |
1 | 0 | 1 | 0 | \/\/\/\/\/\/ |
1 | 0 | 1 | 1 | \│ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |
1 | 1 | 0 | 0 | /│/│/│/│/│/│ |
1 | 1 | 0 | 1 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |
1 | 1 | 1 | 0 | /\/\/\/\/\/\ |
1 | 1 | 1 | 1 | /│________ |
f=fclock/256*D
T=1/f
ただし、Dはレジスタ11、12に書き込むデータ
SG番号0のチャンネルAから247Hzの純音を出力します。
0 C000 ORG $C000 1 C000 PSGSYC EQU * --SAMPLE OF "PSGSYC" ROUTINE-- 2 C000 20 08 BRA EXEC 3 C002 00 PARM1 FCB $00 REGISTER NO=0 & SG=0 4 C003 FF FCB $FF SOUND DATA 5 C004 01 FCB $01 REGISTER NO=1 & SG=0 6 C005 00 FCB $00 SOUND DATA 7 C006 08 FCB $08 REGISTER NO=8 & SG=0 8 C007 0F FCB $0F SOUND DATA 9 C008 07 FCB $07 REGISTER NO=7 & SG=0 10 C009 FE FCB $FE 11 000A EXEC EQU * --- PROGRAM START --- 12 C00A 103F SWI2 CALL "PSGINI" ROUTINE 13 C00C 42 FCB $42 14 C00D 16 FCB $16 15 C00E 30 8CF1 LEAX PARM1,PCR X:TOP ADDR OF PARM. 16 C011 C6 04 LDB #$04 B:COUNT OF SOUND DATA 17 C013 34 04 LOOP PSHS B 18 C015 EC 81 LDD ,X++ A:SG NO & REGISTER NO 19 * 20 C017 34 10 PSHS X 21 C019 103F SWI2 CALL "PSGSYC" ROUTINE 22 C01B 42 FCB $42 23 C01C 15 FCB $15 24 C01D 35 10 PULS X 25 C01F 35 04 PULS B B:COUNT OF SOUND DATA 26 C021 5A DECB 27 C022 26 EF BNE LOOP 28 C024 39 RTS 29 END
コメントをかく