MC6809

特徴

1979年にMotorola(モトローラ)社が発表した某雑誌では究極の8bit MPU(MotorolaではCPUをMPU(Micro-processing unit)と言う)
前年の1978年にIntelの16bit CPUである8086が発表されており遅れて登場した感がいがめない。
前に登場した同社の6800とはバイナリ及びソースコードレベルで互換性はないが、がんばれば移植も可能。
8bit MPUにしては豊富なアドレッシングモードを備える。
8bitデーターバス/16bitアドレスバス
Z80などに比べれば低クロック(68B09 2MHz)だが1クロックでメモリアクセスを行う。
6809 1MHz
68A09 1.5MHz
68B09 2MHz
9000トランジスター
10種類のアドレッシングモード(8bit最強)
 8bitのアドレスで高速にアクセスできるダイレクトページをサポート
特にインダイレクトを含むモードはメモリ上に置かれたポインタのアドレスを用いてアクセスする。
いわゆるポインタへのポインタである。このようなアドレッシングは68000でも備えておらず68020で登場している。
(メモリのアドレスを示してそのアドレスのデータを取り出してそれをアドレスとしてデータをアクセスする。)
Z80はいくつ? ( n nn reg8 reg16 (nn) (reg16) (IX or IY+d) PC+e,HL++,HL--,((HL++)→(DE++)),((HL--)→(DE--)))意外と多いかもしれません。
8bit*8bitの符号無し乗算命令をサポート
80系やx86系と異なるビック・エンディアン
一部16bit演算をサポート
6800と類似の同期バスが採用されている。
40ピンDIP

割込み

外部要因が、ノンマスカブル割込みであるNMIとマスカブル割込みであるFIRQIRQの計3本です。
FIRQではPCとCC以外はスタックに保存されません。IRQでは全レジスタがスタックに保存されます。CCのEフラグによって割込み復帰時に復帰するレジスタが決まります。
ソフトウェア割込みとしてSWI1,SWI2,SWI3があります。
割込みが発生すると固定されたアドレス(ベクター)に格納されているジャンプ先アドレスを読み込んで割込み処理ルーチンへ移動します。

レジスタ

6809

6800に対して16bitのレジスタが3本追加されています。
アキュムレータはA,Bの2本で合わせて1本のDレジスタとして使用できます。
XとYはインデックスレジスタで16bitアドレスを示します。
U,Sはスタックポインタです。
CCRはフラグを集めたレジスタです。
DPはダイレクトモード時に上位8bitのアドレスを示すレジスタです。
Y Index Regsiter
X Index Regsiter
U User Stack Pointer
S Hardware Stack Pointer
PC
AB
DP
CCR
A:B=>D

6800

Acc A、ACC Bの2本のアキュムレータで演算命令の中心となります。
IXはインデックスレジスタで16bitアドレスを示します。
CCRはフラグを集めたレジスタです。
Acc A
ACC B
IX
PC
S
CCR

CC

6809ではフラグを集めたレジスタをCCR(Condition Code Register)と呼んでいます。
76543210
EFHINZVC
E ENTIREフラグ
1:全レジスタを保存
0:PC,CCを保存
F FIRQ割り込み禁止フラグ
1 割り込み禁止
0 割り込み許可
H ハーフキャリー
BCD演算の1桁目が桁あふれかどうかを示す。
8bitのADCA,ADDAの後にDAAを使用すると1桁に桁あふれが生じているときに1,2桁目を補正できる。
I IRQ割り込み禁止フラグ
1 割り込み禁止
0 割り込み許可
N ネガティブフラグ
1 演算結果の最上位ビットが1 0 上記以外
Z ゼロフラグ
1 演算結果、またはロード時の値が0
0 上記以外
V オーバーフローフラグ
1 演算結果が符号ありの最大範囲(-128 - 127)を超えた
0 上記以外
1 1固定
C キャリーフラグ
インクリメントとデクリメントではCフラグは変化しません。
1 加算命令実行時:演算結果が255を超えた(キャリーあり)
減算命令実行時:演算結果が0を下回る(ボローあり)
0 上記以外
加算命令実行時:演算結果が255を超えていない(キャリーなし)
減算命令実行時:演算結果が0を下回らない(ボローなし)

メモリー

$FFFE~$FFFFRESET
$FFFC~$FFFDNMI
$FFFA~$FFFBSWI
$FFF8~$FFF9IRQ
$FFF6~$FFF7FIRQ
$FFF4~$FFF5SWI2
$FFF2~$FFF3SWI3
$FFF0~$FFF1Reserved

アドレッシングモード

