Detail Specs
CPU SONY SPC700シリーズ CMOS8ビットCPU
最小命令実行時間 1.953us/2.048MHz
内蔵ROM 64バイト (IPL)
メモリ空間 64Kバイト

メモリ・マッピング / Memory Mapping

      0000H~00EFH  外部メモリ領域
      00F0H~00FFH  周辺機能レジスタ(DSPで使用)
      0100H~01FFH  外部メモリ領域
      0200H~7FFFH  外部メモリ領域(標準データ転送域)
      8000H~FFBFH  使用不可
      FFC0H~FFFFH  IPL ROM  64byte
                              (IPL ROMはハードの初期設定プログラムが
                              入っています。)
      0000H~00FFH  0Page
      0100H~01FFH  1Page
      0000h~7FFFH  256Kbit RAM(基板上に実装)

入出力ポート / I/O Port

周辺レジスタ / Peripheral Register

 アドレス   機能レジスタ  R/W      リセット時              備考
00F0H (test)         ------ -------------------- サウンドCPUに実装
00F1H Control          W   Control = "--00-000"
00F2H Resister Add.  R/W         不定             DSPに実装
00F3H Resister Data  R/W         不定             DSPに実装
00F4H Port-0         R/W     Port0r = "00"    サウンドCPUに実装
                                     Port0w = "00"
00F5H Port-1         R/W     Port1r = "00"    サウンドCPUに実装
                                     Port1w = "00"
00F6H Port-2         R/W     Port2r = "00"    サウンドCPUに実装
                                     Port2w = "00"
00F7H Port-3         R/W     Port3r = "00"    サウンドCPUに実装
                                     Port3w = "00"
00F8H -------------- ------ -------------------- --------------------
00F9H -------------- ------ -------------------- --------------------
00FAH Timer-0          W           不定         サウンドCPUに実装
00FBH Timer-1          W           不定         サウンドCPUに実装
00FCH Timer-2          W           不定         サウンドCPUに実装
00FDH Counter-0        R           不定         サウンドCPUに実装
00FEH Counter-1        R           不定         サウンドCPUに実装
00FFH Counter-2        R           不定         サウンドCPUに実装

APU I/O

ポート0~3は、SFXバスを通じてSCPUとデータ通信を行うポートで、8ビットIN4本(nr)、8ビットOUT4本(nw)より構成されます。 SCPUが2140Hへデータを書き込む事により、Port 0rにデータが格納されます。 そして、Sound-CPUが00F4Hを書き込むことで、Port 0rの内容が読み出されます。 Sound-CPUがAPU I/Oポート(00F4H)へデータを書き込むと、Port 0wにデータが書き込まれ、SCPUが2140Hを読み込むとでPort 0wの内容が読み出されます。 (リセット時は、Port nrレジスタ、Port nwレジスタの内容は”00”となります。 ( Port 1w~Port 3wについても同様 n=0ー3))

Port 0~Port 3レジスタ
Sound-CPU      SCPUから  レジスタ名  W/R  Sound-CPU側から見た機能
から見たアドレス  見たアドレス
00F4H     2140H     Port0r     R    Port0rレジスタの内容をリード
                              Port0w     W    Port0wレジスタへのライト
00F5H     2141H     Port1r     R    Port1rレジスタの内容をリード
                              Port1w     W    Port1wレジスタへのライト
00F6H     2142H     Port2r     R    Port2rレジスタの内容をリード
                              Port2w     W    Port2wレジスタへのライト
00F7H     2143H     Port3r     R    Port3rレジスタの内容をリード
                              Port3w     W    Port3wレジスタへのライト

*コントロールレジスタ

・Control Reg.によるタイマーの制御

  ST0はタイマーT0のスタート・ストップ制御ピットで”0”でタイマーストップ、”
1”でタイマーがスタートします。この時、ST0をいったん ”0”にしてから”1”す
る必要があります。ST1、ST2はそれぞれタイマーT1、タイマーT2のスタート・ストップ
制御ピットで、機能はST0と同様です。
              D7    D6    D5    D4    D3    D2    D1    DO
   Control    ──  ──  PC32  PC10  ──  ST2   ST1   ST0    (W)
[00F1H]                               ↑    ↑    ↑
                                             └──┴──┴─”1”Timer Start
                                                             ”0”Timer Stop
                                                            リセット時"--00-000"

・ポートのクリア
PC32,PCF10に"1"を書き込む事により、ポートは"00"にクリアされます。"0"を書き込ま
れた場合にはクリアされません。
ポートクリア制御ピット PC10に"1"をライトすると、Port0rレジスタと、Port1rレジス
タは共に、"00"にクリアします。同様にPC32に"1"をライトすると、Port2rレジスタとP
ort31rレジスタは共に、"00"にクリアされます。
  ポートクリアは、ポートクリア制御ピットに"1"が書き込まれた次のマシンサイクル内
に行われます。ポートクリアタイミングとSFXパスからの当該ポートへのライトタイミン
グが競合する時には、当該レジスタの内容は不定となります。

               D7    D6    D5    D4    D3    D2    D1    DO
   Control    ──  ──  PC32  PC10  ──  ST2   ST1   ST0    (W)
[00F1H]             ↑    ↑
                           └──┴──”1”ポートクリア
                                       ”0”クリアせず
                                         リセット時"--00-000"

・タイマー

  タイマーT0,T1,T2はそれぞれ、下位8ビットプログラマブルインターバルタイマーと、
その上位に連結された上位4ビットアップカウンタで構成され、それぞれ独立にプログ
ラム可能です。
    タイマーT0、タイマーT1のクロック入力は、プリスケーラの8kHz(125us)また、
  タイマーT2のロック入力は、プリスケーラの64kHz(15.6us)です。

                          8ビットタイマー          4ビットアップカウンタ
                       分解能      最大カウント値       最大カウント値
 タイマーTO、T1      125  μsec      32 msec               512 msec
 タイマーT2          15.6 μsec       4 msec                64 msec

 タイマーT0の下位8ビットは、2進アップ・カウンタを中心に構成され、カウントク
ロックが入力されるごとにインクリメントします。その値がタイマー・レジスタの内容
と一致すると00Hにクリアされ、同時に4ビットアップカウンタへのパルスを発生します。
  4ビットアップカウンタは2進アップ・カウンタを中心に構成され、下位からのパル
スが入力されるごとにインクリメントします。
  タイマーT0のカウンタ動作は、Control Reg のビット0により制御されます。ST0ビッ
トが”0”の時、カウントアップは停止され、”1”でカウント上位・下位ともクリア
したあとカウントアップが開始されます。
  タイマー・レジスタへの書き込みは、カウンタが停止している時に行います。この時、
書き込む値の最小値は01Hで最大値は00Hとなります。尚、タイマー・レジスタの値は読
むことができませんが上位4ビットの値 CN0はいつでも読み出すことが出来ます。CN0の
値が読み出されると、4ビットアップカウンタ部のみ"00"にクリアされます。
 タイマーT0は、リセット入力(ノットPOR = "L")により動作を停止します。
  このリセット時、Control RegST0"0"、タイマー・レジスタTM0及びCN0は不定となります。

上位4ビットカウンタのタイミング
  CNの値が読み出されるとIC内部タイミングによって、4ビットアップカウンタの
みクリアされますが、リードクリアパルスと4ビットアップカウンタへのパルスは競合
しません。従って4ビットアップカウンタへのパルスが入力された時、CNの値は必ず
インクリメントされまたCNのあたいが読み出されるとクリアされCN=”0”となり
ます。

               D7    D6    D5    D4    D3    D2    D1    DO
   Control    ──  ──  PC32  PC10  ──  ST2   ST1   ST0    (W)
[00F1H]                               ↑    ↑    ↑
                                             └──┴──┴─”1”Timer Start
                                                             ”0”Timer Stop
                                                            リセット時"--00-000"

   Timer-0                          TM0                     (W)
[00FAH]└──┴──┴──┴──┴──┴──┴──┴──┘
   Timer-1                          TM1                     (W)
[00FBH]└──┴──┴──┴──┴──┴──┴──┴──┘
   Timer-2                          TM2                     (W)
[00FCH]└──┴──┴──┴──┴──┴──┴──┴──┘
                                                               リセット時 不定
                 D7    D6    D5    D4    D3    D2    D1    DO
  Counter-0      ──────────           CN0         (R)
