これはuPD78C10で一般的なシュリンク64ピンDIPのもの。
 
命令はビット操作を中心に省略されたものがありますがuPD7807とほぼ共通で、マイクロプロセッサ部分の機能についてはほぼ共通です。ただし、命令でuPD7807に存在してuPD7810にないものは、
EXR 全MAINレジスタとALTレジスタの一括交換の8種類。なお(bit)は特別なビットアドレスモードで指定されたビットを表し、Vレジスタで修飾されたメモリ上の一部ビットと、I/Oに関係する一部の特殊レジスタのビットを指定できます。CYはキャリーフラグで、ビット操作命令のアキュムレータとして使われています。
AND CY <- CY & (bit)
OR CY <- CY | (bit)
XOR CY <- CY ^ (bit)
SETB (bit) <- 1
CLR (bit) <- 0
NOT (bit) <- !(bit)
CMC CY <- !CY
MOV CY <- (bit)あるいは(bit) <- CYの3命令で、ビット操作命令に分類される機能が省略されています。8 bitデータ転送命令としてのMOV、PSWのフラグに対するスキップ命令としてのSK, SKN命令はそのまま利用可能です。
SK (bit) == 1ならスキップ
SKN (bit) == 0ならスキップ
BIT ワーキングレジスタの特定のビットが1ならスキップがあります。
STOP ストップモードへの遷移ストップモードに入ると、クロックが停止しマイクロコンピュータ動作が一切中断されます。しかしレジスタとRWMの内容は保証されます。消費電流は10 uA程度まで低下します。NMIかリセットの発生によって、通常動作に復帰します。
8 bitデータ転送命令には以下のものがあります。
    命令         
第1バイト 第2バイト 第3 第4 state skip 動作
MOV    r1, A      
00011rrr                    
4        r1 <- A
MOV    A, r1      
00001rrr                    
4        A <- r1
MOV    sr, A      
01001101  110sssss         
10*       sr <- A
MOV    A, sr1      01001100 
11ssssss          10*      
A <- sr1
MOV    r, addr     01110000 
01101rrr  al  ah  17       
A <- (addr)
MOV    addr, r     01110000 
01111rrr  al  ah  17       
(addr) <- A
MVI    r, byte     01101rrr 
dddddddd           7*      
r <- byte
MVI    sr2, byte   01100100  s0000sss 
dd      14       
sr2 <- byte
MVIW   wa, byte    01110001  wwwwwwww 
dd      13*      
(V.wa) <- byte
MVIX   rpa1, byte  010010aa  dddddddd         
10*       (rpa1) <- byte
STAW   wa         
01100011  wwwwwwww         
10*       (V.wa) <- A
LDAW   wa         
00000001  wwwwwwww         
10*       A <- (V.wa)
STAX   rpa2       
a0111aaa  dddddddd(*1)     7/13*     
(rpa2) <- A
LDAX   rpa2       
a0101aaa  dddddddd(*1)     7/13*     
A <- (rpa2)
EXX               
00001001*                   
4        BC DE HL入れ替え
EXA               
00001000*                   
4        VA EA入れ替え
EXH               
01010000*                   
4        HL入れ替え
BLOCK             
00110001*                 
13(C+1)    (DE)+ <- (HL)+, C <- C - 1, until CY
uPD78C10には最大4 Byte命令があります。ここでは第1バイトと第2バイトは2進数表記、第3バイトと第4バイトは16進数的2桁表記で示します。uPD7807とは命令コードが異なるものについては命令の第1バイトの直後に*マークを入れました。state欄は命令実行時のステート数で、1ステートが3クロックに相当します。たとえば12
MHzクロックで動作しているとき、1ステートは250 nsですからMOV r1, A命令の場合には1
usの実行時間となります。state欄の数値の後についている'*'マークはスキップ時のステート数計算の例外を表していますが詳細については命令表の末尾に説明します。skipはスキップ条件を表しますが、8
bitデータ転送命令にはスキップ条件付きの命令はありませんので、空欄になっています。命令オペランドのr1,
sr, sr1などは命令表の後にあるオペランドの表を参照してください。ここで使われているオペランドのうち、大文字はレジスタそのものを表します。addrは16
bitアドレス定数、byteはイミディエートデータ、waはVレジスタと併用される8
bitアドレス定数です。上位アドレスをVレジスタの内容、下位アドレスを8 bit定数でアクセスするアドレッシングモードをワーキングレジスタアドレッシングと呼び、メモリ上の任意の256
Byteページに設定できる256本のワーキングレジスタセットと考えているので、waと呼びます。
MOV命令は一般的な8 bitデータ転送命令です。ただ、8080系列のプロセッサと異なり、レジスタ・レジスタ間転送は自由に行えず、必ず片方がAレジスタになります。つまり、MOV
B, CのようなことはuPD78C10では実行できません。ダイレクトアドレッシングでメモリとのデータ転送を行うのもMOV命令の機能のうちです。8080ならSTA命令やLDA命令の役割ですが、Aレジスタにしか転送できない8080と異なり、uPD7810では任意のスクラッチパッドレジスタに直接転送できるようになっているのでMOVのニーモニックが与えられているようです。ダイレクトアドレッシングでは16
bitアドレスを用いますが、下位バイト(al)の方が命令の第3バイトに、上位バイト(ah)が命令の第4バイトに配置されます。
MVI命令は普通のレジスタ以外に特殊レジスタの主だったものに直接定数をロードできます。MVIW命令はワーキングレジスタに定数をロードする命令で、MVIX命令はポインタアドレッシングで指定されるアドレスに定数をロードする命令です。
STAWとLDAW命令はアキュムレータとワーキングレジスタとのデータ転送です。
STAXとLDAX命令はポインタアドレッシングやさまざまなインデックス修飾のできる命令です。定数オフセットを必要とするアドレッシングモードの場合にだけ、第2バイトが必要となります。つまり表の中で(*1)となっているddddddddはアドレッシングモードによって省略される場合もあります。命令ステート数は1
Byte命令のときに7ステート、2 Byte命令のときに13ステートという意味になります。
EXX, EXA, EXHの各命令はそれぞれ関係するレジスタのALT側とMAIN側を入れ替える命令です。uPD7807とは命令コード自体が異なっていて、uPD7807が2
Byte命令なのに対してこちらは1 Byte命令になっています。
BLOCK命令もuPD7807とは仕様が異なり、uPD7807のBLOCK D+命令相当のものしかuPD78C10には装備されていません。命令コードも変更されています。
16 bitデータ転送命令には以下のものがあります。
    命令         