13種類のアドレッシングモードがあります。
Indirectではポインターへのポインターが使える。

インヘレント(Inherent (Includes Accumlator))

イミディエート(Immediate)

n

エクステンド(Extended)

n 16bitアドレスを直接指定

ダイレクト(Direct)

DPレジスタを上位として下位を定数で指定

インデックス

インデックスを指定すると命令にポストバイト(Indexed and Indirect Addressing Modes and Post byte Information)が必要となります。
オフセットは2の補数形式の符号付きです。

レジスタ(Register)

インデックス(Indexed)

R(X,Y,U,S)に対して以下の修飾ができます。
Zero-Offset
,R
Constant Offset
5bit
n,R
8bit
n,R
16bit
n,R
Accumulator Offset
AccA
A,R
AccB
B,R
D
D,R
Auto Increment/Decrement
R++
,R+
R++
,R++
--R
,-R
--R
,--R
プログラムカウンタ間接(Program counter relative)
8bit
[n,PCR]
16bit
[n,PCR]

インデックス間接(Indexed indirect)

指定されたアドレスで示されるメモリの2byteの値をアドレスとして使用する。
2byte単位なのでインクリメントとデクリメントは2の増減しか存在しない。
R(X,Y,U,S)に対して以下の修飾ができます。
オフセットは2の補数形式の符号付きです。
Zero-Offset
[,R]
Constant Offset
8bit
[n,R]
16bit
[n,R]
Accumulator Offset
AccA
[A,R]
AccB
[B,R]
D
[D,R]
Auto Increment/Decrement
R++
[,R++]
--R
[,--R]
プログラムカウンタ間接(Program counter relative)
8bit
[n,PCR]
16bit
[n,PCR]

エクステンド間接(Extended indirect)

[n]

命令

演算命令は基本的にA,B,Dレジスタを基本としています。
X,Y,U,Sには比較命令だけですが、実行アドレスを得る命令(LEA)を使うと加算結果を取得することができます。
またアドレス指定の際に自動的にインクリメント及びデクリメントが使えます。
演算命令は8bitが中心ですがADDD/SUBD/CMPDについては16bitも使用できます。
符号なしの乗算命令8bit * 8bitがあります。
基本的にはアセンブラでは2つのオペランドを並べて記述することはありません。2つのオペランドを含む命令はニーモニックに1つのオペランドが含まれています。
10進補正は加算のAレジスターのみ適用できます。
アドレス指定にX,Y,U,Sが使用できます。
Yについてはプリフィクスを使用していますのでXに対して1byte増えます。
U,Sについても1部プリフィクスを使用していますのでXに対して1byte増えます。
16bitの相対ブランチ命令はプリフィクスを使用しています。
pushh/pull命令はスタックのU,Sそれぞれに対して使用でき、保存・復帰するレジスタの組み合わせをポストバイト(PSH/PUL Post Byte)で指定できます。
レジスタ同士の交換命令であるEXG、レジスタ同士の転送命令であるTFRは自由にレジスタの組み合わせを指定できます。(Inter-Register Post Byte)

条件ブランチ

