6309命令表

凍結

 6809 との違い 

レジスタ増加。
e(8),f(8),w(16),q(32),v(16),md(8)
 
命令 増加。
レジスタ同士の演算。
16ビット演算。16ビット掛算。割り算。
指定ビット同士の演算。
ブロック転送。
など。
 
エミュレーション・モードとネイティブ・モードがある。
ネイティブモードでは、動作が速くなる命令が多々ある。
 
0割算割込, 未定義命令割込がかかる。
 
未定義命令は無く、未定義アドレッシングの挙動に違いがある。



 レジスタ 

a b e f    a   8 ビット・アキュームレータ・レジスタ
b   8 ビット・アキュームレータ・レジスタ
← d → ← w →    e   8 ビット・アキュームレータ・レジスタ.  6309新設.
q    f   8 ビット・アキュームレータ・レジスタ.  6309新設.
     d  16 ビット・アキュームレータ・レジスタ。
   a,b をくっ付けたもの。 d = a << 8 | b
w  16 ビット・アキュームレータ/インデックス・レジスタ.  6309新設.
   e,f をくっ付けたもの。 w = e << 8 | f
q  32 ビット・アキュームレータ・レジスタ.  6309新設.
   d,w をくっ付けたもの。 q = d << 16 | w
  x    x  16 ビット・インデックス・レジスタ
  y    y  16 ビット・インデックス・レジスタ
  u    u  16 ビット・インデックス/ユーザスタック・レジスタ
  s    s  16 ビット・インデックス/システムスタック・レジスタ
  pc    pc 16 ビット・プログラム・カウンタ・レジスタ
  v    v  16 ビット・レジスタ. 6309新設. (リセットしても値が消えない)
  cc    cc  8 ビット・コンディション・コード・レジスタ
  md    md  8 ビット・モード&ステータス・レジスタ. 6309新設.
  n    n   (8/16) ゼロ・レジスタ. (6309新設).
    ※実レジスタでなく、レジスタ同士の演算の指定で0として機能する仮想のレジスタ



 フラグ 

  7 6 5 4 3 2 1 0
CCレジスタ E F H I N Z V C
bit 0cキャリー・フラグ桁上がり,桁下がり
bit 1vオーバーフロー・フラグ符号付き演算での桁溢れ
bit 2zゼロ・フラグゼロか(1) 否か(0)
bit 3nネガティブ・フラグ負か(1) 否か(0)
bit 4iIRQマスク・フラグIRQ割込禁止をするか(1) 否か(0)
bit 5hハーフ・キャリー・フラグBCD足算用に8bitのadd,adcでbit3からのキャリー(以外の命令では不定)
bit 6fFIRQマスク・フラグFIRQ割込禁止をするか(1) 否か(0)
bit 7eエントリ・フラグ割込ですべてのレジスタを退避したか(1)、PC,CCのみか(0)

  7 6         1 0
MDレジスタ        
bit 0 (W)  0=エミュレート 1=ネイティブ
bit 1 (W)  FIRQのレジスタ退避モード. 0:PC,CCのみ 1:すべてのレジスタ
bit 6 (R)  未定義命令時にon
bit 7 (R)  0割算エラー時 on


 アドレッシング 

イミディエイトアドレッシング
指定された値そのものを対象とする場合。
  例) lda  #$20       a = 0x20
      ldb  #-1        b = -1
※数値のメモリ格納順番は、ビックエンディアン。
エクステンド・アドレッシング
指定された値をアドレスとして、そのメモリの値を対照とする場合。
  例) lda  $FC00      a = *(char*)0xFC00
      lda  >$FC00     ※自動でダイレクトページ・アドレッシングに
                           ならないように強制する場合
ダイレクト・アドレッシング
dp レジスタの値をアドレスの上位 8ビットの値として 下位 8ビットのみを指定する場合。
  例) lda  <$10       a = dp[0x10] ※dpをポインタに見立てて
インデックス・アドレッシング
インデックス・レジスタやPC・レジスタと相対値とで表されるアドレス のメモリを対象とする場合。
さらいに、
非インダイレクト・モード
直接アドレスが示すメモリ
        例) lda  $10,x          a = x[0x10]
インダイレクト・モード
間接アドレッシング。
メモリの中身をポインタとしてその指しているメモリ
        例) lda  [$10,x]        a = *x[0x10]
