富士通MB8861の追加命令 (2)TMM

BASICMASTER

富士通MB8861はMC6800上位互換のCPUであり、5種6命令が追加されている。今回はTMM命令の解説。

命令 code byte cyc 機能概略
TMM 7B 3 7 BP ∩ (M), BP ∩ (M) の結果と BP の EX-OR をとり
各々の結果に応じ CCR をセット

機能概略に BP ∩ (M) が2回出てくる。印刷ミスを疑ったが、実はこれで正しそう。後述する。


なお、TMM命令はフラグの変化が通常とは異なる。


TMM命令のフラグ変化

TMM命令の動作は少々わかりにくい。

まずメモリ上のデータと即値のANDを取る。さらに即値とXORを取る。両方の結果を見てフラグを更新する。

メモリへの書き込みは行わない。実行は6サイクル。



フラグの更新が超ややこしいので、先に整理しておこう。Bpは命令コード2バイト目にあるビットパターンである。

()で括っているのは、2バイト目の内容ということだろうが、煩雑になるので説明の際は省略してBpと書くことにする。

内容
TMM (a) (Bp)=00ならばZビットをセットし、N、Vビットをリセットする。
(b) Bpのマスクビット(セットビット)に対応するオペランドデータのビットがすべて0であればZビットをセットしN、Vビットをリセットする。
(c) Bpのマスクビットに対応するオペランドデータのビットがすべて1であればVビットをセットし、Z、Nビットをリセットする。
(d) (a)(b)(c)以外のときNビットをセットし、Z、Vビットをリセットする。

さて、Vは全ての場合にリセットされているので、考慮しない。他のフラグの変化はどうなるか?

例として Mの下2bitを対象ビットとして検討しよう。Bp=03である。

Mの上位6bitは、M&Bpでマスクされるので何でも良い(無視される)。

  • aは実はbと同じである。M=任意,bp=00 の場合 M&Bp=00 なので自明
  • bは全対象ビットが0のときに、Z=1。例えば M=00,bp=03 なら M&Bp=00, 対象ビットが全部0なので Z=1。N,V=0
  • cは全対象ビットが1のときに、V=1。例えば M=03,bp=03 なら M&Bp=03, (M&Bp)^bp==0 なので一致。V=1。Z,N=0
  • dは0/1混在のときにN=1,Z=0,V=0。例えば M=01,bp=03 なら M&Bp=01, (M&Bp)^bp!=0 なので混在。N=1,Z=0,V=0。

b,c,dの場合分けは、それぞれZVNのフラグが1つだけ立つようになっている。BNE/BEQ,BVS/BVC,BPL/BMI命令で分岐できる。BVS/BVCは滅多に使わないので新鮮な感じ。

TMM命令のフラグ変更は2段階?

整理すると、フラグの立つタイミングが2つあるのがわかる。

Zは M&Bp の結果を反映しているし、 V,N は (M&Bp)^bp の結果によって変化する。

富士通の技術誌 「FUJITSU」 記事の命令機能概略の記述は、BP ∩ (M) がダブって書かれているのではなく、ANDとXORの両方の結果がフラグに反映する意味だったのだろう。

「FUJITSU」 1976・VOL.27・No.5 「MB8861マイクロプロセッサ」p.75より引用



ところが、富士通のMB8861のカタログでは、TMMは単に BP ∩ (M) ⊕ BP と書かれていて、「マイコン手づくり塾」の命令一覧や、月刊マイコン1978年3月号記事でもそれが引き継がれている。


余談

「FUJITSU」の記事は全16ページ。そのうちMB8861の起動と割り込みシーケンスについて4P近くが費やされている。

月刊ASCII誌 1978年8月号 p.63によると、実は古いMC6800と古いMB8861N/Eの割り込み処理にはバグがあって「SWI実行中にNMIがあると なぜかIRQを実行し、SWIもNMIも実行しない」そうだ。

古いMB8861N/Eでは、38ピンをLにすると動作が代わり、NMIが実行される(SWIは実行されない)。この辺りの修正もあって割り込み部分の記述が詳しくなってしまったのだろうか?


ASCII記事では さらに「MB8861又は新しいN,Eタイプ このタイプのCPUとモトローラのM6800のTJバージョン(PKバージョンは旧N,Eタイプと同じ)は完全なインタラプト処理が可能」とあり、少なくとも1978年8月までのどこかで修正が入ったと思われる

MC6800のバグに関しては Motorola MC6800 にも「1977年11月以前に製造されたMC6800には」「CLI命令の後にWAI命令を続けて実行する場合、この直前の命令コードが偶数の場合に正しく動作しないという不具合」とある。

リンク


資料

コメント

タイトルとURLをコピーしました