条件ブランチでは複数のフラグをチェックできますので複雑な条件が指定できます。
条件x86Z80共通other
x86flagsZ80flagsH8/304868006809650268000PIC18flags
オーバーフローがあるJOOF=1JP PEV=1BVSBVSBVSBVSBVSBOVV=1overflow set
オーバーフローがないJNOOF=0JP POV=0BVCBVCBVCBVCBVCBNOVV=0overflow clear
キャリーがあるJCCF=1JP CC=1BCSBCSBCSBCSBCSBCC=1carry set
unsigned上でなく等しくないJNAECF=1Neither above nor equa
unsignedJBCF=1BLOBLOC=1Bellow/Lower
unsigned下でないJNCCF=0BHSBHSC=0not carry
Higher/Same
キャリーがないJNCCF=0JP NCC=0BCCBCCBCCBCCBCCBNCC=0not carry
carry clear
unsigned上か等しいJAECF=0Above or equal
等しい=JEZF=1BEQBEQBEQBEQBEQZ=1equal
ゼロの場合JZZF=1JP ZZ=1BZZ=1zero
等しくないJNEZF=0BNEBNEBNEBNEBNEZ=0not equal
ゼロでないJNZZF=0JP NZZ=0BNZnot zero
unsigned上でないJNAECF ∨ ZF=1BLSBLSBLSBLSC ∨ Z=1lower than or same
unsigned下か等しいJBECF ∨ ZF=1Bellow or equal
unsigned下でなく等しくないJNBECF ∨ ZF=0Neither bellow nor equal
unsignedJACF ∨ ZF=0BHIBHIBHIBHIC ∨ Z=0Above/higher than
符号がある<0JSSF=1JP MS=1BMIBMIBMIBMIBMIBNN=1minus
符号がない≧0JNSSF=0JP PS=0BPLBPLBPLBPLBPLBNNN=0plus
パリティがあるJPPF=1Parity
パリティが偶数JPEPF=1JP PEP=1parity even
パリティがないJNPPF=0no parity
パリティが奇数JPOPF=0JP POP=0parity odd
signed小さいJLSF ⊕ OF=1BLTBLTBLTBLTN ⊕ V=1less than
signed大きくなく等しくないJNGESF ⊕ OF=1Neither greater nor equa
signed大きいか等しいJGESF ⊕ OF=0BGEBGEBGEBGEN ⊕ V=0greater than or equal
signed小さくないJNLSF ⊕ OF=0Not less
signed小さいか等しいJLEZF ∨ (SF ⊕ OF)=1BLEBLEBLEBLEZ ∨ (N ⊕ V)=1less than or equal
signed大きくないJNGZF ∨ (SF ⊕ OF)=1 Not greater
signed大きいJGZF ∨ (SF ⊕ OF)=0BGTBGTBGTBGTZ ∨ (N ⊕ V)=0greater than
signed小さくなく等しくないJNLEZF ∨(SF ⊕ OF)=0Not less nor equal
≠ 等しくない
∨ Boolean OR
⊕ Boolean exclusive OR
¬ Boolean Not
基本的には各CPU似たような命令となっておりフラグの条件も同一です。
6502とPIC18では減算後や比較命令後のCフラグの意味が0の時、ボローが発生したという意味となり、他のCPUとは逆ですので注意が必要です。

6309

特徴

1982年にHitachiから6809の互換MPUとして発表された。
通常はエミュレーションモードで6809互換であるが、ネイティブモードに切り替えるとレジスタや命令が増え高速に動作する。
今後6809と異なる箇所は赤字で表示する。
16bit命令の強化や符号付乗算命令及び除算命令の強化がなされている。

レジスタ

6809に対してアキュムレータが2本(E,F)追加されています。
EとFを合わせて16bitのWレジスタとして使用できます。
DとWを合わせて32bitレジスタとして使用できます。
読みだすと-1となるVレジスタが追加されています。
読みだすと0となるZeroレジスタが追加されています。
MD(Mode Registe)が追加されています。
ABEF
DW
Q
Y Index Regsiter
X Index Regsiter
U User Stack Pointer
S System Stack Pointer
V Transfer Value Regsiter
Zero Regsiter
Program Counter
DP
CC
MD

MD(Mode Register)

MPUのモードとエラー状態を示すフラグを集めたレジスタです。
LDMDで定数をロード、BITMDで定数とAND演算を行った結果がCCに格納されます。
Mode Register
76543210
/0ILFMNM
/0(Divide-by-zero Exception)
0:正常
1:0除算時
IL(Illegal Instruction Exception)
0:正常
1:未定義命令
FM(FIRQ uses IRQ stacking method (Entire state))
0:FIRQ割り込み時にPC,CCのみスタックに保存する。
1:FIRQ割り込み時に全レジスタ保存する。
 エミュレートモード時 PC,U,Y,X,DP,B,A,CC
 ネイティブトモード時 PC,U,Y,X,DP,W,B,A,CC
NM(Native Mode (reduced cycles, W stacked on interrupts))
0:エミュレートモード
1:ネイティブトモード

メモリー

$FFFE~$FFFFRESET
$FFFC~$FFFDNMI
$FFFA~$FFFBSWI
$FFF8~$FFF9IRQ
$FFF6~$FFF7FIRQ
$FFF4~$FFF5SWI2
$FFF2~$FFF3SWI3
$FFF0~$FFF1Illegal Opcode and Division by Zero Trap

アドレッシングモード

E,F,Wレジスタをインディクスモードでオフセットアドレスとして使用できます。
Wレジスタをベースレジスターとして使用できます。
ただし、ポストバイトのビットの空の関係で、X,Y,S,Uに比べて使用できるモードが限られています。
Indexed and Indirect Addressing Modes and Post byte Information Map

命令

追加レジスタに対する命令の追加

符号付き乗除命令の追加(MULD,DIVD,DIVQ)

16bit演算命令の強化

ADCD,ANDD,ASRD,CLRD,COMD,DECD,EORD,INCD,LSRD,NEGD,ORD,ROLD,RORD,SBCD,TSTD
既存のレジスタに上記の命令が追加されています。

