052001 software note

052001 の命令セットは 6809 を参考にした CPU で独自に拡張が加えられています。

  • opcode と addressing mode の扱いを変更し、 prebyte を廃止
  • 6809 での extened, DP addressing mode の2つを indexed へ統合
  • 8bit 出力ポートを内蔵
  • DP を 16bit に拡張

CPU register (主に DP)

6809 と同じレジスタは PC, CC, A, B, D, X, Y, U, S, NMI許可です。

DP は 16bit に拡張しています。

  • hardware reset で DP は 0 に初期化されます。
  • EXG / TFR 命令で 16bit 単位で転送出来ます。
  • indexed addressing で ,DP+ のような 2番目のレジスタとして 16bit 使うことが出来ます。
  • indexed DP addressing で <$20 は DP の bit15:8 と offset ($20) を連接した 16bit値を ea として算出し、結果的に 6809 と同じ挙動をします。
  • push/pull では 6809 との互換性のためか DP の bit15:8 のみが操作されます。(既存ソフトは全て push A; pull dp 経由で初期化しています。)

addressing mode 概要

inherent, immdiate, indexed, relative の4つが利用可能です。

  • inherent は引数を持ちません。
  • indexed は 5bit offset が廃止された以外は直交性対称性が高くなっています。詳しくは別記事に記載しました。 → http://d.hatena.ne.jp/na6ko/20150814
  • immdiate は対象レジスタが A か B の場合は 8bit, それ以外は 16bit で利用します。
  • relative は分岐命令に使用します。

addressing mode - relative

Bcc (R8) と LBcc (R16) で待ち時間と参照バイト数が異なります。

mode         |# ~ _|operation
-------------+-----+--------------
r8  cond == 0|0 2 0|pc+=1 (dummy cycle?)
r8  cond == 1|1 3 0|pc+=signed(r8)
r16 cond == 0|0 3 0|pc+=2 (dummy cycle?)
r16 cond == 1|2 1 0|pc+=r16

分岐条件(cond)非成立時には offset を読み飛ばしているのですが、読み飛ばす address は発生するものの AS が上がったり下がったり不安定で、 dtac は読んでいない波形がでてます。よって # は 0, ~ は 2 となります。