[00FDH]└──┴──┴──┴──┴──┴──┴──┴──┘
  Counter-1      ──────────           CN1         (R)
[00FEH]└──┴──┴──┴──┴──┴──┴──┴──┘
  Counter-2      ──────────           CN2         (R)
[00FFH]└──┴──┴──┴──┴──┴──┴──┴──┘
                                                               リセット時 不定


・DSP

Interface register
                 D7    D6    D5    D4    D3    D2    D1    DO
 Register Add.                 Register Address                (R/W)
[00F2H]└──┴──┴──┴──┴──┴──┴──┴──┘
 Register Data                 Register Data                   (R/W)
[00F3H]└──┴──┴──┴──┴──┴──┴──┴──┘
                                                               リセット時 不定
DSP内のレジスタにデータをセットするレジスタです。下図のフローチャートの手順
で指定されたレジスタにその値がセットされます。
00F2HにセットしたいDSPのアドレスを書く>00F3Hにデータを書き込む。
また、Register Dataの内容を読みたい時も下図のフローチャートに従って下さい。
00F2Hに読みたいアドレスをセットする。>00F3Hの内容を見る。


*使用レジスタ

DSPレジスタマップ
┌───┬─────────┬────────────────────────┐
│Addr. │Register  │                 機  能  説  明                 │
├───┼─────────┼────────────────────────┤
│  00  │          VOL(L)  │┐Lch,RchのVolume                               │
│  01  │          VOL(R)  │┘                                              │
│  02  │          P(L)    │┐P(H)とP(L)の計14ピットで音の高さを表す。      │
│  03  │          P(H)    │┘                                              │
│  04  │Voicc 0   SRCN    │0~255までのソースナンバーの指定。          │
│  05  │          ADSR(1) │┐ADSR(1)のD7=1でADSRの指定。                   │
│  06  │          ADSR(2) │┘D7=0の時、GAINが有効。                        │
│  07  │          GAIN    │プログラムによって自由にエンベローブを設定できる。  │
│  08  │        ☆ENVX    │DSPがTs毎に書き換えるエンベローブの現在値。         │
│  09  │        ☆OUTX    │エンベローブ乗算後、VOL乗算前の値。(現在の波高値) │
├───┼─────────┼────────────────────────┤
│10~19│     Voice 1 :    │┐                                              │
│20~29│     Voice 2 :    ││                                              │
│30~39│     Voice 3 :    ││                                              │
│40~49│     Voice 4 :    │├ Voicc 0と同じ。                              │
│50~59│     Voice 5 :    ││                                              │
│60~69│     Voice 6 :    ││                                              │
│70~79│     Voice 7 :    │┘                                              │
├───┼─────────┼────────────────────────┤
│  0C  │     MVOL(L)      │メインボリューム(L)                             │
│  1C  │     MVOL(R)      │メインボリューム(R)                             │
│  2C  │     EVAL(L)      │エコーボリューム(L)                             │
│  3C  │     EVOL(R)      │エコーボリューム(L)                             │
│  4C  │     KOL          │key on. D0~D7がVoicc0~Voice7に対応。          │
│  5C  │     KOF          │key off. D0~D7がVoicc0~Voice7に対応。         │
│  6C  │     FLG          │リセット,ミュート,エコーのon又はoff,ノイズのクロックの指定。 │
│  7C  │   ☆ENDX         │sourceのend blockの表示。                       │
├───┼─────────┼────────────────────────┤
│  0D  │     EFB          │Echo Feed-Back。                                │
│  1D  │      -           │使用しません。                                  │
│  2D  │     PMON         │Voice(i-1)のOUTXを変調波として、Voiceiに変調。  │
│  3D  │     NON          │ノイズのon,off。D0~D7がVoicc0~7に対応。       │
│  4D  │     EON          │エコーのon,off。D0~D7がVoicc0~7に対応。       │
│  5D  │     DIR          │sourceディレクトリのオフセットアドレス。        │
│  6D  │     ESA          │エコー領域のオフセットアドレス。Echo Start Address。       │
│  7D  │     EDL          │Echo Delay。下位4ビットのみが有効。               │
├───┼─────────┼────────────────────────┤
│  0F  │           C0     │┐                                              │
│  1F  │           C1     ││                                              │
│  2F  │           C2     ││                                              │
│  3F  │   filter  C3     │├エコーフィルタの係数8タップのFIRフイルタを構成。           │
│  4F  │   関数    C4     ││                                              │
│  5F  │           C5     ││       (Lch,Rchとも同一フィルタとなります。)│
│  6F  │           C6     ││                                              │
│  7F  │           C7     │┘                                              │
└───┴─────────┴────────────────────────┘
   ☆....DPSが動作状態を書き込むレジスタ


・レジスタ機能

各 Voice毎のレジスタ(表記アドレスは Voice0の時)
・VOL(L),VOL(R)

             D7    D6    D5    D4    D3    D2    D1    DO
          ┌──┬────────────────────┐
  VOL(L)  │Sign│                 VOL(L)                 │
[00H]├──┼──┴──┴──┴──┴──┴──┴──┤
  VOL(R)  │Sign│                 VOL(R)                 │
[01H]└──┴──┴──┴──┴──┴──┴──┴──┘

     それぞれLch,Rchに乗算されるVolumeで、D7をsignビットとする2の補数形式です。
     負の値を入れると、位相が逆転します。
・P(L),P(R)

             D7    D6    D5    D4    D3    D2    D1    DO

          ┌─────┬─────────────────┐
   P(H)   │(0)   (0) │              P(H)                │
[02H]├──┴──┴──┴──┴──┴──┴──┴──┤
   P(L)   │                     P(L)                     │
[03H]└──┴──┴──┴──┴──┴──┴──┴──┘

  P(H)の下位6bitとP(L)の8bitとを加えた計14bitでピッチを表します。この時、P(H)の
上位2bitは0とみなされます。
  再生される音の周波数をf、原音(録音された時の音)の周波数をfo,P(H),P(L)の上
位14ビットで表される値をpとすると、以下の式が成り立ちます。
          f=fo X P / 2の12乗
   再生される音とオクターブ比とpとの関係は下図のようになっています。

   音程:  -2oct.   -1oct.     原音     +1oct.    +2oct.(ほぼ)
          ─┼────┼────┼────┼────┤
     p:  0400H     0800H     1000H     2000H     3FFFH


・ADSR(1),ADSR(2)

            D7    D6    D5    D4    D3    D2    D1    DO
          ┌───────────┬───────────┐
  ADSR(1) │ADSR│      DR        │          AR          │
[05H]│/GAIN                 │                      │
          ├──┴──┴──┬──┴──┴──┴──┴──┤
  ADSR(2) │       SL       │             SR             │
[06H]└──┴──┴──┴──┴──┴──┴──┴──┘
     ADSR(1)のD7=1のときにこの2Byteが有効となります。(ADSRモード)
     ARは一定値(1/64)加算,DR,SRは一定値(1-1/256)乗算。
   Key off時には一定値(-1/256)加算により、クリック音を防止しています。
   (GAINモードでも同様)

 ADSRパラメータ
┌─┬─────┐┌─┬─────┐┌─┬─────┐
│AR│0→1      ││DR│1→SL     ││SR│1→t/10   │
│  │の時間    ││  │の時間    ││  │の時間    │
├─┼─────┤├─┼─────┤├─┼─────┼─┬─────┐
│ O│4.1 sec.  ││ 0│1.2 sec.  ││ 0│ ∞ SEC.  │10│1.2 sec.  │
│ 1│2.6       ││ 1│740 msec. ││ 1│ 38       │11│880 msec. │
│ 2│1.5       ││ 2│440       ││ 2│ 28       │12│740       │
│ 3│1.0       ││ 3│290       ││ 3│ 24       │13│590       │
│ 4│640 msec. ││ 4│180       ││ 4│ 19       │14│440       │
│ 5│380       ││ 5│110       ││ 5│ 14       │15│370       │
│ 6│260       ││ 6│ 74       ││ 6│ 12       │16│290       │
│ 7│160       ││ 7│ 37       ││ 7│9.4       │17│220       │
│ 8│ 96       │└─┴─────┘│ 8│7.1       │18│180       │
│ 9│ 64       │┌─┬──┐      │ 9│5.9       │19│150       │
│ A│ 40       ││SL│ 比 │      │ A│4.7       │1A│110       │
│ B│ 24       │├─┼──┤      │ B│3.5       │1B│ 92       │
│ C│ 16       ││ O│1/8 │      │ C│2.9       │1C│ 74       │
│ D│ 10       ││ 1│2/8 │      │ D│2.4       │1D│ 55       │
│ E│  6       ││ 2│3/8 │      │ E│1.8       │1E│ 37       │
│ F│  0       ││ 3│4/8 │      │ F│1.5       │1F│ 18       │
└─┴─────┘│ 4│5/8 │      └─┴─────┴─┴─────┘
                  │ 5│6/8 │(パラメータ値は変更の可能性があります。)
                  │ 6│7/8 │
                  │ 7│ 1  │
                  └─┴──┘