ブロック転送命令の追加

TFM r1+,r2+forward block move
TFM r1-,r2-backward block move
TFM r1+,r2output bytes at M[r2] to peripheral
TFM r1,r2+input bytes from peripheral to M[r1])
複数バイトのメモリー間の転送命令です。2回目の転送から3clock/byteでコピーできます。
オートインクリメント・オートデクリメントが指定できます。
記述例 TFM r1,r2
動作概要(TFM r1+,R2+)
while(w!=0){
   *r1+ → *r2+
   --W
}

コード $11 $38 Inter-Register Post Byte r1とr2に指定できるレジスタはS, U, Y, X, or Dです。

1つのビットを対象とする論理演算命令の追加

BIAND,BIOR,BIEOR
ダイレクトページで指定されるソース側の指定されたビット位置の値の反転された値とレジスタの指定されたビット位置の論理演算を行いレジスタの指定されたビットに結果を格納します。
記述例 BIAND r.i,s.j
コード $11 $31 Bit-Manipulation Post Byte direct page address
r.i∧(¬s.j)→r.i
BAND,BOR,BEOR,LDBT,STBT
ダイレクトページで指定されるメモリーの指定されたビット位置の値とレジスタの指定されたビット位置の論理演算を行いレジスタの指定されたビットに結果を格納します。
LDBTはダイレクトページで指定されるメモリーの指定されたビット位置の値をレジスタの指定されたビット位置にロードします。
STBTはLDBTの反対の動作で、レジスタの指定されたビットの値をダイレクトページ指定されたメモリーの指定されたビット位置にストアします。
レジスタとメモリー及びレジスタのビット位置はPost Byteで指定します。
記述例 BAND r.i,s.j
r.i∧s.j→r.i
コード $11 $30 Bit-Manipulation Post Byte direct page address

32bitロードストア命令の追加

LDQ,STQ
ポストインクリメント・プリデクリメントを使用する場合には、増減範囲が2までなので、連続してアクセスする場合はさらに2を増減する必要があります。

レジスタ同士で直接演算する命令を追加

ADDR,ADCR,SUBR,SBCR,ANDR,ORR,EORR,CMPR
記述例 ADDR r1,r2
r2+r1→r2
コード $10 $30 Inter-Register Post Byte

論理演算命令の結果をメモリに保存する命令を追加

OIM,AIM,EIM,TIM
メモリーとイミディエートで論理演算を行いメモリーに保存します。
記述例 AIM #n,d
d∧n→d
コード $62 n Indexed and Indirect Addressing Modes and Post byte Information

OPコード

E,Fレジスタの命令はA,Bレジスタの命令にプリフィクス11をつける。
6809あるにDレジスタの命令がない場合は、Dレジスタの命令はAレジスタの命令にプリフィクス10をつける。Wレジスタの命令はBレジスタの命令にプリフィクス10とつける
6809にDレジスタの命令がある場合は、Wレジスタの命令はAレジスタの命令にプリフィクス10をつける。

6809/6309 命令一覧