があり、さらに、細かくみると、
ゼロ・オフセットlda ,ya = *y
n(5,8,16)ビット・オフセットlda 4,wa = w[4]
レジスタ(a,b,e,f,d,w)オフセットlda b,xa = x[b]
オート(ポスト)インクリメントlda ,x+a = *x++
オート(プレ)デクリメントldd ,--yd = *--y
PCオフセットlda LBL,pcra = *LBL
のようなものがある。
インハラント・アドレッシング
abx,mul等オペランドの無いもの。 ただし、命令表では レジスタ・アドレッシング (レジスタ同士の演算, pull/push) リラティブアドレッシング(ブランチ命令) など"その他"も含めている。


未定義アドレッシングの違い

レジスタ同士の演算において、未定義レジスタ番号を指定した場合、6809 は -1 だったのが 6309 は 0。 (この表ではアセンブラにあわせて nレジスタと表現)
また exg a,x のようなサイズの違うレジスタ同士の演算で、16ビット側レジスタの値は、 6809では下位バイトが対象になるが、 6309では8ビットレジスタが16ビットレジスタペアになったときに対応する位置が対象となる。 exg a,x なら 6309では xの上位バイトが対象となる。
※ 実のところ、サイズ違いの演算は あまり未定義アドレッシングと意識せずに使用されていたと思われ (アセンブラで普通に指定できてたと思う)、 オーソドックスに組まれたと思われるソフトが 6309にCPU換装して動かなくなる原因はこのへんだったらしい(?)。



 エミュレーション・モードとネイティブ・モードの違い 

  • エミュレーション・モードでは命令は6809と同じクロック数だが、 ネイティブ・モードでは、クロックアップされる命令がある。
  • エミュレーション・モードでは 新設された w レジスタは 割り込みで退避されないが、ネイティブ・モードでは、 割り込みでのレジスタ退避で w も退避されるようになる。
      pc,u,y,x,dp,w,d,cc の順。
      dp と d の間に入るため、6809エミュレーション時とは大きな非互換となる。



 命令 

  • エンディアンは、ビッグエンディアン
  • ニーモニックの頭の + は、6309専用命令の印。
  • メモリは、16ビットレジスタとの演算で無い限り、8ビット幅で扱われる。 (間接アドレッシングでの、ポインタは16ビット値)
  • 略記
    OPオペコード
    クロック数。()は6309ネイティブ・モード時の値。
    バイト数
  • オペランド,動作での略記
    Rレジスタ. 使えるレジスタは命令ごとによる
    I,Jイミディエイト値(即値).
    Mメモリ.
    IMメモリかイミディエイト値
    RGspush/pullできるレジスタ郡. pc,s/u,y,x,dp,b,a,cc
    OFS11バイトのPCリラティブ(相対)値. 基準はその分岐命令の次のアドレス.
    OFS22バイトのPCリラティブ(相対)値. 〃


ニーモニック オペランド インハラント イミディエイト ダイレクト インデックス エクステンド フラグ 動作
OP ~ # OP ~ # OP ~ # OP ~ # OP ~ # EFHINZVC (C/Java言語風表現)

lda IM


86 2 2 96 4(3) 2 A6 4+ 2+ B6 5(4) 3 ....**0. a = IM

ldb IM


C6 2 2 D6 4(3) 2 E6 4+ 2+ F6 5(4) 3 ....**0. b = IM
+ lde IM


11 3 3 11 5(4) 3 11 5+ 3+ 11 6(5) 4 ....**0. e = IM






86

96

A6

B6



+ ldf IM


11 3 3 11 5(4) 3 11 5+ 3+ 11 6(5) 4 ....**0. f = IM






C6

D6

E6

F6




ldd IM


CC 3 3 DC 5(4) 2 EC 5+ 2+ FC 6(5) 3 ....**0. d = IM

ldx IM


8E 3 3 9E 5(4) 2 AE 5+ 2+ BE 6(5) 3 ....**0. x = IM

ldy IM


10 4 4 10 6(5) 3 10 6+ 3+ 10 7(6) 4 ....**0. y = IM






8E

9E

AE

BE




ldu IM


CE 3 3 DE 5(4) 2 EE 5+ 2+ FE 6(5) 3 ....**0. u = IM

