[16 bit Free CPU のトップページ||シミュレーション, 論理合成環境のページ]

アドレス空間を変換する C プログラムの書き方, コンパイル方法

目次

ファイル構成

map_data 関数の記述

プログラムのコンパイル


ファイル構成

[next | top | previous]

シミュレーション環境のディレクトリ( 配布ファイルの sim/ 以下 ) のうち, c/ のディレクトリはアドレス空間変換のための C プログラムが置かれます. このディレクトリにはファイルがたくさんあるように見えますが, 理解する必要があるのは次のものだけです.

  1. [ dataread.c ] メイン関数があります.
  2. [ global.h ] Sfl_mem という構造体の定義があります.
  3. [ map_data.h ] アドレスの変換を行う関数のプロトタイプです.
  4. [ map_data.c ] アドレスの変換を行う関数の本体です. プロトタイプに従ってこの関数を記述してください.

map_data 関数の記述

[next | top | previous]

アドレス空間変換のプログラムをコンパイルするには, map_data 関数を応募者の アーキテクチャにあわせて記述する必要があります. map_data 関数の役割は標準アドレス空間とビット位置の組を, SFL のメモリのメモリユニット番号とそのメモリユニットのアドレスの組に 変換するというものです. 具体的には map_data 関数のプロトタイプは次のように定義されています.


Sfl_mem map_data ( long adr, int bit_no ) ;

第 1 引数の adr は標準アドレス空間でのアドレスが整数で渡されます. 第 2 引数の bit_no はそのアドレスにおけるワードのビット位置が渡されます. この 2 つの値をもとに, map_data 関数は Sfl_mem 構造体を返します. Sfl_mem 構造体は次のように定義されています.


typedef struct sfl_mem {
  int unit_no;
  long adr;
} Sfl_mem ;

unit_no は メモリユニット番号を表し, memmod.sfl の中の munit0 - munit31 にそれぞれ対応します. また, adr はそれぞれのメモリユニットにおけるアドレスを表します. この構造体をもとにアドレス変換を行い, SECONDS のスクリプトを出力します.

プログラムのコンパイル

[next | top | previous]

map_data 関数が記述できたら, プログラムをコンパイルします. コンパイルの手順は,


./configure
make

です. なお, コンパイル手順には GNU の make が必要です. これによって dataread というプログラムができます. なお, このプログラムでは 1 行あたりの扱える文字数がデフォルトでは 512 文字 までに制限されています. もしこれ以上の文字数が 1 行に含まれるファイルを扱う場合は, configure に '--with-maxchar=2048' というオプションをつけて実行し, make しなおすと 制限を変更できます.

[16 bit Free CPU のトップページ||シミュレーション, 論理合成環境のページ]


Yoshiki NAKANE
Last modified: Sun Dec 19 21:10:36 1999