赤字はHD6309で追加された命令
6809/6309 命令一覧表
Mnemon.Description Notes Addressing Modes CC
Inherentimmdirindexextrellong relEFHINZVC
ABX Add to Index Register X+B→X3A
ADCAAdd with Carry A+s+C→A8999A9B9*****
ADCBAdd with Carry B+s+C→BC9D9E9F9*****
ADCDAdd with Carry D+s+C→D10 8910 9910 A9****
ADCRAdd Register Contents Plus Carry to Registerr2+r1+C→r210 31****
ADDAAdd A+s→A8B9BABBB*****
ADDBAdd B+s→BCBDBEBFB*****
ADDEAdd E+s→E11 8B11 9B11 AB11 BB*****
ADDFAdd F+s→F11 CB11 DB11 EB11 FB*****
ADDDAdd to Double acc. D+s→DC3D3E3F3*****
ADDRAdd Register Contents to Registerr2+r1→r210 30****
ADDWAdd to Double acc. W+s→W10 8B10 9B10 AB****
AIMAND Immediate Data to Memoryd∧n→d026272**0
ANDALogical AND A∧s→A8494A4B4**0
ANDBLogical AND B∧s→BC4D4E4F4**0
ANDCCLogical AND with CCR CC∧s→CC 1C******
ANDDBit-Wise AND Memory Contents to RegisterD∧s→D10 8410 9410 A410 B4**0
ANDRAND Register Contents with Registerr2∧r1→r210 34**0
ASLArithmetic Shift Left d<<1→d086878~****
ASLAArithmetic Shift Left A<<1→A48~****
ASLBArithmetic Shift Left B<<1→B58~****
ASLDArithmetic Shift Left D<<1→D10 48****
ASRArithmetic Shift Rightd>>1→d076777~***
ASRAArithmetic Shift RightA>>1→A47~***
ASRBArithmetic Shift RightB>>1→B57~***
ASRDArithmetic Shift RightD>>1→D10 47***
BANDAND Bit of Memory to Bit of Registerr.i∧s.j→r.i11 30
BCCBranch if Carry Clear If C=0 24
BCSBranch if Carry Set If C=1 25
BEQBranch if Equal If Z=1 27
BGEBranch if Great/Equal If N⊻V=0 2C
BGTBranch if Greater ThanIf Z∨{N⊻V}=02E
BEORExclusive-OR Register Bit with Memory Bitr.i⊻s.j→r.i11 34
BHIBranch if Higher If C∨Z=0 22
BHSBranch if Higher/Same If C=0 24
BIANDAND Inverse Bit of Memory to Bit of Registerr.i∧(¬s.j)→r.i11 31
BIEORExclusive-OR Inverse Bit of Memory to Bit of Registerr.i⊻(¬s.j)→r.i11 35
BIOROR Inverse Bit of Memory to Bit of Registerr.i∨(¬s.j)→r.i11 33
BITABit Test accumulator A∧s8595A5B5**0
BITBBit Test accumulator B∧sC5D5E5F5**0
BITDBit Test accumulator D∧s10 8510 9510 A510 B5**0
BITMDBit Test the MD Register with an Immediate ValueMD∧s11 3C*
BLEBranch if Less/Equal If Z∨{N⊻V}=12F
BLOBranch if Lower If C=1 25
BLSBranch if Lower/Same If C∨Z=123
BLTBranch if Less Than If N⊻V=12D
BMIBranch if Minus If N=12B
BNEBranch if Not Equal If Z=026
BOROR Bit of Memory to Bit of Registerr.i∨s.j→r.i11 32
BPLBranch if Plus If N=0 2A
BRABranch Always 20
BRNBranch Never NOP 21
BSRBranch to Subroutine 8D
BVCBranch if Overflow ClrIf V=0 28
BVSBranch if Overflow SetIf V=1 29
CLRClear 0→d0F6F7F0100
CLRAClear accumulator 0→A4F0100
CLRBClear accumulator 0→B5F0100
CLREClear accumulator 0→E11 4F0100
CLRFClear accumulator 0→F11 5F0100
CLRDClear accumulator 0→D10 4F0100
CLRWClear accumulator 0→W10 5F0100
CMPACompare A-s8191A1B1~****
CMPBCompare B-sC1D1E1F1~****
CMPECompare E-s11 8111 9111 A111 B1~****
CMPFCompare F-s11 C111 D111 E111 F1~****
CMPDCompare D-s10 8310 9310 A310 B3****
CMPXCompare X-s8C9CACBC****
CMPYCompare Y-s10 8C10 9C10 AC10 BC****
CMPSCompare S-s11 8C11 9C11 AC11 BC****
CMPUCompare U-s11 8311 9311 A311 B3****
CMPWCompare W-s10 8110 9110 A1****
CMPRCompare Register to Registerr2-r110 37****
COMComplement ¬d→d036373**01
COMAComplement accumulator¬A→A43**01
COMBComplement accumulator¬B→B53**01
COMEComplement accumulator¬E→E11 43**01
COMFComplement accumulator¬F→F11 53**01
COMDComplement accumulator¬D→D10 43**01
COMWComplement accumulator¬W→W10 53**01
CWAIAND CCR, Wait for int.CC∧n→CC,E=13C******
DAA Decimal Adjust Acc. Decimal Adjust Accumulator A19**~*
DECDecrement d-1→d0A6A7A***
DECADecrement accumulator A-1→A4A***
DECBDecrement accumulator B-1→B5A***
DECEDecrement accumulator E-1→E11 4A***
DECFDecrement accumulator F-1→F11 5A***
DECDDecrement accumulator D-1→D10 4A***
DECWDecrement accumulator W-1→W10 5A***
DIVDSigned Integer Divide D%s→A D/s→B11 8D11 9DADBD****
DIVQSigned Double-Precision Integer Divide Q%s→D Q/s→W11 8E11 9EAEBE****
EIMExclusive-OR Immediate Data to Memory d⊻n→d056575**0
EORALogical Exclusive OR A ⊻s→A8898A8B8**0
EORBLogical Exclusive OR B⊻s→BC8D8E8F8**0
EORDLogical Exclusive OR D⊻s→D10 8810 9810 A810 B8**0
EORRExclusive-OR Register Contents with Registerr1⊻r2→r110 36**0
EXGExchange (r1 size=r2) r1⇄r21E
INCIncrement d+1→d0C6C7C***
INCAIncrement accumulator A+1→A4C***
INCBIncrement accumulator B+1→B5C***
INCEIncrement accumulator E+1→E11 4C***
INCFIncrement accumulator F+1→F11 5C***
INCDIncrement accumulator D+1→D10 4C***
INCWIncrement accumulator W+1→W10 5C***
JMPJump 0E6E7E
JSRJump to Subroutine 9DADBD
LBCCLong Branch if Carry Clear If C=0 10 24
LBCSBranch if Carry Set If C=1 10 25
LBEQBranch if Equal If Z=1 10 27
LBGEBranch if Great/Equal If N⊻V=0 10 2C
LBGTBranch if Greater ThanIf Z∨{N⊻V}=010 2E
LBHIBranch if Higher If C∨Z=0 10 22
LBHSBranch if Higher/Same If C=0 10 24
LBLEBranch if Less/Equal If Z∨{N⊻V}=110 2F
LBLOBranch if Lower If C=1 10 25
LBLSBranch if Lower/Same If C∨Z=110 23
LBLTBranch if Less Than If N⊻V=110 2D
LBMIBranch if Minus If N=110 2B
LBNEBranch if Not Equal If Z=010 26
LBPLBranch if Plus If N=0 10 2A
LBRNBranch Never NOP 10 21
LBVCBranch if Overflow ClrIf V=0 10 28
LBVSBranch if Overflow SetIf V=1 10 29
LBRALong Branch Always 16
LBSRLong Branch Subroutine17
LDALoad accumulator s→A8696A6B6**0
LDBLoad accumulator s→BC6D6E6F6**0
LDELoad accumulator s→E11 8611 9611 A611 B6**0
LDFLoad accumulator s→F11 C611 D611 E611 F6**0
LDBTLoad Bit of Memory to Bit of Registerd.j→r.i11 36
LDDLoad Double acc. s→DCCDCECFC**0
LDSLoad Stack pointer s→S10 CE10 DE10 EE10 FE**0
LDULoad User stack ptr s→UCEDEEEFE**0
LDXLoad index register s→X8E9EAEBE**0
LDYLoad index register s→Y10 8E10 9E10 AE10 BE**0
LDWLoad Double acc. s→W10 8610 9610 A610 B6**0
LDQLoad 32-bit Data into Accumulator Qs→QCD10 DC10 EC10 FC**0
LDMDLoad the MD Register With Immediate Data s→MD11 3D
LEAXLoad Effective Memory Address to RegisterEA→X30i
LEAYLoad Effective Memory Address to RegisterEA→Y31i
LEASLoad Effective Memory Address to RegisterEA→S32
LEAULoad Effective Memory Address to RegisterEA→U33
LSLLogical Shift Left d<<1→d086878~****
LSLALogical Shift Left A<<1→A48~****
LSLBLogical Shift Left B<<1→B58~****
LSLDLogical Shift Left D<<1→D10 48****
LSRLogical Shift Right d>>1→d0464740**
LSRALogical Shift Right A>>1→A440**
LSRBLogical Shift Right B>>1→B540**
LSRDLogical Shift Right D>>1→D10 440**
LSRWLogical Shift Right W>>1→W10 540**
MUL Multiply A*B→D 3D**
MULDSigned Double-Precision Integer Multiply D*s→Q11 8F11 9F11 AF11 BF**
NEGNegate -d→d006070****
NEGANegate accumulator -A→A40****
NEGBNegate accumulator -B→B50****
NEGDNegate accumulator -D→D10 40****
NOP No Operation 12
OIMOR Immediate Data to Memory d∨n→d016171**0
ORALogical inclusive OR A∨s→A8A9AAABA**0
ORBLogical inclusive OR B∨s→BCADAEAFA**0
ORCCInclusive OR CCR CC∨s→CC1A
ORDLogical inclusive OR D∨s→D10 8A10 9A10 AA10 BA**0
ORROR Register Contents with Registerr1∨r2→r210 35**0
PSHS rPush Selected Registers Onto Stack {r,...}→[-S]34
PSHSWPush the W Register to the System Stack W→[-S]10 38
PSHU rPush Selected Registers Onto Stack {r,...}→[-U]36
PSHUWPush the W Register to the User StackW→[-U]10 3A
PULS rPull Selected Registers From Stack[S+]→{r,...}35??????
PULSWPull the W Register from the System Stack[S+]→W10 39
PULU rPull Selected Registers From Stack[U+]→{r,...}37??????
PULUWPull the W Register from the User Stack[U+]→W10 3B
ROLRotate Left Cフラグを含めた左ローテート
ビット0にはCフラグの値
Cフラグには最上位ビットの値が反映される。
096979****
ROLARotate Left acc. 49****
ROLBRotate Left acc. 59****
ROLDRotate Left acc. 10 49****
ROLWRotate Left acc. 10 59****
RORRotate Right Cフラグを含めた右ローテート
最上位ビットにはCフラグの値
Cフラグにはビット0の内容が反映される。
066676***
RORARotate Right acc. 46***
RORBRotate Right acc. 56***
RORDRotate Right acc. 10 46***
RORWRotate Right acc. 10 56***
RTI Return from Interrupt 3B******
RTS Return from Subroutine39
SBCASubtract with Carry A-s-C→A8292A2B2~****
SBCBSubtract with Carry B-s-C→BC2D2E2F2~****
SBCDSubtract with Carry D-s-C→D10 8210 9210 A2****
SBCRSubtract Register Contents & Carry from Registerr2-r1-C→r110 32****
XESSign Extend B→D1D**
WXESSign-Extend Register F to Register WW→Q14**
STAStore accumultor A→d97A7B7**0
STBStore accumultor B→dD7E7F7**0
STEStore accumultor E→d11 9711 A711 B7**0
STFStore accumultor F→d11 D711 E711 F7**0
STBTStore Bit of Register to Bit of Memoryr.i→d.j11 37
STDStore Double acc. D→dDDEDFD**0
STSStore Stack pointer S→d10 DF10 EF10 FF**0
STUStore User stack ptr U→dDFEFFF**0
STXStore index register X→d9FAFBF**0
STYStore index register Y→d10 9F10 AF10 BF**0
STWStore W register W→d10 9710 A710 B7**0
STQStore Q register Q→d10 DD10 ED10 FD**0
SUBASubtract A-s→A8090A0B0~****
SUBBSubtract B-s→BC0D0E0F0~****
SUBESubtract E-s→E1111 8011 9011 A0~****
SUBFSubtract F-s→F1111 C011 D011 E0~****
SUBRSubtract Register from Registerr2-r1→r210 32****
SUBDSubtract Double acc. D-s→D8393A3B3****
SUBWSubtract Double acc. W-s→W10 8010 9010 A0****
SWI Software Interrupt 1 3F111
SWI2 Software Interrupt 2 10 3F1
SWI3 Software Interrupt 3 11 3F1
SYNC Sync. to interrupt 13
TFMforward block move11 381
TFMbackward block move11 391
TFMoutput bytes at M[r1] to peripheral)11 3A1
TFMinput bytes from peripheral to M[r2])11 3B1
TIMBit Test Immediate Data Against MemoryS ∧ n0B6B7B***
TFRTransfer (r1 size<=r2)r1→r21F
TSTTest s 0D6D7D**0
TSTATest accumulator s 4D**0
TSTBTest accumulator s 5D**0
TSTETest accumulator s 11 4D**0
TSTFTest accumulator s 11 5D**0
TSTDTest accumulator s 10 4D**0
TSTWTest accumulator s 10 5D**0
≠ 等しくない
∨ Boolean OR
⊻ Boolean exclusive OR
∧ Boolean AND
¬ Boolean Not
% 余
>> 右シフト
<< 左シフト

