KOZOS (5)
とりあえず追加したナニを git add しとく。
$ git add Makefile defines.h ld.scr lib.c lib.h main.c serial.c serial.h startup.s vector.c $ git commit -m '1st step'
中身を確認
H8 は 0x00000 から 0x000FF までの番地には割り込みベクタのテーブルが配置されているとの事。たしかに vector.c で
/* * 割込みベクタの設定. * リンカ・スクリプトの定義により,先頭番地に配置される. */ void (*vectors[])(void) = { start, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, };
な定義があったりコメントがあったり。リンカ・スクリプトを見てみるに
SECTIONS { . = 0x0; .vectors : { vector.o(.data) } .text : { *(.text) }
みたいな記述もあります。vectors というポインタ配列は 4 bytes な要素が 64 で、指を折って数えてみるに、たしかに 0x0 から 0xff までですな。
しかもリンカ・スクリプトにある通り、0x00100 番地がプログラムの先頭との事。
あ、そーゆー意味では割り込みベクタ 0 がスタートアップルーチンになる模様。なので、startup.s で定義されてる _start がその入口になるのか。
そういえば
h8 なマニュアルも確認しとかないとマズいよな。というか実機が届いてどれだけハマるのか、色々な意味で本当に微妙。