第1バイト 第2バイト 第3 第4 state skip 動作
DMOV   rp3, EA     101101pp                    
4       rp3 <- EA
DMOV   EA, rp3     101001pp                    
4       EA <- rp3
DMOV   sr3, EA     01001000 
1101001u          14      
sr3 <- EA
DMOV   EA, sr4     01001000 
1100000v          14      
EA <- sr4
SBCD   addr       
01110000  00011110  al  ah  20      
(addr) <- C, (addr + 1) <- B
SDED   addr       
01110000  00101110  al  ah  20      
(addr) <- E, (addr + 1) <- D
SHLD   addr       
01110000  00111110  al  ah  20      
(addr) <- L, (addr + 1) <- H
SSPD   addr       
01110000  00001110  al  ah  20      
(addr) <- SPl, (addr + 1) <- SPh
STEAX  rpa3        01001000 
1001aaaa  dd(*2) 14/20     (rpa3) <- EA
LBCD   addr       
01110000  00011111  al  ah  20      
C <- (addr), B <- (addr + 1)
LDED   addr       
01110000  00101111  al  ah  20      
E <- (addr), D <- (addr + 1)
LHLD   addr       
01110000  00111111  al  ah  20      
L <- (addr), H <- (addr + 1)
LSPD   addr       
01110000  00001111  al  ah  20      
SPl <- (addr), SPh <- (addr + 1)
LDEAX  rpa3        01001000 
1000aaaa  dd(*2) 14/20     EA <- (rpa3)
PUSH   rp1        
10110ppp                   
13       (SP - 1) <- rp1h, (SP - 2) <-
rp1l, SP <- SP - 2
POP    rp1        
10100ppp                   
10       rp1l <- (SP), rp1h <- (SP
+ 1), SP <- SP + 2
LXI    rp2, word   0ppp0100  wwwwwwwl 
wh      10*      rp2
<- word
TABLE             
01001000  10101000         
17       C <- (PC + 3 + A), B <- (PC
+ 3 + A + 1)
このグループに含まれる命令は、DMOVのオペランドのsr4に含まれる特殊レジスタが異なっていることを除けば、uPD7807と共通です。
DMOV命令は16 bit転送で対象がEAレジスタのMOV命令です。特殊レジスタに対するDMOV命令は、16
bitアクセスが必要なレジスタにのみ適用可能になっています。
SBCDからSSPDおよびLBCDからLSPD命令はダイレクトアドレッシングによるレジスタペア・メモリ間データ転送です。
STEAX命令とLDEAX命令は8 bitデータ転送命令のSTAX命令およびLDAX命令と対応したものです。(*2)の付いている第3バイトは、やはり8
bit定数修飾のあるアドレッシングモードにだけ存在します。2 Byte命令か3 Byte命令かに応じて実行ステート数も14ステートと20ステートの差が生じます。なお、DMOV命令やSTEAX命令とLDEAX命令でメモリ上のデータ配置は、他のレジスタペアの場合と同じく、EAの下位バイトが小さなメモリアドレスに対応します。
PUSH命令とPOP命令は8080命令と同様にレジスタペア単位でスタックに出し入れします。スタック上のデータ配置も、小さなアドレスにレジスタの下位バイトが対応します。
LXI命令はレジスタペア用のMVI命令です。
TABLE命令は、Aレジスタの内容と16 bitデータとのコード変換を行う命令で、プログラムコードの中に定数表を埋め込めるようになっています。
次はレジスタ用の8 bit演算命令の表です。
    命令         
第1バイト 第2バイト 第3 第4 state skip 動作
ADD    A, r       
01100000  11000rrr          
8       A <- A + r
ADD    r, A       
01100000  01000rrr          
8       r <- r + A
ADC    A, r       
01100000  11010rrr          
8       A <- A + r + CY
ADC    r, A       
01100000  01010rrr          
8       r <- r + A + CY
ADDNC  A, r        01100000 
10100rrr           8 
!CY  A <- A + r
ADDNC  r, A        01100000 
00100rrr           8 
!CY  r <- r + A
SUB    A, r       
01100000  11100rrr          
8       A <- A - r
SUB    r, A       
01100000  01100rrr          
8       r <- r - A
SBB    A, r       
01100000  11110rrr          
8       A <- A - r - CY
SBB    r, A       
01100000  01110rrr          
8       r <- r - A - CY
SUBNB  A, r        01100000 
10110rrr           8 
!CY  A <- A - r
SUBNB  r, A        01100000 
00110rrr           8 
!CY  r <- r - A
ANA    A, r       
01100000  10001rrr          
8       A <- A & r
ANA    r, A       
01100000  00001rrr          
8       r <- r & A
ORA    A, r       
01100000  10011rrr          
8       A <- A | r
ORA    r, A       
01100000  00011rrr          
8       r <- r | A
XRA    A, r       
01100000  10010rrr          
8       A <- A ^ r
XRA    r, A       
01100000  00010rrr          
8       r <- r ^ A
GTA    A, r       
01100000  10101rrr          
8  !CY  A - r - 1
GTA    r, A       
01100000  00101rrr          
8  !CY  r - A - 1
LTA    A, r       
01100000  10111rrr          
8   CY  A - r
LTA    r, A       
01100000  00111rrr          
8   CY  r - A
NEA    A, r       
01100000  11101rrr          
8  !Z   A - r
NEA    r, A       
01100000  01101rrr          
8  !Z   r - A
EQA    A, r       
01100000  11111rrr          
8   Z   A - r
EQA    r, A       
01100000  01111rrr          
8   Z   r - A
ONA    A, r       
01100000  11001rrr          
8  !Z   A & r
OFFA   A, r       
01100000  11011rrr          
8   Z   A & r
このグループの命令もuPD7807とまったく同一です。
ADD, ADC, SUB, SBB, ANA, ORA, XRAの各命令は、Aレジスタがディスティネーションとなるかソースになるかの違いによって、2種類の命令パターンがあります。その点以外は、ごく一般的な演算命令です。
ADDNC命令とSUBNB命令は、スキップ条件付きの加減算命令です。表のskipの欄に!CYとあるのは、条件にNOTが含まれていることを表す'!'マークとスキップ対象のCYフラグを組み合わせたものです。つまり桁上がりがなければスキップということです。演算と一種の条件分岐が組み合わされた複合命令です。
GTA, LTA, NEA, EQA命令は比較命令で、演算結果は残らずにフラグだけが変化して、それに合わせてスキップが生じます。NEA命令とEQA命令ではディスティネーションとソースを入れ替える必要はないように思えるかもしれませんが、CYフラグの変化が異なります。たとえばNEA命令でふたつのオペランドが等しいかテストしてから、ただちにSK命令で大小判定を行うこともありますから、2種類用意されている意味はきちんと存在します。
ONA命令とOFFA命令は、論理積演算でマスクした後のビットがすべて0かどうかをテストする命令で、Aとrの順序を入れ替えても同じ意味となるので、一方の命令パターンしか存在しません。
次はメモリ用の8 bit演算命令です。
    命令         