・GAIN
     ADSR(1)のD7=0の時に有効となります。次の5モードが有ります。
                         D7    D6    D5    D4    D3    D2    D1    DO
                      ┌──┬────────────────────┐
直接指定              │  0 │                                        │
            [07H]└──┴──┴──┴──┴──┴──┴──┴──┘
                      ┌──┬──┬──┬──────────────┐
増加モード  (リニア)│  1 │  1 │  0 │                            │
            [07H]└──┴──┴──┴──┴──┴──┴──┴──┘
                      ┌──┬──┬──┬──────────────┐
増加モード  (折れ線)│  1 │  1 │  1 │                            │
            [07H]└──┴──┴──┴──┴──┴──┴──┴──┘
                      ┌──┬──┬──┬──────────────┐
減少モード  (リニア)│  1 │  0 │  0 │                            │
            [07H]└──┴──┴──┴──┴──┴──┴──┴──┘
                      ┌──┬──┬──┬──────────────┐
減少モード  ( 指数 )│  1 │  0 │  1 │                            │
            [07H]└──┴──┴──┴──┴──┴──┴──┴──┘

     直接指定      ・・・DO~D6の値で直接 GAINの値をセット
     増加(リニア)・・・一定値(1/64)加算
     増加(折れ線)・・・0.75まで定数(1/64)、0.75~1で定数(1/256)の加算
     減少(リニア)・・・一定値(1/64)減算
     減少( 指数 )・・・一定値(1-1/256)乗算
         いずれも初期値は、エンベローブの現在値(ENVXで示される値)が
       採用されます。

・GAIN
     ADSR(1)のD7=0の時に有効となります。次の5モードが有ります。
     直接指定      ...D0~D6の値で直接・GAINの値をセット
     増加(リニア)...一定値(1/64)加算
     増加(折れ線)...0.75まで定数(1/64)、0,75~1で定数(1/256)の加算
     減少(リニア)...一定値(1/64)減算
     減少(折れ線)...一定値(1-1/256)乗算
     いずれも初期値は、エンベローブの現在値(ENVXで示される値)が採用されます。

・SRCN
     Source Number の事です。別のツールで作成した音の hex ファイル中の、
   音色の順番のことです。
                  D7    D6    D5    D4    D3    D2    D1    DO
               ┌───────────────────────┐
     SRCN  │                                              │
     [04H]└──┴──┴──┴──┴──┴──┴──┴──┘

・ENVX
     ADSR/GAIN のエンベローブ定数の現在値。DSP側がTs(31.25usec)毎に書き換えます。
   Signビットなし7bit。(D7は常に0)
                 D7    D6    D5    D4    D3    D2    D1    DO
               ┌──┬────────────────────┐
     ENVX  │  0 │                                        │
     [08H]└──┴──┴──┴──┴──┴──┴──┴──┘

・OUTX
  エンベローブ乗算後・VOL乗算前の波高値の現在値。DSP値がTs(31.25usec)毎に書き換
えます。Signビット付8bit。ピッチ変調の変調波としてはこの値が用いられます。
                 D7    D6    D5    D4    D3    D2    D1    DO
               ┌──┬────────────────────┐
     OUTX  │Sign│                                        │
     [09H]└──┴──┴──┴──┴──┴──┴──┴──┘

*音声レジスタ

・KON,KOF
 key on 及び key off。D0~D7が各々Voice0~7に対応します。1の時key on又は key
off を行い、0の時は何もしません。この二つのレジスタは、リセットの必要はありませ
ん。KOFでは、1が書かれた Voiceについて、ADSRモード/GAINモードにかかわらず一定
値(-1/256)加算により 1→0 が 8msec.の割合で減衰します。また、KON,KOFの連続書き込
みは、2Ts(62.5usec)以上離して下さい。

                D7      D6      D5      D4      D3      D2      D1      DO
            ┌───┬───┬───┬───┬───┬───┬───┬───┐
    KON  │Voice7│Voice6│Voice5│Voice4│Voice3│Voice2│Voice1│Voice0│
  [4CH]└───┴───┴───┴───┴───┴───┴───┴───┘

            ┌───┬───┬───┬───┬───┬───┬───┬───┐
    KOF  │Voice7│Voice6│Voice5│Voice4│Voice3│Voice2│Voice1│Voice0│
  [5CH]└───┴───┴───┴───┴───┴───┴───┴───┘

・PMON
  Voice(i-1)(i=1~7)のOUTXを変調波として、Voice i にピッチ変調をかけます。Di=1
のとき変調 ON となります。(例:D1=1のとき、Voice1から変調音が出ます。)
 ただし、Voice0には変調はかかりません。そのため、D0ビットは無効となります。
 ピッチ変調の方法は、変調波の波高値をYo、P(H),P(L)の値をPとすると、P'=P(
1+Yo)となる値P’が、Pに代わってその時のピッチの値として採用されるという
ものです。

                  D7      D6      D5      D4      D3      D2      D1      DO
              ┌───┬───┬───┬───┬───┬───┬───┬───┐
    PMON  │Voice7│Voice6│Voice5│Voice4│Voice3│Voice2│Voice1│XXX│
  [2DH]  └───┴───┴───┴───┴───┴───┴───┴───┘

・NON
 ノイズの on/off。1でON。D0~7がVoice0~7に対応しています。on の時、音源データ
の変わりにノイズがでます。この時、前頁 SRCN でフォルマントのみの音源データを指
定していると、ノイズは音源データの長さ分の時間しか発音しません。
 任意の時間再生したい時は必ず SRCN で、ループを含む音源データを指定してくださ
い。また、二つ以上の Voice が on であっても Noise の音源は同一です。このノイズ
に変調はかけられません。

                D7      D6      D5      D4      D3      D2      D1      DO
            ┌───┬───┬───┬───┬───┬───┬───┬───┐
    NON  │Voice7│Voice6│Voice5│Voice4│Voice3│Voice2│Voice1│Voice0│
  [3DH]└───┴───┴───┴───┴───┴───┴───┴───┘



・EON
Echo の on/off。1で on。D0~7 が Voice0~7 に対応しています。

                D7      D6      D5      D4      D3      D2      D1      DO
            ┌───┬───┬───┬───┬───┬───┬───┬───┐
    EON  │Voice7│Voice6│Voice5│Voice4│Voice3│Voice2│Voice1│Voice0│
  [4DH]└───┴───┴───┴───┴───┴───┴───┴───┘


・FLG

                D7      D6      D5      D4      D3      D2      D1      DO
            ┌──┬──┬─────┬───────────────────┐
    FLG  │RES │MUTE│ノットECEN│                NCK                │
  [6CH]└──┴──┴─────┴───┴───┴───┴───┴───┘


    RES       :  D7=1のときソフトリセットがかかります。このとき、全 Voice が
               key on 待ち状態になりミュートがかかります。
               パワーオン時に1となります。
    MUTE      :  D6=1 のとき全 Voice にミュートがかかります。
               パワーオン時に1となります。
    ECEN      :  D5=0 のとき、Echo による外部メモリへの書込みが可能になります。
               (Echo Enable)パワーオン後、CPUが最初に書込みを行うまでは
               読み出しデータは不定です。
    NCK       :  ノイズ発生器のクロックを指定します。

     6.2.2.  ノイズ発生器クロック
     このレジスタは、CPU側から書込みだけが可能です。

・ENDX
 Source の End Flag の立つブロックの BRR デコードを終えたら、DSP 側が1を立て
ます。D0~7 が Voice 0~7 に対応しています。key on されたVoice があると、それに
対応する bit はリセットされます。また、CPU側がこのレジスタを書き込むと、全 bit
 がリセットされます。

                D7      D6      D5      D4      D3      D2      D1      DO
            ┌───┬───┬───┬───┬───┬───┬───┬───┐
   ENDX │Voice7│Voice6│Voice5│Voice4│Voice3│Voice2│Voice1│Voice0│
  [7CH]└───┴───┴───┴───┴───┴───┴───┴───┘


