Sub CPU(8049)の解析

  • 投稿日:
  • 更新日:2015/02/09
  • by
  • カテゴリ:

もりやんさんのご協力で、8049のROMは何とかなりました。 ありがとうございます!

で、プログラムはもともと2kBしかないですし、それほど大きいものではないので、のんびり眺め始めています。 ただ、命令は1バイトまたは2バイトなので、コード密度はZ80より高いです。

けっこう原始的なプロセッサで、プログラムカウンタの変更が3つに分かれている(最上位ビット、中間3ビット、下位8ビット)など、扱いにくい点も多いプロセッサです。 そのため、たとえば割り込みの扱いがなかなかトリッキーなコードになっています。

  • 割り込みベクタ(0x003)から割り込み処理ルーチン(0x071)に飛ぶ
  • 別ページにジャンプ(0x0164)し、バスから6ビットの値を入力して、それに応じて0x100~0x13fからのベクタテーブルを引いて、0x140~0x162にジャンプする
  • さらにそこから本来の処理ルーチンに飛ぶ

割り込みを起こすバス信号で意味のあるのは、以下のもののみです。 コロンの前が入力信号、後が処理ルーチンのアドレスです。

  • 0x01: 0x51d
  • 0x02: 0x1b1
  • 0x06: 0x4a2
  • 0x0a: 0x167 RxRDY入力ハンドリングらしい
  • 0x0c: 0x173
  • 0x19: 0x617
  • 0x1a: 0x624
  • 0x1d, 0x3d: 0x725
  • 0x1e, 0x3e: 0x720
  • 0x1f: 0x629
  • 0x38: 0x700
  • 0x39: 0x716
  • 0x3a: 0x71b

データメモリ(0x20~0x7f)の利用状況はまだ把握し切れていません。 初期化時には以下が行われます。

  • 0x20~0x7fをゼロクリア
  • 0x40, 0x45, 0x5eに0x40を格納
  • 0x63~0x6eの12バイトには、プログラムメモリの0x7e8~0x7f3をコピー(実際には0x6fの値によるが、ゼロのため)

アドレッシングモードが豊富ではないので、上記のようなトリッキーなところだけ気をつければ、読むこと自体はそれほど大変ではないみたいです。 書くのは大変でしょうけど。


こちらもよく読まれています