第1バイト 第2バイト 第3 第4 state skip 動作
ADDX   rpa        
01110000  11000aaa         
11       A <- A + (rpa)
ADCX   rpa        
01110000  11010aaa         
11       A <- A + (rpa) + CY
ADDNCX rpa         01110000 
10100aaa          11 
!CY  A <- A + (rpa)
SUBX   rpa        
01110000  11100aaa         
11       A <- A - (rpa)
SBBX   rpa        
01110000  11110aaa         
11       A <- A - (rpa) - CY
SUBNBX rpa         01110000 
10110aaa          11 
!CY  A <- A - (rpa)
ANAX   rpa        
01110000  10001aaa         
11       A <- A & (rpa)
ORAX   rpa        
01110000  10011aaa         
11       A <- A | (rpa)
XRAX   rpa        
01110000  10010aaa         
11       A <- A ^ (rpa)
GTAX   rpa        
01110000  10101aaa         
11  !CY  A - (rpa) - 1
LTAX   rpa        
01110000  10111aaa         
11   CY  A - (rpa)
NEAX   rpa        
01110000  11101aaa         
11  !Z   A - (rpa)
EQAX   rpa        
01110000  11111aaa         
11   Z   A - (rpa)
ONAX   rpa        
01110000  11001aaa         
11  !Z   A & (rpa)
OFFAX  rpa        
01110000  11011aaa         
11   Z   A & (rpa)
このグループの命令もuPD7807とまったく同一です。
レジスタ用の8 bit演算命令と同じことを、ソースをメモリ上のデータとして実行します。ディスティネーションはAレジスタに限定されています。オペランドがrpaで表されている通り、BC,
DE, HLをポインタレジスタとして使えるほか、DEとHLのオートインクリメントやオートデクリメントアドレッシングも利用可能で、複数バイトデータの加減算などが容易になっています。
イミディエートデータ用演算命令は、このようになっています。
    命令         
第1バイト 第2バイト 第3 第4 state skip 動作
ADI    A, byte     01000110 
dddddddd           7*     
A <- A + byte
ADI    r, byte     01110100 
01000rrr  dd      11      
r <- r + byte
ADI    sr2, byte   01100100  s1000sss 
dd      20      
sr2 <- sr2 + byte
ACI    A, byte     01010110 
dddddddd           7*     
A <- A + byte + CY
ACI    r, byte     01110100 
01010rrr  dd      11      
r <- r + byte + CY
ACI    sr2, byte   01100100  s1010sss 
dd      20      
sr2 <- sr2 + byte + CY
ADINC  A, byte     00100110  dddddddd          
7* !CY  A <- A + byte
ADINC  r, byte     01110100  00100rrr 
dd      11  !CY  r <- r + byte
ADINC  sr2, byte   01100100  s0100sss 
dd      20  !CY  sr2 <- sr2 + byte
SUI    A, byte     01100110 
dddddddd           7*     
A <- A - byte
SUI    r, byte     01110100 
01100rrr  dd      11      
r <- r - byte
SUI    sr2, byte   01100100  s1100sss 
dd      20      
sr2 <- sr2 - byte
SBI    A, byte     01110110 
dddddddd           7*     
A <- A - byte - CY
SBI    r, byte     01110100 
01110rrr  dd      11      
r <- r - byte - CY
SBI    sr2, byte   01100100  s1110sss 
dd      20      
sr2 <- sr2 - byte - CY
SUINB  A, byte     00110110  dddddddd          
7* !CY  A <- A - byte
SUINB  r, byte     01110100  00110rrr 
dd      11  !CY  r <- r - byte
SUINB  sr2, byte   01100100  s0110sss 
dd      20  !CY  sr2 <- sr2 - byte
ANI    A, byte     00000111 
dddddddd           7*     
A <- A & byte
ANI    r, byte     01110100 
00001rrr  dd      11      
r <- r & byte
ANI    sr2, byte   01100100  s0001sss 
dd      20      
sr2 <- sr2 & byte
ORI    A, byte     00010111 
dddddddd           7*     
A <- A | byte
ORI    r, byte     01110100 
00011rrr  dd      11      
r <- r | byte
ORI    sr2, byte   01100100  s0011sss 
dd      20      
sr2 <- sr2 | byte
XRI    A, byte     00010110 
dddddddd           7*     
A <- A ^ byte
XRI    r, byte     01110100 
00010rrr  dd      11      
r <- r ^ byte
XRI    sr2, byte   01100100  s0010sss 
dd      20      
sr2 <- sr2 ^ byte
GTI    A, byte     00100111 
dddddddd           7*
!CY  A - byte - 1
GTI    r, byte     01110100 
00101rrr  dd      11  !CY  r -
byte - 1
GTI    sr2, byte   01100100  s0101sss 
dd      14  !CY  sr2 - byte - 1
LTI    A, byte     00110111 
dddddddd           7* 
CY  A - byte
LTI    r, byte     01110100 
00111rrr  dd      11   CY 
r - byte
LTI    sr2, byte   01100100  s0111sss 
dd      14   CY  sr2 - byte
NEI    A, byte     01100111 
dddddddd           7*
!Z   A - byte
NEI    r, byte     01110100 
01101rrr  dd      11  !Z  
r - byte
NEI    sr2, byte   01100100  s1101sss 
dd      14  !Z   sr2 - byte
EQI    A, byte     01110111 
dddddddd           7* 
Z   A - byte
EQI    r, byte     01110100 
01111rrr  dd      11   Z  
r - byte
EQI    sr2, byte   01100100  s1111sss 
dd      14   Z   sr2 - byte
ONI    A, byte     01000111 
dddddddd           7*
!Z   A & byte
ONI    r, byte     01110100 
01001rrr  dd      11  !Z  
r & byte
ONI    sr2, byte   01100100  s1001sss 
dd      14  !Z   sr2 & byte
OFFI   A, byte     01010111 
dddddddd           7* 
Z   A & byte
OFFI   r, byte     01110100 
01011rrr  dd      11   Z  
r & byte
OFFI   sr2, byte   01100100  s1011sss 
dd      14   Z   sr2 &
byte
uPD78C10にはuPD7807と異なり読み出し専用のPTポートがないためにsr5という特殊レジスタグループがありません。そのため、テスト命令のオペランドもすべてsr2に統一されています。それとsr2に含まれる特殊レジスタが完全に同一でないことを除けば、命令コードや実行ステート数などは同一です。
特殊レジスタを直接操作できることとAレジスタ専用の短い形式の命令が用意されていることを除けば、今まで出てきた演算命令をイミディエートアドレッシングモードにしたものになっています。
次はワーキングレジスタ用演算命令です。
    命令         
