32 KByteのOne Time EPROMを内蔵しているHD6473258です。シュリンク64ピンDIP入り。
H8/300 CPUコアは、8 bit幅の汎用レジスタ16本を備えています。その8 bit幅のレジスタを組み合わせて、8本の16 bit幅のレジスタとして使用することもできます。日立はRISC風のアーキテクチャだというような表現も使用していて、確かに演算命令はレジスタ・レジスタ間演算が基本だったり、できるだけ2 Byte命令に揃えようとしていたりRISCっぽさも少しはあります。しかし、それなりに便利なアドレッシングモードや命令を備えた充実した命令体系になっていて、RISCというより、ごく普通の整理されたアーキテクチャのプロセッサというべきでしょう。
H8/300のレジスタ構成はこのようになっています。
Rで始まるのが汎用レジスタで、8 bitレジスタとして使用する場合にはR0H
- R7HとR0H - R7Hの合計16個となります。RxHとR0Lを組み合わせてRxという8組の16
bitレジスタとしても使えます。ただしR7はスタックポインタとしても使用されます。なお、16
bitレジスタを扱える命令はMOV命令や加減算命令など比較的少数の命令だけに限定されています。
プログラムカウンタは16 bitです。このレジスタ構成からも想像されるように、H8/300のアドレス空間は16
bitで、特にアドレス拡張の機構は用意されていません。もともと内蔵のROMとRWMでプログラムを動かすのが普通のシングルチップですから、十分でしょうね。
フラグ類はコンデションコードレジスタ(CCR)に集められています。下位ビットからキャリー、オーバーフロー、ゼロ、ネガティブ、ユーザ、ハーフキャリー、ユーザー、割り込みマスクという役割が与えられています。ユーザフラグは2種類用意されていますが、これはプログラムの中で1
bitの記憶が必要なときにそれぞれのユーザフラグを自由に利用できるようにしたものです。演算命令の副作用で変化することはありません。
8 bitのシングルチップ用プロセッサといっても、8080とかMC6800とかと異なり、PDP-11的というか比較的新しい洗練された16
bitプロセッサ風というか、特別な機能レジスタが排除されてすっきりとした汎用レジスタ構成になっています。レジスタ数も組み込み用にしてはぜいたくな量が用意されていますね。
アドレッシングモードには次の10種類があります。
命令については概要だけ
命令 サイズ 概要
MOV B/W レジスタ・メモリ間データ転送、多様なアドレッシングモードを使える
MOVFPE B Eクロックに同期させた周辺回路からレジスタへの転送
MOVTPE B レジスタからEクロック同期周辺回路への転送
POP* W レジスタのポップ、MOV.W @SP+,
Rnの別名
PUSH* W レジスタのプッシュ、MOV.W Rn, @-SPの別名
ADD B/W レジスタ間加算、あるいは8 bitレジスタに定数加算
SUB B/W レジスタ間減算、あるいは8 bitレジスタからの定数減算
ADDX B キャリー付きのレジスタ間あるいは定数加算
SUBX B キャリー付きのレジスタ間減算あるいは定数減算
INC B レジスタのインクリメント
DEC B レジスタのデクリメント
ADDS W 16 bitレジスタへの+1あるいは+2
SUBS W 16 bitレジスタからの-1あるいは-2
DAA B 加算時BCD補正
DAS B 減算時BCD補正
MULXU B 8 bit乗算
DIVXU B 16 bit数値を8 bit数値で割る
CMP B/W レジスタ間比較、あるいは8 bit定数との比較
NEG B 2の補数の符号反転
AND B レジスタ間、レジスタ・定数間のAND
OR B レジスタ間、レジスタ・定数間のOR
XOR B レジスタ間、レジスタ・定数間のXOR
NOT B レジスタ内容のビット反転
SHAL B レジスタ内容の算術左シフト
SHAR B レジスタ内容の算術右シフト
SHLL B レジスタ内容の論理左シフト
SHLR B レジスタ内容の論理右シフト
ROTL B レジスタ内容の左回転
ROTR B レジスタ内容の右回転
ROTXL B レジスタ内容とキャリーを合わせた左回転
ROTXR B レジスタ内容とキャリーを合わせた右回転
BSET B 指定ビットのセット
BCLR B 指定ビットのクリア
BNOT B 指定ビットの反転
BTST B 指定ビットのZフラグへのロード
BAND B 指定ビットとキャリーのANDをキャリーへ
BIAND B 指定ビットの反転とキャリーのANDをキャリーへ
BOR B 指定ビットとキャリーのORをキャリーへ
BIOR B 指定ビットの反転とキャリーのORをキャリーへ
BXOR B 指定ビットとキャリーのXORをキャリーへ
BIXOR B 指定ビットの反転とキャリーのXORをキャリーへ
BLD B 指定ビットをキャリーへロード
BILD B 指定ビットの反転をキャリーへロード
BST B キャリーを指定ビットにロード
BIST B キャリーの反転を指定ビットにロード
Bcc - 条件分岐
JMP - 無条件ジャンプ(レジスタ間接、16
bit絶対、メモリ間接モード可)
BSR - 相対アドレッシングのサブルーチン呼び出し
JSR - サブルーチン呼び出し(レジスタ間接、16
bit絶対、メモリ間接モード可)
RTS - サブルーチンからのリターン
RTE - 例外ハンドラからのリターン
SLEEP - パワーダウンモードへ遷移
LDC B レジスタか定数をCCRへロード
STC B CCRをレジスタへロード
ANDC B CCRと定数をAND
ORC B CCRと定数をOR
XORC B CCRと定数をXOR
NOP - ノーオペレーション
EEPMOV - メモリ上のデータのブロック転送
Return to IC Collection