OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

メモリマップについて

  • 暇なときにでも
  • 質問No.149851
  • 閲覧数192
  • ありがとう数6
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 50% (7/14)

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

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

  • 回答No.3
レベル14

ベストアンサー率 30% (2593/8599)

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

お礼率 50% (7/14)

有難う御座います。少しずつ分りかけてきました。z80なのでいろいろソフトは難しいです。勉強になりました。
投稿日時 - 2001-10-16 11:32:16
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル14

ベストアンサー率 30% (2593/8599)

> このベクタテーブルって何ですか? またどのような働きがあるのですか? 割り込み処理を一括管理するために設けられているテーブルです。 割込み要因とその要因に対する割り込み処理ルーチンのスタートアドレスがペアで格納されています。 割込みが起こるとベクターテーブル経由で、該当の割り込み処理ルーチンへ飛びます。こうするとそれぞれの割り込み処理ルーチンの大きさや配置場所が自由になります。(ベクターテー ...続きを読む
> このベクタテーブルって何ですか? またどのような働きがあるのですか?

割り込み処理を一括管理するために設けられているテーブルです。
割込み要因とその要因に対する割り込み処理ルーチンのスタートアドレスがペアで格納されています。
割込みが起こるとベクターテーブル経由で、該当の割り込み処理ルーチンへ飛びます。こうするとそれぞれの割り込み処理ルーチンの大きさや配置場所が自由になります。(ベクターテーブルの書き換えだけで済む)

> またベクターテーブルはプログラマーが組むものなんですか?

プログラマーは関知しません。システム管理者的な人が、どの割り込み処理プログラムをどのプログラム要因に結び付けるかを指定します。割り込み処理プログラムの実装段階という事です。
お礼コメント
sametan

お礼率 50% (7/14)

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

  • 回答No.2
レベル13

ベストアンサー率 34% (574/1662)

何か他の質問と関連があるようですが、どれかわかりませんので、 ここの範囲で・・・。 CPUレベルの話だと思いますが。 ベクタテーブルは、CPUによって決まったアドレスにあることもあり,また先頭アドレス等を設定できることもあります。 その場合でも,例えばリセット信号による割り込みは ベクタ固定だったり、テーブルアドレスが固定であったりします。 ymmasayanさんは割り込み要因も含むと ...続きを読む
何か他の質問と関連があるようですが、どれかわかりませんので、
ここの範囲で・・・。
CPUレベルの話だと思いますが。

ベクタテーブルは、CPUによって決まったアドレスにあることもあり,また先頭アドレス等を設定できることもあります。
その場合でも,例えばリセット信号による割り込みは
ベクタ固定だったり、テーブルアドレスが固定であったりします。

ymmasayanさんは割り込み要因も含むとありますが、
私が知っているCPUではアドレスのみで、割り込み要因がテーブルのインデックスになっています。
まあ、この辺はCPUによって異なる部分ですので、
いろいろあるのでしょう。

また、ベクタテーブルは、例えばWindowsであれば、
OSやドライバ辺りで使うものですから,
一般のプログラマなら使わないとも言えますし,
そういうソフトが設定する以上、プログラマが
設定するものとも言えます。

また、組込機器のようなシステムでは、そのレベルから
プログラムとして組むことも珍しくはありません。
当然,プログラマがハードウェア割り込みに対応したプログラムを書くことになります。
お礼コメント
sametan

お礼率 50% (7/14)

有難う御座います。なかなか難しい質問になってしまったようです。
メモリマップを作ってみたんです。そしたらROMが0000H番地になったのです。
しかしソフトを勉強してみるとベクターテーブルが0000H番地にあります。
何故ソフトになると勝手にそんなものが出てくるのか不審に思いました。
それでベクターテーブルに疑問をもったわけです。
Z80のマイコンの電気回路を作成しました。その時にメモリマップが自動的に出来てしまったのです。
しかしソフトから見るとベクターテーブルがあるので何故なんだ?どうなるんだ?
と思ったわけです。
投稿日時 - 2001-10-15 09:21:55
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