If you're a fan of Motorola's 6809 Advanced 8-bit CPU, you may be aware of Hitachi's 6809-compatible 6309 CPU. You may have heard of the article that "revealed" the 6309's extensions to the 6809 register model and instruction set. And if you don't know Japanese, you may have wondered if there were a translation.
I am not especially a fan of the 6309, although I am something of a fan of the 6809. But there are many fans of the 6809 who are also fans of the 6309, and I've heard enough of them ask for a translation of this article, and I happen to be spinning my wheels in my more important goals at the moment, so I've decided to take a crack at it.
Up until now, the article in question has only been available as a graphic
embedded in a PDF. So you couldn't even feed the text to Google Translate to get
a bad translation because the text had to be read by someone who can read
Japanese and type it. So that's what I'm doing here, reading it from the image and typing it.
Today (May 7th), I just finished typing in the background portion of the article, and that may be the more interesting part, anyway, so I'll go ahead and post it here, adding the rest in the next several weeks or months, when I'm not too tired from the mail route. (Completed and posted below, June 8th.)
I'm also planning a real translation, a bit at a time. I've done the first pass on the headline and the first paragraph (and now background section), and those will form the start of the translation post. (For the sake of not forcing everyone to go to Google Translate, I've pasted what it does with the background part into the bottom of the translation post for now.)
[JMR202206072234:
I finished translating the background part a couple of weeks ago at the translation post linked above, and forgot to make a note of that here. It's done, you can read it there.
I have now (June 7th) finished typing in the technical part of the transcription, and
will be posting it here over the next several days. Or I might make a second
post of the complete transcription. The tables and lists take special
handling, and can't be done all at once the way raw text can.
I'll begin translating the technical part real soon now, but I'll note again that the technical information in the article should be considered to be for historical interest only. The information at
http://www.sandelman.ottawa.on.ca/People/Alan_DeKok/interests/6309.techref.html
is more complete and more accurate.
]
[JMR202206082228:
(June 8th) Added the technical details section, starting with
************
拡張レジスタ
Tables (図) are buried in code and pre tags to preserve text formatting without html markup.
]
If the publishers of Oh! FM or the authors of the article take exception to me putting this up without permission, yes, I'll take it back down. It's just so long water under the bridge that it's hard to imagine anyone thinking it will do anyone any more damage now, but you never know.
Since I don't own the original copyrights, I cannot extend permission to copy or publish in any way.
The transcript text, with a tiny bit of crude markup:
[Original copyright 1988 Oh!FM -- 元発行社 Oh!FM 1988]
[Transcription copyright 2022 Joel Matthew Rees -- 書き起こし発行者 Joel Matthew Rees 2022]
[Oh!FM 1988-4: p.72]
=================================================
16ビット乗除算/レジスタ間演算/ブロック転送が可能
超8ビット級MPU
63C09の拡張機能をさぐる
63C09解析委員会
UNO
6809のマイナーチェンジ版に、63C09というLSIがあります。ハードに強い一部のユーザの間では、その高速性を買われ、本体の改造に使われたりしてきました。ところが、最近この63C09に各種の拡張機能が隠されていたことがわかりました。ここでは、それらの機能を発見し、探索してきた「63C09解析委員会」の方にその概要を報告していただきます。
なお、本体の改造、ことにCPUの差し換えは、メーカーの修理は保証されず、他の周辺LSI、周辺機器も交換しなければならない場合もありえ、おまけに63C09だと従来のソフトの一部(あるいは多数)が動作しなくなる危険性がありますので、「私は自作したプログラムしか使わない!」という、よほど腕に自信のある方以外にはお勧めしかねます。
******************
6809の高速版
63C09
パソコンの楽しみ方には色々ありますが、その筋の兵[つわもの]だけに許された遊びとして、ハードの改造があります。その昔からいろいろな改造が行なわれてきましたが、中でもCPUの高速化は、処理能力の向上が著しいことと、比較的簡単に行えることから、市販ソフトに頓着しないプログラム自作派の間では広く試みられてきました。古くは
FM-8 に積まれた 68A09 (1.2 MHz) を 68B09 (2 MHz) に変えて、
FM-7並の処理速度を与えたこと、最近では FM-11
を中心にCPUをクロックアップして 2.5~4 MHz
で動かすことが、その代表的なところです。
「えっ、 2.5~4MHz
だって、そんなに速い
6809ってあったっけ」と思われる方もおられるでしょうが、実は存在するのです。秋葉原や日本橋のチップ屋さんで売っている日立の
63C09 というMPUがそれで、 3 MHz で動作する、
6809のC−MOS版です。ノーマルに従うなら従来の 68B09 (2 MHz) の
1.5倍の処理能力になり、選別して規格外の 4 MHz
で動くものを使えば2倍の処理能力となります。
この 63C09
を使って高速化を行うわけで、基本的にはCPUとクロックを差し換えるだけの簡単なものですが、それだけでは済まないこともあります。
FM-8, 7, 77D1/D2/L4, 77AV, 11
のようにCPUがソケットに差さっている機種では単純に差し換えるだけですが、
FM-NEW7, 77AV20/40/20EX/40EX
のように基板に直接ハンダづけされている機種ではかなりの腕がないとCPUが引っこ抜けません。また、クロックアップした場合周辺LSIや周辺機器が追いつかないこともあり、その場合はそれらも交換しなければなりませんが、AV系のようにカスタムLSIが多用されている場合は難しいでしょう。
7/AV系のサブシステムのように微妙なタイミングで動いているものでは、クロックアップはかなり困難で、しかも、クロックアップしたが最後、プロテクトやその他の処理に内蔵タイマやソフトウェア的なタイミングを使った市販アップリケーションソフトの多くは全て使いものにならなくなってしまいます。
さて、これら様々な困難を伴った高速化ですが、そのもたらす結果は苦労を補って余りあるものです。
ちなみに
FM-11 の場合を例にとると、CPUの差し換えだけだと 2.5~3 MHz
ぐらいが限界のようで、それ以上を望むと一部周辺LSIの差し換え等が必要なようです。
11ではサブシステムの高速化も可能で、手を加えれば 4 MHz までいけます。とくに、
4 MHz化された FM-11
のサブシステムの表示速度は目を見張るものがあり、漢字の表示速度が漢字VRAMをもった
FM16β と大差ない速さになります。
*************
拡張機能の発見
というわけで、私の周りの歴戦の勇士たちは次々と
FM-11 に高速化改善を行ったのですが、そこに1つ、奇妙な問題が発生しました。
コマスのワープロWPV3が動かなくなってしまったのです。最初は、前述したソフト的なタイミングの問題か何かだと思われたのですが、驚いたことに、クロックを
2 MHz に落としても動きません。
そこで、友人の
Gigo氏を中心に原因探究が始まったのですが、ほどなく 6809
の未定義命令で引っかかっていることがわかりました。未定義命令とは、メーカが発表しているマニュアルで定義されていない命令のことで、建前上はそのような命令を使ってもなんの動作もしないことになっているのですが、実は隠し命令になっていることもままあります。一昔のパソコン雑誌には、よく各社製CPUの隠し命令の解析記事が載っていたりしました。このよう
--------
72
Oh!FM 1988-4 警告 CPUを 63C09
に交換した場合、かなりの市販アプリケーション(とくにゲーム)が動作しなくなります。
--------
[Oh!FM
1988-4: p.73]
な隠し命令は、 6809
にもそう大したものではありませんでしたがありました。さて、未定義命令の扱いが
63C09 と 6809 とでは異なるということは、隠し命令も異なる可能性があるわけです。
63C09 の出荷開始時期 (1985年秋)
を考えても、何か機能が追加されても当然なくらいで、「もしかしたら」の期待がわきました。
引っかかっているコードの1つに「$1F,
$62」というものがありました。命令自体は TFR
(レジスタ間のデータ転送命令)でおなじみのものですが、未定義レジスタから Y
レジスタへ転送するように指示されています。 6809 の場合は未定義なので Y
レジスタに $FFFF が返りますが、63C09 の場合は Y
レジスタにはめちゃくちゃな[値]が入ります。試みに、 Y
レジスタから未定義レジスタ番号にデータ転送してから未定義レジスタ番号から Y
レジスタへ戻してやると、元のデータがちゃんと残っていました……。つまり、 63C09
の未定義レジスタ番号は、番号が余って未定義となっていたのではなく、実在するレジスタを指す番号だったのです!
その隠しレジスタを発見した
Gigo氏は、狂喜してかたっぱしから友人に電話をかけまくりました。そして、私のところにも夜も丑三つ[うしみつ]時[dead
of the night]過ぎにかかってきました……。話の内容は、「63C09
にはレジスタが余計にある。レジスタがあるからには命令もあるはずだ。みんなで手分けして調べよう」というもので、それから隠し命令を探す日日が始まり、ディスアセンブル表の割り当てのないコードをデバッガでメモリ上に書き、ブレークポイントを設定して
TFR
でレジスタに値をセットして実行させ、レジスタの内容を見るという単調な作業が繰り返されました。その日わかった結果を、パソコン通信を通じて情報交換するうちに、いつとはなしに、
FM-11 で OS-9 をやっている、それもほとんど病気に近いマニアが集まり、「63C09
解析委員会」なる集団が自然発生しました。
マニアの執念は恐ろしいもので、ほどなく
36C09 の拡張機能の大筋が判明しました。概略を述べると、
・3種類のレジスタが増設されており、そのうちの1つはアキュムレータとして、またインデックスレジスタとして使える
・32÷16
ビット除算、 16÷8 ビット除算、 16×16
ビット乗算、レジスタ間演算、ビット操作、ブロック転送などの命令が拡張されている。
・未定義の命令を検出した場合トラップがかかる
・6809
コンパチのモードと、 63C09 本来のモードの2種類の動作モードをもつ
といったところで、今までの
6809
で不便であった部分、弱点であった部分が相当改善されており、またとても8ビットMPUとは思えない強力な機能も含まれています。
これらの解析結果はNANNO−NETを皮切りに、いくつかの
BBS
にアップされました。多くのネットワーカーの方から多大な反響を得ましたが、より多くの方に「8ビットを超える8ビットMPU」
63C09 の全貌[ぜんぼう=entire body]を知っていただくために、 Oh!FM
の誌上お借りしてご報告します。
*******************
63C09化の
メリット/デメリット
日立から販売されている
HD63C09 は、モトローラの MC6809
とピンコンパチの8ビットMPUです。MPUの仕様は 6809
に拡張機能を付け加えた形のもので、
6809の上位コンパチになっています(未定義の命令を除く)。日立から公式発表はされていませんが、
63C09 の拡張機能を活用すると、
6809パソコンの処理能力を大幅に向上させることができます。
6809パソコンのMPUを
63C09
に差し換えた場合のメリットは処理能力の向上につきます。その要因としては以下の3点が考えられます。
1 高速クロック
2 拡張命令/拡張レジスタ
3 ネイティブモード
1は当然のことで、MPUの動作クロックをあげればソフトの実行速度は上がります。未定義命令トラップやソフトウェアタイマの関係で引っかかる一部を除けば、従来のソフトが高速に動かせます。動作クロックの上昇率はハードにより異なり、場合によってはほとんどあげられないこともあります。
2は、新規にソフトを書き起こすか、従来のソフトにパッチを当てたときに効果があります。従来の
6809 だとアセンブラのマクロ機能で表現していた処理の相当が 63C09
の1命令で書けるようになり、マシンサイクルを短縮できます。
3は、
63C09固有のモードに切り換えて使うと、通常のエミュレーションモードよりも命令の実行サイクルが短くなることにより生じるものです。このモードを使うと、同じ動作クロックでも、通常より実行速度が最大20〜30%上がります(アドレッシングモードにより効果が違う)。ただ、スタックや割り込み関係で動作が異なる点があるので、ネイティブモードを利用するには
F-BASIC なり OS-9 なりのシステムの一部を書き換える必要があります。
逆にデメリットとしては、まず、
6809
の未定義命令を使ったソフトに限らず、多くの内蔵タイマを使った市販ソフトその他が動作不良を起こしてしまうであろうこと、また、
63C09
の拡張機能を活用するにはそれらを活用するための開発ツールを自作できるくらいのそれなりの腕が必要で、ノービスには難しいことが難点といえるでしょう。
メリットとデメリットを比較すると、現状では自分でプログラム書くだけの人ならその恩恵を受けることができるが、ごく一般のゲームユーザやアプリユーザは決して手を出さないほうがよい、といったところでしょう。
それでは、
63C09 の拡張機能について以下順番に解説していきます。
************
拡張レジスタ
63C09
では 6809 よりレジスタの数が3つ増えています(図1)。そのうち2つは
16ビットのレジスタで、もう1つは8ビットのモードステータスレジスタです。
Wレジスタ[16ビット]
~~~~~~~~~~~~~~~~~~~~
アキュムレータとしても、インデックスレジスタとしても使用できる
16ビットレジスタです。
アキュームレータとして使うときは、 16ビ
--------
Oh!FM
1988-4 73
--------
[Oh!FM 1988-4: p.74]
ットレジスタとしてのほか、2つの8ビットレジスタ(E/Fレジスタ)に分割して使うこともできます。ちょうど、既存の
D/A/Bレジスタがもう1組増えたようなものです。ただし、 AND/OR 等の W/E/F
レジスタでは使えない命令もあります。
また、既存の
Dレジスタと連結して
32ビットレジスタ(Qレジスタ)として使うことができ、乗除算のときに利用します。
インデックスレジスタとして使うときは、既存の
X/Yレジスタと同様に利用します。この場合、 6809
でポストバイトに用いられていないビットパターンを使用します。Wレジスタをインデックスレジスタとして使用したときの、アキュムレータオフセットと5ビットオフセット、8ビットのコンスタントオフセットはありません。
また、特徴な使い方として、ブロック転送でのカウンタレジスタとして使う方法があります。
Vレジスタ[16ビット]
~~~~~~~~~~~~~~~~~~~~
Vレジスタを使う命令は、レジスタ間演算命令や
TFR
などに限られています。Vレジスタの特徴は、MPUをリセットしてもレジスタの値が変化しないことです。このレジスタをOSなどで定数等を保持するような目的に便利でしょう。
MDレジスタ[8ビット]
~~~~~~~~~~~~~~~~~~~~
モード/ステータスビットレジスタの略で、除算実行時のエラー検出や未定義命令トラップの作動チェック、動作モードの設定など、
63C09
になって増えたモードやステータスの表示に用いられます。各ビットの意味は次のとおりです。
・ビット7 R 除算で
0 で割ったときに 1 がセットされる
・ビット6 R 未定義命令をフェッチしたときに
1 がセットされる
・ビット1 W FIRQ時のレジスタの退避モード設定ビット
0
-> FIRQ時、 PC と CC のみスタックに退避
1 -> FIRQ時、
すべてのレジスタを退避
・ビット0 W 動作モード設定ビット
0
-> エミュレートモード
1 -> ネイティブモード
なお、リセット時にはすべてのビットは
0 になります。
図1 63C09レジスタ構成
__________________________________________________
|----------Q----------|
|----D----| |----W----|
|-A-| |-B-| |-E-| |-F-| アキュムレータ
----------- |----X----| X インデックスレジスタ
----------- |----Y----| Y インデックスレジスタ
----------- |----U----| ユーザスタックポインタ
----------- |----S----| システムスタックポインタ
----------- |---PC----| プログラムカウンタ
----------- |----V----| V(alue) レジスタ
----------- |---DP----| ダイレクトページレジスタ
----------------- |CC-| コンデションコードレジスタ
----------------- |MD-| モード/ステータスレジスタ
__________________________________________________
*********
動作モード
63C09には2つの動作モードがあります。1つは 6809 とのコンパチビリティを考えたエミュレートモードで、もう1つは 63C09 の本来の機能を引き出すネイティブモードです。
と、いうと、「拡張レジスタや拡張命令が使えるのがネイティブモードで、使えないのがエミュレートモードだな」と思われる方もいるでしょうが、それはハズレです。 63C09 では、拡張レジスタと拡張命令をどちらのモードでも使えます。
エミュレートモードとネイティブモードの違いは、インタラプト時のスタックの扱いの違いです。インタラプトがかかったときレジスタの内容はスタックに退避されますが、そのとき従来からのレジスタだけを退避させるのがエミュレートモードで、拡張レジスタの W レジスタも退避させるのがネイティブモードです。
63C09 をリセットした直後はエミュレートモードに設定されています。このモードでは 6809 のソフトが問題なく動作する代わり、マルチタスクで拡張レジスタを使うときに気をつけなければなりません。たとえば、拡張レジスタの W レジスタをカウンタに使うブロック転送命令 TFM を使ったケースを考えます。タスクAで TFM 命令を使用中に、インタラプトをかけて、タスクBに移ったとしましょう。そのときにタスクBで W レジスタを使用したとしたら、また元のタスクAに戻ったときに W レジスタの中身が変更されていますので、誤動作を起こします(もちろんシングルタスクで使用するときや、マルチタスクでも1つのタスクでしか拡張レジスタを使用しないときは問題ありません)。よって、エミュレートモードでは、拡張レジスタを使用するときはいちいちインタラプト禁止して、さらにこのレジスタを一度スタックにセーブしてからでないと、別タスクに切り換えてはなりません。
これでは、高速ゲームや OS-9 から拡張レジスタを使いづらいうえ、使いにくい拡張命令も発生します。そのために、拡張レジスタと拡張命令を使うことを前提にしたモード、ネイティブモードが存在します。このモードでのインタラプトは PC, U, Y, X, DP, W, D, CC の順にスタックにレジスタを退避して割り込み処理に入ります。ここで注意してほしいのは、 W は DP と D の間にあるということです。これは、 D と W の 32ビットレジスタペア Q としてスタックに退避するという意味です。
ネイティブモードの特徴としては、もう1つ、命令のマシンサイクル短縮があげられます。その結果、アドレシングモードによって 20 ~ 35%高速に動作します。
とくにダイレクト、エクステンド、インヘラント、で顕著[けんちょ=remarkable, striking, conspicuous]にその効果が現れます。
--------
74 Oh!FM 1988-4
--------
[Oh!FM 1988-4: p.75]
なお、ネイティブモードでも V レジスタと MD レジスタはその性格上退避されませんので注意してください。
エミュレートモードからネイティブモードに移行するには、新設された MD レジスタのビット 0 (LSB) に 1 を書き込むことによって実現します。
さて、 63C09 のモードには上の2つのほかに、 FIRQ のスタック退避モードが用意されています。ご存知のように、 6809 では FIRQ をフェッチすると、 PC と CC のみをスタックに退避してインタラプト処理ルーチンへ分岐します。しかし、制御用のボードマイコンの場合、 FIRQ より IRQ がもう1つあったほうが便利なケースがあります。しかし、 63C09 は 6809 とピンコンパチを[?謳=うた?]っていますので、足の配置を変えるわけにはいきません。そこで、 FIRQ を IRQ として使用できるように、スタックの退避をすべてのレジスタが行うようにモードをソフトで切り換えられるようになっています。 FIRQ を IRQ として使用する場合は MD レジスタのビット 1 に 1 を書くことによって実現します。
********
トラップ
63C09 は以下の現象が発生したときにトラップがかかります。
1 未定義命令がフェッチされたとき
2 除算命令の DIV 命令で 0 で割ったとき
トラップがかかると、エミュレートモードでは PC, U, Y, X, DP, B, A, CC の順に、ネイティブモードでは PC, U, Y, X, DP, W, B, A, CC の順に S レジスタにレジスタをプッシュした後、 $FFF0 のアドレスに書いてあるベクタに分岐します ($FFF0 は 6809 では RESERVE)。このトラップはリセットの次の割り込み優先度があります。なお、未定義命令かゼロ・ディバイドかを判定する命令として BITMD 命令があります。
このトラップのため、未定義命令を使っている 6809 のソフトが動作しなくなりますが、代わりに OS-9/68000等で使われているトラップライブラリを組めるようになります。たとえば、未定義命令に浮動小数点演算プロセッサの呼び出しを割り当てておくと、その命令を未定義命令トラップに引っ掛け、処理ルーチンに飛ばすことが可能になります。このトラップライブラリを利用すると、オブジェクトのサイズをかなり縮められるので便利でしょう。
********
拡張命令
63C09 拡張命令には、既存の命令の対応レジスタを増やした追加命令と新規に設けられた新設命令に分けられます。
新設命令としては、レジスタ間演算命令や、ブロック転送命令、乗算/除算命令、ビット操作命令、ビット演算/転送命令等の命令があります。
追加命令
~~~~~~~~
63C09 では、既存の命令も拡張されていて、対応するレジスタが増えています。
たとえば、今までありそうでなかった TSTD, ADCD などが追加されています。これらは従来でもアセンブラ上でマクロを使って表現できましたが、これらを使うことによりマシンサイクルを短縮できます。
また、 ADD や SUB などの命令では、 E/F/W レジスタが増えたことにより、それに対応する命令が増えています。いわば、 A/B/D レジスタがもう1組増えたようなもので、プログラミングの柔軟性が増します。ただし、 A/B/D レジスタで使える命令がすべて対応しているわけではありませんので注意してください(図2)。
既存の命令の中で追加の度合いが大きいのは TFR と EXG 命令でしょう。 TFR, EXG 命令では、対象レジスタの指定にポストバイトのビットパターンを用います。 63C09 ではレジスタが増えていますので、そのビットパターンの組み合わせも増えていて (0110->W, 0111->V, 1110->E, 1111->F), レジスタアドレッシングとでもいったらよい状態になっています。このレジスタアドレッシングは新設命令のレジスタ間演算でも使用しています。ここで注意しなければいけないのは、本当の未定義レジスタ番号を指定した場合、 63C09 と 6809 とでは動作が異なるということです。
図2 アキュムレータで行える処理
____________________________________
| A | B | E | F | D | W | Q |
CLR | o | o | o | o | o | o | |
INC | o | o | o | o | o | o | |
DEC | o | o | o | o | o | o | |
TST | o | o | o | o | o | o | |
COM | o | o | o | o | o | o | |
NEG | o | o | | | o | | |
SEX | o*| o*| | | o*| o*| |
ASL/LSL| o | o | | | o | | |
ASR | o | o | | | o | | |
LSR | o | o | | | o | o | |
ROL | o | o | | | o | o | |
LD | o | o | o | o | o | o | o |
ST | o | o | o | o | o | o | o |
ADD | o | o | o | o | o | o | |
SUB | o | o | o | o | o | o | |
CMP | o | o | o | o | o | o | |
ADC | o | o | | | o | | |
SBC | o | o | | | o | | |
AND | o | o | | | o | | |
OR | o | o | | | o | | |
EOR | o | o | | | o | | |
BIT | o | o | | | o | | |
MUL | o*| o*| | | o | | |
DIV | | | | | | | o |
____________________________________
* ワークとして使用
レジスタ間演算命令
~~~~~~~~~~~~~~~~~~
6809での演算は、ほとんどレジスタ対メモリないしイミディエイト値で行われていました。そのため A レジスタと B レジスタの値の AND をとりたい場合は、どちらかのレジスタをメモリ上にストアしてから演算(この場合は AND)を行わなければなりませんでした。 63C09 ではこれが解決されていてレジスタ同士の演算が可能になりました。これらは TFR や EXG と同じレジスタアドレッシングを用います。
レジスタ間演算命令は以下のようなものがあります。
ADDR, ADCR, SUBR, SBCR,
ANDR, ORR, EORR, CMPR
ブロック転送命令
~~~~~~~~~~~~~~~~
6809 でメモリ上のデータを移動させるときは、一度そのデータをレジスタにロードしてきては、それをセーブするということを繰り返して行っていました。これはこれでよいのですが、問題はその処理にかかる時間です。そこで Z80 や 8086 などにもあるブロック転送命令が、 63C09 にも設けられています。
--------
Oh!FM 1988-4 75
--------
[Oh!FM 1988-4: p.76]
ブロック転送命令では、転送元アドレス(ソース)、転送先アドレス(ディスティネーション)の指定に 16ビットレジスタの D/X/Y/U/S レジスタの中から1〜2使います。レジスタの指定にはポストバイトを使い、その形式はレジスタアドレッシングの形式をとります。また、ソースとディスティネーションを同じレジスタでも指定できます。転送するバイト数のカウントには W レジスタを使います。
転送方法には4種類あり、正方向(TFM r0+,r1+)/逆方向(TFM r0-,r1-)の通常のブロック転送のほか、 I/O ポート等のアドレスにデータを次々と流し込むもの(TFM r0+,r1)、指定ブロックを指定値で塗りつぶすもの(TFM r0,r1+)があります。
乗算/除算命令
~~~~~~~~~~~~~~
6809 には MUL という 8×8ビットの乗算命令がありましたが、これは A レジスタと B レジスタの値を掛け合わせるだけのものでした。 63C09 で設けられた16×16ビット乗算命令(MULD)では、いろいろなアドレシングモードが使え、追加というよりは新設に近いものです。
また、 63C09 にはそれに加えて16÷8ビット除算(DIVD)、32÷16ビット除算(DIVQ)が設けられて、これらも、いろいろなアドレシングモードが使えるようになっています。
ビット操作命令(6301 コンパチ命令)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
日立の HD6301 には、 6801 の拡張命令としてビット操作命令が新設されていましたが、同じ 63 シリーズの 63C09 にも同じ命令があります。これらの命令はイミディエイトデータとメモリの内容を論理演算して、結果をメモリに戻したり、関連コンディションコードを変化させてしまうので、ビットパターンを操作するときなどに重宝します。
行える論理演算には、論理積(AIM)、論理和(OIM)排他的論理和(EIM)、論理積コンディションコード(TIM)があります。オブジェクトの構成は、
<命令コード>、<ビットの位置>、<オペランド>
の順になっています。
これらの命令を使うと、 6301 の命令はマクロアセンブラを用いれば 63C09 上で実行可能になります。つまり OASYS Lite 等の組み込みプログラムを FM 上で動かすことができるかも知れないわけで、そういう意味でも美味しい命令なのです(もっとも、その前に根性で ROM を逆アセンブルしなければなりませんが)。
ビット演算/転送命令
~~~~~~~~~~~~~~~~~~~~
63C09 には、多分に I/O を意識したビット演算/転送命令が存在しています。これらの命令は、アドレシングモードにダイレクトモードしかサポートしていない難はありますが、使い慣れれば便利に使えるでしょう。動作は、ダイレクトページの LABEL のビット n と REG レジスタのビット m を論理演算して、 REG レジスタに入れるものがほとんどです。ビット演算/転送命令には以下のようなものがあります。
BAND, BOR, BEOR, BIAND,
BIOR, BIEOR, LDBT, STBT
オブジェクトの構成は
<命令コード ($11,$xx)>、<ポストバイト>、<オペランド>
と、かなり変則な構成をとります。オペランドはダイレクトアドレシングのみです。また、ポストバイトは特殊な形式をとります。
その他の命令
~~~~~~~~~~~~
その他の命令としては、先ずモード切り換え命令があります。といっても、エミュレートモードからネイティブモードへの移行は、 MD レジスタのビット 0 (LSB) に1を書き込むことによって行われますので、 MD レジスタに対する普通の LD 命令を使います。
次にトラップがかかったとき、未定義命令でかかったのか除算のエラーで起こったのかを調べる命令 BITMD があります。これは、 MD レジスタのステータスビット(ビット 7 or 6)を調べ、どちらでトラップがかかったのかを知らせます。ただし、この命令を実行すると MD レジスタのステータスビット(ビット 7 and 6)はクリアされますので、未定義コードトラップか、 Divide by Zero トラップかは、一度きりしか調べることはできません。
そして、スタックに関するものがあります。 63C09 ではレジスタが増設されていますが、現在の PSHS/PSHU ではそれらをスタックにセーブすることはできません。なぜなら、PSHS/PSHU および PULS/PULU のポストバイトが、すでにすべて割り当てられていて追加の余地がないということです。そこで、 63C09 では増設されたレジスタへのスタック操作は別命令の
PSHSW, PULSW, PSHUW, PULUW
を使います。ただし、これは W レジスタに対するもののみしかありません。よって、これらはポストバイトをもたないインヘレンとアドレシングのみです。
********
おわりに
以上 63C09 に隠されていた機能の大筋を説明してきました。 6809 に+αで追加してほしかった機能がほぼ盛り込まれており、 6809派にはひさびさの好ニュースといえます。ただ、惜しむらくは登場時期が遅かったことで、そのため活躍の場がパソコンの改造か、産業用ワンボードマイコン程度に限られてしまったことです。ゲームパソコンも 68000系や 8086系、 65816 といった16ビットCPUを使い始めている現状では、 63C09 を積んだパソコンをメーカーが出荷することは、まずありえないことでしょう。当面は市場アプリに依存しない FM-11等の改造にしか使えないというのは残念なことです。
なお、この稿をまとめるにあたっては、私が解析した資料のほか、 63C09 解析委員会の仲間(とくに Gigo氏と Miyazaki氏)が解析された資料を参照させていただきました。 63C09 解析委員会関係者のご協力に感謝いたします。
--------------------------------
<参考文献>
・63C09解析委員会、「お年玉プレゼント 63C09 に隠し機能があった」など、NANNO−NET、1988年1月1日〜
・モトローラ、「MC6809-MC6809Eマイクロプロセッサプログラミングマニュアル」、CQ出版、1982年
・「6809 インストラクションポケットブック」、Oh!FM 1983年第4号、日本ソフトバンク
・水谷隆太、「6809の未定義命令」、I/O 1985年5月号、工学社
・原進、「FM-11 のクロックを 3MHz に」、パソコンワールド 1987年1月号、ピーシーワールドジャパン
--------
76 Oh!FM 1988-4
--------
[Oh!FM 1988-4: p.77]
図3 63C09で増えた命令(灰色に塗られた部分[=>*囲*])
(
横の列は、上からプリバイトなし、プリバイト $10付き、フリバイト $11付きの順に並んでいる。また、
各項目中の下段左側の数値はサイクル数で、カッコ内がネイティブモード時の値。右側は命令長。
)
[原稿の編集に因る誤植在り。 Original contains typographical errors.]
=================================================================================================================================================================|
| DIRECT | | | REL |ACC A/D/E|ACC B/W/F| INDEXD | EXTEND | IMMED | DIRECT | INDEXD | EXTEND | IMMED | DIRECT | INDEXD | EXTEND |
|0000xxxx|0001xxxx|0010xxxx| 0011xxxx | 0100xxxx| 0101xxxx| 0110xxxx|0111xxxx|1000xxxx|1001xxxx| 1010xxxx|1011xxxx|1100xxxx|1101xxxx| 1110xxxx|1111xxxx|
| 0x | 1x | 2x | 3x | 4x | 5x | 6x | 7x | 8x | 9x | Ax | Bx | Cx | Dx | Ex | Fx |
=================================================================================================================================================================|
0000 0 | NEG | (PRE) | BRA | LEAX | NEGA | NEGB | NEG | NEG | SUBA | SUBA | SUBA | SUBA | SUBB | SUBB | SUBB | SUBB |
(なし) | 6(5),2 | (BYTE1)| 3,2 | 4+,2+ | 2(1),1 | 2(1),1 | 6+,2+ | 7(6),3 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |* addr *|* negd *| | | |* subw *|* subw *|* subw *|* subw *| | | | |
($10) | | | | 4,3 | 3(2),2) | | | | 5(4),4 | 7(5),3)|7+(6+),3+| 8(6),4 | | | | |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |* band *| | | | |* sube *|* sube *|* sube *|* sube *|* subf *|* subf *|* subf *|* subf *|
($11) | | | | 7(6),4 | | | | | 3,3 | (4),3 | 5+,3+ | 6(5),4 | 3,3 | 5(4),3 | 5+,3+ | 6(5),4 |
=================================================================================================================================================================|
0001 1 |* oim *| (PRE) | BRN | LEAY | | |* oim *|* oim *| CMPA | CMPA | CMPA | CMPA | CMPB | CMPB | CMPB | CMPB |
(なし) | 6,3 | (BYTE2)| 3,2 | 4+,2+ | | | 7+,3+ | 7,4 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | LBRN |* adcr *| | | | |* cmpw *|* cmpw *|* cmpw *|* cmpw *| | | | |
($10) | | | 5,4 | 4,3 | | | | | 5(4),4 | 7(5),3)|7+(6+),3+| 8(6),4 | | | | |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |* biand *| | | | |* cmpe *|* cmpe *|* cmpe *|* cmpe *|* cmpf *|* cmpf *|* cmpf *|* cmpf *|
($11) | | | | 7(6),4 | | | | | 3,3 | 5(4),3 | 5+,3+ | 6(5),4 | 3,3 | 5(4),3 | 5+,3+ | 6(5),4 |
=================================================================================================================================================================|
0010 2 |* aim *| NOP | BHI | LEAS | | |* aim *|* aim *| SBCA | SBCA | SBCA | SBCA | SBCB | SBCB | SBCB | SBCB |
(なし) | 6,3 | 2(1),1 | 3,2 | 4+,2+ | | | 7+,3+ | 7,4 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | LBHI |* subr *| | | | |* sbcd *|* sbcd *|* sbcd *|* sbcd *| | | | |
($10) | | |5/6(5),4| 4,3 | | | | | 5(4),4 | 7(5),3)|7+(6+),3+| 8(6),4 | | | | |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |* bor *| | | | | | | | | | | | |
($11) | | | | 7(6),4 | | | | | | | | | | | | |
=================================================================================================================================================================|
0011 3 | COM | SYNC | BLS | LEAU | COMA | COMB | COM | COM | SUBD | SUBD | SUBD | SUBD | ADDD | ADDD | ADDD | ADDD |
(なし) | 6(5),2 | 2,1 | 3,2 | 4+,2+ | 2(1),1 | 2(1),1 | 6+,2+ | 7(6),3 | 4(3),3 | 6(4),2 |6+(5+),2+| 7(5),3 | 4(3),3 | 6(4),2 |6+(5+),2+| 7(5),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | LBLS |* sbcr *|* comd *|* comw *| | | CMPD | CMPD | CMPD | CMPD | | | | |
($10) | | |5/6(5),4| 4,3 | 3(2),2 | 3(2),2 | | | 5(4),4 | 7(5),3)|7+(6+),3+| 8(6),4 | | | | |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |* bior *|* come *|* comf *| | | CMPU | CMPU | CMPU | CMPU | | | | |
($11) | | | | 7(6),4 | 3(2),2 | 3(2),2 | | | 5(4),4 | 7(5),3)|7+(6+),3+| 8(6),4 | | | | |
=================================================================================================================================================================|
0100 4 | LSR | sexw | BHS/BCC| PSHS | LSRA | LSRB | LSR | LSR | ANDA | ANDA | ANDA | ANDA | ANDB | ANDB | ANDB | ANDB |
(なし) | 6(5),2 | 4,1 | 3,2 | 5+(4+),2 | 2(1),1 | 2(1),1 | 6+,2+ | 7(6),3 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | |LBHS/BCC|* andr *|* lsrd *|* lsrw *| | |* andd *|* andd *|* andd *|* andd *| | | | |
($10) | | |5/6(5),4| 4,3 | 3(2),2 | 3(2),2 | | | 5(4),4 | 7(5),3)|7+(6+),3+| 8(6),4 | | | | |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |* beor *| | | | | | | | | | | | |
($11) | | | | 7(6),4 | | | | | | | | | | | | |
=================================================================================================================================================================|
0101 5 | eim | | BLO/BCS| PULS | | |* eim *|* eim *| BITA | BITA | BITA | BITA | BITB | BITB | BITB | BITB |
(なし) | 6,3 | | 3,2 | 5+(4+),2 | | | 7+,3+ | 7,4 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | |LBLU/BCS|* orr *| | | | |* bitd *|* bitd *|* bitd *|* bitd *| | | | |
($10) | | |5/6(5),4| 4,3 | | | | | 5(4),4 | 7(5),3 |7+(6+),3+| 8(6),4 | | | | |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |* bieor *| | | | | | | | | | | | |
($11) | | | | 7(6),4 | | | | | | | | | | | | |
=================================================================================================================================================================|
0110 6 | ROR | LBRA | BNE | PSHU | RORA | RORB | ROR | ROR | LDA | LDA | LDA | LDA | LDB | LDB | LDB | LDB |
(なし) | 6(5),2 | 5(4),3 | 3,2 | 5+(4+),2 | 2(1),1 | 2(1),1 | 6+,2+ | 2,2 | 7(6),3 | 4(3),2 | 4+,2+ | 5(4),3 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | LBNE |* eorr *|* rord *|* rorw *| | |* ldw *|* ldw *|* ldw *|* ldw *| | | | |
($10) | | |5/6(5),4| 4,3 | 3(2),2 | 3(2),2 | | | 4,4 | 6(5),3 | 6+,3+ | 7(6),4 | | | | |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |* ldbt *| | | | |* lde *|* lde *|* lde *|* lde *|* ldf *|* ldf *|* ldf *|* ldf *|
($11) | | | | 7(6),4 | | | | | 3,3 | 5(4),3 | 5+,3+ | 6(5),4 | 3,3 | 5(4),3 | 5+,3+ | 6(5),4 |
=================================================================================================================================================================|
0111 7 | ASR | LBSR | BEQ | PULU | ASRA | ASRB | ASR | ASR | | STA | STA | STA | | STB | STB | STB |
(なし) | 6(5),2 | 9(7),2 | 3,2 | 5+(4+),2 | 2(1),1 | 2(1),1 | 6+,2+ | 7(6),3 | | 4(3),2 | 4+,2+ | 5(4),3 | | 4(3),2 | 4+,2+ | 5(4),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | LBEQ |* cmpr *|* asrd *| | | | |* stw *|* stw *|* stw *| | | | |
($10) | | |5/6(5),4| 4,3 | 3(2),2 | | | | | 6(5),3 | 6+,3+ | 7(6),4 | | | | |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |* stbt *| | | | | |* ste *|* ste *|* ste *| |* stf *|* stf *|* stf *|
($11) | | | | 8(7),4 | | | | | | 5(4),3 | 5+,3+ | 6(5),4 | | 5(4),3 | 5+,3+ | 6(5),4 |
=================================================================================================================================================================|
1000 8 | ASL/LSL| | BVC | |ASLA/LSLA|ASLB/LSLB| ASL/LSL | ASL/LSL| EORA | EORA | EORA | EORA | EORB | EORB | EORB | EORB |
(なし) | 6(5),2 | | 3,2 | | 2(1),1 | 2(1),1 | 6+,2+ | 7(6),3 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | LBVC |* pshsw *|* asld *| | | |* eord *|* eord *|* eord *|* eord *| | | | |
($10) | | |5/6(5),4| 5/6,2 | 3(2),2 | | | | 5(4),4 | 5(5),3 |7+(6+),3+| 8(6),4 | | | | |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |*tfm(r+,r+)*| | | | | | | | | | | | |
($11) | | | | 6+3n,3 | | | | | | | | | | | | |
=================================================================================================================================================================|
1001 9 | ROL | DAA | BVS | RTS | ROLA | ROLB | ROL | ROL | ADCA | ADCA | ADCA | ADCA | ADCB | ADCB | ADCB | ADCB |
(なし) | 6(5),2 | 2(1),1 | 3,2 | 5(4),1 | 2(1),1 | 2(1),1 | 6+,2+ | 2,2 | 7(6),3 | 4(3),2 | 4+,2+ | 5(4),3 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | LBVS |* pulsw *|* rold *|* rolw *| | |* adcd *|* adcd *|* adcd *|* adcd *| | | | |
($10) | | |5/6(5),4| 6,2 | 3(2),2 | 3(2),2 | | | 5(4),4 | 7(5),3 |7+(6+),3+| 8(6),4 | | | | |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |*tfm(r-,r-)*| | | | | | | | | | | | |
($11) | | | | 6+3n,3 | | | | | | | | | | | | |
=================================================================================================================================================================|
1010 A | DEC | ORCC | BPL | ABX | DECA | DECB | DEC | DEC | ORA | ORA | ORA | ORA | ORB | ORB | ORB | ORB |
(なし) | 6(5),2 | 3(2),2 | 3,2 | 3(1),1 | 2(1),1 | 2(1),1 | 6+,2+ | 7(6),3 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | LBPL |* pshuw *|* decd *|* decw *| | |* ord *|* crd *|* ord *|* ord *| | | | |
($10) | | |5/6(5),4| 6,2 | 3(2),2 | 3(2),2 | | | 5(4),4 | 7(5),3 |7+(6+),3+| 8(6),4 | | | | |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |* tfm(r+,r)*|* dece *|* decf *| | | | | | | | | | |
($11) | | | | 6+3n,3 | 3(2),2 | 3(2),2 | | | | | | | | | | |
=================================================================================================================================================================|
1011 B |* tim *| | BMI | RTI | | |* tim *|* tim *| ADDA | ADDA | ADDA | ADDA | ADDB | ADDB | ADDB | ADDB |
(なし) | 4,3 | | 3,2 | 6/15(17),1 | | | 5+,3+ | 5,4 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 | 2,2 | 4(3),2 | 4+,2+ | 5(4),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | LBMI |* puluw *| | | | |* addw *|* addw *|* addw *|* addw *| | | | |
($10) | | |5/6(5),4| 4,3 | | | | | 5(4),4 | 7(5),3 |7+(6+),3+| 8(6),4 | | | | |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |* tfm(r,r+)*| | | | |* adde *|* adde *|* adde *|* adde *|* addf *|* addf *|* addf *|* addf *|
($11) | | | | 6+3n,3 | | | | | 3,3 | 5(4),3 | 5+,3+ | 6(5),4 | 3,3 | 5(4),3 | 5+,3+ | 6(5),4 |
=================================================================================================================================================================|
1100 C | INC | ANDCC | BGE | CWAI | INCA | INCB | INC | INC | CMPX | CMPX | CMPX | CMPX | LDD | LDD | LDD | LDD |
(なし) | 6(5),2 | 3(2),2 | 3,2 | 20(22),2 | 2(1),1 | 2(1),1 | 6+,2+ | 7(6),3 | 4(3),3 | 6(4),2 |6+(5+),2 | 7(5),3)| 3,3 | 5(4),2 | 5+,2+ | 6(5),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | LBGE | |* incd *|* incw *| | | CMPY | CMPY | CMPY | CMPY | |* ldq *|* ldq *|* ldq *|
($10) | | |5/6(5),4| | 3(2),2 | 3(2),2 | | | 5(4),4 | 7(5),3 |7+(6+),3+| 8(6),4 | | 8(7),3 | 8+,3+ | 9(8),4 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |* BITMD *|* ince *|* incf *| | | CMPS | CMPS | CMPS | CMPS | | | | |
($11) | | | | 4,3 | 3(2),2 | 3(2),2 | | | 5(4),4 | 7(5),3 |7+(6+),3+| 8(6),4 | | | | |
=================================================================================================================================================================|
1101 D | TST | SEX | BLT | MUL | TSTA | TSTB | TST | TST | BSR | JSR | JSR | JSR |* ldq *| STD | STD | STD |
(なし) | 6(4),2 | 2(1),1 | 3,2 | 11(10),1 | 2(1),1 | 2(1),1 |6+(5+),2+| 7(6),3 | 7(6),2 | 7(6),2 | 7+(6+),2| 8(6),4 | 5,5 | 5(4),2 | 5+,2+ | 6(5),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | LBLT | |* tstd *|* tstw *| | | | | | | |* stq *|* stq *|* stq *|
($10) | | |5/6(5),4| | 3(2),2 | 3(2),2 | | | | | | | | 8(7),3 | 8+,3+ | 9(8),4 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | |* ldmd *|* tste *|* tstf *| | |* divd *|* divd *|* divd *|* divd *| | | | |
($11) | | | | 5,3 | 3(2),2 | 3(2),2 | | | 25,3 |27(26),3| 27+,3+ |28(27),4| | | | |
=================================================================================================================================================================|
1110 E | JMP | EXG | BGT | | | | JMP | JMP | LDX | LDX | LDX | LDX | LDU | LDU | LDU | LDU |
(なし) | 3(2),2 | 8(5),2 | 3,2 | | | | 3+,2+ | 4(3),3 | 3,3 | 5(4),2 | 5+,2+ | 6(5),3 | 3,3 | 5(4),2 | 5+,2+ | 6(5),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | LBGT | | | | | | LDY | LDY | LDY | LDY | LDS | LDS | LDS | LDS |
($10) | | |5/6(5),4| | | | | | 4,4 | 6(5),3 |6+(6+),3+| 7(6),4 | 4,4 | 6(5),3 |6+(6+),3+| 7(6),4 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | | | | | | |* divq *|* divq *|* divq *|* divq *| | | | |
($11) | | | | | | | | | 34,4 |36(35),3| 36+,3+ |37(36),4| | | | |
=================================================================================================================================================================|
1111 F | CLR | TFR | BLE | SWI | CLRA | CLRB | CLR | CLR | | STX | STX | STX | | STU | STU | STU |
(なし) | 6(5),2 | 6(4),2 | 3,2 | 19(21),1 | 2(1),1 | 2(1),1 | 6+,2+ | 7(6),3 | | 5(4),2 | 5+,2+ | 6(5),3 | | 5(4),2 | 5+,2+ | 6(5),3 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | LBLE | SWI2 |* clrD *|* clrw *| | | | STY | STY | STY | | STS | STS | STS |
($10) | | |5/6(5),4| 20(22),2 | 3(2),2 | 3(2),2 | | | | 6(5),3 |6+(6+),3+| 7(6),4 | | 6(5),3 |6+(6+),3+| 7(6),4 |
--------|--------|--------|--------|------------|---------|---------|---------|--------|--------|--------|---------|--------|--------|--------|---------|--------|
| | | | SWI3 |* clre *|* clrf *| | |* muld *|* muld *|* muld *|* muld *| | | | |
($11) | | | | 20(22),2 | 3(2),2 | 3(2),2 | | | 28,4 |30(29),3| 30+,3+ |31(30),4| | | | |
=================================================================================================================================================================|
[** These are the typographical errors I noticed in the above table: ]
[** Several other places appear to be errors and need to be checked.]
[*1* Cycle count for sube direct mode ($1190) is clearly a typo, see subf: (4),3 => 5(4),3 .]
[*2* Long branches with dual mnemonics (LBHS/LBCC=$1024 and LBLO/LBCS=$1025) abbreviate the second mnemonic in the original to fit the table.]
[*3* First mnemonic (LBLU) for LBLO/LBCS ($1025) is a typo.]
[*4* The cycle and byte counts for ROR extended ($76) and LDA immediate ($86) are swapped: ROR extended => 7(6),3 and LDA immediate => 2,2 .]
[*5* The byte count for LBSR ($17) is a typo: 2=>3 .]
[*6* The cycle and byte counts for ROL extended ($79) and ADCA immediate ($89) are swapped: ROL extended => 7(6),3 and ADCA immediate => 2,2 .]
[*7* The mnemonic for (crd) for ord direct ($109A) is a typo.]
[*8* The cycle and byte counts for puluw ($103B) appear to be a typo.]
[*9* The byte count for CMPX indexed ($AC) is a typo: 2=>2+ .]
[*10* The op-code at which ldq immediate is shown ($CD) looks maybe out-of-place (=>$10CC?), needs to be checked.]
[*11* The cycle counts for LDY, STY, LDS, and STS indexed ($10AE, $10EE, $11AE, $11EE) look odd: 6+(6+), need to be checked.]
[*12* The mnemonic for clrd ($104F) is a typo: clrD .]
[** Do not assume that I found them all.]
--------
Oh!FM 1988-4 77
No comments:
Post a Comment