第1バイト 第2バイト 第3 第4 state skip 動作
ADDW   wa         
01110100  11000000  ww      14      
A <- A + (V.wa)
ADCW   wa         
01110100  11010000  ww      14      
A <- A + (V.wa) + CY
ADDNCW wa         
01110100  10100000  ww      14 
!CY  A <- A + (V.wa)
SUBW   wa         
01110100  11100000  ww      14      
A <- A - (V.wa)
SBBW   wa         
01110100  11110000  ww      14      
A <- A - (V.wa) - CY
SUBNBW wa         
01110100  10110000  ww      14 
!CY  A <- A - (V.wa)
ANAW   wa         
01110100  10001000  ww      14      
A <- A & (V.wa)
ORAW   wa         
01110100  10011000  ww      14      
A <- A | (V.wa)
XRAW   wa         
01110100  10010000  ww      14      
A <- A ^ (V.wa)
GTAW   wa         
01110100  10101000  ww      14 
!CY  A - (V.wa) - 1
LTAW   wa         
01110100  10111000  ww      14  
CY  A - (V.wa)
NEAW   wa         
01110100  11101000  ww      14 
!Z   A - (V.wa)
EQAW   wa         
01110100  11111000  ww      14  
Z   A - (V.wa)
ONAW   wa         
01110100  11001000  ww      14 
!Z   A & (V.wa)
OFFAW  wa         
01110100  11011000  ww      14  
Z   A & (V.wa)
ANIW   wa, byte    00000101  wwwwwwww 
dd      19*      (V.wa)
<- (V.wa) & byte
ORIW   wa, byte    00010101  wwwwwwww 
dd      19*      (V.wa)
<- (V.wa) | byte
GTIW   wa, byte    00100101  wwwwwwww 
dd      13* !CY  (V.wa) - byte - 1
LTIW   wa, byte    00110101  wwwwwwww 
dd      13*  CY  (V.wa) - byte
NEIW   wa, byte    01100101  wwwwwwww 
dd      13* !Z   (V.wa) - byte
EQIW   wa, byte    01110101  wwwwwwww 
dd      13*  Z   (V.wa) - byte
ONIW   wa, byte    01000101  wwwwwwww 
dd      13* !Z   (V.wa) & byte
OFFIW  wa, byte    01010101  wwwwwwww 
dd      13*  Z   (V.wa) & byte
このグループの命令もuPD7807とまったく同一です。
Aレジスタとワーキングレジスタ間の演算は、Aレジスタがディスティネーションとなっています。標準的な15種類の演算が用意されています。
イミディエート演算の場合には、当然ながらワーキングレジスタがディスティネーションになります。こちらはビット演算2種類と比較6種類の合計8命令だけが使えるようになっています。イミディエートでも3
Byte命令にするために、オペコードを1 Byteに限定したので15種類を割り当てることができなかったのかもしれません。
uCOM-87アーキテクチャでは、8 bitデータの記憶場所の階層をCPUにもっとも近い方から並べてみると、Aレジスタ、その他のスクラッチパッドレジスタ、ワーキングレジスタ、一般のメモリという順になります。先に出てきた方が演算に便利でしかも高速に扱える傾向があります。つまり、ワーキングレジスタはスクラッチパッドレジスタにも納めきれなかったデータの置き場なわけで、それを考えると適切な演算命令が選択されて、それらしい命令長になっているようにも思われます。なお、ワーキングレジスタは後述の増減命令のオペランドとなることもできて、ループカウンタをスクラッチパッドレジスタに納めきれない場面でも、その代わりに使えるように配慮されています。
次は16 bit演算命令と乗除算命令をまとめて紹介します。
    命令         
第1バイト 第2バイト 第3 第4 state skip 動作
EADD   EA, r2      01110000 
110000rr          11      
EA <- EA + r2
DADD   EA, rp3     01110100 
110001pp          11      
EA <- EA + rp3
DADC   EA, rp3     01110100 
110101pp          11      
EA <- EA + rp3 + CY
DADDNC EA, rp3     01110100  101001pp         
11  !CY  EA <- EA + rp3
ESUB   EA, r2      01110000 
011000rr          11      
EA <- EA - r2
DSUB   EA, rp3     01110100 
111001pp          11      
EA <- EA - rp3
DSBB   EA, rp3     01110100 
111101pp          11      
EA <- EA - rp3 - CY
DSUBNB EA, rp3     01110100  101101pp         
11  !CY  EA <- EA - rp3
DAN    EA, rp3     01110100 
100011pp          11      
EA <- EA & rp3
DOR    EA, rp3     01110100 
100111pp          11      
EA <- EA | rp3
DXR    EA, rp3     01110100 
100101pp          11      
EA <- EA ^ rp3
DGT    EA, rp3     01110100 
101011pp          11 
!CY  EA - rp3 - 1
DLT    EA, rp3     01110100 
101111pp          11  
CY  EA - rp3
DNE    EA, rp3     01110100 
111011pp          11 
!Z   EA - rp3
DEQ    EA, rp3     01110100 
111111pp          11  
Z   EA - rp3
DON    EA, rp3     01110100 
110011pp          11 
!Z   EA & rp3
DOFF   EA, rp3     01110100 
110111pp          11  
Z   EA & rp3
MUL    r2         
01001000  001011rr         
32       EA <- A * r2
DIV    r2         
01001000  001111rr         
59       EA <- EA / r2, r2 <- EA %
r2
このグループの命令もuPD7807とまったく同一です。
以上の命令のディスティネーションはすべてEAレジスタに固定されています。
EADD命令とESUB命令はソースが8 bitレジスタになっています。
それ以外の、Dで始まる命令が16 bit演算で、8 bit演算に許されている15種類と同じ演算や比較操作が可能になっています。やはりディスティネーションがEAレジスタで、ソースの方はBC,
DE, HLのレジスタペアです。
MUL命令とDIV命令が乗除算命令で、8 bit×8 bitの演算と、16 bit/8 bitの演算が許されています。さすがに他の命令とは別格の時間が必要となっていますね。
次は増減命令です。
    命令         