lds IM


10 4 4 10 6(5) 3 10 6+ 3+ 10 7(6) 4 ....**0. s = IM






CE

DE

EE

FE



+ ldw IM


10 4 4 10 6(5) 3 10 6+ 3+ 10 7(6) 4 ....**0. w = IM






86

96

A6

B6



+ ldq IM


CD 5 5 10 8(7) 3 10 8+ 3+ 10 9(8) 4 ....**.. q = IM









DC

EC

FC
























sta M





97 4(3) 2 A7 4+ 2+ B7 5(4) 3 ....**0. M = a

stb M





D7 4(3) 2 E7 4+ 2+ F7 5(4) 3 ....**0. M = b
+ ste M





11 5(4) 3 11 5+ 3+ 11 6(5) 4 ....**0. M = e









97

A7

B7



+ stf M





11 5(4) 3 11 5+ 3+ 11 6(5) 4 ....**0. M = f









D7

E7

F7




std M





DD 5(4) 2 ED 5+ 2+ FD 6(5) 3 ....**0. M = d

stx M





9F 5(4) 2 AF 5+ 2+ BF 6(5) 3 ....**0. M = x

sty M





10 6(5) 3 10 6+ 3+ 10 7(6) 4 ....**0. M = y









9F

AF

BF




stu M





DF 5(4) 2 EF 5+ 2+ FF 6(5) 3 ....**0. M = u

sts M





10 6(5) 3 10 6+ 3+ 10 7(6) 4 ....**0. M = s









DF

EF

FF



+ stw M





10 6(5) 3 10 6+ 3+ 10 7(6) 4 ....**0. M = w









97

A7

B7



+ stq M





10 8(7) 3 10 8+ 3+ 10 9(8) 4 ....**.. M = q









DD

ED

FD
























adda IM


8B 2 2 9B 4(3) 2 AB 4+ 2+ BB 5(4) 3 ..*.**** a += IM

addb IM


CB 2 2 DB 4(3) 2 EB 4+ 2+ FB 5(4) 3 ..*.**** b += IM
+ adde IM


11 3 3 11 5(4) 3 11 5+ 3+ 11 6(5) 4 ..*.**** e += IM






8B

9B

AB

BB



+ addf IM


11 3 3 11 5(4) 3 11 5+ 3+ 11 6(5) 4 ..*.**** f += IM






CB

DB

EB

FB




addd IM


C3 4(3) 3 D3 6(4) 2 E3 6+(5+) 2+ F3 7(5) 3 ..*.**** d += IM
+ addw IM


10 5(4) 4 10 7(5) 3 10 7+(6+) 3+ 10 8(6) 4 ..*.**** w += IM






8B

9B

AB

BB
























adca IM


89 2 2 99 4(3) 2 A9 4+ 2+ B9 5(4) 3 ..*.**** a += IM + c

adcb IM


C9 2 2 D9 4(3) 2 E9 4+ 2+ F9 5(4) 3 ..*.**** b += IM + c
+ adcd IM


10 5(4) 4 10 7(5) 3 10 7+(6+) 3+ 10 8(6) 4 ....**** d += IM + c






89

99

A9

B9
























suba IM


80 2 2 90 4(3) 2 A0 4+ 2+ B0 5(4) 3 ..?.**** a -= IM

subb IM


C0 2 2 D0 4(3) 2 E0 4+ 2+ F0 5(4) 3 ..?.**** b -= IM
+ sube IM


11 3 3 11 5(4) 3 11 5+ 3+ 11 6(5) 4 ..?.**** e -= IM






80

90

A0

B0



+ subf IM


11 3 3 11 5(4) 3 11 5+ 3+ 11 6(5) 4 ..?.**** f -= IM






C0

D0

E0

F0




subd IM


83 4(3) 3 93 6(4) 2 A3 6+(5+) 2+ B3 7(5) 3 ..?.**** d -= IM
+ subw IM


10 5(4) 4 10 7(5) 3 10 7+(6+) 3+ 10 8(6) 4 ..?.**** w -= IM






80

90

A0

B0
























sbca IM


82 2 2 92 4(3) 2 A2 4+ 2+ B2 5(4) 3 ..?.**** a -= IM + c

sbcb IM


C2 2 2 D2 4(3) 2 E2 4+ 2+ F2 5(4) 3 ..?.**** b -= IM + c
+ sbcd IM