・MVOL(L),MVOL(R),EVOL(L),EVOL(R)
 Main Volume (Lch,Rch) Echo Volume (Lch,Rch)のことです。各チャンネルのメイン・
ボリューム(エコー・ボリューム)はエコー・ボリューム(メイン・ボリューム)と加
算され出力されます。

                  D7    D6    D5    D4    D3    D2    D1    DO
  MVOL(Lch,Rch)┌──┬────────────────────┐
  EVOL(Lch,Rch)│    │                                        │
     [0CH]│Sign│                                        │
     [1CH]└──┴──┴──┴──┴──┴──┴──┴──┘

・ESA
 Echo Start Address。 Echo 領域のオフセットアドレスを与えます。[ESA]x100H がE
cho 領域の先頭アドレスとなります。

・EDL
 Echo Dclay。下位 4bit のみが有効です。ディレイ時間は 16msec 間隔で、 0~240m
sec の範囲で可変します。この時間を t とすると、必要な外部メモリ領域は(2t)kbi
te となります。(最大 30k byte)ただし、EDL=0のときは、ESA~ESA+3
の4バイトのメモリ領域が必要となります。

                  D7    D6    D5    D4    D3    D2    D1    DO
               ┌───────────┬───────────┐
       EDL  │XXXXXXXXXXX│                      │
     [7DH]└───────────┴──┴──┴──┴──┘

・EFB (Echo Feed-Back)
     符号付 8bit.

                  D7    D6    D5    D4    D3    D2    D1    DO
               ┌──┬────────────────────┐
       EDL  │Sign│                                        │
     [7DH]└──┴──┴──┴──┴──┴──┴──┴──┘

・DIR
 Source ディレクトリのオフセットアドレスを与えます。[DIR]x100H がディレクトリ
の先頭アドレスとなります。

・CO~C7
 Echo フィルタの係数を与えます。sign付8bit。8タップの FIRフィルタを構成します。
Lch,Rchとも同一フィルタとなります。

                          D7    D6    D5    D4    D3    D2    D1    DO
                       ┌──┬────────────────────┐
         CO~C7        │Sign│                                        │
 [0FH]~[7FH]└──┴──┴──┴──┴──┴──┴──┴──┘



・SA(H),SA(L)
     Sourceの Start Address。 16bit。アドレスは先頭ブロックの先頭アドレスです。
・LSA(H),LSA(L)
     Sourcek Loop Start Address。16bit。アドレスはループスタートブロックの先頭
   アドレスです。

     ┌─────┬─────┐
     │Mem.Addr. │Directory │
     ├─────┼─────┤
     │  m+0  │   SA(L)  │  SA:  Source の Start Address
     │  m+1  │   SA(H)  │
     │  m+2  │  LSA(L)  │ LSA:  Source のLoop Start Address
     │  m+3  │  LSA(H)  │
     └─────┴─────┘
                                          A15           A8  A7            A0
                                        ┌────────┬────────┐
                                        │     DIR     │00000000│
                                        └─────┬──┴─────┬──┤

  n=[DIR]X100H+[SRCN]X4                       │    SRCN    │00│
                                          +)      └────────┴──┘
                                         ──────────────────
                                        ┌─────────────────┐
                                        │                 n               │
                                        └─────────────────┘



・音声プロックフォーマット
 32kHzでサンプリングされた音は、BRR(ビット・レート・リダクション)の
処理をかけられ、16ビットから4ビットにデータ圧縮されます。4ビットのデータは
16個にまとめられRFレジスタと共に、9 byte で1プロックを形成します。

              D7      D6      D5      D4      D3      D2      D1      DO
          ┌───────────────────────┬───┬───┐
   RF   │                  BRR情報                  │Loop  │END│
          │                                              │on/off│      │
          ├───┴───┴───┴───┼───┴───┴───┴───┤

    Da0   │            Da0 H             │            Da0 L             │

          ├───────────────┼───────────────┤
    Db0   │            Db0 H             │            Db0 L             │

          ├───────────────┼───────────────┤
    Da1   │            Da1 H             │            Da1 L             │

          ├───────────────┼───────────────┤
    Db1   │            Db1 H             │            Db1 L             │

          ├───────────────┼───────────────┤
    Da2   │            Da2 H             │            Da2 L             │

          ├───────────────┼───────────────┤
    Db2   │            Db2 H             │            Db2 L             │

          ├───────────────┼───────────────┤

    Da3   │            Da3 H             │            Da3 L             │

          ├───────────────┼───────────────┤
    Db3   │            Db3 H             │            Db3 L             │

          └───────────────┴───────────────┘



・RF
     D7~D2は、BRRに関する情報です。D1=1 のときはループありのSourceで
   あることを示し、D0=1 のとき、ブロックがデータの最後のブロックであることを
   示します。


・CPUの構成
   6502シリーズとよく似た命令セットを持つSPC700は、メモリ空間は64キ
ロが用途別にアドレス区分され、アドレス0000h~00FFhを0ページ、アドレ
ス0100h~01FFhを1ページと呼びます。この領域のデータについては、プログ
ラム・ステイタス・ワード内のダイレクト・ページ・フラグ(P)でダイレクト・ペー
ジ指定を行うと、多様なアドレシング・モードで、かつ少ないサイクル数でデータ処理
を行うことが出来ます。
  CPUにはA,X,Yの汎用レジスタ、各種フラグの集合のプログラム・ステイタス
・ワード(PSW)、プログラム・カウンタ(PC)、スタック・ポインタ(SP)が
あります。
   Aレジスタは最も多くの命令で操作され、8ビット演算のアキュムレータになります。
   16ビット演算時にはYレジスタとペアになり16ビット・アキュムレータの下位8
ビットのレジスタとなります。X,Yレジスタは汎用レジスタとしての機能の他、各種
インデックス・アドレッシング・モードのインデックス・レジスタとしての機能や2ア
ドレス命令のソース、ディスティネーション・アドレス・レジスタ機能など多様な操作
に使用されます。
  命令セットにはAれじすたを中心として算術・論理演算が行われる1アドレス命令と、
ダイレクトページ内の任意のアドレスをソース・アドレスとディスティネーション・ア
ドレスに指定できる2アドレス命令があります。
  制御用途に多様されるビット処理に対しては、アドレス0000h~1FFFhの8
Kバイトの広範囲のデータに対してブーリアン・ビット操作命令が適用できます。
   さらにダイレクト・ペード内のビットに対しては、セット,リセット,ビット条件相
対ジャンプが使用できます。64Kバイトの全空間のデータに対しては、複数ビットの
テスト・アンド・セット,テスト・アンド・リセット命令が用意されています。制度を
必要とするデータや、高速にデータ処理を行うため、16ビット・データを1命令で操
作できます。ダイレクト・ペード内の連続する2バイトの16ビットデータとYレジス
タとAレジスタのペアとの間で、加算,減算,比較,転送が出来ます。また、ダイレク
ト・ページ内の連続する16ビット・データのインクリメント,デクリメントも可能です。
     高速データ処理と多様な形式のデータを処理するため、乗算,除算命令があります。
   乗算は符号なし8ビット×8ビットで被乗算をYレジスタに、乗算をAレジスタに格
納し、結果はY,Aの16ビットアキュムレータに入ります。除算は符号なし16ビッ
ト÷8ビットで、被除数は、Y,Aの16ビット・アキュムレータに、除数はXレジス
タに格納され、結果の商はAレジスタに入り、余りがYレジスタに入ります。10進デ
ータの処理には、加減算両方の結果に対し10進(加,減算)補正命令があります。
     ブランチ系の命令には各種ステイタス・フラグの状態による相対ブランチ命令、ダ
イレクト・ページ内の任意のビットのセット,リセット状態によるブランチ命令など
   があります。また、ループ系のブランチ命令には比較ブランチ,減算ブランチ命令が
ありそれぞれについて2種類のアドレシング・モードがあります。サブルーチン・コー
ル命令には64Kバイト内のサブルーチン・アドレス直接指定の3バイトコール命令、
特定エリアをサブルーチン・コールする2バイト・コール命令、コール・テーブルを用
いる16個の1バイト・コール命令があり、サブルーチンの使用頻度に応じて使い分け
るとバイト効率を向上することが出来ます。