第1バイト 第2バイト 第3 第4 state skip 動作
INR    r2         
010000rr                    
4   CY  r2 <- r2 + 1
INRW   wa         
00100000  wwwwwwww         
16*  CY  (V.wa) <- (V.wa) + 1
INX    rp         
00pp0010                    
7       rp <- rp + 1
INX    EA         
10101000                    
7       EA <- EA + 1
DCR    r2         
010100rr                    
4   CY  r2 <- r2 - 1
DCRW   wa         
00110000  wwwwwwww         
16*  CY  (V.wa) <- (V.wa) - 1
DCX    rp         
00pp0011                    
7       rp <- rp - 1
DCX    EA         
10101001                    
7       EA <- EA - 1
このグループの命令もuPD7807とまったく同一です。
ここで特徴的なのが、8 bitの増減命令であるINR, INRW, DCR, DCRW命令がスキップ条件付きということと、その中でもレジスタオペランドのINR,
DCR命令がオペランドにr2をとるということです。
16 bitの増減命令のINX命令とDCX命令はオペランドにSP, BC, DE, HL, EAの16
bitレジスタをとります。こちらはスキップ動作を行いません。
以下はその他の演算命令です。
    命令         
第1バイト 第2バイト 第3 第4 state skip 動作
DAA               
01100001                    
4       BCD補正
STC               
01001000  00101011          
8       CY <- 1
CLC               
01001000  00101010          
8       CY <- 0
NEGA              
01001000  00111010          
8       A <- !A + 1
uPD7807にはこのグループにCYフラグの反転を行うCMC命令が備わっていますが、uPD78C10にはありません。uPD7807にはビット操作命令があって、その補助としてCMC命令も追加されているのでしょう。
DAA命令は加算命令の後でAレジスタの内容をBCD補正するものです。STC, CLC命令はCYフラグの操作を行います。NEGA命令はAレジスタの内容を符号付き2進数とした場合の符号反転命令です。
ローテーション・シフト命令には次のようなものがあります。
    命令         
第1バイト 第2バイト 第3 第4 state skip 動作
RLD               
01001000  00111000         
17       Rotate Left Digit
RRD               
01001000  00111001         
17       Rotate Right Digit
RLL    r2         
01001000  001101rr          
8       r2.(n+1) <- r2.n, r2.0 <- CY,
CY <- r2.7
RLR    r2         
01001000  001100rr          
8       r2.(n-1) <- r2.n, r2.7 <- CY,
CY <- r2.0
SLL    r2         
01001000  001001rr          
8       r2.(n+1) <- r2.n, r2.0 <- 0,
CY <- r2.7
SLR    r2         
01001000  001000rr          
8       r2.(n+1) <- r2.n, r2.0 <- 0,
CY <- r2.7
SLLC   r2         
01001000  000001rr          
8   CY  r2.(n+1) <- r2.n, r2.0 <- 0, CY <- r2.7
SLRC   r2         
01001000  000000rr          
8   CY  r2.(n+1) <- r2.n, r2.0 <- 0, CY <- r2.7
DRLL   EA         
01001000  10110100          
8       EA.(n+1) <- EA.n, EA.0 <- CY,
CY <- EA.7
DRLR   EA         
01001000  10110000          
8       EA.(n-1) <- EA.n, EA.7 <- CY,
CY <- EA.0
DSLL   EA         
01001000  10100100          
8       EA.(n+1) <- EA.n, EA.0 <- 0,
CY <- EA.7
DSLR   EA         
01001000  10100000          
8       EA.(n+1) <- EA.n, EA.0 <- 0,
CY <- EA.7
このグループの命令もuPD7807とまったく同一です。
RLD, RRD命令はZ80 CPUでおなじみのBCD一桁分、4 bitをAレジスタの下位4
bitと(HL)の間でローテートさせる命令です。
RLL, RLR, SLL, SLRは、ごく一般的なローテート、シフト命令です。SLL命令とSLR命令にスキップ条件を付けたのがSLLC命令とSLRC命令で、RLL,
RLR, SLL, SLR命令を16 bitに拡張したのがDRLL, DRLR, DSLL, DSLR命令です。8
bitオペランドの命令はr2が対象ですが、16 bitオペランドの場合にはEAレジスタに固定されています。EAだけでなくレジスタペアを指定できたらと思うこともありますが、加減算などの他の16
bit演算命令もディスティネーションがEAレジスタに限られていますから、これだけ拡張してもしかたないかもしれません。
ジャンプ、コール、リターン命令をまとめて表にしました。
    命令         
第1バイト 第2バイト 第3 第4 state skip 動作
JMP    addr       
01010100  aaaaaaal  ah      10*     
PC <- addr
JB                
00100001                    
4       PC <- BC
JR     addr       
11jjjjjj                   
10       PC <- PC + 1 + jjjjjj
JRE    addr       
0100111j  jjjjjjjj         
10*      PC <- PC + 2 + jjjjjjjjj
JEA               
01001000  00101001          
8       PC <- EA
CALL   addr       
01000000  aaaaaaal  ah      16*     
push PC + 3, PC <- addr
CALB              
01001000  00101001         
17       push PC + 2, PC <- BC
CALF   addr       
01111jjj  jjjjjjjj         
13*      push PC + 2, PC <- 00001jjjjjjjjjjjB
CALT   addr       
100ttttt                   
16       push PC + 1, PC <- (80H + 2*ttttt)
SOFTI             
01110010                   
16       push PSW, push PC + 1, PC <-
0060H
RET               
10111000                   
10       pop PC
RETS              
10111001                   
10   1   pop PC, skip
RETI              
01100010                   
13       pop PC, pop PSW
このグループの命令もuPD7807とまったく同一です。
JMP命令は16 bit絶対アドレスをオペランドに持ち任意のアドレスにジャンプ可能な3
Byte命令です。JB命令はBCレジスタペアで示されるアドレスにジャンプする高速な1
Byte命令です。
JR命令は1 Byteの相対ジャンプ命令です。そのため、オフセットはjjjjjjで表されているように6
bitしかありません。JRE命令が標準的な2 Byteの相対ジャンプ命令ですが、オフセットが9
bit許されるようになっています。JR, JRE命令の両者とも、バイト数に関係なくJMP命令と同じ10ステートの実行時間を必要とします。
JEA命令はJB命令のEAレジスタ版で、EAレジスタの新設とともに追加された命令です。
CALL命令は標準的な3 Byte長のサブルーチン呼び出し命令で、CALB命令はJB命令と同様のBCレジスタペアによる呼び出し命令です。
CALF命令は少々変わっていて、2 Byte命令ですが下位11 bitのアドレスを命令コード中に持っていて、上位5
bitが00001に固定されています。つまり0800Hから0FFFHの間の2 KByteの範囲のサブルーチンを呼びだすことができる命令です。この範囲内に配置されたサブルーチンなら、CALL命令より1
Byteだけ短いコードで、しかも3ステート短い時間で呼び出せます。
もっと短いバイト数でサブルーチン呼び出しを行うのがCALT命令で、5 bitのベクタ番号を使用します。0080Hから始まる2
Byte単位でサブルーチンアドレスを登録したベクタテーブルのインデックスがベクタ番号となります。したがって、32種類のサブルーチンに限っては1
Byte長のコードで呼びだすことが可能です。
SOFTI命令はソフトウェア割り込みを発生させるもので、普通のサブルーチン呼び出しとはPSWがスタックに保存される点が異なります。スキップ条件に関してはSOFTI命令は特殊で、絶対にスキップされません。SOFTI命令の次に配置された命令がスキップされます。
RET命令はCALL, CALB, CALF, CALT命令で呼び出されたサブルーチンから戻るための命令です。
RETS命令は少々変わったRET命令で、戻った直後の命令をスキップします。つまり、たとえばCALL命令であるサブルーチンを呼び出したとき、そのサブルーチンからRETS命令で戻ると、CALL命令の次の命令がスキップされます。
RETI命令は割り込みサービスルーチンからの復帰用の命令で、PSWも復帰するほか、割り込みマスクや割込み制御回路の操作も同時に行います。
スキップ命令には次の5種類が含まれます。
    命令         
