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

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

Address Purpose
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 Control = "--00-000"
00F2H Register Add. R/W 不定 DSPに実装
00F3H Register Data R/W 不定 DSPに実装
00F4H Port-0 R/W Port0r = "00"
Port0w = "00"
サウンドCPUに実装
00F5H Port-1 R/W Port1r = "00"
Port1w = "00"
サウンドCPUに実装
00F6H Port-2 R/W Port2r = "00"
Port2w = "00"
サウンドCPUに実装
00F7H Port-3 R/W Port3r = "00"
Port3w = "00"
サウンドCPUに実装
00F8H R/W
00F9H R/W
00FAH Timer-0 不定 サウンドCPUに実装
00FBH Timer-1 不定 サウンドCPUに実装
00FCH Timer-2 不定 サウンドCPUに実装
00FDH Counter-0 不定 サウンドCPUに実装
00FEH Counter-1 不定 サウンドCPUに実装
00FFH Counter-2 不定 サウンド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
Port0w

Port0rレジスタの内容をリード
Port0wレジスタへのライト
00F5H 2141H Port1r
Port1w

Port1rレジスタの内容をリード
Port1wレジスタへのライト
00F6H 2142H Port2r
Port2w

Port2rレジスタの内容をリード
Port2wレジスタへのライト
00F7H 2143H Port3r
Port3w

Port3rレジスタの内容をリード
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. Slowly being un-ASCII-art'd by alexmush