Indexed and Indirect Addressing Modes and Post byte Information

赤字はHD6309で追加されたモード
Indexed and Indirect Addressing Modes and Post byte Information
IndexedIndirectsize
typeAsmBitAsmBit
No Offset,R1RR0 0100[,R]1RR1 01000
5bit Offsetn,R0RRn nnnn 0
8bit Offsetn,R1RR0 1000[n,R]1RR1 10001
16bit Offsetn,R1RR0 1001[n,R]1RR1 10012
A Register OffsetA,R1RR0 0110[A,R]1RR1 01100
B Register OffsetB,R1RR0 0101[B,R]1RR1 01010
D Register OffsetD,R1RR0 1011[D,R]1RR1 10110
E Register OffsetE,R1RR0 0111[E,R]1RR1 01110
F Register OffsetF,R1RR0 1010[F,R]1RR1 10100
W Register OffsetW,R1RR0 1110[W,R]1RR1 11100
Increment By 1,R+1RR0 0000 0
Increment By 2,R++1RR0 0001[,R++]1RR1 00010
Decrement By 1,-R1RR0 0010 0
Decrement By 2,--R1RR0 0011[,--R]1RR1 00110
No Offset,W1000 1111[,W]1001 00000
16bit Offsetn,W1010 1111[n,W]1011 00002
Increment By 2,W++1100 1111[,W++]1101 00000
Decrement By 2,--W1110 1111[,--W]1111 00000
8bit Offsetn,PCR1XX0 1100[n,PCR]1XX1 11001
16bit Offsetn,PCR1XX0 1101[n,PCR]1XX1 11012
16bit Address,[ads]1001 11112

