日立MB-S1に関する情報

メモリ空間2
ルーチン番号$15

機能

SG(サウンド・ジェネレータ)の制御。

解説

AccAのSG番号のレジスタ番号に、AccBに格納されている音程、音量、ノイズのデータを設定します。
PSGSYCは簡単なシンセサイザとして機能を発揮します。
SGは、トーン発生器+減衰器、ノイズ・ジェネレータ、エンベロープ・ジェネレータ、ミキサから構成され、下記の手順でレジスタを設定します。

トーンの出力(1〜3は指定順不問)

  1. 音量を0にする
  2. 音階の設定
  3. トーン・ノイズ・チャンネルの選択
  4. 音量の設定

エンベロープの出力(1〜5は指定順不問)

  1. 音階の設定
  2. ノイズの周波数
  3. トーン・ノイズ・チャンネルの選択
  4. エンベロープの設定
  5. エンベロープ周波数の設定
  6. エンベロープの波形選択
注)トーンは音量を設定したとき、エンベロープはエンベロープ波形を選択したときに音が出るので、上記手順が違うと不要なノイズなどが出力されます。

入力情報

AccA:
D7---D3D2D1D0
SG番号レジスタ番号
SG番号:0または1(2個のSGの内1つを選択)
レジスタ番号:0〜13
レジスタ番号データ動作備考
D7D6D5D4D3D2D1D0
0下位8ビット・データチャンネルAの音階音階は12ビットのデータで表現する
1-上位4ビット・データ
2下位8ビット・データチャンネルBの音階
3-上位4ビット・データ
4下位8ビット・データチャンネルCの音階
5-上位4ビット・データ
6-5ビット・データノイズ周波数ノイズの平均周波数を指定する
7-ノイズトーンノイズ/トーンのチャンネル選択各チャンネルから出す音を指定する
CBACBA
8-M4ビット・データチャンネルAの音量M=0のとき下位4ビットが音量調節
M=1のときエンベロープ作動
9-M4ビット・データチャンネルBの音量
10-M4ビット・データチャンネルCの音量
11エンベロープデータの下位8ビットエンベロープ周期
12エンベロープデータの上位8ビット
13-エンベロープ波形
AccB:データ
  • レジスタ番号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ビットエンベローブ・パターン(縦軸は音量、横軸は時間)
00--\_________
01--/│________
1000\│\│\│\│\│\
1001\_________
1010\/\/\/\/\/\/
1011\│ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
1100/│/│/│/│/│/│
1101/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
1110/\/\/\/\/\/\
1111/│________
●エンベロープの周期
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

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

どなたでも編集できます