10 5(4) 4 10 7(5) 3 10 7+(6+) 3+ 10 8(6) 4 ....**** d -= IM + c






82

92

A2

B2
























cmpa IM


81 2 2 91 4(3) 2 A1 4+ 2+ B1 5(4) 3 ..?.**** a - IM

cmpb IM


C1 2 2 D1 4(3) 2 E1 4+ 2+ F1 5(4) 3 ..?.**** b - IM
+ cmpe IM


11 3 3 11 5(4) 3 11 5+ 3+ 11 6(5) 4 ..?.**** e - IM






81

91

A1

B1



+ cmpf IM


11 3 3 11 5(4) 3 11 5+ 3+ 11 6(5) 4 ..?.**** f - IM






C1

D1

E1

F1




cmpd IM


10 5(4) 4 10 7(5) 3 10 7+(6+) 3+ 10 8(6) 4 ....**** d - IM






83

93

A3

B3




cmpx IM


8C 4(3) 3 9C 6(4) 2 AC 6+(5+) 2+ BC 7(5) 3 ....**** x - IM

cmpy IM


10 5(4) 4 10 7(5) 3 10 7+(6+) 3+ 10 8(6) 4 ....**** y - IM






8C

9C

AC

BC




cmpu IM


11 5(4) 4 11 7(5) 3 11 7+(6+) 3+ 11 8(6) 4 ....**** u - IM






83

93

A3

B3




cmps IM


11 5(4) 4 11 7(5) 3 11 7+(6+) 3+ 11 8(6) 4 ....**** s - IM






8C

9C

AC

BC



+ cmpw IM


10 5(4) 4 10 7(5) 3 10 7+(6+) 3+ 10 8(6) 4 ....**** w - IM






81

91

A1

B1
























mul
3D 11(10) 1











.....*.* d = a * b 符号無
+ muld IM


11 28 4 11 30 3 11 30+ 3+ 11 31 4 ....**.. d = d * IM






8F

9F (29)
AF

BF (30)






















+ divd IM


11 25 3 11 27 3 11 27+ 3+ 11 28 4 ....**** b=d/IM,a=d%IM






8D

9D (26)
AD

BD (27)

値の有効範囲に制限があるので注意
+ divq IM


11 34 4 11 36 3 11 36+ 3+ 11 37 4 ....**** w=q/IM,d=q%IM






8E

9E (35)
AE

BE (36)






















+ aim I,M





02 6 3 62 7+ 3+ 72 7 4 ....**0. M &= I

anda IM


84 2 2 94 4(3) 2 A4 4+ 2+ B4 5(4) 3 ....**0. a &= IM

andb IM


C4 2 2 D4 4(3) 2 E4 4+ 2+ F4 5(4) 3 ....**0. b &= IM
+ andd IM


10 5(4) 4 10 7(5) 3 10 7+(6+) 3+ 10 8(6) 4 ....**0. d &= IM






84

94

A4

B4























+ oim I,M





01 6 3 61 7+ 3+ 71 7 4 ....**0. M |= I

ora IM


8A 2 2 9A 4(3) 2 AA 4+ 2+ BA 5(4) 3 ....**0. a |= IM

orb IM


CA 2 2 DA 4(3) 2 EA 4+ 2+ FA 5(4) 3 ....**0. b |= IM
+ ord IM


10 5(4) 4 10 7(5) 3 10 7+(6+) 3+ 10 8(6) 4 ....**0. d |= IM






8A

9A

AA

BA























+ eim I,M





05 6 3 65 7+ 3+ 75 7 4 ....**0. M ^= I

eora IM


88 2 2 98 4(3) 2 A8 4+ 2+ B8 5(4) 3 ....**0. a ^= IM

eorb IM


C8 2 2 D8 4(3) 2 E8 4+ 2+ F8 5(4) 3 ....**0. b ^= IM
+ eord IM


10 5(4) 4 10 7(5) 3 10 7+(6+) 3+ 10 8(6) 4 ....**0. d ~= IM






88

98

A8

B8























+ tim I,M





0B 4 3 6B 5+ 3+ 7B 5 4 ....**0. M & I

bita IM


85 2 2 95 4(3) 2 A5 4+ 2+ B5 5(4) 3 ....**0. a & IM