7.1. CPUレジスタ
    CPU内部には各種の命令実行に必要なレジスタがあります。Aレジスタ(主に
  8ビット・アキュムレータとして機能),Xレジスタ,Yレジスタ(インデックス・
  レジスタとしても使える汎用8ビット・レジスタ),PSW(プログラム・
  ステータス・ワード),SP(スタック・ポインタ)等です。これらは、8ビット・
  レジスタですが、PC(プログラム・カウンタ)は16ビットで構成されています。

 ┌───────────────────────────────┐プログラム・カウンタ
 │                             PC                             │
 └───────────────┴───────────────┘(16ビット)
                                 ┌───────────────┐A レジスタ
                                 │              A              │
                                 └───────────────┘(8ビット)
 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・(Y,A ベア
 ・              Y              ・              A              ・16 ビット
 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・アキュムレータ)
                                                                   (16ビット)
                                 ┌───────────────┐X レジスタ
                                 │              X              │
                                 └───────────────┘(8ビット)
                                 ┌───────────────┐Y レジスタ
                                 │              Y              │
                                 └───────────────┘(8ビット)
                                 ┌───────────────┐スタック・ポインタ
                                 │             SP             │
                                 └───────────────┘(8ビット)
                                 ┌───────────────┐プログラム・ステータス・
                                 │            PSW            │ワード
                                 └───────────────┘(8ビット)
                                 ↓                              ↓
                                 ┌─┬─┬─┬─┬─┬─┬─┬─┐
                                 │N│V│P│-│H│-│Z│C│
                                 └┬┴┬┴┬┴─┴┬┴─┴┬┴┬┘
                                   │  │  │      │      │  └ キャリー・フラグ
                                   │  │  │      │      │     (ビット・アキュムレータ)
                                   │  │  │      │      └ ゼロ・フラグ
                                   │  │  │      └ ハーフ・キャリー・フラグ
                                   │  │  └ ダイレクト・ページ・フング
                                   │  └ オーバー・フロー・フング
                                   └ ネガティブ・フング



(1)  Aレジスタ
     8ビットのアキュムレータとしてしようされるレジスタです。
   16ビット演算命令時にはYレジスタとペアで構成する16ビットアキュムレータの
   Lowバイト・データを保持するレジスタになります。演算命令時には乗数レジスタと
   なり、積のLowバイト・データが入ります。除数命令時にはYレジスタとペアで
   被除数を構成し、結果の商が入ります。
(2)  Xレジスタ
     Xレジスタは汎用のデータ・レジスタとしての役割の他にインデックス・
   アドレシング時のインデックス・レジスタとして機能します。また、2アドレス命令
の
   ディスティネーション・アドレス・レジスタ、Xレジスタ間接アドレス・レジスタに
   使われます。
     除算命令時には除数レジスタになります。
(3)  Yレジスタ
     Yレジスタは汎用のデータ・レジスタとしての役割の他にインデックス・
   アドレシング時のインデックス・レジスタとして機能します。また、2アドレス命令
   のソース・アドレスとして使われます。
     16ビット演算命令時にはAレジスタとペアで構成する16ビットアキュムレータ
の
   Highバイト・データを保持するレジスタになります。乗算命令時には被除数
   レジスタになり、積のHighバイト・データが入ります。
     除算命令時にはAレジスタとペアで被除数を構成し、結果の余りが入ります。
     条件ジャンプ時のループ・カウンタにも使われます。
(4)  プログラム・カウンタ(PC)
     プログラム・カウンタは16ビットで構成され64Kバイトのアドレス領域を
   持ちます。上位の8ビットをPCH、下位の8ビットをPCLと呼びます。
     通常は、次に実行するアドレスを持っていて、フェッチした命令に必要なバイト数
   だけインクリメントされます。
     プログラムの途中に分岐命令があるとプログラム・カウンタには、分岐先のアドレス
   が格納されます。リセット(ノットPOR)入力があるとアドレスFFFFhと
   FFFEhにあるリセット・ベクタがそれぞれPCH、PCLに入り、分岐します。
(5)  スタック・ポインタ(SP)
     スタック・ポインタは割り込みや、サブルーチン・コール、プッシュ(PUCH)、
   ポップ(POP)、リターン(RET)命令時にデータをRAM上に退避したり、
   RAM上から復帰するために使用されます。スタック・ポインタの示すアドレス領域は
   1ページ内(アドレス0100h~01FFh)です。

   15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
 ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
 │0│0│0│0│0│0│0│1│           SPの値           │
 └─┴─┴─┴─┴─┴─┴─┴─┴───────────────┘
 └───────────────┴───────────────┘
            ハードで設定                  プログラムで設定

     *サブルーチン・コール時
     スタック・アドレス      動作       退避後のSPの値
          SP           PCH退避          SP-1
          SP-1       PCL退避          SP-2

     *サブルーチンからの復帰時
     スタック・アドレス      動作       退避後のSPの値
          SP+1       PCL退避          SP+1
          SP+2       PCLH避          SP+2

     Aレジスタ、Xレジスタ、Yレジスタ、PSWをスタックに退避,復帰するには
     PUSH,POP命令を使えます。

     *PUSH A(X,Y,PSW)
     スタック・アドレス              動作              退避後のSPの値
          SP             A(X,Y,PSW)の退避       SP-1

     *POP A(X,Y,PSW)
     スタック・アドレス              動作              退避後のSPの値
          SP+1         A(X,Y,PSW)の退避       SP+1


(6)  プログラム・ステイタス・ワード(PSW)
     プログラム・ステイタス・ワードは8ビットのレジスタで命令の実行結果より、セ
ット,リセットされるフラグ類とCPUの動作を決定するフラグ類から構成されています。
     リセット時には ”000-0-00”になります。

                              PSWの構成

           7      6      5      4      3      2      1      0
       ┌───┬───┬───┬───┬───┬───┬───┬───┐
       │  N  │  V  │  P  │  -  │  H  │  -  │  Z  │  C  │
       └───┴───┴───┴───┴───┴───┴───┴───┘

◇キャリー・フラグ(C)
       演算実行後、算術論理ユニット(ALU)の再上段ビットからキャリーがあった時、
       またはボローが無かった時にリセットされます。シフト、ローテイト命令でも変化
       します。ブーリアンビット操作命令のビット・アキュムレータとしても機能します。
       SETC命令でセットされ、CLRC命令でリセットされます。また、NOTC
       命令でキャリー・フラグは反転します。
       条件分岐命令でテストすることが出来ます。

◇ゼロ・フラグ(Z)
       演算実行後、結果がゼロのときにセットされ、ゼロでない時リセットされます。
       16ビット演算命令でもゼロの検出が行なわれます。条件分岐命令でテストする
       ことが出来ます。

◇ハーフ・キャリー・フラグ(H)
       演算実行後、ALUのビット3からビット4へキャリーがあった時、または
       ボローがなかった時にセットされます。セットする命令はありませんが、CLRV
       命令によってリセットされます。その際、オーバー・フロー・フラグもセット
       されます。

◇ダイレクト・ページ・フラグ(P)
       ダイレクト・ページ・アドレシングなど多くのアドレシング・モードが適用される
       ダイレクトページを指定するフラグです。”0”のときはアドレス0000h~
       00FFhの領域、”1”のときはアドレス0100h~01FFhの領域が
       ダイレクト・ページになります。STEP命令によってセットされ、CLRP命令
       によってリセットされます。

◇オーバー・フロー・フラグ(V)
       算術演算実行後、オーバー・フロー、アンダー・フローが生じた時セットされます。
       その際、Hフラグも同時に影響をうけます。
       条件分岐命令でテストすることが出来ます。

◇ネガティブ・フラグ(N)
       演算実行後、MSBの結果の値が”1”のときセットされ、”0”のときリセット
       されます。
       条件分岐命令でテストすることが出来ます。


7.2. メモリ空間
    Sound-CPUは64Kバイトのメモリをアクセスできます。メモリ空間は用途別に
  分割されています。アドレス0000hより512バイトは256バイト単位の
  2ページに分割されていて0ページ、1ページと呼びます。これらの領域内のデータは、
  ダイレクト・ページ・アドレシングなどの多くのアドレシング・モードによりアクセス
  できます。
    スタック領域は1ページにとられます。