第1バイト 第2バイト 第3 第4 state skip 動作
BIT    bit, wa     01011bbb 
wwwwwwww          10* 
bit skip if (V.wa).bit = 1
SK     f          
01001000  00001fff          
8   f   skip if f = 1
SKN    f          
01001000  00011fff          
8  !f   skip if f = 0
SKIT   irf        
01001000  010fffff          
8   irf skip if irf = 1, then reset irf
SKNIT  irf        
01001000  011fffff          
8  !irf skip if irf = 0, or reset irf
以上の命令のうち、BIT命令はuPD7807には存在せず、uPD78C10やuPD7800などに存在する命令です。uPD7807はビット操作命令が大幅に追加されたので、BIT命令は不要だと判断されたのでしょう。(V.wa)で指定されたメモリ1
Byteのうち、bitで指定されたビット番号のビットが1ならスキップします。ビット番号はLSBが0、MSBが7となる0から7までの整数です。
残りの命令は指定されたフラグの状態によってスキップを行うものです。SK命令とSKN命令はプロセッサ内部の演算に関係したCY,
HC, Zフラグの判定を行います。HCフラグの判定ができるのは珍しい機能ですね。減算のBCD補正を比較的短いコードで実現できそうです。
SKIT命令とSKNIT命令は割り込みや特定のI/O機能に関係したフラグについて判定するものです。条件判定とともに、その対象フラグが1にセットされている場合には、リセットも同時に行います。SK,
SKN命令はSKフラグに影響を与えますが、CY, HC, Zフラグの状態を変更することはありません。
最後にCPU制御命令を示します。
    命令         
