hamayanさん、TK303さん、お世話になっています。 神工大の藤澤です。いつも亀レスですみません。 TK303さんwrote: > >C プログラムの実行環境を設定するために、未初期化データ領域をゼロで > >初期化することと、ROM 上にある初期化データをRAM 上にコピーすることが > >必要です。このルーチンは標準ライブラリのライブラリ関数「__INITSCT」 > >として提供していますので、「(2 )初期設定(INIT)」に示すように、 > >初期設定ルーチンの中で「__INITSCT」関数を呼び出すだけで実現できます。 > まずはコンパイラ、リンカメーカー提供のマニュアルを(探してきて) > 見ることをお勧めします。 私は秋月のCコンパイラを使っています。手元にはこれしかありません。 そういえば、日立のコンパイラでは__INITSCを使うというのは、トラ技2001年 6月号に記載がありましたね。付録のCD-ROMを見たら日立のマニュアルにご 指摘の部分が明記されていました。しかし秋月のコンパイラマニュアルにはそ のような説明は1ページも無いのですが、スタック使用量一覧表というところに __INITSCTを発見しました。それじゃ動くの?とmain()関数の最初に_INITSC(); を入れてみたところ、すんなりコンパイルを通って動作してくれました。 hamayanさんwrote: > mov.l #(STARTOF D),er5 > で、Dセクションのアドレスを取得できます。 > 同様の手順で、 > mov.l #(STARTOF R),er6 > で、Rセクションの取得、 > mov.l #(SIZEOF D),er4 > で、Dセクションのサイズ、 > 後はこの二つのアドレス間で、データ−のコピーを行えば良いのです。 > クリアは、 > mov.l #(STARTOF B),er5 > mov.l #(SIZEOF B),er4 > でクリアするコードが書けると思います。 関数に頼らずC言語を使って手動で初期化する場合についても日立のマニュ アルに載っていたので、簡単に理解できました。 ところでアセンブラだとどうなるのか素人なりにトライしてみたのですが、 合っていますか?? MOV.L #(STARTOF B),ER5 MOV.L #(SIZEOF B),ER4 BCLR: MOV.B #H'00,@ER5 DEC.L #1,ER4 BNE BCLR MOV.L #(STARTOF D),ER5 MOV.L #(STARTOF R),ER6 MOV.L #(SIZEOF D),ER4 DTOR: MOV.B @ER5,R0H MOV.B R0H,@ER6 DEC.L #1,ER4 BNE DTOR P.S.液晶の文字化け云々はヌル文字の書き忘れでした。 (もはや記憶に無い??) --- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.427 / Virus Database: 240 - Release Date: 2002/12/06