bitb IM


C5 2 2 D5 4(3) 2 E5 4+ 2+ F5 5(4) 3 ....**0. b & IM
+ bitd IM


10 5(4) 4 10 7(5) 3 10 7+(6+) 3+ 10 8(6) 4 ....**0. d & IM






85

95

A5

B5
























clr M





0F 6(5) 2 6F 6+ 2+ 7F 7(6) 3 ....0100 M = 0, c=0

clra
4F 2(1) 1











....0100 a = 0, c=0

clrb
5F 2(1) 1











....0100 b = 0, c=0
+ clre
11 3(2) 2











....0100 e = 0, c=0



4F















+ clrf
11 3(2) 2











....0100 f = 0, c=0



5F















+ clrd
10 3(2) 2











....0100 d = 0, c=0



4F















+ clrw
10 3(2) 2











....0100 w = 0, c=0



5F




































inc M





0C 6(5) 2 6C 6+ 2+ 7C 7(6) 3 ....***. ++M

inca
4C 2(1) 1











....***. ++a

incb
5C 2(1) 1











....***. ++b
+ ince
11 3(2) 2











....***. ++e



4C















+ incf
11 3(2) 2











....***. ++f



5C















+ incd
10 3(2) 2











....***. ++d



4C















+ incw
10 3(2) 2











....***. ++w



5C




































dec M





0A 6(5) 2 6A 6+ 2+ 7A 7(6) 3 ....**0. --M

deca
4A 2(1) 1











....**0. --a

decb
5A 2(1) 1











....**0. --b
+ dece
11 3(2) 2











....**0. --e



4A















+ decf
11 3(2) 2











....**0. --f



5A















+ decd
10 3(2) 2











....**0. --d



4A















+ decw
10 3(2) 2











....**0. --w



5A




































tst M





0D 6(4) 2 6D 6+(5+) 2+ 7D 7(5) 3 ....**0. M - 0

tsta
4D 2(1) 1











....**0. a - 0

tstb
5D 2(1) 1











....**0. b - 0
+ tste
11 3(2) 2











....**0. e - 0



4D















+ tstf
11 3(2) 2











....**0. f - 0



5D















+ tstd
10 3(2) 2











....**0. d - 0



4D















+ tstw
10 3(2) 2











....**0. w - 0



5D




































com M





03 6(5) 2 63 6+ 2+ 73 7(6) 3 ....**01 M = ~M, c=1

coma
43 2(1) 1











....**01 a = ~a, c=1

comb
53 2(1) 1











....**01 b = ~b, c=1
+ come
11 3(2) 2











....**01 e = ~e, c=1



43















+ comf
11 3(2) 2











....**01 f = ~f, c=1



53















+ comd
10 3(2) 2











....**01 d = ~d, c=1



43















+ comw
10 3(2) 2











....**01 w = ~w, c=1



53




































neg M





00 6(5) 2 60 6+ 2+ 70 7(6) 3 ..?.**** M = -M

nega
40 2(1) 1











..?.**** a = -a

negb
50 2(1) 1











..?.**** b = -b
+ negd
10 3(2) 2











....**** d = -d



40




































asl/lsl M





08 6(5) 2 68 6+ 2+ 78 7(6) 3 ..?.**** M <<= 1

asla
48 2(1) 1











..?.**** a <<= 1

aslb
58 2(1) 1











..?.**** b <<= 1
+ asld
10 3(2) 2











..?.**** d <<= 1



48




































asr M





07 6(5) 2 67 6+ 2+ 77 7(6) 3 ..?.**.* M >>= 1 符号付

asra
47 2(1) 1











..?.**.* a >>= 1 符号付

asrb
57 2(1) 1











..?.**.* b >>= 1 符号付
+ asrd
10 3(2) 2











..?.**.* d >>= 1 符号付



47




































lsr M





04 6(5) 2 64 6+ 2+ 74 7(6) 3 ....0*.* M >>>= 1 符号無

lsra
44 2(1) 1











....0*.* a >>>= 1 符号無

lsrb
54 2(1) 1











....0*.* b >>>= 1 符号無
+ lsrd
10 3(2) 2











....0*.* d >>>= 1 符号無



44















+ lsrw
10 3(2) 2











....0*.* w >>>= 1 符号無



54




































rol M