第1バイト 第2バイト 第3 第4 state skip 動作
NOP               
00000000                    
4       no operation
EI                
10101010                    
4       enable interrupt
DI                
10111010                    
4       disable interrupt
HLT               
01001000  00111011        
11/12     halt
STOP              
01001000  10111011         
12       stop
uPD7807とはHLT命令のステート数が変更になっているのとSTOP命令が追加されている点が異なります。
NOP命令は単にプログラムカウンタを1進めるだけの命令ですが、すべて0のビットパターンが割り当てられています。
EIとDIは割り込み許可と禁止を行う命令です。
HLT命令はプログラム実行を停止する命令です。HLTモードではプログラム実行は停止しますが、I/O機能は動作しつづけ、メモリやレジスタの内容も保持されています。プログラム実行が停止する分だけ、消費電力が減少します。リセットかNMIでHLTモードから通常のプログラム実行状態に遷移します。uPD7810では11ステート、uPD78C10では12ステート動作となっています。
STOP命令はuPD7810には存在せず、uPD78C10にだけ追加された命令で、プログラム実行を停止するだけでなくクロック供給まで停止します。その結果、I/O機能も活動を停止します。ただしメモリやレジスタの内容は保持されています。クロックまで停止しているため、消費電流は劇的に減少します。リセットかNMIでSTOPモードから通常のプログラム実行状態に遷移します。
これまでの命令表のstateの項目に*印が記入されている命令がありました。これは命令がスキップされる場合の例外規定を意味しています。一般に、命令がスキップされる場合には命令のデコードまでは行われますが、実際の処理は行われません。そのため、表に記入したステート数と同じか短いステート数を消費することになります。で、実際のスキップ時に必要となるステート数を表にして示します。
| 命令種別 | ステート数 | 
| 1 Byte命令 | 4 | 
| 2 Byte命令*付き | 7 | 
| 2 Byte命令 | 8 | 
| 3 Byte命令*付き | 10 | 
| 3 Byte命令 | 11 | 
| 4 Byte命令 | 14 | 
以上の命令表に含まれる命令コードの中に埋め込まれているレジスタやオペランド指定ビットを表にして説明します。
8 bit幅のレジスタオペランドにはr, r1, r2の3種類のグループがあります。それぞれ、表の右半分の3列に対応するレジスタ名が記入されています。r2には3種類のレジスタしか含まれません。
| R2 | R1 | R0 | r | r1 | r2 | 
| 0 | 0 | 0 | V | EAH | - | 
| 0 | 0 | 1 | A | EAL | A | 
| 0 | 1 | 0 | B | B | B | 
| 0 | 1 | 1 | C | C | C | 
| 1 | 0 | 0 | D | D | - | 
| 1 | 0 | 1 | E | E | - | 
| 1 | 1 | 0 | H | H | - | 
| 1 | 1 | 1 | L | L | - | 
I/Oポート用レジスタなどを含む特殊レジスタオペランドについてはsr, sr1, sr2, sr3, sr4の5種類のグループがあります。そのうちのsr, sr1, sr2については、次の表に示すレジスタを含み、S5 - S0のビットパターンで命令に表現されます。指定されているレジスタが書き込み専用か読み出し専用かなどによって異なる扱いを受けているわけです。
| S5 | S4 | S3 | S2 | S1 | S0 | sr | sr1 | sr2 | レジスタの役割 | 
| 0 | 0 | 0 | 0 | 0 | 0 | PA | PA | PA | port A, ポートAデータ | 
| 0 | 0 | 0 | 0 | 0 | 1 | PB | PB | PB | port B, ポートBデータ | 
| 0 | 0 | 0 | 0 | 1 | 0 | PC | PC | PC | port C, ポートCデータ | 
| 0 | 0 | 0 | 0 | 1 | 1 | PD | PD | PD | port D, ポートDデータ | 
| 0 | 0 | 0 | 1 | 0 | 1 | PF | PF | PF | port F, ポートEデータ | 
| 0 | 0 | 0 | 1 | 1 | 0 | MKH | MKH | MKH | mask high, 割り込みマスクレジスタ上位 | 
| 0 | 0 | 0 | 1 | 1 | 1 | MKL | MKL | MKL | mask low, 割り込みマスクレジスタ下位 | 
| 0 | 0 | 1 | 0 | 0 | 0 | ANM | ANM | ANM | A/D channel mode, A/Dチャネルモードレジスタ | 
| 0 | 0 | 1 | 0 | 0 | 1 | SMH | SMH | SMH | serial mode high, シリアルモードレジスタ上位 | 
| 0 | 0 | 1 | 0 | 1 | 0 | SML | - | - | serial mode low, シリアルモードレジスタ下位 | 
| 0 | 0 | 1 | 0 | 1 | 1 | EOM | EOM | EOM | timer/event counter output mode, タイマ・イベントカウンタ出力モードレジスタ | 
| 0 | 0 | 1 | 1 | 0 | 0 | ETMM | - | - | timer/event counter mode, タイマ・イベントカウンタモードレジスタ | 
| 0 | 0 | 1 | 1 | 0 | 1 | TMM | TMM | TMM | timer mode, タイマモードレジスタ | 
| 0 | 1 | 0 | 0 | 0 | 0 | MM | - | - | memory mapping, メモリ割り付けレジスタ | 
| 0 | 1 | 0 | 0 | 0 | 1 | MCC | - | - | mode control C, モードコントロールC | 
| 0 | 1 | 0 | 0 | 1 | 0 | MA | - | - | mode A, ポートAモード | 
| 0 | 1 | 0 | 0 | 1 | 1 | MB | - | - | mode B, ポートBモード | 
| 0 | 1 | 0 | 1 | 0 | 0 | MC | - | - | mode C, ポートCモード | 
| 0 | 1 | 0 | 1 | 1 | 1 | MF | - | - | mode F, ポートFモード | 
| 0 | 1 | 1 | 0 | 0 | 0 | TXB | - | - | Tx buffer, シリアル送信バッファ | 
| 0 | 1 | 1 | 0 | 0 | 1 | - | RXB | - | Rx buffer, シリアル受信バッファ | 
| 0 | 1 | 1 | 0 | 1 | 0 | TM0 | - | - | timer register 0, タイマレジスタ0 | 
| 0 | 1 | 1 | 0 | 1 | 1 | TM1 | - | - | timer register 1, タイマレジスタ1 | 
| 1 | 0 | 0 | 0 | 0 | 0 | - | CR0 | - | A/D conversion result 0, A/D変換結果0 | 
| 1 | 0 | 0 | 0 | 0 | 1 | - | CR1 | - | A/D conversion result 1, A/D変換結果1 | 
| 1 | 0 | 0 | 0 | 1 | 0 | - | CR2 | - | A/D conversion result 2, A/D変換結果2 | 
| 1 | 0 | 0 | 0 | 1 | 1 | - | CR3 | - | A/D conversion result 3, A/D変換結果3 | 
| 1 | 0 | 1 | 0 | 0 | 0 | ZCM | - | - | zero cross mode, ゼロクロスモード | 
| U0 | sr3 | レジスタの役割 | 
| 0 | ETM0 | timer/event counter register 0, タイマ・イベントカウンタレジスタ0 | 
| 1 | ETM1 | timer/event counter register 1, タイマ・イベントカウンタレジスタ1 | 
| V0 | sr4 | レジスタの役割 | 
| 0 | ECNT | timer/event counter upcounter, タイマ・イベントカウンタのアップカウンタ | 
| 1 | ECPT | timer/event counter capture , タイマ・イベントカウンタのキャプチャレジスタ | 
レジスタペアの指定には、rp, rp1, rp2, rp3の4種類のグループがあり、それぞれ次の表に記入されているレジスタペアを含みます。この表でSP / SPと記載されている欄は、前の方がアセンブリ言語表記で後の方が実際のレジスタペアを表します。つまりB / BCの項はアセンブリ言語でBと書くことになっていて、実際の操作対象がBCレジスタペアであることを示します。
| P2 | P1 | P0 | rp | rp1 | rp2 | rp3 | 
| 0 | 0 | 0 | SP / SP | V / VA | SP / SP | - | 
| 0 | 0 | 1 | B / BC | B / BC | B / BC | B / BC | 
| 0 | 1 | 0 | D / DE | D / DE | D / DE | D / DE | 
| 0 | 1 | 1 | H / HL | H / HL | H / HL | H / HL | 
| 1 | 0 | 0 | - | EA / EA | EA / EA | - | 
アドレッシングモードの指定にはrpa, rpa1, rpa2, rpa3の3種類があります。rpa3は16 bitオペランド用のアドレッシングモードで、それ以外は8 bitオペランド用のアドレッシングモードです。ここでも/の左がアセンブリ言語表記で、/の右が実際の動作を意味します。ZilogのZ80 CPU的表記に慣れると省略し過ぎで変な表記と感じるかもしれませんが、Intel式の8080アセンブリ言語表記はこのようなものでしたから。
| A3 | A2 | A1 | A0 | rpa | rpa1 | rpa2 | rpa3 | 動作 | 
| 0 | 0 | 0 | 0 | - | - | - | - | - | 
| 0 | 0 | 0 | 1 | B / (BC) | B / (BC) | B / (BC) | - | BCポインタ | 
| 0 | 0 | 1 | 0 | D / (DE) | D / (DE) | D / (DE) | D / (DE) | DEポインタ | 
| 0 | 0 | 1 | 1 | H / (HL) | H / (HL) | H / (HL) | H / (HL) | HLポインタ | 
| 0 | 1 | 0 | 0 | D+ / (DE)+ | - | D+ / (DE)+ | D++ / (DE)++ | DEオートインクリメント | 
| 0 | 1 | 0 | 1 | H+ / (HL)+ | - | H+ / (HL)+ | H++ / (HL)++ | HLオートインクリメント | 
| 0 | 1 | 1 | 0 | D- / (DE)- | - | D- / (DE-) | - | DEオートデクリメント | 
| 0 | 1 | 1 | 1 | H- / (HL)- | - | H- / (HL)- | - | HLオートデクリメント | 
| 1 | 0 | 1 | 1 | - | - | D+byte / (DE+byte) | D+byte / (DE+byte) | DEベース定数オフセット | 
| 1 | 1 | 0 | 0 | - | - | H+A / (HL+A) | H+A / (HL+A) | HLベースAオフセット | 
| 1 | 1 | 0 | 1 | - | - | H+B / (HL+B) | H+B / (HL+B) | HLベースBオフセット | 
| 1 | 1 | 1 | 0 | - | - | H+EA / (HL+EA) | H+EA / (HL+EA) | HLベースEAオフセット | 
| 1 | 1 | 1 | 1 | - | - | H+byte / (HL+byte) | H+byte / (HL+byte) | HLベース定数オフセット | 
SK命令とSKN命令で使われるフラグオペランドfにはPSW中に含まれる次の3種類があります。
| F2 | F1 | F0 | f | 
| 0 | 0 | 0 | - | 
| 0 | 1 | 0 | CY | 
| 0 | 1 | 1 | HC | 
| 1 | 0 | 0 | Z | 
| F4 | F3 | F2 | F1 | F0 | irf | ビット略称 | フラグの役割 | 
| 0 | 0 | 0 | 0 | 0 | FNMI | INTFNMI | NMI*端子の状態を表す | 
| 0 | 0 | 0 | 0 | 1 | FT0 | INTFT0 | タイマ0のコンパレータ一致信号でセット | 
| 0 | 0 | 0 | 1 | 0 | FT1 | INTFT1 | タイマ1のコンパレータ一致信号でセット | 
| 0 | 0 | 0 | 1 | 1 | F1 | INTF1 | INT1端子への立ち上がりエッジ入力でセット | 
| 0 | 0 | 1 | 0 | 0 | F2 | INTF2 | INT2*端子への立ち下がりエッジ入力でセット | 
| 0 | 0 | 1 | 0 | 1 | FE0 | INTFE0 | タイマ・イベントカウンタのECNTとETM0レジスタ一致でセット | 
| 0 | 0 | 1 | 1 | 0 | FE1 | INTFE1 | タイマ・イベントカウンタのECNTとETM1レジスタ一致でセット | 
| 0 | 0 | 1 | 1 | 1 | FEIN | INTFEIN | タイマ・イベントカウンタのCI入力かTOの立ち下がりエッジでセット | 
| 0 | 1 | 0 | 0 | 0 | FAD | INTFAD | A/Dコンバータの変換結果がCR0 - CR3のレジスタに転送後セット | 
| 0 | 1 | 0 | 0 | 1 | FSR | INTFSR | シリアルの受信バッファフルでセット | 
| 0 | 1 | 0 | 1 | 0 | FST | INTFST | シリアルの送信バッファエンプティでセット | 
| 0 | 1 | 0 | 1 | 1 | ER | ER | シリアルのパリティ、フレーム、オーバーラン受信エラーでセット | 
| 0 | 1 | 1 | 0 | 0 | OV | OV | タイマ・イベントカウンタのECNTオーバーフローでセット | 
| 1 | 0 | 0 | 0 | 0 | AN4 | AN4 | AN4端子への立ち下がりエッジ入力でセット | 
| 1 | 0 | 0 | 0 | 1 | AN5 | AN5 | AN5端子への立ち下がりエッジ入力でセット | 
| 1 | 0 | 0 | 1 | 0 | AN6 | AN6 | AN6端子への立ち下がりエッジ入力でセット | 
| 1 | 0 | 0 | 1 | 1 | AN7 | AN7 | AN7端子への立ち下がりエッジ入力でセット | 
| 1 | 0 | 1 | 0 | 0 | SB | SB | Vdd端子の立ち上がり入力でセット | 
I/O機能の手がかりとして、uPD7810でもピン配置から入ります。
   PA0  1     64 Vcc
   PA1  2     63 Vdd(STOP*)
   PA2  3     62 PD7/AD7
   PA3  4     61 PD6/AD6
   PA4  5     60 PD5/AD5
   PA5  6     59 PD4/AD4
   PA6  7     58 PD3/AD3
   PA7  8     57 PD2/AD2
   PB0  9     56 PD1/AD1
   PB1 10     55 PD0/AD0
   PB2 11     54 PF7/AB15
   PB3 12     53 PF6/AB14
   PB4 13     52 PF5/AB13
   PB5 14     51 PF4/AB12
   PB6 15     50 PF3/AB11
   PB7 16     49 PF2/AB10
   PC0 17     48 PF1/AB9
   PC1 18     47 PF0/AB8
   PC2 19     46 ALE
   PC3 20     45 WR*
   PC4 21     44 RD*
   PC5 22     43 AVdd
   PC6 23     42 Varef
   PC7 24     41 AN7
  NMI* 25     40 AN6
  INT1 26     39 AN5
 MODE1 27     38 AN4
