こんばんは 落合です。 H8/3664でプログラム作ってます。過去のログに無いようでしたので送信しました。 −gcc-2.95.2上での話です。− H8tinyシリーズはH8/300Hの他のCPUと違って、実効アドレスが16ビットとコンパクトになっています。 割り込みベクタも全て16ビット幅です。マニュアルに具体的な記載が見あたらないのですが、jsr命令で も同様に2バイトの戻りアドレスがスタックに詰まれると思います。そうすると、jsr先の関数で引数を参照 した際に、コンパイラは戻りアドレスを4バイトと想定して、スタックフレームのオフセットを計算してしまう ので、正しく引数を取得できないようです。 引数が(32ビット幅以下で)3個以下の場合はレジスタER0,ER1,ER2にそれぞれ第1〜3の引数が入ってjsrされます ので問題ありません。4個を超えると超えた分はスタックに詰まれてからjsrされます。 sub.l er4,er4 add.b #4,r4l mov.l er4,@-er7 ; 第4引数(=4)(スタックに) mov.l #_count,er2 ; 第3引数(=&count) sub.l er1,er1 ; 第2引数(=0) sub.l er0,er0 ; 第1引数(=0) jsr @_subroutine ; 関数CALL _subroutine: push.l er6 mov.l er7,er6 ... mov.l @(8,er6),er4 ; 第4引数の取り出し(not equal 4?) 上記の最後の行だとうまく取り出せないと思うのですが、正しくは mov.l @(6,er6),er4 ; 第4引数の取り出し ではありませんか? もしくは私のコンパイルオプションが違っているのでしょうか? CFLAGS = -mh -mrelax -mint32 -DH8_3664 -O -Wall Tiny用のコンパイルオプションってないですよね? 動かしているのは binutils-2.11.2, gcc-2.95.2/linux です。 # # 別件で、I2Cもうまく動いてくれません。(+_+) やっぱり、TinyのI2Cはダメかぁ? -- Masahiro OCHIAI http://strawberry-linux.com/h8/