09 6(5) 2 69 6+ 2+ 79 7(6) 3 ....**** M = M << 1 | c はみ出した最上位ビ

rola
49 2(1) 1











....**** a = a << 1 | c ットが新たな cフラ

rolb
59 2(1) 1











....**** b = b << 1 | c グになる.
+ rold
10 3(2) 2











....**** d = d << 1 | c 他cpuでのrcl,rocl



49














に相当し, 巡回ロー
+ rolw
10 3(2) 2











....**** w = w << 1 | c テートでない。



59




































ror M





06 6(5) 2 66 6+ 2+ 76 7(6) 3 ....**.* M = (M>>>1) | (c<<7) はみだした

rora
46 2(1) 1











....**.* a = (a>>>1) | (c<<7) 最下位ビッ

rorb
56 2(1) 1











....**.* b = (b>>>1) | (c<<7) トが新たな
+ rord
10 3(2) 2











....**.* d = (d>>>1) | (c<<15) c フラグに



46














なる
+ rorw
10 3(2) 2











....**.* w = (w>>>1) | (c<<15)



56




































leax M








30 4+ 2+


.....*.. x = &M leax ,u x = u

leay M








31 4+ 2+


.....*.. y = &M leax -5,u x = u-5

leau M








32 4+ 2+


........ u = &M leax b,u x = u+(sint8_t)b

leas M








33 4+ 2+


........ s = &M leax d,u x = u+d





















exg R0,R1 1E 8(5) 2











........ R1とR0を交換

tfr R0,R1 1F 6(4) 2











........ R1 = R0 R:d,x,y,u,s,pc,w,v
+ addr R0,R1 10 4 3











....**** R1 += R0 a,b,cc,dp,n,n,e,f



30














レジスタは基本的に
+ adcr R0,R1 10 4 3











....**** R1 += R0 + c 同じ幅同士のこと。



31














違う幅同士の挙動は
+ subr R0,R1 10 4 3











....**** R1 -= R0 色々あり、また6809



32














との互換性はない。
+ sbcr R0,R1 10 4 3











....**** R1 -= R0 + c



33















+ andr R0,R1 10 4 3











....**R. R1 &= R0



34















+ orr R0,R1 10 4 3











....**R. R1 |= R0



35















+ eorr R0,R1 10 4 3











....**R. R1 ^= R0



36















+ cmpr R0,R1 10 4 3











....**** R1 - R0



37




































abx
3A 3(1) 1











........ x += (uint8_t)b 符号無加算





















daa
19 2 1











....**** BCD加算時のa補正





















sex
1D 2(1) 1











....**.. d = (sint8_t)b
+ sexw
14 4 1











....**.. q = (sint16_t)w




















+ band M:I,R:J





11 7(6) 4





........ (RのJビット) &= (MのIビット)









30








R:a,b,cc,n
+ biand M:I,R:J





11 7(6) 4





........ (RのJビット) &= ~(MのIビット)









31









+ bor M:I,R:J





11 7(6) 4





........ (RのJビット) |= (MのIビット)









32









+ bior M:I,R:J





11 7(6) 4





........ (RのJビット) |= ~(MのIビット)









33









+ beor M:I,R:J





11 7(6) 4





........ (RのJビット) ^= (MのIビット)









34









+ bieor M:I,R:J





11 7(6) 4





........ (RのJビット) ^= ~(MのIビット)









35









+ ldbt M:I,R:J





11 7(6) 4





........ (RのJビット) = (MのIビット)









36









+ stbt M:I,R:J





11 8(7) 4





....**.. (MのIビット) = (RのJビット)









37





























+ tfm R0+,R1+ 11 6+3n 3











.....1.. do{*R1++ = *R0++;} while(--w)



38














R1,R0:d,x,y,u,s
+ tfm R0-,R1- 11 6+3n 3











.....1.. do{*R1-- = *R0--;} while(--w)



39















+ tfm R0+,R1 11 6+3n 3











.....1.. do{*R1 = *R0++;} while(--w)



3A















+ tfm R0,R1+ 11 6+3n 3











.....1.. do{*R1++ = *R0;} while(--w)



3B




































pshs RGs 34 5(4) 2











........ *--s = RG をレジスタ分(順固定)
+ pshsw
10 6 2











........ *--s = w RGs:pc,s,y,x,dp,b,a,cc