RESET* 28     37 AN3
 MODE0 29     36 AN2
    X2 30     35 AN1
    X1 31     34 AN0
   Vss 32     33 AVss
PA, PB, BC, PD, PFをはじめとして、ほとんどの端子はuPD7807と共通です。ただし、33番ピンから43番ピンまでが異なっています。また、63番ピンの機能はuPD7810についてはuPD7807と同じで内部RWMの一部のバックアップ用電源電圧供給端子ですが、CMOS版のuPD78C10ではSTOP*端子となって一種のスリープモードへ強制的に移行させる信号になっています。ちょうどSTOP命令を実行したかのようにスタンバイ状態に移行して、Vccからの電源供給が10
uA程度にまで低下します。
AN0からAN7まではA/Dコンバータ入力です。AVddとAVssはA/Dコンバータ用の電源で、変換精度を向上させるために普通よりはノイズの少ない電源に接続することが推奨されています。VarefはA/Dコンバータ用の基準電圧入力で、AVdd
- 0.5 V以上AVdd以下の電圧を与えます。簡単にはAVddに接続します。すると、AN入力にはAVssからVarefの間の電圧を入力することができて、それを8
bit分解能でA/D変換できます。変換時間はクロック周波数に依存しますが、約50
us程度です。制御用にA/Dチャネルモードレジスタ(ANM)を持ち、結果の格納用にCR0,
CR1, CR2, CR3のConversion Resultレジスタを持ちます。この、4個のCRxレジスタも特徴的で、普通にはない変換機能として利用されています。ANMの設定によってセレクトモード、つまり特定のAN端子を入力端子として選択するモードでは、連続して4回のA/D変換を行ってCR0,
CR1, CR2, CR3の順に格納して、CR3にデータを入れた後で割込みが発生します。スキャンモードの場合には、AN0,
AN1, AN2, AN3あるいはAN4, AN5, AN6, AN7の順に続けてA/D変換を行い、CR0,
CR1, CR2, CR3に順番にデータを格納します。どちらのANグループを使うかもANMに設定します。意外にも、この2モードしか許されず、単発のA/D変換が行えないというのも特徴と言えるでしょうか。AN4,
AN5, AN6, AN7についてはネガティブエッジ検出専用のロジック入力として使用することもできます。
PCの特殊機能割り当てもuPD7807と共通で、シリアルインターフェースやタイマ類も同一の機能を持ちます。ただし、ウオッチドッグタイマの機能はなくなっています。
Return to IC Collection