7.2.1. ダイレクト・ページ(0,1ベージ)
    0ページ、1ページのどちらかをダイレクト・ページとするかは、プログラム・
    ステイタス・ワード内のダイレクト・ページ(P)フラグをセット、リセットする
    ことにより指定できます。このページ内のデータは少ないバイト数で高速に、かつ
    多くの種類の命令とアドレシング・モードで扱えるようになっています。

        スタック領域

        スタック領域は1ページ内のRAM領域に設定します。スタック・アドレスの
        上位バイトは01hに固定です。スタック・アドレスの下位バイトはプログラム
        で初期設定する必要があります。



 Sound-CPUでは、FFCOh~FFFFhまでマスクROMが内蔵されています。
ここには、SCPUを通じてROMカセットから256KビットRAM内に、データを
転送するプログラムが入っています。この領域はリセットにより使用されます。

ビット操作命令適用領域

1)SET1(セット・メモリ・ビット)、CLR1(クリア・メモリ・ビット)
    命令は、ダイレクト・ページ内の1ビット・データに対して適用できます。
2)TEST1(テスト・アンド・セット・ビット)、TCLR1(テスト・アンド・
    クリア・ビット)命令は、64Kバイトの全領域に対し適用できます。
3)ブーリアン命令(AND1,OR1,EOR1,MOV1,NOT1)は、
    アドレス0000H~1FFFHの8Kバイトの領域に対し適用できます。

ビット操作命令適用領域

0000H┌──┬────────┬──┬────────┬──┬────────┐
     │    │SET1,CLR1       │    │AND1,OR1        │    │TEST1,TCLR1     │
00FFH│    │ダイレクト・ページ    │    │EOR1,MOV1       │    │                │
     │    │に適用          │    │NOT1            │    │                │
01FFH│・・・・└────────┘    │                │    │                │
     │                            │                │    │                │
1FFFH│・・・・・・・・・・・・・・・・・・・・・・・・・・・・└────────┘    │                │
     │                                                    │                │
7FFFH│・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・│・・・・・・・・・・・・・・・・│
     │                                                    │:              :│
     │                                                    │: 使用不可     :│
FFBFH│                                                    │:              :│
FFC0H│・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・│・・・・・・・・・・・・・・・・│
     │                                                    │                │
     │                                                    │ IPL ROM        │
     │                                                    │                │
FFFFH└──────────────────────────┴────────┘


・ダイレクト・ページのアドレシング
    ダイレクト・ページ・フラグ(P)で指定されるダイレクト・ページ(P=0:
    アドレス0000h~00FFh、P=1:アドレス0100h~01FFh)の
    データはアドレシング・モードがすべて適用できますので、データ
    の多様な取扱いが出来るようになっています。また、命令語中の1バイトデータで
    直接アドレス指定できますので、バイト効率も高くなります。
    さらに、命令実効サイクルも少なくなりますので、データを高速にアクセスできます。