RRRegister
00X
01Y
10U
11S
後の方に上記のビットの組み合わせを表に展開した結果があります。

Inter-Register Post Byte

赤字はHD6309で変更された箇所
Inter-Register Post Byte
src Registerdtc Register

Register
codeRegister codeRegister
68096309 68096309
0000DD1000AA
0001XX1001BB
0010YY1010CCRCCR
0011UU1011DPDP
0100SS1100-10
0101PCPC1101-10
0110-1W1110-1E
0111-1V1111-1F

Bit-Manipulation Post Byte

Bit-Manipulation Post Byte
76543210
Registersrc Bit numdtc Bit num

Register
codeRegister
00CC
01A
10B
11Unused

PSH/PUL Post Byte

PSH/PUL Post Byte
inst76543210
PSHUPCSYXDPBACC
PULUPCSYXDPBACC
PSHSPCUYXDPBACC
PULSPCUYXDPBACC
順序←pull   push→

Indexed and Indirect Addressing Modes and Post byte Information Map

Indexed and Indirect Addressing Modes and Post byte Information Map
Hi
0123456789ABCDEF
0000000100100011010001010110011110001001101010111100110111101111
Low000000,X-16,X0,Y-16,Y0,U-16,U0,S-16,S,X+[,W],Y+[nn,W],U+[,W++],S+[,--W]
100011,X-15,X1,Y-15,Y1,U-15,U1,S-15,S,X++[,X++],Y++[,Y++],U++[,U++],S++[,S++]
200102,X-14,X2,Y-14,Y2,U-14,U2,S-14,S,-X,-Y,-U,-S
300113,X-13,X3,Y-13,Y3,U-13,U3,S-13,S,--X[,--X],--Y[,--Y],--U[,--U],--S[,--S]
401004,X-12,X4,Y-12,Y4,U-12,U4,S-12,S,X[,X],Y[,Y],U[,U],S[,S]
501015,X-11,X5,Y-11,Y5,U-11,U5,S-11,SB,X[B,X]B,Y[B,Y]B,U[B,U]B,S[B,S]
601106,X-10,X6,Y-10,Y6,U-10,U6,S-10,SA,X[A,X]A,Y[A,Y]A,U[A,U]A,S[A,S]
701117,X-9,X7,Y-9,Y7,U-9,U7,S-9,SE,X[E,X]E,Y[E,Y]E,U[E,U]E,S[E,S]
810008,X-8,X8,Y-8,Y8,U-8,U8,S-8,Sn,X[n,X]n,Y[n,Y]n,U[n,U]n,S[n,S]
910019,X-7,X9,Y-7,Y9,U-7,U9,S-7,Snn,X[nn,X]nn,Y[nn,Y]nn,U[nn,U]nn,S[nn,S]
A101010,X-6,X10,Y-6,Y10,U-6,U10,S-6,SF,X[F,X]F,Y[F,Y]F,U[F,U]F,S[F,S]
B101111,X-5,X11,Y-5,Y11,U-5,U11,S-5,SD,X[D,X]D,Y[D,Y]D,U[D,U]D,S[D,S]
C110012,X-4,X12,Y-4,Y12,U-4,U12,S-4,Sn,PCR[n,PCR]n,PCR[n,PCR]n,PCR[n,PCR]n,PCR[n,PCR]
D110113,X-3,X13,Y-3,Y13,U-3,U13,S-3,Snn,PCR[nn,PCR]nn,PCR[nn,PCR]nn,PCR[nn,PCR]nn,PCR[nn,PCR]
E111014,X-2,X14,Y-2,Y14,U-2,U14,S-2,SW,X[W,X]W,Y[W,Y]W,U[W,U]W,S[W,S]
F111115,X-1,X15,Y-1,Y15,U-1,U15,S-1,S,W[abs]nn,W,W++,--W
n:8bit 符号付き整数
nn:16bit 符号付き整数
abs:16bit 絶対アドレス