• ベストアンサー

メモリマップについて

ハードを組む上でメモリマップが作られるのは分りましたが、ソフトから見るとベクターテーブルが0000H番地に必ずいます。このベクタテーブルって何ですか? またどのような働きがあるのですか?またベクターテーブルはプログラマーが組むものなんですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.3

Z80ですね。懐かしいです。 > 0000H番地にはROMがいるはずです。 ROMがいて構わないのです。ROMの中に割りこみ処理ルーチンのアドレス(あるいは割りこみ処理プログラム)を焼きこんでしまうのです。割りこみルーチンで使うワークはRAMに取ればいいので一向に構いません。 0000H番地を使う理由は「電源ON」時にパワーオンリセットで0000H番地に飛ばして「最初の処理」をやらせようと言う魂胆です。 次にZ80の割りこみはマスク不能割りこみ、モード0、モード1、モード2の4種類に分類されます。相手の機器に合わせてモードを選ぼうと言うわけですね。柔軟性がありますね。 マスク不能割りこみ:割りこみ処理ルーチンは0066H番地から始まる。 モード0割り込み:割りこみを受け付けると入出力装置から1バイトのサブルーチン呼び出し命令を受け取り、これをもとにサブルーチンを呼ぶ。このとき、飛べるのは、0000H、0008H、0010H、0018H、0020H、0028H、0030H、0038Hの8つのアドレスだけである。 モード1割りこみ:常に0038番地をCALLする。 モード2割り込み:割りこみを受け付けると外部装置から、1バイトのベクターを受け取りIレジスタ(ベクターテーブルの先頭を示す)と合成してベクターテーブルを参照し、そこから割りこみルーチンアドレスを得て、そこにジャンプ(CALL)する。 以上でお分かりのように、モードによっていろいろなやり方が用意されています。 それとZ80の場合、ベクターテーブルは0000Hでなく、モード2でかつ、Iレジの示す場所に存在しています。 一般論だけでなく、機種を限定しないと話がかみ合わないのがこの世界です。 Z80は寿命の長い、いいCPUです。頑張ってください。

sametan
質問者

お礼

有難う御座います。少しずつ分りかけてきました。z80なのでいろいろソフトは難しいです。勉強になりました。

その他の回答 (2)

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.2

何か他の質問と関連があるようですが、どれかわかりませんので、 ここの範囲で・・・。 CPUレベルの話だと思いますが。 ベクタテーブルは、CPUによって決まったアドレスにあることもあり,また先頭アドレス等を設定できることもあります。 その場合でも,例えばリセット信号による割り込みは ベクタ固定だったり、テーブルアドレスが固定であったりします。 ymmasayanさんは割り込み要因も含むとありますが、 私が知っているCPUではアドレスのみで、割り込み要因がテーブルのインデックスになっています。 まあ、この辺はCPUによって異なる部分ですので、 いろいろあるのでしょう。 また、ベクタテーブルは、例えばWindowsであれば、 OSやドライバ辺りで使うものですから, 一般のプログラマなら使わないとも言えますし, そういうソフトが設定する以上、プログラマが 設定するものとも言えます。 また、組込機器のようなシステムでは、そのレベルから プログラムとして組むことも珍しくはありません。 当然,プログラマがハードウェア割り込みに対応したプログラムを書くことになります。

sametan
質問者

お礼

有難う御座います。なかなか難しい質問になってしまったようです。 メモリマップを作ってみたんです。そしたらROMが0000H番地になったのです。 しかしソフトを勉強してみるとベクターテーブルが0000H番地にあります。 何故ソフトになると勝手にそんなものが出てくるのか不審に思いました。 それでベクターテーブルに疑問をもったわけです。 Z80のマイコンの電気回路を作成しました。その時にメモリマップが自動的に出来てしまったのです。 しかしソフトから見るとベクターテーブルがあるので何故なんだ?どうなるんだ? と思ったわけです。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

> このベクタテーブルって何ですか? またどのような働きがあるのですか? 割り込み処理を一括管理するために設けられているテーブルです。 割込み要因とその要因に対する割り込み処理ルーチンのスタートアドレスがペアで格納されています。 割込みが起こるとベクターテーブル経由で、該当の割り込み処理ルーチンへ飛びます。こうするとそれぞれの割り込み処理ルーチンの大きさや配置場所が自由になります。(ベクターテーブルの書き換えだけで済む) > またベクターテーブルはプログラマーが組むものなんですか? プログラマーは関知しません。システム管理者的な人が、どの割り込み処理プログラムをどのプログラム要因に結び付けるかを指定します。割り込み処理プログラムの実装段階という事です。

sametan
質問者

お礼

有難う御座います。大変期待していた回答をもらえた気がします。 しかし、ベクターテーブルの存在は分りましたが、その場合プログラムは CPUで変わってくるはずです。今Z80CPUで電気回路を作っています。 システムは簡単なものです。しかしなにぶん初心者なので単純にメモリマップを作ったのですが、0000H番地にはROMがいるはずです。 Z80での場合はベクターテーブルはどうなるのですか?

関連するQ&A