メモリアドレシング
┌─────┬────────────────┬─┬─────────────┐
│          │                                │バ│     有効アドレス領域     │
│   記号   │        アドレシング            │イ├───┬────┬────┤
│          │                                │ト│0000H │~1FFFH │~FFFFH │
│          │                                │数│~    │        │        │
│          │                                │  │OF11H │        │        │
├─────┼────────────────┼─┼───┼────┼────┤
│   dp     │ダイレクト・ページ                    │2│***│        │        │
├─────┼────────────────┼─┤***│        │        │
│  dp+X    │Xインデックスド・ダイレクト・ページ        │2│***│        │        │
├─────┼────────────────┼─┤***│        │        │
│  dp+Y    │Yインデックスド・ダイレクト・ページ        │2│***│        │        │
├─────┼────────────────┼─┤***│        │        │
│   (X)    │インダイレクト                        │1│***│        │        │
├─────┼────────────────┼─┤***│        │        │
│   (X)+   │インダイレクト・オートインクリメント             │1│***│        │        │
├─────┼────────────────┼─┤***│        │        │
│  dp,dp   │ダイレクト・ページ・トゥ・ダイレクト・ページ    │3│***│        │        │
├─────┼────────────────┼─┤***│        │        │
│ (X),(Y)  │インダイレクト・ページ・トゥ・インダイレクト・ページ│1│***│        │        │
├─────┼────────────────┼─┤***│        │        │
│ dp,#imm  │イミーディエント・データ・トゥ・ダイレクト・ページ  │3│***│        │        │
├─────┼────────────────┼─┤***│        │        │
│ dp.bit   │ダイレクト・ページ・ビット               │2│***│        │        │
├─────┼────────────────┼─┤***│        │        │
│dp.bit,rel│ダイレクト・ページ・ビット ・リラティブ       │3│***│        │        │
├─────┼────────────────┼─┼───┼────┤        │
│  mcm.bit │アブソリュート・ブーリアン・ビット            │3│***│****│        │
├─────┼────────────────┼─┼───┼────┼────┤
│  laps    │アブソリュート                        │3│***│****│****│
├─────┼────────────────┼─┤***│****│****│
│  laps+X  │X インデックス・アブソリュート             │3│***│****│****│
├─────┼────────────────┼─┤***│****│****│
│  laps+Y  │Y インデックス・アブソリュート             │3│***│****│****│
├─────┼────────────────┼─┤***│****│****│
│  [dp+X]  │X インデックス・インダイレクト             │2│***│****│****│
├─────┼────────────────┼─┤***│****│****│
│  [dp+Y」  │Y インデックス・インダイレクト             │2│***│****│****│
└─────┴────────────────┴─┴───┴────┴────┘


*SPC700命令要約
  SFX音楽CPUは、SPC700シリーズが使われています。ただし、割り込みは
サポートされてないため、スタンバイ,スリーブの各モードは使うことができません。

8ビットデータ転送命令 グループ1
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 MOV  A,#imm       E8       2    2     A ← imm                         N.....Z.
 MOV  A,(X)        E6       1    3     A ← (X)                         N.....Z.
 MOV  A,(X)+       BF       1    4     A ← (X) with auto increment     N.....Z.
 MOV  A,dp         E4       2    3     A ← (dp)                        N.....Z.
 MOV  A,dp+X       F4       2    4     A ← (dp+X)                      N.....Z.
 MOV  A,labs       E5       3    4     A ← (abs)                       N.....Z.
 MOV  A,labs+X     F5       3    5     A ← (abs+X)                     N.....Z.
 MOV  A,labs+Y     F6       3    5     A ← (abs+Y)                     N.....Z.
 MOV  A,[dp+X]     E7       2    6     A ← ((dp+X+1)(dp+X))            N.....Z.
 MOV  A,[dp]+Y     F7       2    6     A ← ((dp+1)(dp)+Y)              N.....Z.
 MOV  X,#imm       CD       2    2     X ← imm                         N.....Z.
 MOV  X,dp         F8       2    3     X ← (dp)                        N.....Z.
 MOV  X,dp+Y       F9       2    4     X ← (dp+Y)                      N.....Z.
 MOV  X,labs       E9       3    4     X ← (abs)                       N.....Z.
 MOV  Y,#imm       8D       2    2     Y ← imm                         N.....Z.
 MOV  Y,dp         EB       2    3     Y ← (dp)                        N.....Z.
 MOV  Y,dp+X       FB       2    4     Y ← (dp+X)                      N.....Z.
 MOV  Y,labs       EC       3    4     Y ← (aps)                       N.....Z.

8 ビットデータ転送命令 グループ2
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 MOV  (A),A        C6       1    4     A → (X)                         ........
 MOV  (A)+,A       AF       1    4     A → (X) with auto increment     ........
 MOV  dp,A         C4       2    4     A → (dp)                        ........
 MOV  dp+X,A       D4       2    5     A → (dp+X)                      ........
 MOV  labs,A       C5       3    5     A → (abs)                       ........
 MOV  labs+X,A     D5       3    6     A → (abs+X)                     ........
 MOV  labs+Y,A     D6       3    6     A → (abs+Y)                     ........
 MOV  [dp+X],A     C7       2    7     A → ((dp+X+1)(dp+X))            ........
 MOV  [dp]+Y,A     D7       2    7     A → ((dp+1)(dp)+Y)              ........
 MOV  dp,X         D8       2    4     X → (dp)                        ........
 MOV  dp+Y,X       D9       2    5     X → (dp+Y)                      ........
 MOV  labs,X       C9       3    5     X → (abs)                       ........
 MOV  dp,Y         CB       2    4     Y → (dp)                        ........
 MOV  (A),Y        C6       1    4     Y → (dp+X)                      ........
 MOV  (A),Y        C6       1    4     Y → (abs)                       ........


8ビットデータ転送命令 グループ3
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 MOV  A,X          7D       1    2     A ← X                           N.....Z.
 MOV  A,Y          DD       1    2     A ← Y                           N.....Z.
 MOV  X,A          5D       1    2     X ← A                           N.....Z.
 MOV  Y,A          FD       1    2     Y ← A                           N.....Z.
 MOV  X,SP         9D       1    2     X ← SP                          N.....Z.
 MOV  SP,X         BD       1    2     SP ← X                          ........
 MOV  dp(d),dp(s)  FA       3    5     (dp(d)) ← (dp(s))               ........
 MOV  dp,#imm      8F       3    5     (dp) ← imm                      ........


8ビット算術演算命令
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 ADC  A,#imm       88       2    2     A ← A + imm + C                 NV..H.ZC
 ADC  A,(X)        86       1    3     A ← A + (X) + C                 NV..H.ZC
 ADC  A,dp         84       2    3     A ← A + (dp) + C                NV..H.ZC
 ADC  A,dp+X       94       2    4     A ← A + (dp+X) + C              NV..H.ZC
 ADC  A,labs       85       3    4     A ← A + (abs) + C               NV..H.ZC
 ADC  A,labs+X     95       3    5     A ← A + (abs+X) + C             NV..H.ZC
 ADC  A,labs+Y     96       3    5     A ← A + (abs+Y) + C             NV..H.ZC
 ADC  A,[dp+X]     87       2    6     A ← A + ((dp+X+1)(dp+X))        NV..H.ZC
 ADC  A,[dp]+Y     97       2    6     A ← A + ((dp+1)(dp)+Y)          NV..H.ZC
 ADC  (X),(Y)      99       1    5     (X) ← (X) + (Y) + C             NV..H.ZC
 ADC  dp(d),dp(s)  89       3    6     (dp(d)) ← (dp(d)) + (dp(s)) + C NV..H.ZC
 ADC  dp,#imm      98       3    5     (dp) ← (dp) + imm + C           NV..H.ZC
────────────────────────────────────────
 SBC  A,#imm       A8       2    2     A ← A - imm - ノットC              NV..H.ZC
 SBC  A,(X)        86       1    3     A ← A - (X) - ノットC              NV..H.ZC
 SBC  A,dp         84       2    3     A ← A - (dp) - ノットC             NV..H.ZC
 SBC  A,dp+X       94       2    4     A ← A - (dp+X) - ノットC           NV..H.ZC
 SBC  A,labs       85       3    4     A ← A - (abs) - ノットC            NV..H.ZC
 SBC  A,labs+X     95       3    5     A ← A - (abs+X) - ノットC          NV..H.ZC
 SBC  A,labs+Y     96       3    5     A ← A - (abs+Y) - ノットC          NV..H.ZC
 SBC  A,[dp+X]     87       2    6     A ← A - ((dp+X+1)(dp+X)) - ノットC NV..H.ZC
 SBC  A,[dp]+Y     97       2    6     A ← A - ((dp+1)(dp)+Y) - ノットC   NV..H.ZC
 SBC  (X),(Y)      99       1    5     (X) ← (X) - (Y) - ノットC          NV..H.ZC
 SBC  dp(d),dp(s)  89       3    6     (dp(d)) ←(dp(d))-(dp(s))-ノットC   NV..H.ZC
 SBC  dp,#imm      98       3    5     (dp) ← (dp) - imm - ノットC        NV..H.ZC
────────────────────────────────────────
 CMP  A,#imm       68       2    2     A - imm                          N.....ZC
 CMP  A,(X)        66       1    3     A - (X)                          N.....ZC
 CMP  A,dp         64       2    3     A - (dp)                         N.....ZC
 CMP  A,dp+X       74       2    4     A - (dp+X)                       N.....ZC
 CMP  A,labs       65       3    4     A - (abs)                        N.....ZC
 CMP  A,labs+X     75       3    5     A - (abs+X)                      N.....ZC
 CMP  A,labs+Y     96       3    5     A - (abs+Y)                      N.....ZC
 CMP  A,[dp+X]     67       2    6     A - ((dp+X+1)(dp+X))             N.....ZC
 CMP  A,[dp]+Y     77       2    6     A - ((dp+1)(dp)+Y)               N.....ZC
 CMP  (X),(Y)      79       1    5     (X) - (Y)                        N.....ZC
 CMP  dp(d),dp(s)  69       3    6     (dp(d)) - (dp(s))                N.....ZC
 CMP  dp,#imm      78       3    5     (dp) - imm                       N.....ZC
 CMP  X,#imm       C8       2    2     X - imm                          N.....ZC
 CMP  X,dp         3E       2    3     X - (dp)                         N.....ZC
 CMP  X,labs       1E       3    4     X - (abs)                        N.....ZC
 CMP  Y,#imm       AD       2    2     Y - imm                          N.....ZC
 CMP  Y,dp         7E       2    3     Y - (dp)                         N.....ZC
 CMP  Y,labs       5E       3    4     Y - (abs)                        N.....ZC


8ビット論理演算命令
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 AND  A,#imm       28       2    2     A ← A AND imm                   N.....Z.
 AND  A,(X)        26       1    3     A ← A AND (X)                   N.....Z.
 AND  A,dp         24       2    3     A ← A AND (dp)                  N.....Z.
 AND  A,dp+X       34       2    4     A ← A AND (dp+X)                N.....Z.
 AND  A,labs       25       3    4     A ← A AND (abs)                 N.....Z.
 AND  A,labs+X     35       3    5     A ← A AND (abs+X)               N.....Z.
 AND  A,labs+Y     36       3    5     A ← A AND (abs+Y)               N.....Z.
 AND  A,[dp+X]     27       2    6     A ← A AND ((dp+X+1)(dp+X))      N.....Z.
 AND  A,[dp]+Y     37       2    6     A ← A AND ((dp+1)(dp)+Y)        N.....Z.
 AND  (X),(Y)      39       1    5     (X) ← (X) AND (Y)               N.....Z.
 AND  dp(d),dp(s)  29       3    6     (dp(d)) ← (dp(d)) AND (dp(s))   N.....Z.
 AND  dp,#imm      38       3    5     (dp) ← (dp) AND imm             N.....Z.
────────────────────────────────────────
 OR   A,#imm       08       2    2     A ← A OR imm                    N.....Z.
 OR   A,(X)        06       1    3     A ← A OR (X)                    N.....Z.
 OR   A,dp         04       2    3     A ← A OR (dp)                   N.....Z.
 OR   A,dp+X       14       2    4     A ← A OR (dp+X)                 N.....Z.
 OR   A,labs       05       3    4     A ← A OR (abs)                  N.....Z.
 OR   A,labs+X     15       3    5     A ← A OR (abs+X)                N.....Z.
 OR   A,labs+Y     16       3    5     A ← A OR (abs+Y)                N.....Z.
 OR   A,[dp+X]     07       2    6     A ← A OR ((dp+X+1)(dp+X))       N.....Z.
 OR   A,[dp]+Y     17       2    6     A ← A OR ((dp+1)(dp)+Y)         N.....Z.
 OR   (X),(Y)      19       1    5     (X) ← (X) OR (Y)                N.....Z.
 OR   dp(d),dp(s)  09       3    6     (dp(d)) ← (dp(d)) OR (dp(s))    N.....Z.
 OR   dp,#imm      18       3    5     (dp) ← (dp) OR imm              N.....Z.
────────────────────────────────────────
 EOR  A,#imm       48       2    2     A ← A EOR imm                   N.....Z.
 EOR  A,(X)        46       1    3     A ← A EOR (X)                   N.....Z.
 EOR  A,dp         44       2    3     A ← A EOR (dp)                  N.....Z.
 EOR  A,dp+X       54       2    4     A ← A EOR (dp+X)                N.....Z.
 EOR  A,labs       45       3    4     A ← A EOR (abs)                 N.....Z.
 EOR  A,labs+X     55       3    5     A ← A EOR (abs+X)               N.....Z.
 EOR  A,labs+Y     56       3    5     A ← A EOR (abs+Y)               N.....Z.
 EOR  A,[dp+X]     47       2    6     A ← A EOR ((dp+X+1)(dp+X))      N.....Z.
 EOR  A,[dp]+Y     57       2    6     A ← A EOR ((dp+1)(dp)+Y)        N.....Z.
 EOR  (X),(Y)      59       1    5     (X) ← (X) EOR (Y)               N.....Z.
 EOR  dp(d),dp(s)  49       3    6     (dp(d)) ← (dp(d)) EOR (dp(s)    N.....Z.
 EOR  dp,#imm      58       3    5     (dp) ← (dp) EOR imm             N.....Z.


増減命令
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 INC  A            BC       1    2     ++ A                             N.....Z.
 INC  dp           AB       2    4     ++ (dp)                          N.....Z.
 INC  dp+X         BB       2    5     ++ (dp+X)                        N.....Z.
 INC  labs         AC       3    5     ++ (abs)                         N.....Z.
 INC  X            3D       1    2     ++ X                             N.....Z.
 INC  Y            FC       1    2     ++ Y                             N.....Z.
────────────────────────────────────────
 DEC  A            9C       1    2     -- A                             N.....Z.
 DEC  dp           8B       2    4     -- (dp)                          N.....Z.
 DEC  dp+X         9B       2    5     -- (dp+X)                        N.....Z.
 DEC  labs         8C       3    5     -- (abs)                         N.....Z.
 DEC  X            1D       1    2     -- X                             N.....Z.
 DEC  Y            DC       1    2     -- Y                             N.....Z.

7.シフト,ローテーション命令
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 ASL  A            1C       1    2     C << A      << O                 N.....ZC
 ASL  dp           0B       2    4     C << (dp)   << O                 N.....ZC
 ASL  dp+X         1B       2    5     C << (dp+X) << O                 N.....ZC
 ASL  labs         0C       3    5     C << (abs)  << O                 N.....ZC
────────────────────────────────────────
 LSR  A            5C       1    2     O >> A      >> C                 N.....ZC
 LSR  dp           4B       2    4     O >> (dp)   >> C                 N.....ZC
 LSR  dp+X         5B       2    5     O >> (dp+X) >> C                 N.....ZC
 LSR  labs         4C       3    5     O >> (abs)  >> C                 N.....ZC
────────────────────────────────────────
 ROL  A            3C       1    2     C << A      << C                 N.....ZC
 ROL  dp           2B       2    4     C << (dp)   << C                 N.....ZC
 ROL  dp+X         3B       2    5     C << (dp+X) << C                 N.....ZC
 ROL  labs         2C       3    5     C << (abs)  << C                 N.....ZC
────────────────────────────────────────
 ROR  A            7C       1    2     C >> A      >> C                 N.....ZC
 ROR  dp           6B       2    4     C >> (dp)   >> C                 N.....ZC
 ROR  dp+X         7B       2    5     C >> (dp+X) >> C                 N.....ZC
 ROR  labs         6C       3    5     C >> (abs)  >> C                 N.....ZC
────────────────────────────────────────
 XCN  A            9C       1    5     A(7~4)←→A(3~0)               N.....Z.

16ピットデータ転送命令
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 MOVW YA,dp        BA       2    5     YA ← (dp+1)(dp)                 N.....Z.
 MOVW dp,YA        DA       2    5     (dp+1)(dp) ←YA                  ........


16ビット演算命令
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 INCW dp           3A       2    6     increment dp memory pair         N.....Z.
 DECW dp           1A       2    6     decrement dp memory pair         N.....Z.
 ADDW YA,dp        7A       2    5     YA ← YA + (dp+1)(dp)            NV..H.ZC
 SUBW YA,dp        9A       2    5     YA ← YA - (dp+1)(dp)            NV..H.ZC
 CMPW YA,dp        5A       2    4     YA - (dp+1)(dp)                  N.....ZC

乗算,減算命令
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 MUL  YA           CF       1    9     YA(16bits) ← Y * A pair         N.....Z.
 DIV  YA,X         9E       1   12     Q:A R:Y ← YA / X                NV..H.Z.

10進補正命令
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 DAA  A            DF       1    3     decimal adjust for add.          N.....ZC
 DAS  A            BE       1    3     decimal adjust for sub.          N.....ZC

ブランチ命令
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 BRA  re1          2F       2    4     branch always                    ........
 BEQ  re1          F0       2    2/4   branch on Z=1                    ........
 BNE  re1          D0       2    2/4   branch on Z=0                    ........
 BCS  re1          B0       2    2/4   branch on C=1                    ........
 BCC  re1          90       2    2/4   branch on C=0                    ........
 BVS  re1          70       2    2/4   branch on V=1                    ........
 BVC  re1          50       2    2/4   branch on V=0                    ........
 BMI  re1          30       2    2/4   branch on N=1                    ........
 BPL  re1          10       2    2/4   branch on N=0                    ........
 BBS  dp.bit,re1   x3       3    5/7   branch on dp.bit=1               ........
 BBC  dp.bit,re1   y3       3    5/7   branch on dp.bit=0               ........
 CBNE dp,re1       2E       3    5/7   compare A with (dp) then BNE     ........
 CBNE dp+X,re1     DE       3    6/8   compare A with (dp+X) then BNE   ........
 DBNZ dp,re1       6E       3    5/7   decrement memory (dp) then JNZ   ........
 DBNZ Y,re1        FE       2    4/6   decrement Y then JNZ             ........
 JMP  labs         5F       3    3     jump to new location             ........
 JMP  [labs+X]     1F       3    6     PC ← (abs+X+1)(abs+X)           ........


サブルーチン コール、リターン命令
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 CALL  labs        3F       3    8     subroutine call                  ........
 PCALL upage       4F       2    6     upage call                       ........
 TCALL n           n1       1    8     table call  0                    ........
 BRK               OF       1    8     software interrupt               ...1.0..
 RET               6F       1    5     return form subroutine           ........
 RETI              7F       1    6     return form interrupt           (Restored)

スタック操作命令
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 PUSH  A           2D       1    4     push A to stack                  ........
 PUSH  X           4D       1    4     push X to stack                  ........
 PUSH  Y           6D       1    4     push Y to stack                  ........
 PUSH  PSW         0D       1    4     push PSW to stack                ........
────────────────────────────────────────
 POP   A           AE       1    4     pop A to stack                   ........
 POP   X           CE       1    4     pop X to stack                   ........
 POP   Y           EE       1    4     pop Y to stack                   ........
 POP   PSW         8E       1    4     pop PSW to stack                (Restored)

15.ビット操作命令
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 SET1  dp.dit      x2       2    4     set direct page bit              ........
 CLR1  dp.bit      y2       2    4     clear direct page bit            ........
 TEST1 labs        OE       3    6     test and set bits with A         N.....Z.
 TCLR1 labs        4E       3    6     test and clear bits with A       N.....Z.
 AND1  C,mem.bit   4A       3    4     C ← C AND (mem.bit)             .......C
 AND1  C,/mem.bit  6A       3    4     C ← C AND ノット(mem.bit)          .......C
 OR1   C,mem.bit   0A       3    5     C ← C OR (mem.bit)              .......C
 OR1   C,/mem.bit  2A       3    5     C ← C OR ノット(mem.bit)           .......C
 EOR1  C,mem.bit   8A       3    5     C ← C EOR (mem.bit)             .......C
 NOT1  mem.bit     EA       3    5     complement (mem.bit)             ........
 MOV1  C,mem.bit   AA       3    4     C ← (mem.bit)                   .......C
 MOV1  mem.bit,C   CA       3    6     C → (mem.bit)                   ........


プログラム・ステイタス・フラグ操作命令
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 CLRC              60       1    2     clear carry flagbit              .......0
 SETC              80       1    2     set carry flagage bit            .......1
 NOTC              ED       1    3     complement carry flag            .......C
 CLRV              E0       1    2     clear V and ll                   .0..0...
 CLRP              20       1    2     clear direct page flag           ..0.....
 SETP              40       1    2     set direct page flag             ..1.....
 E1                A0       1    3     set interrupt enable flag        .....1..
 D1                CO       1    3     clear interrupt enable flag      .....0..

その他の命令
ニモニック オペランド    オペコード  バイト  サイクル  オペレーション                          NVPBHIZC
────────────────────────────────────────
 NOP               00       1    2     no operation                     ........
 SLEEP             EF       1    3     standby SLEEP mode               ........
 STOP              FF       1    3     standby STOP mode                ........

Note: This document was originally named sndtech.txt.