uPD78C10

uCOM-87シリーズのuPD7807/uPD7808/uPD7809の開発とほぼ平行して、NECはA/Dコンバータを内蔵するなど周辺を強化したuPD7810/uPD7811を開発して1982年に発表しました。ただし命令はuPD7807などより少し簡略化されています。これをuCOM-87シリーズの中でもuCOM-87ADファミリと呼びます。それをCMOS化したものが、ここで紹介するuPD78C10/uPD78C11です。CMOS化に伴って、内部回路の動作を停止して低消費電力モードに入る命令や信号が付け加えられています。uPD78C10はROM外付け、uPD78C11は4 KByteのROMを内蔵しています。

uPD78C10
これはuPD78C10で一般的なシュリンク64ピンDIPのもの。
 

命令はビット操作を中心に省略されたものがありますがuPD7807とほぼ共通で、マイクロプロセッサ部分の機能についてはほぼ共通です。ただし、命令でuPD7807に存在してuPD7810にないものは、

EXR  全MAINレジスタとALTレジスタの一括交換
AND  CY <- CY & (bit)
OR   CY <- CY | (bit)
XOR  CY <- CY ^ (bit)
SETB (bit) <- 1
CLR  (bit) <- 0
NOT  (bit) <- !(bit)
CMC  CY <- !CY
の8種類。なお(bit)は特別なビットアドレスモードで指定されたビットを表し、Vレジスタで修飾されたメモリ上の一部ビットと、I/Oに関係する一部の特殊レジスタのビットを指定できます。CYはキャリーフラグで、ビット操作命令のアキュムレータとして使われています。
機能が一部省略されているのが
MOV  CY <- (bit)あるいは(bit) <- CY
SK   (bit) == 1ならスキップ
SKN  (bit) == 0ならスキップ
の3命令で、ビット操作命令に分類される機能が省略されています。8 bitデータ転送命令としてのMOV、PSWのフラグに対するスキップ命令としてのSK, SKN命令はそのまま利用可能です。
逆にuPD7810に存在してuPD7807にない命令として
BIT  ワーキングレジスタの特定のビットが1ならスキップ
があります。
差し引き7命令だけuPD7807より命令が減り、uPD7807の165命令に対してuPD7810は158命令となっています。
さらにuPD78C10はuPD7810よりも次の1命令だけ追加されています。
STOP ストップモードへの遷移
ストップモードに入ると、クロックが停止しマイクロコンピュータ動作が一切中断されます。しかしレジスタとRWMの内容は保証されます。消費電流は10 uA程度まで低下します。NMIかリセットの発生によって、通常動作に復帰します。
結局、uPD78C10は159命令となります。
I/Oポート操作用の特殊レジスタを除いた、命令セットで一般的に使用する汎用レジスタ類はuPD7807, uPD7810, uPD78C10などで変化はなく、完全に同一です。
ただし、uPD78C10とuPD7807では、命令ニーモニックが同一でも命令コードが異なる命令が結構存在します。I/Oなどに関係した特殊レジスタの割り当てもuPD7807とは当然異なります。そのため、具体的な命令表を紹介していきます。

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 -
R2, R1, R0は命令コード表ではrrrと表記されています。なおr2の場合にはR0とR1だけを用いてrrと表記されています。どちらの場合でもR0がもっとも右側(最下位)のビットとなります。

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, ゼロクロスモード
srとsr1に関してはS5, S4, S3, S2, S1, S0の全6 bitが表現に使用されますが、sr2に関してはS3, S2, S1, S0の4 bitだけです。それぞれssssssとs sssと命令コード中では表現されています。sr2のs sssに関しては命令コードの2箇所に分散して配置されていることに注意してください。どちらもS0がもっとも右側(最下位)のビットに対応します。
ZCMについてはCMOS版のuPD78C10系列にだけ存在してuPD7810にはありません。
sr3は次のふたつの特殊レジスタを含みます。
U0 sr3 レジスタの役割
0 ETM0 timer/event counter register 0, タイマ・イベントカウンタレジスタ0
1 ETM1 timer/event counter register 1, タイマ・イベントカウンタレジスタ1
sr4は次の3種類の特殊レジスタを含みます。
V0 sr4 レジスタの役割
0 ECNT timer/event counter upcounter, タイマ・イベントカウンタのアップカウンタ
1 ECPT timer/event counter capture , タイマ・イベントカウンタのキャプチャレジスタ
sr3とsr4は16 bit幅の特殊レジスタで、それぞれ命令コード中ではuとvという表記で記入されています。

レジスタペアの指定には、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 -
rpとrp3はP1とP0の2 bitだけを使用して表現し、rp1とrp2はP2, P1, P0の3 bitを使用して表現します。それぞれ命令コード中にはppおよびpppと記入されています。

アドレッシングモードの指定には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ベース定数オフセット
rpaはA2, A1, A0の3 bitを使用して命令コード中ではaaaと表現されています。rpa1はA1, A0の2 bitを使用して命令コード中ではaaと表現されています。rpa2とrpa3はA3, A2, A1, A0の全4 bitを使用して命令コード中ではaaaaと表現されています。

SK命令とSKN命令で使われるフラグオペランドfにはPSW中に含まれる次の3種類があります。
F2 F1 F0 f
0 0 0 -
0 1 0 CY
0 1 1 HC
1 0 0 Z
命令コード中ではfffと表記されています。
SKIT, SKNIT命令で使われる割り込み要求レジスタとテストフラグレジスタのビットirfには、次のようなものが含まれます。irfの欄がアセンブリ言語表記で、ビット略称の欄が一般的な略称となっています。
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端子の立ち上がり入力でセット
INTFNMIからINTFSTまでの11種類が割り込み要求レジスタに含まれ、ERからSBまでの7種類がテストフラグレジスタに含まれています。どちらも命令コード中ではF4, F3, F2, F1, F0の5 bitでfffffと表記されて、同じようにSKIT, SKNIT命令で使われますが、リセット条件が異なります。割り込み要求レジスタに含まれているものはINTFNMIを除き割り込み受付時かSKIT, SKNIT命令の実行のどちらかでリセットされます。テストフラグレジスタに含まれるものはSKIT, SKNIT命令の実行でしかリセットできません。どちらのグループのフラグも、命令で直接セットすることはできません。
uPD78C10の割込み制御回路にはuPD7807に存在したようなIEF2フラグは存在しません。またアナログ入力端子のAN4からAN7をエッジトリガのデジタル入力として使うためのテストフラグが追加されています。
 

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