• ベストアンサー

メモリマップについて

ハードを組む上でメモリマップが作られるのは分りましたが、ソフトから見るとベクターテーブルが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

  • マイコンのメモリマップについて

    マイコンに限った話ではないかとは思いますが、現在マイコンプログラムの勉強をしておりますが、マイコンのデータシートのメモリマップを見ると先頭番地からフラッシュメモリのマッピングがあり、その次に各種レジスタやRAMのマッピングがなされています。 (1)このメモリマップというものは論理アドレスと物理アドレスの対応表のようなものだと解釈しておりますが、この対応表自体はRAMの一部に格納されているのでしょうか? (2)例えばフラッシュメモリの物理アドレスが00~FFまであり、RAMの物理アドレスも00~FFだった場合で且つ フラッシュメモリの後ろにRAMのマップを作る場合、メモリマップの中の論理アドレスは00~2FFまでで物理アドレスはフラッシュメモリの部分は00~FF,RAMのブツリアドレスも00~FFになるという理解で良いですか? ひょっとするとかなり見当違いをしている質問かもしれません。 よろしくお願いします。

  • H8のダウンロードで、拡張しmapファイルでダウンロードすべきバイナリの番地はわかる?

    以前、H8マイコンでプログラムをしていたテスト機があるのですが、そのバイナリファイルは持っているのですが、どこの番地に書き込めば良いのかわからなくなってしまいました。確か0番地に書き込めば良かったと思ったのですが、うまく以後いているのか判断できません。開発は日立のHEW環境で行っています。メモリのどこに関数のポインタなどの情報が入っているmapファイルは持っているのですが、このファイルからbinファイルをどこに書き込めば良いかということはわかるのでしょうか?

  • googleマップの検索について

    みなさまのお知恵を。 Googleマップで検索するときの話です。 住所・番地で検索しますが、それに何とかビルとか、何とかマンションと番地のあとに付け足すと特定できなくなります。 番地以降に文字があるとダメなのか、それとも特別な入力(たとえば英語なら通るとか)であれば特定できるのか。。。 アドレス帳などを併用したりとか、マイマップで保存するにも建物名まで入れたい時があるのです。googleマップ上にすでに名前記入のある建物ばかりではないので。 これは仕様なのでしょうか。 どなたかお分かりですか?

  • 組み込みシステム メモリマップ割り当てについて

    職業としてH8マイコンなどを使った 組込みシステムを設計している人に質問です。 (1)変数の作成 変数(型は問わず)を作成する際、割り当てる領域の メモリマップのアドレスを指定して作成する、という話を聞きました。 趣味として組み込みを楽しむ分には気にすることではないらしいですが アドレスを指定する必要性は何でしょうか? (2)メモリマップの未使用領域 とあるプログラムで、ログをCPUのメインメモリではなく データ格納用の外部メモリ(EEPROM)に保存するという 仕様のプログラムがあり、ログを保存するメモリマップが 下記にようになっていました。 0h - 1Fh データA 20h - FFh 未使用 100h - 1000h データB 1001h - 1FFFh 未使用 2000h - 3FFFh データC ¦ 素人考えですが、ログデータならデータとデータの間に 「未使用」の領域を入れる必要はないのでは? 未使用領域の分だけ、多くログデータを保存できるでは? と思っています。 これには何か意図があるのでしょうか? また、ログに限らず(1)の変数やプログラムの使用領域を 割り当てる際も間に未使用領域を作った方が良いのでしょうか? 分かりずらい文章かと思いますが、ご回答宜しくお願い致します。

  • クリッカブルマップの下に隙間ができる

    クリッカブルマップ画像をテーブルに入れて その下にテーブルを入れるとその間に隙間が出来てしまいます。 下のHTMLですが、どこが間違っているのか教えて下さい。 <img src="img/index/h_01.jpg" width="700" height="90" border="0" usemap="#Map"><map name="Map"> <area shape="rect" coords="8,15,189,74" href="index.html"> </map> 困っているのでよろしくお願いします! 足りない部分があれば追加して記入しますのでご指摘ください。

  • Mac でクリッカブルマップ作成ソフトは?

    PowerMac G4 800 Dual 10.2.8。 クリッカブルマップ作成ソフトは、Windows 用なら:  Map Maker AZUKI  http://www.vector.co.jp/soft/win95/net/se097098.html 等がありますが、Mac 用のものってないのでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • Mac
  • グーグルマップをベクタライズしてCADに取り込みたい。

    グーグルマップをベクタライズしてCADに取り込みたい。 私は建築関係のものです。 基本的にautoCADに敷地図を取り込んでなぞっています。 しかし、広範囲になると面倒なので、wintopoのような画像をベクタライズするソフトを使おうと思いました。 地図はグーグルマップや、GISのものを使用しています。 2階調化してwintopoに取り組むのですが、元の地図がグレーの部分がかなりあったりするのでんかなかうまくいきません。 コンペに提出したりするので、きれいに取り込みたいです。 建築関連の方は特にどうしているのか教えていただけるとありがたいです。 うまくいく方法をおしえてください!!

  • ゲームプログラミングのマップ読み込みについて

    製作環境: C言語*DXライブラリ Microsoft Visual Studio Express 2012 現在、ぽちぽちとRPG製作を進めています。プログラミング初心者です。 タイトルの通り、マップの読み込みについて質問があります。 非常に大きなダンジョンのマップAがあります。 (ドラゴンクエスト3or4、のフィールド全体のマップ、くらいだと思ってください。大げさですけど) このマップA、ダンジョンなものですから普段使用しません。 とは言ってもその場面が来れば何度も使用することになります。 【A案】 あまりに大きいので、最初、いくつかに分割して読み込ませたらどうかなーと思ったのです。 0, 1, 2, 3 4, 5, 6, 7 8, 9,10.11 こんな感じに分けた上で、0に主人公がいた場合、0,1,4,5 辺りのみ読み込ませます。 このマップの表示には静的メモリを取りません。 ようするに60FPSなら、毎秒60回、主人公の周りのマップを読み込んでいます。 【B案】 一秒間に60回読み込むとか、ありえないでしょー。どう考えてもメモリ使いすぎでしょー。 と思ったので、次は最初から全て静的メモリにマップを確保しておいたらどうだろう。と思ったのです。 でもこれだと、ダンジョンのマップなものですから、全部確保したら使わない時にはメモリ無駄にしちゃうよな。と思ったのです。 【C案】 動的メモリとかいうものを使う、まだ学んでない関数があるらしい。 と、A,B,Cの三つを考えたのですが、実際、どれがどのくらいメモリを消費するのか分からないのです。 実際にC言語で巨大なマップを作ろう! と考えたときに、プログラミング初心者の私がチャレンジするのはどれが妥当でしょうか? もしくは別の考え方でこういうのがあるよ。と言ったものがありましたら教えてください。 よろしくお願いいたします。 ただし、巨大なマップ自体を作らない。と言った回答はなしでお願いします。

  • メモリはたくさん積んでいるのに。。

    こんにちは、いつもお世話になっております。 私のPCには、128MB+256MBのメモリが積んであります。 しかし、メッセンジャー1つと、 メールソフトと、HP作成ソフトを立ち上げただけで、 もうメモリ不足になります。 ものすごく不安定です。 ハードは40GBあり、使っているのは10GB程度です。 どうしたらメモリを有効に使えるのでしょうか? ご存知の方はどうか教えてください。

  • 【バイナリファイル】を十六進数化した場合の疑問です

    例えば、 「007Ah 番地を 01h にします。」 と記載されているとしたら、 Pat http://www.vector.co.jp/soft/dos/util/se013398.html 具体的に何処をどのように書き換えるのでしょうか。 稚拙な質問で申し訳ないです。

専門家に質問してみよう