38
















puls RGs 35 5(4) 2











........ RG = *s++ をレジスタ分(順固定)
+ pulsw
10 6 2











........ w = *s++



39
















pshu RGs 36 5(4) 2











........ *--u = RG をレジスタ分(順固定)
+ pshuw
10 6 2











........ *--u = w RGs:pc,s,y,x,dp,b,a,cc



3A
















pulu RGs 37 5(4) 2











........ RG = *u++ をレジスタ分(順固定)
+ puluw
10 6 2











........ w = *u++



3B



































+ tstmd I


11 5 3









.....*.. md & I






3C












+ ldmd I


11 5 3









........ md = I






3D

































andcc I


1C 3 2








-------- cc &= I

orcc I


1A 3 2








-------- cc |= I





















sync
13 2(2) 1











........ 割込待ち

cwai I


3C 20(22) 2








1------- cc & I して割込待ち





















swi
3F 19(21) 1











11.1.... ソフト割込発生

swi2
10 19(21) 1











1....... ソフト割込発生1



3F
















swi3
11 19(21) 1











1....... ソフト割込発生3



3F




































rti
3B 6/15 1











???????? ccをpullして割込からreturn





















rts
39 5(4) 1











........ return





















nop
12 2(1) 1











........ なにもしない





















jsr M





9D 7(6) 2 AD 7+(6+) 2+ BD 8(7) 3 ........ 絶対アドレス&Mでルーチン呼出





















jmp M





0E 3(2) 2 6E 3+ 2+ 7E 4(3) 3 ........ 絶対アドレス&Mで goto





















bsr OFS1 8D 7(6) 2











........ 1バイト相対アドレスで呼出

lbsr OFS2 17 9(7) 3











........ 2バイト相対アドレスで呼出





















bra OFS1 20 3(3) 2











........ 1バイト相対アドレスでgoto

lbra OFS2 16 5(4) 3











........ 2バイト相対アドレスでgoto





















brn OFS1 21 3(3) 2











........ 2バイトnop, (1バイトskip)

lbrn OFS2 10 5/6 4











........ 4バイトnop



21 (5)















bhi OFS1 22 3(3) 2











........ 符号無 > 分岐. (c|z) == 0

lbhi OFS2 10 5/6 4











........



22 (5)















bls OFS1 23 3(3) 2











........ 符号無 <= 分岐. (c|z) == 1

lbls OFS2 10 5/6 4











........



23 (5)















bcc/bhs OFS1 24 3(3) 2











........ 符号無 >= 分岐. c == 0

lbcc OFS2 10 5/6 4











........



24 (5)















bcs/blo OFS1 25 3(3) 2











........ 符号無 < 分岐. c == 1

lbcs OFS2 10 5/6 4











........



25 (5)















bne OFS1 26 3(3) 2











........ != 分岐. z == 0

lbne OFS2 10 5/6 4











........



26 (5)















beq OFS1 27 3(3) 2











........ == 分岐. z == 1

lbeq OFS2 10 5/6 4











........



27 (5)















bvc OFS1 28 3(3) 2











........ v == 0 分岐.

lbvc OFS2 10 5/6 4











........



28 (5)















bvs OFS1 29 3(3) 2











........ v == 1 分岐.

lbls OFS2 10 5/6 4











........



29 (5)















bpl OFS1 2A 3(3) 2











........ 正か零で分岐. n == 0

lbpl OFS2 10 5/6 4











........



2A (5)















bmi OFS1 2B 3(3) 2











........ 負で分岐. n == 1

lbmi OFS2 10 5/6 4











........



2B (5)















bge OFS1 2C 3(3) 2











........ 符号付 >= 分岐. (n ^ v) == 0

lbge OFS2 10 5/6 4











........



2C (5)















blt OFS1 2D 3(3) 2











........ 符号付 < 分岐. (n ^ v) == 1

lblt OFS2 10 5/6 4











........



2D (5)















bgt OFS1 2E 3(3) 2











........ 符号付 > 分岐. (z|(n^v)) == 0

lbgt OFS2 10 5/6 4











........



2E (5)















ble OFS1 2F 3(3) 2











........ 符号付 >= 分岐. (z|(n^v)) == 1

lble OFS2 10 5/6 4











........



