HuC6280 CPU の研究部屋

Z80 の 研究部屋M6809 の 研究部屋と同様に、 HuC6280 の CPU について調査したデータを置いておきます。

HuC6280 には無印と A リビジョンがありますが、今回調査したのは無印の方です。無印と A リビジョンとの違いは不明です。

トップページへ戻る


目次

  1. 信号線の調査データ [Dec.27 2014]
  2. [IMPLIED] [Dec.27 2014]
  3. [ACCUMULATOR] [Dec.27 2014]
  4. [IMMEDIATE] [Dec.27 2014]
  5. [IMMEDIATE ZEROPAGE] [Dec.27 2014]
  6. [IMMEDIATE_ABSOLUTE] [Dec.27 2014]
  7. [RELATIVE] [Dec.27 2014]
  8. [ZEROPAGE] [Dec.27 2014]
  9. [ZEROPAGE RELATIVE] [Dec.27 2014]
  10. [ABSOLUTE] [Dec.27 2014]
  11. [ZEROPAGE INDIRECT] [Dec.27 2014]
  12. [BLOCK TRANSFER] [Dec.27 2014]
  13. [JMP INDIR] [Dec.27 2014]
  14. [T-MODE ORA/AND/EOR/ADC] [Dec.27 2014]
  15. [INTERRUPT] [Dec.27 2014]
  16. [BAD NOP] [Dec.27 2014]
  17. [その他調査データ] [Dec.27 2014]

トップページへ戻る


信号線の調査データ [Dec.27 2014]

HuC6280 のマスタークロックを L/H に変化させるたびに制御信号線やバスの値を読んで記録したデータです。 マスタークロックを L/H にセットして十分に時間が経ってからデータを取り込んでいると考えてください。

マスタークロックの H と L 変化ごとにデータを取得しているため、 CPU の 1 サイクルが 24 行になっています。 1 サイクルが縦に長くて見づらい向きもありますが、一応これによって各信号がマスタークロックの立ち上がり/立ち下がりのどちらで変化するか、また CSH/CSL 命令でクロック周波数が切り替わるタイミングも詳しく見ることができます。見づらい場合は適当にデータを間引いてください。

例として、NOP 命令実行時の信号線の変化を次に掲載します。

/RESET CLK SX   ADDR  DATA /RD /WR RDY SYNC HSM /NMI /IRQ1 /IRQ2 /CEK /CE7 /CER O0 O1 P23
   1    0   1  0000FC  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1 ; SYNC=H なので opcode ($EA) フェッチサイクル
   1    1   1  0000FC  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FC  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FC  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FC  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FC  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FC  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FC  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   0  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   0  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   0  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   0  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   0  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   0  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   0  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   0  0000FC  EA   0   1   1    1   0    1    1     1     1    1    1   1  1  1

   1    0   1  0000FD  FF   1   1   1    0   0    1    1     1     1    1    1   1  1  1 ; dummy operand read
   1    1   1  0000FD  FF   1   1   1    0   0    1    1     1     1    1    1   1  1  1 ; 6502 同様 NOP のような 1 バイト命令でも
   1    0   1  0000FD  FF   1   1   1    0   0    1    1     1     1    1    1   1  1  1 ; 2 バイト目を読む (値は捨てられる)
   1    1   1  0000FD  FF   1   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FD  FF   1   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FD  FF   1   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FD  FF   1   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FD  FF   1   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    0   0  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    1   0  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    0   0  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    1   0  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    0   0  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    1   0  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    0   0  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   1    1   0  0000FD  60   0   1   1    0   0    1    1     1     1    1    1   1  1  1
   (ここまでで NOP の実行は完了)

   // next op-code fetch
   1    0   1  0000FD  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FD  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FD  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FD  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FD  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FD  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FD  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FD  FF   1   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   1  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   1  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   0  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   0  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   0  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   0  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   0  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   0  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    0   0  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1
   1    1   0  0000FD  60   0   1   1    1   0    1    1     1     1    1    1   1  1  1

NOP 命令は 2 クロックサイクルで完了する命令です。なので上のかたまり(24行のブロック) 2 つで完了します (3 つめのブロックは次の命令をフェッチしていることを確認するための参考情報です)。

読み出しに関しては、24 行のブロックの最初の 8 行はアドレス変化期間 (6502 でいうところの Φ2=L 期間)、後の 16 行はデータバスアクセス期間(6502 の Φ2=H 期間)です。 書き込みの場合は最初と最後の 4 行で /WR=H となるため、バスサイクルの設計は 6502 とは根本的に異なるようです。

信号の意味を以下に説明します。(I) は HuC6280 への入力、(O) は HuC6280 からの出力信号を表します。