2F (5)
















 インデックス・アドレッシングのポストバイト 

アドレッシング 非インダイレクトモード インダイレクトモード
形式 バイト  〜  # 形式 バイト  〜  #
コンスタント オフセット ゼロ・オフセット ,R 1RR00100 0(0) 0 [,R] 1RR10100 3(3) 0
5ビット・オフセット N,R 0RRnnnnn 1(1) 0 ----- -------- ---- -
8ビット・オフセット N,R 1RR01000 1(1) 1 [N,R] 1RR11000 4(4) 1
16ビット・オフセット N,R 1RR01001 4(3) 2 [N,R] 1RR11001 7(6) 2
アキュームレータ オフセット aレジスタ・オフセット a,R 1RR00110 1(1) 0 [a,R] 1RR10110 4(4) 0
bレジスタ・オフセット b,R 1RR00101 1(1) 0 [b,R] 1RR10101 4(4) 0
dレジスタ・オフセット d,R 1RR01011 4(2) 0 [d,R] 1RR11011 7(5) 0
eレジスタ・オフセット e,R 1RR00111 1(1) 0 [e,R] 1RR10111 4(4) 0
fレジスタ・オプセット f,R 1RR01010 1(1) 0 [f,R] 1RR11010 4(4) 0
wレジスタ・オフセット w,R 1RR01110 1(1) 0 [w,R] 1RR11110 4(4) 0
オート インクリメント デクリメント ポスト・インクリメント +1 ,R+ 1RR00000 2(1) 0 ----- -------- ---- -
ポスト・インクリメント +2 ,R++ 1RR00001 3(2) 0 [,R++] 1RR10001 6(5) 0
プレ・デクリメント -1 ,-R 1RR00010 2(1) 0 ----- -------- ---- -
プレ・デクリメント -2 ,--R 1RR00011 3(2) 0 [,--R] 1RR10011 6(5) 0
wオフセット ゼロ・オフセット ,w 10001111 0(0) 0 [,w] 10010000 3(3) 0
16ビット・オフセット NN,w 10101111 2(2) 2 [NN,w] 10110000 5(5) 2
ポスト・インクリメント +2 ,w++ 11001111 1(1) 0 [,w++] 11010000 4(4) 0
プレ・デクリメント -2 ,--w 11101111 1(1) 0 [,--w] 11110000 4(4) 0
PCオフセット 8ビット・オフセット n,pcr 1xx01100 1(1) 1 [N,pcr] 1xx11100 4(4) 1
16ビット・オフセット n,pcr 1xx01101 5(3) 2 [N,pcr] 1xx11101 8(6) 2
エクステンド 16ビット・アドレス --- -------- ---- - [NN] 10011111 5(4) 2
  • R : x y u s
    RR: 00=x, 01=y, 10=u, 11=s

  • 1RR10010 または 1RR11111 で RR=00 でないとき、未定義トラップがかかる。

  • クロック数(〜)やバイト数(#) は、命令のモノに追加される増分値。

  • オフセット値は、すべて符号付で計算される。
    5ビットのときは -16〜15
    8ビットのときは -128〜127
    16ビットのときは -32768〜32767
    当然 a,b,d などのレジスタも同様。

  • PCオフセットの指定方法としては
     ADR,pcr  結果はADR. ADRまでの相対値をアセンブラが自動で計算する.
     OFS,pc   結果は pc+OFS. ユーザに任せる。
    の2種類がある。
    ただし、アセンブラによっては、
    ADR,pc
    として pc を指定しても pcr と同じ動作をするものもあるので注意。



 割り込みベクタ 

$FFF2 SW3
$FFF4 SW2
$FFF6 FIRQ
$FFF8 IRQ
$FFFA SW1
$FFFC NMI
$FFFE RESTART dp=$00 cc=%x1x1xxxx

FIRQ 発生時にスタックに積むレジスタは、 mdレジスタのbit1に設定された値が
 0 なら pc,cc のみ
 1 なら すべてのレジスタ
となる。

割込発生時に退避されるレジスタは
 エミュレートモード時は pc,u,y,x,dp,b,a,cc
 ネイティブモード時は  pc,u,y,x,dp,w,b,a,cc
となる。




 参考文献 

 6809ハンドブック,  Nifty OS9フォーラム,  雑誌 Oh!FM, I/O など。